diff --git a/pages/index/index.vue b/pages/index/index.vue index eb7ee36..5663fb8 100644 --- a/pages/index/index.vue +++ b/pages/index/index.vue @@ -22,7 +22,12 @@ - + + + 中断连接 + + + - + @@ -66,6 +71,8 @@ TEXT: '', historyTextList: [], // 历史会话信息,由于最大token12000,可以结合实际使用,进行移出 tempRes: '', // 临时答复保存 + socketing: false, // 是否正在接收 + showStop: false, // 是否显示中断按钮 scrollTop: 0, shouldScrollToBottom: true } @@ -102,7 +109,7 @@ // this.c_content = n; if (this.timer) clearInterval(this.timer); let cl = this.c_content.length; - let nc = this.n_content.split('') + let nc = this.n_content.split(''); this.timer = setInterval(() => { if (cl < nc.length) { this.c_content += nc[cl]; @@ -113,6 +120,8 @@ }) }) } else { + // console.log(this.socketing==false, cl == nc.length); + if (this.socketing == false) this.showStop = false; clearInterval(this.timer); this.$nextTick(() => { uni.pageScrollTo({ @@ -121,7 +130,7 @@ }) } }, 60) - } + }, }, methods: { copyText(str) { @@ -255,6 +264,26 @@ this.ajax.loadText = '正在获取消息'; } }, + // 关闭连接 + closeSocketTask() { + try { + clearInterval(this.timer); + this.talkList[this.talkList.length - 1].content = this.c_content + ''; + // console.log(this.talkList[this.talkList.length - 1].content); + // this.c_content = ''; + // this.n_content = ''; + this.socketTask.close({ + code: 500, // APP端存在BUG,正常关闭的code为1000,无法正常关闭,需要将code换为其他值 + complete: (res)=>{ + this.showStop = false; + console.log('主动断开', res); + this.wsLiveFlag = false; + } + }) + } catch (e) { + //TODO handle the exception + } + }, // 发送信息 send() { if (!this.content) { @@ -264,23 +293,7 @@ }) return; } - try { - clearInterval(this.timer); - this.talkList[this.talkList.length - 1].content = this.c_content + ''; - this.c_content = ''; - this.n_content = ''; - this.socketTask.close({ - success: (res) => { - console.log('关闭成功', res); - this.wsLiveFlag = false; - }, - fail(err) { - console.log('关闭失败', err) - } - }) - } catch (e) { - //TODO handle the exception - } + this.showStop = true; // 将当前发送信息 添加到消息列表。 let data = { "id": new Date().getTime(), @@ -289,8 +302,6 @@ "pic": "/static/avatar.png" } this.TEXT = this.content; - this.n_content = ''; - this.c_content = ''; this.talkList.push(data); this.talkList.push({ "id": new Date().getTime(), @@ -298,6 +309,9 @@ "type": 2, "pic": "/static/avatar.png" }); + this.n_content = ''; + this.c_content = ''; + this.socketing = true; // return ; this.$nextTick(() => { // 清空内容框中的内容 @@ -316,7 +330,7 @@ let realThis = this; this.socketTask = uni.connectSocket({ //url: encodeURI(encodeURI(myUrl).replace(/\+/g, '%2B')), - url: 'wss://chat.lihaink.cn/chat', + url: 'wss://chat.lihaink.cn/chat' + '?timestamp=' + Date.now(), method: 'GET', success: res => { console.log(res, "ws成功连接...") @@ -351,14 +365,14 @@ // } // } // }; - if (this.historyTextList.length > 9) this.params = JSON.parse(JSON.stringify(this.historyTextList.splice(-9))); + if (this.historyTextList.length > 9) this.params = JSON.parse(JSON.stringify(this.historyTextList + .splice(-9))); else this.params = JSON.parse(JSON.stringify(this.historyTextList)); - console.log(this.params); this.isSurpass(); realThis.socketTask.send({ // 发送消息,,都用uni的官方版本 data: JSON.stringify(this.params), success() { - console.log('第一帧发送成功') + console.log('第一帧发送成功'); } }); }); @@ -368,6 +382,7 @@ console.log('收到API返回的内容:', res.data); let obj = JSON.parse(res.data) // console.log("我打印的"+obj.payload); + if(!realThis.wsLiveFlag) return ; let dataArray = obj.payload.choices.text; for (let i = 0; i < dataArray.length; i++) { this.talkList[this.talkList.length - 1].content += dataArray[i].content; @@ -377,6 +392,7 @@ let temp = JSON.parse(res.data) // console.log("0726",temp.header.code) if (temp.header.code !== 0) { + this.socketing = false; console.log(`${temp.header.code}:${temp.message}`); realThis.socketTask.close({ success(res) { @@ -390,6 +406,7 @@ } if (temp.header.code === 0) { if (res.data && temp.header.status === 2) { + this.socketing = false; this.historyTextList.push({ "role": "assistant", "content": this.tempRes @@ -409,14 +426,14 @@ }) }, // 判断文字是否超过五千字 - isSurpass(){ + isSurpass() { let sum = this.params.reduce((accumulator, currentValue) => { return accumulator + currentValue.content; }, ''); - if(sum.length>5000){ + if (sum.length > 5000) { this.params.shift(); return this.isSurpass(); - }else { + } else { console.log(`本次发送${sum.length}字`); return sum; } @@ -456,6 +473,7 @@ this.getMerHistory(); } }, + // 当滑动页面时,收起键盘,与微信聊天效果保持一致 touchmove(e) { uni.hideKeyboard() } @@ -675,4 +693,12 @@ // transform: translateY(0); /* 初始化 transform 属性 */ // transition: transform 0.3s ease; /* 添加过渡效果 */ } + + .downsocket { + display: flex; + justify-content: center; + align-items: center; + background-color: #2573fb !important; + color: #fff !important; + } \ No newline at end of file diff --git a/unpackage/dist/dev/app-plus/app-service.js b/unpackage/dist/dev/app-plus/app-service.js index 029194d..5b63fca 100644 --- a/unpackage/dist/dev/app-plus/app-service.js +++ b/unpackage/dist/dev/app-plus/app-service.js @@ -7,7 +7,7 @@ /***/ (function(module, exports, __webpack_require__) { "use strict"; -eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ 1);\nvar _defineProperty2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/defineProperty */ 2));\n__webpack_require__(/*! uni-pages */ 6);\nvar _App = _interopRequireDefault(__webpack_require__(/*! ./App */ 205));\nvar _vue = _interopRequireDefault(__webpack_require__(/*! vue */ 208));\n__webpack_require__(/*! ./uni.promisify.adaptor */ 209);\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n_vue.default.config.productionTip = false;\n_App.default.mpType = 'app';\nvar app = new _vue.default(_objectSpread({}, _App.default));\napp.$mount();//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vbWFpbi5qcyJdLCJuYW1lcyI6WyJWdWUiLCJjb25maWciLCJwcm9kdWN0aW9uVGlwIiwiQXBwIiwibXBUeXBlIiwiYXBwIiwiJG1vdW50Il0sIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFBbUI7QUFHbkI7QUFDQTtBQUFnQztBQUFBO0FBQ2hDQSxZQUFHLENBQUNDLE1BQU0sQ0FBQ0MsYUFBYSxHQUFHLEtBQUs7QUFDaENDLFlBQUcsQ0FBQ0MsTUFBTSxHQUFHLEtBQUs7QUFDbEIsSUFBTUMsR0FBRyxHQUFHLElBQUlMLFlBQUcsbUJBQ2RHLFlBQUcsRUFDTjtBQUNGRSxHQUFHLENBQUNDLE1BQU0sRUFBRSIsImZpbGUiOiIwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICd1bmktcGFnZXMnO2ltcG9ydCBBcHAgZnJvbSAnLi9BcHAnXG5cblxuaW1wb3J0IFZ1ZSBmcm9tICd2dWUnXG5pbXBvcnQgJy4vdW5pLnByb21pc2lmeS5hZGFwdG9yJ1xuVnVlLmNvbmZpZy5wcm9kdWN0aW9uVGlwID0gZmFsc2VcbkFwcC5tcFR5cGUgPSAnYXBwJ1xuY29uc3QgYXBwID0gbmV3IFZ1ZSh7XG4gIC4uLkFwcFxufSlcbmFwcC4kbW91bnQoKVxuXG5cblxuXG5cblxuXG5cblxuXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///0\n"); +eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ 1);\nvar _defineProperty2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/defineProperty */ 2));\n__webpack_require__(/*! uni-pages */ 6);\nvar _App = _interopRequireDefault(__webpack_require__(/*! ./App */ 213));\nvar _vue = _interopRequireDefault(__webpack_require__(/*! vue */ 216));\n__webpack_require__(/*! ./uni.promisify.adaptor */ 217);\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n_vue.default.config.productionTip = false;\n_App.default.mpType = 'app';\nvar app = new _vue.default(_objectSpread({}, _App.default));\napp.$mount();//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vbWFpbi5qcyJdLCJuYW1lcyI6WyJWdWUiLCJjb25maWciLCJwcm9kdWN0aW9uVGlwIiwiQXBwIiwibXBUeXBlIiwiYXBwIiwiJG1vdW50Il0sIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFBbUI7QUFHbkI7QUFDQTtBQUFnQztBQUFBO0FBQ2hDQSxZQUFHLENBQUNDLE1BQU0sQ0FBQ0MsYUFBYSxHQUFHLEtBQUs7QUFDaENDLFlBQUcsQ0FBQ0MsTUFBTSxHQUFHLEtBQUs7QUFDbEIsSUFBTUMsR0FBRyxHQUFHLElBQUlMLFlBQUcsbUJBQ2RHLFlBQUcsRUFDTjtBQUNGRSxHQUFHLENBQUNDLE1BQU0sRUFBRSIsImZpbGUiOiIwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICd1bmktcGFnZXMnO2ltcG9ydCBBcHAgZnJvbSAnLi9BcHAnXG5cblxuaW1wb3J0IFZ1ZSBmcm9tICd2dWUnXG5pbXBvcnQgJy4vdW5pLnByb21pc2lmeS5hZGFwdG9yJ1xuVnVlLmNvbmZpZy5wcm9kdWN0aW9uVGlwID0gZmFsc2VcbkFwcC5tcFR5cGUgPSAnYXBwJ1xuY29uc3QgYXBwID0gbmV3IFZ1ZSh7XG4gIC4uLkFwcFxufSlcbmFwcC4kbW91bnQoKVxuXG5cblxuXG5cblxuXG5cblxuXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///0\n"); /***/ }), /* 1 */ @@ -149,7 +149,7 @@ __definePage('pages/index/index', function () { return Vue.extend(__webpack_require__(/*! pages/index/index.vue?mpType=page */ 7).default); }); __definePage('pages/index/chat', function () { - return Vue.extend(__webpack_require__(/*! pages/index/chat.vue?mpType=page */ 200).default); + return Vue.extend(__webpack_require__(/*! pages/index/chat.vue?mpType=page */ 208).default); }); /***/ }), @@ -161,7 +161,7 @@ __definePage('pages/index/chat', function () { /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _index_vue_vue_type_template_id_2be84a3c_mpType_page__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index.vue?vue&type=template&id=2be84a3c&mpType=page */ 8);\n/* harmony import */ var _index_vue_vue_type_script_lang_js_mpType_page__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./index.vue?vue&type=script&lang=js&mpType=page */ 16);\n/* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _index_vue_vue_type_script_lang_js_mpType_page__WEBPACK_IMPORTED_MODULE_1__) if([\"default\"].indexOf(__WEBPACK_IMPORT_KEY__) < 0) (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return _index_vue_vue_type_script_lang_js_mpType_page__WEBPACK_IMPORTED_MODULE_1__[key]; }) }(__WEBPACK_IMPORT_KEY__));\n/* harmony import */ var _HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/vue-loader/lib/runtime/componentNormalizer.js */ 15);\n\nvar renderjs\n\n\n\n\n/* normalize component */\n\nvar component = Object(_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _index_vue_vue_type_script_lang_js_mpType_page__WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _index_vue_vue_type_template_id_2be84a3c_mpType_page__WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _index_vue_vue_type_template_id_2be84a3c_mpType_page__WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null,\n false,\n _index_vue_vue_type_template_id_2be84a3c_mpType_page__WEBPACK_IMPORTED_MODULE_0__[\"components\"],\n renderjs\n)\n\ncomponent.options.__file = \"pages/index/index.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbbnVsbF0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBNkg7QUFDN0g7QUFDb0U7QUFDTDs7O0FBRy9EO0FBQ21LO0FBQ25LLGdCQUFnQiw2S0FBVTtBQUMxQixFQUFFLHNGQUFNO0FBQ1IsRUFBRSwyRkFBTTtBQUNSLEVBQUUsb0dBQWU7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsK0ZBQVU7QUFDWjtBQUNBOztBQUVBO0FBQ2UsZ0YiLCJmaWxlIjoiNy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zLCByZWN5Y2xhYmxlUmVuZGVyLCBjb21wb25lbnRzIH0gZnJvbSBcIi4vaW5kZXgudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTJiZTg0YTNjJm1wVHlwZT1wYWdlXCJcbnZhciByZW5kZXJqc1xuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9pbmRleC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmbXBUeXBlPXBhZ2VcIlxuZXhwb3J0ICogZnJvbSBcIi4vaW5kZXgudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJm1wVHlwZT1wYWdlXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uLy4uLy4uL0hCdWlsZGVyWC9wbHVnaW5zL3VuaWFwcC1jbGkvbm9kZV9tb2R1bGVzL0BkY2xvdWRpby92dWUtY2xpLXBsdWdpbi11bmkvcGFja2FnZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgZmFsc2UsXG4gIGNvbXBvbmVudHMsXG4gIHJlbmRlcmpzXG4pXG5cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicGFnZXMvaW5kZXgvaW5kZXgudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _index_vue_vue_type_template_id_2be84a3c_mpType_page__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index.vue?vue&type=template&id=2be84a3c&mpType=page */ 8);\n/* harmony import */ var _index_vue_vue_type_script_lang_js_mpType_page__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./index.vue?vue&type=script&lang=js&mpType=page */ 31);\n/* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _index_vue_vue_type_script_lang_js_mpType_page__WEBPACK_IMPORTED_MODULE_1__) if([\"default\"].indexOf(__WEBPACK_IMPORT_KEY__) < 0) (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return _index_vue_vue_type_script_lang_js_mpType_page__WEBPACK_IMPORTED_MODULE_1__[key]; }) }(__WEBPACK_IMPORT_KEY__));\n/* harmony import */ var _HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/vue-loader/lib/runtime/componentNormalizer.js */ 15);\n\nvar renderjs\n\n\n\n\n/* normalize component */\n\nvar component = Object(_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _index_vue_vue_type_script_lang_js_mpType_page__WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _index_vue_vue_type_template_id_2be84a3c_mpType_page__WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _index_vue_vue_type_template_id_2be84a3c_mpType_page__WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null,\n false,\n _index_vue_vue_type_template_id_2be84a3c_mpType_page__WEBPACK_IMPORTED_MODULE_0__[\"components\"],\n renderjs\n)\n\ncomponent.options.__file = \"pages/index/index.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbbnVsbF0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBNkg7QUFDN0g7QUFDb0U7QUFDTDs7O0FBRy9EO0FBQ21LO0FBQ25LLGdCQUFnQiw2S0FBVTtBQUMxQixFQUFFLHNGQUFNO0FBQ1IsRUFBRSwyRkFBTTtBQUNSLEVBQUUsb0dBQWU7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsK0ZBQVU7QUFDWjtBQUNBOztBQUVBO0FBQ2UsZ0YiLCJmaWxlIjoiNy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zLCByZWN5Y2xhYmxlUmVuZGVyLCBjb21wb25lbnRzIH0gZnJvbSBcIi4vaW5kZXgudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTJiZTg0YTNjJm1wVHlwZT1wYWdlXCJcbnZhciByZW5kZXJqc1xuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9pbmRleC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmbXBUeXBlPXBhZ2VcIlxuZXhwb3J0ICogZnJvbSBcIi4vaW5kZXgudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJm1wVHlwZT1wYWdlXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uLy4uLy4uL0hCdWlsZGVyWC9wbHVnaW5zL3VuaWFwcC1jbGkvbm9kZV9tb2R1bGVzL0BkY2xvdWRpby92dWUtY2xpLXBsdWdpbi11bmkvcGFja2FnZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgZmFsc2UsXG4gIGNvbXBvbmVudHMsXG4gIHJlbmRlcmpzXG4pXG5cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicGFnZXMvaW5kZXgvaW5kZXgudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7\n"); /***/ }), /* 8 */ @@ -202,6 +202,9 @@ var components try { components = { bingMath: __webpack_require__(/*! @/components/bing-math/bing-math.vue */ 10).default, + uniTransition: + __webpack_require__(/*! @/uni_modules/uni-transition/components/uni-transition/uni-transition.vue */ 16) + .default, } } catch (e) { if ( @@ -381,18 +384,49 @@ var render = function () { ] ), _c( - "view", - { staticClass: _vm._$s(14, "sc", "box-2"), attrs: { _i: 14 } }, + "uni-transition", + { + attrs: { + "custom-class": "box-2", + "mode-class": "slide-left", + show: _vm.showStop, + _i: 14, + }, + }, [ _c( "view", { staticClass: _vm._$s(15, "sc", "flex_col"), attrs: { _i: 15 } }, + [ + _c("view", { + staticClass: _vm._$s(16, "sc", "flex_grow content downsocket"), + attrs: { _i: 16 }, + on: { click: _vm.closeSocketTask }, + }), + ] + ), + ] + ), + _c( + "uni-transition", + { + attrs: { + "custom-class": "box-2", + "mode-class": "slide-right", + show: !_vm.showStop, + _i: 17, + }, + }, + [ + _c( + "view", + { staticClass: _vm._$s(18, "sc", "flex_col"), attrs: { _i: 18 } }, [ _c( "view", { - staticClass: _vm._$s(16, "sc", "flex_grow"), - attrs: { _i: 16 }, + staticClass: _vm._$s(19, "sc", "flex_grow"), + attrs: { _i: 19 }, }, [ _c("input", { @@ -404,9 +438,9 @@ var render = function () { expression: "content", }, ], - staticClass: _vm._$s(17, "sc", "content"), - attrs: { _i: 17 }, - domProps: { value: _vm._$s(17, "v-model", _vm.content) }, + staticClass: _vm._$s(20, "sc", "content"), + attrs: { _i: 20 }, + domProps: { value: _vm._$s(20, "v-model", _vm.content) }, on: { focus: _vm.focus, confirm: _vm.send, @@ -421,15 +455,16 @@ var render = function () { ] ), _c("button", { - staticClass: _vm._$s(18, "sc", "send"), - attrs: { _i: 18 }, + staticClass: _vm._$s(21, "sc", "send"), + attrs: { _i: 21 }, on: { click: _vm.send }, }), ] ), ] ), - ] + ], + 1 ) } var recyclableRender = false @@ -663,28 +698,106 @@ function normalizeComponent ( /***/ }), /* 16 */ -/*!************************************************************************************!*\ - !*** D:/里海数字乡村/xunfeiAi/pages/index/index.vue?vue&type=script&lang=js&mpType=page ***! - \************************************************************************************/ +/*!**************************************************************************************************!*\ + !*** D:/里海数字乡村/xunfeiAi/uni_modules/uni-transition/components/uni-transition/uni-transition.vue ***! + \**************************************************************************************************/ /*! no static exports found */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _HBuilderX_plugins_uniapp_cli_node_modules_babel_loader_lib_index_js_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_preprocess_loader_index_js_ref_7_1_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_uni_app_loader_using_components_js_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_script_lang_js_mpType_page__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../HBuilderX/plugins/uniapp-cli/node_modules/babel-loader/lib!../../../../HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/webpack-preprocess-loader??ref--7-1!../../../../HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/webpack-uni-app-loader/using-components.js!../../../../HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/vue-loader/lib??vue-loader-options!./index.vue?vue&type=script&lang=js&mpType=page */ 17);\n/* harmony import */ var _HBuilderX_plugins_uniapp_cli_node_modules_babel_loader_lib_index_js_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_preprocess_loader_index_js_ref_7_1_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_uni_app_loader_using_components_js_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_script_lang_js_mpType_page__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_HBuilderX_plugins_uniapp_cli_node_modules_babel_loader_lib_index_js_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_preprocess_loader_index_js_ref_7_1_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_uni_app_loader_using_components_js_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_script_lang_js_mpType_page__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _HBuilderX_plugins_uniapp_cli_node_modules_babel_loader_lib_index_js_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_preprocess_loader_index_js_ref_7_1_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_uni_app_loader_using_components_js_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_script_lang_js_mpType_page__WEBPACK_IMPORTED_MODULE_0__) if([\"default\"].indexOf(__WEBPACK_IMPORT_KEY__) < 0) (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return _HBuilderX_plugins_uniapp_cli_node_modules_babel_loader_lib_index_js_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_preprocess_loader_index_js_ref_7_1_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_uni_app_loader_using_components_js_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_script_lang_js_mpType_page__WEBPACK_IMPORTED_MODULE_0__[key]; }) }(__WEBPACK_IMPORT_KEY__));\n /* harmony default export */ __webpack_exports__[\"default\"] = (_HBuilderX_plugins_uniapp_cli_node_modules_babel_loader_lib_index_js_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_preprocess_loader_index_js_ref_7_1_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_uni_app_loader_using_components_js_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_script_lang_js_mpType_page__WEBPACK_IMPORTED_MODULE_0___default.a); //# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbbnVsbF0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQTRpQixDQUFnQixza0JBQUcsRUFBQyIsImZpbGUiOiIxNi5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vLi4vLi4vSEJ1aWxkZXJYL3BsdWdpbnMvdW5pYXBwLWNsaS9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcyEuLi8uLi8uLi8uLi9IQnVpbGRlclgvcGx1Z2lucy91bmlhcHAtY2xpL25vZGVfbW9kdWxlcy9AZGNsb3VkaW8vdnVlLWNsaS1wbHVnaW4tdW5pL3BhY2thZ2VzL3dlYnBhY2stcHJlcHJvY2Vzcy1sb2FkZXIvaW5kZXguanM/P3JlZi0tNy0xIS4uLy4uLy4uLy4uL0hCdWlsZGVyWC9wbHVnaW5zL3VuaWFwcC1jbGkvbm9kZV9tb2R1bGVzL0BkY2xvdWRpby92dWUtY2xpLXBsdWdpbi11bmkvcGFja2FnZXMvd2VicGFjay11bmktYXBwLWxvYWRlci91c2luZy1jb21wb25lbnRzLmpzIS4uLy4uLy4uLy4uL0hCdWlsZGVyWC9wbHVnaW5zL3VuaWFwcC1jbGkvbm9kZV9tb2R1bGVzL0BkY2xvdWRpby92dWUtY2xpLXBsdWdpbi11bmkvcGFja2FnZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2luZGV4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZtcFR5cGU9cGFnZVwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uL0hCdWlsZGVyWC9wbHVnaW5zL3VuaWFwcC1jbGkvbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanMhLi4vLi4vLi4vLi4vSEJ1aWxkZXJYL3BsdWdpbnMvdW5pYXBwLWNsaS9ub2RlX21vZHVsZXMvQGRjbG91ZGlvL3Z1ZS1jbGktcGx1Z2luLXVuaS9wYWNrYWdlcy93ZWJwYWNrLXByZXByb2Nlc3MtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTctMSEuLi8uLi8uLi8uLi9IQnVpbGRlclgvcGx1Z2lucy91bmlhcHAtY2xpL25vZGVfbW9kdWxlcy9AZGNsb3VkaW8vdnVlLWNsaS1wbHVnaW4tdW5pL3BhY2thZ2VzL3dlYnBhY2stdW5pLWFwcC1sb2FkZXIvdXNpbmctY29tcG9uZW50cy5qcyEuLi8uLi8uLi8uLi9IQnVpbGRlclgvcGx1Z2lucy91bmlhcHAtY2xpL25vZGVfbW9kdWxlcy9AZGNsb3VkaW8vdnVlLWNsaS1wbHVnaW4tdW5pL3BhY2thZ2VzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9pbmRleC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmbXBUeXBlPXBhZ2VcIiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///16\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _uni_transition_vue_vue_type_template_id_6369f8c4___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./uni-transition.vue?vue&type=template&id=6369f8c4& */ 17);\n/* harmony import */ var _uni_transition_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./uni-transition.vue?vue&type=script&lang=js& */ 19);\n/* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _uni_transition_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__) if([\"default\"].indexOf(__WEBPACK_IMPORT_KEY__) < 0) (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return _uni_transition_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__[key]; }) }(__WEBPACK_IMPORT_KEY__));\n/* harmony import */ var _HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../../../HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/vue-loader/lib/runtime/componentNormalizer.js */ 15);\n\nvar renderjs\n\n\n\n\n/* normalize component */\n\nvar component = Object(_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _uni_transition_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _uni_transition_vue_vue_type_template_id_6369f8c4___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _uni_transition_vue_vue_type_template_id_6369f8c4___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null,\n false,\n _uni_transition_vue_vue_type_template_id_6369f8c4___WEBPACK_IMPORTED_MODULE_0__[\"components\"],\n renderjs\n)\n\ncomponent.options.__file = \"uni_modules/uni-transition/components/uni-transition/uni-transition.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbbnVsbF0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBMkg7QUFDM0g7QUFDa0U7QUFDTDs7O0FBRzdEO0FBQ3lLO0FBQ3pLLGdCQUFnQiw2S0FBVTtBQUMxQixFQUFFLG9GQUFNO0FBQ1IsRUFBRSx5RkFBTTtBQUNSLEVBQUUsa0dBQWU7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsNkZBQVU7QUFDWjtBQUNBOztBQUVBO0FBQ2UsZ0YiLCJmaWxlIjoiMTYuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucywgcmVjeWNsYWJsZVJlbmRlciwgY29tcG9uZW50cyB9IGZyb20gXCIuL3VuaS10cmFuc2l0aW9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD02MzY5ZjhjNCZcIlxudmFyIHJlbmRlcmpzXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL3VuaS10cmFuc2l0aW9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vdW5pLXRyYW5zaXRpb24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi8uLi8uLi8uLi8uLi9IQnVpbGRlclgvcGx1Z2lucy91bmlhcHAtY2xpL25vZGVfbW9kdWxlcy9AZGNsb3VkaW8vdnVlLWNsaS1wbHVnaW4tdW5pL3BhY2thZ2VzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGwsXG4gIGZhbHNlLFxuICBjb21wb25lbnRzLFxuICByZW5kZXJqc1xuKVxuXG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInVuaV9tb2R1bGVzL3VuaS10cmFuc2l0aW9uL2NvbXBvbmVudHMvdW5pLXRyYW5zaXRpb24vdW5pLXRyYW5zaXRpb24udnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///16\n"); /***/ }), /* 17 */ -/*!*****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ - !*** ./node_modules/babel-loader/lib!./node_modules/@dcloudio/vue-cli-plugin-uni/packages/webpack-preprocess-loader??ref--7-1!./node_modules/@dcloudio/vue-cli-plugin-uni/packages/webpack-uni-app-loader/using-components.js!./node_modules/@dcloudio/vue-cli-plugin-uni/packages/vue-loader/lib??vue-loader-options!D:/里海数字乡村/xunfeiAi/pages/index/index.vue?vue&type=script&lang=js&mpType=page ***! - \*****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ +/*!*********************************************************************************************************************************!*\ + !*** D:/里海数字乡村/xunfeiAi/uni_modules/uni-transition/components/uni-transition/uni-transition.vue?vue&type=template&id=6369f8c4& ***! + \*********************************************************************************************************************************/ +/*! exports provided: render, staticRenderFns, recyclableRender, components */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_preprocess_loader_index_js_ref_11_0_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_uni_app_loader_filter_modules_template_js_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_uni_app_loader_page_meta_js_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_index_js_vue_loader_options_uni_transition_vue_vue_type_template_id_6369f8c4___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../../HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../../../HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/webpack-preprocess-loader??ref--11-0!../../../../../../HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/webpack-uni-app-loader/filter-modules-template.js!../../../../../../HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/webpack-uni-app-loader/page-meta.js!../../../../../../HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/vue-loader/lib??vue-loader-options!./uni-transition.vue?vue&type=template&id=6369f8c4& */ 18); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_preprocess_loader_index_js_ref_11_0_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_uni_app_loader_filter_modules_template_js_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_uni_app_loader_page_meta_js_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_index_js_vue_loader_options_uni_transition_vue_vue_type_template_id_6369f8c4___WEBPACK_IMPORTED_MODULE_0__["render"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_preprocess_loader_index_js_ref_11_0_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_uni_app_loader_filter_modules_template_js_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_uni_app_loader_page_meta_js_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_index_js_vue_loader_options_uni_transition_vue_vue_type_template_id_6369f8c4___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "recyclableRender", function() { return _HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_preprocess_loader_index_js_ref_11_0_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_uni_app_loader_filter_modules_template_js_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_uni_app_loader_page_meta_js_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_index_js_vue_loader_options_uni_transition_vue_vue_type_template_id_6369f8c4___WEBPACK_IMPORTED_MODULE_0__["recyclableRender"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "components", function() { return _HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_preprocess_loader_index_js_ref_11_0_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_uni_app_loader_filter_modules_template_js_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_uni_app_loader_page_meta_js_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_index_js_vue_loader_options_uni_transition_vue_vue_type_template_id_6369f8c4___WEBPACK_IMPORTED_MODULE_0__["components"]; }); + + + +/***/ }), +/* 18 */ +/*!*************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ + !*** ./node_modules/@dcloudio/vue-cli-plugin-uni/packages/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/@dcloudio/vue-cli-plugin-uni/packages/webpack-preprocess-loader??ref--11-0!./node_modules/@dcloudio/vue-cli-plugin-uni/packages/webpack-uni-app-loader/filter-modules-template.js!./node_modules/@dcloudio/vue-cli-plugin-uni/packages/webpack-uni-app-loader/page-meta.js!./node_modules/@dcloudio/vue-cli-plugin-uni/packages/vue-loader/lib??vue-loader-options!D:/里海数字乡村/xunfeiAi/uni_modules/uni-transition/components/uni-transition/uni-transition.vue?vue&type=template&id=6369f8c4& ***! + \*************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ +/*! exports provided: render, staticRenderFns, recyclableRender, components */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "recyclableRender", function() { return recyclableRender; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "components", function() { return components; }); +var components +var render = function () { + var _vm = this + var _h = _vm.$createElement + var _c = _vm._self._c || _h + return _c( + "view", + { + directives: [ + { + name: "show", + rawName: "v-show", + value: _vm._$s(0, "v-show", _vm.isShow), + expression: "_$s(0,'v-show',isShow)", + }, + ], + ref: "ani", + class: _vm._$s(0, "c", _vm.customClass), + style: _vm._$s(0, "s", _vm.transformStyles), + attrs: { animation: _vm._$s(0, "a-animation", _vm.animationData), _i: 0 }, + on: { click: _vm.onClick }, + }, + [_vm._t("default", null, { _i: 1 })], + 2 + ) +} +var recyclableRender = false +var staticRenderFns = [] +render._withStripped = true + + + +/***/ }), +/* 19 */ +/*!***************************************************************************************************************************!*\ + !*** D:/里海数字乡村/xunfeiAi/uni_modules/uni-transition/components/uni-transition/uni-transition.vue?vue&type=script&lang=js& ***! + \***************************************************************************************************************************/ +/*! no static exports found */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _HBuilderX_plugins_uniapp_cli_node_modules_babel_loader_lib_index_js_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_preprocess_loader_index_js_ref_7_1_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_uni_app_loader_using_components_js_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_index_js_vue_loader_options_uni_transition_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../../HBuilderX/plugins/uniapp-cli/node_modules/babel-loader/lib!../../../../../../HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/webpack-preprocess-loader??ref--7-1!../../../../../../HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/webpack-uni-app-loader/using-components.js!../../../../../../HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/vue-loader/lib??vue-loader-options!./uni-transition.vue?vue&type=script&lang=js& */ 20);\n/* harmony import */ var _HBuilderX_plugins_uniapp_cli_node_modules_babel_loader_lib_index_js_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_preprocess_loader_index_js_ref_7_1_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_uni_app_loader_using_components_js_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_index_js_vue_loader_options_uni_transition_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_HBuilderX_plugins_uniapp_cli_node_modules_babel_loader_lib_index_js_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_preprocess_loader_index_js_ref_7_1_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_uni_app_loader_using_components_js_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_index_js_vue_loader_options_uni_transition_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__);\n/* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _HBuilderX_plugins_uniapp_cli_node_modules_babel_loader_lib_index_js_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_preprocess_loader_index_js_ref_7_1_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_uni_app_loader_using_components_js_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_index_js_vue_loader_options_uni_transition_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__) if([\"default\"].indexOf(__WEBPACK_IMPORT_KEY__) < 0) (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return _HBuilderX_plugins_uniapp_cli_node_modules_babel_loader_lib_index_js_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_preprocess_loader_index_js_ref_7_1_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_uni_app_loader_using_components_js_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_index_js_vue_loader_options_uni_transition_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__[key]; }) }(__WEBPACK_IMPORT_KEY__));\n /* harmony default export */ __webpack_exports__[\"default\"] = (_HBuilderX_plugins_uniapp_cli_node_modules_babel_loader_lib_index_js_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_preprocess_loader_index_js_ref_7_1_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_uni_app_loader_using_components_js_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_index_js_vue_loader_options_uni_transition_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0___default.a); //# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbbnVsbF0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQWtrQixDQUFnQixva0JBQUcsRUFBQyIsImZpbGUiOiIxOS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vSEJ1aWxkZXJYL3BsdWdpbnMvdW5pYXBwLWNsaS9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcyEuLi8uLi8uLi8uLi8uLi8uLi9IQnVpbGRlclgvcGx1Z2lucy91bmlhcHAtY2xpL25vZGVfbW9kdWxlcy9AZGNsb3VkaW8vdnVlLWNsaS1wbHVnaW4tdW5pL3BhY2thZ2VzL3dlYnBhY2stcHJlcHJvY2Vzcy1sb2FkZXIvaW5kZXguanM/P3JlZi0tNy0xIS4uLy4uLy4uLy4uLy4uLy4uL0hCdWlsZGVyWC9wbHVnaW5zL3VuaWFwcC1jbGkvbm9kZV9tb2R1bGVzL0BkY2xvdWRpby92dWUtY2xpLXBsdWdpbi11bmkvcGFja2FnZXMvd2VicGFjay11bmktYXBwLWxvYWRlci91c2luZy1jb21wb25lbnRzLmpzIS4uLy4uLy4uLy4uLy4uLy4uL0hCdWlsZGVyWC9wbHVnaW5zL3VuaWFwcC1jbGkvbm9kZV9tb2R1bGVzL0BkY2xvdWRpby92dWUtY2xpLXBsdWdpbi11bmkvcGFja2FnZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3VuaS10cmFuc2l0aW9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi9IQnVpbGRlclgvcGx1Z2lucy91bmlhcHAtY2xpL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzIS4uLy4uLy4uLy4uLy4uLy4uL0hCdWlsZGVyWC9wbHVnaW5zL3VuaWFwcC1jbGkvbm9kZV9tb2R1bGVzL0BkY2xvdWRpby92dWUtY2xpLXBsdWdpbi11bmkvcGFja2FnZXMvd2VicGFjay1wcmVwcm9jZXNzLWxvYWRlci9pbmRleC5qcz8/cmVmLS03LTEhLi4vLi4vLi4vLi4vLi4vLi4vSEJ1aWxkZXJYL3BsdWdpbnMvdW5pYXBwLWNsaS9ub2RlX21vZHVsZXMvQGRjbG91ZGlvL3Z1ZS1jbGktcGx1Z2luLXVuaS9wYWNrYWdlcy93ZWJwYWNrLXVuaS1hcHAtbG9hZGVyL3VzaW5nLWNvbXBvbmVudHMuanMhLi4vLi4vLi4vLi4vLi4vLi4vSEJ1aWxkZXJYL3BsdWdpbnMvdW5pYXBwLWNsaS9ub2RlX21vZHVsZXMvQGRjbG91ZGlvL3Z1ZS1jbGktcGx1Z2luLXVuaS9wYWNrYWdlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vdW5pLXRyYW5zaXRpb24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///19\n"); + +/***/ }), +/* 20 */ +/*!********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ + !*** ./node_modules/babel-loader/lib!./node_modules/@dcloudio/vue-cli-plugin-uni/packages/webpack-preprocess-loader??ref--7-1!./node_modules/@dcloudio/vue-cli-plugin-uni/packages/webpack-uni-app-loader/using-components.js!./node_modules/@dcloudio/vue-cli-plugin-uni/packages/vue-loader/lib??vue-loader-options!D:/里海数字乡村/xunfeiAi/uni_modules/uni-transition/components/uni-transition/uni-transition.vue?vue&type=script&lang=js& ***! + \********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -eval("/* WEBPACK VAR INJECTION */(function(__f__) {\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ 1);\nvar _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ 4);\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _regenerator = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/regenerator */ 19));\nvar _toConsumableArray2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/toConsumableArray */ 21));\nvar _asyncToGenerator2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ 27));\nvar base64 = _interopRequireWildcard(__webpack_require__(/*! base-64 */ 28));\nvar _cryptoJs = _interopRequireDefault(__webpack_require__(/*! ../../static/crypto-js/crypto-js.js */ 32));\nvar _parser = _interopRequireDefault(__webpack_require__(/*! ../../static/fast-xml-parser/src/parser */ 190));\nvar utf8 = _interopRequireWildcard(__webpack_require__(/*! utf8 */ 199));\nvar _bingMath = _interopRequireDefault(__webpack_require__(/*! @/components/bing-math/bing-math.vue */ 10));\nfunction _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== \"function\") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }\nfunction _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\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//\n//\n//\n//\nvar _default = {\n components: {\n 'bing-math': _bingMath.default\n },\n data: function data() {\n return {\n talkList: [],\n ajax: {\n rows: 100,\n //每页数量\n page: 1,\n //页码\n flag: false,\n // 请求开关\n loading: false,\n // 加载中\n loadText: '正在获取消息'\n },\n keyboardHeight: 0,\n showplc: true,\n content: '',\n c_content: '',\n n_content: '',\n timer: '',\n socketTask: {},\n TEXT: '',\n historyTextList: [],\n // 历史会话信息,由于最大token12000,可以结合实际使用,进行移出\n tempRes: '',\n // 临时答复保存\n scrollTop: 0,\n shouldScrollToBottom: true\n };\n },\n mounted: function mounted() {\n var _this = this;\n this.$nextTick(function () {\n _this.getHistoryMsg();\n });\n uni.onKeyboardHeightChange(function (e) {\n var h = _this.keyboardHeight;\n _this.keyboardHeight = e.height;\n _this.$nextTick(function () {\n setTimeout(function () {\n uni.pageScrollTo({\n scrollTop: 9999999,\n // 当前位置向下滚动\n duration: 300 // 滚动过渡时间为300ms,默认值为300ms\n });\n }, 0);\n });\n });\n },\n beforeDestroy: function beforeDestroy() {\n uni.offKeyboardHeightChange();\n },\n onPageScroll: function onPageScroll(e) {\n if (e.scrollTop < 5) {\n this.getHistoryMsg();\n }\n },\n watch: {\n n_content: function n_content(n, o) {\n var _this2 = this;\n // this.c_content = n;\n if (this.timer) clearInterval(this.timer);\n var cl = this.c_content.length;\n var nc = this.n_content.split('');\n this.timer = setInterval(function () {\n if (cl < nc.length) {\n _this2.c_content += nc[cl];\n cl++;\n if (cl % 6 == 0) _this2.$nextTick(function () {\n uni.pageScrollTo({\n scrollTop: 999999\n });\n });\n } else {\n clearInterval(_this2.timer);\n _this2.$nextTick(function () {\n uni.pageScrollTo({\n scrollTop: 9999999\n });\n });\n }\n }, 60);\n }\n },\n methods: {\n copyText: function copyText(str) {\n uni.setClipboardData({\n data: str,\n success: function success() {\n uni.showToast({\n icon: 'none',\n title: '复制成功'\n });\n }\n });\n },\n // 获取历史消息\n getHistoryMsg: function getHistoryMsg() {\n var _this3 = this;\n return;\n if (this.ajax.flag) {\n return; //\n }\n\n var get = /*#__PURE__*/function () {\n var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {\n var data, selector;\n return _regenerator.default.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n _this3.hideLoadTips();\n _this3.ajax.flag = false;\n _context.next = 4;\n return _this3.joinHistoryMsg();\n case 4:\n data = _context.sent;\n __f__(\"log\", '----- 模拟数据格式,供参考 -----', \" at pages/index/index.vue:149\");\n __f__(\"log\", data, \" at pages/index/index.vue:150\"); // 查看请求返回的数据结构 \n\n // 获取待滚动元素选择器,解决插入数据后,滚动条定位时使用\n selector = '';\n if (_this3.ajax.page > 1) {\n // 非第一页,则取历史消息数据的第一条信息元素\n selector = \"#msg-\".concat(_this3.talkList[0].id);\n } else {\n // 第一页,则取当前消息数据的最后一条信息元素\n selector = \"#msg-\".concat(data[data.length - 1].id);\n }\n\n // 将获取到的消息数据合并到消息数组中\n _this3.talkList = [].concat((0, _toConsumableArray2.default)(data), (0, _toConsumableArray2.default)(_this3.talkList));\n\n // 数据挂载后执行,不懂的请自行阅读 Vue.js 文档对 Vue.nextTick 函数说明。\n _this3.$nextTick(function () {\n // 设置当前滚动的位置\n _this3.setPageScrollTo(selector);\n _this3.hideLoadTips(true);\n if (data.length < _this3.ajax.rows) {\n // 当前消息数据条数小于请求要求条数时,则无更多消息,不再允许请求。\n // 可在此处编写无更多消息数据时的逻辑\n } else {\n _this3.ajax.page++;\n\n // 延迟 200ms ,以保证设置窗口滚动已完成\n setTimeout(function () {\n _this3.ajax.flag = true;\n }, 200);\n }\n });\n case 11:\n case \"end\":\n return _context.stop();\n }\n }\n }, _callee);\n }));\n return function get() {\n return _ref.apply(this, arguments);\n };\n }();\n get();\n },\n // 拼接历史记录消息\n joinHistoryMsg: function joinHistoryMsg() {\n var _this4 = this;\n var join = function join() {\n var arr = [];\n\n //通过当前页码及页数,模拟数据内容\n var startIndex = (_this4.ajax.page - 1) * _this4.ajax.rows;\n var endIndex = startIndex + _this4.ajax.rows;\n for (var i = startIndex; i < endIndex; i++) {\n arr.push({\n \"id\": i,\n // 消息的ID\n \"content\": \"\\u8FD9\\u662F\\u5386\\u53F2\\u8BB0\\u5F55\\u7684\\u7B2C\".concat(i + 1, \"\\u6761\\u6D88\\u606F\"),\n // 消息内容\n \"type\": Math.random() > 0.5 ? 1 : 0,\n // 此为消息类别,设 1 为发出去的消息,0 为收到对方的消息,\n \"pic\": \"/static/avatar.png\" // 头像\n });\n }\n\n /*\n \t颠倒数组中元素的顺序。将最新的数据排在本次接口返回数据的最后面。\n \t后端接口按 消息的时间降序查找出当前页的数据后,再将本页数据按消息时间降序排序返回。\n \t这是数据的重点,因为页面滚动条和上拉加载历史的问题。\n */\n arr.reverse();\n return arr;\n };\n\n // 此处用到 ES6 的 Promise 知识,不懂的请自行学习。\n return new Promise(function (done, fail) {\n // 无数据请求接口,由 setTimeout 模拟,正式项目替换为 ajax 即可。\n setTimeout(function () {\n var data = join();\n done(data);\n }, 1500);\n });\n },\n focus: function focus() {\n // this.$nextTick(()=>{\n // setTimeout(()=>{\n // uni.pageScrollTo({\n // scrollTop: 9999999, // 当前位置向下滚动\n // duration: 300 // 滚动过渡时间为300ms,默认值为300ms\n // });\n // }, 0)\n // })\n },\n // 设置页面滚动位置\n setPageScrollTo: function setPageScrollTo(selector) {\n var view = uni.createSelectorQuery().in(this).select(selector);\n view.boundingClientRect(function (res) {\n uni.pageScrollTo({\n scrollTop: res.top - 30,\n // -30 为多显示出大半个消息的高度,示意上面还有信息。\n duration: 0\n });\n }).exec();\n },\n // 隐藏加载提示\n hideLoadTips: function hideLoadTips(flag) {\n var _this5 = this;\n if (flag) {\n this.ajax.loadText = '消息获取成功';\n setTimeout(function () {\n _this5.ajax.loading = false;\n }, 300);\n } else {\n this.ajax.loading = true;\n this.ajax.loadText = '正在获取消息';\n }\n },\n // 发送信息\n send: function send() {\n var _this6 = this;\n if (!this.content) {\n uni.showToast({\n title: '请输入有效的内容',\n icon: 'none'\n });\n return;\n }\n try {\n clearInterval(this.timer);\n this.talkList[this.talkList.length - 1].content = this.c_content + '';\n this.c_content = '';\n this.n_content = '';\n this.socketTask.close({\n success: function success(res) {\n __f__(\"log\", '关闭成功', res, \" at pages/index/index.vue:273\");\n _this6.wsLiveFlag = false;\n },\n fail: function fail(err) {\n __f__(\"log\", '关闭失败', err, \" at pages/index/index.vue:277\");\n }\n });\n } catch (e) {\n //TODO handle the exception\n }\n // 将当前发送信息 添加到消息列表。\n var data = {\n \"id\": new Date().getTime(),\n \"content\": this.content,\n \"type\": 1,\n \"pic\": \"/static/avatar.png\"\n };\n this.TEXT = this.content;\n this.n_content = '';\n this.c_content = '';\n this.talkList.push(data);\n this.talkList.push({\n \"id\": new Date().getTime(),\n \"content\": '',\n \"type\": 2,\n \"pic\": \"/static/avatar.png\"\n });\n // return ;\n this.$nextTick(function () {\n // 清空内容框中的内容\n _this6.content = '';\n // uni.pageScrollTo({\n // scrollTop: 999999, // 设置一个超大值,以保证滚动条滚动到底部\n // duration: 0\n // });\n });\n\n this.sendToSpark();\n },\n sendToSpark: function sendToSpark() {\n var _this7 = this;\n return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2() {\n var realThis;\n return _regenerator.default.wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n // let myUrl = await this.getWebSocketUrl();\n _this7.tempRes = \"\";\n realThis = _this7;\n _this7.socketTask = uni.connectSocket({\n //url: encodeURI(encodeURI(myUrl).replace(/\\+/g, '%2B')),\n url: 'wss://chat.lihaink.cn/chat',\n method: 'GET',\n success: function success(res) {\n __f__(\"log\", res, \"ws成功连接...\", \" at pages/index/index.vue:321\");\n realThis.wsLiveFlag = true;\n }\n });\n realThis.socketTask.onError(function (res) {\n __f__(\"log\", \"连接发生错误,请检查appid是否填写\", res, \" at pages/index/index.vue:326\");\n });\n realThis.socketTask.onOpen(function (res) {\n _this7.historyTextList.push({\n \"role\": \"user\",\n \"content\": _this7.TEXT\n });\n // 第一帧..........................................\n __f__(\"log\", '连接成功...', \" at pages/index/index.vue:334\");\n // let params = {\n // \"header\": {\n // \"app_id\": this.APPID,\n // \"uid\": \"aef9f963-7\"\n // },\n // \"parameter\": {\n // \"chat\": {\n // \"domain\": \"generalv2\",\n // \"temperature\": 0.5,\n // \"max_tokens\": 1024\n // }\n // },\n // \"payload\": {\n // \"message\": {\n // \"text\": this.historyTextList\n // }\n // }\n // };\n var params = _this7.TEXT;\n realThis.socketTask.send({\n // 发送消息,,都用uni的官方版本\n data: JSON.stringify(params),\n success: function success() {\n __f__(\"log\", '第一帧发送成功', \" at pages/index/index.vue:357\");\n }\n });\n });\n\n // 接受到消息时\n realThis.socketTask.onMessage(function (res) {\n __f__(\"log\", '收到API返回的内容:', res.data, \" at pages/index/index.vue:364\");\n var obj = JSON.parse(res.data);\n // console.log(\"我打印的\"+obj.payload);\n var dataArray = obj.payload.choices.text;\n for (var i = 0; i < dataArray.length; i++) {\n _this7.talkList[_this7.talkList.length - 1].content += dataArray[i].content;\n _this7.n_content = _this7.talkList[_this7.talkList.length - 1].content;\n realThis.tempRes = realThis.tempRes + dataArray[i].content;\n }\n var temp = JSON.parse(res.data);\n // console.log(\"0726\",temp.header.code)\n if (temp.header.code !== 0) {\n __f__(\"log\", \"\".concat(temp.header.code, \":\").concat(temp.message), \" at pages/index/index.vue:376\");\n realThis.socketTask.close({\n success: function success(res) {\n __f__(\"log\", '关闭成功', res, \" at pages/index/index.vue:379\");\n realThis.wsLiveFlag = false;\n },\n fail: function fail(err) {\n __f__(\"log\", '关闭失败', err, \" at pages/index/index.vue:383\");\n }\n });\n }\n if (temp.header.code === 0) {\n if (res.data && temp.header.status === 2) {\n _this7.historyTextList.push({\n \"role\": \"assistant\",\n \"content\": _this7.tempRes\n });\n setTimeout(function () {\n realThis.socketTask.close({\n success: function success(res) {\n __f__(\"log\", '关闭成功', res, \" at pages/index/index.vue:396\");\n },\n fail: function fail(err) {\n // console.log('关闭失败', err)\n }\n });\n }, 1000);\n }\n }\n });\n case 6:\n case \"end\":\n return _context2.stop();\n }\n }\n }, _callee2);\n }))();\n },\n // 鉴权\n getWebSocketUrl: function getWebSocketUrl() {\n var _this8 = this;\n return new Promise(function (resolve, reject) {\n // https://spark-api.xf-yun.com/v1.1/chat V1.5 domain general\n // https://spark-api.xf-yun.com/v2.1/chat V2.0 domain generalv2\n var url = \"wss://spark-api.xf-yun.com/v2.1/chat\";\n var host = \"spark-api.xf-yun.com\";\n var apiKeyName = \"api_key\";\n var date = new Date().toGMTString();\n var algorithm = \"hmac-sha256\";\n var headers = \"host date request-line\";\n var signatureOrigin = \"host: \".concat(host, \"\\ndate: \").concat(date, \"\\nGET /v2.1/chat HTTP/1.1\");\n var signatureSha = _cryptoJs.default.HmacSHA256(signatureOrigin, _this8.APISecret);\n var signature = _cryptoJs.default.enc.Base64.stringify(signatureSha);\n var authorizationOrigin = \"\".concat(apiKeyName, \"=\\\"\").concat(_this8.APIKey, \"\\\", algorithm=\\\"\").concat(algorithm, \"\\\", headers=\\\"\").concat(headers, \"\\\", signature=\\\"\").concat(signature, \"\\\"\");\n var authorization = base64.encode(authorizationOrigin);\n url = \"\".concat(url, \"?authorization=\").concat(authorization, \"&date=\").concat(encodeURI(date), \"&host=\").concat(host);\n\n // console.log(url)\n resolve(url);\n });\n },\n // 滚动到头部\n bindScroll: function bindScroll() {\n if (this.userId == 0) {\n this.getHistory();\n this.getproductInfo();\n this.getOrderInfo();\n this.getRefundDetail();\n this.getStoreDetail();\n } else {\n this.getMerHistory();\n }\n },\n touchmove: function touchmove(e) {\n uni.hideKeyboard();\n }\n }\n};\nexports.default = _default;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/vue-cli-plugin-uni/lib/format-log.js */ 18)[\"default\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vcGFnZXMvaW5kZXgvaW5kZXgudnVlIl0sIm5hbWVzIjpbImNvbXBvbmVudHMiLCJkYXRhIiwidGFsa0xpc3QiLCJhamF4Iiwicm93cyIsInBhZ2UiLCJmbGFnIiwibG9hZGluZyIsImxvYWRUZXh0Iiwia2V5Ym9hcmRIZWlnaHQiLCJzaG93cGxjIiwiY29udGVudCIsImNfY29udGVudCIsIm5fY29udGVudCIsInRpbWVyIiwic29ja2V0VGFzayIsIlRFWFQiLCJoaXN0b3J5VGV4dExpc3QiLCJ0ZW1wUmVzIiwic2Nyb2xsVG9wIiwic2hvdWxkU2Nyb2xsVG9Cb3R0b20iLCJtb3VudGVkIiwidW5pIiwic2V0VGltZW91dCIsImR1cmF0aW9uIiwiYmVmb3JlRGVzdHJveSIsIm9uUGFnZVNjcm9sbCIsIndhdGNoIiwiY2wiLCJjbGVhckludGVydmFsIiwibWV0aG9kcyIsImNvcHlUZXh0Iiwic3VjY2VzcyIsImljb24iLCJ0aXRsZSIsImdldEhpc3RvcnlNc2ciLCJzZWxlY3RvciIsImdldCIsImpvaW5IaXN0b3J5TXNnIiwiYXJyIiwiZG9uZSIsImZvY3VzIiwic2V0UGFnZVNjcm9sbFRvIiwidmlldyIsImhpZGVMb2FkVGlwcyIsInNlbmQiLCJmYWlsIiwic2VuZFRvU3BhcmsiLCJyZWFsVGhpcyIsInVybCIsIm1ldGhvZCIsImdldFdlYlNvY2tldFVybCIsImFwaUtleU5hbWUiLCJyZXNvbHZlIiwiYmluZFNjcm9sbCIsInRvdWNobW92ZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFzQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O2VBQ0E7RUFDQUE7SUFDQTtFQUNBO0VBQ0FDO0lBQ0E7TUFDQUM7TUFDQUM7UUFDQUM7UUFBQTtRQUNBQztRQUFBO1FBQ0FDO1FBQUE7UUFDQUM7UUFBQTtRQUNBQztNQUNBO01BQ0FDO01BQ0FDO01BQ0FDO01BQ0FDO01B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O3NCQUNBO29CQUNBO2tCQUNBO2dCQUNBOztnQkFFQTtnQkFDQWdCO2tCQUNBO2tCQUNBO2tCQUNBO2tCQUNBO2tCQUNBO29CQUNBO29CQUNBO29CQUNBQTtrQkFDQTtrQkFDQTtrQkFDQTtrQkFDQTtvQkFDQTtvQkFDQUE7c0JBQ0FoQjt3QkFDQTt3QkFDQWdCO3NCQUNBO3NCQUNBRjt3QkFDQTtzQkFDQTtvQkFDQTtrQkFDQTtrQkFDQTtvQkFDQTtzQkFDQTt3QkFDQTt3QkFDQTtzQkFDQTtzQkFDQXZCO3dCQUNBeUI7MEJBQ0FoQjs0QkFDQTswQkFDQTswQkFDQWM7NEJBQ0E7MEJBQUE7d0JBRUE7c0JBQ0E7b0JBQ0E7a0JBQ0E7Z0JBQ0E7Y0FBQTtjQUFBO2dCQUFBO1lBQUE7VUFBQTtRQUFBO01BQUE7SUFDQTtJQUNBO0lBQ0FLO01BQUE7TUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQSxvQ0FDQUM7UUFDQTtRQUNBSDs7UUFFQTtRQUNBSTtNQUNBO0lBQ0E7SUFDQTtJQUNBQztNQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtNQUNBO1FBQ0E7TUFDQTtJQUNBO0lBQ0FDO01BQ0FqQztJQUNBO0VBQ0E7QUFDQTtBQUFBLDJCIiwiZmlsZSI6IjE3LmpzIiwic291cmNlc0NvbnRlbnQiOlsiPHRlbXBsYXRlPlxyXG4gIDx2aWV3IGNsYXNzPVwid3JhcHBlclwiIEB0b3VjaG1vdmU9XCJ0b3VjaG1vdmVcIj5cclxuICAgIDx2aWV3IGNsYXNzPVwidGlwcyBjb2xvcl9mZmYgc2l6ZV8xMiBhbGlnbl9jXCIgOmNsYXNzPVwieyAnc2hvdyc6YWpheC5sb2FkaW5nIH1cIiBAdGFwPVwiZ2V0SGlzdG9yeU1zZ1wiPnt7YWpheC5sb2FkVGV4dH19XHJcbiAgICA8L3ZpZXc+XHJcbiAgICA8dmlldyBjbGFzcz1cInBsYWNlaG9sZGVyXCI+PC92aWV3PlxyXG4gICAgPHZpZXcgY2xhc3M9XCJib3gtMVwiIGlkPVwibGlzdC1ib3hcIiByZWY9XCJib3hcIj5cclxuICAgICAgPHZpZXcgY2xhc3M9XCJ0YWxrLWxpc3RcIj5cclxuICAgICAgICA8dmlldyB2LWZvcj1cIihpdGVtLGluZGV4KSBpbiB0YWxrTGlzdFwiIDprZXk9XCJpbmRleFwiIDppZD1cImBtc2ctJHtpdGVtLmlkfWBcIj5cclxuICAgICAgICAgIDx2aWV3IGNsYXNzPVwiaXRlbSBmbGV4X2NvbFwiIDpjbGFzcz1cIiBpdGVtLnR5cGUgPT0gMSA/ICdwdXNoJzoncHVsbCcgXCI+XHJcbiAgICAgICAgICAgIDxpbWFnZSA6c3JjPVwiaXRlbS5waWNcIiBtb2RlPVwiYXNwZWN0RmlsbFwiIGNsYXNzPVwicGljXCI+PC9pbWFnZT5cclxuICAgICAgICAgICAgPHZpZXcgdi1pZj1cInRhbGtMaXN0Lmxlbmd0aC0xPT1pbmRleFwiIGNsYXNzPVwiY29udGVudCBtdWx0aWxpbmUtdGV4dFwiPlxyXG4gICAgICAgICAgICAgIDwhLS0gPHJpY2gtdGV4dCA6bm9kZXM9XCJpdGVtLmNvbnRlbnRcIj48L3JpY2gtdGV4dD4gLS0+XHJcbiAgICAgICAgICAgICAgPGJpbmctbWF0aCB2LWlmPVwiY19jb250ZW50IT0nJ1wiIDprZXk9XCJgbWF0aC0ke2l0ZW0uaWR9YFwiIGNsYXNzPVwiYmluZy1tYXRoXCIgOmxhdGV4PVwiY19jb250ZW50XCI+PC9iaW5nLW1hdGg+XHJcbiAgICAgICAgICAgICAgPHZpZXcgdi1lbHNlIGNsYXNzPVwiYmxpbmtpbmctYm94XCI+fDwvdmlldz5cclxuICAgICAgICAgICAgPC92aWV3PlxyXG4gICAgICAgICAgICA8dmlldyB2LWVsc2UgY2xhc3M9XCJjb250ZW50IG11bHRpbGluZS10ZXh0XCI+XHJcbiAgICAgICAgICAgICAgPCEtLSA8cmljaC10ZXh0IDpub2Rlcz1cIml0ZW0uY29udGVudFwiPjwvcmljaC10ZXh0PiAtLT5cclxuICAgICAgICAgICAgICA8YmluZy1tYXRoIDprZXk9XCJgbWF0aC0ke2l0ZW0uaWR9YFwiIGNsYXNzPVwiYmluZy1tYXRoXCIgOmxhdGV4PVwiaXRlbS5jb250ZW50XCI+PC9iaW5nLW1hdGg+XHJcbiAgICAgICAgICAgIDwvdmlldz5cclxuICAgICAgICAgIDwvdmlldz5cclxuICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgPHZpZXcgaWQ9XCJib3R0b20tYm94XCI+PC92aWV3PlxyXG4gICAgICA8L3ZpZXc+XHJcbiAgICA8L3ZpZXc+XHJcbiAgICA8dmlldyBjbGFzcz1cImJveC0yXCI+XHJcbiAgICAgIDx2aWV3IGNsYXNzPVwiZmxleF9jb2xcIj5cclxuICAgICAgICA8dmlldyBjbGFzcz1cImZsZXhfZ3Jvd1wiPlxyXG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJjb250ZW50XCIgdi1tb2RlbD1cImNvbnRlbnRcIiBwbGFjZWhvbGRlcj1cIuivt+i+k+WFpeiBiuWkqeWGheWuuVwiIEBmb2N1cz1cImZvY3VzXCIgQGNvbmZpcm09XCJzZW5kXCJcclxuICAgICAgICAgICAgcGxhY2Vob2xkZXItc3R5bGU9XCJjb2xvcjojREREO1wiIDpjdXJzb3Itc3BhY2luZz1cIjZcIj5cclxuICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInNlbmRcIiBAdGFwPVwic2VuZFwiPuWPkemAgTwvYnV0dG9uPlxyXG4gICAgICA8L3ZpZXc+XHJcbiAgICA8L3ZpZXc+XHJcbiAgICA8IS0tIDx2aWV3IHYtc2hvdz1cInNob3dwbGNcIiA6c3R5bGU9XCJ7J21pbi1oZWlnaHQnOiAoa2V5Ym9hcmRIZWlnaHQrMjAwKSsncHgnfVwiIGNsYXNzPVwicGxhY2Vob2xkZXJcIj7mmL7npLo8L3ZpZXc+IC0tPlxyXG4gIDwvdmlldz5cclxuPC90ZW1wbGF0ZT5cclxuXHJcbjxzY3JpcHQ+XHJcbiAgaW1wb3J0ICogYXMgYmFzZTY0IGZyb20gXCJiYXNlLTY0XCJcclxuICBpbXBvcnQgQ3J5cHRvSlMgZnJvbSAnLi4vLi4vc3RhdGljL2NyeXB0by1qcy9jcnlwdG8tanMuanMnXHJcbiAgaW1wb3J0IHBhcnNlciBmcm9tICcuLi8uLi9zdGF0aWMvZmFzdC14bWwtcGFyc2VyL3NyYy9wYXJzZXInXHJcbiAgaW1wb3J0ICogYXMgdXRmOCBmcm9tIFwidXRmOFwiXHJcbiAgaW1wb3J0IEJpbmdNYXRoIGZyb20gXCJAL2NvbXBvbmVudHMvYmluZy1tYXRoL2JpbmctbWF0aC52dWVcIlxyXG4gIGV4cG9ydCBkZWZhdWx0IHtcclxuICAgIGNvbXBvbmVudHM6IHtcclxuICAgICAgJ2JpbmctbWF0aCc6IEJpbmdNYXRoXHJcbiAgICB9LFxyXG4gICAgZGF0YSgpIHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICB0YWxrTGlzdDogW10sXHJcbiAgICAgICAgYWpheDoge1xyXG4gICAgICAgICAgcm93czogMTAwLCAvL+avj+mhteaVsOmHj1xyXG4gICAgICAgICAgcGFnZTogMSwgLy/pobXnoIFcclxuICAgICAgICAgIGZsYWc6IGZhbHNlLCAvLyDor7fmsYLlvIDlhbNcclxuICAgICAgICAgIGxvYWRpbmc6IGZhbHNlLCAvLyDliqDovb3kuK1cclxuICAgICAgICAgIGxvYWRUZXh0OiAn5q2j5Zyo6I635Y+W5raI5oGvJ1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAga2V5Ym9hcmRIZWlnaHQ6IDAsXHJcbiAgICAgICAgc2hvd3BsYzogdHJ1ZSxcclxuICAgICAgICBjb250ZW50OiAnJyxcclxuICAgICAgICBjX2NvbnRlbnQ6ICcnLFxyXG4gICAgICAgIG5fY29udGVudDogJycsXHJcbiAgICAgICAgdGltZXI6ICcnLFxyXG4gICAgICAgIHNvY2tldFRhc2s6IHt9LFxyXG4gICAgICAgIFRFWFQ6ICcnLFxyXG4gICAgICAgIGhpc3RvcnlUZXh0TGlzdDogW10sIC8vIOWOhuWPsuS8muivneS/oeaBr++8jOeUseS6juacgOWkp3Rva2VuMTIwMDAs5Y+v5Lul57uT5ZCI5a6e6ZmF5L2/55So77yM6L+b6KGM56e75Ye6XHJcbiAgICAgICAgdGVtcFJlczogJycsIC8vIOS4tOaXtuetlOWkjeS/neWtmFxyXG4gICAgICAgIHNjcm9sbFRvcDogMCxcclxuICAgICAgICBzaG91bGRTY3JvbGxUb0JvdHRvbTogdHJ1ZVxyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgbW91bnRlZCgpIHtcclxuICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuZ2V0SGlzdG9yeU1zZygpO1xyXG4gICAgICB9KTtcclxuICAgICAgdW5pLm9uS2V5Ym9hcmRIZWlnaHRDaGFuZ2UoZSA9PiB7XHJcbiAgICAgICAgbGV0IGggPSB0aGlzLmtleWJvYXJkSGVpZ2h0O1xyXG4gICAgICAgIHRoaXMua2V5Ym9hcmRIZWlnaHQgPSBlLmhlaWdodDtcclxuICAgICAgICB0aGlzLiRuZXh0VGljaygoKT0+e1xyXG4gICAgICAgICAgc2V0VGltZW91dCgoKT0+e1xyXG4gICAgICAgICAgICB1bmkucGFnZVNjcm9sbFRvKHtcclxuICAgICAgICAgICAgICBzY3JvbGxUb3A6IDk5OTk5OTksIC8vIOW9k+WJjeS9jee9ruWQkeS4i+a7muWKqFxyXG4gICAgICAgICAgICAgIGR1cmF0aW9uOiAzMDAgLy8g5rua5Yqo6L+H5rih5pe26Ze05Li6MzAwbXPvvIzpu5jorqTlgLzkuLozMDBtc1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0sIDApXHJcbiAgICAgICAgfSlcclxuICAgICAgfSlcclxuICAgIH0sXHJcbiAgICBiZWZvcmVEZXN0cm95KCkge1xyXG4gICAgICAvLyAjaWZkZWYgQVBQLVBMVVNcclxuICAgICAgdW5pLm9mZktleWJvYXJkSGVpZ2h0Q2hhbmdlKCk7XHJcbiAgICAgIC8vICNlbmRpZlxyXG4gICAgfSxcclxuICAgIG9uUGFnZVNjcm9sbChlKSB7XHJcbiAgICAgIGlmIChlLnNjcm9sbFRvcCA8IDUpIHtcclxuICAgICAgICB0aGlzLmdldEhpc3RvcnlNc2coKTtcclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIHdhdGNoOiB7XHJcbiAgICAgIG5fY29udGVudChuLCBvKSB7XHJcbiAgICAgICAgLy8gdGhpcy5jX2NvbnRlbnQgPSBuO1xyXG4gICAgICAgIGlmICh0aGlzLnRpbWVyKSBjbGVhckludGVydmFsKHRoaXMudGltZXIpO1xyXG4gICAgICAgIGxldCBjbCA9IHRoaXMuY19jb250ZW50Lmxlbmd0aDtcclxuICAgICAgICBsZXQgbmMgPSB0aGlzLm5fY29udGVudC5zcGxpdCgnJylcclxuICAgICAgICB0aGlzLnRpbWVyID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xyXG4gICAgICAgICAgaWYgKGNsIDwgbmMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY19jb250ZW50ICs9IG5jW2NsXTtcclxuICAgICAgICAgICAgY2wrKztcclxuICAgICAgICAgICAgaWYgKGNsICUgNiA9PSAwKSB0aGlzLiRuZXh0VGljaygoKT0+e1xyXG4gICAgICAgICAgICAgIHVuaS5wYWdlU2Nyb2xsVG8oe1xyXG4gICAgICAgICAgICAgICAgc2Nyb2xsVG9wOiA5OTk5OTksXHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy50aW1lcik7XHJcbiAgICAgICAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHtcclxuICAgICAgICAgICAgICB1bmkucGFnZVNjcm9sbFRvKHtcclxuICAgICAgICAgICAgICAgIHNjcm9sbFRvcDogOTk5OTk5OSxcclxuICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sIDYwKVxyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgbWV0aG9kczoge1xyXG4gICAgICBjb3B5VGV4dChzdHIpIHtcclxuICAgICAgICB1bmkuc2V0Q2xpcGJvYXJkRGF0YSh7XHJcbiAgICAgICAgICBkYXRhOiBzdHIsXHJcbiAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgdW5pLnNob3dUb2FzdCh7XHJcbiAgICAgICAgICAgICAgaWNvbjogJ25vbmUnLFxyXG4gICAgICAgICAgICAgIHRpdGxlOiAn5aSN5Yi25oiQ5YqfJ1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSxcclxuICAgICAgLy8g6I635Y+W5Y6G5Y+y5raI5oGvXHJcbiAgICAgIGdldEhpc3RvcnlNc2coKSB7XHJcbiAgICAgICAgcmV0dXJuIDtcclxuICAgICAgICBpZiAodGhpcy5hamF4LmZsYWcpIHtcclxuICAgICAgICAgIHJldHVybjsgLy9cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBnZXQgPSBhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmhpZGVMb2FkVGlwcygpO1xyXG4gICAgICAgICAgdGhpcy5hamF4LmZsYWcgPSBmYWxzZTtcclxuICAgICAgICAgIGxldCBkYXRhID0gYXdhaXQgdGhpcy5qb2luSGlzdG9yeU1zZygpO1xyXG5cclxuICAgICAgICAgIGNvbnNvbGUubG9nKCctLS0tLSDmqKHmi5/mlbDmja7moLzlvI/vvIzkvpvlj4LogIMgLS0tLS0nKTtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKGRhdGEpOyAvLyDmn6XnnIvor7fmsYLov5Tlm57nmoTmlbDmja7nu5PmnoQgXHJcblxyXG4gICAgICAgICAgLy8g6I635Y+W5b6F5rua5Yqo5YWD57Sg6YCJ5oup5Zmo77yM6Kej5Yaz5o+S5YWl5pWw5o2u5ZCO77yM5rua5Yqo5p2h5a6a5L2N5pe25L2/55SoXHJcbiAgICAgICAgICBsZXQgc2VsZWN0b3IgPSAnJztcclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5hamF4LnBhZ2UgPiAxKSB7XHJcbiAgICAgICAgICAgIC8vIOmdnuesrOS4gOmhte+8jOWImeWPluWOhuWPsua2iOaBr+aVsOaNrueahOesrOS4gOadoeS/oeaBr+WFg+e0oFxyXG4gICAgICAgICAgICBzZWxlY3RvciA9IGAjbXNnLSR7dGhpcy50YWxrTGlzdFswXS5pZH1gO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8g56ys5LiA6aG177yM5YiZ5Y+W5b2T5YmN5raI5oGv5pWw5o2u55qE5pyA5ZCO5LiA5p2h5L+h5oGv5YWD57SgXHJcbiAgICAgICAgICAgIHNlbGVjdG9yID0gYCNtc2ctJHtkYXRhW2RhdGEubGVuZ3RoLTFdLmlkfWA7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8g5bCG6I635Y+W5Yiw55qE5raI5oGv5pWw5o2u5ZCI5bm25Yiw5raI5oGv5pWw57uE5LitXHJcbiAgICAgICAgICB0aGlzLnRhbGtMaXN0ID0gWy4uLmRhdGEsIC4uLnRoaXMudGFsa0xpc3RdO1xyXG5cclxuICAgICAgICAgIC8vIOaVsOaNruaMgui9veWQjuaJp+ihjO+8jOS4jeaHgueahOivt+iHquihjOmYheivuyBWdWUuanMg5paH5qGj5a+5IFZ1ZS5uZXh0VGljayDlh73mlbDor7TmmI7jgIJcclxuICAgICAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHtcclxuICAgICAgICAgICAgLy8g6K6+572u5b2T5YmN5rua5Yqo55qE5L2N572uXHJcbiAgICAgICAgICAgIHRoaXMuc2V0UGFnZVNjcm9sbFRvKHNlbGVjdG9yKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuaGlkZUxvYWRUaXBzKHRydWUpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGRhdGEubGVuZ3RoIDwgdGhpcy5hamF4LnJvd3MpIHtcclxuICAgICAgICAgICAgICAvLyDlvZPliY3mtojmga/mlbDmja7mnaHmlbDlsI/kuo7or7fmsYLopoHmsYLmnaHmlbDml7bvvIzliJnml6Dmm7TlpJrmtojmga/vvIzkuI3lho3lhYHorrjor7fmsYLjgIJcclxuICAgICAgICAgICAgICAvLyDlj6/lnKjmraTlpITnvJblhpnml6Dmm7TlpJrmtojmga/mlbDmja7ml7bnmoTpgLvovpFcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLmFqYXgucGFnZSsrO1xyXG5cclxuICAgICAgICAgICAgICAvLyDlu7bov58gMjAwbXMg77yM5Lul5L+d6K+B6K6+572u56qX5Y+j5rua5Yqo5bey5a6M5oiQXHJcbiAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFqYXguZmxhZyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgfSwgMjAwKVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICAgICAgZ2V0KCk7XHJcbiAgICAgIH0sXHJcbiAgICAgIC8vIOaLvOaOpeWOhuWPsuiusOW9lea2iOaBr1xyXG4gICAgICBqb2luSGlzdG9yeU1zZygpIHtcclxuICAgICAgICBsZXQgam9pbiA9ICgpID0+IHtcclxuICAgICAgICAgIGxldCBhcnIgPSBbXTtcclxuXHJcbiAgICAgICAgICAvL+mAmui/h+W9k+WJjemhteeggeWPiumhteaVsO+8jOaooeaLn+aVsOaNruWGheWuuVxyXG4gICAgICAgICAgbGV0IHN0YXJ0SW5kZXggPSAodGhpcy5hamF4LnBhZ2UgLSAxKSAqIHRoaXMuYWpheC5yb3dzO1xyXG4gICAgICAgICAgbGV0IGVuZEluZGV4ID0gc3RhcnRJbmRleCArIHRoaXMuYWpheC5yb3dzO1xyXG4gICAgICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0SW5kZXg7IGkgPCBlbmRJbmRleDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGFyci5wdXNoKHtcclxuICAgICAgICAgICAgICBcImlkXCI6IGksIC8vIOa2iOaBr+eahElEXHJcbiAgICAgICAgICAgICAgXCJjb250ZW50XCI6IGDov5nmmK/ljoblj7LorrDlvZXnmoTnrKwke2krMX3mnaHmtojmga9gLCAvLyDmtojmga/lhoXlrrlcclxuICAgICAgICAgICAgICBcInR5cGVcIjogTWF0aC5yYW5kb20oKSA+IDAuNSA/IDEgOiAwLCAvLyDmraTkuLrmtojmga/nsbvliKvvvIzorr4gMSDkuLrlj5Hlh7rljrvnmoTmtojmga/vvIwwIOS4uuaUtuWIsOWvueaWueeahOa2iOaBryxcclxuICAgICAgICAgICAgICBcInBpY1wiOiBcIi9zdGF0aWMvYXZhdGFyLnBuZ1wiIC8vIOWktOWDj1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8qXHJcbiAgICAgICAgICBcdOmioOWAkuaVsOe7hOS4reWFg+e0oOeahOmhuuW6j+OAguWwhuacgOaWsOeahOaVsOaNruaOkuWcqOacrOasoeaOpeWPo+i/lOWbnuaVsOaNrueahOacgOWQjumdouOAglxyXG4gICAgICAgICAgXHTlkI7nq6/mjqXlj6PmjIkg5raI5oGv55qE5pe26Ze06ZmN5bqP5p+l5om+5Ye65b2T5YmN6aG155qE5pWw5o2u5ZCO77yM5YaN5bCG5pys6aG15pWw5o2u5oyJ5raI5oGv5pe26Ze06ZmN5bqP5o6S5bqP6L+U5Zue44CCXHJcbiAgICAgICAgICBcdOi/meaYr+aVsOaNrueahOmHjeeCue+8jOWboOS4uumhtemdoua7muWKqOadoeWSjOS4iuaLieWKoOi9veWOhuWPsueahOmXrumimOOAglxyXG4gICAgICAgICAgICovXHJcbiAgICAgICAgICBhcnIucmV2ZXJzZSgpO1xyXG5cclxuICAgICAgICAgIHJldHVybiBhcnI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyDmraTlpITnlKjliLAgRVM2IOeahCBQcm9taXNlIOefpeivhu+8jOS4jeaHgueahOivt+iHquihjOWtpuS5oOOAglxyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgoZG9uZSwgZmFpbCkgPT4ge1xyXG4gICAgICAgICAgLy8g5peg5pWw5o2u6K+35rGC5o6l5Y+j77yM55SxIHNldFRpbWVvdXQg5qih5ouf77yM5q2j5byP6aG555uu5pu/5o2i5Li6IGFqYXgg5Y2z5Y+v44CCXHJcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgbGV0IGRhdGEgPSBqb2luKCk7XHJcbiAgICAgICAgICAgIGRvbmUoZGF0YSk7XHJcbiAgICAgICAgICB9LCAxNTAwKTtcclxuICAgICAgICB9KVxyXG4gICAgICB9LFxyXG4gICAgICBmb2N1cygpe1xyXG4gICAgICAgIC8vIHRoaXMuJG5leHRUaWNrKCgpPT57XHJcbiAgICAgICAgLy8gICBzZXRUaW1lb3V0KCgpPT57XHJcbiAgICAgICAgLy8gICAgIHVuaS5wYWdlU2Nyb2xsVG8oe1xyXG4gICAgICAgIC8vICAgICAgIHNjcm9sbFRvcDogOTk5OTk5OSwgLy8g5b2T5YmN5L2N572u5ZCR5LiL5rua5YqoXHJcbiAgICAgICAgLy8gICAgICAgZHVyYXRpb246IDMwMCAvLyDmu5rliqjov4fmuKHml7bpl7TkuLozMDBtc++8jOm7mOiupOWAvOS4ujMwMG1zXHJcbiAgICAgICAgLy8gICAgIH0pO1xyXG4gICAgICAgIC8vICAgfSwgMClcclxuICAgICAgICAvLyB9KVxyXG4gICAgICB9LFxyXG4gICAgICAvLyDorr7nva7pobXpnaLmu5rliqjkvY3nva5cclxuICAgICAgc2V0UGFnZVNjcm9sbFRvKHNlbGVjdG9yKSB7XHJcbiAgICAgICAgbGV0IHZpZXcgPSB1bmkuY3JlYXRlU2VsZWN0b3JRdWVyeSgpLmluKHRoaXMpLnNlbGVjdChzZWxlY3Rvcik7XHJcbiAgICAgICAgdmlldy5ib3VuZGluZ0NsaWVudFJlY3QoKHJlcykgPT4ge1xyXG4gICAgICAgICAgdW5pLnBhZ2VTY3JvbGxUbyh7XHJcbiAgICAgICAgICAgIHNjcm9sbFRvcDogcmVzLnRvcCAtIDMwLCAvLyAtMzAg5Li65aSa5pi+56S65Ye65aSn5Y2K5Liq5raI5oGv55qE6auY5bqm77yM56S65oSP5LiK6Z2i6L+Y5pyJ5L+h5oGv44CCXHJcbiAgICAgICAgICAgIGR1cmF0aW9uOiAwXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9KS5leGVjKCk7XHJcbiAgICAgIH0sXHJcbiAgICAgIC8vIOmakOiXj+WKoOi9veaPkOekulxyXG4gICAgICBoaWRlTG9hZFRpcHMoZmxhZykge1xyXG4gICAgICAgIGlmIChmbGFnKSB7XHJcbiAgICAgICAgICB0aGlzLmFqYXgubG9hZFRleHQgPSAn5raI5oGv6I635Y+W5oiQ5YqfJztcclxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmFqYXgubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgfSwgMzAwKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5hamF4LmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5hamF4LmxvYWRUZXh0ID0gJ+ato+WcqOiOt+WPlua2iOaBryc7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICAvLyDlj5HpgIHkv6Hmga9cclxuICAgICAgc2VuZCgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuY29udGVudCkge1xyXG4gICAgICAgICAgdW5pLnNob3dUb2FzdCh7XHJcbiAgICAgICAgICAgIHRpdGxlOiAn6K+36L6T5YWl5pyJ5pWI55qE5YaF5a65JyxcclxuICAgICAgICAgICAgaWNvbjogJ25vbmUnXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0cnl7XHJcbiAgICAgICAgICBjbGVhckludGVydmFsKHRoaXMudGltZXIpO1xyXG4gICAgICAgICAgdGhpcy50YWxrTGlzdFt0aGlzLnRhbGtMaXN0Lmxlbmd0aC0xXS5jb250ZW50ID0gdGhpcy5jX2NvbnRlbnQrJyc7XHJcbiAgICAgICAgICB0aGlzLmNfY29udGVudCA9ICcnO1xyXG4gICAgICAgICAgdGhpcy5uX2NvbnRlbnQgPSAnJztcclxuICAgICAgICAgIHRoaXMuc29ja2V0VGFzay5jbG9zZSh7XHJcbiAgICAgICAgICAgIHN1Y2Nlc3M6KHJlcyk9PiB7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coJ+WFs+mXreaIkOWKnycsIHJlcyk7XHJcbiAgICAgICAgICAgICAgdGhpcy53c0xpdmVGbGFnID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGZhaWwoZXJyKSB7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coJ+WFs+mXreWksei0pScsIGVycilcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9Y2F0Y2goZSl7XHJcbiAgICAgICAgICAvL1RPRE8gaGFuZGxlIHRoZSBleGNlcHRpb25cclxuICAgICAgICB9XHJcbiAgICAgICAgLy8g5bCG5b2T5YmN5Y+R6YCB5L+h5oGvIOa3u+WKoOWIsOa2iOaBr+WIl+ihqOOAglxyXG4gICAgICAgIGxldCBkYXRhID0ge1xyXG4gICAgICAgICAgXCJpZFwiOiBuZXcgRGF0ZSgpLmdldFRpbWUoKSxcclxuICAgICAgICAgIFwiY29udGVudFwiOiB0aGlzLmNvbnRlbnQsXHJcbiAgICAgICAgICBcInR5cGVcIjogMSxcclxuICAgICAgICAgIFwicGljXCI6IFwiL3N0YXRpYy9hdmF0YXIucG5nXCJcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5URVhUID0gdGhpcy5jb250ZW50O1xyXG4gICAgICAgIHRoaXMubl9jb250ZW50ID0gJyc7XHJcbiAgICAgICAgdGhpcy5jX2NvbnRlbnQgPSAnJztcclxuICAgICAgICB0aGlzLnRhbGtMaXN0LnB1c2goZGF0YSk7XHJcbiAgICAgICAgdGhpcy50YWxrTGlzdC5wdXNoKHtcclxuICAgICAgICAgIFwiaWRcIjogbmV3IERhdGUoKS5nZXRUaW1lKCksXHJcbiAgICAgICAgICBcImNvbnRlbnRcIjogJycsXHJcbiAgICAgICAgICBcInR5cGVcIjogMixcclxuICAgICAgICAgIFwicGljXCI6IFwiL3N0YXRpYy9hdmF0YXIucG5nXCJcclxuICAgICAgICB9KTtcclxuICAgICAgICAvLyByZXR1cm4gO1xyXG4gICAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHtcclxuICAgICAgICAgIC8vIOa4heepuuWGheWuueahhuS4reeahOWGheWuuVxyXG4gICAgICAgICAgdGhpcy5jb250ZW50ID0gJyc7XHJcbiAgICAgICAgICAvLyB1bmkucGFnZVNjcm9sbFRvKHtcclxuICAgICAgICAgIC8vICAgc2Nyb2xsVG9wOiA5OTk5OTksIC8vIOiuvue9ruS4gOS4qui2heWkp+WAvO+8jOS7peS/neivgea7muWKqOadoea7muWKqOWIsOW6lemDqFxyXG4gICAgICAgICAgLy8gICBkdXJhdGlvbjogMFxyXG4gICAgICAgICAgLy8gfSk7XHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLnNlbmRUb1NwYXJrKCk7XHJcbiAgICAgICAgXHJcbiAgICAgIH0sXHJcbiAgICAgIGFzeW5jIHNlbmRUb1NwYXJrKCkge1xyXG4gICAgICAgIC8vIGxldCBteVVybCA9IGF3YWl0IHRoaXMuZ2V0V2ViU29ja2V0VXJsKCk7XHJcbiAgICAgICAgdGhpcy50ZW1wUmVzID0gXCJcIjtcclxuICAgICAgICBsZXQgcmVhbFRoaXMgPSB0aGlzO1xyXG4gICAgICAgIHRoaXMuc29ja2V0VGFzayA9IHVuaS5jb25uZWN0U29ja2V0KHtcclxuICAgICAgICAgIC8vdXJsOiBlbmNvZGVVUkkoZW5jb2RlVVJJKG15VXJsKS5yZXBsYWNlKC9cXCsvZywgJyUyQicpKSxcclxuICAgICAgICAgIHVybDogJ3dzczovL2NoYXQubGloYWluay5jbi9jaGF0JyxcclxuICAgICAgICAgIG1ldGhvZDogJ0dFVCcsXHJcbiAgICAgICAgICBzdWNjZXNzOiByZXMgPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhyZXMsIFwid3PmiJDlip/ov57mjqUuLi5cIilcclxuICAgICAgICAgICAgcmVhbFRoaXMud3NMaXZlRmxhZyA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgICByZWFsVGhpcy5zb2NrZXRUYXNrLm9uRXJyb3IoKHJlcykgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coXCLov57mjqXlj5HnlJ/plJnor6/vvIzor7fmo4Dmn6VhcHBpZOaYr+WQpuWhq+WGmVwiLCByZXMpXHJcbiAgICAgICAgfSlcclxuICAgICAgICByZWFsVGhpcy5zb2NrZXRUYXNrLm9uT3BlbigocmVzKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmhpc3RvcnlUZXh0TGlzdC5wdXNoKHtcclxuICAgICAgICAgICAgXCJyb2xlXCI6IFwidXNlclwiLFxyXG4gICAgICAgICAgICBcImNvbnRlbnRcIjogdGhpcy5URVhUXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgLy8g56ys5LiA5binLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXHJcbiAgICAgICAgICBjb25zb2xlLmxvZygn6L+e5o6l5oiQ5YqfLi4uJylcclxuICAgICAgICAgIC8vIGxldCBwYXJhbXMgPSB7XHJcbiAgICAgICAgICAvLyAgIFwiaGVhZGVyXCI6IHtcclxuICAgICAgICAgIC8vICAgICBcImFwcF9pZFwiOiB0aGlzLkFQUElELFxyXG4gICAgICAgICAgLy8gICAgIFwidWlkXCI6IFwiYWVmOWY5NjMtN1wiXHJcbiAgICAgICAgICAvLyAgIH0sXHJcbiAgICAgICAgICAvLyAgIFwicGFyYW1ldGVyXCI6IHtcclxuICAgICAgICAgIC8vICAgICBcImNoYXRcIjoge1xyXG4gICAgICAgICAgLy8gICAgICAgXCJkb21haW5cIjogXCJnZW5lcmFsdjJcIixcclxuICAgICAgICAgIC8vICAgICAgIFwidGVtcGVyYXR1cmVcIjogMC41LFxyXG4gICAgICAgICAgLy8gICAgICAgXCJtYXhfdG9rZW5zXCI6IDEwMjRcclxuICAgICAgICAgIC8vICAgICB9XHJcbiAgICAgICAgICAvLyAgIH0sXHJcbiAgICAgICAgICAvLyAgIFwicGF5bG9hZFwiOiB7XHJcbiAgICAgICAgICAvLyAgICAgXCJtZXNzYWdlXCI6IHtcclxuICAgICAgICAgIC8vICAgICAgIFwidGV4dFwiOiB0aGlzLmhpc3RvcnlUZXh0TGlzdFxyXG4gICAgICAgICAgLy8gICAgIH1cclxuICAgICAgICAgIC8vICAgfVxyXG4gICAgICAgICAgLy8gfTtcclxuICAgICAgICAgIGxldCBwYXJhbXMgPSB0aGlzLlRFWFRcclxuICAgICAgICAgIHJlYWxUaGlzLnNvY2tldFRhc2suc2VuZCh7IC8vIOWPkemAgea2iOaBr++8jO+8jOmDveeUqHVuaeeahOWumOaWueeJiOacrFxyXG4gICAgICAgICAgICBkYXRhOiBKU09OLnN0cmluZ2lmeShwYXJhbXMpLFxyXG4gICAgICAgICAgICBzdWNjZXNzKCkge1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKCfnrKzkuIDluKflj5HpgIHmiJDlip8nKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8g5o6l5Y+X5Yiw5raI5oGv5pe2XHJcbiAgICAgICAgcmVhbFRoaXMuc29ja2V0VGFzay5vbk1lc3NhZ2UoKHJlcykgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ+aUtuWIsEFQSei/lOWbnueahOWGheWuue+8micsIHJlcy5kYXRhKTtcclxuICAgICAgICAgIGxldCBvYmogPSBKU09OLnBhcnNlKHJlcy5kYXRhKVxyXG4gICAgICAgICAgLy8gY29uc29sZS5sb2coXCLmiJHmiZPljbDnmoRcIitvYmoucGF5bG9hZCk7XHJcbiAgICAgICAgICBsZXQgZGF0YUFycmF5ID0gb2JqLnBheWxvYWQuY2hvaWNlcy50ZXh0O1xyXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhQXJyYXkubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy50YWxrTGlzdFt0aGlzLnRhbGtMaXN0Lmxlbmd0aCAtIDFdLmNvbnRlbnQgKz0gZGF0YUFycmF5W2ldLmNvbnRlbnQ7XHJcbiAgICAgICAgICAgIHRoaXMubl9jb250ZW50ID0gdGhpcy50YWxrTGlzdFt0aGlzLnRhbGtMaXN0Lmxlbmd0aCAtIDFdLmNvbnRlbnQ7XHJcbiAgICAgICAgICAgIHJlYWxUaGlzLnRlbXBSZXMgPSByZWFsVGhpcy50ZW1wUmVzICsgZGF0YUFycmF5W2ldLmNvbnRlbnRcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGxldCB0ZW1wID0gSlNPTi5wYXJzZShyZXMuZGF0YSlcclxuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiMDcyNlwiLHRlbXAuaGVhZGVyLmNvZGUpXHJcbiAgICAgICAgICBpZiAodGVtcC5oZWFkZXIuY29kZSAhPT0gMCkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgJHt0ZW1wLmhlYWRlci5jb2RlfToke3RlbXAubWVzc2FnZX1gKTtcclxuICAgICAgICAgICAgcmVhbFRoaXMuc29ja2V0VGFzay5jbG9zZSh7XHJcbiAgICAgICAgICAgICAgc3VjY2VzcyhyZXMpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCflhbPpl63miJDlip8nLCByZXMpXHJcbiAgICAgICAgICAgICAgICByZWFsVGhpcy53c0xpdmVGbGFnID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBmYWlsKGVycikge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ+WFs+mXreWksei0pScsIGVycilcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAodGVtcC5oZWFkZXIuY29kZSA9PT0gMCkge1xyXG4gICAgICAgICAgICBpZiAocmVzLmRhdGEgJiYgdGVtcC5oZWFkZXIuc3RhdHVzID09PSAyKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5oaXN0b3J5VGV4dExpc3QucHVzaCh7XHJcbiAgICAgICAgICAgICAgICBcInJvbGVcIjogXCJhc3Npc3RhbnRcIixcclxuICAgICAgICAgICAgICAgIFwiY29udGVudFwiOiB0aGlzLnRlbXBSZXNcclxuICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmVhbFRoaXMuc29ja2V0VGFzay5jbG9zZSh7XHJcbiAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MocmVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ+WFs+mXreaIkOWKnycsIHJlcylcclxuICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgZmFpbChlcnIpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZygn5YWz6Zet5aSx6LSlJywgZXJyKVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgIH0sIDEwMDApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICB9LFxyXG4gICAgICAvLyDpibTmnYNcclxuICAgICAgZ2V0V2ViU29ja2V0VXJsKCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAvLyBodHRwczovL3NwYXJrLWFwaS54Zi15dW4uY29tL3YxLjEvY2hhdCAgVjEuNSBkb21haW4gZ2VuZXJhbFxyXG4gICAgICAgICAgLy8gaHR0cHM6Ly9zcGFyay1hcGkueGYteXVuLmNvbS92Mi4xL2NoYXQgIFYyLjAgZG9tYWluIGdlbmVyYWx2MlxyXG4gICAgICAgICAgdmFyIHVybCA9IFwid3NzOi8vc3BhcmstYXBpLnhmLXl1bi5jb20vdjIuMS9jaGF0XCI7XHJcbiAgICAgICAgICB2YXIgaG9zdCA9IFwic3BhcmstYXBpLnhmLXl1bi5jb21cIjtcclxuICAgICAgICAgIHZhciBhcGlLZXlOYW1lID0gXCJhcGlfa2V5XCI7XHJcbiAgICAgICAgICB2YXIgZGF0ZSA9IG5ldyBEYXRlKCkudG9HTVRTdHJpbmcoKTtcclxuICAgICAgICAgIHZhciBhbGdvcml0aG0gPSBcImhtYWMtc2hhMjU2XCI7XHJcbiAgICAgICAgICB2YXIgaGVhZGVycyA9IFwiaG9zdCBkYXRlIHJlcXVlc3QtbGluZVwiO1xyXG4gICAgICAgICAgdmFyIHNpZ25hdHVyZU9yaWdpbiA9IGBob3N0OiAke2hvc3R9XFxuZGF0ZTogJHtkYXRlfVxcbkdFVCAvdjIuMS9jaGF0IEhUVFAvMS4xYDtcclxuICAgICAgICAgIHZhciBzaWduYXR1cmVTaGEgPSBDcnlwdG9KUy5IbWFjU0hBMjU2KHNpZ25hdHVyZU9yaWdpbiwgdGhpcy5BUElTZWNyZXQpO1xyXG4gICAgICAgICAgdmFyIHNpZ25hdHVyZSA9IENyeXB0b0pTLmVuYy5CYXNlNjQuc3RyaW5naWZ5KHNpZ25hdHVyZVNoYSk7XHJcbiAgICAgICAgICB2YXIgYXV0aG9yaXphdGlvbk9yaWdpbiA9XHJcbiAgICAgICAgICAgIGAke2FwaUtleU5hbWV9PVwiJHt0aGlzLkFQSUtleX1cIiwgYWxnb3JpdGhtPVwiJHthbGdvcml0aG19XCIsIGhlYWRlcnM9XCIke2hlYWRlcnN9XCIsIHNpZ25hdHVyZT1cIiR7c2lnbmF0dXJlfVwiYDtcclxuICAgICAgICAgIHZhciBhdXRob3JpemF0aW9uID0gYmFzZTY0LmVuY29kZShhdXRob3JpemF0aW9uT3JpZ2luKTtcclxuICAgICAgICAgIHVybCA9IGAke3VybH0/YXV0aG9yaXphdGlvbj0ke2F1dGhvcml6YXRpb259JmRhdGU9JHtlbmNvZGVVUkkoZGF0ZSl9Jmhvc3Q9JHtob3N0fWA7XHJcblxyXG4gICAgICAgICAgLy8gY29uc29sZS5sb2codXJsKVxyXG4gICAgICAgICAgcmVzb2x2ZSh1cmwpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9LFxyXG4gICAgICAvLyDmu5rliqjliLDlpLTpg6hcclxuICAgICAgYmluZFNjcm9sbCgpIHtcclxuICAgICAgXHRpZiAodGhpcy51c2VySWQgPT0gMCkge1xyXG4gICAgICBcdFx0dGhpcy5nZXRIaXN0b3J5KCk7XHJcbiAgICAgIFx0XHR0aGlzLmdldHByb2R1Y3RJbmZvKCk7XHJcbiAgICAgIFx0XHR0aGlzLmdldE9yZGVySW5mbygpO1xyXG4gICAgICBcdFx0dGhpcy5nZXRSZWZ1bmREZXRhaWwoKTtcclxuICAgICAgXHRcdHRoaXMuZ2V0U3RvcmVEZXRhaWwoKTtcclxuICAgICAgXHR9IGVsc2Uge1xyXG4gICAgICBcdFx0dGhpcy5nZXRNZXJIaXN0b3J5KCk7XHJcbiAgICAgIFx0fVxyXG4gICAgICB9LFxyXG4gICAgICB0b3VjaG1vdmUoZSl7XHJcbiAgICAgICAgdW5pLmhpZGVLZXlib2FyZCgpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbjwvc2NyaXB0PlxyXG5cclxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XHJcbiAgQGltcG9ydCBcIi4uLy4uL2xpYi9nbG9iYWwuc2Nzc1wiO1xyXG5cclxuICBwYWdlIHtcclxuICAgIGJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjU7XHJcbiAgICBmb250LXNpemU6IDI4cnB4O1xyXG4gIH1cclxuICBcclxuICBAa2V5ZnJhbWVzIGJsaW5rIHtcclxuICAgIDAlIHsgb3BhY2l0eTogMTsgfVxyXG4gICAgNTAlIHsgb3BhY2l0eTogMDsgfVxyXG4gICAgMTAwJSB7IG9wYWNpdHk6IDE7IH1cclxuICB9XHJcbiAgXHJcbiAgLmJsaW5raW5nLWJveCB7XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzMzO1xyXG4gICAgY29sb3I6ICMzMzM7XHJcbiAgICBhbmltYXRpb246IGJsaW5rIDFzIGluZmluaXRlO1xyXG4gICAgd2lkdGg6IDJweDtcclxuICAgIG92ZXJmbG93OiBoaWRkZW47XHJcbiAgfVxyXG5cclxuICAud3JhcHBlciB7XHJcbiAgICBoZWlnaHQ6IGF1dG8gIWltcG9ydGFudDtcclxuICB9XHJcblxyXG4gIC8qIOWKoOi9veaVsOaNruaPkOekuiAqL1xyXG4gIC50aXBzIHtcclxuICAgIHBvc2l0aW9uOiBmaXhlZDtcclxuICAgIGxlZnQ6IDA7XHJcbiAgICB0b3A6IHZhcigtLXdpbmRvdy10b3ApO1xyXG4gICAgd2lkdGg6IDEwMCU7XHJcbiAgICB6LWluZGV4OiA5O1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjE1KTtcclxuICAgIGhlaWdodDogNzJycHg7XHJcbiAgICBsaW5lLWhlaWdodDogNzJycHg7XHJcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTgwcnB4KTtcclxuICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjNzIGVhc2UtaW4tb3V0IDBzO1xyXG5cclxuICAgICYuc2hvdyB7XHJcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC5ib3gtMSB7XHJcbiAgICB3aWR0aDogMTAwJTtcclxuICAgIGhlaWdodDogYXV0bztcclxuICAgIG1pbi1oZWlnaHQ6IGNhbGMoMTAwdmggLSAxMDBycHgpO1xyXG4gICAgcGFkZGluZy1ib3R0b206IDEwMHJweDtcclxuICAgIGJveC1zaXppbmc6IGNvbnRlbnQtYm94O1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XHJcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xyXG5cclxuICAgIC8qIOWFvOWuuWlQaG9uZVggKi9cclxuICAgIG1hcmdpbi1ib3R0b206IDA7XHJcbiAgICBtYXJnaW4tYm90dG9tOiBjb25zdGFudChzYWZlLWFyZWEtaW5zZXQtYm90dG9tKTtcclxuICAgIG1hcmdpbi1ib3R0b206IGVudihzYWZlLWFyZWEtaW5zZXQtYm90dG9tKTtcclxuICB9XHJcblxyXG4gIC5tdWx0aWxpbmUtdGV4dCB7XHJcbiAgICB3aGl0ZS1zcGFjZTogcHJlLWxpbmU7XHJcbiAgICAvKiDmiJYgd2hpdGUtc3BhY2U6IHByZS13cmFwOyAqL1xyXG4gIH1cclxuXHJcbiAgLmJveC0yIHtcclxuICAgIHBvc2l0aW9uOiBmaXhlZDtcclxuICAgIGxlZnQ6IDA7XHJcbiAgICB3aWR0aDogMTAwJTtcclxuICAgIGJvdHRvbTogMDtcclxuICAgIGhlaWdodDogYXV0bztcclxuICAgIHotaW5kZXg6IDI7XHJcbiAgICBib3JkZXItdG9wOiAjZTVlNWU1IHNvbGlkIDFweDtcclxuICAgIGJveC1zaXppbmc6IGNvbnRlbnQtYm94O1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2Y1ZjVmNTtcclxuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsgLyog5Yid5aeL5YyWIHRyYW5zZm9ybSDlsZ7mgKcgKi9cclxuICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjNzIGVhc2U7IC8qIOa3u+WKoOi/h+a4oeaViOaenCAqL1xyXG5cclxuICAgIC8qIOWFvOWuuWlQaG9uZVggKi9cclxuICAgIHBhZGRpbmctYm90dG9tOiAwO1xyXG4gICAgcGFkZGluZy1ib3R0b206IGNvbnN0YW50KHNhZmUtYXJlYS1pbnNldC1ib3R0b20pO1xyXG4gICAgcGFkZGluZy1ib3R0b206IGVudihzYWZlLWFyZWEtaW5zZXQtYm90dG9tKTtcclxuXHJcbiAgICA+dmlldyB7XHJcbiAgICAgIHBhZGRpbmc6IDAgMjBycHg7XHJcbiAgICAgIGhlaWdodDogMTAwcnB4O1xyXG4gICAgfVxyXG5cclxuICAgIC5jb250ZW50IHtcclxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcclxuICAgICAgaGVpZ2h0OiA2NHJweDtcclxuICAgICAgcGFkZGluZzogMCAyMHJweDtcclxuICAgICAgYm9yZGVyLXJhZGl1czogNnJweDtcclxuICAgICAgZm9udC1zaXplOiAyOHJweDtcclxuICAgIH1cclxuXHJcbiAgICAuc2VuZCB7XHJcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICMyNTczZmI7XHJcbiAgICAgIGNvbG9yOiAjZmZmO1xyXG4gICAgICBoZWlnaHQ6IDY0cnB4O1xyXG4gICAgICBtYXJnaW4tbGVmdDogMjBycHg7XHJcbiAgICAgIGJvcmRlci1yYWRpdXM6IDZycHg7XHJcbiAgICAgIHBhZGRpbmc6IDA7XHJcbiAgICAgIHdpZHRoOiAxMjBycHg7XHJcbiAgICAgIGxpbmUtaGVpZ2h0OiA2MnJweDtcclxuXHJcbiAgICAgICY6YWN0aXZlIHtcclxuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMTU3M2ZiO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAudGFsay1saXN0IHtcclxuICAgIHBhZGRpbmctYm90dG9tOiAyMHJweDtcclxuXHJcbiAgICAvKiDmtojmga/pobnvvIzln7rnoYDnsbsgKi9cclxuICAgIC5pdGVtIHtcclxuICAgICAgcGFkZGluZzogMjBycHggMjBycHggMCAyMHJweDtcclxuICAgICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XHJcbiAgICAgIGFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XHJcbiAgICAgIGNvbG9yOiAjMzMzO1xyXG5cclxuICAgICAgLnBpYyB7XHJcbiAgICAgICAgd2lkdGg6IDkycnB4O1xyXG4gICAgICAgIGhlaWdodDogOTJycHg7XHJcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlO1xyXG4gICAgICAgIGJvcmRlcjogI2ZmZiBzb2xpZCAxcHg7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC5jb250ZW50IHtcclxuICAgICAgICBwYWRkaW5nOiAyMHJweDtcclxuICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7XHJcbiAgICAgICAgbWF4LXdpZHRoOiA1MDBycHg7XHJcbiAgICAgICAgd29yZC1icmVhazogYnJlYWstYWxsO1xyXG4gICAgICAgIGxpbmUtaGVpZ2h0OiA1MnJweDtcclxuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8qIOaUtuWIsOeahOa2iOaBryAqL1xyXG4gICAgICAmLnB1bGwge1xyXG4gICAgICAgIC5jb250ZW50IHtcclxuICAgICAgICAgIG1pbi13aWR0aDogMjBycHg7XHJcbiAgICAgICAgICBtaW4taGVpZ2h0OiA1MnJweDtcclxuICAgICAgICAgIG1hcmdpbi1sZWZ0OiAzMnJweDtcclxuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XHJcblxyXG4gICAgICAgICAgJjo6YWZ0ZXIge1xyXG4gICAgICAgICAgICBjb250ZW50OiAnJztcclxuICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XHJcbiAgICAgICAgICAgIHdpZHRoOiAwO1xyXG4gICAgICAgICAgICBoZWlnaHQ6IDA7XHJcbiAgICAgICAgICAgIGJvcmRlci10b3A6IDE2cnB4IHNvbGlkIHRyYW5zcGFyZW50O1xyXG4gICAgICAgICAgICBib3JkZXItYm90dG9tOiAxNnJweCBzb2xpZCB0cmFuc3BhcmVudDtcclxuICAgICAgICAgICAgYm9yZGVyLXJpZ2h0OiAyMHJweCBzb2xpZCAjZmZmO1xyXG4gICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICAgICAgICAgIHRvcDogMzBycHg7XHJcbiAgICAgICAgICAgIGxlZnQ6IC0xOHJweDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8qIOWPkeWHuueahOa2iOaBryAqL1xyXG4gICAgICAmLnB1c2gge1xyXG4gICAgICAgIC8qIOS4u+i9tOS4uuawtOW5s+aWueWQke+8jOi1t+eCueWcqOWPs+err+OAguS9v+S4jeS/ruaUuURPTee7k+aehO+8jOS5n+iDveaUueWPmOWFg+e0oOaOkuWIl+mhuuW6jyAqL1xyXG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTtcclxuXHJcbiAgICAgICAgLmNvbnRlbnQge1xyXG4gICAgICAgICAgbWluLXdpZHRoOiAyMHJweDtcclxuICAgICAgICAgIG1pbi1oZWlnaHQ6IDUycnB4O1xyXG4gICAgICAgICAgbWFyZ2luLXJpZ2h0OiAzMnJweDtcclxuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMyNTczZmI7XHJcbiAgICAgICAgICBjb2xvcjogI2ZmZjtcclxuXHJcbiAgICAgICAgICAmOjphZnRlciB7XHJcbiAgICAgICAgICAgIGNvbnRlbnQ6ICcnO1xyXG4gICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcclxuICAgICAgICAgICAgd2lkdGg6IDA7XHJcbiAgICAgICAgICAgIGhlaWdodDogMDtcclxuICAgICAgICAgICAgYm9yZGVyLXRvcDogMTZycHggc29saWQgdHJhbnNwYXJlbnQ7XHJcbiAgICAgICAgICAgIGJvcmRlci1ib3R0b206IDE2cnB4IHNvbGlkIHRyYW5zcGFyZW50O1xyXG4gICAgICAgICAgICBib3JkZXItbGVmdDogMjBycHggc29saWQgIzI1NzNmYjtcclxuICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgICAgICAgICB0b3A6IDMwcnB4O1xyXG4gICAgICAgICAgICByaWdodDogLTE4cnB4O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLmJpbmctbWF0aCB7XHJcbiAgICBtYXJnaW46IDAgIWltcG9ydGFudDtcclxuICAgIHBhZGRpbmc6IDAgIWltcG9ydGFudDtcclxuICB9XHJcbiAgLnBsYWNlaG9sZGVyIHtcclxuICAgIHdpZHRoOiAxMDB2dztcclxuICAgIGJhY2tncm91bmQtY29sb3I6ICMxNTczZmI7XHJcbiAgICAvLyBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcclxuICAgIC8vIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsgLyog5Yid5aeL5YyWIHRyYW5zZm9ybSDlsZ7mgKcgKi9cclxuICAgIC8vIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjNzIGVhc2U7IC8qIOa3u+WKoOi/h+a4oeaViOaenCAqL1xyXG4gIH1cclxuPC9zdHlsZT4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///17\n"); +eval("/* WEBPACK VAR INJECTION */(function(__f__) {\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ 1);\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _toConsumableArray2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/toConsumableArray */ 22));\nvar _typeof2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/typeof */ 4));\nvar _defineProperty2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/defineProperty */ 2));\nvar _createAnimation = __webpack_require__(/*! ./createAnimation */ 28);\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n/**\n * Transition 过渡动画\n * @description 简单过渡动画组件\n * @tutorial https://ext.dcloud.net.cn/plugin?id=985\n * @property {Boolean} show = [false|true] 控制组件显示或隐藏\n * @property {Array|String} modeClass = [fade|slide-top|slide-right|slide-bottom|slide-left|zoom-in|zoom-out] 过渡动画类型\n * @value fade 渐隐渐出过渡\n * @value slide-top 由上至下过渡\n * @value slide-right 由右至左过渡\n * @value slide-bottom 由下至上过渡\n * @value slide-left 由左至右过渡\n * @value zoom-in 由小到大过渡\n * @value zoom-out 由大到小过渡\n * @property {Number} duration 过渡动画持续时间\n * @property {Object} styles 组件样式,同 css 样式,注意带’-‘连接符的属性需要使用小驼峰写法如:`backgroundColor:red`\n */\nvar _default2 = {\n name: 'uniTransition',\n emits: ['click', 'change'],\n props: {\n show: {\n type: Boolean,\n default: false\n },\n modeClass: {\n type: [Array, String],\n default: function _default() {\n return 'fade';\n }\n },\n duration: {\n type: Number,\n default: 300\n },\n styles: {\n type: Object,\n default: function _default() {\n return {};\n }\n },\n customClass: {\n type: String,\n default: ''\n },\n onceRender: {\n type: Boolean,\n default: false\n }\n },\n data: function data() {\n return {\n isShow: false,\n transform: '',\n opacity: 1,\n animationData: {},\n durationTime: 300,\n config: {}\n };\n },\n watch: {\n show: {\n handler: function handler(newVal) {\n if (newVal) {\n this.open();\n } else {\n // 避免上来就执行 close,导致动画错乱\n if (this.isShow) {\n this.close();\n }\n }\n },\n immediate: true\n }\n },\n computed: {\n // 生成样式数据\n stylesObject: function stylesObject() {\n var styles = _objectSpread(_objectSpread({}, this.styles), {}, {\n 'transition-duration': this.duration / 1000 + 's'\n });\n var transform = '';\n for (var i in styles) {\n var line = this.toLine(i);\n transform += line + ':' + styles[i] + ';';\n }\n return transform;\n },\n // 初始化动画条件\n transformStyles: function transformStyles() {\n return 'transform:' + this.transform + ';' + 'opacity:' + this.opacity + ';' + this.stylesObject;\n }\n },\n created: function created() {\n // 动画默认配置\n this.config = {\n duration: this.duration,\n timingFunction: 'ease',\n transformOrigin: '50% 50%',\n delay: 0\n };\n this.durationTime = this.duration;\n },\n methods: {\n /**\n * ref 触发 初始化动画\n */\n init: function init() {\n var obj = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n if (obj.duration) {\n this.durationTime = obj.duration;\n }\n this.animation = (0, _createAnimation.createAnimation)(Object.assign(this.config, obj), this);\n },\n /**\n * 点击组件触发回调\n */\n onClick: function onClick() {\n this.$emit('click', {\n detail: this.isShow\n });\n },\n /**\n * ref 触发 动画分组\n * @param {Object} obj\n */\n step: function step(obj) {\n var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n if (!this.animation) return;\n for (var i in obj) {\n try {\n if ((0, _typeof2.default)(obj[i]) === 'object') {\n var _this$animation;\n (_this$animation = this.animation)[i].apply(_this$animation, (0, _toConsumableArray2.default)(obj[i]));\n } else {\n this.animation[i](obj[i]);\n }\n } catch (e) {\n __f__(\"error\", \"\\u65B9\\u6CD5 \".concat(i, \" \\u4E0D\\u5B58\\u5728\"), \" at uni_modules/uni-transition/components/uni-transition/uni-transition.vue:148\");\n }\n }\n this.animation.step(config);\n return this;\n },\n /**\n * ref 触发 执行动画\n */\n run: function run(fn) {\n if (!this.animation) return;\n this.animation.run(fn);\n },\n // 开始过度动画\n open: function open() {\n var _this = this;\n clearTimeout(this.timer);\n this.transform = '';\n this.isShow = true;\n var _this$styleInit = this.styleInit(false),\n opacity = _this$styleInit.opacity,\n transform = _this$styleInit.transform;\n if (typeof opacity !== 'undefined') {\n this.opacity = opacity;\n }\n this.transform = transform;\n // 确保动态样式已经生效后,执行动画,如果不加 nextTick ,会导致 wx 动画执行异常\n this.$nextTick(function () {\n // TODO 定时器保证动画完全执行,目前有些问题,后面会取消定时器\n _this.timer = setTimeout(function () {\n _this.animation = (0, _createAnimation.createAnimation)(_this.config, _this);\n _this.tranfromInit(false).step();\n _this.animation.run();\n _this.$emit('change', {\n detail: _this.isShow\n });\n }, 20);\n });\n },\n // 关闭过度动画\n close: function close(type) {\n var _this2 = this;\n if (!this.animation) return;\n this.tranfromInit(true).step().run(function () {\n _this2.isShow = false;\n _this2.animationData = null;\n _this2.animation = null;\n var _this2$styleInit = _this2.styleInit(false),\n opacity = _this2$styleInit.opacity,\n transform = _this2$styleInit.transform;\n _this2.opacity = opacity || 1;\n _this2.transform = transform;\n _this2.$emit('change', {\n detail: _this2.isShow\n });\n });\n },\n // 处理动画开始前的默认样式\n styleInit: function styleInit(type) {\n var _this3 = this;\n var styles = {\n transform: ''\n };\n var buildStyle = function buildStyle(type, mode) {\n if (mode === 'fade') {\n styles.opacity = _this3.animationType(type)[mode];\n } else {\n styles.transform += _this3.animationType(type)[mode] + ' ';\n }\n };\n if (typeof this.modeClass === 'string') {\n buildStyle(type, this.modeClass);\n } else {\n this.modeClass.forEach(function (mode) {\n buildStyle(type, mode);\n });\n }\n return styles;\n },\n // 处理内置组合动画\n tranfromInit: function tranfromInit(type) {\n var _this4 = this;\n var buildTranfrom = function buildTranfrom(type, mode) {\n var aniNum = null;\n if (mode === 'fade') {\n aniNum = type ? 0 : 1;\n } else {\n aniNum = type ? '-100%' : '0';\n if (mode === 'zoom-in') {\n aniNum = type ? 0.8 : 1;\n }\n if (mode === 'zoom-out') {\n aniNum = type ? 1.2 : 1;\n }\n if (mode === 'slide-right') {\n aniNum = type ? '100%' : '0';\n }\n if (mode === 'slide-bottom') {\n aniNum = type ? '100%' : '0';\n }\n }\n _this4.animation[_this4.animationMode()[mode]](aniNum);\n };\n if (typeof this.modeClass === 'string') {\n buildTranfrom(type, this.modeClass);\n } else {\n this.modeClass.forEach(function (mode) {\n buildTranfrom(type, mode);\n });\n }\n return this.animation;\n },\n animationType: function animationType(type) {\n return {\n fade: type ? 1 : 0,\n 'slide-top': \"translateY(\".concat(type ? '0' : '-100%', \")\"),\n 'slide-right': \"translateX(\".concat(type ? '0' : '100%', \")\"),\n 'slide-bottom': \"translateY(\".concat(type ? '0' : '100%', \")\"),\n 'slide-left': \"translateX(\".concat(type ? '0' : '-100%', \")\"),\n 'zoom-in': \"scaleX(\".concat(type ? 1 : 0.8, \") scaleY(\").concat(type ? 1 : 0.8, \")\"),\n 'zoom-out': \"scaleX(\".concat(type ? 1 : 1.2, \") scaleY(\").concat(type ? 1 : 1.2, \")\")\n };\n },\n // 内置动画类型与实际动画对应字典\n animationMode: function animationMode() {\n return {\n fade: 'opacity',\n 'slide-top': 'translateY',\n 'slide-right': 'translateX',\n 'slide-bottom': 'translateY',\n 'slide-left': 'translateX',\n 'zoom-in': 'scale',\n 'zoom-out': 'scale'\n };\n },\n // 驼峰转中横线\n toLine: function toLine(name) {\n return name.replace(/([A-Z])/g, '-$1').toLowerCase();\n }\n }\n};\nexports.default = _default2;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/vue-cli-plugin-uni/lib/format-log.js */ 21)[\"default\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vdW5pX21vZHVsZXMvdW5pLXRyYW5zaXRpb24vY29tcG9uZW50cy91bmktdHJhbnNpdGlvbi91bmktdHJhbnNpdGlvbi52dWUiXSwibmFtZXMiOlsibmFtZSIsImVtaXRzIiwicHJvcHMiLCJzaG93IiwidHlwZSIsImRlZmF1bHQiLCJtb2RlQ2xhc3MiLCJkdXJhdGlvbiIsInN0eWxlcyIsImN1c3RvbUNsYXNzIiwib25jZVJlbmRlciIsImRhdGEiLCJpc1Nob3ciLCJ0cmFuc2Zvcm0iLCJvcGFjaXR5IiwiYW5pbWF0aW9uRGF0YSIsImR1cmF0aW9uVGltZSIsImNvbmZpZyIsIndhdGNoIiwiaGFuZGxlciIsImltbWVkaWF0ZSIsImNvbXB1dGVkIiwic3R5bGVzT2JqZWN0IiwidHJhbnNmb3JtU3R5bGVzIiwiY3JlYXRlZCIsInRpbWluZ0Z1bmN0aW9uIiwidHJhbnNmb3JtT3JpZ2luIiwiZGVsYXkiLCJtZXRob2RzIiwiaW5pdCIsIm9uQ2xpY2siLCJkZXRhaWwiLCJzdGVwIiwicnVuIiwib3BlbiIsImNsZWFyVGltZW91dCIsImNsb3NlIiwic3R5bGVJbml0IiwiYnVpbGRTdHlsZSIsInRyYW5mcm9tSW5pdCIsImFuaU51bSIsImJ1aWxkVHJhbmZyb20iLCJhbmltYXRpb25UeXBlIiwiZmFkZSIsImFuaW1hdGlvbk1vZGUiLCJ0b0xpbmUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFVQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWZBLGdCQWdCQTtFQUNBQTtFQUNBQztFQUNBQztJQUNBQztNQUNBQztNQUNBQztJQUNBO0lBQ0FDO01BQ0FGO01BQ0FDO1FBQ0E7TUFDQTtJQUNBO0lBQ0FFO01BQ0FIO01BQ0FDO0lBQ0E7SUFDQUc7TUFDQUo7TUFDQUM7UUFDQTtNQUNBO0lBQ0E7SUFDQUk7TUFDQUw7TUFDQUM7SUFDQTtJQUNBSztNQUNBTjtNQUNBQztJQUNBO0VBQ0E7RUFDQU07SUFDQTtNQUNBQztNQUNBQztNQUNBQztNQUNBQztNQUNBQztNQUNBQztJQUNBO0VBQ0E7RUFDQUM7SUFDQWY7TUFDQWdCO1FBQ0E7VUFDQTtRQUNBO1VBQ0E7VUFDQTtZQUNBO1VBQ0E7UUFDQTtNQUNBO01BQ0FDO0lBQ0E7RUFDQTtFQUNBQztJQUNBO0lBQ0FDO01BQ0EsNkNBQ0E7UUFDQTtNQUFBLEVBQ0E7TUFDQTtNQUNBO1FBQ0E7UUFDQVQ7TUFDQTtNQUNBO0lBQ0E7SUFDQTtJQUNBVTtNQUNBO0lBQ0E7RUFDQTtFQUNBQztJQUNBO0lBQ0E7TUFDQWpCO01BQ0FrQjtNQUNBQztNQUNBQztJQUNBO0lBQ0E7RUFDQTtFQUNBQztJQUNBO0FBQ0E7QUFDQTtJQUNBQztNQUFBO01BQ0E7UUFDQTtNQUNBO01BQ0E7SUFDQTtJQUNBO0FBQ0E7QUFDQTtJQUNBQztNQUNBO1FBQ0FDO01BQ0E7SUFDQTtJQUNBO0FBQ0E7QUFDQTtBQUNBO0lBQ0FDO01BQUE7TUFDQTtNQUNBO1FBQ0E7VUFDQTtZQUFBO1lBQ0E7VUFDQTtZQUNBO1VBQ0E7UUFDQTtVQUNBO1FBQ0E7TUFDQTtNQUNBO01BQ0E7SUFDQTtJQUNBO0FBQ0E7QUFDQTtJQUNBQztNQUNBO01BQ0E7SUFDQTtJQUNBO0lBQ0FDO01BQUE7TUFDQUM7TUFDQTtNQUNBO01BQ0E7UUFBQXJCO1FBQUFEO01BQ0E7UUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO1FBQ0E7UUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1lBQ0FrQjtVQUNBO1FBQ0E7TUFDQTtJQUNBO0lBQ0E7SUFDQUs7TUFBQTtNQUNBO01BQ0Esd0JBQ0FKLE9BQ0FDO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7VUFBQW5CO1VBQUFEO1FBQ0E7UUFDQTtRQUNBO1VBQ0FrQjtRQUNBO01BQ0E7SUFDQTtJQUNBO0lBQ0FNO01BQUE7TUFDQTtRQUNBeEI7TUFDQTtNQUNBO1FBQ0E7VUFDQUw7UUFDQTtVQUNBQTtRQUNBO01BQ0E7TUFDQTtRQUNBOEI7TUFDQTtRQUNBO1VBQ0FBO1FBQ0E7TUFDQTtNQUNBO0lBQ0E7SUFDQTtJQUNBQztNQUFBO01BQ0E7UUFDQTtRQUNBO1VBQ0FDO1FBQ0E7VUFDQUE7VUFDQTtZQUNBQTtVQUNBO1VBQ0E7WUFDQUE7VUFDQTtVQUNBO1lBQ0FBO1VBQ0E7VUFDQTtZQUNBQTtVQUNBO1FBQ0E7UUFDQTtNQUNBO01BQ0E7UUFDQUM7TUFDQTtRQUNBO1VBQ0FBO1FBQ0E7TUFDQTtNQUVBO0lBQ0E7SUFDQUM7TUFDQTtRQUNBQztRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtNQUNBO0lBQ0E7SUFDQTtJQUNBQztNQUNBO1FBQ0FEO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO01BQ0E7SUFDQTtJQUNBO0lBQ0FFO01BQ0E7SUFDQTtFQUNBO0FBQ0E7QUFBQSw0QiIsImZpbGUiOiIyMC5qcyIsInNvdXJjZXNDb250ZW50IjpbIjx0ZW1wbGF0ZT5cbiAgPCEtLSAjaWZuZGVmIEFQUC1OVlVFIC0tPlxuICA8dmlldyB2LXNob3c9XCJpc1Nob3dcIiByZWY9XCJhbmlcIiA6YW5pbWF0aW9uPVwiYW5pbWF0aW9uRGF0YVwiIDpjbGFzcz1cImN1c3RvbUNsYXNzXCIgOnN0eWxlPVwidHJhbnNmb3JtU3R5bGVzXCIgQGNsaWNrPVwib25DbGlja1wiPjxzbG90Pjwvc2xvdD48L3ZpZXc+XG4gIDwhLS0gI2VuZGlmIC0tPlxuICA8IS0tICNpZmRlZiBBUFAtTlZVRSAtLT5cbiAgPHZpZXcgdi1pZj1cImlzU2hvd1wiIHJlZj1cImFuaVwiIDphbmltYXRpb249XCJhbmltYXRpb25EYXRhXCIgOmNsYXNzPVwiY3VzdG9tQ2xhc3NcIiA6c3R5bGU9XCJ0cmFuc2Zvcm1TdHlsZXNcIiBAY2xpY2s9XCJvbkNsaWNrXCI+PHNsb3Q+PC9zbG90Pjwvdmlldz5cbiAgPCEtLSAjZW5kaWYgLS0+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgY3JlYXRlQW5pbWF0aW9uIH0gZnJvbSAnLi9jcmVhdGVBbmltYXRpb24nXG5cbi8qKlxuICogVHJhbnNpdGlvbiDov4fmuKHliqjnlLtcbiAqIEBkZXNjcmlwdGlvbiDnroDljZXov4fmuKHliqjnlLvnu4Tku7ZcbiAqIEB0dXRvcmlhbCBodHRwczovL2V4dC5kY2xvdWQubmV0LmNuL3BsdWdpbj9pZD05ODVcbiAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gc2hvdyA9IFtmYWxzZXx0cnVlXSDmjqfliLbnu4Tku7bmmL7npLrmiJbpmpDol49cbiAqIEBwcm9wZXJ0eSB7QXJyYXl8U3RyaW5nfSBtb2RlQ2xhc3MgPSBbZmFkZXxzbGlkZS10b3B8c2xpZGUtcmlnaHR8c2xpZGUtYm90dG9tfHNsaWRlLWxlZnR8em9vbS1pbnx6b29tLW91dF0g6L+H5rih5Yqo55S757G75Z6LXG4gKiAgQHZhbHVlIGZhZGUg5riQ6ZqQ5riQ5Ye66L+H5rihXG4gKiAgQHZhbHVlIHNsaWRlLXRvcCDnlLHkuIroh7PkuIvov4fmuKFcbiAqICBAdmFsdWUgc2xpZGUtcmlnaHQg55Sx5Y+z6Iez5bem6L+H5rihXG4gKiAgQHZhbHVlIHNsaWRlLWJvdHRvbSDnlLHkuIvoh7PkuIrov4fmuKFcbiAqICBAdmFsdWUgc2xpZGUtbGVmdCDnlLHlt6boh7Plj7Pov4fmuKFcbiAqICBAdmFsdWUgem9vbS1pbiDnlLHlsI/liLDlpKfov4fmuKFcbiAqICBAdmFsdWUgem9vbS1vdXQg55Sx5aSn5Yiw5bCP6L+H5rihXG4gKiBAcHJvcGVydHkge051bWJlcn0gZHVyYXRpb24g6L+H5rih5Yqo55S75oyB57ut5pe26Ze0XG4gKiBAcHJvcGVydHkge09iamVjdH0gc3R5bGVzIOe7hOS7tuagt+W8j++8jOWQjCBjc3Mg5qC35byP77yM5rOo5oSP5bim4oCZLeKAmOi/nuaOpeespueahOWxnuaAp+mcgOimgeS9v+eUqOWwj+mpvOWzsOWGmeazleWmgu+8mmBiYWNrZ3JvdW5kQ29sb3I6cmVkYFxuICovXG5leHBvcnQgZGVmYXVsdCB7XG5cdG5hbWU6ICd1bmlUcmFuc2l0aW9uJyxcblx0ZW1pdHM6WydjbGljaycsJ2NoYW5nZSddLFxuXHRwcm9wczoge1xuXHRcdHNob3c6IHtcblx0XHRcdHR5cGU6IEJvb2xlYW4sXG5cdFx0XHRkZWZhdWx0OiBmYWxzZVxuXHRcdH0sXG5cdFx0bW9kZUNsYXNzOiB7XG5cdFx0XHR0eXBlOiBbQXJyYXksIFN0cmluZ10sXG5cdFx0XHRkZWZhdWx0KCkge1xuXHRcdFx0XHRyZXR1cm4gJ2ZhZGUnXG5cdFx0XHR9XG5cdFx0fSxcblx0XHRkdXJhdGlvbjoge1xuXHRcdFx0dHlwZTogTnVtYmVyLFxuXHRcdFx0ZGVmYXVsdDogMzAwXG5cdFx0fSxcblx0XHRzdHlsZXM6IHtcblx0XHRcdHR5cGU6IE9iamVjdCxcblx0XHRcdGRlZmF1bHQoKSB7XG5cdFx0XHRcdHJldHVybiB7fVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0Y3VzdG9tQ2xhc3M6e1xuXHRcdFx0dHlwZTogU3RyaW5nLFxuXHRcdFx0ZGVmYXVsdDogJydcblx0XHR9LFxuXHRcdG9uY2VSZW5kZXI6e1xuXHRcdFx0dHlwZTpCb29sZWFuLFxuXHRcdFx0ZGVmYXVsdDpmYWxzZVxuXHRcdH0sXG5cdH0sXG5cdGRhdGEoKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGlzU2hvdzogZmFsc2UsXG5cdFx0XHR0cmFuc2Zvcm06ICcnLFxuXHRcdFx0b3BhY2l0eTogMSxcblx0XHRcdGFuaW1hdGlvbkRhdGE6IHt9LFxuXHRcdFx0ZHVyYXRpb25UaW1lOiAzMDAsXG5cdFx0XHRjb25maWc6IHt9XG5cdFx0fVxuXHR9LFxuXHR3YXRjaDoge1xuXHRcdHNob3c6IHtcblx0XHRcdGhhbmRsZXIobmV3VmFsKSB7XG5cdFx0XHRcdGlmIChuZXdWYWwpIHtcblx0XHRcdFx0XHR0aGlzLm9wZW4oKVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIOmBv+WFjeS4iuadpeWwseaJp+ihjCBjbG9zZSzlr7zoh7TliqjnlLvplJnkubFcblx0XHRcdFx0XHRpZiAodGhpcy5pc1Nob3cpIHtcblx0XHRcdFx0XHRcdHRoaXMuY2xvc2UoKVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdGltbWVkaWF0ZTogdHJ1ZVxuXHRcdH1cblx0fSxcblx0Y29tcHV0ZWQ6IHtcblx0XHQvLyDnlJ/miJDmoLflvI/mlbDmja5cblx0XHRzdHlsZXNPYmplY3QoKSB7XG5cdFx0XHRsZXQgc3R5bGVzID0ge1xuXHRcdFx0XHQuLi50aGlzLnN0eWxlcyxcblx0XHRcdFx0J3RyYW5zaXRpb24tZHVyYXRpb24nOiB0aGlzLmR1cmF0aW9uIC8gMTAwMCArICdzJ1xuXHRcdFx0fVxuXHRcdFx0bGV0IHRyYW5zZm9ybSA9ICcnXG5cdFx0XHRmb3IgKGxldCBpIGluIHN0eWxlcykge1xuXHRcdFx0XHRsZXQgbGluZSA9IHRoaXMudG9MaW5lKGkpXG5cdFx0XHRcdHRyYW5zZm9ybSArPSBsaW5lICsgJzonICsgc3R5bGVzW2ldICsgJzsnXG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdHJhbnNmb3JtXG5cdFx0fSxcblx0XHQvLyDliJ3lp4vljJbliqjnlLvmnaHku7Zcblx0XHR0cmFuc2Zvcm1TdHlsZXMoKSB7XG5cdFx0XHRyZXR1cm4gJ3RyYW5zZm9ybTonICsgdGhpcy50cmFuc2Zvcm0gKyAnOycgKyAnb3BhY2l0eTonICsgdGhpcy5vcGFjaXR5ICsgJzsnICsgdGhpcy5zdHlsZXNPYmplY3Rcblx0XHR9XG5cdH0sXG5cdGNyZWF0ZWQoKSB7XG5cdFx0Ly8g5Yqo55S76buY6K6k6YWN572uXG5cdFx0dGhpcy5jb25maWcgPSB7XG5cdFx0XHRkdXJhdGlvbjogdGhpcy5kdXJhdGlvbixcblx0XHRcdHRpbWluZ0Z1bmN0aW9uOiAnZWFzZScsXG5cdFx0XHR0cmFuc2Zvcm1PcmlnaW46ICc1MCUgNTAlJyxcblx0XHRcdGRlbGF5OiAwXG5cdFx0fVxuXHRcdHRoaXMuZHVyYXRpb25UaW1lID0gdGhpcy5kdXJhdGlvblxuXHR9LFxuXHRtZXRob2RzOiB7XG5cdFx0LyoqXG5cdFx0ICogIHJlZiDop6blj5Eg5Yid5aeL5YyW5Yqo55S7XG5cdFx0ICovXG5cdFx0aW5pdChvYmogPSB7fSkge1xuXHRcdFx0aWYgKG9iai5kdXJhdGlvbikge1xuXHRcdFx0XHR0aGlzLmR1cmF0aW9uVGltZSA9IG9iai5kdXJhdGlvblxuXHRcdFx0fVxuXHRcdFx0dGhpcy5hbmltYXRpb24gPSBjcmVhdGVBbmltYXRpb24oT2JqZWN0LmFzc2lnbih0aGlzLmNvbmZpZywgb2JqKSx0aGlzKVxuXHRcdH0sXG5cdFx0LyoqXG5cdFx0ICog54K55Ye757uE5Lu26Kem5Y+R5Zue6LCDXG5cdFx0ICovXG5cdFx0b25DbGljaygpIHtcblx0XHRcdHRoaXMuJGVtaXQoJ2NsaWNrJywge1xuXHRcdFx0XHRkZXRhaWw6IHRoaXMuaXNTaG93XG5cdFx0XHR9KVxuXHRcdH0sXG5cdFx0LyoqXG5cdFx0ICogcmVmIOinpuWPkSDliqjnlLvliIbnu4Rcblx0XHQgKiBAcGFyYW0ge09iamVjdH0gb2JqXG5cdFx0ICovXG5cdFx0c3RlcChvYmosIGNvbmZpZyA9IHt9KSB7XG5cdFx0XHRpZiAoIXRoaXMuYW5pbWF0aW9uKSByZXR1cm5cblx0XHRcdGZvciAobGV0IGkgaW4gb2JqKSB7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0aWYodHlwZW9mIG9ialtpXSA9PT0gJ29iamVjdCcpe1xuXHRcdFx0XHRcdFx0dGhpcy5hbmltYXRpb25baV0oLi4ub2JqW2ldKVxuXHRcdFx0XHRcdH1lbHNle1xuXHRcdFx0XHRcdFx0dGhpcy5hbmltYXRpb25baV0ob2JqW2ldKVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoYOaWueazlSAke2l9IOS4jeWtmOWcqGApXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHRoaXMuYW5pbWF0aW9uLnN0ZXAoY29uZmlnKVxuXHRcdFx0cmV0dXJuIHRoaXNcblx0XHR9LFxuXHRcdC8qKlxuXHRcdCAqICByZWYg6Kem5Y+RIOaJp+ihjOWKqOeUu1xuXHRcdCAqL1xuXHRcdHJ1bihmbikge1xuXHRcdFx0aWYgKCF0aGlzLmFuaW1hdGlvbikgcmV0dXJuXG5cdFx0XHR0aGlzLmFuaW1hdGlvbi5ydW4oZm4pXG5cdFx0fSxcblx0XHQvLyDlvIDlp4vov4fluqbliqjnlLtcblx0XHRvcGVuKCkge1xuXHRcdFx0Y2xlYXJUaW1lb3V0KHRoaXMudGltZXIpXG5cdFx0XHR0aGlzLnRyYW5zZm9ybSA9ICcnXG5cdFx0XHR0aGlzLmlzU2hvdyA9IHRydWVcblx0XHRcdGxldCB7IG9wYWNpdHksIHRyYW5zZm9ybSB9ID0gdGhpcy5zdHlsZUluaXQoZmFsc2UpXG5cdFx0XHRpZiAodHlwZW9mIG9wYWNpdHkgIT09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHRcdHRoaXMub3BhY2l0eSA9IG9wYWNpdHlcblx0XHRcdH1cblx0XHRcdHRoaXMudHJhbnNmb3JtID0gdHJhbnNmb3JtXG5cdFx0XHQvLyDnoa7kv53liqjmgIHmoLflvI/lt7Lnu4/nlJ/mlYjlkI7vvIzmiafooYzliqjnlLvvvIzlpoLmnpzkuI3liqAgbmV4dFRpY2sg77yM5Lya5a+86Ie0IHd4IOWKqOeUu+aJp+ihjOW8guW4uFxuXHRcdFx0dGhpcy4kbmV4dFRpY2soKCkgPT4ge1xuXHRcdFx0XHQvLyBUT0RPIOWumuaXtuWZqOS/neivgeWKqOeUu+WujOWFqOaJp+ihjO+8jOebruWJjeacieS6m+mXrumimO+8jOWQjumdouS8muWPlua2iOWumuaXtuWZqFxuXHRcdFx0XHR0aGlzLnRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5hbmltYXRpb24gPSBjcmVhdGVBbmltYXRpb24odGhpcy5jb25maWcsIHRoaXMpXG5cdFx0XHRcdFx0dGhpcy50cmFuZnJvbUluaXQoZmFsc2UpLnN0ZXAoKVxuXHRcdFx0XHRcdHRoaXMuYW5pbWF0aW9uLnJ1bigpXG5cdFx0XHRcdFx0dGhpcy4kZW1pdCgnY2hhbmdlJywge1xuXHRcdFx0XHRcdFx0ZGV0YWlsOiB0aGlzLmlzU2hvd1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdH0sIDIwKVxuXHRcdFx0fSlcblx0XHR9LFxuXHRcdC8vIOWFs+mXrei/h+W6puWKqOeUu1xuXHRcdGNsb3NlKHR5cGUpIHtcblx0XHRcdGlmICghdGhpcy5hbmltYXRpb24pIHJldHVyblxuXHRcdFx0dGhpcy50cmFuZnJvbUluaXQodHJ1ZSlcblx0XHRcdFx0LnN0ZXAoKVxuXHRcdFx0XHQucnVuKCgpID0+IHtcblx0XHRcdFx0XHR0aGlzLmlzU2hvdyA9IGZhbHNlXG5cdFx0XHRcdFx0dGhpcy5hbmltYXRpb25EYXRhID0gbnVsbFxuXHRcdFx0XHRcdHRoaXMuYW5pbWF0aW9uID0gbnVsbFxuXHRcdFx0XHRcdGxldCB7IG9wYWNpdHksIHRyYW5zZm9ybSB9ID0gdGhpcy5zdHlsZUluaXQoZmFsc2UpXG5cdFx0XHRcdFx0dGhpcy5vcGFjaXR5ID0gb3BhY2l0eSB8fCAxXG5cdFx0XHRcdFx0dGhpcy50cmFuc2Zvcm0gPSB0cmFuc2Zvcm1cblx0XHRcdFx0XHR0aGlzLiRlbWl0KCdjaGFuZ2UnLCB7XG5cdFx0XHRcdFx0XHRkZXRhaWw6IHRoaXMuaXNTaG93XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0fSlcblx0XHR9LFxuXHRcdC8vIOWkhOeQhuWKqOeUu+W8gOWni+WJjeeahOm7mOiupOagt+W8j1xuXHRcdHN0eWxlSW5pdCh0eXBlKSB7XG5cdFx0XHRsZXQgc3R5bGVzID0ge1xuXHRcdFx0XHR0cmFuc2Zvcm06ICcnXG5cdFx0XHR9XG5cdFx0XHRsZXQgYnVpbGRTdHlsZSA9ICh0eXBlLCBtb2RlKSA9PiB7XG5cdFx0XHRcdGlmIChtb2RlID09PSAnZmFkZScpIHtcblx0XHRcdFx0XHRzdHlsZXMub3BhY2l0eSA9IHRoaXMuYW5pbWF0aW9uVHlwZSh0eXBlKVttb2RlXVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHN0eWxlcy50cmFuc2Zvcm0gKz0gdGhpcy5hbmltYXRpb25UeXBlKHR5cGUpW21vZGVdICsgJyAnXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmICh0eXBlb2YgdGhpcy5tb2RlQ2xhc3MgPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRcdGJ1aWxkU3R5bGUodHlwZSwgdGhpcy5tb2RlQ2xhc3MpXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLm1vZGVDbGFzcy5mb3JFYWNoKG1vZGUgPT4ge1xuXHRcdFx0XHRcdGJ1aWxkU3R5bGUodHlwZSwgbW9kZSlcblx0XHRcdFx0fSlcblx0XHRcdH1cblx0XHRcdHJldHVybiBzdHlsZXNcblx0XHR9LFxuXHRcdC8vIOWkhOeQhuWGhee9rue7hOWQiOWKqOeUu1xuXHRcdHRyYW5mcm9tSW5pdCh0eXBlKSB7XG5cdFx0XHRsZXQgYnVpbGRUcmFuZnJvbSA9ICh0eXBlLCBtb2RlKSA9PiB7XG5cdFx0XHRcdGxldCBhbmlOdW0gPSBudWxsXG5cdFx0XHRcdGlmIChtb2RlID09PSAnZmFkZScpIHtcblx0XHRcdFx0XHRhbmlOdW0gPSB0eXBlID8gMCA6IDFcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRhbmlOdW0gPSB0eXBlID8gJy0xMDAlJyA6ICcwJ1xuXHRcdFx0XHRcdGlmIChtb2RlID09PSAnem9vbS1pbicpIHtcblx0XHRcdFx0XHRcdGFuaU51bSA9IHR5cGUgPyAwLjggOiAxXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmIChtb2RlID09PSAnem9vbS1vdXQnKSB7XG5cdFx0XHRcdFx0XHRhbmlOdW0gPSB0eXBlID8gMS4yIDogMVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAobW9kZSA9PT0gJ3NsaWRlLXJpZ2h0Jykge1xuXHRcdFx0XHRcdFx0YW5pTnVtID0gdHlwZSA/ICcxMDAlJyA6ICcwJ1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAobW9kZSA9PT0gJ3NsaWRlLWJvdHRvbScpIHtcblx0XHRcdFx0XHRcdGFuaU51bSA9IHR5cGUgPyAnMTAwJScgOiAnMCdcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy5hbmltYXRpb25bdGhpcy5hbmltYXRpb25Nb2RlKClbbW9kZV1dKGFuaU51bSlcblx0XHRcdH1cblx0XHRcdGlmICh0eXBlb2YgdGhpcy5tb2RlQ2xhc3MgPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRcdGJ1aWxkVHJhbmZyb20odHlwZSwgdGhpcy5tb2RlQ2xhc3MpXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLm1vZGVDbGFzcy5mb3JFYWNoKG1vZGUgPT4ge1xuXHRcdFx0XHRcdGJ1aWxkVHJhbmZyb20odHlwZSwgbW9kZSlcblx0XHRcdFx0fSlcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHRoaXMuYW5pbWF0aW9uXG5cdFx0fSxcblx0XHRhbmltYXRpb25UeXBlKHR5cGUpIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdGZhZGU6IHR5cGUgPyAxIDogMCxcblx0XHRcdFx0J3NsaWRlLXRvcCc6IGB0cmFuc2xhdGVZKCR7dHlwZSA/ICcwJyA6ICctMTAwJSd9KWAsXG5cdFx0XHRcdCdzbGlkZS1yaWdodCc6IGB0cmFuc2xhdGVYKCR7dHlwZSA/ICcwJyA6ICcxMDAlJ30pYCxcblx0XHRcdFx0J3NsaWRlLWJvdHRvbSc6IGB0cmFuc2xhdGVZKCR7dHlwZSA/ICcwJyA6ICcxMDAlJ30pYCxcblx0XHRcdFx0J3NsaWRlLWxlZnQnOiBgdHJhbnNsYXRlWCgke3R5cGUgPyAnMCcgOiAnLTEwMCUnfSlgLFxuXHRcdFx0XHQnem9vbS1pbic6IGBzY2FsZVgoJHt0eXBlID8gMSA6IDAuOH0pIHNjYWxlWSgke3R5cGUgPyAxIDogMC44fSlgLFxuXHRcdFx0XHQnem9vbS1vdXQnOiBgc2NhbGVYKCR7dHlwZSA/IDEgOiAxLjJ9KSBzY2FsZVkoJHt0eXBlID8gMSA6IDEuMn0pYFxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0Ly8g5YaF572u5Yqo55S757G75Z6L5LiO5a6e6ZmF5Yqo55S75a+55bqU5a2X5YW4XG5cdFx0YW5pbWF0aW9uTW9kZSgpIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdGZhZGU6ICdvcGFjaXR5Jyxcblx0XHRcdFx0J3NsaWRlLXRvcCc6ICd0cmFuc2xhdGVZJyxcblx0XHRcdFx0J3NsaWRlLXJpZ2h0JzogJ3RyYW5zbGF0ZVgnLFxuXHRcdFx0XHQnc2xpZGUtYm90dG9tJzogJ3RyYW5zbGF0ZVknLFxuXHRcdFx0XHQnc2xpZGUtbGVmdCc6ICd0cmFuc2xhdGVYJyxcblx0XHRcdFx0J3pvb20taW4nOiAnc2NhbGUnLFxuXHRcdFx0XHQnem9vbS1vdXQnOiAnc2NhbGUnXG5cdFx0XHR9XG5cdFx0fSxcblx0XHQvLyDpqbzls7DovazkuK3mqKrnur9cblx0XHR0b0xpbmUobmFtZSkge1xuXHRcdFx0cmV0dXJuIG5hbWUucmVwbGFjZSgvKFtBLVpdKS9nLCAnLSQxJykudG9Mb3dlckNhc2UoKVxuXHRcdH1cblx0fVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZT48L3N0eWxlPlxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///20\n"); /***/ }), -/* 18 */ +/* 21 */ /*!*********************************************************************!*\ !*** ./node_modules/@dcloudio/vue-cli-plugin-uni/lib/format-log.js ***! \*********************************************************************/ @@ -778,7 +891,176 @@ function formatLog () { /***/ }), -/* 19 */ +/* 22 */ +/*!******************************************************************!*\ + !*** ./node_modules/@babel/runtime/helpers/toConsumableArray.js ***! + \******************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var arrayWithoutHoles = __webpack_require__(/*! ./arrayWithoutHoles.js */ 23); +var iterableToArray = __webpack_require__(/*! ./iterableToArray.js */ 25); +var unsupportedIterableToArray = __webpack_require__(/*! ./unsupportedIterableToArray.js */ 26); +var nonIterableSpread = __webpack_require__(/*! ./nonIterableSpread.js */ 27); +function _toConsumableArray(arr) { + return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread(); +} +module.exports = _toConsumableArray, module.exports.__esModule = true, module.exports["default"] = module.exports; + +/***/ }), +/* 23 */ +/*!******************************************************************!*\ + !*** ./node_modules/@babel/runtime/helpers/arrayWithoutHoles.js ***! + \******************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var arrayLikeToArray = __webpack_require__(/*! ./arrayLikeToArray.js */ 24); +function _arrayWithoutHoles(arr) { + if (Array.isArray(arr)) return arrayLikeToArray(arr); +} +module.exports = _arrayWithoutHoles, module.exports.__esModule = true, module.exports["default"] = module.exports; + +/***/ }), +/* 24 */ +/*!*****************************************************************!*\ + !*** ./node_modules/@babel/runtime/helpers/arrayLikeToArray.js ***! + \*****************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +function _arrayLikeToArray(arr, len) { + if (len == null || len > arr.length) len = arr.length; + for (var i = 0, arr2 = new Array(len); i < len; i++) { + arr2[i] = arr[i]; + } + return arr2; +} +module.exports = _arrayLikeToArray, module.exports.__esModule = true, module.exports["default"] = module.exports; + +/***/ }), +/* 25 */ +/*!****************************************************************!*\ + !*** ./node_modules/@babel/runtime/helpers/iterableToArray.js ***! + \****************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +function _iterableToArray(iter) { + if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); +} +module.exports = _iterableToArray, module.exports.__esModule = true, module.exports["default"] = module.exports; + +/***/ }), +/* 26 */ +/*!***************************************************************************!*\ + !*** ./node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js ***! + \***************************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var arrayLikeToArray = __webpack_require__(/*! ./arrayLikeToArray.js */ 24); +function _unsupportedIterableToArray(o, minLen) { + if (!o) return; + if (typeof o === "string") return arrayLikeToArray(o, minLen); + var n = Object.prototype.toString.call(o).slice(8, -1); + if (n === "Object" && o.constructor) n = o.constructor.name; + if (n === "Map" || n === "Set") return Array.from(o); + if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen); +} +module.exports = _unsupportedIterableToArray, module.exports.__esModule = true, module.exports["default"] = module.exports; + +/***/ }), +/* 27 */ +/*!******************************************************************!*\ + !*** ./node_modules/@babel/runtime/helpers/nonIterableSpread.js ***! + \******************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +function _nonIterableSpread() { + throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); +} +module.exports = _nonIterableSpread, module.exports.__esModule = true, module.exports["default"] = module.exports; + +/***/ }), +/* 28 */ +/*!**************************************************************************************************!*\ + !*** D:/里海数字乡村/xunfeiAi/uni_modules/uni-transition/components/uni-transition/createAnimation.js ***! + \**************************************************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ 1);\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.createAnimation = createAnimation;\nvar _defineProperty2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/defineProperty */ 2));\nvar _classCallCheck2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ 29));\nvar _createClass2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/createClass */ 30));\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n// const defaultOption = {\n// \tduration: 300,\n// \ttimingFunction: 'linear',\n// \tdelay: 0,\n// \ttransformOrigin: '50% 50% 0'\n// }\nvar MPAnimation = /*#__PURE__*/function () {\n function MPAnimation(options, _this) {\n (0, _classCallCheck2.default)(this, MPAnimation);\n this.options = options;\n // 在iOS10+QQ小程序平台下,传给原生的对象一定是个普通对象而不是Proxy对象,否则会报parameter should be Object instead of ProxyObject的错误\n this.animation = uni.createAnimation(_objectSpread({}, options));\n this.currentStepAnimates = {};\n this.next = 0;\n this.$ = _this;\n }\n (0, _createClass2.default)(MPAnimation, [{\n key: \"_nvuePushAnimates\",\n value: function _nvuePushAnimates(type, args) {\n var aniObj = this.currentStepAnimates[this.next];\n var styles = {};\n if (!aniObj) {\n styles = {\n styles: {},\n config: {}\n };\n } else {\n styles = aniObj;\n }\n if (animateTypes1.includes(type)) {\n if (!styles.styles.transform) {\n styles.styles.transform = '';\n }\n var unit = '';\n if (type === 'rotate') {\n unit = 'deg';\n }\n styles.styles.transform += \"\".concat(type, \"(\").concat(args + unit, \") \");\n } else {\n styles.styles[type] = \"\".concat(args);\n }\n this.currentStepAnimates[this.next] = styles;\n }\n }, {\n key: \"_animateRun\",\n value: function _animateRun() {\n var styles = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var ref = this.$.$refs['ani'].ref;\n if (!ref) return;\n return new Promise(function (resolve, reject) {\n nvueAnimation.transition(ref, _objectSpread({\n styles: styles\n }, config), function (res) {\n resolve();\n });\n });\n }\n }, {\n key: \"_nvueNextAnimate\",\n value: function _nvueNextAnimate(animates) {\n var _this2 = this;\n var step = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var fn = arguments.length > 2 ? arguments[2] : undefined;\n var obj = animates[step];\n if (obj) {\n var styles = obj.styles,\n config = obj.config;\n this._animateRun(styles, config).then(function () {\n step += 1;\n _this2._nvueNextAnimate(animates, step, fn);\n });\n } else {\n this.currentStepAnimates = {};\n typeof fn === 'function' && fn();\n this.isEnd = true;\n }\n }\n }, {\n key: \"step\",\n value: function step() {\n var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n this.animation.step(config);\n return this;\n }\n }, {\n key: \"run\",\n value: function run(fn) {\n this.$.animationData = this.animation.export();\n this.$.timer = setTimeout(function () {\n typeof fn === 'function' && fn();\n }, this.$.durationTime);\n }\n }]);\n return MPAnimation;\n}();\nvar animateTypes1 = ['matrix', 'matrix3d', 'rotate', 'rotate3d', 'rotateX', 'rotateY', 'rotateZ', 'scale', 'scale3d', 'scaleX', 'scaleY', 'scaleZ', 'skew', 'skewX', 'skewY', 'translate', 'translate3d', 'translateX', 'translateY', 'translateZ'];\nvar animateTypes2 = ['opacity', 'backgroundColor'];\nvar animateTypes3 = ['width', 'height', 'left', 'right', 'top', 'bottom'];\nanimateTypes1.concat(animateTypes2, animateTypes3).forEach(function (type) {\n MPAnimation.prototype[type] = function () {\n var _this$animation;\n (_this$animation = this.animation)[type].apply(_this$animation, arguments);\n return this;\n };\n});\nfunction createAnimation(option, _this) {\n if (!_this) return;\n clearTimeout(_this.timer);\n return new MPAnimation(option, _this);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vdW5pX21vZHVsZXMvdW5pLXRyYW5zaXRpb24vY29tcG9uZW50cy91bmktdHJhbnNpdGlvbi9jcmVhdGVBbmltYXRpb24uanMiXSwibmFtZXMiOlsiTVBBbmltYXRpb24iLCJvcHRpb25zIiwiX3RoaXMiLCJhbmltYXRpb24iLCJ1bmkiLCJjcmVhdGVBbmltYXRpb24iLCJjdXJyZW50U3RlcEFuaW1hdGVzIiwibmV4dCIsIiQiLCJ0eXBlIiwiYXJncyIsImFuaU9iaiIsInN0eWxlcyIsImNvbmZpZyIsImFuaW1hdGVUeXBlczEiLCJpbmNsdWRlcyIsInRyYW5zZm9ybSIsInVuaXQiLCJyZWYiLCIkcmVmcyIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwibnZ1ZUFuaW1hdGlvbiIsInRyYW5zaXRpb24iLCJyZXMiLCJhbmltYXRlcyIsInN0ZXAiLCJmbiIsIm9iaiIsIl9hbmltYXRlUnVuIiwidGhlbiIsIl9udnVlTmV4dEFuaW1hdGUiLCJpc0VuZCIsImFuaW1hdGlvbkRhdGEiLCJleHBvcnQiLCJ0aW1lciIsInNldFRpbWVvdXQiLCJkdXJhdGlvblRpbWUiLCJhbmltYXRlVHlwZXMyIiwiYW5pbWF0ZVR5cGVzMyIsImNvbmNhdCIsImZvckVhY2giLCJwcm90b3R5cGUiLCJvcHRpb24iLCJjbGVhclRpbWVvdXQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBLElBSU1BLFdBQVc7RUFDaEIscUJBQVlDLE9BQU8sRUFBRUMsS0FBSyxFQUFFO0lBQUE7SUFDM0IsSUFBSSxDQUFDRCxPQUFPLEdBQUdBLE9BQU87SUFDdEI7SUFDQSxJQUFJLENBQUNFLFNBQVMsR0FBR0MsR0FBRyxDQUFDQyxlQUFlLG1CQUNoQ0osT0FBTyxFQUNUO0lBQ0YsSUFBSSxDQUFDSyxtQkFBbUIsR0FBRyxDQUFDLENBQUM7SUFDN0IsSUFBSSxDQUFDQyxJQUFJLEdBQUcsQ0FBQztJQUNiLElBQUks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LGVBQWUsQ0FBQ3VDLE1BQU0sRUFBRTFDLEtBQUssRUFBRTtFQUM5QyxJQUFHLENBQUNBLEtBQUssRUFBRTtFQUNYMkMsWUFBWSxDQUFDM0MsS0FBSyxDQUFDa0MsS0FBSyxDQUFDO0VBQ3pCLE9BQU8sSUFBSXBDLFdBQVcsQ0FBQzRDLE1BQU0sRUFBRTFDLEtBQUssQ0FBQztBQUN0QyIsImZpbGUiOiIyOC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGNvbnN0IGRlZmF1bHRPcHRpb24gPSB7XG4vLyBcdGR1cmF0aW9uOiAzMDAsXG4vLyBcdHRpbWluZ0Z1bmN0aW9uOiAnbGluZWFyJyxcbi8vIFx0ZGVsYXk6IDAsXG4vLyBcdHRyYW5zZm9ybU9yaWdpbjogJzUwJSA1MCUgMCdcbi8vIH1cblxuXG5cbmNsYXNzIE1QQW5pbWF0aW9uIHtcblx0Y29uc3RydWN0b3Iob3B0aW9ucywgX3RoaXMpIHtcblx0XHR0aGlzLm9wdGlvbnMgPSBvcHRpb25zXG5cdFx0Ly8g5ZyoaU9TMTArUVHlsI/nqIvluo/lubPlj7DkuIvvvIzkvKDnu5nljp/nlJ/nmoTlr7nosaHkuIDlrprmmK/kuKrmma7pgJrlr7nosaHogIzkuI3mmK9Qcm94eeWvueixoe+8jOWQpuWImeS8muaKpXBhcmFtZXRlciBzaG91bGQgYmUgT2JqZWN0IGluc3RlYWQgb2YgUHJveHlPYmplY3TnmoTplJnor69cblx0XHR0aGlzLmFuaW1hdGlvbiA9IHVuaS5jcmVhdGVBbmltYXRpb24oe1xuXHRcdFx0Li4ub3B0aW9uc1xuXHRcdH0pXG5cdFx0dGhpcy5jdXJyZW50U3RlcEFuaW1hdGVzID0ge31cblx0XHR0aGlzLm5leHQgPSAwXG5cdFx0dGhpcy4kID0gX3RoaXNcblxuXHR9XG5cblx0X252dWVQdXNoQW5pbWF0ZXModHlwZSwgYXJncykge1xuXHRcdGxldCBhbmlPYmogPSB0aGlzLmN1cnJlbnRTdGVwQW5pbWF0ZXNbdGhpcy5uZXh0XVxuXHRcdGxldCBzdHlsZXMgPSB7fVxuXHRcdGlmICghYW5pT2JqKSB7XG5cdFx0XHRzdHlsZXMgPSB7XG5cdFx0XHRcdHN0eWxlczoge30sXG5cdFx0XHRcdGNvbmZpZzoge31cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0c3R5bGVzID0gYW5pT2JqXG5cdFx0fVxuXHRcdGlmIChhbmltYXRlVHlwZXMxLmluY2x1ZGVzKHR5cGUpKSB7XG5cdFx0XHRpZiAoIXN0eWxlcy5zdHlsZXMudHJhbnNmb3JtKSB7XG5cdFx0XHRcdHN0eWxlcy5zdHlsZXMudHJhbnNmb3JtID0gJydcblx0XHRcdH1cblx0XHRcdGxldCB1bml0ID0gJydcblx0XHRcdGlmKHR5cGUgPT09ICdyb3RhdGUnKXtcblx0XHRcdFx0dW5pdCA9ICdkZWcnXG5cdFx0XHR9XG5cdFx0XHRzdHlsZXMuc3R5bGVzLnRyYW5zZm9ybSArPSBgJHt0eXBlfSgke2FyZ3MrdW5pdH0pIGBcblx0XHR9IGVsc2Uge1xuXHRcdFx0c3R5bGVzLnN0eWxlc1t0eXBlXSA9IGAke2FyZ3N9YFxuXHRcdH1cblx0XHR0aGlzLmN1cnJlbnRTdGVwQW5pbWF0ZXNbdGhpcy5uZXh0XSA9IHN0eWxlc1xuXHR9XG5cdF9hbmltYXRlUnVuKHN0eWxlcyA9IHt9LCBjb25maWcgPSB7fSkge1xuXHRcdGxldCByZWYgPSB0aGlzLiQuJHJlZnNbJ2FuaSddLnJlZlxuXHRcdGlmICghcmVmKSByZXR1cm5cblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0bnZ1ZUFuaW1hdGlvbi50cmFuc2l0aW9uKHJlZiwge1xuXHRcdFx0XHRzdHlsZXMsXG5cdFx0XHRcdC4uLmNvbmZpZ1xuXHRcdFx0fSwgcmVzID0+IHtcblx0XHRcdFx0cmVzb2x2ZSgpXG5cdFx0XHR9KVxuXHRcdH0pXG5cdH1cblxuXHRfbnZ1ZU5leHRBbmltYXRlKGFuaW1hdGVzLCBzdGVwID0gMCwgZm4pIHtcblx0XHRsZXQgb2JqID0gYW5pbWF0ZXNbc3RlcF1cblx0XHRpZiAob2JqKSB7XG5cdFx0XHRsZXQge1xuXHRcdFx0XHRzdHlsZXMsXG5cdFx0XHRcdGNvbmZpZ1xuXHRcdFx0fSA9IG9ialxuXHRcdFx0dGhpcy5fYW5pbWF0ZVJ1bihzdHlsZXMsIGNvbmZpZykudGhlbigoKSA9PiB7XG5cdFx0XHRcdHN0ZXAgKz0gMVxuXHRcdFx0XHR0aGlzLl9udnVlTmV4dEFuaW1hdGUoYW5pbWF0ZXMsIHN0ZXAsIGZuKVxuXHRcdFx0fSlcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5jdXJyZW50U3RlcEFuaW1hdGVzID0ge31cblx0XHRcdHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJyAmJiBmbigpXG5cdFx0XHR0aGlzLmlzRW5kID0gdHJ1ZVxuXHRcdH1cblx0fVxuXG5cdHN0ZXAoY29uZmlnID0ge30pIHtcblxuXHRcdHRoaXMuYW5pbWF0aW9uLnN0ZXAoY29uZmlnKVxuXG5cblxuXG5cblxuXHRcdHJldHVybiB0aGlzXG5cdH1cblxuXHRydW4oZm4pIHtcblxuXHRcdHRoaXMuJC5hbmltYXRpb25EYXRhID0gdGhpcy5hbmltYXRpb24uZXhwb3J0KClcblx0XHR0aGlzLiQudGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJyAmJiBmbigpXG5cdFx0fSwgdGhpcy4kLmR1cmF0aW9uVGltZSlcblxuXG5cblxuXG5cblxuXG5cdH1cbn1cblxuXG5jb25zdCBhbmltYXRlVHlwZXMxID0gWydtYXRyaXgnLCAnbWF0cml4M2QnLCAncm90YXRlJywgJ3JvdGF0ZTNkJywgJ3JvdGF0ZVgnLCAncm90YXRlWScsICdyb3RhdGVaJywgJ3NjYWxlJywgJ3NjYWxlM2QnLFxuXHQnc2NhbGVYJywgJ3NjYWxlWScsICdzY2FsZVonLCAnc2tldycsICdza2V3WCcsICdza2V3WScsICd0cmFuc2xhdGUnLCAndHJhbnNsYXRlM2QnLCAndHJhbnNsYXRlWCcsICd0cmFuc2xhdGVZJyxcblx0J3RyYW5zbGF0ZVonXG5dXG5jb25zdCBhbmltYXRlVHlwZXMyID0gWydvcGFjaXR5JywgJ2JhY2tncm91bmRDb2xvciddXG5jb25zdCBhbmltYXRlVHlwZXMzID0gWyd3aWR0aCcsICdoZWlnaHQnLCAnbGVmdCcsICdyaWdodCcsICd0b3AnLCAnYm90dG9tJ11cbmFuaW1hdGVUeXBlczEuY29uY2F0KGFuaW1hdGVUeXBlczIsIGFuaW1hdGVUeXBlczMpLmZvckVhY2godHlwZSA9PiB7XG5cdE1QQW5pbWF0aW9uLnByb3RvdHlwZVt0eXBlXSA9IGZ1bmN0aW9uKC4uLmFyZ3MpIHtcblxuXHRcdHRoaXMuYW5pbWF0aW9uW3R5cGVdKC4uLmFyZ3MpXG5cblxuXG5cblx0XHRyZXR1cm4gdGhpc1xuXHR9XG59KVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQW5pbWF0aW9uKG9wdGlvbiwgX3RoaXMpIHtcblx0aWYoIV90aGlzKSByZXR1cm5cblx0Y2xlYXJUaW1lb3V0KF90aGlzLnRpbWVyKVxuXHRyZXR1cm4gbmV3IE1QQW5pbWF0aW9uKG9wdGlvbiwgX3RoaXMpXG59XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///28\n"); + +/***/ }), +/* 29 */ +/*!***************************************************************!*\ + !*** ./node_modules/@babel/runtime/helpers/classCallCheck.js ***! + \***************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +function _classCallCheck(instance, Constructor) { + if (!(instance instanceof Constructor)) { + throw new TypeError("Cannot call a class as a function"); + } +} +module.exports = _classCallCheck, module.exports.__esModule = true, module.exports["default"] = module.exports; + +/***/ }), +/* 30 */ +/*!************************************************************!*\ + !*** ./node_modules/@babel/runtime/helpers/createClass.js ***! + \************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var toPropertyKey = __webpack_require__(/*! ./toPropertyKey.js */ 3); +function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) descriptor.writable = true; + Object.defineProperty(target, toPropertyKey(descriptor.key), descriptor); + } +} +function _createClass(Constructor, protoProps, staticProps) { + if (protoProps) _defineProperties(Constructor.prototype, protoProps); + if (staticProps) _defineProperties(Constructor, staticProps); + Object.defineProperty(Constructor, "prototype", { + writable: false + }); + return Constructor; +} +module.exports = _createClass, module.exports.__esModule = true, module.exports["default"] = module.exports; + +/***/ }), +/* 31 */ +/*!************************************************************************************!*\ + !*** D:/里海数字乡村/xunfeiAi/pages/index/index.vue?vue&type=script&lang=js&mpType=page ***! + \************************************************************************************/ +/*! no static exports found */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _HBuilderX_plugins_uniapp_cli_node_modules_babel_loader_lib_index_js_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_preprocess_loader_index_js_ref_7_1_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_uni_app_loader_using_components_js_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_script_lang_js_mpType_page__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../HBuilderX/plugins/uniapp-cli/node_modules/babel-loader/lib!../../../../HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/webpack-preprocess-loader??ref--7-1!../../../../HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/webpack-uni-app-loader/using-components.js!../../../../HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/vue-loader/lib??vue-loader-options!./index.vue?vue&type=script&lang=js&mpType=page */ 32);\n/* harmony import */ var _HBuilderX_plugins_uniapp_cli_node_modules_babel_loader_lib_index_js_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_preprocess_loader_index_js_ref_7_1_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_uni_app_loader_using_components_js_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_script_lang_js_mpType_page__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_HBuilderX_plugins_uniapp_cli_node_modules_babel_loader_lib_index_js_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_preprocess_loader_index_js_ref_7_1_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_uni_app_loader_using_components_js_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_script_lang_js_mpType_page__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _HBuilderX_plugins_uniapp_cli_node_modules_babel_loader_lib_index_js_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_preprocess_loader_index_js_ref_7_1_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_uni_app_loader_using_components_js_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_script_lang_js_mpType_page__WEBPACK_IMPORTED_MODULE_0__) if([\"default\"].indexOf(__WEBPACK_IMPORT_KEY__) < 0) (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return _HBuilderX_plugins_uniapp_cli_node_modules_babel_loader_lib_index_js_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_preprocess_loader_index_js_ref_7_1_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_uni_app_loader_using_components_js_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_script_lang_js_mpType_page__WEBPACK_IMPORTED_MODULE_0__[key]; }) }(__WEBPACK_IMPORT_KEY__));\n /* harmony default export */ __webpack_exports__[\"default\"] = (_HBuilderX_plugins_uniapp_cli_node_modules_babel_loader_lib_index_js_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_preprocess_loader_index_js_ref_7_1_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_uni_app_loader_using_components_js_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_script_lang_js_mpType_page__WEBPACK_IMPORTED_MODULE_0___default.a); //# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbbnVsbF0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQTRpQixDQUFnQixza0JBQUcsRUFBQyIsImZpbGUiOiIzMS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vLi4vLi4vSEJ1aWxkZXJYL3BsdWdpbnMvdW5pYXBwLWNsaS9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcyEuLi8uLi8uLi8uLi9IQnVpbGRlclgvcGx1Z2lucy91bmlhcHAtY2xpL25vZGVfbW9kdWxlcy9AZGNsb3VkaW8vdnVlLWNsaS1wbHVnaW4tdW5pL3BhY2thZ2VzL3dlYnBhY2stcHJlcHJvY2Vzcy1sb2FkZXIvaW5kZXguanM/P3JlZi0tNy0xIS4uLy4uLy4uLy4uL0hCdWlsZGVyWC9wbHVnaW5zL3VuaWFwcC1jbGkvbm9kZV9tb2R1bGVzL0BkY2xvdWRpby92dWUtY2xpLXBsdWdpbi11bmkvcGFja2FnZXMvd2VicGFjay11bmktYXBwLWxvYWRlci91c2luZy1jb21wb25lbnRzLmpzIS4uLy4uLy4uLy4uL0hCdWlsZGVyWC9wbHVnaW5zL3VuaWFwcC1jbGkvbm9kZV9tb2R1bGVzL0BkY2xvdWRpby92dWUtY2xpLXBsdWdpbi11bmkvcGFja2FnZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2luZGV4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZtcFR5cGU9cGFnZVwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uL0hCdWlsZGVyWC9wbHVnaW5zL3VuaWFwcC1jbGkvbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanMhLi4vLi4vLi4vLi4vSEJ1aWxkZXJYL3BsdWdpbnMvdW5pYXBwLWNsaS9ub2RlX21vZHVsZXMvQGRjbG91ZGlvL3Z1ZS1jbGktcGx1Z2luLXVuaS9wYWNrYWdlcy93ZWJwYWNrLXByZXByb2Nlc3MtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTctMSEuLi8uLi8uLi8uLi9IQnVpbGRlclgvcGx1Z2lucy91bmlhcHAtY2xpL25vZGVfbW9kdWxlcy9AZGNsb3VkaW8vdnVlLWNsaS1wbHVnaW4tdW5pL3BhY2thZ2VzL3dlYnBhY2stdW5pLWFwcC1sb2FkZXIvdXNpbmctY29tcG9uZW50cy5qcyEuLi8uLi8uLi8uLi9IQnVpbGRlclgvcGx1Z2lucy91bmlhcHAtY2xpL25vZGVfbW9kdWxlcy9AZGNsb3VkaW8vdnVlLWNsaS1wbHVnaW4tdW5pL3BhY2thZ2VzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9pbmRleC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmbXBUeXBlPXBhZ2VcIiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///31\n"); + +/***/ }), +/* 32 */ +/*!*****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ + !*** ./node_modules/babel-loader/lib!./node_modules/@dcloudio/vue-cli-plugin-uni/packages/webpack-preprocess-loader??ref--7-1!./node_modules/@dcloudio/vue-cli-plugin-uni/packages/webpack-uni-app-loader/using-components.js!./node_modules/@dcloudio/vue-cli-plugin-uni/packages/vue-loader/lib??vue-loader-options!D:/里海数字乡村/xunfeiAi/pages/index/index.vue?vue&type=script&lang=js&mpType=page ***! + \*****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("/* WEBPACK VAR INJECTION */(function(__f__) {\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ 1);\nvar _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ 4);\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _regenerator = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/regenerator */ 33));\nvar _toConsumableArray2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/toConsumableArray */ 22));\nvar _asyncToGenerator2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ 35));\nvar base64 = _interopRequireWildcard(__webpack_require__(/*! base-64 */ 36));\nvar _cryptoJs = _interopRequireDefault(__webpack_require__(/*! ../../static/crypto-js/crypto-js.js */ 40));\nvar _parser = _interopRequireDefault(__webpack_require__(/*! ../../static/fast-xml-parser/src/parser */ 198));\nvar utf8 = _interopRequireWildcard(__webpack_require__(/*! utf8 */ 207));\nvar _bingMath = _interopRequireDefault(__webpack_require__(/*! @/components/bing-math/bing-math.vue */ 10));\nfunction _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== \"function\") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }\nfunction _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\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//\n//\n//\n//\n//\n//\n//\n//\n//\nvar _default = {\n components: {\n 'bing-math': _bingMath.default\n },\n data: function data() {\n return {\n talkList: [],\n ajax: {\n rows: 15,\n //每页数量\n page: 1,\n //页码\n flag: false,\n // 请求开关\n loading: false,\n // 加载中\n loadText: '正在获取消息'\n },\n keyboardHeight: 0,\n showplc: true,\n content: '',\n c_content: '',\n n_content: '',\n params: [],\n // 发送的消息内容\n timer: '',\n socketTask: {},\n TEXT: '',\n historyTextList: [],\n // 历史会话信息,由于最大token12000,可以结合实际使用,进行移出\n tempRes: '',\n // 临时答复保存\n socketing: false,\n // 是否正在接收\n showStop: false,\n // 是否显示中断按钮\n scrollTop: 0,\n shouldScrollToBottom: true\n };\n },\n mounted: function mounted() {\n var _this = this;\n this.$nextTick(function () {\n _this.getHistoryMsg();\n });\n uni.onKeyboardHeightChange(function (e) {\n var h = _this.keyboardHeight;\n _this.keyboardHeight = e.height;\n _this.$nextTick(function () {\n setTimeout(function () {\n uni.pageScrollTo({\n scrollTop: 9999999,\n // 当前位置向下滚动\n duration: 300 // 滚动过渡时间为300ms,默认值为300ms\n });\n }, 0);\n });\n });\n },\n beforeDestroy: function beforeDestroy() {\n uni.offKeyboardHeightChange();\n },\n onPageScroll: function onPageScroll(e) {\n if (e.scrollTop < 5) {\n this.getHistoryMsg();\n }\n },\n watch: {\n n_content: function n_content(n, o) {\n var _this2 = this;\n // this.c_content = n;\n if (this.timer) clearInterval(this.timer);\n var cl = this.c_content.length;\n var nc = this.n_content.split('');\n this.timer = setInterval(function () {\n if (cl < nc.length) {\n _this2.c_content += nc[cl];\n cl++;\n if (cl % 6 == 0) _this2.$nextTick(function () {\n uni.pageScrollTo({\n scrollTop: 999999\n });\n });\n } else {\n // console.log(this.socketing==false, cl == nc.length);\n if (_this2.socketing == false) _this2.showStop = false;\n clearInterval(_this2.timer);\n _this2.$nextTick(function () {\n uni.pageScrollTo({\n scrollTop: 9999999\n });\n });\n }\n }, 60);\n }\n },\n methods: {\n copyText: function copyText(str) {\n uni.setClipboardData({\n data: str,\n success: function success() {\n uni.showToast({\n icon: 'none',\n title: '复制成功'\n });\n }\n });\n },\n // 获取历史消息\n getHistoryMsg: function getHistoryMsg() {\n var _this3 = this;\n return;\n if (this.ajax.flag) {\n return; //\n }\n\n var get = /*#__PURE__*/function () {\n var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {\n var data, selector;\n return _regenerator.default.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n _this3.hideLoadTips();\n _this3.ajax.flag = false;\n _context.next = 4;\n return _this3.joinHistoryMsg();\n case 4:\n data = _context.sent;\n __f__(\"log\", '----- 模拟数据格式,供参考 -----', \" at pages/index/index.vue:159\");\n __f__(\"log\", data, \" at pages/index/index.vue:160\"); // 查看请求返回的数据结构 \n\n // 获取待滚动元素选择器,解决插入数据后,滚动条定位时使用\n selector = '';\n if (_this3.ajax.page > 1) {\n // 非第一页,则取历史消息数据的第一条信息元素\n selector = \"#msg-\".concat(_this3.talkList[0].id);\n } else {\n // 第一页,则取当前消息数据的最后一条信息元素\n selector = \"#msg-\".concat(data[data.length - 1].id);\n }\n\n // 将获取到的消息数据合并到消息数组中\n _this3.talkList = [].concat((0, _toConsumableArray2.default)(data), (0, _toConsumableArray2.default)(_this3.talkList));\n\n // 数据挂载后执行,不懂的请自行阅读 Vue.js 文档对 Vue.nextTick 函数说明。\n _this3.$nextTick(function () {\n // 设置当前滚动的位置\n _this3.setPageScrollTo(selector);\n _this3.hideLoadTips(true);\n if (data.length < _this3.ajax.rows) {\n // 当前消息数据条数小于请求要求条数时,则无更多消息,不再允许请求。\n // 可在此处编写无更多消息数据时的逻辑\n } else {\n _this3.ajax.page++;\n\n // 延迟 200ms ,以保证设置窗口滚动已完成\n setTimeout(function () {\n _this3.ajax.flag = true;\n }, 200);\n }\n });\n case 11:\n case \"end\":\n return _context.stop();\n }\n }\n }, _callee);\n }));\n return function get() {\n return _ref.apply(this, arguments);\n };\n }();\n get();\n },\n // 拼接历史记录消息\n joinHistoryMsg: function joinHistoryMsg() {\n var _this4 = this;\n var join = function join() {\n var arr = [];\n\n //通过当前页码及页数,模拟数据内容\n var startIndex = (_this4.ajax.page - 1) * _this4.ajax.rows;\n var endIndex = startIndex + _this4.ajax.rows;\n for (var i = startIndex; i < endIndex; i++) {\n arr.push({\n \"id\": i,\n // 消息的ID\n \"content\": \"\\u8FD9\\u662F\\u5386\\u53F2\\u8BB0\\u5F55\\u7684\\u7B2C\".concat(i + 1, \"\\u6761\\u6D88\\u606F\"),\n // 消息内容\n \"type\": Math.random() > 0.5 ? 1 : 0,\n // 此为消息类别,设 1 为发出去的消息,0 为收到对方的消息,\n \"pic\": \"/static/avatar.png\" // 头像\n });\n }\n\n /*\n \t颠倒数组中元素的顺序。将最新的数据排在本次接口返回数据的最后面。\n \t后端接口按 消息的时间降序查找出当前页的数据后,再将本页数据按消息时间降序排序返回。\n \t这是数据的重点,因为页面滚动条和上拉加载历史的问题。\n */\n arr.reverse();\n return arr;\n };\n\n // 此处用到 ES6 的 Promise 知识,不懂的请自行学习。\n return new Promise(function (done, fail) {\n // 无数据请求接口,由 setTimeout 模拟,正式项目替换为 ajax 即可。\n setTimeout(function () {\n var data = join();\n done(data);\n }, 1500);\n });\n },\n focus: function focus() {\n // this.$nextTick(()=>{\n // setTimeout(()=>{\n // uni.pageScrollTo({\n // scrollTop: 9999999, // 当前位置向下滚动\n // duration: 300 // 滚动过渡时间为300ms,默认值为300ms\n // });\n // }, 0)\n // })\n },\n // 设置页面滚动位置\n setPageScrollTo: function setPageScrollTo(selector) {\n var view = uni.createSelectorQuery().in(this).select(selector);\n view.boundingClientRect(function (res) {\n uni.pageScrollTo({\n scrollTop: res.top - 30,\n // -30 为多显示出大半个消息的高度,示意上面还有信息。\n duration: 0\n });\n }).exec();\n },\n // 隐藏加载提示\n hideLoadTips: function hideLoadTips(flag) {\n var _this5 = this;\n if (flag) {\n this.ajax.loadText = '消息获取成功';\n setTimeout(function () {\n _this5.ajax.loading = false;\n }, 300);\n } else {\n this.ajax.loading = true;\n this.ajax.loadText = '正在获取消息';\n }\n },\n // 关闭连接\n closeSocketTask: function closeSocketTask() {\n var _this6 = this;\n try {\n clearInterval(this.timer);\n this.talkList[this.talkList.length - 1].content = this.c_content + '';\n // console.log(this.talkList[this.talkList.length - 1].content);\n // this.c_content = '';\n // this.n_content = '';\n this.socketTask.close({\n code: 500,\n // APP端存在BUG,正常关闭的code为1000,无法正常关闭,需要将code换为其他值\n complete: function complete(res) {\n _this6.showStop = false;\n __f__(\"log\", '主动断开', res, \" at pages/index/index.vue:279\");\n _this6.wsLiveFlag = false;\n }\n });\n } catch (e) {\n //TODO handle the exception\n }\n },\n // 发送信息\n send: function send() {\n var _this7 = this;\n if (!this.content) {\n uni.showToast({\n title: '请输入有效的内容',\n icon: 'none'\n });\n return;\n }\n this.showStop = true;\n // 将当前发送信息 添加到消息列表。\n var data = {\n \"id\": new Date().getTime(),\n \"content\": this.content,\n \"type\": 1,\n \"pic\": \"/static/avatar.png\"\n };\n this.TEXT = this.content;\n this.talkList.push(data);\n this.talkList.push({\n \"id\": new Date().getTime(),\n \"content\": '',\n \"type\": 2,\n \"pic\": \"/static/avatar.png\"\n });\n this.n_content = '';\n this.c_content = '';\n this.socketing = true;\n // return ;\n this.$nextTick(function () {\n // 清空内容框中的内容\n _this7.content = '';\n // uni.pageScrollTo({\n // scrollTop: 999999, // 设置一个超大值,以保证滚动条滚动到底部\n // duration: 0\n // });\n });\n\n this.sendToSpark();\n },\n sendToSpark: function sendToSpark() {\n var _this8 = this;\n return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2() {\n var realThis;\n return _regenerator.default.wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n // let myUrl = await this.getWebSocketUrl();\n _this8.tempRes = \"\";\n realThis = _this8;\n _this8.socketTask = uni.connectSocket({\n //url: encodeURI(encodeURI(myUrl).replace(/\\+/g, '%2B')),\n url: 'wss://chat.lihaink.cn/chat' + '?timestamp=' + Date.now(),\n method: 'GET',\n success: function success(res) {\n __f__(\"log\", res, \"ws成功连接...\", \" at pages/index/index.vue:336\");\n realThis.wsLiveFlag = true;\n }\n });\n realThis.socketTask.onError(function (res) {\n __f__(\"log\", \"连接发生错误,请检查appid是否填写\", res, \" at pages/index/index.vue:341\");\n });\n realThis.socketTask.onOpen(function (res) {\n _this8.historyTextList.push({\n \"role\": \"user\",\n \"content\": _this8.TEXT\n });\n // 第一帧..........................................\n __f__(\"log\", '连接成功...', \" at pages/index/index.vue:349\");\n // let params = {\n // \"header\": {\n // \"app_id\": this.APPID,\n // \"uid\": \"aef9f963-7\"\n // },\n // \"parameter\": {\n // \"chat\": {\n // \"domain\": \"generalv2\",\n // \"temperature\": 0.5,\n // \"max_tokens\": 1024\n // }\n // },\n // \"payload\": {\n // \"message\": {\n // \"text\": this.historyTextList\n // }\n // }\n // };\n if (_this8.historyTextList.length > 9) _this8.params = JSON.parse(JSON.stringify(_this8.historyTextList.splice(-9)));else _this8.params = JSON.parse(JSON.stringify(_this8.historyTextList));\n _this8.isSurpass();\n realThis.socketTask.send({\n // 发送消息,,都用uni的官方版本\n data: JSON.stringify(_this8.params),\n success: function success() {\n __f__(\"log\", '第一帧发送成功', \" at pages/index/index.vue:375\");\n }\n });\n });\n\n // 接受到消息时\n realThis.socketTask.onMessage(function (res) {\n __f__(\"log\", '收到API返回的内容:', res.data, \" at pages/index/index.vue:382\");\n var obj = JSON.parse(res.data);\n // console.log(\"我打印的\"+obj.payload);\n if (!realThis.wsLiveFlag) return;\n var dataArray = obj.payload.choices.text;\n for (var i = 0; i < dataArray.length; i++) {\n _this8.talkList[_this8.talkList.length - 1].content += dataArray[i].content;\n _this8.n_content = _this8.talkList[_this8.talkList.length - 1].content;\n realThis.tempRes = realThis.tempRes + dataArray[i].content;\n }\n var temp = JSON.parse(res.data);\n // console.log(\"0726\",temp.header.code)\n if (temp.header.code !== 0) {\n _this8.socketing = false;\n __f__(\"log\", \"\".concat(temp.header.code, \":\").concat(temp.message), \" at pages/index/index.vue:396\");\n realThis.socketTask.close({\n success: function success(res) {\n __f__(\"log\", '关闭成功', res, \" at pages/index/index.vue:399\");\n realThis.wsLiveFlag = false;\n },\n fail: function fail(err) {\n __f__(\"log\", '关闭失败', err, \" at pages/index/index.vue:403\");\n }\n });\n }\n if (temp.header.code === 0) {\n if (res.data && temp.header.status === 2) {\n _this8.socketing = false;\n _this8.historyTextList.push({\n \"role\": \"assistant\",\n \"content\": _this8.tempRes\n });\n setTimeout(function () {\n realThis.socketTask.close({\n success: function success(res) {\n __f__(\"log\", '关闭成功', res, \" at pages/index/index.vue:417\");\n },\n fail: function fail(err) {\n // console.log('关闭失败', err)\n }\n });\n }, 1000);\n }\n }\n });\n case 6:\n case \"end\":\n return _context2.stop();\n }\n }\n }, _callee2);\n }))();\n },\n // 判断文字是否超过五千字\n isSurpass: function isSurpass() {\n var sum = this.params.reduce(function (accumulator, currentValue) {\n return accumulator + currentValue.content;\n }, '');\n if (sum.length > 5000) {\n this.params.shift();\n return this.isSurpass();\n } else {\n __f__(\"log\", \"\\u672C\\u6B21\\u53D1\\u9001\".concat(sum.length, \"\\u5B57\"), \" at pages/index/index.vue:437\");\n return sum;\n }\n },\n // 鉴权\n getWebSocketUrl: function getWebSocketUrl() {\n var _this9 = this;\n return new Promise(function (resolve, reject) {\n // https://spark-api.xf-yun.com/v1.1/chat V1.5 domain general\n // https://spark-api.xf-yun.com/v2.1/chat V2.0 domain generalv2\n var url = \"wss://spark-api.xf-yun.com/v2.1/chat\";\n var host = \"spark-api.xf-yun.com\";\n var apiKeyName = \"api_key\";\n var date = new Date().toGMTString();\n var algorithm = \"hmac-sha256\";\n var headers = \"host date request-line\";\n var signatureOrigin = \"host: \".concat(host, \"\\ndate: \").concat(date, \"\\nGET /v2.1/chat HTTP/1.1\");\n var signatureSha = _cryptoJs.default.HmacSHA256(signatureOrigin, _this9.APISecret);\n var signature = _cryptoJs.default.enc.Base64.stringify(signatureSha);\n var authorizationOrigin = \"\".concat(apiKeyName, \"=\\\"\").concat(_this9.APIKey, \"\\\", algorithm=\\\"\").concat(algorithm, \"\\\", headers=\\\"\").concat(headers, \"\\\", signature=\\\"\").concat(signature, \"\\\"\");\n var authorization = base64.encode(authorizationOrigin);\n url = \"\".concat(url, \"?authorization=\").concat(authorization, \"&date=\").concat(encodeURI(date), \"&host=\").concat(host);\n\n // console.log(url)\n resolve(url);\n });\n },\n // 滚动到头部\n bindScroll: function bindScroll() {\n if (this.userId == 0) {\n this.getHistory();\n this.getproductInfo();\n this.getOrderInfo();\n this.getRefundDetail();\n this.getStoreDetail();\n } else {\n this.getMerHistory();\n }\n },\n // 当滑动页面时,收起键盘,与微信聊天效果保持一致\n touchmove: function touchmove(e) {\n uni.hideKeyboard();\n }\n }\n};\nexports.default = _default;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/vue-cli-plugin-uni/lib/format-log.js */ 21)[\"default\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vcGFnZXMvaW5kZXgvaW5kZXgudnVlIl0sIm5hbWVzIjpbImNvbXBvbmVudHMiLCJkYXRhIiwidGFsa0xpc3QiLCJhamF4Iiwicm93cyIsInBhZ2UiLCJmbGFnIiwibG9hZGluZyIsImxvYWRUZXh0Iiwia2V5Ym9hcmRIZWlnaHQiLCJzaG93cGxjIiwiY29udGVudCIsImNfY29udGVudCIsIm5fY29udGVudCIsInBhcmFtcyIsInRpbWVyIiwic29ja2V0VGFzayIsIlRFWFQiLCJoaXN0b3J5VGV4dExpc3QiLCJ0ZW1wUmVzIiwic29ja2V0aW5nIiwic2hvd1N0b3AiLCJzY3JvbGxUb3AiLCJzaG91bGRTY3JvbGxUb0JvdHRvbSIsIm1vdW50ZWQiLCJ1bmkiLCJzZXRUaW1lb3V0IiwiZHVyYXRpb24iLCJiZWZvcmVEZXN0cm95Iiwib25QYWdlU2Nyb2xsIiwid2F0Y2giLCJjbCIsImNsZWFySW50ZXJ2YWwiLCJtZXRob2RzIiwiY29weVRleHQiLCJzdWNjZXNzIiwiaWNvbiIsInRpdGxlIiwiZ2V0SGlzdG9yeU1zZyIsInNlbGVjdG9yIiwiZ2V0Iiwiam9pbkhpc3RvcnlNc2ciLCJhcnIiLCJkb25lIiwiZm9jdXMiLCJzZXRQYWdlU2Nyb2xsVG8iLCJ2aWV3IiwiaGlkZUxvYWRUaXBzIiwiY2xvc2VTb2NrZXRUYXNrIiwiY29kZSIsImNvbXBsZXRlIiwic2VuZCIsInNlbmRUb1NwYXJrIiwicmVhbFRoaXMiLCJ1cmwiLCJtZXRob2QiLCJzcGxpY2UiLCJmYWlsIiwiaXNTdXJwYXNzIiwiZ2V0V2ViU29ja2V0VXJsIiwiYXBpS2V5TmFtZSIsInJlc29sdmUiLCJiaW5kU2Nyb2xsIiwidG91Y2htb3ZlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQTJDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztlQUNBO0VBQ0FBO0lBQ0E7RUFDQTtFQUNBQztJQUNB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biAgPHZpZXcgY2xhc3M9XCJ3cmFwcGVyXCIgQHRvdWNobW92ZT1cInRvdWNobW92ZVwiPlxyXG4gICAgPHZpZXcgY2xhc3M9XCJ0aXBzIGNvbG9yX2ZmZiBzaXplXzEyIGFsaWduX2NcIiA6Y2xhc3M9XCJ7ICdzaG93JzphamF4LmxvYWRpbmcgfVwiIEB0YXA9XCJnZXRIaXN0b3J5TXNnXCI+e3thamF4LmxvYWRUZXh0fX1cclxuICAgIDwvdmlldz5cclxuICAgIDx2aWV3IGNsYXNzPVwicGxhY2Vob2xkZXJcIj48L3ZpZXc+XHJcbiAgICA8dmlldyBjbGFzcz1cImJveC0xXCIgaWQ9XCJsaXN0LWJveFwiIHJlZj1cImJveFwiPlxyXG4gICAgICA8dmlldyBjbGFzcz1cInRhbGstbGlzdFwiPlxyXG4gICAgICAgIDx2aWV3IHYtZm9yPVwiKGl0ZW0saW5kZXgpIGluIHRhbGtMaXN0XCIgOmtleT1cImluZGV4XCIgOmlkPVwiYG1zZy0ke2l0ZW0uaWR9YFwiPlxyXG4gICAgICAgICAgPHZpZXcgY2xhc3M9XCJpdGVtIGZsZXhfY29sXCIgOmNsYXNzPVwiIGl0ZW0udHlwZSA9PSAxID8gJ3B1c2gnOidwdWxsJyBcIj5cclxuICAgICAgICAgICAgPGltYWdlIDpzcmM9XCJpdGVtLnBpY1wiIG1vZGU9XCJhc3BlY3RGaWxsXCIgY2xhc3M9XCJwaWNcIj48L2ltYWdlPlxyXG4gICAgICAgICAgICA8dmlldyB2LWlmPVwidGFsa0xpc3QubGVuZ3RoLTE9PWluZGV4XCIgY2xhc3M9XCJjb250ZW50IG11bHRpbGluZS10ZXh0XCI+XHJcbiAgICAgICAgICAgICAgPCEtLSA8cmljaC10ZXh0IDpub2Rlcz1cIml0ZW0uY29udGVudFwiPjwvcmljaC10ZXh0PiAtLT5cclxuICAgICAgICAgICAgICA8YmluZy1tYXRoIHYtaWY9XCJjX2NvbnRlbnQhPScnXCIgOmtleT1cImBtYXRoLSR7aXRlbS5pZH1gXCIgY2xhc3M9XCJiaW5nLW1hdGhcIiA6bGF0ZXg9XCJjX2NvbnRlbnRcIj48L2JpbmctbWF0aD5cclxuICAgICAgICAgICAgICA8dmlldyB2LWVsc2UgY2xhc3M9XCJibGlua2luZy1ib3hcIj58PC92aWV3PlxyXG4gICAgICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgICAgIDx2aWV3IHYtZWxzZSBjbGFzcz1cImNvbnRlbnQgbXVsdGlsaW5lLXRleHRcIj5cclxuICAgICAgICAgICAgICA8IS0tIDxyaWNoLXRleHQgOm5vZGVzPVwiaXRlbS5jb250ZW50XCI+PC9yaWNoLXRleHQ+IC0tPlxyXG4gICAgICAgICAgICAgIDxiaW5nLW1hdGggOmtleT1cImBtYXRoLSR7aXRlbS5pZH1gXCIgY2xhc3M9XCJiaW5nLW1hdGhcIiA6bGF0ZXg9XCJpdGVtLmNvbnRlbnRcIj48L2JpbmctbWF0aD5cclxuICAgICAgICAgICAgPC92aWV3PlxyXG4gICAgICAgICAgPC92aWV3PlxyXG4gICAgICAgIDwvdmlldz5cclxuICAgICAgICA8dmlldyBpZD1cImJvdHRvbS1ib3hcIj48L3ZpZXc+XHJcbiAgICAgIDwvdmlldz5cclxuICAgIDwvdmlldz5cclxuICAgIDx1bmktdHJhbnNpdGlvbiBjdXN0b20tY2xhc3M9XCJib3gtMlwiIG1vZGUtY2xhc3M9XCJzbGlkZS1sZWZ0XCIgOnNob3c9XCJzaG93U3RvcFwiPlxyXG4gICAgICA8dmlldyBjbGFzcz1cImZsZXhfY29sXCI+XHJcbiAgICAgICAgPHZpZXcgY2xhc3M9XCJmbGV4X2dyb3cgY29udGVudCBkb3duc29ja2V0XCIgQGNsaWNrPVwiY2xvc2VTb2NrZXRUYXNrXCI+5Lit5pat6L+e5o6lPC92aWV3PlxyXG4gICAgICA8L3ZpZXc+XHJcbiAgICA8L3VuaS10cmFuc2l0aW9uPlxyXG4gICAgPHVuaS10cmFuc2l0aW9uIGN1c3RvbS1jbGFzcz1cImJveC0yXCIgbW9kZS1jbGFzcz1cInNsaWRlLXJpZ2h0XCIgOnNob3c9XCIhc2hvd1N0b3BcIj5cclxuICAgICAgPHZpZXcgY2xhc3M9XCJmbGV4X2NvbFwiPlxyXG4gICAgICAgIDx2aWV3IGNsYXNzPVwiZmxleF9ncm93XCI+XHJcbiAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImNvbnRlbnRcIiB2LW1vZGVsPVwiY29udGVudFwiIHBsYWNlaG9sZGVyPVwi6K+36L6T5YWl6IGK5aSp5YaF5a65XCIgQGZvY3VzPVwiZm9jdXNcIiBAY29uZmlybT1cInNlbmRcIlxyXG4gICAgICAgICAgICBwbGFjZWhvbGRlci1zdHlsZT1cImNvbG9yOiNEREQ7XCIgOmN1cnNvci1zcGFjaW5nPVwiNlwiPlxyXG4gICAgICAgIDwvdmlldz5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwic2VuZFwiIEB0YXA9XCJzZW5kXCI+5Y+R6YCBPC9idXR0b24+XHJcbiAgICAgIDwvdmlldz5cclxuICAgIDwvdW5pLXRyYW5zaXRpb24+XHJcbiAgICA8IS0tIDx2aWV3IHYtc2hvdz1cInNob3dwbGNcIiA6c3R5bGU9XCJ7J21pbi1oZWlnaHQnOiAoa2V5Ym9hcmRIZWlnaHQrMjAwKSsncHgnfVwiIGNsYXNzPVwicGxhY2Vob2xkZXJcIj7mmL7npLo8L3ZpZXc+IC0tPlxyXG4gIDwvdmlldz5cclxuPC90ZW1wbGF0ZT5cclxuXHJcbjxzY3JpcHQ+XHJcbiAgaW1wb3J0ICogYXMgYmFzZTY0IGZyb20gXCJiYXNlLTY0XCJcclxuICBpbXBvcnQgQ3J5cHRvSlMgZnJvbSAnLi4vLi4vc3RhdGljL2NyeXB0by1qcy9jcnlwdG8tanMuanMnXHJcbiAgaW1wb3J0IHBhcnNlciBmcm9tICcuLi8uLi9zdGF0aWMvZmFzdC14bWwtcGFyc2VyL3NyYy9wYXJzZXInXHJcbiAgaW1wb3J0ICogYXMgdXRmOCBmcm9tIFwidXRmOFwiXHJcbiAgaW1wb3J0IEJpbmdNYXRoIGZyb20gXCJAL2NvbXBvbmVudHMvYmluZy1tYXRoL2JpbmctbWF0aC52dWVcIlxyXG4gIGV4cG9ydCBkZWZhdWx0IHtcclxuICAgIGNvbXBvbmVudHM6IHtcclxuICAgICAgJ2JpbmctbWF0aCc6IEJpbmdNYXRoXHJcbiAgICB9LFxyXG4gICAgZGF0YSgpIHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICB0YWxrTGlzdDogW10sXHJcbiAgICAgICAgYWpheDoge1xyXG4gICAgICAgICAgcm93czogMTUsIC8v5q+P6aG15pWw6YePXHJcbiAgICAgICAgICBwYWdlOiAxLCAvL+mhteeggVxyXG4gICAgICAgICAgZmxhZzogZmFsc2UsIC8vIOivt+axguW8gOWFs1xyXG4gICAgICAgICAgbG9hZGluZzogZmFsc2UsIC8vIOWKoOi9veS4rVxyXG4gICAgICAgICAgbG9hZFRleHQ6ICfmraPlnKjojrflj5bmtojmga8nXHJcbiAgICAgICAgfSxcclxuICAgICAgICBrZXlib2FyZEhlaWdodDogMCxcclxuICAgICAgICBzaG93cGxjOiB0cnVlLFxyXG4gICAgICAgIGNvbnRlbnQ6ICcnLFxyXG4gICAgICAgIGNfY29udGVudDogJycsXHJcbiAgICAgICAgbl9jb250ZW50OiAnJyxcclxuICAgICAgICBwYXJhbXM6IFtdLCAvLyDlj5HpgIHnmoTmtojmga/lhoXlrrlcclxuICAgICAgICB0aW1lcjogJycsXHJcbiAgICAgICAgc29ja2V0VGFzazoge30sXHJcbiAgICAgICAgVEVYVDogJycsXHJcbiAgICAgICAgaGlzdG9yeVRleHRMaXN0OiBbXSwgLy8g5Y6G5Y+y5Lya6K+d5L+h5oGv77yM55Sx5LqO5pyA5aSndG9rZW4xMjAwMCzlj6/ku6Xnu5PlkIjlrp7pmYXkvb/nlKjvvIzov5vooYznp7vlh7pcclxuICAgICAgICB0ZW1wUmVzOiAnJywgLy8g5Li05pe2562U5aSN5L+d5a2YXHJcbiAgICAgICAgc29ja2V0aW5nOiBmYWxzZSwgLy8g5piv5ZCm5q2j5Zyo5o6l5pS2XHJcbiAgICAgICAgc2hvd1N0b3A6IGZhbHNlLCAvLyDmmK/lkKbmmL7npLrkuK3mlq3mjInpkq5cclxuICAgICAgICBzY3JvbGxUb3A6IDAsXHJcbiAgICAgICAgc2hvdWxkU2Nyb2xsVG9Cb3R0b206IHRydWVcclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIG1vdW50ZWQoKSB7XHJcbiAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHtcclxuICAgICAgICB0aGlzLmdldEhpc3RvcnlNc2coKTtcclxuICAgICAgfSk7XHJcbiAgICAgIHVuaS5vbktleWJvYXJkSGVpZ2h0Q2hhbmdlKGUgPT4ge1xyXG4gICAgICAgIGxldCBoID0gdGhpcy5rZXlib2FyZEhlaWdodDtcclxuICAgICAgICB0aGlzLmtleWJvYXJkSGVpZ2h0ID0gZS5oZWlnaHQ7XHJcbiAgICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4ge1xyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHVuaS5wYWdlU2Nyb2xsVG8oe1xyXG4gICAgICAgICAgICAgIHNjcm9sbFRvcDogOTk5OTk5OSwgLy8g5b2T5YmN5L2N572u5ZCR5LiL5rua5YqoXHJcbiAgICAgICAgICAgICAgZHVyYXRpb246IDMwMCAvLyDmu5rliqjov4fmuKHml7bpl7TkuLozMDBtc++8jOm7mOiupOWAvOS4ujMwMG1zXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSwgMClcclxuICAgICAgICB9KVxyXG4gICAgICB9KVxyXG4gICAgfSxcclxuICAgIGJlZm9yZURlc3Ryb3koKSB7XHJcbiAgICAgIC8vICNpZmRlZiBBUFAtUExVU1xyXG4gICAgICB1bmkub2ZmS2V5Ym9hcmRIZWlnaHRDaGFuZ2UoKTtcclxuICAgICAgLy8gI2VuZGlmXHJcbiAgICB9LFxyXG4gICAgb25QYWdlU2Nyb2xsKGUpIHtcclxuICAgICAgaWYgKGUuc2Nyb2xsVG9wIDwgNSkge1xyXG4gICAgICAgIHRoaXMuZ2V0SGlzdG9yeU1zZygpO1xyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgd2F0Y2g6IHtcclxuICAgICAgbl9jb250ZW50KG4sIG8pIHtcclxuICAgICAgICAvLyB0aGlzLmNfY29udGVudCA9IG47XHJcbiAgICAgICAgaWYgKHRoaXMudGltZXIpIGNsZWFySW50ZXJ2YWwodGhpcy50aW1lcik7XHJcbiAgICAgICAgbGV0IGNsID0gdGhpcy5jX2NvbnRlbnQubGVuZ3RoO1xyXG4gICAgICAgIGxldCBuYyA9IHRoaXMubl9jb250ZW50LnNwbGl0KCcnKTtcclxuICAgICAgICB0aGlzLnRpbWVyID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xyXG4gICAgICAgICAgaWYgKGNsIDwgbmMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY19jb250ZW50ICs9IG5jW2NsXTtcclxuICAgICAgICAgICAgY2wrKztcclxuICAgICAgICAgICAgaWYgKGNsICUgNiA9PSAwKSB0aGlzLiRuZXh0VGljaygoKSA9PiB7XHJcbiAgICAgICAgICAgICAgdW5pLnBhZ2VTY3JvbGxUbyh7XHJcbiAgICAgICAgICAgICAgICBzY3JvbGxUb3A6IDk5OTk5OSxcclxuICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2codGhpcy5zb2NrZXRpbmc9PWZhbHNlLCBjbCA9PSBuYy5sZW5ndGgpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zb2NrZXRpbmcgPT0gZmFsc2UpIHRoaXMuc2hvd1N0b3AgPSBmYWxzZTtcclxuICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLnRpbWVyKTtcclxuICAgICAgICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4ge1xyXG4gICAgICAgICAgICAgIHVuaS5wYWdlU2Nyb2xsVG8oe1xyXG4gICAgICAgICAgICAgICAgc2Nyb2xsVG9wOiA5OTk5OTk5LFxyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSwgNjApXHJcbiAgICAgIH0sXHJcbiAgICB9LFxyXG4gICAgbWV0aG9kczoge1xyXG4gICAgICBjb3B5VGV4dChzdHIpIHtcclxuICAgICAgICB1bmkuc2V0Q2xpcGJvYXJkRGF0YSh7XHJcbiAgICAgICAgICBkYXRhOiBzdHIsXHJcbiAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgdW5pLnNob3dUb2FzdCh7XHJcbiAgICAgICAgICAgICAgaWNvbjogJ25vbmUnLFxyXG4gICAgICAgICAgICAgIHRpdGxlOiAn5aSN5Yi25oiQ5YqfJ1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSxcclxuICAgICAgLy8g6I635Y+W5Y6G5Y+y5raI5oGvXHJcbiAgICAgIGdldEhpc3RvcnlNc2coKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGlmICh0aGlzLmFqYXguZmxhZykge1xyXG4gICAgICAgICAgcmV0dXJuOyAvL1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGdldCA9IGFzeW5jICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuaGlkZUxvYWRUaXBzKCk7XHJcbiAgICAgICAgICB0aGlzLmFqYXguZmxhZyA9IGZhbHNlO1xyXG4gICAgICAgICAgbGV0IGRhdGEgPSBhd2FpdCB0aGlzLmpvaW5IaXN0b3J5TXNnKCk7XHJcblxyXG4gICAgICAgICAgY29uc29sZS5sb2coJy0tLS0tIOaooeaLn+aVsOaNruagvOW8j++8jOS+m+WPguiAgyAtLS0tLScpO1xyXG4gICAgICAgICAgY29uc29sZS5sb2coZGF0YSk7IC8vIOafpeeci+ivt+axgui/lOWbnueahOaVsOaNrue7k+aehCBcclxuXHJcbiAgICAgICAgICAvLyDojrflj5blvoXmu5rliqjlhYPntKDpgInmi6nlmajvvIzop6PlhrPmj5LlhaXmlbDmja7lkI7vvIzmu5rliqjmnaHlrprkvY3ml7bkvb/nlKhcclxuICAgICAgICAgIGxldCBzZWxlY3RvciA9ICcnO1xyXG5cclxuICAgICAgICAgIGlmICh0aGlzLmFqYXgucGFnZSA+IDEpIHtcclxuICAgICAgICAgICAgLy8g6Z2e56ys5LiA6aG177yM5YiZ5Y+W5Y6G5Y+y5raI5oGv5pWw5o2u55qE56ys5LiA5p2h5L+h5oGv5YWD57SgXHJcbiAgICAgICAgICAgIHNlbGVjdG9yID0gYCNtc2ctJHt0aGlzLnRhbGtMaXN0WzBdLmlkfWA7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvLyDnrKzkuIDpobXvvIzliJnlj5blvZPliY3mtojmga/mlbDmja7nmoTmnIDlkI7kuIDmnaHkv6Hmga/lhYPntKBcclxuICAgICAgICAgICAgc2VsZWN0b3IgPSBgI21zZy0ke2RhdGFbZGF0YS5sZW5ndGgtMV0uaWR9YDtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyDlsIbojrflj5bliLDnmoTmtojmga/mlbDmja7lkIjlubbliLDmtojmga/mlbDnu4TkuK1cclxuICAgICAgICAgIHRoaXMudGFsa0xpc3QgPSBbLi4uZGF0YSwgLi4udGhpcy50YWxrTGlzdF07XHJcblxyXG4gICAgICAgICAgLy8g5pWw5o2u5oyC6L295ZCO5omn6KGM77yM5LiN5oeC55qE6K+36Ieq6KGM6ZiF6K+7IFZ1ZS5qcyDmlofmoaPlr7kgVnVlLm5leHRUaWNrIOWHveaVsOivtOaYjuOAglxyXG4gICAgICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4ge1xyXG4gICAgICAgICAgICAvLyDorr7nva7lvZPliY3mu5rliqjnmoTkvY3nva5cclxuICAgICAgICAgICAgdGhpcy5zZXRQYWdlU2Nyb2xsVG8oc2VsZWN0b3IpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5oaWRlTG9hZFRpcHModHJ1ZSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoZGF0YS5sZW5ndGggPCB0aGlzLmFqYXgucm93cykge1xyXG4gICAgICAgICAgICAgIC8vIOW9k+WJjea2iOaBr+aVsOaNruadoeaVsOWwj+S6juivt+axguimgeaxguadoeaVsOaXtu+8jOWImeaXoOabtOWkmua2iOaBr++8jOS4jeWGjeWFgeiuuOivt+axguOAglxyXG4gICAgICAgICAgICAgIC8vIOWPr+WcqOatpOWkhOe8luWGmeaXoOabtOWkmua2iOaBr+aVsOaNruaXtueahOmAu+i+kVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuYWpheC5wYWdlKys7XHJcblxyXG4gICAgICAgICAgICAgIC8vIOW7tui/nyAyMDBtcyDvvIzku6Xkv53or4Horr7nva7nqpflj6Pmu5rliqjlt7LlrozmiJBcclxuICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYWpheC5mbGFnID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB9LCAyMDApXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuICAgICAgICBnZXQoKTtcclxuICAgICAgfSxcclxuICAgICAgLy8g5ou85o6l5Y6G5Y+y6K6w5b2V5raI5oGvXHJcbiAgICAgIGpvaW5IaXN0b3J5TXNnKCkge1xyXG4gICAgICAgIGxldCBqb2luID0gKCkgPT4ge1xyXG4gICAgICAgICAgbGV0IGFyciA9IFtdO1xyXG5cclxuICAgICAgICAgIC8v6YCa6L+H5b2T5YmN6aG156CB5Y+K6aG15pWw77yM5qih5ouf5pWw5o2u5YaF5a65XHJcbiAgICAgICAgICBsZXQgc3RhcnRJbmRleCA9ICh0aGlzLmFqYXgucGFnZSAtIDEpICogdGhpcy5hamF4LnJvd3M7XHJcbiAgICAgICAgICBsZXQgZW5kSW5kZXggPSBzdGFydEluZGV4ICsgdGhpcy5hamF4LnJvd3M7XHJcbiAgICAgICAgICBmb3IgKGxldCBpID0gc3RhcnRJbmRleDsgaSA8IGVuZEluZGV4OyBpKyspIHtcclxuICAgICAgICAgICAgYXJyLnB1c2goe1xyXG4gICAgICAgICAgICAgIFwiaWRcIjogaSwgLy8g5raI5oGv55qESURcclxuICAgICAgICAgICAgICBcImNvbnRlbnRcIjogYOi/meaYr+WOhuWPsuiusOW9leeahOesrCR7aSsxfeadoea2iOaBr2AsIC8vIOa2iOaBr+WGheWuuVxyXG4gICAgICAgICAgICAgIFwidHlwZVwiOiBNYXRoLnJhbmRvbSgpID4gMC41ID8gMSA6IDAsIC8vIOatpOS4uua2iOaBr+exu+WIq++8jOiuviAxIOS4uuWPkeWHuuWOu+eahOa2iOaBr++8jDAg5Li65pS25Yiw5a+55pa555qE5raI5oGvLFxyXG4gICAgICAgICAgICAgIFwicGljXCI6IFwiL3N0YXRpYy9hdmF0YXIucG5nXCIgLy8g5aS05YOPXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLypcclxuICAgICAgICAgIFx06aKg5YCS5pWw57uE5Lit5YWD57Sg55qE6aG65bqP44CC5bCG5pyA5paw55qE5pWw5o2u5o6S5Zyo5pys5qyh5o6l5Y+j6L+U5Zue5pWw5o2u55qE5pyA5ZCO6Z2i44CCXHJcbiAgICAgICAgICBcdOWQjuerr+aOpeWPo+aMiSDmtojmga/nmoTml7bpl7TpmY3luo/mn6Xmib7lh7rlvZPliY3pobXnmoTmlbDmja7lkI7vvIzlho3lsIbmnKzpobXmlbDmja7mjInmtojmga/ml7bpl7TpmY3luo/mjpLluo/ov5Tlm57jgIJcclxuICAgICAgICAgIFx06L+Z5piv5pWw5o2u55qE6YeN54K577yM5Zug5Li66aG16Z2i5rua5Yqo5p2h5ZKM5LiK5ouJ5Yqg6L295Y6G5Y+y55qE6Zeu6aKY44CCXHJcbiAgICAgICAgICAgKi9cclxuICAgICAgICAgIGFyci5yZXZlcnNlKCk7XHJcblxyXG4gICAgICAgICAgcmV0dXJuIGFycjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIOatpOWkhOeUqOWIsCBFUzYg55qEIFByb21pc2Ug55+l6K+G77yM5LiN5oeC55qE6K+36Ieq6KGM5a2m5Lmg44CCXHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChkb25lLCBmYWlsKSA9PiB7XHJcbiAgICAgICAgICAvLyDml6DmlbDmja7or7fmsYLmjqXlj6PvvIznlLEgc2V0VGltZW91dCDmqKHmi5/vvIzmraPlvI/pobnnm67mm7/mjaLkuLogYWpheCDljbPlj6/jgIJcclxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgZGF0YSA9IGpvaW4oKTtcclxuICAgICAgICAgICAgZG9uZShkYXRhKTtcclxuICAgICAgICAgIH0sIDE1MDApO1xyXG4gICAgICAgIH0pXHJcbiAgICAgIH0sXHJcbiAgICAgIGZvY3VzKCkge1xyXG4gICAgICAgIC8vIHRoaXMuJG5leHRUaWNrKCgpPT57XHJcbiAgICAgICAgLy8gICBzZXRUaW1lb3V0KCgpPT57XHJcbiAgICAgICAgLy8gICAgIHVuaS5wYWdlU2Nyb2xsVG8oe1xyXG4gICAgICAgIC8vICAgICAgIHNjcm9sbFRvcDogOTk5OTk5OSwgLy8g5b2T5YmN5L2N572u5ZCR5LiL5rua5YqoXHJcbiAgICAgICAgLy8gICAgICAgZHVyYXRpb246IDMwMCAvLyDmu5rliqjov4fmuKHml7bpl7TkuLozMDBtc++8jOm7mOiupOWAvOS4ujMwMG1zXHJcbiAgICAgICAgLy8gICAgIH0pO1xyXG4gICAgICAgIC8vICAgfSwgMClcclxuICAgICAgICAvLyB9KVxyXG4gICAgICB9LFxyXG4gICAgICAvLyDorr7nva7pobXpnaLmu5rliqjkvY3nva5cclxuICAgICAgc2V0UGFnZVNjcm9sbFRvKHNlbGVjdG9yKSB7XHJcbiAgICAgICAgbGV0IHZpZXcgPSB1bmkuY3JlYXRlU2VsZWN0b3JRdWVyeSgpLmluKHRoaXMpLnNlbGVjdChzZWxlY3Rvcik7XHJcbiAgICAgICAgdmlldy5ib3VuZGluZ0NsaWVudFJlY3QoKHJlcykgPT4ge1xyXG4gICAgICAgICAgdW5pLnBhZ2VTY3JvbGxUbyh7XHJcbiAgICAgICAgICAgIHNjcm9sbFRvcDogcmVzLnRvcCAtIDMwLCAvLyAtMzAg5Li65aSa5pi+56S65Ye65aSn5Y2K5Liq5raI5oGv55qE6auY5bqm77yM56S65oSP5LiK6Z2i6L+Y5pyJ5L+h5oGv44CCXHJcbiAgICAgICAgICAgIGR1cmF0aW9uOiAwXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9KS5leGVjKCk7XHJcbiAgICAgIH0sXHJcbiAgICAgIC8vIOmakOiXj+WKoOi9veaPkOekulxyXG4gICAgICBoaWRlTG9hZFRpcHMoZmxhZykge1xyXG4gICAgICAgIGlmIChmbGFnKSB7XHJcbiAgICAgICAgICB0aGlzLmFqYXgubG9hZFRleHQgPSAn5raI5oGv6I635Y+W5oiQ5YqfJztcclxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmFqYXgubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgfSwgMzAwKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5hamF4LmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5hamF4LmxvYWRUZXh0ID0gJ+ato+WcqOiOt+WPlua2iOaBryc7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICAvLyDlhbPpl63ov57mjqVcclxuICAgICAgY2xvc2VTb2NrZXRUYXNrKCkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBjbGVhckludGVydmFsKHRoaXMudGltZXIpO1xyXG4gICAgICAgICAgdGhpcy50YWxrTGlzdFt0aGlzLnRhbGtMaXN0Lmxlbmd0aCAtIDFdLmNvbnRlbnQgPSB0aGlzLmNfY29udGVudCArICcnO1xyXG4gICAgICAgICAgLy8gY29uc29sZS5sb2codGhpcy50YWxrTGlzdFt0aGlzLnRhbGtMaXN0Lmxlbmd0aCAtIDFdLmNvbnRlbnQpO1xyXG4gICAgICAgICAgLy8gdGhpcy5jX2NvbnRlbnQgPSAnJztcclxuICAgICAgICAgIC8vIHRoaXMubl9jb250ZW50ID0gJyc7XHJcbiAgICAgICAgICB0aGlzLnNvY2tldFRhc2suY2xvc2Uoe1xyXG4gICAgICAgICAgICBjb2RlOiA1MDAsICAgICAgLy8gQVBQ56uv5a2Y5ZyoQlVHLOato+W4uOWFs+mXreeahGNvZGXkuLoxMDAwLOaXoOazleato+W4uOWFs+mXrSzpnIDopoHlsIZjb2Rl5o2i5Li65YW25LuW5YC8XHJcbiAgICAgICAgICAgIGNvbXBsZXRlOiAocmVzKT0+e1xyXG4gICAgICAgICAgICAgIHRoaXMuc2hvd1N0b3AgPSBmYWxzZTtcclxuICAgICAgICAgICAgICBjb25zb2xlLmxvZygn5Li75Yqo5pat5byAJywgcmVzKTtcclxuICAgICAgICAgICAgICB0aGlzLndzTGl2ZUZsYWcgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAvL1RPRE8gaGFuZGxlIHRoZSBleGNlcHRpb25cclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIC8vIOWPkemAgeS/oeaBr1xyXG4gICAgICBzZW5kKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5jb250ZW50KSB7XHJcbiAgICAgICAgICB1bmkuc2hvd1RvYXN0KHtcclxuICAgICAgICAgICAgdGl0bGU6ICfor7fovpPlhaXmnInmlYjnmoTlhoXlrrknLFxyXG4gICAgICAgICAgICBpY29uOiAnbm9uZSdcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2hvd1N0b3AgPSB0cnVlO1xyXG4gICAgICAgIC8vIOWwhuW9k+WJjeWPkemAgeS/oeaBryDmt7vliqDliLDmtojmga/liJfooajjgIJcclxuICAgICAgICBsZXQgZGF0YSA9IHtcclxuICAgICAgICAgIFwiaWRcIjogbmV3IERhdGUoKS5nZXRUaW1lKCksXHJcbiAgICAgICAgICBcImNvbnRlbnRcIjogdGhpcy5jb250ZW50LFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IDEsXHJcbiAgICAgICAgICBcInBpY1wiOiBcIi9zdGF0aWMvYXZhdGFyLnBuZ1wiXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuVEVYVCA9IHRoaXMuY29udGVudDtcclxuICAgICAgICB0aGlzLnRhbGtMaXN0LnB1c2goZGF0YSk7XHJcbiAgICAgICAgdGhpcy50YWxrTGlzdC5wdXNoKHtcclxuICAgICAgICAgIFwiaWRcIjogbmV3IERhdGUoKS5nZXRUaW1lKCksXHJcbiAgICAgICAgICBcImNvbnRlbnRcIjogJycsXHJcbiAgICAgICAgICBcInR5cGVcIjogMixcclxuICAgICAgICAgIFwicGljXCI6IFwiL3N0YXRpYy9hdmF0YXIucG5nXCJcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLm5fY29udGVudCA9ICcnO1xyXG4gICAgICAgIHRoaXMuY19jb250ZW50ID0gJyc7XHJcbiAgICAgICAgdGhpcy5zb2NrZXRpbmcgPSB0cnVlO1xyXG4gICAgICAgIC8vIHJldHVybiA7XHJcbiAgICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4ge1xyXG4gICAgICAgICAgLy8g5riF56m65YaF5a655qGG5Lit55qE5YaF5a65XHJcbiAgICAgICAgICB0aGlzLmNvbnRlbnQgPSAnJztcclxuICAgICAgICAgIC8vIHVuaS5wYWdlU2Nyb2xsVG8oe1xyXG4gICAgICAgICAgLy8gICBzY3JvbGxUb3A6IDk5OTk5OSwgLy8g6K6+572u5LiA5Liq6LaF5aSn5YC877yM5Lul5L+d6K+B5rua5Yqo5p2h5rua5Yqo5Yiw5bqV6YOoXHJcbiAgICAgICAgICAvLyAgIGR1cmF0aW9uOiAwXHJcbiAgICAgICAgICAvLyB9KTtcclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMuc2VuZFRvU3BhcmsoKTtcclxuXHJcbiAgICAgIH0sXHJcbiAgICAgIGFzeW5jIHNlbmRUb1NwYXJrKCkge1xyXG4gICAgICAgIC8vIGxldCBteVVybCA9IGF3YWl0IHRoaXMuZ2V0V2ViU29ja2V0VXJsKCk7XHJcbiAgICAgICAgdGhpcy50ZW1wUmVzID0gXCJcIjtcclxuICAgICAgICBsZXQgcmVhbFRoaXMgPSB0aGlzO1xyXG4gICAgICAgIHRoaXMuc29ja2V0VGFzayA9IHVuaS5jb25uZWN0U29ja2V0KHtcclxuICAgICAgICAgIC8vdXJsOiBlbmNvZGVVUkkoZW5jb2RlVVJJKG15VXJsKS5yZXBsYWNlKC9cXCsvZywgJyUyQicpKSxcclxuICAgICAgICAgIHVybDogJ3dzczovL2NoYXQubGloYWluay5jbi9jaGF0JyArICc/dGltZXN0YW1wPScgKyBEYXRlLm5vdygpLFxyXG4gICAgICAgICAgbWV0aG9kOiAnR0VUJyxcclxuICAgICAgICAgIHN1Y2Nlc3M6IHJlcyA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlcywgXCJ3c+aIkOWKn+i/nuaOpS4uLlwiKVxyXG4gICAgICAgICAgICByZWFsVGhpcy53c0xpdmVGbGFnID0gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICAgIHJlYWxUaGlzLnNvY2tldFRhc2sub25FcnJvcigocmVzKSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIui/nuaOpeWPkeeUn+mUmeivr++8jOivt+ajgOafpWFwcGlk5piv5ZCm5aGr5YaZXCIsIHJlcylcclxuICAgICAgICB9KVxyXG4gICAgICAgIHJlYWxUaGlzLnNvY2tldFRhc2sub25PcGVuKChyZXMpID0+IHtcclxuICAgICAgICAgIHRoaXMuaGlzdG9yeVRleHRMaXN0LnB1c2goe1xyXG4gICAgICAgICAgICBcInJvbGVcIjogXCJ1c2VyXCIsXHJcbiAgICAgICAgICAgIFwiY29udGVudFwiOiB0aGlzLlRFWFRcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICAvLyDnrKzkuIDluKcuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cclxuICAgICAgICAgIGNvbnNvbGUubG9nKCfov57mjqXmiJDlip8uLi4nKVxyXG4gICAgICAgICAgLy8gbGV0IHBhcmFtcyA9IHtcclxuICAgICAgICAgIC8vICAgXCJoZWFkZXJcIjoge1xyXG4gICAgICAgICAgLy8gICAgIFwiYXBwX2lkXCI6IHRoaXMuQVBQSUQsXHJcbiAgICAgICAgICAvLyAgICAgXCJ1aWRcIjogXCJhZWY5Zjk2My03XCJcclxuICAgICAgICAgIC8vICAgfSxcclxuICAgICAgICAgIC8vICAgXCJwYXJhbWV0ZXJcIjoge1xyXG4gICAgICAgICAgLy8gICAgIFwiY2hhdFwiOiB7XHJcbiAgICAgICAgICAvLyAgICAgICBcImRvbWFpblwiOiBcImdlbmVyYWx2MlwiLFxyXG4gICAgICAgICAgLy8gICAgICAgXCJ0ZW1wZXJhdHVyZVwiOiAwLjUsXHJcbiAgICAgICAgICAvLyAgICAgICBcIm1heF90b2tlbnNcIjogMTAyNFxyXG4gICAgICAgICAgLy8gICAgIH1cclxuICAgICAgICAgIC8vICAgfSxcclxuICAgICAgICAgIC8vICAgXCJwYXlsb2FkXCI6IHtcclxuICAgICAgICAgIC8vICAgICBcIm1lc3NhZ2VcIjoge1xyXG4gICAgICAgICAgLy8gICAgICAgXCJ0ZXh0XCI6IHRoaXMuaGlzdG9yeVRleHRMaXN0XHJcbiAgICAgICAgICAvLyAgICAgfVxyXG4gICAgICAgICAgLy8gICB9XHJcbiAgICAgICAgICAvLyB9O1xyXG4gICAgICAgICAgaWYgKHRoaXMuaGlzdG9yeVRleHRMaXN0Lmxlbmd0aCA+IDkpIHRoaXMucGFyYW1zID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmhpc3RvcnlUZXh0TGlzdFxyXG4gICAgICAgICAgICAuc3BsaWNlKC05KSkpO1xyXG4gICAgICAgICAgZWxzZSB0aGlzLnBhcmFtcyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5oaXN0b3J5VGV4dExpc3QpKTtcclxuICAgICAgICAgIHRoaXMuaXNTdXJwYXNzKCk7XHJcbiAgICAgICAgICByZWFsVGhpcy5zb2NrZXRUYXNrLnNlbmQoeyAvLyDlj5HpgIHmtojmga/vvIzvvIzpg73nlKh1bmnnmoTlrpjmlrnniYjmnKxcclxuICAgICAgICAgICAgZGF0YTogSlNPTi5zdHJpbmdpZnkodGhpcy5wYXJhbXMpLFxyXG4gICAgICAgICAgICBzdWNjZXNzKCkge1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKCfnrKzkuIDluKflj5HpgIHmiJDlip8nKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vIOaOpeWPl+WIsOa2iOaBr+aXtlxyXG4gICAgICAgIHJlYWxUaGlzLnNvY2tldFRhc2sub25NZXNzYWdlKChyZXMpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCfmlLbliLBBUEnov5Tlm57nmoTlhoXlrrnvvJonLCByZXMuZGF0YSk7XHJcbiAgICAgICAgICBsZXQgb2JqID0gSlNPTi5wYXJzZShyZXMuZGF0YSlcclxuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwi5oiR5omT5Y2w55qEXCIrb2JqLnBheWxvYWQpO1xyXG4gICAgICAgICAgaWYoIXJlYWxUaGlzLndzTGl2ZUZsYWcpIHJldHVybiA7XHJcbiAgICAgICAgICBsZXQgZGF0YUFycmF5ID0gb2JqLnBheWxvYWQuY2hvaWNlcy50ZXh0O1xyXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhQXJyYXkubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy50YWxrTGlzdFt0aGlzLnRhbGtMaXN0Lmxlbmd0aCAtIDFdLmNvbnRlbnQgKz0gZGF0YUFycmF5W2ldLmNvbnRlbnQ7XHJcbiAgICAgICAgICAgIHRoaXMubl9jb250ZW50ID0gdGhpcy50YWxrTGlzdFt0aGlzLnRhbGtMaXN0Lmxlbmd0aCAtIDFdLmNvbnRlbnQ7XHJcbiAgICAgICAgICAgIHJlYWxUaGlzLnRlbXBSZXMgPSByZWFsVGhpcy50ZW1wUmVzICsgZGF0YUFycmF5W2ldLmNvbnRlbnRcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGxldCB0ZW1wID0gSlNPTi5wYXJzZShyZXMuZGF0YSlcclxuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiMDcyNlwiLHRlbXAuaGVhZGVyLmNvZGUpXHJcbiAgICAgICAgICBpZiAodGVtcC5oZWFkZXIuY29kZSAhPT0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLnNvY2tldGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgJHt0ZW1wLmhlYWRlci5jb2RlfToke3RlbXAubWVzc2FnZX1gKTtcclxuICAgICAgICAgICAgcmVhbFRoaXMuc29ja2V0VGFzay5jbG9zZSh7XHJcbiAgICAgICAgICAgICAgc3VjY2VzcyhyZXMpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCflhbPpl63miJDlip8nLCByZXMpXHJcbiAgICAgICAgICAgICAgICByZWFsVGhpcy53c0xpdmVGbGFnID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBmYWlsKGVycikge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ+WFs+mXreWksei0pScsIGVycilcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAodGVtcC5oZWFkZXIuY29kZSA9PT0gMCkge1xyXG4gICAgICAgICAgICBpZiAocmVzLmRhdGEgJiYgdGVtcC5oZWFkZXIuc3RhdHVzID09PSAyKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zb2NrZXRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB0aGlzLmhpc3RvcnlUZXh0TGlzdC5wdXNoKHtcclxuICAgICAgICAgICAgICAgIFwicm9sZVwiOiBcImFzc2lzdGFudFwiLFxyXG4gICAgICAgICAgICAgICAgXCJjb250ZW50XCI6IHRoaXMudGVtcFJlc1xyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZWFsVGhpcy5zb2NrZXRUYXNrLmNsb3NlKHtcclxuICAgICAgICAgICAgICAgICAgc3VjY2VzcyhyZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygn5YWz6Zet5oiQ5YqfJywgcmVzKVxyXG4gICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICBmYWlsKGVycikge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCflhbPpl63lpLHotKUnLCBlcnIpXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgfSwgMTAwMClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH0sXHJcbiAgICAgIC8vIOWIpOaWreaWh+Wtl+aYr+WQpui2hei/h+S6lOWNg+Wtl1xyXG4gICAgICBpc1N1cnBhc3MoKSB7XHJcbiAgICAgICAgbGV0IHN1bSA9IHRoaXMucGFyYW1zLnJlZHVjZSgoYWNjdW11bGF0b3IsIGN1cnJlbnRWYWx1ZSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIGFjY3VtdWxhdG9yICsgY3VycmVudFZhbHVlLmNvbnRlbnQ7XHJcbiAgICAgICAgfSwgJycpO1xyXG4gICAgICAgIGlmIChzdW0ubGVuZ3RoID4gNTAwMCkge1xyXG4gICAgICAgICAgdGhpcy5wYXJhbXMuc2hpZnQoKTtcclxuICAgICAgICAgIHJldHVybiB0aGlzLmlzU3VycGFzcygpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhg5pys5qyh5Y+R6YCBJHtzdW0ubGVuZ3RofeWtl2ApO1xyXG4gICAgICAgICAgcmV0dXJuIHN1bTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIC8vIOmJtOadg1xyXG4gICAgICBnZXRXZWJTb2NrZXRVcmwoKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgIC8vIGh0dHBzOi8vc3BhcmstYXBpLnhmLXl1bi5jb20vdjEuMS9jaGF0ICBWMS41IGRvbWFpbiBnZW5lcmFsXHJcbiAgICAgICAgICAvLyBodHRwczovL3NwYXJrLWFwaS54Zi15dW4uY29tL3YyLjEvY2hhdCAgVjIuMCBkb21haW4gZ2VuZXJhbHYyXHJcbiAgICAgICAgICB2YXIgdXJsID0gXCJ3c3M6Ly9zcGFyay1hcGkueGYteXVuLmNvbS92Mi4xL2NoYXRcIjtcclxuICAgICAgICAgIHZhciBob3N0ID0gXCJzcGFyay1hcGkueGYteXVuLmNvbVwiO1xyXG4gICAgICAgICAgdmFyIGFwaUtleU5hbWUgPSBcImFwaV9rZXlcIjtcclxuICAgICAgICAgIHZhciBkYXRlID0gbmV3IERhdGUoKS50b0dNVFN0cmluZygpO1xyXG4gICAgICAgICAgdmFyIGFsZ29yaXRobSA9IFwiaG1hYy1zaGEyNTZcIjtcclxuICAgICAgICAgIHZhciBoZWFkZXJzID0gXCJob3N0IGRhdGUgcmVxdWVzdC1saW5lXCI7XHJcbiAgICAgICAgICB2YXIgc2lnbmF0dXJlT3JpZ2luID0gYGhvc3Q6ICR7aG9zdH1cXG5kYXRlOiAke2RhdGV9XFxuR0VUIC92Mi4xL2NoYXQgSFRUUC8xLjFgO1xyXG4gICAgICAgICAgdmFyIHNpZ25hdHVyZVNoYSA9IENyeXB0b0pTLkhtYWNTSEEyNTYoc2lnbmF0dXJlT3JpZ2luLCB0aGlzLkFQSVNlY3JldCk7XHJcbiAgICAgICAgICB2YXIgc2lnbmF0dXJlID0gQ3J5cHRvSlMuZW5jLkJhc2U2NC5zdHJpbmdpZnkoc2lnbmF0dXJlU2hhKTtcclxuICAgICAgICAgIHZhciBhdXRob3JpemF0aW9uT3JpZ2luID1cclxuICAgICAgICAgICAgYCR7YXBpS2V5TmFtZX09XCIke3RoaXMuQVBJS2V5fVwiLCBhbGdvcml0aG09XCIke2FsZ29yaXRobX1cIiwgaGVhZGVycz1cIiR7aGVhZGVyc31cIiwgc2lnbmF0dXJlPVwiJHtzaWduYXR1cmV9XCJgO1xyXG4gICAgICAgICAgdmFyIGF1dGhvcml6YXRpb24gPSBiYXNlNjQuZW5jb2RlKGF1dGhvcml6YXRpb25PcmlnaW4pO1xyXG4gICAgICAgICAgdXJsID0gYCR7dXJsfT9hdXRob3JpemF0aW9uPSR7YXV0aG9yaXphdGlvbn0mZGF0ZT0ke2VuY29kZVVSSShkYXRlKX0maG9zdD0ke2hvc3R9YDtcclxuXHJcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZyh1cmwpXHJcbiAgICAgICAgICByZXNvbHZlKHVybCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0sXHJcbiAgICAgIC8vIOa7muWKqOWIsOWktOmDqFxyXG4gICAgICBiaW5kU2Nyb2xsKCkge1xyXG4gICAgICAgIGlmICh0aGlzLnVzZXJJZCA9PSAwKSB7XHJcbiAgICAgICAgICB0aGlzLmdldEhpc3RvcnkoKTtcclxuICAgICAgICAgIHRoaXMuZ2V0cHJvZHVjdEluZm8oKTtcclxuICAgICAgICAgIHRoaXMuZ2V0T3JkZXJJbmZvKCk7XHJcbiAgICAgICAgICB0aGlzLmdldFJlZnVuZERldGFpbCgpO1xyXG4gICAgICAgICAgdGhpcy5nZXRTdG9yZURldGFpbCgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmdldE1lckhpc3RvcnkoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIC8vIOW9k+a7keWKqOmhtemdouaXtizmlLbotbfplK7nm5gs5LiO5b6u5L+h6IGK5aSp5pWI5p6c5L+d5oyB5LiA6Ie0XHJcbiAgICAgIHRvdWNobW92ZShlKSB7XHJcbiAgICAgICAgdW5pLmhpZGVLZXlib2FyZCgpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbjwvc2NyaXB0PlxyXG5cclxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XHJcbiAgQGltcG9ydCBcIi4uLy4uL2xpYi9nbG9iYWwuc2Nzc1wiO1xyXG5cclxuICBwYWdlIHtcclxuICAgIGJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjU7XHJcbiAgICBmb250LXNpemU6IDI4cnB4O1xyXG4gIH1cclxuXHJcbiAgQGtleWZyYW1lcyBibGluayB7XHJcbiAgICAwJSB7XHJcbiAgICAgIG9wYWNpdHk6IDE7XHJcbiAgICB9XHJcblxyXG4gICAgNTAlIHtcclxuICAgICAgb3BhY2l0eTogMDtcclxuICAgIH1cclxuXHJcbiAgICAxMDAlIHtcclxuICAgICAgb3BhY2l0eTogMTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC5ibGlua2luZy1ib3gge1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzMzMztcclxuICAgIGNvbG9yOiAjMzMzO1xyXG4gICAgYW5pbWF0aW9uOiBibGluayAxcyBpbmZpbml0ZTtcclxuICAgIHdpZHRoOiAycHg7XHJcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gIH1cclxuXHJcbiAgLndyYXBwZXIge1xyXG4gICAgaGVpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7XHJcbiAgfVxyXG5cclxuICAvKiDliqDovb3mlbDmja7mj5DnpLogKi9cclxuICAudGlwcyB7XHJcbiAgICBwb3NpdGlvbjogZml4ZWQ7XHJcbiAgICBsZWZ0OiAwO1xyXG4gICAgdG9wOiB2YXIoLS13aW5kb3ctdG9wKTtcclxuICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgei1pbmRleDogOTtcclxuICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4xNSk7XHJcbiAgICBoZWlnaHQ6IDcycnB4O1xyXG4gICAgbGluZS1oZWlnaHQ6IDcycnB4O1xyXG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC04MHJweCk7XHJcbiAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4zcyBlYXNlLWluLW91dCAwcztcclxuXHJcbiAgICAmLnNob3cge1xyXG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAuYm94LTEge1xyXG4gICAgd2lkdGg6IDEwMCU7XHJcbiAgICBoZWlnaHQ6IGF1dG87XHJcbiAgICBtaW4taGVpZ2h0OiBjYWxjKDEwMHZoIC0gMTAwcnB4KTtcclxuICAgIHBhZGRpbmctYm90dG9tOiAxMDBycHg7XHJcbiAgICBib3gtc2l6aW5nOiBjb250ZW50LWJveDtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcclxuXHJcbiAgICAvKiDlhbzlrrlpUGhvbmVYICovXHJcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xyXG4gICAgbWFyZ2luLWJvdHRvbTogY29uc3RhbnQoc2FmZS1hcmVhLWluc2V0LWJvdHRvbSk7XHJcbiAgICBtYXJnaW4tYm90dG9tOiBlbnYoc2FmZS1hcmVhLWluc2V0LWJvdHRvbSk7XHJcbiAgfVxyXG5cclxuICAubXVsdGlsaW5lLXRleHQge1xyXG4gICAgd2hpdGUtc3BhY2U6IHByZS1saW5lO1xyXG4gICAgLyog5oiWIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDsgKi9cclxuICB9XHJcblxyXG4gIC5ib3gtMiB7XHJcbiAgICBwb3NpdGlvbjogZml4ZWQ7XHJcbiAgICBsZWZ0OiAwO1xyXG4gICAgd2lkdGg6IDEwMCU7XHJcbiAgICBib3R0b206IDA7XHJcbiAgICBoZWlnaHQ6IGF1dG87XHJcbiAgICB6LWluZGV4OiAyO1xyXG4gICAgYm9yZGVyLXRvcDogI2U1ZTVlNSBzb2xpZCAxcHg7XHJcbiAgICBib3gtc2l6aW5nOiBjb250ZW50LWJveDtcclxuICAgIGJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjU7XHJcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7XHJcbiAgICAvKiDliJ3lp4vljJYgdHJhbnNmb3JtIOWxnuaApyAqL1xyXG4gICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuM3MgZWFzZTtcclxuICAgIC8qIOa3u+WKoOi/h+a4oeaViOaenCAqL1xyXG5cclxuICAgIC8qIOWFvOWuuWlQaG9uZVggKi9cclxuICAgIHBhZGRpbmctYm90dG9tOiAwO1xyXG4gICAgcGFkZGluZy1ib3R0b206IGNvbnN0YW50KHNhZmUtYXJlYS1pbnNldC1ib3R0b20pO1xyXG4gICAgcGFkZGluZy1ib3R0b206IGVudihzYWZlLWFyZWEtaW5zZXQtYm90dG9tKTtcclxuXHJcbiAgICA+dmlldyB7XHJcbiAgICAgIHBhZGRpbmc6IDAgMjBycHg7XHJcbiAgICAgIGhlaWdodDogMTAwcnB4O1xyXG4gICAgfVxyXG5cclxuICAgIC5jb250ZW50IHtcclxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcclxuICAgICAgaGVpZ2h0OiA2NHJweDtcclxuICAgICAgcGFkZGluZzogMCAyMHJweDtcclxuICAgICAgYm9yZGVyLXJhZGl1czogNnJweDtcclxuICAgICAgZm9udC1zaXplOiAyOHJweDtcclxuICAgIH1cclxuXHJcbiAgICAuc2VuZCB7XHJcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICMyNTczZmI7XHJcbiAgICAgIGNvbG9yOiAjZmZmO1xyXG4gICAgICBoZWlnaHQ6IDY0cnB4O1xyXG4gICAgICBtYXJnaW4tbGVmdDogMjBycHg7XHJcbiAgICAgIGJvcmRlci1yYWRpdXM6IDZycHg7XHJcbiAgICAgIHBhZGRpbmc6IDA7XHJcbiAgICAgIHdpZHRoOiAxMjBycHg7XHJcbiAgICAgIGxpbmUtaGVpZ2h0OiA2MnJweDtcclxuXHJcbiAgICAgICY6YWN0aXZlIHtcclxuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMTU3M2ZiO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAudGFsay1saXN0IHtcclxuICAgIHBhZGRpbmctYm90dG9tOiAyMHJweDtcclxuXHJcbiAgICAvKiDmtojmga/pobnvvIzln7rnoYDnsbsgKi9cclxuICAgIC5pdGVtIHtcclxuICAgICAgcGFkZGluZzogMjBycHggMjBycHggMCAyMHJweDtcclxuICAgICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XHJcbiAgICAgIGFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XHJcbiAgICAgIGNvbG9yOiAjMzMzO1xyXG5cclxuICAgICAgLnBpYyB7XHJcbiAgICAgICAgd2lkdGg6IDkycnB4O1xyXG4gICAgICAgIGhlaWdodDogOTJycHg7XHJcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlO1xyXG4gICAgICAgIGJvcmRlcjogI2ZmZiBzb2xpZCAxcHg7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC5jb250ZW50IHtcclxuICAgICAgICBwYWRkaW5nOiAyMHJweDtcclxuICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7XHJcbiAgICAgICAgbWF4LXdpZHRoOiA1MDBycHg7XHJcbiAgICAgICAgd29yZC1icmVhazogYnJlYWstYWxsO1xyXG4gICAgICAgIGxpbmUtaGVpZ2h0OiA1MnJweDtcclxuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8qIOaUtuWIsOeahOa2iOaBryAqL1xyXG4gICAgICAmLnB1bGwge1xyXG4gICAgICAgIC5jb250ZW50IHtcclxuICAgICAgICAgIG1pbi13aWR0aDogMjBycHg7XHJcbiAgICAgICAgICBtaW4taGVpZ2h0OiA1MnJweDtcclxuICAgICAgICAgIG1hcmdpbi1sZWZ0OiAzMnJweDtcclxuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XHJcblxyXG4gICAgICAgICAgJjo6YWZ0ZXIge1xyXG4gICAgICAgICAgICBjb250ZW50OiAnJztcclxuICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XHJcbiAgICAgICAgICAgIHdpZHRoOiAwO1xyXG4gICAgICAgICAgICBoZWlnaHQ6IDA7XHJcbiAgICAgICAgICAgIGJvcmRlci10b3A6IDE2cnB4IHNvbGlkIHRyYW5zcGFyZW50O1xyXG4gICAgICAgICAgICBib3JkZXItYm90dG9tOiAxNnJweCBzb2xpZCB0cmFuc3BhcmVudDtcclxuICAgICAgICAgICAgYm9yZGVyLXJpZ2h0OiAyMHJweCBzb2xpZCAjZmZmO1xyXG4gICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICAgICAgICAgIHRvcDogMzBycHg7XHJcbiAgICAgICAgICAgIGxlZnQ6IC0xOHJweDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8qIOWPkeWHuueahOa2iOaBryAqL1xyXG4gICAgICAmLnB1c2gge1xyXG4gICAgICAgIC8qIOS4u+i9tOS4uuawtOW5s+aWueWQke+8jOi1t+eCueWcqOWPs+err+OAguS9v+S4jeS/ruaUuURPTee7k+aehO+8jOS5n+iDveaUueWPmOWFg+e0oOaOkuWIl+mhuuW6jyAqL1xyXG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTtcclxuXHJcbiAgICAgICAgLmNvbnRlbnQge1xyXG4gICAgICAgICAgbWluLXdpZHRoOiAyMHJweDtcclxuICAgICAgICAgIG1pbi1oZWlnaHQ6IDUycnB4O1xyXG4gICAgICAgICAgbWFyZ2luLXJpZ2h0OiAzMnJweDtcclxuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMyNTczZmI7XHJcbiAgICAgICAgICBjb2xvcjogI2ZmZjtcclxuXHJcbiAgICAgICAgICAmOjphZnRlciB7XHJcbiAgICAgICAgICAgIGNvbnRlbnQ6ICcnO1xyXG4gICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcclxuICAgICAgICAgICAgd2lkdGg6IDA7XHJcbiAgICAgICAgICAgIGhlaWdodDogMDtcclxuICAgICAgICAgICAgYm9yZGVyLXRvcDogMTZycHggc29saWQgdHJhbnNwYXJlbnQ7XHJcbiAgICAgICAgICAgIGJvcmRlci1ib3R0b206IDE2cnB4IHNvbGlkIHRyYW5zcGFyZW50O1xyXG4gICAgICAgICAgICBib3JkZXItbGVmdDogMjBycHggc29saWQgIzI1NzNmYjtcclxuICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgICAgICAgICB0b3A6IDMwcnB4O1xyXG4gICAgICAgICAgICByaWdodDogLTE4cnB4O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLmJpbmctbWF0aCB7XHJcbiAgICBtYXJnaW46IDAgIWltcG9ydGFudDtcclxuICAgIHBhZGRpbmc6IDAgIWltcG9ydGFudDtcclxuICB9XHJcblxyXG4gIC5wbGFjZWhvbGRlciB7XHJcbiAgICB3aWR0aDogMTAwdnc7XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMTU3M2ZiO1xyXG4gICAgLy8gYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XHJcbiAgICAvLyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7IC8qIOWIneWni+WMliB0cmFuc2Zvcm0g5bGe5oCnICovXHJcbiAgICAvLyB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4zcyBlYXNlOyAvKiDmt7vliqDov4fmuKHmlYjmnpwgKi9cclxuICB9XHJcblxyXG4gIC5kb3duc29ja2V0IHtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcclxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjU3M2ZiICFpbXBvcnRhbnQ7XHJcbiAgICBjb2xvcjogI2ZmZiAhaW1wb3J0YW50O1xyXG4gIH1cclxuPC9zdHlsZT4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///32\n"); + +/***/ }), +/* 33 */ /*!**********************************************************!*\ !*** ./node_modules/@babel/runtime/regenerator/index.js ***! \**********************************************************/ @@ -788,7 +1070,7 @@ function formatLog () { var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ 4); // TODO(Babel 8): Remove this file. -var runtime = __webpack_require__(/*! ../helpers/regeneratorRuntime */ 20)(); +var runtime = __webpack_require__(/*! ../helpers/regeneratorRuntime */ 34)(); module.exports = runtime; // Copied from https://github.com/facebook/regenerator/blob/main/packages/runtime/runtime.js#L736= @@ -803,7 +1085,7 @@ try { } /***/ }), -/* 20 */ +/* 34 */ /*!*******************************************************************!*\ !*** ./node_modules/@babel/runtime/helpers/regeneratorRuntime.js ***! \*******************************************************************/ @@ -1124,100 +1406,7 @@ function _regeneratorRuntime() { module.exports = _regeneratorRuntime, module.exports.__esModule = true, module.exports["default"] = module.exports; /***/ }), -/* 21 */ -/*!******************************************************************!*\ - !*** ./node_modules/@babel/runtime/helpers/toConsumableArray.js ***! - \******************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var arrayWithoutHoles = __webpack_require__(/*! ./arrayWithoutHoles.js */ 22); -var iterableToArray = __webpack_require__(/*! ./iterableToArray.js */ 24); -var unsupportedIterableToArray = __webpack_require__(/*! ./unsupportedIterableToArray.js */ 25); -var nonIterableSpread = __webpack_require__(/*! ./nonIterableSpread.js */ 26); -function _toConsumableArray(arr) { - return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread(); -} -module.exports = _toConsumableArray, module.exports.__esModule = true, module.exports["default"] = module.exports; - -/***/ }), -/* 22 */ -/*!******************************************************************!*\ - !*** ./node_modules/@babel/runtime/helpers/arrayWithoutHoles.js ***! - \******************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var arrayLikeToArray = __webpack_require__(/*! ./arrayLikeToArray.js */ 23); -function _arrayWithoutHoles(arr) { - if (Array.isArray(arr)) return arrayLikeToArray(arr); -} -module.exports = _arrayWithoutHoles, module.exports.__esModule = true, module.exports["default"] = module.exports; - -/***/ }), -/* 23 */ -/*!*****************************************************************!*\ - !*** ./node_modules/@babel/runtime/helpers/arrayLikeToArray.js ***! - \*****************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -function _arrayLikeToArray(arr, len) { - if (len == null || len > arr.length) len = arr.length; - for (var i = 0, arr2 = new Array(len); i < len; i++) { - arr2[i] = arr[i]; - } - return arr2; -} -module.exports = _arrayLikeToArray, module.exports.__esModule = true, module.exports["default"] = module.exports; - -/***/ }), -/* 24 */ -/*!****************************************************************!*\ - !*** ./node_modules/@babel/runtime/helpers/iterableToArray.js ***! - \****************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -function _iterableToArray(iter) { - if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); -} -module.exports = _iterableToArray, module.exports.__esModule = true, module.exports["default"] = module.exports; - -/***/ }), -/* 25 */ -/*!***************************************************************************!*\ - !*** ./node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js ***! - \***************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var arrayLikeToArray = __webpack_require__(/*! ./arrayLikeToArray.js */ 23); -function _unsupportedIterableToArray(o, minLen) { - if (!o) return; - if (typeof o === "string") return arrayLikeToArray(o, minLen); - var n = Object.prototype.toString.call(o).slice(8, -1); - if (n === "Object" && o.constructor) n = o.constructor.name; - if (n === "Map" || n === "Set") return Array.from(o); - if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen); -} -module.exports = _unsupportedIterableToArray, module.exports.__esModule = true, module.exports["default"] = module.exports; - -/***/ }), -/* 26 */ -/*!******************************************************************!*\ - !*** ./node_modules/@babel/runtime/helpers/nonIterableSpread.js ***! - \******************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -function _nonIterableSpread() { - throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); -} -module.exports = _nonIterableSpread, module.exports.__esModule = true, module.exports["default"] = module.exports; - -/***/ }), -/* 27 */ +/* 35 */ /*!*****************************************************************!*\ !*** ./node_modules/@babel/runtime/helpers/asyncToGenerator.js ***! \*****************************************************************/ @@ -1257,7 +1446,7 @@ function _asyncToGenerator(fn) { module.exports = _asyncToGenerator, module.exports.__esModule = true, module.exports["default"] = module.exports; /***/ }), -/* 28 */ +/* 36 */ /*!*********************************************************!*\ !*** D:/里海数字乡村/xunfeiAi/node_modules/base-64/base64.js ***! \*********************************************************/ @@ -1377,7 +1566,7 @@ module.exports = _asyncToGenerator, module.exports.__esModule = true, module.exp // Some AMD build optimizers, like r.js, check for specific condition patterns // like the following: - if ( true && _typeof(__webpack_require__(/*! !webpack amd options */ 31)) == 'object' && __webpack_require__(/*! !webpack amd options */ 31)) { + if ( true && _typeof(__webpack_require__(/*! !webpack amd options */ 39)) == 'object' && __webpack_require__(/*! !webpack amd options */ 39)) { !(__WEBPACK_AMD_DEFINE_RESULT__ = (function () { return base64; }).call(exports, __webpack_require__, exports, module), @@ -1397,10 +1586,10 @@ module.exports = _asyncToGenerator, module.exports.__esModule = true, module.exp root.base64 = base64; } })(this); -/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../../HBuilderX/plugins/uniapp-cli/node_modules/webpack/buildin/module.js */ 29)(module), __webpack_require__(/*! ./../../../../HBuilderX/plugins/uniapp-cli/node_modules/webpack/buildin/global.js */ 30))) +/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../../HBuilderX/plugins/uniapp-cli/node_modules/webpack/buildin/module.js */ 37)(module), __webpack_require__(/*! ./../../../../HBuilderX/plugins/uniapp-cli/node_modules/webpack/buildin/global.js */ 38))) /***/ }), -/* 29 */ +/* 37 */ /*!***********************************!*\ !*** (webpack)/buildin/module.js ***! \***********************************/ @@ -1432,7 +1621,7 @@ module.exports = function(module) { /***/ }), -/* 30 */ +/* 38 */ /*!***********************************!*\ !*** (webpack)/buildin/global.js ***! \***********************************/ @@ -1462,7 +1651,7 @@ module.exports = g; /***/ }), -/* 31 */ +/* 39 */ /*!****************************************!*\ !*** (webpack)/buildin/amd-options.js ***! \****************************************/ @@ -1475,17 +1664,17 @@ module.exports = __webpack_amd_options__; /* WEBPACK VAR INJECTION */}.call(this, {})) /***/ }), -/* 32 */ +/* 40 */ /*!********************************************************!*\ !*** D:/里海数字乡村/xunfeiAi/static/crypto-js/crypto-js.js ***! \********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { -eval("/* WEBPACK VAR INJECTION */(function(__webpack_provided_window_dot_crypto, global, __webpack_provided_global_dot_crypto) {var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ 4);\n;\n(function (root, factory) {\n if (( false ? undefined : _typeof(exports)) === \"object\") {\n // CommonJS\n module.exports = exports = factory();\n } else if (true) {\n // AMD\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else {}\n})(this, function () {\n /*globals window, global, require*/\n\n /**\n * CryptoJS core components.\n */\n var CryptoJS = CryptoJS || function (Math, undefined) {\n var crypto;\n\n // Native crypto from window (Browser)\n if (typeof window !== 'undefined' && __webpack_provided_window_dot_crypto) {\n crypto = __webpack_provided_window_dot_crypto;\n }\n\n // Native (experimental IE 11) crypto from window (Browser)\n if (!crypto && typeof window !== 'undefined' && window.msCrypto) {\n crypto = window.msCrypto;\n }\n\n // Native crypto from global (NodeJS)\n if (!crypto && typeof global !== 'undefined' && __webpack_provided_global_dot_crypto) {\n crypto = __webpack_provided_global_dot_crypto;\n }\n\n // Native crypto import via require (NodeJS)\n if (!crypto && \"function\" === 'function') {\n try {\n crypto = __webpack_require__(/*! crypto */ 34);\n } catch (err) {}\n }\n\n /*\n * Cryptographically secure pseudorandom number generator\n *\n * As Math.random() is cryptographically not safe to use\n */\n var cryptoSecureRandomInt = function cryptoSecureRandomInt() {\n if (crypto) {\n // Use getRandomValues method (Browser)\n if (typeof crypto.getRandomValues === 'function') {\n try {\n return crypto.getRandomValues(new Uint32Array(1))[0];\n } catch (err) {}\n }\n\n // Use randomBytes method (NodeJS)\n if (typeof crypto.randomBytes === 'function') {\n try {\n return crypto.randomBytes(4).readInt32LE();\n } catch (err) {}\n }\n }\n throw new Error('Native crypto module could not be used to get secure random number.');\n };\n\n /*\n * Local polyfill of Object.create\n */\n var create = Object.create || function () {\n function F() {}\n return function (obj) {\n var subtype;\n F.prototype = obj;\n subtype = new F();\n F.prototype = null;\n return subtype;\n };\n }();\n\n /**\n * CryptoJS namespace.\n */\n var C = {};\n\n /**\n * Library namespace.\n */\n var C_lib = C.lib = {};\n\n /**\n * Base object for prototypal inheritance.\n */\n var Base = C_lib.Base = function () {\n return {\n /**\n * Creates a new object that inherits from this object.\n *\n * @param {Object} overrides Properties to copy into the new object.\n *\n * @return {Object} The new object.\n *\n * @static\n *\n * @example\n *\n * var MyType = CryptoJS.lib.Base.extend({\n * field: 'value',\n *\n * method: function () {\n * }\n * });\n */\n extend: function extend(overrides) {\n // Spawn\n var subtype = create(this);\n\n // Augment\n if (overrides) {\n subtype.mixIn(overrides);\n }\n\n // Create default initializer\n if (!subtype.hasOwnProperty('init') || this.init === subtype.init) {\n subtype.init = function () {\n subtype.$super.init.apply(this, arguments);\n };\n }\n\n // Initializer's prototype is the subtype object\n subtype.init.prototype = subtype;\n\n // Reference supertype\n subtype.$super = this;\n return subtype;\n },\n /**\n * Extends this object and runs the init method.\n * Arguments to create() will be passed to init().\n *\n * @return {Object} The new object.\n *\n * @static\n *\n * @example\n *\n * var instance = MyType.create();\n */\n create: function create() {\n var instance = this.extend();\n instance.init.apply(instance, arguments);\n return instance;\n },\n /**\n * Initializes a newly created object.\n * Override this method to add some logic when your objects are created.\n *\n * @example\n *\n * var MyType = CryptoJS.lib.Base.extend({\n * init: function () {\n * // ...\n * }\n * });\n */\n init: function init() {},\n /**\n * Copies properties into this object.\n *\n * @param {Object} properties The properties to mix in.\n *\n * @example\n *\n * MyType.mixIn({\n * field: 'value'\n * });\n */\n mixIn: function mixIn(properties) {\n for (var propertyName in properties) {\n if (properties.hasOwnProperty(propertyName)) {\n this[propertyName] = properties[propertyName];\n }\n }\n\n // IE won't copy toString using the loop above\n if (properties.hasOwnProperty('toString')) {\n this.toString = properties.toString;\n }\n },\n /**\n * Creates a copy of this object.\n *\n * @return {Object} The clone.\n *\n * @example\n *\n * var clone = instance.clone();\n */\n clone: function clone() {\n return this.init.prototype.extend(this);\n }\n };\n }();\n\n /**\n * An array of 32-bit words.\n *\n * @property {Array} words The array of 32-bit words.\n * @property {number} sigBytes The number of significant bytes in this word array.\n */\n var WordArray = C_lib.WordArray = Base.extend({\n /**\n * Initializes a newly created word array.\n *\n * @param {Array} words (Optional) An array of 32-bit words.\n * @param {number} sigBytes (Optional) The number of significant bytes in the words.\n *\n * @example\n *\n * var wordArray = CryptoJS.lib.WordArray.create();\n * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]);\n * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6);\n */\n init: function init(words, sigBytes) {\n words = this.words = words || [];\n if (sigBytes != undefined) {\n this.sigBytes = sigBytes;\n } else {\n this.sigBytes = words.length * 4;\n }\n },\n /**\n * Converts this word array to a string.\n *\n * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex\n *\n * @return {string} The stringified word array.\n *\n * @example\n *\n * var string = wordArray + '';\n * var string = wordArray.toString();\n * var string = wordArray.toString(CryptoJS.enc.Utf8);\n */\n toString: function toString(encoder) {\n return (encoder || Hex).stringify(this);\n },\n /**\n * Concatenates a word array to this word array.\n *\n * @param {WordArray} wordArray The word array to append.\n *\n * @return {WordArray} This word array.\n *\n * @example\n *\n * wordArray1.concat(wordArray2);\n */\n concat: function concat(wordArray) {\n // Shortcuts\n var thisWords = this.words;\n var thatWords = wordArray.words;\n var thisSigBytes = this.sigBytes;\n var thatSigBytes = wordArray.sigBytes;\n\n // Clamp excess bits\n this.clamp();\n\n // Concat\n if (thisSigBytes % 4) {\n // Copy one byte at a time\n for (var i = 0; i < thatSigBytes; i++) {\n var thatByte = thatWords[i >>> 2] >>> 24 - i % 4 * 8 & 0xff;\n thisWords[thisSigBytes + i >>> 2] |= thatByte << 24 - (thisSigBytes + i) % 4 * 8;\n }\n } else {\n // Copy one word at a time\n for (var i = 0; i < thatSigBytes; i += 4) {\n thisWords[thisSigBytes + i >>> 2] = thatWords[i >>> 2];\n }\n }\n this.sigBytes += thatSigBytes;\n\n // Chainable\n return this;\n },\n /**\n * Removes insignificant bits.\n *\n * @example\n *\n * wordArray.clamp();\n */\n clamp: function clamp() {\n // Shortcuts\n var words = this.words;\n var sigBytes = this.sigBytes;\n\n // Clamp\n words[sigBytes >>> 2] &= 0xffffffff << 32 - sigBytes % 4 * 8;\n words.length = Math.ceil(sigBytes / 4);\n },\n /**\n * Creates a copy of this word array.\n *\n * @return {WordArray} The clone.\n *\n * @example\n *\n * var clone = wordArray.clone();\n */\n clone: function clone() {\n var clone = Base.clone.call(this);\n clone.words = this.words.slice(0);\n return clone;\n },\n /**\n * Creates a word array filled with random bytes.\n *\n * @param {number} nBytes The number of random bytes to generate.\n *\n * @return {WordArray} The random word array.\n *\n * @static\n *\n * @example\n *\n * var wordArray = CryptoJS.lib.WordArray.random(16);\n */\n random: function random(nBytes) {\n var words = [];\n for (var i = 0; i < nBytes; i += 4) {\n words.push(cryptoSecureRandomInt());\n }\n return new WordArray.init(words, nBytes);\n }\n });\n\n /**\n * Encoder namespace.\n */\n var C_enc = C.enc = {};\n\n /**\n * Hex encoding strategy.\n */\n var Hex = C_enc.Hex = {\n /**\n * Converts a word array to a hex string.\n *\n * @param {WordArray} wordArray The word array.\n *\n * @return {string} The hex string.\n *\n * @static\n *\n * @example\n *\n * var hexString = CryptoJS.enc.Hex.stringify(wordArray);\n */\n stringify: function stringify(wordArray) {\n // Shortcuts\n var words = wordArray.words;\n var sigBytes = wordArray.sigBytes;\n\n // Convert\n var hexChars = [];\n for (var i = 0; i < sigBytes; i++) {\n var bite = words[i >>> 2] >>> 24 - i % 4 * 8 & 0xff;\n hexChars.push((bite >>> 4).toString(16));\n hexChars.push((bite & 0x0f).toString(16));\n }\n return hexChars.join('');\n },\n /**\n * Converts a hex string to a word array.\n *\n * @param {string} hexStr The hex string.\n *\n * @return {WordArray} The word array.\n *\n * @static\n *\n * @example\n *\n * var wordArray = CryptoJS.enc.Hex.parse(hexString);\n */\n parse: function parse(hexStr) {\n // Shortcut\n var hexStrLength = hexStr.length;\n\n // Convert\n var words = [];\n for (var i = 0; i < hexStrLength; i += 2) {\n words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << 24 - i % 8 * 4;\n }\n return new WordArray.init(words, hexStrLength / 2);\n }\n };\n\n /**\n * Latin1 encoding strategy.\n */\n var Latin1 = C_enc.Latin1 = {\n /**\n * Converts a word array to a Latin1 string.\n *\n * @param {WordArray} wordArray The word array.\n *\n * @return {string} The Latin1 string.\n *\n * @static\n *\n * @example\n *\n * var latin1String = CryptoJS.enc.Latin1.stringify(wordArray);\n */\n stringify: function stringify(wordArray) {\n // Shortcuts\n var words = wordArray.words;\n var sigBytes = wordArray.sigBytes;\n\n // Convert\n var latin1Chars = [];\n for (var i = 0; i < sigBytes; i++) {\n var bite = words[i >>> 2] >>> 24 - i % 4 * 8 & 0xff;\n latin1Chars.push(String.fromCharCode(bite));\n }\n return latin1Chars.join('');\n },\n /**\n * Converts a Latin1 string to a word array.\n *\n * @param {string} latin1Str The Latin1 string.\n *\n * @return {WordArray} The word array.\n *\n * @static\n *\n * @example\n *\n * var wordArray = CryptoJS.enc.Latin1.parse(latin1String);\n */\n parse: function parse(latin1Str) {\n // Shortcut\n var latin1StrLength = latin1Str.length;\n\n // Convert\n var words = [];\n for (var i = 0; i < latin1StrLength; i++) {\n words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << 24 - i % 4 * 8;\n }\n return new WordArray.init(words, latin1StrLength);\n }\n };\n\n /**\n * UTF-8 encoding strategy.\n */\n var Utf8 = C_enc.Utf8 = {\n /**\n * Converts a word array to a UTF-8 string.\n *\n * @param {WordArray} wordArray The word array.\n *\n * @return {string} The UTF-8 string.\n *\n * @static\n *\n * @example\n *\n * var utf8String = CryptoJS.enc.Utf8.stringify(wordArray);\n */\n stringify: function stringify(wordArray) {\n try {\n return decodeURIComponent(escape(Latin1.stringify(wordArray)));\n } catch (e) {\n throw new Error('Malformed UTF-8 data');\n }\n },\n /**\n * Converts a UTF-8 string to a word array.\n *\n * @param {string} utf8Str The UTF-8 string.\n *\n * @return {WordArray} The word array.\n *\n * @static\n *\n * @example\n *\n * var wordArray = CryptoJS.enc.Utf8.parse(utf8String);\n */\n parse: function parse(utf8Str) {\n return Latin1.parse(unescape(encodeURIComponent(utf8Str)));\n }\n };\n\n /**\n * Abstract buffered block algorithm template.\n *\n * The property blockSize must be implemented in a concrete subtype.\n *\n * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0\n */\n var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({\n /**\n * Resets this block algorithm's data buffer to its initial state.\n *\n * @example\n *\n * bufferedBlockAlgorithm.reset();\n */\n reset: function reset() {\n // Initial values\n this._data = new WordArray.init();\n this._nDataBytes = 0;\n },\n /**\n * Adds new data to this block algorithm's buffer.\n *\n * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8.\n *\n * @example\n *\n * bufferedBlockAlgorithm._append('data');\n * bufferedBlockAlgorithm._append(wordArray);\n */\n _append: function _append(data) {\n // Convert string to WordArray, else assume WordArray already\n if (typeof data == 'string') {\n data = Utf8.parse(data);\n }\n\n // Append\n this._data.concat(data);\n this._nDataBytes += data.sigBytes;\n },\n /**\n * Processes available data blocks.\n *\n * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype.\n *\n * @param {boolean} doFlush Whether all blocks and partial blocks should be processed.\n *\n * @return {WordArray} The processed data.\n *\n * @example\n *\n * var processedData = bufferedBlockAlgorithm._process();\n * var processedData = bufferedBlockAlgorithm._process(!!'flush');\n */\n _process: function _process(doFlush) {\n var processedWords;\n\n // Shortcuts\n var data = this._data;\n var dataWords = data.words;\n var dataSigBytes = data.sigBytes;\n var blockSize = this.blockSize;\n var blockSizeBytes = blockSize * 4;\n\n // Count blocks ready\n var nBlocksReady = dataSigBytes / blockSizeBytes;\n if (doFlush) {\n // Round up to include partial blocks\n nBlocksReady = Math.ceil(nBlocksReady);\n } else {\n // Round down to include only full blocks,\n // less the number of blocks that must remain in the buffer\n nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0);\n }\n\n // Count words ready\n var nWordsReady = nBlocksReady * blockSize;\n\n // Count bytes ready\n var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes);\n\n // Process blocks\n if (nWordsReady) {\n for (var offset = 0; offset < nWordsReady; offset += blockSize) {\n // Perform concrete-algorithm logic\n this._doProcessBlock(dataWords, offset);\n }\n\n // Remove processed words\n processedWords = dataWords.splice(0, nWordsReady);\n data.sigBytes -= nBytesReady;\n }\n\n // Return processed words\n return new WordArray.init(processedWords, nBytesReady);\n },\n /**\n * Creates a copy of this object.\n *\n * @return {Object} The clone.\n *\n * @example\n *\n * var clone = bufferedBlockAlgorithm.clone();\n */\n clone: function clone() {\n var clone = Base.clone.call(this);\n clone._data = this._data.clone();\n return clone;\n },\n _minBufferSize: 0\n });\n\n /**\n * Abstract hasher template.\n *\n * @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits)\n */\n var Hasher = C_lib.Hasher = BufferedBlockAlgorithm.extend({\n /**\n * Configuration options.\n */\n cfg: Base.extend(),\n /**\n * Initializes a newly created hasher.\n *\n * @param {Object} cfg (Optional) The configuration options to use for this hash computation.\n *\n * @example\n *\n * var hasher = CryptoJS.algo.SHA256.create();\n */\n init: function init(cfg) {\n // Apply config defaults\n this.cfg = this.cfg.extend(cfg);\n\n // Set initial values\n this.reset();\n },\n /**\n * Resets this hasher to its initial state.\n *\n * @example\n *\n * hasher.reset();\n */\n reset: function reset() {\n // Reset data buffer\n BufferedBlockAlgorithm.reset.call(this);\n\n // Perform concrete-hasher logic\n this._doReset();\n },\n /**\n * Updates this hasher with a message.\n *\n * @param {WordArray|string} messageUpdate The message to append.\n *\n * @return {Hasher} This hasher.\n *\n * @example\n *\n * hasher.update('message');\n * hasher.update(wordArray);\n */\n update: function update(messageUpdate) {\n // Append\n this._append(messageUpdate);\n\n // Update the hash\n this._process();\n\n // Chainable\n return this;\n },\n /**\n * Finalizes the hash computation.\n * Note that the finalize operation is effectively a destructive, read-once operation.\n *\n * @param {WordArray|string} messageUpdate (Optional) A final message update.\n *\n * @return {WordArray} The hash.\n *\n * @example\n *\n * var hash = hasher.finalize();\n * var hash = hasher.finalize('message');\n * var hash = hasher.finalize(wordArray);\n */\n finalize: function finalize(messageUpdate) {\n // Final message update\n if (messageUpdate) {\n this._append(messageUpdate);\n }\n\n // Perform concrete-hasher logic\n var hash = this._doFinalize();\n return hash;\n },\n blockSize: 512 / 32,\n /**\n * Creates a shortcut function to a hasher's object interface.\n *\n * @param {Hasher} hasher The hasher to create a helper for.\n *\n * @return {Function} The shortcut function.\n *\n * @static\n *\n * @example\n *\n * var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256);\n */\n _createHelper: function _createHelper(hasher) {\n return function (message, cfg) {\n return new hasher.init(cfg).finalize(message);\n };\n },\n /**\n * Creates a shortcut function to the HMAC's object interface.\n *\n * @param {Hasher} hasher The hasher to use in this HMAC helper.\n *\n * @return {Function} The shortcut function.\n *\n * @static\n *\n * @example\n *\n * var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256);\n */\n _createHmacHelper: function _createHmacHelper(hasher) {\n return function (message, key) {\n return new C_algo.HMAC.init(hasher, key).finalize(message);\n };\n }\n });\n\n /**\n * Algorithm namespace.\n */\n var C_algo = C.algo = {};\n return C;\n }(Math);\n (function () {\n // Shortcuts\n var C = CryptoJS;\n var C_lib = C.lib;\n var WordArray = C_lib.WordArray;\n var C_enc = C.enc;\n\n /**\n * Base64 encoding strategy.\n */\n var Base64 = C_enc.Base64 = {\n /**\n * Converts a word array to a Base64 string.\n *\n * @param {WordArray} wordArray The word array.\n *\n * @return {string} The Base64 string.\n *\n * @static\n *\n * @example\n *\n * var base64String = CryptoJS.enc.Base64.stringify(wordArray);\n */\n stringify: function stringify(wordArray) {\n // Shortcuts\n var words = wordArray.words;\n var sigBytes = wordArray.sigBytes;\n var map = this._map;\n\n // Clamp excess bits\n wordArray.clamp();\n\n // Convert\n var base64Chars = [];\n for (var i = 0; i < sigBytes; i += 3) {\n var byte1 = words[i >>> 2] >>> 24 - i % 4 * 8 & 0xff;\n var byte2 = words[i + 1 >>> 2] >>> 24 - (i + 1) % 4 * 8 & 0xff;\n var byte3 = words[i + 2 >>> 2] >>> 24 - (i + 2) % 4 * 8 & 0xff;\n var triplet = byte1 << 16 | byte2 << 8 | byte3;\n for (var j = 0; j < 4 && i + j * 0.75 < sigBytes; j++) {\n base64Chars.push(map.charAt(triplet >>> 6 * (3 - j) & 0x3f));\n }\n }\n\n // Add padding\n var paddingChar = map.charAt(64);\n if (paddingChar) {\n while (base64Chars.length % 4) {\n base64Chars.push(paddingChar);\n }\n }\n return base64Chars.join('');\n },\n /**\n * Converts a Base64 string to a word array.\n *\n * @param {string} base64Str The Base64 string.\n *\n * @return {WordArray} The word array.\n *\n * @static\n *\n * @example\n *\n * var wordArray = CryptoJS.enc.Base64.parse(base64String);\n */\n parse: function parse(base64Str) {\n // Shortcuts\n var base64StrLength = base64Str.length;\n var map = this._map;\n var reverseMap = this._reverseMap;\n if (!reverseMap) {\n reverseMap = this._reverseMap = [];\n for (var j = 0; j < map.length; j++) {\n reverseMap[map.charCodeAt(j)] = j;\n }\n }\n\n // Ignore padding\n var paddingChar = map.charAt(64);\n if (paddingChar) {\n var paddingIndex = base64Str.indexOf(paddingChar);\n if (paddingIndex !== -1) {\n base64StrLength = paddingIndex;\n }\n }\n\n // Convert\n return parseLoop(base64Str, base64StrLength, reverseMap);\n },\n _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='\n };\n function parseLoop(base64Str, base64StrLength, reverseMap) {\n var words = [];\n var nBytes = 0;\n for (var i = 0; i < base64StrLength; i++) {\n if (i % 4) {\n var bits1 = reverseMap[base64Str.charCodeAt(i - 1)] << i % 4 * 2;\n var bits2 = reverseMap[base64Str.charCodeAt(i)] >>> 6 - i % 4 * 2;\n var bitsCombined = bits1 | bits2;\n words[nBytes >>> 2] |= bitsCombined << 24 - nBytes % 4 * 8;\n nBytes++;\n }\n }\n return WordArray.create(words, nBytes);\n }\n })();\n (function (Math) {\n // Shortcuts\n var C = CryptoJS;\n var C_lib = C.lib;\n var WordArray = C_lib.WordArray;\n var Hasher = C_lib.Hasher;\n var C_algo = C.algo;\n\n // Constants table\n var T = [];\n\n // Compute constants\n (function () {\n for (var i = 0; i < 64; i++) {\n T[i] = Math.abs(Math.sin(i + 1)) * 0x100000000 | 0;\n }\n })();\n\n /**\n * MD5 hash algorithm.\n */\n var MD5 = C_algo.MD5 = Hasher.extend({\n _doReset: function _doReset() {\n this._hash = new WordArray.init([0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476]);\n },\n _doProcessBlock: function _doProcessBlock(M, offset) {\n // Swap endian\n for (var i = 0; i < 16; i++) {\n // Shortcuts\n var offset_i = offset + i;\n var M_offset_i = M[offset_i];\n M[offset_i] = (M_offset_i << 8 | M_offset_i >>> 24) & 0x00ff00ff | (M_offset_i << 24 | M_offset_i >>> 8) & 0xff00ff00;\n }\n\n // Shortcuts\n var H = this._hash.words;\n var M_offset_0 = M[offset + 0];\n var M_offset_1 = M[offset + 1];\n var M_offset_2 = M[offset + 2];\n var M_offset_3 = M[offset + 3];\n var M_offset_4 = M[offset + 4];\n var M_offset_5 = M[offset + 5];\n var M_offset_6 = M[offset + 6];\n var M_offset_7 = M[offset + 7];\n var M_offset_8 = M[offset + 8];\n var M_offset_9 = M[offset + 9];\n var M_offset_10 = M[offset + 10];\n var M_offset_11 = M[offset + 11];\n var M_offset_12 = M[offset + 12];\n var M_offset_13 = M[offset + 13];\n var M_offset_14 = M[offset + 14];\n var M_offset_15 = M[offset + 15];\n\n // Working varialbes\n var a = H[0];\n var b = H[1];\n var c = H[2];\n var d = H[3];\n\n // Computation\n a = FF(a, b, c, d, M_offset_0, 7, T[0]);\n d = FF(d, a, b, c, M_offset_1, 12, T[1]);\n c = FF(c, d, a, b, M_offset_2, 17, T[2]);\n b = FF(b, c, d, a, M_offset_3, 22, T[3]);\n a = FF(a, b, c, d, M_offset_4, 7, T[4]);\n d = FF(d, a, b, c, M_offset_5, 12, T[5]);\n c = FF(c, d, a, b, M_offset_6, 17, T[6]);\n b = FF(b, c, d, a, M_offset_7, 22, T[7]);\n a = FF(a, b, c, d, M_offset_8, 7, T[8]);\n d = FF(d, a, b, c, M_offset_9, 12, T[9]);\n c = FF(c, d, a, b, M_offset_10, 17, T[10]);\n b = FF(b, c, d, a, M_offset_11, 22, T[11]);\n a = FF(a, b, c, d, M_offset_12, 7, T[12]);\n d = FF(d, a, b, c, M_offset_13, 12, T[13]);\n c = FF(c, d, a, b, M_offset_14, 17, T[14]);\n b = FF(b, c, d, a, M_offset_15, 22, T[15]);\n a = GG(a, b, c, d, M_offset_1, 5, T[16]);\n d = GG(d, a, b, c, M_offset_6, 9, T[17]);\n c = GG(c, d, a, b, M_offset_11, 14, T[18]);\n b = GG(b, c, d, a, M_offset_0, 20, T[19]);\n a = GG(a, b, c, d, M_offset_5, 5, T[20]);\n d = GG(d, a, b, c, M_offset_10, 9, T[21]);\n c = GG(c, d, a, b, M_offset_15, 14, T[22]);\n b = GG(b, c, d, a, M_offset_4, 20, T[23]);\n a = GG(a, b, c, d, M_offset_9, 5, T[24]);\n d = GG(d, a, b, c, M_offset_14, 9, T[25]);\n c = GG(c, d, a, b, M_offset_3, 14, T[26]);\n b = GG(b, c, d, a, M_offset_8, 20, T[27]);\n a = GG(a, b, c, d, M_offset_13, 5, T[28]);\n d = GG(d, a, b, c, M_offset_2, 9, T[29]);\n c = GG(c, d, a, b, M_offset_7, 14, T[30]);\n b = GG(b, c, d, a, M_offset_12, 20, T[31]);\n a = HH(a, b, c, d, M_offset_5, 4, T[32]);\n d = HH(d, a, b, c, M_offset_8, 11, T[33]);\n c = HH(c, d, a, b, M_offset_11, 16, T[34]);\n b = HH(b, c, d, a, M_offset_14, 23, T[35]);\n a = HH(a, b, c, d, M_offset_1, 4, T[36]);\n d = HH(d, a, b, c, M_offset_4, 11, T[37]);\n c = HH(c, d, a, b, M_offset_7, 16, T[38]);\n b = HH(b, c, d, a, M_offset_10, 23, T[39]);\n a = HH(a, b, c, d, M_offset_13, 4, T[40]);\n d = HH(d, a, b, c, M_offset_0, 11, T[41]);\n c = HH(c, d, a, b, M_offset_3, 16, T[42]);\n b = HH(b, c, d, a, M_offset_6, 23, T[43]);\n a = HH(a, b, c, d, M_offset_9, 4, T[44]);\n d = HH(d, a, b, c, M_offset_12, 11, T[45]);\n c = HH(c, d, a, b, M_offset_15, 16, T[46]);\n b = HH(b, c, d, a, M_offset_2, 23, T[47]);\n a = II(a, b, c, d, M_offset_0, 6, T[48]);\n d = II(d, a, b, c, M_offset_7, 10, T[49]);\n c = II(c, d, a, b, M_offset_14, 15, T[50]);\n b = II(b, c, d, a, M_offset_5, 21, T[51]);\n a = II(a, b, c, d, M_offset_12, 6, T[52]);\n d = II(d, a, b, c, M_offset_3, 10, T[53]);\n c = II(c, d, a, b, M_offset_10, 15, T[54]);\n b = II(b, c, d, a, M_offset_1, 21, T[55]);\n a = II(a, b, c, d, M_offset_8, 6, T[56]);\n d = II(d, a, b, c, M_offset_15, 10, T[57]);\n c = II(c, d, a, b, M_offset_6, 15, T[58]);\n b = II(b, c, d, a, M_offset_13, 21, T[59]);\n a = II(a, b, c, d, M_offset_4, 6, T[60]);\n d = II(d, a, b, c, M_offset_11, 10, T[61]);\n c = II(c, d, a, b, M_offset_2, 15, T[62]);\n b = II(b, c, d, a, M_offset_9, 21, T[63]);\n\n // Intermediate hash value\n H[0] = H[0] + a | 0;\n H[1] = H[1] + b | 0;\n H[2] = H[2] + c | 0;\n H[3] = H[3] + d | 0;\n },\n _doFinalize: function _doFinalize() {\n // Shortcuts\n var data = this._data;\n var dataWords = data.words;\n var nBitsTotal = this._nDataBytes * 8;\n var nBitsLeft = data.sigBytes * 8;\n\n // Add padding\n dataWords[nBitsLeft >>> 5] |= 0x80 << 24 - nBitsLeft % 32;\n var nBitsTotalH = Math.floor(nBitsTotal / 0x100000000);\n var nBitsTotalL = nBitsTotal;\n dataWords[(nBitsLeft + 64 >>> 9 << 4) + 15] = (nBitsTotalH << 8 | nBitsTotalH >>> 24) & 0x00ff00ff | (nBitsTotalH << 24 | nBitsTotalH >>> 8) & 0xff00ff00;\n dataWords[(nBitsLeft + 64 >>> 9 << 4) + 14] = (nBitsTotalL << 8 | nBitsTotalL >>> 24) & 0x00ff00ff | (nBitsTotalL << 24 | nBitsTotalL >>> 8) & 0xff00ff00;\n data.sigBytes = (dataWords.length + 1) * 4;\n\n // Hash final blocks\n this._process();\n\n // Shortcuts\n var hash = this._hash;\n var H = hash.words;\n\n // Swap endian\n for (var i = 0; i < 4; i++) {\n // Shortcut\n var H_i = H[i];\n H[i] = (H_i << 8 | H_i >>> 24) & 0x00ff00ff | (H_i << 24 | H_i >>> 8) & 0xff00ff00;\n }\n\n // Return final computed hash\n return hash;\n },\n clone: function clone() {\n var clone = Hasher.clone.call(this);\n clone._hash = this._hash.clone();\n return clone;\n }\n });\n function FF(a, b, c, d, x, s, t) {\n var n = a + (b & c | ~b & d) + x + t;\n return (n << s | n >>> 32 - s) + b;\n }\n function GG(a, b, c, d, x, s, t) {\n var n = a + (b & d | c & ~d) + x + t;\n return (n << s | n >>> 32 - s) + b;\n }\n function HH(a, b, c, d, x, s, t) {\n var n = a + (b ^ c ^ d) + x + t;\n return (n << s | n >>> 32 - s) + b;\n }\n function II(a, b, c, d, x, s, t) {\n var n = a + (c ^ (b | ~d)) + x + t;\n return (n << s | n >>> 32 - s) + b;\n }\n\n /**\n * Shortcut function to the hasher's object interface.\n *\n * @param {WordArray|string} message The message to hash.\n *\n * @return {WordArray} The hash.\n *\n * @static\n *\n * @example\n *\n * var hash = CryptoJS.MD5('message');\n * var hash = CryptoJS.MD5(wordArray);\n */\n C.MD5 = Hasher._createHelper(MD5);\n\n /**\n * Shortcut function to the HMAC's object interface.\n *\n * @param {WordArray|string} message The message to hash.\n * @param {WordArray|string} key The secret key.\n *\n * @return {WordArray} The HMAC.\n *\n * @static\n *\n * @example\n *\n * var hmac = CryptoJS.HmacMD5(message, key);\n */\n C.HmacMD5 = Hasher._createHmacHelper(MD5);\n })(Math);\n (function () {\n // Shortcuts\n var C = CryptoJS;\n var C_lib = C.lib;\n var WordArray = C_lib.WordArray;\n var Hasher = C_lib.Hasher;\n var C_algo = C.algo;\n\n // Reusable object\n var W = [];\n\n /**\n * SHA-1 hash algorithm.\n */\n var SHA1 = C_algo.SHA1 = Hasher.extend({\n _doReset: function _doReset() {\n this._hash = new WordArray.init([0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0]);\n },\n _doProcessBlock: function _doProcessBlock(M, offset) {\n // Shortcut\n var H = this._hash.words;\n\n // Working variables\n var a = H[0];\n var b = H[1];\n var c = H[2];\n var d = H[3];\n var e = H[4];\n\n // Computation\n for (var i = 0; i < 80; i++) {\n if (i < 16) {\n W[i] = M[offset + i] | 0;\n } else {\n var n = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16];\n W[i] = n << 1 | n >>> 31;\n }\n var t = (a << 5 | a >>> 27) + e + W[i];\n if (i < 20) {\n t += (b & c | ~b & d) + 0x5a827999;\n } else if (i < 40) {\n t += (b ^ c ^ d) + 0x6ed9eba1;\n } else if (i < 60) {\n t += (b & c | b & d | c & d) - 0x70e44324;\n } else /* if (i < 80) */{\n t += (b ^ c ^ d) - 0x359d3e2a;\n }\n e = d;\n d = c;\n c = b << 30 | b >>> 2;\n b = a;\n a = t;\n }\n\n // Intermediate hash value\n H[0] = H[0] + a | 0;\n H[1] = H[1] + b | 0;\n H[2] = H[2] + c | 0;\n H[3] = H[3] + d | 0;\n H[4] = H[4] + e | 0;\n },\n _doFinalize: function _doFinalize() {\n // Shortcuts\n var data = this._data;\n var dataWords = data.words;\n var nBitsTotal = this._nDataBytes * 8;\n var nBitsLeft = data.sigBytes * 8;\n\n // Add padding\n dataWords[nBitsLeft >>> 5] |= 0x80 << 24 - nBitsLeft % 32;\n dataWords[(nBitsLeft + 64 >>> 9 << 4) + 14] = Math.floor(nBitsTotal / 0x100000000);\n dataWords[(nBitsLeft + 64 >>> 9 << 4) + 15] = nBitsTotal;\n data.sigBytes = dataWords.length * 4;\n\n // Hash final blocks\n this._process();\n\n // Return final computed hash\n return this._hash;\n },\n clone: function clone() {\n var clone = Hasher.clone.call(this);\n clone._hash = this._hash.clone();\n return clone;\n }\n });\n\n /**\n * Shortcut function to the hasher's object interface.\n *\n * @param {WordArray|string} message The message to hash.\n *\n * @return {WordArray} The hash.\n *\n * @static\n *\n * @example\n *\n * var hash = CryptoJS.SHA1('message');\n * var hash = CryptoJS.SHA1(wordArray);\n */\n C.SHA1 = Hasher._createHelper(SHA1);\n\n /**\n * Shortcut function to the HMAC's object interface.\n *\n * @param {WordArray|string} message The message to hash.\n * @param {WordArray|string} key The secret key.\n *\n * @return {WordArray} The HMAC.\n *\n * @static\n *\n * @example\n *\n * var hmac = CryptoJS.HmacSHA1(message, key);\n */\n C.HmacSHA1 = Hasher._createHmacHelper(SHA1);\n })();\n (function (Math) {\n // Shortcuts\n var C = CryptoJS;\n var C_lib = C.lib;\n var WordArray = C_lib.WordArray;\n var Hasher = C_lib.Hasher;\n var C_algo = C.algo;\n\n // Initialization and round constants tables\n var H = [];\n var K = [];\n\n // Compute constants\n (function () {\n function isPrime(n) {\n var sqrtN = Math.sqrt(n);\n for (var factor = 2; factor <= sqrtN; factor++) {\n if (!(n % factor)) {\n return false;\n }\n }\n return true;\n }\n function getFractionalBits(n) {\n return (n - (n | 0)) * 0x100000000 | 0;\n }\n var n = 2;\n var nPrime = 0;\n while (nPrime < 64) {\n if (isPrime(n)) {\n if (nPrime < 8) {\n H[nPrime] = getFractionalBits(Math.pow(n, 1 / 2));\n }\n K[nPrime] = getFractionalBits(Math.pow(n, 1 / 3));\n nPrime++;\n }\n n++;\n }\n })();\n\n // Reusable object\n var W = [];\n\n /**\n * SHA-256 hash algorithm.\n */\n var SHA256 = C_algo.SHA256 = Hasher.extend({\n _doReset: function _doReset() {\n this._hash = new WordArray.init(H.slice(0));\n },\n _doProcessBlock: function _doProcessBlock(M, offset) {\n // Shortcut\n var H = this._hash.words;\n\n // Working variables\n var a = H[0];\n var b = H[1];\n var c = H[2];\n var d = H[3];\n var e = H[4];\n var f = H[5];\n var g = H[6];\n var h = H[7];\n\n // Computation\n for (var i = 0; i < 64; i++) {\n if (i < 16) {\n W[i] = M[offset + i] | 0;\n } else {\n var gamma0x = W[i - 15];\n var gamma0 = (gamma0x << 25 | gamma0x >>> 7) ^ (gamma0x << 14 | gamma0x >>> 18) ^ gamma0x >>> 3;\n var gamma1x = W[i - 2];\n var gamma1 = (gamma1x << 15 | gamma1x >>> 17) ^ (gamma1x << 13 | gamma1x >>> 19) ^ gamma1x >>> 10;\n W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16];\n }\n var ch = e & f ^ ~e & g;\n var maj = a & b ^ a & c ^ b & c;\n var sigma0 = (a << 30 | a >>> 2) ^ (a << 19 | a >>> 13) ^ (a << 10 | a >>> 22);\n var sigma1 = (e << 26 | e >>> 6) ^ (e << 21 | e >>> 11) ^ (e << 7 | e >>> 25);\n var t1 = h + sigma1 + ch + K[i] + W[i];\n var t2 = sigma0 + maj;\n h = g;\n g = f;\n f = e;\n e = d + t1 | 0;\n d = c;\n c = b;\n b = a;\n a = t1 + t2 | 0;\n }\n\n // Intermediate hash value\n H[0] = H[0] + a | 0;\n H[1] = H[1] + b | 0;\n H[2] = H[2] + c | 0;\n H[3] = H[3] + d | 0;\n H[4] = H[4] + e | 0;\n H[5] = H[5] + f | 0;\n H[6] = H[6] + g | 0;\n H[7] = H[7] + h | 0;\n },\n _doFinalize: function _doFinalize() {\n // Shortcuts\n var data = this._data;\n var dataWords = data.words;\n var nBitsTotal = this._nDataBytes * 8;\n var nBitsLeft = data.sigBytes * 8;\n\n // Add padding\n dataWords[nBitsLeft >>> 5] |= 0x80 << 24 - nBitsLeft % 32;\n dataWords[(nBitsLeft + 64 >>> 9 << 4) + 14] = Math.floor(nBitsTotal / 0x100000000);\n dataWords[(nBitsLeft + 64 >>> 9 << 4) + 15] = nBitsTotal;\n data.sigBytes = dataWords.length * 4;\n\n // Hash final blocks\n this._process();\n\n // Return final computed hash\n return this._hash;\n },\n clone: function clone() {\n var clone = Hasher.clone.call(this);\n clone._hash = this._hash.clone();\n return clone;\n }\n });\n\n /**\n * Shortcut function to the hasher's object interface.\n *\n * @param {WordArray|string} message The message to hash.\n *\n * @return {WordArray} The hash.\n *\n * @static\n *\n * @example\n *\n * var hash = CryptoJS.SHA256('message');\n * var hash = CryptoJS.SHA256(wordArray);\n */\n C.SHA256 = Hasher._createHelper(SHA256);\n\n /**\n * Shortcut function to the HMAC's object interface.\n *\n * @param {WordArray|string} message The message to hash.\n * @param {WordArray|string} key The secret key.\n *\n * @return {WordArray} The HMAC.\n *\n * @static\n *\n * @example\n *\n * var hmac = CryptoJS.HmacSHA256(message, key);\n */\n C.HmacSHA256 = Hasher._createHmacHelper(SHA256);\n })(Math);\n (function () {\n // Shortcuts\n var C = CryptoJS;\n var C_lib = C.lib;\n var WordArray = C_lib.WordArray;\n var C_enc = C.enc;\n\n /**\n * UTF-16 BE encoding strategy.\n */\n var Utf16BE = C_enc.Utf16 = C_enc.Utf16BE = {\n /**\n * Converts a word array to a UTF-16 BE string.\n *\n * @param {WordArray} wordArray The word array.\n *\n * @return {string} The UTF-16 BE string.\n *\n * @static\n *\n * @example\n *\n * var utf16String = CryptoJS.enc.Utf16.stringify(wordArray);\n */\n stringify: function stringify(wordArray) {\n // Shortcuts\n var words = wordArray.words;\n var sigBytes = wordArray.sigBytes;\n\n // Convert\n var utf16Chars = [];\n for (var i = 0; i < sigBytes; i += 2) {\n var codePoint = words[i >>> 2] >>> 16 - i % 4 * 8 & 0xffff;\n utf16Chars.push(String.fromCharCode(codePoint));\n }\n return utf16Chars.join('');\n },\n /**\n * Converts a UTF-16 BE string to a word array.\n *\n * @param {string} utf16Str The UTF-16 BE string.\n *\n * @return {WordArray} The word array.\n *\n * @static\n *\n * @example\n *\n * var wordArray = CryptoJS.enc.Utf16.parse(utf16String);\n */\n parse: function parse(utf16Str) {\n // Shortcut\n var utf16StrLength = utf16Str.length;\n\n // Convert\n var words = [];\n for (var i = 0; i < utf16StrLength; i++) {\n words[i >>> 1] |= utf16Str.charCodeAt(i) << 16 - i % 2 * 16;\n }\n return WordArray.create(words, utf16StrLength * 2);\n }\n };\n\n /**\n * UTF-16 LE encoding strategy.\n */\n C_enc.Utf16LE = {\n /**\n * Converts a word array to a UTF-16 LE string.\n *\n * @param {WordArray} wordArray The word array.\n *\n * @return {string} The UTF-16 LE string.\n *\n * @static\n *\n * @example\n *\n * var utf16Str = CryptoJS.enc.Utf16LE.stringify(wordArray);\n */\n stringify: function stringify(wordArray) {\n // Shortcuts\n var words = wordArray.words;\n var sigBytes = wordArray.sigBytes;\n\n // Convert\n var utf16Chars = [];\n for (var i = 0; i < sigBytes; i += 2) {\n var codePoint = swapEndian(words[i >>> 2] >>> 16 - i % 4 * 8 & 0xffff);\n utf16Chars.push(String.fromCharCode(codePoint));\n }\n return utf16Chars.join('');\n },\n /**\n * Converts a UTF-16 LE string to a word array.\n *\n * @param {string} utf16Str The UTF-16 LE string.\n *\n * @return {WordArray} The word array.\n *\n * @static\n *\n * @example\n *\n * var wordArray = CryptoJS.enc.Utf16LE.parse(utf16Str);\n */\n parse: function parse(utf16Str) {\n // Shortcut\n var utf16StrLength = utf16Str.length;\n\n // Convert\n var words = [];\n for (var i = 0; i < utf16StrLength; i++) {\n words[i >>> 1] |= swapEndian(utf16Str.charCodeAt(i) << 16 - i % 2 * 16);\n }\n return WordArray.create(words, utf16StrLength * 2);\n }\n };\n function swapEndian(word) {\n return word << 8 & 0xff00ff00 | word >>> 8 & 0x00ff00ff;\n }\n })();\n (function () {\n // Check if typed arrays are supported\n if (typeof ArrayBuffer != 'function') {\n return;\n }\n\n // Shortcuts\n var C = CryptoJS;\n var C_lib = C.lib;\n var WordArray = C_lib.WordArray;\n\n // Reference original init\n var superInit = WordArray.init;\n\n // Augment WordArray.init to handle typed arrays\n var subInit = WordArray.init = function (typedArray) {\n // Convert buffers to uint8\n if (typedArray instanceof ArrayBuffer) {\n typedArray = new Uint8Array(typedArray);\n }\n\n // Convert other array views to uint8\n if (typedArray instanceof Int8Array || typeof Uint8ClampedArray !== \"undefined\" && typedArray instanceof Uint8ClampedArray || typedArray instanceof Int16Array || typedArray instanceof Uint16Array || typedArray instanceof Int32Array || typedArray instanceof Uint32Array || typedArray instanceof Float32Array || typedArray instanceof Float64Array) {\n typedArray = new Uint8Array(typedArray.buffer, typedArray.byteOffset, typedArray.byteLength);\n }\n\n // Handle Uint8Array\n if (typedArray instanceof Uint8Array) {\n // Shortcut\n var typedArrayByteLength = typedArray.byteLength;\n\n // Extract bytes\n var words = [];\n for (var i = 0; i < typedArrayByteLength; i++) {\n words[i >>> 2] |= typedArray[i] << 24 - i % 4 * 8;\n }\n\n // Initialize this word array\n superInit.call(this, words, typedArrayByteLength);\n } else {\n // Else call normal init\n superInit.apply(this, arguments);\n }\n };\n subInit.prototype = WordArray;\n })();\n\n /** @preserve\n (c) 2012 by Cédric Mesnil. All rights reserved.\n \tRedistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\n \t - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\n - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\n \tTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n (function (Math) {\n // Shortcuts\n var C = CryptoJS;\n var C_lib = C.lib;\n var WordArray = C_lib.WordArray;\n var Hasher = C_lib.Hasher;\n var C_algo = C.algo;\n\n // Constants table\n var _zl = WordArray.create([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8, 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12, 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2, 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13]);\n var _zr = WordArray.create([5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12, 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2, 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13, 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14, 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11]);\n var _sl = WordArray.create([11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8, 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12, 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5, 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12, 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6]);\n var _sr = WordArray.create([8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6, 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11, 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5, 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8, 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11]);\n var _hl = WordArray.create([0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]);\n var _hr = WordArray.create([0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]);\n\n /**\n * RIPEMD160 hash algorithm.\n */\n var RIPEMD160 = C_algo.RIPEMD160 = Hasher.extend({\n _doReset: function _doReset() {\n this._hash = WordArray.create([0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]);\n },\n _doProcessBlock: function _doProcessBlock(M, offset) {\n // Swap endian\n for (var i = 0; i < 16; i++) {\n // Shortcuts\n var offset_i = offset + i;\n var M_offset_i = M[offset_i];\n\n // Swap\n M[offset_i] = (M_offset_i << 8 | M_offset_i >>> 24) & 0x00ff00ff | (M_offset_i << 24 | M_offset_i >>> 8) & 0xff00ff00;\n }\n // Shortcut\n var H = this._hash.words;\n var hl = _hl.words;\n var hr = _hr.words;\n var zl = _zl.words;\n var zr = _zr.words;\n var sl = _sl.words;\n var sr = _sr.words;\n\n // Working variables\n var al, bl, cl, dl, el;\n var ar, br, cr, dr, er;\n ar = al = H[0];\n br = bl = H[1];\n cr = cl = H[2];\n dr = dl = H[3];\n er = el = H[4];\n // Computation\n var t;\n for (var i = 0; i < 80; i += 1) {\n t = al + M[offset + zl[i]] | 0;\n if (i < 16) {\n t += f1(bl, cl, dl) + hl[0];\n } else if (i < 32) {\n t += f2(bl, cl, dl) + hl[1];\n } else if (i < 48) {\n t += f3(bl, cl, dl) + hl[2];\n } else if (i < 64) {\n t += f4(bl, cl, dl) + hl[3];\n } else {\n // if (i<80) {\n t += f5(bl, cl, dl) + hl[4];\n }\n t = t | 0;\n t = rotl(t, sl[i]);\n t = t + el | 0;\n al = el;\n el = dl;\n dl = rotl(cl, 10);\n cl = bl;\n bl = t;\n t = ar + M[offset + zr[i]] | 0;\n if (i < 16) {\n t += f5(br, cr, dr) + hr[0];\n } else if (i < 32) {\n t += f4(br, cr, dr) + hr[1];\n } else if (i < 48) {\n t += f3(br, cr, dr) + hr[2];\n } else if (i < 64) {\n t += f2(br, cr, dr) + hr[3];\n } else {\n // if (i<80) {\n t += f1(br, cr, dr) + hr[4];\n }\n t = t | 0;\n t = rotl(t, sr[i]);\n t = t + er | 0;\n ar = er;\n er = dr;\n dr = rotl(cr, 10);\n cr = br;\n br = t;\n }\n // Intermediate hash value\n t = H[1] + cl + dr | 0;\n H[1] = H[2] + dl + er | 0;\n H[2] = H[3] + el + ar | 0;\n H[3] = H[4] + al + br | 0;\n H[4] = H[0] + bl + cr | 0;\n H[0] = t;\n },\n _doFinalize: function _doFinalize() {\n // Shortcuts\n var data = this._data;\n var dataWords = data.words;\n var nBitsTotal = this._nDataBytes * 8;\n var nBitsLeft = data.sigBytes * 8;\n\n // Add padding\n dataWords[nBitsLeft >>> 5] |= 0x80 << 24 - nBitsLeft % 32;\n dataWords[(nBitsLeft + 64 >>> 9 << 4) + 14] = (nBitsTotal << 8 | nBitsTotal >>> 24) & 0x00ff00ff | (nBitsTotal << 24 | nBitsTotal >>> 8) & 0xff00ff00;\n data.sigBytes = (dataWords.length + 1) * 4;\n\n // Hash final blocks\n this._process();\n\n // Shortcuts\n var hash = this._hash;\n var H = hash.words;\n\n // Swap endian\n for (var i = 0; i < 5; i++) {\n // Shortcut\n var H_i = H[i];\n\n // Swap\n H[i] = (H_i << 8 | H_i >>> 24) & 0x00ff00ff | (H_i << 24 | H_i >>> 8) & 0xff00ff00;\n }\n\n // Return final computed hash\n return hash;\n },\n clone: function clone() {\n var clone = Hasher.clone.call(this);\n clone._hash = this._hash.clone();\n return clone;\n }\n });\n function f1(x, y, z) {\n return x ^ y ^ z;\n }\n function f2(x, y, z) {\n return x & y | ~x & z;\n }\n function f3(x, y, z) {\n return (x | ~y) ^ z;\n }\n function f4(x, y, z) {\n return x & z | y & ~z;\n }\n function f5(x, y, z) {\n return x ^ (y | ~z);\n }\n function rotl(x, n) {\n return x << n | x >>> 32 - n;\n }\n\n /**\n * Shortcut function to the hasher's object interface.\n *\n * @param {WordArray|string} message The message to hash.\n *\n * @return {WordArray} The hash.\n *\n * @static\n *\n * @example\n *\n * var hash = CryptoJS.RIPEMD160('message');\n * var hash = CryptoJS.RIPEMD160(wordArray);\n */\n C.RIPEMD160 = Hasher._createHelper(RIPEMD160);\n\n /**\n * Shortcut function to the HMAC's object interface.\n *\n * @param {WordArray|string} message The message to hash.\n * @param {WordArray|string} key The secret key.\n *\n * @return {WordArray} The HMAC.\n *\n * @static\n *\n * @example\n *\n * var hmac = CryptoJS.HmacRIPEMD160(message, key);\n */\n C.HmacRIPEMD160 = Hasher._createHmacHelper(RIPEMD160);\n })(Math);\n (function () {\n // Shortcuts\n var C = CryptoJS;\n var C_lib = C.lib;\n var Base = C_lib.Base;\n var C_enc = C.enc;\n var Utf8 = C_enc.Utf8;\n var C_algo = C.algo;\n\n /**\n * HMAC algorithm.\n */\n var HMAC = C_algo.HMAC = Base.extend({\n /**\n * Initializes a newly created HMAC.\n *\n * @param {Hasher} hasher The hash algorithm to use.\n * @param {WordArray|string} key The secret key.\n *\n * @example\n *\n * var hmacHasher = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, key);\n */\n init: function init(hasher, key) {\n // Init hasher\n hasher = this._hasher = new hasher.init();\n\n // Convert string to WordArray, else assume WordArray already\n if (typeof key == 'string') {\n key = Utf8.parse(key);\n }\n\n // Shortcuts\n var hasherBlockSize = hasher.blockSize;\n var hasherBlockSizeBytes = hasherBlockSize * 4;\n\n // Allow arbitrary length keys\n if (key.sigBytes > hasherBlockSizeBytes) {\n key = hasher.finalize(key);\n }\n\n // Clamp excess bits\n key.clamp();\n\n // Clone key for inner and outer pads\n var oKey = this._oKey = key.clone();\n var iKey = this._iKey = key.clone();\n\n // Shortcuts\n var oKeyWords = oKey.words;\n var iKeyWords = iKey.words;\n\n // XOR keys with pad constants\n for (var i = 0; i < hasherBlockSize; i++) {\n oKeyWords[i] ^= 0x5c5c5c5c;\n iKeyWords[i] ^= 0x36363636;\n }\n oKey.sigBytes = iKey.sigBytes = hasherBlockSizeBytes;\n\n // Set initial values\n this.reset();\n },\n /**\n * Resets this HMAC to its initial state.\n *\n * @example\n *\n * hmacHasher.reset();\n */\n reset: function reset() {\n // Shortcut\n var hasher = this._hasher;\n\n // Reset\n hasher.reset();\n hasher.update(this._iKey);\n },\n /**\n * Updates this HMAC with a message.\n *\n * @param {WordArray|string} messageUpdate The message to append.\n *\n * @return {HMAC} This HMAC instance.\n *\n * @example\n *\n * hmacHasher.update('message');\n * hmacHasher.update(wordArray);\n */\n update: function update(messageUpdate) {\n this._hasher.update(messageUpdate);\n\n // Chainable\n return this;\n },\n /**\n * Finalizes the HMAC computation.\n * Note that the finalize operation is effectively a destructive, read-once operation.\n *\n * @param {WordArray|string} messageUpdate (Optional) A final message update.\n *\n * @return {WordArray} The HMAC.\n *\n * @example\n *\n * var hmac = hmacHasher.finalize();\n * var hmac = hmacHasher.finalize('message');\n * var hmac = hmacHasher.finalize(wordArray);\n */\n finalize: function finalize(messageUpdate) {\n // Shortcut\n var hasher = this._hasher;\n\n // Compute HMAC\n var innerHash = hasher.finalize(messageUpdate);\n hasher.reset();\n var hmac = hasher.finalize(this._oKey.clone().concat(innerHash));\n return hmac;\n }\n });\n })();\n (function () {\n // Shortcuts\n var C = CryptoJS;\n var C_lib = C.lib;\n var Base = C_lib.Base;\n var WordArray = C_lib.WordArray;\n var C_algo = C.algo;\n var SHA1 = C_algo.SHA1;\n var HMAC = C_algo.HMAC;\n\n /**\n * Password-Based Key Derivation Function 2 algorithm.\n */\n var PBKDF2 = C_algo.PBKDF2 = Base.extend({\n /**\n * Configuration options.\n *\n * @property {number} keySize The key size in words to generate. Default: 4 (128 bits)\n * @property {Hasher} hasher The hasher to use. Default: SHA1\n * @property {number} iterations The number of iterations to perform. Default: 1\n */\n cfg: Base.extend({\n keySize: 128 / 32,\n hasher: SHA1,\n iterations: 1\n }),\n /**\n * Initializes a newly created key derivation function.\n *\n * @param {Object} cfg (Optional) The configuration options to use for the derivation.\n *\n * @example\n *\n * var kdf = CryptoJS.algo.PBKDF2.create();\n * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8 });\n * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8, iterations: 1000 });\n */\n init: function init(cfg) {\n this.cfg = this.cfg.extend(cfg);\n },\n /**\n * Computes the Password-Based Key Derivation Function 2.\n *\n * @param {WordArray|string} password The password.\n * @param {WordArray|string} salt A salt.\n *\n * @return {WordArray} The derived key.\n *\n * @example\n *\n * var key = kdf.compute(password, salt);\n */\n compute: function compute(password, salt) {\n // Shortcut\n var cfg = this.cfg;\n\n // Init HMAC\n var hmac = HMAC.create(cfg.hasher, password);\n\n // Initial values\n var derivedKey = WordArray.create();\n var blockIndex = WordArray.create([0x00000001]);\n\n // Shortcuts\n var derivedKeyWords = derivedKey.words;\n var blockIndexWords = blockIndex.words;\n var keySize = cfg.keySize;\n var iterations = cfg.iterations;\n\n // Generate key\n while (derivedKeyWords.length < keySize) {\n var block = hmac.update(salt).finalize(blockIndex);\n hmac.reset();\n\n // Shortcuts\n var blockWords = block.words;\n var blockWordsLength = blockWords.length;\n\n // Iterations\n var intermediate = block;\n for (var i = 1; i < iterations; i++) {\n intermediate = hmac.finalize(intermediate);\n hmac.reset();\n\n // Shortcut\n var intermediateWords = intermediate.words;\n\n // XOR intermediate with block\n for (var j = 0; j < blockWordsLength; j++) {\n blockWords[j] ^= intermediateWords[j];\n }\n }\n derivedKey.concat(block);\n blockIndexWords[0]++;\n }\n derivedKey.sigBytes = keySize * 4;\n return derivedKey;\n }\n });\n\n /**\n * Computes the Password-Based Key Derivation Function 2.\n *\n * @param {WordArray|string} password The password.\n * @param {WordArray|string} salt A salt.\n * @param {Object} cfg (Optional) The configuration options to use for this computation.\n *\n * @return {WordArray} The derived key.\n *\n * @static\n *\n * @example\n *\n * var key = CryptoJS.PBKDF2(password, salt);\n * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8 });\n * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8, iterations: 1000 });\n */\n C.PBKDF2 = function (password, salt, cfg) {\n return PBKDF2.create(cfg).compute(password, salt);\n };\n })();\n (function () {\n // Shortcuts\n var C = CryptoJS;\n var C_lib = C.lib;\n var Base = C_lib.Base;\n var WordArray = C_lib.WordArray;\n var C_algo = C.algo;\n var MD5 = C_algo.MD5;\n\n /**\n * This key derivation function is meant to conform with EVP_BytesToKey.\n * www.openssl.org/docs/crypto/EVP_BytesToKey.html\n */\n var EvpKDF = C_algo.EvpKDF = Base.extend({\n /**\n * Configuration options.\n *\n * @property {number} keySize The key size in words to generate. Default: 4 (128 bits)\n * @property {Hasher} hasher The hash algorithm to use. Default: MD5\n * @property {number} iterations The number of iterations to perform. Default: 1\n */\n cfg: Base.extend({\n keySize: 128 / 32,\n hasher: MD5,\n iterations: 1\n }),\n /**\n * Initializes a newly created key derivation function.\n *\n * @param {Object} cfg (Optional) The configuration options to use for the derivation.\n *\n * @example\n *\n * var kdf = CryptoJS.algo.EvpKDF.create();\n * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8 });\n * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8, iterations: 1000 });\n */\n init: function init(cfg) {\n this.cfg = this.cfg.extend(cfg);\n },\n /**\n * Derives a key from a password.\n *\n * @param {WordArray|string} password The password.\n * @param {WordArray|string} salt A salt.\n *\n * @return {WordArray} The derived key.\n *\n * @example\n *\n * var key = kdf.compute(password, salt);\n */\n compute: function compute(password, salt) {\n var block;\n\n // Shortcut\n var cfg = this.cfg;\n\n // Init hasher\n var hasher = cfg.hasher.create();\n\n // Initial values\n var derivedKey = WordArray.create();\n\n // Shortcuts\n var derivedKeyWords = derivedKey.words;\n var keySize = cfg.keySize;\n var iterations = cfg.iterations;\n\n // Generate key\n while (derivedKeyWords.length < keySize) {\n if (block) {\n hasher.update(block);\n }\n block = hasher.update(password).finalize(salt);\n hasher.reset();\n\n // Iterations\n for (var i = 1; i < iterations; i++) {\n block = hasher.finalize(block);\n hasher.reset();\n }\n derivedKey.concat(block);\n }\n derivedKey.sigBytes = keySize * 4;\n return derivedKey;\n }\n });\n\n /**\n * Derives a key from a password.\n *\n * @param {WordArray|string} password The password.\n * @param {WordArray|string} salt A salt.\n * @param {Object} cfg (Optional) The configuration options to use for this computation.\n *\n * @return {WordArray} The derived key.\n *\n * @static\n *\n * @example\n *\n * var key = CryptoJS.EvpKDF(password, salt);\n * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8 });\n * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8, iterations: 1000 });\n */\n C.EvpKDF = function (password, salt, cfg) {\n return EvpKDF.create(cfg).compute(password, salt);\n };\n })();\n (function () {\n // Shortcuts\n var C = CryptoJS;\n var C_lib = C.lib;\n var WordArray = C_lib.WordArray;\n var C_algo = C.algo;\n var SHA256 = C_algo.SHA256;\n\n /**\n * SHA-224 hash algorithm.\n */\n var SHA224 = C_algo.SHA224 = SHA256.extend({\n _doReset: function _doReset() {\n this._hash = new WordArray.init([0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4]);\n },\n _doFinalize: function _doFinalize() {\n var hash = SHA256._doFinalize.call(this);\n hash.sigBytes -= 4;\n return hash;\n }\n });\n\n /**\n * Shortcut function to the hasher's object interface.\n *\n * @param {WordArray|string} message The message to hash.\n *\n * @return {WordArray} The hash.\n *\n * @static\n *\n * @example\n *\n * var hash = CryptoJS.SHA224('message');\n * var hash = CryptoJS.SHA224(wordArray);\n */\n C.SHA224 = SHA256._createHelper(SHA224);\n\n /**\n * Shortcut function to the HMAC's object interface.\n *\n * @param {WordArray|string} message The message to hash.\n * @param {WordArray|string} key The secret key.\n *\n * @return {WordArray} The HMAC.\n *\n * @static\n *\n * @example\n *\n * var hmac = CryptoJS.HmacSHA224(message, key);\n */\n C.HmacSHA224 = SHA256._createHmacHelper(SHA224);\n })();\n (function (undefined) {\n // Shortcuts\n var C = CryptoJS;\n var C_lib = C.lib;\n var Base = C_lib.Base;\n var X32WordArray = C_lib.WordArray;\n\n /**\n * x64 namespace.\n */\n var C_x64 = C.x64 = {};\n\n /**\n * A 64-bit word.\n */\n var X64Word = C_x64.Word = Base.extend({\n /**\n * Initializes a newly created 64-bit word.\n *\n * @param {number} high The high 32 bits.\n * @param {number} low The low 32 bits.\n *\n * @example\n *\n * var x64Word = CryptoJS.x64.Word.create(0x00010203, 0x04050607);\n */\n init: function init(high, low) {\n this.high = high;\n this.low = low;\n }\n\n /**\n * Bitwise NOTs this word.\n *\n * @return {X64Word} A new x64-Word object after negating.\n *\n * @example\n *\n * var negated = x64Word.not();\n */\n // not: function () {\n // var high = ~this.high;\n // var low = ~this.low;\n\n // return X64Word.create(high, low);\n // },\n\n /**\n * Bitwise ANDs this word with the passed word.\n *\n * @param {X64Word} word The x64-Word to AND with this word.\n *\n * @return {X64Word} A new x64-Word object after ANDing.\n *\n * @example\n *\n * var anded = x64Word.and(anotherX64Word);\n */\n // and: function (word) {\n // var high = this.high & word.high;\n // var low = this.low & word.low;\n\n // return X64Word.create(high, low);\n // },\n\n /**\n * Bitwise ORs this word with the passed word.\n *\n * @param {X64Word} word The x64-Word to OR with this word.\n *\n * @return {X64Word} A new x64-Word object after ORing.\n *\n * @example\n *\n * var ored = x64Word.or(anotherX64Word);\n */\n // or: function (word) {\n // var high = this.high | word.high;\n // var low = this.low | word.low;\n\n // return X64Word.create(high, low);\n // },\n\n /**\n * Bitwise XORs this word with the passed word.\n *\n * @param {X64Word} word The x64-Word to XOR with this word.\n *\n * @return {X64Word} A new x64-Word object after XORing.\n *\n * @example\n *\n * var xored = x64Word.xor(anotherX64Word);\n */\n // xor: function (word) {\n // var high = this.high ^ word.high;\n // var low = this.low ^ word.low;\n\n // return X64Word.create(high, low);\n // },\n\n /**\n * Shifts this word n bits to the left.\n *\n * @param {number} n The number of bits to shift.\n *\n * @return {X64Word} A new x64-Word object after shifting.\n *\n * @example\n *\n * var shifted = x64Word.shiftL(25);\n */\n // shiftL: function (n) {\n // if (n < 32) {\n // var high = (this.high << n) | (this.low >>> (32 - n));\n // var low = this.low << n;\n // } else {\n // var high = this.low << (n - 32);\n // var low = 0;\n // }\n\n // return X64Word.create(high, low);\n // },\n\n /**\n * Shifts this word n bits to the right.\n *\n * @param {number} n The number of bits to shift.\n *\n * @return {X64Word} A new x64-Word object after shifting.\n *\n * @example\n *\n * var shifted = x64Word.shiftR(7);\n */\n // shiftR: function (n) {\n // if (n < 32) {\n // var low = (this.low >>> n) | (this.high << (32 - n));\n // var high = this.high >>> n;\n // } else {\n // var low = this.high >>> (n - 32);\n // var high = 0;\n // }\n\n // return X64Word.create(high, low);\n // },\n\n /**\n * Rotates this word n bits to the left.\n *\n * @param {number} n The number of bits to rotate.\n *\n * @return {X64Word} A new x64-Word object after rotating.\n *\n * @example\n *\n * var rotated = x64Word.rotL(25);\n */\n // rotL: function (n) {\n // return this.shiftL(n).or(this.shiftR(64 - n));\n // },\n\n /**\n * Rotates this word n bits to the right.\n *\n * @param {number} n The number of bits to rotate.\n *\n * @return {X64Word} A new x64-Word object after rotating.\n *\n * @example\n *\n * var rotated = x64Word.rotR(7);\n */\n // rotR: function (n) {\n // return this.shiftR(n).or(this.shiftL(64 - n));\n // },\n\n /**\n * Adds this word with the passed word.\n *\n * @param {X64Word} word The x64-Word to add with this word.\n *\n * @return {X64Word} A new x64-Word object after adding.\n *\n * @example\n *\n * var added = x64Word.add(anotherX64Word);\n */\n // add: function (word) {\n // var low = (this.low + word.low) | 0;\n // var carry = (low >>> 0) < (this.low >>> 0) ? 1 : 0;\n // var high = (this.high + word.high + carry) | 0;\n\n // return X64Word.create(high, low);\n // }\n });\n\n /**\n * An array of 64-bit words.\n *\n * @property {Array} words The array of CryptoJS.x64.Word objects.\n * @property {number} sigBytes The number of significant bytes in this word array.\n */\n var X64WordArray = C_x64.WordArray = Base.extend({\n /**\n * Initializes a newly created word array.\n *\n * @param {Array} words (Optional) An array of CryptoJS.x64.Word objects.\n * @param {number} sigBytes (Optional) The number of significant bytes in the words.\n *\n * @example\n *\n * var wordArray = CryptoJS.x64.WordArray.create();\n *\n * var wordArray = CryptoJS.x64.WordArray.create([\n * CryptoJS.x64.Word.create(0x00010203, 0x04050607),\n * CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f)\n * ]);\n *\n * var wordArray = CryptoJS.x64.WordArray.create([\n * CryptoJS.x64.Word.create(0x00010203, 0x04050607),\n * CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f)\n * ], 10);\n */\n init: function init(words, sigBytes) {\n words = this.words = words || [];\n if (sigBytes != undefined) {\n this.sigBytes = sigBytes;\n } else {\n this.sigBytes = words.length * 8;\n }\n },\n /**\n * Converts this 64-bit word array to a 32-bit word array.\n *\n * @return {CryptoJS.lib.WordArray} This word array's data as a 32-bit word array.\n *\n * @example\n *\n * var x32WordArray = x64WordArray.toX32();\n */\n toX32: function toX32() {\n // Shortcuts\n var x64Words = this.words;\n var x64WordsLength = x64Words.length;\n\n // Convert\n var x32Words = [];\n for (var i = 0; i < x64WordsLength; i++) {\n var x64Word = x64Words[i];\n x32Words.push(x64Word.high);\n x32Words.push(x64Word.low);\n }\n return X32WordArray.create(x32Words, this.sigBytes);\n },\n /**\n * Creates a copy of this word array.\n *\n * @return {X64WordArray} The clone.\n *\n * @example\n *\n * var clone = x64WordArray.clone();\n */\n clone: function clone() {\n var clone = Base.clone.call(this);\n\n // Clone \"words\" array\n var words = clone.words = this.words.slice(0);\n\n // Clone each X64Word object\n var wordsLength = words.length;\n for (var i = 0; i < wordsLength; i++) {\n words[i] = words[i].clone();\n }\n return clone;\n }\n });\n })();\n (function (Math) {\n // Shortcuts\n var C = CryptoJS;\n var C_lib = C.lib;\n var WordArray = C_lib.WordArray;\n var Hasher = C_lib.Hasher;\n var C_x64 = C.x64;\n var X64Word = C_x64.Word;\n var C_algo = C.algo;\n\n // Constants tables\n var RHO_OFFSETS = [];\n var PI_INDEXES = [];\n var ROUND_CONSTANTS = [];\n\n // Compute Constants\n (function () {\n // Compute rho offset constants\n var x = 1,\n y = 0;\n for (var t = 0; t < 24; t++) {\n RHO_OFFSETS[x + 5 * y] = (t + 1) * (t + 2) / 2 % 64;\n var newX = y % 5;\n var newY = (2 * x + 3 * y) % 5;\n x = newX;\n y = newY;\n }\n\n // Compute pi index constants\n for (var x = 0; x < 5; x++) {\n for (var y = 0; y < 5; y++) {\n PI_INDEXES[x + 5 * y] = y + (2 * x + 3 * y) % 5 * 5;\n }\n }\n\n // Compute round constants\n var LFSR = 0x01;\n for (var i = 0; i < 24; i++) {\n var roundConstantMsw = 0;\n var roundConstantLsw = 0;\n for (var j = 0; j < 7; j++) {\n if (LFSR & 0x01) {\n var bitPosition = (1 << j) - 1;\n if (bitPosition < 32) {\n roundConstantLsw ^= 1 << bitPosition;\n } else /* if (bitPosition >= 32) */{\n roundConstantMsw ^= 1 << bitPosition - 32;\n }\n }\n\n // Compute next LFSR\n if (LFSR & 0x80) {\n // Primitive polynomial over GF(2): x^8 + x^6 + x^5 + x^4 + 1\n LFSR = LFSR << 1 ^ 0x71;\n } else {\n LFSR <<= 1;\n }\n }\n ROUND_CONSTANTS[i] = X64Word.create(roundConstantMsw, roundConstantLsw);\n }\n })();\n\n // Reusable objects for temporary values\n var T = [];\n (function () {\n for (var i = 0; i < 25; i++) {\n T[i] = X64Word.create();\n }\n })();\n\n /**\n * SHA-3 hash algorithm.\n */\n var SHA3 = C_algo.SHA3 = Hasher.extend({\n /**\n * Configuration options.\n *\n * @property {number} outputLength\n * The desired number of bits in the output hash.\n * Only values permitted are: 224, 256, 384, 512.\n * Default: 512\n */\n cfg: Hasher.cfg.extend({\n outputLength: 512\n }),\n _doReset: function _doReset() {\n var state = this._state = [];\n for (var i = 0; i < 25; i++) {\n state[i] = new X64Word.init();\n }\n this.blockSize = (1600 - 2 * this.cfg.outputLength) / 32;\n },\n _doProcessBlock: function _doProcessBlock(M, offset) {\n // Shortcuts\n var state = this._state;\n var nBlockSizeLanes = this.blockSize / 2;\n\n // Absorb\n for (var i = 0; i < nBlockSizeLanes; i++) {\n // Shortcuts\n var M2i = M[offset + 2 * i];\n var M2i1 = M[offset + 2 * i + 1];\n\n // Swap endian\n M2i = (M2i << 8 | M2i >>> 24) & 0x00ff00ff | (M2i << 24 | M2i >>> 8) & 0xff00ff00;\n M2i1 = (M2i1 << 8 | M2i1 >>> 24) & 0x00ff00ff | (M2i1 << 24 | M2i1 >>> 8) & 0xff00ff00;\n\n // Absorb message into state\n var lane = state[i];\n lane.high ^= M2i1;\n lane.low ^= M2i;\n }\n\n // Rounds\n for (var round = 0; round < 24; round++) {\n // Theta\n for (var x = 0; x < 5; x++) {\n // Mix column lanes\n var tMsw = 0,\n tLsw = 0;\n for (var y = 0; y < 5; y++) {\n var lane = state[x + 5 * y];\n tMsw ^= lane.high;\n tLsw ^= lane.low;\n }\n\n // Temporary values\n var Tx = T[x];\n Tx.high = tMsw;\n Tx.low = tLsw;\n }\n for (var x = 0; x < 5; x++) {\n // Shortcuts\n var Tx4 = T[(x + 4) % 5];\n var Tx1 = T[(x + 1) % 5];\n var Tx1Msw = Tx1.high;\n var Tx1Lsw = Tx1.low;\n\n // Mix surrounding columns\n var tMsw = Tx4.high ^ (Tx1Msw << 1 | Tx1Lsw >>> 31);\n var tLsw = Tx4.low ^ (Tx1Lsw << 1 | Tx1Msw >>> 31);\n for (var y = 0; y < 5; y++) {\n var lane = state[x + 5 * y];\n lane.high ^= tMsw;\n lane.low ^= tLsw;\n }\n }\n\n // Rho Pi\n for (var laneIndex = 1; laneIndex < 25; laneIndex++) {\n var tMsw;\n var tLsw;\n\n // Shortcuts\n var lane = state[laneIndex];\n var laneMsw = lane.high;\n var laneLsw = lane.low;\n var rhoOffset = RHO_OFFSETS[laneIndex];\n\n // Rotate lanes\n if (rhoOffset < 32) {\n tMsw = laneMsw << rhoOffset | laneLsw >>> 32 - rhoOffset;\n tLsw = laneLsw << rhoOffset | laneMsw >>> 32 - rhoOffset;\n } else /* if (rhoOffset >= 32) */{\n tMsw = laneLsw << rhoOffset - 32 | laneMsw >>> 64 - rhoOffset;\n tLsw = laneMsw << rhoOffset - 32 | laneLsw >>> 64 - rhoOffset;\n }\n\n // Transpose lanes\n var TPiLane = T[PI_INDEXES[laneIndex]];\n TPiLane.high = tMsw;\n TPiLane.low = tLsw;\n }\n\n // Rho pi at x = y = 0\n var T0 = T[0];\n var state0 = state[0];\n T0.high = state0.high;\n T0.low = state0.low;\n\n // Chi\n for (var x = 0; x < 5; x++) {\n for (var y = 0; y < 5; y++) {\n // Shortcuts\n var laneIndex = x + 5 * y;\n var lane = state[laneIndex];\n var TLane = T[laneIndex];\n var Tx1Lane = T[(x + 1) % 5 + 5 * y];\n var Tx2Lane = T[(x + 2) % 5 + 5 * y];\n\n // Mix rows\n lane.high = TLane.high ^ ~Tx1Lane.high & Tx2Lane.high;\n lane.low = TLane.low ^ ~Tx1Lane.low & Tx2Lane.low;\n }\n }\n\n // Iota\n var lane = state[0];\n var roundConstant = ROUND_CONSTANTS[round];\n lane.high ^= roundConstant.high;\n lane.low ^= roundConstant.low;\n }\n },\n _doFinalize: function _doFinalize() {\n // Shortcuts\n var data = this._data;\n var dataWords = data.words;\n var nBitsTotal = this._nDataBytes * 8;\n var nBitsLeft = data.sigBytes * 8;\n var blockSizeBits = this.blockSize * 32;\n\n // Add padding\n dataWords[nBitsLeft >>> 5] |= 0x1 << 24 - nBitsLeft % 32;\n dataWords[(Math.ceil((nBitsLeft + 1) / blockSizeBits) * blockSizeBits >>> 5) - 1] |= 0x80;\n data.sigBytes = dataWords.length * 4;\n\n // Hash final blocks\n this._process();\n\n // Shortcuts\n var state = this._state;\n var outputLengthBytes = this.cfg.outputLength / 8;\n var outputLengthLanes = outputLengthBytes / 8;\n\n // Squeeze\n var hashWords = [];\n for (var i = 0; i < outputLengthLanes; i++) {\n // Shortcuts\n var lane = state[i];\n var laneMsw = lane.high;\n var laneLsw = lane.low;\n\n // Swap endian\n laneMsw = (laneMsw << 8 | laneMsw >>> 24) & 0x00ff00ff | (laneMsw << 24 | laneMsw >>> 8) & 0xff00ff00;\n laneLsw = (laneLsw << 8 | laneLsw >>> 24) & 0x00ff00ff | (laneLsw << 24 | laneLsw >>> 8) & 0xff00ff00;\n\n // Squeeze state to retrieve hash\n hashWords.push(laneLsw);\n hashWords.push(laneMsw);\n }\n\n // Return final computed hash\n return new WordArray.init(hashWords, outputLengthBytes);\n },\n clone: function clone() {\n var clone = Hasher.clone.call(this);\n var state = clone._state = this._state.slice(0);\n for (var i = 0; i < 25; i++) {\n state[i] = state[i].clone();\n }\n return clone;\n }\n });\n\n /**\n * Shortcut function to the hasher's object interface.\n *\n * @param {WordArray|string} message The message to hash.\n *\n * @return {WordArray} The hash.\n *\n * @static\n *\n * @example\n *\n * var hash = CryptoJS.SHA3('message');\n * var hash = CryptoJS.SHA3(wordArray);\n */\n C.SHA3 = Hasher._createHelper(SHA3);\n\n /**\n * Shortcut function to the HMAC's object interface.\n *\n * @param {WordArray|string} message The message to hash.\n * @param {WordArray|string} key The secret key.\n *\n * @return {WordArray} The HMAC.\n *\n * @static\n *\n * @example\n *\n * var hmac = CryptoJS.HmacSHA3(message, key);\n */\n C.HmacSHA3 = Hasher._createHmacHelper(SHA3);\n })(Math);\n (function () {\n // Shortcuts\n var C = CryptoJS;\n var C_lib = C.lib;\n var Hasher = C_lib.Hasher;\n var C_x64 = C.x64;\n var X64Word = C_x64.Word;\n var X64WordArray = C_x64.WordArray;\n var C_algo = C.algo;\n function X64Word_create() {\n return X64Word.create.apply(X64Word, arguments);\n }\n\n // Constants\n var K = [X64Word_create(0x428a2f98, 0xd728ae22), X64Word_create(0x71374491, 0x23ef65cd), X64Word_create(0xb5c0fbcf, 0xec4d3b2f), X64Word_create(0xe9b5dba5, 0x8189dbbc), X64Word_create(0x3956c25b, 0xf348b538), X64Word_create(0x59f111f1, 0xb605d019), X64Word_create(0x923f82a4, 0xaf194f9b), X64Word_create(0xab1c5ed5, 0xda6d8118), X64Word_create(0xd807aa98, 0xa3030242), X64Word_create(0x12835b01, 0x45706fbe), X64Word_create(0x243185be, 0x4ee4b28c), X64Word_create(0x550c7dc3, 0xd5ffb4e2), X64Word_create(0x72be5d74, 0xf27b896f), X64Word_create(0x80deb1fe, 0x3b1696b1), X64Word_create(0x9bdc06a7, 0x25c71235), X64Word_create(0xc19bf174, 0xcf692694), X64Word_create(0xe49b69c1, 0x9ef14ad2), X64Word_create(0xefbe4786, 0x384f25e3), X64Word_create(0x0fc19dc6, 0x8b8cd5b5), X64Word_create(0x240ca1cc, 0x77ac9c65), X64Word_create(0x2de92c6f, 0x592b0275), X64Word_create(0x4a7484aa, 0x6ea6e483), X64Word_create(0x5cb0a9dc, 0xbd41fbd4), X64Word_create(0x76f988da, 0x831153b5), X64Word_create(0x983e5152, 0xee66dfab), X64Word_create(0xa831c66d, 0x2db43210), X64Word_create(0xb00327c8, 0x98fb213f), X64Word_create(0xbf597fc7, 0xbeef0ee4), X64Word_create(0xc6e00bf3, 0x3da88fc2), X64Word_create(0xd5a79147, 0x930aa725), X64Word_create(0x06ca6351, 0xe003826f), X64Word_create(0x14292967, 0x0a0e6e70), X64Word_create(0x27b70a85, 0x46d22ffc), X64Word_create(0x2e1b2138, 0x5c26c926), X64Word_create(0x4d2c6dfc, 0x5ac42aed), X64Word_create(0x53380d13, 0x9d95b3df), X64Word_create(0x650a7354, 0x8baf63de), X64Word_create(0x766a0abb, 0x3c77b2a8), X64Word_create(0x81c2c92e, 0x47edaee6), X64Word_create(0x92722c85, 0x1482353b), X64Word_create(0xa2bfe8a1, 0x4cf10364), X64Word_create(0xa81a664b, 0xbc423001), X64Word_create(0xc24b8b70, 0xd0f89791), X64Word_create(0xc76c51a3, 0x0654be30), X64Word_create(0xd192e819, 0xd6ef5218), X64Word_create(0xd6990624, 0x5565a910), X64Word_create(0xf40e3585, 0x5771202a), X64Word_create(0x106aa070, 0x32bbd1b8), X64Word_create(0x19a4c116, 0xb8d2d0c8), X64Word_create(0x1e376c08, 0x5141ab53), X64Word_create(0x2748774c, 0xdf8eeb99), X64Word_create(0x34b0bcb5, 0xe19b48a8), X64Word_create(0x391c0cb3, 0xc5c95a63), X64Word_create(0x4ed8aa4a, 0xe3418acb), X64Word_create(0x5b9cca4f, 0x7763e373), X64Word_create(0x682e6ff3, 0xd6b2b8a3), X64Word_create(0x748f82ee, 0x5defb2fc), X64Word_create(0x78a5636f, 0x43172f60), X64Word_create(0x84c87814, 0xa1f0ab72), X64Word_create(0x8cc70208, 0x1a6439ec), X64Word_create(0x90befffa, 0x23631e28), X64Word_create(0xa4506ceb, 0xde82bde9), X64Word_create(0xbef9a3f7, 0xb2c67915), X64Word_create(0xc67178f2, 0xe372532b), X64Word_create(0xca273ece, 0xea26619c), X64Word_create(0xd186b8c7, 0x21c0c207), X64Word_create(0xeada7dd6, 0xcde0eb1e), X64Word_create(0xf57d4f7f, 0xee6ed178), X64Word_create(0x06f067aa, 0x72176fba), X64Word_create(0x0a637dc5, 0xa2c898a6), X64Word_create(0x113f9804, 0xbef90dae), X64Word_create(0x1b710b35, 0x131c471b), X64Word_create(0x28db77f5, 0x23047d84), X64Word_create(0x32caab7b, 0x40c72493), X64Word_create(0x3c9ebe0a, 0x15c9bebc), X64Word_create(0x431d67c4, 0x9c100d4c), X64Word_create(0x4cc5d4be, 0xcb3e42b6), X64Word_create(0x597f299c, 0xfc657e2a), X64Word_create(0x5fcb6fab, 0x3ad6faec), X64Word_create(0x6c44198c, 0x4a475817)];\n\n // Reusable objects\n var W = [];\n (function () {\n for (var i = 0; i < 80; i++) {\n W[i] = X64Word_create();\n }\n })();\n\n /**\n * SHA-512 hash algorithm.\n */\n var SHA512 = C_algo.SHA512 = Hasher.extend({\n _doReset: function _doReset() {\n this._hash = new X64WordArray.init([new X64Word.init(0x6a09e667, 0xf3bcc908), new X64Word.init(0xbb67ae85, 0x84caa73b), new X64Word.init(0x3c6ef372, 0xfe94f82b), new X64Word.init(0xa54ff53a, 0x5f1d36f1), new X64Word.init(0x510e527f, 0xade682d1), new X64Word.init(0x9b05688c, 0x2b3e6c1f), new X64Word.init(0x1f83d9ab, 0xfb41bd6b), new X64Word.init(0x5be0cd19, 0x137e2179)]);\n },\n _doProcessBlock: function _doProcessBlock(M, offset) {\n // Shortcuts\n var H = this._hash.words;\n var H0 = H[0];\n var H1 = H[1];\n var H2 = H[2];\n var H3 = H[3];\n var H4 = H[4];\n var H5 = H[5];\n var H6 = H[6];\n var H7 = H[7];\n var H0h = H0.high;\n var H0l = H0.low;\n var H1h = H1.high;\n var H1l = H1.low;\n var H2h = H2.high;\n var H2l = H2.low;\n var H3h = H3.high;\n var H3l = H3.low;\n var H4h = H4.high;\n var H4l = H4.low;\n var H5h = H5.high;\n var H5l = H5.low;\n var H6h = H6.high;\n var H6l = H6.low;\n var H7h = H7.high;\n var H7l = H7.low;\n\n // Working variables\n var ah = H0h;\n var al = H0l;\n var bh = H1h;\n var bl = H1l;\n var ch = H2h;\n var cl = H2l;\n var dh = H3h;\n var dl = H3l;\n var eh = H4h;\n var el = H4l;\n var fh = H5h;\n var fl = H5l;\n var gh = H6h;\n var gl = H6l;\n var hh = H7h;\n var hl = H7l;\n\n // Rounds\n for (var i = 0; i < 80; i++) {\n var Wil;\n var Wih;\n\n // Shortcut\n var Wi = W[i];\n\n // Extend message\n if (i < 16) {\n Wih = Wi.high = M[offset + i * 2] | 0;\n Wil = Wi.low = M[offset + i * 2 + 1] | 0;\n } else {\n // Gamma0\n var gamma0x = W[i - 15];\n var gamma0xh = gamma0x.high;\n var gamma0xl = gamma0x.low;\n var gamma0h = (gamma0xh >>> 1 | gamma0xl << 31) ^ (gamma0xh >>> 8 | gamma0xl << 24) ^ gamma0xh >>> 7;\n var gamma0l = (gamma0xl >>> 1 | gamma0xh << 31) ^ (gamma0xl >>> 8 | gamma0xh << 24) ^ (gamma0xl >>> 7 | gamma0xh << 25);\n\n // Gamma1\n var gamma1x = W[i - 2];\n var gamma1xh = gamma1x.high;\n var gamma1xl = gamma1x.low;\n var gamma1h = (gamma1xh >>> 19 | gamma1xl << 13) ^ (gamma1xh << 3 | gamma1xl >>> 29) ^ gamma1xh >>> 6;\n var gamma1l = (gamma1xl >>> 19 | gamma1xh << 13) ^ (gamma1xl << 3 | gamma1xh >>> 29) ^ (gamma1xl >>> 6 | gamma1xh << 26);\n\n // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]\n var Wi7 = W[i - 7];\n var Wi7h = Wi7.high;\n var Wi7l = Wi7.low;\n var Wi16 = W[i - 16];\n var Wi16h = Wi16.high;\n var Wi16l = Wi16.low;\n Wil = gamma0l + Wi7l;\n Wih = gamma0h + Wi7h + (Wil >>> 0 < gamma0l >>> 0 ? 1 : 0);\n Wil = Wil + gamma1l;\n Wih = Wih + gamma1h + (Wil >>> 0 < gamma1l >>> 0 ? 1 : 0);\n Wil = Wil + Wi16l;\n Wih = Wih + Wi16h + (Wil >>> 0 < Wi16l >>> 0 ? 1 : 0);\n Wi.high = Wih;\n Wi.low = Wil;\n }\n var chh = eh & fh ^ ~eh & gh;\n var chl = el & fl ^ ~el & gl;\n var majh = ah & bh ^ ah & ch ^ bh & ch;\n var majl = al & bl ^ al & cl ^ bl & cl;\n var sigma0h = (ah >>> 28 | al << 4) ^ (ah << 30 | al >>> 2) ^ (ah << 25 | al >>> 7);\n var sigma0l = (al >>> 28 | ah << 4) ^ (al << 30 | ah >>> 2) ^ (al << 25 | ah >>> 7);\n var sigma1h = (eh >>> 14 | el << 18) ^ (eh >>> 18 | el << 14) ^ (eh << 23 | el >>> 9);\n var sigma1l = (el >>> 14 | eh << 18) ^ (el >>> 18 | eh << 14) ^ (el << 23 | eh >>> 9);\n\n // t1 = h + sigma1 + ch + K[i] + W[i]\n var Ki = K[i];\n var Kih = Ki.high;\n var Kil = Ki.low;\n var t1l = hl + sigma1l;\n var t1h = hh + sigma1h + (t1l >>> 0 < hl >>> 0 ? 1 : 0);\n var t1l = t1l + chl;\n var t1h = t1h + chh + (t1l >>> 0 < chl >>> 0 ? 1 : 0);\n var t1l = t1l + Kil;\n var t1h = t1h + Kih + (t1l >>> 0 < Kil >>> 0 ? 1 : 0);\n var t1l = t1l + Wil;\n var t1h = t1h + Wih + (t1l >>> 0 < Wil >>> 0 ? 1 : 0);\n\n // t2 = sigma0 + maj\n var t2l = sigma0l + majl;\n var t2h = sigma0h + majh + (t2l >>> 0 < sigma0l >>> 0 ? 1 : 0);\n\n // Update working variables\n hh = gh;\n hl = gl;\n gh = fh;\n gl = fl;\n fh = eh;\n fl = el;\n el = dl + t1l | 0;\n eh = dh + t1h + (el >>> 0 < dl >>> 0 ? 1 : 0) | 0;\n dh = ch;\n dl = cl;\n ch = bh;\n cl = bl;\n bh = ah;\n bl = al;\n al = t1l + t2l | 0;\n ah = t1h + t2h + (al >>> 0 < t1l >>> 0 ? 1 : 0) | 0;\n }\n\n // Intermediate hash value\n H0l = H0.low = H0l + al;\n H0.high = H0h + ah + (H0l >>> 0 < al >>> 0 ? 1 : 0);\n H1l = H1.low = H1l + bl;\n H1.high = H1h + bh + (H1l >>> 0 < bl >>> 0 ? 1 : 0);\n H2l = H2.low = H2l + cl;\n H2.high = H2h + ch + (H2l >>> 0 < cl >>> 0 ? 1 : 0);\n H3l = H3.low = H3l + dl;\n H3.high = H3h + dh + (H3l >>> 0 < dl >>> 0 ? 1 : 0);\n H4l = H4.low = H4l + el;\n H4.high = H4h + eh + (H4l >>> 0 < el >>> 0 ? 1 : 0);\n H5l = H5.low = H5l + fl;\n H5.high = H5h + fh + (H5l >>> 0 < fl >>> 0 ? 1 : 0);\n H6l = H6.low = H6l + gl;\n H6.high = H6h + gh + (H6l >>> 0 < gl >>> 0 ? 1 : 0);\n H7l = H7.low = H7l + hl;\n H7.high = H7h + hh + (H7l >>> 0 < hl >>> 0 ? 1 : 0);\n },\n _doFinalize: function _doFinalize() {\n // Shortcuts\n var data = this._data;\n var dataWords = data.words;\n var nBitsTotal = this._nDataBytes * 8;\n var nBitsLeft = data.sigBytes * 8;\n\n // Add padding\n dataWords[nBitsLeft >>> 5] |= 0x80 << 24 - nBitsLeft % 32;\n dataWords[(nBitsLeft + 128 >>> 10 << 5) + 30] = Math.floor(nBitsTotal / 0x100000000);\n dataWords[(nBitsLeft + 128 >>> 10 << 5) + 31] = nBitsTotal;\n data.sigBytes = dataWords.length * 4;\n\n // Hash final blocks\n this._process();\n\n // Convert hash to 32-bit word array before returning\n var hash = this._hash.toX32();\n\n // Return final computed hash\n return hash;\n },\n clone: function clone() {\n var clone = Hasher.clone.call(this);\n clone._hash = this._hash.clone();\n return clone;\n },\n blockSize: 1024 / 32\n });\n\n /**\n * Shortcut function to the hasher's object interface.\n *\n * @param {WordArray|string} message The message to hash.\n *\n * @return {WordArray} The hash.\n *\n * @static\n *\n * @example\n *\n * var hash = CryptoJS.SHA512('message');\n * var hash = CryptoJS.SHA512(wordArray);\n */\n C.SHA512 = Hasher._createHelper(SHA512);\n\n /**\n * Shortcut function to the HMAC's object interface.\n *\n * @param {WordArray|string} message The message to hash.\n * @param {WordArray|string} key The secret key.\n *\n * @return {WordArray} The HMAC.\n *\n * @static\n *\n * @example\n *\n * var hmac = CryptoJS.HmacSHA512(message, key);\n */\n C.HmacSHA512 = Hasher._createHmacHelper(SHA512);\n })();\n (function () {\n // Shortcuts\n var C = CryptoJS;\n var C_x64 = C.x64;\n var X64Word = C_x64.Word;\n var X64WordArray = C_x64.WordArray;\n var C_algo = C.algo;\n var SHA512 = C_algo.SHA512;\n\n /**\n * SHA-384 hash algorithm.\n */\n var SHA384 = C_algo.SHA384 = SHA512.extend({\n _doReset: function _doReset() {\n this._hash = new X64WordArray.init([new X64Word.init(0xcbbb9d5d, 0xc1059ed8), new X64Word.init(0x629a292a, 0x367cd507), new X64Word.init(0x9159015a, 0x3070dd17), new X64Word.init(0x152fecd8, 0xf70e5939), new X64Word.init(0x67332667, 0xffc00b31), new X64Word.init(0x8eb44a87, 0x68581511), new X64Word.init(0xdb0c2e0d, 0x64f98fa7), new X64Word.init(0x47b5481d, 0xbefa4fa4)]);\n },\n _doFinalize: function _doFinalize() {\n var hash = SHA512._doFinalize.call(this);\n hash.sigBytes -= 16;\n return hash;\n }\n });\n\n /**\n * Shortcut function to the hasher's object interface.\n *\n * @param {WordArray|string} message The message to hash.\n *\n * @return {WordArray} The hash.\n *\n * @static\n *\n * @example\n *\n * var hash = CryptoJS.SHA384('message');\n * var hash = CryptoJS.SHA384(wordArray);\n */\n C.SHA384 = SHA512._createHelper(SHA384);\n\n /**\n * Shortcut function to the HMAC's object interface.\n *\n * @param {WordArray|string} message The message to hash.\n * @param {WordArray|string} key The secret key.\n *\n * @return {WordArray} The HMAC.\n *\n * @static\n *\n * @example\n *\n * var hmac = CryptoJS.HmacSHA384(message, key);\n */\n C.HmacSHA384 = SHA512._createHmacHelper(SHA384);\n })();\n\n /**\n * Cipher core components.\n */\n CryptoJS.lib.Cipher || function (undefined) {\n // Shortcuts\n var C = CryptoJS;\n var C_lib = C.lib;\n var Base = C_lib.Base;\n var WordArray = C_lib.WordArray;\n var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm;\n var C_enc = C.enc;\n var Utf8 = C_enc.Utf8;\n var Base64 = C_enc.Base64;\n var C_algo = C.algo;\n var EvpKDF = C_algo.EvpKDF;\n\n /**\n * Abstract base cipher template.\n *\n * @property {number} keySize This cipher's key size. Default: 4 (128 bits)\n * @property {number} ivSize This cipher's IV size. Default: 4 (128 bits)\n * @property {number} _ENC_XFORM_MODE A constant representing encryption mode.\n * @property {number} _DEC_XFORM_MODE A constant representing decryption mode.\n */\n var Cipher = C_lib.Cipher = BufferedBlockAlgorithm.extend({\n /**\n * Configuration options.\n *\n * @property {WordArray} iv The IV to use for this operation.\n */\n cfg: Base.extend(),\n /**\n * Creates this cipher in encryption mode.\n *\n * @param {WordArray} key The key.\n * @param {Object} cfg (Optional) The configuration options to use for this operation.\n *\n * @return {Cipher} A cipher instance.\n *\n * @static\n *\n * @example\n *\n * var cipher = CryptoJS.algo.AES.createEncryptor(keyWordArray, { iv: ivWordArray });\n */\n createEncryptor: function createEncryptor(key, cfg) {\n return this.create(this._ENC_XFORM_MODE, key, cfg);\n },\n /**\n * Creates this cipher in decryption mode.\n *\n * @param {WordArray} key The key.\n * @param {Object} cfg (Optional) The configuration options to use for this operation.\n *\n * @return {Cipher} A cipher instance.\n *\n * @static\n *\n * @example\n *\n * var cipher = CryptoJS.algo.AES.createDecryptor(keyWordArray, { iv: ivWordArray });\n */\n createDecryptor: function createDecryptor(key, cfg) {\n return this.create(this._DEC_XFORM_MODE, key, cfg);\n },\n /**\n * Initializes a newly created cipher.\n *\n * @param {number} xformMode Either the encryption or decryption transormation mode constant.\n * @param {WordArray} key The key.\n * @param {Object} cfg (Optional) The configuration options to use for this operation.\n *\n * @example\n *\n * var cipher = CryptoJS.algo.AES.create(CryptoJS.algo.AES._ENC_XFORM_MODE, keyWordArray, { iv: ivWordArray });\n */\n init: function init(xformMode, key, cfg) {\n // Apply config defaults\n this.cfg = this.cfg.extend(cfg);\n\n // Store transform mode and key\n this._xformMode = xformMode;\n this._key = key;\n\n // Set initial values\n this.reset();\n },\n /**\n * Resets this cipher to its initial state.\n *\n * @example\n *\n * cipher.reset();\n */\n reset: function reset() {\n // Reset data buffer\n BufferedBlockAlgorithm.reset.call(this);\n\n // Perform concrete-cipher logic\n this._doReset();\n },\n /**\n * Adds data to be encrypted or decrypted.\n *\n * @param {WordArray|string} dataUpdate The data to encrypt or decrypt.\n *\n * @return {WordArray} The data after processing.\n *\n * @example\n *\n * var encrypted = cipher.process('data');\n * var encrypted = cipher.process(wordArray);\n */\n process: function process(dataUpdate) {\n // Append\n this._append(dataUpdate);\n\n // Process available blocks\n return this._process();\n },\n /**\n * Finalizes the encryption or decryption process.\n * Note that the finalize operation is effectively a destructive, read-once operation.\n *\n * @param {WordArray|string} dataUpdate The final data to encrypt or decrypt.\n *\n * @return {WordArray} The data after final processing.\n *\n * @example\n *\n * var encrypted = cipher.finalize();\n * var encrypted = cipher.finalize('data');\n * var encrypted = cipher.finalize(wordArray);\n */\n finalize: function finalize(dataUpdate) {\n // Final data update\n if (dataUpdate) {\n this._append(dataUpdate);\n }\n\n // Perform concrete-cipher logic\n var finalProcessedData = this._doFinalize();\n return finalProcessedData;\n },\n keySize: 128 / 32,\n ivSize: 128 / 32,\n _ENC_XFORM_MODE: 1,\n _DEC_XFORM_MODE: 2,\n /**\n * Creates shortcut functions to a cipher's object interface.\n *\n * @param {Cipher} cipher The cipher to create a helper for.\n *\n * @return {Object} An object with encrypt and decrypt shortcut functions.\n *\n * @static\n *\n * @example\n *\n * var AES = CryptoJS.lib.Cipher._createHelper(CryptoJS.algo.AES);\n */\n _createHelper: function () {\n function selectCipherStrategy(key) {\n if (typeof key == 'string') {\n return PasswordBasedCipher;\n } else {\n return SerializableCipher;\n }\n }\n return function (cipher) {\n return {\n encrypt: function encrypt(message, key, cfg) {\n return selectCipherStrategy(key).encrypt(cipher, message, key, cfg);\n },\n decrypt: function decrypt(ciphertext, key, cfg) {\n return selectCipherStrategy(key).decrypt(cipher, ciphertext, key, cfg);\n }\n };\n };\n }()\n });\n\n /**\n * Abstract base stream cipher template.\n *\n * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 1 (32 bits)\n */\n var StreamCipher = C_lib.StreamCipher = Cipher.extend({\n _doFinalize: function _doFinalize() {\n // Process partial blocks\n var finalProcessedBlocks = this._process(!!'flush');\n return finalProcessedBlocks;\n },\n blockSize: 1\n });\n\n /**\n * Mode namespace.\n */\n var C_mode = C.mode = {};\n\n /**\n * Abstract base block cipher mode template.\n */\n var BlockCipherMode = C_lib.BlockCipherMode = Base.extend({\n /**\n * Creates this mode for encryption.\n *\n * @param {Cipher} cipher A block cipher instance.\n * @param {Array} iv The IV words.\n *\n * @static\n *\n * @example\n *\n * var mode = CryptoJS.mode.CBC.createEncryptor(cipher, iv.words);\n */\n createEncryptor: function createEncryptor(cipher, iv) {\n return this.Encryptor.create(cipher, iv);\n },\n /**\n * Creates this mode for decryption.\n *\n * @param {Cipher} cipher A block cipher instance.\n * @param {Array} iv The IV words.\n *\n * @static\n *\n * @example\n *\n * var mode = CryptoJS.mode.CBC.createDecryptor(cipher, iv.words);\n */\n createDecryptor: function createDecryptor(cipher, iv) {\n return this.Decryptor.create(cipher, iv);\n },\n /**\n * Initializes a newly created mode.\n *\n * @param {Cipher} cipher A block cipher instance.\n * @param {Array} iv The IV words.\n *\n * @example\n *\n * var mode = CryptoJS.mode.CBC.Encryptor.create(cipher, iv.words);\n */\n init: function init(cipher, iv) {\n this._cipher = cipher;\n this._iv = iv;\n }\n });\n\n /**\n * Cipher Block Chaining mode.\n */\n var CBC = C_mode.CBC = function () {\n /**\n * Abstract base CBC mode.\n */\n var CBC = BlockCipherMode.extend();\n\n /**\n * CBC encryptor.\n */\n CBC.Encryptor = CBC.extend({\n /**\n * Processes the data block at offset.\n *\n * @param {Array} words The data words to operate on.\n * @param {number} offset The offset where the block starts.\n *\n * @example\n *\n * mode.processBlock(data.words, offset);\n */\n processBlock: function processBlock(words, offset) {\n // Shortcuts\n var cipher = this._cipher;\n var blockSize = cipher.blockSize;\n\n // XOR and encrypt\n xorBlock.call(this, words, offset, blockSize);\n cipher.encryptBlock(words, offset);\n\n // Remember this block to use with next block\n this._prevBlock = words.slice(offset, offset + blockSize);\n }\n });\n\n /**\n * CBC decryptor.\n */\n CBC.Decryptor = CBC.extend({\n /**\n * Processes the data block at offset.\n *\n * @param {Array} words The data words to operate on.\n * @param {number} offset The offset where the block starts.\n *\n * @example\n *\n * mode.processBlock(data.words, offset);\n */\n processBlock: function processBlock(words, offset) {\n // Shortcuts\n var cipher = this._cipher;\n var blockSize = cipher.blockSize;\n\n // Remember this block to use with next block\n var thisBlock = words.slice(offset, offset + blockSize);\n\n // Decrypt and XOR\n cipher.decryptBlock(words, offset);\n xorBlock.call(this, words, offset, blockSize);\n\n // This block becomes the previous block\n this._prevBlock = thisBlock;\n }\n });\n function xorBlock(words, offset, blockSize) {\n var block;\n\n // Shortcut\n var iv = this._iv;\n\n // Choose mixing block\n if (iv) {\n block = iv;\n\n // Remove IV for subsequent blocks\n this._iv = undefined;\n } else {\n block = this._prevBlock;\n }\n\n // XOR blocks\n for (var i = 0; i < blockSize; i++) {\n words[offset + i] ^= block[i];\n }\n }\n return CBC;\n }();\n\n /**\n * Padding namespace.\n */\n var C_pad = C.pad = {};\n\n /**\n * PKCS #5/7 padding strategy.\n */\n var Pkcs7 = C_pad.Pkcs7 = {\n /**\n * Pads data using the algorithm defined in PKCS #5/7.\n *\n * @param {WordArray} data The data to pad.\n * @param {number} blockSize The multiple that the data should be padded to.\n *\n * @static\n *\n * @example\n *\n * CryptoJS.pad.Pkcs7.pad(wordArray, 4);\n */\n pad: function pad(data, blockSize) {\n // Shortcut\n var blockSizeBytes = blockSize * 4;\n\n // Count padding bytes\n var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes;\n\n // Create padding word\n var paddingWord = nPaddingBytes << 24 | nPaddingBytes << 16 | nPaddingBytes << 8 | nPaddingBytes;\n\n // Create padding\n var paddingWords = [];\n for (var i = 0; i < nPaddingBytes; i += 4) {\n paddingWords.push(paddingWord);\n }\n var padding = WordArray.create(paddingWords, nPaddingBytes);\n\n // Add padding\n data.concat(padding);\n },\n /**\n * Unpads data that had been padded using the algorithm defined in PKCS #5/7.\n *\n * @param {WordArray} data The data to unpad.\n *\n * @static\n *\n * @example\n *\n * CryptoJS.pad.Pkcs7.unpad(wordArray);\n */\n unpad: function unpad(data) {\n // Get number of padding bytes from last byte\n var nPaddingBytes = data.words[data.sigBytes - 1 >>> 2] & 0xff;\n\n // Remove padding\n data.sigBytes -= nPaddingBytes;\n }\n };\n\n /**\n * Abstract base block cipher template.\n *\n * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 4 (128 bits)\n */\n var BlockCipher = C_lib.BlockCipher = Cipher.extend({\n /**\n * Configuration options.\n *\n * @property {Mode} mode The block mode to use. Default: CBC\n * @property {Padding} padding The padding strategy to use. Default: Pkcs7\n */\n cfg: Cipher.cfg.extend({\n mode: CBC,\n padding: Pkcs7\n }),\n reset: function reset() {\n var modeCreator;\n\n // Reset cipher\n Cipher.reset.call(this);\n\n // Shortcuts\n var cfg = this.cfg;\n var iv = cfg.iv;\n var mode = cfg.mode;\n\n // Reset block mode\n if (this._xformMode == this._ENC_XFORM_MODE) {\n modeCreator = mode.createEncryptor;\n } else /* if (this._xformMode == this._DEC_XFORM_MODE) */{\n modeCreator = mode.createDecryptor;\n // Keep at least one block in the buffer for unpadding\n this._minBufferSize = 1;\n }\n if (this._mode && this._mode.__creator == modeCreator) {\n this._mode.init(this, iv && iv.words);\n } else {\n this._mode = modeCreator.call(mode, this, iv && iv.words);\n this._mode.__creator = modeCreator;\n }\n },\n _doProcessBlock: function _doProcessBlock(words, offset) {\n this._mode.processBlock(words, offset);\n },\n _doFinalize: function _doFinalize() {\n var finalProcessedBlocks;\n\n // Shortcut\n var padding = this.cfg.padding;\n\n // Finalize\n if (this._xformMode == this._ENC_XFORM_MODE) {\n // Pad data\n padding.pad(this._data, this.blockSize);\n\n // Process final blocks\n finalProcessedBlocks = this._process(!!'flush');\n } else /* if (this._xformMode == this._DEC_XFORM_MODE) */{\n // Process final blocks\n finalProcessedBlocks = this._process(!!'flush');\n\n // Unpad data\n padding.unpad(finalProcessedBlocks);\n }\n return finalProcessedBlocks;\n },\n blockSize: 128 / 32\n });\n\n /**\n * A collection of cipher parameters.\n *\n * @property {WordArray} ciphertext The raw ciphertext.\n * @property {WordArray} key The key to this ciphertext.\n * @property {WordArray} iv The IV used in the ciphering operation.\n * @property {WordArray} salt The salt used with a key derivation function.\n * @property {Cipher} algorithm The cipher algorithm.\n * @property {Mode} mode The block mode used in the ciphering operation.\n * @property {Padding} padding The padding scheme used in the ciphering operation.\n * @property {number} blockSize The block size of the cipher.\n * @property {Format} formatter The default formatting strategy to convert this cipher params object to a string.\n */\n var CipherParams = C_lib.CipherParams = Base.extend({\n /**\n * Initializes a newly created cipher params object.\n *\n * @param {Object} cipherParams An object with any of the possible cipher parameters.\n *\n * @example\n *\n * var cipherParams = CryptoJS.lib.CipherParams.create({\n * ciphertext: ciphertextWordArray,\n * key: keyWordArray,\n * iv: ivWordArray,\n * salt: saltWordArray,\n * algorithm: CryptoJS.algo.AES,\n * mode: CryptoJS.mode.CBC,\n * padding: CryptoJS.pad.PKCS7,\n * blockSize: 4,\n * formatter: CryptoJS.format.OpenSSL\n * });\n */\n init: function init(cipherParams) {\n this.mixIn(cipherParams);\n },\n /**\n * Converts this cipher params object to a string.\n *\n * @param {Format} formatter (Optional) The formatting strategy to use.\n *\n * @return {string} The stringified cipher params.\n *\n * @throws Error If neither the formatter nor the default formatter is set.\n *\n * @example\n *\n * var string = cipherParams + '';\n * var string = cipherParams.toString();\n * var string = cipherParams.toString(CryptoJS.format.OpenSSL);\n */\n toString: function toString(formatter) {\n return (formatter || this.formatter).stringify(this);\n }\n });\n\n /**\n * Format namespace.\n */\n var C_format = C.format = {};\n\n /**\n * OpenSSL formatting strategy.\n */\n var OpenSSLFormatter = C_format.OpenSSL = {\n /**\n * Converts a cipher params object to an OpenSSL-compatible string.\n *\n * @param {CipherParams} cipherParams The cipher params object.\n *\n * @return {string} The OpenSSL-compatible string.\n *\n * @static\n *\n * @example\n *\n * var openSSLString = CryptoJS.format.OpenSSL.stringify(cipherParams);\n */\n stringify: function stringify(cipherParams) {\n var wordArray;\n\n // Shortcuts\n var ciphertext = cipherParams.ciphertext;\n var salt = cipherParams.salt;\n\n // Format\n if (salt) {\n wordArray = WordArray.create([0x53616c74, 0x65645f5f]).concat(salt).concat(ciphertext);\n } else {\n wordArray = ciphertext;\n }\n return wordArray.toString(Base64);\n },\n /**\n * Converts an OpenSSL-compatible string to a cipher params object.\n *\n * @param {string} openSSLStr The OpenSSL-compatible string.\n *\n * @return {CipherParams} The cipher params object.\n *\n * @static\n *\n * @example\n *\n * var cipherParams = CryptoJS.format.OpenSSL.parse(openSSLString);\n */\n parse: function parse(openSSLStr) {\n var salt;\n\n // Parse base64\n var ciphertext = Base64.parse(openSSLStr);\n\n // Shortcut\n var ciphertextWords = ciphertext.words;\n\n // Test for salt\n if (ciphertextWords[0] == 0x53616c74 && ciphertextWords[1] == 0x65645f5f) {\n // Extract salt\n salt = WordArray.create(ciphertextWords.slice(2, 4));\n\n // Remove salt from ciphertext\n ciphertextWords.splice(0, 4);\n ciphertext.sigBytes -= 16;\n }\n return CipherParams.create({\n ciphertext: ciphertext,\n salt: salt\n });\n }\n };\n\n /**\n * A cipher wrapper that returns ciphertext as a serializable cipher params object.\n */\n var SerializableCipher = C_lib.SerializableCipher = Base.extend({\n /**\n * Configuration options.\n *\n * @property {Formatter} format The formatting strategy to convert cipher param objects to and from a string. Default: OpenSSL\n */\n cfg: Base.extend({\n format: OpenSSLFormatter\n }),\n /**\n * Encrypts a message.\n *\n * @param {Cipher} cipher The cipher algorithm to use.\n * @param {WordArray|string} message The message to encrypt.\n * @param {WordArray} key The key.\n * @param {Object} cfg (Optional) The configuration options to use for this operation.\n *\n * @return {CipherParams} A cipher params object.\n *\n * @static\n *\n * @example\n *\n * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key);\n * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv });\n * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv, format: CryptoJS.format.OpenSSL });\n */\n encrypt: function encrypt(cipher, message, key, cfg) {\n // Apply config defaults\n cfg = this.cfg.extend(cfg);\n\n // Encrypt\n var encryptor = cipher.createEncryptor(key, cfg);\n var ciphertext = encryptor.finalize(message);\n\n // Shortcut\n var cipherCfg = encryptor.cfg;\n\n // Create and return serializable cipher params\n return CipherParams.create({\n ciphertext: ciphertext,\n key: key,\n iv: cipherCfg.iv,\n algorithm: cipher,\n mode: cipherCfg.mode,\n padding: cipherCfg.padding,\n blockSize: cipher.blockSize,\n formatter: cfg.format\n });\n },\n /**\n * Decrypts serialized ciphertext.\n *\n * @param {Cipher} cipher The cipher algorithm to use.\n * @param {CipherParams|string} ciphertext The ciphertext to decrypt.\n * @param {WordArray} key The key.\n * @param {Object} cfg (Optional) The configuration options to use for this operation.\n *\n * @return {WordArray} The plaintext.\n *\n * @static\n *\n * @example\n *\n * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, key, { iv: iv, format: CryptoJS.format.OpenSSL });\n * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, key, { iv: iv, format: CryptoJS.format.OpenSSL });\n */\n decrypt: function decrypt(cipher, ciphertext, key, cfg) {\n // Apply config defaults\n cfg = this.cfg.extend(cfg);\n\n // Convert string to CipherParams\n ciphertext = this._parse(ciphertext, cfg.format);\n\n // Decrypt\n var plaintext = cipher.createDecryptor(key, cfg).finalize(ciphertext.ciphertext);\n return plaintext;\n },\n /**\n * Converts serialized ciphertext to CipherParams,\n * else assumed CipherParams already and returns ciphertext unchanged.\n *\n * @param {CipherParams|string} ciphertext The ciphertext.\n * @param {Formatter} format The formatting strategy to use to parse serialized ciphertext.\n *\n * @return {CipherParams} The unserialized ciphertext.\n *\n * @static\n *\n * @example\n *\n * var ciphertextParams = CryptoJS.lib.SerializableCipher._parse(ciphertextStringOrParams, format);\n */\n _parse: function _parse(ciphertext, format) {\n if (typeof ciphertext == 'string') {\n return format.parse(ciphertext, this);\n } else {\n return ciphertext;\n }\n }\n });\n\n /**\n * Key derivation function namespace.\n */\n var C_kdf = C.kdf = {};\n\n /**\n * OpenSSL key derivation function.\n */\n var OpenSSLKdf = C_kdf.OpenSSL = {\n /**\n * Derives a key and IV from a password.\n *\n * @param {string} password The password to derive from.\n * @param {number} keySize The size in words of the key to generate.\n * @param {number} ivSize The size in words of the IV to generate.\n * @param {WordArray|string} salt (Optional) A 64-bit salt to use. If omitted, a salt will be generated randomly.\n *\n * @return {CipherParams} A cipher params object with the key, IV, and salt.\n *\n * @static\n *\n * @example\n *\n * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32);\n * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32, 'saltsalt');\n */\n execute: function execute(password, keySize, ivSize, salt) {\n // Generate random salt\n if (!salt) {\n salt = WordArray.random(64 / 8);\n }\n\n // Derive key and IV\n var key = EvpKDF.create({\n keySize: keySize + ivSize\n }).compute(password, salt);\n\n // Separate key and IV\n var iv = WordArray.create(key.words.slice(keySize), ivSize * 4);\n key.sigBytes = keySize * 4;\n\n // Return params\n return CipherParams.create({\n key: key,\n iv: iv,\n salt: salt\n });\n }\n };\n\n /**\n * A serializable cipher wrapper that derives the key from a password,\n * and returns ciphertext as a serializable cipher params object.\n */\n var PasswordBasedCipher = C_lib.PasswordBasedCipher = SerializableCipher.extend({\n /**\n * Configuration options.\n *\n * @property {KDF} kdf The key derivation function to use to generate a key and IV from a password. Default: OpenSSL\n */\n cfg: SerializableCipher.cfg.extend({\n kdf: OpenSSLKdf\n }),\n /**\n * Encrypts a message using a password.\n *\n * @param {Cipher} cipher The cipher algorithm to use.\n * @param {WordArray|string} message The message to encrypt.\n * @param {string} password The password.\n * @param {Object} cfg (Optional) The configuration options to use for this operation.\n *\n * @return {CipherParams} A cipher params object.\n *\n * @static\n *\n * @example\n *\n * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password');\n * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password', { format: CryptoJS.format.OpenSSL });\n */\n encrypt: function encrypt(cipher, message, password, cfg) {\n // Apply config defaults\n cfg = this.cfg.extend(cfg);\n\n // Derive key and other params\n var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize);\n\n // Add IV to config\n cfg.iv = derivedParams.iv;\n\n // Encrypt\n var ciphertext = SerializableCipher.encrypt.call(this, cipher, message, derivedParams.key, cfg);\n\n // Mix in derived params\n ciphertext.mixIn(derivedParams);\n return ciphertext;\n },\n /**\n * Decrypts serialized ciphertext using a password.\n *\n * @param {Cipher} cipher The cipher algorithm to use.\n * @param {CipherParams|string} ciphertext The ciphertext to decrypt.\n * @param {string} password The password.\n * @param {Object} cfg (Optional) The configuration options to use for this operation.\n *\n * @return {WordArray} The plaintext.\n *\n * @static\n *\n * @example\n *\n * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, 'password', { format: CryptoJS.format.OpenSSL });\n * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, 'password', { format: CryptoJS.format.OpenSSL });\n */\n decrypt: function decrypt(cipher, ciphertext, password, cfg) {\n // Apply config defaults\n cfg = this.cfg.extend(cfg);\n\n // Convert string to CipherParams\n ciphertext = this._parse(ciphertext, cfg.format);\n\n // Derive key and other params\n var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, ciphertext.salt);\n\n // Add IV to config\n cfg.iv = derivedParams.iv;\n\n // Decrypt\n var plaintext = SerializableCipher.decrypt.call(this, cipher, ciphertext, derivedParams.key, cfg);\n return plaintext;\n }\n });\n }();\n\n /**\n * Cipher Feedback block mode.\n */\n CryptoJS.mode.CFB = function () {\n var CFB = CryptoJS.lib.BlockCipherMode.extend();\n CFB.Encryptor = CFB.extend({\n processBlock: function processBlock(words, offset) {\n // Shortcuts\n var cipher = this._cipher;\n var blockSize = cipher.blockSize;\n generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher);\n\n // Remember this block to use with next block\n this._prevBlock = words.slice(offset, offset + blockSize);\n }\n });\n CFB.Decryptor = CFB.extend({\n processBlock: function processBlock(words, offset) {\n // Shortcuts\n var cipher = this._cipher;\n var blockSize = cipher.blockSize;\n\n // Remember this block to use with next block\n var thisBlock = words.slice(offset, offset + blockSize);\n generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher);\n\n // This block becomes the previous block\n this._prevBlock = thisBlock;\n }\n });\n function generateKeystreamAndEncrypt(words, offset, blockSize, cipher) {\n var keystream;\n\n // Shortcut\n var iv = this._iv;\n\n // Generate keystream\n if (iv) {\n keystream = iv.slice(0);\n\n // Remove IV for subsequent blocks\n this._iv = undefined;\n } else {\n keystream = this._prevBlock;\n }\n cipher.encryptBlock(keystream, 0);\n\n // Encrypt\n for (var i = 0; i < blockSize; i++) {\n words[offset + i] ^= keystream[i];\n }\n }\n return CFB;\n }();\n\n /**\n * Electronic Codebook block mode.\n */\n CryptoJS.mode.ECB = function () {\n var ECB = CryptoJS.lib.BlockCipherMode.extend();\n ECB.Encryptor = ECB.extend({\n processBlock: function processBlock(words, offset) {\n this._cipher.encryptBlock(words, offset);\n }\n });\n ECB.Decryptor = ECB.extend({\n processBlock: function processBlock(words, offset) {\n this._cipher.decryptBlock(words, offset);\n }\n });\n return ECB;\n }();\n\n /**\n * ANSI X.923 padding strategy.\n */\n CryptoJS.pad.AnsiX923 = {\n pad: function pad(data, blockSize) {\n // Shortcuts\n var dataSigBytes = data.sigBytes;\n var blockSizeBytes = blockSize * 4;\n\n // Count padding bytes\n var nPaddingBytes = blockSizeBytes - dataSigBytes % blockSizeBytes;\n\n // Compute last byte position\n var lastBytePos = dataSigBytes + nPaddingBytes - 1;\n\n // Pad\n data.clamp();\n data.words[lastBytePos >>> 2] |= nPaddingBytes << 24 - lastBytePos % 4 * 8;\n data.sigBytes += nPaddingBytes;\n },\n unpad: function unpad(data) {\n // Get number of padding bytes from last byte\n var nPaddingBytes = data.words[data.sigBytes - 1 >>> 2] & 0xff;\n\n // Remove padding\n data.sigBytes -= nPaddingBytes;\n }\n };\n\n /**\n * ISO 10126 padding strategy.\n */\n CryptoJS.pad.Iso10126 = {\n pad: function pad(data, blockSize) {\n // Shortcut\n var blockSizeBytes = blockSize * 4;\n\n // Count padding bytes\n var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes;\n\n // Pad\n data.concat(CryptoJS.lib.WordArray.random(nPaddingBytes - 1)).concat(CryptoJS.lib.WordArray.create([nPaddingBytes << 24], 1));\n },\n unpad: function unpad(data) {\n // Get number of padding bytes from last byte\n var nPaddingBytes = data.words[data.sigBytes - 1 >>> 2] & 0xff;\n\n // Remove padding\n data.sigBytes -= nPaddingBytes;\n }\n };\n\n /**\n * ISO/IEC 9797-1 Padding Method 2.\n */\n CryptoJS.pad.Iso97971 = {\n pad: function pad(data, blockSize) {\n // Add 0x80 byte\n data.concat(CryptoJS.lib.WordArray.create([0x80000000], 1));\n\n // Zero pad the rest\n CryptoJS.pad.ZeroPadding.pad(data, blockSize);\n },\n unpad: function unpad(data) {\n // Remove zero padding\n CryptoJS.pad.ZeroPadding.unpad(data);\n\n // Remove one more byte -- the 0x80 byte\n data.sigBytes--;\n }\n };\n\n /**\n * Output Feedback block mode.\n */\n CryptoJS.mode.OFB = function () {\n var OFB = CryptoJS.lib.BlockCipherMode.extend();\n var Encryptor = OFB.Encryptor = OFB.extend({\n processBlock: function processBlock(words, offset) {\n // Shortcuts\n var cipher = this._cipher;\n var blockSize = cipher.blockSize;\n var iv = this._iv;\n var keystream = this._keystream;\n\n // Generate keystream\n if (iv) {\n keystream = this._keystream = iv.slice(0);\n\n // Remove IV for subsequent blocks\n this._iv = undefined;\n }\n cipher.encryptBlock(keystream, 0);\n\n // Encrypt\n for (var i = 0; i < blockSize; i++) {\n words[offset + i] ^= keystream[i];\n }\n }\n });\n OFB.Decryptor = Encryptor;\n return OFB;\n }();\n\n /**\n * A noop padding strategy.\n */\n CryptoJS.pad.NoPadding = {\n pad: function pad() {},\n unpad: function unpad() {}\n };\n (function (undefined) {\n // Shortcuts\n var C = CryptoJS;\n var C_lib = C.lib;\n var CipherParams = C_lib.CipherParams;\n var C_enc = C.enc;\n var Hex = C_enc.Hex;\n var C_format = C.format;\n var HexFormatter = C_format.Hex = {\n /**\n * Converts the ciphertext of a cipher params object to a hexadecimally encoded string.\n *\n * @param {CipherParams} cipherParams The cipher params object.\n *\n * @return {string} The hexadecimally encoded string.\n *\n * @static\n *\n * @example\n *\n * var hexString = CryptoJS.format.Hex.stringify(cipherParams);\n */\n stringify: function stringify(cipherParams) {\n return cipherParams.ciphertext.toString(Hex);\n },\n /**\n * Converts a hexadecimally encoded ciphertext string to a cipher params object.\n *\n * @param {string} input The hexadecimally encoded string.\n *\n * @return {CipherParams} The cipher params object.\n *\n * @static\n *\n * @example\n *\n * var cipherParams = CryptoJS.format.Hex.parse(hexString);\n */\n parse: function parse(input) {\n var ciphertext = Hex.parse(input);\n return CipherParams.create({\n ciphertext: ciphertext\n });\n }\n };\n })();\n (function () {\n // Shortcuts\n var C = CryptoJS;\n var C_lib = C.lib;\n var BlockCipher = C_lib.BlockCipher;\n var C_algo = C.algo;\n\n // Lookup tables\n var SBOX = [];\n var INV_SBOX = [];\n var SUB_MIX_0 = [];\n var SUB_MIX_1 = [];\n var SUB_MIX_2 = [];\n var SUB_MIX_3 = [];\n var INV_SUB_MIX_0 = [];\n var INV_SUB_MIX_1 = [];\n var INV_SUB_MIX_2 = [];\n var INV_SUB_MIX_3 = [];\n\n // Compute lookup tables\n (function () {\n // Compute double table\n var d = [];\n for (var i = 0; i < 256; i++) {\n if (i < 128) {\n d[i] = i << 1;\n } else {\n d[i] = i << 1 ^ 0x11b;\n }\n }\n\n // Walk GF(2^8)\n var x = 0;\n var xi = 0;\n for (var i = 0; i < 256; i++) {\n // Compute sbox\n var sx = xi ^ xi << 1 ^ xi << 2 ^ xi << 3 ^ xi << 4;\n sx = sx >>> 8 ^ sx & 0xff ^ 0x63;\n SBOX[x] = sx;\n INV_SBOX[sx] = x;\n\n // Compute multiplication\n var x2 = d[x];\n var x4 = d[x2];\n var x8 = d[x4];\n\n // Compute sub bytes, mix columns tables\n var t = d[sx] * 0x101 ^ sx * 0x1010100;\n SUB_MIX_0[x] = t << 24 | t >>> 8;\n SUB_MIX_1[x] = t << 16 | t >>> 16;\n SUB_MIX_2[x] = t << 8 | t >>> 24;\n SUB_MIX_3[x] = t;\n\n // Compute inv sub bytes, inv mix columns tables\n var t = x8 * 0x1010101 ^ x4 * 0x10001 ^ x2 * 0x101 ^ x * 0x1010100;\n INV_SUB_MIX_0[sx] = t << 24 | t >>> 8;\n INV_SUB_MIX_1[sx] = t << 16 | t >>> 16;\n INV_SUB_MIX_2[sx] = t << 8 | t >>> 24;\n INV_SUB_MIX_3[sx] = t;\n\n // Compute next counter\n if (!x) {\n x = xi = 1;\n } else {\n x = x2 ^ d[d[d[x8 ^ x2]]];\n xi ^= d[d[xi]];\n }\n }\n })();\n\n // Precomputed Rcon lookup\n var RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36];\n\n /**\n * AES block cipher algorithm.\n */\n var AES = C_algo.AES = BlockCipher.extend({\n _doReset: function _doReset() {\n var t;\n\n // Skip reset of nRounds has been set before and key did not change\n if (this._nRounds && this._keyPriorReset === this._key) {\n return;\n }\n\n // Shortcuts\n var key = this._keyPriorReset = this._key;\n var keyWords = key.words;\n var keySize = key.sigBytes / 4;\n\n // Compute number of rounds\n var nRounds = this._nRounds = keySize + 6;\n\n // Compute number of key schedule rows\n var ksRows = (nRounds + 1) * 4;\n\n // Compute key schedule\n var keySchedule = this._keySchedule = [];\n for (var ksRow = 0; ksRow < ksRows; ksRow++) {\n if (ksRow < keySize) {\n keySchedule[ksRow] = keyWords[ksRow];\n } else {\n t = keySchedule[ksRow - 1];\n if (!(ksRow % keySize)) {\n // Rot word\n t = t << 8 | t >>> 24;\n\n // Sub word\n t = SBOX[t >>> 24] << 24 | SBOX[t >>> 16 & 0xff] << 16 | SBOX[t >>> 8 & 0xff] << 8 | SBOX[t & 0xff];\n\n // Mix Rcon\n t ^= RCON[ksRow / keySize | 0] << 24;\n } else if (keySize > 6 && ksRow % keySize == 4) {\n // Sub word\n t = SBOX[t >>> 24] << 24 | SBOX[t >>> 16 & 0xff] << 16 | SBOX[t >>> 8 & 0xff] << 8 | SBOX[t & 0xff];\n }\n keySchedule[ksRow] = keySchedule[ksRow - keySize] ^ t;\n }\n }\n\n // Compute inv key schedule\n var invKeySchedule = this._invKeySchedule = [];\n for (var invKsRow = 0; invKsRow < ksRows; invKsRow++) {\n var ksRow = ksRows - invKsRow;\n if (invKsRow % 4) {\n var t = keySchedule[ksRow];\n } else {\n var t = keySchedule[ksRow - 4];\n }\n if (invKsRow < 4 || ksRow <= 4) {\n invKeySchedule[invKsRow] = t;\n } else {\n invKeySchedule[invKsRow] = INV_SUB_MIX_0[SBOX[t >>> 24]] ^ INV_SUB_MIX_1[SBOX[t >>> 16 & 0xff]] ^ INV_SUB_MIX_2[SBOX[t >>> 8 & 0xff]] ^ INV_SUB_MIX_3[SBOX[t & 0xff]];\n }\n }\n },\n encryptBlock: function encryptBlock(M, offset) {\n this._doCryptBlock(M, offset, this._keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX);\n },\n decryptBlock: function decryptBlock(M, offset) {\n // Swap 2nd and 4th rows\n var t = M[offset + 1];\n M[offset + 1] = M[offset + 3];\n M[offset + 3] = t;\n this._doCryptBlock(M, offset, this._invKeySchedule, INV_SUB_MIX_0, INV_SUB_MIX_1, INV_SUB_MIX_2, INV_SUB_MIX_3, INV_SBOX);\n\n // Inv swap 2nd and 4th rows\n var t = M[offset + 1];\n M[offset + 1] = M[offset + 3];\n M[offset + 3] = t;\n },\n _doCryptBlock: function _doCryptBlock(M, offset, keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX) {\n // Shortcut\n var nRounds = this._nRounds;\n\n // Get input, add round key\n var s0 = M[offset] ^ keySchedule[0];\n var s1 = M[offset + 1] ^ keySchedule[1];\n var s2 = M[offset + 2] ^ keySchedule[2];\n var s3 = M[offset + 3] ^ keySchedule[3];\n\n // Key schedule row counter\n var ksRow = 4;\n\n // Rounds\n for (var round = 1; round < nRounds; round++) {\n // Shift rows, sub bytes, mix columns, add round key\n var t0 = SUB_MIX_0[s0 >>> 24] ^ SUB_MIX_1[s1 >>> 16 & 0xff] ^ SUB_MIX_2[s2 >>> 8 & 0xff] ^ SUB_MIX_3[s3 & 0xff] ^ keySchedule[ksRow++];\n var t1 = SUB_MIX_0[s1 >>> 24] ^ SUB_MIX_1[s2 >>> 16 & 0xff] ^ SUB_MIX_2[s3 >>> 8 & 0xff] ^ SUB_MIX_3[s0 & 0xff] ^ keySchedule[ksRow++];\n var t2 = SUB_MIX_0[s2 >>> 24] ^ SUB_MIX_1[s3 >>> 16 & 0xff] ^ SUB_MIX_2[s0 >>> 8 & 0xff] ^ SUB_MIX_3[s1 & 0xff] ^ keySchedule[ksRow++];\n var t3 = SUB_MIX_0[s3 >>> 24] ^ SUB_MIX_1[s0 >>> 16 & 0xff] ^ SUB_MIX_2[s1 >>> 8 & 0xff] ^ SUB_MIX_3[s2 & 0xff] ^ keySchedule[ksRow++];\n\n // Update state\n s0 = t0;\n s1 = t1;\n s2 = t2;\n s3 = t3;\n }\n\n // Shift rows, sub bytes, add round key\n var t0 = (SBOX[s0 >>> 24] << 24 | SBOX[s1 >>> 16 & 0xff] << 16 | SBOX[s2 >>> 8 & 0xff] << 8 | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++];\n var t1 = (SBOX[s1 >>> 24] << 24 | SBOX[s2 >>> 16 & 0xff] << 16 | SBOX[s3 >>> 8 & 0xff] << 8 | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++];\n var t2 = (SBOX[s2 >>> 24] << 24 | SBOX[s3 >>> 16 & 0xff] << 16 | SBOX[s0 >>> 8 & 0xff] << 8 | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++];\n var t3 = (SBOX[s3 >>> 24] << 24 | SBOX[s0 >>> 16 & 0xff] << 16 | SBOX[s1 >>> 8 & 0xff] << 8 | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++];\n\n // Set output\n M[offset] = t0;\n M[offset + 1] = t1;\n M[offset + 2] = t2;\n M[offset + 3] = t3;\n },\n keySize: 256 / 32\n });\n\n /**\n * Shortcut functions to the cipher's object interface.\n *\n * @example\n *\n * var ciphertext = CryptoJS.AES.encrypt(message, key, cfg);\n * var plaintext = CryptoJS.AES.decrypt(ciphertext, key, cfg);\n */\n C.AES = BlockCipher._createHelper(AES);\n })();\n (function () {\n // Shortcuts\n var C = CryptoJS;\n var C_lib = C.lib;\n var WordArray = C_lib.WordArray;\n var BlockCipher = C_lib.BlockCipher;\n var C_algo = C.algo;\n\n // Permuted Choice 1 constants\n var PC1 = [57, 49, 41, 33, 25, 17, 9, 1, 58, 50, 42, 34, 26, 18, 10, 2, 59, 51, 43, 35, 27, 19, 11, 3, 60, 52, 44, 36, 63, 55, 47, 39, 31, 23, 15, 7, 62, 54, 46, 38, 30, 22, 14, 6, 61, 53, 45, 37, 29, 21, 13, 5, 28, 20, 12, 4];\n\n // Permuted Choice 2 constants\n var PC2 = [14, 17, 11, 24, 1, 5, 3, 28, 15, 6, 21, 10, 23, 19, 12, 4, 26, 8, 16, 7, 27, 20, 13, 2, 41, 52, 31, 37, 47, 55, 30, 40, 51, 45, 33, 48, 44, 49, 39, 56, 34, 53, 46, 42, 50, 36, 29, 32];\n\n // Cumulative bit shift constants\n var BIT_SHIFTS = [1, 2, 4, 6, 8, 10, 12, 14, 15, 17, 19, 21, 23, 25, 27, 28];\n\n // SBOXes and round permutation constants\n var SBOX_P = [{\n 0x0: 0x808200,\n 0x10000000: 0x8000,\n 0x20000000: 0x808002,\n 0x30000000: 0x2,\n 0x40000000: 0x200,\n 0x50000000: 0x808202,\n 0x60000000: 0x800202,\n 0x70000000: 0x800000,\n 0x80000000: 0x202,\n 0x90000000: 0x800200,\n 0xa0000000: 0x8200,\n 0xb0000000: 0x808000,\n 0xc0000000: 0x8002,\n 0xd0000000: 0x800002,\n 0xe0000000: 0x0,\n 0xf0000000: 0x8202,\n 0x8000000: 0x0,\n 0x18000000: 0x808202,\n 0x28000000: 0x8202,\n 0x38000000: 0x8000,\n 0x48000000: 0x808200,\n 0x58000000: 0x200,\n 0x68000000: 0x808002,\n 0x78000000: 0x2,\n 0x88000000: 0x800200,\n 0x98000000: 0x8200,\n 0xa8000000: 0x808000,\n 0xb8000000: 0x800202,\n 0xc8000000: 0x800002,\n 0xd8000000: 0x8002,\n 0xe8000000: 0x202,\n 0xf8000000: 0x800000,\n 0x1: 0x8000,\n 0x10000001: 0x2,\n 0x20000001: 0x808200,\n 0x30000001: 0x800000,\n 0x40000001: 0x808002,\n 0x50000001: 0x8200,\n 0x60000001: 0x200,\n 0x70000001: 0x800202,\n 0x80000001: 0x808202,\n 0x90000001: 0x808000,\n 0xa0000001: 0x800002,\n 0xb0000001: 0x8202,\n 0xc0000001: 0x202,\n 0xd0000001: 0x800200,\n 0xe0000001: 0x8002,\n 0xf0000001: 0x0,\n 0x8000001: 0x808202,\n 0x18000001: 0x808000,\n 0x28000001: 0x800000,\n 0x38000001: 0x200,\n 0x48000001: 0x8000,\n 0x58000001: 0x800002,\n 0x68000001: 0x2,\n 0x78000001: 0x8202,\n 0x88000001: 0x8002,\n 0x98000001: 0x800202,\n 0xa8000001: 0x202,\n 0xb8000001: 0x808200,\n 0xc8000001: 0x800200,\n 0xd8000001: 0x0,\n 0xe8000001: 0x8200,\n 0xf8000001: 0x808002\n }, {\n 0x0: 0x40084010,\n 0x1000000: 0x4000,\n 0x2000000: 0x80000,\n 0x3000000: 0x40080010,\n 0x4000000: 0x40000010,\n 0x5000000: 0x40084000,\n 0x6000000: 0x40004000,\n 0x7000000: 0x10,\n 0x8000000: 0x84000,\n 0x9000000: 0x40004010,\n 0xa000000: 0x40000000,\n 0xb000000: 0x84010,\n 0xc000000: 0x80010,\n 0xd000000: 0x0,\n 0xe000000: 0x4010,\n 0xf000000: 0x40080000,\n 0x800000: 0x40004000,\n 0x1800000: 0x84010,\n 0x2800000: 0x10,\n 0x3800000: 0x40004010,\n 0x4800000: 0x40084010,\n 0x5800000: 0x40000000,\n 0x6800000: 0x80000,\n 0x7800000: 0x40080010,\n 0x8800000: 0x80010,\n 0x9800000: 0x0,\n 0xa800000: 0x4000,\n 0xb800000: 0x40080000,\n 0xc800000: 0x40000010,\n 0xd800000: 0x84000,\n 0xe800000: 0x40084000,\n 0xf800000: 0x4010,\n 0x10000000: 0x0,\n 0x11000000: 0x40080010,\n 0x12000000: 0x40004010,\n 0x13000000: 0x40084000,\n 0x14000000: 0x40080000,\n 0x15000000: 0x10,\n 0x16000000: 0x84010,\n 0x17000000: 0x4000,\n 0x18000000: 0x4010,\n 0x19000000: 0x80000,\n 0x1a000000: 0x80010,\n 0x1b000000: 0x40000010,\n 0x1c000000: 0x84000,\n 0x1d000000: 0x40004000,\n 0x1e000000: 0x40000000,\n 0x1f000000: 0x40084010,\n 0x10800000: 0x84010,\n 0x11800000: 0x80000,\n 0x12800000: 0x40080000,\n 0x13800000: 0x4000,\n 0x14800000: 0x40004000,\n 0x15800000: 0x40084010,\n 0x16800000: 0x10,\n 0x17800000: 0x40000000,\n 0x18800000: 0x40084000,\n 0x19800000: 0x40000010,\n 0x1a800000: 0x40004010,\n 0x1b800000: 0x80010,\n 0x1c800000: 0x0,\n 0x1d800000: 0x4010,\n 0x1e800000: 0x40080010,\n 0x1f800000: 0x84000\n }, {\n 0x0: 0x104,\n 0x100000: 0x0,\n 0x200000: 0x4000100,\n 0x300000: 0x10104,\n 0x400000: 0x10004,\n 0x500000: 0x4000004,\n 0x600000: 0x4010104,\n 0x700000: 0x4010000,\n 0x800000: 0x4000000,\n 0x900000: 0x4010100,\n 0xa00000: 0x10100,\n 0xb00000: 0x4010004,\n 0xc00000: 0x4000104,\n 0xd00000: 0x10000,\n 0xe00000: 0x4,\n 0xf00000: 0x100,\n 0x80000: 0x4010100,\n 0x180000: 0x4010004,\n 0x280000: 0x0,\n 0x380000: 0x4000100,\n 0x480000: 0x4000004,\n 0x580000: 0x10000,\n 0x680000: 0x10004,\n 0x780000: 0x104,\n 0x880000: 0x4,\n 0x980000: 0x100,\n 0xa80000: 0x4010000,\n 0xb80000: 0x10104,\n 0xc80000: 0x10100,\n 0xd80000: 0x4000104,\n 0xe80000: 0x4010104,\n 0xf80000: 0x4000000,\n 0x1000000: 0x4010100,\n 0x1100000: 0x10004,\n 0x1200000: 0x10000,\n 0x1300000: 0x4000100,\n 0x1400000: 0x100,\n 0x1500000: 0x4010104,\n 0x1600000: 0x4000004,\n 0x1700000: 0x0,\n 0x1800000: 0x4000104,\n 0x1900000: 0x4000000,\n 0x1a00000: 0x4,\n 0x1b00000: 0x10100,\n 0x1c00000: 0x4010000,\n 0x1d00000: 0x104,\n 0x1e00000: 0x10104,\n 0x1f00000: 0x4010004,\n 0x1080000: 0x4000000,\n 0x1180000: 0x104,\n 0x1280000: 0x4010100,\n 0x1380000: 0x0,\n 0x1480000: 0x10004,\n 0x1580000: 0x4000100,\n 0x1680000: 0x100,\n 0x1780000: 0x4010004,\n 0x1880000: 0x10000,\n 0x1980000: 0x4010104,\n 0x1a80000: 0x10104,\n 0x1b80000: 0x4000004,\n 0x1c80000: 0x4000104,\n 0x1d80000: 0x4010000,\n 0x1e80000: 0x4,\n 0x1f80000: 0x10100\n }, {\n 0x0: 0x80401000,\n 0x10000: 0x80001040,\n 0x20000: 0x401040,\n 0x30000: 0x80400000,\n 0x40000: 0x0,\n 0x50000: 0x401000,\n 0x60000: 0x80000040,\n 0x70000: 0x400040,\n 0x80000: 0x80000000,\n 0x90000: 0x400000,\n 0xa0000: 0x40,\n 0xb0000: 0x80001000,\n 0xc0000: 0x80400040,\n 0xd0000: 0x1040,\n 0xe0000: 0x1000,\n 0xf0000: 0x80401040,\n 0x8000: 0x80001040,\n 0x18000: 0x40,\n 0x28000: 0x80400040,\n 0x38000: 0x80001000,\n 0x48000: 0x401000,\n 0x58000: 0x80401040,\n 0x68000: 0x0,\n 0x78000: 0x80400000,\n 0x88000: 0x1000,\n 0x98000: 0x80401000,\n 0xa8000: 0x400000,\n 0xb8000: 0x1040,\n 0xc8000: 0x80000000,\n 0xd8000: 0x400040,\n 0xe8000: 0x401040,\n 0xf8000: 0x80000040,\n 0x100000: 0x400040,\n 0x110000: 0x401000,\n 0x120000: 0x80000040,\n 0x130000: 0x0,\n 0x140000: 0x1040,\n 0x150000: 0x80400040,\n 0x160000: 0x80401000,\n 0x170000: 0x80001040,\n 0x180000: 0x80401040,\n 0x190000: 0x80000000,\n 0x1a0000: 0x80400000,\n 0x1b0000: 0x401040,\n 0x1c0000: 0x80001000,\n 0x1d0000: 0x400000,\n 0x1e0000: 0x40,\n 0x1f0000: 0x1000,\n 0x108000: 0x80400000,\n 0x118000: 0x80401040,\n 0x128000: 0x0,\n 0x138000: 0x401000,\n 0x148000: 0x400040,\n 0x158000: 0x80000000,\n 0x168000: 0x80001040,\n 0x178000: 0x40,\n 0x188000: 0x80000040,\n 0x198000: 0x1000,\n 0x1a8000: 0x80001000,\n 0x1b8000: 0x80400040,\n 0x1c8000: 0x1040,\n 0x1d8000: 0x80401000,\n 0x1e8000: 0x400000,\n 0x1f8000: 0x401040\n }, {\n 0x0: 0x80,\n 0x1000: 0x1040000,\n 0x2000: 0x40000,\n 0x3000: 0x20000000,\n 0x4000: 0x20040080,\n 0x5000: 0x1000080,\n 0x6000: 0x21000080,\n 0x7000: 0x40080,\n 0x8000: 0x1000000,\n 0x9000: 0x20040000,\n 0xa000: 0x20000080,\n 0xb000: 0x21040080,\n 0xc000: 0x21040000,\n 0xd000: 0x0,\n 0xe000: 0x1040080,\n 0xf000: 0x21000000,\n 0x800: 0x1040080,\n 0x1800: 0x21000080,\n 0x2800: 0x80,\n 0x3800: 0x1040000,\n 0x4800: 0x40000,\n 0x5800: 0x20040080,\n 0x6800: 0x21040000,\n 0x7800: 0x20000000,\n 0x8800: 0x20040000,\n 0x9800: 0x0,\n 0xa800: 0x21040080,\n 0xb800: 0x1000080,\n 0xc800: 0x20000080,\n 0xd800: 0x21000000,\n 0xe800: 0x1000000,\n 0xf800: 0x40080,\n 0x10000: 0x40000,\n 0x11000: 0x80,\n 0x12000: 0x20000000,\n 0x13000: 0x21000080,\n 0x14000: 0x1000080,\n 0x15000: 0x21040000,\n 0x16000: 0x20040080,\n 0x17000: 0x1000000,\n 0x18000: 0x21040080,\n 0x19000: 0x21000000,\n 0x1a000: 0x1040000,\n 0x1b000: 0x20040000,\n 0x1c000: 0x40080,\n 0x1d000: 0x20000080,\n 0x1e000: 0x0,\n 0x1f000: 0x1040080,\n 0x10800: 0x21000080,\n 0x11800: 0x1000000,\n 0x12800: 0x1040000,\n 0x13800: 0x20040080,\n 0x14800: 0x20000000,\n 0x15800: 0x1040080,\n 0x16800: 0x80,\n 0x17800: 0x21040000,\n 0x18800: 0x40080,\n 0x19800: 0x21040080,\n 0x1a800: 0x0,\n 0x1b800: 0x21000000,\n 0x1c800: 0x1000080,\n 0x1d800: 0x40000,\n 0x1e800: 0x20040000,\n 0x1f800: 0x20000080\n }, {\n 0x0: 0x10000008,\n 0x100: 0x2000,\n 0x200: 0x10200000,\n 0x300: 0x10202008,\n 0x400: 0x10002000,\n 0x500: 0x200000,\n 0x600: 0x200008,\n 0x700: 0x10000000,\n 0x800: 0x0,\n 0x900: 0x10002008,\n 0xa00: 0x202000,\n 0xb00: 0x8,\n 0xc00: 0x10200008,\n 0xd00: 0x202008,\n 0xe00: 0x2008,\n 0xf00: 0x10202000,\n 0x80: 0x10200000,\n 0x180: 0x10202008,\n 0x280: 0x8,\n 0x380: 0x200000,\n 0x480: 0x202008,\n 0x580: 0x10000008,\n 0x680: 0x10002000,\n 0x780: 0x2008,\n 0x880: 0x200008,\n 0x980: 0x2000,\n 0xa80: 0x10002008,\n 0xb80: 0x10200008,\n 0xc80: 0x0,\n 0xd80: 0x10202000,\n 0xe80: 0x202000,\n 0xf80: 0x10000000,\n 0x1000: 0x10002000,\n 0x1100: 0x10200008,\n 0x1200: 0x10202008,\n 0x1300: 0x2008,\n 0x1400: 0x200000,\n 0x1500: 0x10000000,\n 0x1600: 0x10000008,\n 0x1700: 0x202000,\n 0x1800: 0x202008,\n 0x1900: 0x0,\n 0x1a00: 0x8,\n 0x1b00: 0x10200000,\n 0x1c00: 0x2000,\n 0x1d00: 0x10002008,\n 0x1e00: 0x10202000,\n 0x1f00: 0x200008,\n 0x1080: 0x8,\n 0x1180: 0x202000,\n 0x1280: 0x200000,\n 0x1380: 0x10000008,\n 0x1480: 0x10002000,\n 0x1580: 0x2008,\n 0x1680: 0x10202008,\n 0x1780: 0x10200000,\n 0x1880: 0x10202000,\n 0x1980: 0x10200008,\n 0x1a80: 0x2000,\n 0x1b80: 0x202008,\n 0x1c80: 0x200008,\n 0x1d80: 0x0,\n 0x1e80: 0x10000000,\n 0x1f80: 0x10002008\n }, {\n 0x0: 0x100000,\n 0x10: 0x2000401,\n 0x20: 0x400,\n 0x30: 0x100401,\n 0x40: 0x2100401,\n 0x50: 0x0,\n 0x60: 0x1,\n 0x70: 0x2100001,\n 0x80: 0x2000400,\n 0x90: 0x100001,\n 0xa0: 0x2000001,\n 0xb0: 0x2100400,\n 0xc0: 0x2100000,\n 0xd0: 0x401,\n 0xe0: 0x100400,\n 0xf0: 0x2000000,\n 0x8: 0x2100001,\n 0x18: 0x0,\n 0x28: 0x2000401,\n 0x38: 0x2100400,\n 0x48: 0x100000,\n 0x58: 0x2000001,\n 0x68: 0x2000000,\n 0x78: 0x401,\n 0x88: 0x100401,\n 0x98: 0x2000400,\n 0xa8: 0x2100000,\n 0xb8: 0x100001,\n 0xc8: 0x400,\n 0xd8: 0x2100401,\n 0xe8: 0x1,\n 0xf8: 0x100400,\n 0x100: 0x2000000,\n 0x110: 0x100000,\n 0x120: 0x2000401,\n 0x130: 0x2100001,\n 0x140: 0x100001,\n 0x150: 0x2000400,\n 0x160: 0x2100400,\n 0x170: 0x100401,\n 0x180: 0x401,\n 0x190: 0x2100401,\n 0x1a0: 0x100400,\n 0x1b0: 0x1,\n 0x1c0: 0x0,\n 0x1d0: 0x2100000,\n 0x1e0: 0x2000001,\n 0x1f0: 0x400,\n 0x108: 0x100400,\n 0x118: 0x2000401,\n 0x128: 0x2100001,\n 0x138: 0x1,\n 0x148: 0x2000000,\n 0x158: 0x100000,\n 0x168: 0x401,\n 0x178: 0x2100400,\n 0x188: 0x2000001,\n 0x198: 0x2100000,\n 0x1a8: 0x0,\n 0x1b8: 0x2100401,\n 0x1c8: 0x100401,\n 0x1d8: 0x400,\n 0x1e8: 0x2000400,\n 0x1f8: 0x100001\n }, {\n 0x0: 0x8000820,\n 0x1: 0x20000,\n 0x2: 0x8000000,\n 0x3: 0x20,\n 0x4: 0x20020,\n 0x5: 0x8020820,\n 0x6: 0x8020800,\n 0x7: 0x800,\n 0x8: 0x8020000,\n 0x9: 0x8000800,\n 0xa: 0x20800,\n 0xb: 0x8020020,\n 0xc: 0x820,\n 0xd: 0x0,\n 0xe: 0x8000020,\n 0xf: 0x20820,\n 0x80000000: 0x800,\n 0x80000001: 0x8020820,\n 0x80000002: 0x8000820,\n 0x80000003: 0x8000000,\n 0x80000004: 0x8020000,\n 0x80000005: 0x20800,\n 0x80000006: 0x20820,\n 0x80000007: 0x20,\n 0x80000008: 0x8000020,\n 0x80000009: 0x820,\n 0x8000000a: 0x20020,\n 0x8000000b: 0x8020800,\n 0x8000000c: 0x0,\n 0x8000000d: 0x8020020,\n 0x8000000e: 0x8000800,\n 0x8000000f: 0x20000,\n 0x10: 0x20820,\n 0x11: 0x8020800,\n 0x12: 0x20,\n 0x13: 0x800,\n 0x14: 0x8000800,\n 0x15: 0x8000020,\n 0x16: 0x8020020,\n 0x17: 0x20000,\n 0x18: 0x0,\n 0x19: 0x20020,\n 0x1a: 0x8020000,\n 0x1b: 0x8000820,\n 0x1c: 0x8020820,\n 0x1d: 0x20800,\n 0x1e: 0x820,\n 0x1f: 0x8000000,\n 0x80000010: 0x20000,\n 0x80000011: 0x800,\n 0x80000012: 0x8020020,\n 0x80000013: 0x20820,\n 0x80000014: 0x20,\n 0x80000015: 0x8020000,\n 0x80000016: 0x8000000,\n 0x80000017: 0x8000820,\n 0x80000018: 0x8020820,\n 0x80000019: 0x8000020,\n 0x8000001a: 0x8000800,\n 0x8000001b: 0x0,\n 0x8000001c: 0x20800,\n 0x8000001d: 0x820,\n 0x8000001e: 0x20020,\n 0x8000001f: 0x8020800\n }];\n\n // Masks that select the SBOX input\n var SBOX_MASK = [0xf8000001, 0x1f800000, 0x01f80000, 0x001f8000, 0x0001f800, 0x00001f80, 0x000001f8, 0x8000001f];\n\n /**\n * DES block cipher algorithm.\n */\n var DES = C_algo.DES = BlockCipher.extend({\n _doReset: function _doReset() {\n // Shortcuts\n var key = this._key;\n var keyWords = key.words;\n\n // Select 56 bits according to PC1\n var keyBits = [];\n for (var i = 0; i < 56; i++) {\n var keyBitPos = PC1[i] - 1;\n keyBits[i] = keyWords[keyBitPos >>> 5] >>> 31 - keyBitPos % 32 & 1;\n }\n\n // Assemble 16 subkeys\n var subKeys = this._subKeys = [];\n for (var nSubKey = 0; nSubKey < 16; nSubKey++) {\n // Create subkey\n var subKey = subKeys[nSubKey] = [];\n\n // Shortcut\n var bitShift = BIT_SHIFTS[nSubKey];\n\n // Select 48 bits according to PC2\n for (var i = 0; i < 24; i++) {\n // Select from the left 28 key bits\n subKey[i / 6 | 0] |= keyBits[(PC2[i] - 1 + bitShift) % 28] << 31 - i % 6;\n\n // Select from the right 28 key bits\n subKey[4 + (i / 6 | 0)] |= keyBits[28 + (PC2[i + 24] - 1 + bitShift) % 28] << 31 - i % 6;\n }\n\n // Since each subkey is applied to an expanded 32-bit input,\n // the subkey can be broken into 8 values scaled to 32-bits,\n // which allows the key to be used without expansion\n subKey[0] = subKey[0] << 1 | subKey[0] >>> 31;\n for (var i = 1; i < 7; i++) {\n subKey[i] = subKey[i] >>> (i - 1) * 4 + 3;\n }\n subKey[7] = subKey[7] << 5 | subKey[7] >>> 27;\n }\n\n // Compute inverse subkeys\n var invSubKeys = this._invSubKeys = [];\n for (var i = 0; i < 16; i++) {\n invSubKeys[i] = subKeys[15 - i];\n }\n },\n encryptBlock: function encryptBlock(M, offset) {\n this._doCryptBlock(M, offset, this._subKeys);\n },\n decryptBlock: function decryptBlock(M, offset) {\n this._doCryptBlock(M, offset, this._invSubKeys);\n },\n _doCryptBlock: function _doCryptBlock(M, offset, subKeys) {\n // Get input\n this._lBlock = M[offset];\n this._rBlock = M[offset + 1];\n\n // Initial permutation\n exchangeLR.call(this, 4, 0x0f0f0f0f);\n exchangeLR.call(this, 16, 0x0000ffff);\n exchangeRL.call(this, 2, 0x33333333);\n exchangeRL.call(this, 8, 0x00ff00ff);\n exchangeLR.call(this, 1, 0x55555555);\n\n // Rounds\n for (var round = 0; round < 16; round++) {\n // Shortcuts\n var subKey = subKeys[round];\n var lBlock = this._lBlock;\n var rBlock = this._rBlock;\n\n // Feistel function\n var f = 0;\n for (var i = 0; i < 8; i++) {\n f |= SBOX_P[i][((rBlock ^ subKey[i]) & SBOX_MASK[i]) >>> 0];\n }\n this._lBlock = rBlock;\n this._rBlock = lBlock ^ f;\n }\n\n // Undo swap from last round\n var t = this._lBlock;\n this._lBlock = this._rBlock;\n this._rBlock = t;\n\n // Final permutation\n exchangeLR.call(this, 1, 0x55555555);\n exchangeRL.call(this, 8, 0x00ff00ff);\n exchangeRL.call(this, 2, 0x33333333);\n exchangeLR.call(this, 16, 0x0000ffff);\n exchangeLR.call(this, 4, 0x0f0f0f0f);\n\n // Set output\n M[offset] = this._lBlock;\n M[offset + 1] = this._rBlock;\n },\n keySize: 64 / 32,\n ivSize: 64 / 32,\n blockSize: 64 / 32\n });\n\n // Swap bits across the left and right words\n function exchangeLR(offset, mask) {\n var t = (this._lBlock >>> offset ^ this._rBlock) & mask;\n this._rBlock ^= t;\n this._lBlock ^= t << offset;\n }\n function exchangeRL(offset, mask) {\n var t = (this._rBlock >>> offset ^ this._lBlock) & mask;\n this._lBlock ^= t;\n this._rBlock ^= t << offset;\n }\n\n /**\n * Shortcut functions to the cipher's object interface.\n *\n * @example\n *\n * var ciphertext = CryptoJS.DES.encrypt(message, key, cfg);\n * var plaintext = CryptoJS.DES.decrypt(ciphertext, key, cfg);\n */\n C.DES = BlockCipher._createHelper(DES);\n\n /**\n * Triple-DES block cipher algorithm.\n */\n var TripleDES = C_algo.TripleDES = BlockCipher.extend({\n _doReset: function _doReset() {\n // Shortcuts\n var key = this._key;\n var keyWords = key.words;\n // Make sure the key length is valid (64, 128 or >= 192 bit)\n if (keyWords.length !== 2 && keyWords.length !== 4 && keyWords.length < 6) {\n throw new Error('Invalid key length - 3DES requires the key length to be 64, 128, 192 or >192.');\n }\n\n // Extend the key according to the keying options defined in 3DES standard\n var key1 = keyWords.slice(0, 2);\n var key2 = keyWords.length < 4 ? keyWords.slice(0, 2) : keyWords.slice(2, 4);\n var key3 = keyWords.length < 6 ? keyWords.slice(0, 2) : keyWords.slice(4, 6);\n\n // Create DES instances\n this._des1 = DES.createEncryptor(WordArray.create(key1));\n this._des2 = DES.createEncryptor(WordArray.create(key2));\n this._des3 = DES.createEncryptor(WordArray.create(key3));\n },\n encryptBlock: function encryptBlock(M, offset) {\n this._des1.encryptBlock(M, offset);\n this._des2.decryptBlock(M, offset);\n this._des3.encryptBlock(M, offset);\n },\n decryptBlock: function decryptBlock(M, offset) {\n this._des3.decryptBlock(M, offset);\n this._des2.encryptBlock(M, offset);\n this._des1.decryptBlock(M, offset);\n },\n keySize: 192 / 32,\n ivSize: 64 / 32,\n blockSize: 64 / 32\n });\n\n /**\n * Shortcut functions to the cipher's object interface.\n *\n * @example\n *\n * var ciphertext = CryptoJS.TripleDES.encrypt(message, key, cfg);\n * var plaintext = CryptoJS.TripleDES.decrypt(ciphertext, key, cfg);\n */\n C.TripleDES = BlockCipher._createHelper(TripleDES);\n })();\n (function () {\n // Shortcuts\n var C = CryptoJS;\n var C_lib = C.lib;\n var StreamCipher = C_lib.StreamCipher;\n var C_algo = C.algo;\n\n /**\n * RC4 stream cipher algorithm.\n */\n var RC4 = C_algo.RC4 = StreamCipher.extend({\n _doReset: function _doReset() {\n // Shortcuts\n var key = this._key;\n var keyWords = key.words;\n var keySigBytes = key.sigBytes;\n\n // Init sbox\n var S = this._S = [];\n for (var i = 0; i < 256; i++) {\n S[i] = i;\n }\n\n // Key setup\n for (var i = 0, j = 0; i < 256; i++) {\n var keyByteIndex = i % keySigBytes;\n var keyByte = keyWords[keyByteIndex >>> 2] >>> 24 - keyByteIndex % 4 * 8 & 0xff;\n j = (j + S[i] + keyByte) % 256;\n\n // Swap\n var t = S[i];\n S[i] = S[j];\n S[j] = t;\n }\n\n // Counters\n this._i = this._j = 0;\n },\n _doProcessBlock: function _doProcessBlock(M, offset) {\n M[offset] ^= generateKeystreamWord.call(this);\n },\n keySize: 256 / 32,\n ivSize: 0\n });\n function generateKeystreamWord() {\n // Shortcuts\n var S = this._S;\n var i = this._i;\n var j = this._j;\n\n // Generate keystream word\n var keystreamWord = 0;\n for (var n = 0; n < 4; n++) {\n i = (i + 1) % 256;\n j = (j + S[i]) % 256;\n\n // Swap\n var t = S[i];\n S[i] = S[j];\n S[j] = t;\n keystreamWord |= S[(S[i] + S[j]) % 256] << 24 - n * 8;\n }\n\n // Update counters\n this._i = i;\n this._j = j;\n return keystreamWord;\n }\n\n /**\n * Shortcut functions to the cipher's object interface.\n *\n * @example\n *\n * var ciphertext = CryptoJS.RC4.encrypt(message, key, cfg);\n * var plaintext = CryptoJS.RC4.decrypt(ciphertext, key, cfg);\n */\n C.RC4 = StreamCipher._createHelper(RC4);\n\n /**\n * Modified RC4 stream cipher algorithm.\n */\n var RC4Drop = C_algo.RC4Drop = RC4.extend({\n /**\n * Configuration options.\n *\n * @property {number} drop The number of keystream words to drop. Default 192\n */\n cfg: RC4.cfg.extend({\n drop: 192\n }),\n _doReset: function _doReset() {\n RC4._doReset.call(this);\n\n // Drop\n for (var i = this.cfg.drop; i > 0; i--) {\n generateKeystreamWord.call(this);\n }\n }\n });\n\n /**\n * Shortcut functions to the cipher's object interface.\n *\n * @example\n *\n * var ciphertext = CryptoJS.RC4Drop.encrypt(message, key, cfg);\n * var plaintext = CryptoJS.RC4Drop.decrypt(ciphertext, key, cfg);\n */\n C.RC4Drop = StreamCipher._createHelper(RC4Drop);\n })();\n\n /** @preserve\n * Counter block mode compatible with Dr Brian Gladman fileenc.c\n * derived from CryptoJS.mode.CTR\n * Jan Hruby jhruby.web@gmail.com\n */\n CryptoJS.mode.CTRGladman = function () {\n var CTRGladman = CryptoJS.lib.BlockCipherMode.extend();\n function incWord(word) {\n if ((word >> 24 & 0xff) === 0xff) {\n //overflow\n var b1 = word >> 16 & 0xff;\n var b2 = word >> 8 & 0xff;\n var b3 = word & 0xff;\n if (b1 === 0xff)\n // overflow b1\n {\n b1 = 0;\n if (b2 === 0xff) {\n b2 = 0;\n if (b3 === 0xff) {\n b3 = 0;\n } else {\n ++b3;\n }\n } else {\n ++b2;\n }\n } else {\n ++b1;\n }\n word = 0;\n word += b1 << 16;\n word += b2 << 8;\n word += b3;\n } else {\n word += 0x01 << 24;\n }\n return word;\n }\n function incCounter(counter) {\n if ((counter[0] = incWord(counter[0])) === 0) {\n // encr_data in fileenc.c from Dr Brian Gladman's counts only with DWORD j < 8\n counter[1] = incWord(counter[1]);\n }\n return counter;\n }\n var Encryptor = CTRGladman.Encryptor = CTRGladman.extend({\n processBlock: function processBlock(words, offset) {\n // Shortcuts\n var cipher = this._cipher;\n var blockSize = cipher.blockSize;\n var iv = this._iv;\n var counter = this._counter;\n\n // Generate keystream\n if (iv) {\n counter = this._counter = iv.slice(0);\n\n // Remove IV for subsequent blocks\n this._iv = undefined;\n }\n incCounter(counter);\n var keystream = counter.slice(0);\n cipher.encryptBlock(keystream, 0);\n\n // Encrypt\n for (var i = 0; i < blockSize; i++) {\n words[offset + i] ^= keystream[i];\n }\n }\n });\n CTRGladman.Decryptor = Encryptor;\n return CTRGladman;\n }();\n (function () {\n // Shortcuts\n var C = CryptoJS;\n var C_lib = C.lib;\n var StreamCipher = C_lib.StreamCipher;\n var C_algo = C.algo;\n\n // Reusable objects\n var S = [];\n var C_ = [];\n var G = [];\n\n /**\n * Rabbit stream cipher algorithm\n */\n var Rabbit = C_algo.Rabbit = StreamCipher.extend({\n _doReset: function _doReset() {\n // Shortcuts\n var K = this._key.words;\n var iv = this.cfg.iv;\n\n // Swap endian\n for (var i = 0; i < 4; i++) {\n K[i] = (K[i] << 8 | K[i] >>> 24) & 0x00ff00ff | (K[i] << 24 | K[i] >>> 8) & 0xff00ff00;\n }\n\n // Generate initial state values\n var X = this._X = [K[0], K[3] << 16 | K[2] >>> 16, K[1], K[0] << 16 | K[3] >>> 16, K[2], K[1] << 16 | K[0] >>> 16, K[3], K[2] << 16 | K[1] >>> 16];\n\n // Generate initial counter values\n var C = this._C = [K[2] << 16 | K[2] >>> 16, K[0] & 0xffff0000 | K[1] & 0x0000ffff, K[3] << 16 | K[3] >>> 16, K[1] & 0xffff0000 | K[2] & 0x0000ffff, K[0] << 16 | K[0] >>> 16, K[2] & 0xffff0000 | K[3] & 0x0000ffff, K[1] << 16 | K[1] >>> 16, K[3] & 0xffff0000 | K[0] & 0x0000ffff];\n\n // Carry bit\n this._b = 0;\n\n // Iterate the system four times\n for (var i = 0; i < 4; i++) {\n nextState.call(this);\n }\n\n // Modify the counters\n for (var i = 0; i < 8; i++) {\n C[i] ^= X[i + 4 & 7];\n }\n\n // IV setup\n if (iv) {\n // Shortcuts\n var IV = iv.words;\n var IV_0 = IV[0];\n var IV_1 = IV[1];\n\n // Generate four subvectors\n var i0 = (IV_0 << 8 | IV_0 >>> 24) & 0x00ff00ff | (IV_0 << 24 | IV_0 >>> 8) & 0xff00ff00;\n var i2 = (IV_1 << 8 | IV_1 >>> 24) & 0x00ff00ff | (IV_1 << 24 | IV_1 >>> 8) & 0xff00ff00;\n var i1 = i0 >>> 16 | i2 & 0xffff0000;\n var i3 = i2 << 16 | i0 & 0x0000ffff;\n\n // Modify counter values\n C[0] ^= i0;\n C[1] ^= i1;\n C[2] ^= i2;\n C[3] ^= i3;\n C[4] ^= i0;\n C[5] ^= i1;\n C[6] ^= i2;\n C[7] ^= i3;\n\n // Iterate the system four times\n for (var i = 0; i < 4; i++) {\n nextState.call(this);\n }\n }\n },\n _doProcessBlock: function _doProcessBlock(M, offset) {\n // Shortcut\n var X = this._X;\n\n // Iterate the system\n nextState.call(this);\n\n // Generate four keystream words\n S[0] = X[0] ^ X[5] >>> 16 ^ X[3] << 16;\n S[1] = X[2] ^ X[7] >>> 16 ^ X[5] << 16;\n S[2] = X[4] ^ X[1] >>> 16 ^ X[7] << 16;\n S[3] = X[6] ^ X[3] >>> 16 ^ X[1] << 16;\n for (var i = 0; i < 4; i++) {\n // Swap endian\n S[i] = (S[i] << 8 | S[i] >>> 24) & 0x00ff00ff | (S[i] << 24 | S[i] >>> 8) & 0xff00ff00;\n\n // Encrypt\n M[offset + i] ^= S[i];\n }\n },\n blockSize: 128 / 32,\n ivSize: 64 / 32\n });\n function nextState() {\n // Shortcuts\n var X = this._X;\n var C = this._C;\n\n // Save old counter values\n for (var i = 0; i < 8; i++) {\n C_[i] = C[i];\n }\n\n // Calculate new counter values\n C[0] = C[0] + 0x4d34d34d + this._b | 0;\n C[1] = C[1] + 0xd34d34d3 + (C[0] >>> 0 < C_[0] >>> 0 ? 1 : 0) | 0;\n C[2] = C[2] + 0x34d34d34 + (C[1] >>> 0 < C_[1] >>> 0 ? 1 : 0) | 0;\n C[3] = C[3] + 0x4d34d34d + (C[2] >>> 0 < C_[2] >>> 0 ? 1 : 0) | 0;\n C[4] = C[4] + 0xd34d34d3 + (C[3] >>> 0 < C_[3] >>> 0 ? 1 : 0) | 0;\n C[5] = C[5] + 0x34d34d34 + (C[4] >>> 0 < C_[4] >>> 0 ? 1 : 0) | 0;\n C[6] = C[6] + 0x4d34d34d + (C[5] >>> 0 < C_[5] >>> 0 ? 1 : 0) | 0;\n C[7] = C[7] + 0xd34d34d3 + (C[6] >>> 0 < C_[6] >>> 0 ? 1 : 0) | 0;\n this._b = C[7] >>> 0 < C_[7] >>> 0 ? 1 : 0;\n\n // Calculate the g-values\n for (var i = 0; i < 8; i++) {\n var gx = X[i] + C[i];\n\n // Construct high and low argument for squaring\n var ga = gx & 0xffff;\n var gb = gx >>> 16;\n\n // Calculate high and low result of squaring\n var gh = ((ga * ga >>> 17) + ga * gb >>> 15) + gb * gb;\n var gl = ((gx & 0xffff0000) * gx | 0) + ((gx & 0x0000ffff) * gx | 0);\n\n // High XOR low\n G[i] = gh ^ gl;\n }\n\n // Calculate new state values\n X[0] = G[0] + (G[7] << 16 | G[7] >>> 16) + (G[6] << 16 | G[6] >>> 16) | 0;\n X[1] = G[1] + (G[0] << 8 | G[0] >>> 24) + G[7] | 0;\n X[2] = G[2] + (G[1] << 16 | G[1] >>> 16) + (G[0] << 16 | G[0] >>> 16) | 0;\n X[3] = G[3] + (G[2] << 8 | G[2] >>> 24) + G[1] | 0;\n X[4] = G[4] + (G[3] << 16 | G[3] >>> 16) + (G[2] << 16 | G[2] >>> 16) | 0;\n X[5] = G[5] + (G[4] << 8 | G[4] >>> 24) + G[3] | 0;\n X[6] = G[6] + (G[5] << 16 | G[5] >>> 16) + (G[4] << 16 | G[4] >>> 16) | 0;\n X[7] = G[7] + (G[6] << 8 | G[6] >>> 24) + G[5] | 0;\n }\n\n /**\n * Shortcut functions to the cipher's object interface.\n *\n * @example\n *\n * var ciphertext = CryptoJS.Rabbit.encrypt(message, key, cfg);\n * var plaintext = CryptoJS.Rabbit.decrypt(ciphertext, key, cfg);\n */\n C.Rabbit = StreamCipher._createHelper(Rabbit);\n })();\n\n /**\n * Counter block mode.\n */\n CryptoJS.mode.CTR = function () {\n var CTR = CryptoJS.lib.BlockCipherMode.extend();\n var Encryptor = CTR.Encryptor = CTR.extend({\n processBlock: function processBlock(words, offset) {\n // Shortcuts\n var cipher = this._cipher;\n var blockSize = cipher.blockSize;\n var iv = this._iv;\n var counter = this._counter;\n\n // Generate keystream\n if (iv) {\n counter = this._counter = iv.slice(0);\n\n // Remove IV for subsequent blocks\n this._iv = undefined;\n }\n var keystream = counter.slice(0);\n cipher.encryptBlock(keystream, 0);\n\n // Increment counter\n counter[blockSize - 1] = counter[blockSize - 1] + 1 | 0;\n\n // Encrypt\n for (var i = 0; i < blockSize; i++) {\n words[offset + i] ^= keystream[i];\n }\n }\n });\n CTR.Decryptor = Encryptor;\n return CTR;\n }();\n (function () {\n // Shortcuts\n var C = CryptoJS;\n var C_lib = C.lib;\n var StreamCipher = C_lib.StreamCipher;\n var C_algo = C.algo;\n\n // Reusable objects\n var S = [];\n var C_ = [];\n var G = [];\n\n /**\n * Rabbit stream cipher algorithm.\n *\n * This is a legacy version that neglected to convert the key to little-endian.\n * This error doesn't affect the cipher's security,\n * but it does affect its compatibility with other implementations.\n */\n var RabbitLegacy = C_algo.RabbitLegacy = StreamCipher.extend({\n _doReset: function _doReset() {\n // Shortcuts\n var K = this._key.words;\n var iv = this.cfg.iv;\n\n // Generate initial state values\n var X = this._X = [K[0], K[3] << 16 | K[2] >>> 16, K[1], K[0] << 16 | K[3] >>> 16, K[2], K[1] << 16 | K[0] >>> 16, K[3], K[2] << 16 | K[1] >>> 16];\n\n // Generate initial counter values\n var C = this._C = [K[2] << 16 | K[2] >>> 16, K[0] & 0xffff0000 | K[1] & 0x0000ffff, K[3] << 16 | K[3] >>> 16, K[1] & 0xffff0000 | K[2] & 0x0000ffff, K[0] << 16 | K[0] >>> 16, K[2] & 0xffff0000 | K[3] & 0x0000ffff, K[1] << 16 | K[1] >>> 16, K[3] & 0xffff0000 | K[0] & 0x0000ffff];\n\n // Carry bit\n this._b = 0;\n\n // Iterate the system four times\n for (var i = 0; i < 4; i++) {\n nextState.call(this);\n }\n\n // Modify the counters\n for (var i = 0; i < 8; i++) {\n C[i] ^= X[i + 4 & 7];\n }\n\n // IV setup\n if (iv) {\n // Shortcuts\n var IV = iv.words;\n var IV_0 = IV[0];\n var IV_1 = IV[1];\n\n // Generate four subvectors\n var i0 = (IV_0 << 8 | IV_0 >>> 24) & 0x00ff00ff | (IV_0 << 24 | IV_0 >>> 8) & 0xff00ff00;\n var i2 = (IV_1 << 8 | IV_1 >>> 24) & 0x00ff00ff | (IV_1 << 24 | IV_1 >>> 8) & 0xff00ff00;\n var i1 = i0 >>> 16 | i2 & 0xffff0000;\n var i3 = i2 << 16 | i0 & 0x0000ffff;\n\n // Modify counter values\n C[0] ^= i0;\n C[1] ^= i1;\n C[2] ^= i2;\n C[3] ^= i3;\n C[4] ^= i0;\n C[5] ^= i1;\n C[6] ^= i2;\n C[7] ^= i3;\n\n // Iterate the system four times\n for (var i = 0; i < 4; i++) {\n nextState.call(this);\n }\n }\n },\n _doProcessBlock: function _doProcessBlock(M, offset) {\n // Shortcut\n var X = this._X;\n\n // Iterate the system\n nextState.call(this);\n\n // Generate four keystream words\n S[0] = X[0] ^ X[5] >>> 16 ^ X[3] << 16;\n S[1] = X[2] ^ X[7] >>> 16 ^ X[5] << 16;\n S[2] = X[4] ^ X[1] >>> 16 ^ X[7] << 16;\n S[3] = X[6] ^ X[3] >>> 16 ^ X[1] << 16;\n for (var i = 0; i < 4; i++) {\n // Swap endian\n S[i] = (S[i] << 8 | S[i] >>> 24) & 0x00ff00ff | (S[i] << 24 | S[i] >>> 8) & 0xff00ff00;\n\n // Encrypt\n M[offset + i] ^= S[i];\n }\n },\n blockSize: 128 / 32,\n ivSize: 64 / 32\n });\n function nextState() {\n // Shortcuts\n var X = this._X;\n var C = this._C;\n\n // Save old counter values\n for (var i = 0; i < 8; i++) {\n C_[i] = C[i];\n }\n\n // Calculate new counter values\n C[0] = C[0] + 0x4d34d34d + this._b | 0;\n C[1] = C[1] + 0xd34d34d3 + (C[0] >>> 0 < C_[0] >>> 0 ? 1 : 0) | 0;\n C[2] = C[2] + 0x34d34d34 + (C[1] >>> 0 < C_[1] >>> 0 ? 1 : 0) | 0;\n C[3] = C[3] + 0x4d34d34d + (C[2] >>> 0 < C_[2] >>> 0 ? 1 : 0) | 0;\n C[4] = C[4] + 0xd34d34d3 + (C[3] >>> 0 < C_[3] >>> 0 ? 1 : 0) | 0;\n C[5] = C[5] + 0x34d34d34 + (C[4] >>> 0 < C_[4] >>> 0 ? 1 : 0) | 0;\n C[6] = C[6] + 0x4d34d34d + (C[5] >>> 0 < C_[5] >>> 0 ? 1 : 0) | 0;\n C[7] = C[7] + 0xd34d34d3 + (C[6] >>> 0 < C_[6] >>> 0 ? 1 : 0) | 0;\n this._b = C[7] >>> 0 < C_[7] >>> 0 ? 1 : 0;\n\n // Calculate the g-values\n for (var i = 0; i < 8; i++) {\n var gx = X[i] + C[i];\n\n // Construct high and low argument for squaring\n var ga = gx & 0xffff;\n var gb = gx >>> 16;\n\n // Calculate high and low result of squaring\n var gh = ((ga * ga >>> 17) + ga * gb >>> 15) + gb * gb;\n var gl = ((gx & 0xffff0000) * gx | 0) + ((gx & 0x0000ffff) * gx | 0);\n\n // High XOR low\n G[i] = gh ^ gl;\n }\n\n // Calculate new state values\n X[0] = G[0] + (G[7] << 16 | G[7] >>> 16) + (G[6] << 16 | G[6] >>> 16) | 0;\n X[1] = G[1] + (G[0] << 8 | G[0] >>> 24) + G[7] | 0;\n X[2] = G[2] + (G[1] << 16 | G[1] >>> 16) + (G[0] << 16 | G[0] >>> 16) | 0;\n X[3] = G[3] + (G[2] << 8 | G[2] >>> 24) + G[1] | 0;\n X[4] = G[4] + (G[3] << 16 | G[3] >>> 16) + (G[2] << 16 | G[2] >>> 16) | 0;\n X[5] = G[5] + (G[4] << 8 | G[4] >>> 24) + G[3] | 0;\n X[6] = G[6] + (G[5] << 16 | G[5] >>> 16) + (G[4] << 16 | G[4] >>> 16) | 0;\n X[7] = G[7] + (G[6] << 8 | G[6] >>> 24) + G[5] | 0;\n }\n\n /**\n * Shortcut functions to the cipher's object interface.\n *\n * @example\n *\n * var ciphertext = CryptoJS.RabbitLegacy.encrypt(message, key, cfg);\n * var plaintext = CryptoJS.RabbitLegacy.decrypt(ciphertext, key, cfg);\n */\n C.RabbitLegacy = StreamCipher._createHelper(RabbitLegacy);\n })();\n\n /**\n * Zero padding strategy.\n */\n CryptoJS.pad.ZeroPadding = {\n pad: function pad(data, blockSize) {\n // Shortcut\n var blockSizeBytes = blockSize * 4;\n\n // Pad\n data.clamp();\n data.sigBytes += blockSizeBytes - (data.sigBytes % blockSizeBytes || blockSizeBytes);\n },\n unpad: function unpad(data) {\n // Shortcut\n var dataWords = data.words;\n\n // Unpad\n var i = data.sigBytes - 1;\n for (var i = data.sigBytes - 1; i >= 0; i--) {\n if (dataWords[i >>> 2] >>> 24 - i % 4 * 8 & 0xff) {\n data.sigBytes = i + 1;\n break;\n }\n }\n }\n };\n return CryptoJS;\n});\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/vue-cli-plugin-uni/lib/crypto.js */ 33)[\"default\"], __webpack_require__(/*! ./../../../../HBuilderX/plugins/uniapp-cli/node_modules/webpack/buildin/global.js */ 30), __webpack_require__(/*! ./node_modules/@dcloudio/vue-cli-plugin-uni/lib/crypto.js */ 33)[\"default\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vc3RhdGljL2NyeXB0by1qcy9jcnlwdG8tanMuanMiXSwibmFtZXMiOlsicm9vdCIsImZhY3RvcnkiLCJleHBvcnRzIiwibW9kdWxlIiwiZGVmaW5lIiwiQ3J5cHRvSlMiLCJNYXRoIiwidW5kZWZpbmVkIiwiY3J5cHRvIiwid2luZG93IiwibXNDcnlwdG8iLCJnbG9iYWwiLCJyZXF1aXJlIiwiZXJyIiwiY3J5cHRvU2VjdXJlUmFuZG9tSW50IiwiZ2V0UmFuZG9tVmFsdWVzIiwiVWludDMyQXJyYXkiLCJyYW5kb21CeXRlcyIsInJlYWRJbnQzMkxFIiwiRXJyb3IiLCJjcmVhdGUiLCJPYmplY3QiLCJGIiwib2JqIiwic3VidHlwZSIsInByb3RvdHlwZSIsIkMiLCJDX2xpYiIsImxpYiIsIkJhc2UiLCJleHRlbmQiLCJvdmVycmlkZXMiLCJtaXhJbiIsImhhc093blByb3BlcnR5IiwiaW5pdCIsIiRzdXBlciIsImFwcGx5IiwiYXJndW1lbnRzIiwiaW5zdGFuY2UiLCJwcm9wZXJ0aWVzIiwicHJvcGVydHlOYW1lIiwidG9TdHJpbmciLCJjbG9uZSIsIldvcmRBcnJheSIsIndvcmRzIiwic2lnQnl0ZXMiLCJsZW5ndGgiLCJlbmNvZGVyIiwiSGV4Iiwic3RyaW5naWZ5IiwiY29uY2F0Iiwid29yZEFycmF5IiwidGhpc1dvcmRzIiwidGhhdFdvcmRzIiwidGhpc1NpZ0J5dGVzIiwidGhhdFNpZ0J5dGVzIiwiY2xhbXAiLCJpIiwidGhhdEJ5dGUiLCJjZWlsIiwiY2FsbCIsInNsaWNlIiwicmFuZG9tIiwibkJ5dGVzIiwicHVzaCIsIkNfZW5jIiwiZW5jIiwiaGV4Q2hhcnMiLCJiaXRlIiwiam9pbiIsInBhcnNlIiwiaGV4U3RyIiwiaGV4U3RyTGVuZ3RoIiwicGFyc2VJbnQiLCJzdWJzdHIiLCJMYXRpbjEiLCJsYXRpbjFDaGFycyIsIlN0cmluZyIsImZyb21DaGFyQ29kZSIsImxhdGluMVN0ciIsImxhdGluMVN0ckxlbmd0aCIsImNoYXJDb2RlQXQiLCJVdGY4IiwiZGVjb2RlVVJJQ29tcG9uZW50IiwiZXNjYXBlIiwiZSIsInV0ZjhTdHIiLCJ1bmVzY2FwZSIsImVuY29kZVVSSUNvbXBvbmVudCIsIkJ1ZmZlcmVkQmxvY2tBbGdvcml0aG0iLCJyZXNldCIsIl9kYXRhIiwiX25EYXRhQnl0ZXMiLCJfYXBwZW5kIiwiZGF0YSIsIl9wcm9jZXNzIiwiZG9GbHVzaCIsInByb2Nlc3NlZFdvcmRzIiwiZGF0YVdvcmRzIiwiZGF0YVNpZ0J5dGVzIiwiYmxvY2tTaXplIiwiYmxvY2tTaXplQnl0ZXMiLCJuQmxvY2tzUmVhZHkiLCJtYXgiLCJfbWluQnVmZmVyU2l6ZSIsIm5Xb3Jkc1JlYWR5IiwibkJ5dGVzUmVhZHkiLCJtaW4iLCJvZmZzZXQiLCJfZG9Qcm9jZXNzQmxvY2siLCJzcGxpY2UiLCJIYXNoZXIiLCJjZmciLCJfZG9SZXNldCIsInVwZGF0ZSIsIm1lc3NhZ2VVcGRhdGUiLCJmaW5hbGl6ZSIsImhhc2giLCJfZG9GaW5hbGl6ZSIsIl9jcmVhdGVIZWxwZXIiLCJoYXNoZXIiLCJtZXNzYWdlIiwiX2NyZWF0ZUhtYWNIZWxwZXIiLCJrZXkiLCJDX2FsZ28iLCJITUFDIiwiYWxnbyIsIkJhc2U2NCIsIm1hcCIsIl9tYXAiLCJiYXNlNjRDaGFycyIsImJ5dGUxIiwiYnl0ZTIiLCJieXRlMyIsInRyaXBsZXQiLCJqIiwiY2hhckF0IiwicGFkZGluZ0NoYXIiLCJiYXNlNjRTdHIiLCJiYXNlNjRTdHJMZW5ndGgiLCJyZXZlcnNlTWFwIiwiX3JldmVyc2VNYXAiLCJwYWRkaW5nSW5kZXgiLCJpbmRleE9mIiwicGFyc2VMb29wIiwiYml0czEiLCJiaXRzMiIsImJpdHNDb21iaW5lZCIsIlQiLCJhYnMiLCJzaW4iLCJNRDUiLCJfaGFzaCIsIk0iLCJvZmZzZXRfaSIsIk1fb2Zmc2V0X2kiLCJIIiwiTV9vZmZzZXRfMCIsIk1fb2Zmc2V0XzEiLCJNX29mZnNldF8yIiwiTV9vZmZzZXRfMyIsIk1fb2Zmc2V0XzQiLCJNX29mZnNldF81IiwiTV9vZmZzZXRfNiIsIk1fb2Zmc2V0XzciLCJNX29mZnNldF84IiwiTV9vZmZzZXRfOSIsIk1fb2Zmc2V0XzEwIiwiTV9vZmZzZXRfMTEiLCJNX29mZnNldF8xMiIsIk1fb2Zmc2V0XzEzIiwiTV9vZmZzZXRfMTQiLCJNX29mZnNldF8xNSIsImEiLCJiIiwiYyIsImQiLCJGRiIsIkdHIiwiSEgiLCJJSSIsIm5CaXRzVG90YWwiLCJuQml0c0xlZnQiLCJuQml0c1RvdGFsSCIsImZsb29yIiwibkJpdHNUb3RhbEwiLCJIX2kiLCJ4IiwicyIsInQiLCJuIiwiSG1hY01ENSIsIlciLCJTSEExIiwiSG1hY1NIQTEiLCJLIiwiaXNQcmltZSIsInNxcnROIiwic3FydCIsImZhY3RvciIsImdldEZyYWN0aW9uYWxCaXRzIiwiblByaW1lIiwicG93IiwiU0hBMjU2IiwiZiIsImciLCJoIiwiZ2FtbWEweCIsImdhbW1hMCIsImdhbW1hMXgiLCJnYW1tYTEiLCJjaCIsIm1haiIsInNpZ21hMCIsInNpZ21hMSIsInQxIiwidDIiLCJIbWFjU0hBMjU2IiwiVXRmMTZCRSIsIlV0ZjE2IiwidXRmMTZDaGFycyIsImNvZGVQb2ludCIsInV0ZjE2U3RyIiwidXRmMTZTdHJMZW5ndGgiLCJVdGYxNkxFIiwic3dhcEVuZGlhbiIsIndvcmQiLCJBcnJheUJ1ZmZlciIsInN1cGVySW5pdCIsInN1YkluaXQiLCJ0eXBlZEFycmF5IiwiVWludDhBcnJheSIsIkludDhBcnJheSIsIlVpbnQ4Q2xhbXBlZEFycmF5IiwiSW50MTZBcnJheSIsIlVpbnQxNkFycmF5IiwiSW50MzJBcnJheSIsIkZsb2F0MzJBcnJheSIsIkZsb2F0NjRBcnJheSIsImJ1ZmZlciIsImJ5dGVPZmZzZXQiLCJieXRlTGVuZ3RoIiwidHlwZWRBcnJheUJ5dGVMZW5ndGgiLCJfemwiLCJfenIiLCJfc2wiLCJfc3IiLCJfaGwiLCJfaHIiLCJSSVBFTUQxNjAiLCJobCIsImhyIiwiemwiLCJ6ciIsInNsIiwic3IiLCJhbCIsImJsIiwiY2wiLCJkbCIsImVsIiwiYXIiLCJiciIsImNyIiwiZHIiLCJlciIsImYxIiwiZjIiLCJmMyIsImY0IiwiZjUiLCJyb3RsIiwieSIsInoiLCJIbWFjUklQRU1EMTYwIiwiX2hhc2hlciIsImhhc2hlckJsb2NrU2l6ZSIsImhhc2hlckJsb2NrU2l6ZUJ5dGVzIiwib0tleSIsIl9vS2V5IiwiaUtleSIsIl9pS2V5Iiwib0tleVdvcmRzIiwiaUtleVdvcmRzIiwiaW5uZXJIYXNoIiwiaG1hYyIsIlBCS0RGMiIsImtleVNpemUiLCJpdGVyYXRpb25zIiwiY29tcHV0ZSIsInBhc3N3b3JkIiwic2FsdCIsImRlcml2ZWRLZXkiLCJibG9ja0luZGV4IiwiZGVyaXZlZEtleVdvcmRzIiwiYmxvY2tJbmRleFdvcmRzIiwiYmxvY2siLCJibG9ja1dvcmRzIiwiYmxvY2tXb3Jkc0xlbmd0aCIsImludGVybWVkaWF0ZSIsImludGVybWVkaWF0ZVdvcmRzIiwiRXZwS0RGIiwiU0hBMjI0IiwiSG1hY1NIQTIyNCIsIlgzMldvcmRBcnJheSIsIkNfeDY0IiwieDY0IiwiWDY0V29yZCIsIldvcmQiLCJoaWdoIiwibG93IiwiWDY0V29yZEFycmF5IiwidG9YMzIiLCJ4NjRXb3JkcyIsIng2NFdvcmRzTGVuZ3RoIiwieDMyV29yZHMiLCJ4NjRXb3JkIiwid29yZHNMZW5ndGgiLCJSSE9fT0ZGU0VUUyIsIlBJX0lOREVYRVMiLCJST1VORF9DT05TVEFOVFMiLCJuZXdYIiwibmV3WSIsIkxGU1IiLCJyb3VuZENvbnN0YW50TXN3Iiwicm91bmRDb25zdGFudExzdyIsImJpdFBvc2l0aW9uIiwiU0hBMyIsIm91dHB1dExlbmd0aCIsInN0YXRlIiwiX3N0YXRlIiwibkJsb2NrU2l6ZUxhbmVzIiwiTTJpIiwiTTJpMSIsImxhbmUiLCJyb3VuZCIsInRNc3ciLCJ0THN3IiwiVHgiLCJUeDQiLCJUeDEiLCJUeDFNc3ciLCJUeDFMc3ciLCJsYW5lSW5kZXgiLCJsYW5lTXN3IiwibGFuZUxzdyIsInJob09mZnNldCIsIlRQaUxhbmUiLCJUMCIsInN0YXRlMCIsIlRMYW5lIiwiVHgxTGFuZSIsIlR4MkxhbmUiLCJyb3VuZENvbnN0YW50IiwiYmxvY2tTaXplQml0cyIsIm91dHB1dExlbmd0aEJ5dGVzIiwib3V0cHV0TGVuZ3RoTGFuZXMiLCJoYXNoV29yZHMiLCJIbWFjU0hBMyIsIlg2NFdvcmRfY3JlYXRlIiwiU0hBNTEyIiwiSDAiLCJIMSIsIkgyIiwiSDMiLCJINCIsIkg1IiwiSDYiLCJINyIsIkgwaCIsIkgwbCIsIkgxaCIsIkgxbCIsIkgyaCIsIkgybCIsIkgzaCIsIkgzbCIsIkg0aCIsIkg0bCIsIkg1aCIsIkg1bCIsIkg2aCIsIkg2bCIsIkg3aCIsIkg3bCIsImFoIiwiYmgiLCJkaCIsImVoIiwiZmgiLCJmbCIsImdoIiwiZ2wiLCJoaCIsIldpbCIsIldpaCIsIldpIiwiZ2FtbWEweGgiLCJnYW1tYTB4bCIsImdhbW1hMGgiLCJnYW1tYTBsIiwiZ2FtbWExeGgiLCJnYW1tYTF4bCIsImdhbW1hMWgiLCJnYW1tYTFsIiwiV2k3IiwiV2k3aCIsIldpN2wiLCJXaTE2IiwiV2kxNmgiLCJXaTE2bCIsImNoaCIsImNobCIsIm1hamgiLCJtYWpsIiwic2lnbWEwaCIsInNpZ21hMGwiLCJzaWdtYTFoIiwic2lnbWExbCIsIktpIiwiS2loIiwiS2lsIiwidDFsIiwidDFoIiwidDJsIiwidDJoIiwiSG1hY1NIQTUxMiIsIlNIQTM4NCIsIkhtYWNTSEEzODQiLCJDaXBoZXIiLCJjcmVhdGVFbmNyeXB0b3IiLCJfRU5DX1hGT1JNX01PREUiLCJjcmVhdGVEZWNyeXB0b3IiLCJfREVDX1hGT1JNX01PREUiLCJ4Zm9ybU1vZGUiLCJfeGZvcm1Nb2RlIiwiX2tleSIsInByb2Nlc3MiLCJkYXRhVXBkYXRlIiwiZmluYWxQcm9jZXNzZWREYXRhIiwiaXZTaXplIiwic2VsZWN0Q2lwaGVyU3RyYXRlZ3kiLCJQYXNzd29yZEJhc2VkQ2lwaGVyIiwiU2VyaWFsaXphYmxlQ2lwaGVyIiwiY2lwaGVyIiwiZW5jcnlwdCIsImRlY3J5cHQiLCJjaXBoZXJ0ZXh0IiwiU3RyZWFtQ2lwaGVyIiwiZmluYWxQcm9jZXNzZWRCbG9ja3MiLCJDX21vZGUiLCJtb2RlIiwiQmxvY2tDaXBoZXJNb2RlIiwiaXYiLCJFbmNyeXB0b3IiLCJEZWNyeXB0b3IiLCJfY2lwaGVyIiwiX2l2IiwiQ0JDIiwicHJvY2Vzc0Jsb2NrIiwieG9yQmxvY2siLCJlbmNyeXB0QmxvY2siLCJfcHJldkJsb2NrIiwidGhpc0Jsb2NrIiwiZGVjcnlwdEJsb2NrIiwiQ19wYWQiLCJwYWQiLCJQa2NzNyIsIm5QYWRkaW5nQnl0ZXMiLCJwYWRkaW5nV29yZCIsInBhZGRpbmdXb3JkcyIsInBhZGRpbmciLCJ1bnBhZCIsIkJsb2NrQ2lwaGVyIiwibW9kZUNyZWF0b3IiLCJfbW9kZSIsIl9fY3JlYXRvciIsIkNpcGhlclBhcmFtcyIsImNpcGhlclBhcmFtcyIsImZvcm1hdHRlciIsIkNfZm9ybWF0IiwiZm9ybWF0IiwiT3BlblNTTEZvcm1hdHRlciIsIk9wZW5TU0wiLCJvcGVuU1NMU3RyIiwiY2lwaGVydGV4dFdvcmRzIiwiZW5jcnlwdG9yIiwiY2lwaGVyQ2ZnIiwiYWxnb3JpdGhtIiwiX3BhcnNlIiwicGxhaW50ZXh0IiwiQ19rZGYiLCJrZGYiLCJPcGVuU1NMS2RmIiwiZXhlY3V0ZSIsImRlcml2ZWRQYXJhbXMiLCJDRkIiLCJnZW5lcmF0ZUtleXN0cmVhbUFuZEVuY3J5cHQiLCJrZXlzdHJlYW0iLCJFQ0IiLCJBbnNpWDkyMyIsImxhc3RCeXRlUG9zIiwiSXNvMTAxMjYiLCJJc285Nzk3MSIsIlplcm9QYWRkaW5nIiwiT0ZCIiwiX2tleXN0cmVhbSIsIk5vUGFkZGluZyIsIkhleEZvcm1hdHRlciIsImlucHV0IiwiU0JPWCIsIklOVl9TQk9YIiwiU1VCX01JWF8wIiwiU1VCX01JWF8xIiwiU1VCX01JWF8yIiwiU1VCX01JWF8zIiwiSU5WX1NVQl9NSVhfMCIsIklOVl9TVUJfTUlYXzEiLCJJTlZfU1VCX01JWF8yIiwiSU5WX1NVQl9NSVhfMyIsInhpIiwic3giLCJ4MiIsIng0IiwieDgiLCJSQ09OIiwiQUVTIiwiX25Sb3VuZHMiLCJfa2V5UHJpb3JSZXNldCIsImtleVdvcmRzIiwiblJvdW5kcyIsImtzUm93cyIsImtleVNjaGVkdWxlIiwiX2tleVNjaGVkdWxlIiwia3NSb3ciLCJpbnZLZXlTY2hlZHVsZSIsIl9pbnZLZXlTY2hlZHVsZSIsImludktzUm93IiwiX2RvQ3J5cHRCbG9jayIsInMwIiwiczEiLCJzMiIsInMzIiwidDAiLCJ0MyIsIlBDMSIsIlBDMiIsIkJJVF9TSElGVFMiLCJTQk9YX1AiLCJTQk9YX01BU0siLCJERVMiLCJrZXlCaXRzIiwia2V5Qml0UG9zIiwic3ViS2V5cyIsIl9zdWJLZXlzIiwiblN1YktleSIsInN1YktleSIsImJpdFNoaWZ0IiwiaW52U3ViS2V5cyIsIl9pbnZTdWJLZXlzIiwiX2xCbG9jayIsIl9yQmxvY2siLCJleGNoYW5nZUxSIiwiZXhjaGFuZ2VSTCIsImxCbG9jayIsInJCbG9jayIsIm1hc2siLCJUcmlwbGVERVMiLCJrZXkxIiwia2V5MiIsImtleTMiLCJfZGVzMSIsIl9kZXMyIiwiX2RlczMiLCJSQzQiLCJrZXlTaWdCeXRlcyIsIlMiLCJfUyIsImtleUJ5dGVJbmRleCIsImtleUJ5dGUiLCJfaSIsIl9qIiwiZ2VuZXJhdGVLZXlzdHJlYW1Xb3JkIiwia2V5c3RyZWFtV29yZCIsIlJDNERyb3AiLCJkcm9wIiwiQ1RSR2xhZG1hbiIsImluY1dvcmQiLCJiMSIsImIyIiwiYjMiLCJpbmNDb3VudGVyIiwiY291bnRlciIsIl9jb3VudGVyIiwiQ18iLCJHIiwiUmFiYml0IiwiWCIsIl9YIiwiX0MiLCJfYiIsIm5leHRTdGF0ZSIsIklWIiwiSVZfMCIsIklWXzEiLCJpMCIsImkyIiwiaTEiLCJpMyIsImd4IiwiZ2EiLCJnYiIsIkNUUiIsIlJhYmJpdExlZ2FjeSJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUUsV0FBVUEsSUFBSSxFQUFFQyxPQUFPLEVBQUU7RUFDMUIsSUFBSSxPQUFjLHVCQUFQQyxPQUFPLE9BQUssUUFBUSxFQUFFO0lBQ2hDO0lBQ0FDLE1BQU0sQ0FBQ0QsT0FBTyxHQUFHQSxPQUFP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QUN2QixDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQzdELENBQUMsRUFBRyxDQUFDLEVBQUUsRUFBRSxFQUFHLENBQUMsRUFBRSxFQUFFLEVBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRyxDQUFDLEVBQUUsRUFBRSxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFHLENBQUMsRUFDN0QsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRSxFQUFFLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRyxDQUFDLEVBQUUsRUFBRSxFQUM3RCxDQUFDLEVBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRSxFQUFFLEVBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQzdELENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUUsRUFBRSxFQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ25FLElBQUlnTyxHQUFHLEdBQUd6TSxTQUFTLENBQUN2QixNQUFNLENBQUMsQ0FDdkIsQ0FBQyxFQUFFLEVBQUUsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUUsRUFBRSxFQUFHLENBQUMsRUFBRSxFQUFFLEVBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRyxDQUFDLEVBQUUsRUFBRSxFQUM3RCxDQUFDLEVBQUUsRUFBRSxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQzdELEVBQUUsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUUsRUFBRSxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUUsRUFBRSxFQUFHLENBQUMsRUFBRSxFQUFFLEVBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFFLEVBQUUsRUFDOUQsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUUsRUFBRSxFQUFHLENBQUMsRUFBRSxFQUFFLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUM3RCxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNwRSxJQUFJaU8sR0FBRyxHQUFHMU0sU0FBUyxDQUFDdkIsTUFBTSxDQUFDLENBQ3RCLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFDL0QsQ0FBQyxFQUFFLENBQUMsRUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRyxDQUFDLEVBQUUsRUFBRSxFQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUM3RCxFQUFFLEVBQUUsRUFBRSxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUUsRUFBRSxFQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRyxDQUFDLEVBQUUsRUFBRSxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUUsRUFBRSxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQzVELEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFFLEVBQUUsRUFDaEUsQ0FBQyxFQUFFLEVBQUUsRUFBRyxDQUFDLEVBQUUsRUFBRSxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxDQUFFLENBQUM7SUFDcEUsSUFBSWtPLEdBQUcsR0FBRzNNLFNBQVMsQ0FBQ3ZCLE1BQU0sQ0FBQyxDQUN2QixDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRyxDQUFDLEVBQzdELENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFHLENBQUMsRUFBRSxFQUFFLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRSxFQUFFLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRSxFQUFFLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFDN0QsQ0FBQyxFQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUM3RCxFQUFFLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRyxDQUFDLEVBQUUsRUFBRSxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUUsRUFBRSxFQUFHLENBQUMsRUFBRSxFQUFFLEVBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRyxDQUFDLEVBQzlELENBQUMsRUFBRyxDQUFDLEVBQUUsRUFBRSxFQUFHLENBQUMsRUFBRSxFQUFFLEVBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBRSxDQUFDO0lBRXBFLElBQUltTyxHQUFHLEdBQUk1TSxTQUFTLENBQUN2QixNQUFNLENBQUMsQ0FBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDMUYsSUFBSW9PLEdBQUcsR0FBSTdNLFNBQVMsQ0FBQ3ZCLE1BQU0sQ0FBQyxDQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxV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QUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRUEsY0FBYyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFDOUVBLGNBQWMsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUVBLGNBQWMsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQzlFQSxjQUFjLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFQSxjQUFjLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUM5RUEsY0FBYyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRUEsY0FBYyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFDOUVBLGNBQWMsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUVBLGNBQWMsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQzlFQSxjQUFjLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFQSxjQUFjLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUM5RUEsY0FBYyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRUEsY0FBYyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFDOUVBLGNBQWMsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUVBLGNBQWMsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQzlFQSxjQUFjLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFQSxjQUFjLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUM5RUEsY0FBYyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRUEsY0FBYyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFDOUVBLGNBQWMsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUVBLGNBQWMsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQzlFQSxjQUFjLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFQSxjQUFjLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUM5RUEsY0FBYyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRUEsY0FBYyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFDOUVBLGNBQWMsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUVBLGNBQWMsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQzlFQSxjQUFjLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFQSxjQUFjLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUM5RUEsY0FBYyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRUEsY0FBYyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFDOUVBLGNBQWMsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUVBLGNBQWMsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQzlFQSxjQUFjLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFQSxjQUFjLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUM5RUEsY0FBYyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRUEsY0FBYyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFDOUVBLGNBQWMsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUVBLGNBQWMsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQzlFQSxjQUFjLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFQSxjQUFjLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUM5RUEsY0FBYyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRUEsY0FBYyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFDOUVBLGNBQWMsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUVBLGNBQWMsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQzlFQSxjQUFjLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFQSxjQUFjLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUM5RUEsY0FBYyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRUEsY0FBYyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFDOUVBLGNBQWMsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUVBLGNBQWMsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQzlFQSxjQUFjLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFQSxjQUFjLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUM5RUEsY0FBYyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRUEsY0FBYyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFDOUVBLGNBQWMsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUVBLGNBQWMsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQzlFQSxjQUFjLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFQSxjQUFjLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUM5RUEsY0FBYyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRUEsY0FBYyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFDOUVBLGNBQWMsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUVBLGNBQWMsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQzlFQSxjQUFjLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFQSxjQUFjLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUM5RUEsY0FBYyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRUEsY0FBYyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFDOUVBLGNBQWMsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUVBLGNBQWMsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQzlFQSxjQUFjLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFQSxjQUFjLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUM5RUEsY0FBYyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRUEsY0FBYyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFDOUVBLGNBQWMs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LEVBQUUsRUFDdEIsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBRSxDQUFDLEVBQ3JCLEVBQUUsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUNyQixFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFDdEIsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQ3RCLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUN0QixFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FDekI7O0lBRUQ7SUFDQSxJQUFJQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7O0lBRWpGO0lBQ0EsSUFBSUMsTUFBTSxHQUFHLENBQ1Q7TUFDSSxHQUFHLEVBQUUsUUFBUTtNQUNiLFVBQVUsRUFBRSxNQUFNO01BQ2xCLFVBQVUsRUFBRSxRQUFRO01BQ3BCLFVBQVUsRUFBRSxHQUFHO01BQ2YsVUFBVSxFQUFFLEtBQUs7TUFDakIsVUFBVSxFQUFFLFFBQVE7TUFDcEIsVUFBVSxFQUFFLFFBQVE7TUFDcEIsVUFBVSxFQUFFLFFBQVE7TUFDcEIsVUFBVSxFQUFFLEtBQUs7TUFDakIsVUFBVSxFQUFFLFFBQVE7TUFDcEIsVUFBVSxFQUFFLE1BQU07TUFDbEIsVUFBVSxFQUFFLFFBQVE7TUFDcEIsVUFBVSxFQUFFLE1BQU07TUFDbEIsVUFBVSxFQUFFLFFBQVE7TUFDcEIsVUFBVSxFQUFFLEdBQUc7TUFDZixVQUFVLEVBQUUsTUFBTTtNQUNsQixTQUFTLEVBQUUsR0FBRztNQUNkLFVBQVUsRUFBRSxRQUFRO01BQ3BCLFVBQVUsRUFBRSxNQUFNO01BQ2xCLFVBQVUsRUFBRSxNQUFNO01BQ2xCLFVBQVUsRUFBRSxRQUFRO01BQ3BCLFVBQVUsRUFBRSxLQUFLO01BQ2pCLFVBQVUsRUFBRSxRQUFRO01BQ3BCLFVBQVUsRUFBRSxHQUFHO01BQ2YsVUFBVSxFQUFFLFFBQVE7TUFDcEIsVUFBVSxFQUFFLE1BQU07TUFDbEIsVUFBVSxFQUFFLFFBQVE7TUFDcEIsVUFBVSxFQUFFLFFBQVE7TUFDcEIsVUFBVSxFQUFFLFFBQVE7TUFDcEIsVUFBVSxFQUFFLE1BQU07TUFDbEIsVUFBVSxFQUFFLEtBQUs7TUFDakIsVUFBVSxFQUFFLFFBQVE7TUFDcEIsR0FBRyxFQUFFLE1BQU07TUFDWCxVQUFVLEVBQUUsR0FBRztNQUNmLFVBQVUsRUFBRSxRQUFRO01BQ3BCLFVBQVUsRUFBRSxRQUFRO01BQ3BCLFVBQVUsRUFBRSxRQUFRO01BQ3BCLFVBQVUsRUFBRSxNQUFNO01BQ2xCLFVBQVUsRUFBRSxLQUFLO01BQ2pCLFVBQVUsRUFBRSxRQUFRO01BQ3BCLFVBQVUsRUFBRSxRQUFRO01BQ3BCLFVBQVUsRUFBRSxRQUFRO01BQ3BCLFVBQVUsRUFBRSxRQUFRO01BQ3BCLFVBQVUsRUFBRSxNQUFNO01BQ2xCLFVBQVUsRUFBRSxLQUFLO01BQ2pCLFVBQVUsRUFBRSxRQUFRO01BQ3BCLFVBQVUsRUFBRSxNQUFNO01BQ2xCLFVBQVUsRUFBRSxHQUFHO01BQ2YsU0FBUyxFQUFFLFFBQVE7TUFDbkIsVUFBVSxFQUFFLFFBQVE7TUFDcEIsVUFBVSxFQUFFLFFBQVE7TUFDcEIsVUFBVSxFQUFFLEtBQUs7TUFDakIsVUFBVSxFQUFFLE1BQU07TUFDbEIsVUFBVSxFQUFFLFFBQVE7TUFDcEIsVUFBVSxFQUFFLEdBQUc7TUFDZixVQUFVLEVBQUUsTUFBTTtNQUNsQixVQUFVLEVBQUUsTUFBTTtNQUNsQixVQUFVLEVBQUUsUUFBUTtNQUNwQixVQUFVLEVBQUUsS0FBSztNQUNqQixVQUFVLEVBQUUsUUFBUTtNQUNwQixVQUFVLEVBQUUsUUFBUTtNQUNwQixVQUFVLEVBQUUsR0FBRztNQUNmLFVBQVUsRUFBRSxNQUFNO01BQ2xCLFVBQVUsRUFBRTtJQUNoQixDQUFDLEVBQ0Q7TUFDSSxHQUFHLEVBQUUsVUFBVTtNQUNmLFNBQVMsRUFBRSxNQUFNO01BQ2pCLFNBQVMsRUFBRSxPQUFPO01BQ2xCLFNBQVMsRUFBRSxVQUFVO01BQ3JCLFNBQVMsRUFBRSxVQUFVO01BQ3JCLFNBQVMsRUFBRSxVQUFVO01BQ3JCLFNBQVMsRUFBRSxVQUFVO01BQ3JCLFNBQVMsRUFBRSxJQUFJO01BQ2YsU0FBUyxFQUFFLE9BQU87TUFDbEIsU0FBUyxFQUFFLFVBQVU7TUFDckIsU0FBUyxFQUFFLFVBQVU7TUFDckIsU0FBUyxFQUFFLE9BQU87TUFDbEIsU0FBUyxFQUFFLE9BQU87TUFDbEIsU0FBUyxFQUFFLEdBQUc7TUFDZCxTQUFTLEVBQUUsTUFBTTtNQUNqQixTQUFTLEVBQUUsVUFBVTtNQUNyQixRQUFRLEVBQUUsVUFBVTtNQUNwQixTQUFTLEVBQUUsT0FBTztNQUNsQixTQUFTLEVBQUUsSUFBSTtNQUNmLFNBQVMsRUFBRSxVQUFVO01BQ3JCLFNBQVMsRUFBRSxVQUFVO01BQ3JCLFNBQVMsRUFBRSxVQUFVO01BQ3JCLFNBQVMsRUFBRSxPQUFPO01BQ2xCLFNBQVMsRUFBRSxVQUFVO01BQ3JCLFNBQVMsRUFBRSxPQUFPO01BQ2xCLFNBQVMsRUFBRSxHQUFHO01BQ2QsU0FBUyxFQUFFLE1BQU07TUFDakIsU0FBUyxFQUFFLFVBQVU7TUFDckIsU0FBUyxFQUFFLFVBQVU7TUFDckIsU0FBUyxFQUFFLE9BQU87TUFDbEIsU0FBUyxFQUFFLFVBQVU7TUFDckIsU0FBUyxFQUFFLE1BQU07TUFDakIsVUFBVSxFQUFFLEdBQUc7TUFDZixVQUFVLEVBQUUsVUFBVTtNQUN0QixVQUFVLEVBQUUsVUFBVTtNQUN0QixVQUFVLEVBQUUsVUFBVTtNQUN0QixVQUFVLEVBQUUsVUFBVTtNQUN0QixVQUFVLEVBQUUsSUFBSTtNQUNoQixVQUFVLEVBQUUsT0FBTztNQUNuQixVQUFVLEVBQUUsTUFBTTtNQUNsQixVQUFVLEVBQUUsTUFBTTtNQUNsQixVQUFVLEVBQUUsT0FBTztNQUNuQixVQUFVLEVBQUUsT0FBTztNQUNuQixVQUFVLEVBQUUsVUFBVTtNQUN0QixVQUFVLEVBQUUsT0FBTztNQUNuQixVQUFVLEVBQUUsVUFBVTtNQUN0QixVQUFVLEVBQUUsVUFBVTtNQUN0QixVQUFVLEVBQUUsVUFBVTtNQUN0QixVQUFVLEVBQUUsT0FBTztNQUNuQixVQUFVLEVBQUUsT0FBTztNQUNuQixVQUFVLEVBQUUsVUFBVTtNQUN0QixVQUFVLEVBQUUsTUFBTTtNQUNsQixVQUFVLEVBQUUsVUFBVTtNQUN0QixVQUFVLEVBQUUsVUFBVTtNQUN0QixVQUFVLEVBQUUsSUFBSTtNQUNoQixVQUFVLEVBQUUsVUFBVTtNQUN0QixVQUFVLEVBQUUsVUFBVTtNQUN0QixVQUFVLEVBQUUsVUFBVTtNQUN0QixVQUFVLEVBQUUsVUFBVTtNQUN0QixVQUFVLEVBQUUsT0FBTztNQUNuQixVQUFVLEVBQUUsR0FBRztNQUNmLFVBQVUsRUFBRSxNQUFNO01BQ2xCLFVBQVUsRUFBRSxVQUFVO01BQ3RCLFVBQVUsRUFBRTtJQUNoQixDQUFDLEVBQ0Q7TUFDSSxHQUFHLEVBQUUsS0FBSztNQUNWLFFBQVEsRUFBRSxHQUFHO01BQ2IsUUFBUSxFQUFFLFNBQVM7TUFDbkIsUUFBUSxFQUFFLE9BQU87TUFDakIsUUFBUSxFQUFFLE9BQU87TUFDakIsUUFBUSxFQUFFLFNBQVM7TUFDbkIsUUFBUSxFQUFFLFNBQVM7TUFDbkIsUUFBUSxFQUFFLFNBQVM7TUFDbkIsUUFBUSxFQUFFLFNBQVM7TUFDbkIsUUFBUSxFQUFFLFNBQVM7TUFDbkIsUUFBUSxFQUFFLE9BQU87TUFDakIsUUFBUSxFQUFFLFNBQVM7TUFDbkIsUUFBUSxFQUFFLFNBQVM7TUFDbkIsUUFBUSxFQUFFLE9BQU87TUFDakIsUUFBUSxFQUFF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QUMsR0FBRyxDQUFDLENBQUMsR0FBSSxDQUFDO01BQ3ZFeGpCLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBSUEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsSUFBS0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBS3dqQixFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBSSxDQUFDO01BQ3ZFeGpCLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBSUEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsSUFBS0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBS3dqQixFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBSSxDQUFDO01BQ3ZFeGpCLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBSUEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsSUFBS0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBS3dqQixFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBSSxDQUFDO01BQ3ZFeGpCLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBSUEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsSUFBS0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBS3dqQixFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBSSxDQUFDO01BQ3ZFeGpCLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBSUEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsSUFBS0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBS3dqQixFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBSSxDQUFDO01BQ3ZFeGpCLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBSUEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsSUFBS0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBS3dqQixFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBSSxDQUFDO01BQ3ZFLElBQUksQ0FBQ00sRUFBRSxHQUFJOWpCLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUt3akIsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQzs7TUFFOUM7TUFDQSxLQUFLLElBQUl6aEIsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxFQUFFLEVBQUU7UUFDeEIsSUFBSXdpQixFQUFFLEdBQUdaLENBQUMsQ0FBQzVoQixDQUFDLENBQUMsR0FBRy9CLENBQUMsQ0FBQytCLENBQUMsQ0FBQzs7UUFFcEI7UUFDQSxJQUFJeWlCLEVBQUUsR0FBR0QsRUFBRSxHQUFHLE1BQU07UUFDcEIsSUFBSUUsRUFBRSxHQUFHRixFQUFFLEtBQUssRUFBRTs7UUFFbEI7UUFDQSxJQUFJMU4sRUFBRSxHQUFHLENBQUUsQ0FBRTJOLEVBQUUsR0FBR0EsRUFBRSxLQUFNLEVBQUUsSUFBSUEsRUFBRSxHQUFHQyxFQUFFLEtBQU0sRUFBRSxJQUFJQSxFQUFFLEdBQUdBLEVBQUU7UUFDMUQsSUFBSTNOLEVBQUUsR0FBRyxDQUFFLENBQUN5TixFQUFFLEdBQUcsVUFBVSxJQUFJQSxFQUFFLEdBQUksQ0FBQyxLQUFNLENBQUNBLEVBQUUsR0FBRyxVQUFVLElBQUlBLEVBQUUsR0FBSSxDQUFDLENBQUM7O1FBRXhFO1FBQ0FkLENBQUMsQ0FBQzFoQixDQUFDLENBQUMsR0FBRzhVLEVBQUUsR0FBR0MsRUFBRTtNQUNsQjs7TUFFQTtNQUNBNk0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFJRixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUtBLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUtBLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFHLENBQUMsSUFBS0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBS0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUcsQ0FBQyxHQUFJLENBQUM7TUFDbkZFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBSUYsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFLQSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFNQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBSSxDQUFDO01BQ3pERSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUlGLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBS0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBS0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUcsQ0FBQyxJQUFLQSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFLQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRyxDQUFDLEdBQUksQ0FBQztNQUNuRkUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFJRixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUtBLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQU1BLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFHLENBQUMsR0FBR0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFJLENBQUM7TUFDekRFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBSUYsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFLQSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFLQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRyxDQUFDLElBQUtBLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUtBLENBQUMsQ0FBQyxDQUFD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SyxDQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFJLENBQUM7TUFDdkV4akIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFJQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxJQUFLQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFLd2pCLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFJLENBQUM7TUFDdkV4akIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFJQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxJQUFLQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFLd2pCLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFJLENBQUM7TUFDdkV4akIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFJQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxJQUFLQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFLd2pCLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFJLENBQUM7TUFDdkV4akIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFJQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxJQUFLQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFLd2pCLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFJLENBQUM7TUFDdkV4akIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFJQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxJQUFLQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFLd2pCLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFJLENBQUM7TUFDdkV4akIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFJQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxJQUFLQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFLd2pCLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFJLENBQUM7TUFDdkUsSUFBSSxDQUFDTSxFQUFFLEdBQUk5akIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBS3dqQixFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBRSxHQUFHLENBQUMsR0FBRyxDQUFDOztNQUU5QztNQUNBLEtBQUssSUFBSXpoQixDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEVBQUUsRUFBRTtRQUN4QixJQUFJd2lCLEVBQUUsR0FBR1osQ0FBQyxDQUFDNWhCLENBQUMsQ0FBQyxHQUFHL0IsQ0FBQyxDQUFDK0IsQ0FBQyxDQUFDOztRQUVwQjtRQUNBLElBQUl5aUIsRUFBRSxHQUFHRCxFQUFFLEdBQUcsTUFBTTtRQUNwQixJQUFJRSxFQUFFLEdBQUdGLEVBQUUsS0FBSyxFQUFFOztRQUVsQjtRQUNBLElBQUkxTixFQUFFLEdBQUcsQ0FBRSxDQUFFMk4sRUFBRSxHQUFHQSxFQUFFLEtBQU0sRUFBRSxJQUFJQSxFQUFFLEdBQUdDLEVBQUUsS0FBTSxFQUFFLElBQUlBLEVBQUUsR0FBR0EsRUFBRTtRQUMxRCxJQUFJM04sRUFBRSxHQUFHLENBQUUsQ0FBQ3lOLEVBQUUsR0FBRyxVQUFVLElBQUlBLEVBQUUsR0FBSSxDQUFDLEtBQU0sQ0FBQ0EsRUFBRSxHQUFHLFVBQVUsSUFBSUEsRUFBRSxHQUFJLENBQUMsQ0FBQzs7UUFFeEU7UUFDQWQsQ0FBQyxDQUFDMWhCLENBQUMsQ0FBQyxHQUFHOFUsRUFBRSxHQUFHQyxFQUFFO01BQ2xCOztNQUVBO01BQ0E2TSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUlGLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBS0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBS0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUcsQ0FBQyxJQUFLQSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFLQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRyxDQUFDLEdBQUksQ0FBQztNQUNuRkUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFJRixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUtBLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQU1BLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFHLENBQUMsR0FBR0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFJLENBQUM7TUFDekRFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBSUYsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFLQSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFLQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRyxDQUFDLElBQUtBLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUtBLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFHLENBQUMsR0FBSSxDQUFDO01BQ25GRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUlGLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBS0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBTUEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUcsQ0FBQyxHQUFHQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUksQ0FBQztNQUN6REUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFJRixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUtBLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUtBLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFHLENBQUMsSUFBS0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBS0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUcsQ0FBQyxHQUFJLENBQUM7TUFDbkZFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBSUYsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFLQSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFNQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBSSxDQUFDO01BQ3pERSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUlGLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBS0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBS0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUcsQ0FBQyxJQUFLQSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFLQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRyxDQUFDLEdBQUksQ0FBQztNQUNuRkUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFJRixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUtBLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQU1BLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFHLENBQUMsR0FBR0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFJLENBQUM7SUFDN0Q7O0lBRUE7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQUNLempCLENBQUMsQ0FBQzJrQixZQUFZLEdBQUdySyxZQUFZLENBQUN6VSxhQUFhLENBQUM4ZSxZQUFZLENBQUM7RUFDN0QsQ0FBQyxHQUFFOztFQUdIO0FBQ0Q7QUFDQTtFQUNDaG1CLFFBQVEsQ0FBQzZjLEdBQUcsQ0FBQ3NDLFdBQVcsR0FBRztJQUN2QnRDLEdBQUcsRUFBRSxhQUFVcFgsSUFBSSxFQUFFTSxTQUFTLEVBQUU7TUFDNUI7TUFDQSxJQUFJQyxjQUFjLEdBQUdELFNBQVMsR0FBRyxDQUFDOztNQUVsQztNQUNBTixJQUFJLENBQUN0QyxLQUFLLEVBQUU7TUFDWnNDLElBQUksQ0FBQ2pELFFBQVEsSUFBSXdELGNBQWMsSUFBS1AsSUFBSSxDQUFDakQsUUFBUSxHQUFHd0QsY0FBYyxJQUFLQSxjQUFjLENBQUM7SUFDMUYsQ0FBQztJQUVEbVgsS0FBSyxFQUFFLGVBQVUxWCxJQUFJLEVBQUU7TUFDbkI7TUFDQSxJQUFJSSxTQUFTLEdBQUdKLElBQUksQ0FBQ2xELEtBQUs7O01BRTFCO01BQ0EsSUFBSWEsQ0FBQyxHQUFHcUMsSUFBSSxDQUFDakQsUUFBUSxHQUFHLENBQUM7TUFDekIsS0FBSyxJQUFJWSxDQUFDLEdBQUdxQyxJQUFJLENBQUNqRCxRQUFRLEdBQUcsQ0FBQyxFQUFFWSxDQUFDLElBQUksQ0FBQyxFQUFFQSxDQUFDLEVBQUUsRUFBRTtRQUN6QyxJQUFNeUMsU0FBUyxDQUFDekMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFNLEVBQUUsR0FBSUEsQ0FBQyxHQUFHLENBQUMsR0FBSSxDQUFFLEdBQUksSUFBSSxFQUFHO1VBQ3REcUMsSUFBSSxDQUFDakQsUUFBUSxHQUFHWSxDQUFDLEdBQUcsQ0FBQztVQUNyQjtRQUNKO01BQ0o7SUFDSjtFQUNKLENBQUM7RUFHRCxPQUFPcEQsUUFBUTtBQUVoQixDQUFDLENBQUMsQyIsImZpbGUiOiIzMi5qcyIsInNvdXJjZXNDb250ZW50IjpbIjsoZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYgKHR5cGVvZiBleHBvcnRzID09PSBcIm9iamVjdFwiKSB7XG5cdFx0Ly8gQ29tbW9uSlNcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBmYWN0b3J5KCk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW10sIGZhY3RvcnkpO1xuXHR9XG5cdGVsc2Uge1xuXHRcdC8vIEdsb2JhbCAoYnJvd3Nlcilcblx0XHRyb290LkNyeXB0b0pTID0gZmFjdG9yeSgpO1xuXHR9XG59KHRoaXMsIGZ1bmN0aW9uICgpIHtcblxuXHQvKmdsb2JhbHMgd2luZG93LCBnbG9iYWwsIHJlcXVpcmUqL1xuXG5cdC8qKlxuXHQgKiBDcnlwdG9KUyBjb3JlIGNvbXBvbmVudHMuXG5cdCAqL1xuXHR2YXIgQ3J5cHRvSlMgPSBDcnlwdG9KUyB8fCAoZnVuY3Rpb24gKE1hdGgsIHVuZGVmaW5lZCkge1xuXG5cdCAgICB2YXIgY3J5cHRvO1xuXG5cdCAgICAvLyBOYXRpdmUgY3J5cHRvIGZyb20gd2luZG93IChCcm93c2VyKVxuXHQgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5jcnlwdG8pIHtcblx0ICAgICAgICBjcnlwdG8gPSB3aW5kb3cuY3J5cHRvO1xuXHQgICAgfVxuXG5cdCAgICAvLyBOYXRpdmUgKGV4cGVyaW1lbnRhbCBJRSAxMSkgY3J5cHRvIGZyb20gd2luZG93IChCcm93c2VyKVxuXHQgICAgaWYgKCFjcnlwdG8gJiYgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93Lm1zQ3J5cHRvKSB7XG5cdCAgICAgICAgY3J5cHRvID0gd2luZG93Lm1zQ3J5cHRvO1xuXHQgICAgfVxuXG5cdCAgICAvLyBOYXRpdmUgY3J5cHRvIGZyb20gZ2xvYmFsIChOb2RlSlMpXG5cdCAgICBpZiAoIWNyeXB0byAmJiB0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJyAmJiBnbG9iYWwuY3J5cHRvKSB7XG5cdCAgICAgICAgY3J5cHRvID0gZ2xvYmFsLmNyeXB0bztcblx0ICAgIH1cblxuXHQgICAgLy8gTmF0aXZlIGNyeXB0byBpbXBvcnQgdmlhIHJlcXVpcmUgKE5vZGVKUylcblx0ICAgIGlmICghY3J5cHRvICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nKSB7XG5cdCAgICAgICAgdHJ5IHtcblx0ICAgICAgICAgICAgY3J5cHRvID0gcmVxdWlyZSgnY3J5cHRvJyk7XG5cdCAgICAgICAgfSBjYXRjaCAoZXJyKSB7fVxuXHQgICAgfVxuXG5cdCAgICAvKlxuXHQgICAgICogQ3J5cHRvZ3JhcGhpY2FsbHkgc2VjdXJlIHBzZXVkb3JhbmRvbSBudW1iZXIgZ2VuZXJhdG9yXG5cdCAgICAgKlxuXHQgICAgICogQXMgTWF0aC5yYW5kb20oKSBpcyBjcnlwdG9ncmFwaGljYWxseSBub3Qgc2FmZSB0byB1c2Vcblx0ICAgICAqL1xuXHQgICAgdmFyIGNyeXB0b1NlY3VyZVJhbmRvbUludCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAoY3J5cHRvKSB7XG5cdCAgICAgICAgICAgIC8vIFVzZSBnZXRSYW5kb21WYWx1ZXMgbWV0aG9kIChCcm93c2VyKVxuXHQgICAgICAgICAgICBpZiAodHlwZW9mIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMgPT09ICdmdW5jdGlvbicpIHtcblx0ICAgICAgICAgICAgICAgIHRyeSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQzMkFycmF5KDEpKVswXTtcblx0ICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge31cblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIFVzZSByYW5kb21CeXRlcyBtZXRob2QgKE5vZGVKUylcblx0ICAgICAgICAgICAgaWYgKHR5cGVvZiBjcnlwdG8ucmFuZG9tQnl0ZXMgPT09ICdmdW5jdGlvbicpIHtcblx0ICAgICAgICAgICAgICAgIHRyeSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyeXB0by5yYW5kb21CeXRlcyg0KS5yZWFkSW50MzJMRSgpO1xuXHQgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7fVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOYXRpdmUgY3J5cHRvIG1vZHVsZSBjb3VsZCBub3QgYmUgdXNlZCB0byBnZXQgc2VjdXJlIHJhbmRvbSBudW1iZXIuJyk7XG5cdCAgICB9O1xuXG5cdCAgICAvKlxuXHQgICAgICogTG9jYWwgcG9seWZpbGwgb2YgT2JqZWN0LmNyZWF0ZVxuXG5cdCAgICAgKi9cblx0ICAgIHZhciBjcmVhdGUgPSBPYmplY3QuY3JlYXRlIHx8IChmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgZnVuY3Rpb24gRigpIHt9XG5cblx0ICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG9iaikge1xuXHQgICAgICAgICAgICB2YXIgc3VidHlwZTtcblxuXHQgICAgICAgICAgICBGLnByb3RvdHlwZSA9IG9iajtcblxuXHQgICAgICAgICAgICBzdWJ0eXBlID0gbmV3IEYoKTtcblxuXHQgICAgICAgICAgICBGLnByb3RvdHlwZSA9IG51bGw7XG5cblx0ICAgICAgICAgICAgcmV0dXJuIHN1YnR5cGU7XG5cdCAgICAgICAgfTtcblx0ICAgIH0oKSlcblxuXHQgICAgLyoqXG5cdCAgICAgKiBDcnlwdG9KUyBuYW1lc3BhY2UuXG5cdCAgICAgKi9cblx0ICAgIHZhciBDID0ge307XG5cblx0ICAgIC8qKlxuXHQgICAgICogTGlicmFyeSBuYW1lc3BhY2UuXG5cdCAgICAgKi9cblx0ICAgIHZhciBDX2xpYiA9IEMubGliID0ge307XG5cblx0ICAgIC8qKlxuXHQgICAgICogQmFzZSBvYmplY3QgZm9yIHByb3RvdHlwYWwgaW5oZXJpdGFuY2UuXG5cdCAgICAgKi9cblx0ICAgIHZhciBCYXNlID0gQ19saWIuQmFzZSA9IChmdW5jdGlvbiAoKSB7XG5cblxuXHQgICAgICAgIHJldHVybiB7XG5cdCAgICAgICAgICAgIC8qKlxuXHQgICAgICAgICAgICAgKiBDcmVhdGVzIGEgbmV3IG9iamVjdCB0aGF0IGluaGVyaXRzIGZyb20gdGhpcyBvYmplY3QuXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvdmVycmlkZXMgUHJvcGVydGllcyB0byBjb3B5IGludG8gdGhlIG5ldyBvYmplY3QuXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqIEByZXR1cm4ge09iamVjdH0gVGhlIG5ldyBvYmplY3QuXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqIEBzdGF0aWNcblx0ICAgICAgICAgICAgICpcblx0ICAgICAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgICAgICpcblx0ICAgICAgICAgICAgICogICAgIHZhciBNeVR5cGUgPSBDcnlwdG9KUy5saWIuQmFzZS5leHRlbmQoe1xuXHQgICAgICAgICAgICAgKiAgICAgICAgIGZpZWxkOiAndmFsdWUnLFxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiAgICAgICAgIG1ldGhvZDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgKiAgICAgICAgIH1cblx0ICAgICAgICAgICAgICogICAgIH0pO1xuXHQgICAgICAgICAgICAgKi9cblx0ICAgICAgICAgICAgZXh0ZW5kOiBmdW5jdGlvbiAob3ZlcnJpZGVzKSB7XG5cdCAgICAgICAgICAgICAgICAvLyBTcGF3blxuXHQgICAgICAgICAgICAgICAgdmFyIHN1YnR5cGUgPSBjcmVhdGUodGhpcyk7XG5cblx0ICAgICAgICAgICAgICAgIC8vIEF1Z21lbnRcblx0ICAgICAgICAgICAgICAgIGlmIChvdmVycmlkZXMpIHtcblx0ICAgICAgICAgICAgICAgICAgICBzdWJ0eXBlLm1peEluKG92ZXJyaWRlcyk7XG5cdCAgICAgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBkZWZhdWx0IGluaXRpYWxpemVyXG5cdCAgICAgICAgICAgICAgICBpZiAoIXN1YnR5cGUuaGFzT3duUHJvcGVydHkoJ2luaXQnKSB8fCB0aGlzLmluaXQgPT09IHN1YnR5cGUuaW5pdCkge1xuXHQgICAgICAgICAgICAgICAgICAgIHN1YnR5cGUuaW5pdCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgc3VidHlwZS4kc3VwZXIuaW5pdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHQgICAgICAgICAgICAgICAgICAgIH07XG5cdCAgICAgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgICAgIC8vIEluaXRpYWxpemVyJ3MgcHJvdG90eXBlIGlzIHRoZSBzdWJ0eXBlIG9iamVjdFxuXHQgICAgICAgICAgICAgICAgc3VidHlwZS5pbml0LnByb3RvdHlwZSA9IHN1YnR5cGU7XG5cblx0ICAgICAgICAgICAgICAgIC8vIFJlZmVyZW5jZSBzdXBlcnR5cGVcblx0ICAgICAgICAgICAgICAgIHN1YnR5cGUuJHN1cGVyID0gdGhpcztcblxuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHN1YnR5cGU7XG5cdCAgICAgICAgICAgIH0sXG5cblx0ICAgICAgICAgICAgLyoqXG5cdCAgICAgICAgICAgICAqIEV4dGVuZHMgdGhpcyBvYmplY3QgYW5kIHJ1bnMgdGhlIGluaXQgbWV0aG9kLlxuXHQgICAgICAgICAgICAgKiBBcmd1bWVudHMgdG8gY3JlYXRlKCkgd2lsbCBiZSBwYXNzZWQgdG8gaW5pdCgpLlxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiBAcmV0dXJuIHtPYmplY3R9IFRoZSBuZXcgb2JqZWN0LlxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqICAgICB2YXIgaW5zdGFuY2UgPSBNeVR5cGUuY3JlYXRlKCk7XG5cdCAgICAgICAgICAgICAqL1xuXHQgICAgICAgICAgICBjcmVhdGU6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBpbnN0YW5jZSA9IHRoaXMuZXh0ZW5kKCk7XG5cdCAgICAgICAgICAgICAgICBpbnN0YW5jZS5pbml0LmFwcGx5KGluc3RhbmNlLCBhcmd1bWVudHMpO1xuXG5cdCAgICAgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2U7XG5cdCAgICAgICAgICAgIH0sXG5cblx0ICAgICAgICAgICAgLyoqXG5cdCAgICAgICAgICAgICAqIEluaXRpYWxpemVzIGEgbmV3bHkgY3JlYXRlZCBvYmplY3QuXG5cdCAgICAgICAgICAgICAqIE92ZXJyaWRlIHRoaXMgbWV0aG9kIHRvIGFkZCBzb21lIGxvZ2ljIHdoZW4geW91ciBvYmplY3RzIGFyZSBjcmVhdGVkLlxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiAgICAgdmFyIE15VHlwZSA9IENyeXB0b0pTLmxpYi5CYXNlLmV4dGVuZCh7XG5cdCAgICAgICAgICAgICAqICAgICAgICAgaW5pdDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgKiAgICAgICAgICAgICAvLyAuLi5cblx0ICAgICAgICAgICAgICogICAgICAgICB9XG5cdCAgICAgICAgICAgICAqICAgICB9KTtcblx0ICAgICAgICAgICAgICovXG5cdCAgICAgICAgICAgIGluaXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgfSxcblxuXHQgICAgICAgICAgICAvKipcblx0ICAgICAgICAgICAgICogQ29waWVzIHByb3BlcnRpZXMgaW50byB0aGlzIG9iamVjdC5cblx0ICAgICAgICAgICAgICpcblx0ICAgICAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHByb3BlcnRpZXMgVGhlIHByb3BlcnRpZXMgdG8gbWl4IGluLlxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiAgICAgTXlUeXBlLm1peEluKHtcblx0ICAgICAgICAgICAgICogICAgICAgICBmaWVsZDogJ3ZhbHVlJ1xuXHQgICAgICAgICAgICAgKiAgICAgfSk7XG5cdCAgICAgICAgICAgICAqL1xuXHQgICAgICAgICAgICBtaXhJbjogZnVuY3Rpb24gKHByb3BlcnRpZXMpIHtcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5TmFtZSBpbiBwcm9wZXJ0aWVzKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkocHJvcGVydHlOYW1lKSkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB0aGlzW3Byb3BlcnR5TmFtZV0gPSBwcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV07XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgICAgICAvLyBJRSB3b24ndCBjb3B5IHRvU3RyaW5nIHVzaW5nIHRoZSBsb29wIGFib3ZlXG5cdCAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eSgndG9TdHJpbmcnKSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMudG9TdHJpbmcgPSBwcm9wZXJ0aWVzLnRvU3RyaW5nO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9LFxuXG5cdCAgICAgICAgICAgIC8qKlxuXHQgICAgICAgICAgICAgKiBDcmVhdGVzIGEgY29weSBvZiB0aGlzIG9iamVjdC5cblx0ICAgICAgICAgICAgICpcblx0ICAgICAgICAgICAgICogQHJldHVybiB7T2JqZWN0fSBUaGUgY2xvbmUuXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqICAgICB2YXIgY2xvbmUgPSBpbnN0YW5jZS5jbG9uZSgpO1xuXHQgICAgICAgICAgICAgKi9cblx0ICAgICAgICAgICAgY2xvbmU6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmluaXQucHJvdG90eXBlLmV4dGVuZCh0aGlzKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH07XG5cdCAgICB9KCkpO1xuXG5cdCAgICAvKipcblx0ICAgICAqIEFuIGFycmF5IG9mIDMyLWJpdCB3b3Jkcy5cblx0ICAgICAqXG5cdCAgICAgKiBAcHJvcGVydHkge0FycmF5fSB3b3JkcyBUaGUgYXJyYXkgb2YgMzItYml0IHdvcmRzLlxuXHQgICAgICogQHByb3BlcnR5IHtudW1iZXJ9IHNpZ0J5dGVzIFRoZSBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgYnl0ZXMgaW4gdGhpcyB3b3JkIGFycmF5LlxuXHQgICAgICovXG5cdCAgICB2YXIgV29yZEFycmF5ID0gQ19saWIuV29yZEFycmF5ID0gQmFzZS5leHRlbmQoe1xuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIEluaXRpYWxpemVzIGEgbmV3bHkgY3JlYXRlZCB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtBcnJheX0gd29yZHMgKE9wdGlvbmFsKSBBbiBhcnJheSBvZiAzMi1iaXQgd29yZHMuXG5cdCAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IHNpZ0J5dGVzIChPcHRpb25hbCkgVGhlIG51bWJlciBvZiBzaWduaWZpY2FudCBieXRlcyBpbiB0aGUgd29yZHMuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciB3b3JkQXJyYXkgPSBDcnlwdG9KUy5saWIuV29yZEFycmF5LmNyZWF0ZSgpO1xuXHQgICAgICAgICAqICAgICB2YXIgd29yZEFycmF5ID0gQ3J5cHRvSlMubGliLldvcmRBcnJheS5jcmVhdGUoWzB4MDAwMTAyMDMsIDB4MDQwNTA2MDddKTtcblx0ICAgICAgICAgKiAgICAgdmFyIHdvcmRBcnJheSA9IENyeXB0b0pTLmxpYi5Xb3JkQXJyYXkuY3JlYXRlKFsweDAwMDEwMjAzLCAweDA0MDUwNjA3XSwgNik7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgaW5pdDogZnVuY3Rpb24gKHdvcmRzLCBzaWdCeXRlcykge1xuXHQgICAgICAgICAgICB3b3JkcyA9IHRoaXMud29yZHMgPSB3b3JkcyB8fCBbXTtcblxuXHQgICAgICAgICAgICBpZiAoc2lnQnl0ZXMgIT0gdW5kZWZpbmVkKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLnNpZ0J5dGVzID0gc2lnQnl0ZXM7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLnNpZ0J5dGVzID0gd29yZHMubGVuZ3RoICogNDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb252ZXJ0cyB0aGlzIHdvcmQgYXJyYXkgdG8gYSBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge0VuY29kZXJ9IGVuY29kZXIgKE9wdGlvbmFsKSBUaGUgZW5jb2Rpbmcgc3RyYXRlZ3kgdG8gdXNlLiBEZWZhdWx0OiBDcnlwdG9KUy5lbmMuSGV4XG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBzdHJpbmdpZmllZCB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgc3RyaW5nID0gd29yZEFycmF5ICsgJyc7XG5cdCAgICAgICAgICogICAgIHZhciBzdHJpbmcgPSB3b3JkQXJyYXkudG9TdHJpbmcoKTtcblx0ICAgICAgICAgKiAgICAgdmFyIHN0cmluZyA9IHdvcmRBcnJheS50b1N0cmluZyhDcnlwdG9KUy5lbmMuVXRmOCk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgdG9TdHJpbmc6IGZ1bmN0aW9uIChlbmNvZGVyKSB7XG5cdCAgICAgICAgICAgIHJldHVybiAoZW5jb2RlciB8fCBIZXgpLnN0cmluZ2lmeSh0aGlzKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29uY2F0ZW5hdGVzIGEgd29yZCBhcnJheSB0byB0aGlzIHdvcmQgYXJyYXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheX0gd29yZEFycmF5IFRoZSB3b3JkIGFycmF5IHRvIGFwcGVuZC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhpcyB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB3b3JkQXJyYXkxLmNvbmNhdCh3b3JkQXJyYXkyKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBjb25jYXQ6IGZ1bmN0aW9uICh3b3JkQXJyYXkpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciB0aGlzV29yZHMgPSB0aGlzLndvcmRzO1xuXHQgICAgICAgICAgICB2YXIgdGhhdFdvcmRzID0gd29yZEFycmF5LndvcmRzO1xuXHQgICAgICAgICAgICB2YXIgdGhpc1NpZ0J5dGVzID0gdGhpcy5zaWdCeXRlcztcblx0ICAgICAgICAgICAgdmFyIHRoYXRTaWdCeXRlcyA9IHdvcmRBcnJheS5zaWdCeXRlcztcblxuXHQgICAgICAgICAgICAvLyBDbGFtcCBleGNlc3MgYml0c1xuXHQgICAgICAgICAgICB0aGlzLmNsYW1wKCk7XG5cblx0ICAgICAgICAgICAgLy8gQ29uY2F0XG5cdCAgICAgICAgICAgIGlmICh0aGlzU2lnQnl0ZXMgJSA0KSB7XG5cdCAgICAgICAgICAgICAgICAvLyBDb3B5IG9uZSBieXRlIGF0IGEgdGltZVxuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGF0U2lnQnl0ZXM7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciB0aGF0Qnl0ZSA9ICh0aGF0V29yZHNbaSA+Pj4gMl0gPj4+ICgyNCAtIChpICUgNCkgKiA4KSkgJiAweGZmO1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXNXb3Jkc1sodGhpc1NpZ0J5dGVzICsgaSkgPj4+IDJdIHw9IHRoYXRCeXRlIDw8ICgyNCAtICgodGhpc1NpZ0J5dGVzICsgaSkgJSA0KSAqIDgpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgLy8gQ29weSBvbmUgd29yZCBhdCBhIHRpbWVcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhhdFNpZ0J5dGVzOyBpICs9IDQpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzV29yZHNbKHRoaXNTaWdCeXRlcyArIGkpID4+PiAyXSA9IHRoYXRXb3Jkc1tpID4+PiAyXTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLnNpZ0J5dGVzICs9IHRoYXRTaWdCeXRlcztcblxuXHQgICAgICAgICAgICAvLyBDaGFpbmFibGVcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIFJlbW92ZXMgaW5zaWduaWZpY2FudCBiaXRzLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB3b3JkQXJyYXkuY2xhbXAoKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBjbGFtcDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIHdvcmRzID0gdGhpcy53b3Jkcztcblx0ICAgICAgICAgICAgdmFyIHNpZ0J5dGVzID0gdGhpcy5zaWdCeXRlcztcblxuXHQgICAgICAgICAgICAvLyBDbGFtcFxuXHQgICAgICAgICAgICB3b3Jkc1tzaWdCeXRlcyA+Pj4gMl0gJj0gMHhmZmZmZmZmZiA8PCAoMzIgLSAoc2lnQnl0ZXMgJSA0KSAqIDgpO1xuXHQgICAgICAgICAgICB3b3Jkcy5sZW5ndGggPSBNYXRoLmNlaWwoc2lnQnl0ZXMgLyA0KTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ3JlYXRlcyBhIGNvcHkgb2YgdGhpcyB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgY2xvbmUuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBjbG9uZSA9IHdvcmRBcnJheS5jbG9uZSgpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBjbG9uZSA9IEJhc2UuY2xvbmUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAgICAgY2xvbmUud29yZHMgPSB0aGlzLndvcmRzLnNsaWNlKDApO1xuXG5cdCAgICAgICAgICAgIHJldHVybiBjbG9uZTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ3JlYXRlcyBhIHdvcmQgYXJyYXkgZmlsbGVkIHdpdGggcmFuZG9tIGJ5dGVzLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IG5CeXRlcyBUaGUgbnVtYmVyIG9mIHJhbmRvbSBieXRlcyB0byBnZW5lcmF0ZS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIHJhbmRvbSB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgd29yZEFycmF5ID0gQ3J5cHRvSlMubGliLldvcmRBcnJheS5yYW5kb20oMTYpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHJhbmRvbTogZnVuY3Rpb24gKG5CeXRlcykge1xuXHQgICAgICAgICAgICB2YXIgd29yZHMgPSBbXTtcblxuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5CeXRlczsgaSArPSA0KSB7XG5cdCAgICAgICAgICAgICAgICB3b3Jkcy5wdXNoKGNyeXB0b1NlY3VyZVJhbmRvbUludCgpKTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIHJldHVybiBuZXcgV29yZEFycmF5LmluaXQod29yZHMsIG5CeXRlcyk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogRW5jb2RlciBuYW1lc3BhY2UuXG5cdCAgICAgKi9cblx0ICAgIHZhciBDX2VuYyA9IEMuZW5jID0ge307XG5cblx0ICAgIC8qKlxuXHQgICAgICogSGV4IGVuY29kaW5nIHN0cmF0ZWd5LlxuXHQgICAgICovXG5cdCAgICB2YXIgSGV4ID0gQ19lbmMuSGV4ID0ge1xuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENvbnZlcnRzIGEgd29yZCBhcnJheSB0byBhIGhleCBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheX0gd29yZEFycmF5IFRoZSB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7c3RyaW5nfSBUaGUgaGV4IHN0cmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBzdGF0aWNcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIGhleFN0cmluZyA9IENyeXB0b0pTLmVuYy5IZXguc3RyaW5naWZ5KHdvcmRBcnJheSk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgc3RyaW5naWZ5OiBmdW5jdGlvbiAod29yZEFycmF5KSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIgd29yZHMgPSB3b3JkQXJyYXkud29yZHM7XG5cdCAgICAgICAgICAgIHZhciBzaWdCeXRlcyA9IHdvcmRBcnJheS5zaWdCeXRlcztcblxuXHQgICAgICAgICAgICAvLyBDb252ZXJ0XG5cdCAgICAgICAgICAgIHZhciBoZXhDaGFycyA9IFtdO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNpZ0J5dGVzOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHZhciBiaXRlID0gKHdvcmRzW2kgPj4+IDJdID4+PiAoMjQgLSAoaSAlIDQpICogOCkpICYgMHhmZjtcblx0ICAgICAgICAgICAgICAgIGhleENoYXJzLnB1c2goKGJpdGUgPj4+IDQpLnRvU3RyaW5nKDE2KSk7XG5cdCAgICAgICAgICAgICAgICBoZXhDaGFycy5wdXNoKChiaXRlICYgMHgwZikudG9TdHJpbmcoMTYpKTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIHJldHVybiBoZXhDaGFycy5qb2luKCcnKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29udmVydHMgYSBoZXggc3RyaW5nIHRvIGEgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBoZXhTdHIgVGhlIGhleCBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgd29yZEFycmF5ID0gQ3J5cHRvSlMuZW5jLkhleC5wYXJzZShoZXhTdHJpbmcpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHBhcnNlOiBmdW5jdGlvbiAoaGV4U3RyKSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0XG5cdCAgICAgICAgICAgIHZhciBoZXhTdHJMZW5ndGggPSBoZXhTdHIubGVuZ3RoO1xuXG5cdCAgICAgICAgICAgIC8vIENvbnZlcnRcblx0ICAgICAgICAgICAgdmFyIHdvcmRzID0gW107XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaGV4U3RyTGVuZ3RoOyBpICs9IDIpIHtcblx0ICAgICAgICAgICAgICAgIHdvcmRzW2kgPj4+IDNdIHw9IHBhcnNlSW50KGhleFN0ci5zdWJzdHIoaSwgMiksIDE2KSA8PCAoMjQgLSAoaSAlIDgpICogNCk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICByZXR1cm4gbmV3IFdvcmRBcnJheS5pbml0KHdvcmRzLCBoZXhTdHJMZW5ndGggLyAyKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXG5cdCAgICAvKipcblx0ICAgICAqIExhdGluMSBlbmNvZGluZyBzdHJhdGVneS5cblx0ICAgICAqL1xuXHQgICAgdmFyIExhdGluMSA9IENfZW5jLkxhdGluMSA9IHtcblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb252ZXJ0cyBhIHdvcmQgYXJyYXkgdG8gYSBMYXRpbjEgc3RyaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl9IHdvcmRBcnJheSBUaGUgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIExhdGluMSBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBsYXRpbjFTdHJpbmcgPSBDcnlwdG9KUy5lbmMuTGF0aW4xLnN0cmluZ2lmeSh3b3JkQXJyYXkpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHN0cmluZ2lmeTogZnVuY3Rpb24gKHdvcmRBcnJheSkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIHdvcmRzID0gd29yZEFycmF5LndvcmRzO1xuXHQgICAgICAgICAgICB2YXIgc2lnQnl0ZXMgPSB3b3JkQXJyYXkuc2lnQnl0ZXM7XG5cblx0ICAgICAgICAgICAgLy8gQ29udmVydFxuXHQgICAgICAgICAgICB2YXIgbGF0aW4xQ2hhcnMgPSBbXTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaWdCeXRlczsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgYml0ZSA9ICh3b3Jkc1tpID4+PiAyXSA+Pj4gKDI0IC0gKGkgJSA0KSAqIDgpKSAmIDB4ZmY7XG5cdCAgICAgICAgICAgICAgICBsYXRpbjFDaGFycy5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoYml0ZSkpO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgcmV0dXJuIGxhdGluMUNoYXJzLmpvaW4oJycpO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb252ZXJ0cyBhIExhdGluMSBzdHJpbmcgdG8gYSB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGxhdGluMVN0ciBUaGUgTGF0aW4xIHN0cmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIHdvcmQgYXJyYXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciB3b3JkQXJyYXkgPSBDcnlwdG9KUy5lbmMuTGF0aW4xLnBhcnNlKGxhdGluMVN0cmluZyk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgcGFyc2U6IGZ1bmN0aW9uIChsYXRpbjFTdHIpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRcblx0ICAgICAgICAgICAgdmFyIGxhdGluMVN0ckxlbmd0aCA9IGxhdGluMVN0ci5sZW5ndGg7XG5cblx0ICAgICAgICAgICAgLy8gQ29udmVydFxuXHQgICAgICAgICAgICB2YXIgd29yZHMgPSBbXTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsYXRpbjFTdHJMZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgd29yZHNbaSA+Pj4gMl0gfD0gKGxhdGluMVN0ci5jaGFyQ29kZUF0KGkpICYgMHhmZikgPDwgKDI0IC0gKGkgJSA0KSAqIDgpO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBXb3JkQXJyYXkuaW5pdCh3b3JkcywgbGF0aW4xU3RyTGVuZ3RoKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXG5cdCAgICAvKipcblx0ICAgICAqIFVURi04IGVuY29kaW5nIHN0cmF0ZWd5LlxuXHQgICAgICovXG5cdCAgICB2YXIgVXRmOCA9IENfZW5jLlV0ZjggPSB7XG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29udmVydHMgYSB3b3JkIGFycmF5IHRvIGEgVVRGLTggc3RyaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl9IHdvcmRBcnJheSBUaGUgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIFVURi04IHN0cmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBzdGF0aWNcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIHV0ZjhTdHJpbmcgPSBDcnlwdG9KUy5lbmMuVXRmOC5zdHJpbmdpZnkod29yZEFycmF5KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBzdHJpbmdpZnk6IGZ1bmN0aW9uICh3b3JkQXJyYXkpIHtcblx0ICAgICAgICAgICAgdHJ5IHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQoZXNjYXBlKExhdGluMS5zdHJpbmdpZnkod29yZEFycmF5KSkpO1xuXHQgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG5cdCAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ01hbGZvcm1lZCBVVEYtOCBkYXRhJyk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29udmVydHMgYSBVVEYtOCBzdHJpbmcgdG8gYSB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHV0ZjhTdHIgVGhlIFVURi04IHN0cmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIHdvcmQgYXJyYXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciB3b3JkQXJyYXkgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZSh1dGY4U3RyaW5nKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBwYXJzZTogZnVuY3Rpb24gKHV0ZjhTdHIpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIExhdGluMS5wYXJzZSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQodXRmOFN0cikpKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXG5cdCAgICAvKipcblx0ICAgICAqIEFic3RyYWN0IGJ1ZmZlcmVkIGJsb2NrIGFsZ29yaXRobSB0ZW1wbGF0ZS5cblx0ICAgICAqXG5cdCAgICAgKiBUaGUgcHJvcGVydHkgYmxvY2tTaXplIG11c3QgYmUgaW1wbGVtZW50ZWQgaW4gYSBjb25jcmV0ZSBzdWJ0eXBlLlxuXHQgICAgICpcblx0ICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBfbWluQnVmZmVyU2l6ZSBUaGUgbnVtYmVyIG9mIGJsb2NrcyB0aGF0IHNob3VsZCBiZSBrZXB0IHVucHJvY2Vzc2VkIGluIHRoZSBidWZmZXIuIERlZmF1bHQ6IDBcblx0ICAgICAqL1xuXHQgICAgdmFyIEJ1ZmZlcmVkQmxvY2tBbGdvcml0aG0gPSBDX2xpYi5CdWZmZXJlZEJsb2NrQWxnb3JpdGhtID0gQmFzZS5leHRlbmQoe1xuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIFJlc2V0cyB0aGlzIGJsb2NrIGFsZ29yaXRobSdzIGRhdGEgYnVmZmVyIHRvIGl0cyBpbml0aWFsIHN0YXRlLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICBidWZmZXJlZEJsb2NrQWxnb3JpdGhtLnJlc2V0KCk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgcmVzZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgLy8gSW5pdGlhbCB2YWx1ZXNcblx0ICAgICAgICAgICAgdGhpcy5fZGF0YSA9IG5ldyBXb3JkQXJyYXkuaW5pdCgpO1xuXHQgICAgICAgICAgICB0aGlzLl9uRGF0YUJ5dGVzID0gMDtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQWRkcyBuZXcgZGF0YSB0byB0aGlzIGJsb2NrIGFsZ29yaXRobSdzIGJ1ZmZlci5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gZGF0YSBUaGUgZGF0YSB0byBhcHBlbmQuIFN0cmluZ3MgYXJlIGNvbnZlcnRlZCB0byBhIFdvcmRBcnJheSB1c2luZyBVVEYtOC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgYnVmZmVyZWRCbG9ja0FsZ29yaXRobS5fYXBwZW5kKCdkYXRhJyk7XG5cdCAgICAgICAgICogICAgIGJ1ZmZlcmVkQmxvY2tBbGdvcml0aG0uX2FwcGVuZCh3b3JkQXJyYXkpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIF9hcHBlbmQ6IGZ1bmN0aW9uIChkYXRhKSB7XG5cdCAgICAgICAgICAgIC8vIENvbnZlcnQgc3RyaW5nIHRvIFdvcmRBcnJheSwgZWxzZSBhc3N1bWUgV29yZEFycmF5IGFscmVhZHlcblx0ICAgICAgICAgICAgaWYgKHR5cGVvZiBkYXRhID09ICdzdHJpbmcnKSB7XG5cdCAgICAgICAgICAgICAgICBkYXRhID0gVXRmOC5wYXJzZShkYXRhKTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIEFwcGVuZFxuXHQgICAgICAgICAgICB0aGlzLl9kYXRhLmNvbmNhdChkYXRhKTtcblx0ICAgICAgICAgICAgdGhpcy5fbkRhdGFCeXRlcyArPSBkYXRhLnNpZ0J5dGVzO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBQcm9jZXNzZXMgYXZhaWxhYmxlIGRhdGEgYmxvY2tzLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogVGhpcyBtZXRob2QgaW52b2tlcyBfZG9Qcm9jZXNzQmxvY2sob2Zmc2V0KSwgd2hpY2ggbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBhIGNvbmNyZXRlIHN1YnR5cGUuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGRvRmx1c2ggV2hldGhlciBhbGwgYmxvY2tzIGFuZCBwYXJ0aWFsIGJsb2NrcyBzaG91bGQgYmUgcHJvY2Vzc2VkLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgcHJvY2Vzc2VkIGRhdGEuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBwcm9jZXNzZWREYXRhID0gYnVmZmVyZWRCbG9ja0FsZ29yaXRobS5fcHJvY2VzcygpO1xuXHQgICAgICAgICAqICAgICB2YXIgcHJvY2Vzc2VkRGF0YSA9IGJ1ZmZlcmVkQmxvY2tBbGdvcml0aG0uX3Byb2Nlc3MoISEnZmx1c2gnKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBfcHJvY2VzczogZnVuY3Rpb24gKGRvRmx1c2gpIHtcblx0ICAgICAgICAgICAgdmFyIHByb2Nlc3NlZFdvcmRzO1xuXG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIgZGF0YSA9IHRoaXMuX2RhdGE7XG5cdCAgICAgICAgICAgIHZhciBkYXRhV29yZHMgPSBkYXRhLndvcmRzO1xuXHQgICAgICAgICAgICB2YXIgZGF0YVNpZ0J5dGVzID0gZGF0YS5zaWdCeXRlcztcblx0ICAgICAgICAgICAgdmFyIGJsb2NrU2l6ZSA9IHRoaXMuYmxvY2tTaXplO1xuXHQgICAgICAgICAgICB2YXIgYmxvY2tTaXplQnl0ZXMgPSBibG9ja1NpemUgKiA0O1xuXG5cdCAgICAgICAgICAgIC8vIENvdW50IGJsb2NrcyByZWFkeVxuXHQgICAgICAgICAgICB2YXIgbkJsb2Nrc1JlYWR5ID0gZGF0YVNpZ0J5dGVzIC8gYmxvY2tTaXplQnl0ZXM7XG5cdCAgICAgICAgICAgIGlmIChkb0ZsdXNoKSB7XG5cdCAgICAgICAgICAgICAgICAvLyBSb3VuZCB1cCB0byBpbmNsdWRlIHBhcnRpYWwgYmxvY2tzXG5cdCAgICAgICAgICAgICAgICBuQmxvY2tzUmVhZHkgPSBNYXRoLmNlaWwobkJsb2Nrc1JlYWR5KTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIC8vIFJvdW5kIGRvd24gdG8gaW5jbHVkZSBvbmx5IGZ1bGwgYmxvY2tzLFxuXHQgICAgICAgICAgICAgICAgLy8gbGVzcyB0aGUgbnVtYmVyIG9mIGJsb2NrcyB0aGF0IG11c3QgcmVtYWluIGluIHRoZSBidWZmZXJcblx0ICAgICAgICAgICAgICAgIG5CbG9ja3NSZWFkeSA9IE1hdGgubWF4KChuQmxvY2tzUmVhZHkgfCAwKSAtIHRoaXMuX21pbkJ1ZmZlclNpemUsIDApO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gQ291bnQgd29yZHMgcmVhZHlcblx0ICAgICAgICAgICAgdmFyIG5Xb3Jkc1JlYWR5ID0gbkJsb2Nrc1JlYWR5ICogYmxvY2tTaXplO1xuXG5cdCAgICAgICAgICAgIC8vIENvdW50IGJ5dGVzIHJlYWR5XG5cdCAgICAgICAgICAgIHZhciBuQnl0ZXNSZWFkeSA9IE1hdGgubWluKG5Xb3Jkc1JlYWR5ICogNCwgZGF0YVNpZ0J5dGVzKTtcblxuXHQgICAgICAgICAgICAvLyBQcm9jZXNzIGJsb2Nrc1xuXHQgICAgICAgICAgICBpZiAobldvcmRzUmVhZHkpIHtcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIG9mZnNldCA9IDA7IG9mZnNldCA8IG5Xb3Jkc1JlYWR5OyBvZmZzZXQgKz0gYmxvY2tTaXplKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgLy8gUGVyZm9ybSBjb25jcmV0ZS1hbGdvcml0aG0gbG9naWNcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9kb1Byb2Nlc3NCbG9jayhkYXRhV29yZHMsIG9mZnNldCk7XG5cdCAgICAgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBwcm9jZXNzZWQgd29yZHNcblx0ICAgICAgICAgICAgICAgIHByb2Nlc3NlZFdvcmRzID0gZGF0YVdvcmRzLnNwbGljZSgwLCBuV29yZHNSZWFkeSk7XG5cdCAgICAgICAgICAgICAgICBkYXRhLnNpZ0J5dGVzIC09IG5CeXRlc1JlYWR5O1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gUmV0dXJuIHByb2Nlc3NlZCB3b3Jkc1xuXHQgICAgICAgICAgICByZXR1cm4gbmV3IFdvcmRBcnJheS5pbml0KHByb2Nlc3NlZFdvcmRzLCBuQnl0ZXNSZWFkeSk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENyZWF0ZXMgYSBjb3B5IG9mIHRoaXMgb2JqZWN0LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7T2JqZWN0fSBUaGUgY2xvbmUuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBjbG9uZSA9IGJ1ZmZlcmVkQmxvY2tBbGdvcml0aG0uY2xvbmUoKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBjbG9uZTogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgY2xvbmUgPSBCYXNlLmNsb25lLmNhbGwodGhpcyk7XG5cdCAgICAgICAgICAgIGNsb25lLl9kYXRhID0gdGhpcy5fZGF0YS5jbG9uZSgpO1xuXG5cdCAgICAgICAgICAgIHJldHVybiBjbG9uZTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgX21pbkJ1ZmZlclNpemU6IDBcblx0ICAgIH0pO1xuXG5cdCAgICAvKipcblx0ICAgICAqIEFic3RyYWN0IGhhc2hlciB0ZW1wbGF0ZS5cblx0ICAgICAqXG5cdCAgICAgKiBAcHJvcGVydHkge251bWJlcn0gYmxvY2tTaXplIFRoZSBudW1iZXIgb2YgMzItYml0IHdvcmRzIHRoaXMgaGFzaGVyIG9wZXJhdGVzIG9uLiBEZWZhdWx0OiAxNiAoNTEyIGJpdHMpXG5cdCAgICAgKi9cblx0ICAgIHZhciBIYXNoZXIgPSBDX2xpYi5IYXNoZXIgPSBCdWZmZXJlZEJsb2NrQWxnb3JpdGhtLmV4dGVuZCh7XG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29uZmlndXJhdGlvbiBvcHRpb25zLlxuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGNmZzogQmFzZS5leHRlbmQoKSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIEluaXRpYWxpemVzIGEgbmV3bHkgY3JlYXRlZCBoYXNoZXIuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gY2ZnIChPcHRpb25hbCkgVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byB1c2UgZm9yIHRoaXMgaGFzaCBjb21wdXRhdGlvbi5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIGhhc2hlciA9IENyeXB0b0pTLmFsZ28uU0hBMjU2LmNyZWF0ZSgpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGluaXQ6IGZ1bmN0aW9uIChjZmcpIHtcblx0ICAgICAgICAgICAgLy8gQXBwbHkgY29uZmlnIGRlZmF1bHRzXG5cdCAgICAgICAgICAgIHRoaXMuY2ZnID0gdGhpcy5jZmcuZXh0ZW5kKGNmZyk7XG5cblx0ICAgICAgICAgICAgLy8gU2V0IGluaXRpYWwgdmFsdWVzXG5cdCAgICAgICAgICAgIHRoaXMucmVzZXQoKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogUmVzZXRzIHRoaXMgaGFzaGVyIHRvIGl0cyBpbml0aWFsIHN0YXRlLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICBoYXNoZXIucmVzZXQoKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICByZXNldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAvLyBSZXNldCBkYXRhIGJ1ZmZlclxuXHQgICAgICAgICAgICBCdWZmZXJlZEJsb2NrQWxnb3JpdGhtLnJlc2V0LmNhbGwodGhpcyk7XG5cblx0ICAgICAgICAgICAgLy8gUGVyZm9ybSBjb25jcmV0ZS1oYXNoZXIgbG9naWNcblx0ICAgICAgICAgICAgdGhpcy5fZG9SZXNldCgpO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBVcGRhdGVzIHRoaXMgaGFzaGVyIHdpdGggYSBtZXNzYWdlLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBtZXNzYWdlVXBkYXRlIFRoZSBtZXNzYWdlIHRvIGFwcGVuZC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge0hhc2hlcn0gVGhpcyBoYXNoZXIuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIGhhc2hlci51cGRhdGUoJ21lc3NhZ2UnKTtcblx0ICAgICAgICAgKiAgICAgaGFzaGVyLnVwZGF0ZSh3b3JkQXJyYXkpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHVwZGF0ZTogZnVuY3Rpb24gKG1lc3NhZ2VVcGRhdGUpIHtcblx0ICAgICAgICAgICAgLy8gQXBwZW5kXG5cdCAgICAgICAgICAgIHRoaXMuX2FwcGVuZChtZXNzYWdlVXBkYXRlKTtcblxuXHQgICAgICAgICAgICAvLyBVcGRhdGUgdGhlIGhhc2hcblx0ICAgICAgICAgICAgdGhpcy5fcHJvY2VzcygpO1xuXG5cdCAgICAgICAgICAgIC8vIENoYWluYWJsZVxuXHQgICAgICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogRmluYWxpemVzIHRoZSBoYXNoIGNvbXB1dGF0aW9uLlxuXHQgICAgICAgICAqIE5vdGUgdGhhdCB0aGUgZmluYWxpemUgb3BlcmF0aW9uIGlzIGVmZmVjdGl2ZWx5IGEgZGVzdHJ1Y3RpdmUsIHJlYWQtb25jZSBvcGVyYXRpb24uXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IG1lc3NhZ2VVcGRhdGUgKE9wdGlvbmFsKSBBIGZpbmFsIG1lc3NhZ2UgdXBkYXRlLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgaGFzaC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIGhhc2ggPSBoYXNoZXIuZmluYWxpemUoKTtcblx0ICAgICAgICAgKiAgICAgdmFyIGhhc2ggPSBoYXNoZXIuZmluYWxpemUoJ21lc3NhZ2UnKTtcblx0ICAgICAgICAgKiAgICAgdmFyIGhhc2ggPSBoYXNoZXIuZmluYWxpemUod29yZEFycmF5KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBmaW5hbGl6ZTogZnVuY3Rpb24gKG1lc3NhZ2VVcGRhdGUpIHtcblx0ICAgICAgICAgICAgLy8gRmluYWwgbWVzc2FnZSB1cGRhdGVcblx0ICAgICAgICAgICAgaWYgKG1lc3NhZ2VVcGRhdGUpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2FwcGVuZChtZXNzYWdlVXBkYXRlKTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIFBlcmZvcm0gY29uY3JldGUtaGFzaGVyIGxvZ2ljXG5cdCAgICAgICAgICAgIHZhciBoYXNoID0gdGhpcy5fZG9GaW5hbGl6ZSgpO1xuXG5cdCAgICAgICAgICAgIHJldHVybiBoYXNoO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBibG9ja1NpemU6IDUxMi8zMixcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENyZWF0ZXMgYSBzaG9ydGN1dCBmdW5jdGlvbiB0byBhIGhhc2hlcidzIG9iamVjdCBpbnRlcmZhY2UuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge0hhc2hlcn0gaGFzaGVyIFRoZSBoYXNoZXIgdG8gY3JlYXRlIGEgaGVscGVyIGZvci5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge0Z1bmN0aW9ufSBUaGUgc2hvcnRjdXQgZnVuY3Rpb24uXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBTSEEyNTYgPSBDcnlwdG9KUy5saWIuSGFzaGVyLl9jcmVhdGVIZWxwZXIoQ3J5cHRvSlMuYWxnby5TSEEyNTYpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIF9jcmVhdGVIZWxwZXI6IGZ1bmN0aW9uIChoYXNoZXIpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChtZXNzYWdlLCBjZmcpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBuZXcgaGFzaGVyLmluaXQoY2ZnKS5maW5hbGl6ZShtZXNzYWdlKTtcblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ3JlYXRlcyBhIHNob3J0Y3V0IGZ1bmN0aW9uIHRvIHRoZSBITUFDJ3Mgb2JqZWN0IGludGVyZmFjZS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7SGFzaGVyfSBoYXNoZXIgVGhlIGhhc2hlciB0byB1c2UgaW4gdGhpcyBITUFDIGhlbHBlci5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge0Z1bmN0aW9ufSBUaGUgc2hvcnRjdXQgZnVuY3Rpb24uXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBIbWFjU0hBMjU2ID0gQ3J5cHRvSlMubGliLkhhc2hlci5fY3JlYXRlSG1hY0hlbHBlcihDcnlwdG9KUy5hbGdvLlNIQTI1Nik7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgX2NyZWF0ZUhtYWNIZWxwZXI6IGZ1bmN0aW9uIChoYXNoZXIpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChtZXNzYWdlLCBrZXkpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQ19hbGdvLkhNQUMuaW5pdChoYXNoZXIsIGtleSkuZmluYWxpemUobWVzc2FnZSk7XG5cdCAgICAgICAgICAgIH07XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogQWxnb3JpdGhtIG5hbWVzcGFjZS5cblx0ICAgICAqL1xuXHQgICAgdmFyIENfYWxnbyA9IEMuYWxnbyA9IHt9O1xuXG5cdCAgICByZXR1cm4gQztcblx0fShNYXRoKSk7XG5cblxuXHQoZnVuY3Rpb24gKCkge1xuXHQgICAgLy8gU2hvcnRjdXRzXG5cdCAgICB2YXIgQyA9IENyeXB0b0pTO1xuXHQgICAgdmFyIENfbGliID0gQy5saWI7XG5cdCAgICB2YXIgV29yZEFycmF5ID0gQ19saWIuV29yZEFycmF5O1xuXHQgICAgdmFyIENfZW5jID0gQy5lbmM7XG5cblx0ICAgIC8qKlxuXHQgICAgICogQmFzZTY0IGVuY29kaW5nIHN0cmF0ZWd5LlxuXHQgICAgICovXG5cdCAgICB2YXIgQmFzZTY0ID0gQ19lbmMuQmFzZTY0ID0ge1xuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENvbnZlcnRzIGEgd29yZCBhcnJheSB0byBhIEJhc2U2NCBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheX0gd29yZEFycmF5IFRoZSB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7c3RyaW5nfSBUaGUgQmFzZTY0IHN0cmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBzdGF0aWNcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIGJhc2U2NFN0cmluZyA9IENyeXB0b0pTLmVuYy5CYXNlNjQuc3RyaW5naWZ5KHdvcmRBcnJheSk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgc3RyaW5naWZ5OiBmdW5jdGlvbiAod29yZEFycmF5KSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIgd29yZHMgPSB3b3JkQXJyYXkud29yZHM7XG5cdCAgICAgICAgICAgIHZhciBzaWdCeXRlcyA9IHdvcmRBcnJheS5zaWdCeXRlcztcblx0ICAgICAgICAgICAgdmFyIG1hcCA9IHRoaXMuX21hcDtcblxuXHQgICAgICAgICAgICAvLyBDbGFtcCBleGNlc3MgYml0c1xuXHQgICAgICAgICAgICB3b3JkQXJyYXkuY2xhbXAoKTtcblxuXHQgICAgICAgICAgICAvLyBDb252ZXJ0XG5cdCAgICAgICAgICAgIHZhciBiYXNlNjRDaGFycyA9IFtdO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNpZ0J5dGVzOyBpICs9IDMpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBieXRlMSA9ICh3b3Jkc1tpID4+PiAyXSAgICAgICA+Pj4gKDI0IC0gKGkgJSA0KSAqIDgpKSAgICAgICAmIDB4ZmY7XG5cdCAgICAgICAgICAgICAgICB2YXIgYnl0ZTIgPSAod29yZHNbKGkgKyAxKSA+Pj4gMl0gPj4+ICgyNCAtICgoaSArIDEpICUgNCkgKiA4KSkgJiAweGZmO1xuXHQgICAgICAgICAgICAgICAgdmFyIGJ5dGUzID0gKHdvcmRzWyhpICsgMikgPj4+IDJdID4+PiAoMjQgLSAoKGkgKyAyKSAlIDQpICogOCkpICYgMHhmZjtcblxuXHQgICAgICAgICAgICAgICAgdmFyIHRyaXBsZXQgPSAoYnl0ZTEgPDwgMTYpIHwgKGJ5dGUyIDw8IDgpIHwgYnl0ZTM7XG5cblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyAoaiA8IDQpICYmIChpICsgaiAqIDAuNzUgPCBzaWdCeXRlcyk7IGorKykge1xuXHQgICAgICAgICAgICAgICAgICAgIGJhc2U2NENoYXJzLnB1c2gobWFwLmNoYXJBdCgodHJpcGxldCA+Pj4gKDYgKiAoMyAtIGopKSkgJiAweDNmKSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBBZGQgcGFkZGluZ1xuXHQgICAgICAgICAgICB2YXIgcGFkZGluZ0NoYXIgPSBtYXAuY2hhckF0KDY0KTtcblx0ICAgICAgICAgICAgaWYgKHBhZGRpbmdDaGFyKSB7XG5cdCAgICAgICAgICAgICAgICB3aGlsZSAoYmFzZTY0Q2hhcnMubGVuZ3RoICUgNCkge1xuXHQgICAgICAgICAgICAgICAgICAgIGJhc2U2NENoYXJzLnB1c2gocGFkZGluZ0NoYXIpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgcmV0dXJuIGJhc2U2NENoYXJzLmpvaW4oJycpO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb252ZXJ0cyBhIEJhc2U2NCBzdHJpbmcgdG8gYSB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGJhc2U2NFN0ciBUaGUgQmFzZTY0IHN0cmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIHdvcmQgYXJyYXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciB3b3JkQXJyYXkgPSBDcnlwdG9KUy5lbmMuQmFzZTY0LnBhcnNlKGJhc2U2NFN0cmluZyk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgcGFyc2U6IGZ1bmN0aW9uIChiYXNlNjRTdHIpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBiYXNlNjRTdHJMZW5ndGggPSBiYXNlNjRTdHIubGVuZ3RoO1xuXHQgICAgICAgICAgICB2YXIgbWFwID0gdGhpcy5fbWFwO1xuXHQgICAgICAgICAgICB2YXIgcmV2ZXJzZU1hcCA9IHRoaXMuX3JldmVyc2VNYXA7XG5cblx0ICAgICAgICAgICAgaWYgKCFyZXZlcnNlTWFwKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV2ZXJzZU1hcCA9IHRoaXMuX3JldmVyc2VNYXAgPSBbXTtcblx0ICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG1hcC5sZW5ndGg7IGorKykge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICByZXZlcnNlTWFwW21hcC5jaGFyQ29kZUF0KGopXSA9IGo7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gSWdub3JlIHBhZGRpbmdcblx0ICAgICAgICAgICAgdmFyIHBhZGRpbmdDaGFyID0gbWFwLmNoYXJBdCg2NCk7XG5cdCAgICAgICAgICAgIGlmIChwYWRkaW5nQ2hhcikge1xuXHQgICAgICAgICAgICAgICAgdmFyIHBhZGRpbmdJbmRleCA9IGJhc2U2NFN0ci5pbmRleE9mKHBhZGRpbmdDaGFyKTtcblx0ICAgICAgICAgICAgICAgIGlmIChwYWRkaW5nSW5kZXggIT09IC0xKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgYmFzZTY0U3RyTGVuZ3RoID0gcGFkZGluZ0luZGV4O1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gQ29udmVydFxuXHQgICAgICAgICAgICByZXR1cm4gcGFyc2VMb29wKGJhc2U2NFN0ciwgYmFzZTY0U3RyTGVuZ3RoLCByZXZlcnNlTWFwKTtcblxuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBfbWFwOiAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz0nXG5cdCAgICB9O1xuXG5cdCAgICBmdW5jdGlvbiBwYXJzZUxvb3AoYmFzZTY0U3RyLCBiYXNlNjRTdHJMZW5ndGgsIHJldmVyc2VNYXApIHtcblx0ICAgICAgdmFyIHdvcmRzID0gW107XG5cdCAgICAgIHZhciBuQnl0ZXMgPSAwO1xuXHQgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJhc2U2NFN0ckxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICBpZiAoaSAlIDQpIHtcblx0ICAgICAgICAgICAgICB2YXIgYml0czEgPSByZXZlcnNlTWFwW2Jhc2U2NFN0ci5jaGFyQ29kZUF0KGkgLSAxKV0gPDwgKChpICUgNCkgKiAyKTtcblx0ICAgICAgICAgICAgICB2YXIgYml0czIgPSByZXZlcnNlTWFwW2Jhc2U2NFN0ci5jaGFyQ29kZUF0KGkpXSA+Pj4gKDYgLSAoaSAlIDQpICogMik7XG5cdCAgICAgICAgICAgICAgdmFyIGJpdHNDb21iaW5lZCA9IGJpdHMxIHwgYml0czI7XG5cdCAgICAgICAgICAgICAgd29yZHNbbkJ5dGVzID4+PiAyXSB8PSBiaXRzQ29tYmluZWQgPDwgKDI0IC0gKG5CeXRlcyAlIDQpICogOCk7XG5cdCAgICAgICAgICAgICAgbkJ5dGVzKys7XG5cdCAgICAgICAgICB9XG5cdCAgICAgIH1cblx0ICAgICAgcmV0dXJuIFdvcmRBcnJheS5jcmVhdGUod29yZHMsIG5CeXRlcyk7XG5cdCAgICB9XG5cdH0oKSk7XG5cblxuXHQoZnVuY3Rpb24gKE1hdGgpIHtcblx0ICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgdmFyIEMgPSBDcnlwdG9KUztcblx0ICAgIHZhciBDX2xpYiA9IEMubGliO1xuXHQgICAgdmFyIFdvcmRBcnJheSA9IENfbGliLldvcmRBcnJheTtcblx0ICAgIHZhciBIYXNoZXIgPSBDX2xpYi5IYXNoZXI7XG5cdCAgICB2YXIgQ19hbGdvID0gQy5hbGdvO1xuXG5cdCAgICAvLyBDb25zdGFudHMgdGFibGVcblx0ICAgIHZhciBUID0gW107XG5cblx0ICAgIC8vIENvbXB1dGUgY29uc3RhbnRzXG5cdCAgICAoZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNjQ7IGkrKykge1xuXHQgICAgICAgICAgICBUW2ldID0gKE1hdGguYWJzKE1hdGguc2luKGkgKyAxKSkgKiAweDEwMDAwMDAwMCkgfCAwO1xuXHQgICAgICAgIH1cblx0ICAgIH0oKSk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogTUQ1IGhhc2ggYWxnb3JpdGhtLlxuXHQgICAgICovXG5cdCAgICB2YXIgTUQ1ID0gQ19hbGdvLk1ENSA9IEhhc2hlci5leHRlbmQoe1xuXHQgICAgICAgIF9kb1Jlc2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2hhc2ggPSBuZXcgV29yZEFycmF5LmluaXQoW1xuXHQgICAgICAgICAgICAgICAgMHg2NzQ1MjMwMSwgMHhlZmNkYWI4OSxcblx0ICAgICAgICAgICAgICAgIDB4OThiYWRjZmUsIDB4MTAzMjU0NzZcblx0ICAgICAgICAgICAgXSk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIF9kb1Byb2Nlc3NCbG9jazogZnVuY3Rpb24gKE0sIG9mZnNldCkge1xuXHQgICAgICAgICAgICAvLyBTd2FwIGVuZGlhblxuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICAgICAgdmFyIG9mZnNldF9pID0gb2Zmc2V0ICsgaTtcblx0ICAgICAgICAgICAgICAgIHZhciBNX29mZnNldF9pID0gTVtvZmZzZXRfaV07XG5cblx0ICAgICAgICAgICAgICAgIE1bb2Zmc2V0X2ldID0gKFxuXHQgICAgICAgICAgICAgICAgICAgICgoKE1fb2Zmc2V0X2kgPDwgOCkgIHwgKE1fb2Zmc2V0X2kgPj4+IDI0KSkgJiAweDAwZmYwMGZmKSB8XG5cdCAgICAgICAgICAgICAgICAgICAgKCgoTV9vZmZzZXRfaSA8PCAyNCkgfCAoTV9vZmZzZXRfaSA+Pj4gOCkpICAmIDB4ZmYwMGZmMDApXG5cdCAgICAgICAgICAgICAgICApO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBIID0gdGhpcy5faGFzaC53b3JkcztcblxuXHQgICAgICAgICAgICB2YXIgTV9vZmZzZXRfMCAgPSBNW29mZnNldCArIDBdO1xuXHQgICAgICAgICAgICB2YXIgTV9vZmZzZXRfMSAgPSBNW29mZnNldCArIDFdO1xuXHQgICAgICAgICAgICB2YXIgTV9vZmZzZXRfMiAgPSBNW29mZnNldCArIDJdO1xuXHQgICAgICAgICAgICB2YXIgTV9vZmZzZXRfMyAgPSBNW29mZnNldCArIDNdO1xuXHQgICAgICAgICAgICB2YXIgTV9vZmZzZXRfNCAgPSBNW29mZnNldCArIDRdO1xuXHQgICAgICAgICAgICB2YXIgTV9vZmZzZXRfNSAgPSBNW29mZnNldCArIDVdO1xuXHQgICAgICAgICAgICB2YXIgTV9vZmZzZXRfNiAgPSBNW29mZnNldCArIDZdO1xuXHQgICAgICAgICAgICB2YXIgTV9vZmZzZXRfNyAgPSBNW29mZnNldCArIDddO1xuXHQgICAgICAgICAgICB2YXIgTV9vZmZzZXRfOCAgPSBNW29mZnNldCArIDhdO1xuXHQgICAgICAgICAgICB2YXIgTV9vZmZzZXRfOSAgPSBNW29mZnNldCArIDldO1xuXHQgICAgICAgICAgICB2YXIgTV9vZmZzZXRfMTAgPSBNW29mZnNldCArIDEwXTtcblx0ICAgICAgICAgICAgdmFyIE1fb2Zmc2V0XzExID0gTVtvZmZzZXQgKyAxMV07XG5cdCAgICAgICAgICAgIHZhciBNX29mZnNldF8xMiA9IE1bb2Zmc2V0ICsgMTJdO1xuXHQgICAgICAgICAgICB2YXIgTV9vZmZzZXRfMTMgPSBNW29mZnNldCArIDEzXTtcblx0ICAgICAgICAgICAgdmFyIE1fb2Zmc2V0XzE0ID0gTVtvZmZzZXQgKyAxNF07XG5cdCAgICAgICAgICAgIHZhciBNX29mZnNldF8xNSA9IE1bb2Zmc2V0ICsgMTVdO1xuXG5cdCAgICAgICAgICAgIC8vIFdvcmtpbmcgdmFyaWFsYmVzXG5cdCAgICAgICAgICAgIHZhciBhID0gSFswXTtcblx0ICAgICAgICAgICAgdmFyIGIgPSBIWzFdO1xuXHQgICAgICAgICAgICB2YXIgYyA9IEhbMl07XG5cdCAgICAgICAgICAgIHZhciBkID0gSFszXTtcblxuXHQgICAgICAgICAgICAvLyBDb21wdXRhdGlvblxuXHQgICAgICAgICAgICBhID0gRkYoYSwgYiwgYywgZCwgTV9vZmZzZXRfMCwgIDcsICBUWzBdKTtcblx0ICAgICAgICAgICAgZCA9IEZGKGQsIGEsIGIsIGMsIE1fb2Zmc2V0XzEsICAxMiwgVFsxXSk7XG5cdCAgICAgICAgICAgIGMgPSBGRihjLCBkLCBhLCBiLCBNX29mZnNldF8yLCAgMTcsIFRbMl0pO1xuXHQgICAgICAgICAgICBiID0gRkYoYiwgYywgZCwgYSwgTV9vZmZzZXRfMywgIDIyLCBUWzNdKTtcblx0ICAgICAgICAgICAgYSA9IEZGKGEsIGIsIGMsIGQsIE1fb2Zmc2V0XzQsICA3LCAgVFs0XSk7XG5cdCAgICAgICAgICAgIGQgPSBGRihkLCBhLCBiLCBjLCBNX29mZnNldF81LCAgMTIsIFRbNV0pO1xuXHQgICAgICAgICAgICBjID0gRkYoYywgZCwgYSwgYiwgTV9vZmZzZXRfNiwgIDE3LCBUWzZdKTtcblx0ICAgICAgICAgICAgYiA9IEZGKGIsIGMsIGQsIGEsIE1fb2Zmc2V0XzcsICAyMiwgVFs3XSk7XG5cdCAgICAgICAgICAgIGEgPSBGRihhLCBiLCBjLCBkLCBNX29mZnNldF84LCAgNywgIFRbOF0pO1xuXHQgICAgICAgICAgICBkID0gRkYoZCwgYSwgYiwgYywgTV9vZmZzZXRfOSwgIDEyLCBUWzldKTtcblx0ICAgICAgICAgICAgYyA9IEZGKGMsIGQsIGEsIGIsIE1fb2Zmc2V0XzEwLCAxNywgVFsxMF0pO1xuXHQgICAgICAgICAgICBiID0gRkYoYiwgYywgZCwgYSwgTV9vZmZzZXRfMTEsIDIyLCBUWzExXSk7XG5cdCAgICAgICAgICAgIGEgPSBGRihhLCBiLCBjLCBkLCBNX29mZnNldF8xMiwgNywgIFRbMTJdKTtcblx0ICAgICAgICAgICAgZCA9IEZGKGQsIGEsIGIsIGMsIE1fb2Zmc2V0XzEzLCAxMiwgVFsxM10pO1xuXHQgICAgICAgICAgICBjID0gRkYoYywgZCwgYSwgYiwgTV9vZmZzZXRfMTQsIDE3LCBUWzE0XSk7XG5cdCAgICAgICAgICAgIGIgPSBGRihiLCBjLCBkLCBhLCBNX29mZnNldF8xNSwgMjIsIFRbMTVdKTtcblxuXHQgICAgICAgICAgICBhID0gR0coYSwgYiwgYywgZCwgTV9vZmZzZXRfMSwgIDUsICBUWzE2XSk7XG5cdCAgICAgICAgICAgIGQgPSBHRyhkLCBhLCBiLCBjLCBNX29mZnNldF82LCAgOSwgIFRbMTddKTtcblx0ICAgICAgICAgICAgYyA9IEdHKGMsIGQsIGEsIGIsIE1fb2Zmc2V0XzExLCAxNCwgVFsxOF0pO1xuXHQgICAgICAgICAgICBiID0gR0coYiwgYywgZCwgYSwgTV9vZmZzZXRfMCwgIDIwLCBUWzE5XSk7XG5cdCAgICAgICAgICAgIGEgPSBHRyhhLCBiLCBjLCBkLCBNX29mZnNldF81LCAgNSwgIFRbMjBdKTtcblx0ICAgICAgICAgICAgZCA9IEdHKGQsIGEsIGIsIGMsIE1fb2Zmc2V0XzEwLCA5LCAgVFsyMV0pO1xuXHQgICAgICAgICAgICBjID0gR0coYywgZCwgYSwgYiwgTV9vZmZzZXRfMTUsIDE0LCBUWzIyXSk7XG5cdCAgICAgICAgICAgIGIgPSBHRyhiLCBjLCBkLCBhLCBNX29mZnNldF80LCAgMjAsIFRbMjNdKTtcblx0ICAgICAgICAgICAgYSA9IEdHKGEsIGIsIGMsIGQsIE1fb2Zmc2V0XzksICA1LCAgVFsyNF0pO1xuXHQgICAgICAgICAgICBkID0gR0coZCwgYSwgYiwgYywgTV9vZmZzZXRfMTQsIDksICBUWzI1XSk7XG5cdCAgICAgICAgICAgIGMgPSBHRyhjLCBkLCBhLCBiLCBNX29mZnNldF8zLCAgMTQsIFRbMjZdKTtcblx0ICAgICAgICAgICAgYiA9IEdHKGIsIGMsIGQsIGEsIE1fb2Zmc2V0XzgsICAyMCwgVFsyN10pO1xuXHQgICAgICAgICAgICBhID0gR0coYSwgYiwgYywgZCwgTV9vZmZzZXRfMTMsIDUsICBUWzI4XSk7XG5cdCAgICAgICAgICAgIGQgPSBHRyhkLCBhLCBiLCBjLCBNX29mZnNldF8yLCAgOSwgIFRbMjldKTtcblx0ICAgICAgICAgICAgYyA9IEdHKGMsIGQsIGEsIGIsIE1fb2Zmc2V0XzcsICAxNCwgVFszMF0pO1xuXHQgICAgICAgICAgICBiID0gR0coYiwgYywgZCwgYSwgTV9vZmZzZXRfMTIsIDIwLCBUWzMxXSk7XG5cblx0ICAgICAgICAgICAgYSA9IEhIKGEsIGIsIGMsIGQsIE1fb2Zmc2V0XzUsICA0LCAgVFszMl0pO1xuXHQgICAgICAgICAgICBkID0gSEgoZCwgYSwgYiwgYywgTV9vZmZzZXRfOCwgIDExLCBUWzMzXSk7XG5cdCAgICAgICAgICAgIGMgPSBISChjLCBkLCBhLCBiLCBNX29mZnNldF8xMSwgMTYsIFRbMzRdKTtcblx0ICAgICAgICAgICAgYiA9IEhIKGIsIGMsIGQsIGEsIE1fb2Zmc2V0XzE0LCAyMywgVFszNV0pO1xuXHQgICAgICAgICAgICBhID0gSEgoYSwgYiwgYywgZCwgTV9vZmZzZXRfMSwgIDQsICBUWzM2XSk7XG5cdCAgICAgICAgICAgIGQgPSBISChkLCBhLCBiLCBjLCBNX29mZnNldF80LCAgMTEsIFRbMzddKTtcblx0ICAgICAgICAgICAgYyA9IEhIKGMsIGQsIGEsIGIsIE1fb2Zmc2V0XzcsICAxNiwgVFszOF0pO1xuXHQgICAgICAgICAgICBiID0gSEgoYiwgYywgZCwgYSwgTV9vZmZzZXRfMTAsIDIzLCBUWzM5XSk7XG5cdCAgICAgICAgICAgIGEgPSBISChhLCBiLCBjLCBkLCBNX29mZnNldF8xMywgNCwgIFRbNDBdKTtcblx0ICAgICAgICAgICAgZCA9IEhIKGQsIGEsIGIsIGMsIE1fb2Zmc2V0XzAsICAxMSwgVFs0MV0pO1xuXHQgICAgICAgICAgICBjID0gSEgoYywgZCwgYSwgYiwgTV9vZmZzZXRfMywgIDE2LCBUWzQyXSk7XG5cdCAgICAgICAgICAgIGIgPSBISChiLCBjLCBkLCBhLCBNX29mZnNldF82LCAgMjMsIFRbNDNdKTtcblx0ICAgICAgICAgICAgYSA9IEhIKGEsIGIsIGMsIGQsIE1fb2Zmc2V0XzksICA0LCAgVFs0NF0pO1xuXHQgICAgICAgICAgICBkID0gSEgoZCwgYSwgYiwgYywgTV9vZmZzZXRfMTIsIDExLCBUWzQ1XSk7XG5cdCAgICAgICAgICAgIGMgPSBISChjLCBkLCBhLCBiLCBNX29mZnNldF8xNSwgMTYsIFRbNDZdKTtcblx0ICAgICAgICAgICAgYiA9IEhIKGIsIGMsIGQsIGEsIE1fb2Zmc2V0XzIsICAyMywgVFs0N10pO1xuXG5cdCAgICAgICAgICAgIGEgPSBJSShhLCBiLCBjLCBkLCBNX29mZnNldF8wLCAgNiwgIFRbNDhdKTtcblx0ICAgICAgICAgICAgZCA9IElJKGQsIGEsIGIsIGMsIE1fb2Zmc2V0XzcsICAxMCwgVFs0OV0pO1xuXHQgICAgICAgICAgICBjID0gSUkoYywgZCwgYSwgYiwgTV9vZmZzZXRfMTQsIDE1LCBUWzUwXSk7XG5cdCAgICAgICAgICAgIGIgPSBJSShiLCBjLCBkLCBhLCBNX29mZnNldF81LCAgMjEsIFRbNTFdKTtcblx0ICAgICAgICAgICAgYSA9IElJKGEsIGIsIGMsIGQsIE1fb2Zmc2V0XzEyLCA2LCAgVFs1Ml0pO1xuXHQgICAgICAgICAgICBkID0gSUkoZCwgYSwgYiwgYywgTV9vZmZzZXRfMywgIDEwLCBUWzUzXSk7XG5cdCAgICAgICAgICAgIGMgPSBJSShjLCBkLCBhLCBiLCBNX29mZnNldF8xMCwgMTUsIFRbNTRdKTtcblx0ICAgICAgICAgICAgYiA9IElJKGIsIGMsIGQsIGEsIE1fb2Zmc2V0XzEsICAyMSwgVFs1NV0pO1xuXHQgICAgICAgICAgICBhID0gSUkoYSwgYiwgYywgZCwgTV9vZmZzZXRfOCwgIDYsICBUWzU2XSk7XG5cdCAgICAgICAgICAgIGQgPSBJSShkLCBhLCBiLCBjLCBNX29mZnNldF8xNSwgMTAsIFRbNTddKTtcblx0ICAgICAgICAgICAgYyA9IElJKGMsIGQsIGEsIGIsIE1fb2Zmc2V0XzYsICAxNSwgVFs1OF0pO1xuXHQgICAgICAgICAgICBiID0gSUkoYiwgYywgZCwgYSwgTV9vZmZzZXRfMTMsIDIxLCBUWzU5XSk7XG5cdCAgICAgICAgICAgIGEgPSBJSShhLCBiLCBjLCBkLCBNX29mZnNldF80LCAgNiwgIFRbNjBdKTtcblx0ICAgICAgICAgICAgZCA9IElJKGQsIGEsIGIsIGMsIE1fb2Zmc2V0XzExLCAxMCwgVFs2MV0pO1xuXHQgICAgICAgICAgICBjID0gSUkoYywgZCwgYSwgYiwgTV9vZmZzZXRfMiwgIDE1LCBUWzYyXSk7XG5cdCAgICAgICAgICAgIGIgPSBJSShiLCBjLCBkLCBhLCBNX29mZnNldF85LCAgMjEsIFRbNjNdKTtcblxuXHQgICAgICAgICAgICAvLyBJbnRlcm1lZGlhdGUgaGFzaCB2YWx1ZVxuXHQgICAgICAgICAgICBIWzBdID0gKEhbMF0gKyBhKSB8IDA7XG5cdCAgICAgICAgICAgIEhbMV0gPSAoSFsxXSArIGIpIHwgMDtcblx0ICAgICAgICAgICAgSFsyXSA9IChIWzJdICsgYykgfCAwO1xuXHQgICAgICAgICAgICBIWzNdID0gKEhbM10gKyBkKSB8IDA7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIF9kb0ZpbmFsaXplOiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIgZGF0YSA9IHRoaXMuX2RhdGE7XG5cdCAgICAgICAgICAgIHZhciBkYXRhV29yZHMgPSBkYXRhLndvcmRzO1xuXG5cdCAgICAgICAgICAgIHZhciBuQml0c1RvdGFsID0gdGhpcy5fbkRhdGFCeXRlcyAqIDg7XG5cdCAgICAgICAgICAgIHZhciBuQml0c0xlZnQgPSBkYXRhLnNpZ0J5dGVzICogODtcblxuXHQgICAgICAgICAgICAvLyBBZGQgcGFkZGluZ1xuXHQgICAgICAgICAgICBkYXRhV29yZHNbbkJpdHNMZWZ0ID4+PiA1XSB8PSAweDgwIDw8ICgyNCAtIG5CaXRzTGVmdCAlIDMyKTtcblxuXHQgICAgICAgICAgICB2YXIgbkJpdHNUb3RhbEggPSBNYXRoLmZsb29yKG5CaXRzVG90YWwgLyAweDEwMDAwMDAwMCk7XG5cdCAgICAgICAgICAgIHZhciBuQml0c1RvdGFsTCA9IG5CaXRzVG90YWw7XG5cdCAgICAgICAgICAgIGRhdGFXb3Jkc1soKChuQml0c0xlZnQgKyA2NCkgPj4+IDkpIDw8IDQpICsgMTVdID0gKFxuXHQgICAgICAgICAgICAgICAgKCgobkJpdHNUb3RhbEggPDwgOCkgIHwgKG5CaXRzVG90YWxIID4+PiAyNCkpICYgMHgwMGZmMDBmZikgfFxuXHQgICAgICAgICAgICAgICAgKCgobkJpdHNUb3RhbEggPDwgMjQpIHwgKG5CaXRzVG90YWxIID4+PiA4KSkgICYgMHhmZjAwZmYwMClcblx0ICAgICAgICAgICAgKTtcblx0ICAgICAgICAgICAgZGF0YVdvcmRzWygoKG5CaXRzTGVmdCArIDY0KSA+Pj4gOSkgPDwgNCkgKyAxNF0gPSAoXG5cdCAgICAgICAgICAgICAgICAoKChuQml0c1RvdGFsTCA8PCA4KSAgfCAobkJpdHNUb3RhbEwgPj4+IDI0KSkgJiAweDAwZmYwMGZmKSB8XG5cdCAgICAgICAgICAgICAgICAoKChuQml0c1RvdGFsTCA8PCAyNCkgfCAobkJpdHNUb3RhbEwgPj4+IDgpKSAgJiAweGZmMDBmZjAwKVxuXHQgICAgICAgICAgICApO1xuXG5cdCAgICAgICAgICAgIGRhdGEuc2lnQnl0ZXMgPSAoZGF0YVdvcmRzLmxlbmd0aCArIDEpICogNDtcblxuXHQgICAgICAgICAgICAvLyBIYXNoIGZpbmFsIGJsb2Nrc1xuXHQgICAgICAgICAgICB0aGlzLl9wcm9jZXNzKCk7XG5cblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBoYXNoID0gdGhpcy5faGFzaDtcblx0ICAgICAgICAgICAgdmFyIEggPSBoYXNoLndvcmRzO1xuXG5cdCAgICAgICAgICAgIC8vIFN3YXAgZW5kaWFuXG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAvLyBTaG9ydGN1dFxuXHQgICAgICAgICAgICAgICAgdmFyIEhfaSA9IEhbaV07XG5cblx0ICAgICAgICAgICAgICAgIEhbaV0gPSAoKChIX2kgPDwgOCkgIHwgKEhfaSA+Pj4gMjQpKSAmIDB4MDBmZjAwZmYpIHxcblx0ICAgICAgICAgICAgICAgICAgICAgICAoKChIX2kgPDwgMjQpIHwgKEhfaSA+Pj4gOCkpICAmIDB4ZmYwMGZmMDApO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gUmV0dXJuIGZpbmFsIGNvbXB1dGVkIGhhc2hcblx0ICAgICAgICAgICAgcmV0dXJuIGhhc2g7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBjbG9uZSA9IEhhc2hlci5jbG9uZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgICAgICBjbG9uZS5faGFzaCA9IHRoaXMuX2hhc2guY2xvbmUoKTtcblxuXHQgICAgICAgICAgICByZXR1cm4gY2xvbmU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cblx0ICAgIGZ1bmN0aW9uIEZGKGEsIGIsIGMsIGQsIHgsIHMsIHQpIHtcblx0ICAgICAgICB2YXIgbiA9IGEgKyAoKGIgJiBjKSB8ICh+YiAmIGQpKSArIHggKyB0O1xuXHQgICAgICAgIHJldHVybiAoKG4gPDwgcykgfCAobiA+Pj4gKDMyIC0gcykpKSArIGI7XG5cdCAgICB9XG5cblx0ICAgIGZ1bmN0aW9uIEdHKGEsIGIsIGMsIGQsIHgsIHMsIHQpIHtcblx0ICAgICAgICB2YXIgbiA9IGEgKyAoKGIgJiBkKSB8IChjICYgfmQpKSArIHggKyB0O1xuXHQgICAgICAgIHJldHVybiAoKG4gPDwgcykgfCAobiA+Pj4gKDMyIC0gcykpKSArIGI7XG5cdCAgICB9XG5cblx0ICAgIGZ1bmN0aW9uIEhIKGEsIGIsIGMsIGQsIHgsIHMsIHQpIHtcblx0ICAgICAgICB2YXIgbiA9IGEgKyAoYiBeIGMgXiBkKSArIHggKyB0O1xuXHQgICAgICAgIHJldHVybiAoKG4gPDwgcykgfCAobiA+Pj4gKDMyIC0gcykpKSArIGI7XG5cdCAgICB9XG5cblx0ICAgIGZ1bmN0aW9uIElJKGEsIGIsIGMsIGQsIHgsIHMsIHQpIHtcblx0ICAgICAgICB2YXIgbiA9IGEgKyAoYyBeIChiIHwgfmQpKSArIHggKyB0O1xuXHQgICAgICAgIHJldHVybiAoKG4gPDwgcykgfCAobiA+Pj4gKDMyIC0gcykpKSArIGI7XG5cdCAgICB9XG5cblx0ICAgIC8qKlxuXHQgICAgICogU2hvcnRjdXQgZnVuY3Rpb24gdG8gdGhlIGhhc2hlcidzIG9iamVjdCBpbnRlcmZhY2UuXG5cdCAgICAgKlxuXHQgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBtZXNzYWdlIFRoZSBtZXNzYWdlIHRvIGhhc2guXG5cdCAgICAgKlxuXHQgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgaGFzaC5cblx0ICAgICAqXG5cdCAgICAgKiBAc3RhdGljXG5cdCAgICAgKlxuXHQgICAgICogQGV4YW1wbGVcblx0ICAgICAqXG5cdCAgICAgKiAgICAgdmFyIGhhc2ggPSBDcnlwdG9KUy5NRDUoJ21lc3NhZ2UnKTtcblx0ICAgICAqICAgICB2YXIgaGFzaCA9IENyeXB0b0pTLk1ENSh3b3JkQXJyYXkpO1xuXHQgICAgICovXG5cdCAgICBDLk1ENSA9IEhhc2hlci5fY3JlYXRlSGVscGVyKE1ENSk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogU2hvcnRjdXQgZnVuY3Rpb24gdG8gdGhlIEhNQUMncyBvYmplY3QgaW50ZXJmYWNlLlxuXHQgICAgICpcblx0ICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gbWVzc2FnZSBUaGUgbWVzc2FnZSB0byBoYXNoLlxuXHQgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBrZXkgVGhlIHNlY3JldCBrZXkuXG5cdCAgICAgKlxuXHQgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgSE1BQy5cblx0ICAgICAqXG5cdCAgICAgKiBAc3RhdGljXG5cdCAgICAgKlxuXHQgICAgICogQGV4YW1wbGVcblx0ICAgICAqXG5cdCAgICAgKiAgICAgdmFyIGhtYWMgPSBDcnlwdG9KUy5IbWFjTUQ1KG1lc3NhZ2UsIGtleSk7XG5cdCAgICAgKi9cblx0ICAgIEMuSG1hY01ENSA9IEhhc2hlci5fY3JlYXRlSG1hY0hlbHBlcihNRDUpO1xuXHR9KE1hdGgpKTtcblxuXG5cdChmdW5jdGlvbiAoKSB7XG5cdCAgICAvLyBTaG9ydGN1dHNcblx0ICAgIHZhciBDID0gQ3J5cHRvSlM7XG5cdCAgICB2YXIgQ19saWIgPSBDLmxpYjtcblx0ICAgIHZhciBXb3JkQXJyYXkgPSBDX2xpYi5Xb3JkQXJyYXk7XG5cdCAgICB2YXIgSGFzaGVyID0gQ19saWIuSGFzaGVyO1xuXHQgICAgdmFyIENfYWxnbyA9IEMuYWxnbztcblxuXHQgICAgLy8gUmV1c2FibGUgb2JqZWN0XG5cdCAgICB2YXIgVyA9IFtdO1xuXG5cdCAgICAvKipcblx0ICAgICAqIFNIQS0xIGhhc2ggYWxnb3JpdGhtLlxuXHQgICAgICovXG5cdCAgICB2YXIgU0hBMSA9IENfYWxnby5TSEExID0gSGFzaGVyLmV4dGVuZCh7XG5cdCAgICAgICAgX2RvUmVzZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdGhpcy5faGFzaCA9IG5ldyBXb3JkQXJyYXkuaW5pdChbXG5cdCAgICAgICAgICAgICAgICAweDY3NDUyMzAxLCAweGVmY2RhYjg5LFxuXHQgICAgICAgICAgICAgICAgMHg5OGJhZGNmZSwgMHgxMDMyNTQ3Nixcblx0ICAgICAgICAgICAgICAgIDB4YzNkMmUxZjBcblx0ICAgICAgICAgICAgXSk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIF9kb1Byb2Nlc3NCbG9jazogZnVuY3Rpb24gKE0sIG9mZnNldCkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dFxuXHQgICAgICAgICAgICB2YXIgSCA9IHRoaXMuX2hhc2gud29yZHM7XG5cblx0ICAgICAgICAgICAgLy8gV29ya2luZyB2YXJpYWJsZXNcblx0ICAgICAgICAgICAgdmFyIGEgPSBIWzBdO1xuXHQgICAgICAgICAgICB2YXIgYiA9IEhbMV07XG5cdCAgICAgICAgICAgIHZhciBjID0gSFsyXTtcblx0ICAgICAgICAgICAgdmFyIGQgPSBIWzNdO1xuXHQgICAgICAgICAgICB2YXIgZSA9IEhbNF07XG5cblx0ICAgICAgICAgICAgLy8gQ29tcHV0YXRpb25cblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA4MDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAoaSA8IDE2KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgV1tpXSA9IE1bb2Zmc2V0ICsgaV0gfCAwO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgbiA9IFdbaSAtIDNdIF4gV1tpIC0gOF0gXiBXW2kgLSAxNF0gXiBXW2kgLSAxNl07XG5cdCAgICAgICAgICAgICAgICAgICAgV1tpXSA9IChuIDw8IDEpIHwgKG4gPj4+IDMxKTtcblx0ICAgICAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAgICAgdmFyIHQgPSAoKGEgPDwgNSkgfCAoYSA+Pj4gMjcpKSArIGUgKyBXW2ldO1xuXHQgICAgICAgICAgICAgICAgaWYgKGkgPCAyMCkge1xuXHQgICAgICAgICAgICAgICAgICAgIHQgKz0gKChiICYgYykgfCAofmIgJiBkKSkgKyAweDVhODI3OTk5O1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpIDwgNDApIHtcblx0ICAgICAgICAgICAgICAgICAgICB0ICs9IChiIF4gYyBeIGQpICsgMHg2ZWQ5ZWJhMTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaSA8IDYwKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdCArPSAoKGIgJiBjKSB8IChiICYgZCkgfCAoYyAmIGQpKSAtIDB4NzBlNDQzMjQ7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2UgLyogaWYgKGkgPCA4MCkgKi8ge1xuXHQgICAgICAgICAgICAgICAgICAgIHQgKz0gKGIgXiBjIF4gZCkgLSAweDM1OWQzZTJhO1xuXHQgICAgICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgICAgICBlID0gZDtcblx0ICAgICAgICAgICAgICAgIGQgPSBjO1xuXHQgICAgICAgICAgICAgICAgYyA9IChiIDw8IDMwKSB8IChiID4+PiAyKTtcblx0ICAgICAgICAgICAgICAgIGIgPSBhO1xuXHQgICAgICAgICAgICAgICAgYSA9IHQ7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBJbnRlcm1lZGlhdGUgaGFzaCB2YWx1ZVxuXHQgICAgICAgICAgICBIWzBdID0gKEhbMF0gKyBhKSB8IDA7XG5cdCAgICAgICAgICAgIEhbMV0gPSAoSFsxXSArIGIpIHwgMDtcblx0ICAgICAgICAgICAgSFsyXSA9IChIWzJdICsgYykgfCAwO1xuXHQgICAgICAgICAgICBIWzNdID0gKEhbM10gKyBkKSB8IDA7XG5cdCAgICAgICAgICAgIEhbNF0gPSAoSFs0XSArIGUpIHwgMDtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgX2RvRmluYWxpemU6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBkYXRhID0gdGhpcy5fZGF0YTtcblx0ICAgICAgICAgICAgdmFyIGRhdGFXb3JkcyA9IGRhdGEud29yZHM7XG5cblx0ICAgICAgICAgICAgdmFyIG5CaXRzVG90YWwgPSB0aGlzLl9uRGF0YUJ5dGVzICogODtcblx0ICAgICAgICAgICAgdmFyIG5CaXRzTGVmdCA9IGRhdGEuc2lnQnl0ZXMgKiA4O1xuXG5cdCAgICAgICAgICAgIC8vIEFkZCBwYWRkaW5nXG5cdCAgICAgICAgICAgIGRhdGFXb3Jkc1tuQml0c0xlZnQgPj4+IDVdIHw9IDB4ODAgPDwgKDI0IC0gbkJpdHNMZWZ0ICUgMzIpO1xuXHQgICAgICAgICAgICBkYXRhV29yZHNbKCgobkJpdHNMZWZ0ICsgNjQpID4+PiA5KSA8PCA0KSArIDE0XSA9IE1hdGguZmxvb3IobkJpdHNUb3RhbCAvIDB4MTAwMDAwMDAwKTtcblx0ICAgICAgICAgICAgZGF0YVdvcmRzWygoKG5CaXRzTGVmdCArIDY0KSA+Pj4gOSkgPDwgNCkgKyAxNV0gPSBuQml0c1RvdGFsO1xuXHQgICAgICAgICAgICBkYXRhLnNpZ0J5dGVzID0gZGF0YVdvcmRzLmxlbmd0aCAqIDQ7XG5cblx0ICAgICAgICAgICAgLy8gSGFzaCBmaW5hbCBibG9ja3Ncblx0ICAgICAgICAgICAgdGhpcy5fcHJvY2VzcygpO1xuXG5cdCAgICAgICAgICAgIC8vIFJldHVybiBmaW5hbCBjb21wdXRlZCBoYXNoXG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9oYXNoO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBjbG9uZTogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgY2xvbmUgPSBIYXNoZXIuY2xvbmUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAgICAgY2xvbmUuX2hhc2ggPSB0aGlzLl9oYXNoLmNsb25lKCk7XG5cblx0ICAgICAgICAgICAgcmV0dXJuIGNsb25lO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXG5cdCAgICAvKipcblx0ICAgICAqIFNob3J0Y3V0IGZ1bmN0aW9uIHRvIHRoZSBoYXNoZXIncyBvYmplY3QgaW50ZXJmYWNlLlxuXHQgICAgICpcblx0ICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gbWVzc2FnZSBUaGUgbWVzc2FnZSB0byBoYXNoLlxuXHQgICAgICpcblx0ICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIGhhc2guXG5cdCAgICAgKlxuXHQgICAgICogQHN0YXRpY1xuXHQgICAgICpcblx0ICAgICAqIEBleGFtcGxlXG5cdCAgICAgKlxuXHQgICAgICogICAgIHZhciBoYXNoID0gQ3J5cHRvSlMuU0hBMSgnbWVzc2FnZScpO1xuXHQgICAgICogICAgIHZhciBoYXNoID0gQ3J5cHRvSlMuU0hBMSh3b3JkQXJyYXkpO1xuXHQgICAgICovXG5cdCAgICBDLlNIQTEgPSBIYXNoZXIuX2NyZWF0ZUhlbHBlcihTSEExKTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBTaG9ydGN1dCBmdW5jdGlvbiB0byB0aGUgSE1BQydzIG9iamVjdCBpbnRlcmZhY2UuXG5cdCAgICAgKlxuXHQgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBtZXNzYWdlIFRoZSBtZXNzYWdlIHRvIGhhc2guXG5cdCAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IGtleSBUaGUgc2VjcmV0IGtleS5cblx0ICAgICAqXG5cdCAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSBITUFDLlxuXHQgICAgICpcblx0ICAgICAqIEBzdGF0aWNcblx0ICAgICAqXG5cdCAgICAgKiBAZXhhbXBsZVxuXHQgICAgICpcblx0ICAgICAqICAgICB2YXIgaG1hYyA9IENyeXB0b0pTLkhtYWNTSEExKG1lc3NhZ2UsIGtleSk7XG5cdCAgICAgKi9cblx0ICAgIEMuSG1hY1NIQTEgPSBIYXNoZXIuX2NyZWF0ZUhtYWNIZWxwZXIoU0hBMSk7XG5cdH0oKSk7XG5cblxuXHQoZnVuY3Rpb24gKE1hdGgpIHtcblx0ICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgdmFyIEMgPSBDcnlwdG9KUztcblx0ICAgIHZhciBDX2xpYiA9IEMubGliO1xuXHQgICAgdmFyIFdvcmRBcnJheSA9IENfbGliLldvcmRBcnJheTtcblx0ICAgIHZhciBIYXNoZXIgPSBDX2xpYi5IYXNoZXI7XG5cdCAgICB2YXIgQ19hbGdvID0gQy5hbGdvO1xuXG5cdCAgICAvLyBJbml0aWFsaXphdGlvbiBhbmQgcm91bmQgY29uc3RhbnRzIHRhYmxlc1xuXHQgICAgdmFyIEggPSBbXTtcblx0ICAgIHZhciBLID0gW107XG5cblx0ICAgIC8vIENvbXB1dGUgY29uc3RhbnRzXG5cdCAgICAoZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGZ1bmN0aW9uIGlzUHJpbWUobikge1xuXHQgICAgICAgICAgICB2YXIgc3FydE4gPSBNYXRoLnNxcnQobik7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGZhY3RvciA9IDI7IGZhY3RvciA8PSBzcXJ0TjsgZmFjdG9yKyspIHtcblx0ICAgICAgICAgICAgICAgIGlmICghKG4gJSBmYWN0b3IpKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgcmV0dXJuIHRydWU7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgZnVuY3Rpb24gZ2V0RnJhY3Rpb25hbEJpdHMobikge1xuXHQgICAgICAgICAgICByZXR1cm4gKChuIC0gKG4gfCAwKSkgKiAweDEwMDAwMDAwMCkgfCAwO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHZhciBuID0gMjtcblx0ICAgICAgICB2YXIgblByaW1lID0gMDtcblx0ICAgICAgICB3aGlsZSAoblByaW1lIDwgNjQpIHtcblx0ICAgICAgICAgICAgaWYgKGlzUHJpbWUobikpIHtcblx0ICAgICAgICAgICAgICAgIGlmIChuUHJpbWUgPCA4KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgSFtuUHJpbWVdID0gZ2V0RnJhY3Rpb25hbEJpdHMoTWF0aC5wb3cobiwgMSAvIDIpKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIEtbblByaW1lXSA9IGdldEZyYWN0aW9uYWxCaXRzKE1hdGgucG93KG4sIDEgLyAzKSk7XG5cblx0ICAgICAgICAgICAgICAgIG5QcmltZSsrO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgbisrO1xuXHQgICAgICAgIH1cblx0ICAgIH0oKSk7XG5cblx0ICAgIC8vIFJldXNhYmxlIG9iamVjdFxuXHQgICAgdmFyIFcgPSBbXTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBTSEEtMjU2IGhhc2ggYWxnb3JpdGhtLlxuXHQgICAgICovXG5cdCAgICB2YXIgU0hBMjU2ID0gQ19hbGdvLlNIQTI1NiA9IEhhc2hlci5leHRlbmQoe1xuXHQgICAgICAgIF9kb1Jlc2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2hhc2ggPSBuZXcgV29yZEFycmF5LmluaXQoSC5zbGljZSgwKSk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIF9kb1Byb2Nlc3NCbG9jazogZnVuY3Rpb24gKE0sIG9mZnNldCkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dFxuXHQgICAgICAgICAgICB2YXIgSCA9IHRoaXMuX2hhc2gud29yZHM7XG5cblx0ICAgICAgICAgICAgLy8gV29ya2luZyB2YXJpYWJsZXNcblx0ICAgICAgICAgICAgdmFyIGEgPSBIWzBdO1xuXHQgICAgICAgICAgICB2YXIgYiA9IEhbMV07XG5cdCAgICAgICAgICAgIHZhciBjID0gSFsyXTtcblx0ICAgICAgICAgICAgdmFyIGQgPSBIWzNdO1xuXHQgICAgICAgICAgICB2YXIgZSA9IEhbNF07XG5cdCAgICAgICAgICAgIHZhciBmID0gSFs1XTtcblx0ICAgICAgICAgICAgdmFyIGcgPSBIWzZdO1xuXHQgICAgICAgICAgICB2YXIgaCA9IEhbN107XG5cblx0ICAgICAgICAgICAgLy8gQ29tcHV0YXRpb25cblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA2NDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAoaSA8IDE2KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgV1tpXSA9IE1bb2Zmc2V0ICsgaV0gfCAwO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgZ2FtbWEweCA9IFdbaSAtIDE1XTtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgZ2FtbWEwICA9ICgoZ2FtbWEweCA8PCAyNSkgfCAoZ2FtbWEweCA+Pj4gNykpICBeXG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGdhbW1hMHggPDwgMTQpIHwgKGdhbW1hMHggPj4+IDE4KSkgXlxuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnYW1tYTB4ID4+PiAzKTtcblxuXHQgICAgICAgICAgICAgICAgICAgIHZhciBnYW1tYTF4ID0gV1tpIC0gMl07XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGdhbW1hMSAgPSAoKGdhbW1hMXggPDwgMTUpIHwgKGdhbW1hMXggPj4+IDE3KSkgXlxuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChnYW1tYTF4IDw8IDEzKSB8IChnYW1tYTF4ID4+PiAxOSkpIF5cblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ2FtbWExeCA+Pj4gMTApO1xuXG5cdCAgICAgICAgICAgICAgICAgICAgV1tpXSA9IGdhbW1hMCArIFdbaSAtIDddICsgZ2FtbWExICsgV1tpIC0gMTZdO1xuXHQgICAgICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgICAgICB2YXIgY2ggID0gKGUgJiBmKSBeICh+ZSAmIGcpO1xuXHQgICAgICAgICAgICAgICAgdmFyIG1haiA9IChhICYgYikgXiAoYSAmIGMpIF4gKGIgJiBjKTtcblxuXHQgICAgICAgICAgICAgICAgdmFyIHNpZ21hMCA9ICgoYSA8PCAzMCkgfCAoYSA+Pj4gMikpIF4gKChhIDw8IDE5KSB8IChhID4+PiAxMykpIF4gKChhIDw8IDEwKSB8IChhID4+PiAyMikpO1xuXHQgICAgICAgICAgICAgICAgdmFyIHNpZ21hMSA9ICgoZSA8PCAyNikgfCAoZSA+Pj4gNikpIF4gKChlIDw8IDIxKSB8IChlID4+PiAxMSkpIF4gKChlIDw8IDcpICB8IChlID4+PiAyNSkpO1xuXG5cdCAgICAgICAgICAgICAgICB2YXIgdDEgPSBoICsgc2lnbWExICsgY2ggKyBLW2ldICsgV1tpXTtcblx0ICAgICAgICAgICAgICAgIHZhciB0MiA9IHNpZ21hMCArIG1hajtcblxuXHQgICAgICAgICAgICAgICAgaCA9IGc7XG5cdCAgICAgICAgICAgICAgICBnID0gZjtcblx0ICAgICAgICAgICAgICAgIGYgPSBlO1xuXHQgICAgICAgICAgICAgICAgZSA9IChkICsgdDEpIHwgMDtcblx0ICAgICAgICAgICAgICAgIGQgPSBjO1xuXHQgICAgICAgICAgICAgICAgYyA9IGI7XG5cdCAgICAgICAgICAgICAgICBiID0gYTtcblx0ICAgICAgICAgICAgICAgIGEgPSAodDEgKyB0MikgfCAwO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gSW50ZXJtZWRpYXRlIGhhc2ggdmFsdWVcblx0ICAgICAgICAgICAgSFswXSA9IChIWzBdICsgYSkgfCAwO1xuXHQgICAgICAgICAgICBIWzFdID0gKEhbMV0gKyBiKSB8IDA7XG5cdCAgICAgICAgICAgIEhbMl0gPSAoSFsyXSArIGMpIHwgMDtcblx0ICAgICAgICAgICAgSFszXSA9IChIWzNdICsgZCkgfCAwO1xuXHQgICAgICAgICAgICBIWzRdID0gKEhbNF0gKyBlKSB8IDA7XG5cdCAgICAgICAgICAgIEhbNV0gPSAoSFs1XSArIGYpIHwgMDtcblx0ICAgICAgICAgICAgSFs2XSA9IChIWzZdICsgZykgfCAwO1xuXHQgICAgICAgICAgICBIWzddID0gKEhbN10gKyBoKSB8IDA7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIF9kb0ZpbmFsaXplOiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIgZGF0YSA9IHRoaXMuX2RhdGE7XG5cdCAgICAgICAgICAgIHZhciBkYXRhV29yZHMgPSBkYXRhLndvcmRzO1xuXG5cdCAgICAgICAgICAgIHZhciBuQml0c1RvdGFsID0gdGhpcy5fbkRhdGFCeXRlcyAqIDg7XG5cdCAgICAgICAgICAgIHZhciBuQml0c0xlZnQgPSBkYXRhLnNpZ0J5dGVzICogODtcblxuXHQgICAgICAgICAgICAvLyBBZGQgcGFkZGluZ1xuXHQgICAgICAgICAgICBkYXRhV29yZHNbbkJpdHNMZWZ0ID4+PiA1XSB8PSAweDgwIDw8ICgyNCAtIG5CaXRzTGVmdCAlIDMyKTtcblx0ICAgICAgICAgICAgZGF0YVdvcmRzWygoKG5CaXRzTGVmdCArIDY0KSA+Pj4gOSkgPDwgNCkgKyAxNF0gPSBNYXRoLmZsb29yKG5CaXRzVG90YWwgLyAweDEwMDAwMDAwMCk7XG5cdCAgICAgICAgICAgIGRhdGFXb3Jkc1soKChuQml0c0xlZnQgKyA2NCkgPj4+IDkpIDw8IDQpICsgMTVdID0gbkJpdHNUb3RhbDtcblx0ICAgICAgICAgICAgZGF0YS5zaWdCeXRlcyA9IGRhdGFXb3Jkcy5sZW5ndGggKiA0O1xuXG5cdCAgICAgICAgICAgIC8vIEhhc2ggZmluYWwgYmxvY2tzXG5cdCAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3MoKTtcblxuXHQgICAgICAgICAgICAvLyBSZXR1cm4gZmluYWwgY29tcHV0ZWQgaGFzaFxuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5faGFzaDtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgY2xvbmU6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIGNsb25lID0gSGFzaGVyLmNsb25lLmNhbGwodGhpcyk7XG5cdCAgICAgICAgICAgIGNsb25lLl9oYXNoID0gdGhpcy5faGFzaC5jbG9uZSgpO1xuXG5cdCAgICAgICAgICAgIHJldHVybiBjbG9uZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBTaG9ydGN1dCBmdW5jdGlvbiB0byB0aGUgaGFzaGVyJ3Mgb2JqZWN0IGludGVyZmFjZS5cblx0ICAgICAqXG5cdCAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gaGFzaC5cblx0ICAgICAqXG5cdCAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSBoYXNoLlxuXHQgICAgICpcblx0ICAgICAqIEBzdGF0aWNcblx0ICAgICAqXG5cdCAgICAgKiBAZXhhbXBsZVxuXHQgICAgICpcblx0ICAgICAqICAgICB2YXIgaGFzaCA9IENyeXB0b0pTLlNIQTI1NignbWVzc2FnZScpO1xuXHQgICAgICogICAgIHZhciBoYXNoID0gQ3J5cHRvSlMuU0hBMjU2KHdvcmRBcnJheSk7XG5cdCAgICAgKi9cblx0ICAgIEMuU0hBMjU2ID0gSGFzaGVyLl9jcmVhdGVIZWxwZXIoU0hBMjU2KTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBTaG9ydGN1dCBmdW5jdGlvbiB0byB0aGUgSE1BQydzIG9iamVjdCBpbnRlcmZhY2UuXG5cdCAgICAgKlxuXHQgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBtZXNzYWdlIFRoZSBtZXNzYWdlIHRvIGhhc2guXG5cdCAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IGtleSBUaGUgc2VjcmV0IGtleS5cblx0ICAgICAqXG5cdCAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSBITUFDLlxuXHQgICAgICpcblx0ICAgICAqIEBzdGF0aWNcblx0ICAgICAqXG5cdCAgICAgKiBAZXhhbXBsZVxuXHQgICAgICpcblx0ICAgICAqICAgICB2YXIgaG1hYyA9IENyeXB0b0pTLkhtYWNTSEEyNTYobWVzc2FnZSwga2V5KTtcblx0ICAgICAqL1xuXHQgICAgQy5IbWFjU0hBMjU2ID0gSGFzaGVyLl9jcmVhdGVIbWFjSGVscGVyKFNIQTI1Nik7XG5cdH0oTWF0aCkpO1xuXG5cblx0KGZ1bmN0aW9uICgpIHtcblx0ICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgdmFyIEMgPSBDcnlwdG9KUztcblx0ICAgIHZhciBDX2xpYiA9IEMubGliO1xuXHQgICAgdmFyIFdvcmRBcnJheSA9IENfbGliLldvcmRBcnJheTtcblx0ICAgIHZhciBDX2VuYyA9IEMuZW5jO1xuXG5cdCAgICAvKipcblx0ICAgICAqIFVURi0xNiBCRSBlbmNvZGluZyBzdHJhdGVneS5cblx0ICAgICAqL1xuXHQgICAgdmFyIFV0ZjE2QkUgPSBDX2VuYy5VdGYxNiA9IENfZW5jLlV0ZjE2QkUgPSB7XG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29udmVydHMgYSB3b3JkIGFycmF5IHRvIGEgVVRGLTE2IEJFIHN0cmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7V29yZEFycmF5fSB3b3JkQXJyYXkgVGhlIHdvcmQgYXJyYXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBVVEYtMTYgQkUgc3RyaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgdXRmMTZTdHJpbmcgPSBDcnlwdG9KUy5lbmMuVXRmMTYuc3RyaW5naWZ5KHdvcmRBcnJheSk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgc3RyaW5naWZ5OiBmdW5jdGlvbiAod29yZEFycmF5KSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIgd29yZHMgPSB3b3JkQXJyYXkud29yZHM7XG5cdCAgICAgICAgICAgIHZhciBzaWdCeXRlcyA9IHdvcmRBcnJheS5zaWdCeXRlcztcblxuXHQgICAgICAgICAgICAvLyBDb252ZXJ0XG5cdCAgICAgICAgICAgIHZhciB1dGYxNkNoYXJzID0gW107XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2lnQnl0ZXM7IGkgKz0gMikge1xuXHQgICAgICAgICAgICAgICAgdmFyIGNvZGVQb2ludCA9ICh3b3Jkc1tpID4+PiAyXSA+Pj4gKDE2IC0gKGkgJSA0KSAqIDgpKSAmIDB4ZmZmZjtcblx0ICAgICAgICAgICAgICAgIHV0ZjE2Q2hhcnMucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGVQb2ludCkpO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgcmV0dXJuIHV0ZjE2Q2hhcnMuam9pbignJyk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENvbnZlcnRzIGEgVVRGLTE2IEJFIHN0cmluZyB0byBhIHdvcmQgYXJyYXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXRmMTZTdHIgVGhlIFVURi0xNiBCRSBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgd29yZEFycmF5ID0gQ3J5cHRvSlMuZW5jLlV0ZjE2LnBhcnNlKHV0ZjE2U3RyaW5nKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBwYXJzZTogZnVuY3Rpb24gKHV0ZjE2U3RyKSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0XG5cdCAgICAgICAgICAgIHZhciB1dGYxNlN0ckxlbmd0aCA9IHV0ZjE2U3RyLmxlbmd0aDtcblxuXHQgICAgICAgICAgICAvLyBDb252ZXJ0XG5cdCAgICAgICAgICAgIHZhciB3b3JkcyA9IFtdO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHV0ZjE2U3RyTGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHdvcmRzW2kgPj4+IDFdIHw9IHV0ZjE2U3RyLmNoYXJDb2RlQXQoaSkgPDwgKDE2IC0gKGkgJSAyKSAqIDE2KTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIHJldHVybiBXb3JkQXJyYXkuY3JlYXRlKHdvcmRzLCB1dGYxNlN0ckxlbmd0aCAqIDIpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cblx0ICAgIC8qKlxuXHQgICAgICogVVRGLTE2IExFIGVuY29kaW5nIHN0cmF0ZWd5LlxuXHQgICAgICovXG5cdCAgICBDX2VuYy5VdGYxNkxFID0ge1xuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENvbnZlcnRzIGEgd29yZCBhcnJheSB0byBhIFVURi0xNiBMRSBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheX0gd29yZEFycmF5IFRoZSB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7c3RyaW5nfSBUaGUgVVRGLTE2IExFIHN0cmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBzdGF0aWNcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIHV0ZjE2U3RyID0gQ3J5cHRvSlMuZW5jLlV0ZjE2TEUuc3RyaW5naWZ5KHdvcmRBcnJheSk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgc3RyaW5naWZ5OiBmdW5jdGlvbiAod29yZEFycmF5KSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIgd29yZHMgPSB3b3JkQXJyYXkud29yZHM7XG5cdCAgICAgICAgICAgIHZhciBzaWdCeXRlcyA9IHdvcmRBcnJheS5zaWdCeXRlcztcblxuXHQgICAgICAgICAgICAvLyBDb252ZXJ0XG5cdCAgICAgICAgICAgIHZhciB1dGYxNkNoYXJzID0gW107XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2lnQnl0ZXM7IGkgKz0gMikge1xuXHQgICAgICAgICAgICAgICAgdmFyIGNvZGVQb2ludCA9IHN3YXBFbmRpYW4oKHdvcmRzW2kgPj4+IDJdID4+PiAoMTYgLSAoaSAlIDQpICogOCkpICYgMHhmZmZmKTtcblx0ICAgICAgICAgICAgICAgIHV0ZjE2Q2hhcnMucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGVQb2ludCkpO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgcmV0dXJuIHV0ZjE2Q2hhcnMuam9pbignJyk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENvbnZlcnRzIGEgVVRGLTE2IExFIHN0cmluZyB0byBhIHdvcmQgYXJyYXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXRmMTZTdHIgVGhlIFVURi0xNiBMRSBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgd29yZEFycmF5ID0gQ3J5cHRvSlMuZW5jLlV0ZjE2TEUucGFyc2UodXRmMTZTdHIpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHBhcnNlOiBmdW5jdGlvbiAodXRmMTZTdHIpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRcblx0ICAgICAgICAgICAgdmFyIHV0ZjE2U3RyTGVuZ3RoID0gdXRmMTZTdHIubGVuZ3RoO1xuXG5cdCAgICAgICAgICAgIC8vIENvbnZlcnRcblx0ICAgICAgICAgICAgdmFyIHdvcmRzID0gW107XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdXRmMTZTdHJMZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgd29yZHNbaSA+Pj4gMV0gfD0gc3dhcEVuZGlhbih1dGYxNlN0ci5jaGFyQ29kZUF0KGkpIDw8ICgxNiAtIChpICUgMikgKiAxNikpO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgcmV0dXJuIFdvcmRBcnJheS5jcmVhdGUod29yZHMsIHV0ZjE2U3RyTGVuZ3RoICogMik7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblxuXHQgICAgZnVuY3Rpb24gc3dhcEVuZGlhbih3b3JkKSB7XG5cdCAgICAgICAgcmV0dXJuICgod29yZCA8PCA4KSAmIDB4ZmYwMGZmMDApIHwgKCh3b3JkID4+PiA4KSAmIDB4MDBmZjAwZmYpO1xuXHQgICAgfVxuXHR9KCkpO1xuXG5cblx0KGZ1bmN0aW9uICgpIHtcblx0ICAgIC8vIENoZWNrIGlmIHR5cGVkIGFycmF5cyBhcmUgc3VwcG9ydGVkXG5cdCAgICBpZiAodHlwZW9mIEFycmF5QnVmZmVyICE9ICdmdW5jdGlvbicpIHtcblx0ICAgICAgICByZXR1cm47XG5cdCAgICB9XG5cblx0ICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgdmFyIEMgPSBDcnlwdG9KUztcblx0ICAgIHZhciBDX2xpYiA9IEMubGliO1xuXHQgICAgdmFyIFdvcmRBcnJheSA9IENfbGliLldvcmRBcnJheTtcblxuXHQgICAgLy8gUmVmZXJlbmNlIG9yaWdpbmFsIGluaXRcblx0ICAgIHZhciBzdXBlckluaXQgPSBXb3JkQXJyYXkuaW5pdDtcblxuXHQgICAgLy8gQXVnbWVudCBXb3JkQXJyYXkuaW5pdCB0byBoYW5kbGUgdHlwZWQgYXJyYXlzXG5cdCAgICB2YXIgc3ViSW5pdCA9IFdvcmRBcnJheS5pbml0ID0gZnVuY3Rpb24gKHR5cGVkQXJyYXkpIHtcblx0ICAgICAgICAvLyBDb252ZXJ0IGJ1ZmZlcnMgdG8gdWludDhcblx0ICAgICAgICBpZiAodHlwZWRBcnJheSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XG5cdCAgICAgICAgICAgIHR5cGVkQXJyYXkgPSBuZXcgVWludDhBcnJheSh0eXBlZEFycmF5KTtcblx0ICAgICAgICB9XG5cblx0ICAgICAgICAvLyBDb252ZXJ0IG90aGVyIGFycmF5IHZpZXdzIHRvIHVpbnQ4XG5cdCAgICAgICAgaWYgKFxuXHQgICAgICAgICAgICB0eXBlZEFycmF5IGluc3RhbmNlb2YgSW50OEFycmF5IHx8XG5cdCAgICAgICAgICAgICh0eXBlb2YgVWludDhDbGFtcGVkQXJyYXkgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZWRBcnJheSBpbnN0YW5jZW9mIFVpbnQ4Q2xhbXBlZEFycmF5KSB8fFxuXHQgICAgICAgICAgICB0eXBlZEFycmF5IGluc3RhbmNlb2YgSW50MTZBcnJheSB8fFxuXHQgICAgICAgICAgICB0eXBlZEFycmF5IGluc3RhbmNlb2YgVWludDE2QXJyYXkgfHxcblx0ICAgICAgICAgICAgdHlwZWRBcnJheSBpbnN0YW5jZW9mIEludDMyQXJyYXkgfHxcblx0ICAgICAgICAgICAgdHlwZWRBcnJheSBpbnN0YW5jZW9mIFVpbnQzMkFycmF5IHx8XG5cdCAgICAgICAgICAgIHR5cGVkQXJyYXkgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkgfHxcblx0ICAgICAgICAgICAgdHlwZWRBcnJheSBpbnN0YW5jZW9mIEZsb2F0NjRBcnJheVxuXHQgICAgICAgICkge1xuXHQgICAgICAgICAgICB0eXBlZEFycmF5ID0gbmV3IFVpbnQ4QXJyYXkodHlwZWRBcnJheS5idWZmZXIsIHR5cGVkQXJyYXkuYnl0ZU9mZnNldCwgdHlwZWRBcnJheS5ieXRlTGVuZ3RoKTtcblx0ICAgICAgICB9XG5cblx0ICAgICAgICAvLyBIYW5kbGUgVWludDhBcnJheVxuXHQgICAgICAgIGlmICh0eXBlZEFycmF5IGluc3RhbmNlb2YgVWludDhBcnJheSkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dFxuXHQgICAgICAgICAgICB2YXIgdHlwZWRBcnJheUJ5dGVMZW5ndGggPSB0eXBlZEFycmF5LmJ5dGVMZW5ndGg7XG5cblx0ICAgICAgICAgICAgLy8gRXh0cmFjdCBieXRlc1xuXHQgICAgICAgICAgICB2YXIgd29yZHMgPSBbXTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0eXBlZEFycmF5Qnl0ZUxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICB3b3Jkc1tpID4+PiAyXSB8PSB0eXBlZEFycmF5W2ldIDw8ICgyNCAtIChpICUgNCkgKiA4KTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIEluaXRpYWxpemUgdGhpcyB3b3JkIGFycmF5XG5cdCAgICAgICAgICAgIHN1cGVySW5pdC5jYWxsKHRoaXMsIHdvcmRzLCB0eXBlZEFycmF5Qnl0ZUxlbmd0aCk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgLy8gRWxzZSBjYWxsIG5vcm1hbCBpbml0XG5cdCAgICAgICAgICAgIHN1cGVySW5pdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cblx0ICAgIHN1YkluaXQucHJvdG90eXBlID0gV29yZEFycmF5O1xuXHR9KCkpO1xuXG5cblx0LyoqIEBwcmVzZXJ2ZVxuXHQoYykgMjAxMiBieSBDw6lkcmljIE1lc25pbC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuXHRSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG5cblx0ICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuXHQgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cblx0VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuXHQqL1xuXG5cdChmdW5jdGlvbiAoTWF0aCkge1xuXHQgICAgLy8gU2hvcnRjdXRzXG5cdCAgICB2YXIgQyA9IENyeXB0b0pTO1xuXHQgICAgdmFyIENfbGliID0gQy5saWI7XG5cdCAgICB2YXIgV29yZEFycmF5ID0gQ19saWIuV29yZEFycmF5O1xuXHQgICAgdmFyIEhhc2hlciA9IENfbGliLkhhc2hlcjtcblx0ICAgIHZhciBDX2FsZ28gPSBDLmFsZ287XG5cblx0ICAgIC8vIENvbnN0YW50cyB0YWJsZVxuXHQgICAgdmFyIF96bCA9IFdvcmRBcnJheS5jcmVhdGUoW1xuXHQgICAgICAgIDAsICAxLCAgMiwgIDMsICA0LCAgNSwgIDYsICA3LCAgOCwgIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsXG5cdCAgICAgICAgNywgIDQsIDEzLCAgMSwgMTAsICA2LCAxNSwgIDMsIDEyLCAgMCwgIDksICA1LCAgMiwgMTQsIDExLCAgOCxcblx0ICAgICAgICAzLCAxMCwgMTQsICA0LCAgOSwgMTUsICA4LCAgMSwgIDIsICA3LCAgMCwgIDYsIDEzLCAxMSwgIDUsIDEyLFxuXHQgICAgICAgIDEsICA5LCAxMSwgMTAsICAwLCAgOCwgMTIsICA0LCAxMywgIDMsICA3LCAxNSwgMTQsICA1LCAgNiwgIDIsXG5cdCAgICAgICAgNCwgIDAsICA1LCAgOSwgIDcsIDEyLCAgMiwgMTAsIDE0LCAgMSwgIDMsICA4LCAxMSwgIDYsIDE1LCAxM10pO1xuXHQgICAgdmFyIF96ciA9IFdvcmRBcnJheS5jcmVhdGUoW1xuXHQgICAgICAgIDUsIDE0LCAgNywgIDAsICA5LCAgMiwgMTEsICA0LCAxMywgIDYsIDE1LCAgOCwgIDEsIDEwLCAgMywgMTIsXG5cdCAgICAgICAgNiwgMTEsICAzLCAgNywgIDAsIDEzLCAgNSwgMTAsIDE0LCAxNSwgIDgsIDEyLCAgNCwgIDksICAxLCAgMixcblx0ICAgICAgICAxNSwgIDUsICAxLCAgMywgIDcsIDE0LCAgNiwgIDksIDExLCAgOCwgMTIsICAyLCAxMCwgIDAsICA0LCAxMyxcblx0ICAgICAgICA4LCAgNiwgIDQsICAxLCAgMywgMTEsIDE1LCAgMCwgIDUsIDEyLCAgMiwgMTMsICA5LCAgNywgMTAsIDE0LFxuXHQgICAgICAgIDEyLCAxNSwgMTAsICA0LCAgMSwgIDUsICA4LCAgNywgIDYsICAyLCAxMywgMTQsICAwLCAgMywgIDksIDExXSk7XG5cdCAgICB2YXIgX3NsID0gV29yZEFycmF5LmNyZWF0ZShbXG5cdCAgICAgICAgIDExLCAxNCwgMTUsIDEyLCAgNSwgIDgsICA3LCAgOSwgMTEsIDEzLCAxNCwgMTUsICA2LCAgNywgIDksICA4LFxuXHQgICAgICAgIDcsIDYsICAgOCwgMTMsIDExLCAgOSwgIDcsIDE1LCAgNywgMTIsIDE1LCAgOSwgMTEsICA3LCAxMywgMTIsXG5cdCAgICAgICAgMTEsIDEzLCAgNiwgIDcsIDE0LCAgOSwgMTMsIDE1LCAxNCwgIDgsIDEzLCAgNiwgIDUsIDEyLCAgNywgIDUsXG5cdCAgICAgICAgICAxMSwgMTIsIDE0LCAxNSwgMTQsIDE1LCAgOSwgIDgsICA5LCAxNCwgIDUsICA2LCAgOCwgIDYsICA1LCAxMixcblx0ICAgICAgICA5LCAxNSwgIDUsIDExLCAgNiwgIDgsIDEzLCAxMiwgIDUsIDEyLCAxMywgMTQsIDExLCAgOCwgIDUsICA2IF0pO1xuXHQgICAgdmFyIF9zciA9IFdvcmRBcnJheS5jcmVhdGUoW1xuXHQgICAgICAgIDgsICA5LCAgOSwgMTEsIDEzLCAxNSwgMTUsICA1LCAgNywgIDcsICA4LCAxMSwgMTQsIDE0LCAxMiwgIDYsXG5cdCAgICAgICAgOSwgMTMsIDE1LCAgNywgMTIsICA4LCAgOSwgMTEsICA3LCAgNywgMTIsICA3LCAgNiwgMTUsIDEzLCAxMSxcblx0ICAgICAgICA5LCAgNywgMTUsIDExLCAgOCwgIDYsICA2LCAxNCwgMTIsIDEzLCAgNSwgMTQsIDEzLCAxMywgIDcsICA1LFxuXHQgICAgICAgIDE1LCAgNSwgIDgsIDExLCAxNCwgMTQsICA2LCAxNCwgIDYsICA5LCAxMiwgIDksIDEyLCAgNSwgMTUsICA4LFxuXHQgICAgICAgIDgsICA1LCAxMiwgIDksIDEyLCAgNSwgMTQsICA2LCAgOCwgMTMsICA2LCAgNSwgMTUsIDEzLCAxMSwgMTEgXSk7XG5cblx0ICAgIHZhciBfaGwgPSAgV29yZEFycmF5LmNyZWF0ZShbIDB4MDAwMDAwMDAsIDB4NUE4Mjc5OTksIDB4NkVEOUVCQTEsIDB4OEYxQkJDREMsIDB4QTk1M0ZENEVdKTtcblx0ICAgIHZhciBfaHIgPSAgV29yZEFycmF5LmNyZWF0ZShbIDB4NTBBMjhCRTYsIDB4NUM0REQxMjQsIDB4NkQ3MDNFRjMsIDB4N0E2RDc2RTksIDB4MDAwMDAwMDBdKTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBSSVBFTUQxNjAgaGFzaCBhbGdvcml0aG0uXG5cdCAgICAgKi9cblx0ICAgIHZhciBSSVBFTUQxNjAgPSBDX2FsZ28uUklQRU1EMTYwID0gSGFzaGVyLmV4dGVuZCh7XG5cdCAgICAgICAgX2RvUmVzZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdGhpcy5faGFzaCAgPSBXb3JkQXJyYXkuY3JlYXRlKFsweDY3NDUyMzAxLCAweEVGQ0RBQjg5LCAweDk4QkFEQ0ZFLCAweDEwMzI1NDc2LCAweEMzRDJFMUYwXSk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIF9kb1Byb2Nlc3NCbG9jazogZnVuY3Rpb24gKE0sIG9mZnNldCkge1xuXG5cdCAgICAgICAgICAgIC8vIFN3YXAgZW5kaWFuXG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTY7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0X2kgPSBvZmZzZXQgKyBpO1xuXHQgICAgICAgICAgICAgICAgdmFyIE1fb2Zmc2V0X2kgPSBNW29mZnNldF9pXTtcblxuXHQgICAgICAgICAgICAgICAgLy8gU3dhcFxuXHQgICAgICAgICAgICAgICAgTVtvZmZzZXRfaV0gPSAoXG5cdCAgICAgICAgICAgICAgICAgICAgKCgoTV9vZmZzZXRfaSA8PCA4KSAgfCAoTV9vZmZzZXRfaSA+Pj4gMjQpKSAmIDB4MDBmZjAwZmYpIHxcblx0ICAgICAgICAgICAgICAgICAgICAoKChNX29mZnNldF9pIDw8IDI0KSB8IChNX29mZnNldF9pID4+PiA4KSkgICYgMHhmZjAwZmYwMClcblx0ICAgICAgICAgICAgICAgICk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRcblx0ICAgICAgICAgICAgdmFyIEggID0gdGhpcy5faGFzaC53b3Jkcztcblx0ICAgICAgICAgICAgdmFyIGhsID0gX2hsLndvcmRzO1xuXHQgICAgICAgICAgICB2YXIgaHIgPSBfaHIud29yZHM7XG5cdCAgICAgICAgICAgIHZhciB6bCA9IF96bC53b3Jkcztcblx0ICAgICAgICAgICAgdmFyIHpyID0gX3pyLndvcmRzO1xuXHQgICAgICAgICAgICB2YXIgc2wgPSBfc2wud29yZHM7XG5cdCAgICAgICAgICAgIHZhciBzciA9IF9zci53b3JkcztcblxuXHQgICAgICAgICAgICAvLyBXb3JraW5nIHZhcmlhYmxlc1xuXHQgICAgICAgICAgICB2YXIgYWwsIGJsLCBjbCwgZGwsIGVsO1xuXHQgICAgICAgICAgICB2YXIgYXIsIGJyLCBjciwgZHIsIGVyO1xuXG5cdCAgICAgICAgICAgIGFyID0gYWwgPSBIWzBdO1xuXHQgICAgICAgICAgICBiciA9IGJsID0gSFsxXTtcblx0ICAgICAgICAgICAgY3IgPSBjbCA9IEhbMl07XG5cdCAgICAgICAgICAgIGRyID0gZGwgPSBIWzNdO1xuXHQgICAgICAgICAgICBlciA9IGVsID0gSFs0XTtcblx0ICAgICAgICAgICAgLy8gQ29tcHV0YXRpb25cblx0ICAgICAgICAgICAgdmFyIHQ7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgODA7IGkgKz0gMSkge1xuXHQgICAgICAgICAgICAgICAgdCA9IChhbCArICBNW29mZnNldCt6bFtpXV0pfDA7XG5cdCAgICAgICAgICAgICAgICBpZiAoaTwxNil7XG5cdFx0ICAgICAgICAgICAgdCArPSAgZjEoYmwsY2wsZGwpICsgaGxbMF07XG5cdCAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGk8MzIpIHtcblx0XHQgICAgICAgICAgICB0ICs9ICBmMihibCxjbCxkbCkgKyBobFsxXTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaTw0OCkge1xuXHRcdCAgICAgICAgICAgIHQgKz0gIGYzKGJsLGNsLGRsKSArIGhsWzJdO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpPDY0KSB7XG5cdFx0ICAgICAgICAgICAgdCArPSAgZjQoYmwsY2wsZGwpICsgaGxbM107XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Ugey8vIGlmIChpPDgwKSB7XG5cdFx0ICAgICAgICAgICAgdCArPSAgZjUoYmwsY2wsZGwpICsgaGxbNF07XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICB0ID0gdHwwO1xuXHQgICAgICAgICAgICAgICAgdCA9ICByb3RsKHQsc2xbaV0pO1xuXHQgICAgICAgICAgICAgICAgdCA9ICh0K2VsKXwwO1xuXHQgICAgICAgICAgICAgICAgYWwgPSBlbDtcblx0ICAgICAgICAgICAgICAgIGVsID0gZGw7XG5cdCAgICAgICAgICAgICAgICBkbCA9IHJvdGwoY2wsIDEwKTtcblx0ICAgICAgICAgICAgICAgIGNsID0gYmw7XG5cdCAgICAgICAgICAgICAgICBibCA9IHQ7XG5cblx0ICAgICAgICAgICAgICAgIHQgPSAoYXIgKyBNW29mZnNldCt6cltpXV0pfDA7XG5cdCAgICAgICAgICAgICAgICBpZiAoaTwxNil7XG5cdFx0ICAgICAgICAgICAgdCArPSAgZjUoYnIsY3IsZHIpICsgaHJbMF07XG5cdCAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGk8MzIpIHtcblx0XHQgICAgICAgICAgICB0ICs9ICBmNChicixjcixkcikgKyBoclsxXTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaTw0OCkge1xuXHRcdCAgICAgICAgICAgIHQgKz0gIGYzKGJyLGNyLGRyKSArIGhyWzJdO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpPDY0KSB7XG5cdFx0ICAgICAgICAgICAgdCArPSAgZjIoYnIsY3IsZHIpICsgaHJbM107XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Ugey8vIGlmIChpPDgwKSB7XG5cdFx0ICAgICAgICAgICAgdCArPSAgZjEoYnIsY3IsZHIpICsgaHJbNF07XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICB0ID0gdHwwO1xuXHQgICAgICAgICAgICAgICAgdCA9ICByb3RsKHQsc3JbaV0pIDtcblx0ICAgICAgICAgICAgICAgIHQgPSAodCtlcil8MDtcblx0ICAgICAgICAgICAgICAgIGFyID0gZXI7XG5cdCAgICAgICAgICAgICAgICBlciA9IGRyO1xuXHQgICAgICAgICAgICAgICAgZHIgPSByb3RsKGNyLCAxMCk7XG5cdCAgICAgICAgICAgICAgICBjciA9IGJyO1xuXHQgICAgICAgICAgICAgICAgYnIgPSB0O1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIC8vIEludGVybWVkaWF0ZSBoYXNoIHZhbHVlXG5cdCAgICAgICAgICAgIHQgICAgPSAoSFsxXSArIGNsICsgZHIpfDA7XG5cdCAgICAgICAgICAgIEhbMV0gPSAoSFsyXSArIGRsICsgZXIpfDA7XG5cdCAgICAgICAgICAgIEhbMl0gPSAoSFszXSArIGVsICsgYXIpfDA7XG5cdCAgICAgICAgICAgIEhbM10gPSAoSFs0XSArIGFsICsgYnIpfDA7XG5cdCAgICAgICAgICAgIEhbNF0gPSAoSFswXSArIGJsICsgY3IpfDA7XG5cdCAgICAgICAgICAgIEhbMF0gPSAgdDtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgX2RvRmluYWxpemU6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBkYXRhID0gdGhpcy5fZGF0YTtcblx0ICAgICAgICAgICAgdmFyIGRhdGFXb3JkcyA9IGRhdGEud29yZHM7XG5cblx0ICAgICAgICAgICAgdmFyIG5CaXRzVG90YWwgPSB0aGlzLl9uRGF0YUJ5dGVzICogODtcblx0ICAgICAgICAgICAgdmFyIG5CaXRzTGVmdCA9IGRhdGEuc2lnQnl0ZXMgKiA4O1xuXG5cdCAgICAgICAgICAgIC8vIEFkZCBwYWRkaW5nXG5cdCAgICAgICAgICAgIGRhdGFXb3Jkc1tuQml0c0xlZnQgPj4+IDVdIHw9IDB4ODAgPDwgKDI0IC0gbkJpdHNMZWZ0ICUgMzIpO1xuXHQgICAgICAgICAgICBkYXRhV29yZHNbKCgobkJpdHNMZWZ0ICsgNjQpID4+PiA5KSA8PCA0KSArIDE0XSA9IChcblx0ICAgICAgICAgICAgICAgICgoKG5CaXRzVG90YWwgPDwgOCkgIHwgKG5CaXRzVG90YWwgPj4+IDI0KSkgJiAweDAwZmYwMGZmKSB8XG5cdCAgICAgICAgICAgICAgICAoKChuQml0c1RvdGFsIDw8IDI0KSB8IChuQml0c1RvdGFsID4+PiA4KSkgICYgMHhmZjAwZmYwMClcblx0ICAgICAgICAgICAgKTtcblx0ICAgICAgICAgICAgZGF0YS5zaWdCeXRlcyA9IChkYXRhV29yZHMubGVuZ3RoICsgMSkgKiA0O1xuXG5cdCAgICAgICAgICAgIC8vIEhhc2ggZmluYWwgYmxvY2tzXG5cdCAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3MoKTtcblxuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIGhhc2ggPSB0aGlzLl9oYXNoO1xuXHQgICAgICAgICAgICB2YXIgSCA9IGhhc2gud29yZHM7XG5cblx0ICAgICAgICAgICAgLy8gU3dhcCBlbmRpYW5cblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA1OyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIC8vIFNob3J0Y3V0XG5cdCAgICAgICAgICAgICAgICB2YXIgSF9pID0gSFtpXTtcblxuXHQgICAgICAgICAgICAgICAgLy8gU3dhcFxuXHQgICAgICAgICAgICAgICAgSFtpXSA9ICgoKEhfaSA8PCA4KSAgfCAoSF9pID4+PiAyNCkpICYgMHgwMGZmMDBmZikgfFxuXHQgICAgICAgICAgICAgICAgICAgICAgICgoKEhfaSA8PCAyNCkgfCAoSF9pID4+PiA4KSkgICYgMHhmZjAwZmYwMCk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBSZXR1cm4gZmluYWwgY29tcHV0ZWQgaGFzaFxuXHQgICAgICAgICAgICByZXR1cm4gaGFzaDtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgY2xvbmU6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIGNsb25lID0gSGFzaGVyLmNsb25lLmNhbGwodGhpcyk7XG5cdCAgICAgICAgICAgIGNsb25lLl9oYXNoID0gdGhpcy5faGFzaC5jbG9uZSgpO1xuXG5cdCAgICAgICAgICAgIHJldHVybiBjbG9uZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblxuXG5cdCAgICBmdW5jdGlvbiBmMSh4LCB5LCB6KSB7XG5cdCAgICAgICAgcmV0dXJuICgoeCkgXiAoeSkgXiAoeikpO1xuXG5cdCAgICB9XG5cblx0ICAgIGZ1bmN0aW9uIGYyKHgsIHksIHopIHtcblx0ICAgICAgICByZXR1cm4gKCgoeCkmKHkpKSB8ICgofngpJih6KSkpO1xuXHQgICAgfVxuXG5cdCAgICBmdW5jdGlvbiBmMyh4LCB5LCB6KSB7XG5cdCAgICAgICAgcmV0dXJuICgoKHgpIHwgKH4oeSkpKSBeICh6KSk7XG5cdCAgICB9XG5cblx0ICAgIGZ1bmN0aW9uIGY0KHgsIHksIHopIHtcblx0ICAgICAgICByZXR1cm4gKCgoeCkgJiAoeikpIHwgKCh5KSYofih6KSkpKTtcblx0ICAgIH1cblxuXHQgICAgZnVuY3Rpb24gZjUoeCwgeSwgeikge1xuXHQgICAgICAgIHJldHVybiAoKHgpIF4gKCh5KSB8KH4oeikpKSk7XG5cblx0ICAgIH1cblxuXHQgICAgZnVuY3Rpb24gcm90bCh4LG4pIHtcblx0ICAgICAgICByZXR1cm4gKHg8PG4pIHwgKHg+Pj4oMzItbikpO1xuXHQgICAgfVxuXG5cblx0ICAgIC8qKlxuXHQgICAgICogU2hvcnRjdXQgZnVuY3Rpb24gdG8gdGhlIGhhc2hlcidzIG9iamVjdCBpbnRlcmZhY2UuXG5cdCAgICAgKlxuXHQgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBtZXNzYWdlIFRoZSBtZXNzYWdlIHRvIGhhc2guXG5cdCAgICAgKlxuXHQgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgaGFzaC5cblx0ICAgICAqXG5cdCAgICAgKiBAc3RhdGljXG5cdCAgICAgKlxuXHQgICAgICogQGV4YW1wbGVcblx0ICAgICAqXG5cdCAgICAgKiAgICAgdmFyIGhhc2ggPSBDcnlwdG9KUy5SSVBFTUQxNjAoJ21lc3NhZ2UnKTtcblx0ICAgICAqICAgICB2YXIgaGFzaCA9IENyeXB0b0pTLlJJUEVNRDE2MCh3b3JkQXJyYXkpO1xuXHQgICAgICovXG5cdCAgICBDLlJJUEVNRDE2MCA9IEhhc2hlci5fY3JlYXRlSGVscGVyKFJJUEVNRDE2MCk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogU2hvcnRjdXQgZnVuY3Rpb24gdG8gdGhlIEhNQUMncyBvYmplY3QgaW50ZXJmYWNlLlxuXHQgICAgICpcblx0ICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gbWVzc2FnZSBUaGUgbWVzc2FnZSB0byBoYXNoLlxuXHQgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBrZXkgVGhlIHNlY3JldCBrZXkuXG5cdCAgICAgKlxuXHQgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgSE1BQy5cblx0ICAgICAqXG5cdCAgICAgKiBAc3RhdGljXG5cdCAgICAgKlxuXHQgICAgICogQGV4YW1wbGVcblx0ICAgICAqXG5cdCAgICAgKiAgICAgdmFyIGhtYWMgPSBDcnlwdG9KUy5IbWFjUklQRU1EMTYwKG1lc3NhZ2UsIGtleSk7XG5cdCAgICAgKi9cblx0ICAgIEMuSG1hY1JJUEVNRDE2MCA9IEhhc2hlci5fY3JlYXRlSG1hY0hlbHBlcihSSVBFTUQxNjApO1xuXHR9KE1hdGgpKTtcblxuXG5cdChmdW5jdGlvbiAoKSB7XG5cdCAgICAvLyBTaG9ydGN1dHNcblx0ICAgIHZhciBDID0gQ3J5cHRvSlM7XG5cdCAgICB2YXIgQ19saWIgPSBDLmxpYjtcblx0ICAgIHZhciBCYXNlID0gQ19saWIuQmFzZTtcblx0ICAgIHZhciBDX2VuYyA9IEMuZW5jO1xuXHQgICAgdmFyIFV0ZjggPSBDX2VuYy5VdGY4O1xuXHQgICAgdmFyIENfYWxnbyA9IEMuYWxnbztcblxuXHQgICAgLyoqXG5cdCAgICAgKiBITUFDIGFsZ29yaXRobS5cblx0ICAgICAqL1xuXHQgICAgdmFyIEhNQUMgPSBDX2FsZ28uSE1BQyA9IEJhc2UuZXh0ZW5kKHtcblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBJbml0aWFsaXplcyBhIG5ld2x5IGNyZWF0ZWQgSE1BQy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7SGFzaGVyfSBoYXNoZXIgVGhlIGhhc2ggYWxnb3JpdGhtIHRvIHVzZS5cblx0ICAgICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IGtleSBUaGUgc2VjcmV0IGtleS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIGhtYWNIYXNoZXIgPSBDcnlwdG9KUy5hbGdvLkhNQUMuY3JlYXRlKENyeXB0b0pTLmFsZ28uU0hBMjU2LCBrZXkpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGluaXQ6IGZ1bmN0aW9uIChoYXNoZXIsIGtleSkge1xuXHQgICAgICAgICAgICAvLyBJbml0IGhhc2hlclxuXHQgICAgICAgICAgICBoYXNoZXIgPSB0aGlzLl9oYXNoZXIgPSBuZXcgaGFzaGVyLmluaXQoKTtcblxuXHQgICAgICAgICAgICAvLyBDb252ZXJ0IHN0cmluZyB0byBXb3JkQXJyYXksIGVsc2UgYXNzdW1lIFdvcmRBcnJheSBhbHJlYWR5XG5cdCAgICAgICAgICAgIGlmICh0eXBlb2Yga2V5ID09ICdzdHJpbmcnKSB7XG5cdCAgICAgICAgICAgICAgICBrZXkgPSBVdGY4LnBhcnNlKGtleSk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIGhhc2hlckJsb2NrU2l6ZSA9IGhhc2hlci5ibG9ja1NpemU7XG5cdCAgICAgICAgICAgIHZhciBoYXNoZXJCbG9ja1NpemVCeXRlcyA9IGhhc2hlckJsb2NrU2l6ZSAqIDQ7XG5cblx0ICAgICAgICAgICAgLy8gQWxsb3cgYXJiaXRyYXJ5IGxlbmd0aCBrZXlzXG5cdCAgICAgICAgICAgIGlmIChrZXkuc2lnQnl0ZXMgPiBoYXNoZXJCbG9ja1NpemVCeXRlcykge1xuXHQgICAgICAgICAgICAgICAga2V5ID0gaGFzaGVyLmZpbmFsaXplKGtleSk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBDbGFtcCBleGNlc3MgYml0c1xuXHQgICAgICAgICAgICBrZXkuY2xhbXAoKTtcblxuXHQgICAgICAgICAgICAvLyBDbG9uZSBrZXkgZm9yIGlubmVyIGFuZCBvdXRlciBwYWRzXG5cdCAgICAgICAgICAgIHZhciBvS2V5ID0gdGhpcy5fb0tleSA9IGtleS5jbG9uZSgpO1xuXHQgICAgICAgICAgICB2YXIgaUtleSA9IHRoaXMuX2lLZXkgPSBrZXkuY2xvbmUoKTtcblxuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIG9LZXlXb3JkcyA9IG9LZXkud29yZHM7XG5cdCAgICAgICAgICAgIHZhciBpS2V5V29yZHMgPSBpS2V5LndvcmRzO1xuXG5cdCAgICAgICAgICAgIC8vIFhPUiBrZXlzIHdpdGggcGFkIGNvbnN0YW50c1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhhc2hlckJsb2NrU2l6ZTsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICBvS2V5V29yZHNbaV0gXj0gMHg1YzVjNWM1Yztcblx0ICAgICAgICAgICAgICAgIGlLZXlXb3Jkc1tpXSBePSAweDM2MzYzNjM2O1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIG9LZXkuc2lnQnl0ZXMgPSBpS2V5LnNpZ0J5dGVzID0gaGFzaGVyQmxvY2tTaXplQnl0ZXM7XG5cblx0ICAgICAgICAgICAgLy8gU2V0IGluaXRpYWwgdmFsdWVzXG5cdCAgICAgICAgICAgIHRoaXMucmVzZXQoKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogUmVzZXRzIHRoaXMgSE1BQyB0byBpdHMgaW5pdGlhbCBzdGF0ZS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgaG1hY0hhc2hlci5yZXNldCgpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHJlc2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0XG5cdCAgICAgICAgICAgIHZhciBoYXNoZXIgPSB0aGlzLl9oYXNoZXI7XG5cblx0ICAgICAgICAgICAgLy8gUmVzZXRcblx0ICAgICAgICAgICAgaGFzaGVyLnJlc2V0KCk7XG5cdCAgICAgICAgICAgIGhhc2hlci51cGRhdGUodGhpcy5faUtleSk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIFVwZGF0ZXMgdGhpcyBITUFDIHdpdGggYSBtZXNzYWdlLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBtZXNzYWdlVXBkYXRlIFRoZSBtZXNzYWdlIHRvIGFwcGVuZC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge0hNQUN9IFRoaXMgSE1BQyBpbnN0YW5jZS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgaG1hY0hhc2hlci51cGRhdGUoJ21lc3NhZ2UnKTtcblx0ICAgICAgICAgKiAgICAgaG1hY0hhc2hlci51cGRhdGUod29yZEFycmF5KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICB1cGRhdGU6IGZ1bmN0aW9uIChtZXNzYWdlVXBkYXRlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2hhc2hlci51cGRhdGUobWVzc2FnZVVwZGF0ZSk7XG5cblx0ICAgICAgICAgICAgLy8gQ2hhaW5hYmxlXG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBGaW5hbGl6ZXMgdGhlIEhNQUMgY29tcHV0YXRpb24uXG5cdCAgICAgICAgICogTm90ZSB0aGF0IHRoZSBmaW5hbGl6ZSBvcGVyYXRpb24gaXMgZWZmZWN0aXZlbHkgYSBkZXN0cnVjdGl2ZSwgcmVhZC1vbmNlIG9wZXJhdGlvbi5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gbWVzc2FnZVVwZGF0ZSAoT3B0aW9uYWwpIEEgZmluYWwgbWVzc2FnZSB1cGRhdGUuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSBITUFDLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgaG1hYyA9IGhtYWNIYXNoZXIuZmluYWxpemUoKTtcblx0ICAgICAgICAgKiAgICAgdmFyIGhtYWMgPSBobWFjSGFzaGVyLmZpbmFsaXplKCdtZXNzYWdlJyk7XG5cdCAgICAgICAgICogICAgIHZhciBobWFjID0gaG1hY0hhc2hlci5maW5hbGl6ZSh3b3JkQXJyYXkpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGZpbmFsaXplOiBmdW5jdGlvbiAobWVzc2FnZVVwZGF0ZSkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dFxuXHQgICAgICAgICAgICB2YXIgaGFzaGVyID0gdGhpcy5faGFzaGVyO1xuXG5cdCAgICAgICAgICAgIC8vIENvbXB1dGUgSE1BQ1xuXHQgICAgICAgICAgICB2YXIgaW5uZXJIYXNoID0gaGFzaGVyLmZpbmFsaXplKG1lc3NhZ2VVcGRhdGUpO1xuXHQgICAgICAgICAgICBoYXNoZXIucmVzZXQoKTtcblx0ICAgICAgICAgICAgdmFyIGhtYWMgPSBoYXNoZXIuZmluYWxpemUodGhpcy5fb0tleS5jbG9uZSgpLmNvbmNhdChpbm5lckhhc2gpKTtcblxuXHQgICAgICAgICAgICByZXR1cm4gaG1hYztcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0fSgpKTtcblxuXG5cdChmdW5jdGlvbiAoKSB7XG5cdCAgICAvLyBTaG9ydGN1dHNcblx0ICAgIHZhciBDID0gQ3J5cHRvSlM7XG5cdCAgICB2YXIgQ19saWIgPSBDLmxpYjtcblx0ICAgIHZhciBCYXNlID0gQ19saWIuQmFzZTtcblx0ICAgIHZhciBXb3JkQXJyYXkgPSBDX2xpYi5Xb3JkQXJyYXk7XG5cdCAgICB2YXIgQ19hbGdvID0gQy5hbGdvO1xuXHQgICAgdmFyIFNIQTEgPSBDX2FsZ28uU0hBMTtcblx0ICAgIHZhciBITUFDID0gQ19hbGdvLkhNQUM7XG5cblx0ICAgIC8qKlxuXHQgICAgICogUGFzc3dvcmQtQmFzZWQgS2V5IERlcml2YXRpb24gRnVuY3Rpb24gMiBhbGdvcml0aG0uXG5cdCAgICAgKi9cblx0ICAgIHZhciBQQktERjIgPSBDX2FsZ28uUEJLREYyID0gQmFzZS5leHRlbmQoe1xuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENvbmZpZ3VyYXRpb24gb3B0aW9ucy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBrZXlTaXplIFRoZSBrZXkgc2l6ZSBpbiB3b3JkcyB0byBnZW5lcmF0ZS4gRGVmYXVsdDogNCAoMTI4IGJpdHMpXG5cdCAgICAgICAgICogQHByb3BlcnR5IHtIYXNoZXJ9IGhhc2hlciBUaGUgaGFzaGVyIHRvIHVzZS4gRGVmYXVsdDogU0hBMVxuXHQgICAgICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBpdGVyYXRpb25zIFRoZSBudW1iZXIgb2YgaXRlcmF0aW9ucyB0byBwZXJmb3JtLiBEZWZhdWx0OiAxXG5cdCAgICAgICAgICovXG5cdCAgICAgICAgY2ZnOiBCYXNlLmV4dGVuZCh7XG5cdCAgICAgICAgICAgIGtleVNpemU6IDEyOC8zMixcblx0ICAgICAgICAgICAgaGFzaGVyOiBTSEExLFxuXHQgICAgICAgICAgICBpdGVyYXRpb25zOiAxXG5cdCAgICAgICAgfSksXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBJbml0aWFsaXplcyBhIG5ld2x5IGNyZWF0ZWQga2V5IGRlcml2YXRpb24gZnVuY3Rpb24uXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gY2ZnIChPcHRpb25hbCkgVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byB1c2UgZm9yIHRoZSBkZXJpdmF0aW9uLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIga2RmID0gQ3J5cHRvSlMuYWxnby5QQktERjIuY3JlYXRlKCk7XG5cdCAgICAgICAgICogICAgIHZhciBrZGYgPSBDcnlwdG9KUy5hbGdvLlBCS0RGMi5jcmVhdGUoeyBrZXlTaXplOiA4IH0pO1xuXHQgICAgICAgICAqICAgICB2YXIga2RmID0gQ3J5cHRvSlMuYWxnby5QQktERjIuY3JlYXRlKHsga2V5U2l6ZTogOCwgaXRlcmF0aW9uczogMTAwMCB9KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBpbml0OiBmdW5jdGlvbiAoY2ZnKSB7XG5cdCAgICAgICAgICAgIHRoaXMuY2ZnID0gdGhpcy5jZmcuZXh0ZW5kKGNmZyk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENvbXB1dGVzIHRoZSBQYXNzd29yZC1CYXNlZCBLZXkgRGVyaXZhdGlvbiBGdW5jdGlvbiAyLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBwYXNzd29yZCBUaGUgcGFzc3dvcmQuXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBzYWx0IEEgc2FsdC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIGRlcml2ZWQga2V5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIga2V5ID0ga2RmLmNvbXB1dGUocGFzc3dvcmQsIHNhbHQpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGNvbXB1dGU6IGZ1bmN0aW9uIChwYXNzd29yZCwgc2FsdCkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dFxuXHQgICAgICAgICAgICB2YXIgY2ZnID0gdGhpcy5jZmc7XG5cblx0ICAgICAgICAgICAgLy8gSW5pdCBITUFDXG5cdCAgICAgICAgICAgIHZhciBobWFjID0gSE1BQy5jcmVhdGUoY2ZnLmhhc2hlciwgcGFzc3dvcmQpO1xuXG5cdCAgICAgICAgICAgIC8vIEluaXRpYWwgdmFsdWVzXG5cdCAgICAgICAgICAgIHZhciBkZXJpdmVkS2V5ID0gV29yZEFycmF5LmNyZWF0ZSgpO1xuXHQgICAgICAgICAgICB2YXIgYmxvY2tJbmRleCA9IFdvcmRBcnJheS5jcmVhdGUoWzB4MDAwMDAwMDFdKTtcblxuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIGRlcml2ZWRLZXlXb3JkcyA9IGRlcml2ZWRLZXkud29yZHM7XG5cdCAgICAgICAgICAgIHZhciBibG9ja0luZGV4V29yZHMgPSBibG9ja0luZGV4LndvcmRzO1xuXHQgICAgICAgICAgICB2YXIga2V5U2l6ZSA9IGNmZy5rZXlTaXplO1xuXHQgICAgICAgICAgICB2YXIgaXRlcmF0aW9ucyA9IGNmZy5pdGVyYXRpb25zO1xuXG5cdCAgICAgICAgICAgIC8vIEdlbmVyYXRlIGtleVxuXHQgICAgICAgICAgICB3aGlsZSAoZGVyaXZlZEtleVdvcmRzLmxlbmd0aCA8IGtleVNpemUpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBibG9jayA9IGhtYWMudXBkYXRlKHNhbHQpLmZpbmFsaXplKGJsb2NrSW5kZXgpO1xuXHQgICAgICAgICAgICAgICAgaG1hYy5yZXNldCgpO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgICAgIHZhciBibG9ja1dvcmRzID0gYmxvY2sud29yZHM7XG5cdCAgICAgICAgICAgICAgICB2YXIgYmxvY2tXb3Jkc0xlbmd0aCA9IGJsb2NrV29yZHMubGVuZ3RoO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBJdGVyYXRpb25zXG5cdCAgICAgICAgICAgICAgICB2YXIgaW50ZXJtZWRpYXRlID0gYmxvY2s7XG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGl0ZXJhdGlvbnM7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIGludGVybWVkaWF0ZSA9IGhtYWMuZmluYWxpemUoaW50ZXJtZWRpYXRlKTtcblx0ICAgICAgICAgICAgICAgICAgICBobWFjLnJlc2V0KCk7XG5cblx0ICAgICAgICAgICAgICAgICAgICAvLyBTaG9ydGN1dFxuXHQgICAgICAgICAgICAgICAgICAgIHZhciBpbnRlcm1lZGlhdGVXb3JkcyA9IGludGVybWVkaWF0ZS53b3JkcztcblxuXHQgICAgICAgICAgICAgICAgICAgIC8vIFhPUiBpbnRlcm1lZGlhdGUgd2l0aCBibG9ja1xuXHQgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgYmxvY2tXb3Jkc0xlbmd0aDsgaisrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrV29yZHNbal0gXj0gaW50ZXJtZWRpYXRlV29yZHNbal07XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgICAgICBkZXJpdmVkS2V5LmNvbmNhdChibG9jayk7XG5cdCAgICAgICAgICAgICAgICBibG9ja0luZGV4V29yZHNbMF0rKztcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBkZXJpdmVkS2V5LnNpZ0J5dGVzID0ga2V5U2l6ZSAqIDQ7XG5cblx0ICAgICAgICAgICAgcmV0dXJuIGRlcml2ZWRLZXk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogQ29tcHV0ZXMgdGhlIFBhc3N3b3JkLUJhc2VkIEtleSBEZXJpdmF0aW9uIEZ1bmN0aW9uIDIuXG5cdCAgICAgKlxuXHQgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBwYXNzd29yZCBUaGUgcGFzc3dvcmQuXG5cdCAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IHNhbHQgQSBzYWx0LlxuXHQgICAgICogQHBhcmFtIHtPYmplY3R9IGNmZyAoT3B0aW9uYWwpIFRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gdXNlIGZvciB0aGlzIGNvbXB1dGF0aW9uLlxuXHQgICAgICpcblx0ICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIGRlcml2ZWQga2V5LlxuXHQgICAgICpcblx0ICAgICAqIEBzdGF0aWNcblx0ICAgICAqXG5cdCAgICAgKiBAZXhhbXBsZVxuXHQgICAgICpcblx0ICAgICAqICAgICB2YXIga2V5ID0gQ3J5cHRvSlMuUEJLREYyKHBhc3N3b3JkLCBzYWx0KTtcblx0ICAgICAqICAgICB2YXIga2V5ID0gQ3J5cHRvSlMuUEJLREYyKHBhc3N3b3JkLCBzYWx0LCB7IGtleVNpemU6IDggfSk7XG5cdCAgICAgKiAgICAgdmFyIGtleSA9IENyeXB0b0pTLlBCS0RGMihwYXNzd29yZCwgc2FsdCwgeyBrZXlTaXplOiA4LCBpdGVyYXRpb25zOiAxMDAwIH0pO1xuXHQgICAgICovXG5cdCAgICBDLlBCS0RGMiA9IGZ1bmN0aW9uIChwYXNzd29yZCwgc2FsdCwgY2ZnKSB7XG5cdCAgICAgICAgcmV0dXJuIFBCS0RGMi5jcmVhdGUoY2ZnKS5jb21wdXRlKHBhc3N3b3JkLCBzYWx0KTtcblx0ICAgIH07XG5cdH0oKSk7XG5cblxuXHQoZnVuY3Rpb24gKCkge1xuXHQgICAgLy8gU2hvcnRjdXRzXG5cdCAgICB2YXIgQyA9IENyeXB0b0pTO1xuXHQgICAgdmFyIENfbGliID0gQy5saWI7XG5cdCAgICB2YXIgQmFzZSA9IENfbGliLkJhc2U7XG5cdCAgICB2YXIgV29yZEFycmF5ID0gQ19saWIuV29yZEFycmF5O1xuXHQgICAgdmFyIENfYWxnbyA9IEMuYWxnbztcblx0ICAgIHZhciBNRDUgPSBDX2FsZ28uTUQ1O1xuXG5cdCAgICAvKipcblx0ICAgICAqIFRoaXMga2V5IGRlcml2YXRpb24gZnVuY3Rpb24gaXMgbWVhbnQgdG8gY29uZm9ybSB3aXRoIEVWUF9CeXRlc1RvS2V5LlxuXHQgICAgICogd3d3Lm9wZW5zc2wub3JnL2RvY3MvY3J5cHRvL0VWUF9CeXRlc1RvS2V5Lmh0bWxcblx0ICAgICAqL1xuXHQgICAgdmFyIEV2cEtERiA9IENfYWxnby5FdnBLREYgPSBCYXNlLmV4dGVuZCh7XG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29uZmlndXJhdGlvbiBvcHRpb25zLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHByb3BlcnR5IHtudW1iZXJ9IGtleVNpemUgVGhlIGtleSBzaXplIGluIHdvcmRzIHRvIGdlbmVyYXRlLiBEZWZhdWx0OiA0ICgxMjggYml0cylcblx0ICAgICAgICAgKiBAcHJvcGVydHkge0hhc2hlcn0gaGFzaGVyIFRoZSBoYXNoIGFsZ29yaXRobSB0byB1c2UuIERlZmF1bHQ6IE1ENVxuXHQgICAgICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBpdGVyYXRpb25zIFRoZSBudW1iZXIgb2YgaXRlcmF0aW9ucyB0byBwZXJmb3JtLiBEZWZhdWx0OiAxXG5cdCAgICAgICAgICovXG5cdCAgICAgICAgY2ZnOiBCYXNlLmV4dGVuZCh7XG5cdCAgICAgICAgICAgIGtleVNpemU6IDEyOC8zMixcblx0ICAgICAgICAgICAgaGFzaGVyOiBNRDUsXG5cdCAgICAgICAgICAgIGl0ZXJhdGlvbnM6IDFcblx0ICAgICAgICB9KSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIEluaXRpYWxpemVzIGEgbmV3bHkgY3JlYXRlZCBrZXkgZGVyaXZhdGlvbiBmdW5jdGlvbi5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjZmcgKE9wdGlvbmFsKSBUaGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIHVzZSBmb3IgdGhlIGRlcml2YXRpb24uXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBrZGYgPSBDcnlwdG9KUy5hbGdvLkV2cEtERi5jcmVhdGUoKTtcblx0ICAgICAgICAgKiAgICAgdmFyIGtkZiA9IENyeXB0b0pTLmFsZ28uRXZwS0RGLmNyZWF0ZSh7IGtleVNpemU6IDggfSk7XG5cdCAgICAgICAgICogICAgIHZhciBrZGYgPSBDcnlwdG9KUy5hbGdvLkV2cEtERi5jcmVhdGUoeyBrZXlTaXplOiA4LCBpdGVyYXRpb25zOiAxMDAwIH0pO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGluaXQ6IGZ1bmN0aW9uIChjZmcpIHtcblx0ICAgICAgICAgICAgdGhpcy5jZmcgPSB0aGlzLmNmZy5leHRlbmQoY2ZnKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogRGVyaXZlcyBhIGtleSBmcm9tIGEgcGFzc3dvcmQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IHBhc3N3b3JkIFRoZSBwYXNzd29yZC5cblx0ICAgICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IHNhbHQgQSBzYWx0LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgZGVyaXZlZCBrZXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBrZXkgPSBrZGYuY29tcHV0ZShwYXNzd29yZCwgc2FsdCk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgY29tcHV0ZTogZnVuY3Rpb24gKHBhc3N3b3JkLCBzYWx0KSB7XG5cdCAgICAgICAgICAgIHZhciBibG9jaztcblxuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dFxuXHQgICAgICAgICAgICB2YXIgY2ZnID0gdGhpcy5jZmc7XG5cblx0ICAgICAgICAgICAgLy8gSW5pdCBoYXNoZXJcblx0ICAgICAgICAgICAgdmFyIGhhc2hlciA9IGNmZy5oYXNoZXIuY3JlYXRlKCk7XG5cblx0ICAgICAgICAgICAgLy8gSW5pdGlhbCB2YWx1ZXNcblx0ICAgICAgICAgICAgdmFyIGRlcml2ZWRLZXkgPSBXb3JkQXJyYXkuY3JlYXRlKCk7XG5cblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBkZXJpdmVkS2V5V29yZHMgPSBkZXJpdmVkS2V5LndvcmRzO1xuXHQgICAgICAgICAgICB2YXIga2V5U2l6ZSA9IGNmZy5rZXlTaXplO1xuXHQgICAgICAgICAgICB2YXIgaXRlcmF0aW9ucyA9IGNmZy5pdGVyYXRpb25zO1xuXG5cdCAgICAgICAgICAgIC8vIEdlbmVyYXRlIGtleVxuXHQgICAgICAgICAgICB3aGlsZSAoZGVyaXZlZEtleVdvcmRzLmxlbmd0aCA8IGtleVNpemUpIHtcblx0ICAgICAgICAgICAgICAgIGlmIChibG9jaykge1xuXHQgICAgICAgICAgICAgICAgICAgIGhhc2hlci51cGRhdGUoYmxvY2spO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgYmxvY2sgPSBoYXNoZXIudXBkYXRlKHBhc3N3b3JkKS5maW5hbGl6ZShzYWx0KTtcblx0ICAgICAgICAgICAgICAgIGhhc2hlci5yZXNldCgpO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBJdGVyYXRpb25zXG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGl0ZXJhdGlvbnM7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIGJsb2NrID0gaGFzaGVyLmZpbmFsaXplKGJsb2NrKTtcblx0ICAgICAgICAgICAgICAgICAgICBoYXNoZXIucmVzZXQoKTtcblx0ICAgICAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAgICAgZGVyaXZlZEtleS5jb25jYXQoYmxvY2spO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGRlcml2ZWRLZXkuc2lnQnl0ZXMgPSBrZXlTaXplICogNDtcblxuXHQgICAgICAgICAgICByZXR1cm4gZGVyaXZlZEtleTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBEZXJpdmVzIGEga2V5IGZyb20gYSBwYXNzd29yZC5cblx0ICAgICAqXG5cdCAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IHBhc3N3b3JkIFRoZSBwYXNzd29yZC5cblx0ICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gc2FsdCBBIHNhbHQuXG5cdCAgICAgKiBAcGFyYW0ge09iamVjdH0gY2ZnIChPcHRpb25hbCkgVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byB1c2UgZm9yIHRoaXMgY29tcHV0YXRpb24uXG5cdCAgICAgKlxuXHQgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgZGVyaXZlZCBrZXkuXG5cdCAgICAgKlxuXHQgICAgICogQHN0YXRpY1xuXHQgICAgICpcblx0ICAgICAqIEBleGFtcGxlXG5cdCAgICAgKlxuXHQgICAgICogICAgIHZhciBrZXkgPSBDcnlwdG9KUy5FdnBLREYocGFzc3dvcmQsIHNhbHQpO1xuXHQgICAgICogICAgIHZhciBrZXkgPSBDcnlwdG9KUy5FdnBLREYocGFzc3dvcmQsIHNhbHQsIHsga2V5U2l6ZTogOCB9KTtcblx0ICAgICAqICAgICB2YXIga2V5ID0gQ3J5cHRvSlMuRXZwS0RGKHBhc3N3b3JkLCBzYWx0LCB7IGtleVNpemU6IDgsIGl0ZXJhdGlvbnM6IDEwMDAgfSk7XG5cdCAgICAgKi9cblx0ICAgIEMuRXZwS0RGID0gZnVuY3Rpb24gKHBhc3N3b3JkLCBzYWx0LCBjZmcpIHtcblx0ICAgICAgICByZXR1cm4gRXZwS0RGLmNyZWF0ZShjZmcpLmNvbXB1dGUocGFzc3dvcmQsIHNhbHQpO1xuXHQgICAgfTtcblx0fSgpKTtcblxuXG5cdChmdW5jdGlvbiAoKSB7XG5cdCAgICAvLyBTaG9ydGN1dHNcblx0ICAgIHZhciBDID0gQ3J5cHRvSlM7XG5cdCAgICB2YXIgQ19saWIgPSBDLmxpYjtcblx0ICAgIHZhciBXb3JkQXJyYXkgPSBDX2xpYi5Xb3JkQXJyYXk7XG5cdCAgICB2YXIgQ19hbGdvID0gQy5hbGdvO1xuXHQgICAgdmFyIFNIQTI1NiA9IENfYWxnby5TSEEyNTY7XG5cblx0ICAgIC8qKlxuXHQgICAgICogU0hBLTIyNCBoYXNoIGFsZ29yaXRobS5cblx0ICAgICAqL1xuXHQgICAgdmFyIFNIQTIyNCA9IENfYWxnby5TSEEyMjQgPSBTSEEyNTYuZXh0ZW5kKHtcblx0ICAgICAgICBfZG9SZXNldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB0aGlzLl9oYXNoID0gbmV3IFdvcmRBcnJheS5pbml0KFtcblx0ICAgICAgICAgICAgICAgIDB4YzEwNTllZDgsIDB4MzY3Y2Q1MDcsIDB4MzA3MGRkMTcsIDB4ZjcwZTU5MzksXG5cdCAgICAgICAgICAgICAgICAweGZmYzAwYjMxLCAweDY4NTgxNTExLCAweDY0Zjk4ZmE3LCAweGJlZmE0ZmE0XG5cdCAgICAgICAgICAgIF0pO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBfZG9GaW5hbGl6ZTogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgaGFzaCA9IFNIQTI1Ni5fZG9GaW5hbGl6ZS5jYWxsKHRoaXMpO1xuXG5cdCAgICAgICAgICAgIGhhc2guc2lnQnl0ZXMgLT0gNDtcblxuXHQgICAgICAgICAgICByZXR1cm4gaGFzaDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBTaG9ydGN1dCBmdW5jdGlvbiB0byB0aGUgaGFzaGVyJ3Mgb2JqZWN0IGludGVyZmFjZS5cblx0ICAgICAqXG5cdCAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gaGFzaC5cblx0ICAgICAqXG5cdCAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSBoYXNoLlxuXHQgICAgICpcblx0ICAgICAqIEBzdGF0aWNcblx0ICAgICAqXG5cdCAgICAgKiBAZXhhbXBsZVxuXHQgICAgICpcblx0ICAgICAqICAgICB2YXIgaGFzaCA9IENyeXB0b0pTLlNIQTIyNCgnbWVzc2FnZScpO1xuXHQgICAgICogICAgIHZhciBoYXNoID0gQ3J5cHRvSlMuU0hBMjI0KHdvcmRBcnJheSk7XG5cdCAgICAgKi9cblx0ICAgIEMuU0hBMjI0ID0gU0hBMjU2Ll9jcmVhdGVIZWxwZXIoU0hBMjI0KTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBTaG9ydGN1dCBmdW5jdGlvbiB0byB0aGUgSE1BQydzIG9iamVjdCBpbnRlcmZhY2UuXG5cdCAgICAgKlxuXHQgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBtZXNzYWdlIFRoZSBtZXNzYWdlIHRvIGhhc2guXG5cdCAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IGtleSBUaGUgc2VjcmV0IGtleS5cblx0ICAgICAqXG5cdCAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSBITUFDLlxuXHQgICAgICpcblx0ICAgICAqIEBzdGF0aWNcblx0ICAgICAqXG5cdCAgICAgKiBAZXhhbXBsZVxuXHQgICAgICpcblx0ICAgICAqICAgICB2YXIgaG1hYyA9IENyeXB0b0pTLkhtYWNTSEEyMjQobWVzc2FnZSwga2V5KTtcblx0ICAgICAqL1xuXHQgICAgQy5IbWFjU0hBMjI0ID0gU0hBMjU2Ll9jcmVhdGVIbWFjSGVscGVyKFNIQTIyNCk7XG5cdH0oKSk7XG5cblxuXHQoZnVuY3Rpb24gKHVuZGVmaW5lZCkge1xuXHQgICAgLy8gU2hvcnRjdXRzXG5cdCAgICB2YXIgQyA9IENyeXB0b0pTO1xuXHQgICAgdmFyIENfbGliID0gQy5saWI7XG5cdCAgICB2YXIgQmFzZSA9IENfbGliLkJhc2U7XG5cdCAgICB2YXIgWDMyV29yZEFycmF5ID0gQ19saWIuV29yZEFycmF5O1xuXG5cdCAgICAvKipcblx0ICAgICAqIHg2NCBuYW1lc3BhY2UuXG5cdCAgICAgKi9cblx0ICAgIHZhciBDX3g2NCA9IEMueDY0ID0ge307XG5cblx0ICAgIC8qKlxuXHQgICAgICogQSA2NC1iaXQgd29yZC5cblx0ICAgICAqL1xuXHQgICAgdmFyIFg2NFdvcmQgPSBDX3g2NC5Xb3JkID0gQmFzZS5leHRlbmQoe1xuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIEluaXRpYWxpemVzIGEgbmV3bHkgY3JlYXRlZCA2NC1iaXQgd29yZC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBoaWdoIFRoZSBoaWdoIDMyIGJpdHMuXG5cdCAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IGxvdyBUaGUgbG93IDMyIGJpdHMuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciB4NjRXb3JkID0gQ3J5cHRvSlMueDY0LldvcmQuY3JlYXRlKDB4MDAwMTAyMDMsIDB4MDQwNTA2MDcpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGluaXQ6IGZ1bmN0aW9uIChoaWdoLCBsb3cpIHtcblx0ICAgICAgICAgICAgdGhpcy5oaWdoID0gaGlnaDtcblx0ICAgICAgICAgICAgdGhpcy5sb3cgPSBsb3c7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQml0d2lzZSBOT1RzIHRoaXMgd29yZC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1g2NFdvcmR9IEEgbmV3IHg2NC1Xb3JkIG9iamVjdCBhZnRlciBuZWdhdGluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIG5lZ2F0ZWQgPSB4NjRXb3JkLm5vdCgpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIC8vIG5vdDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAvLyB2YXIgaGlnaCA9IH50aGlzLmhpZ2g7XG5cdCAgICAgICAgICAgIC8vIHZhciBsb3cgPSB+dGhpcy5sb3c7XG5cblx0ICAgICAgICAgICAgLy8gcmV0dXJuIFg2NFdvcmQuY3JlYXRlKGhpZ2gsIGxvdyk7XG5cdCAgICAgICAgLy8gfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIEJpdHdpc2UgQU5EcyB0aGlzIHdvcmQgd2l0aCB0aGUgcGFzc2VkIHdvcmQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge1g2NFdvcmR9IHdvcmQgVGhlIHg2NC1Xb3JkIHRvIEFORCB3aXRoIHRoaXMgd29yZC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1g2NFdvcmR9IEEgbmV3IHg2NC1Xb3JkIG9iamVjdCBhZnRlciBBTkRpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBhbmRlZCA9IHg2NFdvcmQuYW5kKGFub3RoZXJYNjRXb3JkKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICAvLyBhbmQ6IGZ1bmN0aW9uICh3b3JkKSB7XG5cdCAgICAgICAgICAgIC8vIHZhciBoaWdoID0gdGhpcy5oaWdoICYgd29yZC5oaWdoO1xuXHQgICAgICAgICAgICAvLyB2YXIgbG93ID0gdGhpcy5sb3cgJiB3b3JkLmxvdztcblxuXHQgICAgICAgICAgICAvLyByZXR1cm4gWDY0V29yZC5jcmVhdGUoaGlnaCwgbG93KTtcblx0ICAgICAgICAvLyB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQml0d2lzZSBPUnMgdGhpcyB3b3JkIHdpdGggdGhlIHBhc3NlZCB3b3JkLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtYNjRXb3JkfSB3b3JkIFRoZSB4NjQtV29yZCB0byBPUiB3aXRoIHRoaXMgd29yZC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1g2NFdvcmR9IEEgbmV3IHg2NC1Xb3JkIG9iamVjdCBhZnRlciBPUmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIG9yZWQgPSB4NjRXb3JkLm9yKGFub3RoZXJYNjRXb3JkKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICAvLyBvcjogZnVuY3Rpb24gKHdvcmQpIHtcblx0ICAgICAgICAgICAgLy8gdmFyIGhpZ2ggPSB0aGlzLmhpZ2ggfCB3b3JkLmhpZ2g7XG5cdCAgICAgICAgICAgIC8vIHZhciBsb3cgPSB0aGlzLmxvdyB8IHdvcmQubG93O1xuXG5cdCAgICAgICAgICAgIC8vIHJldHVybiBYNjRXb3JkLmNyZWF0ZShoaWdoLCBsb3cpO1xuXHQgICAgICAgIC8vIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBCaXR3aXNlIFhPUnMgdGhpcyB3b3JkIHdpdGggdGhlIHBhc3NlZCB3b3JkLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtYNjRXb3JkfSB3b3JkIFRoZSB4NjQtV29yZCB0byBYT1Igd2l0aCB0aGlzIHdvcmQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtYNjRXb3JkfSBBIG5ldyB4NjQtV29yZCBvYmplY3QgYWZ0ZXIgWE9SaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgeG9yZWQgPSB4NjRXb3JkLnhvcihhbm90aGVyWDY0V29yZCk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgLy8geG9yOiBmdW5jdGlvbiAod29yZCkge1xuXHQgICAgICAgICAgICAvLyB2YXIgaGlnaCA9IHRoaXMuaGlnaCBeIHdvcmQuaGlnaDtcblx0ICAgICAgICAgICAgLy8gdmFyIGxvdyA9IHRoaXMubG93IF4gd29yZC5sb3c7XG5cblx0ICAgICAgICAgICAgLy8gcmV0dXJuIFg2NFdvcmQuY3JlYXRlKGhpZ2gsIGxvdyk7XG5cdCAgICAgICAgLy8gfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIFNoaWZ0cyB0aGlzIHdvcmQgbiBiaXRzIHRvIHRoZSBsZWZ0LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IG4gVGhlIG51bWJlciBvZiBiaXRzIHRvIHNoaWZ0LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7WDY0V29yZH0gQSBuZXcgeDY0LVdvcmQgb2JqZWN0IGFmdGVyIHNoaWZ0aW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgc2hpZnRlZCA9IHg2NFdvcmQuc2hpZnRMKDI1KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICAvLyBzaGlmdEw6IGZ1bmN0aW9uIChuKSB7XG5cdCAgICAgICAgICAgIC8vIGlmIChuIDwgMzIpIHtcblx0ICAgICAgICAgICAgICAgIC8vIHZhciBoaWdoID0gKHRoaXMuaGlnaCA8PCBuKSB8ICh0aGlzLmxvdyA+Pj4gKDMyIC0gbikpO1xuXHQgICAgICAgICAgICAgICAgLy8gdmFyIGxvdyA9IHRoaXMubG93IDw8IG47XG5cdCAgICAgICAgICAgIC8vIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAvLyB2YXIgaGlnaCA9IHRoaXMubG93IDw8IChuIC0gMzIpO1xuXHQgICAgICAgICAgICAgICAgLy8gdmFyIGxvdyA9IDA7XG5cdCAgICAgICAgICAgIC8vIH1cblxuXHQgICAgICAgICAgICAvLyByZXR1cm4gWDY0V29yZC5jcmVhdGUoaGlnaCwgbG93KTtcblx0ICAgICAgICAvLyB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogU2hpZnRzIHRoaXMgd29yZCBuIGJpdHMgdG8gdGhlIHJpZ2h0LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IG4gVGhlIG51bWJlciBvZiBiaXRzIHRvIHNoaWZ0LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7WDY0V29yZH0gQSBuZXcgeDY0LVdvcmQgb2JqZWN0IGFmdGVyIHNoaWZ0aW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgc2hpZnRlZCA9IHg2NFdvcmQuc2hpZnRSKDcpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIC8vIHNoaWZ0UjogZnVuY3Rpb24gKG4pIHtcblx0ICAgICAgICAgICAgLy8gaWYgKG4gPCAzMikge1xuXHQgICAgICAgICAgICAgICAgLy8gdmFyIGxvdyA9ICh0aGlzLmxvdyA+Pj4gbikgfCAodGhpcy5oaWdoIDw8ICgzMiAtIG4pKTtcblx0ICAgICAgICAgICAgICAgIC8vIHZhciBoaWdoID0gdGhpcy5oaWdoID4+PiBuO1xuXHQgICAgICAgICAgICAvLyB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgLy8gdmFyIGxvdyA9IHRoaXMuaGlnaCA+Pj4gKG4gLSAzMik7XG5cdCAgICAgICAgICAgICAgICAvLyB2YXIgaGlnaCA9IDA7XG5cdCAgICAgICAgICAgIC8vIH1cblxuXHQgICAgICAgICAgICAvLyByZXR1cm4gWDY0V29yZC5jcmVhdGUoaGlnaCwgbG93KTtcblx0ICAgICAgICAvLyB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogUm90YXRlcyB0aGlzIHdvcmQgbiBiaXRzIHRvIHRoZSBsZWZ0LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IG4gVGhlIG51bWJlciBvZiBiaXRzIHRvIHJvdGF0ZS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1g2NFdvcmR9IEEgbmV3IHg2NC1Xb3JkIG9iamVjdCBhZnRlciByb3RhdGluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIHJvdGF0ZWQgPSB4NjRXb3JkLnJvdEwoMjUpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIC8vIHJvdEw6IGZ1bmN0aW9uIChuKSB7XG5cdCAgICAgICAgICAgIC8vIHJldHVybiB0aGlzLnNoaWZ0TChuKS5vcih0aGlzLnNoaWZ0Uig2NCAtIG4pKTtcblx0ICAgICAgICAvLyB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogUm90YXRlcyB0aGlzIHdvcmQgbiBiaXRzIHRvIHRoZSByaWdodC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBuIFRoZSBudW1iZXIgb2YgYml0cyB0byByb3RhdGUuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtYNjRXb3JkfSBBIG5ldyB4NjQtV29yZCBvYmplY3QgYWZ0ZXIgcm90YXRpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciByb3RhdGVkID0geDY0V29yZC5yb3RSKDcpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIC8vIHJvdFI6IGZ1bmN0aW9uIChuKSB7XG5cdCAgICAgICAgICAgIC8vIHJldHVybiB0aGlzLnNoaWZ0UihuKS5vcih0aGlzLnNoaWZ0TCg2NCAtIG4pKTtcblx0ICAgICAgICAvLyB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQWRkcyB0aGlzIHdvcmQgd2l0aCB0aGUgcGFzc2VkIHdvcmQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge1g2NFdvcmR9IHdvcmQgVGhlIHg2NC1Xb3JkIHRvIGFkZCB3aXRoIHRoaXMgd29yZC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1g2NFdvcmR9IEEgbmV3IHg2NC1Xb3JkIG9iamVjdCBhZnRlciBhZGRpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBhZGRlZCA9IHg2NFdvcmQuYWRkKGFub3RoZXJYNjRXb3JkKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICAvLyBhZGQ6IGZ1bmN0aW9uICh3b3JkKSB7XG5cdCAgICAgICAgICAgIC8vIHZhciBsb3cgPSAodGhpcy5sb3cgKyB3b3JkLmxvdykgfCAwO1xuXHQgICAgICAgICAgICAvLyB2YXIgY2FycnkgPSAobG93ID4+PiAwKSA8ICh0aGlzLmxvdyA+Pj4gMCkgPyAxIDogMDtcblx0ICAgICAgICAgICAgLy8gdmFyIGhpZ2ggPSAodGhpcy5oaWdoICsgd29yZC5oaWdoICsgY2FycnkpIHwgMDtcblxuXHQgICAgICAgICAgICAvLyByZXR1cm4gWDY0V29yZC5jcmVhdGUoaGlnaCwgbG93KTtcblx0ICAgICAgICAvLyB9XG5cdCAgICB9KTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBBbiBhcnJheSBvZiA2NC1iaXQgd29yZHMuXG5cdCAgICAgKlxuXHQgICAgICogQHByb3BlcnR5IHtBcnJheX0gd29yZHMgVGhlIGFycmF5IG9mIENyeXB0b0pTLng2NC5Xb3JkIG9iamVjdHMuXG5cdCAgICAgKiBAcHJvcGVydHkge251bWJlcn0gc2lnQnl0ZXMgVGhlIG51bWJlciBvZiBzaWduaWZpY2FudCBieXRlcyBpbiB0aGlzIHdvcmQgYXJyYXkuXG5cdCAgICAgKi9cblx0ICAgIHZhciBYNjRXb3JkQXJyYXkgPSBDX3g2NC5Xb3JkQXJyYXkgPSBCYXNlLmV4dGVuZCh7XG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogSW5pdGlhbGl6ZXMgYSBuZXdseSBjcmVhdGVkIHdvcmQgYXJyYXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge0FycmF5fSB3b3JkcyAoT3B0aW9uYWwpIEFuIGFycmF5IG9mIENyeXB0b0pTLng2NC5Xb3JkIG9iamVjdHMuXG5cdCAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IHNpZ0J5dGVzIChPcHRpb25hbCkgVGhlIG51bWJlciBvZiBzaWduaWZpY2FudCBieXRlcyBpbiB0aGUgd29yZHMuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciB3b3JkQXJyYXkgPSBDcnlwdG9KUy54NjQuV29yZEFycmF5LmNyZWF0ZSgpO1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciB3b3JkQXJyYXkgPSBDcnlwdG9KUy54NjQuV29yZEFycmF5LmNyZWF0ZShbXG5cdCAgICAgICAgICogICAgICAgICBDcnlwdG9KUy54NjQuV29yZC5jcmVhdGUoMHgwMDAxMDIwMywgMHgwNDA1MDYwNyksXG5cdCAgICAgICAgICogICAgICAgICBDcnlwdG9KUy54NjQuV29yZC5jcmVhdGUoMHgxODE5MWExYiwgMHgxYzFkMWUxZilcblx0ICAgICAgICAgKiAgICAgXSk7XG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIHdvcmRBcnJheSA9IENyeXB0b0pTLng2NC5Xb3JkQXJyYXkuY3JlYXRlKFtcblx0ICAgICAgICAgKiAgICAgICAgIENyeXB0b0pTLng2NC5Xb3JkLmNyZWF0ZSgweDAwMDEwMjAzLCAweDA0MDUwNjA3KSxcblx0ICAgICAgICAgKiAgICAgICAgIENyeXB0b0pTLng2NC5Xb3JkLmNyZWF0ZSgweDE4MTkxYTFiLCAweDFjMWQxZTFmKVxuXHQgICAgICAgICAqICAgICBdLCAxMCk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgaW5pdDogZnVuY3Rpb24gKHdvcmRzLCBzaWdCeXRlcykge1xuXHQgICAgICAgICAgICB3b3JkcyA9IHRoaXMud29yZHMgPSB3b3JkcyB8fCBbXTtcblxuXHQgICAgICAgICAgICBpZiAoc2lnQnl0ZXMgIT0gdW5kZWZpbmVkKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLnNpZ0J5dGVzID0gc2lnQnl0ZXM7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLnNpZ0J5dGVzID0gd29yZHMubGVuZ3RoICogODtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb252ZXJ0cyB0aGlzIDY0LWJpdCB3b3JkIGFycmF5IHRvIGEgMzItYml0IHdvcmQgYXJyYXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtDcnlwdG9KUy5saWIuV29yZEFycmF5fSBUaGlzIHdvcmQgYXJyYXkncyBkYXRhIGFzIGEgMzItYml0IHdvcmQgYXJyYXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciB4MzJXb3JkQXJyYXkgPSB4NjRXb3JkQXJyYXkudG9YMzIoKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICB0b1gzMjogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIHg2NFdvcmRzID0gdGhpcy53b3Jkcztcblx0ICAgICAgICAgICAgdmFyIHg2NFdvcmRzTGVuZ3RoID0geDY0V29yZHMubGVuZ3RoO1xuXG5cdCAgICAgICAgICAgIC8vIENvbnZlcnRcblx0ICAgICAgICAgICAgdmFyIHgzMldvcmRzID0gW107XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgeDY0V29yZHNMZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgdmFyIHg2NFdvcmQgPSB4NjRXb3Jkc1tpXTtcblx0ICAgICAgICAgICAgICAgIHgzMldvcmRzLnB1c2goeDY0V29yZC5oaWdoKTtcblx0ICAgICAgICAgICAgICAgIHgzMldvcmRzLnB1c2goeDY0V29yZC5sb3cpO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgcmV0dXJuIFgzMldvcmRBcnJheS5jcmVhdGUoeDMyV29yZHMsIHRoaXMuc2lnQnl0ZXMpO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDcmVhdGVzIGEgY29weSBvZiB0aGlzIHdvcmQgYXJyYXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtYNjRXb3JkQXJyYXl9IFRoZSBjbG9uZS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIGNsb25lID0geDY0V29yZEFycmF5LmNsb25lKCk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgY2xvbmU6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIGNsb25lID0gQmFzZS5jbG9uZS5jYWxsKHRoaXMpO1xuXG5cdCAgICAgICAgICAgIC8vIENsb25lIFwid29yZHNcIiBhcnJheVxuXHQgICAgICAgICAgICB2YXIgd29yZHMgPSBjbG9uZS53b3JkcyA9IHRoaXMud29yZHMuc2xpY2UoMCk7XG5cblx0ICAgICAgICAgICAgLy8gQ2xvbmUgZWFjaCBYNjRXb3JkIG9iamVjdFxuXHQgICAgICAgICAgICB2YXIgd29yZHNMZW5ndGggPSB3b3Jkcy5sZW5ndGg7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgd29yZHNMZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgd29yZHNbaV0gPSB3b3Jkc1tpXS5jbG9uZSgpO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgcmV0dXJuIGNsb25lO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHR9KCkpO1xuXG5cblx0KGZ1bmN0aW9uIChNYXRoKSB7XG5cdCAgICAvLyBTaG9ydGN1dHNcblx0ICAgIHZhciBDID0gQ3J5cHRvSlM7XG5cdCAgICB2YXIgQ19saWIgPSBDLmxpYjtcblx0ICAgIHZhciBXb3JkQXJyYXkgPSBDX2xpYi5Xb3JkQXJyYXk7XG5cdCAgICB2YXIgSGFzaGVyID0gQ19saWIuSGFzaGVyO1xuXHQgICAgdmFyIENfeDY0ID0gQy54NjQ7XG5cdCAgICB2YXIgWDY0V29yZCA9IENfeDY0LldvcmQ7XG5cdCAgICB2YXIgQ19hbGdvID0gQy5hbGdvO1xuXG5cdCAgICAvLyBDb25zdGFudHMgdGFibGVzXG5cdCAgICB2YXIgUkhPX09GRlNFVFMgPSBbXTtcblx0ICAgIHZhciBQSV9JTkRFWEVTICA9IFtdO1xuXHQgICAgdmFyIFJPVU5EX0NPTlNUQU5UUyA9IFtdO1xuXG5cdCAgICAvLyBDb21wdXRlIENvbnN0YW50c1xuXHQgICAgKGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAvLyBDb21wdXRlIHJobyBvZmZzZXQgY29uc3RhbnRzXG5cdCAgICAgICAgdmFyIHggPSAxLCB5ID0gMDtcblx0ICAgICAgICBmb3IgKHZhciB0ID0gMDsgdCA8IDI0OyB0KyspIHtcblx0ICAgICAgICAgICAgUkhPX09GRlNFVFNbeCArIDUgKiB5XSA9ICgodCArIDEpICogKHQgKyAyKSAvIDIpICUgNjQ7XG5cblx0ICAgICAgICAgICAgdmFyIG5ld1ggPSB5ICUgNTtcblx0ICAgICAgICAgICAgdmFyIG5ld1kgPSAoMiAqIHggKyAzICogeSkgJSA1O1xuXHQgICAgICAgICAgICB4ID0gbmV3WDtcblx0ICAgICAgICAgICAgeSA9IG5ld1k7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgLy8gQ29tcHV0ZSBwaSBpbmRleCBjb25zdGFudHNcblx0ICAgICAgICBmb3IgKHZhciB4ID0gMDsgeCA8IDU7IHgrKykge1xuXHQgICAgICAgICAgICBmb3IgKHZhciB5ID0gMDsgeSA8IDU7IHkrKykge1xuXHQgICAgICAgICAgICAgICAgUElfSU5ERVhFU1t4ICsgNSAqIHldID0geSArICgoMiAqIHggKyAzICogeSkgJSA1KSAqIDU7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cblx0ICAgICAgICAvLyBDb21wdXRlIHJvdW5kIGNvbnN0YW50c1xuXHQgICAgICAgIHZhciBMRlNSID0gMHgwMTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDI0OyBpKyspIHtcblx0ICAgICAgICAgICAgdmFyIHJvdW5kQ29uc3RhbnRNc3cgPSAwO1xuXHQgICAgICAgICAgICB2YXIgcm91bmRDb25zdGFudExzdyA9IDA7XG5cblx0ICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCA3OyBqKyspIHtcblx0ICAgICAgICAgICAgICAgIGlmIChMRlNSICYgMHgwMSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBiaXRQb3NpdGlvbiA9ICgxIDw8IGopIC0gMTtcblx0ICAgICAgICAgICAgICAgICAgICBpZiAoYml0UG9zaXRpb24gPCAzMikge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICByb3VuZENvbnN0YW50THN3IF49IDEgPDwgYml0UG9zaXRpb247XG5cdCAgICAgICAgICAgICAgICAgICAgfSBlbHNlIC8qIGlmIChiaXRQb3NpdGlvbiA+PSAzMikgKi8ge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICByb3VuZENvbnN0YW50TXN3IF49IDEgPDwgKGJpdFBvc2l0aW9uIC0gMzIpO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAgICAgLy8gQ29tcHV0ZSBuZXh0IExGU1Jcblx0ICAgICAgICAgICAgICAgIGlmIChMRlNSICYgMHg4MCkge1xuXHQgICAgICAgICAgICAgICAgICAgIC8vIFByaW1pdGl2ZSBwb2x5bm9taWFsIG92ZXIgR0YoMik6IHheOCArIHheNiArIHheNSArIHheNCArIDFcblx0ICAgICAgICAgICAgICAgICAgICBMRlNSID0gKExGU1IgPDwgMSkgXiAweDcxO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICBMRlNSIDw8PSAxO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgUk9VTkRfQ09OU1RBTlRTW2ldID0gWDY0V29yZC5jcmVhdGUocm91bmRDb25zdGFudE1zdywgcm91bmRDb25zdGFudExzdyk7XG5cdCAgICAgICAgfVxuXHQgICAgfSgpKTtcblxuXHQgICAgLy8gUmV1c2FibGUgb2JqZWN0cyBmb3IgdGVtcG9yYXJ5IHZhbHVlc1xuXHQgICAgdmFyIFQgPSBbXTtcblx0ICAgIChmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAyNTsgaSsrKSB7XG5cdCAgICAgICAgICAgIFRbaV0gPSBYNjRXb3JkLmNyZWF0ZSgpO1xuXHQgICAgICAgIH1cblx0ICAgIH0oKSk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogU0hBLTMgaGFzaCBhbGdvcml0aG0uXG5cdCAgICAgKi9cblx0ICAgIHZhciBTSEEzID0gQ19hbGdvLlNIQTMgPSBIYXNoZXIuZXh0ZW5kKHtcblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb25maWd1cmF0aW9uIG9wdGlvbnMuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcHJvcGVydHkge251bWJlcn0gb3V0cHV0TGVuZ3RoXG5cdCAgICAgICAgICogICBUaGUgZGVzaXJlZCBudW1iZXIgb2YgYml0cyBpbiB0aGUgb3V0cHV0IGhhc2guXG5cdCAgICAgICAgICogICBPbmx5IHZhbHVlcyBwZXJtaXR0ZWQgYXJlOiAyMjQsIDI1NiwgMzg0LCA1MTIuXG5cdCAgICAgICAgICogICBEZWZhdWx0OiA1MTJcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBjZmc6IEhhc2hlci5jZmcuZXh0ZW5kKHtcblx0ICAgICAgICAgICAgb3V0cHV0TGVuZ3RoOiA1MTJcblx0ICAgICAgICB9KSxcblxuXHQgICAgICAgIF9kb1Jlc2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBzdGF0ZSA9IHRoaXMuX3N0YXRlID0gW11cblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAyNTsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICBzdGF0ZVtpXSA9IG5ldyBYNjRXb3JkLmluaXQoKTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIHRoaXMuYmxvY2tTaXplID0gKDE2MDAgLSAyICogdGhpcy5jZmcub3V0cHV0TGVuZ3RoKSAvIDMyO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBfZG9Qcm9jZXNzQmxvY2s6IGZ1bmN0aW9uIChNLCBvZmZzZXQpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBzdGF0ZSA9IHRoaXMuX3N0YXRlO1xuXHQgICAgICAgICAgICB2YXIgbkJsb2NrU2l6ZUxhbmVzID0gdGhpcy5ibG9ja1NpemUgLyAyO1xuXG5cdCAgICAgICAgICAgIC8vIEFic29yYlxuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5CbG9ja1NpemVMYW5lczsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgICAgIHZhciBNMmkgID0gTVtvZmZzZXQgKyAyICogaV07XG5cdCAgICAgICAgICAgICAgICB2YXIgTTJpMSA9IE1bb2Zmc2V0ICsgMiAqIGkgKyAxXTtcblxuXHQgICAgICAgICAgICAgICAgLy8gU3dhcCBlbmRpYW5cblx0ICAgICAgICAgICAgICAgIE0yaSA9IChcblx0ICAgICAgICAgICAgICAgICAgICAoKChNMmkgPDwgOCkgIHwgKE0yaSA+Pj4gMjQpKSAmIDB4MDBmZjAwZmYpIHxcblx0ICAgICAgICAgICAgICAgICAgICAoKChNMmkgPDwgMjQpIHwgKE0yaSA+Pj4gOCkpICAmIDB4ZmYwMGZmMDApXG5cdCAgICAgICAgICAgICAgICApO1xuXHQgICAgICAgICAgICAgICAgTTJpMSA9IChcblx0ICAgICAgICAgICAgICAgICAgICAoKChNMmkxIDw8IDgpICB8IChNMmkxID4+PiAyNCkpICYgMHgwMGZmMDBmZikgfFxuXHQgICAgICAgICAgICAgICAgICAgICgoKE0yaTEgPDwgMjQpIHwgKE0yaTEgPj4+IDgpKSAgJiAweGZmMDBmZjAwKVxuXHQgICAgICAgICAgICAgICAgKTtcblxuXHQgICAgICAgICAgICAgICAgLy8gQWJzb3JiIG1lc3NhZ2UgaW50byBzdGF0ZVxuXHQgICAgICAgICAgICAgICAgdmFyIGxhbmUgPSBzdGF0ZVtpXTtcblx0ICAgICAgICAgICAgICAgIGxhbmUuaGlnaCBePSBNMmkxO1xuXHQgICAgICAgICAgICAgICAgbGFuZS5sb3cgIF49IE0yaTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIFJvdW5kc1xuXHQgICAgICAgICAgICBmb3IgKHZhciByb3VuZCA9IDA7IHJvdW5kIDwgMjQ7IHJvdW5kKyspIHtcblx0ICAgICAgICAgICAgICAgIC8vIFRoZXRhXG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciB4ID0gMDsgeCA8IDU7IHgrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIC8vIE1peCBjb2x1bW4gbGFuZXNcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgdE1zdyA9IDAsIHRMc3cgPSAwO1xuXHQgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIHkgPSAwOyB5IDwgNTsgeSsrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsYW5lID0gc3RhdGVbeCArIDUgKiB5XTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdE1zdyBePSBsYW5lLmhpZ2g7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHRMc3cgXj0gbGFuZS5sb3c7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgICAgICAgICAgLy8gVGVtcG9yYXJ5IHZhbHVlc1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBUeCA9IFRbeF07XG5cdCAgICAgICAgICAgICAgICAgICAgVHguaGlnaCA9IHRNc3c7XG5cdCAgICAgICAgICAgICAgICAgICAgVHgubG93ICA9IHRMc3c7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciB4ID0gMDsgeCA8IDU7IHgrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBUeDQgPSBUWyh4ICsgNCkgJSA1XTtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgVHgxID0gVFsoeCArIDEpICUgNV07XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIFR4MU1zdyA9IFR4MS5oaWdoO1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBUeDFMc3cgPSBUeDEubG93O1xuXG5cdCAgICAgICAgICAgICAgICAgICAgLy8gTWl4IHN1cnJvdW5kaW5nIGNvbHVtbnNcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgdE1zdyA9IFR4NC5oaWdoIF4gKChUeDFNc3cgPDwgMSkgfCAoVHgxTHN3ID4+PiAzMSkpO1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciB0THN3ID0gVHg0LmxvdyAgXiAoKFR4MUxzdyA8PCAxKSB8IChUeDFNc3cgPj4+IDMxKSk7XG5cdCAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgeSA9IDA7IHkgPCA1OyB5KyspIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxhbmUgPSBzdGF0ZVt4ICsgNSAqIHldO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBsYW5lLmhpZ2ggXj0gdE1zdztcblx0ICAgICAgICAgICAgICAgICAgICAgICAgbGFuZS5sb3cgIF49IHRMc3c7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgICAgICAvLyBSaG8gUGlcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGxhbmVJbmRleCA9IDE7IGxhbmVJbmRleCA8IDI1OyBsYW5lSW5kZXgrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciB0TXN3O1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciB0THN3O1xuXG5cdCAgICAgICAgICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGxhbmUgPSBzdGF0ZVtsYW5lSW5kZXhdO1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBsYW5lTXN3ID0gbGFuZS5oaWdoO1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBsYW5lTHN3ID0gbGFuZS5sb3c7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIHJob09mZnNldCA9IFJIT19PRkZTRVRTW2xhbmVJbmRleF07XG5cblx0ICAgICAgICAgICAgICAgICAgICAvLyBSb3RhdGUgbGFuZXNcblx0ICAgICAgICAgICAgICAgICAgICBpZiAocmhvT2Zmc2V0IDwgMzIpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdE1zdyA9IChsYW5lTXN3IDw8IHJob09mZnNldCkgfCAobGFuZUxzdyA+Pj4gKDMyIC0gcmhvT2Zmc2V0KSk7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHRMc3cgPSAobGFuZUxzdyA8PCByaG9PZmZzZXQpIHwgKGxhbmVNc3cgPj4+ICgzMiAtIHJob09mZnNldCkpO1xuXHQgICAgICAgICAgICAgICAgICAgIH0gZWxzZSAvKiBpZiAocmhvT2Zmc2V0ID49IDMyKSAqLyB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHRNc3cgPSAobGFuZUxzdyA8PCAocmhvT2Zmc2V0IC0gMzIpKSB8IChsYW5lTXN3ID4+PiAoNjQgLSByaG9PZmZzZXQpKTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdExzdyA9IChsYW5lTXN3IDw8IChyaG9PZmZzZXQgLSAzMikpIHwgKGxhbmVMc3cgPj4+ICg2NCAtIHJob09mZnNldCkpO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAgICAgICAgIC8vIFRyYW5zcG9zZSBsYW5lc1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBUUGlMYW5lID0gVFtQSV9JTkRFWEVTW2xhbmVJbmRleF1dO1xuXHQgICAgICAgICAgICAgICAgICAgIFRQaUxhbmUuaGlnaCA9IHRNc3c7XG5cdCAgICAgICAgICAgICAgICAgICAgVFBpTGFuZS5sb3cgID0gdExzdztcblx0ICAgICAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAgICAgLy8gUmhvIHBpIGF0IHggPSB5ID0gMFxuXHQgICAgICAgICAgICAgICAgdmFyIFQwID0gVFswXTtcblx0ICAgICAgICAgICAgICAgIHZhciBzdGF0ZTAgPSBzdGF0ZVswXTtcblx0ICAgICAgICAgICAgICAgIFQwLmhpZ2ggPSBzdGF0ZTAuaGlnaDtcblx0ICAgICAgICAgICAgICAgIFQwLmxvdyAgPSBzdGF0ZTAubG93O1xuXG5cdCAgICAgICAgICAgICAgICAvLyBDaGlcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIHggPSAwOyB4IDwgNTsgeCsrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgeSA9IDA7IHkgPCA1OyB5KyspIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsYW5lSW5kZXggPSB4ICsgNSAqIHk7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsYW5lID0gc3RhdGVbbGFuZUluZGV4XTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdmFyIFRMYW5lID0gVFtsYW5lSW5kZXhdO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB2YXIgVHgxTGFuZSA9IFRbKCh4ICsgMSkgJSA1KSArIDUgKiB5XTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdmFyIFR4MkxhbmUgPSBUWygoeCArIDIpICUgNSkgKyA1ICogeV07XG5cblx0ICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWl4IHJvd3Ncblx0ICAgICAgICAgICAgICAgICAgICAgICAgbGFuZS5oaWdoID0gVExhbmUuaGlnaCBeICh+VHgxTGFuZS5oaWdoICYgVHgyTGFuZS5oaWdoKTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgbGFuZS5sb3cgID0gVExhbmUubG93ICBeICh+VHgxTGFuZS5sb3cgICYgVHgyTGFuZS5sb3cpO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAgICAgLy8gSW90YVxuXHQgICAgICAgICAgICAgICAgdmFyIGxhbmUgPSBzdGF0ZVswXTtcblx0ICAgICAgICAgICAgICAgIHZhciByb3VuZENvbnN0YW50ID0gUk9VTkRfQ09OU1RBTlRTW3JvdW5kXTtcblx0ICAgICAgICAgICAgICAgIGxhbmUuaGlnaCBePSByb3VuZENvbnN0YW50LmhpZ2g7XG5cdCAgICAgICAgICAgICAgICBsYW5lLmxvdyAgXj0gcm91bmRDb25zdGFudC5sb3c7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgX2RvRmluYWxpemU6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBkYXRhID0gdGhpcy5fZGF0YTtcblx0ICAgICAgICAgICAgdmFyIGRhdGFXb3JkcyA9IGRhdGEud29yZHM7XG5cdCAgICAgICAgICAgIHZhciBuQml0c1RvdGFsID0gdGhpcy5fbkRhdGFCeXRlcyAqIDg7XG5cdCAgICAgICAgICAgIHZhciBuQml0c0xlZnQgPSBkYXRhLnNpZ0J5dGVzICogODtcblx0ICAgICAgICAgICAgdmFyIGJsb2NrU2l6ZUJpdHMgPSB0aGlzLmJsb2NrU2l6ZSAqIDMyO1xuXG5cdCAgICAgICAgICAgIC8vIEFkZCBwYWRkaW5nXG5cdCAgICAgICAgICAgIGRhdGFXb3Jkc1tuQml0c0xlZnQgPj4+IDVdIHw9IDB4MSA8PCAoMjQgLSBuQml0c0xlZnQgJSAzMik7XG5cdCAgICAgICAgICAgIGRhdGFXb3Jkc1soKE1hdGguY2VpbCgobkJpdHNMZWZ0ICsgMSkgLyBibG9ja1NpemVCaXRzKSAqIGJsb2NrU2l6ZUJpdHMpID4+PiA1KSAtIDFdIHw9IDB4ODA7XG5cdCAgICAgICAgICAgIGRhdGEuc2lnQnl0ZXMgPSBkYXRhV29yZHMubGVuZ3RoICogNDtcblxuXHQgICAgICAgICAgICAvLyBIYXNoIGZpbmFsIGJsb2Nrc1xuXHQgICAgICAgICAgICB0aGlzLl9wcm9jZXNzKCk7XG5cblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBzdGF0ZSA9IHRoaXMuX3N0YXRlO1xuXHQgICAgICAgICAgICB2YXIgb3V0cHV0TGVuZ3RoQnl0ZXMgPSB0aGlzLmNmZy5vdXRwdXRMZW5ndGggLyA4O1xuXHQgICAgICAgICAgICB2YXIgb3V0cHV0TGVuZ3RoTGFuZXMgPSBvdXRwdXRMZW5ndGhCeXRlcyAvIDg7XG5cblx0ICAgICAgICAgICAgLy8gU3F1ZWV6ZVxuXHQgICAgICAgICAgICB2YXIgaGFzaFdvcmRzID0gW107XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb3V0cHV0TGVuZ3RoTGFuZXM7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgICAgICB2YXIgbGFuZSA9IHN0YXRlW2ldO1xuXHQgICAgICAgICAgICAgICAgdmFyIGxhbmVNc3cgPSBsYW5lLmhpZ2g7XG5cdCAgICAgICAgICAgICAgICB2YXIgbGFuZUxzdyA9IGxhbmUubG93O1xuXG5cdCAgICAgICAgICAgICAgICAvLyBTd2FwIGVuZGlhblxuXHQgICAgICAgICAgICAgICAgbGFuZU1zdyA9IChcblx0ICAgICAgICAgICAgICAgICAgICAoKChsYW5lTXN3IDw8IDgpICB8IChsYW5lTXN3ID4+PiAyNCkpICYgMHgwMGZmMDBmZikgfFxuXHQgICAgICAgICAgICAgICAgICAgICgoKGxhbmVNc3cgPDwgMjQpIHwgKGxhbmVNc3cgPj4+IDgpKSAgJiAweGZmMDBmZjAwKVxuXHQgICAgICAgICAgICAgICAgKTtcblx0ICAgICAgICAgICAgICAgIGxhbmVMc3cgPSAoXG5cdCAgICAgICAgICAgICAgICAgICAgKCgobGFuZUxzdyA8PCA4KSAgfCAobGFuZUxzdyA+Pj4gMjQpKSAmIDB4MDBmZjAwZmYpIHxcblx0ICAgICAgICAgICAgICAgICAgICAoKChsYW5lTHN3IDw8IDI0KSB8IChsYW5lTHN3ID4+PiA4KSkgICYgMHhmZjAwZmYwMClcblx0ICAgICAgICAgICAgICAgICk7XG5cblx0ICAgICAgICAgICAgICAgIC8vIFNxdWVlemUgc3RhdGUgdG8gcmV0cmlldmUgaGFzaFxuXHQgICAgICAgICAgICAgICAgaGFzaFdvcmRzLnB1c2gobGFuZUxzdyk7XG5cdCAgICAgICAgICAgICAgICBoYXNoV29yZHMucHVzaChsYW5lTXN3KTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIFJldHVybiBmaW5hbCBjb21wdXRlZCBoYXNoXG5cdCAgICAgICAgICAgIHJldHVybiBuZXcgV29yZEFycmF5LmluaXQoaGFzaFdvcmRzLCBvdXRwdXRMZW5ndGhCeXRlcyk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBjbG9uZSA9IEhhc2hlci5jbG9uZS5jYWxsKHRoaXMpO1xuXG5cdCAgICAgICAgICAgIHZhciBzdGF0ZSA9IGNsb25lLl9zdGF0ZSA9IHRoaXMuX3N0YXRlLnNsaWNlKDApO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDI1OyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHN0YXRlW2ldID0gc3RhdGVbaV0uY2xvbmUoKTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIHJldHVybiBjbG9uZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBTaG9ydGN1dCBmdW5jdGlvbiB0byB0aGUgaGFzaGVyJ3Mgb2JqZWN0IGludGVyZmFjZS5cblx0ICAgICAqXG5cdCAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gaGFzaC5cblx0ICAgICAqXG5cdCAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSBoYXNoLlxuXHQgICAgICpcblx0ICAgICAqIEBzdGF0aWNcblx0ICAgICAqXG5cdCAgICAgKiBAZXhhbXBsZVxuXHQgICAgICpcblx0ICAgICAqICAgICB2YXIgaGFzaCA9IENyeXB0b0pTLlNIQTMoJ21lc3NhZ2UnKTtcblx0ICAgICAqICAgICB2YXIgaGFzaCA9IENyeXB0b0pTLlNIQTMod29yZEFycmF5KTtcblx0ICAgICAqL1xuXHQgICAgQy5TSEEzID0gSGFzaGVyLl9jcmVhdGVIZWxwZXIoU0hBMyk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogU2hvcnRjdXQgZnVuY3Rpb24gdG8gdGhlIEhNQUMncyBvYmplY3QgaW50ZXJmYWNlLlxuXHQgICAgICpcblx0ICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gbWVzc2FnZSBUaGUgbWVzc2FnZSB0byBoYXNoLlxuXHQgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBrZXkgVGhlIHNlY3JldCBrZXkuXG5cdCAgICAgKlxuXHQgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgSE1BQy5cblx0ICAgICAqXG5cdCAgICAgKiBAc3RhdGljXG5cdCAgICAgKlxuXHQgICAgICogQGV4YW1wbGVcblx0ICAgICAqXG5cdCAgICAgKiAgICAgdmFyIGhtYWMgPSBDcnlwdG9KUy5IbWFjU0hBMyhtZXNzYWdlLCBrZXkpO1xuXHQgICAgICovXG5cdCAgICBDLkhtYWNTSEEzID0gSGFzaGVyLl9jcmVhdGVIbWFjSGVscGVyKFNIQTMpO1xuXHR9KE1hdGgpKTtcblxuXG5cdChmdW5jdGlvbiAoKSB7XG5cdCAgICAvLyBTaG9ydGN1dHNcblx0ICAgIHZhciBDID0gQ3J5cHRvSlM7XG5cdCAgICB2YXIgQ19saWIgPSBDLmxpYjtcblx0ICAgIHZhciBIYXNoZXIgPSBDX2xpYi5IYXNoZXI7XG5cdCAgICB2YXIgQ194NjQgPSBDLng2NDtcblx0ICAgIHZhciBYNjRXb3JkID0gQ194NjQuV29yZDtcblx0ICAgIHZhciBYNjRXb3JkQXJyYXkgPSBDX3g2NC5Xb3JkQXJyYXk7XG5cdCAgICB2YXIgQ19hbGdvID0gQy5hbGdvO1xuXG5cdCAgICBmdW5jdGlvbiBYNjRXb3JkX2NyZWF0ZSgpIHtcblx0ICAgICAgICByZXR1cm4gWDY0V29yZC5jcmVhdGUuYXBwbHkoWDY0V29yZCwgYXJndW1lbnRzKTtcblx0ICAgIH1cblxuXHQgICAgLy8gQ29uc3RhbnRzXG5cdCAgICB2YXIgSyA9IFtcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweDQyOGEyZjk4LCAweGQ3MjhhZTIyKSwgWDY0V29yZF9jcmVhdGUoMHg3MTM3NDQ5MSwgMHgyM2VmNjVjZCksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHhiNWMwZmJjZiwgMHhlYzRkM2IyZiksIFg2NFdvcmRfY3JlYXRlKDB4ZTliNWRiYTUsIDB4ODE4OWRiYmMpLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4Mzk1NmMyNWIsIDB4ZjM0OGI1MzgpLCBYNjRXb3JkX2NyZWF0ZSgweDU5ZjExMWYxLCAweGI2MDVkMDE5KSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweDkyM2Y4MmE0LCAweGFmMTk0ZjliKSwgWDY0V29yZF9jcmVhdGUoMHhhYjFjNWVkNSwgMHhkYTZkODExOCksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHhkODA3YWE5OCwgMHhhMzAzMDI0MiksIFg2NFdvcmRfY3JlYXRlKDB4MTI4MzViMDEsIDB4NDU3MDZmYmUpLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4MjQzMTg1YmUsIDB4NGVlNGIyOGMpLCBYNjRXb3JkX2NyZWF0ZSgweDU1MGM3ZGMzLCAweGQ1ZmZiNGUyKSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweDcyYmU1ZDc0LCAweGYyN2I4OTZmKSwgWDY0V29yZF9jcmVhdGUoMHg4MGRlYjFmZSwgMHgzYjE2OTZiMSksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHg5YmRjMDZhNywgMHgyNWM3MTIzNSksIFg2NFdvcmRfY3JlYXRlKDB4YzE5YmYxNzQsIDB4Y2Y2OTI2OTQpLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4ZTQ5YjY5YzEsIDB4OWVmMTRhZDIpLCBYNjRXb3JkX2NyZWF0ZSgweGVmYmU0Nzg2LCAweDM4NGYyNWUzKSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweDBmYzE5ZGM2LCAweDhiOGNkNWI1KSwgWDY0V29yZF9jcmVhdGUoMHgyNDBjYTFjYywgMHg3N2FjOWM2NSksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHgyZGU5MmM2ZiwgMHg1OTJiMDI3NSksIFg2NFdvcmRfY3JlYXRlKDB4NGE3NDg0YWEsIDB4NmVhNmU0ODMpLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4NWNiMGE5ZGMsIDB4YmQ0MWZiZDQpLCBYNjRXb3JkX2NyZWF0ZSgweDc2Zjk4OGRhLCAweDgzMTE1M2I1KSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweDk4M2U1MTUyLCAweGVlNjZkZmFiKSwgWDY0V29yZF9jcmVhdGUoMHhhODMxYzY2ZCwgMHgyZGI0MzIxMCksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHhiMDAzMjdjOCwgMHg5OGZiMjEzZiksIFg2NFdvcmRfY3JlYXRlKDB4YmY1OTdmYzcsIDB4YmVlZjBlZTQpLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4YzZlMDBiZjMsIDB4M2RhODhmYzIpLCBYNjRXb3JkX2NyZWF0ZSgweGQ1YTc5MTQ3LCAweDkzMGFhNzI1KSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweDA2Y2E2MzUxLCAweGUwMDM4MjZmKSwgWDY0V29yZF9jcmVhdGUoMHgxNDI5Mjk2NywgMHgwYTBlNmU3MCksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHgyN2I3MGE4NSwgMHg0NmQyMmZmYyksIFg2NFdvcmRfY3JlYXRlKDB4MmUxYjIxMzgsIDB4NWMyNmM5MjYpLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4NGQyYzZkZmMsIDB4NWFjNDJhZWQpLCBYNjRXb3JkX2NyZWF0ZSgweDUzMzgwZDEzLCAweDlkOTViM2RmKSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweDY1MGE3MzU0LCAweDhiYWY2M2RlKSwgWDY0V29yZF9jcmVhdGUoMHg3NjZhMGFiYiwgMHgzYzc3YjJhOCksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHg4MWMyYzkyZSwgMHg0N2VkYWVlNiksIFg2NFdvcmRfY3JlYXRlKDB4OTI3MjJjODUsIDB4MTQ4MjM1M2IpLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4YTJiZmU4YTEsIDB4NGNmMTAzNjQpLCBYNjRXb3JkX2NyZWF0ZSgweGE4MWE2NjRiLCAweGJjNDIzMDAxKSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweGMyNGI4YjcwLCAweGQwZjg5NzkxKSwgWDY0V29yZF9jcmVhdGUoMHhjNzZjNTFhMywgMHgwNjU0YmUzMCksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHhkMTkyZTgxOSwgMHhkNmVmNTIxOCksIFg2NFdvcmRfY3JlYXRlKDB4ZDY5OTA2MjQsIDB4NTU2NWE5MTApLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4ZjQwZTM1ODUsIDB4NTc3MTIwMmEpLCBYNjRXb3JkX2NyZWF0ZSgweDEwNmFhMDcwLCAweDMyYmJkMWI4KSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweDE5YTRjMTE2LCAweGI4ZDJkMGM4KSwgWDY0V29yZF9jcmVhdGUoMHgxZTM3NmMwOCwgMHg1MTQxYWI1MyksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHgyNzQ4Nzc0YywgMHhkZjhlZWI5OSksIFg2NFdvcmRfY3JlYXRlKDB4MzRiMGJjYjUsIDB4ZTE5YjQ4YTgpLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4MzkxYzBjYjMsIDB4YzVjOTVhNjMpLCBYNjRXb3JkX2NyZWF0ZSgweDRlZDhhYTRhLCAweGUzNDE4YWNiKSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweDViOWNjYTRmLCAweDc3NjNlMzczKSwgWDY0V29yZF9jcmVhdGUoMHg2ODJlNmZmMywgMHhkNmIyYjhhMyksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHg3NDhmODJlZSwgMHg1ZGVmYjJmYyksIFg2NFdvcmRfY3JlYXRlKDB4NzhhNTYzNmYsIDB4NDMxNzJmNjApLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4ODRjODc4MTQsIDB4YTFmMGFiNzIpLCBYNjRXb3JkX2NyZWF0ZSgweDhjYzcwMjA4LCAweDFhNjQzOWVjKSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweDkwYmVmZmZhLCAweDIzNjMxZTI4KSwgWDY0V29yZF9jcmVhdGUoMHhhNDUwNmNlYiwgMHhkZTgyYmRlOSksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHhiZWY5YTNmNywgMHhiMmM2NzkxNSksIFg2NFdvcmRfY3JlYXRlKDB4YzY3MTc4ZjIsIDB4ZTM3MjUzMmIpLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4Y2EyNzNlY2UsIDB4ZWEyNjYxOWMpLCBYNjRXb3JkX2NyZWF0ZSgweGQxODZiOGM3LCAweDIxYzBjMjA3KSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweGVhZGE3ZGQ2LCAweGNkZTBlYjFlKSwgWDY0V29yZF9jcmVhdGUoMHhmNTdkNGY3ZiwgMHhlZTZlZDE3OCksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHgwNmYwNjdhYSwgMHg3MjE3NmZiYSksIFg2NFdvcmRfY3JlYXRlKDB4MGE2MzdkYzUsIDB4YTJjODk4YTYpLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4MTEzZjk4MDQsIDB4YmVmOTBkYWUpLCBYNjRXb3JkX2NyZWF0ZSgweDFiNzEwYjM1LCAweDEzMWM0NzFiKSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweDI4ZGI3N2Y1LCAweDIzMDQ3ZDg0KSwgWDY0V29yZF9jcmVhdGUoMHgzMmNhYWI3YiwgMHg0MGM3MjQ5MyksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHgzYzllYmUwYSwgMHgxNWM5YmViYyksIFg2NFdvcmRfY3JlYXRlKDB4NDMxZDY3YzQsIDB4OWMxMDBkNGMpLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4NGNjNWQ0YmUsIDB4Y2IzZTQyYjYpLCBYNjRXb3JkX2NyZWF0ZSgweDU5N2YyOTljLCAweGZjNjU3ZTJhKSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweDVmY2I2ZmFiLCAweDNhZDZmYWVjKSwgWDY0V29yZF9jcmVhdGUoMHg2YzQ0MTk4YywgMHg0YTQ3NTgxNylcblx0ICAgIF07XG5cblx0ICAgIC8vIFJldXNhYmxlIG9iamVjdHNcblx0ICAgIHZhciBXID0gW107XG5cdCAgICAoZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgODA7IGkrKykge1xuXHQgICAgICAgICAgICBXW2ldID0gWDY0V29yZF9jcmVhdGUoKTtcblx0ICAgICAgICB9XG5cdCAgICB9KCkpO1xuXG5cdCAgICAvKipcblx0ICAgICAqIFNIQS01MTIgaGFzaCBhbGdvcml0aG0uXG5cdCAgICAgKi9cblx0ICAgIHZhciBTSEE1MTIgPSBDX2FsZ28uU0hBNTEyID0gSGFzaGVyLmV4dGVuZCh7XG5cdCAgICAgICAgX2RvUmVzZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdGhpcy5faGFzaCA9IG5ldyBYNjRXb3JkQXJyYXkuaW5pdChbXG5cdCAgICAgICAgICAgICAgICBuZXcgWDY0V29yZC5pbml0KDB4NmEwOWU2NjcsIDB4ZjNiY2M5MDgpLCBuZXcgWDY0V29yZC5pbml0KDB4YmI2N2FlODUsIDB4ODRjYWE3M2IpLFxuXHQgICAgICAgICAgICAgICAgbmV3IFg2NFdvcmQuaW5pdCgweDNjNmVmMzcyLCAweGZlOTRmODJiKSwgbmV3IFg2NFdvcmQuaW5pdCgweGE1NGZmNTNhLCAweDVmMWQzNmYxKSxcblx0ICAgICAgICAgICAgICAgIG5ldyBYNjRXb3JkLmluaXQoMHg1MTBlNTI3ZiwgMHhhZGU2ODJkMSksIG5ldyBYNjRXb3JkLmluaXQoMHg5YjA1Njg4YywgMHgyYjNlNmMxZiksXG5cdCAgICAgICAgICAgICAgICBuZXcgWDY0V29yZC5pbml0KDB4MWY4M2Q5YWIsIDB4ZmI0MWJkNmIpLCBuZXcgWDY0V29yZC5pbml0KDB4NWJlMGNkMTksIDB4MTM3ZTIxNzkpXG5cdCAgICAgICAgICAgIF0pO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBfZG9Qcm9jZXNzQmxvY2s6IGZ1bmN0aW9uIChNLCBvZmZzZXQpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBIID0gdGhpcy5faGFzaC53b3JkcztcblxuXHQgICAgICAgICAgICB2YXIgSDAgPSBIWzBdO1xuXHQgICAgICAgICAgICB2YXIgSDEgPSBIWzFdO1xuXHQgICAgICAgICAgICB2YXIgSDIgPSBIWzJdO1xuXHQgICAgICAgICAgICB2YXIgSDMgPSBIWzNdO1xuXHQgICAgICAgICAgICB2YXIgSDQgPSBIWzRdO1xuXHQgICAgICAgICAgICB2YXIgSDUgPSBIWzVdO1xuXHQgICAgICAgICAgICB2YXIgSDYgPSBIWzZdO1xuXHQgICAgICAgICAgICB2YXIgSDcgPSBIWzddO1xuXG5cdCAgICAgICAgICAgIHZhciBIMGggPSBIMC5oaWdoO1xuXHQgICAgICAgICAgICB2YXIgSDBsID0gSDAubG93O1xuXHQgICAgICAgICAgICB2YXIgSDFoID0gSDEuaGlnaDtcblx0ICAgICAgICAgICAgdmFyIEgxbCA9IEgxLmxvdztcblx0ICAgICAgICAgICAgdmFyIEgyaCA9IEgyLmhpZ2g7XG5cdCAgICAgICAgICAgIHZhciBIMmwgPSBIMi5sb3c7XG5cdCAgICAgICAgICAgIHZhciBIM2ggPSBIMy5oaWdoO1xuXHQgICAgICAgICAgICB2YXIgSDNsID0gSDMubG93O1xuXHQgICAgICAgICAgICB2YXIgSDRoID0gSDQuaGlnaDtcblx0ICAgICAgICAgICAgdmFyIEg0bCA9IEg0Lmxvdztcblx0ICAgICAgICAgICAgdmFyIEg1aCA9IEg1LmhpZ2g7XG5cdCAgICAgICAgICAgIHZhciBINWwgPSBINS5sb3c7XG5cdCAgICAgICAgICAgIHZhciBINmggPSBINi5oaWdoO1xuXHQgICAgICAgICAgICB2YXIgSDZsID0gSDYubG93O1xuXHQgICAgICAgICAgICB2YXIgSDdoID0gSDcuaGlnaDtcblx0ICAgICAgICAgICAgdmFyIEg3bCA9IEg3LmxvdztcblxuXHQgICAgICAgICAgICAvLyBXb3JraW5nIHZhcmlhYmxlc1xuXHQgICAgICAgICAgICB2YXIgYWggPSBIMGg7XG5cdCAgICAgICAgICAgIHZhciBhbCA9IEgwbDtcblx0ICAgICAgICAgICAgdmFyIGJoID0gSDFoO1xuXHQgICAgICAgICAgICB2YXIgYmwgPSBIMWw7XG5cdCAgICAgICAgICAgIHZhciBjaCA9IEgyaDtcblx0ICAgICAgICAgICAgdmFyIGNsID0gSDJsO1xuXHQgICAgICAgICAgICB2YXIgZGggPSBIM2g7XG5cdCAgICAgICAgICAgIHZhciBkbCA9IEgzbDtcblx0ICAgICAgICAgICAgdmFyIGVoID0gSDRoO1xuXHQgICAgICAgICAgICB2YXIgZWwgPSBINGw7XG5cdCAgICAgICAgICAgIHZhciBmaCA9IEg1aDtcblx0ICAgICAgICAgICAgdmFyIGZsID0gSDVsO1xuXHQgICAgICAgICAgICB2YXIgZ2ggPSBINmg7XG5cdCAgICAgICAgICAgIHZhciBnbCA9IEg2bDtcblx0ICAgICAgICAgICAgdmFyIGhoID0gSDdoO1xuXHQgICAgICAgICAgICB2YXIgaGwgPSBIN2w7XG5cblx0ICAgICAgICAgICAgLy8gUm91bmRzXG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgODA7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgdmFyIFdpbDtcblx0ICAgICAgICAgICAgICAgIHZhciBXaWg7XG5cblx0ICAgICAgICAgICAgICAgIC8vIFNob3J0Y3V0XG5cdCAgICAgICAgICAgICAgICB2YXIgV2kgPSBXW2ldO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBFeHRlbmQgbWVzc2FnZVxuXHQgICAgICAgICAgICAgICAgaWYgKGkgPCAxNikge1xuXHQgICAgICAgICAgICAgICAgICAgIFdpaCA9IFdpLmhpZ2ggPSBNW29mZnNldCArIGkgKiAyXSAgICAgfCAwO1xuXHQgICAgICAgICAgICAgICAgICAgIFdpbCA9IFdpLmxvdyAgPSBNW29mZnNldCArIGkgKiAyICsgMV0gfCAwO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICAvLyBHYW1tYTBcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgZ2FtbWEweCAgPSBXW2kgLSAxNV07XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGdhbW1hMHhoID0gZ2FtbWEweC5oaWdoO1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBnYW1tYTB4bCA9IGdhbW1hMHgubG93O1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBnYW1tYTBoICA9ICgoZ2FtbWEweGggPj4+IDEpIHwgKGdhbW1hMHhsIDw8IDMxKSkgXiAoKGdhbW1hMHhoID4+PiA4KSB8IChnYW1tYTB4bCA8PCAyNCkpIF4gKGdhbW1hMHhoID4+PiA3KTtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgZ2FtbWEwbCAgPSAoKGdhbW1hMHhsID4+PiAxKSB8IChnYW1tYTB4aCA8PCAzMSkpIF4gKChnYW1tYTB4bCA+Pj4gOCkgfCAoZ2FtbWEweGggPDwgMjQpKSBeICgoZ2FtbWEweGwgPj4+IDcpIHwgKGdhbW1hMHhoIDw8IDI1KSk7XG5cblx0ICAgICAgICAgICAgICAgICAgICAvLyBHYW1tYTFcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgZ2FtbWExeCAgPSBXW2kgLSAyXTtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgZ2FtbWExeGggPSBnYW1tYTF4LmhpZ2g7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGdhbW1hMXhsID0gZ2FtbWExeC5sb3c7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGdhbW1hMWggID0gKChnYW1tYTF4aCA+Pj4gMTkpIHwgKGdhbW1hMXhsIDw8IDEzKSkgXiAoKGdhbW1hMXhoIDw8IDMpIHwgKGdhbW1hMXhsID4+PiAyOSkpIF4gKGdhbW1hMXhoID4+PiA2KTtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgZ2FtbWExbCAgPSAoKGdhbW1hMXhsID4+PiAxOSkgfCAoZ2FtbWExeGggPDwgMTMpKSBeICgoZ2FtbWExeGwgPDwgMykgfCAoZ2FtbWExeGggPj4+IDI5KSkgXiAoKGdhbW1hMXhsID4+PiA2KSB8IChnYW1tYTF4aCA8PCAyNikpO1xuXG5cdCAgICAgICAgICAgICAgICAgICAgLy8gV1tpXSA9IGdhbW1hMCArIFdbaSAtIDddICsgZ2FtbWExICsgV1tpIC0gMTZdXG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIFdpNyAgPSBXW2kgLSA3XTtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgV2k3aCA9IFdpNy5oaWdoO1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBXaTdsID0gV2k3LmxvdztcblxuXHQgICAgICAgICAgICAgICAgICAgIHZhciBXaTE2ICA9IFdbaSAtIDE2XTtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgV2kxNmggPSBXaTE2LmhpZ2g7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIFdpMTZsID0gV2kxNi5sb3c7XG5cblx0ICAgICAgICAgICAgICAgICAgICBXaWwgPSBnYW1tYTBsICsgV2k3bDtcblx0ICAgICAgICAgICAgICAgICAgICBXaWggPSBnYW1tYTBoICsgV2k3aCArICgoV2lsID4+PiAwKSA8IChnYW1tYTBsID4+PiAwKSA/IDEgOiAwKTtcblx0ICAgICAgICAgICAgICAgICAgICBXaWwgPSBXaWwgKyBnYW1tYTFsO1xuXHQgICAgICAgICAgICAgICAgICAgIFdpaCA9IFdpaCArIGdhbW1hMWggKyAoKFdpbCA+Pj4gMCkgPCAoZ2FtbWExbCA+Pj4gMCkgPyAxIDogMCk7XG5cdCAgICAgICAgICAgICAgICAgICAgV2lsID0gV2lsICsgV2kxNmw7XG5cdCAgICAgICAgICAgICAgICAgICAgV2loID0gV2loICsgV2kxNmggKyAoKFdpbCA+Pj4gMCkgPCAoV2kxNmwgPj4+IDApID8gMSA6IDApO1xuXG5cdCAgICAgICAgICAgICAgICAgICAgV2kuaGlnaCA9IFdpaDtcblx0ICAgICAgICAgICAgICAgICAgICBXaS5sb3cgID0gV2lsO1xuXHQgICAgICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgICAgICB2YXIgY2hoICA9IChlaCAmIGZoKSBeICh+ZWggJiBnaCk7XG5cdCAgICAgICAgICAgICAgICB2YXIgY2hsICA9IChlbCAmIGZsKSBeICh+ZWwgJiBnbCk7XG5cdCAgICAgICAgICAgICAgICB2YXIgbWFqaCA9IChhaCAmIGJoKSBeIChhaCAmIGNoKSBeIChiaCAmIGNoKTtcblx0ICAgICAgICAgICAgICAgIHZhciBtYWpsID0gKGFsICYgYmwpIF4gKGFsICYgY2wpIF4gKGJsICYgY2wpO1xuXG5cdCAgICAgICAgICAgICAgICB2YXIgc2lnbWEwaCA9ICgoYWggPj4+IDI4KSB8IChhbCA8PCA0KSkgIF4gKChhaCA8PCAzMCkgIHwgKGFsID4+PiAyKSkgXiAoKGFoIDw8IDI1KSB8IChhbCA+Pj4gNykpO1xuXHQgICAgICAgICAgICAgICAgdmFyIHNpZ21hMGwgPSAoKGFsID4+PiAyOCkgfCAoYWggPDwgNCkpICBeICgoYWwgPDwgMzApICB8IChhaCA+Pj4gMikpIF4gKChhbCA8PCAyNSkgfCAoYWggPj4+IDcpKTtcblx0ICAgICAgICAgICAgICAgIHZhciBzaWdtYTFoID0gKChlaCA+Pj4gMTQpIHwgKGVsIDw8IDE4KSkgXiAoKGVoID4+PiAxOCkgfCAoZWwgPDwgMTQpKSBeICgoZWggPDwgMjMpIHwgKGVsID4+PiA5KSk7XG5cdCAgICAgICAgICAgICAgICB2YXIgc2lnbWExbCA9ICgoZWwgPj4+IDE0KSB8IChlaCA8PCAxOCkpIF4gKChlbCA+Pj4gMTgpIHwgKGVoIDw8IDE0KSkgXiAoKGVsIDw8IDIzKSB8IChlaCA+Pj4gOSkpO1xuXG5cdCAgICAgICAgICAgICAgICAvLyB0MSA9IGggKyBzaWdtYTEgKyBjaCArIEtbaV0gKyBXW2ldXG5cdCAgICAgICAgICAgICAgICB2YXIgS2kgID0gS1tpXTtcblx0ICAgICAgICAgICAgICAgIHZhciBLaWggPSBLaS5oaWdoO1xuXHQgICAgICAgICAgICAgICAgdmFyIEtpbCA9IEtpLmxvdztcblxuXHQgICAgICAgICAgICAgICAgdmFyIHQxbCA9IGhsICsgc2lnbWExbDtcblx0ICAgICAgICAgICAgICAgIHZhciB0MWggPSBoaCArIHNpZ21hMWggKyAoKHQxbCA+Pj4gMCkgPCAoaGwgPj4+IDApID8gMSA6IDApO1xuXHQgICAgICAgICAgICAgICAgdmFyIHQxbCA9IHQxbCArIGNobDtcblx0ICAgICAgICAgICAgICAgIHZhciB0MWggPSB0MWggKyBjaGggKyAoKHQxbCA+Pj4gMCkgPCAoY2hsID4+PiAwKSA/IDEgOiAwKTtcblx0ICAgICAgICAgICAgICAgIHZhciB0MWwgPSB0MWwgKyBLaWw7XG5cdCAgICAgICAgICAgICAgICB2YXIgdDFoID0gdDFoICsgS2loICsgKCh0MWwgPj4+IDApIDwgKEtpbCA+Pj4gMCkgPyAxIDogMCk7XG5cdCAgICAgICAgICAgICAgICB2YXIgdDFsID0gdDFsICsgV2lsO1xuXHQgICAgICAgICAgICAgICAgdmFyIHQxaCA9IHQxaCArIFdpaCArICgodDFsID4+PiAwKSA8IChXaWwgPj4+IDApID8gMSA6IDApO1xuXG5cdCAgICAgICAgICAgICAgICAvLyB0MiA9IHNpZ21hMCArIG1halxuXHQgICAgICAgICAgICAgICAgdmFyIHQybCA9IHNpZ21hMGwgKyBtYWpsO1xuXHQgICAgICAgICAgICAgICAgdmFyIHQyaCA9IHNpZ21hMGggKyBtYWpoICsgKCh0MmwgPj4+IDApIDwgKHNpZ21hMGwgPj4+IDApID8gMSA6IDApO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBVcGRhdGUgd29ya2luZyB2YXJpYWJsZXNcblx0ICAgICAgICAgICAgICAgIGhoID0gZ2g7XG5cdCAgICAgICAgICAgICAgICBobCA9IGdsO1xuXHQgICAgICAgICAgICAgICAgZ2ggPSBmaDtcblx0ICAgICAgICAgICAgICAgIGdsID0gZmw7XG5cdCAgICAgICAgICAgICAgICBmaCA9IGVoO1xuXHQgICAgICAgICAgICAgICAgZmwgPSBlbDtcblx0ICAgICAgICAgICAgICAgIGVsID0gKGRsICsgdDFsKSB8IDA7XG5cdCAgICAgICAgICAgICAgICBlaCA9IChkaCArIHQxaCArICgoZWwgPj4+IDApIDwgKGRsID4+PiAwKSA/IDEgOiAwKSkgfCAwO1xuXHQgICAgICAgICAgICAgICAgZGggPSBjaDtcblx0ICAgICAgICAgICAgICAgIGRsID0gY2w7XG5cdCAgICAgICAgICAgICAgICBjaCA9IGJoO1xuXHQgICAgICAgICAgICAgICAgY2wgPSBibDtcblx0ICAgICAgICAgICAgICAgIGJoID0gYWg7XG5cdCAgICAgICAgICAgICAgICBibCA9IGFsO1xuXHQgICAgICAgICAgICAgICAgYWwgPSAodDFsICsgdDJsKSB8IDA7XG5cdCAgICAgICAgICAgICAgICBhaCA9ICh0MWggKyB0MmggKyAoKGFsID4+PiAwKSA8ICh0MWwgPj4+IDApID8gMSA6IDApKSB8IDA7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBJbnRlcm1lZGlhdGUgaGFzaCB2YWx1ZVxuXHQgICAgICAgICAgICBIMGwgPSBIMC5sb3cgID0gKEgwbCArIGFsKTtcblx0ICAgICAgICAgICAgSDAuaGlnaCA9IChIMGggKyBhaCArICgoSDBsID4+PiAwKSA8IChhbCA+Pj4gMCkgPyAxIDogMCkpO1xuXHQgICAgICAgICAgICBIMWwgPSBIMS5sb3cgID0gKEgxbCArIGJsKTtcblx0ICAgICAgICAgICAgSDEuaGlnaCA9IChIMWggKyBiaCArICgoSDFsID4+PiAwKSA8IChibCA+Pj4gMCkgPyAxIDogMCkpO1xuXHQgICAgICAgICAgICBIMmwgPSBIMi5sb3cgID0gKEgybCArIGNsKTtcblx0ICAgICAgICAgICAgSDIuaGlnaCA9IChIMmggKyBjaCArICgoSDJsID4+PiAwKSA8IChjbCA+Pj4gMCkgPyAxIDogMCkpO1xuXHQgICAgICAgICAgICBIM2wgPSBIMy5sb3cgID0gKEgzbCArIGRsKTtcblx0ICAgICAgICAgICAgSDMuaGlnaCA9IChIM2ggKyBkaCArICgoSDNsID4+PiAwKSA8IChkbCA+Pj4gMCkgPyAxIDogMCkpO1xuXHQgICAgICAgICAgICBINGwgPSBINC5sb3cgID0gKEg0bCArIGVsKTtcblx0ICAgICAgICAgICAgSDQuaGlnaCA9IChINGggKyBlaCArICgoSDRsID4+PiAwKSA8IChlbCA+Pj4gMCkgPyAxIDogMCkpO1xuXHQgICAgICAgICAgICBINWwgPSBINS5sb3cgID0gKEg1bCArIGZsKTtcblx0ICAgICAgICAgICAgSDUuaGlnaCA9IChINWggKyBmaCArICgoSDVsID4+PiAwKSA8IChmbCA+Pj4gMCkgPyAxIDogMCkpO1xuXHQgICAgICAgICAgICBINmwgPSBINi5sb3cgID0gKEg2bCArIGdsKTtcblx0ICAgICAgICAgICAgSDYuaGlnaCA9IChINmggKyBnaCArICgoSDZsID4+PiAwKSA8IChnbCA+Pj4gMCkgPyAxIDogMCkpO1xuXHQgICAgICAgICAgICBIN2wgPSBINy5sb3cgID0gKEg3bCArIGhsKTtcblx0ICAgICAgICAgICAgSDcuaGlnaCA9IChIN2ggKyBoaCArICgoSDdsID4+PiAwKSA8IChobCA+Pj4gMCkgPyAxIDogMCkpO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBfZG9GaW5hbGl6ZTogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIGRhdGEgPSB0aGlzLl9kYXRhO1xuXHQgICAgICAgICAgICB2YXIgZGF0YVdvcmRzID0gZGF0YS53b3JkcztcblxuXHQgICAgICAgICAgICB2YXIgbkJpdHNUb3RhbCA9IHRoaXMuX25EYXRhQnl0ZXMgKiA4O1xuXHQgICAgICAgICAgICB2YXIgbkJpdHNMZWZ0ID0gZGF0YS5zaWdCeXRlcyAqIDg7XG5cblx0ICAgICAgICAgICAgLy8gQWRkIHBhZGRpbmdcblx0ICAgICAgICAgICAgZGF0YVdvcmRzW25CaXRzTGVmdCA+Pj4gNV0gfD0gMHg4MCA8PCAoMjQgLSBuQml0c0xlZnQgJSAzMik7XG5cdCAgICAgICAgICAgIGRhdGFXb3Jkc1soKChuQml0c0xlZnQgKyAxMjgpID4+PiAxMCkgPDwgNSkgKyAzMF0gPSBNYXRoLmZsb29yKG5CaXRzVG90YWwgLyAweDEwMDAwMDAwMCk7XG5cdCAgICAgICAgICAgIGRhdGFXb3Jkc1soKChuQml0c0xlZnQgKyAxMjgpID4+PiAxMCkgPDwgNSkgKyAzMV0gPSBuQml0c1RvdGFsO1xuXHQgICAgICAgICAgICBkYXRhLnNpZ0J5dGVzID0gZGF0YVdvcmRzLmxlbmd0aCAqIDQ7XG5cblx0ICAgICAgICAgICAgLy8gSGFzaCBmaW5hbCBibG9ja3Ncblx0ICAgICAgICAgICAgdGhpcy5fcHJvY2VzcygpO1xuXG5cdCAgICAgICAgICAgIC8vIENvbnZlcnQgaGFzaCB0byAzMi1iaXQgd29yZCBhcnJheSBiZWZvcmUgcmV0dXJuaW5nXG5cdCAgICAgICAgICAgIHZhciBoYXNoID0gdGhpcy5faGFzaC50b1gzMigpO1xuXG5cdCAgICAgICAgICAgIC8vIFJldHVybiBmaW5hbCBjb21wdXRlZCBoYXNoXG5cdCAgICAgICAgICAgIHJldHVybiBoYXNoO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBjbG9uZTogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgY2xvbmUgPSBIYXNoZXIuY2xvbmUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAgICAgY2xvbmUuX2hhc2ggPSB0aGlzLl9oYXNoLmNsb25lKCk7XG5cblx0ICAgICAgICAgICAgcmV0dXJuIGNsb25lO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBibG9ja1NpemU6IDEwMjQvMzJcblx0ICAgIH0pO1xuXG5cdCAgICAvKipcblx0ICAgICAqIFNob3J0Y3V0IGZ1bmN0aW9uIHRvIHRoZSBoYXNoZXIncyBvYmplY3QgaW50ZXJmYWNlLlxuXHQgICAgICpcblx0ICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gbWVzc2FnZSBUaGUgbWVzc2FnZSB0byBoYXNoLlxuXHQgICAgICpcblx0ICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIGhhc2guXG5cdCAgICAgKlxuXHQgICAgICogQHN0YXRpY1xuXHQgICAgICpcblx0ICAgICAqIEBleGFtcGxlXG5cdCAgICAgKlxuXHQgICAgICogICAgIHZhciBoYXNoID0gQ3J5cHRvSlMuU0hBNTEyKCdtZXNzYWdlJyk7XG5cdCAgICAgKiAgICAgdmFyIGhhc2ggPSBDcnlwdG9KUy5TSEE1MTIod29yZEFycmF5KTtcblx0ICAgICAqL1xuXHQgICAgQy5TSEE1MTIgPSBIYXNoZXIuX2NyZWF0ZUhlbHBlcihTSEE1MTIpO1xuXG5cdCAgICAvKipcblx0ICAgICAqIFNob3J0Y3V0IGZ1bmN0aW9uIHRvIHRoZSBITUFDJ3Mgb2JqZWN0IGludGVyZmFjZS5cblx0ICAgICAqXG5cdCAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gaGFzaC5cblx0ICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30ga2V5IFRoZSBzZWNyZXQga2V5LlxuXHQgICAgICpcblx0ICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIEhNQUMuXG5cdCAgICAgKlxuXHQgICAgICogQHN0YXRpY1xuXHQgICAgICpcblx0ICAgICAqIEBleGFtcGxlXG5cdCAgICAgKlxuXHQgICAgICogICAgIHZhciBobWFjID0gQ3J5cHRvSlMuSG1hY1NIQTUxMihtZXNzYWdlLCBrZXkpO1xuXHQgICAgICovXG5cdCAgICBDLkhtYWNTSEE1MTIgPSBIYXNoZXIuX2NyZWF0ZUhtYWNIZWxwZXIoU0hBNTEyKTtcblx0fSgpKTtcblxuXG5cdChmdW5jdGlvbiAoKSB7XG5cdCAgICAvLyBTaG9ydGN1dHNcblx0ICAgIHZhciBDID0gQ3J5cHRvSlM7XG5cdCAgICB2YXIgQ194NjQgPSBDLng2NDtcblx0ICAgIHZhciBYNjRXb3JkID0gQ194NjQuV29yZDtcblx0ICAgIHZhciBYNjRXb3JkQXJyYXkgPSBDX3g2NC5Xb3JkQXJyYXk7XG5cdCAgICB2YXIgQ19hbGdvID0gQy5hbGdvO1xuXHQgICAgdmFyIFNIQTUxMiA9IENfYWxnby5TSEE1MTI7XG5cblx0ICAgIC8qKlxuXHQgICAgICogU0hBLTM4NCBoYXNoIGFsZ29yaXRobS5cblx0ICAgICAqL1xuXHQgICAgdmFyIFNIQTM4NCA9IENfYWxnby5TSEEzODQgPSBTSEE1MTIuZXh0ZW5kKHtcblx0ICAgICAgICBfZG9SZXNldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB0aGlzLl9oYXNoID0gbmV3IFg2NFdvcmRBcnJheS5pbml0KFtcblx0ICAgICAgICAgICAgICAgIG5ldyBYNjRXb3JkLmluaXQoMHhjYmJiOWQ1ZCwgMHhjMTA1OWVkOCksIG5ldyBYNjRXb3JkLmluaXQoMHg2MjlhMjkyYSwgMHgzNjdjZDUwNyksXG5cdCAgICAgICAgICAgICAgICBuZXcgWDY0V29yZC5pbml0KDB4OTE1OTAxNWEsIDB4MzA3MGRkMTcpLCBuZXcgWDY0V29yZC5pbml0KDB4MTUyZmVjZDgsIDB4ZjcwZTU5MzkpLFxuXHQgICAgICAgICAgICAgICAgbmV3IFg2NFdvcmQuaW5pdCgweDY3MzMyNjY3LCAweGZmYzAwYjMxKSwgbmV3IFg2NFdvcmQuaW5pdCgweDhlYjQ0YTg3LCAweDY4NTgxNTExKSxcblx0ICAgICAgICAgICAgICAgIG5ldyBYNjRXb3JkLmluaXQoMHhkYjBjMmUwZCwgMHg2NGY5OGZhNyksIG5ldyBYNjRXb3JkLmluaXQoMHg0N2I1NDgxZCwgMHhiZWZhNGZhNClcblx0ICAgICAgICAgICAgXSk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIF9kb0ZpbmFsaXplOiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBoYXNoID0gU0hBNTEyLl9kb0ZpbmFsaXplLmNhbGwodGhpcyk7XG5cblx0ICAgICAgICAgICAgaGFzaC5zaWdCeXRlcyAtPSAxNjtcblxuXHQgICAgICAgICAgICByZXR1cm4gaGFzaDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBTaG9ydGN1dCBmdW5jdGlvbiB0byB0aGUgaGFzaGVyJ3Mgb2JqZWN0IGludGVyZmFjZS5cblx0ICAgICAqXG5cdCAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gaGFzaC5cblx0ICAgICAqXG5cdCAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSBoYXNoLlxuXHQgICAgICpcblx0ICAgICAqIEBzdGF0aWNcblx0ICAgICAqXG5cdCAgICAgKiBAZXhhbXBsZVxuXHQgICAgICpcblx0ICAgICAqICAgICB2YXIgaGFzaCA9IENyeXB0b0pTLlNIQTM4NCgnbWVzc2FnZScpO1xuXHQgICAgICogICAgIHZhciBoYXNoID0gQ3J5cHRvSlMuU0hBMzg0KHdvcmRBcnJheSk7XG5cdCAgICAgKi9cblx0ICAgIEMuU0hBMzg0ID0gU0hBNTEyLl9jcmVhdGVIZWxwZXIoU0hBMzg0KTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBTaG9ydGN1dCBmdW5jdGlvbiB0byB0aGUgSE1BQydzIG9iamVjdCBpbnRlcmZhY2UuXG5cdCAgICAgKlxuXHQgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBtZXNzYWdlIFRoZSBtZXNzYWdlIHRvIGhhc2guXG5cdCAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IGtleSBUaGUgc2VjcmV0IGtleS5cblx0ICAgICAqXG5cdCAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSBITUFDLlxuXHQgICAgICpcblx0ICAgICAqIEBzdGF0aWNcblx0ICAgICAqXG5cdCAgICAgKiBAZXhhbXBsZVxuXHQgICAgICpcblx0ICAgICAqICAgICB2YXIgaG1hYyA9IENyeXB0b0pTLkhtYWNTSEEzODQobWVzc2FnZSwga2V5KTtcblx0ICAgICAqL1xuXHQgICAgQy5IbWFjU0hBMzg0ID0gU0hBNTEyLl9jcmVhdGVIbWFjSGVscGVyKFNIQTM4NCk7XG5cdH0oKSk7XG5cblxuXHQvKipcblx0ICogQ2lwaGVyIGNvcmUgY29tcG9uZW50cy5cblx0ICovXG5cdENyeXB0b0pTLmxpYi5DaXBoZXIgfHwgKGZ1bmN0aW9uICh1bmRlZmluZWQpIHtcblx0ICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgdmFyIEMgPSBDcnlwdG9KUztcblx0ICAgIHZhciBDX2xpYiA9IEMubGliO1xuXHQgICAgdmFyIEJhc2UgPSBDX2xpYi5CYXNlO1xuXHQgICAgdmFyIFdvcmRBcnJheSA9IENfbGliLldvcmRBcnJheTtcblx0ICAgIHZhciBCdWZmZXJlZEJsb2NrQWxnb3JpdGhtID0gQ19saWIuQnVmZmVyZWRCbG9ja0FsZ29yaXRobTtcblx0ICAgIHZhciBDX2VuYyA9IEMuZW5jO1xuXHQgICAgdmFyIFV0ZjggPSBDX2VuYy5VdGY4O1xuXHQgICAgdmFyIEJhc2U2NCA9IENfZW5jLkJhc2U2NDtcblx0ICAgIHZhciBDX2FsZ28gPSBDLmFsZ287XG5cdCAgICB2YXIgRXZwS0RGID0gQ19hbGdvLkV2cEtERjtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBBYnN0cmFjdCBiYXNlIGNpcGhlciB0ZW1wbGF0ZS5cblx0ICAgICAqXG5cdCAgICAgKiBAcHJvcGVydHkge251bWJlcn0ga2V5U2l6ZSBUaGlzIGNpcGhlcidzIGtleSBzaXplLiBEZWZhdWx0OiA0ICgxMjggYml0cylcblx0ICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBpdlNpemUgVGhpcyBjaXBoZXIncyBJViBzaXplLiBEZWZhdWx0OiA0ICgxMjggYml0cylcblx0ICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBfRU5DX1hGT1JNX01PREUgQSBjb25zdGFudCByZXByZXNlbnRpbmcgZW5jcnlwdGlvbiBtb2RlLlxuXHQgICAgICogQHByb3BlcnR5IHtudW1iZXJ9IF9ERUNfWEZPUk1fTU9ERSBBIGNvbnN0YW50IHJlcHJlc2VudGluZyBkZWNyeXB0aW9uIG1vZGUuXG5cdCAgICAgKi9cblx0ICAgIHZhciBDaXBoZXIgPSBDX2xpYi5DaXBoZXIgPSBCdWZmZXJlZEJsb2NrQWxnb3JpdGhtLmV4dGVuZCh7XG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29uZmlndXJhdGlvbiBvcHRpb25zLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHByb3BlcnR5IHtXb3JkQXJyYXl9IGl2IFRoZSBJViB0byB1c2UgZm9yIHRoaXMgb3BlcmF0aW9uLlxuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGNmZzogQmFzZS5leHRlbmQoKSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENyZWF0ZXMgdGhpcyBjaXBoZXIgaW4gZW5jcnlwdGlvbiBtb2RlLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl9IGtleSBUaGUga2V5LlxuXHQgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjZmcgKE9wdGlvbmFsKSBUaGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIHVzZSBmb3IgdGhpcyBvcGVyYXRpb24uXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtDaXBoZXJ9IEEgY2lwaGVyIGluc3RhbmNlLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgY2lwaGVyID0gQ3J5cHRvSlMuYWxnby5BRVMuY3JlYXRlRW5jcnlwdG9yKGtleVdvcmRBcnJheSwgeyBpdjogaXZXb3JkQXJyYXkgfSk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgY3JlYXRlRW5jcnlwdG9yOiBmdW5jdGlvbiAoa2V5LCBjZmcpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlKHRoaXMuX0VOQ19YRk9STV9NT0RFLCBrZXksIGNmZyk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENyZWF0ZXMgdGhpcyBjaXBoZXIgaW4gZGVjcnlwdGlvbiBtb2RlLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl9IGtleSBUaGUga2V5LlxuXHQgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjZmcgKE9wdGlvbmFsKSBUaGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIHVzZSBmb3IgdGhpcyBvcGVyYXRpb24uXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtDaXBoZXJ9IEEgY2lwaGVyIGluc3RhbmNlLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgY2lwaGVyID0gQ3J5cHRvSlMuYWxnby5BRVMuY3JlYXRlRGVjcnlwdG9yKGtleVdvcmRBcnJheSwgeyBpdjogaXZXb3JkQXJyYXkgfSk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgY3JlYXRlRGVjcnlwdG9yOiBmdW5jdGlvbiAoa2V5LCBjZmcpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlKHRoaXMuX0RFQ19YRk9STV9NT0RFLCBrZXksIGNmZyk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIEluaXRpYWxpemVzIGEgbmV3bHkgY3JlYXRlZCBjaXBoZXIuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0geGZvcm1Nb2RlIEVpdGhlciB0aGUgZW5jcnlwdGlvbiBvciBkZWNyeXB0aW9uIHRyYW5zb3JtYXRpb24gbW9kZSBjb25zdGFudC5cblx0ICAgICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheX0ga2V5IFRoZSBrZXkuXG5cdCAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGNmZyAoT3B0aW9uYWwpIFRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gdXNlIGZvciB0aGlzIG9wZXJhdGlvbi5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIGNpcGhlciA9IENyeXB0b0pTLmFsZ28uQUVTLmNyZWF0ZShDcnlwdG9KUy5hbGdvLkFFUy5fRU5DX1hGT1JNX01PREUsIGtleVdvcmRBcnJheSwgeyBpdjogaXZXb3JkQXJyYXkgfSk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgaW5pdDogZnVuY3Rpb24gKHhmb3JtTW9kZSwga2V5LCBjZmcpIHtcblx0ICAgICAgICAgICAgLy8gQXBwbHkgY29uZmlnIGRlZmF1bHRzXG5cdCAgICAgICAgICAgIHRoaXMuY2ZnID0gdGhpcy5jZmcuZXh0ZW5kKGNmZyk7XG5cblx0ICAgICAgICAgICAgLy8gU3RvcmUgdHJhbnNmb3JtIG1vZGUgYW5kIGtleVxuXHQgICAgICAgICAgICB0aGlzLl94Zm9ybU1vZGUgPSB4Zm9ybU1vZGU7XG5cdCAgICAgICAgICAgIHRoaXMuX2tleSA9IGtleTtcblxuXHQgICAgICAgICAgICAvLyBTZXQgaW5pdGlhbCB2YWx1ZXNcblx0ICAgICAgICAgICAgdGhpcy5yZXNldCgpO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBSZXNldHMgdGhpcyBjaXBoZXIgdG8gaXRzIGluaXRpYWwgc3RhdGUuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIGNpcGhlci5yZXNldCgpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHJlc2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIC8vIFJlc2V0IGRhdGEgYnVmZmVyXG5cdCAgICAgICAgICAgIEJ1ZmZlcmVkQmxvY2tBbGdvcml0aG0ucmVzZXQuY2FsbCh0aGlzKTtcblxuXHQgICAgICAgICAgICAvLyBQZXJmb3JtIGNvbmNyZXRlLWNpcGhlciBsb2dpY1xuXHQgICAgICAgICAgICB0aGlzLl9kb1Jlc2V0KCk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIEFkZHMgZGF0YSB0byBiZSBlbmNyeXB0ZWQgb3IgZGVjcnlwdGVkLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBkYXRhVXBkYXRlIFRoZSBkYXRhIHRvIGVuY3J5cHQgb3IgZGVjcnlwdC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIGRhdGEgYWZ0ZXIgcHJvY2Vzc2luZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIGVuY3J5cHRlZCA9IGNpcGhlci5wcm9jZXNzKCdkYXRhJyk7XG5cdCAgICAgICAgICogICAgIHZhciBlbmNyeXB0ZWQgPSBjaXBoZXIucHJvY2Vzcyh3b3JkQXJyYXkpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHByb2Nlc3M6IGZ1bmN0aW9uIChkYXRhVXBkYXRlKSB7XG5cdCAgICAgICAgICAgIC8vIEFwcGVuZFxuXHQgICAgICAgICAgICB0aGlzLl9hcHBlbmQoZGF0YVVwZGF0ZSk7XG5cblx0ICAgICAgICAgICAgLy8gUHJvY2VzcyBhdmFpbGFibGUgYmxvY2tzXG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9wcm9jZXNzKCk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIEZpbmFsaXplcyB0aGUgZW5jcnlwdGlvbiBvciBkZWNyeXB0aW9uIHByb2Nlc3MuXG5cdCAgICAgICAgICogTm90ZSB0aGF0IHRoZSBmaW5hbGl6ZSBvcGVyYXRpb24gaXMgZWZmZWN0aXZlbHkgYSBkZXN0cnVjdGl2ZSwgcmVhZC1vbmNlIG9wZXJhdGlvbi5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gZGF0YVVwZGF0ZSBUaGUgZmluYWwgZGF0YSB0byBlbmNyeXB0IG9yIGRlY3J5cHQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSBkYXRhIGFmdGVyIGZpbmFsIHByb2Nlc3NpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBlbmNyeXB0ZWQgPSBjaXBoZXIuZmluYWxpemUoKTtcblx0ICAgICAgICAgKiAgICAgdmFyIGVuY3J5cHRlZCA9IGNpcGhlci5maW5hbGl6ZSgnZGF0YScpO1xuXHQgICAgICAgICAqICAgICB2YXIgZW5jcnlwdGVkID0gY2lwaGVyLmZpbmFsaXplKHdvcmRBcnJheSk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgZmluYWxpemU6IGZ1bmN0aW9uIChkYXRhVXBkYXRlKSB7XG5cdCAgICAgICAgICAgIC8vIEZpbmFsIGRhdGEgdXBkYXRlXG5cdCAgICAgICAgICAgIGlmIChkYXRhVXBkYXRlKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9hcHBlbmQoZGF0YVVwZGF0ZSk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBQZXJmb3JtIGNvbmNyZXRlLWNpcGhlciBsb2dpY1xuXHQgICAgICAgICAgICB2YXIgZmluYWxQcm9jZXNzZWREYXRhID0gdGhpcy5fZG9GaW5hbGl6ZSgpO1xuXG5cdCAgICAgICAgICAgIHJldHVybiBmaW5hbFByb2Nlc3NlZERhdGE7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIGtleVNpemU6IDEyOC8zMixcblxuXHQgICAgICAgIGl2U2l6ZTogMTI4LzMyLFxuXG5cdCAgICAgICAgX0VOQ19YRk9STV9NT0RFOiAxLFxuXG5cdCAgICAgICAgX0RFQ19YRk9STV9NT0RFOiAyLFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ3JlYXRlcyBzaG9ydGN1dCBmdW5jdGlvbnMgdG8gYSBjaXBoZXIncyBvYmplY3QgaW50ZXJmYWNlLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtDaXBoZXJ9IGNpcGhlciBUaGUgY2lwaGVyIHRvIGNyZWF0ZSBhIGhlbHBlciBmb3IuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtPYmplY3R9IEFuIG9iamVjdCB3aXRoIGVuY3J5cHQgYW5kIGRlY3J5cHQgc2hvcnRjdXQgZnVuY3Rpb25zLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgQUVTID0gQ3J5cHRvSlMubGliLkNpcGhlci5fY3JlYXRlSGVscGVyKENyeXB0b0pTLmFsZ28uQUVTKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBfY3JlYXRlSGVscGVyOiAoZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBmdW5jdGlvbiBzZWxlY3RDaXBoZXJTdHJhdGVneShrZXkpIHtcblx0ICAgICAgICAgICAgICAgIGlmICh0eXBlb2Yga2V5ID09ICdzdHJpbmcnKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFBhc3N3b3JkQmFzZWRDaXBoZXI7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiBTZXJpYWxpemFibGVDaXBoZXI7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGNpcGhlcikge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHtcblx0ICAgICAgICAgICAgICAgICAgICBlbmNyeXB0OiBmdW5jdGlvbiAobWVzc2FnZSwga2V5LCBjZmcpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGVjdENpcGhlclN0cmF0ZWd5KGtleSkuZW5jcnlwdChjaXBoZXIsIG1lc3NhZ2UsIGtleSwgY2ZnKTtcblx0ICAgICAgICAgICAgICAgICAgICB9LFxuXG5cdCAgICAgICAgICAgICAgICAgICAgZGVjcnlwdDogZnVuY3Rpb24gKGNpcGhlcnRleHQsIGtleSwgY2ZnKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxlY3RDaXBoZXJTdHJhdGVneShrZXkpLmRlY3J5cHQoY2lwaGVyLCBjaXBoZXJ0ZXh0LCBrZXksIGNmZyk7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgfTtcblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICB9KCkpXG5cdCAgICB9KTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBBYnN0cmFjdCBiYXNlIHN0cmVhbSBjaXBoZXIgdGVtcGxhdGUuXG5cdCAgICAgKlxuXHQgICAgICogQHByb3BlcnR5IHtudW1iZXJ9IGJsb2NrU2l6ZSBUaGUgbnVtYmVyIG9mIDMyLWJpdCB3b3JkcyB0aGlzIGNpcGhlciBvcGVyYXRlcyBvbi4gRGVmYXVsdDogMSAoMzIgYml0cylcblx0ICAgICAqL1xuXHQgICAgdmFyIFN0cmVhbUNpcGhlciA9IENfbGliLlN0cmVhbUNpcGhlciA9IENpcGhlci5leHRlbmQoe1xuXHQgICAgICAgIF9kb0ZpbmFsaXplOiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIC8vIFByb2Nlc3MgcGFydGlhbCBibG9ja3Ncblx0ICAgICAgICAgICAgdmFyIGZpbmFsUHJvY2Vzc2VkQmxvY2tzID0gdGhpcy5fcHJvY2VzcyghISdmbHVzaCcpO1xuXG5cdCAgICAgICAgICAgIHJldHVybiBmaW5hbFByb2Nlc3NlZEJsb2Nrcztcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgYmxvY2tTaXplOiAxXG5cdCAgICB9KTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBNb2RlIG5hbWVzcGFjZS5cblx0ICAgICAqL1xuXHQgICAgdmFyIENfbW9kZSA9IEMubW9kZSA9IHt9O1xuXG5cdCAgICAvKipcblx0ICAgICAqIEFic3RyYWN0IGJhc2UgYmxvY2sgY2lwaGVyIG1vZGUgdGVtcGxhdGUuXG5cdCAgICAgKi9cblx0ICAgIHZhciBCbG9ja0NpcGhlck1vZGUgPSBDX2xpYi5CbG9ja0NpcGhlck1vZGUgPSBCYXNlLmV4dGVuZCh7XG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ3JlYXRlcyB0aGlzIG1vZGUgZm9yIGVuY3J5cHRpb24uXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge0NpcGhlcn0gY2lwaGVyIEEgYmxvY2sgY2lwaGVyIGluc3RhbmNlLlxuXHQgICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IGl2IFRoZSBJViB3b3Jkcy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBzdGF0aWNcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIG1vZGUgPSBDcnlwdG9KUy5tb2RlLkNCQy5jcmVhdGVFbmNyeXB0b3IoY2lwaGVyLCBpdi53b3Jkcyk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgY3JlYXRlRW5jcnlwdG9yOiBmdW5jdGlvbiAoY2lwaGVyLCBpdikge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5FbmNyeXB0b3IuY3JlYXRlKGNpcGhlciwgaXYpO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDcmVhdGVzIHRoaXMgbW9kZSBmb3IgZGVjcnlwdGlvbi5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7Q2lwaGVyfSBjaXBoZXIgQSBibG9jayBjaXBoZXIgaW5zdGFuY2UuXG5cdCAgICAgICAgICogQHBhcmFtIHtBcnJheX0gaXYgVGhlIElWIHdvcmRzLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgbW9kZSA9IENyeXB0b0pTLm1vZGUuQ0JDLmNyZWF0ZURlY3J5cHRvcihjaXBoZXIsIGl2LndvcmRzKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBjcmVhdGVEZWNyeXB0b3I6IGZ1bmN0aW9uIChjaXBoZXIsIGl2KSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLkRlY3J5cHRvci5jcmVhdGUoY2lwaGVyLCBpdik7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIEluaXRpYWxpemVzIGEgbmV3bHkgY3JlYXRlZCBtb2RlLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtDaXBoZXJ9IGNpcGhlciBBIGJsb2NrIGNpcGhlciBpbnN0YW5jZS5cblx0ICAgICAgICAgKiBAcGFyYW0ge0FycmF5fSBpdiBUaGUgSVYgd29yZHMuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBtb2RlID0gQ3J5cHRvSlMubW9kZS5DQkMuRW5jcnlwdG9yLmNyZWF0ZShjaXBoZXIsIGl2LndvcmRzKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBpbml0OiBmdW5jdGlvbiAoY2lwaGVyLCBpdikge1xuXHQgICAgICAgICAgICB0aGlzLl9jaXBoZXIgPSBjaXBoZXI7XG5cdCAgICAgICAgICAgIHRoaXMuX2l2ID0gaXY7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogQ2lwaGVyIEJsb2NrIENoYWluaW5nIG1vZGUuXG5cdCAgICAgKi9cblx0ICAgIHZhciBDQkMgPSBDX21vZGUuQ0JDID0gKGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBBYnN0cmFjdCBiYXNlIENCQyBtb2RlLlxuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHZhciBDQkMgPSBCbG9ja0NpcGhlck1vZGUuZXh0ZW5kKCk7XG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDQkMgZW5jcnlwdG9yLlxuXHQgICAgICAgICAqL1xuXHQgICAgICAgIENCQy5FbmNyeXB0b3IgPSBDQkMuZXh0ZW5kKHtcblx0ICAgICAgICAgICAgLyoqXG5cdCAgICAgICAgICAgICAqIFByb2Nlc3NlcyB0aGUgZGF0YSBibG9jayBhdCBvZmZzZXQuXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IHdvcmRzIFRoZSBkYXRhIHdvcmRzIHRvIG9wZXJhdGUgb24uXG5cdCAgICAgICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXQgVGhlIG9mZnNldCB3aGVyZSB0aGUgYmxvY2sgc3RhcnRzLlxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiAgICAgbW9kZS5wcm9jZXNzQmxvY2soZGF0YS53b3Jkcywgb2Zmc2V0KTtcblx0ICAgICAgICAgICAgICovXG5cdCAgICAgICAgICAgIHByb2Nlc3NCbG9jazogZnVuY3Rpb24gKHdvcmRzLCBvZmZzZXQpIHtcblx0ICAgICAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICAgICAgdmFyIGNpcGhlciA9IHRoaXMuX2NpcGhlcjtcblx0ICAgICAgICAgICAgICAgIHZhciBibG9ja1NpemUgPSBjaXBoZXIuYmxvY2tTaXplO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBYT1IgYW5kIGVuY3J5cHRcblx0ICAgICAgICAgICAgICAgIHhvckJsb2NrLmNhbGwodGhpcywgd29yZHMsIG9mZnNldCwgYmxvY2tTaXplKTtcblx0ICAgICAgICAgICAgICAgIGNpcGhlci5lbmNyeXB0QmxvY2sod29yZHMsIG9mZnNldCk7XG5cblx0ICAgICAgICAgICAgICAgIC8vIFJlbWVtYmVyIHRoaXMgYmxvY2sgdG8gdXNlIHdpdGggbmV4dCBibG9ja1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fcHJldkJsb2NrID0gd29yZHMuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyBibG9ja1NpemUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSk7XG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDQkMgZGVjcnlwdG9yLlxuXHQgICAgICAgICAqL1xuXHQgICAgICAgIENCQy5EZWNyeXB0b3IgPSBDQkMuZXh0ZW5kKHtcblx0ICAgICAgICAgICAgLyoqXG5cdCAgICAgICAgICAgICAqIFByb2Nlc3NlcyB0aGUgZGF0YSBibG9jayBhdCBvZmZzZXQuXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IHdvcmRzIFRoZSBkYXRhIHdvcmRzIHRvIG9wZXJhdGUgb24uXG5cdCAgICAgICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXQgVGhlIG9mZnNldCB3aGVyZSB0aGUgYmxvY2sgc3RhcnRzLlxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiAgICAgbW9kZS5wcm9jZXNzQmxvY2soZGF0YS53b3Jkcywgb2Zmc2V0KTtcblx0ICAgICAgICAgICAgICovXG5cdCAgICAgICAgICAgIHByb2Nlc3NCbG9jazogZnVuY3Rpb24gKHdvcmRzLCBvZmZzZXQpIHtcblx0ICAgICAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICAgICAgdmFyIGNpcGhlciA9IHRoaXMuX2NpcGhlcjtcblx0ICAgICAgICAgICAgICAgIHZhciBibG9ja1NpemUgPSBjaXBoZXIuYmxvY2tTaXplO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBSZW1lbWJlciB0aGlzIGJsb2NrIHRvIHVzZSB3aXRoIG5leHQgYmxvY2tcblx0ICAgICAgICAgICAgICAgIHZhciB0aGlzQmxvY2sgPSB3b3Jkcy5zbGljZShvZmZzZXQsIG9mZnNldCArIGJsb2NrU2l6ZSk7XG5cblx0ICAgICAgICAgICAgICAgIC8vIERlY3J5cHQgYW5kIFhPUlxuXHQgICAgICAgICAgICAgICAgY2lwaGVyLmRlY3J5cHRCbG9jayh3b3Jkcywgb2Zmc2V0KTtcblx0ICAgICAgICAgICAgICAgIHhvckJsb2NrLmNhbGwodGhpcywgd29yZHMsIG9mZnNldCwgYmxvY2tTaXplKTtcblxuXHQgICAgICAgICAgICAgICAgLy8gVGhpcyBibG9jayBiZWNvbWVzIHRoZSBwcmV2aW91cyBibG9ja1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fcHJldkJsb2NrID0gdGhpc0Jsb2NrO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSk7XG5cblx0ICAgICAgICBmdW5jdGlvbiB4b3JCbG9jayh3b3Jkcywgb2Zmc2V0LCBibG9ja1NpemUpIHtcblx0ICAgICAgICAgICAgdmFyIGJsb2NrO1xuXG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0XG5cdCAgICAgICAgICAgIHZhciBpdiA9IHRoaXMuX2l2O1xuXG5cdCAgICAgICAgICAgIC8vIENob29zZSBtaXhpbmcgYmxvY2tcblx0ICAgICAgICAgICAgaWYgKGl2KSB7XG5cdCAgICAgICAgICAgICAgICBibG9jayA9IGl2O1xuXG5cdCAgICAgICAgICAgICAgICAvLyBSZW1vdmUgSVYgZm9yIHN1YnNlcXVlbnQgYmxvY2tzXG5cdCAgICAgICAgICAgICAgICB0aGlzLl9pdiA9IHVuZGVmaW5lZDtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIGJsb2NrID0gdGhpcy5fcHJldkJsb2NrO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gWE9SIGJsb2Nrc1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJsb2NrU2l6ZTsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICB3b3Jkc1tvZmZzZXQgKyBpXSBePSBibG9ja1tpXTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHJldHVybiBDQkM7XG5cdCAgICB9KCkpO1xuXG5cdCAgICAvKipcblx0ICAgICAqIFBhZGRpbmcgbmFtZXNwYWNlLlxuXHQgICAgICovXG5cdCAgICB2YXIgQ19wYWQgPSBDLnBhZCA9IHt9O1xuXG5cdCAgICAvKipcblx0ICAgICAqIFBLQ1MgIzUvNyBwYWRkaW5nIHN0cmF0ZWd5LlxuXHQgICAgICovXG5cdCAgICB2YXIgUGtjczcgPSBDX3BhZC5Qa2NzNyA9IHtcblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBQYWRzIGRhdGEgdXNpbmcgdGhlIGFsZ29yaXRobSBkZWZpbmVkIGluIFBLQ1MgIzUvNy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7V29yZEFycmF5fSBkYXRhIFRoZSBkYXRhIHRvIHBhZC5cblx0ICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gYmxvY2tTaXplIFRoZSBtdWx0aXBsZSB0aGF0IHRoZSBkYXRhIHNob3VsZCBiZSBwYWRkZWQgdG8uXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIENyeXB0b0pTLnBhZC5Qa2NzNy5wYWQod29yZEFycmF5LCA0KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBwYWQ6IGZ1bmN0aW9uIChkYXRhLCBibG9ja1NpemUpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRcblx0ICAgICAgICAgICAgdmFyIGJsb2NrU2l6ZUJ5dGVzID0gYmxvY2tTaXplICogNDtcblxuXHQgICAgICAgICAgICAvLyBDb3VudCBwYWRkaW5nIGJ5dGVzXG5cdCAgICAgICAgICAgIHZhciBuUGFkZGluZ0J5dGVzID0gYmxvY2tTaXplQnl0ZXMgLSBkYXRhLnNpZ0J5dGVzICUgYmxvY2tTaXplQnl0ZXM7XG5cblx0ICAgICAgICAgICAgLy8gQ3JlYXRlIHBhZGRpbmcgd29yZFxuXHQgICAgICAgICAgICB2YXIgcGFkZGluZ1dvcmQgPSAoblBhZGRpbmdCeXRlcyA8PCAyNCkgfCAoblBhZGRpbmdCeXRlcyA8PCAxNikgfCAoblBhZGRpbmdCeXRlcyA8PCA4KSB8IG5QYWRkaW5nQnl0ZXM7XG5cblx0ICAgICAgICAgICAgLy8gQ3JlYXRlIHBhZGRpbmdcblx0ICAgICAgICAgICAgdmFyIHBhZGRpbmdXb3JkcyA9IFtdO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5QYWRkaW5nQnl0ZXM7IGkgKz0gNCkge1xuXHQgICAgICAgICAgICAgICAgcGFkZGluZ1dvcmRzLnB1c2gocGFkZGluZ1dvcmQpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHZhciBwYWRkaW5nID0gV29yZEFycmF5LmNyZWF0ZShwYWRkaW5nV29yZHMsIG5QYWRkaW5nQnl0ZXMpO1xuXG5cdCAgICAgICAgICAgIC8vIEFkZCBwYWRkaW5nXG5cdCAgICAgICAgICAgIGRhdGEuY29uY2F0KHBhZGRpbmcpO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBVbnBhZHMgZGF0YSB0aGF0IGhhZCBiZWVuIHBhZGRlZCB1c2luZyB0aGUgYWxnb3JpdGhtIGRlZmluZWQgaW4gUEtDUyAjNS83LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl9IGRhdGEgVGhlIGRhdGEgdG8gdW5wYWQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIENyeXB0b0pTLnBhZC5Qa2NzNy51bnBhZCh3b3JkQXJyYXkpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHVucGFkOiBmdW5jdGlvbiAoZGF0YSkge1xuXHQgICAgICAgICAgICAvLyBHZXQgbnVtYmVyIG9mIHBhZGRpbmcgYnl0ZXMgZnJvbSBsYXN0IGJ5dGVcblx0ICAgICAgICAgICAgdmFyIG5QYWRkaW5nQnl0ZXMgPSBkYXRhLndvcmRzWyhkYXRhLnNpZ0J5dGVzIC0gMSkgPj4+IDJdICYgMHhmZjtcblxuXHQgICAgICAgICAgICAvLyBSZW1vdmUgcGFkZGluZ1xuXHQgICAgICAgICAgICBkYXRhLnNpZ0J5dGVzIC09IG5QYWRkaW5nQnl0ZXM7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBBYnN0cmFjdCBiYXNlIGJsb2NrIGNpcGhlciB0ZW1wbGF0ZS5cblx0ICAgICAqXG5cdCAgICAgKiBAcHJvcGVydHkge251bWJlcn0gYmxvY2tTaXplIFRoZSBudW1iZXIgb2YgMzItYml0IHdvcmRzIHRoaXMgY2lwaGVyIG9wZXJhdGVzIG9uLiBEZWZhdWx0OiA0ICgxMjggYml0cylcblx0ICAgICAqL1xuXHQgICAgdmFyIEJsb2NrQ2lwaGVyID0gQ19saWIuQmxvY2tDaXBoZXIgPSBDaXBoZXIuZXh0ZW5kKHtcblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb25maWd1cmF0aW9uIG9wdGlvbnMuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcHJvcGVydHkge01vZGV9IG1vZGUgVGhlIGJsb2NrIG1vZGUgdG8gdXNlLiBEZWZhdWx0OiBDQkNcblx0ICAgICAgICAgKiBAcHJvcGVydHkge1BhZGRpbmd9IHBhZGRpbmcgVGhlIHBhZGRpbmcgc3RyYXRlZ3kgdG8gdXNlLiBEZWZhdWx0OiBQa2NzN1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGNmZzogQ2lwaGVyLmNmZy5leHRlbmQoe1xuXHQgICAgICAgICAgICBtb2RlOiBDQkMsXG5cdCAgICAgICAgICAgIHBhZGRpbmc6IFBrY3M3XG5cdCAgICAgICAgfSksXG5cblx0ICAgICAgICByZXNldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgbW9kZUNyZWF0b3I7XG5cblx0ICAgICAgICAgICAgLy8gUmVzZXQgY2lwaGVyXG5cdCAgICAgICAgICAgIENpcGhlci5yZXNldC5jYWxsKHRoaXMpO1xuXG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIgY2ZnID0gdGhpcy5jZmc7XG5cdCAgICAgICAgICAgIHZhciBpdiA9IGNmZy5pdjtcblx0ICAgICAgICAgICAgdmFyIG1vZGUgPSBjZmcubW9kZTtcblxuXHQgICAgICAgICAgICAvLyBSZXNldCBibG9jayBtb2RlXG5cdCAgICAgICAgICAgIGlmICh0aGlzLl94Zm9ybU1vZGUgPT0gdGhpcy5fRU5DX1hGT1JNX01PREUpIHtcblx0ICAgICAgICAgICAgICAgIG1vZGVDcmVhdG9yID0gbW9kZS5jcmVhdGVFbmNyeXB0b3I7XG5cdCAgICAgICAgICAgIH0gZWxzZSAvKiBpZiAodGhpcy5feGZvcm1Nb2RlID09IHRoaXMuX0RFQ19YRk9STV9NT0RFKSAqLyB7XG5cdCAgICAgICAgICAgICAgICBtb2RlQ3JlYXRvciA9IG1vZGUuY3JlYXRlRGVjcnlwdG9yO1xuXHQgICAgICAgICAgICAgICAgLy8gS2VlcCBhdCBsZWFzdCBvbmUgYmxvY2sgaW4gdGhlIGJ1ZmZlciBmb3IgdW5wYWRkaW5nXG5cdCAgICAgICAgICAgICAgICB0aGlzLl9taW5CdWZmZXJTaXplID0gMTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9tb2RlICYmIHRoaXMuX21vZGUuX19jcmVhdG9yID09IG1vZGVDcmVhdG9yKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9tb2RlLmluaXQodGhpcywgaXYgJiYgaXYud29yZHMpO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fbW9kZSA9IG1vZGVDcmVhdG9yLmNhbGwobW9kZSwgdGhpcywgaXYgJiYgaXYud29yZHMpO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fbW9kZS5fX2NyZWF0b3IgPSBtb2RlQ3JlYXRvcjtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBfZG9Qcm9jZXNzQmxvY2s6IGZ1bmN0aW9uICh3b3Jkcywgb2Zmc2V0KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX21vZGUucHJvY2Vzc0Jsb2NrKHdvcmRzLCBvZmZzZXQpO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBfZG9GaW5hbGl6ZTogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgZmluYWxQcm9jZXNzZWRCbG9ja3M7XG5cblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRcblx0ICAgICAgICAgICAgdmFyIHBhZGRpbmcgPSB0aGlzLmNmZy5wYWRkaW5nO1xuXG5cdCAgICAgICAgICAgIC8vIEZpbmFsaXplXG5cdCAgICAgICAgICAgIGlmICh0aGlzLl94Zm9ybU1vZGUgPT0gdGhpcy5fRU5DX1hGT1JNX01PREUpIHtcblx0ICAgICAgICAgICAgICAgIC8vIFBhZCBkYXRhXG5cdCAgICAgICAgICAgICAgICBwYWRkaW5nLnBhZCh0aGlzLl9kYXRhLCB0aGlzLmJsb2NrU2l6ZSk7XG5cblx0ICAgICAgICAgICAgICAgIC8vIFByb2Nlc3MgZmluYWwgYmxvY2tzXG5cdCAgICAgICAgICAgICAgICBmaW5hbFByb2Nlc3NlZEJsb2NrcyA9IHRoaXMuX3Byb2Nlc3MoISEnZmx1c2gnKTtcblx0ICAgICAgICAgICAgfSBlbHNlIC8qIGlmICh0aGlzLl94Zm9ybU1vZGUgPT0gdGhpcy5fREVDX1hGT1JNX01PREUpICovIHtcblx0ICAgICAgICAgICAgICAgIC8vIFByb2Nlc3MgZmluYWwgYmxvY2tzXG5cdCAgICAgICAgICAgICAgICBmaW5hbFByb2Nlc3NlZEJsb2NrcyA9IHRoaXMuX3Byb2Nlc3MoISEnZmx1c2gnKTtcblxuXHQgICAgICAgICAgICAgICAgLy8gVW5wYWQgZGF0YVxuXHQgICAgICAgICAgICAgICAgcGFkZGluZy51bnBhZChmaW5hbFByb2Nlc3NlZEJsb2Nrcyk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICByZXR1cm4gZmluYWxQcm9jZXNzZWRCbG9ja3M7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIGJsb2NrU2l6ZTogMTI4LzMyXG5cdCAgICB9KTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBBIGNvbGxlY3Rpb24gb2YgY2lwaGVyIHBhcmFtZXRlcnMuXG5cdCAgICAgKlxuXHQgICAgICogQHByb3BlcnR5IHtXb3JkQXJyYXl9IGNpcGhlcnRleHQgVGhlIHJhdyBjaXBoZXJ0ZXh0LlxuXHQgICAgICogQHByb3BlcnR5IHtXb3JkQXJyYXl9IGtleSBUaGUga2V5IHRvIHRoaXMgY2lwaGVydGV4dC5cblx0ICAgICAqIEBwcm9wZXJ0eSB7V29yZEFycmF5fSBpdiBUaGUgSVYgdXNlZCBpbiB0aGUgY2lwaGVyaW5nIG9wZXJhdGlvbi5cblx0ICAgICAqIEBwcm9wZXJ0eSB7V29yZEFycmF5fSBzYWx0IFRoZSBzYWx0IHVzZWQgd2l0aCBhIGtleSBkZXJpdmF0aW9uIGZ1bmN0aW9uLlxuXHQgICAgICogQHByb3BlcnR5IHtDaXBoZXJ9IGFsZ29yaXRobSBUaGUgY2lwaGVyIGFsZ29yaXRobS5cblx0ICAgICAqIEBwcm9wZXJ0eSB7TW9kZX0gbW9kZSBUaGUgYmxvY2sgbW9kZSB1c2VkIGluIHRoZSBjaXBoZXJpbmcgb3BlcmF0aW9uLlxuXHQgICAgICogQHByb3BlcnR5IHtQYWRkaW5nfSBwYWRkaW5nIFRoZSBwYWRkaW5nIHNjaGVtZSB1c2VkIGluIHRoZSBjaXBoZXJpbmcgb3BlcmF0aW9uLlxuXHQgICAgICogQHByb3BlcnR5IHtudW1iZXJ9IGJsb2NrU2l6ZSBUaGUgYmxvY2sgc2l6ZSBvZiB0aGUgY2lwaGVyLlxuXHQgICAgICogQHByb3BlcnR5IHtGb3JtYXR9IGZvcm1hdHRlciBUaGUgZGVmYXVsdCBmb3JtYXR0aW5nIHN0cmF0ZWd5IHRvIGNvbnZlcnQgdGhpcyBjaXBoZXIgcGFyYW1zIG9iamVjdCB0byBhIHN0cmluZy5cblx0ICAgICAqL1xuXHQgICAgdmFyIENpcGhlclBhcmFtcyA9IENfbGliLkNpcGhlclBhcmFtcyA9IEJhc2UuZXh0ZW5kKHtcblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBJbml0aWFsaXplcyBhIG5ld2x5IGNyZWF0ZWQgY2lwaGVyIHBhcmFtcyBvYmplY3QuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gY2lwaGVyUGFyYW1zIEFuIG9iamVjdCB3aXRoIGFueSBvZiB0aGUgcG9zc2libGUgY2lwaGVyIHBhcmFtZXRlcnMuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBjaXBoZXJQYXJhbXMgPSBDcnlwdG9KUy5saWIuQ2lwaGVyUGFyYW1zLmNyZWF0ZSh7XG5cdCAgICAgICAgICogICAgICAgICBjaXBoZXJ0ZXh0OiBjaXBoZXJ0ZXh0V29yZEFycmF5LFxuXHQgICAgICAgICAqICAgICAgICAga2V5OiBrZXlXb3JkQXJyYXksXG5cdCAgICAgICAgICogICAgICAgICBpdjogaXZXb3JkQXJyYXksXG5cdCAgICAgICAgICogICAgICAgICBzYWx0OiBzYWx0V29yZEFycmF5LFxuXHQgICAgICAgICAqICAgICAgICAgYWxnb3JpdGhtOiBDcnlwdG9KUy5hbGdvLkFFUyxcblx0ICAgICAgICAgKiAgICAgICAgIG1vZGU6IENyeXB0b0pTLm1vZGUuQ0JDLFxuXHQgICAgICAgICAqICAgICAgICAgcGFkZGluZzogQ3J5cHRvSlMucGFkLlBLQ1M3LFxuXHQgICAgICAgICAqICAgICAgICAgYmxvY2tTaXplOiA0LFxuXHQgICAgICAgICAqICAgICAgICAgZm9ybWF0dGVyOiBDcnlwdG9KUy5mb3JtYXQuT3BlblNTTFxuXHQgICAgICAgICAqICAgICB9KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBpbml0OiBmdW5jdGlvbiAoY2lwaGVyUGFyYW1zKSB7XG5cdCAgICAgICAgICAgIHRoaXMubWl4SW4oY2lwaGVyUGFyYW1zKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29udmVydHMgdGhpcyBjaXBoZXIgcGFyYW1zIG9iamVjdCB0byBhIHN0cmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7Rm9ybWF0fSBmb3JtYXR0ZXIgKE9wdGlvbmFsKSBUaGUgZm9ybWF0dGluZyBzdHJhdGVneSB0byB1c2UuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBzdHJpbmdpZmllZCBjaXBoZXIgcGFyYW1zLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHRocm93cyBFcnJvciBJZiBuZWl0aGVyIHRoZSBmb3JtYXR0ZXIgbm9yIHRoZSBkZWZhdWx0IGZvcm1hdHRlciBpcyBzZXQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBzdHJpbmcgPSBjaXBoZXJQYXJhbXMgKyAnJztcblx0ICAgICAgICAgKiAgICAgdmFyIHN0cmluZyA9IGNpcGhlclBhcmFtcy50b1N0cmluZygpO1xuXHQgICAgICAgICAqICAgICB2YXIgc3RyaW5nID0gY2lwaGVyUGFyYW1zLnRvU3RyaW5nKENyeXB0b0pTLmZvcm1hdC5PcGVuU1NMKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICB0b1N0cmluZzogZnVuY3Rpb24gKGZvcm1hdHRlcikge1xuXHQgICAgICAgICAgICByZXR1cm4gKGZvcm1hdHRlciB8fCB0aGlzLmZvcm1hdHRlcikuc3RyaW5naWZ5KHRoaXMpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXG5cdCAgICAvKipcblx0ICAgICAqIEZvcm1hdCBuYW1lc3BhY2UuXG5cdCAgICAgKi9cblx0ICAgIHZhciBDX2Zvcm1hdCA9IEMuZm9ybWF0ID0ge307XG5cblx0ICAgIC8qKlxuXHQgICAgICogT3BlblNTTCBmb3JtYXR0aW5nIHN0cmF0ZWd5LlxuXHQgICAgICovXG5cdCAgICB2YXIgT3BlblNTTEZvcm1hdHRlciA9IENfZm9ybWF0Lk9wZW5TU0wgPSB7XG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29udmVydHMgYSBjaXBoZXIgcGFyYW1zIG9iamVjdCB0byBhbiBPcGVuU1NMLWNvbXBhdGlibGUgc3RyaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtDaXBoZXJQYXJhbXN9IGNpcGhlclBhcmFtcyBUaGUgY2lwaGVyIHBhcmFtcyBvYmplY3QuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBPcGVuU1NMLWNvbXBhdGlibGUgc3RyaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgb3BlblNTTFN0cmluZyA9IENyeXB0b0pTLmZvcm1hdC5PcGVuU1NMLnN0cmluZ2lmeShjaXBoZXJQYXJhbXMpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHN0cmluZ2lmeTogZnVuY3Rpb24gKGNpcGhlclBhcmFtcykge1xuXHQgICAgICAgICAgICB2YXIgd29yZEFycmF5O1xuXG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIgY2lwaGVydGV4dCA9IGNpcGhlclBhcmFtcy5jaXBoZXJ0ZXh0O1xuXHQgICAgICAgICAgICB2YXIgc2FsdCA9IGNpcGhlclBhcmFtcy5zYWx0O1xuXG5cdCAgICAgICAgICAgIC8vIEZvcm1hdFxuXHQgICAgICAgICAgICBpZiAoc2FsdCkge1xuXHQgICAgICAgICAgICAgICAgd29yZEFycmF5ID0gV29yZEFycmF5LmNyZWF0ZShbMHg1MzYxNmM3NCwgMHg2NTY0NWY1Zl0pLmNvbmNhdChzYWx0KS5jb25jYXQoY2lwaGVydGV4dCk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB3b3JkQXJyYXkgPSBjaXBoZXJ0ZXh0O1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgcmV0dXJuIHdvcmRBcnJheS50b1N0cmluZyhCYXNlNjQpO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb252ZXJ0cyBhbiBPcGVuU1NMLWNvbXBhdGlibGUgc3RyaW5nIHRvIGEgY2lwaGVyIHBhcmFtcyBvYmplY3QuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gb3BlblNTTFN0ciBUaGUgT3BlblNTTC1jb21wYXRpYmxlIHN0cmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge0NpcGhlclBhcmFtc30gVGhlIGNpcGhlciBwYXJhbXMgb2JqZWN0LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgY2lwaGVyUGFyYW1zID0gQ3J5cHRvSlMuZm9ybWF0Lk9wZW5TU0wucGFyc2Uob3BlblNTTFN0cmluZyk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgcGFyc2U6IGZ1bmN0aW9uIChvcGVuU1NMU3RyKSB7XG5cdCAgICAgICAgICAgIHZhciBzYWx0O1xuXG5cdCAgICAgICAgICAgIC8vIFBhcnNlIGJhc2U2NFxuXHQgICAgICAgICAgICB2YXIgY2lwaGVydGV4dCA9IEJhc2U2NC5wYXJzZShvcGVuU1NMU3RyKTtcblxuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dFxuXHQgICAgICAgICAgICB2YXIgY2lwaGVydGV4dFdvcmRzID0gY2lwaGVydGV4dC53b3JkcztcblxuXHQgICAgICAgICAgICAvLyBUZXN0IGZvciBzYWx0XG5cdCAgICAgICAgICAgIGlmIChjaXBoZXJ0ZXh0V29yZHNbMF0gPT0gMHg1MzYxNmM3NCAmJiBjaXBoZXJ0ZXh0V29yZHNbMV0gPT0gMHg2NTY0NWY1Zikge1xuXHQgICAgICAgICAgICAgICAgLy8gRXh0cmFjdCBzYWx0XG5cdCAgICAgICAgICAgICAgICBzYWx0ID0gV29yZEFycmF5LmNyZWF0ZShjaXBoZXJ0ZXh0V29yZHMuc2xpY2UoMiwgNCkpO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBSZW1vdmUgc2FsdCBmcm9tIGNpcGhlcnRleHRcblx0ICAgICAgICAgICAgICAgIGNpcGhlcnRleHRXb3Jkcy5zcGxpY2UoMCwgNCk7XG5cdCAgICAgICAgICAgICAgICBjaXBoZXJ0ZXh0LnNpZ0J5dGVzIC09IDE2O1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgcmV0dXJuIENpcGhlclBhcmFtcy5jcmVhdGUoeyBjaXBoZXJ0ZXh0OiBjaXBoZXJ0ZXh0LCBzYWx0OiBzYWx0IH0pO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cblx0ICAgIC8qKlxuXHQgICAgICogQSBjaXBoZXIgd3JhcHBlciB0aGF0IHJldHVybnMgY2lwaGVydGV4dCBhcyBhIHNlcmlhbGl6YWJsZSBjaXBoZXIgcGFyYW1zIG9iamVjdC5cblx0ICAgICAqL1xuXHQgICAgdmFyIFNlcmlhbGl6YWJsZUNpcGhlciA9IENfbGliLlNlcmlhbGl6YWJsZUNpcGhlciA9IEJhc2UuZXh0ZW5kKHtcblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb25maWd1cmF0aW9uIG9wdGlvbnMuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcHJvcGVydHkge0Zvcm1hdHRlcn0gZm9ybWF0IFRoZSBmb3JtYXR0aW5nIHN0cmF0ZWd5IHRvIGNvbnZlcnQgY2lwaGVyIHBhcmFtIG9iamVjdHMgdG8gYW5kIGZyb20gYSBzdHJpbmcuIERlZmF1bHQ6IE9wZW5TU0xcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBjZmc6IEJhc2UuZXh0ZW5kKHtcblx0ICAgICAgICAgICAgZm9ybWF0OiBPcGVuU1NMRm9ybWF0dGVyXG5cdCAgICAgICAgfSksXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBFbmNyeXB0cyBhIG1lc3NhZ2UuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge0NpcGhlcn0gY2lwaGVyIFRoZSBjaXBoZXIgYWxnb3JpdGhtIHRvIHVzZS5cblx0ICAgICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gZW5jcnlwdC5cblx0ICAgICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheX0ga2V5IFRoZSBrZXkuXG5cdCAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGNmZyAoT3B0aW9uYWwpIFRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gdXNlIGZvciB0aGlzIG9wZXJhdGlvbi5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge0NpcGhlclBhcmFtc30gQSBjaXBoZXIgcGFyYW1zIG9iamVjdC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBzdGF0aWNcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIGNpcGhlcnRleHRQYXJhbXMgPSBDcnlwdG9KUy5saWIuU2VyaWFsaXphYmxlQ2lwaGVyLmVuY3J5cHQoQ3J5cHRvSlMuYWxnby5BRVMsIG1lc3NhZ2UsIGtleSk7XG5cdCAgICAgICAgICogICAgIHZhciBjaXBoZXJ0ZXh0UGFyYW1zID0gQ3J5cHRvSlMubGliLlNlcmlhbGl6YWJsZUNpcGhlci5lbmNyeXB0KENyeXB0b0pTLmFsZ28uQUVTLCBtZXNzYWdlLCBrZXksIHsgaXY6IGl2IH0pO1xuXHQgICAgICAgICAqICAgICB2YXIgY2lwaGVydGV4dFBhcmFtcyA9IENyeXB0b0pTLmxpYi5TZXJpYWxpemFibGVDaXBoZXIuZW5jcnlwdChDcnlwdG9KUy5hbGdvLkFFUywgbWVzc2FnZSwga2V5LCB7IGl2OiBpdiwgZm9ybWF0OiBDcnlwdG9KUy5mb3JtYXQuT3BlblNTTCB9KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBlbmNyeXB0OiBmdW5jdGlvbiAoY2lwaGVyLCBtZXNzYWdlLCBrZXksIGNmZykge1xuXHQgICAgICAgICAgICAvLyBBcHBseSBjb25maWcgZGVmYXVsdHNcblx0ICAgICAgICAgICAgY2ZnID0gdGhpcy5jZmcuZXh0ZW5kKGNmZyk7XG5cblx0ICAgICAgICAgICAgLy8gRW5jcnlwdFxuXHQgICAgICAgICAgICB2YXIgZW5jcnlwdG9yID0gY2lwaGVyLmNyZWF0ZUVuY3J5cHRvcihrZXksIGNmZyk7XG5cdCAgICAgICAgICAgIHZhciBjaXBoZXJ0ZXh0ID0gZW5jcnlwdG9yLmZpbmFsaXplKG1lc3NhZ2UpO1xuXG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0XG5cdCAgICAgICAgICAgIHZhciBjaXBoZXJDZmcgPSBlbmNyeXB0b3IuY2ZnO1xuXG5cdCAgICAgICAgICAgIC8vIENyZWF0ZSBhbmQgcmV0dXJuIHNlcmlhbGl6YWJsZSBjaXBoZXIgcGFyYW1zXG5cdCAgICAgICAgICAgIHJldHVybiBDaXBoZXJQYXJhbXMuY3JlYXRlKHtcblx0ICAgICAgICAgICAgICAgIGNpcGhlcnRleHQ6IGNpcGhlcnRleHQsXG5cdCAgICAgICAgICAgICAgICBrZXk6IGtleSxcblx0ICAgICAgICAgICAgICAgIGl2OiBjaXBoZXJDZmcuaXYsXG5cdCAgICAgICAgICAgICAgICBhbGdvcml0aG06IGNpcGhlcixcblx0ICAgICAgICAgICAgICAgIG1vZGU6IGNpcGhlckNmZy5tb2RlLFxuXHQgICAgICAgICAgICAgICAgcGFkZGluZzogY2lwaGVyQ2ZnLnBhZGRpbmcsXG5cdCAgICAgICAgICAgICAgICBibG9ja1NpemU6IGNpcGhlci5ibG9ja1NpemUsXG5cdCAgICAgICAgICAgICAgICBmb3JtYXR0ZXI6IGNmZy5mb3JtYXRcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIERlY3J5cHRzIHNlcmlhbGl6ZWQgY2lwaGVydGV4dC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7Q2lwaGVyfSBjaXBoZXIgVGhlIGNpcGhlciBhbGdvcml0aG0gdG8gdXNlLlxuXHQgICAgICAgICAqIEBwYXJhbSB7Q2lwaGVyUGFyYW1zfHN0cmluZ30gY2lwaGVydGV4dCBUaGUgY2lwaGVydGV4dCB0byBkZWNyeXB0LlxuXHQgICAgICAgICAqIEBwYXJhbSB7V29yZEFycmF5fSBrZXkgVGhlIGtleS5cblx0ICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gY2ZnIChPcHRpb25hbCkgVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byB1c2UgZm9yIHRoaXMgb3BlcmF0aW9uLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgcGxhaW50ZXh0LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgcGxhaW50ZXh0ID0gQ3J5cHRvSlMubGliLlNlcmlhbGl6YWJsZUNpcGhlci5kZWNyeXB0KENyeXB0b0pTLmFsZ28uQUVTLCBmb3JtYXR0ZWRDaXBoZXJ0ZXh0LCBrZXksIHsgaXY6IGl2LCBmb3JtYXQ6IENyeXB0b0pTLmZvcm1hdC5PcGVuU1NMIH0pO1xuXHQgICAgICAgICAqICAgICB2YXIgcGxhaW50ZXh0ID0gQ3J5cHRvSlMubGliLlNlcmlhbGl6YWJsZUNpcGhlci5kZWNyeXB0KENyeXB0b0pTLmFsZ28uQUVTLCBjaXBoZXJ0ZXh0UGFyYW1zLCBrZXksIHsgaXY6IGl2LCBmb3JtYXQ6IENyeXB0b0pTLmZvcm1hdC5PcGVuU1NMIH0pO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGRlY3J5cHQ6IGZ1bmN0aW9uIChjaXBoZXIsIGNpcGhlcnRleHQsIGtleSwgY2ZnKSB7XG5cdCAgICAgICAgICAgIC8vIEFwcGx5IGNvbmZpZyBkZWZhdWx0c1xuXHQgICAgICAgICAgICBjZmcgPSB0aGlzLmNmZy5leHRlbmQoY2ZnKTtcblxuXHQgICAgICAgICAgICAvLyBDb252ZXJ0IHN0cmluZyB0byBDaXBoZXJQYXJhbXNcblx0ICAgICAgICAgICAgY2lwaGVydGV4dCA9IHRoaXMuX3BhcnNlKGNpcGhlcnRleHQsIGNmZy5mb3JtYXQpO1xuXG5cdCAgICAgICAgICAgIC8vIERlY3J5cHRcblx0ICAgICAgICAgICAgdmFyIHBsYWludGV4dCA9IGNpcGhlci5jcmVhdGVEZWNyeXB0b3Ioa2V5LCBjZmcpLmZpbmFsaXplKGNpcGhlcnRleHQuY2lwaGVydGV4dCk7XG5cblx0ICAgICAgICAgICAgcmV0dXJuIHBsYWludGV4dDtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29udmVydHMgc2VyaWFsaXplZCBjaXBoZXJ0ZXh0IHRvIENpcGhlclBhcmFtcyxcblx0ICAgICAgICAgKiBlbHNlIGFzc3VtZWQgQ2lwaGVyUGFyYW1zIGFscmVhZHkgYW5kIHJldHVybnMgY2lwaGVydGV4dCB1bmNoYW5nZWQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge0NpcGhlclBhcmFtc3xzdHJpbmd9IGNpcGhlcnRleHQgVGhlIGNpcGhlcnRleHQuXG5cdCAgICAgICAgICogQHBhcmFtIHtGb3JtYXR0ZXJ9IGZvcm1hdCBUaGUgZm9ybWF0dGluZyBzdHJhdGVneSB0byB1c2UgdG8gcGFyc2Ugc2VyaWFsaXplZCBjaXBoZXJ0ZXh0LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7Q2lwaGVyUGFyYW1zfSBUaGUgdW5zZXJpYWxpemVkIGNpcGhlcnRleHQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBjaXBoZXJ0ZXh0UGFyYW1zID0gQ3J5cHRvSlMubGliLlNlcmlhbGl6YWJsZUNpcGhlci5fcGFyc2UoY2lwaGVydGV4dFN0cmluZ09yUGFyYW1zLCBmb3JtYXQpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIF9wYXJzZTogZnVuY3Rpb24gKGNpcGhlcnRleHQsIGZvcm1hdCkge1xuXHQgICAgICAgICAgICBpZiAodHlwZW9mIGNpcGhlcnRleHQgPT0gJ3N0cmluZycpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBmb3JtYXQucGFyc2UoY2lwaGVydGV4dCwgdGhpcyk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gY2lwaGVydGV4dDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXG5cdCAgICAvKipcblx0ICAgICAqIEtleSBkZXJpdmF0aW9uIGZ1bmN0aW9uIG5hbWVzcGFjZS5cblx0ICAgICAqL1xuXHQgICAgdmFyIENfa2RmID0gQy5rZGYgPSB7fTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBPcGVuU1NMIGtleSBkZXJpdmF0aW9uIGZ1bmN0aW9uLlxuXHQgICAgICovXG5cdCAgICB2YXIgT3BlblNTTEtkZiA9IENfa2RmLk9wZW5TU0wgPSB7XG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogRGVyaXZlcyBhIGtleSBhbmQgSVYgZnJvbSBhIHBhc3N3b3JkLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHBhc3N3b3JkIFRoZSBwYXNzd29yZCB0byBkZXJpdmUgZnJvbS5cblx0ICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0ga2V5U2l6ZSBUaGUgc2l6ZSBpbiB3b3JkcyBvZiB0aGUga2V5IHRvIGdlbmVyYXRlLlxuXHQgICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBpdlNpemUgVGhlIHNpemUgaW4gd29yZHMgb2YgdGhlIElWIHRvIGdlbmVyYXRlLlxuXHQgICAgICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gc2FsdCAoT3B0aW9uYWwpIEEgNjQtYml0IHNhbHQgdG8gdXNlLiBJZiBvbWl0dGVkLCBhIHNhbHQgd2lsbCBiZSBnZW5lcmF0ZWQgcmFuZG9tbHkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtDaXBoZXJQYXJhbXN9IEEgY2lwaGVyIHBhcmFtcyBvYmplY3Qgd2l0aCB0aGUga2V5LCBJViwgYW5kIHNhbHQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBkZXJpdmVkUGFyYW1zID0gQ3J5cHRvSlMua2RmLk9wZW5TU0wuZXhlY3V0ZSgnUGFzc3dvcmQnLCAyNTYvMzIsIDEyOC8zMik7XG5cdCAgICAgICAgICogICAgIHZhciBkZXJpdmVkUGFyYW1zID0gQ3J5cHRvSlMua2RmLk9wZW5TU0wuZXhlY3V0ZSgnUGFzc3dvcmQnLCAyNTYvMzIsIDEyOC8zMiwgJ3NhbHRzYWx0Jyk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgZXhlY3V0ZTogZnVuY3Rpb24gKHBhc3N3b3JkLCBrZXlTaXplLCBpdlNpemUsIHNhbHQpIHtcblx0ICAgICAgICAgICAgLy8gR2VuZXJhdGUgcmFuZG9tIHNhbHRcblx0ICAgICAgICAgICAgaWYgKCFzYWx0KSB7XG5cdCAgICAgICAgICAgICAgICBzYWx0ID0gV29yZEFycmF5LnJhbmRvbSg2NC84KTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIERlcml2ZSBrZXkgYW5kIElWXG5cdCAgICAgICAgICAgIHZhciBrZXkgPSBFdnBLREYuY3JlYXRlKHsga2V5U2l6ZToga2V5U2l6ZSArIGl2U2l6ZSB9KS5jb21wdXRlKHBhc3N3b3JkLCBzYWx0KTtcblxuXHQgICAgICAgICAgICAvLyBTZXBhcmF0ZSBrZXkgYW5kIElWXG5cdCAgICAgICAgICAgIHZhciBpdiA9IFdvcmRBcnJheS5jcmVhdGUoa2V5LndvcmRzLnNsaWNlKGtleVNpemUpLCBpdlNpemUgKiA0KTtcblx0ICAgICAgICAgICAga2V5LnNpZ0J5dGVzID0ga2V5U2l6ZSAqIDQ7XG5cblx0ICAgICAgICAgICAgLy8gUmV0dXJuIHBhcmFtc1xuXHQgICAgICAgICAgICByZXR1cm4gQ2lwaGVyUGFyYW1zLmNyZWF0ZSh7IGtleToga2V5LCBpdjogaXYsIHNhbHQ6IHNhbHQgfSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBBIHNlcmlhbGl6YWJsZSBjaXBoZXIgd3JhcHBlciB0aGF0IGRlcml2ZXMgdGhlIGtleSBmcm9tIGEgcGFzc3dvcmQsXG5cdCAgICAgKiBhbmQgcmV0dXJucyBjaXBoZXJ0ZXh0IGFzIGEgc2VyaWFsaXphYmxlIGNpcGhlciBwYXJhbXMgb2JqZWN0LlxuXHQgICAgICovXG5cdCAgICB2YXIgUGFzc3dvcmRCYXNlZENpcGhlciA9IENfbGliLlBhc3N3b3JkQmFzZWRDaXBoZXIgPSBTZXJpYWxpemFibGVDaXBoZXIuZXh0ZW5kKHtcblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb25maWd1cmF0aW9uIG9wdGlvbnMuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcHJvcGVydHkge0tERn0ga2RmIFRoZSBrZXkgZGVyaXZhdGlvbiBmdW5jdGlvbiB0byB1c2UgdG8gZ2VuZXJhdGUgYSBrZXkgYW5kIElWIGZyb20gYSBwYXNzd29yZC4gRGVmYXVsdDogT3BlblNTTFxuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGNmZzogU2VyaWFsaXphYmxlQ2lwaGVyLmNmZy5leHRlbmQoe1xuXHQgICAgICAgICAgICBrZGY6IE9wZW5TU0xLZGZcblx0ICAgICAgICB9KSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIEVuY3J5cHRzIGEgbWVzc2FnZSB1c2luZyBhIHBhc3N3b3JkLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtDaXBoZXJ9IGNpcGhlciBUaGUgY2lwaGVyIGFsZ29yaXRobSB0byB1c2UuXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBtZXNzYWdlIFRoZSBtZXNzYWdlIHRvIGVuY3J5cHQuXG5cdCAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHBhc3N3b3JkIFRoZSBwYXNzd29yZC5cblx0ICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gY2ZnIChPcHRpb25hbCkgVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byB1c2UgZm9yIHRoaXMgb3BlcmF0aW9uLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7Q2lwaGVyUGFyYW1zfSBBIGNpcGhlciBwYXJhbXMgb2JqZWN0LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgY2lwaGVydGV4dFBhcmFtcyA9IENyeXB0b0pTLmxpYi5QYXNzd29yZEJhc2VkQ2lwaGVyLmVuY3J5cHQoQ3J5cHRvSlMuYWxnby5BRVMsIG1lc3NhZ2UsICdwYXNzd29yZCcpO1xuXHQgICAgICAgICAqICAgICB2YXIgY2lwaGVydGV4dFBhcmFtcyA9IENyeXB0b0pTLmxpYi5QYXNzd29yZEJhc2VkQ2lwaGVyLmVuY3J5cHQoQ3J5cHRvSlMuYWxnby5BRVMsIG1lc3NhZ2UsICdwYXNzd29yZCcsIHsgZm9ybWF0OiBDcnlwdG9KUy5mb3JtYXQuT3BlblNTTCB9KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBlbmNyeXB0OiBmdW5jdGlvbiAoY2lwaGVyLCBtZXNzYWdlLCBwYXNzd29yZCwgY2ZnKSB7XG5cdCAgICAgICAgICAgIC8vIEFwcGx5IGNvbmZpZyBkZWZhdWx0c1xuXHQgICAgICAgICAgICBjZmcgPSB0aGlzLmNmZy5leHRlbmQoY2ZnKTtcblxuXHQgICAgICAgICAgICAvLyBEZXJpdmUga2V5IGFuZCBvdGhlciBwYXJhbXNcblx0ICAgICAgICAgICAgdmFyIGRlcml2ZWRQYXJhbXMgPSBjZmcua2RmLmV4ZWN1dGUocGFzc3dvcmQsIGNpcGhlci5rZXlTaXplLCBjaXBoZXIuaXZTaXplKTtcblxuXHQgICAgICAgICAgICAvLyBBZGQgSVYgdG8gY29uZmlnXG5cdCAgICAgICAgICAgIGNmZy5pdiA9IGRlcml2ZWRQYXJhbXMuaXY7XG5cblx0ICAgICAgICAgICAgLy8gRW5jcnlwdFxuXHQgICAgICAgICAgICB2YXIgY2lwaGVydGV4dCA9IFNlcmlhbGl6YWJsZUNpcGhlci5lbmNyeXB0LmNhbGwodGhpcywgY2lwaGVyLCBtZXNzYWdlLCBkZXJpdmVkUGFyYW1zLmtleSwgY2ZnKTtcblxuXHQgICAgICAgICAgICAvLyBNaXggaW4gZGVyaXZlZCBwYXJhbXNcblx0ICAgICAgICAgICAgY2lwaGVydGV4dC5taXhJbihkZXJpdmVkUGFyYW1zKTtcblxuXHQgICAgICAgICAgICByZXR1cm4gY2lwaGVydGV4dDtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogRGVjcnlwdHMgc2VyaWFsaXplZCBjaXBoZXJ0ZXh0IHVzaW5nIGEgcGFzc3dvcmQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge0NpcGhlcn0gY2lwaGVyIFRoZSBjaXBoZXIgYWxnb3JpdGhtIHRvIHVzZS5cblx0ICAgICAgICAgKiBAcGFyYW0ge0NpcGhlclBhcmFtc3xzdHJpbmd9IGNpcGhlcnRleHQgVGhlIGNpcGhlcnRleHQgdG8gZGVjcnlwdC5cblx0ICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcGFzc3dvcmQgVGhlIHBhc3N3b3JkLlxuXHQgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjZmcgKE9wdGlvbmFsKSBUaGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIHVzZSBmb3IgdGhpcyBvcGVyYXRpb24uXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSBwbGFpbnRleHQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBwbGFpbnRleHQgPSBDcnlwdG9KUy5saWIuUGFzc3dvcmRCYXNlZENpcGhlci5kZWNyeXB0KENyeXB0b0pTLmFsZ28uQUVTLCBmb3JtYXR0ZWRDaXBoZXJ0ZXh0LCAncGFzc3dvcmQnLCB7IGZvcm1hdDogQ3J5cHRvSlMuZm9ybWF0Lk9wZW5TU0wgfSk7XG5cdCAgICAgICAgICogICAgIHZhciBwbGFpbnRleHQgPSBDcnlwdG9KUy5saWIuUGFzc3dvcmRCYXNlZENpcGhlci5kZWNyeXB0KENyeXB0b0pTLmFsZ28uQUVTLCBjaXBoZXJ0ZXh0UGFyYW1zLCAncGFzc3dvcmQnLCB7IGZvcm1hdDogQ3J5cHRvSlMuZm9ybWF0Lk9wZW5TU0wgfSk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgZGVjcnlwdDogZnVuY3Rpb24gKGNpcGhlciwgY2lwaGVydGV4dCwgcGFzc3dvcmQsIGNmZykge1xuXHQgICAgICAgICAgICAvLyBBcHBseSBjb25maWcgZGVmYXVsdHNcblx0ICAgICAgICAgICAgY2ZnID0gdGhpcy5jZmcuZXh0ZW5kKGNmZyk7XG5cblx0ICAgICAgICAgICAgLy8gQ29udmVydCBzdHJpbmcgdG8gQ2lwaGVyUGFyYW1zXG5cdCAgICAgICAgICAgIGNpcGhlcnRleHQgPSB0aGlzLl9wYXJzZShjaXBoZXJ0ZXh0LCBjZmcuZm9ybWF0KTtcblxuXHQgICAgICAgICAgICAvLyBEZXJpdmUga2V5IGFuZCBvdGhlciBwYXJhbXNcblx0ICAgICAgICAgICAgdmFyIGRlcml2ZWRQYXJhbXMgPSBjZmcua2RmLmV4ZWN1dGUocGFzc3dvcmQsIGNpcGhlci5rZXlTaXplLCBjaXBoZXIuaXZTaXplLCBjaXBoZXJ0ZXh0LnNhbHQpO1xuXG5cdCAgICAgICAgICAgIC8vIEFkZCBJViB0byBjb25maWdcblx0ICAgICAgICAgICAgY2ZnLml2ID0gZGVyaXZlZFBhcmFtcy5pdjtcblxuXHQgICAgICAgICAgICAvLyBEZWNyeXB0XG5cdCAgICAgICAgICAgIHZhciBwbGFpbnRleHQgPSBTZXJpYWxpemFibGVDaXBoZXIuZGVjcnlwdC5jYWxsKHRoaXMsIGNpcGhlciwgY2lwaGVydGV4dCwgZGVyaXZlZFBhcmFtcy5rZXksIGNmZyk7XG5cblx0ICAgICAgICAgICAgcmV0dXJuIHBsYWludGV4dDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0fSgpKTtcblxuXG5cdC8qKlxuXHQgKiBDaXBoZXIgRmVlZGJhY2sgYmxvY2sgbW9kZS5cblx0ICovXG5cdENyeXB0b0pTLm1vZGUuQ0ZCID0gKGZ1bmN0aW9uICgpIHtcblx0ICAgIHZhciBDRkIgPSBDcnlwdG9KUy5saWIuQmxvY2tDaXBoZXJNb2RlLmV4dGVuZCgpO1xuXG5cdCAgICBDRkIuRW5jcnlwdG9yID0gQ0ZCLmV4dGVuZCh7XG5cdCAgICAgICAgcHJvY2Vzc0Jsb2NrOiBmdW5jdGlvbiAod29yZHMsIG9mZnNldCkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIGNpcGhlciA9IHRoaXMuX2NpcGhlcjtcblx0ICAgICAgICAgICAgdmFyIGJsb2NrU2l6ZSA9IGNpcGhlci5ibG9ja1NpemU7XG5cblx0ICAgICAgICAgICAgZ2VuZXJhdGVLZXlzdHJlYW1BbmRFbmNyeXB0LmNhbGwodGhpcywgd29yZHMsIG9mZnNldCwgYmxvY2tTaXplLCBjaXBoZXIpO1xuXG5cdCAgICAgICAgICAgIC8vIFJlbWVtYmVyIHRoaXMgYmxvY2sgdG8gdXNlIHdpdGggbmV4dCBibG9ja1xuXHQgICAgICAgICAgICB0aGlzLl9wcmV2QmxvY2sgPSB3b3Jkcy5zbGljZShvZmZzZXQsIG9mZnNldCArIGJsb2NrU2l6ZSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cblx0ICAgIENGQi5EZWNyeXB0b3IgPSBDRkIuZXh0ZW5kKHtcblx0ICAgICAgICBwcm9jZXNzQmxvY2s6IGZ1bmN0aW9uICh3b3Jkcywgb2Zmc2V0KSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIgY2lwaGVyID0gdGhpcy5fY2lwaGVyO1xuXHQgICAgICAgICAgICB2YXIgYmxvY2tTaXplID0gY2lwaGVyLmJsb2NrU2l6ZTtcblxuXHQgICAgICAgICAgICAvLyBSZW1lbWJlciB0aGlzIGJsb2NrIHRvIHVzZSB3aXRoIG5leHQgYmxvY2tcblx0ICAgICAgICAgICAgdmFyIHRoaXNCbG9jayA9IHdvcmRzLnNsaWNlKG9mZnNldCwgb2Zmc2V0ICsgYmxvY2tTaXplKTtcblxuXHQgICAgICAgICAgICBnZW5lcmF0ZUtleXN0cmVhbUFuZEVuY3J5cHQuY2FsbCh0aGlzLCB3b3Jkcywgb2Zmc2V0LCBibG9ja1NpemUsIGNpcGhlcik7XG5cblx0ICAgICAgICAgICAgLy8gVGhpcyBibG9jayBiZWNvbWVzIHRoZSBwcmV2aW91cyBibG9ja1xuXHQgICAgICAgICAgICB0aGlzLl9wcmV2QmxvY2sgPSB0aGlzQmxvY2s7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cblx0ICAgIGZ1bmN0aW9uIGdlbmVyYXRlS2V5c3RyZWFtQW5kRW5jcnlwdCh3b3Jkcywgb2Zmc2V0LCBibG9ja1NpemUsIGNpcGhlcikge1xuXHQgICAgICAgIHZhciBrZXlzdHJlYW07XG5cblx0ICAgICAgICAvLyBTaG9ydGN1dFxuXHQgICAgICAgIHZhciBpdiA9IHRoaXMuX2l2O1xuXG5cdCAgICAgICAgLy8gR2VuZXJhdGUga2V5c3RyZWFtXG5cdCAgICAgICAgaWYgKGl2KSB7XG5cdCAgICAgICAgICAgIGtleXN0cmVhbSA9IGl2LnNsaWNlKDApO1xuXG5cdCAgICAgICAgICAgIC8vIFJlbW92ZSBJViBmb3Igc3Vic2VxdWVudCBibG9ja3Ncblx0ICAgICAgICAgICAgdGhpcy5faXYgPSB1bmRlZmluZWQ7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAga2V5c3RyZWFtID0gdGhpcy5fcHJldkJsb2NrO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBjaXBoZXIuZW5jcnlwdEJsb2NrKGtleXN0cmVhbSwgMCk7XG5cblx0ICAgICAgICAvLyBFbmNyeXB0XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBibG9ja1NpemU7IGkrKykge1xuXHQgICAgICAgICAgICB3b3Jkc1tvZmZzZXQgKyBpXSBePSBrZXlzdHJlYW1baV07XG5cdCAgICAgICAgfVxuXHQgICAgfVxuXG5cdCAgICByZXR1cm4gQ0ZCO1xuXHR9KCkpO1xuXG5cblx0LyoqXG5cdCAqIEVsZWN0cm9uaWMgQ29kZWJvb2sgYmxvY2sgbW9kZS5cblx0ICovXG5cdENyeXB0b0pTLm1vZGUuRUNCID0gKGZ1bmN0aW9uICgpIHtcblx0ICAgIHZhciBFQ0IgPSBDcnlwdG9KUy5saWIuQmxvY2tDaXBoZXJNb2RlLmV4dGVuZCgpO1xuXG5cdCAgICBFQ0IuRW5jcnlwdG9yID0gRUNCLmV4dGVuZCh7XG5cdCAgICAgICAgcHJvY2Vzc0Jsb2NrOiBmdW5jdGlvbiAod29yZHMsIG9mZnNldCkge1xuXHQgICAgICAgICAgICB0aGlzLl9jaXBoZXIuZW5jcnlwdEJsb2NrKHdvcmRzLCBvZmZzZXQpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXG5cdCAgICBFQ0IuRGVjcnlwdG9yID0gRUNCLmV4dGVuZCh7XG5cdCAgICAgICAgcHJvY2Vzc0Jsb2NrOiBmdW5jdGlvbiAod29yZHMsIG9mZnNldCkge1xuXHQgICAgICAgICAgICB0aGlzLl9jaXBoZXIuZGVjcnlwdEJsb2NrKHdvcmRzLCBvZmZzZXQpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXG5cdCAgICByZXR1cm4gRUNCO1xuXHR9KCkpO1xuXG5cblx0LyoqXG5cdCAqIEFOU0kgWC45MjMgcGFkZGluZyBzdHJhdGVneS5cblx0ICovXG5cdENyeXB0b0pTLnBhZC5BbnNpWDkyMyA9IHtcblx0ICAgIHBhZDogZnVuY3Rpb24gKGRhdGEsIGJsb2NrU2l6ZSkge1xuXHQgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgIHZhciBkYXRhU2lnQnl0ZXMgPSBkYXRhLnNpZ0J5dGVzO1xuXHQgICAgICAgIHZhciBibG9ja1NpemVCeXRlcyA9IGJsb2NrU2l6ZSAqIDQ7XG5cblx0ICAgICAgICAvLyBDb3VudCBwYWRkaW5nIGJ5dGVzXG5cdCAgICAgICAgdmFyIG5QYWRkaW5nQnl0ZXMgPSBibG9ja1NpemVCeXRlcyAtIGRhdGFTaWdCeXRlcyAlIGJsb2NrU2l6ZUJ5dGVzO1xuXG5cdCAgICAgICAgLy8gQ29tcHV0ZSBsYXN0IGJ5dGUgcG9zaXRpb25cblx0ICAgICAgICB2YXIgbGFzdEJ5dGVQb3MgPSBkYXRhU2lnQnl0ZXMgKyBuUGFkZGluZ0J5dGVzIC0gMTtcblxuXHQgICAgICAgIC8vIFBhZFxuXHQgICAgICAgIGRhdGEuY2xhbXAoKTtcblx0ICAgICAgICBkYXRhLndvcmRzW2xhc3RCeXRlUG9zID4+PiAyXSB8PSBuUGFkZGluZ0J5dGVzIDw8ICgyNCAtIChsYXN0Qnl0ZVBvcyAlIDQpICogOCk7XG5cdCAgICAgICAgZGF0YS5zaWdCeXRlcyArPSBuUGFkZGluZ0J5dGVzO1xuXHQgICAgfSxcblxuXHQgICAgdW5wYWQ6IGZ1bmN0aW9uIChkYXRhKSB7XG5cdCAgICAgICAgLy8gR2V0IG51bWJlciBvZiBwYWRkaW5nIGJ5dGVzIGZyb20gbGFzdCBieXRlXG5cdCAgICAgICAgdmFyIG5QYWRkaW5nQnl0ZXMgPSBkYXRhLndvcmRzWyhkYXRhLnNpZ0J5dGVzIC0gMSkgPj4+IDJdICYgMHhmZjtcblxuXHQgICAgICAgIC8vIFJlbW92ZSBwYWRkaW5nXG5cdCAgICAgICAgZGF0YS5zaWdCeXRlcyAtPSBuUGFkZGluZ0J5dGVzO1xuXHQgICAgfVxuXHR9O1xuXG5cblx0LyoqXG5cdCAqIElTTyAxMDEyNiBwYWRkaW5nIHN0cmF0ZWd5LlxuXHQgKi9cblx0Q3J5cHRvSlMucGFkLklzbzEwMTI2ID0ge1xuXHQgICAgcGFkOiBmdW5jdGlvbiAoZGF0YSwgYmxvY2tTaXplKSB7XG5cdCAgICAgICAgLy8gU2hvcnRjdXRcblx0ICAgICAgICB2YXIgYmxvY2tTaXplQnl0ZXMgPSBibG9ja1NpemUgKiA0O1xuXG5cdCAgICAgICAgLy8gQ291bnQgcGFkZGluZyBieXRlc1xuXHQgICAgICAgIHZhciBuUGFkZGluZ0J5dGVzID0gYmxvY2tTaXplQnl0ZXMgLSBkYXRhLnNpZ0J5dGVzICUgYmxvY2tTaXplQnl0ZXM7XG5cblx0ICAgICAgICAvLyBQYWRcblx0ICAgICAgICBkYXRhLmNvbmNhdChDcnlwdG9KUy5saWIuV29yZEFycmF5LnJhbmRvbShuUGFkZGluZ0J5dGVzIC0gMSkpLlxuXHQgICAgICAgICAgICAgY29uY2F0KENyeXB0b0pTLmxpYi5Xb3JkQXJyYXkuY3JlYXRlKFtuUGFkZGluZ0J5dGVzIDw8IDI0XSwgMSkpO1xuXHQgICAgfSxcblxuXHQgICAgdW5wYWQ6IGZ1bmN0aW9uIChkYXRhKSB7XG5cdCAgICAgICAgLy8gR2V0IG51bWJlciBvZiBwYWRkaW5nIGJ5dGVzIGZyb20gbGFzdCBieXRlXG5cdCAgICAgICAgdmFyIG5QYWRkaW5nQnl0ZXMgPSBkYXRhLndvcmRzWyhkYXRhLnNpZ0J5dGVzIC0gMSkgPj4+IDJdICYgMHhmZjtcblxuXHQgICAgICAgIC8vIFJlbW92ZSBwYWRkaW5nXG5cdCAgICAgICAgZGF0YS5zaWdCeXRlcyAtPSBuUGFkZGluZ0J5dGVzO1xuXHQgICAgfVxuXHR9O1xuXG5cblx0LyoqXG5cdCAqIElTTy9JRUMgOTc5Ny0xIFBhZGRpbmcgTWV0aG9kIDIuXG5cdCAqL1xuXHRDcnlwdG9KUy5wYWQuSXNvOTc5NzEgPSB7XG5cdCAgICBwYWQ6IGZ1bmN0aW9uIChkYXRhLCBibG9ja1NpemUpIHtcblx0ICAgICAgICAvLyBBZGQgMHg4MCBieXRlXG5cdCAgICAgICAgZGF0YS5jb25jYXQoQ3J5cHRvSlMubGliLldvcmRBcnJheS5jcmVhdGUoWzB4ODAwMDAwMDBdLCAxKSk7XG5cblx0ICAgICAgICAvLyBaZXJvIHBhZCB0aGUgcmVzdFxuXHQgICAgICAgIENyeXB0b0pTLnBhZC5aZXJvUGFkZGluZy5wYWQoZGF0YSwgYmxvY2tTaXplKTtcblx0ICAgIH0sXG5cblx0ICAgIHVucGFkOiBmdW5jdGlvbiAoZGF0YSkge1xuXHQgICAgICAgIC8vIFJlbW92ZSB6ZXJvIHBhZGRpbmdcblx0ICAgICAgICBDcnlwdG9KUy5wYWQuWmVyb1BhZGRpbmcudW5wYWQoZGF0YSk7XG5cblx0ICAgICAgICAvLyBSZW1vdmUgb25lIG1vcmUgYnl0ZSAtLSB0aGUgMHg4MCBieXRlXG5cdCAgICAgICAgZGF0YS5zaWdCeXRlcy0tO1xuXHQgICAgfVxuXHR9O1xuXG5cblx0LyoqXG5cdCAqIE91dHB1dCBGZWVkYmFjayBibG9jayBtb2RlLlxuXHQgKi9cblx0Q3J5cHRvSlMubW9kZS5PRkIgPSAoZnVuY3Rpb24gKCkge1xuXHQgICAgdmFyIE9GQiA9IENyeXB0b0pTLmxpYi5CbG9ja0NpcGhlck1vZGUuZXh0ZW5kKCk7XG5cblx0ICAgIHZhciBFbmNyeXB0b3IgPSBPRkIuRW5jcnlwdG9yID0gT0ZCLmV4dGVuZCh7XG5cdCAgICAgICAgcHJvY2Vzc0Jsb2NrOiBmdW5jdGlvbiAod29yZHMsIG9mZnNldCkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIGNpcGhlciA9IHRoaXMuX2NpcGhlclxuXHQgICAgICAgICAgICB2YXIgYmxvY2tTaXplID0gY2lwaGVyLmJsb2NrU2l6ZTtcblx0ICAgICAgICAgICAgdmFyIGl2ID0gdGhpcy5faXY7XG5cdCAgICAgICAgICAgIHZhciBrZXlzdHJlYW0gPSB0aGlzLl9rZXlzdHJlYW07XG5cblx0ICAgICAgICAgICAgLy8gR2VuZXJhdGUga2V5c3RyZWFtXG5cdCAgICAgICAgICAgIGlmIChpdikge1xuXHQgICAgICAgICAgICAgICAga2V5c3RyZWFtID0gdGhpcy5fa2V5c3RyZWFtID0gaXYuc2xpY2UoMCk7XG5cblx0ICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBJViBmb3Igc3Vic2VxdWVudCBibG9ja3Ncblx0ICAgICAgICAgICAgICAgIHRoaXMuX2l2ID0gdW5kZWZpbmVkO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGNpcGhlci5lbmNyeXB0QmxvY2soa2V5c3RyZWFtLCAwKTtcblxuXHQgICAgICAgICAgICAvLyBFbmNyeXB0XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYmxvY2tTaXplOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHdvcmRzW29mZnNldCArIGldIF49IGtleXN0cmVhbVtpXTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXG5cdCAgICBPRkIuRGVjcnlwdG9yID0gRW5jcnlwdG9yO1xuXG5cdCAgICByZXR1cm4gT0ZCO1xuXHR9KCkpO1xuXG5cblx0LyoqXG5cdCAqIEEgbm9vcCBwYWRkaW5nIHN0cmF0ZWd5LlxuXHQgKi9cblx0Q3J5cHRvSlMucGFkLk5vUGFkZGluZyA9IHtcblx0ICAgIHBhZDogZnVuY3Rpb24gKCkge1xuXHQgICAgfSxcblxuXHQgICAgdW5wYWQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgIH1cblx0fTtcblxuXG5cdChmdW5jdGlvbiAodW5kZWZpbmVkKSB7XG5cdCAgICAvLyBTaG9ydGN1dHNcblx0ICAgIHZhciBDID0gQ3J5cHRvSlM7XG5cdCAgICB2YXIgQ19saWIgPSBDLmxpYjtcblx0ICAgIHZhciBDaXBoZXJQYXJhbXMgPSBDX2xpYi5DaXBoZXJQYXJhbXM7XG5cdCAgICB2YXIgQ19lbmMgPSBDLmVuYztcblx0ICAgIHZhciBIZXggPSBDX2VuYy5IZXg7XG5cdCAgICB2YXIgQ19mb3JtYXQgPSBDLmZvcm1hdDtcblxuXHQgICAgdmFyIEhleEZvcm1hdHRlciA9IENfZm9ybWF0LkhleCA9IHtcblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb252ZXJ0cyB0aGUgY2lwaGVydGV4dCBvZiBhIGNpcGhlciBwYXJhbXMgb2JqZWN0IHRvIGEgaGV4YWRlY2ltYWxseSBlbmNvZGVkIHN0cmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7Q2lwaGVyUGFyYW1zfSBjaXBoZXJQYXJhbXMgVGhlIGNpcGhlciBwYXJhbXMgb2JqZWN0LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7c3RyaW5nfSBUaGUgaGV4YWRlY2ltYWxseSBlbmNvZGVkIHN0cmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBzdGF0aWNcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIGhleFN0cmluZyA9IENyeXB0b0pTLmZvcm1hdC5IZXguc3RyaW5naWZ5KGNpcGhlclBhcmFtcyk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgc3RyaW5naWZ5OiBmdW5jdGlvbiAoY2lwaGVyUGFyYW1zKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBjaXBoZXJQYXJhbXMuY2lwaGVydGV4dC50b1N0cmluZyhIZXgpO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb252ZXJ0cyBhIGhleGFkZWNpbWFsbHkgZW5jb2RlZCBjaXBoZXJ0ZXh0IHN0cmluZyB0byBhIGNpcGhlciBwYXJhbXMgb2JqZWN0LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGlucHV0IFRoZSBoZXhhZGVjaW1hbGx5IGVuY29kZWQgc3RyaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7Q2lwaGVyUGFyYW1zfSBUaGUgY2lwaGVyIHBhcmFtcyBvYmplY3QuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBjaXBoZXJQYXJhbXMgPSBDcnlwdG9KUy5mb3JtYXQuSGV4LnBhcnNlKGhleFN0cmluZyk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgcGFyc2U6IGZ1bmN0aW9uIChpbnB1dCkge1xuXHQgICAgICAgICAgICB2YXIgY2lwaGVydGV4dCA9IEhleC5wYXJzZShpbnB1dCk7XG5cdCAgICAgICAgICAgIHJldHVybiBDaXBoZXJQYXJhbXMuY3JlYXRlKHsgY2lwaGVydGV4dDogY2lwaGVydGV4dCB9KTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHR9KCkpO1xuXG5cblx0KGZ1bmN0aW9uICgpIHtcblx0ICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgdmFyIEMgPSBDcnlwdG9KUztcblx0ICAgIHZhciBDX2xpYiA9IEMubGliO1xuXHQgICAgdmFyIEJsb2NrQ2lwaGVyID0gQ19saWIuQmxvY2tDaXBoZXI7XG5cdCAgICB2YXIgQ19hbGdvID0gQy5hbGdvO1xuXG5cdCAgICAvLyBMb29rdXAgdGFibGVzXG5cdCAgICB2YXIgU0JPWCA9IFtdO1xuXHQgICAgdmFyIElOVl9TQk9YID0gW107XG5cdCAgICB2YXIgU1VCX01JWF8wID0gW107XG5cdCAgICB2YXIgU1VCX01JWF8xID0gW107XG5cdCAgICB2YXIgU1VCX01JWF8yID0gW107XG5cdCAgICB2YXIgU1VCX01JWF8zID0gW107XG5cdCAgICB2YXIgSU5WX1NVQl9NSVhfMCA9IFtdO1xuXHQgICAgdmFyIElOVl9TVUJfTUlYXzEgPSBbXTtcblx0ICAgIHZhciBJTlZfU1VCX01JWF8yID0gW107XG5cdCAgICB2YXIgSU5WX1NVQl9NSVhfMyA9IFtdO1xuXG5cdCAgICAvLyBDb21wdXRlIGxvb2t1cCB0YWJsZXNcblx0ICAgIChmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgLy8gQ29tcHV0ZSBkb3VibGUgdGFibGVcblx0ICAgICAgICB2YXIgZCA9IFtdO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMjU2OyBpKyspIHtcblx0ICAgICAgICAgICAgaWYgKGkgPCAxMjgpIHtcblx0ICAgICAgICAgICAgICAgIGRbaV0gPSBpIDw8IDE7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICBkW2ldID0gKGkgPDwgMSkgXiAweDExYjtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblxuXHQgICAgICAgIC8vIFdhbGsgR0YoMl44KVxuXHQgICAgICAgIHZhciB4ID0gMDtcblx0ICAgICAgICB2YXIgeGkgPSAwO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMjU2OyBpKyspIHtcblx0ICAgICAgICAgICAgLy8gQ29tcHV0ZSBzYm94XG5cdCAgICAgICAgICAgIHZhciBzeCA9IHhpIF4gKHhpIDw8IDEpIF4gKHhpIDw8IDIpIF4gKHhpIDw8IDMpIF4gKHhpIDw8IDQpO1xuXHQgICAgICAgICAgICBzeCA9IChzeCA+Pj4gOCkgXiAoc3ggJiAweGZmKSBeIDB4NjM7XG5cdCAgICAgICAgICAgIFNCT1hbeF0gPSBzeDtcblx0ICAgICAgICAgICAgSU5WX1NCT1hbc3hdID0geDtcblxuXHQgICAgICAgICAgICAvLyBDb21wdXRlIG11bHRpcGxpY2F0aW9uXG5cdCAgICAgICAgICAgIHZhciB4MiA9IGRbeF07XG5cdCAgICAgICAgICAgIHZhciB4NCA9IGRbeDJdO1xuXHQgICAgICAgICAgICB2YXIgeDggPSBkW3g0XTtcblxuXHQgICAgICAgICAgICAvLyBDb21wdXRlIHN1YiBieXRlcywgbWl4IGNvbHVtbnMgdGFibGVzXG5cdCAgICAgICAgICAgIHZhciB0ID0gKGRbc3hdICogMHgxMDEpIF4gKHN4ICogMHgxMDEwMTAwKTtcblx0ICAgICAgICAgICAgU1VCX01JWF8wW3hdID0gKHQgPDwgMjQpIHwgKHQgPj4+IDgpO1xuXHQgICAgICAgICAgICBTVUJfTUlYXzFbeF0gPSAodCA8PCAxNikgfCAodCA+Pj4gMTYpO1xuXHQgICAgICAgICAgICBTVUJfTUlYXzJbeF0gPSAodCA8PCA4KSAgfCAodCA+Pj4gMjQpO1xuXHQgICAgICAgICAgICBTVUJfTUlYXzNbeF0gPSB0O1xuXG5cdCAgICAgICAgICAgIC8vIENvbXB1dGUgaW52IHN1YiBieXRlcywgaW52IG1peCBjb2x1bW5zIHRhYmxlc1xuXHQgICAgICAgICAgICB2YXIgdCA9ICh4OCAqIDB4MTAxMDEwMSkgXiAoeDQgKiAweDEwMDAxKSBeICh4MiAqIDB4MTAxKSBeICh4ICogMHgxMDEwMTAwKTtcblx0ICAgICAgICAgICAgSU5WX1NVQl9NSVhfMFtzeF0gPSAodCA8PCAyNCkgfCAodCA+Pj4gOCk7XG5cdCAgICAgICAgICAgIElOVl9TVUJfTUlYXzFbc3hdID0gKHQgPDwgMTYpIHwgKHQgPj4+IDE2KTtcblx0ICAgICAgICAgICAgSU5WX1NVQl9NSVhfMltzeF0gPSAodCA8PCA4KSAgfCAodCA+Pj4gMjQpO1xuXHQgICAgICAgICAgICBJTlZfU1VCX01JWF8zW3N4XSA9IHQ7XG5cblx0ICAgICAgICAgICAgLy8gQ29tcHV0ZSBuZXh0IGNvdW50ZXJcblx0ICAgICAgICAgICAgaWYgKCF4KSB7XG5cdCAgICAgICAgICAgICAgICB4ID0geGkgPSAxO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgeCA9IHgyIF4gZFtkW2RbeDggXiB4Ml1dXTtcblx0ICAgICAgICAgICAgICAgIHhpIF49IGRbZFt4aV1dO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSgpKTtcblxuXHQgICAgLy8gUHJlY29tcHV0ZWQgUmNvbiBsb29rdXBcblx0ICAgIHZhciBSQ09OID0gWzB4MDAsIDB4MDEsIDB4MDIsIDB4MDQsIDB4MDgsIDB4MTAsIDB4MjAsIDB4NDAsIDB4ODAsIDB4MWIsIDB4MzZdO1xuXG5cdCAgICAvKipcblx0ICAgICAqIEFFUyBibG9jayBjaXBoZXIgYWxnb3JpdGhtLlxuXHQgICAgICovXG5cdCAgICB2YXIgQUVTID0gQ19hbGdvLkFFUyA9IEJsb2NrQ2lwaGVyLmV4dGVuZCh7XG5cdCAgICAgICAgX2RvUmVzZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIHQ7XG5cblx0ICAgICAgICAgICAgLy8gU2tpcCByZXNldCBvZiBuUm91bmRzIGhhcyBiZWVuIHNldCBiZWZvcmUgYW5kIGtleSBkaWQgbm90IGNoYW5nZVxuXHQgICAgICAgICAgICBpZiAodGhpcy5fblJvdW5kcyAmJiB0aGlzLl9rZXlQcmlvclJlc2V0ID09PSB0aGlzLl9rZXkpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybjtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIga2V5ID0gdGhpcy5fa2V5UHJpb3JSZXNldCA9IHRoaXMuX2tleTtcblx0ICAgICAgICAgICAgdmFyIGtleVdvcmRzID0ga2V5LndvcmRzO1xuXHQgICAgICAgICAgICB2YXIga2V5U2l6ZSA9IGtleS5zaWdCeXRlcyAvIDQ7XG5cblx0ICAgICAgICAgICAgLy8gQ29tcHV0ZSBudW1iZXIgb2Ygcm91bmRzXG5cdCAgICAgICAgICAgIHZhciBuUm91bmRzID0gdGhpcy5fblJvdW5kcyA9IGtleVNpemUgKyA2O1xuXG5cdCAgICAgICAgICAgIC8vIENvbXB1dGUgbnVtYmVyIG9mIGtleSBzY2hlZHVsZSByb3dzXG5cdCAgICAgICAgICAgIHZhciBrc1Jvd3MgPSAoblJvdW5kcyArIDEpICogNDtcblxuXHQgICAgICAgICAgICAvLyBDb21wdXRlIGtleSBzY2hlZHVsZVxuXHQgICAgICAgICAgICB2YXIga2V5U2NoZWR1bGUgPSB0aGlzLl9rZXlTY2hlZHVsZSA9IFtdO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBrc1JvdyA9IDA7IGtzUm93IDwga3NSb3dzOyBrc1JvdysrKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAoa3NSb3cgPCBrZXlTaXplKSB7XG5cdCAgICAgICAgICAgICAgICAgICAga2V5U2NoZWR1bGVba3NSb3ddID0ga2V5V29yZHNba3NSb3ddO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICB0ID0ga2V5U2NoZWR1bGVba3NSb3cgLSAxXTtcblxuXHQgICAgICAgICAgICAgICAgICAgIGlmICghKGtzUm93ICUga2V5U2l6ZSkpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgLy8gUm90IHdvcmRcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdCA9ICh0IDw8IDgpIHwgKHQgPj4+IDI0KTtcblxuXHQgICAgICAgICAgICAgICAgICAgICAgICAvLyBTdWIgd29yZFxuXHQgICAgICAgICAgICAgICAgICAgICAgICB0ID0gKFNCT1hbdCA+Pj4gMjRdIDw8IDI0KSB8IChTQk9YWyh0ID4+PiAxNikgJiAweGZmXSA8PCAxNikgfCAoU0JPWFsodCA+Pj4gOCkgJiAweGZmXSA8PCA4KSB8IFNCT1hbdCAmIDB4ZmZdO1xuXG5cdCAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1peCBSY29uXG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHQgXj0gUkNPTlsoa3NSb3cgLyBrZXlTaXplKSB8IDBdIDw8IDI0O1xuXHQgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoa2V5U2l6ZSA+IDYgJiYga3NSb3cgJSBrZXlTaXplID09IDQpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3ViIHdvcmRcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdCA9IChTQk9YW3QgPj4+IDI0XSA8PCAyNCkgfCAoU0JPWFsodCA+Pj4gMTYpICYgMHhmZl0gPDwgMTYpIHwgKFNCT1hbKHQgPj4+IDgpICYgMHhmZl0gPDwgOCkgfCBTQk9YW3QgJiAweGZmXTtcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgICAgICAgICBrZXlTY2hlZHVsZVtrc1Jvd10gPSBrZXlTY2hlZHVsZVtrc1JvdyAtIGtleVNpemVdIF4gdDtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIENvbXB1dGUgaW52IGtleSBzY2hlZHVsZVxuXHQgICAgICAgICAgICB2YXIgaW52S2V5U2NoZWR1bGUgPSB0aGlzLl9pbnZLZXlTY2hlZHVsZSA9IFtdO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpbnZLc1JvdyA9IDA7IGludktzUm93IDwga3NSb3dzOyBpbnZLc1JvdysrKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIga3NSb3cgPSBrc1Jvd3MgLSBpbnZLc1JvdztcblxuXHQgICAgICAgICAgICAgICAgaWYgKGludktzUm93ICUgNCkge1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciB0ID0ga2V5U2NoZWR1bGVba3NSb3ddO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgdCA9IGtleVNjaGVkdWxlW2tzUm93IC0gNF07XG5cdCAgICAgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgICAgIGlmIChpbnZLc1JvdyA8IDQgfHwga3NSb3cgPD0gNCkge1xuXHQgICAgICAgICAgICAgICAgICAgIGludktleVNjaGVkdWxlW2ludktzUm93XSA9IHQ7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIGludktleVNjaGVkdWxlW2ludktzUm93XSA9IElOVl9TVUJfTUlYXzBbU0JPWFt0ID4+PiAyNF1dIF4gSU5WX1NVQl9NSVhfMVtTQk9YWyh0ID4+PiAxNikgJiAweGZmXV0gXlxuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOVl9TVUJfTUlYXzJbU0JPWFsodCA+Pj4gOCkgJiAweGZmXV0gXiBJTlZfU1VCX01JWF8zW1NCT1hbdCAmIDB4ZmZdXTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBlbmNyeXB0QmxvY2s6IGZ1bmN0aW9uIChNLCBvZmZzZXQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fZG9DcnlwdEJsb2NrKE0sIG9mZnNldCwgdGhpcy5fa2V5U2NoZWR1bGUsIFNVQl9NSVhfMCwgU1VCX01JWF8xLCBTVUJfTUlYXzIsIFNVQl9NSVhfMywgU0JPWCk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIGRlY3J5cHRCbG9jazogZnVuY3Rpb24gKE0sIG9mZnNldCkge1xuXHQgICAgICAgICAgICAvLyBTd2FwIDJuZCBhbmQgNHRoIHJvd3Ncblx0ICAgICAgICAgICAgdmFyIHQgPSBNW29mZnNldCArIDFdO1xuXHQgICAgICAgICAgICBNW29mZnNldCArIDFdID0gTVtvZmZzZXQgKyAzXTtcblx0ICAgICAgICAgICAgTVtvZmZzZXQgKyAzXSA9IHQ7XG5cblx0ICAgICAgICAgICAgdGhpcy5fZG9DcnlwdEJsb2NrKE0sIG9mZnNldCwgdGhpcy5faW52S2V5U2NoZWR1bGUsIElOVl9TVUJfTUlYXzAsIElOVl9TVUJfTUlYXzEsIElOVl9TVUJfTUlYXzIsIElOVl9TVUJfTUlYXzMsIElOVl9TQk9YKTtcblxuXHQgICAgICAgICAgICAvLyBJbnYgc3dhcCAybmQgYW5kIDR0aCByb3dzXG5cdCAgICAgICAgICAgIHZhciB0ID0gTVtvZmZzZXQgKyAxXTtcblx0ICAgICAgICAgICAgTVtvZmZzZXQgKyAxXSA9IE1bb2Zmc2V0ICsgM107XG5cdCAgICAgICAgICAgIE1bb2Zmc2V0ICsgM10gPSB0O1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBfZG9DcnlwdEJsb2NrOiBmdW5jdGlvbiAoTSwgb2Zmc2V0LCBrZXlTY2hlZHVsZSwgU1VCX01JWF8wLCBTVUJfTUlYXzEsIFNVQl9NSVhfMiwgU1VCX01JWF8zLCBTQk9YKSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0XG5cdCAgICAgICAgICAgIHZhciBuUm91bmRzID0gdGhpcy5fblJvdW5kcztcblxuXHQgICAgICAgICAgICAvLyBHZXQgaW5wdXQsIGFkZCByb3VuZCBrZXlcblx0ICAgICAgICAgICAgdmFyIHMwID0gTVtvZmZzZXRdICAgICBeIGtleVNjaGVkdWxlWzBdO1xuXHQgICAgICAgICAgICB2YXIgczEgPSBNW29mZnNldCArIDFdIF4ga2V5U2NoZWR1bGVbMV07XG5cdCAgICAgICAgICAgIHZhciBzMiA9IE1bb2Zmc2V0ICsgMl0gXiBrZXlTY2hlZHVsZVsyXTtcblx0ICAgICAgICAgICAgdmFyIHMzID0gTVtvZmZzZXQgKyAzXSBeIGtleVNjaGVkdWxlWzNdO1xuXG5cdCAgICAgICAgICAgIC8vIEtleSBzY2hlZHVsZSByb3cgY291bnRlclxuXHQgICAgICAgICAgICB2YXIga3NSb3cgPSA0O1xuXG5cdCAgICAgICAgICAgIC8vIFJvdW5kc1xuXHQgICAgICAgICAgICBmb3IgKHZhciByb3VuZCA9IDE7IHJvdW5kIDwgblJvdW5kczsgcm91bmQrKykge1xuXHQgICAgICAgICAgICAgICAgLy8gU2hpZnQgcm93cywgc3ViIGJ5dGVzLCBtaXggY29sdW1ucywgYWRkIHJvdW5kIGtleVxuXHQgICAgICAgICAgICAgICAgdmFyIHQwID0gU1VCX01JWF8wW3MwID4+PiAyNF0gXiBTVUJfTUlYXzFbKHMxID4+PiAxNikgJiAweGZmXSBeIFNVQl9NSVhfMlsoczIgPj4+IDgpICYgMHhmZl0gXiBTVUJfTUlYXzNbczMgJiAweGZmXSBeIGtleVNjaGVkdWxlW2tzUm93KytdO1xuXHQgICAgICAgICAgICAgICAgdmFyIHQxID0gU1VCX01JWF8wW3MxID4+PiAyNF0gXiBTVUJfTUlYXzFbKHMyID4+PiAxNikgJiAweGZmXSBeIFNVQl9NSVhfMlsoczMgPj4+IDgpICYgMHhmZl0gXiBTVUJfTUlYXzNbczAgJiAweGZmXSBeIGtleVNjaGVkdWxlW2tzUm93KytdO1xuXHQgICAgICAgICAgICAgICAgdmFyIHQyID0gU1VCX01JWF8wW3MyID4+PiAyNF0gXiBTVUJfTUlYXzFbKHMzID4+PiAxNikgJiAweGZmXSBeIFNVQl9NSVhfMlsoczAgPj4+IDgpICYgMHhmZl0gXiBTVUJfTUlYXzNbczEgJiAweGZmXSBeIGtleVNjaGVkdWxlW2tzUm93KytdO1xuXHQgICAgICAgICAgICAgICAgdmFyIHQzID0gU1VCX01JWF8wW3MzID4+PiAyNF0gXiBTVUJfTUlYXzFbKHMwID4+PiAxNikgJiAweGZmXSBeIFNVQl9NSVhfMlsoczEgPj4+IDgpICYgMHhmZl0gXiBTVUJfTUlYXzNbczIgJiAweGZmXSBeIGtleVNjaGVkdWxlW2tzUm93KytdO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBVcGRhdGUgc3RhdGVcblx0ICAgICAgICAgICAgICAgIHMwID0gdDA7XG5cdCAgICAgICAgICAgICAgICBzMSA9IHQxO1xuXHQgICAgICAgICAgICAgICAgczIgPSB0Mjtcblx0ICAgICAgICAgICAgICAgIHMzID0gdDM7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBTaGlmdCByb3dzLCBzdWIgYnl0ZXMsIGFkZCByb3VuZCBrZXlcblx0ICAgICAgICAgICAgdmFyIHQwID0gKChTQk9YW3MwID4+PiAyNF0gPDwgMjQpIHwgKFNCT1hbKHMxID4+PiAxNikgJiAweGZmXSA8PCAxNikgfCAoU0JPWFsoczIgPj4+IDgpICYgMHhmZl0gPDwgOCkgfCBTQk9YW3MzICYgMHhmZl0pIF4ga2V5U2NoZWR1bGVba3NSb3crK107XG5cdCAgICAgICAgICAgIHZhciB0MSA9ICgoU0JPWFtzMSA+Pj4gMjRdIDw8IDI0KSB8IChTQk9YWyhzMiA+Pj4gMTYpICYgMHhmZl0gPDwgMTYpIHwgKFNCT1hbKHMzID4+PiA4KSAmIDB4ZmZdIDw8IDgpIHwgU0JPWFtzMCAmIDB4ZmZdKSBeIGtleVNjaGVkdWxlW2tzUm93KytdO1xuXHQgICAgICAgICAgICB2YXIgdDIgPSAoKFNCT1hbczIgPj4+IDI0XSA8PCAyNCkgfCAoU0JPWFsoczMgPj4+IDE2KSAmIDB4ZmZdIDw8IDE2KSB8IChTQk9YWyhzMCA+Pj4gOCkgJiAweGZmXSA8PCA4KSB8IFNCT1hbczEgJiAweGZmXSkgXiBrZXlTY2hlZHVsZVtrc1JvdysrXTtcblx0ICAgICAgICAgICAgdmFyIHQzID0gKChTQk9YW3MzID4+PiAyNF0gPDwgMjQpIHwgKFNCT1hbKHMwID4+PiAxNikgJiAweGZmXSA8PCAxNikgfCAoU0JPWFsoczEgPj4+IDgpICYgMHhmZl0gPDwgOCkgfCBTQk9YW3MyICYgMHhmZl0pIF4ga2V5U2NoZWR1bGVba3NSb3crK107XG5cblx0ICAgICAgICAgICAgLy8gU2V0IG91dHB1dFxuXHQgICAgICAgICAgICBNW29mZnNldF0gICAgID0gdDA7XG5cdCAgICAgICAgICAgIE1bb2Zmc2V0ICsgMV0gPSB0MTtcblx0ICAgICAgICAgICAgTVtvZmZzZXQgKyAyXSA9IHQyO1xuXHQgICAgICAgICAgICBNW29mZnNldCArIDNdID0gdDM7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIGtleVNpemU6IDI1Ni8zMlxuXHQgICAgfSk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogU2hvcnRjdXQgZnVuY3Rpb25zIHRvIHRoZSBjaXBoZXIncyBvYmplY3QgaW50ZXJmYWNlLlxuXHQgICAgICpcblx0ICAgICAqIEBleGFtcGxlXG5cdCAgICAgKlxuXHQgICAgICogICAgIHZhciBjaXBoZXJ0ZXh0ID0gQ3J5cHRvSlMuQUVTLmVuY3J5cHQobWVzc2FnZSwga2V5LCBjZmcpO1xuXHQgICAgICogICAgIHZhciBwbGFpbnRleHQgID0gQ3J5cHRvSlMuQUVTLmRlY3J5cHQoY2lwaGVydGV4dCwga2V5LCBjZmcpO1xuXHQgICAgICovXG5cdCAgICBDLkFFUyA9IEJsb2NrQ2lwaGVyLl9jcmVhdGVIZWxwZXIoQUVTKTtcblx0fSgpKTtcblxuXG5cdChmdW5jdGlvbiAoKSB7XG5cdCAgICAvLyBTaG9ydGN1dHNcblx0ICAgIHZhciBDID0gQ3J5cHRvSlM7XG5cdCAgICB2YXIgQ19saWIgPSBDLmxpYjtcblx0ICAgIHZhciBXb3JkQXJyYXkgPSBDX2xpYi5Xb3JkQXJyYXk7XG5cdCAgICB2YXIgQmxvY2tDaXBoZXIgPSBDX2xpYi5CbG9ja0NpcGhlcjtcblx0ICAgIHZhciBDX2FsZ28gPSBDLmFsZ287XG5cblx0ICAgIC8vIFBlcm11dGVkIENob2ljZSAxIGNvbnN0YW50c1xuXHQgICAgdmFyIFBDMSA9IFtcblx0ICAgICAgICA1NywgNDksIDQxLCAzMywgMjUsIDE3LCA5LCAgMSxcblx0ICAgICAgICA1OCwgNTAsIDQyLCAzNCwgMjYsIDE4LCAxMCwgMixcblx0ICAgICAgICA1OSwgNTEsIDQzLCAzNSwgMjcsIDE5LCAxMSwgMyxcblx0ICAgICAgICA2MCwgNTIsIDQ0LCAzNiwgNjMsIDU1LCA0NywgMzksXG5cdCAgICAgICAgMzEsIDIzLCAxNSwgNywgIDYyLCA1NCwgNDYsIDM4LFxuXHQgICAgICAgIDMwLCAyMiwgMTQsIDYsICA2MSwgNTMsIDQ1LCAzNyxcblx0ICAgICAgICAyOSwgMjEsIDEzLCA1LCAgMjgsIDIwLCAxMiwgNFxuXHQgICAgXTtcblxuXHQgICAgLy8gUGVybXV0ZWQgQ2hvaWNlIDIgY29uc3RhbnRzXG5cdCAgICB2YXIgUEMyID0gW1xuXHQgICAgICAgIDE0LCAxNywgMTEsIDI0LCAxLCAgNSxcblx0ICAgICAgICAzLCAgMjgsIDE1LCA2LCAgMjEsIDEwLFxuXHQgICAgICAgIDIzLCAxOSwgMTIsIDQsICAyNiwgOCxcblx0ICAgICAgICAxNiwgNywgIDI3LCAyMCwgMTMsIDIsXG5cdCAgICAgICAgNDEsIDUyLCAzMSwgMzcsIDQ3LCA1NSxcblx0ICAgICAgICAzMCwgNDAsIDUxLCA0NSwgMzMsIDQ4LFxuXHQgICAgICAgIDQ0LCA0OSwgMzksIDU2LCAzNCwgNTMsXG5cdCAgICAgICAgNDYsIDQyLCA1MCwgMzYsIDI5LCAzMlxuXHQgICAgXTtcblxuXHQgICAgLy8gQ3VtdWxhdGl2ZSBiaXQgc2hpZnQgY29uc3RhbnRzXG5cdCAgICB2YXIgQklUX1NISUZUUyA9IFsxLCAgMiwgIDQsICA2LCAgOCwgIDEwLCAxMiwgMTQsIDE1LCAxNywgMTksIDIxLCAyMywgMjUsIDI3LCAyOF07XG5cblx0ICAgIC8vIFNCT1hlcyBhbmQgcm91bmQgcGVybXV0YXRpb24gY29uc3RhbnRzXG5cdCAgICB2YXIgU0JPWF9QID0gW1xuXHQgICAgICAgIHtcblx0ICAgICAgICAgICAgMHgwOiAweDgwODIwMCxcblx0ICAgICAgICAgICAgMHgxMDAwMDAwMDogMHg4MDAwLFxuXHQgICAgICAgICAgICAweDIwMDAwMDAwOiAweDgwODAwMixcblx0ICAgICAgICAgICAgMHgzMDAwMDAwMDogMHgyLFxuXHQgICAgICAgICAgICAweDQwMDAwMDAwOiAweDIwMCxcblx0ICAgICAgICAgICAgMHg1MDAwMDAwMDogMHg4MDgyMDIsXG5cdCAgICAgICAgICAgIDB4NjAwMDAwMDA6IDB4ODAwMjAyLFxuXHQgICAgICAgICAgICAweDcwMDAwMDAwOiAweDgwMDAwMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAwMDogMHgyMDIsXG5cdCAgICAgICAgICAgIDB4OTAwMDAwMDA6IDB4ODAwMjAwLFxuXHQgICAgICAgICAgICAweGEwMDAwMDAwOiAweDgyMDAsXG5cdCAgICAgICAgICAgIDB4YjAwMDAwMDA6IDB4ODA4MDAwLFxuXHQgICAgICAgICAgICAweGMwMDAwMDAwOiAweDgwMDIsXG5cdCAgICAgICAgICAgIDB4ZDAwMDAwMDA6IDB4ODAwMDAyLFxuXHQgICAgICAgICAgICAweGUwMDAwMDAwOiAweDAsXG5cdCAgICAgICAgICAgIDB4ZjAwMDAwMDA6IDB4ODIwMixcblx0ICAgICAgICAgICAgMHg4MDAwMDAwOiAweDAsXG5cdCAgICAgICAgICAgIDB4MTgwMDAwMDA6IDB4ODA4MjAyLFxuXHQgICAgICAgICAgICAweDI4MDAwMDAwOiAweDgyMDIsXG5cdCAgICAgICAgICAgIDB4MzgwMDAwMDA6IDB4ODAwMCxcblx0ICAgICAgICAgICAgMHg0ODAwMDAwMDogMHg4MDgyMDAsXG5cdCAgICAgICAgICAgIDB4NTgwMDAwMDA6IDB4MjAwLFxuXHQgICAgICAgICAgICAweDY4MDAwMDAwOiAweDgwODAwMixcblx0ICAgICAgICAgICAgMHg3ODAwMDAwMDogMHgyLFxuXHQgICAgICAgICAgICAweDg4MDAwMDAwOiAweDgwMDIwMCxcblx0ICAgICAgICAgICAgMHg5ODAwMDAwMDogMHg4MjAwLFxuXHQgICAgICAgICAgICAweGE4MDAwMDAwOiAweDgwODAwMCxcblx0ICAgICAgICAgICAgMHhiODAwMDAwMDogMHg4MDAyMDIsXG5cdCAgICAgICAgICAgIDB4YzgwMDAwMDA6IDB4ODAwMDAyLFxuXHQgICAgICAgICAgICAweGQ4MDAwMDAwOiAweDgwMDIsXG5cdCAgICAgICAgICAgIDB4ZTgwMDAwMDA6IDB4MjAyLFxuXHQgICAgICAgICAgICAweGY4MDAwMDAwOiAweDgwMDAwMCxcblx0ICAgICAgICAgICAgMHgxOiAweDgwMDAsXG5cdCAgICAgICAgICAgIDB4MTAwMDAwMDE6IDB4Mixcblx0ICAgICAgICAgICAgMHgyMDAwMDAwMTogMHg4MDgyMDAsXG5cdCAgICAgICAgICAgIDB4MzAwMDAwMDE6IDB4ODAwMDAwLFxuXHQgICAgICAgICAgICAweDQwMDAwMDAxOiAweDgwODAwMixcblx0ICAgICAgICAgICAgMHg1MDAwMDAwMTogMHg4MjAwLFxuXHQgICAgICAgICAgICAweDYwMDAwMDAxOiAweDIwMCxcblx0ICAgICAgICAgICAgMHg3MDAwMDAwMTogMHg4MDAyMDIsXG5cdCAgICAgICAgICAgIDB4ODAwMDAwMDE6IDB4ODA4MjAyLFxuXHQgICAgICAgICAgICAweDkwMDAwMDAxOiAweDgwODAwMCxcblx0ICAgICAgICAgICAgMHhhMDAwMDAwMTogMHg4MDAwMDIsXG5cdCAgICAgICAgICAgIDB4YjAwMDAwMDE6IDB4ODIwMixcblx0ICAgICAgICAgICAgMHhjMDAwMDAwMTogMHgyMDIsXG5cdCAgICAgICAgICAgIDB4ZDAwMDAwMDE6IDB4ODAwMjAwLFxuXHQgICAgICAgICAgICAweGUwMDAwMDAxOiAweDgwMDIsXG5cdCAgICAgICAgICAgIDB4ZjAwMDAwMDE6IDB4MCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAxOiAweDgwODIwMixcblx0ICAgICAgICAgICAgMHgxODAwMDAwMTogMHg4MDgwMDAsXG5cdCAgICAgICAgICAgIDB4MjgwMDAwMDE6IDB4ODAwMDAwLFxuXHQgICAgICAgICAgICAweDM4MDAwMDAxOiAweDIwMCxcblx0ICAgICAgICAgICAgMHg0ODAwMDAwMTogMHg4MDAwLFxuXHQgICAgICAgICAgICAweDU4MDAwMDAxOiAweDgwMDAwMixcblx0ICAgICAgICAgICAgMHg2ODAwMDAwMTogMHgyLFxuXHQgICAgICAgICAgICAweDc4MDAwMDAxOiAweDgyMDIsXG5cdCAgICAgICAgICAgIDB4ODgwMDAwMDE6IDB4ODAwMixcblx0ICAgICAgICAgICAgMHg5ODAwMDAwMTogMHg4MDAyMDIsXG5cdCAgICAgICAgICAgIDB4YTgwMDAwMDE6IDB4MjAyLFxuXHQgICAgICAgICAgICAweGI4MDAwMDAxOiAweDgwODIwMCxcblx0ICAgICAgICAgICAgMHhjODAwMDAwMTogMHg4MDAyMDAsXG5cdCAgICAgICAgICAgIDB4ZDgwMDAwMDE6IDB4MCxcblx0ICAgICAgICAgICAgMHhlODAwMDAwMTogMHg4MjAwLFxuXHQgICAgICAgICAgICAweGY4MDAwMDAxOiAweDgwODAwMlxuXHQgICAgICAgIH0sXG5cdCAgICAgICAge1xuXHQgICAgICAgICAgICAweDA6IDB4NDAwODQwMTAsXG5cdCAgICAgICAgICAgIDB4MTAwMDAwMDogMHg0MDAwLFxuXHQgICAgICAgICAgICAweDIwMDAwMDA6IDB4ODAwMDAsXG5cdCAgICAgICAgICAgIDB4MzAwMDAwMDogMHg0MDA4MDAxMCxcblx0ICAgICAgICAgICAgMHg0MDAwMDAwOiAweDQwMDAwMDEwLFxuXHQgICAgICAgICAgICAweDUwMDAwMDA6IDB4NDAwODQwMDAsXG5cdCAgICAgICAgICAgIDB4NjAwMDAwMDogMHg0MDAwNDAwMCxcblx0ICAgICAgICAgICAgMHg3MDAwMDAwOiAweDEwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDA6IDB4ODQwMDAsXG5cdCAgICAgICAgICAgIDB4OTAwMDAwMDogMHg0MDAwNDAxMCxcblx0ICAgICAgICAgICAgMHhhMDAwMDAwOiAweDQwMDAwMDAwLFxuXHQgICAgICAgICAgICAweGIwMDAwMDA6IDB4ODQwMTAsXG5cdCAgICAgICAgICAgIDB4YzAwMDAwMDogMHg4MDAxMCxcblx0ICAgICAgICAgICAgMHhkMDAwMDAwOiAweDAsXG5cdCAgICAgICAgICAgIDB4ZTAwMDAwMDogMHg0MDEwLFxuXHQgICAgICAgICAgICAweGYwMDAwMDA6IDB4NDAwODAwMDAsXG5cdCAgICAgICAgICAgIDB4ODAwMDAwOiAweDQwMDA0MDAwLFxuXHQgICAgICAgICAgICAweDE4MDAwMDA6IDB4ODQwMTAsXG5cdCAgICAgICAgICAgIDB4MjgwMDAwMDogMHgxMCxcblx0ICAgICAgICAgICAgMHgzODAwMDAwOiAweDQwMDA0MDEwLFxuXHQgICAgICAgICAgICAweDQ4MDAwMDA6IDB4NDAwODQwMTAsXG5cdCAgICAgICAgICAgIDB4NTgwMDAwMDogMHg0MDAwMDAwMCxcblx0ICAgICAgICAgICAgMHg2ODAwMDAwOiAweDgwMDAwLFxuXHQgICAgICAgICAgICAweDc4MDAwMDA6IDB4NDAwODAwMTAsXG5cdCAgICAgICAgICAgIDB4ODgwMDAwMDogMHg4MDAxMCxcblx0ICAgICAgICAgICAgMHg5ODAwMDAwOiAweDAsXG5cdCAgICAgICAgICAgIDB4YTgwMDAwMDogMHg0MDAwLFxuXHQgICAgICAgICAgICAweGI4MDAwMDA6IDB4NDAwODAwMDAsXG5cdCAgICAgICAgICAgIDB4YzgwMDAwMDogMHg0MDAwMDAxMCxcblx0ICAgICAgICAgICAgMHhkODAwMDAwOiAweDg0MDAwLFxuXHQgICAgICAgICAgICAweGU4MDAwMDA6IDB4NDAwODQwMDAsXG5cdCAgICAgICAgICAgIDB4ZjgwMDAwMDogMHg0MDEwLFxuXHQgICAgICAgICAgICAweDEwMDAwMDAwOiAweDAsXG5cdCAgICAgICAgICAgIDB4MTEwMDAwMDA6IDB4NDAwODAwMTAsXG5cdCAgICAgICAgICAgIDB4MTIwMDAwMDA6IDB4NDAwMDQwMTAsXG5cdCAgICAgICAgICAgIDB4MTMwMDAwMDA6IDB4NDAwODQwMDAsXG5cdCAgICAgICAgICAgIDB4MTQwMDAwMDA6IDB4NDAwODAwMDAsXG5cdCAgICAgICAgICAgIDB4MTUwMDAwMDA6IDB4MTAsXG5cdCAgICAgICAgICAgIDB4MTYwMDAwMDA6IDB4ODQwMTAsXG5cdCAgICAgICAgICAgIDB4MTcwMDAwMDA6IDB4NDAwMCxcblx0ICAgICAgICAgICAgMHgxODAwMDAwMDogMHg0MDEwLFxuXHQgICAgICAgICAgICAweDE5MDAwMDAwOiAweDgwMDAwLFxuXHQgICAgICAgICAgICAweDFhMDAwMDAwOiAweDgwMDEwLFxuXHQgICAgICAgICAgICAweDFiMDAwMDAwOiAweDQwMDAwMDEwLFxuXHQgICAgICAgICAgICAweDFjMDAwMDAwOiAweDg0MDAwLFxuXHQgICAgICAgICAgICAweDFkMDAwMDAwOiAweDQwMDA0MDAwLFxuXHQgICAgICAgICAgICAweDFlMDAwMDAwOiAweDQwMDAwMDAwLFxuXHQgICAgICAgICAgICAweDFmMDAwMDAwOiAweDQwMDg0MDEwLFxuXHQgICAgICAgICAgICAweDEwODAwMDAwOiAweDg0MDEwLFxuXHQgICAgICAgICAgICAweDExODAwMDAwOiAweDgwMDAwLFxuXHQgICAgICAgICAgICAweDEyODAwMDAwOiAweDQwMDgwMDAwLFxuXHQgICAgICAgICAgICAweDEzODAwMDAwOiAweDQwMDAsXG5cdCAgICAgICAgICAgIDB4MTQ4MDAwMDA6IDB4NDAwMDQwMDAsXG5cdCAgICAgICAgICAgIDB4MTU4MDAwMDA6IDB4NDAwODQwMTAsXG5cdCAgICAgICAgICAgIDB4MTY4MDAwMDA6IDB4MTAsXG5cdCAgICAgICAgICAgIDB4MTc4MDAwMDA6IDB4NDAwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4MTg4MDAwMDA6IDB4NDAwODQwMDAsXG5cdCAgICAgICAgICAgIDB4MTk4MDAwMDA6IDB4NDAwMDAwMTAsXG5cdCAgICAgICAgICAgIDB4MWE4MDAwMDA6IDB4NDAwMDQwMTAsXG5cdCAgICAgICAgICAgIDB4MWI4MDAwMDA6IDB4ODAwMTAsXG5cdCAgICAgICAgICAgIDB4MWM4MDAwMDA6IDB4MCxcblx0ICAgICAgICAgICAgMHgxZDgwMDAwMDogMHg0MDEwLFxuXHQgICAgICAgICAgICAweDFlODAwMDAwOiAweDQwMDgwMDEwLFxuXHQgICAgICAgICAgICAweDFmODAwMDAwOiAweDg0MDAwXG5cdCAgICAgICAgfSxcblx0ICAgICAgICB7XG5cdCAgICAgICAgICAgIDB4MDogMHgxMDQsXG5cdCAgICAgICAgICAgIDB4MTAwMDAwOiAweDAsXG5cdCAgICAgICAgICAgIDB4MjAwMDAwOiAweDQwMDAxMDAsXG5cdCAgICAgICAgICAgIDB4MzAwMDAwOiAweDEwMTA0LFxuXHQgICAgICAgICAgICAweDQwMDAwMDogMHgxMDAwNCxcblx0ICAgICAgICAgICAgMHg1MDAwMDA6IDB4NDAwMDAwNCxcblx0ICAgICAgICAgICAgMHg2MDAwMDA6IDB4NDAxMDEwNCxcblx0ICAgICAgICAgICAgMHg3MDAwMDA6IDB4NDAxMDAwMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDA6IDB4NDAwMDAwMCxcblx0ICAgICAgICAgICAgMHg5MDAwMDA6IDB4NDAxMDEwMCxcblx0ICAgICAgICAgICAgMHhhMDAwMDA6IDB4MTAxMDAsXG5cdCAgICAgICAgICAgIDB4YjAwMDAwOiAweDQwMTAwMDQsXG5cdCAgICAgICAgICAgIDB4YzAwMDAwOiAweDQwMDAxMDQsXG5cdCAgICAgICAgICAgIDB4ZDAwMDAwOiAweDEwMDAwLFxuXHQgICAgICAgICAgICAweGUwMDAwMDogMHg0LFxuXHQgICAgICAgICAgICAweGYwMDAwMDogMHgxMDAsXG5cdCAgICAgICAgICAgIDB4ODAwMDA6IDB4NDAxMDEwMCxcblx0ICAgICAgICAgICAgMHgxODAwMDA6IDB4NDAxMDAwNCxcblx0ICAgICAgICAgICAgMHgyODAwMDA6IDB4MCxcblx0ICAgICAgICAgICAgMHgzODAwMDA6IDB4NDAwMDEwMCxcblx0ICAgICAgICAgICAgMHg0ODAwMDA6IDB4NDAwMDAwNCxcblx0ICAgICAgICAgICAgMHg1ODAwMDA6IDB4MTAwMDAsXG5cdCAgICAgICAgICAgIDB4NjgwMDAwOiAweDEwMDA0LFxuXHQgICAgICAgICAgICAweDc4MDAwMDogMHgxMDQsXG5cdCAgICAgICAgICAgIDB4ODgwMDAwOiAweDQsXG5cdCAgICAgICAgICAgIDB4OTgwMDAwOiAweDEwMCxcblx0ICAgICAgICAgICAgMHhhODAwMDA6IDB4NDAxMDAwMCxcblx0ICAgICAgICAgICAgMHhiODAwMDA6IDB4MTAxMDQsXG5cdCAgICAgICAgICAgIDB4YzgwMDAwOiAweDEwMTAwLFxuXHQgICAgICAgICAgICAweGQ4MDAwMDogMHg0MDAwMTA0LFxuXHQgICAgICAgICAgICAweGU4MDAwMDogMHg0MDEwMTA0LFxuXHQgICAgICAgICAgICAweGY4MDAwMDogMHg0MDAwMDAwLFxuXHQgICAgICAgICAgICAweDEwMDAwMDA6IDB4NDAxMDEwMCxcblx0ICAgICAgICAgICAgMHgxMTAwMDAwOiAweDEwMDA0LFxuXHQgICAgICAgICAgICAweDEyMDAwMDA6IDB4MTAwMDAsXG5cdCAgICAgICAgICAgIDB4MTMwMDAwMDogMHg0MDAwMTAwLFxuXHQgICAgICAgICAgICAweDE0MDAwMDA6IDB4MTAwLFxuXHQgICAgICAgICAgICAweDE1MDAwMDA6IDB4NDAxMDEwNCxcblx0ICAgICAgICAgICAgMHgxNjAwMDAwOiAweDQwMDAwMDQsXG5cdCAgICAgICAgICAgIDB4MTcwMDAwMDogMHgwLFxuXHQgICAgICAgICAgICAweDE4MDAwMDA6IDB4NDAwMDEwNCxcblx0ICAgICAgICAgICAgMHgxOTAwMDAwOiAweDQwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4MWEwMDAwMDogMHg0LFxuXHQgICAgICAgICAgICAweDFiMDAwMDA6IDB4MTAxMDAsXG5cdCAgICAgICAgICAgIDB4MWMwMDAwMDogMHg0MDEwMDAwLFxuXHQgICAgICAgICAgICAweDFkMDAwMDA6IDB4MTA0LFxuXHQgICAgICAgICAgICAweDFlMDAwMDA6IDB4MTAxMDQsXG5cdCAgICAgICAgICAgIDB4MWYwMDAwMDogMHg0MDEwMDA0LFxuXHQgICAgICAgICAgICAweDEwODAwMDA6IDB4NDAwMDAwMCxcblx0ICAgICAgICAgICAgMHgxMTgwMDAwOiAweDEwNCxcblx0ICAgICAgICAgICAgMHgxMjgwMDAwOiAweDQwMTAxMDAsXG5cdCAgICAgICAgICAgIDB4MTM4MDAwMDogMHgwLFxuXHQgICAgICAgICAgICAweDE0ODAwMDA6IDB4MTAwMDQsXG5cdCAgICAgICAgICAgIDB4MTU4MDAwMDogMHg0MDAwMTAwLFxuXHQgICAgICAgICAgICAweDE2ODAwMDA6IDB4MTAwLFxuXHQgICAgICAgICAgICAweDE3ODAwMDA6IDB4NDAxMDAwNCxcblx0ICAgICAgICAgICAgMHgxODgwMDAwOiAweDEwMDAwLFxuXHQgICAgICAgICAgICAweDE5ODAwMDA6IDB4NDAxMDEwNCxcblx0ICAgICAgICAgICAgMHgxYTgwMDAwOiAweDEwMTA0LFxuXHQgICAgICAgICAgICAweDFiODAwMDA6IDB4NDAwMDAwNCxcblx0ICAgICAgICAgICAgMHgxYzgwMDAwOiAweDQwMDAxMDQsXG5cdCAgICAgICAgICAgIDB4MWQ4MDAwMDogMHg0MDEwMDAwLFxuXHQgICAgICAgICAgICAweDFlODAwMDA6IDB4NCxcblx0ICAgICAgICAgICAgMHgxZjgwMDAwOiAweDEwMTAwXG5cdCAgICAgICAgfSxcblx0ICAgICAgICB7XG5cdCAgICAgICAgICAgIDB4MDogMHg4MDQwMTAwMCxcblx0ICAgICAgICAgICAgMHgxMDAwMDogMHg4MDAwMTA0MCxcblx0ICAgICAgICAgICAgMHgyMDAwMDogMHg0MDEwNDAsXG5cdCAgICAgICAgICAgIDB4MzAwMDA6IDB4ODA0MDAwMDAsXG5cdCAgICAgICAgICAgIDB4NDAwMDA6IDB4MCxcblx0ICAgICAgICAgICAgMHg1MDAwMDogMHg0MDEwMDAsXG5cdCAgICAgICAgICAgIDB4NjAwMDA6IDB4ODAwMDAwNDAsXG5cdCAgICAgICAgICAgIDB4NzAwMDA6IDB4NDAwMDQwLFxuXHQgICAgICAgICAgICAweDgwMDAwOiAweDgwMDAwMDAwLFxuXHQgICAgICAgICAgICAweDkwMDAwOiAweDQwMDAwMCxcblx0ICAgICAgICAgICAgMHhhMDAwMDogMHg0MCxcblx0ICAgICAgICAgICAgMHhiMDAwMDogMHg4MDAwMTAwMCxcblx0ICAgICAgICAgICAgMHhjMDAwMDogMHg4MDQwMDA0MCxcblx0ICAgICAgICAgICAgMHhkMDAwMDogMHgxMDQwLFxuXHQgICAgICAgICAgICAweGUwMDAwOiAweDEwMDAsXG5cdCAgICAgICAgICAgIDB4ZjAwMDA6IDB4ODA0MDEwNDAsXG5cdCAgICAgICAgICAgIDB4ODAwMDogMHg4MDAwMTA0MCxcblx0ICAgICAgICAgICAgMHgxODAwMDogMHg0MCxcblx0ICAgICAgICAgICAgMHgyODAwMDogMHg4MDQwMDA0MCxcblx0ICAgICAgICAgICAgMHgzODAwMDogMHg4MDAwMTAwMCxcblx0ICAgICAgICAgICAgMHg0ODAwMDogMHg0MDEwMDAsXG5cdCAgICAgICAgICAgIDB4NTgwMDA6IDB4ODA0MDEwNDAsXG5cdCAgICAgICAgICAgIDB4NjgwMDA6IDB4MCxcblx0ICAgICAgICAgICAgMHg3ODAwMDogMHg4MDQwMDAwMCxcblx0ICAgICAgICAgICAgMHg4ODAwMDogMHgxMDAwLFxuXHQgICAgICAgICAgICAweDk4MDAwOiAweDgwNDAxMDAwLFxuXHQgICAgICAgICAgICAweGE4MDAwOiAweDQwMDAwMCxcblx0ICAgICAgICAgICAgMHhiODAwMDogMHgxMDQwLFxuXHQgICAgICAgICAgICAweGM4MDAwOiAweDgwMDAwMDAwLFxuXHQgICAgICAgICAgICAweGQ4MDAwOiAweDQwMDA0MCxcblx0ICAgICAgICAgICAgMHhlODAwMDogMHg0MDEwNDAsXG5cdCAgICAgICAgICAgIDB4ZjgwMDA6IDB4ODAwMDAwNDAsXG5cdCAgICAgICAgICAgIDB4MTAwMDAwOiAweDQwMDA0MCxcblx0ICAgICAgICAgICAgMHgxMTAwMDA6IDB4NDAxMDAwLFxuXHQgICAgICAgICAgICAweDEyMDAwMDogMHg4MDAwMDA0MCxcblx0ICAgICAgICAgICAgMHgxMzAwMDA6IDB4MCxcblx0ICAgICAgICAgICAgMHgxNDAwMDA6IDB4MTA0MCxcblx0ICAgICAgICAgICAgMHgxNTAwMDA6IDB4ODA0MDAwNDAsXG5cdCAgICAgICAgICAgIDB4MTYwMDAwOiAweDgwNDAxMDAwLFxuXHQgICAgICAgICAgICAweDE3MDAwMDogMHg4MDAwMTA0MCxcblx0ICAgICAgICAgICAgMHgxODAwMDA6IDB4ODA0MDEwNDAsXG5cdCAgICAgICAgICAgIDB4MTkwMDAwOiAweDgwMDAwMDAwLFxuXHQgICAgICAgICAgICAweDFhMDAwMDogMHg4MDQwMDAwMCxcblx0ICAgICAgICAgICAgMHgxYjAwMDA6IDB4NDAxMDQwLFxuXHQgICAgICAgICAgICAweDFjMDAwMDogMHg4MDAwMTAwMCxcblx0ICAgICAgICAgICAgMHgxZDAwMDA6IDB4NDAwMDAwLFxuXHQgICAgICAgICAgICAweDFlMDAwMDogMHg0MCxcblx0ICAgICAgICAgICAgMHgxZjAwMDA6IDB4MTAwMCxcblx0ICAgICAgICAgICAgMHgxMDgwMDA6IDB4ODA0MDAwMDAsXG5cdCAgICAgICAgICAgIDB4MTE4MDAwOiAweDgwNDAxMDQwLFxuXHQgICAgICAgICAgICAweDEyODAwMDogMHgwLFxuXHQgICAgICAgICAgICAweDEzODAwMDogMHg0MDEwMDAsXG5cdCAgICAgICAgICAgIDB4MTQ4MDAwOiAweDQwMDA0MCxcblx0ICAgICAgICAgICAgMHgxNTgwMDA6IDB4ODAwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4MTY4MDAwOiAweDgwMDAxMDQwLFxuXHQgICAgICAgICAgICAweDE3ODAwMDogMHg0MCxcblx0ICAgICAgICAgICAgMHgxODgwMDA6IDB4ODAwMDAwNDAsXG5cdCAgICAgICAgICAgIDB4MTk4MDAwOiAweDEwMDAsXG5cdCAgICAgICAgICAgIDB4MWE4MDAwOiAweDgwMDAxMDAwLFxuXHQgICAgICAgICAgICAweDFiODAwMDogMHg4MDQwMDA0MCxcblx0ICAgICAgICAgICAgMHgxYzgwMDA6IDB4MTA0MCxcblx0ICAgICAgICAgICAgMHgxZDgwMDA6IDB4ODA0MDEwMDAsXG5cdCAgICAgICAgICAgIDB4MWU4MDAwOiAweDQwMDAwMCxcblx0ICAgICAgICAgICAgMHgxZjgwMDA6IDB4NDAxMDQwXG5cdCAgICAgICAgfSxcblx0ICAgICAgICB7XG5cdCAgICAgICAgICAgIDB4MDogMHg4MCxcblx0ICAgICAgICAgICAgMHgxMDAwOiAweDEwNDAwMDAsXG5cdCAgICAgICAgICAgIDB4MjAwMDogMHg0MDAwMCxcblx0ICAgICAgICAgICAgMHgzMDAwOiAweDIwMDAwMDAwLFxuXHQgICAgICAgICAgICAweDQwMDA6IDB4MjAwNDAwODAsXG5cdCAgICAgICAgICAgIDB4NTAwMDogMHgxMDAwMDgwLFxuXHQgICAgICAgICAgICAweDYwMDA6IDB4MjEwMDAwODAsXG5cdCAgICAgICAgICAgIDB4NzAwMDogMHg0MDA4MCxcblx0ICAgICAgICAgICAgMHg4MDAwOiAweDEwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4OTAwMDogMHgyMDA0MDAwMCxcblx0ICAgICAgICAgICAgMHhhMDAwOiAweDIwMDAwMDgwLFxuXHQgICAgICAgICAgICAweGIwMDA6IDB4MjEwNDAwODAsXG5cdCAgICAgICAgICAgIDB4YzAwMDogMHgyMTA0MDAwMCxcblx0ICAgICAgICAgICAgMHhkMDAwOiAweDAsXG5cdCAgICAgICAgICAgIDB4ZTAwMDogMHgxMDQwMDgwLFxuXHQgICAgICAgICAgICAweGYwMDA6IDB4MjEwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4ODAwOiAweDEwNDAwODAsXG5cdCAgICAgICAgICAgIDB4MTgwMDogMHgyMTAwMDA4MCxcblx0ICAgICAgICAgICAgMHgyODAwOiAweDgwLFxuXHQgICAgICAgICAgICAweDM4MDA6IDB4MTA0MDAwMCxcblx0ICAgICAgICAgICAgMHg0ODAwOiAweDQwMDAwLFxuXHQgICAgICAgICAgICAweDU4MDA6IDB4MjAwNDAwODAsXG5cdCAgICAgICAgICAgIDB4NjgwMDogMHgyMTA0MDAwMCxcblx0ICAgICAgICAgICAgMHg3ODAwOiAweDIwMDAwMDAwLFxuXHQgICAgICAgICAgICAweDg4MDA6IDB4MjAwNDAwMDAsXG5cdCAgICAgICAgICAgIDB4OTgwMDogMHgwLFxuXHQgICAgICAgICAgICAweGE4MDA6IDB4MjEwNDAwODAsXG5cdCAgICAgICAgICAgIDB4YjgwMDogMHgxMDAwMDgwLFxuXHQgICAgICAgICAgICAweGM4MDA6IDB4MjAwMDAwODAsXG5cdCAgICAgICAgICAgIDB4ZDgwMDogMHgyMTAwMDAwMCxcblx0ICAgICAgICAgICAgMHhlODAwOiAweDEwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4ZjgwMDogMHg0MDA4MCxcblx0ICAgICAgICAgICAgMHgxMDAwMDogMHg0MDAwMCxcblx0ICAgICAgICAgICAgMHgxMTAwMDogMHg4MCxcblx0ICAgICAgICAgICAgMHgxMjAwMDogMHgyMDAwMDAwMCxcblx0ICAgICAgICAgICAgMHgxMzAwMDogMHgyMTAwMDA4MCxcblx0ICAgICAgICAgICAgMHgxNDAwMDogMHgxMDAwMDgwLFxuXHQgICAgICAgICAgICAweDE1MDAwOiAweDIxMDQwMDAwLFxuXHQgICAgICAgICAgICAweDE2MDAwOiAweDIwMDQwMDgwLFxuXHQgICAgICAgICAgICAweDE3MDAwOiAweDEwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4MTgwMDA6IDB4MjEwNDAwODAsXG5cdCAgICAgICAgICAgIDB4MTkwMDA6IDB4MjEwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4MWEwMDA6IDB4MTA0MDAwMCxcblx0ICAgICAgICAgICAgMHgxYjAwMDogMHgyMDA0MDAwMCxcblx0ICAgICAgICAgICAgMHgxYzAwMDogMHg0MDA4MCxcblx0ICAgICAgICAgICAgMHgxZDAwMDogMHgyMDAwMDA4MCxcblx0ICAgICAgICAgICAgMHgxZTAwMDogMHgwLFxuXHQgICAgICAgICAgICAweDFmMDAwOiAweDEwNDAwODAsXG5cdCAgICAgICAgICAgIDB4MTA4MDA6IDB4MjEwMDAwODAsXG5cdCAgICAgICAgICAgIDB4MTE4MDA6IDB4MTAwMDAwMCxcblx0ICAgICAgICAgICAgMHgxMjgwMDogMHgxMDQwMDAwLFxuXHQgICAgICAgICAgICAweDEzODAwOiAweDIwMDQwMDgwLFxuXHQgICAgICAgICAgICAweDE0ODAwOiAweDIwMDAwMDAwLFxuXHQgICAgICAgICAgICAweDE1ODAwOiAweDEwNDAwODAsXG5cdCAgICAgICAgICAgIDB4MTY4MDA6IDB4ODAsXG5cdCAgICAgICAgICAgIDB4MTc4MDA6IDB4MjEwNDAwMDAsXG5cdCAgICAgICAgICAgIDB4MTg4MDA6IDB4NDAwODAsXG5cdCAgICAgICAgICAgIDB4MTk4MDA6IDB4MjEwNDAwODAsXG5cdCAgICAgICAgICAgIDB4MWE4MDA6IDB4MCxcblx0ICAgICAgICAgICAgMHgxYjgwMDogMHgyMTAwMDAwMCxcblx0ICAgICAgICAgICAgMHgxYzgwMDogMHgxMDAwMDgwLFxuXHQgICAgICAgICAgICAweDFkODAwOiAweDQwMDAwLFxuXHQgICAgICAgICAgICAweDFlODAwOiAweDIwMDQwMDAwLFxuXHQgICAgICAgICAgICAweDFmODAwOiAweDIwMDAwMDgwXG5cdCAgICAgICAgfSxcblx0ICAgICAgICB7XG5cdCAgICAgICAgICAgIDB4MDogMHgxMDAwMDAwOCxcblx0ICAgICAgICAgICAgMHgxMDA6IDB4MjAwMCxcblx0ICAgICAgICAgICAgMHgyMDA6IDB4MTAyMDAwMDAsXG5cdCAgICAgICAgICAgIDB4MzAwOiAweDEwMjAyMDA4LFxuXHQgICAgICAgICAgICAweDQwMDogMHgxMDAwMjAwMCxcblx0ICAgICAgICAgICAgMHg1MDA6IDB4MjAwMDAwLFxuXHQgICAgICAgICAgICAweDYwMDogMHgyMDAwMDgsXG5cdCAgICAgICAgICAgIDB4NzAwOiAweDEwMDAwMDAwLFxuXHQgICAgICAgICAgICAweDgwMDogMHgwLFxuXHQgICAgICAgICAgICAweDkwMDogMHgxMDAwMjAwOCxcblx0ICAgICAgICAgICAgMHhhMDA6IDB4MjAyMDAwLFxuXHQgICAgICAgICAgICAweGIwMDogMHg4LFxuXHQgICAgICAgICAgICAweGMwMDogMHgxMDIwMDAwOCxcblx0ICAgICAgICAgICAgMHhkMDA6IDB4MjAyMDA4LFxuXHQgICAgICAgICAgICAweGUwMDogMHgyMDA4LFxuXHQgICAgICAgICAgICAweGYwMDogMHgxMDIwMjAwMCxcblx0ICAgICAgICAgICAgMHg4MDogMHgxMDIwMDAwMCxcblx0ICAgICAgICAgICAgMHgxODA6IDB4MTAyMDIwMDgsXG5cdCAgICAgICAgICAgIDB4MjgwOiAweDgsXG5cdCAgICAgICAgICAgIDB4MzgwOiAweDIwMDAwMCxcblx0ICAgICAgICAgICAgMHg0ODA6IDB4MjAyMDA4LFxuXHQgICAgICAgICAgICAweDU4MDogMHgxMDAwMDAwOCxcblx0ICAgICAgICAgICAgMHg2ODA6IDB4MTAwMDIwMDAsXG5cdCAgICAgICAgICAgIDB4NzgwOiAweDIwMDgsXG5cdCAgICAgICAgICAgIDB4ODgwOiAweDIwMDAwOCxcblx0ICAgICAgICAgICAgMHg5ODA6IDB4MjAwMCxcblx0ICAgICAgICAgICAgMHhhODA6IDB4MTAwMDIwMDgsXG5cdCAgICAgICAgICAgIDB4YjgwOiAweDEwMjAwMDA4LFxuXHQgICAgICAgICAgICAweGM4MDogMHgwLFxuXHQgICAgICAgICAgICAweGQ4MDogMHgxMDIwMjAwMCxcblx0ICAgICAgICAgICAgMHhlODA6IDB4MjAyMDAwLFxuXHQgICAgICAgICAgICAweGY4MDogMHgxMDAwMDAwMCxcblx0ICAgICAgICAgICAgMHgxMDAwOiAweDEwMDAyMDAwLFxuXHQgICAgICAgICAgICAweDExMDA6IDB4MTAyMDAwMDgsXG5cdCAgICAgICAgICAgIDB4MTIwMDogMHgxMDIwMjAwOCxcblx0ICAgICAgICAgICAgMHgxMzAwOiAweDIwMDgsXG5cdCAgICAgICAgICAgIDB4MTQwMDogMHgyMDAwMDAsXG5cdCAgICAgICAgICAgIDB4MTUwMDogMHgxMDAwMDAwMCxcblx0ICAgICAgICAgICAgMHgxNjAwOiAweDEwMDAwMDA4LFxuXHQgICAgICAgICAgICAweDE3MDA6IDB4MjAyMDAwLFxuXHQgICAgICAgICAgICAweDE4MDA6IDB4MjAyMDA4LFxuXHQgICAgICAgICAgICAweDE5MDA6IDB4MCxcblx0ICAgICAgICAgICAgMHgxYTAwOiAweDgsXG5cdCAgICAgICAgICAgIDB4MWIwMDogMHgxMDIwMDAwMCxcblx0ICAgICAgICAgICAgMHgxYzAwOiAweDIwMDAsXG5cdCAgICAgICAgICAgIDB4MWQwMDogMHgxMDAwMjAwOCxcblx0ICAgICAgICAgICAgMHgxZTAwOiAweDEwMjAyMDAwLFxuXHQgICAgICAgICAgICAweDFmMDA6IDB4MjAwMDA4LFxuXHQgICAgICAgICAgICAweDEwODA6IDB4OCxcblx0ICAgICAgICAgICAgMHgxMTgwOiAweDIwMjAwMCxcblx0ICAgICAgICAgICAgMHgxMjgwOiAweDIwMDAwMCxcblx0ICAgICAgICAgICAgMHgxMzgwOiAweDEwMDAwMDA4LFxuXHQgICAgICAgICAgICAweDE0ODA6IDB4MTAwMDIwMDAsXG5cdCAgICAgICAgICAgIDB4MTU4MDogMHgyMDA4LFxuXHQgICAgICAgICAgICAweDE2ODA6IDB4MTAyMDIwMDgsXG5cdCAgICAgICAgICAgIDB4MTc4MDogMHgxMDIwMDAwMCxcblx0ICAgICAgICAgICAgMHgxODgwOiAweDEwMjAyMDAwLFxuXHQgICAgICAgICAgICAweDE5ODA6IDB4MTAyMDAwMDgsXG5cdCAgICAgICAgICAgIDB4MWE4MDogMHgyMDAwLFxuXHQgICAgICAgICAgICAweDFiODA6IDB4MjAyMDA4LFxuXHQgICAgICAgICAgICAweDFjODA6IDB4MjAwMDA4LFxuXHQgICAgICAgICAgICAweDFkODA6IDB4MCxcblx0ICAgICAgICAgICAgMHgxZTgwOiAweDEwMDAwMDAwLFxuXHQgICAgICAgICAgICAweDFmODA6IDB4MTAwMDIwMDhcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHtcblx0ICAgICAgICAgICAgMHgwOiAweDEwMDAwMCxcblx0ICAgICAgICAgICAgMHgxMDogMHgyMDAwNDAxLFxuXHQgICAgICAgICAgICAweDIwOiAweDQwMCxcblx0ICAgICAgICAgICAgMHgzMDogMHgxMDA0MDEsXG5cdCAgICAgICAgICAgIDB4NDA6IDB4MjEwMDQwMSxcblx0ICAgICAgICAgICAgMHg1MDogMHgwLFxuXHQgICAgICAgICAgICAweDYwOiAweDEsXG5cdCAgICAgICAgICAgIDB4NzA6IDB4MjEwMDAwMSxcblx0ICAgICAgICAgICAgMHg4MDogMHgyMDAwNDAwLFxuXHQgICAgICAgICAgICAweDkwOiAweDEwMDAwMSxcblx0ICAgICAgICAgICAgMHhhMDogMHgyMDAwMDAxLFxuXHQgICAgICAgICAgICAweGIwOiAweDIxMDA0MDAsXG5cdCAgICAgICAgICAgIDB4YzA6IDB4MjEwMDAwMCxcblx0ICAgICAgICAgICAgMHhkMDogMHg0MDEsXG5cdCAgICAgICAgICAgIDB4ZTA6IDB4MTAwNDAwLFxuXHQgICAgICAgICAgICAweGYwOiAweDIwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4ODogMHgyMTAwMDAxLFxuXHQgICAgICAgICAgICAweDE4OiAweDAsXG5cdCAgICAgICAgICAgIDB4Mjg6IDB4MjAwMDQwMSxcblx0ICAgICAgICAgICAgMHgzODogMHgyMTAwNDAwLFxuXHQgICAgICAgICAgICAweDQ4OiAweDEwMDAwMCxcblx0ICAgICAgICAgICAgMHg1ODogMHgyMDAwMDAxLFxuXHQgICAgICAgICAgICAweDY4OiAweDIwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4Nzg6IDB4NDAxLFxuXHQgICAgICAgICAgICAweDg4OiAweDEwMDQwMSxcblx0ICAgICAgICAgICAgMHg5ODogMHgyMDAwNDAwLFxuXHQgICAgICAgICAgICAweGE4OiAweDIxMDAwMDAsXG5cdCAgICAgICAgICAgIDB4Yjg6IDB4MTAwMDAxLFxuXHQgICAgICAgICAgICAweGM4OiAweDQwMCxcblx0ICAgICAgICAgICAgMHhkODogMHgyMTAwNDAxLFxuXHQgICAgICAgICAgICAweGU4OiAweDEsXG5cdCAgICAgICAgICAgIDB4Zjg6IDB4MTAwNDAwLFxuXHQgICAgICAgICAgICAweDEwMDogMHgyMDAwMDAwLFxuXHQgICAgICAgICAgICAweDExMDogMHgxMDAwMDAsXG5cdCAgICAgICAgICAgIDB4MTIwOiAweDIwMDA0MDEsXG5cdCAgICAgICAgICAgIDB4MTMwOiAweDIxMDAwMDEsXG5cdCAgICAgICAgICAgIDB4MTQwOiAweDEwMDAwMSxcblx0ICAgICAgICAgICAgMHgxNTA6IDB4MjAwMDQwMCxcblx0ICAgICAgICAgICAgMHgxNjA6IDB4MjEwMDQwMCxcblx0ICAgICAgICAgICAgMHgxNzA6IDB4MTAwNDAxLFxuXHQgICAgICAgICAgICAweDE4MDogMHg0MDEsXG5cdCAgICAgICAgICAgIDB4MTkwOiAweDIxMDA0MDEsXG5cdCAgICAgICAgICAgIDB4MWEwOiAweDEwMDQwMCxcblx0ICAgICAgICAgICAgMHgxYjA6IDB4MSxcblx0ICAgICAgICAgICAgMHgxYzA6IDB4MCxcblx0ICAgICAgICAgICAgMHgxZDA6IDB4MjEwMDAwMCxcblx0ICAgICAgICAgICAgMHgxZTA6IDB4MjAwMDAwMSxcblx0ICAgICAgICAgICAgMHgxZjA6IDB4NDAwLFxuXHQgICAgICAgICAgICAweDEwODogMHgxMDA0MDAsXG5cdCAgICAgICAgICAgIDB4MTE4OiAweDIwMDA0MDEsXG5cdCAgICAgICAgICAgIDB4MTI4OiAweDIxMDAwMDEsXG5cdCAgICAgICAgICAgIDB4MTM4OiAweDEsXG5cdCAgICAgICAgICAgIDB4MTQ4OiAweDIwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4MTU4OiAweDEwMDAwMCxcblx0ICAgICAgICAgICAgMHgxNjg6IDB4NDAxLFxuXHQgICAgICAgICAgICAweDE3ODogMHgyMTAwNDAwLFxuXHQgICAgICAgICAgICAweDE4ODogMHgyMDAwMDAxLFxuXHQgICAgICAgICAgICAweDE5ODogMHgyMTAwMDAwLFxuXHQgICAgICAgICAgICAweDFhODogMHgwLFxuXHQgICAgICAgICAgICAweDFiODogMHgyMTAwNDAxLFxuXHQgICAgICAgICAgICAweDFjODogMHgxMDA0MDEsXG5cdCAgICAgICAgICAgIDB4MWQ4OiAweDQwMCxcblx0ICAgICAgICAgICAgMHgxZTg6IDB4MjAwMDQwMCxcblx0ICAgICAgICAgICAgMHgxZjg6IDB4MTAwMDAxXG5cdCAgICAgICAgfSxcblx0ICAgICAgICB7XG5cdCAgICAgICAgICAgIDB4MDogMHg4MDAwODIwLFxuXHQgICAgICAgICAgICAweDE6IDB4MjAwMDAsXG5cdCAgICAgICAgICAgIDB4MjogMHg4MDAwMDAwLFxuXHQgICAgICAgICAgICAweDM6IDB4MjAsXG5cdCAgICAgICAgICAgIDB4NDogMHgyMDAyMCxcblx0ICAgICAgICAgICAgMHg1OiAweDgwMjA4MjAsXG5cdCAgICAgICAgICAgIDB4NjogMHg4MDIwODAwLFxuXHQgICAgICAgICAgICAweDc6IDB4ODAwLFxuXHQgICAgICAgICAgICAweDg6IDB4ODAyMDAwMCxcblx0ICAgICAgICAgICAgMHg5OiAweDgwMDA4MDAsXG5cdCAgICAgICAgICAgIDB4YTogMHgyMDgwMCxcblx0ICAgICAgICAgICAgMHhiOiAweDgwMjAwMjAsXG5cdCAgICAgICAgICAgIDB4YzogMHg4MjAsXG5cdCAgICAgICAgICAgIDB4ZDogMHgwLFxuXHQgICAgICAgICAgICAweGU6IDB4ODAwMDAyMCxcblx0ICAgICAgICAgICAgMHhmOiAweDIwODIwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDAwOiAweDgwMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAwMTogMHg4MDIwODIwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDAyOiAweDgwMDA4MjAsXG5cdCAgICAgICAgICAgIDB4ODAwMDAwMDM6IDB4ODAwMDAwMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAwNDogMHg4MDIwMDAwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDA1OiAweDIwODAwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDA2OiAweDIwODIwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDA3OiAweDIwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDA4OiAweDgwMDAwMjAsXG5cdCAgICAgICAgICAgIDB4ODAwMDAwMDk6IDB4ODIwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDBhOiAweDIwMDIwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDBiOiAweDgwMjA4MDAsXG5cdCAgICAgICAgICAgIDB4ODAwMDAwMGM6IDB4MCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAwZDogMHg4MDIwMDIwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDBlOiAweDgwMDA4MDAsXG5cdCAgICAgICAgICAgIDB4ODAwMDAwMGY6IDB4MjAwMDAsXG5cdCAgICAgICAgICAgIDB4MTA6IDB4MjA4MjAsXG5cdCAgICAgICAgICAgIDB4MTE6IDB4ODAyMDgwMCxcblx0ICAgICAgICAgICAgMHgxMjogMHgyMCxcblx0ICAgICAgICAgICAgMHgxMzogMHg4MDAsXG5cdCAgICAgICAgICAgIDB4MTQ6IDB4ODAwMDgwMCxcblx0ICAgICAgICAgICAgMHgxNTogMHg4MDAwMDIwLFxuXHQgICAgICAgICAgICAweDE2OiAweDgwMjAwMjAsXG5cdCAgICAgICAgICAgIDB4MTc6IDB4MjAwMDAsXG5cdCAgICAgICAgICAgIDB4MTg6IDB4MCxcblx0ICAgICAgICAgICAgMHgxOTogMHgyMDAyMCxcblx0ICAgICAgICAgICAgMHgxYTogMHg4MDIwMDAwLFxuXHQgICAgICAgICAgICAweDFiOiAweDgwMDA4MjAsXG5cdCAgICAgICAgICAgIDB4MWM6IDB4ODAyMDgyMCxcblx0ICAgICAgICAgICAgMHgxZDogMHgyMDgwMCxcblx0ICAgICAgICAgICAgMHgxZTogMHg4MjAsXG5cdCAgICAgICAgICAgIDB4MWY6IDB4ODAwMDAwMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAxMDogMHgyMDAwMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAxMTogMHg4MDAsXG5cdCAgICAgICAgICAgIDB4ODAwMDAwMTI6IDB4ODAyMDAyMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAxMzogMHgyMDgyMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAxNDogMHgyMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAxNTogMHg4MDIwMDAwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDE2OiAweDgwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4ODAwMDAwMTc6IDB4ODAwMDgyMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAxODogMHg4MDIwODIwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDE5OiAweDgwMDAwMjAsXG5cdCAgICAgICAgICAgIDB4ODAwMDAwMWE6IDB4ODAwMDgwMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAxYjogMHgwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDFjOiAweDIwODAwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDFkOiAweDgyMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAxZTogMHgyMDAyMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAxZjogMHg4MDIwODAwXG5cdCAgICAgICAgfVxuXHQgICAgXTtcblxuXHQgICAgLy8gTWFza3MgdGhhdCBzZWxlY3QgdGhlIFNCT1ggaW5wdXRcblx0ICAgIHZhciBTQk9YX01BU0sgPSBbXG5cdCAgICAgICAgMHhmODAwMDAwMSwgMHgxZjgwMDAwMCwgMHgwMWY4MDAwMCwgMHgwMDFmODAwMCxcblx0ICAgICAgICAweDAwMDFmODAwLCAweDAwMDAxZjgwLCAweDAwMDAwMWY4LCAweDgwMDAwMDFmXG5cdCAgICBdO1xuXG5cdCAgICAvKipcblx0ICAgICAqIERFUyBibG9jayBjaXBoZXIgYWxnb3JpdGhtLlxuXHQgICAgICovXG5cdCAgICB2YXIgREVTID0gQ19hbGdvLkRFUyA9IEJsb2NrQ2lwaGVyLmV4dGVuZCh7XG5cdCAgICAgICAgX2RvUmVzZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBrZXkgPSB0aGlzLl9rZXk7XG5cdCAgICAgICAgICAgIHZhciBrZXlXb3JkcyA9IGtleS53b3JkcztcblxuXHQgICAgICAgICAgICAvLyBTZWxlY3QgNTYgYml0cyBhY2NvcmRpbmcgdG8gUEMxXG5cdCAgICAgICAgICAgIHZhciBrZXlCaXRzID0gW107XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNTY7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgdmFyIGtleUJpdFBvcyA9IFBDMVtpXSAtIDE7XG5cdCAgICAgICAgICAgICAgICBrZXlCaXRzW2ldID0gKGtleVdvcmRzW2tleUJpdFBvcyA+Pj4gNV0gPj4+ICgzMSAtIGtleUJpdFBvcyAlIDMyKSkgJiAxO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gQXNzZW1ibGUgMTYgc3Via2V5c1xuXHQgICAgICAgICAgICB2YXIgc3ViS2V5cyA9IHRoaXMuX3N1YktleXMgPSBbXTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgblN1YktleSA9IDA7IG5TdWJLZXkgPCAxNjsgblN1YktleSsrKSB7XG5cdCAgICAgICAgICAgICAgICAvLyBDcmVhdGUgc3Via2V5XG5cdCAgICAgICAgICAgICAgICB2YXIgc3ViS2V5ID0gc3ViS2V5c1tuU3ViS2V5XSA9IFtdO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBTaG9ydGN1dFxuXHQgICAgICAgICAgICAgICAgdmFyIGJpdFNoaWZ0ID0gQklUX1NISUZUU1tuU3ViS2V5XTtcblxuXHQgICAgICAgICAgICAgICAgLy8gU2VsZWN0IDQ4IGJpdHMgYWNjb3JkaW5nIHRvIFBDMlxuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAyNDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgLy8gU2VsZWN0IGZyb20gdGhlIGxlZnQgMjgga2V5IGJpdHNcblx0ICAgICAgICAgICAgICAgICAgICBzdWJLZXlbKGkgLyA2KSB8IDBdIHw9IGtleUJpdHNbKChQQzJbaV0gLSAxKSArIGJpdFNoaWZ0KSAlIDI4XSA8PCAoMzEgLSBpICUgNik7XG5cblx0ICAgICAgICAgICAgICAgICAgICAvLyBTZWxlY3QgZnJvbSB0aGUgcmlnaHQgMjgga2V5IGJpdHNcblx0ICAgICAgICAgICAgICAgICAgICBzdWJLZXlbNCArICgoaSAvIDYpIHwgMCldIHw9IGtleUJpdHNbMjggKyAoKChQQzJbaSArIDI0XSAtIDEpICsgYml0U2hpZnQpICUgMjgpXSA8PCAoMzEgLSBpICUgNik7XG5cdCAgICAgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgICAgIC8vIFNpbmNlIGVhY2ggc3Via2V5IGlzIGFwcGxpZWQgdG8gYW4gZXhwYW5kZWQgMzItYml0IGlucHV0LFxuXHQgICAgICAgICAgICAgICAgLy8gdGhlIHN1YmtleSBjYW4gYmUgYnJva2VuIGludG8gOCB2YWx1ZXMgc2NhbGVkIHRvIDMyLWJpdHMsXG5cdCAgICAgICAgICAgICAgICAvLyB3aGljaCBhbGxvd3MgdGhlIGtleSB0byBiZSB1c2VkIHdpdGhvdXQgZXhwYW5zaW9uXG5cdCAgICAgICAgICAgICAgICBzdWJLZXlbMF0gPSAoc3ViS2V5WzBdIDw8IDEpIHwgKHN1YktleVswXSA+Pj4gMzEpO1xuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCA3OyBpKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICBzdWJLZXlbaV0gPSBzdWJLZXlbaV0gPj4+ICgoaSAtIDEpICogNCArIDMpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgc3ViS2V5WzddID0gKHN1YktleVs3XSA8PCA1KSB8IChzdWJLZXlbN10gPj4+IDI3KTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIENvbXB1dGUgaW52ZXJzZSBzdWJrZXlzXG5cdCAgICAgICAgICAgIHZhciBpbnZTdWJLZXlzID0gdGhpcy5faW52U3ViS2V5cyA9IFtdO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIGludlN1YktleXNbaV0gPSBzdWJLZXlzWzE1IC0gaV07XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgZW5jcnlwdEJsb2NrOiBmdW5jdGlvbiAoTSwgb2Zmc2V0KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2RvQ3J5cHRCbG9jayhNLCBvZmZzZXQsIHRoaXMuX3N1YktleXMpO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBkZWNyeXB0QmxvY2s6IGZ1bmN0aW9uIChNLCBvZmZzZXQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fZG9DcnlwdEJsb2NrKE0sIG9mZnNldCwgdGhpcy5faW52U3ViS2V5cyk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIF9kb0NyeXB0QmxvY2s6IGZ1bmN0aW9uIChNLCBvZmZzZXQsIHN1YktleXMpIHtcblx0ICAgICAgICAgICAgLy8gR2V0IGlucHV0XG5cdCAgICAgICAgICAgIHRoaXMuX2xCbG9jayA9IE1bb2Zmc2V0XTtcblx0ICAgICAgICAgICAgdGhpcy5fckJsb2NrID0gTVtvZmZzZXQgKyAxXTtcblxuXHQgICAgICAgICAgICAvLyBJbml0aWFsIHBlcm11dGF0aW9uXG5cdCAgICAgICAgICAgIGV4Y2hhbmdlTFIuY2FsbCh0aGlzLCA0LCAgMHgwZjBmMGYwZik7XG5cdCAgICAgICAgICAgIGV4Y2hhbmdlTFIuY2FsbCh0aGlzLCAxNiwgMHgwMDAwZmZmZik7XG5cdCAgICAgICAgICAgIGV4Y2hhbmdlUkwuY2FsbCh0aGlzLCAyLCAgMHgzMzMzMzMzMyk7XG5cdCAgICAgICAgICAgIGV4Y2hhbmdlUkwuY2FsbCh0aGlzLCA4LCAgMHgwMGZmMDBmZik7XG5cdCAgICAgICAgICAgIGV4Y2hhbmdlTFIuY2FsbCh0aGlzLCAxLCAgMHg1NTU1NTU1NSk7XG5cblx0ICAgICAgICAgICAgLy8gUm91bmRzXG5cdCAgICAgICAgICAgIGZvciAodmFyIHJvdW5kID0gMDsgcm91bmQgPCAxNjsgcm91bmQrKykge1xuXHQgICAgICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgICAgICB2YXIgc3ViS2V5ID0gc3ViS2V5c1tyb3VuZF07XG5cdCAgICAgICAgICAgICAgICB2YXIgbEJsb2NrID0gdGhpcy5fbEJsb2NrO1xuXHQgICAgICAgICAgICAgICAgdmFyIHJCbG9jayA9IHRoaXMuX3JCbG9jaztcblxuXHQgICAgICAgICAgICAgICAgLy8gRmVpc3RlbCBmdW5jdGlvblxuXHQgICAgICAgICAgICAgICAgdmFyIGYgPSAwO1xuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA4OyBpKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICBmIHw9IFNCT1hfUFtpXVsoKHJCbG9jayBeIHN1YktleVtpXSkgJiBTQk9YX01BU0tbaV0pID4+PiAwXTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIHRoaXMuX2xCbG9jayA9IHJCbG9jaztcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3JCbG9jayA9IGxCbG9jayBeIGY7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBVbmRvIHN3YXAgZnJvbSBsYXN0IHJvdW5kXG5cdCAgICAgICAgICAgIHZhciB0ID0gdGhpcy5fbEJsb2NrO1xuXHQgICAgICAgICAgICB0aGlzLl9sQmxvY2sgPSB0aGlzLl9yQmxvY2s7XG5cdCAgICAgICAgICAgIHRoaXMuX3JCbG9jayA9IHQ7XG5cblx0ICAgICAgICAgICAgLy8gRmluYWwgcGVybXV0YXRpb25cblx0ICAgICAgICAgICAgZXhjaGFuZ2VMUi5jYWxsKHRoaXMsIDEsICAweDU1NTU1NTU1KTtcblx0ICAgICAgICAgICAgZXhjaGFuZ2VSTC5jYWxsKHRoaXMsIDgsICAweDAwZmYwMGZmKTtcblx0ICAgICAgICAgICAgZXhjaGFuZ2VSTC5jYWxsKHRoaXMsIDIsICAweDMzMzMzMzMzKTtcblx0ICAgICAgICAgICAgZXhjaGFuZ2VMUi5jYWxsKHRoaXMsIDE2LCAweDAwMDBmZmZmKTtcblx0ICAgICAgICAgICAgZXhjaGFuZ2VMUi5jYWxsKHRoaXMsIDQsICAweDBmMGYwZjBmKTtcblxuXHQgICAgICAgICAgICAvLyBTZXQgb3V0cHV0XG5cdCAgICAgICAgICAgIE1bb2Zmc2V0XSA9IHRoaXMuX2xCbG9jaztcblx0ICAgICAgICAgICAgTVtvZmZzZXQgKyAxXSA9IHRoaXMuX3JCbG9jaztcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAga2V5U2l6ZTogNjQvMzIsXG5cblx0ICAgICAgICBpdlNpemU6IDY0LzMyLFxuXG5cdCAgICAgICAgYmxvY2tTaXplOiA2NC8zMlxuXHQgICAgfSk7XG5cblx0ICAgIC8vIFN3YXAgYml0cyBhY3Jvc3MgdGhlIGxlZnQgYW5kIHJpZ2h0IHdvcmRzXG5cdCAgICBmdW5jdGlvbiBleGNoYW5nZUxSKG9mZnNldCwgbWFzaykge1xuXHQgICAgICAgIHZhciB0ID0gKCh0aGlzLl9sQmxvY2sgPj4+IG9mZnNldCkgXiB0aGlzLl9yQmxvY2spICYgbWFzaztcblx0ICAgICAgICB0aGlzLl9yQmxvY2sgXj0gdDtcblx0ICAgICAgICB0aGlzLl9sQmxvY2sgXj0gdCA8PCBvZmZzZXQ7XG5cdCAgICB9XG5cblx0ICAgIGZ1bmN0aW9uIGV4Y2hhbmdlUkwob2Zmc2V0LCBtYXNrKSB7XG5cdCAgICAgICAgdmFyIHQgPSAoKHRoaXMuX3JCbG9jayA+Pj4gb2Zmc2V0KSBeIHRoaXMuX2xCbG9jaykgJiBtYXNrO1xuXHQgICAgICAgIHRoaXMuX2xCbG9jayBePSB0O1xuXHQgICAgICAgIHRoaXMuX3JCbG9jayBePSB0IDw8IG9mZnNldDtcblx0ICAgIH1cblxuXHQgICAgLyoqXG5cdCAgICAgKiBTaG9ydGN1dCBmdW5jdGlvbnMgdG8gdGhlIGNpcGhlcidzIG9iamVjdCBpbnRlcmZhY2UuXG5cdCAgICAgKlxuXHQgICAgICogQGV4YW1wbGVcblx0ICAgICAqXG5cdCAgICAgKiAgICAgdmFyIGNpcGhlcnRleHQgPSBDcnlwdG9KUy5ERVMuZW5jcnlwdChtZXNzYWdlLCBrZXksIGNmZyk7XG5cdCAgICAgKiAgICAgdmFyIHBsYWludGV4dCAgPSBDcnlwdG9KUy5ERVMuZGVjcnlwdChjaXBoZXJ0ZXh0LCBrZXksIGNmZyk7XG5cdCAgICAgKi9cblx0ICAgIEMuREVTID0gQmxvY2tDaXBoZXIuX2NyZWF0ZUhlbHBlcihERVMpO1xuXG5cdCAgICAvKipcblx0ICAgICAqIFRyaXBsZS1ERVMgYmxvY2sgY2lwaGVyIGFsZ29yaXRobS5cblx0ICAgICAqL1xuXHQgICAgdmFyIFRyaXBsZURFUyA9IENfYWxnby5UcmlwbGVERVMgPSBCbG9ja0NpcGhlci5leHRlbmQoe1xuXHQgICAgICAgIF9kb1Jlc2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIga2V5ID0gdGhpcy5fa2V5O1xuXHQgICAgICAgICAgICB2YXIga2V5V29yZHMgPSBrZXkud29yZHM7XG5cdCAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUga2V5IGxlbmd0aCBpcyB2YWxpZCAoNjQsIDEyOCBvciA+PSAxOTIgYml0KVxuXHQgICAgICAgICAgICBpZiAoa2V5V29yZHMubGVuZ3RoICE9PSAyICYmIGtleVdvcmRzLmxlbmd0aCAhPT0gNCAmJiBrZXlXb3Jkcy5sZW5ndGggPCA2KSB7XG5cdCAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQga2V5IGxlbmd0aCAtIDNERVMgcmVxdWlyZXMgdGhlIGtleSBsZW5ndGggdG8gYmUgNjQsIDEyOCwgMTkyIG9yID4xOTIuJyk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBFeHRlbmQgdGhlIGtleSBhY2NvcmRpbmcgdG8gdGhlIGtleWluZyBvcHRpb25zIGRlZmluZWQgaW4gM0RFUyBzdGFuZGFyZFxuXHQgICAgICAgICAgICB2YXIga2V5MSA9IGtleVdvcmRzLnNsaWNlKDAsIDIpO1xuXHQgICAgICAgICAgICB2YXIga2V5MiA9IGtleVdvcmRzLmxlbmd0aCA8IDQgPyBrZXlXb3Jkcy5zbGljZSgwLCAyKSA6IGtleVdvcmRzLnNsaWNlKDIsIDQpO1xuXHQgICAgICAgICAgICB2YXIga2V5MyA9IGtleVdvcmRzLmxlbmd0aCA8IDYgPyBrZXlXb3Jkcy5zbGljZSgwLCAyKSA6IGtleVdvcmRzLnNsaWNlKDQsIDYpO1xuXG5cdCAgICAgICAgICAgIC8vIENyZWF0ZSBERVMgaW5zdGFuY2VzXG5cdCAgICAgICAgICAgIHRoaXMuX2RlczEgPSBERVMuY3JlYXRlRW5jcnlwdG9yKFdvcmRBcnJheS5jcmVhdGUoa2V5MSkpO1xuXHQgICAgICAgICAgICB0aGlzLl9kZXMyID0gREVTLmNyZWF0ZUVuY3J5cHRvcihXb3JkQXJyYXkuY3JlYXRlKGtleTIpKTtcblx0ICAgICAgICAgICAgdGhpcy5fZGVzMyA9IERFUy5jcmVhdGVFbmNyeXB0b3IoV29yZEFycmF5LmNyZWF0ZShrZXkzKSk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIGVuY3J5cHRCbG9jazogZnVuY3Rpb24gKE0sIG9mZnNldCkge1xuXHQgICAgICAgICAgICB0aGlzLl9kZXMxLmVuY3J5cHRCbG9jayhNLCBvZmZzZXQpO1xuXHQgICAgICAgICAgICB0aGlzLl9kZXMyLmRlY3J5cHRCbG9jayhNLCBvZmZzZXQpO1xuXHQgICAgICAgICAgICB0aGlzLl9kZXMzLmVuY3J5cHRCbG9jayhNLCBvZmZzZXQpO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBkZWNyeXB0QmxvY2s6IGZ1bmN0aW9uIChNLCBvZmZzZXQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fZGVzMy5kZWNyeXB0QmxvY2soTSwgb2Zmc2V0KTtcblx0ICAgICAgICAgICAgdGhpcy5fZGVzMi5lbmNyeXB0QmxvY2soTSwgb2Zmc2V0KTtcblx0ICAgICAgICAgICAgdGhpcy5fZGVzMS5kZWNyeXB0QmxvY2soTSwgb2Zmc2V0KTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAga2V5U2l6ZTogMTkyLzMyLFxuXG5cdCAgICAgICAgaXZTaXplOiA2NC8zMixcblxuXHQgICAgICAgIGJsb2NrU2l6ZTogNjQvMzJcblx0ICAgIH0pO1xuXG5cdCAgICAvKipcblx0ICAgICAqIFNob3J0Y3V0IGZ1bmN0aW9ucyB0byB0aGUgY2lwaGVyJ3Mgb2JqZWN0IGludGVyZmFjZS5cblx0ICAgICAqXG5cdCAgICAgKiBAZXhhbXBsZVxuXHQgICAgICpcblx0ICAgICAqICAgICB2YXIgY2lwaGVydGV4dCA9IENyeXB0b0pTLlRyaXBsZURFUy5lbmNyeXB0KG1lc3NhZ2UsIGtleSwgY2ZnKTtcblx0ICAgICAqICAgICB2YXIgcGxhaW50ZXh0ICA9IENyeXB0b0pTLlRyaXBsZURFUy5kZWNyeXB0KGNpcGhlcnRleHQsIGtleSwgY2ZnKTtcblx0ICAgICAqL1xuXHQgICAgQy5UcmlwbGVERVMgPSBCbG9ja0NpcGhlci5fY3JlYXRlSGVscGVyKFRyaXBsZURFUyk7XG5cdH0oKSk7XG5cblxuXHQoZnVuY3Rpb24gKCkge1xuXHQgICAgLy8gU2hvcnRjdXRzXG5cdCAgICB2YXIgQyA9IENyeXB0b0pTO1xuXHQgICAgdmFyIENfbGliID0gQy5saWI7XG5cdCAgICB2YXIgU3RyZWFtQ2lwaGVyID0gQ19saWIuU3RyZWFtQ2lwaGVyO1xuXHQgICAgdmFyIENfYWxnbyA9IEMuYWxnbztcblxuXHQgICAgLyoqXG5cdCAgICAgKiBSQzQgc3RyZWFtIGNpcGhlciBhbGdvcml0aG0uXG5cdCAgICAgKi9cblx0ICAgIHZhciBSQzQgPSBDX2FsZ28uUkM0ID0gU3RyZWFtQ2lwaGVyLmV4dGVuZCh7XG5cdCAgICAgICAgX2RvUmVzZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBrZXkgPSB0aGlzLl9rZXk7XG5cdCAgICAgICAgICAgIHZhciBrZXlXb3JkcyA9IGtleS53b3Jkcztcblx0ICAgICAgICAgICAgdmFyIGtleVNpZ0J5dGVzID0ga2V5LnNpZ0J5dGVzO1xuXG5cdCAgICAgICAgICAgIC8vIEluaXQgc2JveFxuXHQgICAgICAgICAgICB2YXIgUyA9IHRoaXMuX1MgPSBbXTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAyNTY7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgU1tpXSA9IGk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBLZXkgc2V0dXBcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGogPSAwOyBpIDwgMjU2OyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHZhciBrZXlCeXRlSW5kZXggPSBpICUga2V5U2lnQnl0ZXM7XG5cdCAgICAgICAgICAgICAgICB2YXIga2V5Qnl0ZSA9IChrZXlXb3Jkc1trZXlCeXRlSW5kZXggPj4+IDJdID4+PiAoMjQgLSAoa2V5Qnl0ZUluZGV4ICUgNCkgKiA4KSkgJiAweGZmO1xuXG5cdCAgICAgICAgICAgICAgICBqID0gKGogKyBTW2ldICsga2V5Qnl0ZSkgJSAyNTY7XG5cblx0ICAgICAgICAgICAgICAgIC8vIFN3YXBcblx0ICAgICAgICAgICAgICAgIHZhciB0ID0gU1tpXTtcblx0ICAgICAgICAgICAgICAgIFNbaV0gPSBTW2pdO1xuXHQgICAgICAgICAgICAgICAgU1tqXSA9IHQ7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBDb3VudGVyc1xuXHQgICAgICAgICAgICB0aGlzLl9pID0gdGhpcy5faiA9IDA7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIF9kb1Byb2Nlc3NCbG9jazogZnVuY3Rpb24gKE0sIG9mZnNldCkge1xuXHQgICAgICAgICAgICBNW29mZnNldF0gXj0gZ2VuZXJhdGVLZXlzdHJlYW1Xb3JkLmNhbGwodGhpcyk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIGtleVNpemU6IDI1Ni8zMixcblxuXHQgICAgICAgIGl2U2l6ZTogMFxuXHQgICAgfSk7XG5cblx0ICAgIGZ1bmN0aW9uIGdlbmVyYXRlS2V5c3RyZWFtV29yZCgpIHtcblx0ICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICB2YXIgUyA9IHRoaXMuX1M7XG5cdCAgICAgICAgdmFyIGkgPSB0aGlzLl9pO1xuXHQgICAgICAgIHZhciBqID0gdGhpcy5fajtcblxuXHQgICAgICAgIC8vIEdlbmVyYXRlIGtleXN0cmVhbSB3b3JkXG5cdCAgICAgICAgdmFyIGtleXN0cmVhbVdvcmQgPSAwO1xuXHQgICAgICAgIGZvciAodmFyIG4gPSAwOyBuIDwgNDsgbisrKSB7XG5cdCAgICAgICAgICAgIGkgPSAoaSArIDEpICUgMjU2O1xuXHQgICAgICAgICAgICBqID0gKGogKyBTW2ldKSAlIDI1NjtcblxuXHQgICAgICAgICAgICAvLyBTd2FwXG5cdCAgICAgICAgICAgIHZhciB0ID0gU1tpXTtcblx0ICAgICAgICAgICAgU1tpXSA9IFNbal07XG5cdCAgICAgICAgICAgIFNbal0gPSB0O1xuXG5cdCAgICAgICAgICAgIGtleXN0cmVhbVdvcmQgfD0gU1soU1tpXSArIFNbal0pICUgMjU2XSA8PCAoMjQgLSBuICogOCk7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgLy8gVXBkYXRlIGNvdW50ZXJzXG5cdCAgICAgICAgdGhpcy5faSA9IGk7XG5cdCAgICAgICAgdGhpcy5faiA9IGo7XG5cblx0ICAgICAgICByZXR1cm4ga2V5c3RyZWFtV29yZDtcblx0ICAgIH1cblxuXHQgICAgLyoqXG5cdCAgICAgKiBTaG9ydGN1dCBmdW5jdGlvbnMgdG8gdGhlIGNpcGhlcidzIG9iamVjdCBpbnRlcmZhY2UuXG5cdCAgICAgKlxuXHQgICAgICogQGV4YW1wbGVcblx0ICAgICAqXG5cdCAgICAgKiAgICAgdmFyIGNpcGhlcnRleHQgPSBDcnlwdG9KUy5SQzQuZW5jcnlwdChtZXNzYWdlLCBrZXksIGNmZyk7XG5cdCAgICAgKiAgICAgdmFyIHBsYWludGV4dCAgPSBDcnlwdG9KUy5SQzQuZGVjcnlwdChjaXBoZXJ0ZXh0LCBrZXksIGNmZyk7XG5cdCAgICAgKi9cblx0ICAgIEMuUkM0ID0gU3RyZWFtQ2lwaGVyLl9jcmVhdGVIZWxwZXIoUkM0KTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBNb2RpZmllZCBSQzQgc3RyZWFtIGNpcGhlciBhbGdvcml0aG0uXG5cdCAgICAgKi9cblx0ICAgIHZhciBSQzREcm9wID0gQ19hbGdvLlJDNERyb3AgPSBSQzQuZXh0ZW5kKHtcblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb25maWd1cmF0aW9uIG9wdGlvbnMuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcHJvcGVydHkge251bWJlcn0gZHJvcCBUaGUgbnVtYmVyIG9mIGtleXN0cmVhbSB3b3JkcyB0byBkcm9wLiBEZWZhdWx0IDE5MlxuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGNmZzogUkM0LmNmZy5leHRlbmQoe1xuXHQgICAgICAgICAgICBkcm9wOiAxOTJcblx0ICAgICAgICB9KSxcblxuXHQgICAgICAgIF9kb1Jlc2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIFJDNC5fZG9SZXNldC5jYWxsKHRoaXMpO1xuXG5cdCAgICAgICAgICAgIC8vIERyb3Bcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMuY2ZnLmRyb3A7IGkgPiAwOyBpLS0pIHtcblx0ICAgICAgICAgICAgICAgIGdlbmVyYXRlS2V5c3RyZWFtV29yZC5jYWxsKHRoaXMpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogU2hvcnRjdXQgZnVuY3Rpb25zIHRvIHRoZSBjaXBoZXIncyBvYmplY3QgaW50ZXJmYWNlLlxuXHQgICAgICpcblx0ICAgICAqIEBleGFtcGxlXG5cdCAgICAgKlxuXHQgICAgICogICAgIHZhciBjaXBoZXJ0ZXh0ID0gQ3J5cHRvSlMuUkM0RHJvcC5lbmNyeXB0KG1lc3NhZ2UsIGtleSwgY2ZnKTtcblx0ICAgICAqICAgICB2YXIgcGxhaW50ZXh0ICA9IENyeXB0b0pTLlJDNERyb3AuZGVjcnlwdChjaXBoZXJ0ZXh0LCBrZXksIGNmZyk7XG5cdCAgICAgKi9cblx0ICAgIEMuUkM0RHJvcCA9IFN0cmVhbUNpcGhlci5fY3JlYXRlSGVscGVyKFJDNERyb3ApO1xuXHR9KCkpO1xuXG5cblx0LyoqIEBwcmVzZXJ2ZVxuXHQgKiBDb3VudGVyIGJsb2NrIG1vZGUgY29tcGF0aWJsZSB3aXRoICBEciBCcmlhbiBHbGFkbWFuIGZpbGVlbmMuY1xuXHQgKiBkZXJpdmVkIGZyb20gQ3J5cHRvSlMubW9kZS5DVFJcblx0ICogSmFuIEhydWJ5IGpocnVieS53ZWJAZ21haWwuY29tXG5cdCAqL1xuXHRDcnlwdG9KUy5tb2RlLkNUUkdsYWRtYW4gPSAoZnVuY3Rpb24gKCkge1xuXHQgICAgdmFyIENUUkdsYWRtYW4gPSBDcnlwdG9KUy5saWIuQmxvY2tDaXBoZXJNb2RlLmV4dGVuZCgpO1xuXG5cdFx0ZnVuY3Rpb24gaW5jV29yZCh3b3JkKVxuXHRcdHtcblx0XHRcdGlmICgoKHdvcmQgPj4gMjQpICYgMHhmZikgPT09IDB4ZmYpIHsgLy9vdmVyZmxvd1xuXHRcdFx0dmFyIGIxID0gKHdvcmQgPj4gMTYpJjB4ZmY7XG5cdFx0XHR2YXIgYjIgPSAod29yZCA+PiA4KSYweGZmO1xuXHRcdFx0dmFyIGIzID0gd29yZCAmIDB4ZmY7XG5cblx0XHRcdGlmIChiMSA9PT0gMHhmZikgLy8gb3ZlcmZsb3cgYjFcblx0XHRcdHtcblx0XHRcdGIxID0gMDtcblx0XHRcdGlmIChiMiA9PT0gMHhmZilcblx0XHRcdHtcblx0XHRcdFx0YjIgPSAwO1xuXHRcdFx0XHRpZiAoYjMgPT09IDB4ZmYpXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRiMyA9IDA7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZVxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0KytiMztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0ZWxzZVxuXHRcdFx0e1xuXHRcdFx0XHQrK2IyO1xuXHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0ZWxzZVxuXHRcdFx0e1xuXHRcdFx0KytiMTtcblx0XHRcdH1cblxuXHRcdFx0d29yZCA9IDA7XG5cdFx0XHR3b3JkICs9IChiMSA8PCAxNik7XG5cdFx0XHR3b3JkICs9IChiMiA8PCA4KTtcblx0XHRcdHdvcmQgKz0gYjM7XG5cdFx0XHR9XG5cdFx0XHRlbHNlXG5cdFx0XHR7XG5cdFx0XHR3b3JkICs9ICgweDAxIDw8IDI0KTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB3b3JkO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGluY0NvdW50ZXIoY291bnRlcilcblx0XHR7XG5cdFx0XHRpZiAoKGNvdW50ZXJbMF0gPSBpbmNXb3JkKGNvdW50ZXJbMF0pKSA9PT0gMClcblx0XHRcdHtcblx0XHRcdFx0Ly8gZW5jcl9kYXRhIGluIGZpbGVlbmMuYyBmcm9tICBEciBCcmlhbiBHbGFkbWFuJ3MgY291bnRzIG9ubHkgd2l0aCBEV09SRCBqIDwgOFxuXHRcdFx0XHRjb3VudGVyWzFdID0gaW5jV29yZChjb3VudGVyWzFdKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBjb3VudGVyO1xuXHRcdH1cblxuXHQgICAgdmFyIEVuY3J5cHRvciA9IENUUkdsYWRtYW4uRW5jcnlwdG9yID0gQ1RSR2xhZG1hbi5leHRlbmQoe1xuXHQgICAgICAgIHByb2Nlc3NCbG9jazogZnVuY3Rpb24gKHdvcmRzLCBvZmZzZXQpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBjaXBoZXIgPSB0aGlzLl9jaXBoZXJcblx0ICAgICAgICAgICAgdmFyIGJsb2NrU2l6ZSA9IGNpcGhlci5ibG9ja1NpemU7XG5cdCAgICAgICAgICAgIHZhciBpdiA9IHRoaXMuX2l2O1xuXHQgICAgICAgICAgICB2YXIgY291bnRlciA9IHRoaXMuX2NvdW50ZXI7XG5cblx0ICAgICAgICAgICAgLy8gR2VuZXJhdGUga2V5c3RyZWFtXG5cdCAgICAgICAgICAgIGlmIChpdikge1xuXHQgICAgICAgICAgICAgICAgY291bnRlciA9IHRoaXMuX2NvdW50ZXIgPSBpdi5zbGljZSgwKTtcblxuXHQgICAgICAgICAgICAgICAgLy8gUmVtb3ZlIElWIGZvciBzdWJzZXF1ZW50IGJsb2Nrc1xuXHQgICAgICAgICAgICAgICAgdGhpcy5faXYgPSB1bmRlZmluZWQ7XG5cdCAgICAgICAgICAgIH1cblxuXHRcdFx0XHRpbmNDb3VudGVyKGNvdW50ZXIpO1xuXG5cdFx0XHRcdHZhciBrZXlzdHJlYW0gPSBjb3VudGVyLnNsaWNlKDApO1xuXHQgICAgICAgICAgICBjaXBoZXIuZW5jcnlwdEJsb2NrKGtleXN0cmVhbSwgMCk7XG5cblx0ICAgICAgICAgICAgLy8gRW5jcnlwdFxuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJsb2NrU2l6ZTsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICB3b3Jkc1tvZmZzZXQgKyBpXSBePSBrZXlzdHJlYW1baV07XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblxuXHQgICAgQ1RSR2xhZG1hbi5EZWNyeXB0b3IgPSBFbmNyeXB0b3I7XG5cblx0ICAgIHJldHVybiBDVFJHbGFkbWFuO1xuXHR9KCkpO1xuXG5cblxuXG5cdChmdW5jdGlvbiAoKSB7XG5cdCAgICAvLyBTaG9ydGN1dHNcblx0ICAgIHZhciBDID0gQ3J5cHRvSlM7XG5cdCAgICB2YXIgQ19saWIgPSBDLmxpYjtcblx0ICAgIHZhciBTdHJlYW1DaXBoZXIgPSBDX2xpYi5TdHJlYW1DaXBoZXI7XG5cdCAgICB2YXIgQ19hbGdvID0gQy5hbGdvO1xuXG5cdCAgICAvLyBSZXVzYWJsZSBvYmplY3RzXG5cdCAgICB2YXIgUyAgPSBbXTtcblx0ICAgIHZhciBDXyA9IFtdO1xuXHQgICAgdmFyIEcgID0gW107XG5cblx0ICAgIC8qKlxuXHQgICAgICogUmFiYml0IHN0cmVhbSBjaXBoZXIgYWxnb3JpdGhtXG5cdCAgICAgKi9cblx0ICAgIHZhciBSYWJiaXQgPSBDX2FsZ28uUmFiYml0ID0gU3RyZWFtQ2lwaGVyLmV4dGVuZCh7XG5cdCAgICAgICAgX2RvUmVzZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBLID0gdGhpcy5fa2V5LndvcmRzO1xuXHQgICAgICAgICAgICB2YXIgaXYgPSB0aGlzLmNmZy5pdjtcblxuXHQgICAgICAgICAgICAvLyBTd2FwIGVuZGlhblxuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDQ7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgS1tpXSA9ICgoKEtbaV0gPDwgOCkgIHwgKEtbaV0gPj4+IDI0KSkgJiAweDAwZmYwMGZmKSB8XG5cdCAgICAgICAgICAgICAgICAgICAgICAgKCgoS1tpXSA8PCAyNCkgfCAoS1tpXSA+Pj4gOCkpICAmIDB4ZmYwMGZmMDApO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gR2VuZXJhdGUgaW5pdGlhbCBzdGF0ZSB2YWx1ZXNcblx0ICAgICAgICAgICAgdmFyIFggPSB0aGlzLl9YID0gW1xuXHQgICAgICAgICAgICAgICAgS1swXSwgKEtbM10gPDwgMTYpIHwgKEtbMl0gPj4+IDE2KSxcblx0ICAgICAgICAgICAgICAgIEtbMV0sIChLWzBdIDw8IDE2KSB8IChLWzNdID4+PiAxNiksXG5cdCAgICAgICAgICAgICAgICBLWzJdLCAoS1sxXSA8PCAxNikgfCAoS1swXSA+Pj4gMTYpLFxuXHQgICAgICAgICAgICAgICAgS1szXSwgKEtbMl0gPDwgMTYpIHwgKEtbMV0gPj4+IDE2KVxuXHQgICAgICAgICAgICBdO1xuXG5cdCAgICAgICAgICAgIC8vIEdlbmVyYXRlIGluaXRpYWwgY291bnRlciB2YWx1ZXNcblx0ICAgICAgICAgICAgdmFyIEMgPSB0aGlzLl9DID0gW1xuXHQgICAgICAgICAgICAgICAgKEtbMl0gPDwgMTYpIHwgKEtbMl0gPj4+IDE2KSwgKEtbMF0gJiAweGZmZmYwMDAwKSB8IChLWzFdICYgMHgwMDAwZmZmZiksXG5cdCAgICAgICAgICAgICAgICAoS1szXSA8PCAxNikgfCAoS1szXSA+Pj4gMTYpLCAoS1sxXSAmIDB4ZmZmZjAwMDApIHwgKEtbMl0gJiAweDAwMDBmZmZmKSxcblx0ICAgICAgICAgICAgICAgIChLWzBdIDw8IDE2KSB8IChLWzBdID4+PiAxNiksIChLWzJdICYgMHhmZmZmMDAwMCkgfCAoS1szXSAmIDB4MDAwMGZmZmYpLFxuXHQgICAgICAgICAgICAgICAgKEtbMV0gPDwgMTYpIHwgKEtbMV0gPj4+IDE2KSwgKEtbM10gJiAweGZmZmYwMDAwKSB8IChLWzBdICYgMHgwMDAwZmZmZilcblx0ICAgICAgICAgICAgXTtcblxuXHQgICAgICAgICAgICAvLyBDYXJyeSBiaXRcblx0ICAgICAgICAgICAgdGhpcy5fYiA9IDA7XG5cblx0ICAgICAgICAgICAgLy8gSXRlcmF0ZSB0aGUgc3lzdGVtIGZvdXIgdGltZXNcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA0OyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIG5leHRTdGF0ZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gTW9kaWZ5IHRoZSBjb3VudGVyc1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgQ1tpXSBePSBYWyhpICsgNCkgJiA3XTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIElWIHNldHVwXG5cdCAgICAgICAgICAgIGlmIChpdikge1xuXHQgICAgICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgICAgICB2YXIgSVYgPSBpdi53b3Jkcztcblx0ICAgICAgICAgICAgICAgIHZhciBJVl8wID0gSVZbMF07XG5cdCAgICAgICAgICAgICAgICB2YXIgSVZfMSA9IElWWzFdO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBHZW5lcmF0ZSBmb3VyIHN1YnZlY3RvcnNcblx0ICAgICAgICAgICAgICAgIHZhciBpMCA9ICgoKElWXzAgPDwgOCkgfCAoSVZfMCA+Pj4gMjQpKSAmIDB4MDBmZjAwZmYpIHwgKCgoSVZfMCA8PCAyNCkgfCAoSVZfMCA+Pj4gOCkpICYgMHhmZjAwZmYwMCk7XG5cdCAgICAgICAgICAgICAgICB2YXIgaTIgPSAoKChJVl8xIDw8IDgpIHwgKElWXzEgPj4+IDI0KSkgJiAweDAwZmYwMGZmKSB8ICgoKElWXzEgPDwgMjQpIHwgKElWXzEgPj4+IDgpKSAmIDB4ZmYwMGZmMDApO1xuXHQgICAgICAgICAgICAgICAgdmFyIGkxID0gKGkwID4+PiAxNikgfCAoaTIgJiAweGZmZmYwMDAwKTtcblx0ICAgICAgICAgICAgICAgIHZhciBpMyA9IChpMiA8PCAxNikgIHwgKGkwICYgMHgwMDAwZmZmZik7XG5cblx0ICAgICAgICAgICAgICAgIC8vIE1vZGlmeSBjb3VudGVyIHZhbHVlc1xuXHQgICAgICAgICAgICAgICAgQ1swXSBePSBpMDtcblx0ICAgICAgICAgICAgICAgIENbMV0gXj0gaTE7XG5cdCAgICAgICAgICAgICAgICBDWzJdIF49IGkyO1xuXHQgICAgICAgICAgICAgICAgQ1szXSBePSBpMztcblx0ICAgICAgICAgICAgICAgIENbNF0gXj0gaTA7XG5cdCAgICAgICAgICAgICAgICBDWzVdIF49IGkxO1xuXHQgICAgICAgICAgICAgICAgQ1s2XSBePSBpMjtcblx0ICAgICAgICAgICAgICAgIENbN10gXj0gaTM7XG5cblx0ICAgICAgICAgICAgICAgIC8vIEl0ZXJhdGUgdGhlIHN5c3RlbSBmb3VyIHRpbWVzXG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDQ7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIG5leHRTdGF0ZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIF9kb1Byb2Nlc3NCbG9jazogZnVuY3Rpb24gKE0sIG9mZnNldCkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dFxuXHQgICAgICAgICAgICB2YXIgWCA9IHRoaXMuX1g7XG5cblx0ICAgICAgICAgICAgLy8gSXRlcmF0ZSB0aGUgc3lzdGVtXG5cdCAgICAgICAgICAgIG5leHRTdGF0ZS5jYWxsKHRoaXMpO1xuXG5cdCAgICAgICAgICAgIC8vIEdlbmVyYXRlIGZvdXIga2V5c3RyZWFtIHdvcmRzXG5cdCAgICAgICAgICAgIFNbMF0gPSBYWzBdIF4gKFhbNV0gPj4+IDE2KSBeIChYWzNdIDw8IDE2KTtcblx0ICAgICAgICAgICAgU1sxXSA9IFhbMl0gXiAoWFs3XSA+Pj4gMTYpIF4gKFhbNV0gPDwgMTYpO1xuXHQgICAgICAgICAgICBTWzJdID0gWFs0XSBeIChYWzFdID4+PiAxNikgXiAoWFs3XSA8PCAxNik7XG5cdCAgICAgICAgICAgIFNbM10gPSBYWzZdIF4gKFhbM10gPj4+IDE2KSBeIChYWzFdIDw8IDE2KTtcblxuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDQ7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgLy8gU3dhcCBlbmRpYW5cblx0ICAgICAgICAgICAgICAgIFNbaV0gPSAoKChTW2ldIDw8IDgpICB8IChTW2ldID4+PiAyNCkpICYgMHgwMGZmMDBmZikgfFxuXHQgICAgICAgICAgICAgICAgICAgICAgICgoKFNbaV0gPDwgMjQpIHwgKFNbaV0gPj4+IDgpKSAgJiAweGZmMDBmZjAwKTtcblxuXHQgICAgICAgICAgICAgICAgLy8gRW5jcnlwdFxuXHQgICAgICAgICAgICAgICAgTVtvZmZzZXQgKyBpXSBePSBTW2ldO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIGJsb2NrU2l6ZTogMTI4LzMyLFxuXG5cdCAgICAgICAgaXZTaXplOiA2NC8zMlxuXHQgICAgfSk7XG5cblx0ICAgIGZ1bmN0aW9uIG5leHRTdGF0ZSgpIHtcblx0ICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICB2YXIgWCA9IHRoaXMuX1g7XG5cdCAgICAgICAgdmFyIEMgPSB0aGlzLl9DO1xuXG5cdCAgICAgICAgLy8gU2F2ZSBvbGQgY291bnRlciB2YWx1ZXNcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDg7IGkrKykge1xuXHQgICAgICAgICAgICBDX1tpXSA9IENbaV07XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgLy8gQ2FsY3VsYXRlIG5ldyBjb3VudGVyIHZhbHVlc1xuXHQgICAgICAgIENbMF0gPSAoQ1swXSArIDB4NGQzNGQzNGQgKyB0aGlzLl9iKSB8IDA7XG5cdCAgICAgICAgQ1sxXSA9IChDWzFdICsgMHhkMzRkMzRkMyArICgoQ1swXSA+Pj4gMCkgPCAoQ19bMF0gPj4+IDApID8gMSA6IDApKSB8IDA7XG5cdCAgICAgICAgQ1syXSA9IChDWzJdICsgMHgzNGQzNGQzNCArICgoQ1sxXSA+Pj4gMCkgPCAoQ19bMV0gPj4+IDApID8gMSA6IDApKSB8IDA7XG5cdCAgICAgICAgQ1szXSA9IChDWzNdICsgMHg0ZDM0ZDM0ZCArICgoQ1syXSA+Pj4gMCkgPCAoQ19bMl0gPj4+IDApID8gMSA6IDApKSB8IDA7XG5cdCAgICAgICAgQ1s0XSA9IChDWzRdICsgMHhkMzRkMzRkMyArICgoQ1szXSA+Pj4gMCkgPCAoQ19bM10gPj4+IDApID8gMSA6IDApKSB8IDA7XG5cdCAgICAgICAgQ1s1XSA9IChDWzVdICsgMHgzNGQzNGQzNCArICgoQ1s0XSA+Pj4gMCkgPCAoQ19bNF0gPj4+IDApID8gMSA6IDApKSB8IDA7XG5cdCAgICAgICAgQ1s2XSA9IChDWzZdICsgMHg0ZDM0ZDM0ZCArICgoQ1s1XSA+Pj4gMCkgPCAoQ19bNV0gPj4+IDApID8gMSA6IDApKSB8IDA7XG5cdCAgICAgICAgQ1s3XSA9IChDWzddICsgMHhkMzRkMzRkMyArICgoQ1s2XSA+Pj4gMCkgPCAoQ19bNl0gPj4+IDApID8gMSA6IDApKSB8IDA7XG5cdCAgICAgICAgdGhpcy5fYiA9IChDWzddID4+PiAwKSA8IChDX1s3XSA+Pj4gMCkgPyAxIDogMDtcblxuXHQgICAgICAgIC8vIENhbGN1bGF0ZSB0aGUgZy12YWx1ZXNcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDg7IGkrKykge1xuXHQgICAgICAgICAgICB2YXIgZ3ggPSBYW2ldICsgQ1tpXTtcblxuXHQgICAgICAgICAgICAvLyBDb25zdHJ1Y3QgaGlnaCBhbmQgbG93IGFyZ3VtZW50IGZvciBzcXVhcmluZ1xuXHQgICAgICAgICAgICB2YXIgZ2EgPSBneCAmIDB4ZmZmZjtcblx0ICAgICAgICAgICAgdmFyIGdiID0gZ3ggPj4+IDE2O1xuXG5cdCAgICAgICAgICAgIC8vIENhbGN1bGF0ZSBoaWdoIGFuZCBsb3cgcmVzdWx0IG9mIHNxdWFyaW5nXG5cdCAgICAgICAgICAgIHZhciBnaCA9ICgoKChnYSAqIGdhKSA+Pj4gMTcpICsgZ2EgKiBnYikgPj4+IDE1KSArIGdiICogZ2I7XG5cdCAgICAgICAgICAgIHZhciBnbCA9ICgoKGd4ICYgMHhmZmZmMDAwMCkgKiBneCkgfCAwKSArICgoKGd4ICYgMHgwMDAwZmZmZikgKiBneCkgfCAwKTtcblxuXHQgICAgICAgICAgICAvLyBIaWdoIFhPUiBsb3dcblx0ICAgICAgICAgICAgR1tpXSA9IGdoIF4gZ2w7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgLy8gQ2FsY3VsYXRlIG5ldyBzdGF0ZSB2YWx1ZXNcblx0ICAgICAgICBYWzBdID0gKEdbMF0gKyAoKEdbN10gPDwgMTYpIHwgKEdbN10gPj4+IDE2KSkgKyAoKEdbNl0gPDwgMTYpIHwgKEdbNl0gPj4+IDE2KSkpIHwgMDtcblx0ICAgICAgICBYWzFdID0gKEdbMV0gKyAoKEdbMF0gPDwgOCkgIHwgKEdbMF0gPj4+IDI0KSkgKyBHWzddKSB8IDA7XG5cdCAgICAgICAgWFsyXSA9IChHWzJdICsgKChHWzFdIDw8IDE2KSB8IChHWzFdID4+PiAxNikpICsgKChHWzBdIDw8IDE2KSB8IChHWzBdID4+PiAxNikpKSB8IDA7XG5cdCAgICAgICAgWFszXSA9IChHWzNdICsgKChHWzJdIDw8IDgpICB8IChHWzJdID4+PiAyNCkpICsgR1sxXSkgfCAwO1xuXHQgICAgICAgIFhbNF0gPSAoR1s0XSArICgoR1szXSA8PCAxNikgfCAoR1szXSA+Pj4gMTYpKSArICgoR1syXSA8PCAxNikgfCAoR1syXSA+Pj4gMTYpKSkgfCAwO1xuXHQgICAgICAgIFhbNV0gPSAoR1s1XSArICgoR1s0XSA8PCA4KSAgfCAoR1s0XSA+Pj4gMjQpKSArIEdbM10pIHwgMDtcblx0ICAgICAgICBYWzZdID0gKEdbNl0gKyAoKEdbNV0gPDwgMTYpIHwgKEdbNV0gPj4+IDE2KSkgKyAoKEdbNF0gPDwgMTYpIHwgKEdbNF0gPj4+IDE2KSkpIHwgMDtcblx0ICAgICAgICBYWzddID0gKEdbN10gKyAoKEdbNl0gPDwgOCkgIHwgKEdbNl0gPj4+IDI0KSkgKyBHWzVdKSB8IDA7XG5cdCAgICB9XG5cblx0ICAgIC8qKlxuXHQgICAgICogU2hvcnRjdXQgZnVuY3Rpb25zIHRvIHRoZSBjaXBoZXIncyBvYmplY3QgaW50ZXJmYWNlLlxuXHQgICAgICpcblx0ICAgICAqIEBleGFtcGxlXG5cdCAgICAgKlxuXHQgICAgICogICAgIHZhciBjaXBoZXJ0ZXh0ID0gQ3J5cHRvSlMuUmFiYml0LmVuY3J5cHQobWVzc2FnZSwga2V5LCBjZmcpO1xuXHQgICAgICogICAgIHZhciBwbGFpbnRleHQgID0gQ3J5cHRvSlMuUmFiYml0LmRlY3J5cHQoY2lwaGVydGV4dCwga2V5LCBjZmcpO1xuXHQgICAgICovXG5cdCAgICBDLlJhYmJpdCA9IFN0cmVhbUNpcGhlci5fY3JlYXRlSGVscGVyKFJhYmJpdCk7XG5cdH0oKSk7XG5cblxuXHQvKipcblx0ICogQ291bnRlciBibG9jayBtb2RlLlxuXHQgKi9cblx0Q3J5cHRvSlMubW9kZS5DVFIgPSAoZnVuY3Rpb24gKCkge1xuXHQgICAgdmFyIENUUiA9IENyeXB0b0pTLmxpYi5CbG9ja0NpcGhlck1vZGUuZXh0ZW5kKCk7XG5cblx0ICAgIHZhciBFbmNyeXB0b3IgPSBDVFIuRW5jcnlwdG9yID0gQ1RSLmV4dGVuZCh7XG5cdCAgICAgICAgcHJvY2Vzc0Jsb2NrOiBmdW5jdGlvbiAod29yZHMsIG9mZnNldCkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIGNpcGhlciA9IHRoaXMuX2NpcGhlclxuXHQgICAgICAgICAgICB2YXIgYmxvY2tTaXplID0gY2lwaGVyLmJsb2NrU2l6ZTtcblx0ICAgICAgICAgICAgdmFyIGl2ID0gdGhpcy5faXY7XG5cdCAgICAgICAgICAgIHZhciBjb3VudGVyID0gdGhpcy5fY291bnRlcjtcblxuXHQgICAgICAgICAgICAvLyBHZW5lcmF0ZSBrZXlzdHJlYW1cblx0ICAgICAgICAgICAgaWYgKGl2KSB7XG5cdCAgICAgICAgICAgICAgICBjb3VudGVyID0gdGhpcy5fY291bnRlciA9IGl2LnNsaWNlKDApO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBSZW1vdmUgSVYgZm9yIHN1YnNlcXVlbnQgYmxvY2tzXG5cdCAgICAgICAgICAgICAgICB0aGlzLl9pdiA9IHVuZGVmaW5lZDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB2YXIga2V5c3RyZWFtID0gY291bnRlci5zbGljZSgwKTtcblx0ICAgICAgICAgICAgY2lwaGVyLmVuY3J5cHRCbG9jayhrZXlzdHJlYW0sIDApO1xuXG5cdCAgICAgICAgICAgIC8vIEluY3JlbWVudCBjb3VudGVyXG5cdCAgICAgICAgICAgIGNvdW50ZXJbYmxvY2tTaXplIC0gMV0gPSAoY291bnRlcltibG9ja1NpemUgLSAxXSArIDEpIHwgMFxuXG5cdCAgICAgICAgICAgIC8vIEVuY3J5cHRcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBibG9ja1NpemU7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgd29yZHNbb2Zmc2V0ICsgaV0gXj0ga2V5c3RyZWFtW2ldO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cblx0ICAgIENUUi5EZWNyeXB0b3IgPSBFbmNyeXB0b3I7XG5cblx0ICAgIHJldHVybiBDVFI7XG5cdH0oKSk7XG5cblxuXHQoZnVuY3Rpb24gKCkge1xuXHQgICAgLy8gU2hvcnRjdXRzXG5cdCAgICB2YXIgQyA9IENyeXB0b0pTO1xuXHQgICAgdmFyIENfbGliID0gQy5saWI7XG5cdCAgICB2YXIgU3RyZWFtQ2lwaGVyID0gQ19saWIuU3RyZWFtQ2lwaGVyO1xuXHQgICAgdmFyIENfYWxnbyA9IEMuYWxnbztcblxuXHQgICAgLy8gUmV1c2FibGUgb2JqZWN0c1xuXHQgICAgdmFyIFMgID0gW107XG5cdCAgICB2YXIgQ18gPSBbXTtcblx0ICAgIHZhciBHICA9IFtdO1xuXG5cdCAgICAvKipcblx0ICAgICAqIFJhYmJpdCBzdHJlYW0gY2lwaGVyIGFsZ29yaXRobS5cblx0ICAgICAqXG5cdCAgICAgKiBUaGlzIGlzIGEgbGVnYWN5IHZlcnNpb24gdGhhdCBuZWdsZWN0ZWQgdG8gY29udmVydCB0aGUga2V5IHRvIGxpdHRsZS1lbmRpYW4uXG5cdCAgICAgKiBUaGlzIGVycm9yIGRvZXNuJ3QgYWZmZWN0IHRoZSBjaXBoZXIncyBzZWN1cml0eSxcblx0ICAgICAqIGJ1dCBpdCBkb2VzIGFmZmVjdCBpdHMgY29tcGF0aWJpbGl0eSB3aXRoIG90aGVyIGltcGxlbWVudGF0aW9ucy5cblx0ICAgICAqL1xuXHQgICAgdmFyIFJhYmJpdExlZ2FjeSA9IENfYWxnby5SYWJiaXRMZWdhY3kgPSBTdHJlYW1DaXBoZXIuZXh0ZW5kKHtcblx0ICAgICAgICBfZG9SZXNldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIEsgPSB0aGlzLl9rZXkud29yZHM7XG5cdCAgICAgICAgICAgIHZhciBpdiA9IHRoaXMuY2ZnLml2O1xuXG5cdCAgICAgICAgICAgIC8vIEdlbmVyYXRlIGluaXRpYWwgc3RhdGUgdmFsdWVzXG5cdCAgICAgICAgICAgIHZhciBYID0gdGhpcy5fWCA9IFtcblx0ICAgICAgICAgICAgICAgIEtbMF0sIChLWzNdIDw8IDE2KSB8IChLWzJdID4+PiAxNiksXG5cdCAgICAgICAgICAgICAgICBLWzFdLCAoS1swXSA8PCAxNikgfCAoS1szXSA+Pj4gMTYpLFxuXHQgICAgICAgICAgICAgICAgS1syXSwgKEtbMV0gPDwgMTYpIHwgKEtbMF0gPj4+IDE2KSxcblx0ICAgICAgICAgICAgICAgIEtbM10sIChLWzJdIDw8IDE2KSB8IChLWzFdID4+PiAxNilcblx0ICAgICAgICAgICAgXTtcblxuXHQgICAgICAgICAgICAvLyBHZW5lcmF0ZSBpbml0aWFsIGNvdW50ZXIgdmFsdWVzXG5cdCAgICAgICAgICAgIHZhciBDID0gdGhpcy5fQyA9IFtcblx0ICAgICAgICAgICAgICAgIChLWzJdIDw8IDE2KSB8IChLWzJdID4+PiAxNiksIChLWzBdICYgMHhmZmZmMDAwMCkgfCAoS1sxXSAmIDB4MDAwMGZmZmYpLFxuXHQgICAgICAgICAgICAgICAgKEtbM10gPDwgMTYpIHwgKEtbM10gPj4+IDE2KSwgKEtbMV0gJiAweGZmZmYwMDAwKSB8IChLWzJdICYgMHgwMDAwZmZmZiksXG5cdCAgICAgICAgICAgICAgICAoS1swXSA8PCAxNikgfCAoS1swXSA+Pj4gMTYpLCAoS1syXSAmIDB4ZmZmZjAwMDApIHwgKEtbM10gJiAweDAwMDBmZmZmKSxcblx0ICAgICAgICAgICAgICAgIChLWzFdIDw8IDE2KSB8IChLWzFdID4+PiAxNiksIChLWzNdICYgMHhmZmZmMDAwMCkgfCAoS1swXSAmIDB4MDAwMGZmZmYpXG5cdCAgICAgICAgICAgIF07XG5cblx0ICAgICAgICAgICAgLy8gQ2FycnkgYml0XG5cdCAgICAgICAgICAgIHRoaXMuX2IgPSAwO1xuXG5cdCAgICAgICAgICAgIC8vIEl0ZXJhdGUgdGhlIHN5c3RlbSBmb3VyIHRpbWVzXG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICBuZXh0U3RhdGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIE1vZGlmeSB0aGUgY291bnRlcnNcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA4OyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIENbaV0gXj0gWFsoaSArIDQpICYgN107XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBJViBzZXR1cFxuXHQgICAgICAgICAgICBpZiAoaXYpIHtcblx0ICAgICAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICAgICAgdmFyIElWID0gaXYud29yZHM7XG5cdCAgICAgICAgICAgICAgICB2YXIgSVZfMCA9IElWWzBdO1xuXHQgICAgICAgICAgICAgICAgdmFyIElWXzEgPSBJVlsxXTtcblxuXHQgICAgICAgICAgICAgICAgLy8gR2VuZXJhdGUgZm91ciBzdWJ2ZWN0b3JzXG5cdCAgICAgICAgICAgICAgICB2YXIgaTAgPSAoKChJVl8wIDw8IDgpIHwgKElWXzAgPj4+IDI0KSkgJiAweDAwZmYwMGZmKSB8ICgoKElWXzAgPDwgMjQpIHwgKElWXzAgPj4+IDgpKSAmIDB4ZmYwMGZmMDApO1xuXHQgICAgICAgICAgICAgICAgdmFyIGkyID0gKCgoSVZfMSA8PCA4KSB8IChJVl8xID4+PiAyNCkpICYgMHgwMGZmMDBmZikgfCAoKChJVl8xIDw8IDI0KSB8IChJVl8xID4+PiA4KSkgJiAweGZmMDBmZjAwKTtcblx0ICAgICAgICAgICAgICAgIHZhciBpMSA9IChpMCA+Pj4gMTYpIHwgKGkyICYgMHhmZmZmMDAwMCk7XG5cdCAgICAgICAgICAgICAgICB2YXIgaTMgPSAoaTIgPDwgMTYpICB8IChpMCAmIDB4MDAwMGZmZmYpO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBNb2RpZnkgY291bnRlciB2YWx1ZXNcblx0ICAgICAgICAgICAgICAgIENbMF0gXj0gaTA7XG5cdCAgICAgICAgICAgICAgICBDWzFdIF49IGkxO1xuXHQgICAgICAgICAgICAgICAgQ1syXSBePSBpMjtcblx0ICAgICAgICAgICAgICAgIENbM10gXj0gaTM7XG5cdCAgICAgICAgICAgICAgICBDWzRdIF49IGkwO1xuXHQgICAgICAgICAgICAgICAgQ1s1XSBePSBpMTtcblx0ICAgICAgICAgICAgICAgIENbNl0gXj0gaTI7XG5cdCAgICAgICAgICAgICAgICBDWzddIF49IGkzO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBJdGVyYXRlIHRoZSBzeXN0ZW0gZm91ciB0aW1lc1xuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA0OyBpKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICBuZXh0U3RhdGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBfZG9Qcm9jZXNzQmxvY2s6IGZ1bmN0aW9uIChNLCBvZmZzZXQpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRcblx0ICAgICAgICAgICAgdmFyIFggPSB0aGlzLl9YO1xuXG5cdCAgICAgICAgICAgIC8vIEl0ZXJhdGUgdGhlIHN5c3RlbVxuXHQgICAgICAgICAgICBuZXh0U3RhdGUuY2FsbCh0aGlzKTtcblxuXHQgICAgICAgICAgICAvLyBHZW5lcmF0ZSBmb3VyIGtleXN0cmVhbSB3b3Jkc1xuXHQgICAgICAgICAgICBTWzBdID0gWFswXSBeIChYWzVdID4+PiAxNikgXiAoWFszXSA8PCAxNik7XG5cdCAgICAgICAgICAgIFNbMV0gPSBYWzJdIF4gKFhbN10gPj4+IDE2KSBeIChYWzVdIDw8IDE2KTtcblx0ICAgICAgICAgICAgU1syXSA9IFhbNF0gXiAoWFsxXSA+Pj4gMTYpIF4gKFhbN10gPDwgMTYpO1xuXHQgICAgICAgICAgICBTWzNdID0gWFs2XSBeIChYWzNdID4+PiAxNikgXiAoWFsxXSA8PCAxNik7XG5cblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA0OyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIC8vIFN3YXAgZW5kaWFuXG5cdCAgICAgICAgICAgICAgICBTW2ldID0gKCgoU1tpXSA8PCA4KSAgfCAoU1tpXSA+Pj4gMjQpKSAmIDB4MDBmZjAwZmYpIHxcblx0ICAgICAgICAgICAgICAgICAgICAgICAoKChTW2ldIDw8IDI0KSB8IChTW2ldID4+PiA4KSkgICYgMHhmZjAwZmYwMCk7XG5cblx0ICAgICAgICAgICAgICAgIC8vIEVuY3J5cHRcblx0ICAgICAgICAgICAgICAgIE1bb2Zmc2V0ICsgaV0gXj0gU1tpXTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBibG9ja1NpemU6IDEyOC8zMixcblxuXHQgICAgICAgIGl2U2l6ZTogNjQvMzJcblx0ICAgIH0pO1xuXG5cdCAgICBmdW5jdGlvbiBuZXh0U3RhdGUoKSB7XG5cdCAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgdmFyIFggPSB0aGlzLl9YO1xuXHQgICAgICAgIHZhciBDID0gdGhpcy5fQztcblxuXHQgICAgICAgIC8vIFNhdmUgb2xkIGNvdW50ZXIgdmFsdWVzXG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA4OyBpKyspIHtcblx0ICAgICAgICAgICAgQ19baV0gPSBDW2ldO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIC8vIENhbGN1bGF0ZSBuZXcgY291bnRlciB2YWx1ZXNcblx0ICAgICAgICBDWzBdID0gKENbMF0gKyAweDRkMzRkMzRkICsgdGhpcy5fYikgfCAwO1xuXHQgICAgICAgIENbMV0gPSAoQ1sxXSArIDB4ZDM0ZDM0ZDMgKyAoKENbMF0gPj4+IDApIDwgKENfWzBdID4+PiAwKSA/IDEgOiAwKSkgfCAwO1xuXHQgICAgICAgIENbMl0gPSAoQ1syXSArIDB4MzRkMzRkMzQgKyAoKENbMV0gPj4+IDApIDwgKENfWzFdID4+PiAwKSA/IDEgOiAwKSkgfCAwO1xuXHQgICAgICAgIENbM10gPSAoQ1szXSArIDB4NGQzNGQzNGQgKyAoKENbMl0gPj4+IDApIDwgKENfWzJdID4+PiAwKSA/IDEgOiAwKSkgfCAwO1xuXHQgICAgICAgIENbNF0gPSAoQ1s0XSArIDB4ZDM0ZDM0ZDMgKyAoKENbM10gPj4+IDApIDwgKENfWzNdID4+PiAwKSA/IDEgOiAwKSkgfCAwO1xuXHQgICAgICAgIENbNV0gPSAoQ1s1XSArIDB4MzRkMzRkMzQgKyAoKENbNF0gPj4+IDApIDwgKENfWzRdID4+PiAwKSA/IDEgOiAwKSkgfCAwO1xuXHQgICAgICAgIENbNl0gPSAoQ1s2XSArIDB4NGQzNGQzNGQgKyAoKENbNV0gPj4+IDApIDwgKENfWzVdID4+PiAwKSA/IDEgOiAwKSkgfCAwO1xuXHQgICAgICAgIENbN10gPSAoQ1s3XSArIDB4ZDM0ZDM0ZDMgKyAoKENbNl0gPj4+IDApIDwgKENfWzZdID4+PiAwKSA/IDEgOiAwKSkgfCAwO1xuXHQgICAgICAgIHRoaXMuX2IgPSAoQ1s3XSA+Pj4gMCkgPCAoQ19bN10gPj4+IDApID8gMSA6IDA7XG5cblx0ICAgICAgICAvLyBDYWxjdWxhdGUgdGhlIGctdmFsdWVzXG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA4OyBpKyspIHtcblx0ICAgICAgICAgICAgdmFyIGd4ID0gWFtpXSArIENbaV07XG5cblx0ICAgICAgICAgICAgLy8gQ29uc3RydWN0IGhpZ2ggYW5kIGxvdyBhcmd1bWVudCBmb3Igc3F1YXJpbmdcblx0ICAgICAgICAgICAgdmFyIGdhID0gZ3ggJiAweGZmZmY7XG5cdCAgICAgICAgICAgIHZhciBnYiA9IGd4ID4+PiAxNjtcblxuXHQgICAgICAgICAgICAvLyBDYWxjdWxhdGUgaGlnaCBhbmQgbG93IHJlc3VsdCBvZiBzcXVhcmluZ1xuXHQgICAgICAgICAgICB2YXIgZ2ggPSAoKCgoZ2EgKiBnYSkgPj4+IDE3KSArIGdhICogZ2IpID4+PiAxNSkgKyBnYiAqIGdiO1xuXHQgICAgICAgICAgICB2YXIgZ2wgPSAoKChneCAmIDB4ZmZmZjAwMDApICogZ3gpIHwgMCkgKyAoKChneCAmIDB4MDAwMGZmZmYpICogZ3gpIHwgMCk7XG5cblx0ICAgICAgICAgICAgLy8gSGlnaCBYT1IgbG93XG5cdCAgICAgICAgICAgIEdbaV0gPSBnaCBeIGdsO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIC8vIENhbGN1bGF0ZSBuZXcgc3RhdGUgdmFsdWVzXG5cdCAgICAgICAgWFswXSA9IChHWzBdICsgKChHWzddIDw8IDE2KSB8IChHWzddID4+PiAxNikpICsgKChHWzZdIDw8IDE2KSB8IChHWzZdID4+PiAxNikpKSB8IDA7XG5cdCAgICAgICAgWFsxXSA9IChHWzFdICsgKChHWzBdIDw8IDgpICB8IChHWzBdID4+PiAyNCkpICsgR1s3XSkgfCAwO1xuXHQgICAgICAgIFhbMl0gPSAoR1syXSArICgoR1sxXSA8PCAxNikgfCAoR1sxXSA+Pj4gMTYpKSArICgoR1swXSA8PCAxNikgfCAoR1swXSA+Pj4gMTYpKSkgfCAwO1xuXHQgICAgICAgIFhbM10gPSAoR1szXSArICgoR1syXSA8PCA4KSAgfCAoR1syXSA+Pj4gMjQpKSArIEdbMV0pIHwgMDtcblx0ICAgICAgICBYWzRdID0gKEdbNF0gKyAoKEdbM10gPDwgMTYpIHwgKEdbM10gPj4+IDE2KSkgKyAoKEdbMl0gPDwgMTYpIHwgKEdbMl0gPj4+IDE2KSkpIHwgMDtcblx0ICAgICAgICBYWzVdID0gKEdbNV0gKyAoKEdbNF0gPDwgOCkgIHwgKEdbNF0gPj4+IDI0KSkgKyBHWzNdKSB8IDA7XG5cdCAgICAgICAgWFs2XSA9IChHWzZdICsgKChHWzVdIDw8IDE2KSB8IChHWzVdID4+PiAxNikpICsgKChHWzRdIDw8IDE2KSB8IChHWzRdID4+PiAxNikpKSB8IDA7XG5cdCAgICAgICAgWFs3XSA9IChHWzddICsgKChHWzZdIDw8IDgpICB8IChHWzZdID4+PiAyNCkpICsgR1s1XSkgfCAwO1xuXHQgICAgfVxuXG5cdCAgICAvKipcblx0ICAgICAqIFNob3J0Y3V0IGZ1bmN0aW9ucyB0byB0aGUgY2lwaGVyJ3Mgb2JqZWN0IGludGVyZmFjZS5cblx0ICAgICAqXG5cdCAgICAgKiBAZXhhbXBsZVxuXHQgICAgICpcblx0ICAgICAqICAgICB2YXIgY2lwaGVydGV4dCA9IENyeXB0b0pTLlJhYmJpdExlZ2FjeS5lbmNyeXB0KG1lc3NhZ2UsIGtleSwgY2ZnKTtcblx0ICAgICAqICAgICB2YXIgcGxhaW50ZXh0ICA9IENyeXB0b0pTLlJhYmJpdExlZ2FjeS5kZWNyeXB0KGNpcGhlcnRleHQsIGtleSwgY2ZnKTtcblx0ICAgICAqL1xuXHQgICAgQy5SYWJiaXRMZWdhY3kgPSBTdHJlYW1DaXBoZXIuX2NyZWF0ZUhlbHBlcihSYWJiaXRMZWdhY3kpO1xuXHR9KCkpO1xuXG5cblx0LyoqXG5cdCAqIFplcm8gcGFkZGluZyBzdHJhdGVneS5cblx0ICovXG5cdENyeXB0b0pTLnBhZC5aZXJvUGFkZGluZyA9IHtcblx0ICAgIHBhZDogZnVuY3Rpb24gKGRhdGEsIGJsb2NrU2l6ZSkge1xuXHQgICAgICAgIC8vIFNob3J0Y3V0XG5cdCAgICAgICAgdmFyIGJsb2NrU2l6ZUJ5dGVzID0gYmxvY2tTaXplICogNDtcblxuXHQgICAgICAgIC8vIFBhZFxuXHQgICAgICAgIGRhdGEuY2xhbXAoKTtcblx0ICAgICAgICBkYXRhLnNpZ0J5dGVzICs9IGJsb2NrU2l6ZUJ5dGVzIC0gKChkYXRhLnNpZ0J5dGVzICUgYmxvY2tTaXplQnl0ZXMpIHx8IGJsb2NrU2l6ZUJ5dGVzKTtcblx0ICAgIH0sXG5cblx0ICAgIHVucGFkOiBmdW5jdGlvbiAoZGF0YSkge1xuXHQgICAgICAgIC8vIFNob3J0Y3V0XG5cdCAgICAgICAgdmFyIGRhdGFXb3JkcyA9IGRhdGEud29yZHM7XG5cblx0ICAgICAgICAvLyBVbnBhZFxuXHQgICAgICAgIHZhciBpID0gZGF0YS5zaWdCeXRlcyAtIDE7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IGRhdGEuc2lnQnl0ZXMgLSAxOyBpID49IDA7IGktLSkge1xuXHQgICAgICAgICAgICBpZiAoKChkYXRhV29yZHNbaSA+Pj4gMl0gPj4+ICgyNCAtIChpICUgNCkgKiA4KSkgJiAweGZmKSkge1xuXHQgICAgICAgICAgICAgICAgZGF0YS5zaWdCeXRlcyA9IGkgKyAxO1xuXHQgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9XG5cdH07XG5cblxuXHRyZXR1cm4gQ3J5cHRvSlM7XG5cbn0pKTsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///32\n"); +eval("/* WEBPACK VAR INJECTION */(function(__webpack_provided_window_dot_crypto, global, __webpack_provided_global_dot_crypto) {var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ 4);\n;\n(function (root, factory) {\n if (( false ? undefined : _typeof(exports)) === \"object\") {\n // CommonJS\n module.exports = exports = factory();\n } else if (true) {\n // AMD\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else {}\n})(this, function () {\n /*globals window, global, require*/\n\n /**\n * CryptoJS core components.\n */\n var CryptoJS = CryptoJS || function (Math, undefined) {\n var crypto;\n\n // Native crypto from window (Browser)\n if (typeof window !== 'undefined' && __webpack_provided_window_dot_crypto) {\n crypto = __webpack_provided_window_dot_crypto;\n }\n\n // Native (experimental IE 11) crypto from window (Browser)\n if (!crypto && typeof window !== 'undefined' && window.msCrypto) {\n crypto = window.msCrypto;\n }\n\n // Native crypto from global (NodeJS)\n if (!crypto && typeof global !== 'undefined' && __webpack_provided_global_dot_crypto) {\n crypto = __webpack_provided_global_dot_crypto;\n }\n\n // Native crypto import via require (NodeJS)\n if (!crypto && \"function\" === 'function') {\n try {\n crypto = __webpack_require__(/*! crypto */ 42);\n } catch (err) {}\n }\n\n /*\n * Cryptographically secure pseudorandom number generator\n *\n * As Math.random() is cryptographically not safe to use\n */\n var cryptoSecureRandomInt = function cryptoSecureRandomInt() {\n if (crypto) {\n // Use getRandomValues method (Browser)\n if (typeof crypto.getRandomValues === 'function') {\n try {\n return crypto.getRandomValues(new Uint32Array(1))[0];\n } catch (err) {}\n }\n\n // Use randomBytes method (NodeJS)\n if (typeof crypto.randomBytes === 'function') {\n try {\n return crypto.randomBytes(4).readInt32LE();\n } catch (err) {}\n }\n }\n throw new Error('Native crypto module could not be used to get secure random number.');\n };\n\n /*\n * Local polyfill of Object.create\n */\n var create = Object.create || function () {\n function F() {}\n return function (obj) {\n var subtype;\n F.prototype = obj;\n subtype = new F();\n F.prototype = null;\n return subtype;\n };\n }();\n\n /**\n * CryptoJS namespace.\n */\n var C = {};\n\n /**\n * Library namespace.\n */\n var C_lib = C.lib = {};\n\n /**\n * Base object for prototypal inheritance.\n */\n var Base = C_lib.Base = function () {\n return {\n /**\n * Creates a new object that inherits from this object.\n *\n * @param {Object} overrides Properties to copy into the new object.\n *\n * @return {Object} The new object.\n *\n * @static\n *\n * @example\n *\n * var MyType = CryptoJS.lib.Base.extend({\n * field: 'value',\n *\n * method: function () {\n * }\n * });\n */\n extend: function extend(overrides) {\n // Spawn\n var subtype = create(this);\n\n // Augment\n if (overrides) {\n subtype.mixIn(overrides);\n }\n\n // Create default initializer\n if (!subtype.hasOwnProperty('init') || this.init === subtype.init) {\n subtype.init = function () {\n subtype.$super.init.apply(this, arguments);\n };\n }\n\n // Initializer's prototype is the subtype object\n subtype.init.prototype = subtype;\n\n // Reference supertype\n subtype.$super = this;\n return subtype;\n },\n /**\n * Extends this object and runs the init method.\n * Arguments to create() will be passed to init().\n *\n * @return {Object} The new object.\n *\n * @static\n *\n * @example\n *\n * var instance = MyType.create();\n */\n create: function create() {\n var instance = this.extend();\n instance.init.apply(instance, arguments);\n return instance;\n },\n /**\n * Initializes a newly created object.\n * Override this method to add some logic when your objects are created.\n *\n * @example\n *\n * var MyType = CryptoJS.lib.Base.extend({\n * init: function () {\n * // ...\n * }\n * });\n */\n init: function init() {},\n /**\n * Copies properties into this object.\n *\n * @param {Object} properties The properties to mix in.\n *\n * @example\n *\n * MyType.mixIn({\n * field: 'value'\n * });\n */\n mixIn: function mixIn(properties) {\n for (var propertyName in properties) {\n if (properties.hasOwnProperty(propertyName)) {\n this[propertyName] = properties[propertyName];\n }\n }\n\n // IE won't copy toString using the loop above\n if (properties.hasOwnProperty('toString')) {\n this.toString = properties.toString;\n }\n },\n /**\n * Creates a copy of this object.\n *\n * @return {Object} The clone.\n *\n * @example\n *\n * var clone = instance.clone();\n */\n clone: function clone() {\n return this.init.prototype.extend(this);\n }\n };\n }();\n\n /**\n * An array of 32-bit words.\n *\n * @property {Array} words The array of 32-bit words.\n * @property {number} sigBytes The number of significant bytes in this word array.\n */\n var WordArray = C_lib.WordArray = Base.extend({\n /**\n * Initializes a newly created word array.\n *\n * @param {Array} words (Optional) An array of 32-bit words.\n * @param {number} sigBytes (Optional) The number of significant bytes in the words.\n *\n * @example\n *\n * var wordArray = CryptoJS.lib.WordArray.create();\n * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]);\n * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6);\n */\n init: function init(words, sigBytes) {\n words = this.words = words || [];\n if (sigBytes != undefined) {\n this.sigBytes = sigBytes;\n } else {\n this.sigBytes = words.length * 4;\n }\n },\n /**\n * Converts this word array to a string.\n *\n * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex\n *\n * @return {string} The stringified word array.\n *\n * @example\n *\n * var string = wordArray + '';\n * var string = wordArray.toString();\n * var string = wordArray.toString(CryptoJS.enc.Utf8);\n */\n toString: function toString(encoder) {\n return (encoder || Hex).stringify(this);\n },\n /**\n * Concatenates a word array to this word array.\n *\n * @param {WordArray} wordArray The word array to append.\n *\n * @return {WordArray} This word array.\n *\n * @example\n *\n * wordArray1.concat(wordArray2);\n */\n concat: function concat(wordArray) {\n // Shortcuts\n var thisWords = this.words;\n var thatWords = wordArray.words;\n var thisSigBytes = this.sigBytes;\n var thatSigBytes = wordArray.sigBytes;\n\n // Clamp excess bits\n this.clamp();\n\n // Concat\n if (thisSigBytes % 4) {\n // Copy one byte at a time\n for (var i = 0; i < thatSigBytes; i++) {\n var thatByte = thatWords[i >>> 2] >>> 24 - i % 4 * 8 & 0xff;\n thisWords[thisSigBytes + i >>> 2] |= thatByte << 24 - (thisSigBytes + i) % 4 * 8;\n }\n } else {\n // Copy one word at a time\n for (var i = 0; i < thatSigBytes; i += 4) {\n thisWords[thisSigBytes + i >>> 2] = thatWords[i >>> 2];\n }\n }\n this.sigBytes += thatSigBytes;\n\n // Chainable\n return this;\n },\n /**\n * Removes insignificant bits.\n *\n * @example\n *\n * wordArray.clamp();\n */\n clamp: function clamp() {\n // Shortcuts\n var words = this.words;\n var sigBytes = this.sigBytes;\n\n // Clamp\n words[sigBytes >>> 2] &= 0xffffffff << 32 - sigBytes % 4 * 8;\n words.length = Math.ceil(sigBytes / 4);\n },\n /**\n * Creates a copy of this word array.\n *\n * @return {WordArray} The clone.\n *\n * @example\n *\n * var clone = wordArray.clone();\n */\n clone: function clone() {\n var clone = Base.clone.call(this);\n clone.words = this.words.slice(0);\n return clone;\n },\n /**\n * Creates a word array filled with random bytes.\n *\n * @param {number} nBytes The number of random bytes to generate.\n *\n * @return {WordArray} The random word array.\n *\n * @static\n *\n * @example\n *\n * var wordArray = CryptoJS.lib.WordArray.random(16);\n */\n random: function random(nBytes) {\n var words = [];\n for (var i = 0; i < nBytes; i += 4) {\n words.push(cryptoSecureRandomInt());\n }\n return new WordArray.init(words, nBytes);\n }\n });\n\n /**\n * Encoder namespace.\n */\n var C_enc = C.enc = {};\n\n /**\n * Hex encoding strategy.\n */\n var Hex = C_enc.Hex = {\n /**\n * Converts a word array to a hex string.\n *\n * @param {WordArray} wordArray The word array.\n *\n * @return {string} The hex string.\n *\n * @static\n *\n * @example\n *\n * var hexString = CryptoJS.enc.Hex.stringify(wordArray);\n */\n stringify: function stringify(wordArray) {\n // Shortcuts\n var words = wordArray.words;\n var sigBytes = wordArray.sigBytes;\n\n // Convert\n var hexChars = [];\n for (var i = 0; i < sigBytes; i++) {\n var bite = words[i >>> 2] >>> 24 - i % 4 * 8 & 0xff;\n hexChars.push((bite >>> 4).toString(16));\n hexChars.push((bite & 0x0f).toString(16));\n }\n return hexChars.join('');\n },\n /**\n * Converts a hex string to a word array.\n *\n * @param {string} hexStr The hex string.\n *\n * @return {WordArray} The word array.\n *\n * @static\n *\n * @example\n *\n * var wordArray = CryptoJS.enc.Hex.parse(hexString);\n */\n parse: function parse(hexStr) {\n // Shortcut\n var hexStrLength = hexStr.length;\n\n // Convert\n var words = [];\n for (var i = 0; i < hexStrLength; i += 2) {\n words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << 24 - i % 8 * 4;\n }\n return new WordArray.init(words, hexStrLength / 2);\n }\n };\n\n /**\n * Latin1 encoding strategy.\n */\n var Latin1 = C_enc.Latin1 = {\n /**\n * Converts a word array to a Latin1 string.\n *\n * @param {WordArray} wordArray The word array.\n *\n * @return {string} The Latin1 string.\n *\n * @static\n *\n * @example\n *\n * var latin1String = CryptoJS.enc.Latin1.stringify(wordArray);\n */\n stringify: function stringify(wordArray) {\n // Shortcuts\n var words = wordArray.words;\n var sigBytes = wordArray.sigBytes;\n\n // Convert\n var latin1Chars = [];\n for (var i = 0; i < sigBytes; i++) {\n var bite = words[i >>> 2] >>> 24 - i % 4 * 8 & 0xff;\n latin1Chars.push(String.fromCharCode(bite));\n }\n return latin1Chars.join('');\n },\n /**\n * Converts a Latin1 string to a word array.\n *\n * @param {string} latin1Str The Latin1 string.\n *\n * @return {WordArray} The word array.\n *\n * @static\n *\n * @example\n *\n * var wordArray = CryptoJS.enc.Latin1.parse(latin1String);\n */\n parse: function parse(latin1Str) {\n // Shortcut\n var latin1StrLength = latin1Str.length;\n\n // Convert\n var words = [];\n for (var i = 0; i < latin1StrLength; i++) {\n words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << 24 - i % 4 * 8;\n }\n return new WordArray.init(words, latin1StrLength);\n }\n };\n\n /**\n * UTF-8 encoding strategy.\n */\n var Utf8 = C_enc.Utf8 = {\n /**\n * Converts a word array to a UTF-8 string.\n *\n * @param {WordArray} wordArray The word array.\n *\n * @return {string} The UTF-8 string.\n *\n * @static\n *\n * @example\n *\n * var utf8String = CryptoJS.enc.Utf8.stringify(wordArray);\n */\n stringify: function stringify(wordArray) {\n try {\n return decodeURIComponent(escape(Latin1.stringify(wordArray)));\n } catch (e) {\n throw new Error('Malformed UTF-8 data');\n }\n },\n /**\n * Converts a UTF-8 string to a word array.\n *\n * @param {string} utf8Str The UTF-8 string.\n *\n * @return {WordArray} The word array.\n *\n * @static\n *\n * @example\n *\n * var wordArray = CryptoJS.enc.Utf8.parse(utf8String);\n */\n parse: function parse(utf8Str) {\n return Latin1.parse(unescape(encodeURIComponent(utf8Str)));\n }\n };\n\n /**\n * Abstract buffered block algorithm template.\n *\n * The property blockSize must be implemented in a concrete subtype.\n *\n * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0\n */\n var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({\n /**\n * Resets this block algorithm's data buffer to its initial state.\n *\n * @example\n *\n * bufferedBlockAlgorithm.reset();\n */\n reset: function reset() {\n // Initial values\n this._data = new WordArray.init();\n this._nDataBytes = 0;\n },\n /**\n * Adds new data to this block algorithm's buffer.\n *\n * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8.\n *\n * @example\n *\n * bufferedBlockAlgorithm._append('data');\n * bufferedBlockAlgorithm._append(wordArray);\n */\n _append: function _append(data) {\n // Convert string to WordArray, else assume WordArray already\n if (typeof data == 'string') {\n data = Utf8.parse(data);\n }\n\n // Append\n this._data.concat(data);\n this._nDataBytes += data.sigBytes;\n },\n /**\n * Processes available data blocks.\n *\n * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype.\n *\n * @param {boolean} doFlush Whether all blocks and partial blocks should be processed.\n *\n * @return {WordArray} The processed data.\n *\n * @example\n *\n * var processedData = bufferedBlockAlgorithm._process();\n * var processedData = bufferedBlockAlgorithm._process(!!'flush');\n */\n _process: function _process(doFlush) {\n var processedWords;\n\n // Shortcuts\n var data = this._data;\n var dataWords = data.words;\n var dataSigBytes = data.sigBytes;\n var blockSize = this.blockSize;\n var blockSizeBytes = blockSize * 4;\n\n // Count blocks ready\n var nBlocksReady = dataSigBytes / blockSizeBytes;\n if (doFlush) {\n // Round up to include partial blocks\n nBlocksReady = Math.ceil(nBlocksReady);\n } else {\n // Round down to include only full blocks,\n // less the number of blocks that must remain in the buffer\n nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0);\n }\n\n // Count words ready\n var nWordsReady = nBlocksReady * blockSize;\n\n // Count bytes ready\n var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes);\n\n // Process blocks\n if (nWordsReady) {\n for (var offset = 0; offset < nWordsReady; offset += blockSize) {\n // Perform concrete-algorithm logic\n this._doProcessBlock(dataWords, offset);\n }\n\n // Remove processed words\n processedWords = dataWords.splice(0, nWordsReady);\n data.sigBytes -= nBytesReady;\n }\n\n // Return processed words\n return new WordArray.init(processedWords, nBytesReady);\n },\n /**\n * Creates a copy of this object.\n *\n * @return {Object} The clone.\n *\n * @example\n *\n * var clone = bufferedBlockAlgorithm.clone();\n */\n clone: function clone() {\n var clone = Base.clone.call(this);\n clone._data = this._data.clone();\n return clone;\n },\n _minBufferSize: 0\n });\n\n /**\n * Abstract hasher template.\n *\n * @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits)\n */\n var Hasher = C_lib.Hasher = BufferedBlockAlgorithm.extend({\n /**\n * Configuration options.\n */\n cfg: Base.extend(),\n /**\n * Initializes a newly created hasher.\n *\n * @param {Object} cfg (Optional) The configuration options to use for this hash computation.\n *\n * @example\n *\n * var hasher = CryptoJS.algo.SHA256.create();\n */\n init: function init(cfg) {\n // Apply config defaults\n this.cfg = this.cfg.extend(cfg);\n\n // Set initial values\n this.reset();\n },\n /**\n * Resets this hasher to its initial state.\n *\n * @example\n *\n * hasher.reset();\n */\n reset: function reset() {\n // Reset data buffer\n BufferedBlockAlgorithm.reset.call(this);\n\n // Perform concrete-hasher logic\n this._doReset();\n },\n /**\n * Updates this hasher with a message.\n *\n * @param {WordArray|string} messageUpdate The message to append.\n *\n * @return {Hasher} This hasher.\n *\n * @example\n *\n * hasher.update('message');\n * hasher.update(wordArray);\n */\n update: function update(messageUpdate) {\n // Append\n this._append(messageUpdate);\n\n // Update the hash\n this._process();\n\n // Chainable\n return this;\n },\n /**\n * Finalizes the hash computation.\n * Note that the finalize operation is effectively a destructive, read-once operation.\n *\n * @param {WordArray|string} messageUpdate (Optional) A final message update.\n *\n * @return {WordArray} The hash.\n *\n * @example\n *\n * var hash = hasher.finalize();\n * var hash = hasher.finalize('message');\n * var hash = hasher.finalize(wordArray);\n */\n finalize: function finalize(messageUpdate) {\n // Final message update\n if (messageUpdate) {\n this._append(messageUpdate);\n }\n\n // Perform concrete-hasher logic\n var hash = this._doFinalize();\n return hash;\n },\n blockSize: 512 / 32,\n /**\n * Creates a shortcut function to a hasher's object interface.\n *\n * @param {Hasher} hasher The hasher to create a helper for.\n *\n * @return {Function} The shortcut function.\n *\n * @static\n *\n * @example\n *\n * var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256);\n */\n _createHelper: function _createHelper(hasher) {\n return function (message, cfg) {\n return new hasher.init(cfg).finalize(message);\n };\n },\n /**\n * Creates a shortcut function to the HMAC's object interface.\n *\n * @param {Hasher} hasher The hasher to use in this HMAC helper.\n *\n * @return {Function} The shortcut function.\n *\n * @static\n *\n * @example\n *\n * var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256);\n */\n _createHmacHelper: function _createHmacHelper(hasher) {\n return function (message, key) {\n return new C_algo.HMAC.init(hasher, key).finalize(message);\n };\n }\n });\n\n /**\n * Algorithm namespace.\n */\n var C_algo = C.algo = {};\n return C;\n }(Math);\n (function () {\n // Shortcuts\n var C = CryptoJS;\n var C_lib = C.lib;\n var WordArray = C_lib.WordArray;\n var C_enc = C.enc;\n\n /**\n * Base64 encoding strategy.\n */\n var Base64 = C_enc.Base64 = {\n /**\n * Converts a word array to a Base64 string.\n *\n * @param {WordArray} wordArray The word array.\n *\n * @return {string} The Base64 string.\n *\n * @static\n *\n * @example\n *\n * var base64String = CryptoJS.enc.Base64.stringify(wordArray);\n */\n stringify: function stringify(wordArray) {\n // Shortcuts\n var words = wordArray.words;\n var sigBytes = wordArray.sigBytes;\n var map = this._map;\n\n // Clamp excess bits\n wordArray.clamp();\n\n // Convert\n var base64Chars = [];\n for (var i = 0; i < sigBytes; i += 3) {\n var byte1 = words[i >>> 2] >>> 24 - i % 4 * 8 & 0xff;\n var byte2 = words[i + 1 >>> 2] >>> 24 - (i + 1) % 4 * 8 & 0xff;\n var byte3 = words[i + 2 >>> 2] >>> 24 - (i + 2) % 4 * 8 & 0xff;\n var triplet = byte1 << 16 | byte2 << 8 | byte3;\n for (var j = 0; j < 4 && i + j * 0.75 < sigBytes; j++) {\n base64Chars.push(map.charAt(triplet >>> 6 * (3 - j) & 0x3f));\n }\n }\n\n // Add padding\n var paddingChar = map.charAt(64);\n if (paddingChar) {\n while (base64Chars.length % 4) {\n base64Chars.push(paddingChar);\n }\n }\n return base64Chars.join('');\n },\n /**\n * Converts a Base64 string to a word array.\n *\n * @param {string} base64Str The Base64 string.\n *\n * @return {WordArray} The word array.\n *\n * @static\n *\n * @example\n *\n * var wordArray = CryptoJS.enc.Base64.parse(base64String);\n */\n parse: function parse(base64Str) {\n // Shortcuts\n var base64StrLength = base64Str.length;\n var map = this._map;\n var reverseMap = this._reverseMap;\n if (!reverseMap) {\n reverseMap = this._reverseMap = [];\n for (var j = 0; j < map.length; j++) {\n reverseMap[map.charCodeAt(j)] = j;\n }\n }\n\n // Ignore padding\n var paddingChar = map.charAt(64);\n if (paddingChar) {\n var paddingIndex = base64Str.indexOf(paddingChar);\n if (paddingIndex !== -1) {\n base64StrLength = paddingIndex;\n }\n }\n\n // Convert\n return parseLoop(base64Str, base64StrLength, reverseMap);\n },\n _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='\n };\n function parseLoop(base64Str, base64StrLength, reverseMap) {\n var words = [];\n var nBytes = 0;\n for (var i = 0; i < base64StrLength; i++) {\n if (i % 4) {\n var bits1 = reverseMap[base64Str.charCodeAt(i - 1)] << i % 4 * 2;\n var bits2 = reverseMap[base64Str.charCodeAt(i)] >>> 6 - i % 4 * 2;\n var bitsCombined = bits1 | bits2;\n words[nBytes >>> 2] |= bitsCombined << 24 - nBytes % 4 * 8;\n nBytes++;\n }\n }\n return WordArray.create(words, nBytes);\n }\n })();\n (function (Math) {\n // Shortcuts\n var C = CryptoJS;\n var C_lib = C.lib;\n var WordArray = C_lib.WordArray;\n var Hasher = C_lib.Hasher;\n var C_algo = C.algo;\n\n // Constants table\n var T = [];\n\n // Compute constants\n (function () {\n for (var i = 0; i < 64; i++) {\n T[i] = Math.abs(Math.sin(i + 1)) * 0x100000000 | 0;\n }\n })();\n\n /**\n * MD5 hash algorithm.\n */\n var MD5 = C_algo.MD5 = Hasher.extend({\n _doReset: function _doReset() {\n this._hash = new WordArray.init([0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476]);\n },\n _doProcessBlock: function _doProcessBlock(M, offset) {\n // Swap endian\n for (var i = 0; i < 16; i++) {\n // Shortcuts\n var offset_i = offset + i;\n var M_offset_i = M[offset_i];\n M[offset_i] = (M_offset_i << 8 | M_offset_i >>> 24) & 0x00ff00ff | (M_offset_i << 24 | M_offset_i >>> 8) & 0xff00ff00;\n }\n\n // Shortcuts\n var H = this._hash.words;\n var M_offset_0 = M[offset + 0];\n var M_offset_1 = M[offset + 1];\n var M_offset_2 = M[offset + 2];\n var M_offset_3 = M[offset + 3];\n var M_offset_4 = M[offset + 4];\n var M_offset_5 = M[offset + 5];\n var M_offset_6 = M[offset + 6];\n var M_offset_7 = M[offset + 7];\n var M_offset_8 = M[offset + 8];\n var M_offset_9 = M[offset + 9];\n var M_offset_10 = M[offset + 10];\n var M_offset_11 = M[offset + 11];\n var M_offset_12 = M[offset + 12];\n var M_offset_13 = M[offset + 13];\n var M_offset_14 = M[offset + 14];\n var M_offset_15 = M[offset + 15];\n\n // Working varialbes\n var a = H[0];\n var b = H[1];\n var c = H[2];\n var d = H[3];\n\n // Computation\n a = FF(a, b, c, d, M_offset_0, 7, T[0]);\n d = FF(d, a, b, c, M_offset_1, 12, T[1]);\n c = FF(c, d, a, b, M_offset_2, 17, T[2]);\n b = FF(b, c, d, a, M_offset_3, 22, T[3]);\n a = FF(a, b, c, d, M_offset_4, 7, T[4]);\n d = FF(d, a, b, c, M_offset_5, 12, T[5]);\n c = FF(c, d, a, b, M_offset_6, 17, T[6]);\n b = FF(b, c, d, a, M_offset_7, 22, T[7]);\n a = FF(a, b, c, d, M_offset_8, 7, T[8]);\n d = FF(d, a, b, c, M_offset_9, 12, T[9]);\n c = FF(c, d, a, b, M_offset_10, 17, T[10]);\n b = FF(b, c, d, a, M_offset_11, 22, T[11]);\n a = FF(a, b, c, d, M_offset_12, 7, T[12]);\n d = FF(d, a, b, c, M_offset_13, 12, T[13]);\n c = FF(c, d, a, b, M_offset_14, 17, T[14]);\n b = FF(b, c, d, a, M_offset_15, 22, T[15]);\n a = GG(a, b, c, d, M_offset_1, 5, T[16]);\n d = GG(d, a, b, c, M_offset_6, 9, T[17]);\n c = GG(c, d, a, b, M_offset_11, 14, T[18]);\n b = GG(b, c, d, a, M_offset_0, 20, T[19]);\n a = GG(a, b, c, d, M_offset_5, 5, T[20]);\n d = GG(d, a, b, c, M_offset_10, 9, T[21]);\n c = GG(c, d, a, b, M_offset_15, 14, T[22]);\n b = GG(b, c, d, a, M_offset_4, 20, T[23]);\n a = GG(a, b, c, d, M_offset_9, 5, T[24]);\n d = GG(d, a, b, c, M_offset_14, 9, T[25]);\n c = GG(c, d, a, b, M_offset_3, 14, T[26]);\n b = GG(b, c, d, a, M_offset_8, 20, T[27]);\n a = GG(a, b, c, d, M_offset_13, 5, T[28]);\n d = GG(d, a, b, c, M_offset_2, 9, T[29]);\n c = GG(c, d, a, b, M_offset_7, 14, T[30]);\n b = GG(b, c, d, a, M_offset_12, 20, T[31]);\n a = HH(a, b, c, d, M_offset_5, 4, T[32]);\n d = HH(d, a, b, c, M_offset_8, 11, T[33]);\n c = HH(c, d, a, b, M_offset_11, 16, T[34]);\n b = HH(b, c, d, a, M_offset_14, 23, T[35]);\n a = HH(a, b, c, d, M_offset_1, 4, T[36]);\n d = HH(d, a, b, c, M_offset_4, 11, T[37]);\n c = HH(c, d, a, b, M_offset_7, 16, T[38]);\n b = HH(b, c, d, a, M_offset_10, 23, T[39]);\n a = HH(a, b, c, d, M_offset_13, 4, T[40]);\n d = HH(d, a, b, c, M_offset_0, 11, T[41]);\n c = HH(c, d, a, b, M_offset_3, 16, T[42]);\n b = HH(b, c, d, a, M_offset_6, 23, T[43]);\n a = HH(a, b, c, d, M_offset_9, 4, T[44]);\n d = HH(d, a, b, c, M_offset_12, 11, T[45]);\n c = HH(c, d, a, b, M_offset_15, 16, T[46]);\n b = HH(b, c, d, a, M_offset_2, 23, T[47]);\n a = II(a, b, c, d, M_offset_0, 6, T[48]);\n d = II(d, a, b, c, M_offset_7, 10, T[49]);\n c = II(c, d, a, b, M_offset_14, 15, T[50]);\n b = II(b, c, d, a, M_offset_5, 21, T[51]);\n a = II(a, b, c, d, M_offset_12, 6, T[52]);\n d = II(d, a, b, c, M_offset_3, 10, T[53]);\n c = II(c, d, a, b, M_offset_10, 15, T[54]);\n b = II(b, c, d, a, M_offset_1, 21, T[55]);\n a = II(a, b, c, d, M_offset_8, 6, T[56]);\n d = II(d, a, b, c, M_offset_15, 10, T[57]);\n c = II(c, d, a, b, M_offset_6, 15, T[58]);\n b = II(b, c, d, a, M_offset_13, 21, T[59]);\n a = II(a, b, c, d, M_offset_4, 6, T[60]);\n d = II(d, a, b, c, M_offset_11, 10, T[61]);\n c = II(c, d, a, b, M_offset_2, 15, T[62]);\n b = II(b, c, d, a, M_offset_9, 21, T[63]);\n\n // Intermediate hash value\n H[0] = H[0] + a | 0;\n H[1] = H[1] + b | 0;\n H[2] = H[2] + c | 0;\n H[3] = H[3] + d | 0;\n },\n _doFinalize: function _doFinalize() {\n // Shortcuts\n var data = this._data;\n var dataWords = data.words;\n var nBitsTotal = this._nDataBytes * 8;\n var nBitsLeft = data.sigBytes * 8;\n\n // Add padding\n dataWords[nBitsLeft >>> 5] |= 0x80 << 24 - nBitsLeft % 32;\n var nBitsTotalH = Math.floor(nBitsTotal / 0x100000000);\n var nBitsTotalL = nBitsTotal;\n dataWords[(nBitsLeft + 64 >>> 9 << 4) + 15] = (nBitsTotalH << 8 | nBitsTotalH >>> 24) & 0x00ff00ff | (nBitsTotalH << 24 | nBitsTotalH >>> 8) & 0xff00ff00;\n dataWords[(nBitsLeft + 64 >>> 9 << 4) + 14] = (nBitsTotalL << 8 | nBitsTotalL >>> 24) & 0x00ff00ff | (nBitsTotalL << 24 | nBitsTotalL >>> 8) & 0xff00ff00;\n data.sigBytes = (dataWords.length + 1) * 4;\n\n // Hash final blocks\n this._process();\n\n // Shortcuts\n var hash = this._hash;\n var H = hash.words;\n\n // Swap endian\n for (var i = 0; i < 4; i++) {\n // Shortcut\n var H_i = H[i];\n H[i] = (H_i << 8 | H_i >>> 24) & 0x00ff00ff | (H_i << 24 | H_i >>> 8) & 0xff00ff00;\n }\n\n // Return final computed hash\n return hash;\n },\n clone: function clone() {\n var clone = Hasher.clone.call(this);\n clone._hash = this._hash.clone();\n return clone;\n }\n });\n function FF(a, b, c, d, x, s, t) {\n var n = a + (b & c | ~b & d) + x + t;\n return (n << s | n >>> 32 - s) + b;\n }\n function GG(a, b, c, d, x, s, t) {\n var n = a + (b & d | c & ~d) + x + t;\n return (n << s | n >>> 32 - s) + b;\n }\n function HH(a, b, c, d, x, s, t) {\n var n = a + (b ^ c ^ d) + x + t;\n return (n << s | n >>> 32 - s) + b;\n }\n function II(a, b, c, d, x, s, t) {\n var n = a + (c ^ (b | ~d)) + x + t;\n return (n << s | n >>> 32 - s) + b;\n }\n\n /**\n * Shortcut function to the hasher's object interface.\n *\n * @param {WordArray|string} message The message to hash.\n *\n * @return {WordArray} The hash.\n *\n * @static\n *\n * @example\n *\n * var hash = CryptoJS.MD5('message');\n * var hash = CryptoJS.MD5(wordArray);\n */\n C.MD5 = Hasher._createHelper(MD5);\n\n /**\n * Shortcut function to the HMAC's object interface.\n *\n * @param {WordArray|string} message The message to hash.\n * @param {WordArray|string} key The secret key.\n *\n * @return {WordArray} The HMAC.\n *\n * @static\n *\n * @example\n *\n * var hmac = CryptoJS.HmacMD5(message, key);\n */\n C.HmacMD5 = Hasher._createHmacHelper(MD5);\n })(Math);\n (function () {\n // Shortcuts\n var C = CryptoJS;\n var C_lib = C.lib;\n var WordArray = C_lib.WordArray;\n var Hasher = C_lib.Hasher;\n var C_algo = C.algo;\n\n // Reusable object\n var W = [];\n\n /**\n * SHA-1 hash algorithm.\n */\n var SHA1 = C_algo.SHA1 = Hasher.extend({\n _doReset: function _doReset() {\n this._hash = new WordArray.init([0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0]);\n },\n _doProcessBlock: function _doProcessBlock(M, offset) {\n // Shortcut\n var H = this._hash.words;\n\n // Working variables\n var a = H[0];\n var b = H[1];\n var c = H[2];\n var d = H[3];\n var e = H[4];\n\n // Computation\n for (var i = 0; i < 80; i++) {\n if (i < 16) {\n W[i] = M[offset + i] | 0;\n } else {\n var n = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16];\n W[i] = n << 1 | n >>> 31;\n }\n var t = (a << 5 | a >>> 27) + e + W[i];\n if (i < 20) {\n t += (b & c | ~b & d) + 0x5a827999;\n } else if (i < 40) {\n t += (b ^ c ^ d) + 0x6ed9eba1;\n } else if (i < 60) {\n t += (b & c | b & d | c & d) - 0x70e44324;\n } else /* if (i < 80) */{\n t += (b ^ c ^ d) - 0x359d3e2a;\n }\n e = d;\n d = c;\n c = b << 30 | b >>> 2;\n b = a;\n a = t;\n }\n\n // Intermediate hash value\n H[0] = H[0] + a | 0;\n H[1] = H[1] + b | 0;\n H[2] = H[2] + c | 0;\n H[3] = H[3] + d | 0;\n H[4] = H[4] + e | 0;\n },\n _doFinalize: function _doFinalize() {\n // Shortcuts\n var data = this._data;\n var dataWords = data.words;\n var nBitsTotal = this._nDataBytes * 8;\n var nBitsLeft = data.sigBytes * 8;\n\n // Add padding\n dataWords[nBitsLeft >>> 5] |= 0x80 << 24 - nBitsLeft % 32;\n dataWords[(nBitsLeft + 64 >>> 9 << 4) + 14] = Math.floor(nBitsTotal / 0x100000000);\n dataWords[(nBitsLeft + 64 >>> 9 << 4) + 15] = nBitsTotal;\n data.sigBytes = dataWords.length * 4;\n\n // Hash final blocks\n this._process();\n\n // Return final computed hash\n return this._hash;\n },\n clone: function clone() {\n var clone = Hasher.clone.call(this);\n clone._hash = this._hash.clone();\n return clone;\n }\n });\n\n /**\n * Shortcut function to the hasher's object interface.\n *\n * @param {WordArray|string} message The message to hash.\n *\n * @return {WordArray} The hash.\n *\n * @static\n *\n * @example\n *\n * var hash = CryptoJS.SHA1('message');\n * var hash = CryptoJS.SHA1(wordArray);\n */\n C.SHA1 = Hasher._createHelper(SHA1);\n\n /**\n * Shortcut function to the HMAC's object interface.\n *\n * @param {WordArray|string} message The message to hash.\n * @param {WordArray|string} key The secret key.\n *\n * @return {WordArray} The HMAC.\n *\n * @static\n *\n * @example\n *\n * var hmac = CryptoJS.HmacSHA1(message, key);\n */\n C.HmacSHA1 = Hasher._createHmacHelper(SHA1);\n })();\n (function (Math) {\n // Shortcuts\n var C = CryptoJS;\n var C_lib = C.lib;\n var WordArray = C_lib.WordArray;\n var Hasher = C_lib.Hasher;\n var C_algo = C.algo;\n\n // Initialization and round constants tables\n var H = [];\n var K = [];\n\n // Compute constants\n (function () {\n function isPrime(n) {\n var sqrtN = Math.sqrt(n);\n for (var factor = 2; factor <= sqrtN; factor++) {\n if (!(n % factor)) {\n return false;\n }\n }\n return true;\n }\n function getFractionalBits(n) {\n return (n - (n | 0)) * 0x100000000 | 0;\n }\n var n = 2;\n var nPrime = 0;\n while (nPrime < 64) {\n if (isPrime(n)) {\n if (nPrime < 8) {\n H[nPrime] = getFractionalBits(Math.pow(n, 1 / 2));\n }\n K[nPrime] = getFractionalBits(Math.pow(n, 1 / 3));\n nPrime++;\n }\n n++;\n }\n })();\n\n // Reusable object\n var W = [];\n\n /**\n * SHA-256 hash algorithm.\n */\n var SHA256 = C_algo.SHA256 = Hasher.extend({\n _doReset: function _doReset() {\n this._hash = new WordArray.init(H.slice(0));\n },\n _doProcessBlock: function _doProcessBlock(M, offset) {\n // Shortcut\n var H = this._hash.words;\n\n // Working variables\n var a = H[0];\n var b = H[1];\n var c = H[2];\n var d = H[3];\n var e = H[4];\n var f = H[5];\n var g = H[6];\n var h = H[7];\n\n // Computation\n for (var i = 0; i < 64; i++) {\n if (i < 16) {\n W[i] = M[offset + i] | 0;\n } else {\n var gamma0x = W[i - 15];\n var gamma0 = (gamma0x << 25 | gamma0x >>> 7) ^ (gamma0x << 14 | gamma0x >>> 18) ^ gamma0x >>> 3;\n var gamma1x = W[i - 2];\n var gamma1 = (gamma1x << 15 | gamma1x >>> 17) ^ (gamma1x << 13 | gamma1x >>> 19) ^ gamma1x >>> 10;\n W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16];\n }\n var ch = e & f ^ ~e & g;\n var maj = a & b ^ a & c ^ b & c;\n var sigma0 = (a << 30 | a >>> 2) ^ (a << 19 | a >>> 13) ^ (a << 10 | a >>> 22);\n var sigma1 = (e << 26 | e >>> 6) ^ (e << 21 | e >>> 11) ^ (e << 7 | e >>> 25);\n var t1 = h + sigma1 + ch + K[i] + W[i];\n var t2 = sigma0 + maj;\n h = g;\n g = f;\n f = e;\n e = d + t1 | 0;\n d = c;\n c = b;\n b = a;\n a = t1 + t2 | 0;\n }\n\n // Intermediate hash value\n H[0] = H[0] + a | 0;\n H[1] = H[1] + b | 0;\n H[2] = H[2] + c | 0;\n H[3] = H[3] + d | 0;\n H[4] = H[4] + e | 0;\n H[5] = H[5] + f | 0;\n H[6] = H[6] + g | 0;\n H[7] = H[7] + h | 0;\n },\n _doFinalize: function _doFinalize() {\n // Shortcuts\n var data = this._data;\n var dataWords = data.words;\n var nBitsTotal = this._nDataBytes * 8;\n var nBitsLeft = data.sigBytes * 8;\n\n // Add padding\n dataWords[nBitsLeft >>> 5] |= 0x80 << 24 - nBitsLeft % 32;\n dataWords[(nBitsLeft + 64 >>> 9 << 4) + 14] = Math.floor(nBitsTotal / 0x100000000);\n dataWords[(nBitsLeft + 64 >>> 9 << 4) + 15] = nBitsTotal;\n data.sigBytes = dataWords.length * 4;\n\n // Hash final blocks\n this._process();\n\n // Return final computed hash\n return this._hash;\n },\n clone: function clone() {\n var clone = Hasher.clone.call(this);\n clone._hash = this._hash.clone();\n return clone;\n }\n });\n\n /**\n * Shortcut function to the hasher's object interface.\n *\n * @param {WordArray|string} message The message to hash.\n *\n * @return {WordArray} The hash.\n *\n * @static\n *\n * @example\n *\n * var hash = CryptoJS.SHA256('message');\n * var hash = CryptoJS.SHA256(wordArray);\n */\n C.SHA256 = Hasher._createHelper(SHA256);\n\n /**\n * Shortcut function to the HMAC's object interface.\n *\n * @param {WordArray|string} message The message to hash.\n * @param {WordArray|string} key The secret key.\n *\n * @return {WordArray} The HMAC.\n *\n * @static\n *\n * @example\n *\n * var hmac = CryptoJS.HmacSHA256(message, key);\n */\n C.HmacSHA256 = Hasher._createHmacHelper(SHA256);\n })(Math);\n (function () {\n // Shortcuts\n var C = CryptoJS;\n var C_lib = C.lib;\n var WordArray = C_lib.WordArray;\n var C_enc = C.enc;\n\n /**\n * UTF-16 BE encoding strategy.\n */\n var Utf16BE = C_enc.Utf16 = C_enc.Utf16BE = {\n /**\n * Converts a word array to a UTF-16 BE string.\n *\n * @param {WordArray} wordArray The word array.\n *\n * @return {string} The UTF-16 BE string.\n *\n * @static\n *\n * @example\n *\n * var utf16String = CryptoJS.enc.Utf16.stringify(wordArray);\n */\n stringify: function stringify(wordArray) {\n // Shortcuts\n var words = wordArray.words;\n var sigBytes = wordArray.sigBytes;\n\n // Convert\n var utf16Chars = [];\n for (var i = 0; i < sigBytes; i += 2) {\n var codePoint = words[i >>> 2] >>> 16 - i % 4 * 8 & 0xffff;\n utf16Chars.push(String.fromCharCode(codePoint));\n }\n return utf16Chars.join('');\n },\n /**\n * Converts a UTF-16 BE string to a word array.\n *\n * @param {string} utf16Str The UTF-16 BE string.\n *\n * @return {WordArray} The word array.\n *\n * @static\n *\n * @example\n *\n * var wordArray = CryptoJS.enc.Utf16.parse(utf16String);\n */\n parse: function parse(utf16Str) {\n // Shortcut\n var utf16StrLength = utf16Str.length;\n\n // Convert\n var words = [];\n for (var i = 0; i < utf16StrLength; i++) {\n words[i >>> 1] |= utf16Str.charCodeAt(i) << 16 - i % 2 * 16;\n }\n return WordArray.create(words, utf16StrLength * 2);\n }\n };\n\n /**\n * UTF-16 LE encoding strategy.\n */\n C_enc.Utf16LE = {\n /**\n * Converts a word array to a UTF-16 LE string.\n *\n * @param {WordArray} wordArray The word array.\n *\n * @return {string} The UTF-16 LE string.\n *\n * @static\n *\n * @example\n *\n * var utf16Str = CryptoJS.enc.Utf16LE.stringify(wordArray);\n */\n stringify: function stringify(wordArray) {\n // Shortcuts\n var words = wordArray.words;\n var sigBytes = wordArray.sigBytes;\n\n // Convert\n var utf16Chars = [];\n for (var i = 0; i < sigBytes; i += 2) {\n var codePoint = swapEndian(words[i >>> 2] >>> 16 - i % 4 * 8 & 0xffff);\n utf16Chars.push(String.fromCharCode(codePoint));\n }\n return utf16Chars.join('');\n },\n /**\n * Converts a UTF-16 LE string to a word array.\n *\n * @param {string} utf16Str The UTF-16 LE string.\n *\n * @return {WordArray} The word array.\n *\n * @static\n *\n * @example\n *\n * var wordArray = CryptoJS.enc.Utf16LE.parse(utf16Str);\n */\n parse: function parse(utf16Str) {\n // Shortcut\n var utf16StrLength = utf16Str.length;\n\n // Convert\n var words = [];\n for (var i = 0; i < utf16StrLength; i++) {\n words[i >>> 1] |= swapEndian(utf16Str.charCodeAt(i) << 16 - i % 2 * 16);\n }\n return WordArray.create(words, utf16StrLength * 2);\n }\n };\n function swapEndian(word) {\n return word << 8 & 0xff00ff00 | word >>> 8 & 0x00ff00ff;\n }\n })();\n (function () {\n // Check if typed arrays are supported\n if (typeof ArrayBuffer != 'function') {\n return;\n }\n\n // Shortcuts\n var C = CryptoJS;\n var C_lib = C.lib;\n var WordArray = C_lib.WordArray;\n\n // Reference original init\n var superInit = WordArray.init;\n\n // Augment WordArray.init to handle typed arrays\n var subInit = WordArray.init = function (typedArray) {\n // Convert buffers to uint8\n if (typedArray instanceof ArrayBuffer) {\n typedArray = new Uint8Array(typedArray);\n }\n\n // Convert other array views to uint8\n if (typedArray instanceof Int8Array || typeof Uint8ClampedArray !== \"undefined\" && typedArray instanceof Uint8ClampedArray || typedArray instanceof Int16Array || typedArray instanceof Uint16Array || typedArray instanceof Int32Array || typedArray instanceof Uint32Array || typedArray instanceof Float32Array || typedArray instanceof Float64Array) {\n typedArray = new Uint8Array(typedArray.buffer, typedArray.byteOffset, typedArray.byteLength);\n }\n\n // Handle Uint8Array\n if (typedArray instanceof Uint8Array) {\n // Shortcut\n var typedArrayByteLength = typedArray.byteLength;\n\n // Extract bytes\n var words = [];\n for (var i = 0; i < typedArrayByteLength; i++) {\n words[i >>> 2] |= typedArray[i] << 24 - i % 4 * 8;\n }\n\n // Initialize this word array\n superInit.call(this, words, typedArrayByteLength);\n } else {\n // Else call normal init\n superInit.apply(this, arguments);\n }\n };\n subInit.prototype = WordArray;\n })();\n\n /** @preserve\n (c) 2012 by Cédric Mesnil. All rights reserved.\n \tRedistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\n \t - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\n - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\n \tTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n (function (Math) {\n // Shortcuts\n var C = CryptoJS;\n var C_lib = C.lib;\n var WordArray = C_lib.WordArray;\n var Hasher = C_lib.Hasher;\n var C_algo = C.algo;\n\n // Constants table\n var _zl = WordArray.create([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8, 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12, 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2, 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13]);\n var _zr = WordArray.create([5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12, 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2, 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13, 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14, 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11]);\n var _sl = WordArray.create([11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8, 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12, 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5, 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12, 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6]);\n var _sr = WordArray.create([8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6, 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11, 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5, 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8, 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11]);\n var _hl = WordArray.create([0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]);\n var _hr = WordArray.create([0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]);\n\n /**\n * RIPEMD160 hash algorithm.\n */\n var RIPEMD160 = C_algo.RIPEMD160 = Hasher.extend({\n _doReset: function _doReset() {\n this._hash = WordArray.create([0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]);\n },\n _doProcessBlock: function _doProcessBlock(M, offset) {\n // Swap endian\n for (var i = 0; i < 16; i++) {\n // Shortcuts\n var offset_i = offset + i;\n var M_offset_i = M[offset_i];\n\n // Swap\n M[offset_i] = (M_offset_i << 8 | M_offset_i >>> 24) & 0x00ff00ff | (M_offset_i << 24 | M_offset_i >>> 8) & 0xff00ff00;\n }\n // Shortcut\n var H = this._hash.words;\n var hl = _hl.words;\n var hr = _hr.words;\n var zl = _zl.words;\n var zr = _zr.words;\n var sl = _sl.words;\n var sr = _sr.words;\n\n // Working variables\n var al, bl, cl, dl, el;\n var ar, br, cr, dr, er;\n ar = al = H[0];\n br = bl = H[1];\n cr = cl = H[2];\n dr = dl = H[3];\n er = el = H[4];\n // Computation\n var t;\n for (var i = 0; i < 80; i += 1) {\n t = al + M[offset + zl[i]] | 0;\n if (i < 16) {\n t += f1(bl, cl, dl) + hl[0];\n } else if (i < 32) {\n t += f2(bl, cl, dl) + hl[1];\n } else if (i < 48) {\n t += f3(bl, cl, dl) + hl[2];\n } else if (i < 64) {\n t += f4(bl, cl, dl) + hl[3];\n } else {\n // if (i<80) {\n t += f5(bl, cl, dl) + hl[4];\n }\n t = t | 0;\n t = rotl(t, sl[i]);\n t = t + el | 0;\n al = el;\n el = dl;\n dl = rotl(cl, 10);\n cl = bl;\n bl = t;\n t = ar + M[offset + zr[i]] | 0;\n if (i < 16) {\n t += f5(br, cr, dr) + hr[0];\n } else if (i < 32) {\n t += f4(br, cr, dr) + hr[1];\n } else if (i < 48) {\n t += f3(br, cr, dr) + hr[2];\n } else if (i < 64) {\n t += f2(br, cr, dr) + hr[3];\n } else {\n // if (i<80) {\n t += f1(br, cr, dr) + hr[4];\n }\n t = t | 0;\n t = rotl(t, sr[i]);\n t = t + er | 0;\n ar = er;\n er = dr;\n dr = rotl(cr, 10);\n cr = br;\n br = t;\n }\n // Intermediate hash value\n t = H[1] + cl + dr | 0;\n H[1] = H[2] + dl + er | 0;\n H[2] = H[3] + el + ar | 0;\n H[3] = H[4] + al + br | 0;\n H[4] = H[0] + bl + cr | 0;\n H[0] = t;\n },\n _doFinalize: function _doFinalize() {\n // Shortcuts\n var data = this._data;\n var dataWords = data.words;\n var nBitsTotal = this._nDataBytes * 8;\n var nBitsLeft = data.sigBytes * 8;\n\n // Add padding\n dataWords[nBitsLeft >>> 5] |= 0x80 << 24 - nBitsLeft % 32;\n dataWords[(nBitsLeft + 64 >>> 9 << 4) + 14] = (nBitsTotal << 8 | nBitsTotal >>> 24) & 0x00ff00ff | (nBitsTotal << 24 | nBitsTotal >>> 8) & 0xff00ff00;\n data.sigBytes = (dataWords.length + 1) * 4;\n\n // Hash final blocks\n this._process();\n\n // Shortcuts\n var hash = this._hash;\n var H = hash.words;\n\n // Swap endian\n for (var i = 0; i < 5; i++) {\n // Shortcut\n var H_i = H[i];\n\n // Swap\n H[i] = (H_i << 8 | H_i >>> 24) & 0x00ff00ff | (H_i << 24 | H_i >>> 8) & 0xff00ff00;\n }\n\n // Return final computed hash\n return hash;\n },\n clone: function clone() {\n var clone = Hasher.clone.call(this);\n clone._hash = this._hash.clone();\n return clone;\n }\n });\n function f1(x, y, z) {\n return x ^ y ^ z;\n }\n function f2(x, y, z) {\n return x & y | ~x & z;\n }\n function f3(x, y, z) {\n return (x | ~y) ^ z;\n }\n function f4(x, y, z) {\n return x & z | y & ~z;\n }\n function f5(x, y, z) {\n return x ^ (y | ~z);\n }\n function rotl(x, n) {\n return x << n | x >>> 32 - n;\n }\n\n /**\n * Shortcut function to the hasher's object interface.\n *\n * @param {WordArray|string} message The message to hash.\n *\n * @return {WordArray} The hash.\n *\n * @static\n *\n * @example\n *\n * var hash = CryptoJS.RIPEMD160('message');\n * var hash = CryptoJS.RIPEMD160(wordArray);\n */\n C.RIPEMD160 = Hasher._createHelper(RIPEMD160);\n\n /**\n * Shortcut function to the HMAC's object interface.\n *\n * @param {WordArray|string} message The message to hash.\n * @param {WordArray|string} key The secret key.\n *\n * @return {WordArray} The HMAC.\n *\n * @static\n *\n * @example\n *\n * var hmac = CryptoJS.HmacRIPEMD160(message, key);\n */\n C.HmacRIPEMD160 = Hasher._createHmacHelper(RIPEMD160);\n })(Math);\n (function () {\n // Shortcuts\n var C = CryptoJS;\n var C_lib = C.lib;\n var Base = C_lib.Base;\n var C_enc = C.enc;\n var Utf8 = C_enc.Utf8;\n var C_algo = C.algo;\n\n /**\n * HMAC algorithm.\n */\n var HMAC = C_algo.HMAC = Base.extend({\n /**\n * Initializes a newly created HMAC.\n *\n * @param {Hasher} hasher The hash algorithm to use.\n * @param {WordArray|string} key The secret key.\n *\n * @example\n *\n * var hmacHasher = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, key);\n */\n init: function init(hasher, key) {\n // Init hasher\n hasher = this._hasher = new hasher.init();\n\n // Convert string to WordArray, else assume WordArray already\n if (typeof key == 'string') {\n key = Utf8.parse(key);\n }\n\n // Shortcuts\n var hasherBlockSize = hasher.blockSize;\n var hasherBlockSizeBytes = hasherBlockSize * 4;\n\n // Allow arbitrary length keys\n if (key.sigBytes > hasherBlockSizeBytes) {\n key = hasher.finalize(key);\n }\n\n // Clamp excess bits\n key.clamp();\n\n // Clone key for inner and outer pads\n var oKey = this._oKey = key.clone();\n var iKey = this._iKey = key.clone();\n\n // Shortcuts\n var oKeyWords = oKey.words;\n var iKeyWords = iKey.words;\n\n // XOR keys with pad constants\n for (var i = 0; i < hasherBlockSize; i++) {\n oKeyWords[i] ^= 0x5c5c5c5c;\n iKeyWords[i] ^= 0x36363636;\n }\n oKey.sigBytes = iKey.sigBytes = hasherBlockSizeBytes;\n\n // Set initial values\n this.reset();\n },\n /**\n * Resets this HMAC to its initial state.\n *\n * @example\n *\n * hmacHasher.reset();\n */\n reset: function reset() {\n // Shortcut\n var hasher = this._hasher;\n\n // Reset\n hasher.reset();\n hasher.update(this._iKey);\n },\n /**\n * Updates this HMAC with a message.\n *\n * @param {WordArray|string} messageUpdate The message to append.\n *\n * @return {HMAC} This HMAC instance.\n *\n * @example\n *\n * hmacHasher.update('message');\n * hmacHasher.update(wordArray);\n */\n update: function update(messageUpdate) {\n this._hasher.update(messageUpdate);\n\n // Chainable\n return this;\n },\n /**\n * Finalizes the HMAC computation.\n * Note that the finalize operation is effectively a destructive, read-once operation.\n *\n * @param {WordArray|string} messageUpdate (Optional) A final message update.\n *\n * @return {WordArray} The HMAC.\n *\n * @example\n *\n * var hmac = hmacHasher.finalize();\n * var hmac = hmacHasher.finalize('message');\n * var hmac = hmacHasher.finalize(wordArray);\n */\n finalize: function finalize(messageUpdate) {\n // Shortcut\n var hasher = this._hasher;\n\n // Compute HMAC\n var innerHash = hasher.finalize(messageUpdate);\n hasher.reset();\n var hmac = hasher.finalize(this._oKey.clone().concat(innerHash));\n return hmac;\n }\n });\n })();\n (function () {\n // Shortcuts\n var C = CryptoJS;\n var C_lib = C.lib;\n var Base = C_lib.Base;\n var WordArray = C_lib.WordArray;\n var C_algo = C.algo;\n var SHA1 = C_algo.SHA1;\n var HMAC = C_algo.HMAC;\n\n /**\n * Password-Based Key Derivation Function 2 algorithm.\n */\n var PBKDF2 = C_algo.PBKDF2 = Base.extend({\n /**\n * Configuration options.\n *\n * @property {number} keySize The key size in words to generate. Default: 4 (128 bits)\n * @property {Hasher} hasher The hasher to use. Default: SHA1\n * @property {number} iterations The number of iterations to perform. Default: 1\n */\n cfg: Base.extend({\n keySize: 128 / 32,\n hasher: SHA1,\n iterations: 1\n }),\n /**\n * Initializes a newly created key derivation function.\n *\n * @param {Object} cfg (Optional) The configuration options to use for the derivation.\n *\n * @example\n *\n * var kdf = CryptoJS.algo.PBKDF2.create();\n * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8 });\n * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8, iterations: 1000 });\n */\n init: function init(cfg) {\n this.cfg = this.cfg.extend(cfg);\n },\n /**\n * Computes the Password-Based Key Derivation Function 2.\n *\n * @param {WordArray|string} password The password.\n * @param {WordArray|string} salt A salt.\n *\n * @return {WordArray} The derived key.\n *\n * @example\n *\n * var key = kdf.compute(password, salt);\n */\n compute: function compute(password, salt) {\n // Shortcut\n var cfg = this.cfg;\n\n // Init HMAC\n var hmac = HMAC.create(cfg.hasher, password);\n\n // Initial values\n var derivedKey = WordArray.create();\n var blockIndex = WordArray.create([0x00000001]);\n\n // Shortcuts\n var derivedKeyWords = derivedKey.words;\n var blockIndexWords = blockIndex.words;\n var keySize = cfg.keySize;\n var iterations = cfg.iterations;\n\n // Generate key\n while (derivedKeyWords.length < keySize) {\n var block = hmac.update(salt).finalize(blockIndex);\n hmac.reset();\n\n // Shortcuts\n var blockWords = block.words;\n var blockWordsLength = blockWords.length;\n\n // Iterations\n var intermediate = block;\n for (var i = 1; i < iterations; i++) {\n intermediate = hmac.finalize(intermediate);\n hmac.reset();\n\n // Shortcut\n var intermediateWords = intermediate.words;\n\n // XOR intermediate with block\n for (var j = 0; j < blockWordsLength; j++) {\n blockWords[j] ^= intermediateWords[j];\n }\n }\n derivedKey.concat(block);\n blockIndexWords[0]++;\n }\n derivedKey.sigBytes = keySize * 4;\n return derivedKey;\n }\n });\n\n /**\n * Computes the Password-Based Key Derivation Function 2.\n *\n * @param {WordArray|string} password The password.\n * @param {WordArray|string} salt A salt.\n * @param {Object} cfg (Optional) The configuration options to use for this computation.\n *\n * @return {WordArray} The derived key.\n *\n * @static\n *\n * @example\n *\n * var key = CryptoJS.PBKDF2(password, salt);\n * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8 });\n * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8, iterations: 1000 });\n */\n C.PBKDF2 = function (password, salt, cfg) {\n return PBKDF2.create(cfg).compute(password, salt);\n };\n })();\n (function () {\n // Shortcuts\n var C = CryptoJS;\n var C_lib = C.lib;\n var Base = C_lib.Base;\n var WordArray = C_lib.WordArray;\n var C_algo = C.algo;\n var MD5 = C_algo.MD5;\n\n /**\n * This key derivation function is meant to conform with EVP_BytesToKey.\n * www.openssl.org/docs/crypto/EVP_BytesToKey.html\n */\n var EvpKDF = C_algo.EvpKDF = Base.extend({\n /**\n * Configuration options.\n *\n * @property {number} keySize The key size in words to generate. Default: 4 (128 bits)\n * @property {Hasher} hasher The hash algorithm to use. Default: MD5\n * @property {number} iterations The number of iterations to perform. Default: 1\n */\n cfg: Base.extend({\n keySize: 128 / 32,\n hasher: MD5,\n iterations: 1\n }),\n /**\n * Initializes a newly created key derivation function.\n *\n * @param {Object} cfg (Optional) The configuration options to use for the derivation.\n *\n * @example\n *\n * var kdf = CryptoJS.algo.EvpKDF.create();\n * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8 });\n * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8, iterations: 1000 });\n */\n init: function init(cfg) {\n this.cfg = this.cfg.extend(cfg);\n },\n /**\n * Derives a key from a password.\n *\n * @param {WordArray|string} password The password.\n * @param {WordArray|string} salt A salt.\n *\n * @return {WordArray} The derived key.\n *\n * @example\n *\n * var key = kdf.compute(password, salt);\n */\n compute: function compute(password, salt) {\n var block;\n\n // Shortcut\n var cfg = this.cfg;\n\n // Init hasher\n var hasher = cfg.hasher.create();\n\n // Initial values\n var derivedKey = WordArray.create();\n\n // Shortcuts\n var derivedKeyWords = derivedKey.words;\n var keySize = cfg.keySize;\n var iterations = cfg.iterations;\n\n // Generate key\n while (derivedKeyWords.length < keySize) {\n if (block) {\n hasher.update(block);\n }\n block = hasher.update(password).finalize(salt);\n hasher.reset();\n\n // Iterations\n for (var i = 1; i < iterations; i++) {\n block = hasher.finalize(block);\n hasher.reset();\n }\n derivedKey.concat(block);\n }\n derivedKey.sigBytes = keySize * 4;\n return derivedKey;\n }\n });\n\n /**\n * Derives a key from a password.\n *\n * @param {WordArray|string} password The password.\n * @param {WordArray|string} salt A salt.\n * @param {Object} cfg (Optional) The configuration options to use for this computation.\n *\n * @return {WordArray} The derived key.\n *\n * @static\n *\n * @example\n *\n * var key = CryptoJS.EvpKDF(password, salt);\n * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8 });\n * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8, iterations: 1000 });\n */\n C.EvpKDF = function (password, salt, cfg) {\n return EvpKDF.create(cfg).compute(password, salt);\n };\n })();\n (function () {\n // Shortcuts\n var C = CryptoJS;\n var C_lib = C.lib;\n var WordArray = C_lib.WordArray;\n var C_algo = C.algo;\n var SHA256 = C_algo.SHA256;\n\n /**\n * SHA-224 hash algorithm.\n */\n var SHA224 = C_algo.SHA224 = SHA256.extend({\n _doReset: function _doReset() {\n this._hash = new WordArray.init([0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4]);\n },\n _doFinalize: function _doFinalize() {\n var hash = SHA256._doFinalize.call(this);\n hash.sigBytes -= 4;\n return hash;\n }\n });\n\n /**\n * Shortcut function to the hasher's object interface.\n *\n * @param {WordArray|string} message The message to hash.\n *\n * @return {WordArray} The hash.\n *\n * @static\n *\n * @example\n *\n * var hash = CryptoJS.SHA224('message');\n * var hash = CryptoJS.SHA224(wordArray);\n */\n C.SHA224 = SHA256._createHelper(SHA224);\n\n /**\n * Shortcut function to the HMAC's object interface.\n *\n * @param {WordArray|string} message The message to hash.\n * @param {WordArray|string} key The secret key.\n *\n * @return {WordArray} The HMAC.\n *\n * @static\n *\n * @example\n *\n * var hmac = CryptoJS.HmacSHA224(message, key);\n */\n C.HmacSHA224 = SHA256._createHmacHelper(SHA224);\n })();\n (function (undefined) {\n // Shortcuts\n var C = CryptoJS;\n var C_lib = C.lib;\n var Base = C_lib.Base;\n var X32WordArray = C_lib.WordArray;\n\n /**\n * x64 namespace.\n */\n var C_x64 = C.x64 = {};\n\n /**\n * A 64-bit word.\n */\n var X64Word = C_x64.Word = Base.extend({\n /**\n * Initializes a newly created 64-bit word.\n *\n * @param {number} high The high 32 bits.\n * @param {number} low The low 32 bits.\n *\n * @example\n *\n * var x64Word = CryptoJS.x64.Word.create(0x00010203, 0x04050607);\n */\n init: function init(high, low) {\n this.high = high;\n this.low = low;\n }\n\n /**\n * Bitwise NOTs this word.\n *\n * @return {X64Word} A new x64-Word object after negating.\n *\n * @example\n *\n * var negated = x64Word.not();\n */\n // not: function () {\n // var high = ~this.high;\n // var low = ~this.low;\n\n // return X64Word.create(high, low);\n // },\n\n /**\n * Bitwise ANDs this word with the passed word.\n *\n * @param {X64Word} word The x64-Word to AND with this word.\n *\n * @return {X64Word} A new x64-Word object after ANDing.\n *\n * @example\n *\n * var anded = x64Word.and(anotherX64Word);\n */\n // and: function (word) {\n // var high = this.high & word.high;\n // var low = this.low & word.low;\n\n // return X64Word.create(high, low);\n // },\n\n /**\n * Bitwise ORs this word with the passed word.\n *\n * @param {X64Word} word The x64-Word to OR with this word.\n *\n * @return {X64Word} A new x64-Word object after ORing.\n *\n * @example\n *\n * var ored = x64Word.or(anotherX64Word);\n */\n // or: function (word) {\n // var high = this.high | word.high;\n // var low = this.low | word.low;\n\n // return X64Word.create(high, low);\n // },\n\n /**\n * Bitwise XORs this word with the passed word.\n *\n * @param {X64Word} word The x64-Word to XOR with this word.\n *\n * @return {X64Word} A new x64-Word object after XORing.\n *\n * @example\n *\n * var xored = x64Word.xor(anotherX64Word);\n */\n // xor: function (word) {\n // var high = this.high ^ word.high;\n // var low = this.low ^ word.low;\n\n // return X64Word.create(high, low);\n // },\n\n /**\n * Shifts this word n bits to the left.\n *\n * @param {number} n The number of bits to shift.\n *\n * @return {X64Word} A new x64-Word object after shifting.\n *\n * @example\n *\n * var shifted = x64Word.shiftL(25);\n */\n // shiftL: function (n) {\n // if (n < 32) {\n // var high = (this.high << n) | (this.low >>> (32 - n));\n // var low = this.low << n;\n // } else {\n // var high = this.low << (n - 32);\n // var low = 0;\n // }\n\n // return X64Word.create(high, low);\n // },\n\n /**\n * Shifts this word n bits to the right.\n *\n * @param {number} n The number of bits to shift.\n *\n * @return {X64Word} A new x64-Word object after shifting.\n *\n * @example\n *\n * var shifted = x64Word.shiftR(7);\n */\n // shiftR: function (n) {\n // if (n < 32) {\n // var low = (this.low >>> n) | (this.high << (32 - n));\n // var high = this.high >>> n;\n // } else {\n // var low = this.high >>> (n - 32);\n // var high = 0;\n // }\n\n // return X64Word.create(high, low);\n // },\n\n /**\n * Rotates this word n bits to the left.\n *\n * @param {number} n The number of bits to rotate.\n *\n * @return {X64Word} A new x64-Word object after rotating.\n *\n * @example\n *\n * var rotated = x64Word.rotL(25);\n */\n // rotL: function (n) {\n // return this.shiftL(n).or(this.shiftR(64 - n));\n // },\n\n /**\n * Rotates this word n bits to the right.\n *\n * @param {number} n The number of bits to rotate.\n *\n * @return {X64Word} A new x64-Word object after rotating.\n *\n * @example\n *\n * var rotated = x64Word.rotR(7);\n */\n // rotR: function (n) {\n // return this.shiftR(n).or(this.shiftL(64 - n));\n // },\n\n /**\n * Adds this word with the passed word.\n *\n * @param {X64Word} word The x64-Word to add with this word.\n *\n * @return {X64Word} A new x64-Word object after adding.\n *\n * @example\n *\n * var added = x64Word.add(anotherX64Word);\n */\n // add: function (word) {\n // var low = (this.low + word.low) | 0;\n // var carry = (low >>> 0) < (this.low >>> 0) ? 1 : 0;\n // var high = (this.high + word.high + carry) | 0;\n\n // return X64Word.create(high, low);\n // }\n });\n\n /**\n * An array of 64-bit words.\n *\n * @property {Array} words The array of CryptoJS.x64.Word objects.\n * @property {number} sigBytes The number of significant bytes in this word array.\n */\n var X64WordArray = C_x64.WordArray = Base.extend({\n /**\n * Initializes a newly created word array.\n *\n * @param {Array} words (Optional) An array of CryptoJS.x64.Word objects.\n * @param {number} sigBytes (Optional) The number of significant bytes in the words.\n *\n * @example\n *\n * var wordArray = CryptoJS.x64.WordArray.create();\n *\n * var wordArray = CryptoJS.x64.WordArray.create([\n * CryptoJS.x64.Word.create(0x00010203, 0x04050607),\n * CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f)\n * ]);\n *\n * var wordArray = CryptoJS.x64.WordArray.create([\n * CryptoJS.x64.Word.create(0x00010203, 0x04050607),\n * CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f)\n * ], 10);\n */\n init: function init(words, sigBytes) {\n words = this.words = words || [];\n if (sigBytes != undefined) {\n this.sigBytes = sigBytes;\n } else {\n this.sigBytes = words.length * 8;\n }\n },\n /**\n * Converts this 64-bit word array to a 32-bit word array.\n *\n * @return {CryptoJS.lib.WordArray} This word array's data as a 32-bit word array.\n *\n * @example\n *\n * var x32WordArray = x64WordArray.toX32();\n */\n toX32: function toX32() {\n // Shortcuts\n var x64Words = this.words;\n var x64WordsLength = x64Words.length;\n\n // Convert\n var x32Words = [];\n for (var i = 0; i < x64WordsLength; i++) {\n var x64Word = x64Words[i];\n x32Words.push(x64Word.high);\n x32Words.push(x64Word.low);\n }\n return X32WordArray.create(x32Words, this.sigBytes);\n },\n /**\n * Creates a copy of this word array.\n *\n * @return {X64WordArray} The clone.\n *\n * @example\n *\n * var clone = x64WordArray.clone();\n */\n clone: function clone() {\n var clone = Base.clone.call(this);\n\n // Clone \"words\" array\n var words = clone.words = this.words.slice(0);\n\n // Clone each X64Word object\n var wordsLength = words.length;\n for (var i = 0; i < wordsLength; i++) {\n words[i] = words[i].clone();\n }\n return clone;\n }\n });\n })();\n (function (Math) {\n // Shortcuts\n var C = CryptoJS;\n var C_lib = C.lib;\n var WordArray = C_lib.WordArray;\n var Hasher = C_lib.Hasher;\n var C_x64 = C.x64;\n var X64Word = C_x64.Word;\n var C_algo = C.algo;\n\n // Constants tables\n var RHO_OFFSETS = [];\n var PI_INDEXES = [];\n var ROUND_CONSTANTS = [];\n\n // Compute Constants\n (function () {\n // Compute rho offset constants\n var x = 1,\n y = 0;\n for (var t = 0; t < 24; t++) {\n RHO_OFFSETS[x + 5 * y] = (t + 1) * (t + 2) / 2 % 64;\n var newX = y % 5;\n var newY = (2 * x + 3 * y) % 5;\n x = newX;\n y = newY;\n }\n\n // Compute pi index constants\n for (var x = 0; x < 5; x++) {\n for (var y = 0; y < 5; y++) {\n PI_INDEXES[x + 5 * y] = y + (2 * x + 3 * y) % 5 * 5;\n }\n }\n\n // Compute round constants\n var LFSR = 0x01;\n for (var i = 0; i < 24; i++) {\n var roundConstantMsw = 0;\n var roundConstantLsw = 0;\n for (var j = 0; j < 7; j++) {\n if (LFSR & 0x01) {\n var bitPosition = (1 << j) - 1;\n if (bitPosition < 32) {\n roundConstantLsw ^= 1 << bitPosition;\n } else /* if (bitPosition >= 32) */{\n roundConstantMsw ^= 1 << bitPosition - 32;\n }\n }\n\n // Compute next LFSR\n if (LFSR & 0x80) {\n // Primitive polynomial over GF(2): x^8 + x^6 + x^5 + x^4 + 1\n LFSR = LFSR << 1 ^ 0x71;\n } else {\n LFSR <<= 1;\n }\n }\n ROUND_CONSTANTS[i] = X64Word.create(roundConstantMsw, roundConstantLsw);\n }\n })();\n\n // Reusable objects for temporary values\n var T = [];\n (function () {\n for (var i = 0; i < 25; i++) {\n T[i] = X64Word.create();\n }\n })();\n\n /**\n * SHA-3 hash algorithm.\n */\n var SHA3 = C_algo.SHA3 = Hasher.extend({\n /**\n * Configuration options.\n *\n * @property {number} outputLength\n * The desired number of bits in the output hash.\n * Only values permitted are: 224, 256, 384, 512.\n * Default: 512\n */\n cfg: Hasher.cfg.extend({\n outputLength: 512\n }),\n _doReset: function _doReset() {\n var state = this._state = [];\n for (var i = 0; i < 25; i++) {\n state[i] = new X64Word.init();\n }\n this.blockSize = (1600 - 2 * this.cfg.outputLength) / 32;\n },\n _doProcessBlock: function _doProcessBlock(M, offset) {\n // Shortcuts\n var state = this._state;\n var nBlockSizeLanes = this.blockSize / 2;\n\n // Absorb\n for (var i = 0; i < nBlockSizeLanes; i++) {\n // Shortcuts\n var M2i = M[offset + 2 * i];\n var M2i1 = M[offset + 2 * i + 1];\n\n // Swap endian\n M2i = (M2i << 8 | M2i >>> 24) & 0x00ff00ff | (M2i << 24 | M2i >>> 8) & 0xff00ff00;\n M2i1 = (M2i1 << 8 | M2i1 >>> 24) & 0x00ff00ff | (M2i1 << 24 | M2i1 >>> 8) & 0xff00ff00;\n\n // Absorb message into state\n var lane = state[i];\n lane.high ^= M2i1;\n lane.low ^= M2i;\n }\n\n // Rounds\n for (var round = 0; round < 24; round++) {\n // Theta\n for (var x = 0; x < 5; x++) {\n // Mix column lanes\n var tMsw = 0,\n tLsw = 0;\n for (var y = 0; y < 5; y++) {\n var lane = state[x + 5 * y];\n tMsw ^= lane.high;\n tLsw ^= lane.low;\n }\n\n // Temporary values\n var Tx = T[x];\n Tx.high = tMsw;\n Tx.low = tLsw;\n }\n for (var x = 0; x < 5; x++) {\n // Shortcuts\n var Tx4 = T[(x + 4) % 5];\n var Tx1 = T[(x + 1) % 5];\n var Tx1Msw = Tx1.high;\n var Tx1Lsw = Tx1.low;\n\n // Mix surrounding columns\n var tMsw = Tx4.high ^ (Tx1Msw << 1 | Tx1Lsw >>> 31);\n var tLsw = Tx4.low ^ (Tx1Lsw << 1 | Tx1Msw >>> 31);\n for (var y = 0; y < 5; y++) {\n var lane = state[x + 5 * y];\n lane.high ^= tMsw;\n lane.low ^= tLsw;\n }\n }\n\n // Rho Pi\n for (var laneIndex = 1; laneIndex < 25; laneIndex++) {\n var tMsw;\n var tLsw;\n\n // Shortcuts\n var lane = state[laneIndex];\n var laneMsw = lane.high;\n var laneLsw = lane.low;\n var rhoOffset = RHO_OFFSETS[laneIndex];\n\n // Rotate lanes\n if (rhoOffset < 32) {\n tMsw = laneMsw << rhoOffset | laneLsw >>> 32 - rhoOffset;\n tLsw = laneLsw << rhoOffset | laneMsw >>> 32 - rhoOffset;\n } else /* if (rhoOffset >= 32) */{\n tMsw = laneLsw << rhoOffset - 32 | laneMsw >>> 64 - rhoOffset;\n tLsw = laneMsw << rhoOffset - 32 | laneLsw >>> 64 - rhoOffset;\n }\n\n // Transpose lanes\n var TPiLane = T[PI_INDEXES[laneIndex]];\n TPiLane.high = tMsw;\n TPiLane.low = tLsw;\n }\n\n // Rho pi at x = y = 0\n var T0 = T[0];\n var state0 = state[0];\n T0.high = state0.high;\n T0.low = state0.low;\n\n // Chi\n for (var x = 0; x < 5; x++) {\n for (var y = 0; y < 5; y++) {\n // Shortcuts\n var laneIndex = x + 5 * y;\n var lane = state[laneIndex];\n var TLane = T[laneIndex];\n var Tx1Lane = T[(x + 1) % 5 + 5 * y];\n var Tx2Lane = T[(x + 2) % 5 + 5 * y];\n\n // Mix rows\n lane.high = TLane.high ^ ~Tx1Lane.high & Tx2Lane.high;\n lane.low = TLane.low ^ ~Tx1Lane.low & Tx2Lane.low;\n }\n }\n\n // Iota\n var lane = state[0];\n var roundConstant = ROUND_CONSTANTS[round];\n lane.high ^= roundConstant.high;\n lane.low ^= roundConstant.low;\n }\n },\n _doFinalize: function _doFinalize() {\n // Shortcuts\n var data = this._data;\n var dataWords = data.words;\n var nBitsTotal = this._nDataBytes * 8;\n var nBitsLeft = data.sigBytes * 8;\n var blockSizeBits = this.blockSize * 32;\n\n // Add padding\n dataWords[nBitsLeft >>> 5] |= 0x1 << 24 - nBitsLeft % 32;\n dataWords[(Math.ceil((nBitsLeft + 1) / blockSizeBits) * blockSizeBits >>> 5) - 1] |= 0x80;\n data.sigBytes = dataWords.length * 4;\n\n // Hash final blocks\n this._process();\n\n // Shortcuts\n var state = this._state;\n var outputLengthBytes = this.cfg.outputLength / 8;\n var outputLengthLanes = outputLengthBytes / 8;\n\n // Squeeze\n var hashWords = [];\n for (var i = 0; i < outputLengthLanes; i++) {\n // Shortcuts\n var lane = state[i];\n var laneMsw = lane.high;\n var laneLsw = lane.low;\n\n // Swap endian\n laneMsw = (laneMsw << 8 | laneMsw >>> 24) & 0x00ff00ff | (laneMsw << 24 | laneMsw >>> 8) & 0xff00ff00;\n laneLsw = (laneLsw << 8 | laneLsw >>> 24) & 0x00ff00ff | (laneLsw << 24 | laneLsw >>> 8) & 0xff00ff00;\n\n // Squeeze state to retrieve hash\n hashWords.push(laneLsw);\n hashWords.push(laneMsw);\n }\n\n // Return final computed hash\n return new WordArray.init(hashWords, outputLengthBytes);\n },\n clone: function clone() {\n var clone = Hasher.clone.call(this);\n var state = clone._state = this._state.slice(0);\n for (var i = 0; i < 25; i++) {\n state[i] = state[i].clone();\n }\n return clone;\n }\n });\n\n /**\n * Shortcut function to the hasher's object interface.\n *\n * @param {WordArray|string} message The message to hash.\n *\n * @return {WordArray} The hash.\n *\n * @static\n *\n * @example\n *\n * var hash = CryptoJS.SHA3('message');\n * var hash = CryptoJS.SHA3(wordArray);\n */\n C.SHA3 = Hasher._createHelper(SHA3);\n\n /**\n * Shortcut function to the HMAC's object interface.\n *\n * @param {WordArray|string} message The message to hash.\n * @param {WordArray|string} key The secret key.\n *\n * @return {WordArray} The HMAC.\n *\n * @static\n *\n * @example\n *\n * var hmac = CryptoJS.HmacSHA3(message, key);\n */\n C.HmacSHA3 = Hasher._createHmacHelper(SHA3);\n })(Math);\n (function () {\n // Shortcuts\n var C = CryptoJS;\n var C_lib = C.lib;\n var Hasher = C_lib.Hasher;\n var C_x64 = C.x64;\n var X64Word = C_x64.Word;\n var X64WordArray = C_x64.WordArray;\n var C_algo = C.algo;\n function X64Word_create() {\n return X64Word.create.apply(X64Word, arguments);\n }\n\n // Constants\n var K = [X64Word_create(0x428a2f98, 0xd728ae22), X64Word_create(0x71374491, 0x23ef65cd), X64Word_create(0xb5c0fbcf, 0xec4d3b2f), X64Word_create(0xe9b5dba5, 0x8189dbbc), X64Word_create(0x3956c25b, 0xf348b538), X64Word_create(0x59f111f1, 0xb605d019), X64Word_create(0x923f82a4, 0xaf194f9b), X64Word_create(0xab1c5ed5, 0xda6d8118), X64Word_create(0xd807aa98, 0xa3030242), X64Word_create(0x12835b01, 0x45706fbe), X64Word_create(0x243185be, 0x4ee4b28c), X64Word_create(0x550c7dc3, 0xd5ffb4e2), X64Word_create(0x72be5d74, 0xf27b896f), X64Word_create(0x80deb1fe, 0x3b1696b1), X64Word_create(0x9bdc06a7, 0x25c71235), X64Word_create(0xc19bf174, 0xcf692694), X64Word_create(0xe49b69c1, 0x9ef14ad2), X64Word_create(0xefbe4786, 0x384f25e3), X64Word_create(0x0fc19dc6, 0x8b8cd5b5), X64Word_create(0x240ca1cc, 0x77ac9c65), X64Word_create(0x2de92c6f, 0x592b0275), X64Word_create(0x4a7484aa, 0x6ea6e483), X64Word_create(0x5cb0a9dc, 0xbd41fbd4), X64Word_create(0x76f988da, 0x831153b5), X64Word_create(0x983e5152, 0xee66dfab), X64Word_create(0xa831c66d, 0x2db43210), X64Word_create(0xb00327c8, 0x98fb213f), X64Word_create(0xbf597fc7, 0xbeef0ee4), X64Word_create(0xc6e00bf3, 0x3da88fc2), X64Word_create(0xd5a79147, 0x930aa725), X64Word_create(0x06ca6351, 0xe003826f), X64Word_create(0x14292967, 0x0a0e6e70), X64Word_create(0x27b70a85, 0x46d22ffc), X64Word_create(0x2e1b2138, 0x5c26c926), X64Word_create(0x4d2c6dfc, 0x5ac42aed), X64Word_create(0x53380d13, 0x9d95b3df), X64Word_create(0x650a7354, 0x8baf63de), X64Word_create(0x766a0abb, 0x3c77b2a8), X64Word_create(0x81c2c92e, 0x47edaee6), X64Word_create(0x92722c85, 0x1482353b), X64Word_create(0xa2bfe8a1, 0x4cf10364), X64Word_create(0xa81a664b, 0xbc423001), X64Word_create(0xc24b8b70, 0xd0f89791), X64Word_create(0xc76c51a3, 0x0654be30), X64Word_create(0xd192e819, 0xd6ef5218), X64Word_create(0xd6990624, 0x5565a910), X64Word_create(0xf40e3585, 0x5771202a), X64Word_create(0x106aa070, 0x32bbd1b8), X64Word_create(0x19a4c116, 0xb8d2d0c8), X64Word_create(0x1e376c08, 0x5141ab53), X64Word_create(0x2748774c, 0xdf8eeb99), X64Word_create(0x34b0bcb5, 0xe19b48a8), X64Word_create(0x391c0cb3, 0xc5c95a63), X64Word_create(0x4ed8aa4a, 0xe3418acb), X64Word_create(0x5b9cca4f, 0x7763e373), X64Word_create(0x682e6ff3, 0xd6b2b8a3), X64Word_create(0x748f82ee, 0x5defb2fc), X64Word_create(0x78a5636f, 0x43172f60), X64Word_create(0x84c87814, 0xa1f0ab72), X64Word_create(0x8cc70208, 0x1a6439ec), X64Word_create(0x90befffa, 0x23631e28), X64Word_create(0xa4506ceb, 0xde82bde9), X64Word_create(0xbef9a3f7, 0xb2c67915), X64Word_create(0xc67178f2, 0xe372532b), X64Word_create(0xca273ece, 0xea26619c), X64Word_create(0xd186b8c7, 0x21c0c207), X64Word_create(0xeada7dd6, 0xcde0eb1e), X64Word_create(0xf57d4f7f, 0xee6ed178), X64Word_create(0x06f067aa, 0x72176fba), X64Word_create(0x0a637dc5, 0xa2c898a6), X64Word_create(0x113f9804, 0xbef90dae), X64Word_create(0x1b710b35, 0x131c471b), X64Word_create(0x28db77f5, 0x23047d84), X64Word_create(0x32caab7b, 0x40c72493), X64Word_create(0x3c9ebe0a, 0x15c9bebc), X64Word_create(0x431d67c4, 0x9c100d4c), X64Word_create(0x4cc5d4be, 0xcb3e42b6), X64Word_create(0x597f299c, 0xfc657e2a), X64Word_create(0x5fcb6fab, 0x3ad6faec), X64Word_create(0x6c44198c, 0x4a475817)];\n\n // Reusable objects\n var W = [];\n (function () {\n for (var i = 0; i < 80; i++) {\n W[i] = X64Word_create();\n }\n })();\n\n /**\n * SHA-512 hash algorithm.\n */\n var SHA512 = C_algo.SHA512 = Hasher.extend({\n _doReset: function _doReset() {\n this._hash = new X64WordArray.init([new X64Word.init(0x6a09e667, 0xf3bcc908), new X64Word.init(0xbb67ae85, 0x84caa73b), new X64Word.init(0x3c6ef372, 0xfe94f82b), new X64Word.init(0xa54ff53a, 0x5f1d36f1), new X64Word.init(0x510e527f, 0xade682d1), new X64Word.init(0x9b05688c, 0x2b3e6c1f), new X64Word.init(0x1f83d9ab, 0xfb41bd6b), new X64Word.init(0x5be0cd19, 0x137e2179)]);\n },\n _doProcessBlock: function _doProcessBlock(M, offset) {\n // Shortcuts\n var H = this._hash.words;\n var H0 = H[0];\n var H1 = H[1];\n var H2 = H[2];\n var H3 = H[3];\n var H4 = H[4];\n var H5 = H[5];\n var H6 = H[6];\n var H7 = H[7];\n var H0h = H0.high;\n var H0l = H0.low;\n var H1h = H1.high;\n var H1l = H1.low;\n var H2h = H2.high;\n var H2l = H2.low;\n var H3h = H3.high;\n var H3l = H3.low;\n var H4h = H4.high;\n var H4l = H4.low;\n var H5h = H5.high;\n var H5l = H5.low;\n var H6h = H6.high;\n var H6l = H6.low;\n var H7h = H7.high;\n var H7l = H7.low;\n\n // Working variables\n var ah = H0h;\n var al = H0l;\n var bh = H1h;\n var bl = H1l;\n var ch = H2h;\n var cl = H2l;\n var dh = H3h;\n var dl = H3l;\n var eh = H4h;\n var el = H4l;\n var fh = H5h;\n var fl = H5l;\n var gh = H6h;\n var gl = H6l;\n var hh = H7h;\n var hl = H7l;\n\n // Rounds\n for (var i = 0; i < 80; i++) {\n var Wil;\n var Wih;\n\n // Shortcut\n var Wi = W[i];\n\n // Extend message\n if (i < 16) {\n Wih = Wi.high = M[offset + i * 2] | 0;\n Wil = Wi.low = M[offset + i * 2 + 1] | 0;\n } else {\n // Gamma0\n var gamma0x = W[i - 15];\n var gamma0xh = gamma0x.high;\n var gamma0xl = gamma0x.low;\n var gamma0h = (gamma0xh >>> 1 | gamma0xl << 31) ^ (gamma0xh >>> 8 | gamma0xl << 24) ^ gamma0xh >>> 7;\n var gamma0l = (gamma0xl >>> 1 | gamma0xh << 31) ^ (gamma0xl >>> 8 | gamma0xh << 24) ^ (gamma0xl >>> 7 | gamma0xh << 25);\n\n // Gamma1\n var gamma1x = W[i - 2];\n var gamma1xh = gamma1x.high;\n var gamma1xl = gamma1x.low;\n var gamma1h = (gamma1xh >>> 19 | gamma1xl << 13) ^ (gamma1xh << 3 | gamma1xl >>> 29) ^ gamma1xh >>> 6;\n var gamma1l = (gamma1xl >>> 19 | gamma1xh << 13) ^ (gamma1xl << 3 | gamma1xh >>> 29) ^ (gamma1xl >>> 6 | gamma1xh << 26);\n\n // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]\n var Wi7 = W[i - 7];\n var Wi7h = Wi7.high;\n var Wi7l = Wi7.low;\n var Wi16 = W[i - 16];\n var Wi16h = Wi16.high;\n var Wi16l = Wi16.low;\n Wil = gamma0l + Wi7l;\n Wih = gamma0h + Wi7h + (Wil >>> 0 < gamma0l >>> 0 ? 1 : 0);\n Wil = Wil + gamma1l;\n Wih = Wih + gamma1h + (Wil >>> 0 < gamma1l >>> 0 ? 1 : 0);\n Wil = Wil + Wi16l;\n Wih = Wih + Wi16h + (Wil >>> 0 < Wi16l >>> 0 ? 1 : 0);\n Wi.high = Wih;\n Wi.low = Wil;\n }\n var chh = eh & fh ^ ~eh & gh;\n var chl = el & fl ^ ~el & gl;\n var majh = ah & bh ^ ah & ch ^ bh & ch;\n var majl = al & bl ^ al & cl ^ bl & cl;\n var sigma0h = (ah >>> 28 | al << 4) ^ (ah << 30 | al >>> 2) ^ (ah << 25 | al >>> 7);\n var sigma0l = (al >>> 28 | ah << 4) ^ (al << 30 | ah >>> 2) ^ (al << 25 | ah >>> 7);\n var sigma1h = (eh >>> 14 | el << 18) ^ (eh >>> 18 | el << 14) ^ (eh << 23 | el >>> 9);\n var sigma1l = (el >>> 14 | eh << 18) ^ (el >>> 18 | eh << 14) ^ (el << 23 | eh >>> 9);\n\n // t1 = h + sigma1 + ch + K[i] + W[i]\n var Ki = K[i];\n var Kih = Ki.high;\n var Kil = Ki.low;\n var t1l = hl + sigma1l;\n var t1h = hh + sigma1h + (t1l >>> 0 < hl >>> 0 ? 1 : 0);\n var t1l = t1l + chl;\n var t1h = t1h + chh + (t1l >>> 0 < chl >>> 0 ? 1 : 0);\n var t1l = t1l + Kil;\n var t1h = t1h + Kih + (t1l >>> 0 < Kil >>> 0 ? 1 : 0);\n var t1l = t1l + Wil;\n var t1h = t1h + Wih + (t1l >>> 0 < Wil >>> 0 ? 1 : 0);\n\n // t2 = sigma0 + maj\n var t2l = sigma0l + majl;\n var t2h = sigma0h + majh + (t2l >>> 0 < sigma0l >>> 0 ? 1 : 0);\n\n // Update working variables\n hh = gh;\n hl = gl;\n gh = fh;\n gl = fl;\n fh = eh;\n fl = el;\n el = dl + t1l | 0;\n eh = dh + t1h + (el >>> 0 < dl >>> 0 ? 1 : 0) | 0;\n dh = ch;\n dl = cl;\n ch = bh;\n cl = bl;\n bh = ah;\n bl = al;\n al = t1l + t2l | 0;\n ah = t1h + t2h + (al >>> 0 < t1l >>> 0 ? 1 : 0) | 0;\n }\n\n // Intermediate hash value\n H0l = H0.low = H0l + al;\n H0.high = H0h + ah + (H0l >>> 0 < al >>> 0 ? 1 : 0);\n H1l = H1.low = H1l + bl;\n H1.high = H1h + bh + (H1l >>> 0 < bl >>> 0 ? 1 : 0);\n H2l = H2.low = H2l + cl;\n H2.high = H2h + ch + (H2l >>> 0 < cl >>> 0 ? 1 : 0);\n H3l = H3.low = H3l + dl;\n H3.high = H3h + dh + (H3l >>> 0 < dl >>> 0 ? 1 : 0);\n H4l = H4.low = H4l + el;\n H4.high = H4h + eh + (H4l >>> 0 < el >>> 0 ? 1 : 0);\n H5l = H5.low = H5l + fl;\n H5.high = H5h + fh + (H5l >>> 0 < fl >>> 0 ? 1 : 0);\n H6l = H6.low = H6l + gl;\n H6.high = H6h + gh + (H6l >>> 0 < gl >>> 0 ? 1 : 0);\n H7l = H7.low = H7l + hl;\n H7.high = H7h + hh + (H7l >>> 0 < hl >>> 0 ? 1 : 0);\n },\n _doFinalize: function _doFinalize() {\n // Shortcuts\n var data = this._data;\n var dataWords = data.words;\n var nBitsTotal = this._nDataBytes * 8;\n var nBitsLeft = data.sigBytes * 8;\n\n // Add padding\n dataWords[nBitsLeft >>> 5] |= 0x80 << 24 - nBitsLeft % 32;\n dataWords[(nBitsLeft + 128 >>> 10 << 5) + 30] = Math.floor(nBitsTotal / 0x100000000);\n dataWords[(nBitsLeft + 128 >>> 10 << 5) + 31] = nBitsTotal;\n data.sigBytes = dataWords.length * 4;\n\n // Hash final blocks\n this._process();\n\n // Convert hash to 32-bit word array before returning\n var hash = this._hash.toX32();\n\n // Return final computed hash\n return hash;\n },\n clone: function clone() {\n var clone = Hasher.clone.call(this);\n clone._hash = this._hash.clone();\n return clone;\n },\n blockSize: 1024 / 32\n });\n\n /**\n * Shortcut function to the hasher's object interface.\n *\n * @param {WordArray|string} message The message to hash.\n *\n * @return {WordArray} The hash.\n *\n * @static\n *\n * @example\n *\n * var hash = CryptoJS.SHA512('message');\n * var hash = CryptoJS.SHA512(wordArray);\n */\n C.SHA512 = Hasher._createHelper(SHA512);\n\n /**\n * Shortcut function to the HMAC's object interface.\n *\n * @param {WordArray|string} message The message to hash.\n * @param {WordArray|string} key The secret key.\n *\n * @return {WordArray} The HMAC.\n *\n * @static\n *\n * @example\n *\n * var hmac = CryptoJS.HmacSHA512(message, key);\n */\n C.HmacSHA512 = Hasher._createHmacHelper(SHA512);\n })();\n (function () {\n // Shortcuts\n var C = CryptoJS;\n var C_x64 = C.x64;\n var X64Word = C_x64.Word;\n var X64WordArray = C_x64.WordArray;\n var C_algo = C.algo;\n var SHA512 = C_algo.SHA512;\n\n /**\n * SHA-384 hash algorithm.\n */\n var SHA384 = C_algo.SHA384 = SHA512.extend({\n _doReset: function _doReset() {\n this._hash = new X64WordArray.init([new X64Word.init(0xcbbb9d5d, 0xc1059ed8), new X64Word.init(0x629a292a, 0x367cd507), new X64Word.init(0x9159015a, 0x3070dd17), new X64Word.init(0x152fecd8, 0xf70e5939), new X64Word.init(0x67332667, 0xffc00b31), new X64Word.init(0x8eb44a87, 0x68581511), new X64Word.init(0xdb0c2e0d, 0x64f98fa7), new X64Word.init(0x47b5481d, 0xbefa4fa4)]);\n },\n _doFinalize: function _doFinalize() {\n var hash = SHA512._doFinalize.call(this);\n hash.sigBytes -= 16;\n return hash;\n }\n });\n\n /**\n * Shortcut function to the hasher's object interface.\n *\n * @param {WordArray|string} message The message to hash.\n *\n * @return {WordArray} The hash.\n *\n * @static\n *\n * @example\n *\n * var hash = CryptoJS.SHA384('message');\n * var hash = CryptoJS.SHA384(wordArray);\n */\n C.SHA384 = SHA512._createHelper(SHA384);\n\n /**\n * Shortcut function to the HMAC's object interface.\n *\n * @param {WordArray|string} message The message to hash.\n * @param {WordArray|string} key The secret key.\n *\n * @return {WordArray} The HMAC.\n *\n * @static\n *\n * @example\n *\n * var hmac = CryptoJS.HmacSHA384(message, key);\n */\n C.HmacSHA384 = SHA512._createHmacHelper(SHA384);\n })();\n\n /**\n * Cipher core components.\n */\n CryptoJS.lib.Cipher || function (undefined) {\n // Shortcuts\n var C = CryptoJS;\n var C_lib = C.lib;\n var Base = C_lib.Base;\n var WordArray = C_lib.WordArray;\n var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm;\n var C_enc = C.enc;\n var Utf8 = C_enc.Utf8;\n var Base64 = C_enc.Base64;\n var C_algo = C.algo;\n var EvpKDF = C_algo.EvpKDF;\n\n /**\n * Abstract base cipher template.\n *\n * @property {number} keySize This cipher's key size. Default: 4 (128 bits)\n * @property {number} ivSize This cipher's IV size. Default: 4 (128 bits)\n * @property {number} _ENC_XFORM_MODE A constant representing encryption mode.\n * @property {number} _DEC_XFORM_MODE A constant representing decryption mode.\n */\n var Cipher = C_lib.Cipher = BufferedBlockAlgorithm.extend({\n /**\n * Configuration options.\n *\n * @property {WordArray} iv The IV to use for this operation.\n */\n cfg: Base.extend(),\n /**\n * Creates this cipher in encryption mode.\n *\n * @param {WordArray} key The key.\n * @param {Object} cfg (Optional) The configuration options to use for this operation.\n *\n * @return {Cipher} A cipher instance.\n *\n * @static\n *\n * @example\n *\n * var cipher = CryptoJS.algo.AES.createEncryptor(keyWordArray, { iv: ivWordArray });\n */\n createEncryptor: function createEncryptor(key, cfg) {\n return this.create(this._ENC_XFORM_MODE, key, cfg);\n },\n /**\n * Creates this cipher in decryption mode.\n *\n * @param {WordArray} key The key.\n * @param {Object} cfg (Optional) The configuration options to use for this operation.\n *\n * @return {Cipher} A cipher instance.\n *\n * @static\n *\n * @example\n *\n * var cipher = CryptoJS.algo.AES.createDecryptor(keyWordArray, { iv: ivWordArray });\n */\n createDecryptor: function createDecryptor(key, cfg) {\n return this.create(this._DEC_XFORM_MODE, key, cfg);\n },\n /**\n * Initializes a newly created cipher.\n *\n * @param {number} xformMode Either the encryption or decryption transormation mode constant.\n * @param {WordArray} key The key.\n * @param {Object} cfg (Optional) The configuration options to use for this operation.\n *\n * @example\n *\n * var cipher = CryptoJS.algo.AES.create(CryptoJS.algo.AES._ENC_XFORM_MODE, keyWordArray, { iv: ivWordArray });\n */\n init: function init(xformMode, key, cfg) {\n // Apply config defaults\n this.cfg = this.cfg.extend(cfg);\n\n // Store transform mode and key\n this._xformMode = xformMode;\n this._key = key;\n\n // Set initial values\n this.reset();\n },\n /**\n * Resets this cipher to its initial state.\n *\n * @example\n *\n * cipher.reset();\n */\n reset: function reset() {\n // Reset data buffer\n BufferedBlockAlgorithm.reset.call(this);\n\n // Perform concrete-cipher logic\n this._doReset();\n },\n /**\n * Adds data to be encrypted or decrypted.\n *\n * @param {WordArray|string} dataUpdate The data to encrypt or decrypt.\n *\n * @return {WordArray} The data after processing.\n *\n * @example\n *\n * var encrypted = cipher.process('data');\n * var encrypted = cipher.process(wordArray);\n */\n process: function process(dataUpdate) {\n // Append\n this._append(dataUpdate);\n\n // Process available blocks\n return this._process();\n },\n /**\n * Finalizes the encryption or decryption process.\n * Note that the finalize operation is effectively a destructive, read-once operation.\n *\n * @param {WordArray|string} dataUpdate The final data to encrypt or decrypt.\n *\n * @return {WordArray} The data after final processing.\n *\n * @example\n *\n * var encrypted = cipher.finalize();\n * var encrypted = cipher.finalize('data');\n * var encrypted = cipher.finalize(wordArray);\n */\n finalize: function finalize(dataUpdate) {\n // Final data update\n if (dataUpdate) {\n this._append(dataUpdate);\n }\n\n // Perform concrete-cipher logic\n var finalProcessedData = this._doFinalize();\n return finalProcessedData;\n },\n keySize: 128 / 32,\n ivSize: 128 / 32,\n _ENC_XFORM_MODE: 1,\n _DEC_XFORM_MODE: 2,\n /**\n * Creates shortcut functions to a cipher's object interface.\n *\n * @param {Cipher} cipher The cipher to create a helper for.\n *\n * @return {Object} An object with encrypt and decrypt shortcut functions.\n *\n * @static\n *\n * @example\n *\n * var AES = CryptoJS.lib.Cipher._createHelper(CryptoJS.algo.AES);\n */\n _createHelper: function () {\n function selectCipherStrategy(key) {\n if (typeof key == 'string') {\n return PasswordBasedCipher;\n } else {\n return SerializableCipher;\n }\n }\n return function (cipher) {\n return {\n encrypt: function encrypt(message, key, cfg) {\n return selectCipherStrategy(key).encrypt(cipher, message, key, cfg);\n },\n decrypt: function decrypt(ciphertext, key, cfg) {\n return selectCipherStrategy(key).decrypt(cipher, ciphertext, key, cfg);\n }\n };\n };\n }()\n });\n\n /**\n * Abstract base stream cipher template.\n *\n * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 1 (32 bits)\n */\n var StreamCipher = C_lib.StreamCipher = Cipher.extend({\n _doFinalize: function _doFinalize() {\n // Process partial blocks\n var finalProcessedBlocks = this._process(!!'flush');\n return finalProcessedBlocks;\n },\n blockSize: 1\n });\n\n /**\n * Mode namespace.\n */\n var C_mode = C.mode = {};\n\n /**\n * Abstract base block cipher mode template.\n */\n var BlockCipherMode = C_lib.BlockCipherMode = Base.extend({\n /**\n * Creates this mode for encryption.\n *\n * @param {Cipher} cipher A block cipher instance.\n * @param {Array} iv The IV words.\n *\n * @static\n *\n * @example\n *\n * var mode = CryptoJS.mode.CBC.createEncryptor(cipher, iv.words);\n */\n createEncryptor: function createEncryptor(cipher, iv) {\n return this.Encryptor.create(cipher, iv);\n },\n /**\n * Creates this mode for decryption.\n *\n * @param {Cipher} cipher A block cipher instance.\n * @param {Array} iv The IV words.\n *\n * @static\n *\n * @example\n *\n * var mode = CryptoJS.mode.CBC.createDecryptor(cipher, iv.words);\n */\n createDecryptor: function createDecryptor(cipher, iv) {\n return this.Decryptor.create(cipher, iv);\n },\n /**\n * Initializes a newly created mode.\n *\n * @param {Cipher} cipher A block cipher instance.\n * @param {Array} iv The IV words.\n *\n * @example\n *\n * var mode = CryptoJS.mode.CBC.Encryptor.create(cipher, iv.words);\n */\n init: function init(cipher, iv) {\n this._cipher = cipher;\n this._iv = iv;\n }\n });\n\n /**\n * Cipher Block Chaining mode.\n */\n var CBC = C_mode.CBC = function () {\n /**\n * Abstract base CBC mode.\n */\n var CBC = BlockCipherMode.extend();\n\n /**\n * CBC encryptor.\n */\n CBC.Encryptor = CBC.extend({\n /**\n * Processes the data block at offset.\n *\n * @param {Array} words The data words to operate on.\n * @param {number} offset The offset where the block starts.\n *\n * @example\n *\n * mode.processBlock(data.words, offset);\n */\n processBlock: function processBlock(words, offset) {\n // Shortcuts\n var cipher = this._cipher;\n var blockSize = cipher.blockSize;\n\n // XOR and encrypt\n xorBlock.call(this, words, offset, blockSize);\n cipher.encryptBlock(words, offset);\n\n // Remember this block to use with next block\n this._prevBlock = words.slice(offset, offset + blockSize);\n }\n });\n\n /**\n * CBC decryptor.\n */\n CBC.Decryptor = CBC.extend({\n /**\n * Processes the data block at offset.\n *\n * @param {Array} words The data words to operate on.\n * @param {number} offset The offset where the block starts.\n *\n * @example\n *\n * mode.processBlock(data.words, offset);\n */\n processBlock: function processBlock(words, offset) {\n // Shortcuts\n var cipher = this._cipher;\n var blockSize = cipher.blockSize;\n\n // Remember this block to use with next block\n var thisBlock = words.slice(offset, offset + blockSize);\n\n // Decrypt and XOR\n cipher.decryptBlock(words, offset);\n xorBlock.call(this, words, offset, blockSize);\n\n // This block becomes the previous block\n this._prevBlock = thisBlock;\n }\n });\n function xorBlock(words, offset, blockSize) {\n var block;\n\n // Shortcut\n var iv = this._iv;\n\n // Choose mixing block\n if (iv) {\n block = iv;\n\n // Remove IV for subsequent blocks\n this._iv = undefined;\n } else {\n block = this._prevBlock;\n }\n\n // XOR blocks\n for (var i = 0; i < blockSize; i++) {\n words[offset + i] ^= block[i];\n }\n }\n return CBC;\n }();\n\n /**\n * Padding namespace.\n */\n var C_pad = C.pad = {};\n\n /**\n * PKCS #5/7 padding strategy.\n */\n var Pkcs7 = C_pad.Pkcs7 = {\n /**\n * Pads data using the algorithm defined in PKCS #5/7.\n *\n * @param {WordArray} data The data to pad.\n * @param {number} blockSize The multiple that the data should be padded to.\n *\n * @static\n *\n * @example\n *\n * CryptoJS.pad.Pkcs7.pad(wordArray, 4);\n */\n pad: function pad(data, blockSize) {\n // Shortcut\n var blockSizeBytes = blockSize * 4;\n\n // Count padding bytes\n var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes;\n\n // Create padding word\n var paddingWord = nPaddingBytes << 24 | nPaddingBytes << 16 | nPaddingBytes << 8 | nPaddingBytes;\n\n // Create padding\n var paddingWords = [];\n for (var i = 0; i < nPaddingBytes; i += 4) {\n paddingWords.push(paddingWord);\n }\n var padding = WordArray.create(paddingWords, nPaddingBytes);\n\n // Add padding\n data.concat(padding);\n },\n /**\n * Unpads data that had been padded using the algorithm defined in PKCS #5/7.\n *\n * @param {WordArray} data The data to unpad.\n *\n * @static\n *\n * @example\n *\n * CryptoJS.pad.Pkcs7.unpad(wordArray);\n */\n unpad: function unpad(data) {\n // Get number of padding bytes from last byte\n var nPaddingBytes = data.words[data.sigBytes - 1 >>> 2] & 0xff;\n\n // Remove padding\n data.sigBytes -= nPaddingBytes;\n }\n };\n\n /**\n * Abstract base block cipher template.\n *\n * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 4 (128 bits)\n */\n var BlockCipher = C_lib.BlockCipher = Cipher.extend({\n /**\n * Configuration options.\n *\n * @property {Mode} mode The block mode to use. Default: CBC\n * @property {Padding} padding The padding strategy to use. Default: Pkcs7\n */\n cfg: Cipher.cfg.extend({\n mode: CBC,\n padding: Pkcs7\n }),\n reset: function reset() {\n var modeCreator;\n\n // Reset cipher\n Cipher.reset.call(this);\n\n // Shortcuts\n var cfg = this.cfg;\n var iv = cfg.iv;\n var mode = cfg.mode;\n\n // Reset block mode\n if (this._xformMode == this._ENC_XFORM_MODE) {\n modeCreator = mode.createEncryptor;\n } else /* if (this._xformMode == this._DEC_XFORM_MODE) */{\n modeCreator = mode.createDecryptor;\n // Keep at least one block in the buffer for unpadding\n this._minBufferSize = 1;\n }\n if (this._mode && this._mode.__creator == modeCreator) {\n this._mode.init(this, iv && iv.words);\n } else {\n this._mode = modeCreator.call(mode, this, iv && iv.words);\n this._mode.__creator = modeCreator;\n }\n },\n _doProcessBlock: function _doProcessBlock(words, offset) {\n this._mode.processBlock(words, offset);\n },\n _doFinalize: function _doFinalize() {\n var finalProcessedBlocks;\n\n // Shortcut\n var padding = this.cfg.padding;\n\n // Finalize\n if (this._xformMode == this._ENC_XFORM_MODE) {\n // Pad data\n padding.pad(this._data, this.blockSize);\n\n // Process final blocks\n finalProcessedBlocks = this._process(!!'flush');\n } else /* if (this._xformMode == this._DEC_XFORM_MODE) */{\n // Process final blocks\n finalProcessedBlocks = this._process(!!'flush');\n\n // Unpad data\n padding.unpad(finalProcessedBlocks);\n }\n return finalProcessedBlocks;\n },\n blockSize: 128 / 32\n });\n\n /**\n * A collection of cipher parameters.\n *\n * @property {WordArray} ciphertext The raw ciphertext.\n * @property {WordArray} key The key to this ciphertext.\n * @property {WordArray} iv The IV used in the ciphering operation.\n * @property {WordArray} salt The salt used with a key derivation function.\n * @property {Cipher} algorithm The cipher algorithm.\n * @property {Mode} mode The block mode used in the ciphering operation.\n * @property {Padding} padding The padding scheme used in the ciphering operation.\n * @property {number} blockSize The block size of the cipher.\n * @property {Format} formatter The default formatting strategy to convert this cipher params object to a string.\n */\n var CipherParams = C_lib.CipherParams = Base.extend({\n /**\n * Initializes a newly created cipher params object.\n *\n * @param {Object} cipherParams An object with any of the possible cipher parameters.\n *\n * @example\n *\n * var cipherParams = CryptoJS.lib.CipherParams.create({\n * ciphertext: ciphertextWordArray,\n * key: keyWordArray,\n * iv: ivWordArray,\n * salt: saltWordArray,\n * algorithm: CryptoJS.algo.AES,\n * mode: CryptoJS.mode.CBC,\n * padding: CryptoJS.pad.PKCS7,\n * blockSize: 4,\n * formatter: CryptoJS.format.OpenSSL\n * });\n */\n init: function init(cipherParams) {\n this.mixIn(cipherParams);\n },\n /**\n * Converts this cipher params object to a string.\n *\n * @param {Format} formatter (Optional) The formatting strategy to use.\n *\n * @return {string} The stringified cipher params.\n *\n * @throws Error If neither the formatter nor the default formatter is set.\n *\n * @example\n *\n * var string = cipherParams + '';\n * var string = cipherParams.toString();\n * var string = cipherParams.toString(CryptoJS.format.OpenSSL);\n */\n toString: function toString(formatter) {\n return (formatter || this.formatter).stringify(this);\n }\n });\n\n /**\n * Format namespace.\n */\n var C_format = C.format = {};\n\n /**\n * OpenSSL formatting strategy.\n */\n var OpenSSLFormatter = C_format.OpenSSL = {\n /**\n * Converts a cipher params object to an OpenSSL-compatible string.\n *\n * @param {CipherParams} cipherParams The cipher params object.\n *\n * @return {string} The OpenSSL-compatible string.\n *\n * @static\n *\n * @example\n *\n * var openSSLString = CryptoJS.format.OpenSSL.stringify(cipherParams);\n */\n stringify: function stringify(cipherParams) {\n var wordArray;\n\n // Shortcuts\n var ciphertext = cipherParams.ciphertext;\n var salt = cipherParams.salt;\n\n // Format\n if (salt) {\n wordArray = WordArray.create([0x53616c74, 0x65645f5f]).concat(salt).concat(ciphertext);\n } else {\n wordArray = ciphertext;\n }\n return wordArray.toString(Base64);\n },\n /**\n * Converts an OpenSSL-compatible string to a cipher params object.\n *\n * @param {string} openSSLStr The OpenSSL-compatible string.\n *\n * @return {CipherParams} The cipher params object.\n *\n * @static\n *\n * @example\n *\n * var cipherParams = CryptoJS.format.OpenSSL.parse(openSSLString);\n */\n parse: function parse(openSSLStr) {\n var salt;\n\n // Parse base64\n var ciphertext = Base64.parse(openSSLStr);\n\n // Shortcut\n var ciphertextWords = ciphertext.words;\n\n // Test for salt\n if (ciphertextWords[0] == 0x53616c74 && ciphertextWords[1] == 0x65645f5f) {\n // Extract salt\n salt = WordArray.create(ciphertextWords.slice(2, 4));\n\n // Remove salt from ciphertext\n ciphertextWords.splice(0, 4);\n ciphertext.sigBytes -= 16;\n }\n return CipherParams.create({\n ciphertext: ciphertext,\n salt: salt\n });\n }\n };\n\n /**\n * A cipher wrapper that returns ciphertext as a serializable cipher params object.\n */\n var SerializableCipher = C_lib.SerializableCipher = Base.extend({\n /**\n * Configuration options.\n *\n * @property {Formatter} format The formatting strategy to convert cipher param objects to and from a string. Default: OpenSSL\n */\n cfg: Base.extend({\n format: OpenSSLFormatter\n }),\n /**\n * Encrypts a message.\n *\n * @param {Cipher} cipher The cipher algorithm to use.\n * @param {WordArray|string} message The message to encrypt.\n * @param {WordArray} key The key.\n * @param {Object} cfg (Optional) The configuration options to use for this operation.\n *\n * @return {CipherParams} A cipher params object.\n *\n * @static\n *\n * @example\n *\n * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key);\n * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv });\n * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv, format: CryptoJS.format.OpenSSL });\n */\n encrypt: function encrypt(cipher, message, key, cfg) {\n // Apply config defaults\n cfg = this.cfg.extend(cfg);\n\n // Encrypt\n var encryptor = cipher.createEncryptor(key, cfg);\n var ciphertext = encryptor.finalize(message);\n\n // Shortcut\n var cipherCfg = encryptor.cfg;\n\n // Create and return serializable cipher params\n return CipherParams.create({\n ciphertext: ciphertext,\n key: key,\n iv: cipherCfg.iv,\n algorithm: cipher,\n mode: cipherCfg.mode,\n padding: cipherCfg.padding,\n blockSize: cipher.blockSize,\n formatter: cfg.format\n });\n },\n /**\n * Decrypts serialized ciphertext.\n *\n * @param {Cipher} cipher The cipher algorithm to use.\n * @param {CipherParams|string} ciphertext The ciphertext to decrypt.\n * @param {WordArray} key The key.\n * @param {Object} cfg (Optional) The configuration options to use for this operation.\n *\n * @return {WordArray} The plaintext.\n *\n * @static\n *\n * @example\n *\n * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, key, { iv: iv, format: CryptoJS.format.OpenSSL });\n * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, key, { iv: iv, format: CryptoJS.format.OpenSSL });\n */\n decrypt: function decrypt(cipher, ciphertext, key, cfg) {\n // Apply config defaults\n cfg = this.cfg.extend(cfg);\n\n // Convert string to CipherParams\n ciphertext = this._parse(ciphertext, cfg.format);\n\n // Decrypt\n var plaintext = cipher.createDecryptor(key, cfg).finalize(ciphertext.ciphertext);\n return plaintext;\n },\n /**\n * Converts serialized ciphertext to CipherParams,\n * else assumed CipherParams already and returns ciphertext unchanged.\n *\n * @param {CipherParams|string} ciphertext The ciphertext.\n * @param {Formatter} format The formatting strategy to use to parse serialized ciphertext.\n *\n * @return {CipherParams} The unserialized ciphertext.\n *\n * @static\n *\n * @example\n *\n * var ciphertextParams = CryptoJS.lib.SerializableCipher._parse(ciphertextStringOrParams, format);\n */\n _parse: function _parse(ciphertext, format) {\n if (typeof ciphertext == 'string') {\n return format.parse(ciphertext, this);\n } else {\n return ciphertext;\n }\n }\n });\n\n /**\n * Key derivation function namespace.\n */\n var C_kdf = C.kdf = {};\n\n /**\n * OpenSSL key derivation function.\n */\n var OpenSSLKdf = C_kdf.OpenSSL = {\n /**\n * Derives a key and IV from a password.\n *\n * @param {string} password The password to derive from.\n * @param {number} keySize The size in words of the key to generate.\n * @param {number} ivSize The size in words of the IV to generate.\n * @param {WordArray|string} salt (Optional) A 64-bit salt to use. If omitted, a salt will be generated randomly.\n *\n * @return {CipherParams} A cipher params object with the key, IV, and salt.\n *\n * @static\n *\n * @example\n *\n * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32);\n * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32, 'saltsalt');\n */\n execute: function execute(password, keySize, ivSize, salt) {\n // Generate random salt\n if (!salt) {\n salt = WordArray.random(64 / 8);\n }\n\n // Derive key and IV\n var key = EvpKDF.create({\n keySize: keySize + ivSize\n }).compute(password, salt);\n\n // Separate key and IV\n var iv = WordArray.create(key.words.slice(keySize), ivSize * 4);\n key.sigBytes = keySize * 4;\n\n // Return params\n return CipherParams.create({\n key: key,\n iv: iv,\n salt: salt\n });\n }\n };\n\n /**\n * A serializable cipher wrapper that derives the key from a password,\n * and returns ciphertext as a serializable cipher params object.\n */\n var PasswordBasedCipher = C_lib.PasswordBasedCipher = SerializableCipher.extend({\n /**\n * Configuration options.\n *\n * @property {KDF} kdf The key derivation function to use to generate a key and IV from a password. Default: OpenSSL\n */\n cfg: SerializableCipher.cfg.extend({\n kdf: OpenSSLKdf\n }),\n /**\n * Encrypts a message using a password.\n *\n * @param {Cipher} cipher The cipher algorithm to use.\n * @param {WordArray|string} message The message to encrypt.\n * @param {string} password The password.\n * @param {Object} cfg (Optional) The configuration options to use for this operation.\n *\n * @return {CipherParams} A cipher params object.\n *\n * @static\n *\n * @example\n *\n * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password');\n * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password', { format: CryptoJS.format.OpenSSL });\n */\n encrypt: function encrypt(cipher, message, password, cfg) {\n // Apply config defaults\n cfg = this.cfg.extend(cfg);\n\n // Derive key and other params\n var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize);\n\n // Add IV to config\n cfg.iv = derivedParams.iv;\n\n // Encrypt\n var ciphertext = SerializableCipher.encrypt.call(this, cipher, message, derivedParams.key, cfg);\n\n // Mix in derived params\n ciphertext.mixIn(derivedParams);\n return ciphertext;\n },\n /**\n * Decrypts serialized ciphertext using a password.\n *\n * @param {Cipher} cipher The cipher algorithm to use.\n * @param {CipherParams|string} ciphertext The ciphertext to decrypt.\n * @param {string} password The password.\n * @param {Object} cfg (Optional) The configuration options to use for this operation.\n *\n * @return {WordArray} The plaintext.\n *\n * @static\n *\n * @example\n *\n * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, 'password', { format: CryptoJS.format.OpenSSL });\n * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, 'password', { format: CryptoJS.format.OpenSSL });\n */\n decrypt: function decrypt(cipher, ciphertext, password, cfg) {\n // Apply config defaults\n cfg = this.cfg.extend(cfg);\n\n // Convert string to CipherParams\n ciphertext = this._parse(ciphertext, cfg.format);\n\n // Derive key and other params\n var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, ciphertext.salt);\n\n // Add IV to config\n cfg.iv = derivedParams.iv;\n\n // Decrypt\n var plaintext = SerializableCipher.decrypt.call(this, cipher, ciphertext, derivedParams.key, cfg);\n return plaintext;\n }\n });\n }();\n\n /**\n * Cipher Feedback block mode.\n */\n CryptoJS.mode.CFB = function () {\n var CFB = CryptoJS.lib.BlockCipherMode.extend();\n CFB.Encryptor = CFB.extend({\n processBlock: function processBlock(words, offset) {\n // Shortcuts\n var cipher = this._cipher;\n var blockSize = cipher.blockSize;\n generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher);\n\n // Remember this block to use with next block\n this._prevBlock = words.slice(offset, offset + blockSize);\n }\n });\n CFB.Decryptor = CFB.extend({\n processBlock: function processBlock(words, offset) {\n // Shortcuts\n var cipher = this._cipher;\n var blockSize = cipher.blockSize;\n\n // Remember this block to use with next block\n var thisBlock = words.slice(offset, offset + blockSize);\n generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher);\n\n // This block becomes the previous block\n this._prevBlock = thisBlock;\n }\n });\n function generateKeystreamAndEncrypt(words, offset, blockSize, cipher) {\n var keystream;\n\n // Shortcut\n var iv = this._iv;\n\n // Generate keystream\n if (iv) {\n keystream = iv.slice(0);\n\n // Remove IV for subsequent blocks\n this._iv = undefined;\n } else {\n keystream = this._prevBlock;\n }\n cipher.encryptBlock(keystream, 0);\n\n // Encrypt\n for (var i = 0; i < blockSize; i++) {\n words[offset + i] ^= keystream[i];\n }\n }\n return CFB;\n }();\n\n /**\n * Electronic Codebook block mode.\n */\n CryptoJS.mode.ECB = function () {\n var ECB = CryptoJS.lib.BlockCipherMode.extend();\n ECB.Encryptor = ECB.extend({\n processBlock: function processBlock(words, offset) {\n this._cipher.encryptBlock(words, offset);\n }\n });\n ECB.Decryptor = ECB.extend({\n processBlock: function processBlock(words, offset) {\n this._cipher.decryptBlock(words, offset);\n }\n });\n return ECB;\n }();\n\n /**\n * ANSI X.923 padding strategy.\n */\n CryptoJS.pad.AnsiX923 = {\n pad: function pad(data, blockSize) {\n // Shortcuts\n var dataSigBytes = data.sigBytes;\n var blockSizeBytes = blockSize * 4;\n\n // Count padding bytes\n var nPaddingBytes = blockSizeBytes - dataSigBytes % blockSizeBytes;\n\n // Compute last byte position\n var lastBytePos = dataSigBytes + nPaddingBytes - 1;\n\n // Pad\n data.clamp();\n data.words[lastBytePos >>> 2] |= nPaddingBytes << 24 - lastBytePos % 4 * 8;\n data.sigBytes += nPaddingBytes;\n },\n unpad: function unpad(data) {\n // Get number of padding bytes from last byte\n var nPaddingBytes = data.words[data.sigBytes - 1 >>> 2] & 0xff;\n\n // Remove padding\n data.sigBytes -= nPaddingBytes;\n }\n };\n\n /**\n * ISO 10126 padding strategy.\n */\n CryptoJS.pad.Iso10126 = {\n pad: function pad(data, blockSize) {\n // Shortcut\n var blockSizeBytes = blockSize * 4;\n\n // Count padding bytes\n var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes;\n\n // Pad\n data.concat(CryptoJS.lib.WordArray.random(nPaddingBytes - 1)).concat(CryptoJS.lib.WordArray.create([nPaddingBytes << 24], 1));\n },\n unpad: function unpad(data) {\n // Get number of padding bytes from last byte\n var nPaddingBytes = data.words[data.sigBytes - 1 >>> 2] & 0xff;\n\n // Remove padding\n data.sigBytes -= nPaddingBytes;\n }\n };\n\n /**\n * ISO/IEC 9797-1 Padding Method 2.\n */\n CryptoJS.pad.Iso97971 = {\n pad: function pad(data, blockSize) {\n // Add 0x80 byte\n data.concat(CryptoJS.lib.WordArray.create([0x80000000], 1));\n\n // Zero pad the rest\n CryptoJS.pad.ZeroPadding.pad(data, blockSize);\n },\n unpad: function unpad(data) {\n // Remove zero padding\n CryptoJS.pad.ZeroPadding.unpad(data);\n\n // Remove one more byte -- the 0x80 byte\n data.sigBytes--;\n }\n };\n\n /**\n * Output Feedback block mode.\n */\n CryptoJS.mode.OFB = function () {\n var OFB = CryptoJS.lib.BlockCipherMode.extend();\n var Encryptor = OFB.Encryptor = OFB.extend({\n processBlock: function processBlock(words, offset) {\n // Shortcuts\n var cipher = this._cipher;\n var blockSize = cipher.blockSize;\n var iv = this._iv;\n var keystream = this._keystream;\n\n // Generate keystream\n if (iv) {\n keystream = this._keystream = iv.slice(0);\n\n // Remove IV for subsequent blocks\n this._iv = undefined;\n }\n cipher.encryptBlock(keystream, 0);\n\n // Encrypt\n for (var i = 0; i < blockSize; i++) {\n words[offset + i] ^= keystream[i];\n }\n }\n });\n OFB.Decryptor = Encryptor;\n return OFB;\n }();\n\n /**\n * A noop padding strategy.\n */\n CryptoJS.pad.NoPadding = {\n pad: function pad() {},\n unpad: function unpad() {}\n };\n (function (undefined) {\n // Shortcuts\n var C = CryptoJS;\n var C_lib = C.lib;\n var CipherParams = C_lib.CipherParams;\n var C_enc = C.enc;\n var Hex = C_enc.Hex;\n var C_format = C.format;\n var HexFormatter = C_format.Hex = {\n /**\n * Converts the ciphertext of a cipher params object to a hexadecimally encoded string.\n *\n * @param {CipherParams} cipherParams The cipher params object.\n *\n * @return {string} The hexadecimally encoded string.\n *\n * @static\n *\n * @example\n *\n * var hexString = CryptoJS.format.Hex.stringify(cipherParams);\n */\n stringify: function stringify(cipherParams) {\n return cipherParams.ciphertext.toString(Hex);\n },\n /**\n * Converts a hexadecimally encoded ciphertext string to a cipher params object.\n *\n * @param {string} input The hexadecimally encoded string.\n *\n * @return {CipherParams} The cipher params object.\n *\n * @static\n *\n * @example\n *\n * var cipherParams = CryptoJS.format.Hex.parse(hexString);\n */\n parse: function parse(input) {\n var ciphertext = Hex.parse(input);\n return CipherParams.create({\n ciphertext: ciphertext\n });\n }\n };\n })();\n (function () {\n // Shortcuts\n var C = CryptoJS;\n var C_lib = C.lib;\n var BlockCipher = C_lib.BlockCipher;\n var C_algo = C.algo;\n\n // Lookup tables\n var SBOX = [];\n var INV_SBOX = [];\n var SUB_MIX_0 = [];\n var SUB_MIX_1 = [];\n var SUB_MIX_2 = [];\n var SUB_MIX_3 = [];\n var INV_SUB_MIX_0 = [];\n var INV_SUB_MIX_1 = [];\n var INV_SUB_MIX_2 = [];\n var INV_SUB_MIX_3 = [];\n\n // Compute lookup tables\n (function () {\n // Compute double table\n var d = [];\n for (var i = 0; i < 256; i++) {\n if (i < 128) {\n d[i] = i << 1;\n } else {\n d[i] = i << 1 ^ 0x11b;\n }\n }\n\n // Walk GF(2^8)\n var x = 0;\n var xi = 0;\n for (var i = 0; i < 256; i++) {\n // Compute sbox\n var sx = xi ^ xi << 1 ^ xi << 2 ^ xi << 3 ^ xi << 4;\n sx = sx >>> 8 ^ sx & 0xff ^ 0x63;\n SBOX[x] = sx;\n INV_SBOX[sx] = x;\n\n // Compute multiplication\n var x2 = d[x];\n var x4 = d[x2];\n var x8 = d[x4];\n\n // Compute sub bytes, mix columns tables\n var t = d[sx] * 0x101 ^ sx * 0x1010100;\n SUB_MIX_0[x] = t << 24 | t >>> 8;\n SUB_MIX_1[x] = t << 16 | t >>> 16;\n SUB_MIX_2[x] = t << 8 | t >>> 24;\n SUB_MIX_3[x] = t;\n\n // Compute inv sub bytes, inv mix columns tables\n var t = x8 * 0x1010101 ^ x4 * 0x10001 ^ x2 * 0x101 ^ x * 0x1010100;\n INV_SUB_MIX_0[sx] = t << 24 | t >>> 8;\n INV_SUB_MIX_1[sx] = t << 16 | t >>> 16;\n INV_SUB_MIX_2[sx] = t << 8 | t >>> 24;\n INV_SUB_MIX_3[sx] = t;\n\n // Compute next counter\n if (!x) {\n x = xi = 1;\n } else {\n x = x2 ^ d[d[d[x8 ^ x2]]];\n xi ^= d[d[xi]];\n }\n }\n })();\n\n // Precomputed Rcon lookup\n var RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36];\n\n /**\n * AES block cipher algorithm.\n */\n var AES = C_algo.AES = BlockCipher.extend({\n _doReset: function _doReset() {\n var t;\n\n // Skip reset of nRounds has been set before and key did not change\n if (this._nRounds && this._keyPriorReset === this._key) {\n return;\n }\n\n // Shortcuts\n var key = this._keyPriorReset = this._key;\n var keyWords = key.words;\n var keySize = key.sigBytes / 4;\n\n // Compute number of rounds\n var nRounds = this._nRounds = keySize + 6;\n\n // Compute number of key schedule rows\n var ksRows = (nRounds + 1) * 4;\n\n // Compute key schedule\n var keySchedule = this._keySchedule = [];\n for (var ksRow = 0; ksRow < ksRows; ksRow++) {\n if (ksRow < keySize) {\n keySchedule[ksRow] = keyWords[ksRow];\n } else {\n t = keySchedule[ksRow - 1];\n if (!(ksRow % keySize)) {\n // Rot word\n t = t << 8 | t >>> 24;\n\n // Sub word\n t = SBOX[t >>> 24] << 24 | SBOX[t >>> 16 & 0xff] << 16 | SBOX[t >>> 8 & 0xff] << 8 | SBOX[t & 0xff];\n\n // Mix Rcon\n t ^= RCON[ksRow / keySize | 0] << 24;\n } else if (keySize > 6 && ksRow % keySize == 4) {\n // Sub word\n t = SBOX[t >>> 24] << 24 | SBOX[t >>> 16 & 0xff] << 16 | SBOX[t >>> 8 & 0xff] << 8 | SBOX[t & 0xff];\n }\n keySchedule[ksRow] = keySchedule[ksRow - keySize] ^ t;\n }\n }\n\n // Compute inv key schedule\n var invKeySchedule = this._invKeySchedule = [];\n for (var invKsRow = 0; invKsRow < ksRows; invKsRow++) {\n var ksRow = ksRows - invKsRow;\n if (invKsRow % 4) {\n var t = keySchedule[ksRow];\n } else {\n var t = keySchedule[ksRow - 4];\n }\n if (invKsRow < 4 || ksRow <= 4) {\n invKeySchedule[invKsRow] = t;\n } else {\n invKeySchedule[invKsRow] = INV_SUB_MIX_0[SBOX[t >>> 24]] ^ INV_SUB_MIX_1[SBOX[t >>> 16 & 0xff]] ^ INV_SUB_MIX_2[SBOX[t >>> 8 & 0xff]] ^ INV_SUB_MIX_3[SBOX[t & 0xff]];\n }\n }\n },\n encryptBlock: function encryptBlock(M, offset) {\n this._doCryptBlock(M, offset, this._keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX);\n },\n decryptBlock: function decryptBlock(M, offset) {\n // Swap 2nd and 4th rows\n var t = M[offset + 1];\n M[offset + 1] = M[offset + 3];\n M[offset + 3] = t;\n this._doCryptBlock(M, offset, this._invKeySchedule, INV_SUB_MIX_0, INV_SUB_MIX_1, INV_SUB_MIX_2, INV_SUB_MIX_3, INV_SBOX);\n\n // Inv swap 2nd and 4th rows\n var t = M[offset + 1];\n M[offset + 1] = M[offset + 3];\n M[offset + 3] = t;\n },\n _doCryptBlock: function _doCryptBlock(M, offset, keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX) {\n // Shortcut\n var nRounds = this._nRounds;\n\n // Get input, add round key\n var s0 = M[offset] ^ keySchedule[0];\n var s1 = M[offset + 1] ^ keySchedule[1];\n var s2 = M[offset + 2] ^ keySchedule[2];\n var s3 = M[offset + 3] ^ keySchedule[3];\n\n // Key schedule row counter\n var ksRow = 4;\n\n // Rounds\n for (var round = 1; round < nRounds; round++) {\n // Shift rows, sub bytes, mix columns, add round key\n var t0 = SUB_MIX_0[s0 >>> 24] ^ SUB_MIX_1[s1 >>> 16 & 0xff] ^ SUB_MIX_2[s2 >>> 8 & 0xff] ^ SUB_MIX_3[s3 & 0xff] ^ keySchedule[ksRow++];\n var t1 = SUB_MIX_0[s1 >>> 24] ^ SUB_MIX_1[s2 >>> 16 & 0xff] ^ SUB_MIX_2[s3 >>> 8 & 0xff] ^ SUB_MIX_3[s0 & 0xff] ^ keySchedule[ksRow++];\n var t2 = SUB_MIX_0[s2 >>> 24] ^ SUB_MIX_1[s3 >>> 16 & 0xff] ^ SUB_MIX_2[s0 >>> 8 & 0xff] ^ SUB_MIX_3[s1 & 0xff] ^ keySchedule[ksRow++];\n var t3 = SUB_MIX_0[s3 >>> 24] ^ SUB_MIX_1[s0 >>> 16 & 0xff] ^ SUB_MIX_2[s1 >>> 8 & 0xff] ^ SUB_MIX_3[s2 & 0xff] ^ keySchedule[ksRow++];\n\n // Update state\n s0 = t0;\n s1 = t1;\n s2 = t2;\n s3 = t3;\n }\n\n // Shift rows, sub bytes, add round key\n var t0 = (SBOX[s0 >>> 24] << 24 | SBOX[s1 >>> 16 & 0xff] << 16 | SBOX[s2 >>> 8 & 0xff] << 8 | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++];\n var t1 = (SBOX[s1 >>> 24] << 24 | SBOX[s2 >>> 16 & 0xff] << 16 | SBOX[s3 >>> 8 & 0xff] << 8 | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++];\n var t2 = (SBOX[s2 >>> 24] << 24 | SBOX[s3 >>> 16 & 0xff] << 16 | SBOX[s0 >>> 8 & 0xff] << 8 | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++];\n var t3 = (SBOX[s3 >>> 24] << 24 | SBOX[s0 >>> 16 & 0xff] << 16 | SBOX[s1 >>> 8 & 0xff] << 8 | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++];\n\n // Set output\n M[offset] = t0;\n M[offset + 1] = t1;\n M[offset + 2] = t2;\n M[offset + 3] = t3;\n },\n keySize: 256 / 32\n });\n\n /**\n * Shortcut functions to the cipher's object interface.\n *\n * @example\n *\n * var ciphertext = CryptoJS.AES.encrypt(message, key, cfg);\n * var plaintext = CryptoJS.AES.decrypt(ciphertext, key, cfg);\n */\n C.AES = BlockCipher._createHelper(AES);\n })();\n (function () {\n // Shortcuts\n var C = CryptoJS;\n var C_lib = C.lib;\n var WordArray = C_lib.WordArray;\n var BlockCipher = C_lib.BlockCipher;\n var C_algo = C.algo;\n\n // Permuted Choice 1 constants\n var PC1 = [57, 49, 41, 33, 25, 17, 9, 1, 58, 50, 42, 34, 26, 18, 10, 2, 59, 51, 43, 35, 27, 19, 11, 3, 60, 52, 44, 36, 63, 55, 47, 39, 31, 23, 15, 7, 62, 54, 46, 38, 30, 22, 14, 6, 61, 53, 45, 37, 29, 21, 13, 5, 28, 20, 12, 4];\n\n // Permuted Choice 2 constants\n var PC2 = [14, 17, 11, 24, 1, 5, 3, 28, 15, 6, 21, 10, 23, 19, 12, 4, 26, 8, 16, 7, 27, 20, 13, 2, 41, 52, 31, 37, 47, 55, 30, 40, 51, 45, 33, 48, 44, 49, 39, 56, 34, 53, 46, 42, 50, 36, 29, 32];\n\n // Cumulative bit shift constants\n var BIT_SHIFTS = [1, 2, 4, 6, 8, 10, 12, 14, 15, 17, 19, 21, 23, 25, 27, 28];\n\n // SBOXes and round permutation constants\n var SBOX_P = [{\n 0x0: 0x808200,\n 0x10000000: 0x8000,\n 0x20000000: 0x808002,\n 0x30000000: 0x2,\n 0x40000000: 0x200,\n 0x50000000: 0x808202,\n 0x60000000: 0x800202,\n 0x70000000: 0x800000,\n 0x80000000: 0x202,\n 0x90000000: 0x800200,\n 0xa0000000: 0x8200,\n 0xb0000000: 0x808000,\n 0xc0000000: 0x8002,\n 0xd0000000: 0x800002,\n 0xe0000000: 0x0,\n 0xf0000000: 0x8202,\n 0x8000000: 0x0,\n 0x18000000: 0x808202,\n 0x28000000: 0x8202,\n 0x38000000: 0x8000,\n 0x48000000: 0x808200,\n 0x58000000: 0x200,\n 0x68000000: 0x808002,\n 0x78000000: 0x2,\n 0x88000000: 0x800200,\n 0x98000000: 0x8200,\n 0xa8000000: 0x808000,\n 0xb8000000: 0x800202,\n 0xc8000000: 0x800002,\n 0xd8000000: 0x8002,\n 0xe8000000: 0x202,\n 0xf8000000: 0x800000,\n 0x1: 0x8000,\n 0x10000001: 0x2,\n 0x20000001: 0x808200,\n 0x30000001: 0x800000,\n 0x40000001: 0x808002,\n 0x50000001: 0x8200,\n 0x60000001: 0x200,\n 0x70000001: 0x800202,\n 0x80000001: 0x808202,\n 0x90000001: 0x808000,\n 0xa0000001: 0x800002,\n 0xb0000001: 0x8202,\n 0xc0000001: 0x202,\n 0xd0000001: 0x800200,\n 0xe0000001: 0x8002,\n 0xf0000001: 0x0,\n 0x8000001: 0x808202,\n 0x18000001: 0x808000,\n 0x28000001: 0x800000,\n 0x38000001: 0x200,\n 0x48000001: 0x8000,\n 0x58000001: 0x800002,\n 0x68000001: 0x2,\n 0x78000001: 0x8202,\n 0x88000001: 0x8002,\n 0x98000001: 0x800202,\n 0xa8000001: 0x202,\n 0xb8000001: 0x808200,\n 0xc8000001: 0x800200,\n 0xd8000001: 0x0,\n 0xe8000001: 0x8200,\n 0xf8000001: 0x808002\n }, {\n 0x0: 0x40084010,\n 0x1000000: 0x4000,\n 0x2000000: 0x80000,\n 0x3000000: 0x40080010,\n 0x4000000: 0x40000010,\n 0x5000000: 0x40084000,\n 0x6000000: 0x40004000,\n 0x7000000: 0x10,\n 0x8000000: 0x84000,\n 0x9000000: 0x40004010,\n 0xa000000: 0x40000000,\n 0xb000000: 0x84010,\n 0xc000000: 0x80010,\n 0xd000000: 0x0,\n 0xe000000: 0x4010,\n 0xf000000: 0x40080000,\n 0x800000: 0x40004000,\n 0x1800000: 0x84010,\n 0x2800000: 0x10,\n 0x3800000: 0x40004010,\n 0x4800000: 0x40084010,\n 0x5800000: 0x40000000,\n 0x6800000: 0x80000,\n 0x7800000: 0x40080010,\n 0x8800000: 0x80010,\n 0x9800000: 0x0,\n 0xa800000: 0x4000,\n 0xb800000: 0x40080000,\n 0xc800000: 0x40000010,\n 0xd800000: 0x84000,\n 0xe800000: 0x40084000,\n 0xf800000: 0x4010,\n 0x10000000: 0x0,\n 0x11000000: 0x40080010,\n 0x12000000: 0x40004010,\n 0x13000000: 0x40084000,\n 0x14000000: 0x40080000,\n 0x15000000: 0x10,\n 0x16000000: 0x84010,\n 0x17000000: 0x4000,\n 0x18000000: 0x4010,\n 0x19000000: 0x80000,\n 0x1a000000: 0x80010,\n 0x1b000000: 0x40000010,\n 0x1c000000: 0x84000,\n 0x1d000000: 0x40004000,\n 0x1e000000: 0x40000000,\n 0x1f000000: 0x40084010,\n 0x10800000: 0x84010,\n 0x11800000: 0x80000,\n 0x12800000: 0x40080000,\n 0x13800000: 0x4000,\n 0x14800000: 0x40004000,\n 0x15800000: 0x40084010,\n 0x16800000: 0x10,\n 0x17800000: 0x40000000,\n 0x18800000: 0x40084000,\n 0x19800000: 0x40000010,\n 0x1a800000: 0x40004010,\n 0x1b800000: 0x80010,\n 0x1c800000: 0x0,\n 0x1d800000: 0x4010,\n 0x1e800000: 0x40080010,\n 0x1f800000: 0x84000\n }, {\n 0x0: 0x104,\n 0x100000: 0x0,\n 0x200000: 0x4000100,\n 0x300000: 0x10104,\n 0x400000: 0x10004,\n 0x500000: 0x4000004,\n 0x600000: 0x4010104,\n 0x700000: 0x4010000,\n 0x800000: 0x4000000,\n 0x900000: 0x4010100,\n 0xa00000: 0x10100,\n 0xb00000: 0x4010004,\n 0xc00000: 0x4000104,\n 0xd00000: 0x10000,\n 0xe00000: 0x4,\n 0xf00000: 0x100,\n 0x80000: 0x4010100,\n 0x180000: 0x4010004,\n 0x280000: 0x0,\n 0x380000: 0x4000100,\n 0x480000: 0x4000004,\n 0x580000: 0x10000,\n 0x680000: 0x10004,\n 0x780000: 0x104,\n 0x880000: 0x4,\n 0x980000: 0x100,\n 0xa80000: 0x4010000,\n 0xb80000: 0x10104,\n 0xc80000: 0x10100,\n 0xd80000: 0x4000104,\n 0xe80000: 0x4010104,\n 0xf80000: 0x4000000,\n 0x1000000: 0x4010100,\n 0x1100000: 0x10004,\n 0x1200000: 0x10000,\n 0x1300000: 0x4000100,\n 0x1400000: 0x100,\n 0x1500000: 0x4010104,\n 0x1600000: 0x4000004,\n 0x1700000: 0x0,\n 0x1800000: 0x4000104,\n 0x1900000: 0x4000000,\n 0x1a00000: 0x4,\n 0x1b00000: 0x10100,\n 0x1c00000: 0x4010000,\n 0x1d00000: 0x104,\n 0x1e00000: 0x10104,\n 0x1f00000: 0x4010004,\n 0x1080000: 0x4000000,\n 0x1180000: 0x104,\n 0x1280000: 0x4010100,\n 0x1380000: 0x0,\n 0x1480000: 0x10004,\n 0x1580000: 0x4000100,\n 0x1680000: 0x100,\n 0x1780000: 0x4010004,\n 0x1880000: 0x10000,\n 0x1980000: 0x4010104,\n 0x1a80000: 0x10104,\n 0x1b80000: 0x4000004,\n 0x1c80000: 0x4000104,\n 0x1d80000: 0x4010000,\n 0x1e80000: 0x4,\n 0x1f80000: 0x10100\n }, {\n 0x0: 0x80401000,\n 0x10000: 0x80001040,\n 0x20000: 0x401040,\n 0x30000: 0x80400000,\n 0x40000: 0x0,\n 0x50000: 0x401000,\n 0x60000: 0x80000040,\n 0x70000: 0x400040,\n 0x80000: 0x80000000,\n 0x90000: 0x400000,\n 0xa0000: 0x40,\n 0xb0000: 0x80001000,\n 0xc0000: 0x80400040,\n 0xd0000: 0x1040,\n 0xe0000: 0x1000,\n 0xf0000: 0x80401040,\n 0x8000: 0x80001040,\n 0x18000: 0x40,\n 0x28000: 0x80400040,\n 0x38000: 0x80001000,\n 0x48000: 0x401000,\n 0x58000: 0x80401040,\n 0x68000: 0x0,\n 0x78000: 0x80400000,\n 0x88000: 0x1000,\n 0x98000: 0x80401000,\n 0xa8000: 0x400000,\n 0xb8000: 0x1040,\n 0xc8000: 0x80000000,\n 0xd8000: 0x400040,\n 0xe8000: 0x401040,\n 0xf8000: 0x80000040,\n 0x100000: 0x400040,\n 0x110000: 0x401000,\n 0x120000: 0x80000040,\n 0x130000: 0x0,\n 0x140000: 0x1040,\n 0x150000: 0x80400040,\n 0x160000: 0x80401000,\n 0x170000: 0x80001040,\n 0x180000: 0x80401040,\n 0x190000: 0x80000000,\n 0x1a0000: 0x80400000,\n 0x1b0000: 0x401040,\n 0x1c0000: 0x80001000,\n 0x1d0000: 0x400000,\n 0x1e0000: 0x40,\n 0x1f0000: 0x1000,\n 0x108000: 0x80400000,\n 0x118000: 0x80401040,\n 0x128000: 0x0,\n 0x138000: 0x401000,\n 0x148000: 0x400040,\n 0x158000: 0x80000000,\n 0x168000: 0x80001040,\n 0x178000: 0x40,\n 0x188000: 0x80000040,\n 0x198000: 0x1000,\n 0x1a8000: 0x80001000,\n 0x1b8000: 0x80400040,\n 0x1c8000: 0x1040,\n 0x1d8000: 0x80401000,\n 0x1e8000: 0x400000,\n 0x1f8000: 0x401040\n }, {\n 0x0: 0x80,\n 0x1000: 0x1040000,\n 0x2000: 0x40000,\n 0x3000: 0x20000000,\n 0x4000: 0x20040080,\n 0x5000: 0x1000080,\n 0x6000: 0x21000080,\n 0x7000: 0x40080,\n 0x8000: 0x1000000,\n 0x9000: 0x20040000,\n 0xa000: 0x20000080,\n 0xb000: 0x21040080,\n 0xc000: 0x21040000,\n 0xd000: 0x0,\n 0xe000: 0x1040080,\n 0xf000: 0x21000000,\n 0x800: 0x1040080,\n 0x1800: 0x21000080,\n 0x2800: 0x80,\n 0x3800: 0x1040000,\n 0x4800: 0x40000,\n 0x5800: 0x20040080,\n 0x6800: 0x21040000,\n 0x7800: 0x20000000,\n 0x8800: 0x20040000,\n 0x9800: 0x0,\n 0xa800: 0x21040080,\n 0xb800: 0x1000080,\n 0xc800: 0x20000080,\n 0xd800: 0x21000000,\n 0xe800: 0x1000000,\n 0xf800: 0x40080,\n 0x10000: 0x40000,\n 0x11000: 0x80,\n 0x12000: 0x20000000,\n 0x13000: 0x21000080,\n 0x14000: 0x1000080,\n 0x15000: 0x21040000,\n 0x16000: 0x20040080,\n 0x17000: 0x1000000,\n 0x18000: 0x21040080,\n 0x19000: 0x21000000,\n 0x1a000: 0x1040000,\n 0x1b000: 0x20040000,\n 0x1c000: 0x40080,\n 0x1d000: 0x20000080,\n 0x1e000: 0x0,\n 0x1f000: 0x1040080,\n 0x10800: 0x21000080,\n 0x11800: 0x1000000,\n 0x12800: 0x1040000,\n 0x13800: 0x20040080,\n 0x14800: 0x20000000,\n 0x15800: 0x1040080,\n 0x16800: 0x80,\n 0x17800: 0x21040000,\n 0x18800: 0x40080,\n 0x19800: 0x21040080,\n 0x1a800: 0x0,\n 0x1b800: 0x21000000,\n 0x1c800: 0x1000080,\n 0x1d800: 0x40000,\n 0x1e800: 0x20040000,\n 0x1f800: 0x20000080\n }, {\n 0x0: 0x10000008,\n 0x100: 0x2000,\n 0x200: 0x10200000,\n 0x300: 0x10202008,\n 0x400: 0x10002000,\n 0x500: 0x200000,\n 0x600: 0x200008,\n 0x700: 0x10000000,\n 0x800: 0x0,\n 0x900: 0x10002008,\n 0xa00: 0x202000,\n 0xb00: 0x8,\n 0xc00: 0x10200008,\n 0xd00: 0x202008,\n 0xe00: 0x2008,\n 0xf00: 0x10202000,\n 0x80: 0x10200000,\n 0x180: 0x10202008,\n 0x280: 0x8,\n 0x380: 0x200000,\n 0x480: 0x202008,\n 0x580: 0x10000008,\n 0x680: 0x10002000,\n 0x780: 0x2008,\n 0x880: 0x200008,\n 0x980: 0x2000,\n 0xa80: 0x10002008,\n 0xb80: 0x10200008,\n 0xc80: 0x0,\n 0xd80: 0x10202000,\n 0xe80: 0x202000,\n 0xf80: 0x10000000,\n 0x1000: 0x10002000,\n 0x1100: 0x10200008,\n 0x1200: 0x10202008,\n 0x1300: 0x2008,\n 0x1400: 0x200000,\n 0x1500: 0x10000000,\n 0x1600: 0x10000008,\n 0x1700: 0x202000,\n 0x1800: 0x202008,\n 0x1900: 0x0,\n 0x1a00: 0x8,\n 0x1b00: 0x10200000,\n 0x1c00: 0x2000,\n 0x1d00: 0x10002008,\n 0x1e00: 0x10202000,\n 0x1f00: 0x200008,\n 0x1080: 0x8,\n 0x1180: 0x202000,\n 0x1280: 0x200000,\n 0x1380: 0x10000008,\n 0x1480: 0x10002000,\n 0x1580: 0x2008,\n 0x1680: 0x10202008,\n 0x1780: 0x10200000,\n 0x1880: 0x10202000,\n 0x1980: 0x10200008,\n 0x1a80: 0x2000,\n 0x1b80: 0x202008,\n 0x1c80: 0x200008,\n 0x1d80: 0x0,\n 0x1e80: 0x10000000,\n 0x1f80: 0x10002008\n }, {\n 0x0: 0x100000,\n 0x10: 0x2000401,\n 0x20: 0x400,\n 0x30: 0x100401,\n 0x40: 0x2100401,\n 0x50: 0x0,\n 0x60: 0x1,\n 0x70: 0x2100001,\n 0x80: 0x2000400,\n 0x90: 0x100001,\n 0xa0: 0x2000001,\n 0xb0: 0x2100400,\n 0xc0: 0x2100000,\n 0xd0: 0x401,\n 0xe0: 0x100400,\n 0xf0: 0x2000000,\n 0x8: 0x2100001,\n 0x18: 0x0,\n 0x28: 0x2000401,\n 0x38: 0x2100400,\n 0x48: 0x100000,\n 0x58: 0x2000001,\n 0x68: 0x2000000,\n 0x78: 0x401,\n 0x88: 0x100401,\n 0x98: 0x2000400,\n 0xa8: 0x2100000,\n 0xb8: 0x100001,\n 0xc8: 0x400,\n 0xd8: 0x2100401,\n 0xe8: 0x1,\n 0xf8: 0x100400,\n 0x100: 0x2000000,\n 0x110: 0x100000,\n 0x120: 0x2000401,\n 0x130: 0x2100001,\n 0x140: 0x100001,\n 0x150: 0x2000400,\n 0x160: 0x2100400,\n 0x170: 0x100401,\n 0x180: 0x401,\n 0x190: 0x2100401,\n 0x1a0: 0x100400,\n 0x1b0: 0x1,\n 0x1c0: 0x0,\n 0x1d0: 0x2100000,\n 0x1e0: 0x2000001,\n 0x1f0: 0x400,\n 0x108: 0x100400,\n 0x118: 0x2000401,\n 0x128: 0x2100001,\n 0x138: 0x1,\n 0x148: 0x2000000,\n 0x158: 0x100000,\n 0x168: 0x401,\n 0x178: 0x2100400,\n 0x188: 0x2000001,\n 0x198: 0x2100000,\n 0x1a8: 0x0,\n 0x1b8: 0x2100401,\n 0x1c8: 0x100401,\n 0x1d8: 0x400,\n 0x1e8: 0x2000400,\n 0x1f8: 0x100001\n }, {\n 0x0: 0x8000820,\n 0x1: 0x20000,\n 0x2: 0x8000000,\n 0x3: 0x20,\n 0x4: 0x20020,\n 0x5: 0x8020820,\n 0x6: 0x8020800,\n 0x7: 0x800,\n 0x8: 0x8020000,\n 0x9: 0x8000800,\n 0xa: 0x20800,\n 0xb: 0x8020020,\n 0xc: 0x820,\n 0xd: 0x0,\n 0xe: 0x8000020,\n 0xf: 0x20820,\n 0x80000000: 0x800,\n 0x80000001: 0x8020820,\n 0x80000002: 0x8000820,\n 0x80000003: 0x8000000,\n 0x80000004: 0x8020000,\n 0x80000005: 0x20800,\n 0x80000006: 0x20820,\n 0x80000007: 0x20,\n 0x80000008: 0x8000020,\n 0x80000009: 0x820,\n 0x8000000a: 0x20020,\n 0x8000000b: 0x8020800,\n 0x8000000c: 0x0,\n 0x8000000d: 0x8020020,\n 0x8000000e: 0x8000800,\n 0x8000000f: 0x20000,\n 0x10: 0x20820,\n 0x11: 0x8020800,\n 0x12: 0x20,\n 0x13: 0x800,\n 0x14: 0x8000800,\n 0x15: 0x8000020,\n 0x16: 0x8020020,\n 0x17: 0x20000,\n 0x18: 0x0,\n 0x19: 0x20020,\n 0x1a: 0x8020000,\n 0x1b: 0x8000820,\n 0x1c: 0x8020820,\n 0x1d: 0x20800,\n 0x1e: 0x820,\n 0x1f: 0x8000000,\n 0x80000010: 0x20000,\n 0x80000011: 0x800,\n 0x80000012: 0x8020020,\n 0x80000013: 0x20820,\n 0x80000014: 0x20,\n 0x80000015: 0x8020000,\n 0x80000016: 0x8000000,\n 0x80000017: 0x8000820,\n 0x80000018: 0x8020820,\n 0x80000019: 0x8000020,\n 0x8000001a: 0x8000800,\n 0x8000001b: 0x0,\n 0x8000001c: 0x20800,\n 0x8000001d: 0x820,\n 0x8000001e: 0x20020,\n 0x8000001f: 0x8020800\n }];\n\n // Masks that select the SBOX input\n var SBOX_MASK = [0xf8000001, 0x1f800000, 0x01f80000, 0x001f8000, 0x0001f800, 0x00001f80, 0x000001f8, 0x8000001f];\n\n /**\n * DES block cipher algorithm.\n */\n var DES = C_algo.DES = BlockCipher.extend({\n _doReset: function _doReset() {\n // Shortcuts\n var key = this._key;\n var keyWords = key.words;\n\n // Select 56 bits according to PC1\n var keyBits = [];\n for (var i = 0; i < 56; i++) {\n var keyBitPos = PC1[i] - 1;\n keyBits[i] = keyWords[keyBitPos >>> 5] >>> 31 - keyBitPos % 32 & 1;\n }\n\n // Assemble 16 subkeys\n var subKeys = this._subKeys = [];\n for (var nSubKey = 0; nSubKey < 16; nSubKey++) {\n // Create subkey\n var subKey = subKeys[nSubKey] = [];\n\n // Shortcut\n var bitShift = BIT_SHIFTS[nSubKey];\n\n // Select 48 bits according to PC2\n for (var i = 0; i < 24; i++) {\n // Select from the left 28 key bits\n subKey[i / 6 | 0] |= keyBits[(PC2[i] - 1 + bitShift) % 28] << 31 - i % 6;\n\n // Select from the right 28 key bits\n subKey[4 + (i / 6 | 0)] |= keyBits[28 + (PC2[i + 24] - 1 + bitShift) % 28] << 31 - i % 6;\n }\n\n // Since each subkey is applied to an expanded 32-bit input,\n // the subkey can be broken into 8 values scaled to 32-bits,\n // which allows the key to be used without expansion\n subKey[0] = subKey[0] << 1 | subKey[0] >>> 31;\n for (var i = 1; i < 7; i++) {\n subKey[i] = subKey[i] >>> (i - 1) * 4 + 3;\n }\n subKey[7] = subKey[7] << 5 | subKey[7] >>> 27;\n }\n\n // Compute inverse subkeys\n var invSubKeys = this._invSubKeys = [];\n for (var i = 0; i < 16; i++) {\n invSubKeys[i] = subKeys[15 - i];\n }\n },\n encryptBlock: function encryptBlock(M, offset) {\n this._doCryptBlock(M, offset, this._subKeys);\n },\n decryptBlock: function decryptBlock(M, offset) {\n this._doCryptBlock(M, offset, this._invSubKeys);\n },\n _doCryptBlock: function _doCryptBlock(M, offset, subKeys) {\n // Get input\n this._lBlock = M[offset];\n this._rBlock = M[offset + 1];\n\n // Initial permutation\n exchangeLR.call(this, 4, 0x0f0f0f0f);\n exchangeLR.call(this, 16, 0x0000ffff);\n exchangeRL.call(this, 2, 0x33333333);\n exchangeRL.call(this, 8, 0x00ff00ff);\n exchangeLR.call(this, 1, 0x55555555);\n\n // Rounds\n for (var round = 0; round < 16; round++) {\n // Shortcuts\n var subKey = subKeys[round];\n var lBlock = this._lBlock;\n var rBlock = this._rBlock;\n\n // Feistel function\n var f = 0;\n for (var i = 0; i < 8; i++) {\n f |= SBOX_P[i][((rBlock ^ subKey[i]) & SBOX_MASK[i]) >>> 0];\n }\n this._lBlock = rBlock;\n this._rBlock = lBlock ^ f;\n }\n\n // Undo swap from last round\n var t = this._lBlock;\n this._lBlock = this._rBlock;\n this._rBlock = t;\n\n // Final permutation\n exchangeLR.call(this, 1, 0x55555555);\n exchangeRL.call(this, 8, 0x00ff00ff);\n exchangeRL.call(this, 2, 0x33333333);\n exchangeLR.call(this, 16, 0x0000ffff);\n exchangeLR.call(this, 4, 0x0f0f0f0f);\n\n // Set output\n M[offset] = this._lBlock;\n M[offset + 1] = this._rBlock;\n },\n keySize: 64 / 32,\n ivSize: 64 / 32,\n blockSize: 64 / 32\n });\n\n // Swap bits across the left and right words\n function exchangeLR(offset, mask) {\n var t = (this._lBlock >>> offset ^ this._rBlock) & mask;\n this._rBlock ^= t;\n this._lBlock ^= t << offset;\n }\n function exchangeRL(offset, mask) {\n var t = (this._rBlock >>> offset ^ this._lBlock) & mask;\n this._lBlock ^= t;\n this._rBlock ^= t << offset;\n }\n\n /**\n * Shortcut functions to the cipher's object interface.\n *\n * @example\n *\n * var ciphertext = CryptoJS.DES.encrypt(message, key, cfg);\n * var plaintext = CryptoJS.DES.decrypt(ciphertext, key, cfg);\n */\n C.DES = BlockCipher._createHelper(DES);\n\n /**\n * Triple-DES block cipher algorithm.\n */\n var TripleDES = C_algo.TripleDES = BlockCipher.extend({\n _doReset: function _doReset() {\n // Shortcuts\n var key = this._key;\n var keyWords = key.words;\n // Make sure the key length is valid (64, 128 or >= 192 bit)\n if (keyWords.length !== 2 && keyWords.length !== 4 && keyWords.length < 6) {\n throw new Error('Invalid key length - 3DES requires the key length to be 64, 128, 192 or >192.');\n }\n\n // Extend the key according to the keying options defined in 3DES standard\n var key1 = keyWords.slice(0, 2);\n var key2 = keyWords.length < 4 ? keyWords.slice(0, 2) : keyWords.slice(2, 4);\n var key3 = keyWords.length < 6 ? keyWords.slice(0, 2) : keyWords.slice(4, 6);\n\n // Create DES instances\n this._des1 = DES.createEncryptor(WordArray.create(key1));\n this._des2 = DES.createEncryptor(WordArray.create(key2));\n this._des3 = DES.createEncryptor(WordArray.create(key3));\n },\n encryptBlock: function encryptBlock(M, offset) {\n this._des1.encryptBlock(M, offset);\n this._des2.decryptBlock(M, offset);\n this._des3.encryptBlock(M, offset);\n },\n decryptBlock: function decryptBlock(M, offset) {\n this._des3.decryptBlock(M, offset);\n this._des2.encryptBlock(M, offset);\n this._des1.decryptBlock(M, offset);\n },\n keySize: 192 / 32,\n ivSize: 64 / 32,\n blockSize: 64 / 32\n });\n\n /**\n * Shortcut functions to the cipher's object interface.\n *\n * @example\n *\n * var ciphertext = CryptoJS.TripleDES.encrypt(message, key, cfg);\n * var plaintext = CryptoJS.TripleDES.decrypt(ciphertext, key, cfg);\n */\n C.TripleDES = BlockCipher._createHelper(TripleDES);\n })();\n (function () {\n // Shortcuts\n var C = CryptoJS;\n var C_lib = C.lib;\n var StreamCipher = C_lib.StreamCipher;\n var C_algo = C.algo;\n\n /**\n * RC4 stream cipher algorithm.\n */\n var RC4 = C_algo.RC4 = StreamCipher.extend({\n _doReset: function _doReset() {\n // Shortcuts\n var key = this._key;\n var keyWords = key.words;\n var keySigBytes = key.sigBytes;\n\n // Init sbox\n var S = this._S = [];\n for (var i = 0; i < 256; i++) {\n S[i] = i;\n }\n\n // Key setup\n for (var i = 0, j = 0; i < 256; i++) {\n var keyByteIndex = i % keySigBytes;\n var keyByte = keyWords[keyByteIndex >>> 2] >>> 24 - keyByteIndex % 4 * 8 & 0xff;\n j = (j + S[i] + keyByte) % 256;\n\n // Swap\n var t = S[i];\n S[i] = S[j];\n S[j] = t;\n }\n\n // Counters\n this._i = this._j = 0;\n },\n _doProcessBlock: function _doProcessBlock(M, offset) {\n M[offset] ^= generateKeystreamWord.call(this);\n },\n keySize: 256 / 32,\n ivSize: 0\n });\n function generateKeystreamWord() {\n // Shortcuts\n var S = this._S;\n var i = this._i;\n var j = this._j;\n\n // Generate keystream word\n var keystreamWord = 0;\n for (var n = 0; n < 4; n++) {\n i = (i + 1) % 256;\n j = (j + S[i]) % 256;\n\n // Swap\n var t = S[i];\n S[i] = S[j];\n S[j] = t;\n keystreamWord |= S[(S[i] + S[j]) % 256] << 24 - n * 8;\n }\n\n // Update counters\n this._i = i;\n this._j = j;\n return keystreamWord;\n }\n\n /**\n * Shortcut functions to the cipher's object interface.\n *\n * @example\n *\n * var ciphertext = CryptoJS.RC4.encrypt(message, key, cfg);\n * var plaintext = CryptoJS.RC4.decrypt(ciphertext, key, cfg);\n */\n C.RC4 = StreamCipher._createHelper(RC4);\n\n /**\n * Modified RC4 stream cipher algorithm.\n */\n var RC4Drop = C_algo.RC4Drop = RC4.extend({\n /**\n * Configuration options.\n *\n * @property {number} drop The number of keystream words to drop. Default 192\n */\n cfg: RC4.cfg.extend({\n drop: 192\n }),\n _doReset: function _doReset() {\n RC4._doReset.call(this);\n\n // Drop\n for (var i = this.cfg.drop; i > 0; i--) {\n generateKeystreamWord.call(this);\n }\n }\n });\n\n /**\n * Shortcut functions to the cipher's object interface.\n *\n * @example\n *\n * var ciphertext = CryptoJS.RC4Drop.encrypt(message, key, cfg);\n * var plaintext = CryptoJS.RC4Drop.decrypt(ciphertext, key, cfg);\n */\n C.RC4Drop = StreamCipher._createHelper(RC4Drop);\n })();\n\n /** @preserve\n * Counter block mode compatible with Dr Brian Gladman fileenc.c\n * derived from CryptoJS.mode.CTR\n * Jan Hruby jhruby.web@gmail.com\n */\n CryptoJS.mode.CTRGladman = function () {\n var CTRGladman = CryptoJS.lib.BlockCipherMode.extend();\n function incWord(word) {\n if ((word >> 24 & 0xff) === 0xff) {\n //overflow\n var b1 = word >> 16 & 0xff;\n var b2 = word >> 8 & 0xff;\n var b3 = word & 0xff;\n if (b1 === 0xff)\n // overflow b1\n {\n b1 = 0;\n if (b2 === 0xff) {\n b2 = 0;\n if (b3 === 0xff) {\n b3 = 0;\n } else {\n ++b3;\n }\n } else {\n ++b2;\n }\n } else {\n ++b1;\n }\n word = 0;\n word += b1 << 16;\n word += b2 << 8;\n word += b3;\n } else {\n word += 0x01 << 24;\n }\n return word;\n }\n function incCounter(counter) {\n if ((counter[0] = incWord(counter[0])) === 0) {\n // encr_data in fileenc.c from Dr Brian Gladman's counts only with DWORD j < 8\n counter[1] = incWord(counter[1]);\n }\n return counter;\n }\n var Encryptor = CTRGladman.Encryptor = CTRGladman.extend({\n processBlock: function processBlock(words, offset) {\n // Shortcuts\n var cipher = this._cipher;\n var blockSize = cipher.blockSize;\n var iv = this._iv;\n var counter = this._counter;\n\n // Generate keystream\n if (iv) {\n counter = this._counter = iv.slice(0);\n\n // Remove IV for subsequent blocks\n this._iv = undefined;\n }\n incCounter(counter);\n var keystream = counter.slice(0);\n cipher.encryptBlock(keystream, 0);\n\n // Encrypt\n for (var i = 0; i < blockSize; i++) {\n words[offset + i] ^= keystream[i];\n }\n }\n });\n CTRGladman.Decryptor = Encryptor;\n return CTRGladman;\n }();\n (function () {\n // Shortcuts\n var C = CryptoJS;\n var C_lib = C.lib;\n var StreamCipher = C_lib.StreamCipher;\n var C_algo = C.algo;\n\n // Reusable objects\n var S = [];\n var C_ = [];\n var G = [];\n\n /**\n * Rabbit stream cipher algorithm\n */\n var Rabbit = C_algo.Rabbit = StreamCipher.extend({\n _doReset: function _doReset() {\n // Shortcuts\n var K = this._key.words;\n var iv = this.cfg.iv;\n\n // Swap endian\n for (var i = 0; i < 4; i++) {\n K[i] = (K[i] << 8 | K[i] >>> 24) & 0x00ff00ff | (K[i] << 24 | K[i] >>> 8) & 0xff00ff00;\n }\n\n // Generate initial state values\n var X = this._X = [K[0], K[3] << 16 | K[2] >>> 16, K[1], K[0] << 16 | K[3] >>> 16, K[2], K[1] << 16 | K[0] >>> 16, K[3], K[2] << 16 | K[1] >>> 16];\n\n // Generate initial counter values\n var C = this._C = [K[2] << 16 | K[2] >>> 16, K[0] & 0xffff0000 | K[1] & 0x0000ffff, K[3] << 16 | K[3] >>> 16, K[1] & 0xffff0000 | K[2] & 0x0000ffff, K[0] << 16 | K[0] >>> 16, K[2] & 0xffff0000 | K[3] & 0x0000ffff, K[1] << 16 | K[1] >>> 16, K[3] & 0xffff0000 | K[0] & 0x0000ffff];\n\n // Carry bit\n this._b = 0;\n\n // Iterate the system four times\n for (var i = 0; i < 4; i++) {\n nextState.call(this);\n }\n\n // Modify the counters\n for (var i = 0; i < 8; i++) {\n C[i] ^= X[i + 4 & 7];\n }\n\n // IV setup\n if (iv) {\n // Shortcuts\n var IV = iv.words;\n var IV_0 = IV[0];\n var IV_1 = IV[1];\n\n // Generate four subvectors\n var i0 = (IV_0 << 8 | IV_0 >>> 24) & 0x00ff00ff | (IV_0 << 24 | IV_0 >>> 8) & 0xff00ff00;\n var i2 = (IV_1 << 8 | IV_1 >>> 24) & 0x00ff00ff | (IV_1 << 24 | IV_1 >>> 8) & 0xff00ff00;\n var i1 = i0 >>> 16 | i2 & 0xffff0000;\n var i3 = i2 << 16 | i0 & 0x0000ffff;\n\n // Modify counter values\n C[0] ^= i0;\n C[1] ^= i1;\n C[2] ^= i2;\n C[3] ^= i3;\n C[4] ^= i0;\n C[5] ^= i1;\n C[6] ^= i2;\n C[7] ^= i3;\n\n // Iterate the system four times\n for (var i = 0; i < 4; i++) {\n nextState.call(this);\n }\n }\n },\n _doProcessBlock: function _doProcessBlock(M, offset) {\n // Shortcut\n var X = this._X;\n\n // Iterate the system\n nextState.call(this);\n\n // Generate four keystream words\n S[0] = X[0] ^ X[5] >>> 16 ^ X[3] << 16;\n S[1] = X[2] ^ X[7] >>> 16 ^ X[5] << 16;\n S[2] = X[4] ^ X[1] >>> 16 ^ X[7] << 16;\n S[3] = X[6] ^ X[3] >>> 16 ^ X[1] << 16;\n for (var i = 0; i < 4; i++) {\n // Swap endian\n S[i] = (S[i] << 8 | S[i] >>> 24) & 0x00ff00ff | (S[i] << 24 | S[i] >>> 8) & 0xff00ff00;\n\n // Encrypt\n M[offset + i] ^= S[i];\n }\n },\n blockSize: 128 / 32,\n ivSize: 64 / 32\n });\n function nextState() {\n // Shortcuts\n var X = this._X;\n var C = this._C;\n\n // Save old counter values\n for (var i = 0; i < 8; i++) {\n C_[i] = C[i];\n }\n\n // Calculate new counter values\n C[0] = C[0] + 0x4d34d34d + this._b | 0;\n C[1] = C[1] + 0xd34d34d3 + (C[0] >>> 0 < C_[0] >>> 0 ? 1 : 0) | 0;\n C[2] = C[2] + 0x34d34d34 + (C[1] >>> 0 < C_[1] >>> 0 ? 1 : 0) | 0;\n C[3] = C[3] + 0x4d34d34d + (C[2] >>> 0 < C_[2] >>> 0 ? 1 : 0) | 0;\n C[4] = C[4] + 0xd34d34d3 + (C[3] >>> 0 < C_[3] >>> 0 ? 1 : 0) | 0;\n C[5] = C[5] + 0x34d34d34 + (C[4] >>> 0 < C_[4] >>> 0 ? 1 : 0) | 0;\n C[6] = C[6] + 0x4d34d34d + (C[5] >>> 0 < C_[5] >>> 0 ? 1 : 0) | 0;\n C[7] = C[7] + 0xd34d34d3 + (C[6] >>> 0 < C_[6] >>> 0 ? 1 : 0) | 0;\n this._b = C[7] >>> 0 < C_[7] >>> 0 ? 1 : 0;\n\n // Calculate the g-values\n for (var i = 0; i < 8; i++) {\n var gx = X[i] + C[i];\n\n // Construct high and low argument for squaring\n var ga = gx & 0xffff;\n var gb = gx >>> 16;\n\n // Calculate high and low result of squaring\n var gh = ((ga * ga >>> 17) + ga * gb >>> 15) + gb * gb;\n var gl = ((gx & 0xffff0000) * gx | 0) + ((gx & 0x0000ffff) * gx | 0);\n\n // High XOR low\n G[i] = gh ^ gl;\n }\n\n // Calculate new state values\n X[0] = G[0] + (G[7] << 16 | G[7] >>> 16) + (G[6] << 16 | G[6] >>> 16) | 0;\n X[1] = G[1] + (G[0] << 8 | G[0] >>> 24) + G[7] | 0;\n X[2] = G[2] + (G[1] << 16 | G[1] >>> 16) + (G[0] << 16 | G[0] >>> 16) | 0;\n X[3] = G[3] + (G[2] << 8 | G[2] >>> 24) + G[1] | 0;\n X[4] = G[4] + (G[3] << 16 | G[3] >>> 16) + (G[2] << 16 | G[2] >>> 16) | 0;\n X[5] = G[5] + (G[4] << 8 | G[4] >>> 24) + G[3] | 0;\n X[6] = G[6] + (G[5] << 16 | G[5] >>> 16) + (G[4] << 16 | G[4] >>> 16) | 0;\n X[7] = G[7] + (G[6] << 8 | G[6] >>> 24) + G[5] | 0;\n }\n\n /**\n * Shortcut functions to the cipher's object interface.\n *\n * @example\n *\n * var ciphertext = CryptoJS.Rabbit.encrypt(message, key, cfg);\n * var plaintext = CryptoJS.Rabbit.decrypt(ciphertext, key, cfg);\n */\n C.Rabbit = StreamCipher._createHelper(Rabbit);\n })();\n\n /**\n * Counter block mode.\n */\n CryptoJS.mode.CTR = function () {\n var CTR = CryptoJS.lib.BlockCipherMode.extend();\n var Encryptor = CTR.Encryptor = CTR.extend({\n processBlock: function processBlock(words, offset) {\n // Shortcuts\n var cipher = this._cipher;\n var blockSize = cipher.blockSize;\n var iv = this._iv;\n var counter = this._counter;\n\n // Generate keystream\n if (iv) {\n counter = this._counter = iv.slice(0);\n\n // Remove IV for subsequent blocks\n this._iv = undefined;\n }\n var keystream = counter.slice(0);\n cipher.encryptBlock(keystream, 0);\n\n // Increment counter\n counter[blockSize - 1] = counter[blockSize - 1] + 1 | 0;\n\n // Encrypt\n for (var i = 0; i < blockSize; i++) {\n words[offset + i] ^= keystream[i];\n }\n }\n });\n CTR.Decryptor = Encryptor;\n return CTR;\n }();\n (function () {\n // Shortcuts\n var C = CryptoJS;\n var C_lib = C.lib;\n var StreamCipher = C_lib.StreamCipher;\n var C_algo = C.algo;\n\n // Reusable objects\n var S = [];\n var C_ = [];\n var G = [];\n\n /**\n * Rabbit stream cipher algorithm.\n *\n * This is a legacy version that neglected to convert the key to little-endian.\n * This error doesn't affect the cipher's security,\n * but it does affect its compatibility with other implementations.\n */\n var RabbitLegacy = C_algo.RabbitLegacy = StreamCipher.extend({\n _doReset: function _doReset() {\n // Shortcuts\n var K = this._key.words;\n var iv = this.cfg.iv;\n\n // Generate initial state values\n var X = this._X = [K[0], K[3] << 16 | K[2] >>> 16, K[1], K[0] << 16 | K[3] >>> 16, K[2], K[1] << 16 | K[0] >>> 16, K[3], K[2] << 16 | K[1] >>> 16];\n\n // Generate initial counter values\n var C = this._C = [K[2] << 16 | K[2] >>> 16, K[0] & 0xffff0000 | K[1] & 0x0000ffff, K[3] << 16 | K[3] >>> 16, K[1] & 0xffff0000 | K[2] & 0x0000ffff, K[0] << 16 | K[0] >>> 16, K[2] & 0xffff0000 | K[3] & 0x0000ffff, K[1] << 16 | K[1] >>> 16, K[3] & 0xffff0000 | K[0] & 0x0000ffff];\n\n // Carry bit\n this._b = 0;\n\n // Iterate the system four times\n for (var i = 0; i < 4; i++) {\n nextState.call(this);\n }\n\n // Modify the counters\n for (var i = 0; i < 8; i++) {\n C[i] ^= X[i + 4 & 7];\n }\n\n // IV setup\n if (iv) {\n // Shortcuts\n var IV = iv.words;\n var IV_0 = IV[0];\n var IV_1 = IV[1];\n\n // Generate four subvectors\n var i0 = (IV_0 << 8 | IV_0 >>> 24) & 0x00ff00ff | (IV_0 << 24 | IV_0 >>> 8) & 0xff00ff00;\n var i2 = (IV_1 << 8 | IV_1 >>> 24) & 0x00ff00ff | (IV_1 << 24 | IV_1 >>> 8) & 0xff00ff00;\n var i1 = i0 >>> 16 | i2 & 0xffff0000;\n var i3 = i2 << 16 | i0 & 0x0000ffff;\n\n // Modify counter values\n C[0] ^= i0;\n C[1] ^= i1;\n C[2] ^= i2;\n C[3] ^= i3;\n C[4] ^= i0;\n C[5] ^= i1;\n C[6] ^= i2;\n C[7] ^= i3;\n\n // Iterate the system four times\n for (var i = 0; i < 4; i++) {\n nextState.call(this);\n }\n }\n },\n _doProcessBlock: function _doProcessBlock(M, offset) {\n // Shortcut\n var X = this._X;\n\n // Iterate the system\n nextState.call(this);\n\n // Generate four keystream words\n S[0] = X[0] ^ X[5] >>> 16 ^ X[3] << 16;\n S[1] = X[2] ^ X[7] >>> 16 ^ X[5] << 16;\n S[2] = X[4] ^ X[1] >>> 16 ^ X[7] << 16;\n S[3] = X[6] ^ X[3] >>> 16 ^ X[1] << 16;\n for (var i = 0; i < 4; i++) {\n // Swap endian\n S[i] = (S[i] << 8 | S[i] >>> 24) & 0x00ff00ff | (S[i] << 24 | S[i] >>> 8) & 0xff00ff00;\n\n // Encrypt\n M[offset + i] ^= S[i];\n }\n },\n blockSize: 128 / 32,\n ivSize: 64 / 32\n });\n function nextState() {\n // Shortcuts\n var X = this._X;\n var C = this._C;\n\n // Save old counter values\n for (var i = 0; i < 8; i++) {\n C_[i] = C[i];\n }\n\n // Calculate new counter values\n C[0] = C[0] + 0x4d34d34d + this._b | 0;\n C[1] = C[1] + 0xd34d34d3 + (C[0] >>> 0 < C_[0] >>> 0 ? 1 : 0) | 0;\n C[2] = C[2] + 0x34d34d34 + (C[1] >>> 0 < C_[1] >>> 0 ? 1 : 0) | 0;\n C[3] = C[3] + 0x4d34d34d + (C[2] >>> 0 < C_[2] >>> 0 ? 1 : 0) | 0;\n C[4] = C[4] + 0xd34d34d3 + (C[3] >>> 0 < C_[3] >>> 0 ? 1 : 0) | 0;\n C[5] = C[5] + 0x34d34d34 + (C[4] >>> 0 < C_[4] >>> 0 ? 1 : 0) | 0;\n C[6] = C[6] + 0x4d34d34d + (C[5] >>> 0 < C_[5] >>> 0 ? 1 : 0) | 0;\n C[7] = C[7] + 0xd34d34d3 + (C[6] >>> 0 < C_[6] >>> 0 ? 1 : 0) | 0;\n this._b = C[7] >>> 0 < C_[7] >>> 0 ? 1 : 0;\n\n // Calculate the g-values\n for (var i = 0; i < 8; i++) {\n var gx = X[i] + C[i];\n\n // Construct high and low argument for squaring\n var ga = gx & 0xffff;\n var gb = gx >>> 16;\n\n // Calculate high and low result of squaring\n var gh = ((ga * ga >>> 17) + ga * gb >>> 15) + gb * gb;\n var gl = ((gx & 0xffff0000) * gx | 0) + ((gx & 0x0000ffff) * gx | 0);\n\n // High XOR low\n G[i] = gh ^ gl;\n }\n\n // Calculate new state values\n X[0] = G[0] + (G[7] << 16 | G[7] >>> 16) + (G[6] << 16 | G[6] >>> 16) | 0;\n X[1] = G[1] + (G[0] << 8 | G[0] >>> 24) + G[7] | 0;\n X[2] = G[2] + (G[1] << 16 | G[1] >>> 16) + (G[0] << 16 | G[0] >>> 16) | 0;\n X[3] = G[3] + (G[2] << 8 | G[2] >>> 24) + G[1] | 0;\n X[4] = G[4] + (G[3] << 16 | G[3] >>> 16) + (G[2] << 16 | G[2] >>> 16) | 0;\n X[5] = G[5] + (G[4] << 8 | G[4] >>> 24) + G[3] | 0;\n X[6] = G[6] + (G[5] << 16 | G[5] >>> 16) + (G[4] << 16 | G[4] >>> 16) | 0;\n X[7] = G[7] + (G[6] << 8 | G[6] >>> 24) + G[5] | 0;\n }\n\n /**\n * Shortcut functions to the cipher's object interface.\n *\n * @example\n *\n * var ciphertext = CryptoJS.RabbitLegacy.encrypt(message, key, cfg);\n * var plaintext = CryptoJS.RabbitLegacy.decrypt(ciphertext, key, cfg);\n */\n C.RabbitLegacy = StreamCipher._createHelper(RabbitLegacy);\n })();\n\n /**\n * Zero padding strategy.\n */\n CryptoJS.pad.ZeroPadding = {\n pad: function pad(data, blockSize) {\n // Shortcut\n var blockSizeBytes = blockSize * 4;\n\n // Pad\n data.clamp();\n data.sigBytes += blockSizeBytes - (data.sigBytes % blockSizeBytes || blockSizeBytes);\n },\n unpad: function unpad(data) {\n // Shortcut\n var dataWords = data.words;\n\n // Unpad\n var i = data.sigBytes - 1;\n for (var i = data.sigBytes - 1; i >= 0; i--) {\n if (dataWords[i >>> 2] >>> 24 - i % 4 * 8 & 0xff) {\n data.sigBytes = i + 1;\n break;\n }\n }\n }\n };\n return CryptoJS;\n});\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/vue-cli-plugin-uni/lib/crypto.js */ 41)[\"default\"], __webpack_require__(/*! ./../../../../HBuilderX/plugins/uniapp-cli/node_modules/webpack/buildin/global.js */ 38), __webpack_require__(/*! ./node_modules/@dcloudio/vue-cli-plugin-uni/lib/crypto.js */ 41)[\"default\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vc3RhdGljL2NyeXB0by1qcy9jcnlwdG8tanMuanMiXSwibmFtZXMiOlsicm9vdCIsImZhY3RvcnkiLCJleHBvcnRzIiwibW9kdWxlIiwiZGVmaW5lIiwiQ3J5cHRvSlMiLCJNYXRoIiwidW5kZWZpbmVkIiwiY3J5cHRvIiwid2luZG93IiwibXNDcnlwdG8iLCJnbG9iYWwiLCJyZXF1aXJlIiwiZXJyIiwiY3J5cHRvU2VjdXJlUmFuZG9tSW50IiwiZ2V0UmFuZG9tVmFsdWVzIiwiVWludDMyQXJyYXkiLCJyYW5kb21CeXRlcyIsInJlYWRJbnQzMkxFIiwiRXJyb3IiLCJjcmVhdGUiLCJPYmplY3QiLCJGIiwib2JqIiwic3VidHlwZSIsInByb3RvdHlwZSIsIkMiLCJDX2xpYiIsImxpYiIsIkJhc2UiLCJleHRlbmQiLCJvdmVycmlkZXMiLCJtaXhJbiIsImhhc093blByb3BlcnR5IiwiaW5pdCIsIiRzdXBlciIsImFwcGx5IiwiYXJndW1lbnRzIiwiaW5zdGFuY2UiLCJwcm9wZXJ0aWVzIiwicHJvcGVydHlOYW1lIiwidG9TdHJpbmciLCJjbG9uZSIsIldvcmRBcnJheSIsIndvcmRzIiwic2lnQnl0ZXMiLCJsZW5ndGgiLCJlbmNvZGVyIiwiSGV4Iiwic3RyaW5naWZ5IiwiY29uY2F0Iiwid29yZEFycmF5IiwidGhpc1dvcmRzIiwidGhhdFdvcmRzIiwidGhpc1NpZ0J5dGVzIiwidGhhdFNpZ0J5dGVzIiwiY2xhbXAiLCJpIiwidGhhdEJ5dGUiLCJjZWlsIiwiY2FsbCIsInNsaWNlIiwicmFuZG9tIiwibkJ5dGVzIiwicHVzaCIsIkNfZW5jIiwiZW5jIiwiaGV4Q2hhcnMiLCJiaXRlIiwiam9pbiIsInBhcnNlIiwiaGV4U3RyIiwiaGV4U3RyTGVuZ3RoIiwicGFyc2VJbnQiLCJzdWJzdHIiLCJMYXRpbjEiLCJsYXRpbjFDaGFycyIsIlN0cmluZyIsImZyb21DaGFyQ29kZSIsImxhdGluMVN0ciIsImxhdGluMVN0ckxlbmd0aCIsImNoYXJDb2RlQXQiLCJVdGY4IiwiZGVjb2RlVVJJQ29tcG9uZW50IiwiZXNjYXBlIiwiZSIsInV0ZjhTdHIiLCJ1bmVzY2FwZSIsImVuY29kZVVSSUNvbXBvbmVudCIsIkJ1ZmZlcmVkQmxvY2tBbGdvcml0aG0iLCJyZXNldCIsIl9kYXRhIiwiX25EYXRhQnl0ZXMiLCJfYXBwZW5kIiwiZGF0YSIsIl9wcm9jZXNzIiwiZG9GbHVzaCIsInByb2Nlc3NlZFdvcmRzIiwiZGF0YVdvcmRzIiwiZGF0YVNpZ0J5dGVzIiwiYmxvY2tTaXplIiwiYmxvY2tTaXplQnl0ZXMiLCJuQmxvY2tzUmVhZHkiLCJtYXgiLCJfbWluQnVmZmVyU2l6ZSIsIm5Xb3Jkc1JlYWR5IiwibkJ5dGVzUmVhZHkiLCJtaW4iLCJvZmZzZXQiLCJfZG9Qcm9jZXNzQmxvY2siLCJzcGxpY2UiLCJIYXNoZXIiLCJjZmciLCJfZG9SZXNldCIsInVwZGF0ZSIsIm1lc3NhZ2VVcGRhdGUiLCJmaW5hbGl6ZSIsImhhc2giLCJfZG9GaW5hbGl6ZSIsIl9jcmVhdGVIZWxwZXIiLCJoYXNoZXIiLCJtZXNzYWdlIiwiX2NyZWF0ZUhtYWNIZWxwZXIiLCJrZXkiLCJDX2FsZ28iLCJITUFDIiwiYWxnbyIsIkJhc2U2NCIsIm1hcCIsIl9tYXAiLCJiYXNlNjRDaGFycyIsImJ5dGUxIiwiYnl0ZTIiLCJieXRlMyIsInRyaXBsZXQiLCJqIiwiY2hhckF0IiwicGFkZGluZ0NoYXIiLCJiYXNlNjRTdHIiLCJiYXNlNjRTdHJMZW5ndGgiLCJyZXZlcnNlTWFwIiwiX3JldmVyc2VNYXAiLCJwYWRkaW5nSW5kZXgiLCJpbmRleE9mIiwicGFyc2VMb29wIiwiYml0czEiLCJiaXRzMiIsImJpdHNDb21iaW5lZCIsIlQiLCJhYnMiLCJzaW4iLCJNRDUiLCJfaGFzaCIsIk0iLCJvZmZzZXRfaSIsIk1fb2Zmc2V0X2kiLCJIIiwiTV9vZmZzZXRfMCIsIk1fb2Zmc2V0XzEiLCJNX29mZnNldF8yIiwiTV9vZmZzZXRfMyIsIk1fb2Zmc2V0XzQiLCJNX29mZnNldF81IiwiTV9vZmZzZXRfNiIsIk1fb2Zmc2V0XzciLCJNX29mZnNldF84IiwiTV9vZmZzZXRfOSIsIk1fb2Zmc2V0XzEwIiwiTV9vZmZzZXRfMTEiLCJNX29mZnNldF8xMiIsIk1fb2Zmc2V0XzEzIiwiTV9vZmZzZXRfMTQiLCJNX29mZnNldF8xNSIsImEiLCJiIiwiYyIsImQiLCJGRiIsIkdHIiwiSEgiLCJJSSIsIm5CaXRzVG90YWwiLCJuQml0c0xlZnQiLCJuQml0c1RvdGFsSCIsImZsb29yIiwibkJpdHNUb3RhbEwiLCJIX2kiLCJ4IiwicyIsInQiLCJuIiwiSG1hY01ENSIsIlciLCJTSEExIiwiSG1hY1NIQTEiLCJLIiwiaXNQcmltZSIsInNxcnROIiwic3FydCIsImZhY3RvciIsImdldEZyYWN0aW9uYWxCaXRzIiwiblByaW1lIiwicG93IiwiU0hBMjU2IiwiZiIsImciLCJoIiwiZ2FtbWEweCIsImdhbW1hMCIsImdhbW1hMXgiLCJnYW1tYTEiLCJjaCIsIm1haiIsInNpZ21hMCIsInNpZ21hMSIsInQxIiwidDIiLCJIbWFjU0hBMjU2IiwiVXRmMTZCRSIsIlV0ZjE2IiwidXRmMTZDaGFycyIsImNvZGVQb2ludCIsInV0ZjE2U3RyIiwidXRmMTZTdHJMZW5ndGgiLCJVdGYxNkxFIiwic3dhcEVuZGlhbiIsIndvcmQiLCJBcnJheUJ1ZmZlciIsInN1cGVySW5pdCIsInN1YkluaXQiLCJ0eXBlZEFycmF5IiwiVWludDhBcnJheSIsIkludDhBcnJheSIsIlVpbnQ4Q2xhbXBlZEFycmF5IiwiSW50MTZBcnJheSIsIlVpbnQxNkFycmF5IiwiSW50MzJBcnJheSIsIkZsb2F0MzJBcnJheSIsIkZsb2F0NjRBcnJheSIsImJ1ZmZlciIsImJ5dGVPZmZzZXQiLCJieXRlTGVuZ3RoIiwidHlwZWRBcnJheUJ5dGVMZW5ndGgiLCJfemwiLCJfenIiLCJfc2wiLCJfc3IiLCJfaGwiLCJfaHIiLCJSSVBFTUQxNjAiLCJobCIsImhyIiwiemwiLCJ6ciIsInNsIiwic3IiLCJhbCIsImJsIiwiY2wiLCJkbCIsImVsIiwiYXIiLCJiciIsImNyIiwiZHIiLCJlciIsImYxIiwiZjIiLCJmMyIsImY0IiwiZjUiLCJyb3RsIiwieSIsInoiLCJIbWFjUklQRU1EMTYwIiwiX2hhc2hlciIsImhhc2hlckJsb2NrU2l6ZSIsImhhc2hlckJsb2NrU2l6ZUJ5dGVzIiwib0tleSIsIl9vS2V5IiwiaUtleSIsIl9pS2V5Iiwib0tleVdvcmRzIiwiaUtleVdvcmRzIiwiaW5uZXJIYXNoIiwiaG1hYyIsIlBCS0RGMiIsImtleVNpemUiLCJpdGVyYXRpb25zIiwiY29tcHV0ZSIsInBhc3N3b3JkIiwic2FsdCIsImRlcml2ZWRLZXkiLCJibG9ja0luZGV4IiwiZGVyaXZlZEtleVdvcmRzIiwiYmxvY2tJbmRleFdvcmRzIiwiYmxvY2siLCJibG9ja1dvcmRzIiwiYmxvY2tXb3Jkc0xlbmd0aCIsImludGVybWVkaWF0ZSIsImludGVybWVkaWF0ZVdvcmRzIiwiRXZwS0RGIiwiU0hBMjI0IiwiSG1hY1NIQTIyNCIsIlgzMldvcmRBcnJheSIsIkNfeDY0IiwieDY0IiwiWDY0V29yZCIsIldvcmQiLCJoaWdoIiwibG93IiwiWDY0V29yZEFycmF5IiwidG9YMzIiLCJ4NjRXb3JkcyIsIng2NFdvcmRzTGVuZ3RoIiwieDMyV29yZHMiLCJ4NjRXb3JkIiwid29yZHNMZW5ndGgiLCJSSE9fT0ZGU0VUUyIsIlBJX0lOREVYRVMiLCJST1VORF9DT05TVEFOVFMiLCJuZXdYIiwibmV3WSIsIkxGU1IiLCJyb3VuZENvbnN0YW50TXN3Iiwicm91bmRDb25zdGFudExzdyIsImJpdFBvc2l0aW9uIiwiU0hBMyIsIm91dHB1dExlbmd0aCIsInN0YXRlIiwiX3N0YXRlIiwibkJsb2NrU2l6ZUxhbmVzIiwiTTJpIiwiTTJpMSIsImxhbmUiLCJyb3VuZCIsInRNc3ciLCJ0THN3IiwiVHgiLCJUeDQiLCJUeDEiLCJUeDFNc3ciLCJUeDFMc3ciLCJsYW5lSW5kZXgiLCJsYW5lTXN3IiwibGFuZUxzdyIsInJob09mZnNldCIsIlRQaUxhbmUiLCJUMCIsInN0YXRlMCIsIlRMYW5lIiwiVHgxTGFuZSIsIlR4MkxhbmUiLCJyb3VuZENvbnN0YW50IiwiYmxvY2tTaXplQml0cyIsIm91dHB1dExlbmd0aEJ5dGVzIiwib3V0cHV0TGVuZ3RoTGFuZXMiLCJoYXNoV29yZHMiLCJIbWFjU0hBMyIsIlg2NFdvcmRfY3JlYXRlIiwiU0hBNTEyIiwiSDAiLCJIMSIsIkgyIiwiSDMiLCJINCIsIkg1IiwiSDYiLCJINyIsIkgwaCIsIkgwbCIsIkgxaCIsIkgxbCIsIkgyaCIsIkgybCIsIkgzaCIsIkgzbCIsIkg0aCIsIkg0bCIsIkg1aCIsIkg1bCIsIkg2aCIsIkg2bCIsIkg3aCIsIkg3bCIsImFoIiwiYmgiLCJkaCIsImVoIiwiZmgiLCJmbCIsImdoIiwiZ2wiLCJoaCIsIldpbCIsIldpaCIsIldpIiwiZ2FtbWEweGgiLCJnYW1tYTB4bCIsImdhbW1hMGgiLCJnYW1tYTBsIiwiZ2FtbWExeGgiLCJnYW1tYTF4bCIsImdhbW1hMWgiLCJnYW1tYTFsIiwiV2k3IiwiV2k3aCIsIldpN2wiLCJXaTE2IiwiV2kxNmgiLCJXaTE2bCIsImNoaCIsImNobCIsIm1hamgiLCJtYWpsIiwic2lnbWEwaCIsInNpZ21hMGwiLCJzaWdtYTFoIiwic2lnbWExbCIsIktpIiwiS2loIiwiS2lsIiwidDFsIiwidDFoIiwidDJsIiwidDJoIiwiSG1hY1NIQTUxMiIsIlNIQTM4NCIsIkhtYWNTSEEzODQiLCJDaXBoZXIiLCJjcmVhdGVFbmNyeXB0b3IiLCJfRU5DX1hGT1JNX01PREUiLCJjcmVhdGVEZWNyeXB0b3IiLCJfREVDX1hGT1JNX01PREUiLCJ4Zm9ybU1vZGUiLCJfeGZvcm1Nb2RlIiwiX2tleSIsInByb2Nlc3MiLCJkYXRhVXBkYXRlIiwiZmluYWxQcm9jZXNzZWREYXRhIiwiaXZTaXplIiwic2VsZWN0Q2lwaGVyU3RyYXRlZ3kiLCJQYXNzd29yZEJhc2VkQ2lwaGVyIiwiU2VyaWFsaXphYmxlQ2lwaGVyIiwiY2lwaGVyIiwiZW5jcnlwdCIsImRlY3J5cHQiLCJjaXBoZXJ0ZXh0IiwiU3RyZWFtQ2lwaGVyIiwiZmluYWxQcm9jZXNzZWRCbG9ja3MiLCJDX21vZGUiLCJtb2RlIiwiQmxvY2tDaXBoZXJNb2RlIiwiaXYiLCJFbmNyeXB0b3IiLCJEZWNyeXB0b3IiLCJfY2lwaGVyIiwiX2l2IiwiQ0JDIiwicHJvY2Vzc0Jsb2NrIiwieG9yQmxvY2siLCJlbmNyeXB0QmxvY2siLCJfcHJldkJsb2NrIiwidGhpc0Jsb2NrIiwiZGVjcnlwdEJsb2NrIiwiQ19wYWQiLCJwYWQiLCJQa2NzNyIsIm5QYWRkaW5nQnl0ZXMiLCJwYWRkaW5nV29yZCIsInBhZGRpbmdXb3JkcyIsInBhZGRpbmciLCJ1bnBhZCIsIkJsb2NrQ2lwaGVyIiwibW9kZUNyZWF0b3IiLCJfbW9kZSIsIl9fY3JlYXRvciIsIkNpcGhlclBhcmFtcyIsImNpcGhlclBhcmFtcyIsImZvcm1hdHRlciIsIkNfZm9ybWF0IiwiZm9ybWF0IiwiT3BlblNTTEZvcm1hdHRlciIsIk9wZW5TU0wiLCJvcGVuU1NMU3RyIiwiY2lwaGVydGV4dFdvcmRzIiwiZW5jcnlwdG9yIiwiY2lwaGVyQ2ZnIiwiYWxnb3JpdGhtIiwiX3BhcnNlIiwicGxhaW50ZXh0IiwiQ19rZGYiLCJrZGYiLCJPcGVuU1NMS2RmIiwiZXhlY3V0ZSIsImRlcml2ZWRQYXJhbXMiLCJDRkIiLCJnZW5lcmF0ZUtleXN0cmVhbUFuZEVuY3J5cHQiLCJrZXlzdHJlYW0iLCJFQ0IiLCJBbnNpWDkyMyIsImxhc3RCeXRlUG9zIiwiSXNvMTAxMjYiLCJJc285Nzk3MSIsIlplcm9QYWRkaW5nIiwiT0ZCIiwiX2tleXN0cmVhbSIsIk5vUGFkZGluZyIsIkhleEZvcm1hdHRlciIsImlucHV0IiwiU0JPWCIsIklOVl9TQk9YIiwiU1VCX01JWF8wIiwiU1VCX01JWF8xIiwiU1VCX01JWF8yIiwiU1VCX01JWF8zIiwiSU5WX1NVQl9NSVhfMCIsIklOVl9TVUJfTUlYXzEiLCJJTlZfU1VCX01JWF8yIiwiSU5WX1NVQl9NSVhfMyIsInhpIiwic3giLCJ4MiIsIng0IiwieDgiLCJSQ09OIiwiQUVTIiwiX25Sb3VuZHMiLCJfa2V5UHJpb3JSZXNldCIsImtleVdvcmRzIiwiblJvdW5kcyIsImtzUm93cyIsImtleVNjaGVkdWxlIiwiX2tleVNjaGVkdWxlIiwia3NSb3ciLCJpbnZLZXlTY2hlZHVsZSIsIl9pbnZLZXlTY2hlZHVsZSIsImludktzUm93IiwiX2RvQ3J5cHRCbG9jayIsInMwIiwiczEiLCJzMiIsInMzIiwidDAiLCJ0MyIsIlBDMSIsIlBDMiIsIkJJVF9TSElGVFMiLCJTQk9YX1AiLCJTQk9YX01BU0siLCJERVMiLCJrZXlCaXRzIiwia2V5Qml0UG9zIiwic3ViS2V5cyIsIl9zdWJLZXlzIiwiblN1YktleSIsInN1YktleSIsImJpdFNoaWZ0IiwiaW52U3ViS2V5cyIsIl9pbnZTdWJLZXlzIiwiX2xCbG9jayIsIl9yQmxvY2siLCJleGNoYW5nZUxSIiwiZXhjaGFuZ2VSTCIsImxCbG9jayIsInJCbG9jayIsIm1hc2siLCJUcmlwbGVERVMiLCJrZXkxIiwia2V5MiIsImtleTMiLCJfZGVzMSIsIl9kZXMyIiwiX2RlczMiLCJSQzQiLCJrZXlTaWdCeXRlcyIsIlMiLCJfUyIsImtleUJ5dGVJbmRleCIsImtleUJ5dGUiLCJfaSIsIl9qIiwiZ2VuZXJhdGVLZXlzdHJlYW1Xb3JkIiwia2V5c3RyZWFtV29yZCIsIlJDNERyb3AiLCJkcm9wIiwiQ1RSR2xhZG1hbiIsImluY1dvcmQiLCJiMSIsImIyIiwiYjMiLCJpbmNDb3VudGVyIiwiY291bnRlciIsIl9jb3VudGVyIiwiQ18iLCJHIiwiUmFiYml0IiwiWCIsIl9YIiwiX0MiLCJfYiIsIm5leHRTdGF0ZSIsIklWIiwiSVZfMCIsIklWXzEiLCJpMCIsImkyIiwiaTEiLCJpMyIsImd4IiwiZ2EiLCJnYiIsIkNUUiIsIlJhYmJpdExlZ2FjeSJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUUsV0FBVUEsSUFBSSxFQUFFQyxPQUFPLEVBQUU7RUFDMUIsSUFBSSxPQUFjLHVCQUFQQyxPQUFPLE9BQUssUUFBUSxFQUFFO0lBQ2hDO0lBQ0FDLE1BQU0sQ0FBQ0QsT0FBTyxHQUFHQSxPQUFP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QUN2QixDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQzdELENBQUMsRUFBRyxDQUFDLEVBQUUsRUFBRSxFQUFHLENBQUMsRUFBRSxFQUFFLEVBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRyxDQUFDLEVBQUUsRUFBRSxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFHLENBQUMsRUFDN0QsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRSxFQUFFLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRyxDQUFDLEVBQUUsRUFBRSxFQUM3RCxDQUFDLEVBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRSxFQUFFLEVBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQzdELENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUUsRUFBRSxFQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ25FLElBQUlnTyxHQUFHLEdBQUd6TSxTQUFTLENBQUN2QixNQUFNLENBQUMsQ0FDdkIsQ0FBQyxFQUFFLEVBQUUsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUUsRUFBRSxFQUFHLENBQUMsRUFBRSxFQUFFLEVBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRyxDQUFDLEVBQUUsRUFBRSxFQUM3RCxDQUFDLEVBQUUsRUFBRSxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQzdELEVBQUUsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUUsRUFBRSxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUUsRUFBRSxFQUFHLENBQUMsRUFBRSxFQUFFLEVBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFFLEVBQUUsRUFDOUQsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUUsRUFBRSxFQUFHLENBQUMsRUFBRSxFQUFFLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUM3RCxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNwRSxJQUFJaU8sR0FBRyxHQUFHMU0sU0FBUyxDQUFDdkIsTUFBTSxDQUFDLENBQ3RCLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFDL0QsQ0FBQyxFQUFFLENBQUMsRUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRyxDQUFDLEVBQUUsRUFBRSxFQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUM3RCxFQUFFLEVBQUUsRUFBRSxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUUsRUFBRSxFQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRyxDQUFDLEVBQUUsRUFBRSxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUUsRUFBRSxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQzVELEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFFLEVBQUUsRUFDaEUsQ0FBQyxFQUFFLEVBQUUsRUFBRyxDQUFDLEVBQUUsRUFBRSxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxDQUFFLENBQUM7SUFDcEUsSUFBSWtPLEdBQUcsR0FBRzNNLFNBQVMsQ0FBQ3ZCLE1BQU0sQ0FBQyxDQUN2QixDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRyxDQUFDLEVBQzdELENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFHLENBQUMsRUFBRSxFQUFFLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRSxFQUFFLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRSxFQUFFLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFDN0QsQ0FBQyxFQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUM3RCxFQUFFLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRyxDQUFDLEVBQUUsRUFBRSxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUUsRUFBRSxFQUFHLENBQUMsRUFBRSxFQUFFLEVBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRyxDQUFDLEVBQzlELENBQUMsRUFBRyxDQUFDLEVBQUUsRUFBRSxFQUFHLENBQUMsRUFBRSxFQUFFLEVBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBRSxDQUFDO0lBRXBFLElBQUltTyxHQUFHLEdBQUk1TSxTQUFTLENBQUN2QixNQUFNLENBQUMsQ0FBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDMUYsSUFBSW9PLEdBQUcsR0FBSTdNLFNBQVMsQ0FBQ3ZCLE1BQU0sQ0FBQyxDQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxV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QUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRUEsY0FBYyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFDOUVBLGNBQWMsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUVBLGNBQWMsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQzlFQSxjQUFjLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFQSxjQUFjLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUM5RUEsY0FBYyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRUEsY0FBYyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFDOUVBLGNBQWMsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUVBLGNBQWMsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQzlFQSxjQUFjLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFQSxjQUFjLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUM5RUEsY0FBYyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRUEsY0FBYyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFDOUVBLGNBQWMsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUVBLGNBQWMsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQzlFQSxjQUFjLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFQSxjQUFjLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUM5RUEsY0FBYyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRUEsY0FBYyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFDOUVBLGNBQWMsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUVBLGNBQWMsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQzlFQSxjQUFjLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFQSxjQUFjLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUM5RUEsY0FBYyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRUEsY0FBYyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFDOUVBLGNBQWMsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUVBLGNBQWMsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQzlFQSxjQUFjLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFQSxjQUFjLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUM5RUEsY0FBYyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRUEsY0FBYyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFDOUVBLGNBQWMsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUVBLGNBQWMsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQzlFQSxjQUFjLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFQSxjQUFjLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUM5RUEsY0FBYyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRUEsY0FBYyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFDOUVBLGNBQWMsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUVBLGNBQWMsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQzlFQSxjQUFjLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFQSxjQUFjLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUM5RUEsY0FBYyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRUEsY0FBYyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFDOUVBLGNBQWMsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUVBLGNBQWMsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQzlFQSxjQUFjLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFQSxjQUFjLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUM5RUEsY0FBYyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRUEsY0FBYyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFDOUVBLGNBQWMsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUVBLGNBQWMsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQzlFQSxjQUFjLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFQSxjQUFjLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUM5RUEsY0FBYyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRUEsY0FBYyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFDOUVBLGNBQWMsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUVBLGNBQWMsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQzlFQSxjQUFjLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFQSxjQUFjLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUM5RUEsY0FBYyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRUEsY0FBYyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFDOUVBLGNBQWMsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUVBLGNBQWMsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQzlFQSxjQUFjLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFQSxjQUFjLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUM5RUEsY0FBYyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRUEsY0FBYyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFDOUVBLGNBQWMsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUVBLGNBQWMsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQzlFQSxjQUFjLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFQSxjQUFjLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUM5RUEsY0FBYyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRUEsY0FBYyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFDOUVBLGNBQWMs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LEVBQUUsRUFDdEIsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBRSxDQUFDLEVBQ3JCLEVBQUUsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUNyQixFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFDdEIsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQ3RCLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUN0QixFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FDekI7O0lBRUQ7SUFDQSxJQUFJQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7O0lBRWpGO0lBQ0EsSUFBSUMsTUFBTSxHQUFHLENBQ1Q7TUFDSSxHQUFHLEVBQUUsUUFBUTtNQUNiLFVBQVUsRUFBRSxNQUFNO01BQ2xCLFVBQVUsRUFBRSxRQUFRO01BQ3BCLFVBQVUsRUFBRSxHQUFHO01BQ2YsVUFBVSxFQUFFLEtBQUs7TUFDakIsVUFBVSxFQUFFLFFBQVE7TUFDcEIsVUFBVSxFQUFFLFFBQVE7TUFDcEIsVUFBVSxFQUFFLFFBQVE7TUFDcEIsVUFBVSxFQUFFLEtBQUs7TUFDakIsVUFBVSxFQUFFLFFBQVE7TUFDcEIsVUFBVSxFQUFFLE1BQU07TUFDbEIsVUFBVSxFQUFFLFFBQVE7TUFDcEIsVUFBVSxFQUFFLE1BQU07TUFDbEIsVUFBVSxFQUFFLFFBQVE7TUFDcEIsVUFBVSxFQUFFLEdBQUc7TUFDZixVQUFVLEVBQUUsTUFBTTtNQUNsQixTQUFTLEVBQUUsR0FBRztNQUNkLFVBQVUsRUFBRSxRQUFRO01BQ3BCLFVBQVUsRUFBRSxNQUFNO01BQ2xCLFVBQVUsRUFBRSxNQUFNO01BQ2xCLFVBQVUsRUFBRSxRQUFRO01BQ3BCLFVBQVUsRUFBRSxLQUFLO01BQ2pCLFVBQVUsRUFBRSxRQUFRO01BQ3BCLFVBQVUsRUFBRSxHQUFHO01BQ2YsVUFBVSxFQUFFLFFBQVE7TUFDcEIsVUFBVSxFQUFFLE1BQU07TUFDbEIsVUFBVSxFQUFFLFFBQVE7TUFDcEIsVUFBVSxFQUFFLFFBQVE7TUFDcEIsVUFBVSxFQUFFLFFBQVE7TUFDcEIsVUFBVSxFQUFFLE1BQU07TUFDbEIsVUFBVSxFQUFFLEtBQUs7TUFDakIsVUFBVSxFQUFFLFFBQVE7TUFDcEIsR0FBRyxFQUFFLE1BQU07TUFDWCxVQUFVLEVBQUUsR0FBRztNQUNmLFVBQVUsRUFBRSxRQUFRO01BQ3BCLFVBQVUsRUFBRSxRQUFRO01BQ3BCLFVBQVUsRUFBRSxRQUFRO01BQ3BCLFVBQVUsRUFBRSxNQUFNO01BQ2xCLFVBQVUsRUFBRSxLQUFLO01BQ2pCLFVBQVUsRUFBRSxRQUFRO01BQ3BCLFVBQVUsRUFBRSxRQUFRO01BQ3BCLFVBQVUsRUFBRSxRQUFRO01BQ3BCLFVBQVUsRUFBRSxRQUFRO01BQ3BCLFVBQVUsRUFBRSxNQUFNO01BQ2xCLFVBQVUsRUFBRSxLQUFLO01BQ2pCLFVBQVUsRUFBRSxRQUFRO01BQ3BCLFVBQVUsRUFBRSxNQUFNO01BQ2xCLFVBQVUsRUFBRSxHQUFHO01BQ2YsU0FBUyxFQUFFLFFBQVE7TUFDbkIsVUFBVSxFQUFFLFFBQVE7TUFDcEIsVUFBVSxFQUFFLFFBQVE7TUFDcEIsVUFBVSxFQUFFLEtBQUs7TUFDakIsVUFBVSxFQUFFLE1BQU07TUFDbEIsVUFBVSxFQUFFLFFBQVE7TUFDcEIsVUFBVSxFQUFFLEdBQUc7TUFDZixVQUFVLEVBQUUsTUFBTTtNQUNsQixVQUFVLEVBQUUsTUFBTTtNQUNsQixVQUFVLEVBQUUsUUFBUTtNQUNwQixVQUFVLEVBQUUsS0FBSztNQUNqQixVQUFVLEVBQUUsUUFBUTtNQUNwQixVQUFVLEVBQUUsUUFBUTtNQUNwQixVQUFVLEVBQUUsR0FBRztNQUNmLFVBQVUsRUFBRSxNQUFNO01BQ2xCLFVBQVUsRUFBRTtJQUNoQixDQUFDLEVBQ0Q7TUFDSSxHQUFHLEVBQUUsVUFBVTtNQUNmLFNBQVMsRUFBRSxNQUFNO01BQ2pCLFNBQVMsRUFBRSxPQUFPO01BQ2xCLFNBQVMsRUFBRSxVQUFVO01BQ3JCLFNBQVMsRUFBRSxVQUFVO01BQ3JCLFNBQVMsRUFBRSxVQUFVO01BQ3JCLFNBQVMsRUFBRSxVQUFVO01BQ3JCLFNBQVMsRUFBRSxJQUFJO01BQ2YsU0FBUyxFQUFFLE9BQU87TUFDbEIsU0FBUyxFQUFFLFVBQVU7TUFDckIsU0FBUyxFQUFFLFVBQVU7TUFDckIsU0FBUyxFQUFFLE9BQU87TUFDbEIsU0FBUyxFQUFFLE9BQU87TUFDbEIsU0FBUyxFQUFFLEdBQUc7TUFDZCxTQUFTLEVBQUUsTUFBTTtNQUNqQixTQUFTLEVBQUUsVUFBVTtNQUNyQixRQUFRLEVBQUUsVUFBVTtNQUNwQixTQUFTLEVBQUUsT0FBTztNQUNsQixTQUFTLEVBQUUsSUFBSTtNQUNmLFNBQVMsRUFBRSxVQUFVO01BQ3JCLFNBQVMsRUFBRSxVQUFVO01BQ3JCLFNBQVMsRUFBRSxVQUFVO01BQ3JCLFNBQVMsRUFBRSxPQUFPO01BQ2xCLFNBQVMsRUFBRSxVQUFVO01BQ3JCLFNBQVMsRUFBRSxPQUFPO01BQ2xCLFNBQVMsRUFBRSxHQUFHO01BQ2QsU0FBUyxFQUFFLE1BQU07TUFDakIsU0FBUyxFQUFFLFVBQVU7TUFDckIsU0FBUyxFQUFFLFVBQVU7TUFDckIsU0FBUyxFQUFFLE9BQU87TUFDbEIsU0FBUyxFQUFFLFVBQVU7TUFDckIsU0FBUyxFQUFFLE1BQU07TUFDakIsVUFBVSxFQUFFLEdBQUc7TUFDZixVQUFVLEVBQUUsVUFBVTtNQUN0QixVQUFVLEVBQUUsVUFBVTtNQUN0QixVQUFVLEVBQUUsVUFBVTtNQUN0QixVQUFVLEVBQUUsVUFBVTtNQUN0QixVQUFVLEVBQUUsSUFBSTtNQUNoQixVQUFVLEVBQUUsT0FBTztNQUNuQixVQUFVLEVBQUUsTUFBTTtNQUNsQixVQUFVLEVBQUUsTUFBTTtNQUNsQixVQUFVLEVBQUUsT0FBTztNQUNuQixVQUFVLEVBQUUsT0FBTztNQUNuQixVQUFVLEVBQUUsVUFBVTtNQUN0QixVQUFVLEVBQUUsT0FBTztNQUNuQixVQUFVLEVBQUUsVUFBVTtNQUN0QixVQUFVLEVBQUUsVUFBVTtNQUN0QixVQUFVLEVBQUUsVUFBVTtNQUN0QixVQUFVLEVBQUUsT0FBTztNQUNuQixVQUFVLEVBQUUsT0FBTztNQUNuQixVQUFVLEVBQUUsVUFBVTtNQUN0QixVQUFVLEVBQUUsTUFBTTtNQUNsQixVQUFVLEVBQUUsVUFBVTtNQUN0QixVQUFVLEVBQUUsVUFBVTtNQUN0QixVQUFVLEVBQUUsSUFBSTtNQUNoQixVQUFVLEVBQUUsVUFBVTtNQUN0QixVQUFVLEVBQUUsVUFBVTtNQUN0QixVQUFVLEVBQUUsVUFBVTtNQUN0QixVQUFVLEVBQUUsVUFBVTtNQUN0QixVQUFVLEVBQUUsT0FBTztNQUNuQixVQUFVLEVBQUUsR0FBRztNQUNmLFVBQVUsRUFBRSxNQUFNO01BQ2xCLFVBQVUsRUFBRSxVQUFVO01BQ3RCLFVBQVUsRUFBRTtJQUNoQixDQUFDLEVBQ0Q7TUFDSSxHQUFHLEVBQUUsS0FBSztNQUNWLFFBQVEsRUFBRSxHQUFHO01BQ2IsUUFBUSxFQUFFLFNBQVM7TUFDbkIsUUFBUSxFQUFFLE9BQU87TUFDakIsUUFBUSxFQUFFLE9BQU87TUFDakIsUUFBUSxFQUFFLFNBQVM7TUFDbkIsUUFBUSxFQUFFLFNBQVM7TUFDbkIsUUFBUSxFQUFFLFNBQVM7TUFDbkIsUUFBUSxFQUFFLFNBQVM7TUFDbkIsUUFBUSxFQUFFLFNBQVM7TUFDbkIsUUFBUSxFQUFFLE9BQU87TUFDakIsUUFBUSxFQUFFLFNBQVM7TUFDbkIsUUFBUSxFQUFFLFNBQVM7TUFDbkIsUUFBUSxFQUFFLE9BQU87TUFDakIsUUFBUSxFQUFF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QUMsR0FBRyxDQUFDLENBQUMsR0FBSSxDQUFDO01BQ3ZFeGpCLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBSUEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsSUFBS0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBS3dqQixFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBSSxDQUFDO01BQ3ZFeGpCLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBSUEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsSUFBS0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBS3dqQixFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBSSxDQUFDO01BQ3ZFeGpCLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBSUEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsSUFBS0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBS3dqQixFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBSSxDQUFDO01BQ3ZFeGpCLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBSUEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsSUFBS0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBS3dqQixFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBSSxDQUFDO01BQ3ZFeGpCLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBSUEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsSUFBS0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBS3dqQixFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBSSxDQUFDO01BQ3ZFeGpCLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBSUEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsSUFBS0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBS3dqQixFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBSSxDQUFDO01BQ3ZFLElBQUksQ0FBQ00sRUFBRSxHQUFJOWpCLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUt3akIsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQzs7TUFFOUM7TUFDQSxLQUFLLElBQUl6aEIsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxFQUFFLEVBQUU7UUFDeEIsSUFBSXdpQixFQUFFLEdBQUdaLENBQUMsQ0FBQzVoQixDQUFDLENBQUMsR0FBRy9CLENBQUMsQ0FBQytCLENBQUMsQ0FBQzs7UUFFcEI7UUFDQSxJQUFJeWlCLEVBQUUsR0FBR0QsRUFBRSxHQUFHLE1BQU07UUFDcEIsSUFBSUUsRUFBRSxHQUFHRixFQUFFLEtBQUssRUFBRTs7UUFFbEI7UUFDQSxJQUFJMU4sRUFBRSxHQUFHLENBQUUsQ0FBRTJOLEVBQUUsR0FBR0EsRUFBRSxLQUFNLEVBQUUsSUFBSUEsRUFBRSxHQUFHQyxFQUFFLEtBQU0sRUFBRSxJQUFJQSxFQUFFLEdBQUdBLEVBQUU7UUFDMUQsSUFBSTNOLEVBQUUsR0FBRyxDQUFFLENBQUN5TixFQUFFLEdBQUcsVUFBVSxJQUFJQSxFQUFFLEdBQUksQ0FBQyxLQUFNLENBQUNBLEVBQUUsR0FBRyxVQUFVLElBQUlBLEVBQUUsR0FBSSxDQUFDLENBQUM7O1FBRXhFO1FBQ0FkLENBQUMsQ0FBQzFoQixDQUFDLENBQUMsR0FBRzhVLEVBQUUsR0FBR0MsRUFBRTtNQUNsQjs7TUFFQTtNQUNBNk0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFJRixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUtBLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUtBLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFHLENBQUMsSUFBS0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBS0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUcsQ0FBQyxHQUFJLENBQUM7TUFDbkZFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBSUYsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFLQSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFNQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBSSxDQUFDO01BQ3pERSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUlGLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBS0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBS0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUcsQ0FBQyxJQUFLQSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFLQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRyxDQUFDLEdBQUksQ0FBQztNQUNuRkUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFJRixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUtBLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQU1BLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFHLENBQUMsR0FBR0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFJLENBQUM7TUFDekRFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBSUYsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFLQSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFLQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRyxDQUFDLElBQUtBLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUtBLENBQUMsQ0FBQyxDQUFD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SyxDQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFJLENBQUM7TUFDdkV4akIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFJQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxJQUFLQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFLd2pCLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFJLENBQUM7TUFDdkV4akIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFJQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxJQUFLQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFLd2pCLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFJLENBQUM7TUFDdkV4akIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFJQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxJQUFLQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFLd2pCLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFJLENBQUM7TUFDdkV4akIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFJQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxJQUFLQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFLd2pCLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFJLENBQUM7TUFDdkV4akIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFJQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxJQUFLQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFLd2pCLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFJLENBQUM7TUFDdkV4akIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFJQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxJQUFLQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFLd2pCLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFJLENBQUM7TUFDdkUsSUFBSSxDQUFDTSxFQUFFLEdBQUk5akIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBS3dqQixFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBRSxHQUFHLENBQUMsR0FBRyxDQUFDOztNQUU5QztNQUNBLEtBQUssSUFBSXpoQixDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEVBQUUsRUFBRTtRQUN4QixJQUFJd2lCLEVBQUUsR0FBR1osQ0FBQyxDQUFDNWhCLENBQUMsQ0FBQyxHQUFHL0IsQ0FBQyxDQUFDK0IsQ0FBQyxDQUFDOztRQUVwQjtRQUNBLElBQUl5aUIsRUFBRSxHQUFHRCxFQUFFLEdBQUcsTUFBTTtRQUNwQixJQUFJRSxFQUFFLEdBQUdGLEVBQUUsS0FBSyxFQUFFOztRQUVsQjtRQUNBLElBQUkxTixFQUFFLEdBQUcsQ0FBRSxDQUFFMk4sRUFBRSxHQUFHQSxFQUFFLEtBQU0sRUFBRSxJQUFJQSxFQUFFLEdBQUdDLEVBQUUsS0FBTSxFQUFFLElBQUlBLEVBQUUsR0FBR0EsRUFBRTtRQUMxRCxJQUFJM04sRUFBRSxHQUFHLENBQUUsQ0FBQ3lOLEVBQUUsR0FBRyxVQUFVLElBQUlBLEVBQUUsR0FBSSxDQUFDLEtBQU0sQ0FBQ0EsRUFBRSxHQUFHLFVBQVUsSUFBSUEsRUFBRSxHQUFJLENBQUMsQ0FBQzs7UUFFeEU7UUFDQWQsQ0FBQyxDQUFDMWhCLENBQUMsQ0FBQyxHQUFHOFUsRUFBRSxHQUFHQyxFQUFFO01BQ2xCOztNQUVBO01BQ0E2TSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUlGLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBS0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBS0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUcsQ0FBQyxJQUFLQSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFLQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRyxDQUFDLEdBQUksQ0FBQztNQUNuRkUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFJRixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUtBLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQU1BLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFHLENBQUMsR0FBR0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFJLENBQUM7TUFDekRFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBSUYsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFLQSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFLQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRyxDQUFDLElBQUtBLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUtBLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFHLENBQUMsR0FBSSxDQUFDO01BQ25GRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUlGLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBS0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBTUEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUcsQ0FBQyxHQUFHQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUksQ0FBQztNQUN6REUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFJRixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUtBLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUtBLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFHLENBQUMsSUFBS0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBS0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUcsQ0FBQyxHQUFJLENBQUM7TUFDbkZFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBSUYsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFLQSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFNQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBSSxDQUFDO01BQ3pERSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUlGLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBS0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBS0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUcsQ0FBQyxJQUFLQSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFLQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRyxDQUFDLEdBQUksQ0FBQztNQUNuRkUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFJRixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUtBLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQU1BLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFHLENBQUMsR0FBR0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFJLENBQUM7SUFDN0Q7O0lBRUE7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQUNLempCLENBQUMsQ0FBQzJrQixZQUFZLEdBQUdySyxZQUFZLENBQUN6VSxhQUFhLENBQUM4ZSxZQUFZLENBQUM7RUFDN0QsQ0FBQyxHQUFFOztFQUdIO0FBQ0Q7QUFDQTtFQUNDaG1CLFFBQVEsQ0FBQzZjLEdBQUcsQ0FBQ3NDLFdBQVcsR0FBRztJQUN2QnRDLEdBQUcsRUFBRSxhQUFVcFgsSUFBSSxFQUFFTSxTQUFTLEVBQUU7TUFDNUI7TUFDQSxJQUFJQyxjQUFjLEdBQUdELFNBQVMsR0FBRyxDQUFDOztNQUVsQztNQUNBTixJQUFJLENBQUN0QyxLQUFLLEVBQUU7TUFDWnNDLElBQUksQ0FBQ2pELFFBQVEsSUFBSXdELGNBQWMsSUFBS1AsSUFBSSxDQUFDakQsUUFBUSxHQUFHd0QsY0FBYyxJQUFLQSxjQUFjLENBQUM7SUFDMUYsQ0FBQztJQUVEbVgsS0FBSyxFQUFFLGVBQVUxWCxJQUFJLEVBQUU7TUFDbkI7TUFDQSxJQUFJSSxTQUFTLEdBQUdKLElBQUksQ0FBQ2xELEtBQUs7O01BRTFCO01BQ0EsSUFBSWEsQ0FBQyxHQUFHcUMsSUFBSSxDQUFDakQsUUFBUSxHQUFHLENBQUM7TUFDekIsS0FBSyxJQUFJWSxDQUFDLEdBQUdxQyxJQUFJLENBQUNqRCxRQUFRLEdBQUcsQ0FBQyxFQUFFWSxDQUFDLElBQUksQ0FBQyxFQUFFQSxDQUFDLEVBQUUsRUFBRTtRQUN6QyxJQUFNeUMsU0FBUyxDQUFDekMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFNLEVBQUUsR0FBSUEsQ0FBQyxHQUFHLENBQUMsR0FBSSxDQUFFLEdBQUksSUFBSSxFQUFHO1VBQ3REcUMsSUFBSSxDQUFDakQsUUFBUSxHQUFHWSxDQUFDLEdBQUcsQ0FBQztVQUNyQjtRQUNKO01BQ0o7SUFDSjtFQUNKLENBQUM7RUFHRCxPQUFPcEQsUUFBUTtBQUVoQixDQUFDLENBQUMsQyIsImZpbGUiOiI0MC5qcyIsInNvdXJjZXNDb250ZW50IjpbIjsoZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYgKHR5cGVvZiBleHBvcnRzID09PSBcIm9iamVjdFwiKSB7XG5cdFx0Ly8gQ29tbW9uSlNcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBmYWN0b3J5KCk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW10sIGZhY3RvcnkpO1xuXHR9XG5cdGVsc2Uge1xuXHRcdC8vIEdsb2JhbCAoYnJvd3Nlcilcblx0XHRyb290LkNyeXB0b0pTID0gZmFjdG9yeSgpO1xuXHR9XG59KHRoaXMsIGZ1bmN0aW9uICgpIHtcblxuXHQvKmdsb2JhbHMgd2luZG93LCBnbG9iYWwsIHJlcXVpcmUqL1xuXG5cdC8qKlxuXHQgKiBDcnlwdG9KUyBjb3JlIGNvbXBvbmVudHMuXG5cdCAqL1xuXHR2YXIgQ3J5cHRvSlMgPSBDcnlwdG9KUyB8fCAoZnVuY3Rpb24gKE1hdGgsIHVuZGVmaW5lZCkge1xuXG5cdCAgICB2YXIgY3J5cHRvO1xuXG5cdCAgICAvLyBOYXRpdmUgY3J5cHRvIGZyb20gd2luZG93IChCcm93c2VyKVxuXHQgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5jcnlwdG8pIHtcblx0ICAgICAgICBjcnlwdG8gPSB3aW5kb3cuY3J5cHRvO1xuXHQgICAgfVxuXG5cdCAgICAvLyBOYXRpdmUgKGV4cGVyaW1lbnRhbCBJRSAxMSkgY3J5cHRvIGZyb20gd2luZG93IChCcm93c2VyKVxuXHQgICAgaWYgKCFjcnlwdG8gJiYgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93Lm1zQ3J5cHRvKSB7XG5cdCAgICAgICAgY3J5cHRvID0gd2luZG93Lm1zQ3J5cHRvO1xuXHQgICAgfVxuXG5cdCAgICAvLyBOYXRpdmUgY3J5cHRvIGZyb20gZ2xvYmFsIChOb2RlSlMpXG5cdCAgICBpZiAoIWNyeXB0byAmJiB0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJyAmJiBnbG9iYWwuY3J5cHRvKSB7XG5cdCAgICAgICAgY3J5cHRvID0gZ2xvYmFsLmNyeXB0bztcblx0ICAgIH1cblxuXHQgICAgLy8gTmF0aXZlIGNyeXB0byBpbXBvcnQgdmlhIHJlcXVpcmUgKE5vZGVKUylcblx0ICAgIGlmICghY3J5cHRvICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nKSB7XG5cdCAgICAgICAgdHJ5IHtcblx0ICAgICAgICAgICAgY3J5cHRvID0gcmVxdWlyZSgnY3J5cHRvJyk7XG5cdCAgICAgICAgfSBjYXRjaCAoZXJyKSB7fVxuXHQgICAgfVxuXG5cdCAgICAvKlxuXHQgICAgICogQ3J5cHRvZ3JhcGhpY2FsbHkgc2VjdXJlIHBzZXVkb3JhbmRvbSBudW1iZXIgZ2VuZXJhdG9yXG5cdCAgICAgKlxuXHQgICAgICogQXMgTWF0aC5yYW5kb20oKSBpcyBjcnlwdG9ncmFwaGljYWxseSBub3Qgc2FmZSB0byB1c2Vcblx0ICAgICAqL1xuXHQgICAgdmFyIGNyeXB0b1NlY3VyZVJhbmRvbUludCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAoY3J5cHRvKSB7XG5cdCAgICAgICAgICAgIC8vIFVzZSBnZXRSYW5kb21WYWx1ZXMgbWV0aG9kIChCcm93c2VyKVxuXHQgICAgICAgICAgICBpZiAodHlwZW9mIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMgPT09ICdmdW5jdGlvbicpIHtcblx0ICAgICAgICAgICAgICAgIHRyeSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQzMkFycmF5KDEpKVswXTtcblx0ICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge31cblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIFVzZSByYW5kb21CeXRlcyBtZXRob2QgKE5vZGVKUylcblx0ICAgICAgICAgICAgaWYgKHR5cGVvZiBjcnlwdG8ucmFuZG9tQnl0ZXMgPT09ICdmdW5jdGlvbicpIHtcblx0ICAgICAgICAgICAgICAgIHRyeSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyeXB0by5yYW5kb21CeXRlcyg0KS5yZWFkSW50MzJMRSgpO1xuXHQgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7fVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOYXRpdmUgY3J5cHRvIG1vZHVsZSBjb3VsZCBub3QgYmUgdXNlZCB0byBnZXQgc2VjdXJlIHJhbmRvbSBudW1iZXIuJyk7XG5cdCAgICB9O1xuXG5cdCAgICAvKlxuXHQgICAgICogTG9jYWwgcG9seWZpbGwgb2YgT2JqZWN0LmNyZWF0ZVxuXG5cdCAgICAgKi9cblx0ICAgIHZhciBjcmVhdGUgPSBPYmplY3QuY3JlYXRlIHx8IChmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgZnVuY3Rpb24gRigpIHt9XG5cblx0ICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG9iaikge1xuXHQgICAgICAgICAgICB2YXIgc3VidHlwZTtcblxuXHQgICAgICAgICAgICBGLnByb3RvdHlwZSA9IG9iajtcblxuXHQgICAgICAgICAgICBzdWJ0eXBlID0gbmV3IEYoKTtcblxuXHQgICAgICAgICAgICBGLnByb3RvdHlwZSA9IG51bGw7XG5cblx0ICAgICAgICAgICAgcmV0dXJuIHN1YnR5cGU7XG5cdCAgICAgICAgfTtcblx0ICAgIH0oKSlcblxuXHQgICAgLyoqXG5cdCAgICAgKiBDcnlwdG9KUyBuYW1lc3BhY2UuXG5cdCAgICAgKi9cblx0ICAgIHZhciBDID0ge307XG5cblx0ICAgIC8qKlxuXHQgICAgICogTGlicmFyeSBuYW1lc3BhY2UuXG5cdCAgICAgKi9cblx0ICAgIHZhciBDX2xpYiA9IEMubGliID0ge307XG5cblx0ICAgIC8qKlxuXHQgICAgICogQmFzZSBvYmplY3QgZm9yIHByb3RvdHlwYWwgaW5oZXJpdGFuY2UuXG5cdCAgICAgKi9cblx0ICAgIHZhciBCYXNlID0gQ19saWIuQmFzZSA9IChmdW5jdGlvbiAoKSB7XG5cblxuXHQgICAgICAgIHJldHVybiB7XG5cdCAgICAgICAgICAgIC8qKlxuXHQgICAgICAgICAgICAgKiBDcmVhdGVzIGEgbmV3IG9iamVjdCB0aGF0IGluaGVyaXRzIGZyb20gdGhpcyBvYmplY3QuXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvdmVycmlkZXMgUHJvcGVydGllcyB0byBjb3B5IGludG8gdGhlIG5ldyBvYmplY3QuXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqIEByZXR1cm4ge09iamVjdH0gVGhlIG5ldyBvYmplY3QuXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqIEBzdGF0aWNcblx0ICAgICAgICAgICAgICpcblx0ICAgICAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgICAgICpcblx0ICAgICAgICAgICAgICogICAgIHZhciBNeVR5cGUgPSBDcnlwdG9KUy5saWIuQmFzZS5leHRlbmQoe1xuXHQgICAgICAgICAgICAgKiAgICAgICAgIGZpZWxkOiAndmFsdWUnLFxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiAgICAgICAgIG1ldGhvZDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgKiAgICAgICAgIH1cblx0ICAgICAgICAgICAgICogICAgIH0pO1xuXHQgICAgICAgICAgICAgKi9cblx0ICAgICAgICAgICAgZXh0ZW5kOiBmdW5jdGlvbiAob3ZlcnJpZGVzKSB7XG5cdCAgICAgICAgICAgICAgICAvLyBTcGF3blxuXHQgICAgICAgICAgICAgICAgdmFyIHN1YnR5cGUgPSBjcmVhdGUodGhpcyk7XG5cblx0ICAgICAgICAgICAgICAgIC8vIEF1Z21lbnRcblx0ICAgICAgICAgICAgICAgIGlmIChvdmVycmlkZXMpIHtcblx0ICAgICAgICAgICAgICAgICAgICBzdWJ0eXBlLm1peEluKG92ZXJyaWRlcyk7XG5cdCAgICAgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBkZWZhdWx0IGluaXRpYWxpemVyXG5cdCAgICAgICAgICAgICAgICBpZiAoIXN1YnR5cGUuaGFzT3duUHJvcGVydHkoJ2luaXQnKSB8fCB0aGlzLmluaXQgPT09IHN1YnR5cGUuaW5pdCkge1xuXHQgICAgICAgICAgICAgICAgICAgIHN1YnR5cGUuaW5pdCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgc3VidHlwZS4kc3VwZXIuaW5pdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHQgICAgICAgICAgICAgICAgICAgIH07XG5cdCAgICAgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgICAgIC8vIEluaXRpYWxpemVyJ3MgcHJvdG90eXBlIGlzIHRoZSBzdWJ0eXBlIG9iamVjdFxuXHQgICAgICAgICAgICAgICAgc3VidHlwZS5pbml0LnByb3RvdHlwZSA9IHN1YnR5cGU7XG5cblx0ICAgICAgICAgICAgICAgIC8vIFJlZmVyZW5jZSBzdXBlcnR5cGVcblx0ICAgICAgICAgICAgICAgIHN1YnR5cGUuJHN1cGVyID0gdGhpcztcblxuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHN1YnR5cGU7XG5cdCAgICAgICAgICAgIH0sXG5cblx0ICAgICAgICAgICAgLyoqXG5cdCAgICAgICAgICAgICAqIEV4dGVuZHMgdGhpcyBvYmplY3QgYW5kIHJ1bnMgdGhlIGluaXQgbWV0aG9kLlxuXHQgICAgICAgICAgICAgKiBBcmd1bWVudHMgdG8gY3JlYXRlKCkgd2lsbCBiZSBwYXNzZWQgdG8gaW5pdCgpLlxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiBAcmV0dXJuIHtPYmplY3R9IFRoZSBuZXcgb2JqZWN0LlxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqICAgICB2YXIgaW5zdGFuY2UgPSBNeVR5cGUuY3JlYXRlKCk7XG5cdCAgICAgICAgICAgICAqL1xuXHQgICAgICAgICAgICBjcmVhdGU6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBpbnN0YW5jZSA9IHRoaXMuZXh0ZW5kKCk7XG5cdCAgICAgICAgICAgICAgICBpbnN0YW5jZS5pbml0LmFwcGx5KGluc3RhbmNlLCBhcmd1bWVudHMpO1xuXG5cdCAgICAgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2U7XG5cdCAgICAgICAgICAgIH0sXG5cblx0ICAgICAgICAgICAgLyoqXG5cdCAgICAgICAgICAgICAqIEluaXRpYWxpemVzIGEgbmV3bHkgY3JlYXRlZCBvYmplY3QuXG5cdCAgICAgICAgICAgICAqIE92ZXJyaWRlIHRoaXMgbWV0aG9kIHRvIGFkZCBzb21lIGxvZ2ljIHdoZW4geW91ciBvYmplY3RzIGFyZSBjcmVhdGVkLlxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiAgICAgdmFyIE15VHlwZSA9IENyeXB0b0pTLmxpYi5CYXNlLmV4dGVuZCh7XG5cdCAgICAgICAgICAgICAqICAgICAgICAgaW5pdDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgKiAgICAgICAgICAgICAvLyAuLi5cblx0ICAgICAgICAgICAgICogICAgICAgICB9XG5cdCAgICAgICAgICAgICAqICAgICB9KTtcblx0ICAgICAgICAgICAgICovXG5cdCAgICAgICAgICAgIGluaXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgfSxcblxuXHQgICAgICAgICAgICAvKipcblx0ICAgICAgICAgICAgICogQ29waWVzIHByb3BlcnRpZXMgaW50byB0aGlzIG9iamVjdC5cblx0ICAgICAgICAgICAgICpcblx0ICAgICAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHByb3BlcnRpZXMgVGhlIHByb3BlcnRpZXMgdG8gbWl4IGluLlxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiAgICAgTXlUeXBlLm1peEluKHtcblx0ICAgICAgICAgICAgICogICAgICAgICBmaWVsZDogJ3ZhbHVlJ1xuXHQgICAgICAgICAgICAgKiAgICAgfSk7XG5cdCAgICAgICAgICAgICAqL1xuXHQgICAgICAgICAgICBtaXhJbjogZnVuY3Rpb24gKHByb3BlcnRpZXMpIHtcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5TmFtZSBpbiBwcm9wZXJ0aWVzKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkocHJvcGVydHlOYW1lKSkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB0aGlzW3Byb3BlcnR5TmFtZV0gPSBwcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV07XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgICAgICAvLyBJRSB3b24ndCBjb3B5IHRvU3RyaW5nIHVzaW5nIHRoZSBsb29wIGFib3ZlXG5cdCAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eSgndG9TdHJpbmcnKSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMudG9TdHJpbmcgPSBwcm9wZXJ0aWVzLnRvU3RyaW5nO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9LFxuXG5cdCAgICAgICAgICAgIC8qKlxuXHQgICAgICAgICAgICAgKiBDcmVhdGVzIGEgY29weSBvZiB0aGlzIG9iamVjdC5cblx0ICAgICAgICAgICAgICpcblx0ICAgICAgICAgICAgICogQHJldHVybiB7T2JqZWN0fSBUaGUgY2xvbmUuXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqICAgICB2YXIgY2xvbmUgPSBpbnN0YW5jZS5jbG9uZSgpO1xuXHQgICAgICAgICAgICAgKi9cblx0ICAgICAgICAgICAgY2xvbmU6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmluaXQucHJvdG90eXBlLmV4dGVuZCh0aGlzKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH07XG5cdCAgICB9KCkpO1xuXG5cdCAgICAvKipcblx0ICAgICAqIEFuIGFycmF5IG9mIDMyLWJpdCB3b3Jkcy5cblx0ICAgICAqXG5cdCAgICAgKiBAcHJvcGVydHkge0FycmF5fSB3b3JkcyBUaGUgYXJyYXkgb2YgMzItYml0IHdvcmRzLlxuXHQgICAgICogQHByb3BlcnR5IHtudW1iZXJ9IHNpZ0J5dGVzIFRoZSBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgYnl0ZXMgaW4gdGhpcyB3b3JkIGFycmF5LlxuXHQgICAgICovXG5cdCAgICB2YXIgV29yZEFycmF5ID0gQ19saWIuV29yZEFycmF5ID0gQmFzZS5leHRlbmQoe1xuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIEluaXRpYWxpemVzIGEgbmV3bHkgY3JlYXRlZCB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtBcnJheX0gd29yZHMgKE9wdGlvbmFsKSBBbiBhcnJheSBvZiAzMi1iaXQgd29yZHMuXG5cdCAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IHNpZ0J5dGVzIChPcHRpb25hbCkgVGhlIG51bWJlciBvZiBzaWduaWZpY2FudCBieXRlcyBpbiB0aGUgd29yZHMuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciB3b3JkQXJyYXkgPSBDcnlwdG9KUy5saWIuV29yZEFycmF5LmNyZWF0ZSgpO1xuXHQgICAgICAgICAqICAgICB2YXIgd29yZEFycmF5ID0gQ3J5cHRvSlMubGliLldvcmRBcnJheS5jcmVhdGUoWzB4MDAwMTAyMDMsIDB4MDQwNTA2MDddKTtcblx0ICAgICAgICAgKiAgICAgdmFyIHdvcmRBcnJheSA9IENyeXB0b0pTLmxpYi5Xb3JkQXJyYXkuY3JlYXRlKFsweDAwMDEwMjAzLCAweDA0MDUwNjA3XSwgNik7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgaW5pdDogZnVuY3Rpb24gKHdvcmRzLCBzaWdCeXRlcykge1xuXHQgICAgICAgICAgICB3b3JkcyA9IHRoaXMud29yZHMgPSB3b3JkcyB8fCBbXTtcblxuXHQgICAgICAgICAgICBpZiAoc2lnQnl0ZXMgIT0gdW5kZWZpbmVkKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLnNpZ0J5dGVzID0gc2lnQnl0ZXM7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLnNpZ0J5dGVzID0gd29yZHMubGVuZ3RoICogNDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb252ZXJ0cyB0aGlzIHdvcmQgYXJyYXkgdG8gYSBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge0VuY29kZXJ9IGVuY29kZXIgKE9wdGlvbmFsKSBUaGUgZW5jb2Rpbmcgc3RyYXRlZ3kgdG8gdXNlLiBEZWZhdWx0OiBDcnlwdG9KUy5lbmMuSGV4XG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBzdHJpbmdpZmllZCB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgc3RyaW5nID0gd29yZEFycmF5ICsgJyc7XG5cdCAgICAgICAgICogICAgIHZhciBzdHJpbmcgPSB3b3JkQXJyYXkudG9TdHJpbmcoKTtcblx0ICAgICAgICAgKiAgICAgdmFyIHN0cmluZyA9IHdvcmRBcnJheS50b1N0cmluZyhDcnlwdG9KUy5lbmMuVXRmOCk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgdG9TdHJpbmc6IGZ1bmN0aW9uIChlbmNvZGVyKSB7XG5cdCAgICAgICAgICAgIHJldHVybiAoZW5jb2RlciB8fCBIZXgpLnN0cmluZ2lmeSh0aGlzKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29uY2F0ZW5hdGVzIGEgd29yZCBhcnJheSB0byB0aGlzIHdvcmQgYXJyYXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheX0gd29yZEFycmF5IFRoZSB3b3JkIGFycmF5IHRvIGFwcGVuZC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhpcyB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB3b3JkQXJyYXkxLmNvbmNhdCh3b3JkQXJyYXkyKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBjb25jYXQ6IGZ1bmN0aW9uICh3b3JkQXJyYXkpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciB0aGlzV29yZHMgPSB0aGlzLndvcmRzO1xuXHQgICAgICAgICAgICB2YXIgdGhhdFdvcmRzID0gd29yZEFycmF5LndvcmRzO1xuXHQgICAgICAgICAgICB2YXIgdGhpc1NpZ0J5dGVzID0gdGhpcy5zaWdCeXRlcztcblx0ICAgICAgICAgICAgdmFyIHRoYXRTaWdCeXRlcyA9IHdvcmRBcnJheS5zaWdCeXRlcztcblxuXHQgICAgICAgICAgICAvLyBDbGFtcCBleGNlc3MgYml0c1xuXHQgICAgICAgICAgICB0aGlzLmNsYW1wKCk7XG5cblx0ICAgICAgICAgICAgLy8gQ29uY2F0XG5cdCAgICAgICAgICAgIGlmICh0aGlzU2lnQnl0ZXMgJSA0KSB7XG5cdCAgICAgICAgICAgICAgICAvLyBDb3B5IG9uZSBieXRlIGF0IGEgdGltZVxuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGF0U2lnQnl0ZXM7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciB0aGF0Qnl0ZSA9ICh0aGF0V29yZHNbaSA+Pj4gMl0gPj4+ICgyNCAtIChpICUgNCkgKiA4KSkgJiAweGZmO1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXNXb3Jkc1sodGhpc1NpZ0J5dGVzICsgaSkgPj4+IDJdIHw9IHRoYXRCeXRlIDw8ICgyNCAtICgodGhpc1NpZ0J5dGVzICsgaSkgJSA0KSAqIDgpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgLy8gQ29weSBvbmUgd29yZCBhdCBhIHRpbWVcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhhdFNpZ0J5dGVzOyBpICs9IDQpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzV29yZHNbKHRoaXNTaWdCeXRlcyArIGkpID4+PiAyXSA9IHRoYXRXb3Jkc1tpID4+PiAyXTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLnNpZ0J5dGVzICs9IHRoYXRTaWdCeXRlcztcblxuXHQgICAgICAgICAgICAvLyBDaGFpbmFibGVcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIFJlbW92ZXMgaW5zaWduaWZpY2FudCBiaXRzLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB3b3JkQXJyYXkuY2xhbXAoKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBjbGFtcDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIHdvcmRzID0gdGhpcy53b3Jkcztcblx0ICAgICAgICAgICAgdmFyIHNpZ0J5dGVzID0gdGhpcy5zaWdCeXRlcztcblxuXHQgICAgICAgICAgICAvLyBDbGFtcFxuXHQgICAgICAgICAgICB3b3Jkc1tzaWdCeXRlcyA+Pj4gMl0gJj0gMHhmZmZmZmZmZiA8PCAoMzIgLSAoc2lnQnl0ZXMgJSA0KSAqIDgpO1xuXHQgICAgICAgICAgICB3b3Jkcy5sZW5ndGggPSBNYXRoLmNlaWwoc2lnQnl0ZXMgLyA0KTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ3JlYXRlcyBhIGNvcHkgb2YgdGhpcyB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgY2xvbmUuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBjbG9uZSA9IHdvcmRBcnJheS5jbG9uZSgpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBjbG9uZSA9IEJhc2UuY2xvbmUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAgICAgY2xvbmUud29yZHMgPSB0aGlzLndvcmRzLnNsaWNlKDApO1xuXG5cdCAgICAgICAgICAgIHJldHVybiBjbG9uZTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ3JlYXRlcyBhIHdvcmQgYXJyYXkgZmlsbGVkIHdpdGggcmFuZG9tIGJ5dGVzLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IG5CeXRlcyBUaGUgbnVtYmVyIG9mIHJhbmRvbSBieXRlcyB0byBnZW5lcmF0ZS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIHJhbmRvbSB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgd29yZEFycmF5ID0gQ3J5cHRvSlMubGliLldvcmRBcnJheS5yYW5kb20oMTYpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHJhbmRvbTogZnVuY3Rpb24gKG5CeXRlcykge1xuXHQgICAgICAgICAgICB2YXIgd29yZHMgPSBbXTtcblxuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5CeXRlczsgaSArPSA0KSB7XG5cdCAgICAgICAgICAgICAgICB3b3Jkcy5wdXNoKGNyeXB0b1NlY3VyZVJhbmRvbUludCgpKTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIHJldHVybiBuZXcgV29yZEFycmF5LmluaXQod29yZHMsIG5CeXRlcyk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogRW5jb2RlciBuYW1lc3BhY2UuXG5cdCAgICAgKi9cblx0ICAgIHZhciBDX2VuYyA9IEMuZW5jID0ge307XG5cblx0ICAgIC8qKlxuXHQgICAgICogSGV4IGVuY29kaW5nIHN0cmF0ZWd5LlxuXHQgICAgICovXG5cdCAgICB2YXIgSGV4ID0gQ19lbmMuSGV4ID0ge1xuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENvbnZlcnRzIGEgd29yZCBhcnJheSB0byBhIGhleCBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheX0gd29yZEFycmF5IFRoZSB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7c3RyaW5nfSBUaGUgaGV4IHN0cmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBzdGF0aWNcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIGhleFN0cmluZyA9IENyeXB0b0pTLmVuYy5IZXguc3RyaW5naWZ5KHdvcmRBcnJheSk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgc3RyaW5naWZ5OiBmdW5jdGlvbiAod29yZEFycmF5KSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIgd29yZHMgPSB3b3JkQXJyYXkud29yZHM7XG5cdCAgICAgICAgICAgIHZhciBzaWdCeXRlcyA9IHdvcmRBcnJheS5zaWdCeXRlcztcblxuXHQgICAgICAgICAgICAvLyBDb252ZXJ0XG5cdCAgICAgICAgICAgIHZhciBoZXhDaGFycyA9IFtdO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNpZ0J5dGVzOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHZhciBiaXRlID0gKHdvcmRzW2kgPj4+IDJdID4+PiAoMjQgLSAoaSAlIDQpICogOCkpICYgMHhmZjtcblx0ICAgICAgICAgICAgICAgIGhleENoYXJzLnB1c2goKGJpdGUgPj4+IDQpLnRvU3RyaW5nKDE2KSk7XG5cdCAgICAgICAgICAgICAgICBoZXhDaGFycy5wdXNoKChiaXRlICYgMHgwZikudG9TdHJpbmcoMTYpKTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIHJldHVybiBoZXhDaGFycy5qb2luKCcnKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29udmVydHMgYSBoZXggc3RyaW5nIHRvIGEgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBoZXhTdHIgVGhlIGhleCBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgd29yZEFycmF5ID0gQ3J5cHRvSlMuZW5jLkhleC5wYXJzZShoZXhTdHJpbmcpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHBhcnNlOiBmdW5jdGlvbiAoaGV4U3RyKSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0XG5cdCAgICAgICAgICAgIHZhciBoZXhTdHJMZW5ndGggPSBoZXhTdHIubGVuZ3RoO1xuXG5cdCAgICAgICAgICAgIC8vIENvbnZlcnRcblx0ICAgICAgICAgICAgdmFyIHdvcmRzID0gW107XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaGV4U3RyTGVuZ3RoOyBpICs9IDIpIHtcblx0ICAgICAgICAgICAgICAgIHdvcmRzW2kgPj4+IDNdIHw9IHBhcnNlSW50KGhleFN0ci5zdWJzdHIoaSwgMiksIDE2KSA8PCAoMjQgLSAoaSAlIDgpICogNCk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICByZXR1cm4gbmV3IFdvcmRBcnJheS5pbml0KHdvcmRzLCBoZXhTdHJMZW5ndGggLyAyKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXG5cdCAgICAvKipcblx0ICAgICAqIExhdGluMSBlbmNvZGluZyBzdHJhdGVneS5cblx0ICAgICAqL1xuXHQgICAgdmFyIExhdGluMSA9IENfZW5jLkxhdGluMSA9IHtcblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb252ZXJ0cyBhIHdvcmQgYXJyYXkgdG8gYSBMYXRpbjEgc3RyaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl9IHdvcmRBcnJheSBUaGUgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIExhdGluMSBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBsYXRpbjFTdHJpbmcgPSBDcnlwdG9KUy5lbmMuTGF0aW4xLnN0cmluZ2lmeSh3b3JkQXJyYXkpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHN0cmluZ2lmeTogZnVuY3Rpb24gKHdvcmRBcnJheSkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIHdvcmRzID0gd29yZEFycmF5LndvcmRzO1xuXHQgICAgICAgICAgICB2YXIgc2lnQnl0ZXMgPSB3b3JkQXJyYXkuc2lnQnl0ZXM7XG5cblx0ICAgICAgICAgICAgLy8gQ29udmVydFxuXHQgICAgICAgICAgICB2YXIgbGF0aW4xQ2hhcnMgPSBbXTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaWdCeXRlczsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgYml0ZSA9ICh3b3Jkc1tpID4+PiAyXSA+Pj4gKDI0IC0gKGkgJSA0KSAqIDgpKSAmIDB4ZmY7XG5cdCAgICAgICAgICAgICAgICBsYXRpbjFDaGFycy5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoYml0ZSkpO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgcmV0dXJuIGxhdGluMUNoYXJzLmpvaW4oJycpO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb252ZXJ0cyBhIExhdGluMSBzdHJpbmcgdG8gYSB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGxhdGluMVN0ciBUaGUgTGF0aW4xIHN0cmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIHdvcmQgYXJyYXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciB3b3JkQXJyYXkgPSBDcnlwdG9KUy5lbmMuTGF0aW4xLnBhcnNlKGxhdGluMVN0cmluZyk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgcGFyc2U6IGZ1bmN0aW9uIChsYXRpbjFTdHIpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRcblx0ICAgICAgICAgICAgdmFyIGxhdGluMVN0ckxlbmd0aCA9IGxhdGluMVN0ci5sZW5ndGg7XG5cblx0ICAgICAgICAgICAgLy8gQ29udmVydFxuXHQgICAgICAgICAgICB2YXIgd29yZHMgPSBbXTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsYXRpbjFTdHJMZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgd29yZHNbaSA+Pj4gMl0gfD0gKGxhdGluMVN0ci5jaGFyQ29kZUF0KGkpICYgMHhmZikgPDwgKDI0IC0gKGkgJSA0KSAqIDgpO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBXb3JkQXJyYXkuaW5pdCh3b3JkcywgbGF0aW4xU3RyTGVuZ3RoKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXG5cdCAgICAvKipcblx0ICAgICAqIFVURi04IGVuY29kaW5nIHN0cmF0ZWd5LlxuXHQgICAgICovXG5cdCAgICB2YXIgVXRmOCA9IENfZW5jLlV0ZjggPSB7XG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29udmVydHMgYSB3b3JkIGFycmF5IHRvIGEgVVRGLTggc3RyaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl9IHdvcmRBcnJheSBUaGUgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIFVURi04IHN0cmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBzdGF0aWNcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIHV0ZjhTdHJpbmcgPSBDcnlwdG9KUy5lbmMuVXRmOC5zdHJpbmdpZnkod29yZEFycmF5KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBzdHJpbmdpZnk6IGZ1bmN0aW9uICh3b3JkQXJyYXkpIHtcblx0ICAgICAgICAgICAgdHJ5IHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQoZXNjYXBlKExhdGluMS5zdHJpbmdpZnkod29yZEFycmF5KSkpO1xuXHQgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG5cdCAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ01hbGZvcm1lZCBVVEYtOCBkYXRhJyk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29udmVydHMgYSBVVEYtOCBzdHJpbmcgdG8gYSB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHV0ZjhTdHIgVGhlIFVURi04IHN0cmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIHdvcmQgYXJyYXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciB3b3JkQXJyYXkgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZSh1dGY4U3RyaW5nKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBwYXJzZTogZnVuY3Rpb24gKHV0ZjhTdHIpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIExhdGluMS5wYXJzZSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQodXRmOFN0cikpKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXG5cdCAgICAvKipcblx0ICAgICAqIEFic3RyYWN0IGJ1ZmZlcmVkIGJsb2NrIGFsZ29yaXRobSB0ZW1wbGF0ZS5cblx0ICAgICAqXG5cdCAgICAgKiBUaGUgcHJvcGVydHkgYmxvY2tTaXplIG11c3QgYmUgaW1wbGVtZW50ZWQgaW4gYSBjb25jcmV0ZSBzdWJ0eXBlLlxuXHQgICAgICpcblx0ICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBfbWluQnVmZmVyU2l6ZSBUaGUgbnVtYmVyIG9mIGJsb2NrcyB0aGF0IHNob3VsZCBiZSBrZXB0IHVucHJvY2Vzc2VkIGluIHRoZSBidWZmZXIuIERlZmF1bHQ6IDBcblx0ICAgICAqL1xuXHQgICAgdmFyIEJ1ZmZlcmVkQmxvY2tBbGdvcml0aG0gPSBDX2xpYi5CdWZmZXJlZEJsb2NrQWxnb3JpdGhtID0gQmFzZS5leHRlbmQoe1xuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIFJlc2V0cyB0aGlzIGJsb2NrIGFsZ29yaXRobSdzIGRhdGEgYnVmZmVyIHRvIGl0cyBpbml0aWFsIHN0YXRlLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICBidWZmZXJlZEJsb2NrQWxnb3JpdGhtLnJlc2V0KCk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgcmVzZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgLy8gSW5pdGlhbCB2YWx1ZXNcblx0ICAgICAgICAgICAgdGhpcy5fZGF0YSA9IG5ldyBXb3JkQXJyYXkuaW5pdCgpO1xuXHQgICAgICAgICAgICB0aGlzLl9uRGF0YUJ5dGVzID0gMDtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQWRkcyBuZXcgZGF0YSB0byB0aGlzIGJsb2NrIGFsZ29yaXRobSdzIGJ1ZmZlci5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gZGF0YSBUaGUgZGF0YSB0byBhcHBlbmQuIFN0cmluZ3MgYXJlIGNvbnZlcnRlZCB0byBhIFdvcmRBcnJheSB1c2luZyBVVEYtOC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgYnVmZmVyZWRCbG9ja0FsZ29yaXRobS5fYXBwZW5kKCdkYXRhJyk7XG5cdCAgICAgICAgICogICAgIGJ1ZmZlcmVkQmxvY2tBbGdvcml0aG0uX2FwcGVuZCh3b3JkQXJyYXkpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIF9hcHBlbmQ6IGZ1bmN0aW9uIChkYXRhKSB7XG5cdCAgICAgICAgICAgIC8vIENvbnZlcnQgc3RyaW5nIHRvIFdvcmRBcnJheSwgZWxzZSBhc3N1bWUgV29yZEFycmF5IGFscmVhZHlcblx0ICAgICAgICAgICAgaWYgKHR5cGVvZiBkYXRhID09ICdzdHJpbmcnKSB7XG5cdCAgICAgICAgICAgICAgICBkYXRhID0gVXRmOC5wYXJzZShkYXRhKTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIEFwcGVuZFxuXHQgICAgICAgICAgICB0aGlzLl9kYXRhLmNvbmNhdChkYXRhKTtcblx0ICAgICAgICAgICAgdGhpcy5fbkRhdGFCeXRlcyArPSBkYXRhLnNpZ0J5dGVzO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBQcm9jZXNzZXMgYXZhaWxhYmxlIGRhdGEgYmxvY2tzLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogVGhpcyBtZXRob2QgaW52b2tlcyBfZG9Qcm9jZXNzQmxvY2sob2Zmc2V0KSwgd2hpY2ggbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBhIGNvbmNyZXRlIHN1YnR5cGUuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGRvRmx1c2ggV2hldGhlciBhbGwgYmxvY2tzIGFuZCBwYXJ0aWFsIGJsb2NrcyBzaG91bGQgYmUgcHJvY2Vzc2VkLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgcHJvY2Vzc2VkIGRhdGEuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBwcm9jZXNzZWREYXRhID0gYnVmZmVyZWRCbG9ja0FsZ29yaXRobS5fcHJvY2VzcygpO1xuXHQgICAgICAgICAqICAgICB2YXIgcHJvY2Vzc2VkRGF0YSA9IGJ1ZmZlcmVkQmxvY2tBbGdvcml0aG0uX3Byb2Nlc3MoISEnZmx1c2gnKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBfcHJvY2VzczogZnVuY3Rpb24gKGRvRmx1c2gpIHtcblx0ICAgICAgICAgICAgdmFyIHByb2Nlc3NlZFdvcmRzO1xuXG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIgZGF0YSA9IHRoaXMuX2RhdGE7XG5cdCAgICAgICAgICAgIHZhciBkYXRhV29yZHMgPSBkYXRhLndvcmRzO1xuXHQgICAgICAgICAgICB2YXIgZGF0YVNpZ0J5dGVzID0gZGF0YS5zaWdCeXRlcztcblx0ICAgICAgICAgICAgdmFyIGJsb2NrU2l6ZSA9IHRoaXMuYmxvY2tTaXplO1xuXHQgICAgICAgICAgICB2YXIgYmxvY2tTaXplQnl0ZXMgPSBibG9ja1NpemUgKiA0O1xuXG5cdCAgICAgICAgICAgIC8vIENvdW50IGJsb2NrcyByZWFkeVxuXHQgICAgICAgICAgICB2YXIgbkJsb2Nrc1JlYWR5ID0gZGF0YVNpZ0J5dGVzIC8gYmxvY2tTaXplQnl0ZXM7XG5cdCAgICAgICAgICAgIGlmIChkb0ZsdXNoKSB7XG5cdCAgICAgICAgICAgICAgICAvLyBSb3VuZCB1cCB0byBpbmNsdWRlIHBhcnRpYWwgYmxvY2tzXG5cdCAgICAgICAgICAgICAgICBuQmxvY2tzUmVhZHkgPSBNYXRoLmNlaWwobkJsb2Nrc1JlYWR5KTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIC8vIFJvdW5kIGRvd24gdG8gaW5jbHVkZSBvbmx5IGZ1bGwgYmxvY2tzLFxuXHQgICAgICAgICAgICAgICAgLy8gbGVzcyB0aGUgbnVtYmVyIG9mIGJsb2NrcyB0aGF0IG11c3QgcmVtYWluIGluIHRoZSBidWZmZXJcblx0ICAgICAgICAgICAgICAgIG5CbG9ja3NSZWFkeSA9IE1hdGgubWF4KChuQmxvY2tzUmVhZHkgfCAwKSAtIHRoaXMuX21pbkJ1ZmZlclNpemUsIDApO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gQ291bnQgd29yZHMgcmVhZHlcblx0ICAgICAgICAgICAgdmFyIG5Xb3Jkc1JlYWR5ID0gbkJsb2Nrc1JlYWR5ICogYmxvY2tTaXplO1xuXG5cdCAgICAgICAgICAgIC8vIENvdW50IGJ5dGVzIHJlYWR5XG5cdCAgICAgICAgICAgIHZhciBuQnl0ZXNSZWFkeSA9IE1hdGgubWluKG5Xb3Jkc1JlYWR5ICogNCwgZGF0YVNpZ0J5dGVzKTtcblxuXHQgICAgICAgICAgICAvLyBQcm9jZXNzIGJsb2Nrc1xuXHQgICAgICAgICAgICBpZiAobldvcmRzUmVhZHkpIHtcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIG9mZnNldCA9IDA7IG9mZnNldCA8IG5Xb3Jkc1JlYWR5OyBvZmZzZXQgKz0gYmxvY2tTaXplKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgLy8gUGVyZm9ybSBjb25jcmV0ZS1hbGdvcml0aG0gbG9naWNcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9kb1Byb2Nlc3NCbG9jayhkYXRhV29yZHMsIG9mZnNldCk7XG5cdCAgICAgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBwcm9jZXNzZWQgd29yZHNcblx0ICAgICAgICAgICAgICAgIHByb2Nlc3NlZFdvcmRzID0gZGF0YVdvcmRzLnNwbGljZSgwLCBuV29yZHNSZWFkeSk7XG5cdCAgICAgICAgICAgICAgICBkYXRhLnNpZ0J5dGVzIC09IG5CeXRlc1JlYWR5O1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gUmV0dXJuIHByb2Nlc3NlZCB3b3Jkc1xuXHQgICAgICAgICAgICByZXR1cm4gbmV3IFdvcmRBcnJheS5pbml0KHByb2Nlc3NlZFdvcmRzLCBuQnl0ZXNSZWFkeSk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENyZWF0ZXMgYSBjb3B5IG9mIHRoaXMgb2JqZWN0LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7T2JqZWN0fSBUaGUgY2xvbmUuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBjbG9uZSA9IGJ1ZmZlcmVkQmxvY2tBbGdvcml0aG0uY2xvbmUoKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBjbG9uZTogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgY2xvbmUgPSBCYXNlLmNsb25lLmNhbGwodGhpcyk7XG5cdCAgICAgICAgICAgIGNsb25lLl9kYXRhID0gdGhpcy5fZGF0YS5jbG9uZSgpO1xuXG5cdCAgICAgICAgICAgIHJldHVybiBjbG9uZTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgX21pbkJ1ZmZlclNpemU6IDBcblx0ICAgIH0pO1xuXG5cdCAgICAvKipcblx0ICAgICAqIEFic3RyYWN0IGhhc2hlciB0ZW1wbGF0ZS5cblx0ICAgICAqXG5cdCAgICAgKiBAcHJvcGVydHkge251bWJlcn0gYmxvY2tTaXplIFRoZSBudW1iZXIgb2YgMzItYml0IHdvcmRzIHRoaXMgaGFzaGVyIG9wZXJhdGVzIG9uLiBEZWZhdWx0OiAxNiAoNTEyIGJpdHMpXG5cdCAgICAgKi9cblx0ICAgIHZhciBIYXNoZXIgPSBDX2xpYi5IYXNoZXIgPSBCdWZmZXJlZEJsb2NrQWxnb3JpdGhtLmV4dGVuZCh7XG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29uZmlndXJhdGlvbiBvcHRpb25zLlxuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGNmZzogQmFzZS5leHRlbmQoKSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIEluaXRpYWxpemVzIGEgbmV3bHkgY3JlYXRlZCBoYXNoZXIuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gY2ZnIChPcHRpb25hbCkgVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byB1c2UgZm9yIHRoaXMgaGFzaCBjb21wdXRhdGlvbi5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIGhhc2hlciA9IENyeXB0b0pTLmFsZ28uU0hBMjU2LmNyZWF0ZSgpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGluaXQ6IGZ1bmN0aW9uIChjZmcpIHtcblx0ICAgICAgICAgICAgLy8gQXBwbHkgY29uZmlnIGRlZmF1bHRzXG5cdCAgICAgICAgICAgIHRoaXMuY2ZnID0gdGhpcy5jZmcuZXh0ZW5kKGNmZyk7XG5cblx0ICAgICAgICAgICAgLy8gU2V0IGluaXRpYWwgdmFsdWVzXG5cdCAgICAgICAgICAgIHRoaXMucmVzZXQoKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogUmVzZXRzIHRoaXMgaGFzaGVyIHRvIGl0cyBpbml0aWFsIHN0YXRlLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICBoYXNoZXIucmVzZXQoKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICByZXNldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAvLyBSZXNldCBkYXRhIGJ1ZmZlclxuXHQgICAgICAgICAgICBCdWZmZXJlZEJsb2NrQWxnb3JpdGhtLnJlc2V0LmNhbGwodGhpcyk7XG5cblx0ICAgICAgICAgICAgLy8gUGVyZm9ybSBjb25jcmV0ZS1oYXNoZXIgbG9naWNcblx0ICAgICAgICAgICAgdGhpcy5fZG9SZXNldCgpO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBVcGRhdGVzIHRoaXMgaGFzaGVyIHdpdGggYSBtZXNzYWdlLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBtZXNzYWdlVXBkYXRlIFRoZSBtZXNzYWdlIHRvIGFwcGVuZC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge0hhc2hlcn0gVGhpcyBoYXNoZXIuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIGhhc2hlci51cGRhdGUoJ21lc3NhZ2UnKTtcblx0ICAgICAgICAgKiAgICAgaGFzaGVyLnVwZGF0ZSh3b3JkQXJyYXkpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHVwZGF0ZTogZnVuY3Rpb24gKG1lc3NhZ2VVcGRhdGUpIHtcblx0ICAgICAgICAgICAgLy8gQXBwZW5kXG5cdCAgICAgICAgICAgIHRoaXMuX2FwcGVuZChtZXNzYWdlVXBkYXRlKTtcblxuXHQgICAgICAgICAgICAvLyBVcGRhdGUgdGhlIGhhc2hcblx0ICAgICAgICAgICAgdGhpcy5fcHJvY2VzcygpO1xuXG5cdCAgICAgICAgICAgIC8vIENoYWluYWJsZVxuXHQgICAgICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogRmluYWxpemVzIHRoZSBoYXNoIGNvbXB1dGF0aW9uLlxuXHQgICAgICAgICAqIE5vdGUgdGhhdCB0aGUgZmluYWxpemUgb3BlcmF0aW9uIGlzIGVmZmVjdGl2ZWx5IGEgZGVzdHJ1Y3RpdmUsIHJlYWQtb25jZSBvcGVyYXRpb24uXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IG1lc3NhZ2VVcGRhdGUgKE9wdGlvbmFsKSBBIGZpbmFsIG1lc3NhZ2UgdXBkYXRlLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgaGFzaC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIGhhc2ggPSBoYXNoZXIuZmluYWxpemUoKTtcblx0ICAgICAgICAgKiAgICAgdmFyIGhhc2ggPSBoYXNoZXIuZmluYWxpemUoJ21lc3NhZ2UnKTtcblx0ICAgICAgICAgKiAgICAgdmFyIGhhc2ggPSBoYXNoZXIuZmluYWxpemUod29yZEFycmF5KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBmaW5hbGl6ZTogZnVuY3Rpb24gKG1lc3NhZ2VVcGRhdGUpIHtcblx0ICAgICAgICAgICAgLy8gRmluYWwgbWVzc2FnZSB1cGRhdGVcblx0ICAgICAgICAgICAgaWYgKG1lc3NhZ2VVcGRhdGUpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2FwcGVuZChtZXNzYWdlVXBkYXRlKTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIFBlcmZvcm0gY29uY3JldGUtaGFzaGVyIGxvZ2ljXG5cdCAgICAgICAgICAgIHZhciBoYXNoID0gdGhpcy5fZG9GaW5hbGl6ZSgpO1xuXG5cdCAgICAgICAgICAgIHJldHVybiBoYXNoO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBibG9ja1NpemU6IDUxMi8zMixcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENyZWF0ZXMgYSBzaG9ydGN1dCBmdW5jdGlvbiB0byBhIGhhc2hlcidzIG9iamVjdCBpbnRlcmZhY2UuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge0hhc2hlcn0gaGFzaGVyIFRoZSBoYXNoZXIgdG8gY3JlYXRlIGEgaGVscGVyIGZvci5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge0Z1bmN0aW9ufSBUaGUgc2hvcnRjdXQgZnVuY3Rpb24uXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBTSEEyNTYgPSBDcnlwdG9KUy5saWIuSGFzaGVyLl9jcmVhdGVIZWxwZXIoQ3J5cHRvSlMuYWxnby5TSEEyNTYpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIF9jcmVhdGVIZWxwZXI6IGZ1bmN0aW9uIChoYXNoZXIpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChtZXNzYWdlLCBjZmcpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBuZXcgaGFzaGVyLmluaXQoY2ZnKS5maW5hbGl6ZShtZXNzYWdlKTtcblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ3JlYXRlcyBhIHNob3J0Y3V0IGZ1bmN0aW9uIHRvIHRoZSBITUFDJ3Mgb2JqZWN0IGludGVyZmFjZS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7SGFzaGVyfSBoYXNoZXIgVGhlIGhhc2hlciB0byB1c2UgaW4gdGhpcyBITUFDIGhlbHBlci5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge0Z1bmN0aW9ufSBUaGUgc2hvcnRjdXQgZnVuY3Rpb24uXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBIbWFjU0hBMjU2ID0gQ3J5cHRvSlMubGliLkhhc2hlci5fY3JlYXRlSG1hY0hlbHBlcihDcnlwdG9KUy5hbGdvLlNIQTI1Nik7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgX2NyZWF0ZUhtYWNIZWxwZXI6IGZ1bmN0aW9uIChoYXNoZXIpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChtZXNzYWdlLCBrZXkpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQ19hbGdvLkhNQUMuaW5pdChoYXNoZXIsIGtleSkuZmluYWxpemUobWVzc2FnZSk7XG5cdCAgICAgICAgICAgIH07XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogQWxnb3JpdGhtIG5hbWVzcGFjZS5cblx0ICAgICAqL1xuXHQgICAgdmFyIENfYWxnbyA9IEMuYWxnbyA9IHt9O1xuXG5cdCAgICByZXR1cm4gQztcblx0fShNYXRoKSk7XG5cblxuXHQoZnVuY3Rpb24gKCkge1xuXHQgICAgLy8gU2hvcnRjdXRzXG5cdCAgICB2YXIgQyA9IENyeXB0b0pTO1xuXHQgICAgdmFyIENfbGliID0gQy5saWI7XG5cdCAgICB2YXIgV29yZEFycmF5ID0gQ19saWIuV29yZEFycmF5O1xuXHQgICAgdmFyIENfZW5jID0gQy5lbmM7XG5cblx0ICAgIC8qKlxuXHQgICAgICogQmFzZTY0IGVuY29kaW5nIHN0cmF0ZWd5LlxuXHQgICAgICovXG5cdCAgICB2YXIgQmFzZTY0ID0gQ19lbmMuQmFzZTY0ID0ge1xuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENvbnZlcnRzIGEgd29yZCBhcnJheSB0byBhIEJhc2U2NCBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheX0gd29yZEFycmF5IFRoZSB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7c3RyaW5nfSBUaGUgQmFzZTY0IHN0cmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBzdGF0aWNcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIGJhc2U2NFN0cmluZyA9IENyeXB0b0pTLmVuYy5CYXNlNjQuc3RyaW5naWZ5KHdvcmRBcnJheSk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgc3RyaW5naWZ5OiBmdW5jdGlvbiAod29yZEFycmF5KSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIgd29yZHMgPSB3b3JkQXJyYXkud29yZHM7XG5cdCAgICAgICAgICAgIHZhciBzaWdCeXRlcyA9IHdvcmRBcnJheS5zaWdCeXRlcztcblx0ICAgICAgICAgICAgdmFyIG1hcCA9IHRoaXMuX21hcDtcblxuXHQgICAgICAgICAgICAvLyBDbGFtcCBleGNlc3MgYml0c1xuXHQgICAgICAgICAgICB3b3JkQXJyYXkuY2xhbXAoKTtcblxuXHQgICAgICAgICAgICAvLyBDb252ZXJ0XG5cdCAgICAgICAgICAgIHZhciBiYXNlNjRDaGFycyA9IFtdO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNpZ0J5dGVzOyBpICs9IDMpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBieXRlMSA9ICh3b3Jkc1tpID4+PiAyXSAgICAgICA+Pj4gKDI0IC0gKGkgJSA0KSAqIDgpKSAgICAgICAmIDB4ZmY7XG5cdCAgICAgICAgICAgICAgICB2YXIgYnl0ZTIgPSAod29yZHNbKGkgKyAxKSA+Pj4gMl0gPj4+ICgyNCAtICgoaSArIDEpICUgNCkgKiA4KSkgJiAweGZmO1xuXHQgICAgICAgICAgICAgICAgdmFyIGJ5dGUzID0gKHdvcmRzWyhpICsgMikgPj4+IDJdID4+PiAoMjQgLSAoKGkgKyAyKSAlIDQpICogOCkpICYgMHhmZjtcblxuXHQgICAgICAgICAgICAgICAgdmFyIHRyaXBsZXQgPSAoYnl0ZTEgPDwgMTYpIHwgKGJ5dGUyIDw8IDgpIHwgYnl0ZTM7XG5cblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyAoaiA8IDQpICYmIChpICsgaiAqIDAuNzUgPCBzaWdCeXRlcyk7IGorKykge1xuXHQgICAgICAgICAgICAgICAgICAgIGJhc2U2NENoYXJzLnB1c2gobWFwLmNoYXJBdCgodHJpcGxldCA+Pj4gKDYgKiAoMyAtIGopKSkgJiAweDNmKSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBBZGQgcGFkZGluZ1xuXHQgICAgICAgICAgICB2YXIgcGFkZGluZ0NoYXIgPSBtYXAuY2hhckF0KDY0KTtcblx0ICAgICAgICAgICAgaWYgKHBhZGRpbmdDaGFyKSB7XG5cdCAgICAgICAgICAgICAgICB3aGlsZSAoYmFzZTY0Q2hhcnMubGVuZ3RoICUgNCkge1xuXHQgICAgICAgICAgICAgICAgICAgIGJhc2U2NENoYXJzLnB1c2gocGFkZGluZ0NoYXIpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgcmV0dXJuIGJhc2U2NENoYXJzLmpvaW4oJycpO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb252ZXJ0cyBhIEJhc2U2NCBzdHJpbmcgdG8gYSB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGJhc2U2NFN0ciBUaGUgQmFzZTY0IHN0cmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIHdvcmQgYXJyYXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciB3b3JkQXJyYXkgPSBDcnlwdG9KUy5lbmMuQmFzZTY0LnBhcnNlKGJhc2U2NFN0cmluZyk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgcGFyc2U6IGZ1bmN0aW9uIChiYXNlNjRTdHIpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBiYXNlNjRTdHJMZW5ndGggPSBiYXNlNjRTdHIubGVuZ3RoO1xuXHQgICAgICAgICAgICB2YXIgbWFwID0gdGhpcy5fbWFwO1xuXHQgICAgICAgICAgICB2YXIgcmV2ZXJzZU1hcCA9IHRoaXMuX3JldmVyc2VNYXA7XG5cblx0ICAgICAgICAgICAgaWYgKCFyZXZlcnNlTWFwKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV2ZXJzZU1hcCA9IHRoaXMuX3JldmVyc2VNYXAgPSBbXTtcblx0ICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG1hcC5sZW5ndGg7IGorKykge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICByZXZlcnNlTWFwW21hcC5jaGFyQ29kZUF0KGopXSA9IGo7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gSWdub3JlIHBhZGRpbmdcblx0ICAgICAgICAgICAgdmFyIHBhZGRpbmdDaGFyID0gbWFwLmNoYXJBdCg2NCk7XG5cdCAgICAgICAgICAgIGlmIChwYWRkaW5nQ2hhcikge1xuXHQgICAgICAgICAgICAgICAgdmFyIHBhZGRpbmdJbmRleCA9IGJhc2U2NFN0ci5pbmRleE9mKHBhZGRpbmdDaGFyKTtcblx0ICAgICAgICAgICAgICAgIGlmIChwYWRkaW5nSW5kZXggIT09IC0xKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgYmFzZTY0U3RyTGVuZ3RoID0gcGFkZGluZ0luZGV4O1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gQ29udmVydFxuXHQgICAgICAgICAgICByZXR1cm4gcGFyc2VMb29wKGJhc2U2NFN0ciwgYmFzZTY0U3RyTGVuZ3RoLCByZXZlcnNlTWFwKTtcblxuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBfbWFwOiAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz0nXG5cdCAgICB9O1xuXG5cdCAgICBmdW5jdGlvbiBwYXJzZUxvb3AoYmFzZTY0U3RyLCBiYXNlNjRTdHJMZW5ndGgsIHJldmVyc2VNYXApIHtcblx0ICAgICAgdmFyIHdvcmRzID0gW107XG5cdCAgICAgIHZhciBuQnl0ZXMgPSAwO1xuXHQgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJhc2U2NFN0ckxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICBpZiAoaSAlIDQpIHtcblx0ICAgICAgICAgICAgICB2YXIgYml0czEgPSByZXZlcnNlTWFwW2Jhc2U2NFN0ci5jaGFyQ29kZUF0KGkgLSAxKV0gPDwgKChpICUgNCkgKiAyKTtcblx0ICAgICAgICAgICAgICB2YXIgYml0czIgPSByZXZlcnNlTWFwW2Jhc2U2NFN0ci5jaGFyQ29kZUF0KGkpXSA+Pj4gKDYgLSAoaSAlIDQpICogMik7XG5cdCAgICAgICAgICAgICAgdmFyIGJpdHNDb21iaW5lZCA9IGJpdHMxIHwgYml0czI7XG5cdCAgICAgICAgICAgICAgd29yZHNbbkJ5dGVzID4+PiAyXSB8PSBiaXRzQ29tYmluZWQgPDwgKDI0IC0gKG5CeXRlcyAlIDQpICogOCk7XG5cdCAgICAgICAgICAgICAgbkJ5dGVzKys7XG5cdCAgICAgICAgICB9XG5cdCAgICAgIH1cblx0ICAgICAgcmV0dXJuIFdvcmRBcnJheS5jcmVhdGUod29yZHMsIG5CeXRlcyk7XG5cdCAgICB9XG5cdH0oKSk7XG5cblxuXHQoZnVuY3Rpb24gKE1hdGgpIHtcblx0ICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgdmFyIEMgPSBDcnlwdG9KUztcblx0ICAgIHZhciBDX2xpYiA9IEMubGliO1xuXHQgICAgdmFyIFdvcmRBcnJheSA9IENfbGliLldvcmRBcnJheTtcblx0ICAgIHZhciBIYXNoZXIgPSBDX2xpYi5IYXNoZXI7XG5cdCAgICB2YXIgQ19hbGdvID0gQy5hbGdvO1xuXG5cdCAgICAvLyBDb25zdGFudHMgdGFibGVcblx0ICAgIHZhciBUID0gW107XG5cblx0ICAgIC8vIENvbXB1dGUgY29uc3RhbnRzXG5cdCAgICAoZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNjQ7IGkrKykge1xuXHQgICAgICAgICAgICBUW2ldID0gKE1hdGguYWJzKE1hdGguc2luKGkgKyAxKSkgKiAweDEwMDAwMDAwMCkgfCAwO1xuXHQgICAgICAgIH1cblx0ICAgIH0oKSk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogTUQ1IGhhc2ggYWxnb3JpdGhtLlxuXHQgICAgICovXG5cdCAgICB2YXIgTUQ1ID0gQ19hbGdvLk1ENSA9IEhhc2hlci5leHRlbmQoe1xuXHQgICAgICAgIF9kb1Jlc2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2hhc2ggPSBuZXcgV29yZEFycmF5LmluaXQoW1xuXHQgICAgICAgICAgICAgICAgMHg2NzQ1MjMwMSwgMHhlZmNkYWI4OSxcblx0ICAgICAgICAgICAgICAgIDB4OThiYWRjZmUsIDB4MTAzMjU0NzZcblx0ICAgICAgICAgICAgXSk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIF9kb1Byb2Nlc3NCbG9jazogZnVuY3Rpb24gKE0sIG9mZnNldCkge1xuXHQgICAgICAgICAgICAvLyBTd2FwIGVuZGlhblxuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICAgICAgdmFyIG9mZnNldF9pID0gb2Zmc2V0ICsgaTtcblx0ICAgICAgICAgICAgICAgIHZhciBNX29mZnNldF9pID0gTVtvZmZzZXRfaV07XG5cblx0ICAgICAgICAgICAgICAgIE1bb2Zmc2V0X2ldID0gKFxuXHQgICAgICAgICAgICAgICAgICAgICgoKE1fb2Zmc2V0X2kgPDwgOCkgIHwgKE1fb2Zmc2V0X2kgPj4+IDI0KSkgJiAweDAwZmYwMGZmKSB8XG5cdCAgICAgICAgICAgICAgICAgICAgKCgoTV9vZmZzZXRfaSA8PCAyNCkgfCAoTV9vZmZzZXRfaSA+Pj4gOCkpICAmIDB4ZmYwMGZmMDApXG5cdCAgICAgICAgICAgICAgICApO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBIID0gdGhpcy5faGFzaC53b3JkcztcblxuXHQgICAgICAgICAgICB2YXIgTV9vZmZzZXRfMCAgPSBNW29mZnNldCArIDBdO1xuXHQgICAgICAgICAgICB2YXIgTV9vZmZzZXRfMSAgPSBNW29mZnNldCArIDFdO1xuXHQgICAgICAgICAgICB2YXIgTV9vZmZzZXRfMiAgPSBNW29mZnNldCArIDJdO1xuXHQgICAgICAgICAgICB2YXIgTV9vZmZzZXRfMyAgPSBNW29mZnNldCArIDNdO1xuXHQgICAgICAgICAgICB2YXIgTV9vZmZzZXRfNCAgPSBNW29mZnNldCArIDRdO1xuXHQgICAgICAgICAgICB2YXIgTV9vZmZzZXRfNSAgPSBNW29mZnNldCArIDVdO1xuXHQgICAgICAgICAgICB2YXIgTV9vZmZzZXRfNiAgPSBNW29mZnNldCArIDZdO1xuXHQgICAgICAgICAgICB2YXIgTV9vZmZzZXRfNyAgPSBNW29mZnNldCArIDddO1xuXHQgICAgICAgICAgICB2YXIgTV9vZmZzZXRfOCAgPSBNW29mZnNldCArIDhdO1xuXHQgICAgICAgICAgICB2YXIgTV9vZmZzZXRfOSAgPSBNW29mZnNldCArIDldO1xuXHQgICAgICAgICAgICB2YXIgTV9vZmZzZXRfMTAgPSBNW29mZnNldCArIDEwXTtcblx0ICAgICAgICAgICAgdmFyIE1fb2Zmc2V0XzExID0gTVtvZmZzZXQgKyAxMV07XG5cdCAgICAgICAgICAgIHZhciBNX29mZnNldF8xMiA9IE1bb2Zmc2V0ICsgMTJdO1xuXHQgICAgICAgICAgICB2YXIgTV9vZmZzZXRfMTMgPSBNW29mZnNldCArIDEzXTtcblx0ICAgICAgICAgICAgdmFyIE1fb2Zmc2V0XzE0ID0gTVtvZmZzZXQgKyAxNF07XG5cdCAgICAgICAgICAgIHZhciBNX29mZnNldF8xNSA9IE1bb2Zmc2V0ICsgMTVdO1xuXG5cdCAgICAgICAgICAgIC8vIFdvcmtpbmcgdmFyaWFsYmVzXG5cdCAgICAgICAgICAgIHZhciBhID0gSFswXTtcblx0ICAgICAgICAgICAgdmFyIGIgPSBIWzFdO1xuXHQgICAgICAgICAgICB2YXIgYyA9IEhbMl07XG5cdCAgICAgICAgICAgIHZhciBkID0gSFszXTtcblxuXHQgICAgICAgICAgICAvLyBDb21wdXRhdGlvblxuXHQgICAgICAgICAgICBhID0gRkYoYSwgYiwgYywgZCwgTV9vZmZzZXRfMCwgIDcsICBUWzBdKTtcblx0ICAgICAgICAgICAgZCA9IEZGKGQsIGEsIGIsIGMsIE1fb2Zmc2V0XzEsICAxMiwgVFsxXSk7XG5cdCAgICAgICAgICAgIGMgPSBGRihjLCBkLCBhLCBiLCBNX29mZnNldF8yLCAgMTcsIFRbMl0pO1xuXHQgICAgICAgICAgICBiID0gRkYoYiwgYywgZCwgYSwgTV9vZmZzZXRfMywgIDIyLCBUWzNdKTtcblx0ICAgICAgICAgICAgYSA9IEZGKGEsIGIsIGMsIGQsIE1fb2Zmc2V0XzQsICA3LCAgVFs0XSk7XG5cdCAgICAgICAgICAgIGQgPSBGRihkLCBhLCBiLCBjLCBNX29mZnNldF81LCAgMTIsIFRbNV0pO1xuXHQgICAgICAgICAgICBjID0gRkYoYywgZCwgYSwgYiwgTV9vZmZzZXRfNiwgIDE3LCBUWzZdKTtcblx0ICAgICAgICAgICAgYiA9IEZGKGIsIGMsIGQsIGEsIE1fb2Zmc2V0XzcsICAyMiwgVFs3XSk7XG5cdCAgICAgICAgICAgIGEgPSBGRihhLCBiLCBjLCBkLCBNX29mZnNldF84LCAgNywgIFRbOF0pO1xuXHQgICAgICAgICAgICBkID0gRkYoZCwgYSwgYiwgYywgTV9vZmZzZXRfOSwgIDEyLCBUWzldKTtcblx0ICAgICAgICAgICAgYyA9IEZGKGMsIGQsIGEsIGIsIE1fb2Zmc2V0XzEwLCAxNywgVFsxMF0pO1xuXHQgICAgICAgICAgICBiID0gRkYoYiwgYywgZCwgYSwgTV9vZmZzZXRfMTEsIDIyLCBUWzExXSk7XG5cdCAgICAgICAgICAgIGEgPSBGRihhLCBiLCBjLCBkLCBNX29mZnNldF8xMiwgNywgIFRbMTJdKTtcblx0ICAgICAgICAgICAgZCA9IEZGKGQsIGEsIGIsIGMsIE1fb2Zmc2V0XzEzLCAxMiwgVFsxM10pO1xuXHQgICAgICAgICAgICBjID0gRkYoYywgZCwgYSwgYiwgTV9vZmZzZXRfMTQsIDE3LCBUWzE0XSk7XG5cdCAgICAgICAgICAgIGIgPSBGRihiLCBjLCBkLCBhLCBNX29mZnNldF8xNSwgMjIsIFRbMTVdKTtcblxuXHQgICAgICAgICAgICBhID0gR0coYSwgYiwgYywgZCwgTV9vZmZzZXRfMSwgIDUsICBUWzE2XSk7XG5cdCAgICAgICAgICAgIGQgPSBHRyhkLCBhLCBiLCBjLCBNX29mZnNldF82LCAgOSwgIFRbMTddKTtcblx0ICAgICAgICAgICAgYyA9IEdHKGMsIGQsIGEsIGIsIE1fb2Zmc2V0XzExLCAxNCwgVFsxOF0pO1xuXHQgICAgICAgICAgICBiID0gR0coYiwgYywgZCwgYSwgTV9vZmZzZXRfMCwgIDIwLCBUWzE5XSk7XG5cdCAgICAgICAgICAgIGEgPSBHRyhhLCBiLCBjLCBkLCBNX29mZnNldF81LCAgNSwgIFRbMjBdKTtcblx0ICAgICAgICAgICAgZCA9IEdHKGQsIGEsIGIsIGMsIE1fb2Zmc2V0XzEwLCA5LCAgVFsyMV0pO1xuXHQgICAgICAgICAgICBjID0gR0coYywgZCwgYSwgYiwgTV9vZmZzZXRfMTUsIDE0LCBUWzIyXSk7XG5cdCAgICAgICAgICAgIGIgPSBHRyhiLCBjLCBkLCBhLCBNX29mZnNldF80LCAgMjAsIFRbMjNdKTtcblx0ICAgICAgICAgICAgYSA9IEdHKGEsIGIsIGMsIGQsIE1fb2Zmc2V0XzksICA1LCAgVFsyNF0pO1xuXHQgICAgICAgICAgICBkID0gR0coZCwgYSwgYiwgYywgTV9vZmZzZXRfMTQsIDksICBUWzI1XSk7XG5cdCAgICAgICAgICAgIGMgPSBHRyhjLCBkLCBhLCBiLCBNX29mZnNldF8zLCAgMTQsIFRbMjZdKTtcblx0ICAgICAgICAgICAgYiA9IEdHKGIsIGMsIGQsIGEsIE1fb2Zmc2V0XzgsICAyMCwgVFsyN10pO1xuXHQgICAgICAgICAgICBhID0gR0coYSwgYiwgYywgZCwgTV9vZmZzZXRfMTMsIDUsICBUWzI4XSk7XG5cdCAgICAgICAgICAgIGQgPSBHRyhkLCBhLCBiLCBjLCBNX29mZnNldF8yLCAgOSwgIFRbMjldKTtcblx0ICAgICAgICAgICAgYyA9IEdHKGMsIGQsIGEsIGIsIE1fb2Zmc2V0XzcsICAxNCwgVFszMF0pO1xuXHQgICAgICAgICAgICBiID0gR0coYiwgYywgZCwgYSwgTV9vZmZzZXRfMTIsIDIwLCBUWzMxXSk7XG5cblx0ICAgICAgICAgICAgYSA9IEhIKGEsIGIsIGMsIGQsIE1fb2Zmc2V0XzUsICA0LCAgVFszMl0pO1xuXHQgICAgICAgICAgICBkID0gSEgoZCwgYSwgYiwgYywgTV9vZmZzZXRfOCwgIDExLCBUWzMzXSk7XG5cdCAgICAgICAgICAgIGMgPSBISChjLCBkLCBhLCBiLCBNX29mZnNldF8xMSwgMTYsIFRbMzRdKTtcblx0ICAgICAgICAgICAgYiA9IEhIKGIsIGMsIGQsIGEsIE1fb2Zmc2V0XzE0LCAyMywgVFszNV0pO1xuXHQgICAgICAgICAgICBhID0gSEgoYSwgYiwgYywgZCwgTV9vZmZzZXRfMSwgIDQsICBUWzM2XSk7XG5cdCAgICAgICAgICAgIGQgPSBISChkLCBhLCBiLCBjLCBNX29mZnNldF80LCAgMTEsIFRbMzddKTtcblx0ICAgICAgICAgICAgYyA9IEhIKGMsIGQsIGEsIGIsIE1fb2Zmc2V0XzcsICAxNiwgVFszOF0pO1xuXHQgICAgICAgICAgICBiID0gSEgoYiwgYywgZCwgYSwgTV9vZmZzZXRfMTAsIDIzLCBUWzM5XSk7XG5cdCAgICAgICAgICAgIGEgPSBISChhLCBiLCBjLCBkLCBNX29mZnNldF8xMywgNCwgIFRbNDBdKTtcblx0ICAgICAgICAgICAgZCA9IEhIKGQsIGEsIGIsIGMsIE1fb2Zmc2V0XzAsICAxMSwgVFs0MV0pO1xuXHQgICAgICAgICAgICBjID0gSEgoYywgZCwgYSwgYiwgTV9vZmZzZXRfMywgIDE2LCBUWzQyXSk7XG5cdCAgICAgICAgICAgIGIgPSBISChiLCBjLCBkLCBhLCBNX29mZnNldF82LCAgMjMsIFRbNDNdKTtcblx0ICAgICAgICAgICAgYSA9IEhIKGEsIGIsIGMsIGQsIE1fb2Zmc2V0XzksICA0LCAgVFs0NF0pO1xuXHQgICAgICAgICAgICBkID0gSEgoZCwgYSwgYiwgYywgTV9vZmZzZXRfMTIsIDExLCBUWzQ1XSk7XG5cdCAgICAgICAgICAgIGMgPSBISChjLCBkLCBhLCBiLCBNX29mZnNldF8xNSwgMTYsIFRbNDZdKTtcblx0ICAgICAgICAgICAgYiA9IEhIKGIsIGMsIGQsIGEsIE1fb2Zmc2V0XzIsICAyMywgVFs0N10pO1xuXG5cdCAgICAgICAgICAgIGEgPSBJSShhLCBiLCBjLCBkLCBNX29mZnNldF8wLCAgNiwgIFRbNDhdKTtcblx0ICAgICAgICAgICAgZCA9IElJKGQsIGEsIGIsIGMsIE1fb2Zmc2V0XzcsICAxMCwgVFs0OV0pO1xuXHQgICAgICAgICAgICBjID0gSUkoYywgZCwgYSwgYiwgTV9vZmZzZXRfMTQsIDE1LCBUWzUwXSk7XG5cdCAgICAgICAgICAgIGIgPSBJSShiLCBjLCBkLCBhLCBNX29mZnNldF81LCAgMjEsIFRbNTFdKTtcblx0ICAgICAgICAgICAgYSA9IElJKGEsIGIsIGMsIGQsIE1fb2Zmc2V0XzEyLCA2LCAgVFs1Ml0pO1xuXHQgICAgICAgICAgICBkID0gSUkoZCwgYSwgYiwgYywgTV9vZmZzZXRfMywgIDEwLCBUWzUzXSk7XG5cdCAgICAgICAgICAgIGMgPSBJSShjLCBkLCBhLCBiLCBNX29mZnNldF8xMCwgMTUsIFRbNTRdKTtcblx0ICAgICAgICAgICAgYiA9IElJKGIsIGMsIGQsIGEsIE1fb2Zmc2V0XzEsICAyMSwgVFs1NV0pO1xuXHQgICAgICAgICAgICBhID0gSUkoYSwgYiwgYywgZCwgTV9vZmZzZXRfOCwgIDYsICBUWzU2XSk7XG5cdCAgICAgICAgICAgIGQgPSBJSShkLCBhLCBiLCBjLCBNX29mZnNldF8xNSwgMTAsIFRbNTddKTtcblx0ICAgICAgICAgICAgYyA9IElJKGMsIGQsIGEsIGIsIE1fb2Zmc2V0XzYsICAxNSwgVFs1OF0pO1xuXHQgICAgICAgICAgICBiID0gSUkoYiwgYywgZCwgYSwgTV9vZmZzZXRfMTMsIDIxLCBUWzU5XSk7XG5cdCAgICAgICAgICAgIGEgPSBJSShhLCBiLCBjLCBkLCBNX29mZnNldF80LCAgNiwgIFRbNjBdKTtcblx0ICAgICAgICAgICAgZCA9IElJKGQsIGEsIGIsIGMsIE1fb2Zmc2V0XzExLCAxMCwgVFs2MV0pO1xuXHQgICAgICAgICAgICBjID0gSUkoYywgZCwgYSwgYiwgTV9vZmZzZXRfMiwgIDE1LCBUWzYyXSk7XG5cdCAgICAgICAgICAgIGIgPSBJSShiLCBjLCBkLCBhLCBNX29mZnNldF85LCAgMjEsIFRbNjNdKTtcblxuXHQgICAgICAgICAgICAvLyBJbnRlcm1lZGlhdGUgaGFzaCB2YWx1ZVxuXHQgICAgICAgICAgICBIWzBdID0gKEhbMF0gKyBhKSB8IDA7XG5cdCAgICAgICAgICAgIEhbMV0gPSAoSFsxXSArIGIpIHwgMDtcblx0ICAgICAgICAgICAgSFsyXSA9IChIWzJdICsgYykgfCAwO1xuXHQgICAgICAgICAgICBIWzNdID0gKEhbM10gKyBkKSB8IDA7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIF9kb0ZpbmFsaXplOiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIgZGF0YSA9IHRoaXMuX2RhdGE7XG5cdCAgICAgICAgICAgIHZhciBkYXRhV29yZHMgPSBkYXRhLndvcmRzO1xuXG5cdCAgICAgICAgICAgIHZhciBuQml0c1RvdGFsID0gdGhpcy5fbkRhdGFCeXRlcyAqIDg7XG5cdCAgICAgICAgICAgIHZhciBuQml0c0xlZnQgPSBkYXRhLnNpZ0J5dGVzICogODtcblxuXHQgICAgICAgICAgICAvLyBBZGQgcGFkZGluZ1xuXHQgICAgICAgICAgICBkYXRhV29yZHNbbkJpdHNMZWZ0ID4+PiA1XSB8PSAweDgwIDw8ICgyNCAtIG5CaXRzTGVmdCAlIDMyKTtcblxuXHQgICAgICAgICAgICB2YXIgbkJpdHNUb3RhbEggPSBNYXRoLmZsb29yKG5CaXRzVG90YWwgLyAweDEwMDAwMDAwMCk7XG5cdCAgICAgICAgICAgIHZhciBuQml0c1RvdGFsTCA9IG5CaXRzVG90YWw7XG5cdCAgICAgICAgICAgIGRhdGFXb3Jkc1soKChuQml0c0xlZnQgKyA2NCkgPj4+IDkpIDw8IDQpICsgMTVdID0gKFxuXHQgICAgICAgICAgICAgICAgKCgobkJpdHNUb3RhbEggPDwgOCkgIHwgKG5CaXRzVG90YWxIID4+PiAyNCkpICYgMHgwMGZmMDBmZikgfFxuXHQgICAgICAgICAgICAgICAgKCgobkJpdHNUb3RhbEggPDwgMjQpIHwgKG5CaXRzVG90YWxIID4+PiA4KSkgICYgMHhmZjAwZmYwMClcblx0ICAgICAgICAgICAgKTtcblx0ICAgICAgICAgICAgZGF0YVdvcmRzWygoKG5CaXRzTGVmdCArIDY0KSA+Pj4gOSkgPDwgNCkgKyAxNF0gPSAoXG5cdCAgICAgICAgICAgICAgICAoKChuQml0c1RvdGFsTCA8PCA4KSAgfCAobkJpdHNUb3RhbEwgPj4+IDI0KSkgJiAweDAwZmYwMGZmKSB8XG5cdCAgICAgICAgICAgICAgICAoKChuQml0c1RvdGFsTCA8PCAyNCkgfCAobkJpdHNUb3RhbEwgPj4+IDgpKSAgJiAweGZmMDBmZjAwKVxuXHQgICAgICAgICAgICApO1xuXG5cdCAgICAgICAgICAgIGRhdGEuc2lnQnl0ZXMgPSAoZGF0YVdvcmRzLmxlbmd0aCArIDEpICogNDtcblxuXHQgICAgICAgICAgICAvLyBIYXNoIGZpbmFsIGJsb2Nrc1xuXHQgICAgICAgICAgICB0aGlzLl9wcm9jZXNzKCk7XG5cblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBoYXNoID0gdGhpcy5faGFzaDtcblx0ICAgICAgICAgICAgdmFyIEggPSBoYXNoLndvcmRzO1xuXG5cdCAgICAgICAgICAgIC8vIFN3YXAgZW5kaWFuXG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAvLyBTaG9ydGN1dFxuXHQgICAgICAgICAgICAgICAgdmFyIEhfaSA9IEhbaV07XG5cblx0ICAgICAgICAgICAgICAgIEhbaV0gPSAoKChIX2kgPDwgOCkgIHwgKEhfaSA+Pj4gMjQpKSAmIDB4MDBmZjAwZmYpIHxcblx0ICAgICAgICAgICAgICAgICAgICAgICAoKChIX2kgPDwgMjQpIHwgKEhfaSA+Pj4gOCkpICAmIDB4ZmYwMGZmMDApO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gUmV0dXJuIGZpbmFsIGNvbXB1dGVkIGhhc2hcblx0ICAgICAgICAgICAgcmV0dXJuIGhhc2g7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBjbG9uZSA9IEhhc2hlci5jbG9uZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgICAgICBjbG9uZS5faGFzaCA9IHRoaXMuX2hhc2guY2xvbmUoKTtcblxuXHQgICAgICAgICAgICByZXR1cm4gY2xvbmU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cblx0ICAgIGZ1bmN0aW9uIEZGKGEsIGIsIGMsIGQsIHgsIHMsIHQpIHtcblx0ICAgICAgICB2YXIgbiA9IGEgKyAoKGIgJiBjKSB8ICh+YiAmIGQpKSArIHggKyB0O1xuXHQgICAgICAgIHJldHVybiAoKG4gPDwgcykgfCAobiA+Pj4gKDMyIC0gcykpKSArIGI7XG5cdCAgICB9XG5cblx0ICAgIGZ1bmN0aW9uIEdHKGEsIGIsIGMsIGQsIHgsIHMsIHQpIHtcblx0ICAgICAgICB2YXIgbiA9IGEgKyAoKGIgJiBkKSB8IChjICYgfmQpKSArIHggKyB0O1xuXHQgICAgICAgIHJldHVybiAoKG4gPDwgcykgfCAobiA+Pj4gKDMyIC0gcykpKSArIGI7XG5cdCAgICB9XG5cblx0ICAgIGZ1bmN0aW9uIEhIKGEsIGIsIGMsIGQsIHgsIHMsIHQpIHtcblx0ICAgICAgICB2YXIgbiA9IGEgKyAoYiBeIGMgXiBkKSArIHggKyB0O1xuXHQgICAgICAgIHJldHVybiAoKG4gPDwgcykgfCAobiA+Pj4gKDMyIC0gcykpKSArIGI7XG5cdCAgICB9XG5cblx0ICAgIGZ1bmN0aW9uIElJKGEsIGIsIGMsIGQsIHgsIHMsIHQpIHtcblx0ICAgICAgICB2YXIgbiA9IGEgKyAoYyBeIChiIHwgfmQpKSArIHggKyB0O1xuXHQgICAgICAgIHJldHVybiAoKG4gPDwgcykgfCAobiA+Pj4gKDMyIC0gcykpKSArIGI7XG5cdCAgICB9XG5cblx0ICAgIC8qKlxuXHQgICAgICogU2hvcnRjdXQgZnVuY3Rpb24gdG8gdGhlIGhhc2hlcidzIG9iamVjdCBpbnRlcmZhY2UuXG5cdCAgICAgKlxuXHQgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBtZXNzYWdlIFRoZSBtZXNzYWdlIHRvIGhhc2guXG5cdCAgICAgKlxuXHQgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgaGFzaC5cblx0ICAgICAqXG5cdCAgICAgKiBAc3RhdGljXG5cdCAgICAgKlxuXHQgICAgICogQGV4YW1wbGVcblx0ICAgICAqXG5cdCAgICAgKiAgICAgdmFyIGhhc2ggPSBDcnlwdG9KUy5NRDUoJ21lc3NhZ2UnKTtcblx0ICAgICAqICAgICB2YXIgaGFzaCA9IENyeXB0b0pTLk1ENSh3b3JkQXJyYXkpO1xuXHQgICAgICovXG5cdCAgICBDLk1ENSA9IEhhc2hlci5fY3JlYXRlSGVscGVyKE1ENSk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogU2hvcnRjdXQgZnVuY3Rpb24gdG8gdGhlIEhNQUMncyBvYmplY3QgaW50ZXJmYWNlLlxuXHQgICAgICpcblx0ICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gbWVzc2FnZSBUaGUgbWVzc2FnZSB0byBoYXNoLlxuXHQgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBrZXkgVGhlIHNlY3JldCBrZXkuXG5cdCAgICAgKlxuXHQgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgSE1BQy5cblx0ICAgICAqXG5cdCAgICAgKiBAc3RhdGljXG5cdCAgICAgKlxuXHQgICAgICogQGV4YW1wbGVcblx0ICAgICAqXG5cdCAgICAgKiAgICAgdmFyIGhtYWMgPSBDcnlwdG9KUy5IbWFjTUQ1KG1lc3NhZ2UsIGtleSk7XG5cdCAgICAgKi9cblx0ICAgIEMuSG1hY01ENSA9IEhhc2hlci5fY3JlYXRlSG1hY0hlbHBlcihNRDUpO1xuXHR9KE1hdGgpKTtcblxuXG5cdChmdW5jdGlvbiAoKSB7XG5cdCAgICAvLyBTaG9ydGN1dHNcblx0ICAgIHZhciBDID0gQ3J5cHRvSlM7XG5cdCAgICB2YXIgQ19saWIgPSBDLmxpYjtcblx0ICAgIHZhciBXb3JkQXJyYXkgPSBDX2xpYi5Xb3JkQXJyYXk7XG5cdCAgICB2YXIgSGFzaGVyID0gQ19saWIuSGFzaGVyO1xuXHQgICAgdmFyIENfYWxnbyA9IEMuYWxnbztcblxuXHQgICAgLy8gUmV1c2FibGUgb2JqZWN0XG5cdCAgICB2YXIgVyA9IFtdO1xuXG5cdCAgICAvKipcblx0ICAgICAqIFNIQS0xIGhhc2ggYWxnb3JpdGhtLlxuXHQgICAgICovXG5cdCAgICB2YXIgU0hBMSA9IENfYWxnby5TSEExID0gSGFzaGVyLmV4dGVuZCh7XG5cdCAgICAgICAgX2RvUmVzZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdGhpcy5faGFzaCA9IG5ldyBXb3JkQXJyYXkuaW5pdChbXG5cdCAgICAgICAgICAgICAgICAweDY3NDUyMzAxLCAweGVmY2RhYjg5LFxuXHQgICAgICAgICAgICAgICAgMHg5OGJhZGNmZSwgMHgxMDMyNTQ3Nixcblx0ICAgICAgICAgICAgICAgIDB4YzNkMmUxZjBcblx0ICAgICAgICAgICAgXSk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIF9kb1Byb2Nlc3NCbG9jazogZnVuY3Rpb24gKE0sIG9mZnNldCkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dFxuXHQgICAgICAgICAgICB2YXIgSCA9IHRoaXMuX2hhc2gud29yZHM7XG5cblx0ICAgICAgICAgICAgLy8gV29ya2luZyB2YXJpYWJsZXNcblx0ICAgICAgICAgICAgdmFyIGEgPSBIWzBdO1xuXHQgICAgICAgICAgICB2YXIgYiA9IEhbMV07XG5cdCAgICAgICAgICAgIHZhciBjID0gSFsyXTtcblx0ICAgICAgICAgICAgdmFyIGQgPSBIWzNdO1xuXHQgICAgICAgICAgICB2YXIgZSA9IEhbNF07XG5cblx0ICAgICAgICAgICAgLy8gQ29tcHV0YXRpb25cblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA4MDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAoaSA8IDE2KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgV1tpXSA9IE1bb2Zmc2V0ICsgaV0gfCAwO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgbiA9IFdbaSAtIDNdIF4gV1tpIC0gOF0gXiBXW2kgLSAxNF0gXiBXW2kgLSAxNl07XG5cdCAgICAgICAgICAgICAgICAgICAgV1tpXSA9IChuIDw8IDEpIHwgKG4gPj4+IDMxKTtcblx0ICAgICAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAgICAgdmFyIHQgPSAoKGEgPDwgNSkgfCAoYSA+Pj4gMjcpKSArIGUgKyBXW2ldO1xuXHQgICAgICAgICAgICAgICAgaWYgKGkgPCAyMCkge1xuXHQgICAgICAgICAgICAgICAgICAgIHQgKz0gKChiICYgYykgfCAofmIgJiBkKSkgKyAweDVhODI3OTk5O1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpIDwgNDApIHtcblx0ICAgICAgICAgICAgICAgICAgICB0ICs9IChiIF4gYyBeIGQpICsgMHg2ZWQ5ZWJhMTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaSA8IDYwKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdCArPSAoKGIgJiBjKSB8IChiICYgZCkgfCAoYyAmIGQpKSAtIDB4NzBlNDQzMjQ7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2UgLyogaWYgKGkgPCA4MCkgKi8ge1xuXHQgICAgICAgICAgICAgICAgICAgIHQgKz0gKGIgXiBjIF4gZCkgLSAweDM1OWQzZTJhO1xuXHQgICAgICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgICAgICBlID0gZDtcblx0ICAgICAgICAgICAgICAgIGQgPSBjO1xuXHQgICAgICAgICAgICAgICAgYyA9IChiIDw8IDMwKSB8IChiID4+PiAyKTtcblx0ICAgICAgICAgICAgICAgIGIgPSBhO1xuXHQgICAgICAgICAgICAgICAgYSA9IHQ7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBJbnRlcm1lZGlhdGUgaGFzaCB2YWx1ZVxuXHQgICAgICAgICAgICBIWzBdID0gKEhbMF0gKyBhKSB8IDA7XG5cdCAgICAgICAgICAgIEhbMV0gPSAoSFsxXSArIGIpIHwgMDtcblx0ICAgICAgICAgICAgSFsyXSA9IChIWzJdICsgYykgfCAwO1xuXHQgICAgICAgICAgICBIWzNdID0gKEhbM10gKyBkKSB8IDA7XG5cdCAgICAgICAgICAgIEhbNF0gPSAoSFs0XSArIGUpIHwgMDtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgX2RvRmluYWxpemU6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBkYXRhID0gdGhpcy5fZGF0YTtcblx0ICAgICAgICAgICAgdmFyIGRhdGFXb3JkcyA9IGRhdGEud29yZHM7XG5cblx0ICAgICAgICAgICAgdmFyIG5CaXRzVG90YWwgPSB0aGlzLl9uRGF0YUJ5dGVzICogODtcblx0ICAgICAgICAgICAgdmFyIG5CaXRzTGVmdCA9IGRhdGEuc2lnQnl0ZXMgKiA4O1xuXG5cdCAgICAgICAgICAgIC8vIEFkZCBwYWRkaW5nXG5cdCAgICAgICAgICAgIGRhdGFXb3Jkc1tuQml0c0xlZnQgPj4+IDVdIHw9IDB4ODAgPDwgKDI0IC0gbkJpdHNMZWZ0ICUgMzIpO1xuXHQgICAgICAgICAgICBkYXRhV29yZHNbKCgobkJpdHNMZWZ0ICsgNjQpID4+PiA5KSA8PCA0KSArIDE0XSA9IE1hdGguZmxvb3IobkJpdHNUb3RhbCAvIDB4MTAwMDAwMDAwKTtcblx0ICAgICAgICAgICAgZGF0YVdvcmRzWygoKG5CaXRzTGVmdCArIDY0KSA+Pj4gOSkgPDwgNCkgKyAxNV0gPSBuQml0c1RvdGFsO1xuXHQgICAgICAgICAgICBkYXRhLnNpZ0J5dGVzID0gZGF0YVdvcmRzLmxlbmd0aCAqIDQ7XG5cblx0ICAgICAgICAgICAgLy8gSGFzaCBmaW5hbCBibG9ja3Ncblx0ICAgICAgICAgICAgdGhpcy5fcHJvY2VzcygpO1xuXG5cdCAgICAgICAgICAgIC8vIFJldHVybiBmaW5hbCBjb21wdXRlZCBoYXNoXG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9oYXNoO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBjbG9uZTogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgY2xvbmUgPSBIYXNoZXIuY2xvbmUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAgICAgY2xvbmUuX2hhc2ggPSB0aGlzLl9oYXNoLmNsb25lKCk7XG5cblx0ICAgICAgICAgICAgcmV0dXJuIGNsb25lO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXG5cdCAgICAvKipcblx0ICAgICAqIFNob3J0Y3V0IGZ1bmN0aW9uIHRvIHRoZSBoYXNoZXIncyBvYmplY3QgaW50ZXJmYWNlLlxuXHQgICAgICpcblx0ICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gbWVzc2FnZSBUaGUgbWVzc2FnZSB0byBoYXNoLlxuXHQgICAgICpcblx0ICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIGhhc2guXG5cdCAgICAgKlxuXHQgICAgICogQHN0YXRpY1xuXHQgICAgICpcblx0ICAgICAqIEBleGFtcGxlXG5cdCAgICAgKlxuXHQgICAgICogICAgIHZhciBoYXNoID0gQ3J5cHRvSlMuU0hBMSgnbWVzc2FnZScpO1xuXHQgICAgICogICAgIHZhciBoYXNoID0gQ3J5cHRvSlMuU0hBMSh3b3JkQXJyYXkpO1xuXHQgICAgICovXG5cdCAgICBDLlNIQTEgPSBIYXNoZXIuX2NyZWF0ZUhlbHBlcihTSEExKTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBTaG9ydGN1dCBmdW5jdGlvbiB0byB0aGUgSE1BQydzIG9iamVjdCBpbnRlcmZhY2UuXG5cdCAgICAgKlxuXHQgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBtZXNzYWdlIFRoZSBtZXNzYWdlIHRvIGhhc2guXG5cdCAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IGtleSBUaGUgc2VjcmV0IGtleS5cblx0ICAgICAqXG5cdCAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSBITUFDLlxuXHQgICAgICpcblx0ICAgICAqIEBzdGF0aWNcblx0ICAgICAqXG5cdCAgICAgKiBAZXhhbXBsZVxuXHQgICAgICpcblx0ICAgICAqICAgICB2YXIgaG1hYyA9IENyeXB0b0pTLkhtYWNTSEExKG1lc3NhZ2UsIGtleSk7XG5cdCAgICAgKi9cblx0ICAgIEMuSG1hY1NIQTEgPSBIYXNoZXIuX2NyZWF0ZUhtYWNIZWxwZXIoU0hBMSk7XG5cdH0oKSk7XG5cblxuXHQoZnVuY3Rpb24gKE1hdGgpIHtcblx0ICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgdmFyIEMgPSBDcnlwdG9KUztcblx0ICAgIHZhciBDX2xpYiA9IEMubGliO1xuXHQgICAgdmFyIFdvcmRBcnJheSA9IENfbGliLldvcmRBcnJheTtcblx0ICAgIHZhciBIYXNoZXIgPSBDX2xpYi5IYXNoZXI7XG5cdCAgICB2YXIgQ19hbGdvID0gQy5hbGdvO1xuXG5cdCAgICAvLyBJbml0aWFsaXphdGlvbiBhbmQgcm91bmQgY29uc3RhbnRzIHRhYmxlc1xuXHQgICAgdmFyIEggPSBbXTtcblx0ICAgIHZhciBLID0gW107XG5cblx0ICAgIC8vIENvbXB1dGUgY29uc3RhbnRzXG5cdCAgICAoZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGZ1bmN0aW9uIGlzUHJpbWUobikge1xuXHQgICAgICAgICAgICB2YXIgc3FydE4gPSBNYXRoLnNxcnQobik7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGZhY3RvciA9IDI7IGZhY3RvciA8PSBzcXJ0TjsgZmFjdG9yKyspIHtcblx0ICAgICAgICAgICAgICAgIGlmICghKG4gJSBmYWN0b3IpKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgcmV0dXJuIHRydWU7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgZnVuY3Rpb24gZ2V0RnJhY3Rpb25hbEJpdHMobikge1xuXHQgICAgICAgICAgICByZXR1cm4gKChuIC0gKG4gfCAwKSkgKiAweDEwMDAwMDAwMCkgfCAwO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHZhciBuID0gMjtcblx0ICAgICAgICB2YXIgblByaW1lID0gMDtcblx0ICAgICAgICB3aGlsZSAoblByaW1lIDwgNjQpIHtcblx0ICAgICAgICAgICAgaWYgKGlzUHJpbWUobikpIHtcblx0ICAgICAgICAgICAgICAgIGlmIChuUHJpbWUgPCA4KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgSFtuUHJpbWVdID0gZ2V0RnJhY3Rpb25hbEJpdHMoTWF0aC5wb3cobiwgMSAvIDIpKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIEtbblByaW1lXSA9IGdldEZyYWN0aW9uYWxCaXRzKE1hdGgucG93KG4sIDEgLyAzKSk7XG5cblx0ICAgICAgICAgICAgICAgIG5QcmltZSsrO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgbisrO1xuXHQgICAgICAgIH1cblx0ICAgIH0oKSk7XG5cblx0ICAgIC8vIFJldXNhYmxlIG9iamVjdFxuXHQgICAgdmFyIFcgPSBbXTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBTSEEtMjU2IGhhc2ggYWxnb3JpdGhtLlxuXHQgICAgICovXG5cdCAgICB2YXIgU0hBMjU2ID0gQ19hbGdvLlNIQTI1NiA9IEhhc2hlci5leHRlbmQoe1xuXHQgICAgICAgIF9kb1Jlc2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2hhc2ggPSBuZXcgV29yZEFycmF5LmluaXQoSC5zbGljZSgwKSk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIF9kb1Byb2Nlc3NCbG9jazogZnVuY3Rpb24gKE0sIG9mZnNldCkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dFxuXHQgICAgICAgICAgICB2YXIgSCA9IHRoaXMuX2hhc2gud29yZHM7XG5cblx0ICAgICAgICAgICAgLy8gV29ya2luZyB2YXJpYWJsZXNcblx0ICAgICAgICAgICAgdmFyIGEgPSBIWzBdO1xuXHQgICAgICAgICAgICB2YXIgYiA9IEhbMV07XG5cdCAgICAgICAgICAgIHZhciBjID0gSFsyXTtcblx0ICAgICAgICAgICAgdmFyIGQgPSBIWzNdO1xuXHQgICAgICAgICAgICB2YXIgZSA9IEhbNF07XG5cdCAgICAgICAgICAgIHZhciBmID0gSFs1XTtcblx0ICAgICAgICAgICAgdmFyIGcgPSBIWzZdO1xuXHQgICAgICAgICAgICB2YXIgaCA9IEhbN107XG5cblx0ICAgICAgICAgICAgLy8gQ29tcHV0YXRpb25cblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA2NDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAoaSA8IDE2KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgV1tpXSA9IE1bb2Zmc2V0ICsgaV0gfCAwO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgZ2FtbWEweCA9IFdbaSAtIDE1XTtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgZ2FtbWEwICA9ICgoZ2FtbWEweCA8PCAyNSkgfCAoZ2FtbWEweCA+Pj4gNykpICBeXG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGdhbW1hMHggPDwgMTQpIHwgKGdhbW1hMHggPj4+IDE4KSkgXlxuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnYW1tYTB4ID4+PiAzKTtcblxuXHQgICAgICAgICAgICAgICAgICAgIHZhciBnYW1tYTF4ID0gV1tpIC0gMl07XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGdhbW1hMSAgPSAoKGdhbW1hMXggPDwgMTUpIHwgKGdhbW1hMXggPj4+IDE3KSkgXlxuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChnYW1tYTF4IDw8IDEzKSB8IChnYW1tYTF4ID4+PiAxOSkpIF5cblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ2FtbWExeCA+Pj4gMTApO1xuXG5cdCAgICAgICAgICAgICAgICAgICAgV1tpXSA9IGdhbW1hMCArIFdbaSAtIDddICsgZ2FtbWExICsgV1tpIC0gMTZdO1xuXHQgICAgICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgICAgICB2YXIgY2ggID0gKGUgJiBmKSBeICh+ZSAmIGcpO1xuXHQgICAgICAgICAgICAgICAgdmFyIG1haiA9IChhICYgYikgXiAoYSAmIGMpIF4gKGIgJiBjKTtcblxuXHQgICAgICAgICAgICAgICAgdmFyIHNpZ21hMCA9ICgoYSA8PCAzMCkgfCAoYSA+Pj4gMikpIF4gKChhIDw8IDE5KSB8IChhID4+PiAxMykpIF4gKChhIDw8IDEwKSB8IChhID4+PiAyMikpO1xuXHQgICAgICAgICAgICAgICAgdmFyIHNpZ21hMSA9ICgoZSA8PCAyNikgfCAoZSA+Pj4gNikpIF4gKChlIDw8IDIxKSB8IChlID4+PiAxMSkpIF4gKChlIDw8IDcpICB8IChlID4+PiAyNSkpO1xuXG5cdCAgICAgICAgICAgICAgICB2YXIgdDEgPSBoICsgc2lnbWExICsgY2ggKyBLW2ldICsgV1tpXTtcblx0ICAgICAgICAgICAgICAgIHZhciB0MiA9IHNpZ21hMCArIG1hajtcblxuXHQgICAgICAgICAgICAgICAgaCA9IGc7XG5cdCAgICAgICAgICAgICAgICBnID0gZjtcblx0ICAgICAgICAgICAgICAgIGYgPSBlO1xuXHQgICAgICAgICAgICAgICAgZSA9IChkICsgdDEpIHwgMDtcblx0ICAgICAgICAgICAgICAgIGQgPSBjO1xuXHQgICAgICAgICAgICAgICAgYyA9IGI7XG5cdCAgICAgICAgICAgICAgICBiID0gYTtcblx0ICAgICAgICAgICAgICAgIGEgPSAodDEgKyB0MikgfCAwO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gSW50ZXJtZWRpYXRlIGhhc2ggdmFsdWVcblx0ICAgICAgICAgICAgSFswXSA9IChIWzBdICsgYSkgfCAwO1xuXHQgICAgICAgICAgICBIWzFdID0gKEhbMV0gKyBiKSB8IDA7XG5cdCAgICAgICAgICAgIEhbMl0gPSAoSFsyXSArIGMpIHwgMDtcblx0ICAgICAgICAgICAgSFszXSA9IChIWzNdICsgZCkgfCAwO1xuXHQgICAgICAgICAgICBIWzRdID0gKEhbNF0gKyBlKSB8IDA7XG5cdCAgICAgICAgICAgIEhbNV0gPSAoSFs1XSArIGYpIHwgMDtcblx0ICAgICAgICAgICAgSFs2XSA9IChIWzZdICsgZykgfCAwO1xuXHQgICAgICAgICAgICBIWzddID0gKEhbN10gKyBoKSB8IDA7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIF9kb0ZpbmFsaXplOiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIgZGF0YSA9IHRoaXMuX2RhdGE7XG5cdCAgICAgICAgICAgIHZhciBkYXRhV29yZHMgPSBkYXRhLndvcmRzO1xuXG5cdCAgICAgICAgICAgIHZhciBuQml0c1RvdGFsID0gdGhpcy5fbkRhdGFCeXRlcyAqIDg7XG5cdCAgICAgICAgICAgIHZhciBuQml0c0xlZnQgPSBkYXRhLnNpZ0J5dGVzICogODtcblxuXHQgICAgICAgICAgICAvLyBBZGQgcGFkZGluZ1xuXHQgICAgICAgICAgICBkYXRhV29yZHNbbkJpdHNMZWZ0ID4+PiA1XSB8PSAweDgwIDw8ICgyNCAtIG5CaXRzTGVmdCAlIDMyKTtcblx0ICAgICAgICAgICAgZGF0YVdvcmRzWygoKG5CaXRzTGVmdCArIDY0KSA+Pj4gOSkgPDwgNCkgKyAxNF0gPSBNYXRoLmZsb29yKG5CaXRzVG90YWwgLyAweDEwMDAwMDAwMCk7XG5cdCAgICAgICAgICAgIGRhdGFXb3Jkc1soKChuQml0c0xlZnQgKyA2NCkgPj4+IDkpIDw8IDQpICsgMTVdID0gbkJpdHNUb3RhbDtcblx0ICAgICAgICAgICAgZGF0YS5zaWdCeXRlcyA9IGRhdGFXb3Jkcy5sZW5ndGggKiA0O1xuXG5cdCAgICAgICAgICAgIC8vIEhhc2ggZmluYWwgYmxvY2tzXG5cdCAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3MoKTtcblxuXHQgICAgICAgICAgICAvLyBSZXR1cm4gZmluYWwgY29tcHV0ZWQgaGFzaFxuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5faGFzaDtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgY2xvbmU6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIGNsb25lID0gSGFzaGVyLmNsb25lLmNhbGwodGhpcyk7XG5cdCAgICAgICAgICAgIGNsb25lLl9oYXNoID0gdGhpcy5faGFzaC5jbG9uZSgpO1xuXG5cdCAgICAgICAgICAgIHJldHVybiBjbG9uZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBTaG9ydGN1dCBmdW5jdGlvbiB0byB0aGUgaGFzaGVyJ3Mgb2JqZWN0IGludGVyZmFjZS5cblx0ICAgICAqXG5cdCAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gaGFzaC5cblx0ICAgICAqXG5cdCAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSBoYXNoLlxuXHQgICAgICpcblx0ICAgICAqIEBzdGF0aWNcblx0ICAgICAqXG5cdCAgICAgKiBAZXhhbXBsZVxuXHQgICAgICpcblx0ICAgICAqICAgICB2YXIgaGFzaCA9IENyeXB0b0pTLlNIQTI1NignbWVzc2FnZScpO1xuXHQgICAgICogICAgIHZhciBoYXNoID0gQ3J5cHRvSlMuU0hBMjU2KHdvcmRBcnJheSk7XG5cdCAgICAgKi9cblx0ICAgIEMuU0hBMjU2ID0gSGFzaGVyLl9jcmVhdGVIZWxwZXIoU0hBMjU2KTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBTaG9ydGN1dCBmdW5jdGlvbiB0byB0aGUgSE1BQydzIG9iamVjdCBpbnRlcmZhY2UuXG5cdCAgICAgKlxuXHQgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBtZXNzYWdlIFRoZSBtZXNzYWdlIHRvIGhhc2guXG5cdCAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IGtleSBUaGUgc2VjcmV0IGtleS5cblx0ICAgICAqXG5cdCAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSBITUFDLlxuXHQgICAgICpcblx0ICAgICAqIEBzdGF0aWNcblx0ICAgICAqXG5cdCAgICAgKiBAZXhhbXBsZVxuXHQgICAgICpcblx0ICAgICAqICAgICB2YXIgaG1hYyA9IENyeXB0b0pTLkhtYWNTSEEyNTYobWVzc2FnZSwga2V5KTtcblx0ICAgICAqL1xuXHQgICAgQy5IbWFjU0hBMjU2ID0gSGFzaGVyLl9jcmVhdGVIbWFjSGVscGVyKFNIQTI1Nik7XG5cdH0oTWF0aCkpO1xuXG5cblx0KGZ1bmN0aW9uICgpIHtcblx0ICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgdmFyIEMgPSBDcnlwdG9KUztcblx0ICAgIHZhciBDX2xpYiA9IEMubGliO1xuXHQgICAgdmFyIFdvcmRBcnJheSA9IENfbGliLldvcmRBcnJheTtcblx0ICAgIHZhciBDX2VuYyA9IEMuZW5jO1xuXG5cdCAgICAvKipcblx0ICAgICAqIFVURi0xNiBCRSBlbmNvZGluZyBzdHJhdGVneS5cblx0ICAgICAqL1xuXHQgICAgdmFyIFV0ZjE2QkUgPSBDX2VuYy5VdGYxNiA9IENfZW5jLlV0ZjE2QkUgPSB7XG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29udmVydHMgYSB3b3JkIGFycmF5IHRvIGEgVVRGLTE2IEJFIHN0cmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7V29yZEFycmF5fSB3b3JkQXJyYXkgVGhlIHdvcmQgYXJyYXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBVVEYtMTYgQkUgc3RyaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgdXRmMTZTdHJpbmcgPSBDcnlwdG9KUy5lbmMuVXRmMTYuc3RyaW5naWZ5KHdvcmRBcnJheSk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgc3RyaW5naWZ5OiBmdW5jdGlvbiAod29yZEFycmF5KSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIgd29yZHMgPSB3b3JkQXJyYXkud29yZHM7XG5cdCAgICAgICAgICAgIHZhciBzaWdCeXRlcyA9IHdvcmRBcnJheS5zaWdCeXRlcztcblxuXHQgICAgICAgICAgICAvLyBDb252ZXJ0XG5cdCAgICAgICAgICAgIHZhciB1dGYxNkNoYXJzID0gW107XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2lnQnl0ZXM7IGkgKz0gMikge1xuXHQgICAgICAgICAgICAgICAgdmFyIGNvZGVQb2ludCA9ICh3b3Jkc1tpID4+PiAyXSA+Pj4gKDE2IC0gKGkgJSA0KSAqIDgpKSAmIDB4ZmZmZjtcblx0ICAgICAgICAgICAgICAgIHV0ZjE2Q2hhcnMucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGVQb2ludCkpO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgcmV0dXJuIHV0ZjE2Q2hhcnMuam9pbignJyk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENvbnZlcnRzIGEgVVRGLTE2IEJFIHN0cmluZyB0byBhIHdvcmQgYXJyYXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXRmMTZTdHIgVGhlIFVURi0xNiBCRSBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgd29yZEFycmF5ID0gQ3J5cHRvSlMuZW5jLlV0ZjE2LnBhcnNlKHV0ZjE2U3RyaW5nKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBwYXJzZTogZnVuY3Rpb24gKHV0ZjE2U3RyKSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0XG5cdCAgICAgICAgICAgIHZhciB1dGYxNlN0ckxlbmd0aCA9IHV0ZjE2U3RyLmxlbmd0aDtcblxuXHQgICAgICAgICAgICAvLyBDb252ZXJ0XG5cdCAgICAgICAgICAgIHZhciB3b3JkcyA9IFtdO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHV0ZjE2U3RyTGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHdvcmRzW2kgPj4+IDFdIHw9IHV0ZjE2U3RyLmNoYXJDb2RlQXQoaSkgPDwgKDE2IC0gKGkgJSAyKSAqIDE2KTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIHJldHVybiBXb3JkQXJyYXkuY3JlYXRlKHdvcmRzLCB1dGYxNlN0ckxlbmd0aCAqIDIpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cblx0ICAgIC8qKlxuXHQgICAgICogVVRGLTE2IExFIGVuY29kaW5nIHN0cmF0ZWd5LlxuXHQgICAgICovXG5cdCAgICBDX2VuYy5VdGYxNkxFID0ge1xuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENvbnZlcnRzIGEgd29yZCBhcnJheSB0byBhIFVURi0xNiBMRSBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheX0gd29yZEFycmF5IFRoZSB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7c3RyaW5nfSBUaGUgVVRGLTE2IExFIHN0cmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBzdGF0aWNcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIHV0ZjE2U3RyID0gQ3J5cHRvSlMuZW5jLlV0ZjE2TEUuc3RyaW5naWZ5KHdvcmRBcnJheSk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgc3RyaW5naWZ5OiBmdW5jdGlvbiAod29yZEFycmF5KSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIgd29yZHMgPSB3b3JkQXJyYXkud29yZHM7XG5cdCAgICAgICAgICAgIHZhciBzaWdCeXRlcyA9IHdvcmRBcnJheS5zaWdCeXRlcztcblxuXHQgICAgICAgICAgICAvLyBDb252ZXJ0XG5cdCAgICAgICAgICAgIHZhciB1dGYxNkNoYXJzID0gW107XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2lnQnl0ZXM7IGkgKz0gMikge1xuXHQgICAgICAgICAgICAgICAgdmFyIGNvZGVQb2ludCA9IHN3YXBFbmRpYW4oKHdvcmRzW2kgPj4+IDJdID4+PiAoMTYgLSAoaSAlIDQpICogOCkpICYgMHhmZmZmKTtcblx0ICAgICAgICAgICAgICAgIHV0ZjE2Q2hhcnMucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGVQb2ludCkpO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgcmV0dXJuIHV0ZjE2Q2hhcnMuam9pbignJyk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENvbnZlcnRzIGEgVVRGLTE2IExFIHN0cmluZyB0byBhIHdvcmQgYXJyYXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXRmMTZTdHIgVGhlIFVURi0xNiBMRSBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgd29yZEFycmF5ID0gQ3J5cHRvSlMuZW5jLlV0ZjE2TEUucGFyc2UodXRmMTZTdHIpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHBhcnNlOiBmdW5jdGlvbiAodXRmMTZTdHIpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRcblx0ICAgICAgICAgICAgdmFyIHV0ZjE2U3RyTGVuZ3RoID0gdXRmMTZTdHIubGVuZ3RoO1xuXG5cdCAgICAgICAgICAgIC8vIENvbnZlcnRcblx0ICAgICAgICAgICAgdmFyIHdvcmRzID0gW107XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdXRmMTZTdHJMZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgd29yZHNbaSA+Pj4gMV0gfD0gc3dhcEVuZGlhbih1dGYxNlN0ci5jaGFyQ29kZUF0KGkpIDw8ICgxNiAtIChpICUgMikgKiAxNikpO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgcmV0dXJuIFdvcmRBcnJheS5jcmVhdGUod29yZHMsIHV0ZjE2U3RyTGVuZ3RoICogMik7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblxuXHQgICAgZnVuY3Rpb24gc3dhcEVuZGlhbih3b3JkKSB7XG5cdCAgICAgICAgcmV0dXJuICgod29yZCA8PCA4KSAmIDB4ZmYwMGZmMDApIHwgKCh3b3JkID4+PiA4KSAmIDB4MDBmZjAwZmYpO1xuXHQgICAgfVxuXHR9KCkpO1xuXG5cblx0KGZ1bmN0aW9uICgpIHtcblx0ICAgIC8vIENoZWNrIGlmIHR5cGVkIGFycmF5cyBhcmUgc3VwcG9ydGVkXG5cdCAgICBpZiAodHlwZW9mIEFycmF5QnVmZmVyICE9ICdmdW5jdGlvbicpIHtcblx0ICAgICAgICByZXR1cm47XG5cdCAgICB9XG5cblx0ICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgdmFyIEMgPSBDcnlwdG9KUztcblx0ICAgIHZhciBDX2xpYiA9IEMubGliO1xuXHQgICAgdmFyIFdvcmRBcnJheSA9IENfbGliLldvcmRBcnJheTtcblxuXHQgICAgLy8gUmVmZXJlbmNlIG9yaWdpbmFsIGluaXRcblx0ICAgIHZhciBzdXBlckluaXQgPSBXb3JkQXJyYXkuaW5pdDtcblxuXHQgICAgLy8gQXVnbWVudCBXb3JkQXJyYXkuaW5pdCB0byBoYW5kbGUgdHlwZWQgYXJyYXlzXG5cdCAgICB2YXIgc3ViSW5pdCA9IFdvcmRBcnJheS5pbml0ID0gZnVuY3Rpb24gKHR5cGVkQXJyYXkpIHtcblx0ICAgICAgICAvLyBDb252ZXJ0IGJ1ZmZlcnMgdG8gdWludDhcblx0ICAgICAgICBpZiAodHlwZWRBcnJheSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XG5cdCAgICAgICAgICAgIHR5cGVkQXJyYXkgPSBuZXcgVWludDhBcnJheSh0eXBlZEFycmF5KTtcblx0ICAgICAgICB9XG5cblx0ICAgICAgICAvLyBDb252ZXJ0IG90aGVyIGFycmF5IHZpZXdzIHRvIHVpbnQ4XG5cdCAgICAgICAgaWYgKFxuXHQgICAgICAgICAgICB0eXBlZEFycmF5IGluc3RhbmNlb2YgSW50OEFycmF5IHx8XG5cdCAgICAgICAgICAgICh0eXBlb2YgVWludDhDbGFtcGVkQXJyYXkgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZWRBcnJheSBpbnN0YW5jZW9mIFVpbnQ4Q2xhbXBlZEFycmF5KSB8fFxuXHQgICAgICAgICAgICB0eXBlZEFycmF5IGluc3RhbmNlb2YgSW50MTZBcnJheSB8fFxuXHQgICAgICAgICAgICB0eXBlZEFycmF5IGluc3RhbmNlb2YgVWludDE2QXJyYXkgfHxcblx0ICAgICAgICAgICAgdHlwZWRBcnJheSBpbnN0YW5jZW9mIEludDMyQXJyYXkgfHxcblx0ICAgICAgICAgICAgdHlwZWRBcnJheSBpbnN0YW5jZW9mIFVpbnQzMkFycmF5IHx8XG5cdCAgICAgICAgICAgIHR5cGVkQXJyYXkgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkgfHxcblx0ICAgICAgICAgICAgdHlwZWRBcnJheSBpbnN0YW5jZW9mIEZsb2F0NjRBcnJheVxuXHQgICAgICAgICkge1xuXHQgICAgICAgICAgICB0eXBlZEFycmF5ID0gbmV3IFVpbnQ4QXJyYXkodHlwZWRBcnJheS5idWZmZXIsIHR5cGVkQXJyYXkuYnl0ZU9mZnNldCwgdHlwZWRBcnJheS5ieXRlTGVuZ3RoKTtcblx0ICAgICAgICB9XG5cblx0ICAgICAgICAvLyBIYW5kbGUgVWludDhBcnJheVxuXHQgICAgICAgIGlmICh0eXBlZEFycmF5IGluc3RhbmNlb2YgVWludDhBcnJheSkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dFxuXHQgICAgICAgICAgICB2YXIgdHlwZWRBcnJheUJ5dGVMZW5ndGggPSB0eXBlZEFycmF5LmJ5dGVMZW5ndGg7XG5cblx0ICAgICAgICAgICAgLy8gRXh0cmFjdCBieXRlc1xuXHQgICAgICAgICAgICB2YXIgd29yZHMgPSBbXTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0eXBlZEFycmF5Qnl0ZUxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICB3b3Jkc1tpID4+PiAyXSB8PSB0eXBlZEFycmF5W2ldIDw8ICgyNCAtIChpICUgNCkgKiA4KTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIEluaXRpYWxpemUgdGhpcyB3b3JkIGFycmF5XG5cdCAgICAgICAgICAgIHN1cGVySW5pdC5jYWxsKHRoaXMsIHdvcmRzLCB0eXBlZEFycmF5Qnl0ZUxlbmd0aCk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgLy8gRWxzZSBjYWxsIG5vcm1hbCBpbml0XG5cdCAgICAgICAgICAgIHN1cGVySW5pdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cblx0ICAgIHN1YkluaXQucHJvdG90eXBlID0gV29yZEFycmF5O1xuXHR9KCkpO1xuXG5cblx0LyoqIEBwcmVzZXJ2ZVxuXHQoYykgMjAxMiBieSBDw6lkcmljIE1lc25pbC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuXHRSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG5cblx0ICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuXHQgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cblx0VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuXHQqL1xuXG5cdChmdW5jdGlvbiAoTWF0aCkge1xuXHQgICAgLy8gU2hvcnRjdXRzXG5cdCAgICB2YXIgQyA9IENyeXB0b0pTO1xuXHQgICAgdmFyIENfbGliID0gQy5saWI7XG5cdCAgICB2YXIgV29yZEFycmF5ID0gQ19saWIuV29yZEFycmF5O1xuXHQgICAgdmFyIEhhc2hlciA9IENfbGliLkhhc2hlcjtcblx0ICAgIHZhciBDX2FsZ28gPSBDLmFsZ287XG5cblx0ICAgIC8vIENvbnN0YW50cyB0YWJsZVxuXHQgICAgdmFyIF96bCA9IFdvcmRBcnJheS5jcmVhdGUoW1xuXHQgICAgICAgIDAsICAxLCAgMiwgIDMsICA0LCAgNSwgIDYsICA3LCAgOCwgIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsXG5cdCAgICAgICAgNywgIDQsIDEzLCAgMSwgMTAsICA2LCAxNSwgIDMsIDEyLCAgMCwgIDksICA1LCAgMiwgMTQsIDExLCAgOCxcblx0ICAgICAgICAzLCAxMCwgMTQsICA0LCAgOSwgMTUsICA4LCAgMSwgIDIsICA3LCAgMCwgIDYsIDEzLCAxMSwgIDUsIDEyLFxuXHQgICAgICAgIDEsICA5LCAxMSwgMTAsICAwLCAgOCwgMTIsICA0LCAxMywgIDMsICA3LCAxNSwgMTQsICA1LCAgNiwgIDIsXG5cdCAgICAgICAgNCwgIDAsICA1LCAgOSwgIDcsIDEyLCAgMiwgMTAsIDE0LCAgMSwgIDMsICA4LCAxMSwgIDYsIDE1LCAxM10pO1xuXHQgICAgdmFyIF96ciA9IFdvcmRBcnJheS5jcmVhdGUoW1xuXHQgICAgICAgIDUsIDE0LCAgNywgIDAsICA5LCAgMiwgMTEsICA0LCAxMywgIDYsIDE1LCAgOCwgIDEsIDEwLCAgMywgMTIsXG5cdCAgICAgICAgNiwgMTEsICAzLCAgNywgIDAsIDEzLCAgNSwgMTAsIDE0LCAxNSwgIDgsIDEyLCAgNCwgIDksICAxLCAgMixcblx0ICAgICAgICAxNSwgIDUsICAxLCAgMywgIDcsIDE0LCAgNiwgIDksIDExLCAgOCwgMTIsICAyLCAxMCwgIDAsICA0LCAxMyxcblx0ICAgICAgICA4LCAgNiwgIDQsICAxLCAgMywgMTEsIDE1LCAgMCwgIDUsIDEyLCAgMiwgMTMsICA5LCAgNywgMTAsIDE0LFxuXHQgICAgICAgIDEyLCAxNSwgMTAsICA0LCAgMSwgIDUsICA4LCAgNywgIDYsICAyLCAxMywgMTQsICAwLCAgMywgIDksIDExXSk7XG5cdCAgICB2YXIgX3NsID0gV29yZEFycmF5LmNyZWF0ZShbXG5cdCAgICAgICAgIDExLCAxNCwgMTUsIDEyLCAgNSwgIDgsICA3LCAgOSwgMTEsIDEzLCAxNCwgMTUsICA2LCAgNywgIDksICA4LFxuXHQgICAgICAgIDcsIDYsICAgOCwgMTMsIDExLCAgOSwgIDcsIDE1LCAgNywgMTIsIDE1LCAgOSwgMTEsICA3LCAxMywgMTIsXG5cdCAgICAgICAgMTEsIDEzLCAgNiwgIDcsIDE0LCAgOSwgMTMsIDE1LCAxNCwgIDgsIDEzLCAgNiwgIDUsIDEyLCAgNywgIDUsXG5cdCAgICAgICAgICAxMSwgMTIsIDE0LCAxNSwgMTQsIDE1LCAgOSwgIDgsICA5LCAxNCwgIDUsICA2LCAgOCwgIDYsICA1LCAxMixcblx0ICAgICAgICA5LCAxNSwgIDUsIDExLCAgNiwgIDgsIDEzLCAxMiwgIDUsIDEyLCAxMywgMTQsIDExLCAgOCwgIDUsICA2IF0pO1xuXHQgICAgdmFyIF9zciA9IFdvcmRBcnJheS5jcmVhdGUoW1xuXHQgICAgICAgIDgsICA5LCAgOSwgMTEsIDEzLCAxNSwgMTUsICA1LCAgNywgIDcsICA4LCAxMSwgMTQsIDE0LCAxMiwgIDYsXG5cdCAgICAgICAgOSwgMTMsIDE1LCAgNywgMTIsICA4LCAgOSwgMTEsICA3LCAgNywgMTIsICA3LCAgNiwgMTUsIDEzLCAxMSxcblx0ICAgICAgICA5LCAgNywgMTUsIDExLCAgOCwgIDYsICA2LCAxNCwgMTIsIDEzLCAgNSwgMTQsIDEzLCAxMywgIDcsICA1LFxuXHQgICAgICAgIDE1LCAgNSwgIDgsIDExLCAxNCwgMTQsICA2LCAxNCwgIDYsICA5LCAxMiwgIDksIDEyLCAgNSwgMTUsICA4LFxuXHQgICAgICAgIDgsICA1LCAxMiwgIDksIDEyLCAgNSwgMTQsICA2LCAgOCwgMTMsICA2LCAgNSwgMTUsIDEzLCAxMSwgMTEgXSk7XG5cblx0ICAgIHZhciBfaGwgPSAgV29yZEFycmF5LmNyZWF0ZShbIDB4MDAwMDAwMDAsIDB4NUE4Mjc5OTksIDB4NkVEOUVCQTEsIDB4OEYxQkJDREMsIDB4QTk1M0ZENEVdKTtcblx0ICAgIHZhciBfaHIgPSAgV29yZEFycmF5LmNyZWF0ZShbIDB4NTBBMjhCRTYsIDB4NUM0REQxMjQsIDB4NkQ3MDNFRjMsIDB4N0E2RDc2RTksIDB4MDAwMDAwMDBdKTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBSSVBFTUQxNjAgaGFzaCBhbGdvcml0aG0uXG5cdCAgICAgKi9cblx0ICAgIHZhciBSSVBFTUQxNjAgPSBDX2FsZ28uUklQRU1EMTYwID0gSGFzaGVyLmV4dGVuZCh7XG5cdCAgICAgICAgX2RvUmVzZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdGhpcy5faGFzaCAgPSBXb3JkQXJyYXkuY3JlYXRlKFsweDY3NDUyMzAxLCAweEVGQ0RBQjg5LCAweDk4QkFEQ0ZFLCAweDEwMzI1NDc2LCAweEMzRDJFMUYwXSk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIF9kb1Byb2Nlc3NCbG9jazogZnVuY3Rpb24gKE0sIG9mZnNldCkge1xuXG5cdCAgICAgICAgICAgIC8vIFN3YXAgZW5kaWFuXG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTY7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0X2kgPSBvZmZzZXQgKyBpO1xuXHQgICAgICAgICAgICAgICAgdmFyIE1fb2Zmc2V0X2kgPSBNW29mZnNldF9pXTtcblxuXHQgICAgICAgICAgICAgICAgLy8gU3dhcFxuXHQgICAgICAgICAgICAgICAgTVtvZmZzZXRfaV0gPSAoXG5cdCAgICAgICAgICAgICAgICAgICAgKCgoTV9vZmZzZXRfaSA8PCA4KSAgfCAoTV9vZmZzZXRfaSA+Pj4gMjQpKSAmIDB4MDBmZjAwZmYpIHxcblx0ICAgICAgICAgICAgICAgICAgICAoKChNX29mZnNldF9pIDw8IDI0KSB8IChNX29mZnNldF9pID4+PiA4KSkgICYgMHhmZjAwZmYwMClcblx0ICAgICAgICAgICAgICAgICk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRcblx0ICAgICAgICAgICAgdmFyIEggID0gdGhpcy5faGFzaC53b3Jkcztcblx0ICAgICAgICAgICAgdmFyIGhsID0gX2hsLndvcmRzO1xuXHQgICAgICAgICAgICB2YXIgaHIgPSBfaHIud29yZHM7XG5cdCAgICAgICAgICAgIHZhciB6bCA9IF96bC53b3Jkcztcblx0ICAgICAgICAgICAgdmFyIHpyID0gX3pyLndvcmRzO1xuXHQgICAgICAgICAgICB2YXIgc2wgPSBfc2wud29yZHM7XG5cdCAgICAgICAgICAgIHZhciBzciA9IF9zci53b3JkcztcblxuXHQgICAgICAgICAgICAvLyBXb3JraW5nIHZhcmlhYmxlc1xuXHQgICAgICAgICAgICB2YXIgYWwsIGJsLCBjbCwgZGwsIGVsO1xuXHQgICAgICAgICAgICB2YXIgYXIsIGJyLCBjciwgZHIsIGVyO1xuXG5cdCAgICAgICAgICAgIGFyID0gYWwgPSBIWzBdO1xuXHQgICAgICAgICAgICBiciA9IGJsID0gSFsxXTtcblx0ICAgICAgICAgICAgY3IgPSBjbCA9IEhbMl07XG5cdCAgICAgICAgICAgIGRyID0gZGwgPSBIWzNdO1xuXHQgICAgICAgICAgICBlciA9IGVsID0gSFs0XTtcblx0ICAgICAgICAgICAgLy8gQ29tcHV0YXRpb25cblx0ICAgICAgICAgICAgdmFyIHQ7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgODA7IGkgKz0gMSkge1xuXHQgICAgICAgICAgICAgICAgdCA9IChhbCArICBNW29mZnNldCt6bFtpXV0pfDA7XG5cdCAgICAgICAgICAgICAgICBpZiAoaTwxNil7XG5cdFx0ICAgICAgICAgICAgdCArPSAgZjEoYmwsY2wsZGwpICsgaGxbMF07XG5cdCAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGk8MzIpIHtcblx0XHQgICAgICAgICAgICB0ICs9ICBmMihibCxjbCxkbCkgKyBobFsxXTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaTw0OCkge1xuXHRcdCAgICAgICAgICAgIHQgKz0gIGYzKGJsLGNsLGRsKSArIGhsWzJdO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpPDY0KSB7XG5cdFx0ICAgICAgICAgICAgdCArPSAgZjQoYmwsY2wsZGwpICsgaGxbM107XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Ugey8vIGlmIChpPDgwKSB7XG5cdFx0ICAgICAgICAgICAgdCArPSAgZjUoYmwsY2wsZGwpICsgaGxbNF07XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICB0ID0gdHwwO1xuXHQgICAgICAgICAgICAgICAgdCA9ICByb3RsKHQsc2xbaV0pO1xuXHQgICAgICAgICAgICAgICAgdCA9ICh0K2VsKXwwO1xuXHQgICAgICAgICAgICAgICAgYWwgPSBlbDtcblx0ICAgICAgICAgICAgICAgIGVsID0gZGw7XG5cdCAgICAgICAgICAgICAgICBkbCA9IHJvdGwoY2wsIDEwKTtcblx0ICAgICAgICAgICAgICAgIGNsID0gYmw7XG5cdCAgICAgICAgICAgICAgICBibCA9IHQ7XG5cblx0ICAgICAgICAgICAgICAgIHQgPSAoYXIgKyBNW29mZnNldCt6cltpXV0pfDA7XG5cdCAgICAgICAgICAgICAgICBpZiAoaTwxNil7XG5cdFx0ICAgICAgICAgICAgdCArPSAgZjUoYnIsY3IsZHIpICsgaHJbMF07XG5cdCAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGk8MzIpIHtcblx0XHQgICAgICAgICAgICB0ICs9ICBmNChicixjcixkcikgKyBoclsxXTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaTw0OCkge1xuXHRcdCAgICAgICAgICAgIHQgKz0gIGYzKGJyLGNyLGRyKSArIGhyWzJdO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpPDY0KSB7XG5cdFx0ICAgICAgICAgICAgdCArPSAgZjIoYnIsY3IsZHIpICsgaHJbM107XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Ugey8vIGlmIChpPDgwKSB7XG5cdFx0ICAgICAgICAgICAgdCArPSAgZjEoYnIsY3IsZHIpICsgaHJbNF07XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICB0ID0gdHwwO1xuXHQgICAgICAgICAgICAgICAgdCA9ICByb3RsKHQsc3JbaV0pIDtcblx0ICAgICAgICAgICAgICAgIHQgPSAodCtlcil8MDtcblx0ICAgICAgICAgICAgICAgIGFyID0gZXI7XG5cdCAgICAgICAgICAgICAgICBlciA9IGRyO1xuXHQgICAgICAgICAgICAgICAgZHIgPSByb3RsKGNyLCAxMCk7XG5cdCAgICAgICAgICAgICAgICBjciA9IGJyO1xuXHQgICAgICAgICAgICAgICAgYnIgPSB0O1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIC8vIEludGVybWVkaWF0ZSBoYXNoIHZhbHVlXG5cdCAgICAgICAgICAgIHQgICAgPSAoSFsxXSArIGNsICsgZHIpfDA7XG5cdCAgICAgICAgICAgIEhbMV0gPSAoSFsyXSArIGRsICsgZXIpfDA7XG5cdCAgICAgICAgICAgIEhbMl0gPSAoSFszXSArIGVsICsgYXIpfDA7XG5cdCAgICAgICAgICAgIEhbM10gPSAoSFs0XSArIGFsICsgYnIpfDA7XG5cdCAgICAgICAgICAgIEhbNF0gPSAoSFswXSArIGJsICsgY3IpfDA7XG5cdCAgICAgICAgICAgIEhbMF0gPSAgdDtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgX2RvRmluYWxpemU6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBkYXRhID0gdGhpcy5fZGF0YTtcblx0ICAgICAgICAgICAgdmFyIGRhdGFXb3JkcyA9IGRhdGEud29yZHM7XG5cblx0ICAgICAgICAgICAgdmFyIG5CaXRzVG90YWwgPSB0aGlzLl9uRGF0YUJ5dGVzICogODtcblx0ICAgICAgICAgICAgdmFyIG5CaXRzTGVmdCA9IGRhdGEuc2lnQnl0ZXMgKiA4O1xuXG5cdCAgICAgICAgICAgIC8vIEFkZCBwYWRkaW5nXG5cdCAgICAgICAgICAgIGRhdGFXb3Jkc1tuQml0c0xlZnQgPj4+IDVdIHw9IDB4ODAgPDwgKDI0IC0gbkJpdHNMZWZ0ICUgMzIpO1xuXHQgICAgICAgICAgICBkYXRhV29yZHNbKCgobkJpdHNMZWZ0ICsgNjQpID4+PiA5KSA8PCA0KSArIDE0XSA9IChcblx0ICAgICAgICAgICAgICAgICgoKG5CaXRzVG90YWwgPDwgOCkgIHwgKG5CaXRzVG90YWwgPj4+IDI0KSkgJiAweDAwZmYwMGZmKSB8XG5cdCAgICAgICAgICAgICAgICAoKChuQml0c1RvdGFsIDw8IDI0KSB8IChuQml0c1RvdGFsID4+PiA4KSkgICYgMHhmZjAwZmYwMClcblx0ICAgICAgICAgICAgKTtcblx0ICAgICAgICAgICAgZGF0YS5zaWdCeXRlcyA9IChkYXRhV29yZHMubGVuZ3RoICsgMSkgKiA0O1xuXG5cdCAgICAgICAgICAgIC8vIEhhc2ggZmluYWwgYmxvY2tzXG5cdCAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3MoKTtcblxuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIGhhc2ggPSB0aGlzLl9oYXNoO1xuXHQgICAgICAgICAgICB2YXIgSCA9IGhhc2gud29yZHM7XG5cblx0ICAgICAgICAgICAgLy8gU3dhcCBlbmRpYW5cblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA1OyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIC8vIFNob3J0Y3V0XG5cdCAgICAgICAgICAgICAgICB2YXIgSF9pID0gSFtpXTtcblxuXHQgICAgICAgICAgICAgICAgLy8gU3dhcFxuXHQgICAgICAgICAgICAgICAgSFtpXSA9ICgoKEhfaSA8PCA4KSAgfCAoSF9pID4+PiAyNCkpICYgMHgwMGZmMDBmZikgfFxuXHQgICAgICAgICAgICAgICAgICAgICAgICgoKEhfaSA8PCAyNCkgfCAoSF9pID4+PiA4KSkgICYgMHhmZjAwZmYwMCk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBSZXR1cm4gZmluYWwgY29tcHV0ZWQgaGFzaFxuXHQgICAgICAgICAgICByZXR1cm4gaGFzaDtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgY2xvbmU6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIGNsb25lID0gSGFzaGVyLmNsb25lLmNhbGwodGhpcyk7XG5cdCAgICAgICAgICAgIGNsb25lLl9oYXNoID0gdGhpcy5faGFzaC5jbG9uZSgpO1xuXG5cdCAgICAgICAgICAgIHJldHVybiBjbG9uZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblxuXG5cdCAgICBmdW5jdGlvbiBmMSh4LCB5LCB6KSB7XG5cdCAgICAgICAgcmV0dXJuICgoeCkgXiAoeSkgXiAoeikpO1xuXG5cdCAgICB9XG5cblx0ICAgIGZ1bmN0aW9uIGYyKHgsIHksIHopIHtcblx0ICAgICAgICByZXR1cm4gKCgoeCkmKHkpKSB8ICgofngpJih6KSkpO1xuXHQgICAgfVxuXG5cdCAgICBmdW5jdGlvbiBmMyh4LCB5LCB6KSB7XG5cdCAgICAgICAgcmV0dXJuICgoKHgpIHwgKH4oeSkpKSBeICh6KSk7XG5cdCAgICB9XG5cblx0ICAgIGZ1bmN0aW9uIGY0KHgsIHksIHopIHtcblx0ICAgICAgICByZXR1cm4gKCgoeCkgJiAoeikpIHwgKCh5KSYofih6KSkpKTtcblx0ICAgIH1cblxuXHQgICAgZnVuY3Rpb24gZjUoeCwgeSwgeikge1xuXHQgICAgICAgIHJldHVybiAoKHgpIF4gKCh5KSB8KH4oeikpKSk7XG5cblx0ICAgIH1cblxuXHQgICAgZnVuY3Rpb24gcm90bCh4LG4pIHtcblx0ICAgICAgICByZXR1cm4gKHg8PG4pIHwgKHg+Pj4oMzItbikpO1xuXHQgICAgfVxuXG5cblx0ICAgIC8qKlxuXHQgICAgICogU2hvcnRjdXQgZnVuY3Rpb24gdG8gdGhlIGhhc2hlcidzIG9iamVjdCBpbnRlcmZhY2UuXG5cdCAgICAgKlxuXHQgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBtZXNzYWdlIFRoZSBtZXNzYWdlIHRvIGhhc2guXG5cdCAgICAgKlxuXHQgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgaGFzaC5cblx0ICAgICAqXG5cdCAgICAgKiBAc3RhdGljXG5cdCAgICAgKlxuXHQgICAgICogQGV4YW1wbGVcblx0ICAgICAqXG5cdCAgICAgKiAgICAgdmFyIGhhc2ggPSBDcnlwdG9KUy5SSVBFTUQxNjAoJ21lc3NhZ2UnKTtcblx0ICAgICAqICAgICB2YXIgaGFzaCA9IENyeXB0b0pTLlJJUEVNRDE2MCh3b3JkQXJyYXkpO1xuXHQgICAgICovXG5cdCAgICBDLlJJUEVNRDE2MCA9IEhhc2hlci5fY3JlYXRlSGVscGVyKFJJUEVNRDE2MCk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogU2hvcnRjdXQgZnVuY3Rpb24gdG8gdGhlIEhNQUMncyBvYmplY3QgaW50ZXJmYWNlLlxuXHQgICAgICpcblx0ICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gbWVzc2FnZSBUaGUgbWVzc2FnZSB0byBoYXNoLlxuXHQgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBrZXkgVGhlIHNlY3JldCBrZXkuXG5cdCAgICAgKlxuXHQgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgSE1BQy5cblx0ICAgICAqXG5cdCAgICAgKiBAc3RhdGljXG5cdCAgICAgKlxuXHQgICAgICogQGV4YW1wbGVcblx0ICAgICAqXG5cdCAgICAgKiAgICAgdmFyIGhtYWMgPSBDcnlwdG9KUy5IbWFjUklQRU1EMTYwKG1lc3NhZ2UsIGtleSk7XG5cdCAgICAgKi9cblx0ICAgIEMuSG1hY1JJUEVNRDE2MCA9IEhhc2hlci5fY3JlYXRlSG1hY0hlbHBlcihSSVBFTUQxNjApO1xuXHR9KE1hdGgpKTtcblxuXG5cdChmdW5jdGlvbiAoKSB7XG5cdCAgICAvLyBTaG9ydGN1dHNcblx0ICAgIHZhciBDID0gQ3J5cHRvSlM7XG5cdCAgICB2YXIgQ19saWIgPSBDLmxpYjtcblx0ICAgIHZhciBCYXNlID0gQ19saWIuQmFzZTtcblx0ICAgIHZhciBDX2VuYyA9IEMuZW5jO1xuXHQgICAgdmFyIFV0ZjggPSBDX2VuYy5VdGY4O1xuXHQgICAgdmFyIENfYWxnbyA9IEMuYWxnbztcblxuXHQgICAgLyoqXG5cdCAgICAgKiBITUFDIGFsZ29yaXRobS5cblx0ICAgICAqL1xuXHQgICAgdmFyIEhNQUMgPSBDX2FsZ28uSE1BQyA9IEJhc2UuZXh0ZW5kKHtcblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBJbml0aWFsaXplcyBhIG5ld2x5IGNyZWF0ZWQgSE1BQy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7SGFzaGVyfSBoYXNoZXIgVGhlIGhhc2ggYWxnb3JpdGhtIHRvIHVzZS5cblx0ICAgICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IGtleSBUaGUgc2VjcmV0IGtleS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIGhtYWNIYXNoZXIgPSBDcnlwdG9KUy5hbGdvLkhNQUMuY3JlYXRlKENyeXB0b0pTLmFsZ28uU0hBMjU2LCBrZXkpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGluaXQ6IGZ1bmN0aW9uIChoYXNoZXIsIGtleSkge1xuXHQgICAgICAgICAgICAvLyBJbml0IGhhc2hlclxuXHQgICAgICAgICAgICBoYXNoZXIgPSB0aGlzLl9oYXNoZXIgPSBuZXcgaGFzaGVyLmluaXQoKTtcblxuXHQgICAgICAgICAgICAvLyBDb252ZXJ0IHN0cmluZyB0byBXb3JkQXJyYXksIGVsc2UgYXNzdW1lIFdvcmRBcnJheSBhbHJlYWR5XG5cdCAgICAgICAgICAgIGlmICh0eXBlb2Yga2V5ID09ICdzdHJpbmcnKSB7XG5cdCAgICAgICAgICAgICAgICBrZXkgPSBVdGY4LnBhcnNlKGtleSk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIGhhc2hlckJsb2NrU2l6ZSA9IGhhc2hlci5ibG9ja1NpemU7XG5cdCAgICAgICAgICAgIHZhciBoYXNoZXJCbG9ja1NpemVCeXRlcyA9IGhhc2hlckJsb2NrU2l6ZSAqIDQ7XG5cblx0ICAgICAgICAgICAgLy8gQWxsb3cgYXJiaXRyYXJ5IGxlbmd0aCBrZXlzXG5cdCAgICAgICAgICAgIGlmIChrZXkuc2lnQnl0ZXMgPiBoYXNoZXJCbG9ja1NpemVCeXRlcykge1xuXHQgICAgICAgICAgICAgICAga2V5ID0gaGFzaGVyLmZpbmFsaXplKGtleSk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBDbGFtcCBleGNlc3MgYml0c1xuXHQgICAgICAgICAgICBrZXkuY2xhbXAoKTtcblxuXHQgICAgICAgICAgICAvLyBDbG9uZSBrZXkgZm9yIGlubmVyIGFuZCBvdXRlciBwYWRzXG5cdCAgICAgICAgICAgIHZhciBvS2V5ID0gdGhpcy5fb0tleSA9IGtleS5jbG9uZSgpO1xuXHQgICAgICAgICAgICB2YXIgaUtleSA9IHRoaXMuX2lLZXkgPSBrZXkuY2xvbmUoKTtcblxuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIG9LZXlXb3JkcyA9IG9LZXkud29yZHM7XG5cdCAgICAgICAgICAgIHZhciBpS2V5V29yZHMgPSBpS2V5LndvcmRzO1xuXG5cdCAgICAgICAgICAgIC8vIFhPUiBrZXlzIHdpdGggcGFkIGNvbnN0YW50c1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhhc2hlckJsb2NrU2l6ZTsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICBvS2V5V29yZHNbaV0gXj0gMHg1YzVjNWM1Yztcblx0ICAgICAgICAgICAgICAgIGlLZXlXb3Jkc1tpXSBePSAweDM2MzYzNjM2O1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIG9LZXkuc2lnQnl0ZXMgPSBpS2V5LnNpZ0J5dGVzID0gaGFzaGVyQmxvY2tTaXplQnl0ZXM7XG5cblx0ICAgICAgICAgICAgLy8gU2V0IGluaXRpYWwgdmFsdWVzXG5cdCAgICAgICAgICAgIHRoaXMucmVzZXQoKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogUmVzZXRzIHRoaXMgSE1BQyB0byBpdHMgaW5pdGlhbCBzdGF0ZS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgaG1hY0hhc2hlci5yZXNldCgpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHJlc2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0XG5cdCAgICAgICAgICAgIHZhciBoYXNoZXIgPSB0aGlzLl9oYXNoZXI7XG5cblx0ICAgICAgICAgICAgLy8gUmVzZXRcblx0ICAgICAgICAgICAgaGFzaGVyLnJlc2V0KCk7XG5cdCAgICAgICAgICAgIGhhc2hlci51cGRhdGUodGhpcy5faUtleSk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIFVwZGF0ZXMgdGhpcyBITUFDIHdpdGggYSBtZXNzYWdlLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBtZXNzYWdlVXBkYXRlIFRoZSBtZXNzYWdlIHRvIGFwcGVuZC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge0hNQUN9IFRoaXMgSE1BQyBpbnN0YW5jZS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgaG1hY0hhc2hlci51cGRhdGUoJ21lc3NhZ2UnKTtcblx0ICAgICAgICAgKiAgICAgaG1hY0hhc2hlci51cGRhdGUod29yZEFycmF5KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICB1cGRhdGU6IGZ1bmN0aW9uIChtZXNzYWdlVXBkYXRlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2hhc2hlci51cGRhdGUobWVzc2FnZVVwZGF0ZSk7XG5cblx0ICAgICAgICAgICAgLy8gQ2hhaW5hYmxlXG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBGaW5hbGl6ZXMgdGhlIEhNQUMgY29tcHV0YXRpb24uXG5cdCAgICAgICAgICogTm90ZSB0aGF0IHRoZSBmaW5hbGl6ZSBvcGVyYXRpb24gaXMgZWZmZWN0aXZlbHkgYSBkZXN0cnVjdGl2ZSwgcmVhZC1vbmNlIG9wZXJhdGlvbi5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gbWVzc2FnZVVwZGF0ZSAoT3B0aW9uYWwpIEEgZmluYWwgbWVzc2FnZSB1cGRhdGUuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSBITUFDLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgaG1hYyA9IGhtYWNIYXNoZXIuZmluYWxpemUoKTtcblx0ICAgICAgICAgKiAgICAgdmFyIGhtYWMgPSBobWFjSGFzaGVyLmZpbmFsaXplKCdtZXNzYWdlJyk7XG5cdCAgICAgICAgICogICAgIHZhciBobWFjID0gaG1hY0hhc2hlci5maW5hbGl6ZSh3b3JkQXJyYXkpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGZpbmFsaXplOiBmdW5jdGlvbiAobWVzc2FnZVVwZGF0ZSkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dFxuXHQgICAgICAgICAgICB2YXIgaGFzaGVyID0gdGhpcy5faGFzaGVyO1xuXG5cdCAgICAgICAgICAgIC8vIENvbXB1dGUgSE1BQ1xuXHQgICAgICAgICAgICB2YXIgaW5uZXJIYXNoID0gaGFzaGVyLmZpbmFsaXplKG1lc3NhZ2VVcGRhdGUpO1xuXHQgICAgICAgICAgICBoYXNoZXIucmVzZXQoKTtcblx0ICAgICAgICAgICAgdmFyIGhtYWMgPSBoYXNoZXIuZmluYWxpemUodGhpcy5fb0tleS5jbG9uZSgpLmNvbmNhdChpbm5lckhhc2gpKTtcblxuXHQgICAgICAgICAgICByZXR1cm4gaG1hYztcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0fSgpKTtcblxuXG5cdChmdW5jdGlvbiAoKSB7XG5cdCAgICAvLyBTaG9ydGN1dHNcblx0ICAgIHZhciBDID0gQ3J5cHRvSlM7XG5cdCAgICB2YXIgQ19saWIgPSBDLmxpYjtcblx0ICAgIHZhciBCYXNlID0gQ19saWIuQmFzZTtcblx0ICAgIHZhciBXb3JkQXJyYXkgPSBDX2xpYi5Xb3JkQXJyYXk7XG5cdCAgICB2YXIgQ19hbGdvID0gQy5hbGdvO1xuXHQgICAgdmFyIFNIQTEgPSBDX2FsZ28uU0hBMTtcblx0ICAgIHZhciBITUFDID0gQ19hbGdvLkhNQUM7XG5cblx0ICAgIC8qKlxuXHQgICAgICogUGFzc3dvcmQtQmFzZWQgS2V5IERlcml2YXRpb24gRnVuY3Rpb24gMiBhbGdvcml0aG0uXG5cdCAgICAgKi9cblx0ICAgIHZhciBQQktERjIgPSBDX2FsZ28uUEJLREYyID0gQmFzZS5leHRlbmQoe1xuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENvbmZpZ3VyYXRpb24gb3B0aW9ucy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBrZXlTaXplIFRoZSBrZXkgc2l6ZSBpbiB3b3JkcyB0byBnZW5lcmF0ZS4gRGVmYXVsdDogNCAoMTI4IGJpdHMpXG5cdCAgICAgICAgICogQHByb3BlcnR5IHtIYXNoZXJ9IGhhc2hlciBUaGUgaGFzaGVyIHRvIHVzZS4gRGVmYXVsdDogU0hBMVxuXHQgICAgICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBpdGVyYXRpb25zIFRoZSBudW1iZXIgb2YgaXRlcmF0aW9ucyB0byBwZXJmb3JtLiBEZWZhdWx0OiAxXG5cdCAgICAgICAgICovXG5cdCAgICAgICAgY2ZnOiBCYXNlLmV4dGVuZCh7XG5cdCAgICAgICAgICAgIGtleVNpemU6IDEyOC8zMixcblx0ICAgICAgICAgICAgaGFzaGVyOiBTSEExLFxuXHQgICAgICAgICAgICBpdGVyYXRpb25zOiAxXG5cdCAgICAgICAgfSksXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBJbml0aWFsaXplcyBhIG5ld2x5IGNyZWF0ZWQga2V5IGRlcml2YXRpb24gZnVuY3Rpb24uXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gY2ZnIChPcHRpb25hbCkgVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byB1c2UgZm9yIHRoZSBkZXJpdmF0aW9uLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIga2RmID0gQ3J5cHRvSlMuYWxnby5QQktERjIuY3JlYXRlKCk7XG5cdCAgICAgICAgICogICAgIHZhciBrZGYgPSBDcnlwdG9KUy5hbGdvLlBCS0RGMi5jcmVhdGUoeyBrZXlTaXplOiA4IH0pO1xuXHQgICAgICAgICAqICAgICB2YXIga2RmID0gQ3J5cHRvSlMuYWxnby5QQktERjIuY3JlYXRlKHsga2V5U2l6ZTogOCwgaXRlcmF0aW9uczogMTAwMCB9KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBpbml0OiBmdW5jdGlvbiAoY2ZnKSB7XG5cdCAgICAgICAgICAgIHRoaXMuY2ZnID0gdGhpcy5jZmcuZXh0ZW5kKGNmZyk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENvbXB1dGVzIHRoZSBQYXNzd29yZC1CYXNlZCBLZXkgRGVyaXZhdGlvbiBGdW5jdGlvbiAyLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBwYXNzd29yZCBUaGUgcGFzc3dvcmQuXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBzYWx0IEEgc2FsdC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIGRlcml2ZWQga2V5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIga2V5ID0ga2RmLmNvbXB1dGUocGFzc3dvcmQsIHNhbHQpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGNvbXB1dGU6IGZ1bmN0aW9uIChwYXNzd29yZCwgc2FsdCkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dFxuXHQgICAgICAgICAgICB2YXIgY2ZnID0gdGhpcy5jZmc7XG5cblx0ICAgICAgICAgICAgLy8gSW5pdCBITUFDXG5cdCAgICAgICAgICAgIHZhciBobWFjID0gSE1BQy5jcmVhdGUoY2ZnLmhhc2hlciwgcGFzc3dvcmQpO1xuXG5cdCAgICAgICAgICAgIC8vIEluaXRpYWwgdmFsdWVzXG5cdCAgICAgICAgICAgIHZhciBkZXJpdmVkS2V5ID0gV29yZEFycmF5LmNyZWF0ZSgpO1xuXHQgICAgICAgICAgICB2YXIgYmxvY2tJbmRleCA9IFdvcmRBcnJheS5jcmVhdGUoWzB4MDAwMDAwMDFdKTtcblxuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIGRlcml2ZWRLZXlXb3JkcyA9IGRlcml2ZWRLZXkud29yZHM7XG5cdCAgICAgICAgICAgIHZhciBibG9ja0luZGV4V29yZHMgPSBibG9ja0luZGV4LndvcmRzO1xuXHQgICAgICAgICAgICB2YXIga2V5U2l6ZSA9IGNmZy5rZXlTaXplO1xuXHQgICAgICAgICAgICB2YXIgaXRlcmF0aW9ucyA9IGNmZy5pdGVyYXRpb25zO1xuXG5cdCAgICAgICAgICAgIC8vIEdlbmVyYXRlIGtleVxuXHQgICAgICAgICAgICB3aGlsZSAoZGVyaXZlZEtleVdvcmRzLmxlbmd0aCA8IGtleVNpemUpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBibG9jayA9IGhtYWMudXBkYXRlKHNhbHQpLmZpbmFsaXplKGJsb2NrSW5kZXgpO1xuXHQgICAgICAgICAgICAgICAgaG1hYy5yZXNldCgpO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgICAgIHZhciBibG9ja1dvcmRzID0gYmxvY2sud29yZHM7XG5cdCAgICAgICAgICAgICAgICB2YXIgYmxvY2tXb3Jkc0xlbmd0aCA9IGJsb2NrV29yZHMubGVuZ3RoO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBJdGVyYXRpb25zXG5cdCAgICAgICAgICAgICAgICB2YXIgaW50ZXJtZWRpYXRlID0gYmxvY2s7XG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGl0ZXJhdGlvbnM7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIGludGVybWVkaWF0ZSA9IGhtYWMuZmluYWxpemUoaW50ZXJtZWRpYXRlKTtcblx0ICAgICAgICAgICAgICAgICAgICBobWFjLnJlc2V0KCk7XG5cblx0ICAgICAgICAgICAgICAgICAgICAvLyBTaG9ydGN1dFxuXHQgICAgICAgICAgICAgICAgICAgIHZhciBpbnRlcm1lZGlhdGVXb3JkcyA9IGludGVybWVkaWF0ZS53b3JkcztcblxuXHQgICAgICAgICAgICAgICAgICAgIC8vIFhPUiBpbnRlcm1lZGlhdGUgd2l0aCBibG9ja1xuXHQgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgYmxvY2tXb3Jkc0xlbmd0aDsgaisrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrV29yZHNbal0gXj0gaW50ZXJtZWRpYXRlV29yZHNbal07XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgICAgICBkZXJpdmVkS2V5LmNvbmNhdChibG9jayk7XG5cdCAgICAgICAgICAgICAgICBibG9ja0luZGV4V29yZHNbMF0rKztcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBkZXJpdmVkS2V5LnNpZ0J5dGVzID0ga2V5U2l6ZSAqIDQ7XG5cblx0ICAgICAgICAgICAgcmV0dXJuIGRlcml2ZWRLZXk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogQ29tcHV0ZXMgdGhlIFBhc3N3b3JkLUJhc2VkIEtleSBEZXJpdmF0aW9uIEZ1bmN0aW9uIDIuXG5cdCAgICAgKlxuXHQgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBwYXNzd29yZCBUaGUgcGFzc3dvcmQuXG5cdCAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IHNhbHQgQSBzYWx0LlxuXHQgICAgICogQHBhcmFtIHtPYmplY3R9IGNmZyAoT3B0aW9uYWwpIFRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gdXNlIGZvciB0aGlzIGNvbXB1dGF0aW9uLlxuXHQgICAgICpcblx0ICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIGRlcml2ZWQga2V5LlxuXHQgICAgICpcblx0ICAgICAqIEBzdGF0aWNcblx0ICAgICAqXG5cdCAgICAgKiBAZXhhbXBsZVxuXHQgICAgICpcblx0ICAgICAqICAgICB2YXIga2V5ID0gQ3J5cHRvSlMuUEJLREYyKHBhc3N3b3JkLCBzYWx0KTtcblx0ICAgICAqICAgICB2YXIga2V5ID0gQ3J5cHRvSlMuUEJLREYyKHBhc3N3b3JkLCBzYWx0LCB7IGtleVNpemU6IDggfSk7XG5cdCAgICAgKiAgICAgdmFyIGtleSA9IENyeXB0b0pTLlBCS0RGMihwYXNzd29yZCwgc2FsdCwgeyBrZXlTaXplOiA4LCBpdGVyYXRpb25zOiAxMDAwIH0pO1xuXHQgICAgICovXG5cdCAgICBDLlBCS0RGMiA9IGZ1bmN0aW9uIChwYXNzd29yZCwgc2FsdCwgY2ZnKSB7XG5cdCAgICAgICAgcmV0dXJuIFBCS0RGMi5jcmVhdGUoY2ZnKS5jb21wdXRlKHBhc3N3b3JkLCBzYWx0KTtcblx0ICAgIH07XG5cdH0oKSk7XG5cblxuXHQoZnVuY3Rpb24gKCkge1xuXHQgICAgLy8gU2hvcnRjdXRzXG5cdCAgICB2YXIgQyA9IENyeXB0b0pTO1xuXHQgICAgdmFyIENfbGliID0gQy5saWI7XG5cdCAgICB2YXIgQmFzZSA9IENfbGliLkJhc2U7XG5cdCAgICB2YXIgV29yZEFycmF5ID0gQ19saWIuV29yZEFycmF5O1xuXHQgICAgdmFyIENfYWxnbyA9IEMuYWxnbztcblx0ICAgIHZhciBNRDUgPSBDX2FsZ28uTUQ1O1xuXG5cdCAgICAvKipcblx0ICAgICAqIFRoaXMga2V5IGRlcml2YXRpb24gZnVuY3Rpb24gaXMgbWVhbnQgdG8gY29uZm9ybSB3aXRoIEVWUF9CeXRlc1RvS2V5LlxuXHQgICAgICogd3d3Lm9wZW5zc2wub3JnL2RvY3MvY3J5cHRvL0VWUF9CeXRlc1RvS2V5Lmh0bWxcblx0ICAgICAqL1xuXHQgICAgdmFyIEV2cEtERiA9IENfYWxnby5FdnBLREYgPSBCYXNlLmV4dGVuZCh7XG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29uZmlndXJhdGlvbiBvcHRpb25zLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHByb3BlcnR5IHtudW1iZXJ9IGtleVNpemUgVGhlIGtleSBzaXplIGluIHdvcmRzIHRvIGdlbmVyYXRlLiBEZWZhdWx0OiA0ICgxMjggYml0cylcblx0ICAgICAgICAgKiBAcHJvcGVydHkge0hhc2hlcn0gaGFzaGVyIFRoZSBoYXNoIGFsZ29yaXRobSB0byB1c2UuIERlZmF1bHQ6IE1ENVxuXHQgICAgICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBpdGVyYXRpb25zIFRoZSBudW1iZXIgb2YgaXRlcmF0aW9ucyB0byBwZXJmb3JtLiBEZWZhdWx0OiAxXG5cdCAgICAgICAgICovXG5cdCAgICAgICAgY2ZnOiBCYXNlLmV4dGVuZCh7XG5cdCAgICAgICAgICAgIGtleVNpemU6IDEyOC8zMixcblx0ICAgICAgICAgICAgaGFzaGVyOiBNRDUsXG5cdCAgICAgICAgICAgIGl0ZXJhdGlvbnM6IDFcblx0ICAgICAgICB9KSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIEluaXRpYWxpemVzIGEgbmV3bHkgY3JlYXRlZCBrZXkgZGVyaXZhdGlvbiBmdW5jdGlvbi5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjZmcgKE9wdGlvbmFsKSBUaGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIHVzZSBmb3IgdGhlIGRlcml2YXRpb24uXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBrZGYgPSBDcnlwdG9KUy5hbGdvLkV2cEtERi5jcmVhdGUoKTtcblx0ICAgICAgICAgKiAgICAgdmFyIGtkZiA9IENyeXB0b0pTLmFsZ28uRXZwS0RGLmNyZWF0ZSh7IGtleVNpemU6IDggfSk7XG5cdCAgICAgICAgICogICAgIHZhciBrZGYgPSBDcnlwdG9KUy5hbGdvLkV2cEtERi5jcmVhdGUoeyBrZXlTaXplOiA4LCBpdGVyYXRpb25zOiAxMDAwIH0pO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGluaXQ6IGZ1bmN0aW9uIChjZmcpIHtcblx0ICAgICAgICAgICAgdGhpcy5jZmcgPSB0aGlzLmNmZy5leHRlbmQoY2ZnKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogRGVyaXZlcyBhIGtleSBmcm9tIGEgcGFzc3dvcmQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IHBhc3N3b3JkIFRoZSBwYXNzd29yZC5cblx0ICAgICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IHNhbHQgQSBzYWx0LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgZGVyaXZlZCBrZXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBrZXkgPSBrZGYuY29tcHV0ZShwYXNzd29yZCwgc2FsdCk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgY29tcHV0ZTogZnVuY3Rpb24gKHBhc3N3b3JkLCBzYWx0KSB7XG5cdCAgICAgICAgICAgIHZhciBibG9jaztcblxuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dFxuXHQgICAgICAgICAgICB2YXIgY2ZnID0gdGhpcy5jZmc7XG5cblx0ICAgICAgICAgICAgLy8gSW5pdCBoYXNoZXJcblx0ICAgICAgICAgICAgdmFyIGhhc2hlciA9IGNmZy5oYXNoZXIuY3JlYXRlKCk7XG5cblx0ICAgICAgICAgICAgLy8gSW5pdGlhbCB2YWx1ZXNcblx0ICAgICAgICAgICAgdmFyIGRlcml2ZWRLZXkgPSBXb3JkQXJyYXkuY3JlYXRlKCk7XG5cblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBkZXJpdmVkS2V5V29yZHMgPSBkZXJpdmVkS2V5LndvcmRzO1xuXHQgICAgICAgICAgICB2YXIga2V5U2l6ZSA9IGNmZy5rZXlTaXplO1xuXHQgICAgICAgICAgICB2YXIgaXRlcmF0aW9ucyA9IGNmZy5pdGVyYXRpb25zO1xuXG5cdCAgICAgICAgICAgIC8vIEdlbmVyYXRlIGtleVxuXHQgICAgICAgICAgICB3aGlsZSAoZGVyaXZlZEtleVdvcmRzLmxlbmd0aCA8IGtleVNpemUpIHtcblx0ICAgICAgICAgICAgICAgIGlmIChibG9jaykge1xuXHQgICAgICAgICAgICAgICAgICAgIGhhc2hlci51cGRhdGUoYmxvY2spO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgYmxvY2sgPSBoYXNoZXIudXBkYXRlKHBhc3N3b3JkKS5maW5hbGl6ZShzYWx0KTtcblx0ICAgICAgICAgICAgICAgIGhhc2hlci5yZXNldCgpO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBJdGVyYXRpb25zXG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGl0ZXJhdGlvbnM7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIGJsb2NrID0gaGFzaGVyLmZpbmFsaXplKGJsb2NrKTtcblx0ICAgICAgICAgICAgICAgICAgICBoYXNoZXIucmVzZXQoKTtcblx0ICAgICAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAgICAgZGVyaXZlZEtleS5jb25jYXQoYmxvY2spO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGRlcml2ZWRLZXkuc2lnQnl0ZXMgPSBrZXlTaXplICogNDtcblxuXHQgICAgICAgICAgICByZXR1cm4gZGVyaXZlZEtleTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBEZXJpdmVzIGEga2V5IGZyb20gYSBwYXNzd29yZC5cblx0ICAgICAqXG5cdCAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IHBhc3N3b3JkIFRoZSBwYXNzd29yZC5cblx0ICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gc2FsdCBBIHNhbHQuXG5cdCAgICAgKiBAcGFyYW0ge09iamVjdH0gY2ZnIChPcHRpb25hbCkgVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byB1c2UgZm9yIHRoaXMgY29tcHV0YXRpb24uXG5cdCAgICAgKlxuXHQgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgZGVyaXZlZCBrZXkuXG5cdCAgICAgKlxuXHQgICAgICogQHN0YXRpY1xuXHQgICAgICpcblx0ICAgICAqIEBleGFtcGxlXG5cdCAgICAgKlxuXHQgICAgICogICAgIHZhciBrZXkgPSBDcnlwdG9KUy5FdnBLREYocGFzc3dvcmQsIHNhbHQpO1xuXHQgICAgICogICAgIHZhciBrZXkgPSBDcnlwdG9KUy5FdnBLREYocGFzc3dvcmQsIHNhbHQsIHsga2V5U2l6ZTogOCB9KTtcblx0ICAgICAqICAgICB2YXIga2V5ID0gQ3J5cHRvSlMuRXZwS0RGKHBhc3N3b3JkLCBzYWx0LCB7IGtleVNpemU6IDgsIGl0ZXJhdGlvbnM6IDEwMDAgfSk7XG5cdCAgICAgKi9cblx0ICAgIEMuRXZwS0RGID0gZnVuY3Rpb24gKHBhc3N3b3JkLCBzYWx0LCBjZmcpIHtcblx0ICAgICAgICByZXR1cm4gRXZwS0RGLmNyZWF0ZShjZmcpLmNvbXB1dGUocGFzc3dvcmQsIHNhbHQpO1xuXHQgICAgfTtcblx0fSgpKTtcblxuXG5cdChmdW5jdGlvbiAoKSB7XG5cdCAgICAvLyBTaG9ydGN1dHNcblx0ICAgIHZhciBDID0gQ3J5cHRvSlM7XG5cdCAgICB2YXIgQ19saWIgPSBDLmxpYjtcblx0ICAgIHZhciBXb3JkQXJyYXkgPSBDX2xpYi5Xb3JkQXJyYXk7XG5cdCAgICB2YXIgQ19hbGdvID0gQy5hbGdvO1xuXHQgICAgdmFyIFNIQTI1NiA9IENfYWxnby5TSEEyNTY7XG5cblx0ICAgIC8qKlxuXHQgICAgICogU0hBLTIyNCBoYXNoIGFsZ29yaXRobS5cblx0ICAgICAqL1xuXHQgICAgdmFyIFNIQTIyNCA9IENfYWxnby5TSEEyMjQgPSBTSEEyNTYuZXh0ZW5kKHtcblx0ICAgICAgICBfZG9SZXNldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB0aGlzLl9oYXNoID0gbmV3IFdvcmRBcnJheS5pbml0KFtcblx0ICAgICAgICAgICAgICAgIDB4YzEwNTllZDgsIDB4MzY3Y2Q1MDcsIDB4MzA3MGRkMTcsIDB4ZjcwZTU5MzksXG5cdCAgICAgICAgICAgICAgICAweGZmYzAwYjMxLCAweDY4NTgxNTExLCAweDY0Zjk4ZmE3LCAweGJlZmE0ZmE0XG5cdCAgICAgICAgICAgIF0pO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBfZG9GaW5hbGl6ZTogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgaGFzaCA9IFNIQTI1Ni5fZG9GaW5hbGl6ZS5jYWxsKHRoaXMpO1xuXG5cdCAgICAgICAgICAgIGhhc2guc2lnQnl0ZXMgLT0gNDtcblxuXHQgICAgICAgICAgICByZXR1cm4gaGFzaDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBTaG9ydGN1dCBmdW5jdGlvbiB0byB0aGUgaGFzaGVyJ3Mgb2JqZWN0IGludGVyZmFjZS5cblx0ICAgICAqXG5cdCAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gaGFzaC5cblx0ICAgICAqXG5cdCAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSBoYXNoLlxuXHQgICAgICpcblx0ICAgICAqIEBzdGF0aWNcblx0ICAgICAqXG5cdCAgICAgKiBAZXhhbXBsZVxuXHQgICAgICpcblx0ICAgICAqICAgICB2YXIgaGFzaCA9IENyeXB0b0pTLlNIQTIyNCgnbWVzc2FnZScpO1xuXHQgICAgICogICAgIHZhciBoYXNoID0gQ3J5cHRvSlMuU0hBMjI0KHdvcmRBcnJheSk7XG5cdCAgICAgKi9cblx0ICAgIEMuU0hBMjI0ID0gU0hBMjU2Ll9jcmVhdGVIZWxwZXIoU0hBMjI0KTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBTaG9ydGN1dCBmdW5jdGlvbiB0byB0aGUgSE1BQydzIG9iamVjdCBpbnRlcmZhY2UuXG5cdCAgICAgKlxuXHQgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBtZXNzYWdlIFRoZSBtZXNzYWdlIHRvIGhhc2guXG5cdCAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IGtleSBUaGUgc2VjcmV0IGtleS5cblx0ICAgICAqXG5cdCAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSBITUFDLlxuXHQgICAgICpcblx0ICAgICAqIEBzdGF0aWNcblx0ICAgICAqXG5cdCAgICAgKiBAZXhhbXBsZVxuXHQgICAgICpcblx0ICAgICAqICAgICB2YXIgaG1hYyA9IENyeXB0b0pTLkhtYWNTSEEyMjQobWVzc2FnZSwga2V5KTtcblx0ICAgICAqL1xuXHQgICAgQy5IbWFjU0hBMjI0ID0gU0hBMjU2Ll9jcmVhdGVIbWFjSGVscGVyKFNIQTIyNCk7XG5cdH0oKSk7XG5cblxuXHQoZnVuY3Rpb24gKHVuZGVmaW5lZCkge1xuXHQgICAgLy8gU2hvcnRjdXRzXG5cdCAgICB2YXIgQyA9IENyeXB0b0pTO1xuXHQgICAgdmFyIENfbGliID0gQy5saWI7XG5cdCAgICB2YXIgQmFzZSA9IENfbGliLkJhc2U7XG5cdCAgICB2YXIgWDMyV29yZEFycmF5ID0gQ19saWIuV29yZEFycmF5O1xuXG5cdCAgICAvKipcblx0ICAgICAqIHg2NCBuYW1lc3BhY2UuXG5cdCAgICAgKi9cblx0ICAgIHZhciBDX3g2NCA9IEMueDY0ID0ge307XG5cblx0ICAgIC8qKlxuXHQgICAgICogQSA2NC1iaXQgd29yZC5cblx0ICAgICAqL1xuXHQgICAgdmFyIFg2NFdvcmQgPSBDX3g2NC5Xb3JkID0gQmFzZS5leHRlbmQoe1xuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIEluaXRpYWxpemVzIGEgbmV3bHkgY3JlYXRlZCA2NC1iaXQgd29yZC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBoaWdoIFRoZSBoaWdoIDMyIGJpdHMuXG5cdCAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IGxvdyBUaGUgbG93IDMyIGJpdHMuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciB4NjRXb3JkID0gQ3J5cHRvSlMueDY0LldvcmQuY3JlYXRlKDB4MDAwMTAyMDMsIDB4MDQwNTA2MDcpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGluaXQ6IGZ1bmN0aW9uIChoaWdoLCBsb3cpIHtcblx0ICAgICAgICAgICAgdGhpcy5oaWdoID0gaGlnaDtcblx0ICAgICAgICAgICAgdGhpcy5sb3cgPSBsb3c7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQml0d2lzZSBOT1RzIHRoaXMgd29yZC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1g2NFdvcmR9IEEgbmV3IHg2NC1Xb3JkIG9iamVjdCBhZnRlciBuZWdhdGluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIG5lZ2F0ZWQgPSB4NjRXb3JkLm5vdCgpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIC8vIG5vdDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAvLyB2YXIgaGlnaCA9IH50aGlzLmhpZ2g7XG5cdCAgICAgICAgICAgIC8vIHZhciBsb3cgPSB+dGhpcy5sb3c7XG5cblx0ICAgICAgICAgICAgLy8gcmV0dXJuIFg2NFdvcmQuY3JlYXRlKGhpZ2gsIGxvdyk7XG5cdCAgICAgICAgLy8gfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIEJpdHdpc2UgQU5EcyB0aGlzIHdvcmQgd2l0aCB0aGUgcGFzc2VkIHdvcmQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge1g2NFdvcmR9IHdvcmQgVGhlIHg2NC1Xb3JkIHRvIEFORCB3aXRoIHRoaXMgd29yZC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1g2NFdvcmR9IEEgbmV3IHg2NC1Xb3JkIG9iamVjdCBhZnRlciBBTkRpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBhbmRlZCA9IHg2NFdvcmQuYW5kKGFub3RoZXJYNjRXb3JkKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICAvLyBhbmQ6IGZ1bmN0aW9uICh3b3JkKSB7XG5cdCAgICAgICAgICAgIC8vIHZhciBoaWdoID0gdGhpcy5oaWdoICYgd29yZC5oaWdoO1xuXHQgICAgICAgICAgICAvLyB2YXIgbG93ID0gdGhpcy5sb3cgJiB3b3JkLmxvdztcblxuXHQgICAgICAgICAgICAvLyByZXR1cm4gWDY0V29yZC5jcmVhdGUoaGlnaCwgbG93KTtcblx0ICAgICAgICAvLyB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQml0d2lzZSBPUnMgdGhpcyB3b3JkIHdpdGggdGhlIHBhc3NlZCB3b3JkLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtYNjRXb3JkfSB3b3JkIFRoZSB4NjQtV29yZCB0byBPUiB3aXRoIHRoaXMgd29yZC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1g2NFdvcmR9IEEgbmV3IHg2NC1Xb3JkIG9iamVjdCBhZnRlciBPUmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIG9yZWQgPSB4NjRXb3JkLm9yKGFub3RoZXJYNjRXb3JkKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICAvLyBvcjogZnVuY3Rpb24gKHdvcmQpIHtcblx0ICAgICAgICAgICAgLy8gdmFyIGhpZ2ggPSB0aGlzLmhpZ2ggfCB3b3JkLmhpZ2g7XG5cdCAgICAgICAgICAgIC8vIHZhciBsb3cgPSB0aGlzLmxvdyB8IHdvcmQubG93O1xuXG5cdCAgICAgICAgICAgIC8vIHJldHVybiBYNjRXb3JkLmNyZWF0ZShoaWdoLCBsb3cpO1xuXHQgICAgICAgIC8vIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBCaXR3aXNlIFhPUnMgdGhpcyB3b3JkIHdpdGggdGhlIHBhc3NlZCB3b3JkLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtYNjRXb3JkfSB3b3JkIFRoZSB4NjQtV29yZCB0byBYT1Igd2l0aCB0aGlzIHdvcmQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtYNjRXb3JkfSBBIG5ldyB4NjQtV29yZCBvYmplY3QgYWZ0ZXIgWE9SaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgeG9yZWQgPSB4NjRXb3JkLnhvcihhbm90aGVyWDY0V29yZCk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgLy8geG9yOiBmdW5jdGlvbiAod29yZCkge1xuXHQgICAgICAgICAgICAvLyB2YXIgaGlnaCA9IHRoaXMuaGlnaCBeIHdvcmQuaGlnaDtcblx0ICAgICAgICAgICAgLy8gdmFyIGxvdyA9IHRoaXMubG93IF4gd29yZC5sb3c7XG5cblx0ICAgICAgICAgICAgLy8gcmV0dXJuIFg2NFdvcmQuY3JlYXRlKGhpZ2gsIGxvdyk7XG5cdCAgICAgICAgLy8gfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIFNoaWZ0cyB0aGlzIHdvcmQgbiBiaXRzIHRvIHRoZSBsZWZ0LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IG4gVGhlIG51bWJlciBvZiBiaXRzIHRvIHNoaWZ0LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7WDY0V29yZH0gQSBuZXcgeDY0LVdvcmQgb2JqZWN0IGFmdGVyIHNoaWZ0aW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgc2hpZnRlZCA9IHg2NFdvcmQuc2hpZnRMKDI1KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICAvLyBzaGlmdEw6IGZ1bmN0aW9uIChuKSB7XG5cdCAgICAgICAgICAgIC8vIGlmIChuIDwgMzIpIHtcblx0ICAgICAgICAgICAgICAgIC8vIHZhciBoaWdoID0gKHRoaXMuaGlnaCA8PCBuKSB8ICh0aGlzLmxvdyA+Pj4gKDMyIC0gbikpO1xuXHQgICAgICAgICAgICAgICAgLy8gdmFyIGxvdyA9IHRoaXMubG93IDw8IG47XG5cdCAgICAgICAgICAgIC8vIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAvLyB2YXIgaGlnaCA9IHRoaXMubG93IDw8IChuIC0gMzIpO1xuXHQgICAgICAgICAgICAgICAgLy8gdmFyIGxvdyA9IDA7XG5cdCAgICAgICAgICAgIC8vIH1cblxuXHQgICAgICAgICAgICAvLyByZXR1cm4gWDY0V29yZC5jcmVhdGUoaGlnaCwgbG93KTtcblx0ICAgICAgICAvLyB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogU2hpZnRzIHRoaXMgd29yZCBuIGJpdHMgdG8gdGhlIHJpZ2h0LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IG4gVGhlIG51bWJlciBvZiBiaXRzIHRvIHNoaWZ0LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7WDY0V29yZH0gQSBuZXcgeDY0LVdvcmQgb2JqZWN0IGFmdGVyIHNoaWZ0aW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgc2hpZnRlZCA9IHg2NFdvcmQuc2hpZnRSKDcpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIC8vIHNoaWZ0UjogZnVuY3Rpb24gKG4pIHtcblx0ICAgICAgICAgICAgLy8gaWYgKG4gPCAzMikge1xuXHQgICAgICAgICAgICAgICAgLy8gdmFyIGxvdyA9ICh0aGlzLmxvdyA+Pj4gbikgfCAodGhpcy5oaWdoIDw8ICgzMiAtIG4pKTtcblx0ICAgICAgICAgICAgICAgIC8vIHZhciBoaWdoID0gdGhpcy5oaWdoID4+PiBuO1xuXHQgICAgICAgICAgICAvLyB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgLy8gdmFyIGxvdyA9IHRoaXMuaGlnaCA+Pj4gKG4gLSAzMik7XG5cdCAgICAgICAgICAgICAgICAvLyB2YXIgaGlnaCA9IDA7XG5cdCAgICAgICAgICAgIC8vIH1cblxuXHQgICAgICAgICAgICAvLyByZXR1cm4gWDY0V29yZC5jcmVhdGUoaGlnaCwgbG93KTtcblx0ICAgICAgICAvLyB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogUm90YXRlcyB0aGlzIHdvcmQgbiBiaXRzIHRvIHRoZSBsZWZ0LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IG4gVGhlIG51bWJlciBvZiBiaXRzIHRvIHJvdGF0ZS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1g2NFdvcmR9IEEgbmV3IHg2NC1Xb3JkIG9iamVjdCBhZnRlciByb3RhdGluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIHJvdGF0ZWQgPSB4NjRXb3JkLnJvdEwoMjUpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIC8vIHJvdEw6IGZ1bmN0aW9uIChuKSB7XG5cdCAgICAgICAgICAgIC8vIHJldHVybiB0aGlzLnNoaWZ0TChuKS5vcih0aGlzLnNoaWZ0Uig2NCAtIG4pKTtcblx0ICAgICAgICAvLyB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogUm90YXRlcyB0aGlzIHdvcmQgbiBiaXRzIHRvIHRoZSByaWdodC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBuIFRoZSBudW1iZXIgb2YgYml0cyB0byByb3RhdGUuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtYNjRXb3JkfSBBIG5ldyB4NjQtV29yZCBvYmplY3QgYWZ0ZXIgcm90YXRpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciByb3RhdGVkID0geDY0V29yZC5yb3RSKDcpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIC8vIHJvdFI6IGZ1bmN0aW9uIChuKSB7XG5cdCAgICAgICAgICAgIC8vIHJldHVybiB0aGlzLnNoaWZ0UihuKS5vcih0aGlzLnNoaWZ0TCg2NCAtIG4pKTtcblx0ICAgICAgICAvLyB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQWRkcyB0aGlzIHdvcmQgd2l0aCB0aGUgcGFzc2VkIHdvcmQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge1g2NFdvcmR9IHdvcmQgVGhlIHg2NC1Xb3JkIHRvIGFkZCB3aXRoIHRoaXMgd29yZC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1g2NFdvcmR9IEEgbmV3IHg2NC1Xb3JkIG9iamVjdCBhZnRlciBhZGRpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBhZGRlZCA9IHg2NFdvcmQuYWRkKGFub3RoZXJYNjRXb3JkKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICAvLyBhZGQ6IGZ1bmN0aW9uICh3b3JkKSB7XG5cdCAgICAgICAgICAgIC8vIHZhciBsb3cgPSAodGhpcy5sb3cgKyB3b3JkLmxvdykgfCAwO1xuXHQgICAgICAgICAgICAvLyB2YXIgY2FycnkgPSAobG93ID4+PiAwKSA8ICh0aGlzLmxvdyA+Pj4gMCkgPyAxIDogMDtcblx0ICAgICAgICAgICAgLy8gdmFyIGhpZ2ggPSAodGhpcy5oaWdoICsgd29yZC5oaWdoICsgY2FycnkpIHwgMDtcblxuXHQgICAgICAgICAgICAvLyByZXR1cm4gWDY0V29yZC5jcmVhdGUoaGlnaCwgbG93KTtcblx0ICAgICAgICAvLyB9XG5cdCAgICB9KTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBBbiBhcnJheSBvZiA2NC1iaXQgd29yZHMuXG5cdCAgICAgKlxuXHQgICAgICogQHByb3BlcnR5IHtBcnJheX0gd29yZHMgVGhlIGFycmF5IG9mIENyeXB0b0pTLng2NC5Xb3JkIG9iamVjdHMuXG5cdCAgICAgKiBAcHJvcGVydHkge251bWJlcn0gc2lnQnl0ZXMgVGhlIG51bWJlciBvZiBzaWduaWZpY2FudCBieXRlcyBpbiB0aGlzIHdvcmQgYXJyYXkuXG5cdCAgICAgKi9cblx0ICAgIHZhciBYNjRXb3JkQXJyYXkgPSBDX3g2NC5Xb3JkQXJyYXkgPSBCYXNlLmV4dGVuZCh7XG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogSW5pdGlhbGl6ZXMgYSBuZXdseSBjcmVhdGVkIHdvcmQgYXJyYXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge0FycmF5fSB3b3JkcyAoT3B0aW9uYWwpIEFuIGFycmF5IG9mIENyeXB0b0pTLng2NC5Xb3JkIG9iamVjdHMuXG5cdCAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IHNpZ0J5dGVzIChPcHRpb25hbCkgVGhlIG51bWJlciBvZiBzaWduaWZpY2FudCBieXRlcyBpbiB0aGUgd29yZHMuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciB3b3JkQXJyYXkgPSBDcnlwdG9KUy54NjQuV29yZEFycmF5LmNyZWF0ZSgpO1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciB3b3JkQXJyYXkgPSBDcnlwdG9KUy54NjQuV29yZEFycmF5LmNyZWF0ZShbXG5cdCAgICAgICAgICogICAgICAgICBDcnlwdG9KUy54NjQuV29yZC5jcmVhdGUoMHgwMDAxMDIwMywgMHgwNDA1MDYwNyksXG5cdCAgICAgICAgICogICAgICAgICBDcnlwdG9KUy54NjQuV29yZC5jcmVhdGUoMHgxODE5MWExYiwgMHgxYzFkMWUxZilcblx0ICAgICAgICAgKiAgICAgXSk7XG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIHdvcmRBcnJheSA9IENyeXB0b0pTLng2NC5Xb3JkQXJyYXkuY3JlYXRlKFtcblx0ICAgICAgICAgKiAgICAgICAgIENyeXB0b0pTLng2NC5Xb3JkLmNyZWF0ZSgweDAwMDEwMjAzLCAweDA0MDUwNjA3KSxcblx0ICAgICAgICAgKiAgICAgICAgIENyeXB0b0pTLng2NC5Xb3JkLmNyZWF0ZSgweDE4MTkxYTFiLCAweDFjMWQxZTFmKVxuXHQgICAgICAgICAqICAgICBdLCAxMCk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgaW5pdDogZnVuY3Rpb24gKHdvcmRzLCBzaWdCeXRlcykge1xuXHQgICAgICAgICAgICB3b3JkcyA9IHRoaXMud29yZHMgPSB3b3JkcyB8fCBbXTtcblxuXHQgICAgICAgICAgICBpZiAoc2lnQnl0ZXMgIT0gdW5kZWZpbmVkKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLnNpZ0J5dGVzID0gc2lnQnl0ZXM7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLnNpZ0J5dGVzID0gd29yZHMubGVuZ3RoICogODtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb252ZXJ0cyB0aGlzIDY0LWJpdCB3b3JkIGFycmF5IHRvIGEgMzItYml0IHdvcmQgYXJyYXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtDcnlwdG9KUy5saWIuV29yZEFycmF5fSBUaGlzIHdvcmQgYXJyYXkncyBkYXRhIGFzIGEgMzItYml0IHdvcmQgYXJyYXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciB4MzJXb3JkQXJyYXkgPSB4NjRXb3JkQXJyYXkudG9YMzIoKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICB0b1gzMjogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIHg2NFdvcmRzID0gdGhpcy53b3Jkcztcblx0ICAgICAgICAgICAgdmFyIHg2NFdvcmRzTGVuZ3RoID0geDY0V29yZHMubGVuZ3RoO1xuXG5cdCAgICAgICAgICAgIC8vIENvbnZlcnRcblx0ICAgICAgICAgICAgdmFyIHgzMldvcmRzID0gW107XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgeDY0V29yZHNMZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgdmFyIHg2NFdvcmQgPSB4NjRXb3Jkc1tpXTtcblx0ICAgICAgICAgICAgICAgIHgzMldvcmRzLnB1c2goeDY0V29yZC5oaWdoKTtcblx0ICAgICAgICAgICAgICAgIHgzMldvcmRzLnB1c2goeDY0V29yZC5sb3cpO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgcmV0dXJuIFgzMldvcmRBcnJheS5jcmVhdGUoeDMyV29yZHMsIHRoaXMuc2lnQnl0ZXMpO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDcmVhdGVzIGEgY29weSBvZiB0aGlzIHdvcmQgYXJyYXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtYNjRXb3JkQXJyYXl9IFRoZSBjbG9uZS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIGNsb25lID0geDY0V29yZEFycmF5LmNsb25lKCk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgY2xvbmU6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIGNsb25lID0gQmFzZS5jbG9uZS5jYWxsKHRoaXMpO1xuXG5cdCAgICAgICAgICAgIC8vIENsb25lIFwid29yZHNcIiBhcnJheVxuXHQgICAgICAgICAgICB2YXIgd29yZHMgPSBjbG9uZS53b3JkcyA9IHRoaXMud29yZHMuc2xpY2UoMCk7XG5cblx0ICAgICAgICAgICAgLy8gQ2xvbmUgZWFjaCBYNjRXb3JkIG9iamVjdFxuXHQgICAgICAgICAgICB2YXIgd29yZHNMZW5ndGggPSB3b3Jkcy5sZW5ndGg7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgd29yZHNMZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgd29yZHNbaV0gPSB3b3Jkc1tpXS5jbG9uZSgpO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgcmV0dXJuIGNsb25lO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHR9KCkpO1xuXG5cblx0KGZ1bmN0aW9uIChNYXRoKSB7XG5cdCAgICAvLyBTaG9ydGN1dHNcblx0ICAgIHZhciBDID0gQ3J5cHRvSlM7XG5cdCAgICB2YXIgQ19saWIgPSBDLmxpYjtcblx0ICAgIHZhciBXb3JkQXJyYXkgPSBDX2xpYi5Xb3JkQXJyYXk7XG5cdCAgICB2YXIgSGFzaGVyID0gQ19saWIuSGFzaGVyO1xuXHQgICAgdmFyIENfeDY0ID0gQy54NjQ7XG5cdCAgICB2YXIgWDY0V29yZCA9IENfeDY0LldvcmQ7XG5cdCAgICB2YXIgQ19hbGdvID0gQy5hbGdvO1xuXG5cdCAgICAvLyBDb25zdGFudHMgdGFibGVzXG5cdCAgICB2YXIgUkhPX09GRlNFVFMgPSBbXTtcblx0ICAgIHZhciBQSV9JTkRFWEVTICA9IFtdO1xuXHQgICAgdmFyIFJPVU5EX0NPTlNUQU5UUyA9IFtdO1xuXG5cdCAgICAvLyBDb21wdXRlIENvbnN0YW50c1xuXHQgICAgKGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAvLyBDb21wdXRlIHJobyBvZmZzZXQgY29uc3RhbnRzXG5cdCAgICAgICAgdmFyIHggPSAxLCB5ID0gMDtcblx0ICAgICAgICBmb3IgKHZhciB0ID0gMDsgdCA8IDI0OyB0KyspIHtcblx0ICAgICAgICAgICAgUkhPX09GRlNFVFNbeCArIDUgKiB5XSA9ICgodCArIDEpICogKHQgKyAyKSAvIDIpICUgNjQ7XG5cblx0ICAgICAgICAgICAgdmFyIG5ld1ggPSB5ICUgNTtcblx0ICAgICAgICAgICAgdmFyIG5ld1kgPSAoMiAqIHggKyAzICogeSkgJSA1O1xuXHQgICAgICAgICAgICB4ID0gbmV3WDtcblx0ICAgICAgICAgICAgeSA9IG5ld1k7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgLy8gQ29tcHV0ZSBwaSBpbmRleCBjb25zdGFudHNcblx0ICAgICAgICBmb3IgKHZhciB4ID0gMDsgeCA8IDU7IHgrKykge1xuXHQgICAgICAgICAgICBmb3IgKHZhciB5ID0gMDsgeSA8IDU7IHkrKykge1xuXHQgICAgICAgICAgICAgICAgUElfSU5ERVhFU1t4ICsgNSAqIHldID0geSArICgoMiAqIHggKyAzICogeSkgJSA1KSAqIDU7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cblx0ICAgICAgICAvLyBDb21wdXRlIHJvdW5kIGNvbnN0YW50c1xuXHQgICAgICAgIHZhciBMRlNSID0gMHgwMTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDI0OyBpKyspIHtcblx0ICAgICAgICAgICAgdmFyIHJvdW5kQ29uc3RhbnRNc3cgPSAwO1xuXHQgICAgICAgICAgICB2YXIgcm91bmRDb25zdGFudExzdyA9IDA7XG5cblx0ICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCA3OyBqKyspIHtcblx0ICAgICAgICAgICAgICAgIGlmIChMRlNSICYgMHgwMSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBiaXRQb3NpdGlvbiA9ICgxIDw8IGopIC0gMTtcblx0ICAgICAgICAgICAgICAgICAgICBpZiAoYml0UG9zaXRpb24gPCAzMikge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICByb3VuZENvbnN0YW50THN3IF49IDEgPDwgYml0UG9zaXRpb247XG5cdCAgICAgICAgICAgICAgICAgICAgfSBlbHNlIC8qIGlmIChiaXRQb3NpdGlvbiA+PSAzMikgKi8ge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICByb3VuZENvbnN0YW50TXN3IF49IDEgPDwgKGJpdFBvc2l0aW9uIC0gMzIpO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAgICAgLy8gQ29tcHV0ZSBuZXh0IExGU1Jcblx0ICAgICAgICAgICAgICAgIGlmIChMRlNSICYgMHg4MCkge1xuXHQgICAgICAgICAgICAgICAgICAgIC8vIFByaW1pdGl2ZSBwb2x5bm9taWFsIG92ZXIgR0YoMik6IHheOCArIHheNiArIHheNSArIHheNCArIDFcblx0ICAgICAgICAgICAgICAgICAgICBMRlNSID0gKExGU1IgPDwgMSkgXiAweDcxO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICBMRlNSIDw8PSAxO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgUk9VTkRfQ09OU1RBTlRTW2ldID0gWDY0V29yZC5jcmVhdGUocm91bmRDb25zdGFudE1zdywgcm91bmRDb25zdGFudExzdyk7XG5cdCAgICAgICAgfVxuXHQgICAgfSgpKTtcblxuXHQgICAgLy8gUmV1c2FibGUgb2JqZWN0cyBmb3IgdGVtcG9yYXJ5IHZhbHVlc1xuXHQgICAgdmFyIFQgPSBbXTtcblx0ICAgIChmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAyNTsgaSsrKSB7XG5cdCAgICAgICAgICAgIFRbaV0gPSBYNjRXb3JkLmNyZWF0ZSgpO1xuXHQgICAgICAgIH1cblx0ICAgIH0oKSk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogU0hBLTMgaGFzaCBhbGdvcml0aG0uXG5cdCAgICAgKi9cblx0ICAgIHZhciBTSEEzID0gQ19hbGdvLlNIQTMgPSBIYXNoZXIuZXh0ZW5kKHtcblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb25maWd1cmF0aW9uIG9wdGlvbnMuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcHJvcGVydHkge251bWJlcn0gb3V0cHV0TGVuZ3RoXG5cdCAgICAgICAgICogICBUaGUgZGVzaXJlZCBudW1iZXIgb2YgYml0cyBpbiB0aGUgb3V0cHV0IGhhc2guXG5cdCAgICAgICAgICogICBPbmx5IHZhbHVlcyBwZXJtaXR0ZWQgYXJlOiAyMjQsIDI1NiwgMzg0LCA1MTIuXG5cdCAgICAgICAgICogICBEZWZhdWx0OiA1MTJcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBjZmc6IEhhc2hlci5jZmcuZXh0ZW5kKHtcblx0ICAgICAgICAgICAgb3V0cHV0TGVuZ3RoOiA1MTJcblx0ICAgICAgICB9KSxcblxuXHQgICAgICAgIF9kb1Jlc2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBzdGF0ZSA9IHRoaXMuX3N0YXRlID0gW11cblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAyNTsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICBzdGF0ZVtpXSA9IG5ldyBYNjRXb3JkLmluaXQoKTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIHRoaXMuYmxvY2tTaXplID0gKDE2MDAgLSAyICogdGhpcy5jZmcub3V0cHV0TGVuZ3RoKSAvIDMyO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBfZG9Qcm9jZXNzQmxvY2s6IGZ1bmN0aW9uIChNLCBvZmZzZXQpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBzdGF0ZSA9IHRoaXMuX3N0YXRlO1xuXHQgICAgICAgICAgICB2YXIgbkJsb2NrU2l6ZUxhbmVzID0gdGhpcy5ibG9ja1NpemUgLyAyO1xuXG5cdCAgICAgICAgICAgIC8vIEFic29yYlxuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5CbG9ja1NpemVMYW5lczsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgICAgIHZhciBNMmkgID0gTVtvZmZzZXQgKyAyICogaV07XG5cdCAgICAgICAgICAgICAgICB2YXIgTTJpMSA9IE1bb2Zmc2V0ICsgMiAqIGkgKyAxXTtcblxuXHQgICAgICAgICAgICAgICAgLy8gU3dhcCBlbmRpYW5cblx0ICAgICAgICAgICAgICAgIE0yaSA9IChcblx0ICAgICAgICAgICAgICAgICAgICAoKChNMmkgPDwgOCkgIHwgKE0yaSA+Pj4gMjQpKSAmIDB4MDBmZjAwZmYpIHxcblx0ICAgICAgICAgICAgICAgICAgICAoKChNMmkgPDwgMjQpIHwgKE0yaSA+Pj4gOCkpICAmIDB4ZmYwMGZmMDApXG5cdCAgICAgICAgICAgICAgICApO1xuXHQgICAgICAgICAgICAgICAgTTJpMSA9IChcblx0ICAgICAgICAgICAgICAgICAgICAoKChNMmkxIDw8IDgpICB8IChNMmkxID4+PiAyNCkpICYgMHgwMGZmMDBmZikgfFxuXHQgICAgICAgICAgICAgICAgICAgICgoKE0yaTEgPDwgMjQpIHwgKE0yaTEgPj4+IDgpKSAgJiAweGZmMDBmZjAwKVxuXHQgICAgICAgICAgICAgICAgKTtcblxuXHQgICAgICAgICAgICAgICAgLy8gQWJzb3JiIG1lc3NhZ2UgaW50byBzdGF0ZVxuXHQgICAgICAgICAgICAgICAgdmFyIGxhbmUgPSBzdGF0ZVtpXTtcblx0ICAgICAgICAgICAgICAgIGxhbmUuaGlnaCBePSBNMmkxO1xuXHQgICAgICAgICAgICAgICAgbGFuZS5sb3cgIF49IE0yaTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIFJvdW5kc1xuXHQgICAgICAgICAgICBmb3IgKHZhciByb3VuZCA9IDA7IHJvdW5kIDwgMjQ7IHJvdW5kKyspIHtcblx0ICAgICAgICAgICAgICAgIC8vIFRoZXRhXG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciB4ID0gMDsgeCA8IDU7IHgrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIC8vIE1peCBjb2x1bW4gbGFuZXNcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgdE1zdyA9IDAsIHRMc3cgPSAwO1xuXHQgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIHkgPSAwOyB5IDwgNTsgeSsrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsYW5lID0gc3RhdGVbeCArIDUgKiB5XTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdE1zdyBePSBsYW5lLmhpZ2g7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHRMc3cgXj0gbGFuZS5sb3c7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgICAgICAgICAgLy8gVGVtcG9yYXJ5IHZhbHVlc1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBUeCA9IFRbeF07XG5cdCAgICAgICAgICAgICAgICAgICAgVHguaGlnaCA9IHRNc3c7XG5cdCAgICAgICAgICAgICAgICAgICAgVHgubG93ICA9IHRMc3c7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciB4ID0gMDsgeCA8IDU7IHgrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBUeDQgPSBUWyh4ICsgNCkgJSA1XTtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgVHgxID0gVFsoeCArIDEpICUgNV07XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIFR4MU1zdyA9IFR4MS5oaWdoO1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBUeDFMc3cgPSBUeDEubG93O1xuXG5cdCAgICAgICAgICAgICAgICAgICAgLy8gTWl4IHN1cnJvdW5kaW5nIGNvbHVtbnNcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgdE1zdyA9IFR4NC5oaWdoIF4gKChUeDFNc3cgPDwgMSkgfCAoVHgxTHN3ID4+PiAzMSkpO1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciB0THN3ID0gVHg0LmxvdyAgXiAoKFR4MUxzdyA8PCAxKSB8IChUeDFNc3cgPj4+IDMxKSk7XG5cdCAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgeSA9IDA7IHkgPCA1OyB5KyspIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxhbmUgPSBzdGF0ZVt4ICsgNSAqIHldO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBsYW5lLmhpZ2ggXj0gdE1zdztcblx0ICAgICAgICAgICAgICAgICAgICAgICAgbGFuZS5sb3cgIF49IHRMc3c7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgICAgICAvLyBSaG8gUGlcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGxhbmVJbmRleCA9IDE7IGxhbmVJbmRleCA8IDI1OyBsYW5lSW5kZXgrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciB0TXN3O1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciB0THN3O1xuXG5cdCAgICAgICAgICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGxhbmUgPSBzdGF0ZVtsYW5lSW5kZXhdO1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBsYW5lTXN3ID0gbGFuZS5oaWdoO1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBsYW5lTHN3ID0gbGFuZS5sb3c7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIHJob09mZnNldCA9IFJIT19PRkZTRVRTW2xhbmVJbmRleF07XG5cblx0ICAgICAgICAgICAgICAgICAgICAvLyBSb3RhdGUgbGFuZXNcblx0ICAgICAgICAgICAgICAgICAgICBpZiAocmhvT2Zmc2V0IDwgMzIpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdE1zdyA9IChsYW5lTXN3IDw8IHJob09mZnNldCkgfCAobGFuZUxzdyA+Pj4gKDMyIC0gcmhvT2Zmc2V0KSk7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHRMc3cgPSAobGFuZUxzdyA8PCByaG9PZmZzZXQpIHwgKGxhbmVNc3cgPj4+ICgzMiAtIHJob09mZnNldCkpO1xuXHQgICAgICAgICAgICAgICAgICAgIH0gZWxzZSAvKiBpZiAocmhvT2Zmc2V0ID49IDMyKSAqLyB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHRNc3cgPSAobGFuZUxzdyA8PCAocmhvT2Zmc2V0IC0gMzIpKSB8IChsYW5lTXN3ID4+PiAoNjQgLSByaG9PZmZzZXQpKTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdExzdyA9IChsYW5lTXN3IDw8IChyaG9PZmZzZXQgLSAzMikpIHwgKGxhbmVMc3cgPj4+ICg2NCAtIHJob09mZnNldCkpO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAgICAgICAgIC8vIFRyYW5zcG9zZSBsYW5lc1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBUUGlMYW5lID0gVFtQSV9JTkRFWEVTW2xhbmVJbmRleF1dO1xuXHQgICAgICAgICAgICAgICAgICAgIFRQaUxhbmUuaGlnaCA9IHRNc3c7XG5cdCAgICAgICAgICAgICAgICAgICAgVFBpTGFuZS5sb3cgID0gdExzdztcblx0ICAgICAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAgICAgLy8gUmhvIHBpIGF0IHggPSB5ID0gMFxuXHQgICAgICAgICAgICAgICAgdmFyIFQwID0gVFswXTtcblx0ICAgICAgICAgICAgICAgIHZhciBzdGF0ZTAgPSBzdGF0ZVswXTtcblx0ICAgICAgICAgICAgICAgIFQwLmhpZ2ggPSBzdGF0ZTAuaGlnaDtcblx0ICAgICAgICAgICAgICAgIFQwLmxvdyAgPSBzdGF0ZTAubG93O1xuXG5cdCAgICAgICAgICAgICAgICAvLyBDaGlcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIHggPSAwOyB4IDwgNTsgeCsrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgeSA9IDA7IHkgPCA1OyB5KyspIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsYW5lSW5kZXggPSB4ICsgNSAqIHk7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsYW5lID0gc3RhdGVbbGFuZUluZGV4XTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdmFyIFRMYW5lID0gVFtsYW5lSW5kZXhdO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB2YXIgVHgxTGFuZSA9IFRbKCh4ICsgMSkgJSA1KSArIDUgKiB5XTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdmFyIFR4MkxhbmUgPSBUWygoeCArIDIpICUgNSkgKyA1ICogeV07XG5cblx0ICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWl4IHJvd3Ncblx0ICAgICAgICAgICAgICAgICAgICAgICAgbGFuZS5oaWdoID0gVExhbmUuaGlnaCBeICh+VHgxTGFuZS5oaWdoICYgVHgyTGFuZS5oaWdoKTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgbGFuZS5sb3cgID0gVExhbmUubG93ICBeICh+VHgxTGFuZS5sb3cgICYgVHgyTGFuZS5sb3cpO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAgICAgLy8gSW90YVxuXHQgICAgICAgICAgICAgICAgdmFyIGxhbmUgPSBzdGF0ZVswXTtcblx0ICAgICAgICAgICAgICAgIHZhciByb3VuZENvbnN0YW50ID0gUk9VTkRfQ09OU1RBTlRTW3JvdW5kXTtcblx0ICAgICAgICAgICAgICAgIGxhbmUuaGlnaCBePSByb3VuZENvbnN0YW50LmhpZ2g7XG5cdCAgICAgICAgICAgICAgICBsYW5lLmxvdyAgXj0gcm91bmRDb25zdGFudC5sb3c7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgX2RvRmluYWxpemU6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBkYXRhID0gdGhpcy5fZGF0YTtcblx0ICAgICAgICAgICAgdmFyIGRhdGFXb3JkcyA9IGRhdGEud29yZHM7XG5cdCAgICAgICAgICAgIHZhciBuQml0c1RvdGFsID0gdGhpcy5fbkRhdGFCeXRlcyAqIDg7XG5cdCAgICAgICAgICAgIHZhciBuQml0c0xlZnQgPSBkYXRhLnNpZ0J5dGVzICogODtcblx0ICAgICAgICAgICAgdmFyIGJsb2NrU2l6ZUJpdHMgPSB0aGlzLmJsb2NrU2l6ZSAqIDMyO1xuXG5cdCAgICAgICAgICAgIC8vIEFkZCBwYWRkaW5nXG5cdCAgICAgICAgICAgIGRhdGFXb3Jkc1tuQml0c0xlZnQgPj4+IDVdIHw9IDB4MSA8PCAoMjQgLSBuQml0c0xlZnQgJSAzMik7XG5cdCAgICAgICAgICAgIGRhdGFXb3Jkc1soKE1hdGguY2VpbCgobkJpdHNMZWZ0ICsgMSkgLyBibG9ja1NpemVCaXRzKSAqIGJsb2NrU2l6ZUJpdHMpID4+PiA1KSAtIDFdIHw9IDB4ODA7XG5cdCAgICAgICAgICAgIGRhdGEuc2lnQnl0ZXMgPSBkYXRhV29yZHMubGVuZ3RoICogNDtcblxuXHQgICAgICAgICAgICAvLyBIYXNoIGZpbmFsIGJsb2Nrc1xuXHQgICAgICAgICAgICB0aGlzLl9wcm9jZXNzKCk7XG5cblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBzdGF0ZSA9IHRoaXMuX3N0YXRlO1xuXHQgICAgICAgICAgICB2YXIgb3V0cHV0TGVuZ3RoQnl0ZXMgPSB0aGlzLmNmZy5vdXRwdXRMZW5ndGggLyA4O1xuXHQgICAgICAgICAgICB2YXIgb3V0cHV0TGVuZ3RoTGFuZXMgPSBvdXRwdXRMZW5ndGhCeXRlcyAvIDg7XG5cblx0ICAgICAgICAgICAgLy8gU3F1ZWV6ZVxuXHQgICAgICAgICAgICB2YXIgaGFzaFdvcmRzID0gW107XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb3V0cHV0TGVuZ3RoTGFuZXM7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgICAgICB2YXIgbGFuZSA9IHN0YXRlW2ldO1xuXHQgICAgICAgICAgICAgICAgdmFyIGxhbmVNc3cgPSBsYW5lLmhpZ2g7XG5cdCAgICAgICAgICAgICAgICB2YXIgbGFuZUxzdyA9IGxhbmUubG93O1xuXG5cdCAgICAgICAgICAgICAgICAvLyBTd2FwIGVuZGlhblxuXHQgICAgICAgICAgICAgICAgbGFuZU1zdyA9IChcblx0ICAgICAgICAgICAgICAgICAgICAoKChsYW5lTXN3IDw8IDgpICB8IChsYW5lTXN3ID4+PiAyNCkpICYgMHgwMGZmMDBmZikgfFxuXHQgICAgICAgICAgICAgICAgICAgICgoKGxhbmVNc3cgPDwgMjQpIHwgKGxhbmVNc3cgPj4+IDgpKSAgJiAweGZmMDBmZjAwKVxuXHQgICAgICAgICAgICAgICAgKTtcblx0ICAgICAgICAgICAgICAgIGxhbmVMc3cgPSAoXG5cdCAgICAgICAgICAgICAgICAgICAgKCgobGFuZUxzdyA8PCA4KSAgfCAobGFuZUxzdyA+Pj4gMjQpKSAmIDB4MDBmZjAwZmYpIHxcblx0ICAgICAgICAgICAgICAgICAgICAoKChsYW5lTHN3IDw8IDI0KSB8IChsYW5lTHN3ID4+PiA4KSkgICYgMHhmZjAwZmYwMClcblx0ICAgICAgICAgICAgICAgICk7XG5cblx0ICAgICAgICAgICAgICAgIC8vIFNxdWVlemUgc3RhdGUgdG8gcmV0cmlldmUgaGFzaFxuXHQgICAgICAgICAgICAgICAgaGFzaFdvcmRzLnB1c2gobGFuZUxzdyk7XG5cdCAgICAgICAgICAgICAgICBoYXNoV29yZHMucHVzaChsYW5lTXN3KTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIFJldHVybiBmaW5hbCBjb21wdXRlZCBoYXNoXG5cdCAgICAgICAgICAgIHJldHVybiBuZXcgV29yZEFycmF5LmluaXQoaGFzaFdvcmRzLCBvdXRwdXRMZW5ndGhCeXRlcyk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBjbG9uZSA9IEhhc2hlci5jbG9uZS5jYWxsKHRoaXMpO1xuXG5cdCAgICAgICAgICAgIHZhciBzdGF0ZSA9IGNsb25lLl9zdGF0ZSA9IHRoaXMuX3N0YXRlLnNsaWNlKDApO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDI1OyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHN0YXRlW2ldID0gc3RhdGVbaV0uY2xvbmUoKTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIHJldHVybiBjbG9uZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBTaG9ydGN1dCBmdW5jdGlvbiB0byB0aGUgaGFzaGVyJ3Mgb2JqZWN0IGludGVyZmFjZS5cblx0ICAgICAqXG5cdCAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gaGFzaC5cblx0ICAgICAqXG5cdCAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSBoYXNoLlxuXHQgICAgICpcblx0ICAgICAqIEBzdGF0aWNcblx0ICAgICAqXG5cdCAgICAgKiBAZXhhbXBsZVxuXHQgICAgICpcblx0ICAgICAqICAgICB2YXIgaGFzaCA9IENyeXB0b0pTLlNIQTMoJ21lc3NhZ2UnKTtcblx0ICAgICAqICAgICB2YXIgaGFzaCA9IENyeXB0b0pTLlNIQTMod29yZEFycmF5KTtcblx0ICAgICAqL1xuXHQgICAgQy5TSEEzID0gSGFzaGVyLl9jcmVhdGVIZWxwZXIoU0hBMyk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogU2hvcnRjdXQgZnVuY3Rpb24gdG8gdGhlIEhNQUMncyBvYmplY3QgaW50ZXJmYWNlLlxuXHQgICAgICpcblx0ICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gbWVzc2FnZSBUaGUgbWVzc2FnZSB0byBoYXNoLlxuXHQgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBrZXkgVGhlIHNlY3JldCBrZXkuXG5cdCAgICAgKlxuXHQgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgSE1BQy5cblx0ICAgICAqXG5cdCAgICAgKiBAc3RhdGljXG5cdCAgICAgKlxuXHQgICAgICogQGV4YW1wbGVcblx0ICAgICAqXG5cdCAgICAgKiAgICAgdmFyIGhtYWMgPSBDcnlwdG9KUy5IbWFjU0hBMyhtZXNzYWdlLCBrZXkpO1xuXHQgICAgICovXG5cdCAgICBDLkhtYWNTSEEzID0gSGFzaGVyLl9jcmVhdGVIbWFjSGVscGVyKFNIQTMpO1xuXHR9KE1hdGgpKTtcblxuXG5cdChmdW5jdGlvbiAoKSB7XG5cdCAgICAvLyBTaG9ydGN1dHNcblx0ICAgIHZhciBDID0gQ3J5cHRvSlM7XG5cdCAgICB2YXIgQ19saWIgPSBDLmxpYjtcblx0ICAgIHZhciBIYXNoZXIgPSBDX2xpYi5IYXNoZXI7XG5cdCAgICB2YXIgQ194NjQgPSBDLng2NDtcblx0ICAgIHZhciBYNjRXb3JkID0gQ194NjQuV29yZDtcblx0ICAgIHZhciBYNjRXb3JkQXJyYXkgPSBDX3g2NC5Xb3JkQXJyYXk7XG5cdCAgICB2YXIgQ19hbGdvID0gQy5hbGdvO1xuXG5cdCAgICBmdW5jdGlvbiBYNjRXb3JkX2NyZWF0ZSgpIHtcblx0ICAgICAgICByZXR1cm4gWDY0V29yZC5jcmVhdGUuYXBwbHkoWDY0V29yZCwgYXJndW1lbnRzKTtcblx0ICAgIH1cblxuXHQgICAgLy8gQ29uc3RhbnRzXG5cdCAgICB2YXIgSyA9IFtcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweDQyOGEyZjk4LCAweGQ3MjhhZTIyKSwgWDY0V29yZF9jcmVhdGUoMHg3MTM3NDQ5MSwgMHgyM2VmNjVjZCksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHhiNWMwZmJjZiwgMHhlYzRkM2IyZiksIFg2NFdvcmRfY3JlYXRlKDB4ZTliNWRiYTUsIDB4ODE4OWRiYmMpLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4Mzk1NmMyNWIsIDB4ZjM0OGI1MzgpLCBYNjRXb3JkX2NyZWF0ZSgweDU5ZjExMWYxLCAweGI2MDVkMDE5KSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweDkyM2Y4MmE0LCAweGFmMTk0ZjliKSwgWDY0V29yZF9jcmVhdGUoMHhhYjFjNWVkNSwgMHhkYTZkODExOCksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHhkODA3YWE5OCwgMHhhMzAzMDI0MiksIFg2NFdvcmRfY3JlYXRlKDB4MTI4MzViMDEsIDB4NDU3MDZmYmUpLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4MjQzMTg1YmUsIDB4NGVlNGIyOGMpLCBYNjRXb3JkX2NyZWF0ZSgweDU1MGM3ZGMzLCAweGQ1ZmZiNGUyKSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweDcyYmU1ZDc0LCAweGYyN2I4OTZmKSwgWDY0V29yZF9jcmVhdGUoMHg4MGRlYjFmZSwgMHgzYjE2OTZiMSksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHg5YmRjMDZhNywgMHgyNWM3MTIzNSksIFg2NFdvcmRfY3JlYXRlKDB4YzE5YmYxNzQsIDB4Y2Y2OTI2OTQpLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4ZTQ5YjY5YzEsIDB4OWVmMTRhZDIpLCBYNjRXb3JkX2NyZWF0ZSgweGVmYmU0Nzg2LCAweDM4NGYyNWUzKSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweDBmYzE5ZGM2LCAweDhiOGNkNWI1KSwgWDY0V29yZF9jcmVhdGUoMHgyNDBjYTFjYywgMHg3N2FjOWM2NSksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHgyZGU5MmM2ZiwgMHg1OTJiMDI3NSksIFg2NFdvcmRfY3JlYXRlKDB4NGE3NDg0YWEsIDB4NmVhNmU0ODMpLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4NWNiMGE5ZGMsIDB4YmQ0MWZiZDQpLCBYNjRXb3JkX2NyZWF0ZSgweDc2Zjk4OGRhLCAweDgzMTE1M2I1KSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweDk4M2U1MTUyLCAweGVlNjZkZmFiKSwgWDY0V29yZF9jcmVhdGUoMHhhODMxYzY2ZCwgMHgyZGI0MzIxMCksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHhiMDAzMjdjOCwgMHg5OGZiMjEzZiksIFg2NFdvcmRfY3JlYXRlKDB4YmY1OTdmYzcsIDB4YmVlZjBlZTQpLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4YzZlMDBiZjMsIDB4M2RhODhmYzIpLCBYNjRXb3JkX2NyZWF0ZSgweGQ1YTc5MTQ3LCAweDkzMGFhNzI1KSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweDA2Y2E2MzUxLCAweGUwMDM4MjZmKSwgWDY0V29yZF9jcmVhdGUoMHgxNDI5Mjk2NywgMHgwYTBlNmU3MCksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHgyN2I3MGE4NSwgMHg0NmQyMmZmYyksIFg2NFdvcmRfY3JlYXRlKDB4MmUxYjIxMzgsIDB4NWMyNmM5MjYpLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4NGQyYzZkZmMsIDB4NWFjNDJhZWQpLCBYNjRXb3JkX2NyZWF0ZSgweDUzMzgwZDEzLCAweDlkOTViM2RmKSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweDY1MGE3MzU0LCAweDhiYWY2M2RlKSwgWDY0V29yZF9jcmVhdGUoMHg3NjZhMGFiYiwgMHgzYzc3YjJhOCksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHg4MWMyYzkyZSwgMHg0N2VkYWVlNiksIFg2NFdvcmRfY3JlYXRlKDB4OTI3MjJjODUsIDB4MTQ4MjM1M2IpLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4YTJiZmU4YTEsIDB4NGNmMTAzNjQpLCBYNjRXb3JkX2NyZWF0ZSgweGE4MWE2NjRiLCAweGJjNDIzMDAxKSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweGMyNGI4YjcwLCAweGQwZjg5NzkxKSwgWDY0V29yZF9jcmVhdGUoMHhjNzZjNTFhMywgMHgwNjU0YmUzMCksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHhkMTkyZTgxOSwgMHhkNmVmNTIxOCksIFg2NFdvcmRfY3JlYXRlKDB4ZDY5OTA2MjQsIDB4NTU2NWE5MTApLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4ZjQwZTM1ODUsIDB4NTc3MTIwMmEpLCBYNjRXb3JkX2NyZWF0ZSgweDEwNmFhMDcwLCAweDMyYmJkMWI4KSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweDE5YTRjMTE2LCAweGI4ZDJkMGM4KSwgWDY0V29yZF9jcmVhdGUoMHgxZTM3NmMwOCwgMHg1MTQxYWI1MyksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHgyNzQ4Nzc0YywgMHhkZjhlZWI5OSksIFg2NFdvcmRfY3JlYXRlKDB4MzRiMGJjYjUsIDB4ZTE5YjQ4YTgpLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4MzkxYzBjYjMsIDB4YzVjOTVhNjMpLCBYNjRXb3JkX2NyZWF0ZSgweDRlZDhhYTRhLCAweGUzNDE4YWNiKSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweDViOWNjYTRmLCAweDc3NjNlMzczKSwgWDY0V29yZF9jcmVhdGUoMHg2ODJlNmZmMywgMHhkNmIyYjhhMyksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHg3NDhmODJlZSwgMHg1ZGVmYjJmYyksIFg2NFdvcmRfY3JlYXRlKDB4NzhhNTYzNmYsIDB4NDMxNzJmNjApLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4ODRjODc4MTQsIDB4YTFmMGFiNzIpLCBYNjRXb3JkX2NyZWF0ZSgweDhjYzcwMjA4LCAweDFhNjQzOWVjKSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweDkwYmVmZmZhLCAweDIzNjMxZTI4KSwgWDY0V29yZF9jcmVhdGUoMHhhNDUwNmNlYiwgMHhkZTgyYmRlOSksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHhiZWY5YTNmNywgMHhiMmM2NzkxNSksIFg2NFdvcmRfY3JlYXRlKDB4YzY3MTc4ZjIsIDB4ZTM3MjUzMmIpLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4Y2EyNzNlY2UsIDB4ZWEyNjYxOWMpLCBYNjRXb3JkX2NyZWF0ZSgweGQxODZiOGM3LCAweDIxYzBjMjA3KSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweGVhZGE3ZGQ2LCAweGNkZTBlYjFlKSwgWDY0V29yZF9jcmVhdGUoMHhmNTdkNGY3ZiwgMHhlZTZlZDE3OCksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHgwNmYwNjdhYSwgMHg3MjE3NmZiYSksIFg2NFdvcmRfY3JlYXRlKDB4MGE2MzdkYzUsIDB4YTJjODk4YTYpLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4MTEzZjk4MDQsIDB4YmVmOTBkYWUpLCBYNjRXb3JkX2NyZWF0ZSgweDFiNzEwYjM1LCAweDEzMWM0NzFiKSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweDI4ZGI3N2Y1LCAweDIzMDQ3ZDg0KSwgWDY0V29yZF9jcmVhdGUoMHgzMmNhYWI3YiwgMHg0MGM3MjQ5MyksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHgzYzllYmUwYSwgMHgxNWM5YmViYyksIFg2NFdvcmRfY3JlYXRlKDB4NDMxZDY3YzQsIDB4OWMxMDBkNGMpLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4NGNjNWQ0YmUsIDB4Y2IzZTQyYjYpLCBYNjRXb3JkX2NyZWF0ZSgweDU5N2YyOTljLCAweGZjNjU3ZTJhKSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweDVmY2I2ZmFiLCAweDNhZDZmYWVjKSwgWDY0V29yZF9jcmVhdGUoMHg2YzQ0MTk4YywgMHg0YTQ3NTgxNylcblx0ICAgIF07XG5cblx0ICAgIC8vIFJldXNhYmxlIG9iamVjdHNcblx0ICAgIHZhciBXID0gW107XG5cdCAgICAoZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgODA7IGkrKykge1xuXHQgICAgICAgICAgICBXW2ldID0gWDY0V29yZF9jcmVhdGUoKTtcblx0ICAgICAgICB9XG5cdCAgICB9KCkpO1xuXG5cdCAgICAvKipcblx0ICAgICAqIFNIQS01MTIgaGFzaCBhbGdvcml0aG0uXG5cdCAgICAgKi9cblx0ICAgIHZhciBTSEE1MTIgPSBDX2FsZ28uU0hBNTEyID0gSGFzaGVyLmV4dGVuZCh7XG5cdCAgICAgICAgX2RvUmVzZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdGhpcy5faGFzaCA9IG5ldyBYNjRXb3JkQXJyYXkuaW5pdChbXG5cdCAgICAgICAgICAgICAgICBuZXcgWDY0V29yZC5pbml0KDB4NmEwOWU2NjcsIDB4ZjNiY2M5MDgpLCBuZXcgWDY0V29yZC5pbml0KDB4YmI2N2FlODUsIDB4ODRjYWE3M2IpLFxuXHQgICAgICAgICAgICAgICAgbmV3IFg2NFdvcmQuaW5pdCgweDNjNmVmMzcyLCAweGZlOTRmODJiKSwgbmV3IFg2NFdvcmQuaW5pdCgweGE1NGZmNTNhLCAweDVmMWQzNmYxKSxcblx0ICAgICAgICAgICAgICAgIG5ldyBYNjRXb3JkLmluaXQoMHg1MTBlNTI3ZiwgMHhhZGU2ODJkMSksIG5ldyBYNjRXb3JkLmluaXQoMHg5YjA1Njg4YywgMHgyYjNlNmMxZiksXG5cdCAgICAgICAgICAgICAgICBuZXcgWDY0V29yZC5pbml0KDB4MWY4M2Q5YWIsIDB4ZmI0MWJkNmIpLCBuZXcgWDY0V29yZC5pbml0KDB4NWJlMGNkMTksIDB4MTM3ZTIxNzkpXG5cdCAgICAgICAgICAgIF0pO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBfZG9Qcm9jZXNzQmxvY2s6IGZ1bmN0aW9uIChNLCBvZmZzZXQpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBIID0gdGhpcy5faGFzaC53b3JkcztcblxuXHQgICAgICAgICAgICB2YXIgSDAgPSBIWzBdO1xuXHQgICAgICAgICAgICB2YXIgSDEgPSBIWzFdO1xuXHQgICAgICAgICAgICB2YXIgSDIgPSBIWzJdO1xuXHQgICAgICAgICAgICB2YXIgSDMgPSBIWzNdO1xuXHQgICAgICAgICAgICB2YXIgSDQgPSBIWzRdO1xuXHQgICAgICAgICAgICB2YXIgSDUgPSBIWzVdO1xuXHQgICAgICAgICAgICB2YXIgSDYgPSBIWzZdO1xuXHQgICAgICAgICAgICB2YXIgSDcgPSBIWzddO1xuXG5cdCAgICAgICAgICAgIHZhciBIMGggPSBIMC5oaWdoO1xuXHQgICAgICAgICAgICB2YXIgSDBsID0gSDAubG93O1xuXHQgICAgICAgICAgICB2YXIgSDFoID0gSDEuaGlnaDtcblx0ICAgICAgICAgICAgdmFyIEgxbCA9IEgxLmxvdztcblx0ICAgICAgICAgICAgdmFyIEgyaCA9IEgyLmhpZ2g7XG5cdCAgICAgICAgICAgIHZhciBIMmwgPSBIMi5sb3c7XG5cdCAgICAgICAgICAgIHZhciBIM2ggPSBIMy5oaWdoO1xuXHQgICAgICAgICAgICB2YXIgSDNsID0gSDMubG93O1xuXHQgICAgICAgICAgICB2YXIgSDRoID0gSDQuaGlnaDtcblx0ICAgICAgICAgICAgdmFyIEg0bCA9IEg0Lmxvdztcblx0ICAgICAgICAgICAgdmFyIEg1aCA9IEg1LmhpZ2g7XG5cdCAgICAgICAgICAgIHZhciBINWwgPSBINS5sb3c7XG5cdCAgICAgICAgICAgIHZhciBINmggPSBINi5oaWdoO1xuXHQgICAgICAgICAgICB2YXIgSDZsID0gSDYubG93O1xuXHQgICAgICAgICAgICB2YXIgSDdoID0gSDcuaGlnaDtcblx0ICAgICAgICAgICAgdmFyIEg3bCA9IEg3LmxvdztcblxuXHQgICAgICAgICAgICAvLyBXb3JraW5nIHZhcmlhYmxlc1xuXHQgICAgICAgICAgICB2YXIgYWggPSBIMGg7XG5cdCAgICAgICAgICAgIHZhciBhbCA9IEgwbDtcblx0ICAgICAgICAgICAgdmFyIGJoID0gSDFoO1xuXHQgICAgICAgICAgICB2YXIgYmwgPSBIMWw7XG5cdCAgICAgICAgICAgIHZhciBjaCA9IEgyaDtcblx0ICAgICAgICAgICAgdmFyIGNsID0gSDJsO1xuXHQgICAgICAgICAgICB2YXIgZGggPSBIM2g7XG5cdCAgICAgICAgICAgIHZhciBkbCA9IEgzbDtcblx0ICAgICAgICAgICAgdmFyIGVoID0gSDRoO1xuXHQgICAgICAgICAgICB2YXIgZWwgPSBINGw7XG5cdCAgICAgICAgICAgIHZhciBmaCA9IEg1aDtcblx0ICAgICAgICAgICAgdmFyIGZsID0gSDVsO1xuXHQgICAgICAgICAgICB2YXIgZ2ggPSBINmg7XG5cdCAgICAgICAgICAgIHZhciBnbCA9IEg2bDtcblx0ICAgICAgICAgICAgdmFyIGhoID0gSDdoO1xuXHQgICAgICAgICAgICB2YXIgaGwgPSBIN2w7XG5cblx0ICAgICAgICAgICAgLy8gUm91bmRzXG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgODA7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgdmFyIFdpbDtcblx0ICAgICAgICAgICAgICAgIHZhciBXaWg7XG5cblx0ICAgICAgICAgICAgICAgIC8vIFNob3J0Y3V0XG5cdCAgICAgICAgICAgICAgICB2YXIgV2kgPSBXW2ldO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBFeHRlbmQgbWVzc2FnZVxuXHQgICAgICAgICAgICAgICAgaWYgKGkgPCAxNikge1xuXHQgICAgICAgICAgICAgICAgICAgIFdpaCA9IFdpLmhpZ2ggPSBNW29mZnNldCArIGkgKiAyXSAgICAgfCAwO1xuXHQgICAgICAgICAgICAgICAgICAgIFdpbCA9IFdpLmxvdyAgPSBNW29mZnNldCArIGkgKiAyICsgMV0gfCAwO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICAvLyBHYW1tYTBcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgZ2FtbWEweCAgPSBXW2kgLSAxNV07XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGdhbW1hMHhoID0gZ2FtbWEweC5oaWdoO1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBnYW1tYTB4bCA9IGdhbW1hMHgubG93O1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBnYW1tYTBoICA9ICgoZ2FtbWEweGggPj4+IDEpIHwgKGdhbW1hMHhsIDw8IDMxKSkgXiAoKGdhbW1hMHhoID4+PiA4KSB8IChnYW1tYTB4bCA8PCAyNCkpIF4gKGdhbW1hMHhoID4+PiA3KTtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgZ2FtbWEwbCAgPSAoKGdhbW1hMHhsID4+PiAxKSB8IChnYW1tYTB4aCA8PCAzMSkpIF4gKChnYW1tYTB4bCA+Pj4gOCkgfCAoZ2FtbWEweGggPDwgMjQpKSBeICgoZ2FtbWEweGwgPj4+IDcpIHwgKGdhbW1hMHhoIDw8IDI1KSk7XG5cblx0ICAgICAgICAgICAgICAgICAgICAvLyBHYW1tYTFcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgZ2FtbWExeCAgPSBXW2kgLSAyXTtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgZ2FtbWExeGggPSBnYW1tYTF4LmhpZ2g7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGdhbW1hMXhsID0gZ2FtbWExeC5sb3c7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGdhbW1hMWggID0gKChnYW1tYTF4aCA+Pj4gMTkpIHwgKGdhbW1hMXhsIDw8IDEzKSkgXiAoKGdhbW1hMXhoIDw8IDMpIHwgKGdhbW1hMXhsID4+PiAyOSkpIF4gKGdhbW1hMXhoID4+PiA2KTtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgZ2FtbWExbCAgPSAoKGdhbW1hMXhsID4+PiAxOSkgfCAoZ2FtbWExeGggPDwgMTMpKSBeICgoZ2FtbWExeGwgPDwgMykgfCAoZ2FtbWExeGggPj4+IDI5KSkgXiAoKGdhbW1hMXhsID4+PiA2KSB8IChnYW1tYTF4aCA8PCAyNikpO1xuXG5cdCAgICAgICAgICAgICAgICAgICAgLy8gV1tpXSA9IGdhbW1hMCArIFdbaSAtIDddICsgZ2FtbWExICsgV1tpIC0gMTZdXG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIFdpNyAgPSBXW2kgLSA3XTtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgV2k3aCA9IFdpNy5oaWdoO1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBXaTdsID0gV2k3LmxvdztcblxuXHQgICAgICAgICAgICAgICAgICAgIHZhciBXaTE2ICA9IFdbaSAtIDE2XTtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgV2kxNmggPSBXaTE2LmhpZ2g7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIFdpMTZsID0gV2kxNi5sb3c7XG5cblx0ICAgICAgICAgICAgICAgICAgICBXaWwgPSBnYW1tYTBsICsgV2k3bDtcblx0ICAgICAgICAgICAgICAgICAgICBXaWggPSBnYW1tYTBoICsgV2k3aCArICgoV2lsID4+PiAwKSA8IChnYW1tYTBsID4+PiAwKSA/IDEgOiAwKTtcblx0ICAgICAgICAgICAgICAgICAgICBXaWwgPSBXaWwgKyBnYW1tYTFsO1xuXHQgICAgICAgICAgICAgICAgICAgIFdpaCA9IFdpaCArIGdhbW1hMWggKyAoKFdpbCA+Pj4gMCkgPCAoZ2FtbWExbCA+Pj4gMCkgPyAxIDogMCk7XG5cdCAgICAgICAgICAgICAgICAgICAgV2lsID0gV2lsICsgV2kxNmw7XG5cdCAgICAgICAgICAgICAgICAgICAgV2loID0gV2loICsgV2kxNmggKyAoKFdpbCA+Pj4gMCkgPCAoV2kxNmwgPj4+IDApID8gMSA6IDApO1xuXG5cdCAgICAgICAgICAgICAgICAgICAgV2kuaGlnaCA9IFdpaDtcblx0ICAgICAgICAgICAgICAgICAgICBXaS5sb3cgID0gV2lsO1xuXHQgICAgICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgICAgICB2YXIgY2hoICA9IChlaCAmIGZoKSBeICh+ZWggJiBnaCk7XG5cdCAgICAgICAgICAgICAgICB2YXIgY2hsICA9IChlbCAmIGZsKSBeICh+ZWwgJiBnbCk7XG5cdCAgICAgICAgICAgICAgICB2YXIgbWFqaCA9IChhaCAmIGJoKSBeIChhaCAmIGNoKSBeIChiaCAmIGNoKTtcblx0ICAgICAgICAgICAgICAgIHZhciBtYWpsID0gKGFsICYgYmwpIF4gKGFsICYgY2wpIF4gKGJsICYgY2wpO1xuXG5cdCAgICAgICAgICAgICAgICB2YXIgc2lnbWEwaCA9ICgoYWggPj4+IDI4KSB8IChhbCA8PCA0KSkgIF4gKChhaCA8PCAzMCkgIHwgKGFsID4+PiAyKSkgXiAoKGFoIDw8IDI1KSB8IChhbCA+Pj4gNykpO1xuXHQgICAgICAgICAgICAgICAgdmFyIHNpZ21hMGwgPSAoKGFsID4+PiAyOCkgfCAoYWggPDwgNCkpICBeICgoYWwgPDwgMzApICB8IChhaCA+Pj4gMikpIF4gKChhbCA8PCAyNSkgfCAoYWggPj4+IDcpKTtcblx0ICAgICAgICAgICAgICAgIHZhciBzaWdtYTFoID0gKChlaCA+Pj4gMTQpIHwgKGVsIDw8IDE4KSkgXiAoKGVoID4+PiAxOCkgfCAoZWwgPDwgMTQpKSBeICgoZWggPDwgMjMpIHwgKGVsID4+PiA5KSk7XG5cdCAgICAgICAgICAgICAgICB2YXIgc2lnbWExbCA9ICgoZWwgPj4+IDE0KSB8IChlaCA8PCAxOCkpIF4gKChlbCA+Pj4gMTgpIHwgKGVoIDw8IDE0KSkgXiAoKGVsIDw8IDIzKSB8IChlaCA+Pj4gOSkpO1xuXG5cdCAgICAgICAgICAgICAgICAvLyB0MSA9IGggKyBzaWdtYTEgKyBjaCArIEtbaV0gKyBXW2ldXG5cdCAgICAgICAgICAgICAgICB2YXIgS2kgID0gS1tpXTtcblx0ICAgICAgICAgICAgICAgIHZhciBLaWggPSBLaS5oaWdoO1xuXHQgICAgICAgICAgICAgICAgdmFyIEtpbCA9IEtpLmxvdztcblxuXHQgICAgICAgICAgICAgICAgdmFyIHQxbCA9IGhsICsgc2lnbWExbDtcblx0ICAgICAgICAgICAgICAgIHZhciB0MWggPSBoaCArIHNpZ21hMWggKyAoKHQxbCA+Pj4gMCkgPCAoaGwgPj4+IDApID8gMSA6IDApO1xuXHQgICAgICAgICAgICAgICAgdmFyIHQxbCA9IHQxbCArIGNobDtcblx0ICAgICAgICAgICAgICAgIHZhciB0MWggPSB0MWggKyBjaGggKyAoKHQxbCA+Pj4gMCkgPCAoY2hsID4+PiAwKSA/IDEgOiAwKTtcblx0ICAgICAgICAgICAgICAgIHZhciB0MWwgPSB0MWwgKyBLaWw7XG5cdCAgICAgICAgICAgICAgICB2YXIgdDFoID0gdDFoICsgS2loICsgKCh0MWwgPj4+IDApIDwgKEtpbCA+Pj4gMCkgPyAxIDogMCk7XG5cdCAgICAgICAgICAgICAgICB2YXIgdDFsID0gdDFsICsgV2lsO1xuXHQgICAgICAgICAgICAgICAgdmFyIHQxaCA9IHQxaCArIFdpaCArICgodDFsID4+PiAwKSA8IChXaWwgPj4+IDApID8gMSA6IDApO1xuXG5cdCAgICAgICAgICAgICAgICAvLyB0MiA9IHNpZ21hMCArIG1halxuXHQgICAgICAgICAgICAgICAgdmFyIHQybCA9IHNpZ21hMGwgKyBtYWpsO1xuXHQgICAgICAgICAgICAgICAgdmFyIHQyaCA9IHNpZ21hMGggKyBtYWpoICsgKCh0MmwgPj4+IDApIDwgKHNpZ21hMGwgPj4+IDApID8gMSA6IDApO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBVcGRhdGUgd29ya2luZyB2YXJpYWJsZXNcblx0ICAgICAgICAgICAgICAgIGhoID0gZ2g7XG5cdCAgICAgICAgICAgICAgICBobCA9IGdsO1xuXHQgICAgICAgICAgICAgICAgZ2ggPSBmaDtcblx0ICAgICAgICAgICAgICAgIGdsID0gZmw7XG5cdCAgICAgICAgICAgICAgICBmaCA9IGVoO1xuXHQgICAgICAgICAgICAgICAgZmwgPSBlbDtcblx0ICAgICAgICAgICAgICAgIGVsID0gKGRsICsgdDFsKSB8IDA7XG5cdCAgICAgICAgICAgICAgICBlaCA9IChkaCArIHQxaCArICgoZWwgPj4+IDApIDwgKGRsID4+PiAwKSA/IDEgOiAwKSkgfCAwO1xuXHQgICAgICAgICAgICAgICAgZGggPSBjaDtcblx0ICAgICAgICAgICAgICAgIGRsID0gY2w7XG5cdCAgICAgICAgICAgICAgICBjaCA9IGJoO1xuXHQgICAgICAgICAgICAgICAgY2wgPSBibDtcblx0ICAgICAgICAgICAgICAgIGJoID0gYWg7XG5cdCAgICAgICAgICAgICAgICBibCA9IGFsO1xuXHQgICAgICAgICAgICAgICAgYWwgPSAodDFsICsgdDJsKSB8IDA7XG5cdCAgICAgICAgICAgICAgICBhaCA9ICh0MWggKyB0MmggKyAoKGFsID4+PiAwKSA8ICh0MWwgPj4+IDApID8gMSA6IDApKSB8IDA7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBJbnRlcm1lZGlhdGUgaGFzaCB2YWx1ZVxuXHQgICAgICAgICAgICBIMGwgPSBIMC5sb3cgID0gKEgwbCArIGFsKTtcblx0ICAgICAgICAgICAgSDAuaGlnaCA9IChIMGggKyBhaCArICgoSDBsID4+PiAwKSA8IChhbCA+Pj4gMCkgPyAxIDogMCkpO1xuXHQgICAgICAgICAgICBIMWwgPSBIMS5sb3cgID0gKEgxbCArIGJsKTtcblx0ICAgICAgICAgICAgSDEuaGlnaCA9IChIMWggKyBiaCArICgoSDFsID4+PiAwKSA8IChibCA+Pj4gMCkgPyAxIDogMCkpO1xuXHQgICAgICAgICAgICBIMmwgPSBIMi5sb3cgID0gKEgybCArIGNsKTtcblx0ICAgICAgICAgICAgSDIuaGlnaCA9IChIMmggKyBjaCArICgoSDJsID4+PiAwKSA8IChjbCA+Pj4gMCkgPyAxIDogMCkpO1xuXHQgICAgICAgICAgICBIM2wgPSBIMy5sb3cgID0gKEgzbCArIGRsKTtcblx0ICAgICAgICAgICAgSDMuaGlnaCA9IChIM2ggKyBkaCArICgoSDNsID4+PiAwKSA8IChkbCA+Pj4gMCkgPyAxIDogMCkpO1xuXHQgICAgICAgICAgICBINGwgPSBINC5sb3cgID0gKEg0bCArIGVsKTtcblx0ICAgICAgICAgICAgSDQuaGlnaCA9IChINGggKyBlaCArICgoSDRsID4+PiAwKSA8IChlbCA+Pj4gMCkgPyAxIDogMCkpO1xuXHQgICAgICAgICAgICBINWwgPSBINS5sb3cgID0gKEg1bCArIGZsKTtcblx0ICAgICAgICAgICAgSDUuaGlnaCA9IChINWggKyBmaCArICgoSDVsID4+PiAwKSA8IChmbCA+Pj4gMCkgPyAxIDogMCkpO1xuXHQgICAgICAgICAgICBINmwgPSBINi5sb3cgID0gKEg2bCArIGdsKTtcblx0ICAgICAgICAgICAgSDYuaGlnaCA9IChINmggKyBnaCArICgoSDZsID4+PiAwKSA8IChnbCA+Pj4gMCkgPyAxIDogMCkpO1xuXHQgICAgICAgICAgICBIN2wgPSBINy5sb3cgID0gKEg3bCArIGhsKTtcblx0ICAgICAgICAgICAgSDcuaGlnaCA9IChIN2ggKyBoaCArICgoSDdsID4+PiAwKSA8IChobCA+Pj4gMCkgPyAxIDogMCkpO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBfZG9GaW5hbGl6ZTogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIGRhdGEgPSB0aGlzLl9kYXRhO1xuXHQgICAgICAgICAgICB2YXIgZGF0YVdvcmRzID0gZGF0YS53b3JkcztcblxuXHQgICAgICAgICAgICB2YXIgbkJpdHNUb3RhbCA9IHRoaXMuX25EYXRhQnl0ZXMgKiA4O1xuXHQgICAgICAgICAgICB2YXIgbkJpdHNMZWZ0ID0gZGF0YS5zaWdCeXRlcyAqIDg7XG5cblx0ICAgICAgICAgICAgLy8gQWRkIHBhZGRpbmdcblx0ICAgICAgICAgICAgZGF0YVdvcmRzW25CaXRzTGVmdCA+Pj4gNV0gfD0gMHg4MCA8PCAoMjQgLSBuQml0c0xlZnQgJSAzMik7XG5cdCAgICAgICAgICAgIGRhdGFXb3Jkc1soKChuQml0c0xlZnQgKyAxMjgpID4+PiAxMCkgPDwgNSkgKyAzMF0gPSBNYXRoLmZsb29yKG5CaXRzVG90YWwgLyAweDEwMDAwMDAwMCk7XG5cdCAgICAgICAgICAgIGRhdGFXb3Jkc1soKChuQml0c0xlZnQgKyAxMjgpID4+PiAxMCkgPDwgNSkgKyAzMV0gPSBuQml0c1RvdGFsO1xuXHQgICAgICAgICAgICBkYXRhLnNpZ0J5dGVzID0gZGF0YVdvcmRzLmxlbmd0aCAqIDQ7XG5cblx0ICAgICAgICAgICAgLy8gSGFzaCBmaW5hbCBibG9ja3Ncblx0ICAgICAgICAgICAgdGhpcy5fcHJvY2VzcygpO1xuXG5cdCAgICAgICAgICAgIC8vIENvbnZlcnQgaGFzaCB0byAzMi1iaXQgd29yZCBhcnJheSBiZWZvcmUgcmV0dXJuaW5nXG5cdCAgICAgICAgICAgIHZhciBoYXNoID0gdGhpcy5faGFzaC50b1gzMigpO1xuXG5cdCAgICAgICAgICAgIC8vIFJldHVybiBmaW5hbCBjb21wdXRlZCBoYXNoXG5cdCAgICAgICAgICAgIHJldHVybiBoYXNoO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBjbG9uZTogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgY2xvbmUgPSBIYXNoZXIuY2xvbmUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAgICAgY2xvbmUuX2hhc2ggPSB0aGlzLl9oYXNoLmNsb25lKCk7XG5cblx0ICAgICAgICAgICAgcmV0dXJuIGNsb25lO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBibG9ja1NpemU6IDEwMjQvMzJcblx0ICAgIH0pO1xuXG5cdCAgICAvKipcblx0ICAgICAqIFNob3J0Y3V0IGZ1bmN0aW9uIHRvIHRoZSBoYXNoZXIncyBvYmplY3QgaW50ZXJmYWNlLlxuXHQgICAgICpcblx0ICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gbWVzc2FnZSBUaGUgbWVzc2FnZSB0byBoYXNoLlxuXHQgICAgICpcblx0ICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIGhhc2guXG5cdCAgICAgKlxuXHQgICAgICogQHN0YXRpY1xuXHQgICAgICpcblx0ICAgICAqIEBleGFtcGxlXG5cdCAgICAgKlxuXHQgICAgICogICAgIHZhciBoYXNoID0gQ3J5cHRvSlMuU0hBNTEyKCdtZXNzYWdlJyk7XG5cdCAgICAgKiAgICAgdmFyIGhhc2ggPSBDcnlwdG9KUy5TSEE1MTIod29yZEFycmF5KTtcblx0ICAgICAqL1xuXHQgICAgQy5TSEE1MTIgPSBIYXNoZXIuX2NyZWF0ZUhlbHBlcihTSEE1MTIpO1xuXG5cdCAgICAvKipcblx0ICAgICAqIFNob3J0Y3V0IGZ1bmN0aW9uIHRvIHRoZSBITUFDJ3Mgb2JqZWN0IGludGVyZmFjZS5cblx0ICAgICAqXG5cdCAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gaGFzaC5cblx0ICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30ga2V5IFRoZSBzZWNyZXQga2V5LlxuXHQgICAgICpcblx0ICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIEhNQUMuXG5cdCAgICAgKlxuXHQgICAgICogQHN0YXRpY1xuXHQgICAgICpcblx0ICAgICAqIEBleGFtcGxlXG5cdCAgICAgKlxuXHQgICAgICogICAgIHZhciBobWFjID0gQ3J5cHRvSlMuSG1hY1NIQTUxMihtZXNzYWdlLCBrZXkpO1xuXHQgICAgICovXG5cdCAgICBDLkhtYWNTSEE1MTIgPSBIYXNoZXIuX2NyZWF0ZUhtYWNIZWxwZXIoU0hBNTEyKTtcblx0fSgpKTtcblxuXG5cdChmdW5jdGlvbiAoKSB7XG5cdCAgICAvLyBTaG9ydGN1dHNcblx0ICAgIHZhciBDID0gQ3J5cHRvSlM7XG5cdCAgICB2YXIgQ194NjQgPSBDLng2NDtcblx0ICAgIHZhciBYNjRXb3JkID0gQ194NjQuV29yZDtcblx0ICAgIHZhciBYNjRXb3JkQXJyYXkgPSBDX3g2NC5Xb3JkQXJyYXk7XG5cdCAgICB2YXIgQ19hbGdvID0gQy5hbGdvO1xuXHQgICAgdmFyIFNIQTUxMiA9IENfYWxnby5TSEE1MTI7XG5cblx0ICAgIC8qKlxuXHQgICAgICogU0hBLTM4NCBoYXNoIGFsZ29yaXRobS5cblx0ICAgICAqL1xuXHQgICAgdmFyIFNIQTM4NCA9IENfYWxnby5TSEEzODQgPSBTSEE1MTIuZXh0ZW5kKHtcblx0ICAgICAgICBfZG9SZXNldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB0aGlzLl9oYXNoID0gbmV3IFg2NFdvcmRBcnJheS5pbml0KFtcblx0ICAgICAgICAgICAgICAgIG5ldyBYNjRXb3JkLmluaXQoMHhjYmJiOWQ1ZCwgMHhjMTA1OWVkOCksIG5ldyBYNjRXb3JkLmluaXQoMHg2MjlhMjkyYSwgMHgzNjdjZDUwNyksXG5cdCAgICAgICAgICAgICAgICBuZXcgWDY0V29yZC5pbml0KDB4OTE1OTAxNWEsIDB4MzA3MGRkMTcpLCBuZXcgWDY0V29yZC5pbml0KDB4MTUyZmVjZDgsIDB4ZjcwZTU5MzkpLFxuXHQgICAgICAgICAgICAgICAgbmV3IFg2NFdvcmQuaW5pdCgweDY3MzMyNjY3LCAweGZmYzAwYjMxKSwgbmV3IFg2NFdvcmQuaW5pdCgweDhlYjQ0YTg3LCAweDY4NTgxNTExKSxcblx0ICAgICAgICAgICAgICAgIG5ldyBYNjRXb3JkLmluaXQoMHhkYjBjMmUwZCwgMHg2NGY5OGZhNyksIG5ldyBYNjRXb3JkLmluaXQoMHg0N2I1NDgxZCwgMHhiZWZhNGZhNClcblx0ICAgICAgICAgICAgXSk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIF9kb0ZpbmFsaXplOiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBoYXNoID0gU0hBNTEyLl9kb0ZpbmFsaXplLmNhbGwodGhpcyk7XG5cblx0ICAgICAgICAgICAgaGFzaC5zaWdCeXRlcyAtPSAxNjtcblxuXHQgICAgICAgICAgICByZXR1cm4gaGFzaDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBTaG9ydGN1dCBmdW5jdGlvbiB0byB0aGUgaGFzaGVyJ3Mgb2JqZWN0IGludGVyZmFjZS5cblx0ICAgICAqXG5cdCAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gaGFzaC5cblx0ICAgICAqXG5cdCAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSBoYXNoLlxuXHQgICAgICpcblx0ICAgICAqIEBzdGF0aWNcblx0ICAgICAqXG5cdCAgICAgKiBAZXhhbXBsZVxuXHQgICAgICpcblx0ICAgICAqICAgICB2YXIgaGFzaCA9IENyeXB0b0pTLlNIQTM4NCgnbWVzc2FnZScpO1xuXHQgICAgICogICAgIHZhciBoYXNoID0gQ3J5cHRvSlMuU0hBMzg0KHdvcmRBcnJheSk7XG5cdCAgICAgKi9cblx0ICAgIEMuU0hBMzg0ID0gU0hBNTEyLl9jcmVhdGVIZWxwZXIoU0hBMzg0KTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBTaG9ydGN1dCBmdW5jdGlvbiB0byB0aGUgSE1BQydzIG9iamVjdCBpbnRlcmZhY2UuXG5cdCAgICAgKlxuXHQgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBtZXNzYWdlIFRoZSBtZXNzYWdlIHRvIGhhc2guXG5cdCAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IGtleSBUaGUgc2VjcmV0IGtleS5cblx0ICAgICAqXG5cdCAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSBITUFDLlxuXHQgICAgICpcblx0ICAgICAqIEBzdGF0aWNcblx0ICAgICAqXG5cdCAgICAgKiBAZXhhbXBsZVxuXHQgICAgICpcblx0ICAgICAqICAgICB2YXIgaG1hYyA9IENyeXB0b0pTLkhtYWNTSEEzODQobWVzc2FnZSwga2V5KTtcblx0ICAgICAqL1xuXHQgICAgQy5IbWFjU0hBMzg0ID0gU0hBNTEyLl9jcmVhdGVIbWFjSGVscGVyKFNIQTM4NCk7XG5cdH0oKSk7XG5cblxuXHQvKipcblx0ICogQ2lwaGVyIGNvcmUgY29tcG9uZW50cy5cblx0ICovXG5cdENyeXB0b0pTLmxpYi5DaXBoZXIgfHwgKGZ1bmN0aW9uICh1bmRlZmluZWQpIHtcblx0ICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgdmFyIEMgPSBDcnlwdG9KUztcblx0ICAgIHZhciBDX2xpYiA9IEMubGliO1xuXHQgICAgdmFyIEJhc2UgPSBDX2xpYi5CYXNlO1xuXHQgICAgdmFyIFdvcmRBcnJheSA9IENfbGliLldvcmRBcnJheTtcblx0ICAgIHZhciBCdWZmZXJlZEJsb2NrQWxnb3JpdGhtID0gQ19saWIuQnVmZmVyZWRCbG9ja0FsZ29yaXRobTtcblx0ICAgIHZhciBDX2VuYyA9IEMuZW5jO1xuXHQgICAgdmFyIFV0ZjggPSBDX2VuYy5VdGY4O1xuXHQgICAgdmFyIEJhc2U2NCA9IENfZW5jLkJhc2U2NDtcblx0ICAgIHZhciBDX2FsZ28gPSBDLmFsZ287XG5cdCAgICB2YXIgRXZwS0RGID0gQ19hbGdvLkV2cEtERjtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBBYnN0cmFjdCBiYXNlIGNpcGhlciB0ZW1wbGF0ZS5cblx0ICAgICAqXG5cdCAgICAgKiBAcHJvcGVydHkge251bWJlcn0ga2V5U2l6ZSBUaGlzIGNpcGhlcidzIGtleSBzaXplLiBEZWZhdWx0OiA0ICgxMjggYml0cylcblx0ICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBpdlNpemUgVGhpcyBjaXBoZXIncyBJViBzaXplLiBEZWZhdWx0OiA0ICgxMjggYml0cylcblx0ICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBfRU5DX1hGT1JNX01PREUgQSBjb25zdGFudCByZXByZXNlbnRpbmcgZW5jcnlwdGlvbiBtb2RlLlxuXHQgICAgICogQHByb3BlcnR5IHtudW1iZXJ9IF9ERUNfWEZPUk1fTU9ERSBBIGNvbnN0YW50IHJlcHJlc2VudGluZyBkZWNyeXB0aW9uIG1vZGUuXG5cdCAgICAgKi9cblx0ICAgIHZhciBDaXBoZXIgPSBDX2xpYi5DaXBoZXIgPSBCdWZmZXJlZEJsb2NrQWxnb3JpdGhtLmV4dGVuZCh7XG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29uZmlndXJhdGlvbiBvcHRpb25zLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHByb3BlcnR5IHtXb3JkQXJyYXl9IGl2IFRoZSBJViB0byB1c2UgZm9yIHRoaXMgb3BlcmF0aW9uLlxuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGNmZzogQmFzZS5leHRlbmQoKSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENyZWF0ZXMgdGhpcyBjaXBoZXIgaW4gZW5jcnlwdGlvbiBtb2RlLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl9IGtleSBUaGUga2V5LlxuXHQgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjZmcgKE9wdGlvbmFsKSBUaGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIHVzZSBmb3IgdGhpcyBvcGVyYXRpb24uXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtDaXBoZXJ9IEEgY2lwaGVyIGluc3RhbmNlLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgY2lwaGVyID0gQ3J5cHRvSlMuYWxnby5BRVMuY3JlYXRlRW5jcnlwdG9yKGtleVdvcmRBcnJheSwgeyBpdjogaXZXb3JkQXJyYXkgfSk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgY3JlYXRlRW5jcnlwdG9yOiBmdW5jdGlvbiAoa2V5LCBjZmcpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlKHRoaXMuX0VOQ19YRk9STV9NT0RFLCBrZXksIGNmZyk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENyZWF0ZXMgdGhpcyBjaXBoZXIgaW4gZGVjcnlwdGlvbiBtb2RlLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl9IGtleSBUaGUga2V5LlxuXHQgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjZmcgKE9wdGlvbmFsKSBUaGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIHVzZSBmb3IgdGhpcyBvcGVyYXRpb24uXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtDaXBoZXJ9IEEgY2lwaGVyIGluc3RhbmNlLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgY2lwaGVyID0gQ3J5cHRvSlMuYWxnby5BRVMuY3JlYXRlRGVjcnlwdG9yKGtleVdvcmRBcnJheSwgeyBpdjogaXZXb3JkQXJyYXkgfSk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgY3JlYXRlRGVjcnlwdG9yOiBmdW5jdGlvbiAoa2V5LCBjZmcpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlKHRoaXMuX0RFQ19YRk9STV9NT0RFLCBrZXksIGNmZyk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIEluaXRpYWxpemVzIGEgbmV3bHkgY3JlYXRlZCBjaXBoZXIuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0geGZvcm1Nb2RlIEVpdGhlciB0aGUgZW5jcnlwdGlvbiBvciBkZWNyeXB0aW9uIHRyYW5zb3JtYXRpb24gbW9kZSBjb25zdGFudC5cblx0ICAgICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheX0ga2V5IFRoZSBrZXkuXG5cdCAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGNmZyAoT3B0aW9uYWwpIFRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gdXNlIGZvciB0aGlzIG9wZXJhdGlvbi5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIGNpcGhlciA9IENyeXB0b0pTLmFsZ28uQUVTLmNyZWF0ZShDcnlwdG9KUy5hbGdvLkFFUy5fRU5DX1hGT1JNX01PREUsIGtleVdvcmRBcnJheSwgeyBpdjogaXZXb3JkQXJyYXkgfSk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgaW5pdDogZnVuY3Rpb24gKHhmb3JtTW9kZSwga2V5LCBjZmcpIHtcblx0ICAgICAgICAgICAgLy8gQXBwbHkgY29uZmlnIGRlZmF1bHRzXG5cdCAgICAgICAgICAgIHRoaXMuY2ZnID0gdGhpcy5jZmcuZXh0ZW5kKGNmZyk7XG5cblx0ICAgICAgICAgICAgLy8gU3RvcmUgdHJhbnNmb3JtIG1vZGUgYW5kIGtleVxuXHQgICAgICAgICAgICB0aGlzLl94Zm9ybU1vZGUgPSB4Zm9ybU1vZGU7XG5cdCAgICAgICAgICAgIHRoaXMuX2tleSA9IGtleTtcblxuXHQgICAgICAgICAgICAvLyBTZXQgaW5pdGlhbCB2YWx1ZXNcblx0ICAgICAgICAgICAgdGhpcy5yZXNldCgpO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBSZXNldHMgdGhpcyBjaXBoZXIgdG8gaXRzIGluaXRpYWwgc3RhdGUuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIGNpcGhlci5yZXNldCgpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHJlc2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIC8vIFJlc2V0IGRhdGEgYnVmZmVyXG5cdCAgICAgICAgICAgIEJ1ZmZlcmVkQmxvY2tBbGdvcml0aG0ucmVzZXQuY2FsbCh0aGlzKTtcblxuXHQgICAgICAgICAgICAvLyBQZXJmb3JtIGNvbmNyZXRlLWNpcGhlciBsb2dpY1xuXHQgICAgICAgICAgICB0aGlzLl9kb1Jlc2V0KCk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIEFkZHMgZGF0YSB0byBiZSBlbmNyeXB0ZWQgb3IgZGVjcnlwdGVkLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBkYXRhVXBkYXRlIFRoZSBkYXRhIHRvIGVuY3J5cHQgb3IgZGVjcnlwdC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIGRhdGEgYWZ0ZXIgcHJvY2Vzc2luZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIGVuY3J5cHRlZCA9IGNpcGhlci5wcm9jZXNzKCdkYXRhJyk7XG5cdCAgICAgICAgICogICAgIHZhciBlbmNyeXB0ZWQgPSBjaXBoZXIucHJvY2Vzcyh3b3JkQXJyYXkpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHByb2Nlc3M6IGZ1bmN0aW9uIChkYXRhVXBkYXRlKSB7XG5cdCAgICAgICAgICAgIC8vIEFwcGVuZFxuXHQgICAgICAgICAgICB0aGlzLl9hcHBlbmQoZGF0YVVwZGF0ZSk7XG5cblx0ICAgICAgICAgICAgLy8gUHJvY2VzcyBhdmFpbGFibGUgYmxvY2tzXG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9wcm9jZXNzKCk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIEZpbmFsaXplcyB0aGUgZW5jcnlwdGlvbiBvciBkZWNyeXB0aW9uIHByb2Nlc3MuXG5cdCAgICAgICAgICogTm90ZSB0aGF0IHRoZSBmaW5hbGl6ZSBvcGVyYXRpb24gaXMgZWZmZWN0aXZlbHkgYSBkZXN0cnVjdGl2ZSwgcmVhZC1vbmNlIG9wZXJhdGlvbi5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gZGF0YVVwZGF0ZSBUaGUgZmluYWwgZGF0YSB0byBlbmNyeXB0IG9yIGRlY3J5cHQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSBkYXRhIGFmdGVyIGZpbmFsIHByb2Nlc3NpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBlbmNyeXB0ZWQgPSBjaXBoZXIuZmluYWxpemUoKTtcblx0ICAgICAgICAgKiAgICAgdmFyIGVuY3J5cHRlZCA9IGNpcGhlci5maW5hbGl6ZSgnZGF0YScpO1xuXHQgICAgICAgICAqICAgICB2YXIgZW5jcnlwdGVkID0gY2lwaGVyLmZpbmFsaXplKHdvcmRBcnJheSk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgZmluYWxpemU6IGZ1bmN0aW9uIChkYXRhVXBkYXRlKSB7XG5cdCAgICAgICAgICAgIC8vIEZpbmFsIGRhdGEgdXBkYXRlXG5cdCAgICAgICAgICAgIGlmIChkYXRhVXBkYXRlKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9hcHBlbmQoZGF0YVVwZGF0ZSk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBQZXJmb3JtIGNvbmNyZXRlLWNpcGhlciBsb2dpY1xuXHQgICAgICAgICAgICB2YXIgZmluYWxQcm9jZXNzZWREYXRhID0gdGhpcy5fZG9GaW5hbGl6ZSgpO1xuXG5cdCAgICAgICAgICAgIHJldHVybiBmaW5hbFByb2Nlc3NlZERhdGE7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIGtleVNpemU6IDEyOC8zMixcblxuXHQgICAgICAgIGl2U2l6ZTogMTI4LzMyLFxuXG5cdCAgICAgICAgX0VOQ19YRk9STV9NT0RFOiAxLFxuXG5cdCAgICAgICAgX0RFQ19YRk9STV9NT0RFOiAyLFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ3JlYXRlcyBzaG9ydGN1dCBmdW5jdGlvbnMgdG8gYSBjaXBoZXIncyBvYmplY3QgaW50ZXJmYWNlLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtDaXBoZXJ9IGNpcGhlciBUaGUgY2lwaGVyIHRvIGNyZWF0ZSBhIGhlbHBlciBmb3IuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtPYmplY3R9IEFuIG9iamVjdCB3aXRoIGVuY3J5cHQgYW5kIGRlY3J5cHQgc2hvcnRjdXQgZnVuY3Rpb25zLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgQUVTID0gQ3J5cHRvSlMubGliLkNpcGhlci5fY3JlYXRlSGVscGVyKENyeXB0b0pTLmFsZ28uQUVTKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBfY3JlYXRlSGVscGVyOiAoZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBmdW5jdGlvbiBzZWxlY3RDaXBoZXJTdHJhdGVneShrZXkpIHtcblx0ICAgICAgICAgICAgICAgIGlmICh0eXBlb2Yga2V5ID09ICdzdHJpbmcnKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFBhc3N3b3JkQmFzZWRDaXBoZXI7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiBTZXJpYWxpemFibGVDaXBoZXI7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGNpcGhlcikge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHtcblx0ICAgICAgICAgICAgICAgICAgICBlbmNyeXB0OiBmdW5jdGlvbiAobWVzc2FnZSwga2V5LCBjZmcpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGVjdENpcGhlclN0cmF0ZWd5KGtleSkuZW5jcnlwdChjaXBoZXIsIG1lc3NhZ2UsIGtleSwgY2ZnKTtcblx0ICAgICAgICAgICAgICAgICAgICB9LFxuXG5cdCAgICAgICAgICAgICAgICAgICAgZGVjcnlwdDogZnVuY3Rpb24gKGNpcGhlcnRleHQsIGtleSwgY2ZnKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxlY3RDaXBoZXJTdHJhdGVneShrZXkpLmRlY3J5cHQoY2lwaGVyLCBjaXBoZXJ0ZXh0LCBrZXksIGNmZyk7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgfTtcblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICB9KCkpXG5cdCAgICB9KTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBBYnN0cmFjdCBiYXNlIHN0cmVhbSBjaXBoZXIgdGVtcGxhdGUuXG5cdCAgICAgKlxuXHQgICAgICogQHByb3BlcnR5IHtudW1iZXJ9IGJsb2NrU2l6ZSBUaGUgbnVtYmVyIG9mIDMyLWJpdCB3b3JkcyB0aGlzIGNpcGhlciBvcGVyYXRlcyBvbi4gRGVmYXVsdDogMSAoMzIgYml0cylcblx0ICAgICAqL1xuXHQgICAgdmFyIFN0cmVhbUNpcGhlciA9IENfbGliLlN0cmVhbUNpcGhlciA9IENpcGhlci5leHRlbmQoe1xuXHQgICAgICAgIF9kb0ZpbmFsaXplOiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIC8vIFByb2Nlc3MgcGFydGlhbCBibG9ja3Ncblx0ICAgICAgICAgICAgdmFyIGZpbmFsUHJvY2Vzc2VkQmxvY2tzID0gdGhpcy5fcHJvY2VzcyghISdmbHVzaCcpO1xuXG5cdCAgICAgICAgICAgIHJldHVybiBmaW5hbFByb2Nlc3NlZEJsb2Nrcztcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgYmxvY2tTaXplOiAxXG5cdCAgICB9KTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBNb2RlIG5hbWVzcGFjZS5cblx0ICAgICAqL1xuXHQgICAgdmFyIENfbW9kZSA9IEMubW9kZSA9IHt9O1xuXG5cdCAgICAvKipcblx0ICAgICAqIEFic3RyYWN0IGJhc2UgYmxvY2sgY2lwaGVyIG1vZGUgdGVtcGxhdGUuXG5cdCAgICAgKi9cblx0ICAgIHZhciBCbG9ja0NpcGhlck1vZGUgPSBDX2xpYi5CbG9ja0NpcGhlck1vZGUgPSBCYXNlLmV4dGVuZCh7XG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ3JlYXRlcyB0aGlzIG1vZGUgZm9yIGVuY3J5cHRpb24uXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge0NpcGhlcn0gY2lwaGVyIEEgYmxvY2sgY2lwaGVyIGluc3RhbmNlLlxuXHQgICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IGl2IFRoZSBJViB3b3Jkcy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBzdGF0aWNcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIG1vZGUgPSBDcnlwdG9KUy5tb2RlLkNCQy5jcmVhdGVFbmNyeXB0b3IoY2lwaGVyLCBpdi53b3Jkcyk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgY3JlYXRlRW5jcnlwdG9yOiBmdW5jdGlvbiAoY2lwaGVyLCBpdikge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5FbmNyeXB0b3IuY3JlYXRlKGNpcGhlciwgaXYpO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDcmVhdGVzIHRoaXMgbW9kZSBmb3IgZGVjcnlwdGlvbi5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7Q2lwaGVyfSBjaXBoZXIgQSBibG9jayBjaXBoZXIgaW5zdGFuY2UuXG5cdCAgICAgICAgICogQHBhcmFtIHtBcnJheX0gaXYgVGhlIElWIHdvcmRzLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgbW9kZSA9IENyeXB0b0pTLm1vZGUuQ0JDLmNyZWF0ZURlY3J5cHRvcihjaXBoZXIsIGl2LndvcmRzKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBjcmVhdGVEZWNyeXB0b3I6IGZ1bmN0aW9uIChjaXBoZXIsIGl2KSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLkRlY3J5cHRvci5jcmVhdGUoY2lwaGVyLCBpdik7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIEluaXRpYWxpemVzIGEgbmV3bHkgY3JlYXRlZCBtb2RlLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtDaXBoZXJ9IGNpcGhlciBBIGJsb2NrIGNpcGhlciBpbnN0YW5jZS5cblx0ICAgICAgICAgKiBAcGFyYW0ge0FycmF5fSBpdiBUaGUgSVYgd29yZHMuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBtb2RlID0gQ3J5cHRvSlMubW9kZS5DQkMuRW5jcnlwdG9yLmNyZWF0ZShjaXBoZXIsIGl2LndvcmRzKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBpbml0OiBmdW5jdGlvbiAoY2lwaGVyLCBpdikge1xuXHQgICAgICAgICAgICB0aGlzLl9jaXBoZXIgPSBjaXBoZXI7XG5cdCAgICAgICAgICAgIHRoaXMuX2l2ID0gaXY7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogQ2lwaGVyIEJsb2NrIENoYWluaW5nIG1vZGUuXG5cdCAgICAgKi9cblx0ICAgIHZhciBDQkMgPSBDX21vZGUuQ0JDID0gKGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBBYnN0cmFjdCBiYXNlIENCQyBtb2RlLlxuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHZhciBDQkMgPSBCbG9ja0NpcGhlck1vZGUuZXh0ZW5kKCk7XG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDQkMgZW5jcnlwdG9yLlxuXHQgICAgICAgICAqL1xuXHQgICAgICAgIENCQy5FbmNyeXB0b3IgPSBDQkMuZXh0ZW5kKHtcblx0ICAgICAgICAgICAgLyoqXG5cdCAgICAgICAgICAgICAqIFByb2Nlc3NlcyB0aGUgZGF0YSBibG9jayBhdCBvZmZzZXQuXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IHdvcmRzIFRoZSBkYXRhIHdvcmRzIHRvIG9wZXJhdGUgb24uXG5cdCAgICAgICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXQgVGhlIG9mZnNldCB3aGVyZSB0aGUgYmxvY2sgc3RhcnRzLlxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiAgICAgbW9kZS5wcm9jZXNzQmxvY2soZGF0YS53b3Jkcywgb2Zmc2V0KTtcblx0ICAgICAgICAgICAgICovXG5cdCAgICAgICAgICAgIHByb2Nlc3NCbG9jazogZnVuY3Rpb24gKHdvcmRzLCBvZmZzZXQpIHtcblx0ICAgICAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICAgICAgdmFyIGNpcGhlciA9IHRoaXMuX2NpcGhlcjtcblx0ICAgICAgICAgICAgICAgIHZhciBibG9ja1NpemUgPSBjaXBoZXIuYmxvY2tTaXplO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBYT1IgYW5kIGVuY3J5cHRcblx0ICAgICAgICAgICAgICAgIHhvckJsb2NrLmNhbGwodGhpcywgd29yZHMsIG9mZnNldCwgYmxvY2tTaXplKTtcblx0ICAgICAgICAgICAgICAgIGNpcGhlci5lbmNyeXB0QmxvY2sod29yZHMsIG9mZnNldCk7XG5cblx0ICAgICAgICAgICAgICAgIC8vIFJlbWVtYmVyIHRoaXMgYmxvY2sgdG8gdXNlIHdpdGggbmV4dCBibG9ja1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fcHJldkJsb2NrID0gd29yZHMuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyBibG9ja1NpemUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSk7XG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDQkMgZGVjcnlwdG9yLlxuXHQgICAgICAgICAqL1xuXHQgICAgICAgIENCQy5EZWNyeXB0b3IgPSBDQkMuZXh0ZW5kKHtcblx0ICAgICAgICAgICAgLyoqXG5cdCAgICAgICAgICAgICAqIFByb2Nlc3NlcyB0aGUgZGF0YSBibG9jayBhdCBvZmZzZXQuXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IHdvcmRzIFRoZSBkYXRhIHdvcmRzIHRvIG9wZXJhdGUgb24uXG5cdCAgICAgICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXQgVGhlIG9mZnNldCB3aGVyZSB0aGUgYmxvY2sgc3RhcnRzLlxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiAgICAgbW9kZS5wcm9jZXNzQmxvY2soZGF0YS53b3Jkcywgb2Zmc2V0KTtcblx0ICAgICAgICAgICAgICovXG5cdCAgICAgICAgICAgIHByb2Nlc3NCbG9jazogZnVuY3Rpb24gKHdvcmRzLCBvZmZzZXQpIHtcblx0ICAgICAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICAgICAgdmFyIGNpcGhlciA9IHRoaXMuX2NpcGhlcjtcblx0ICAgICAgICAgICAgICAgIHZhciBibG9ja1NpemUgPSBjaXBoZXIuYmxvY2tTaXplO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBSZW1lbWJlciB0aGlzIGJsb2NrIHRvIHVzZSB3aXRoIG5leHQgYmxvY2tcblx0ICAgICAgICAgICAgICAgIHZhciB0aGlzQmxvY2sgPSB3b3Jkcy5zbGljZShvZmZzZXQsIG9mZnNldCArIGJsb2NrU2l6ZSk7XG5cblx0ICAgICAgICAgICAgICAgIC8vIERlY3J5cHQgYW5kIFhPUlxuXHQgICAgICAgICAgICAgICAgY2lwaGVyLmRlY3J5cHRCbG9jayh3b3Jkcywgb2Zmc2V0KTtcblx0ICAgICAgICAgICAgICAgIHhvckJsb2NrLmNhbGwodGhpcywgd29yZHMsIG9mZnNldCwgYmxvY2tTaXplKTtcblxuXHQgICAgICAgICAgICAgICAgLy8gVGhpcyBibG9jayBiZWNvbWVzIHRoZSBwcmV2aW91cyBibG9ja1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fcHJldkJsb2NrID0gdGhpc0Jsb2NrO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSk7XG5cblx0ICAgICAgICBmdW5jdGlvbiB4b3JCbG9jayh3b3Jkcywgb2Zmc2V0LCBibG9ja1NpemUpIHtcblx0ICAgICAgICAgICAgdmFyIGJsb2NrO1xuXG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0XG5cdCAgICAgICAgICAgIHZhciBpdiA9IHRoaXMuX2l2O1xuXG5cdCAgICAgICAgICAgIC8vIENob29zZSBtaXhpbmcgYmxvY2tcblx0ICAgICAgICAgICAgaWYgKGl2KSB7XG5cdCAgICAgICAgICAgICAgICBibG9jayA9IGl2O1xuXG5cdCAgICAgICAgICAgICAgICAvLyBSZW1vdmUgSVYgZm9yIHN1YnNlcXVlbnQgYmxvY2tzXG5cdCAgICAgICAgICAgICAgICB0aGlzLl9pdiA9IHVuZGVmaW5lZDtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIGJsb2NrID0gdGhpcy5fcHJldkJsb2NrO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gWE9SIGJsb2Nrc1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJsb2NrU2l6ZTsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICB3b3Jkc1tvZmZzZXQgKyBpXSBePSBibG9ja1tpXTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHJldHVybiBDQkM7XG5cdCAgICB9KCkpO1xuXG5cdCAgICAvKipcblx0ICAgICAqIFBhZGRpbmcgbmFtZXNwYWNlLlxuXHQgICAgICovXG5cdCAgICB2YXIgQ19wYWQgPSBDLnBhZCA9IHt9O1xuXG5cdCAgICAvKipcblx0ICAgICAqIFBLQ1MgIzUvNyBwYWRkaW5nIHN0cmF0ZWd5LlxuXHQgICAgICovXG5cdCAgICB2YXIgUGtjczcgPSBDX3BhZC5Qa2NzNyA9IHtcblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBQYWRzIGRhdGEgdXNpbmcgdGhlIGFsZ29yaXRobSBkZWZpbmVkIGluIFBLQ1MgIzUvNy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7V29yZEFycmF5fSBkYXRhIFRoZSBkYXRhIHRvIHBhZC5cblx0ICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gYmxvY2tTaXplIFRoZSBtdWx0aXBsZSB0aGF0IHRoZSBkYXRhIHNob3VsZCBiZSBwYWRkZWQgdG8uXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIENyeXB0b0pTLnBhZC5Qa2NzNy5wYWQod29yZEFycmF5LCA0KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBwYWQ6IGZ1bmN0aW9uIChkYXRhLCBibG9ja1NpemUpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRcblx0ICAgICAgICAgICAgdmFyIGJsb2NrU2l6ZUJ5dGVzID0gYmxvY2tTaXplICogNDtcblxuXHQgICAgICAgICAgICAvLyBDb3VudCBwYWRkaW5nIGJ5dGVzXG5cdCAgICAgICAgICAgIHZhciBuUGFkZGluZ0J5dGVzID0gYmxvY2tTaXplQnl0ZXMgLSBkYXRhLnNpZ0J5dGVzICUgYmxvY2tTaXplQnl0ZXM7XG5cblx0ICAgICAgICAgICAgLy8gQ3JlYXRlIHBhZGRpbmcgd29yZFxuXHQgICAgICAgICAgICB2YXIgcGFkZGluZ1dvcmQgPSAoblBhZGRpbmdCeXRlcyA8PCAyNCkgfCAoblBhZGRpbmdCeXRlcyA8PCAxNikgfCAoblBhZGRpbmdCeXRlcyA8PCA4KSB8IG5QYWRkaW5nQnl0ZXM7XG5cblx0ICAgICAgICAgICAgLy8gQ3JlYXRlIHBhZGRpbmdcblx0ICAgICAgICAgICAgdmFyIHBhZGRpbmdXb3JkcyA9IFtdO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5QYWRkaW5nQnl0ZXM7IGkgKz0gNCkge1xuXHQgICAgICAgICAgICAgICAgcGFkZGluZ1dvcmRzLnB1c2gocGFkZGluZ1dvcmQpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHZhciBwYWRkaW5nID0gV29yZEFycmF5LmNyZWF0ZShwYWRkaW5nV29yZHMsIG5QYWRkaW5nQnl0ZXMpO1xuXG5cdCAgICAgICAgICAgIC8vIEFkZCBwYWRkaW5nXG5cdCAgICAgICAgICAgIGRhdGEuY29uY2F0KHBhZGRpbmcpO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBVbnBhZHMgZGF0YSB0aGF0IGhhZCBiZWVuIHBhZGRlZCB1c2luZyB0aGUgYWxnb3JpdGhtIGRlZmluZWQgaW4gUEtDUyAjNS83LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl9IGRhdGEgVGhlIGRhdGEgdG8gdW5wYWQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIENyeXB0b0pTLnBhZC5Qa2NzNy51bnBhZCh3b3JkQXJyYXkpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHVucGFkOiBmdW5jdGlvbiAoZGF0YSkge1xuXHQgICAgICAgICAgICAvLyBHZXQgbnVtYmVyIG9mIHBhZGRpbmcgYnl0ZXMgZnJvbSBsYXN0IGJ5dGVcblx0ICAgICAgICAgICAgdmFyIG5QYWRkaW5nQnl0ZXMgPSBkYXRhLndvcmRzWyhkYXRhLnNpZ0J5dGVzIC0gMSkgPj4+IDJdICYgMHhmZjtcblxuXHQgICAgICAgICAgICAvLyBSZW1vdmUgcGFkZGluZ1xuXHQgICAgICAgICAgICBkYXRhLnNpZ0J5dGVzIC09IG5QYWRkaW5nQnl0ZXM7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBBYnN0cmFjdCBiYXNlIGJsb2NrIGNpcGhlciB0ZW1wbGF0ZS5cblx0ICAgICAqXG5cdCAgICAgKiBAcHJvcGVydHkge251bWJlcn0gYmxvY2tTaXplIFRoZSBudW1iZXIgb2YgMzItYml0IHdvcmRzIHRoaXMgY2lwaGVyIG9wZXJhdGVzIG9uLiBEZWZhdWx0OiA0ICgxMjggYml0cylcblx0ICAgICAqL1xuXHQgICAgdmFyIEJsb2NrQ2lwaGVyID0gQ19saWIuQmxvY2tDaXBoZXIgPSBDaXBoZXIuZXh0ZW5kKHtcblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb25maWd1cmF0aW9uIG9wdGlvbnMuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcHJvcGVydHkge01vZGV9IG1vZGUgVGhlIGJsb2NrIG1vZGUgdG8gdXNlLiBEZWZhdWx0OiBDQkNcblx0ICAgICAgICAgKiBAcHJvcGVydHkge1BhZGRpbmd9IHBhZGRpbmcgVGhlIHBhZGRpbmcgc3RyYXRlZ3kgdG8gdXNlLiBEZWZhdWx0OiBQa2NzN1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGNmZzogQ2lwaGVyLmNmZy5leHRlbmQoe1xuXHQgICAgICAgICAgICBtb2RlOiBDQkMsXG5cdCAgICAgICAgICAgIHBhZGRpbmc6IFBrY3M3XG5cdCAgICAgICAgfSksXG5cblx0ICAgICAgICByZXNldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgbW9kZUNyZWF0b3I7XG5cblx0ICAgICAgICAgICAgLy8gUmVzZXQgY2lwaGVyXG5cdCAgICAgICAgICAgIENpcGhlci5yZXNldC5jYWxsKHRoaXMpO1xuXG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIgY2ZnID0gdGhpcy5jZmc7XG5cdCAgICAgICAgICAgIHZhciBpdiA9IGNmZy5pdjtcblx0ICAgICAgICAgICAgdmFyIG1vZGUgPSBjZmcubW9kZTtcblxuXHQgICAgICAgICAgICAvLyBSZXNldCBibG9jayBtb2RlXG5cdCAgICAgICAgICAgIGlmICh0aGlzLl94Zm9ybU1vZGUgPT0gdGhpcy5fRU5DX1hGT1JNX01PREUpIHtcblx0ICAgICAgICAgICAgICAgIG1vZGVDcmVhdG9yID0gbW9kZS5jcmVhdGVFbmNyeXB0b3I7XG5cdCAgICAgICAgICAgIH0gZWxzZSAvKiBpZiAodGhpcy5feGZvcm1Nb2RlID09IHRoaXMuX0RFQ19YRk9STV9NT0RFKSAqLyB7XG5cdCAgICAgICAgICAgICAgICBtb2RlQ3JlYXRvciA9IG1vZGUuY3JlYXRlRGVjcnlwdG9yO1xuXHQgICAgICAgICAgICAgICAgLy8gS2VlcCBhdCBsZWFzdCBvbmUgYmxvY2sgaW4gdGhlIGJ1ZmZlciBmb3IgdW5wYWRkaW5nXG5cdCAgICAgICAgICAgICAgICB0aGlzLl9taW5CdWZmZXJTaXplID0gMTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9tb2RlICYmIHRoaXMuX21vZGUuX19jcmVhdG9yID09IG1vZGVDcmVhdG9yKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9tb2RlLmluaXQodGhpcywgaXYgJiYgaXYud29yZHMpO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fbW9kZSA9IG1vZGVDcmVhdG9yLmNhbGwobW9kZSwgdGhpcywgaXYgJiYgaXYud29yZHMpO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fbW9kZS5fX2NyZWF0b3IgPSBtb2RlQ3JlYXRvcjtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBfZG9Qcm9jZXNzQmxvY2s6IGZ1bmN0aW9uICh3b3Jkcywgb2Zmc2V0KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX21vZGUucHJvY2Vzc0Jsb2NrKHdvcmRzLCBvZmZzZXQpO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBfZG9GaW5hbGl6ZTogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgZmluYWxQcm9jZXNzZWRCbG9ja3M7XG5cblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRcblx0ICAgICAgICAgICAgdmFyIHBhZGRpbmcgPSB0aGlzLmNmZy5wYWRkaW5nO1xuXG5cdCAgICAgICAgICAgIC8vIEZpbmFsaXplXG5cdCAgICAgICAgICAgIGlmICh0aGlzLl94Zm9ybU1vZGUgPT0gdGhpcy5fRU5DX1hGT1JNX01PREUpIHtcblx0ICAgICAgICAgICAgICAgIC8vIFBhZCBkYXRhXG5cdCAgICAgICAgICAgICAgICBwYWRkaW5nLnBhZCh0aGlzLl9kYXRhLCB0aGlzLmJsb2NrU2l6ZSk7XG5cblx0ICAgICAgICAgICAgICAgIC8vIFByb2Nlc3MgZmluYWwgYmxvY2tzXG5cdCAgICAgICAgICAgICAgICBmaW5hbFByb2Nlc3NlZEJsb2NrcyA9IHRoaXMuX3Byb2Nlc3MoISEnZmx1c2gnKTtcblx0ICAgICAgICAgICAgfSBlbHNlIC8qIGlmICh0aGlzLl94Zm9ybU1vZGUgPT0gdGhpcy5fREVDX1hGT1JNX01PREUpICovIHtcblx0ICAgICAgICAgICAgICAgIC8vIFByb2Nlc3MgZmluYWwgYmxvY2tzXG5cdCAgICAgICAgICAgICAgICBmaW5hbFByb2Nlc3NlZEJsb2NrcyA9IHRoaXMuX3Byb2Nlc3MoISEnZmx1c2gnKTtcblxuXHQgICAgICAgICAgICAgICAgLy8gVW5wYWQgZGF0YVxuXHQgICAgICAgICAgICAgICAgcGFkZGluZy51bnBhZChmaW5hbFByb2Nlc3NlZEJsb2Nrcyk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICByZXR1cm4gZmluYWxQcm9jZXNzZWRCbG9ja3M7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIGJsb2NrU2l6ZTogMTI4LzMyXG5cdCAgICB9KTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBBIGNvbGxlY3Rpb24gb2YgY2lwaGVyIHBhcmFtZXRlcnMuXG5cdCAgICAgKlxuXHQgICAgICogQHByb3BlcnR5IHtXb3JkQXJyYXl9IGNpcGhlcnRleHQgVGhlIHJhdyBjaXBoZXJ0ZXh0LlxuXHQgICAgICogQHByb3BlcnR5IHtXb3JkQXJyYXl9IGtleSBUaGUga2V5IHRvIHRoaXMgY2lwaGVydGV4dC5cblx0ICAgICAqIEBwcm9wZXJ0eSB7V29yZEFycmF5fSBpdiBUaGUgSVYgdXNlZCBpbiB0aGUgY2lwaGVyaW5nIG9wZXJhdGlvbi5cblx0ICAgICAqIEBwcm9wZXJ0eSB7V29yZEFycmF5fSBzYWx0IFRoZSBzYWx0IHVzZWQgd2l0aCBhIGtleSBkZXJpdmF0aW9uIGZ1bmN0aW9uLlxuXHQgICAgICogQHByb3BlcnR5IHtDaXBoZXJ9IGFsZ29yaXRobSBUaGUgY2lwaGVyIGFsZ29yaXRobS5cblx0ICAgICAqIEBwcm9wZXJ0eSB7TW9kZX0gbW9kZSBUaGUgYmxvY2sgbW9kZSB1c2VkIGluIHRoZSBjaXBoZXJpbmcgb3BlcmF0aW9uLlxuXHQgICAgICogQHByb3BlcnR5IHtQYWRkaW5nfSBwYWRkaW5nIFRoZSBwYWRkaW5nIHNjaGVtZSB1c2VkIGluIHRoZSBjaXBoZXJpbmcgb3BlcmF0aW9uLlxuXHQgICAgICogQHByb3BlcnR5IHtudW1iZXJ9IGJsb2NrU2l6ZSBUaGUgYmxvY2sgc2l6ZSBvZiB0aGUgY2lwaGVyLlxuXHQgICAgICogQHByb3BlcnR5IHtGb3JtYXR9IGZvcm1hdHRlciBUaGUgZGVmYXVsdCBmb3JtYXR0aW5nIHN0cmF0ZWd5IHRvIGNvbnZlcnQgdGhpcyBjaXBoZXIgcGFyYW1zIG9iamVjdCB0byBhIHN0cmluZy5cblx0ICAgICAqL1xuXHQgICAgdmFyIENpcGhlclBhcmFtcyA9IENfbGliLkNpcGhlclBhcmFtcyA9IEJhc2UuZXh0ZW5kKHtcblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBJbml0aWFsaXplcyBhIG5ld2x5IGNyZWF0ZWQgY2lwaGVyIHBhcmFtcyBvYmplY3QuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gY2lwaGVyUGFyYW1zIEFuIG9iamVjdCB3aXRoIGFueSBvZiB0aGUgcG9zc2libGUgY2lwaGVyIHBhcmFtZXRlcnMuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBjaXBoZXJQYXJhbXMgPSBDcnlwdG9KUy5saWIuQ2lwaGVyUGFyYW1zLmNyZWF0ZSh7XG5cdCAgICAgICAgICogICAgICAgICBjaXBoZXJ0ZXh0OiBjaXBoZXJ0ZXh0V29yZEFycmF5LFxuXHQgICAgICAgICAqICAgICAgICAga2V5OiBrZXlXb3JkQXJyYXksXG5cdCAgICAgICAgICogICAgICAgICBpdjogaXZXb3JkQXJyYXksXG5cdCAgICAgICAgICogICAgICAgICBzYWx0OiBzYWx0V29yZEFycmF5LFxuXHQgICAgICAgICAqICAgICAgICAgYWxnb3JpdGhtOiBDcnlwdG9KUy5hbGdvLkFFUyxcblx0ICAgICAgICAgKiAgICAgICAgIG1vZGU6IENyeXB0b0pTLm1vZGUuQ0JDLFxuXHQgICAgICAgICAqICAgICAgICAgcGFkZGluZzogQ3J5cHRvSlMucGFkLlBLQ1M3LFxuXHQgICAgICAgICAqICAgICAgICAgYmxvY2tTaXplOiA0LFxuXHQgICAgICAgICAqICAgICAgICAgZm9ybWF0dGVyOiBDcnlwdG9KUy5mb3JtYXQuT3BlblNTTFxuXHQgICAgICAgICAqICAgICB9KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBpbml0OiBmdW5jdGlvbiAoY2lwaGVyUGFyYW1zKSB7XG5cdCAgICAgICAgICAgIHRoaXMubWl4SW4oY2lwaGVyUGFyYW1zKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29udmVydHMgdGhpcyBjaXBoZXIgcGFyYW1zIG9iamVjdCB0byBhIHN0cmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7Rm9ybWF0fSBmb3JtYXR0ZXIgKE9wdGlvbmFsKSBUaGUgZm9ybWF0dGluZyBzdHJhdGVneSB0byB1c2UuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBzdHJpbmdpZmllZCBjaXBoZXIgcGFyYW1zLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHRocm93cyBFcnJvciBJZiBuZWl0aGVyIHRoZSBmb3JtYXR0ZXIgbm9yIHRoZSBkZWZhdWx0IGZvcm1hdHRlciBpcyBzZXQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBzdHJpbmcgPSBjaXBoZXJQYXJhbXMgKyAnJztcblx0ICAgICAgICAgKiAgICAgdmFyIHN0cmluZyA9IGNpcGhlclBhcmFtcy50b1N0cmluZygpO1xuXHQgICAgICAgICAqICAgICB2YXIgc3RyaW5nID0gY2lwaGVyUGFyYW1zLnRvU3RyaW5nKENyeXB0b0pTLmZvcm1hdC5PcGVuU1NMKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICB0b1N0cmluZzogZnVuY3Rpb24gKGZvcm1hdHRlcikge1xuXHQgICAgICAgICAgICByZXR1cm4gKGZvcm1hdHRlciB8fCB0aGlzLmZvcm1hdHRlcikuc3RyaW5naWZ5KHRoaXMpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXG5cdCAgICAvKipcblx0ICAgICAqIEZvcm1hdCBuYW1lc3BhY2UuXG5cdCAgICAgKi9cblx0ICAgIHZhciBDX2Zvcm1hdCA9IEMuZm9ybWF0ID0ge307XG5cblx0ICAgIC8qKlxuXHQgICAgICogT3BlblNTTCBmb3JtYXR0aW5nIHN0cmF0ZWd5LlxuXHQgICAgICovXG5cdCAgICB2YXIgT3BlblNTTEZvcm1hdHRlciA9IENfZm9ybWF0Lk9wZW5TU0wgPSB7XG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29udmVydHMgYSBjaXBoZXIgcGFyYW1zIG9iamVjdCB0byBhbiBPcGVuU1NMLWNvbXBhdGlibGUgc3RyaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtDaXBoZXJQYXJhbXN9IGNpcGhlclBhcmFtcyBUaGUgY2lwaGVyIHBhcmFtcyBvYmplY3QuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBPcGVuU1NMLWNvbXBhdGlibGUgc3RyaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgb3BlblNTTFN0cmluZyA9IENyeXB0b0pTLmZvcm1hdC5PcGVuU1NMLnN0cmluZ2lmeShjaXBoZXJQYXJhbXMpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHN0cmluZ2lmeTogZnVuY3Rpb24gKGNpcGhlclBhcmFtcykge1xuXHQgICAgICAgICAgICB2YXIgd29yZEFycmF5O1xuXG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIgY2lwaGVydGV4dCA9IGNpcGhlclBhcmFtcy5jaXBoZXJ0ZXh0O1xuXHQgICAgICAgICAgICB2YXIgc2FsdCA9IGNpcGhlclBhcmFtcy5zYWx0O1xuXG5cdCAgICAgICAgICAgIC8vIEZvcm1hdFxuXHQgICAgICAgICAgICBpZiAoc2FsdCkge1xuXHQgICAgICAgICAgICAgICAgd29yZEFycmF5ID0gV29yZEFycmF5LmNyZWF0ZShbMHg1MzYxNmM3NCwgMHg2NTY0NWY1Zl0pLmNvbmNhdChzYWx0KS5jb25jYXQoY2lwaGVydGV4dCk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB3b3JkQXJyYXkgPSBjaXBoZXJ0ZXh0O1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgcmV0dXJuIHdvcmRBcnJheS50b1N0cmluZyhCYXNlNjQpO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb252ZXJ0cyBhbiBPcGVuU1NMLWNvbXBhdGlibGUgc3RyaW5nIHRvIGEgY2lwaGVyIHBhcmFtcyBvYmplY3QuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gb3BlblNTTFN0ciBUaGUgT3BlblNTTC1jb21wYXRpYmxlIHN0cmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge0NpcGhlclBhcmFtc30gVGhlIGNpcGhlciBwYXJhbXMgb2JqZWN0LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgY2lwaGVyUGFyYW1zID0gQ3J5cHRvSlMuZm9ybWF0Lk9wZW5TU0wucGFyc2Uob3BlblNTTFN0cmluZyk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgcGFyc2U6IGZ1bmN0aW9uIChvcGVuU1NMU3RyKSB7XG5cdCAgICAgICAgICAgIHZhciBzYWx0O1xuXG5cdCAgICAgICAgICAgIC8vIFBhcnNlIGJhc2U2NFxuXHQgICAgICAgICAgICB2YXIgY2lwaGVydGV4dCA9IEJhc2U2NC5wYXJzZShvcGVuU1NMU3RyKTtcblxuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dFxuXHQgICAgICAgICAgICB2YXIgY2lwaGVydGV4dFdvcmRzID0gY2lwaGVydGV4dC53b3JkcztcblxuXHQgICAgICAgICAgICAvLyBUZXN0IGZvciBzYWx0XG5cdCAgICAgICAgICAgIGlmIChjaXBoZXJ0ZXh0V29yZHNbMF0gPT0gMHg1MzYxNmM3NCAmJiBjaXBoZXJ0ZXh0V29yZHNbMV0gPT0gMHg2NTY0NWY1Zikge1xuXHQgICAgICAgICAgICAgICAgLy8gRXh0cmFjdCBzYWx0XG5cdCAgICAgICAgICAgICAgICBzYWx0ID0gV29yZEFycmF5LmNyZWF0ZShjaXBoZXJ0ZXh0V29yZHMuc2xpY2UoMiwgNCkpO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBSZW1vdmUgc2FsdCBmcm9tIGNpcGhlcnRleHRcblx0ICAgICAgICAgICAgICAgIGNpcGhlcnRleHRXb3Jkcy5zcGxpY2UoMCwgNCk7XG5cdCAgICAgICAgICAgICAgICBjaXBoZXJ0ZXh0LnNpZ0J5dGVzIC09IDE2O1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgcmV0dXJuIENpcGhlclBhcmFtcy5jcmVhdGUoeyBjaXBoZXJ0ZXh0OiBjaXBoZXJ0ZXh0LCBzYWx0OiBzYWx0IH0pO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cblx0ICAgIC8qKlxuXHQgICAgICogQSBjaXBoZXIgd3JhcHBlciB0aGF0IHJldHVybnMgY2lwaGVydGV4dCBhcyBhIHNlcmlhbGl6YWJsZSBjaXBoZXIgcGFyYW1zIG9iamVjdC5cblx0ICAgICAqL1xuXHQgICAgdmFyIFNlcmlhbGl6YWJsZUNpcGhlciA9IENfbGliLlNlcmlhbGl6YWJsZUNpcGhlciA9IEJhc2UuZXh0ZW5kKHtcblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb25maWd1cmF0aW9uIG9wdGlvbnMuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcHJvcGVydHkge0Zvcm1hdHRlcn0gZm9ybWF0IFRoZSBmb3JtYXR0aW5nIHN0cmF0ZWd5IHRvIGNvbnZlcnQgY2lwaGVyIHBhcmFtIG9iamVjdHMgdG8gYW5kIGZyb20gYSBzdHJpbmcuIERlZmF1bHQ6IE9wZW5TU0xcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBjZmc6IEJhc2UuZXh0ZW5kKHtcblx0ICAgICAgICAgICAgZm9ybWF0OiBPcGVuU1NMRm9ybWF0dGVyXG5cdCAgICAgICAgfSksXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBFbmNyeXB0cyBhIG1lc3NhZ2UuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge0NpcGhlcn0gY2lwaGVyIFRoZSBjaXBoZXIgYWxnb3JpdGhtIHRvIHVzZS5cblx0ICAgICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gZW5jcnlwdC5cblx0ICAgICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheX0ga2V5IFRoZSBrZXkuXG5cdCAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGNmZyAoT3B0aW9uYWwpIFRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gdXNlIGZvciB0aGlzIG9wZXJhdGlvbi5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge0NpcGhlclBhcmFtc30gQSBjaXBoZXIgcGFyYW1zIG9iamVjdC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBzdGF0aWNcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIGNpcGhlcnRleHRQYXJhbXMgPSBDcnlwdG9KUy5saWIuU2VyaWFsaXphYmxlQ2lwaGVyLmVuY3J5cHQoQ3J5cHRvSlMuYWxnby5BRVMsIG1lc3NhZ2UsIGtleSk7XG5cdCAgICAgICAgICogICAgIHZhciBjaXBoZXJ0ZXh0UGFyYW1zID0gQ3J5cHRvSlMubGliLlNlcmlhbGl6YWJsZUNpcGhlci5lbmNyeXB0KENyeXB0b0pTLmFsZ28uQUVTLCBtZXNzYWdlLCBrZXksIHsgaXY6IGl2IH0pO1xuXHQgICAgICAgICAqICAgICB2YXIgY2lwaGVydGV4dFBhcmFtcyA9IENyeXB0b0pTLmxpYi5TZXJpYWxpemFibGVDaXBoZXIuZW5jcnlwdChDcnlwdG9KUy5hbGdvLkFFUywgbWVzc2FnZSwga2V5LCB7IGl2OiBpdiwgZm9ybWF0OiBDcnlwdG9KUy5mb3JtYXQuT3BlblNTTCB9KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBlbmNyeXB0OiBmdW5jdGlvbiAoY2lwaGVyLCBtZXNzYWdlLCBrZXksIGNmZykge1xuXHQgICAgICAgICAgICAvLyBBcHBseSBjb25maWcgZGVmYXVsdHNcblx0ICAgICAgICAgICAgY2ZnID0gdGhpcy5jZmcuZXh0ZW5kKGNmZyk7XG5cblx0ICAgICAgICAgICAgLy8gRW5jcnlwdFxuXHQgICAgICAgICAgICB2YXIgZW5jcnlwdG9yID0gY2lwaGVyLmNyZWF0ZUVuY3J5cHRvcihrZXksIGNmZyk7XG5cdCAgICAgICAgICAgIHZhciBjaXBoZXJ0ZXh0ID0gZW5jcnlwdG9yLmZpbmFsaXplKG1lc3NhZ2UpO1xuXG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0XG5cdCAgICAgICAgICAgIHZhciBjaXBoZXJDZmcgPSBlbmNyeXB0b3IuY2ZnO1xuXG5cdCAgICAgICAgICAgIC8vIENyZWF0ZSBhbmQgcmV0dXJuIHNlcmlhbGl6YWJsZSBjaXBoZXIgcGFyYW1zXG5cdCAgICAgICAgICAgIHJldHVybiBDaXBoZXJQYXJhbXMuY3JlYXRlKHtcblx0ICAgICAgICAgICAgICAgIGNpcGhlcnRleHQ6IGNpcGhlcnRleHQsXG5cdCAgICAgICAgICAgICAgICBrZXk6IGtleSxcblx0ICAgICAgICAgICAgICAgIGl2OiBjaXBoZXJDZmcuaXYsXG5cdCAgICAgICAgICAgICAgICBhbGdvcml0aG06IGNpcGhlcixcblx0ICAgICAgICAgICAgICAgIG1vZGU6IGNpcGhlckNmZy5tb2RlLFxuXHQgICAgICAgICAgICAgICAgcGFkZGluZzogY2lwaGVyQ2ZnLnBhZGRpbmcsXG5cdCAgICAgICAgICAgICAgICBibG9ja1NpemU6IGNpcGhlci5ibG9ja1NpemUsXG5cdCAgICAgICAgICAgICAgICBmb3JtYXR0ZXI6IGNmZy5mb3JtYXRcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIERlY3J5cHRzIHNlcmlhbGl6ZWQgY2lwaGVydGV4dC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7Q2lwaGVyfSBjaXBoZXIgVGhlIGNpcGhlciBhbGdvcml0aG0gdG8gdXNlLlxuXHQgICAgICAgICAqIEBwYXJhbSB7Q2lwaGVyUGFyYW1zfHN0cmluZ30gY2lwaGVydGV4dCBUaGUgY2lwaGVydGV4dCB0byBkZWNyeXB0LlxuXHQgICAgICAgICAqIEBwYXJhbSB7V29yZEFycmF5fSBrZXkgVGhlIGtleS5cblx0ICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gY2ZnIChPcHRpb25hbCkgVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byB1c2UgZm9yIHRoaXMgb3BlcmF0aW9uLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgcGxhaW50ZXh0LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgcGxhaW50ZXh0ID0gQ3J5cHRvSlMubGliLlNlcmlhbGl6YWJsZUNpcGhlci5kZWNyeXB0KENyeXB0b0pTLmFsZ28uQUVTLCBmb3JtYXR0ZWRDaXBoZXJ0ZXh0LCBrZXksIHsgaXY6IGl2LCBmb3JtYXQ6IENyeXB0b0pTLmZvcm1hdC5PcGVuU1NMIH0pO1xuXHQgICAgICAgICAqICAgICB2YXIgcGxhaW50ZXh0ID0gQ3J5cHRvSlMubGliLlNlcmlhbGl6YWJsZUNpcGhlci5kZWNyeXB0KENyeXB0b0pTLmFsZ28uQUVTLCBjaXBoZXJ0ZXh0UGFyYW1zLCBrZXksIHsgaXY6IGl2LCBmb3JtYXQ6IENyeXB0b0pTLmZvcm1hdC5PcGVuU1NMIH0pO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGRlY3J5cHQ6IGZ1bmN0aW9uIChjaXBoZXIsIGNpcGhlcnRleHQsIGtleSwgY2ZnKSB7XG5cdCAgICAgICAgICAgIC8vIEFwcGx5IGNvbmZpZyBkZWZhdWx0c1xuXHQgICAgICAgICAgICBjZmcgPSB0aGlzLmNmZy5leHRlbmQoY2ZnKTtcblxuXHQgICAgICAgICAgICAvLyBDb252ZXJ0IHN0cmluZyB0byBDaXBoZXJQYXJhbXNcblx0ICAgICAgICAgICAgY2lwaGVydGV4dCA9IHRoaXMuX3BhcnNlKGNpcGhlcnRleHQsIGNmZy5mb3JtYXQpO1xuXG5cdCAgICAgICAgICAgIC8vIERlY3J5cHRcblx0ICAgICAgICAgICAgdmFyIHBsYWludGV4dCA9IGNpcGhlci5jcmVhdGVEZWNyeXB0b3Ioa2V5LCBjZmcpLmZpbmFsaXplKGNpcGhlcnRleHQuY2lwaGVydGV4dCk7XG5cblx0ICAgICAgICAgICAgcmV0dXJuIHBsYWludGV4dDtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29udmVydHMgc2VyaWFsaXplZCBjaXBoZXJ0ZXh0IHRvIENpcGhlclBhcmFtcyxcblx0ICAgICAgICAgKiBlbHNlIGFzc3VtZWQgQ2lwaGVyUGFyYW1zIGFscmVhZHkgYW5kIHJldHVybnMgY2lwaGVydGV4dCB1bmNoYW5nZWQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge0NpcGhlclBhcmFtc3xzdHJpbmd9IGNpcGhlcnRleHQgVGhlIGNpcGhlcnRleHQuXG5cdCAgICAgICAgICogQHBhcmFtIHtGb3JtYXR0ZXJ9IGZvcm1hdCBUaGUgZm9ybWF0dGluZyBzdHJhdGVneSB0byB1c2UgdG8gcGFyc2Ugc2VyaWFsaXplZCBjaXBoZXJ0ZXh0LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7Q2lwaGVyUGFyYW1zfSBUaGUgdW5zZXJpYWxpemVkIGNpcGhlcnRleHQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBjaXBoZXJ0ZXh0UGFyYW1zID0gQ3J5cHRvSlMubGliLlNlcmlhbGl6YWJsZUNpcGhlci5fcGFyc2UoY2lwaGVydGV4dFN0cmluZ09yUGFyYW1zLCBmb3JtYXQpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIF9wYXJzZTogZnVuY3Rpb24gKGNpcGhlcnRleHQsIGZvcm1hdCkge1xuXHQgICAgICAgICAgICBpZiAodHlwZW9mIGNpcGhlcnRleHQgPT0gJ3N0cmluZycpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBmb3JtYXQucGFyc2UoY2lwaGVydGV4dCwgdGhpcyk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gY2lwaGVydGV4dDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXG5cdCAgICAvKipcblx0ICAgICAqIEtleSBkZXJpdmF0aW9uIGZ1bmN0aW9uIG5hbWVzcGFjZS5cblx0ICAgICAqL1xuXHQgICAgdmFyIENfa2RmID0gQy5rZGYgPSB7fTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBPcGVuU1NMIGtleSBkZXJpdmF0aW9uIGZ1bmN0aW9uLlxuXHQgICAgICovXG5cdCAgICB2YXIgT3BlblNTTEtkZiA9IENfa2RmLk9wZW5TU0wgPSB7XG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogRGVyaXZlcyBhIGtleSBhbmQgSVYgZnJvbSBhIHBhc3N3b3JkLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHBhc3N3b3JkIFRoZSBwYXNzd29yZCB0byBkZXJpdmUgZnJvbS5cblx0ICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0ga2V5U2l6ZSBUaGUgc2l6ZSBpbiB3b3JkcyBvZiB0aGUga2V5IHRvIGdlbmVyYXRlLlxuXHQgICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBpdlNpemUgVGhlIHNpemUgaW4gd29yZHMgb2YgdGhlIElWIHRvIGdlbmVyYXRlLlxuXHQgICAgICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gc2FsdCAoT3B0aW9uYWwpIEEgNjQtYml0IHNhbHQgdG8gdXNlLiBJZiBvbWl0dGVkLCBhIHNhbHQgd2lsbCBiZSBnZW5lcmF0ZWQgcmFuZG9tbHkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtDaXBoZXJQYXJhbXN9IEEgY2lwaGVyIHBhcmFtcyBvYmplY3Qgd2l0aCB0aGUga2V5LCBJViwgYW5kIHNhbHQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBkZXJpdmVkUGFyYW1zID0gQ3J5cHRvSlMua2RmLk9wZW5TU0wuZXhlY3V0ZSgnUGFzc3dvcmQnLCAyNTYvMzIsIDEyOC8zMik7XG5cdCAgICAgICAgICogICAgIHZhciBkZXJpdmVkUGFyYW1zID0gQ3J5cHRvSlMua2RmLk9wZW5TU0wuZXhlY3V0ZSgnUGFzc3dvcmQnLCAyNTYvMzIsIDEyOC8zMiwgJ3NhbHRzYWx0Jyk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgZXhlY3V0ZTogZnVuY3Rpb24gKHBhc3N3b3JkLCBrZXlTaXplLCBpdlNpemUsIHNhbHQpIHtcblx0ICAgICAgICAgICAgLy8gR2VuZXJhdGUgcmFuZG9tIHNhbHRcblx0ICAgICAgICAgICAgaWYgKCFzYWx0KSB7XG5cdCAgICAgICAgICAgICAgICBzYWx0ID0gV29yZEFycmF5LnJhbmRvbSg2NC84KTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIERlcml2ZSBrZXkgYW5kIElWXG5cdCAgICAgICAgICAgIHZhciBrZXkgPSBFdnBLREYuY3JlYXRlKHsga2V5U2l6ZToga2V5U2l6ZSArIGl2U2l6ZSB9KS5jb21wdXRlKHBhc3N3b3JkLCBzYWx0KTtcblxuXHQgICAgICAgICAgICAvLyBTZXBhcmF0ZSBrZXkgYW5kIElWXG5cdCAgICAgICAgICAgIHZhciBpdiA9IFdvcmRBcnJheS5jcmVhdGUoa2V5LndvcmRzLnNsaWNlKGtleVNpemUpLCBpdlNpemUgKiA0KTtcblx0ICAgICAgICAgICAga2V5LnNpZ0J5dGVzID0ga2V5U2l6ZSAqIDQ7XG5cblx0ICAgICAgICAgICAgLy8gUmV0dXJuIHBhcmFtc1xuXHQgICAgICAgICAgICByZXR1cm4gQ2lwaGVyUGFyYW1zLmNyZWF0ZSh7IGtleToga2V5LCBpdjogaXYsIHNhbHQ6IHNhbHQgfSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBBIHNlcmlhbGl6YWJsZSBjaXBoZXIgd3JhcHBlciB0aGF0IGRlcml2ZXMgdGhlIGtleSBmcm9tIGEgcGFzc3dvcmQsXG5cdCAgICAgKiBhbmQgcmV0dXJucyBjaXBoZXJ0ZXh0IGFzIGEgc2VyaWFsaXphYmxlIGNpcGhlciBwYXJhbXMgb2JqZWN0LlxuXHQgICAgICovXG5cdCAgICB2YXIgUGFzc3dvcmRCYXNlZENpcGhlciA9IENfbGliLlBhc3N3b3JkQmFzZWRDaXBoZXIgPSBTZXJpYWxpemFibGVDaXBoZXIuZXh0ZW5kKHtcblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb25maWd1cmF0aW9uIG9wdGlvbnMuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcHJvcGVydHkge0tERn0ga2RmIFRoZSBrZXkgZGVyaXZhdGlvbiBmdW5jdGlvbiB0byB1c2UgdG8gZ2VuZXJhdGUgYSBrZXkgYW5kIElWIGZyb20gYSBwYXNzd29yZC4gRGVmYXVsdDogT3BlblNTTFxuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGNmZzogU2VyaWFsaXphYmxlQ2lwaGVyLmNmZy5leHRlbmQoe1xuXHQgICAgICAgICAgICBrZGY6IE9wZW5TU0xLZGZcblx0ICAgICAgICB9KSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIEVuY3J5cHRzIGEgbWVzc2FnZSB1c2luZyBhIHBhc3N3b3JkLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtDaXBoZXJ9IGNpcGhlciBUaGUgY2lwaGVyIGFsZ29yaXRobSB0byB1c2UuXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBtZXNzYWdlIFRoZSBtZXNzYWdlIHRvIGVuY3J5cHQuXG5cdCAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHBhc3N3b3JkIFRoZSBwYXNzd29yZC5cblx0ICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gY2ZnIChPcHRpb25hbCkgVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byB1c2UgZm9yIHRoaXMgb3BlcmF0aW9uLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7Q2lwaGVyUGFyYW1zfSBBIGNpcGhlciBwYXJhbXMgb2JqZWN0LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgY2lwaGVydGV4dFBhcmFtcyA9IENyeXB0b0pTLmxpYi5QYXNzd29yZEJhc2VkQ2lwaGVyLmVuY3J5cHQoQ3J5cHRvSlMuYWxnby5BRVMsIG1lc3NhZ2UsICdwYXNzd29yZCcpO1xuXHQgICAgICAgICAqICAgICB2YXIgY2lwaGVydGV4dFBhcmFtcyA9IENyeXB0b0pTLmxpYi5QYXNzd29yZEJhc2VkQ2lwaGVyLmVuY3J5cHQoQ3J5cHRvSlMuYWxnby5BRVMsIG1lc3NhZ2UsICdwYXNzd29yZCcsIHsgZm9ybWF0OiBDcnlwdG9KUy5mb3JtYXQuT3BlblNTTCB9KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBlbmNyeXB0OiBmdW5jdGlvbiAoY2lwaGVyLCBtZXNzYWdlLCBwYXNzd29yZCwgY2ZnKSB7XG5cdCAgICAgICAgICAgIC8vIEFwcGx5IGNvbmZpZyBkZWZhdWx0c1xuXHQgICAgICAgICAgICBjZmcgPSB0aGlzLmNmZy5leHRlbmQoY2ZnKTtcblxuXHQgICAgICAgICAgICAvLyBEZXJpdmUga2V5IGFuZCBvdGhlciBwYXJhbXNcblx0ICAgICAgICAgICAgdmFyIGRlcml2ZWRQYXJhbXMgPSBjZmcua2RmLmV4ZWN1dGUocGFzc3dvcmQsIGNpcGhlci5rZXlTaXplLCBjaXBoZXIuaXZTaXplKTtcblxuXHQgICAgICAgICAgICAvLyBBZGQgSVYgdG8gY29uZmlnXG5cdCAgICAgICAgICAgIGNmZy5pdiA9IGRlcml2ZWRQYXJhbXMuaXY7XG5cblx0ICAgICAgICAgICAgLy8gRW5jcnlwdFxuXHQgICAgICAgICAgICB2YXIgY2lwaGVydGV4dCA9IFNlcmlhbGl6YWJsZUNpcGhlci5lbmNyeXB0LmNhbGwodGhpcywgY2lwaGVyLCBtZXNzYWdlLCBkZXJpdmVkUGFyYW1zLmtleSwgY2ZnKTtcblxuXHQgICAgICAgICAgICAvLyBNaXggaW4gZGVyaXZlZCBwYXJhbXNcblx0ICAgICAgICAgICAgY2lwaGVydGV4dC5taXhJbihkZXJpdmVkUGFyYW1zKTtcblxuXHQgICAgICAgICAgICByZXR1cm4gY2lwaGVydGV4dDtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogRGVjcnlwdHMgc2VyaWFsaXplZCBjaXBoZXJ0ZXh0IHVzaW5nIGEgcGFzc3dvcmQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge0NpcGhlcn0gY2lwaGVyIFRoZSBjaXBoZXIgYWxnb3JpdGhtIHRvIHVzZS5cblx0ICAgICAgICAgKiBAcGFyYW0ge0NpcGhlclBhcmFtc3xzdHJpbmd9IGNpcGhlcnRleHQgVGhlIGNpcGhlcnRleHQgdG8gZGVjcnlwdC5cblx0ICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcGFzc3dvcmQgVGhlIHBhc3N3b3JkLlxuXHQgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjZmcgKE9wdGlvbmFsKSBUaGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIHVzZSBmb3IgdGhpcyBvcGVyYXRpb24uXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSBwbGFpbnRleHQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBwbGFpbnRleHQgPSBDcnlwdG9KUy5saWIuUGFzc3dvcmRCYXNlZENpcGhlci5kZWNyeXB0KENyeXB0b0pTLmFsZ28uQUVTLCBmb3JtYXR0ZWRDaXBoZXJ0ZXh0LCAncGFzc3dvcmQnLCB7IGZvcm1hdDogQ3J5cHRvSlMuZm9ybWF0Lk9wZW5TU0wgfSk7XG5cdCAgICAgICAgICogICAgIHZhciBwbGFpbnRleHQgPSBDcnlwdG9KUy5saWIuUGFzc3dvcmRCYXNlZENpcGhlci5kZWNyeXB0KENyeXB0b0pTLmFsZ28uQUVTLCBjaXBoZXJ0ZXh0UGFyYW1zLCAncGFzc3dvcmQnLCB7IGZvcm1hdDogQ3J5cHRvSlMuZm9ybWF0Lk9wZW5TU0wgfSk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgZGVjcnlwdDogZnVuY3Rpb24gKGNpcGhlciwgY2lwaGVydGV4dCwgcGFzc3dvcmQsIGNmZykge1xuXHQgICAgICAgICAgICAvLyBBcHBseSBjb25maWcgZGVmYXVsdHNcblx0ICAgICAgICAgICAgY2ZnID0gdGhpcy5jZmcuZXh0ZW5kKGNmZyk7XG5cblx0ICAgICAgICAgICAgLy8gQ29udmVydCBzdHJpbmcgdG8gQ2lwaGVyUGFyYW1zXG5cdCAgICAgICAgICAgIGNpcGhlcnRleHQgPSB0aGlzLl9wYXJzZShjaXBoZXJ0ZXh0LCBjZmcuZm9ybWF0KTtcblxuXHQgICAgICAgICAgICAvLyBEZXJpdmUga2V5IGFuZCBvdGhlciBwYXJhbXNcblx0ICAgICAgICAgICAgdmFyIGRlcml2ZWRQYXJhbXMgPSBjZmcua2RmLmV4ZWN1dGUocGFzc3dvcmQsIGNpcGhlci5rZXlTaXplLCBjaXBoZXIuaXZTaXplLCBjaXBoZXJ0ZXh0LnNhbHQpO1xuXG5cdCAgICAgICAgICAgIC8vIEFkZCBJViB0byBjb25maWdcblx0ICAgICAgICAgICAgY2ZnLml2ID0gZGVyaXZlZFBhcmFtcy5pdjtcblxuXHQgICAgICAgICAgICAvLyBEZWNyeXB0XG5cdCAgICAgICAgICAgIHZhciBwbGFpbnRleHQgPSBTZXJpYWxpemFibGVDaXBoZXIuZGVjcnlwdC5jYWxsKHRoaXMsIGNpcGhlciwgY2lwaGVydGV4dCwgZGVyaXZlZFBhcmFtcy5rZXksIGNmZyk7XG5cblx0ICAgICAgICAgICAgcmV0dXJuIHBsYWludGV4dDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0fSgpKTtcblxuXG5cdC8qKlxuXHQgKiBDaXBoZXIgRmVlZGJhY2sgYmxvY2sgbW9kZS5cblx0ICovXG5cdENyeXB0b0pTLm1vZGUuQ0ZCID0gKGZ1bmN0aW9uICgpIHtcblx0ICAgIHZhciBDRkIgPSBDcnlwdG9KUy5saWIuQmxvY2tDaXBoZXJNb2RlLmV4dGVuZCgpO1xuXG5cdCAgICBDRkIuRW5jcnlwdG9yID0gQ0ZCLmV4dGVuZCh7XG5cdCAgICAgICAgcHJvY2Vzc0Jsb2NrOiBmdW5jdGlvbiAod29yZHMsIG9mZnNldCkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIGNpcGhlciA9IHRoaXMuX2NpcGhlcjtcblx0ICAgICAgICAgICAgdmFyIGJsb2NrU2l6ZSA9IGNpcGhlci5ibG9ja1NpemU7XG5cblx0ICAgICAgICAgICAgZ2VuZXJhdGVLZXlzdHJlYW1BbmRFbmNyeXB0LmNhbGwodGhpcywgd29yZHMsIG9mZnNldCwgYmxvY2tTaXplLCBjaXBoZXIpO1xuXG5cdCAgICAgICAgICAgIC8vIFJlbWVtYmVyIHRoaXMgYmxvY2sgdG8gdXNlIHdpdGggbmV4dCBibG9ja1xuXHQgICAgICAgICAgICB0aGlzLl9wcmV2QmxvY2sgPSB3b3Jkcy5zbGljZShvZmZzZXQsIG9mZnNldCArIGJsb2NrU2l6ZSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cblx0ICAgIENGQi5EZWNyeXB0b3IgPSBDRkIuZXh0ZW5kKHtcblx0ICAgICAgICBwcm9jZXNzQmxvY2s6IGZ1bmN0aW9uICh3b3Jkcywgb2Zmc2V0KSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIgY2lwaGVyID0gdGhpcy5fY2lwaGVyO1xuXHQgICAgICAgICAgICB2YXIgYmxvY2tTaXplID0gY2lwaGVyLmJsb2NrU2l6ZTtcblxuXHQgICAgICAgICAgICAvLyBSZW1lbWJlciB0aGlzIGJsb2NrIHRvIHVzZSB3aXRoIG5leHQgYmxvY2tcblx0ICAgICAgICAgICAgdmFyIHRoaXNCbG9jayA9IHdvcmRzLnNsaWNlKG9mZnNldCwgb2Zmc2V0ICsgYmxvY2tTaXplKTtcblxuXHQgICAgICAgICAgICBnZW5lcmF0ZUtleXN0cmVhbUFuZEVuY3J5cHQuY2FsbCh0aGlzLCB3b3Jkcywgb2Zmc2V0LCBibG9ja1NpemUsIGNpcGhlcik7XG5cblx0ICAgICAgICAgICAgLy8gVGhpcyBibG9jayBiZWNvbWVzIHRoZSBwcmV2aW91cyBibG9ja1xuXHQgICAgICAgICAgICB0aGlzLl9wcmV2QmxvY2sgPSB0aGlzQmxvY2s7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cblx0ICAgIGZ1bmN0aW9uIGdlbmVyYXRlS2V5c3RyZWFtQW5kRW5jcnlwdCh3b3Jkcywgb2Zmc2V0LCBibG9ja1NpemUsIGNpcGhlcikge1xuXHQgICAgICAgIHZhciBrZXlzdHJlYW07XG5cblx0ICAgICAgICAvLyBTaG9ydGN1dFxuXHQgICAgICAgIHZhciBpdiA9IHRoaXMuX2l2O1xuXG5cdCAgICAgICAgLy8gR2VuZXJhdGUga2V5c3RyZWFtXG5cdCAgICAgICAgaWYgKGl2KSB7XG5cdCAgICAgICAgICAgIGtleXN0cmVhbSA9IGl2LnNsaWNlKDApO1xuXG5cdCAgICAgICAgICAgIC8vIFJlbW92ZSBJViBmb3Igc3Vic2VxdWVudCBibG9ja3Ncblx0ICAgICAgICAgICAgdGhpcy5faXYgPSB1bmRlZmluZWQ7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAga2V5c3RyZWFtID0gdGhpcy5fcHJldkJsb2NrO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBjaXBoZXIuZW5jcnlwdEJsb2NrKGtleXN0cmVhbSwgMCk7XG5cblx0ICAgICAgICAvLyBFbmNyeXB0XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBibG9ja1NpemU7IGkrKykge1xuXHQgICAgICAgICAgICB3b3Jkc1tvZmZzZXQgKyBpXSBePSBrZXlzdHJlYW1baV07XG5cdCAgICAgICAgfVxuXHQgICAgfVxuXG5cdCAgICByZXR1cm4gQ0ZCO1xuXHR9KCkpO1xuXG5cblx0LyoqXG5cdCAqIEVsZWN0cm9uaWMgQ29kZWJvb2sgYmxvY2sgbW9kZS5cblx0ICovXG5cdENyeXB0b0pTLm1vZGUuRUNCID0gKGZ1bmN0aW9uICgpIHtcblx0ICAgIHZhciBFQ0IgPSBDcnlwdG9KUy5saWIuQmxvY2tDaXBoZXJNb2RlLmV4dGVuZCgpO1xuXG5cdCAgICBFQ0IuRW5jcnlwdG9yID0gRUNCLmV4dGVuZCh7XG5cdCAgICAgICAgcHJvY2Vzc0Jsb2NrOiBmdW5jdGlvbiAod29yZHMsIG9mZnNldCkge1xuXHQgICAgICAgICAgICB0aGlzLl9jaXBoZXIuZW5jcnlwdEJsb2NrKHdvcmRzLCBvZmZzZXQpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXG5cdCAgICBFQ0IuRGVjcnlwdG9yID0gRUNCLmV4dGVuZCh7XG5cdCAgICAgICAgcHJvY2Vzc0Jsb2NrOiBmdW5jdGlvbiAod29yZHMsIG9mZnNldCkge1xuXHQgICAgICAgICAgICB0aGlzLl9jaXBoZXIuZGVjcnlwdEJsb2NrKHdvcmRzLCBvZmZzZXQpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXG5cdCAgICByZXR1cm4gRUNCO1xuXHR9KCkpO1xuXG5cblx0LyoqXG5cdCAqIEFOU0kgWC45MjMgcGFkZGluZyBzdHJhdGVneS5cblx0ICovXG5cdENyeXB0b0pTLnBhZC5BbnNpWDkyMyA9IHtcblx0ICAgIHBhZDogZnVuY3Rpb24gKGRhdGEsIGJsb2NrU2l6ZSkge1xuXHQgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgIHZhciBkYXRhU2lnQnl0ZXMgPSBkYXRhLnNpZ0J5dGVzO1xuXHQgICAgICAgIHZhciBibG9ja1NpemVCeXRlcyA9IGJsb2NrU2l6ZSAqIDQ7XG5cblx0ICAgICAgICAvLyBDb3VudCBwYWRkaW5nIGJ5dGVzXG5cdCAgICAgICAgdmFyIG5QYWRkaW5nQnl0ZXMgPSBibG9ja1NpemVCeXRlcyAtIGRhdGFTaWdCeXRlcyAlIGJsb2NrU2l6ZUJ5dGVzO1xuXG5cdCAgICAgICAgLy8gQ29tcHV0ZSBsYXN0IGJ5dGUgcG9zaXRpb25cblx0ICAgICAgICB2YXIgbGFzdEJ5dGVQb3MgPSBkYXRhU2lnQnl0ZXMgKyBuUGFkZGluZ0J5dGVzIC0gMTtcblxuXHQgICAgICAgIC8vIFBhZFxuXHQgICAgICAgIGRhdGEuY2xhbXAoKTtcblx0ICAgICAgICBkYXRhLndvcmRzW2xhc3RCeXRlUG9zID4+PiAyXSB8PSBuUGFkZGluZ0J5dGVzIDw8ICgyNCAtIChsYXN0Qnl0ZVBvcyAlIDQpICogOCk7XG5cdCAgICAgICAgZGF0YS5zaWdCeXRlcyArPSBuUGFkZGluZ0J5dGVzO1xuXHQgICAgfSxcblxuXHQgICAgdW5wYWQ6IGZ1bmN0aW9uIChkYXRhKSB7XG5cdCAgICAgICAgLy8gR2V0IG51bWJlciBvZiBwYWRkaW5nIGJ5dGVzIGZyb20gbGFzdCBieXRlXG5cdCAgICAgICAgdmFyIG5QYWRkaW5nQnl0ZXMgPSBkYXRhLndvcmRzWyhkYXRhLnNpZ0J5dGVzIC0gMSkgPj4+IDJdICYgMHhmZjtcblxuXHQgICAgICAgIC8vIFJlbW92ZSBwYWRkaW5nXG5cdCAgICAgICAgZGF0YS5zaWdCeXRlcyAtPSBuUGFkZGluZ0J5dGVzO1xuXHQgICAgfVxuXHR9O1xuXG5cblx0LyoqXG5cdCAqIElTTyAxMDEyNiBwYWRkaW5nIHN0cmF0ZWd5LlxuXHQgKi9cblx0Q3J5cHRvSlMucGFkLklzbzEwMTI2ID0ge1xuXHQgICAgcGFkOiBmdW5jdGlvbiAoZGF0YSwgYmxvY2tTaXplKSB7XG5cdCAgICAgICAgLy8gU2hvcnRjdXRcblx0ICAgICAgICB2YXIgYmxvY2tTaXplQnl0ZXMgPSBibG9ja1NpemUgKiA0O1xuXG5cdCAgICAgICAgLy8gQ291bnQgcGFkZGluZyBieXRlc1xuXHQgICAgICAgIHZhciBuUGFkZGluZ0J5dGVzID0gYmxvY2tTaXplQnl0ZXMgLSBkYXRhLnNpZ0J5dGVzICUgYmxvY2tTaXplQnl0ZXM7XG5cblx0ICAgICAgICAvLyBQYWRcblx0ICAgICAgICBkYXRhLmNvbmNhdChDcnlwdG9KUy5saWIuV29yZEFycmF5LnJhbmRvbShuUGFkZGluZ0J5dGVzIC0gMSkpLlxuXHQgICAgICAgICAgICAgY29uY2F0KENyeXB0b0pTLmxpYi5Xb3JkQXJyYXkuY3JlYXRlKFtuUGFkZGluZ0J5dGVzIDw8IDI0XSwgMSkpO1xuXHQgICAgfSxcblxuXHQgICAgdW5wYWQ6IGZ1bmN0aW9uIChkYXRhKSB7XG5cdCAgICAgICAgLy8gR2V0IG51bWJlciBvZiBwYWRkaW5nIGJ5dGVzIGZyb20gbGFzdCBieXRlXG5cdCAgICAgICAgdmFyIG5QYWRkaW5nQnl0ZXMgPSBkYXRhLndvcmRzWyhkYXRhLnNpZ0J5dGVzIC0gMSkgPj4+IDJdICYgMHhmZjtcblxuXHQgICAgICAgIC8vIFJlbW92ZSBwYWRkaW5nXG5cdCAgICAgICAgZGF0YS5zaWdCeXRlcyAtPSBuUGFkZGluZ0J5dGVzO1xuXHQgICAgfVxuXHR9O1xuXG5cblx0LyoqXG5cdCAqIElTTy9JRUMgOTc5Ny0xIFBhZGRpbmcgTWV0aG9kIDIuXG5cdCAqL1xuXHRDcnlwdG9KUy5wYWQuSXNvOTc5NzEgPSB7XG5cdCAgICBwYWQ6IGZ1bmN0aW9uIChkYXRhLCBibG9ja1NpemUpIHtcblx0ICAgICAgICAvLyBBZGQgMHg4MCBieXRlXG5cdCAgICAgICAgZGF0YS5jb25jYXQoQ3J5cHRvSlMubGliLldvcmRBcnJheS5jcmVhdGUoWzB4ODAwMDAwMDBdLCAxKSk7XG5cblx0ICAgICAgICAvLyBaZXJvIHBhZCB0aGUgcmVzdFxuXHQgICAgICAgIENyeXB0b0pTLnBhZC5aZXJvUGFkZGluZy5wYWQoZGF0YSwgYmxvY2tTaXplKTtcblx0ICAgIH0sXG5cblx0ICAgIHVucGFkOiBmdW5jdGlvbiAoZGF0YSkge1xuXHQgICAgICAgIC8vIFJlbW92ZSB6ZXJvIHBhZGRpbmdcblx0ICAgICAgICBDcnlwdG9KUy5wYWQuWmVyb1BhZGRpbmcudW5wYWQoZGF0YSk7XG5cblx0ICAgICAgICAvLyBSZW1vdmUgb25lIG1vcmUgYnl0ZSAtLSB0aGUgMHg4MCBieXRlXG5cdCAgICAgICAgZGF0YS5zaWdCeXRlcy0tO1xuXHQgICAgfVxuXHR9O1xuXG5cblx0LyoqXG5cdCAqIE91dHB1dCBGZWVkYmFjayBibG9jayBtb2RlLlxuXHQgKi9cblx0Q3J5cHRvSlMubW9kZS5PRkIgPSAoZnVuY3Rpb24gKCkge1xuXHQgICAgdmFyIE9GQiA9IENyeXB0b0pTLmxpYi5CbG9ja0NpcGhlck1vZGUuZXh0ZW5kKCk7XG5cblx0ICAgIHZhciBFbmNyeXB0b3IgPSBPRkIuRW5jcnlwdG9yID0gT0ZCLmV4dGVuZCh7XG5cdCAgICAgICAgcHJvY2Vzc0Jsb2NrOiBmdW5jdGlvbiAod29yZHMsIG9mZnNldCkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIGNpcGhlciA9IHRoaXMuX2NpcGhlclxuXHQgICAgICAgICAgICB2YXIgYmxvY2tTaXplID0gY2lwaGVyLmJsb2NrU2l6ZTtcblx0ICAgICAgICAgICAgdmFyIGl2ID0gdGhpcy5faXY7XG5cdCAgICAgICAgICAgIHZhciBrZXlzdHJlYW0gPSB0aGlzLl9rZXlzdHJlYW07XG5cblx0ICAgICAgICAgICAgLy8gR2VuZXJhdGUga2V5c3RyZWFtXG5cdCAgICAgICAgICAgIGlmIChpdikge1xuXHQgICAgICAgICAgICAgICAga2V5c3RyZWFtID0gdGhpcy5fa2V5c3RyZWFtID0gaXYuc2xpY2UoMCk7XG5cblx0ICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBJViBmb3Igc3Vic2VxdWVudCBibG9ja3Ncblx0ICAgICAgICAgICAgICAgIHRoaXMuX2l2ID0gdW5kZWZpbmVkO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGNpcGhlci5lbmNyeXB0QmxvY2soa2V5c3RyZWFtLCAwKTtcblxuXHQgICAgICAgICAgICAvLyBFbmNyeXB0XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYmxvY2tTaXplOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHdvcmRzW29mZnNldCArIGldIF49IGtleXN0cmVhbVtpXTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXG5cdCAgICBPRkIuRGVjcnlwdG9yID0gRW5jcnlwdG9yO1xuXG5cdCAgICByZXR1cm4gT0ZCO1xuXHR9KCkpO1xuXG5cblx0LyoqXG5cdCAqIEEgbm9vcCBwYWRkaW5nIHN0cmF0ZWd5LlxuXHQgKi9cblx0Q3J5cHRvSlMucGFkLk5vUGFkZGluZyA9IHtcblx0ICAgIHBhZDogZnVuY3Rpb24gKCkge1xuXHQgICAgfSxcblxuXHQgICAgdW5wYWQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgIH1cblx0fTtcblxuXG5cdChmdW5jdGlvbiAodW5kZWZpbmVkKSB7XG5cdCAgICAvLyBTaG9ydGN1dHNcblx0ICAgIHZhciBDID0gQ3J5cHRvSlM7XG5cdCAgICB2YXIgQ19saWIgPSBDLmxpYjtcblx0ICAgIHZhciBDaXBoZXJQYXJhbXMgPSBDX2xpYi5DaXBoZXJQYXJhbXM7XG5cdCAgICB2YXIgQ19lbmMgPSBDLmVuYztcblx0ICAgIHZhciBIZXggPSBDX2VuYy5IZXg7XG5cdCAgICB2YXIgQ19mb3JtYXQgPSBDLmZvcm1hdDtcblxuXHQgICAgdmFyIEhleEZvcm1hdHRlciA9IENfZm9ybWF0LkhleCA9IHtcblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb252ZXJ0cyB0aGUgY2lwaGVydGV4dCBvZiBhIGNpcGhlciBwYXJhbXMgb2JqZWN0IHRvIGEgaGV4YWRlY2ltYWxseSBlbmNvZGVkIHN0cmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7Q2lwaGVyUGFyYW1zfSBjaXBoZXJQYXJhbXMgVGhlIGNpcGhlciBwYXJhbXMgb2JqZWN0LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7c3RyaW5nfSBUaGUgaGV4YWRlY2ltYWxseSBlbmNvZGVkIHN0cmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBzdGF0aWNcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIGhleFN0cmluZyA9IENyeXB0b0pTLmZvcm1hdC5IZXguc3RyaW5naWZ5KGNpcGhlclBhcmFtcyk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgc3RyaW5naWZ5OiBmdW5jdGlvbiAoY2lwaGVyUGFyYW1zKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBjaXBoZXJQYXJhbXMuY2lwaGVydGV4dC50b1N0cmluZyhIZXgpO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb252ZXJ0cyBhIGhleGFkZWNpbWFsbHkgZW5jb2RlZCBjaXBoZXJ0ZXh0IHN0cmluZyB0byBhIGNpcGhlciBwYXJhbXMgb2JqZWN0LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGlucHV0IFRoZSBoZXhhZGVjaW1hbGx5IGVuY29kZWQgc3RyaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7Q2lwaGVyUGFyYW1zfSBUaGUgY2lwaGVyIHBhcmFtcyBvYmplY3QuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBjaXBoZXJQYXJhbXMgPSBDcnlwdG9KUy5mb3JtYXQuSGV4LnBhcnNlKGhleFN0cmluZyk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgcGFyc2U6IGZ1bmN0aW9uIChpbnB1dCkge1xuXHQgICAgICAgICAgICB2YXIgY2lwaGVydGV4dCA9IEhleC5wYXJzZShpbnB1dCk7XG5cdCAgICAgICAgICAgIHJldHVybiBDaXBoZXJQYXJhbXMuY3JlYXRlKHsgY2lwaGVydGV4dDogY2lwaGVydGV4dCB9KTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHR9KCkpO1xuXG5cblx0KGZ1bmN0aW9uICgpIHtcblx0ICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgdmFyIEMgPSBDcnlwdG9KUztcblx0ICAgIHZhciBDX2xpYiA9IEMubGliO1xuXHQgICAgdmFyIEJsb2NrQ2lwaGVyID0gQ19saWIuQmxvY2tDaXBoZXI7XG5cdCAgICB2YXIgQ19hbGdvID0gQy5hbGdvO1xuXG5cdCAgICAvLyBMb29rdXAgdGFibGVzXG5cdCAgICB2YXIgU0JPWCA9IFtdO1xuXHQgICAgdmFyIElOVl9TQk9YID0gW107XG5cdCAgICB2YXIgU1VCX01JWF8wID0gW107XG5cdCAgICB2YXIgU1VCX01JWF8xID0gW107XG5cdCAgICB2YXIgU1VCX01JWF8yID0gW107XG5cdCAgICB2YXIgU1VCX01JWF8zID0gW107XG5cdCAgICB2YXIgSU5WX1NVQl9NSVhfMCA9IFtdO1xuXHQgICAgdmFyIElOVl9TVUJfTUlYXzEgPSBbXTtcblx0ICAgIHZhciBJTlZfU1VCX01JWF8yID0gW107XG5cdCAgICB2YXIgSU5WX1NVQl9NSVhfMyA9IFtdO1xuXG5cdCAgICAvLyBDb21wdXRlIGxvb2t1cCB0YWJsZXNcblx0ICAgIChmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgLy8gQ29tcHV0ZSBkb3VibGUgdGFibGVcblx0ICAgICAgICB2YXIgZCA9IFtdO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMjU2OyBpKyspIHtcblx0ICAgICAgICAgICAgaWYgKGkgPCAxMjgpIHtcblx0ICAgICAgICAgICAgICAgIGRbaV0gPSBpIDw8IDE7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICBkW2ldID0gKGkgPDwgMSkgXiAweDExYjtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblxuXHQgICAgICAgIC8vIFdhbGsgR0YoMl44KVxuXHQgICAgICAgIHZhciB4ID0gMDtcblx0ICAgICAgICB2YXIgeGkgPSAwO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMjU2OyBpKyspIHtcblx0ICAgICAgICAgICAgLy8gQ29tcHV0ZSBzYm94XG5cdCAgICAgICAgICAgIHZhciBzeCA9IHhpIF4gKHhpIDw8IDEpIF4gKHhpIDw8IDIpIF4gKHhpIDw8IDMpIF4gKHhpIDw8IDQpO1xuXHQgICAgICAgICAgICBzeCA9IChzeCA+Pj4gOCkgXiAoc3ggJiAweGZmKSBeIDB4NjM7XG5cdCAgICAgICAgICAgIFNCT1hbeF0gPSBzeDtcblx0ICAgICAgICAgICAgSU5WX1NCT1hbc3hdID0geDtcblxuXHQgICAgICAgICAgICAvLyBDb21wdXRlIG11bHRpcGxpY2F0aW9uXG5cdCAgICAgICAgICAgIHZhciB4MiA9IGRbeF07XG5cdCAgICAgICAgICAgIHZhciB4NCA9IGRbeDJdO1xuXHQgICAgICAgICAgICB2YXIgeDggPSBkW3g0XTtcblxuXHQgICAgICAgICAgICAvLyBDb21wdXRlIHN1YiBieXRlcywgbWl4IGNvbHVtbnMgdGFibGVzXG5cdCAgICAgICAgICAgIHZhciB0ID0gKGRbc3hdICogMHgxMDEpIF4gKHN4ICogMHgxMDEwMTAwKTtcblx0ICAgICAgICAgICAgU1VCX01JWF8wW3hdID0gKHQgPDwgMjQpIHwgKHQgPj4+IDgpO1xuXHQgICAgICAgICAgICBTVUJfTUlYXzFbeF0gPSAodCA8PCAxNikgfCAodCA+Pj4gMTYpO1xuXHQgICAgICAgICAgICBTVUJfTUlYXzJbeF0gPSAodCA8PCA4KSAgfCAodCA+Pj4gMjQpO1xuXHQgICAgICAgICAgICBTVUJfTUlYXzNbeF0gPSB0O1xuXG5cdCAgICAgICAgICAgIC8vIENvbXB1dGUgaW52IHN1YiBieXRlcywgaW52IG1peCBjb2x1bW5zIHRhYmxlc1xuXHQgICAgICAgICAgICB2YXIgdCA9ICh4OCAqIDB4MTAxMDEwMSkgXiAoeDQgKiAweDEwMDAxKSBeICh4MiAqIDB4MTAxKSBeICh4ICogMHgxMDEwMTAwKTtcblx0ICAgICAgICAgICAgSU5WX1NVQl9NSVhfMFtzeF0gPSAodCA8PCAyNCkgfCAodCA+Pj4gOCk7XG5cdCAgICAgICAgICAgIElOVl9TVUJfTUlYXzFbc3hdID0gKHQgPDwgMTYpIHwgKHQgPj4+IDE2KTtcblx0ICAgICAgICAgICAgSU5WX1NVQl9NSVhfMltzeF0gPSAodCA8PCA4KSAgfCAodCA+Pj4gMjQpO1xuXHQgICAgICAgICAgICBJTlZfU1VCX01JWF8zW3N4XSA9IHQ7XG5cblx0ICAgICAgICAgICAgLy8gQ29tcHV0ZSBuZXh0IGNvdW50ZXJcblx0ICAgICAgICAgICAgaWYgKCF4KSB7XG5cdCAgICAgICAgICAgICAgICB4ID0geGkgPSAxO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgeCA9IHgyIF4gZFtkW2RbeDggXiB4Ml1dXTtcblx0ICAgICAgICAgICAgICAgIHhpIF49IGRbZFt4aV1dO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSgpKTtcblxuXHQgICAgLy8gUHJlY29tcHV0ZWQgUmNvbiBsb29rdXBcblx0ICAgIHZhciBSQ09OID0gWzB4MDAsIDB4MDEsIDB4MDIsIDB4MDQsIDB4MDgsIDB4MTAsIDB4MjAsIDB4NDAsIDB4ODAsIDB4MWIsIDB4MzZdO1xuXG5cdCAgICAvKipcblx0ICAgICAqIEFFUyBibG9jayBjaXBoZXIgYWxnb3JpdGhtLlxuXHQgICAgICovXG5cdCAgICB2YXIgQUVTID0gQ19hbGdvLkFFUyA9IEJsb2NrQ2lwaGVyLmV4dGVuZCh7XG5cdCAgICAgICAgX2RvUmVzZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIHQ7XG5cblx0ICAgICAgICAgICAgLy8gU2tpcCByZXNldCBvZiBuUm91bmRzIGhhcyBiZWVuIHNldCBiZWZvcmUgYW5kIGtleSBkaWQgbm90IGNoYW5nZVxuXHQgICAgICAgICAgICBpZiAodGhpcy5fblJvdW5kcyAmJiB0aGlzLl9rZXlQcmlvclJlc2V0ID09PSB0aGlzLl9rZXkpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybjtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIga2V5ID0gdGhpcy5fa2V5UHJpb3JSZXNldCA9IHRoaXMuX2tleTtcblx0ICAgICAgICAgICAgdmFyIGtleVdvcmRzID0ga2V5LndvcmRzO1xuXHQgICAgICAgICAgICB2YXIga2V5U2l6ZSA9IGtleS5zaWdCeXRlcyAvIDQ7XG5cblx0ICAgICAgICAgICAgLy8gQ29tcHV0ZSBudW1iZXIgb2Ygcm91bmRzXG5cdCAgICAgICAgICAgIHZhciBuUm91bmRzID0gdGhpcy5fblJvdW5kcyA9IGtleVNpemUgKyA2O1xuXG5cdCAgICAgICAgICAgIC8vIENvbXB1dGUgbnVtYmVyIG9mIGtleSBzY2hlZHVsZSByb3dzXG5cdCAgICAgICAgICAgIHZhciBrc1Jvd3MgPSAoblJvdW5kcyArIDEpICogNDtcblxuXHQgICAgICAgICAgICAvLyBDb21wdXRlIGtleSBzY2hlZHVsZVxuXHQgICAgICAgICAgICB2YXIga2V5U2NoZWR1bGUgPSB0aGlzLl9rZXlTY2hlZHVsZSA9IFtdO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBrc1JvdyA9IDA7IGtzUm93IDwga3NSb3dzOyBrc1JvdysrKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAoa3NSb3cgPCBrZXlTaXplKSB7XG5cdCAgICAgICAgICAgICAgICAgICAga2V5U2NoZWR1bGVba3NSb3ddID0ga2V5V29yZHNba3NSb3ddO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICB0ID0ga2V5U2NoZWR1bGVba3NSb3cgLSAxXTtcblxuXHQgICAgICAgICAgICAgICAgICAgIGlmICghKGtzUm93ICUga2V5U2l6ZSkpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgLy8gUm90IHdvcmRcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdCA9ICh0IDw8IDgpIHwgKHQgPj4+IDI0KTtcblxuXHQgICAgICAgICAgICAgICAgICAgICAgICAvLyBTdWIgd29yZFxuXHQgICAgICAgICAgICAgICAgICAgICAgICB0ID0gKFNCT1hbdCA+Pj4gMjRdIDw8IDI0KSB8IChTQk9YWyh0ID4+PiAxNikgJiAweGZmXSA8PCAxNikgfCAoU0JPWFsodCA+Pj4gOCkgJiAweGZmXSA8PCA4KSB8IFNCT1hbdCAmIDB4ZmZdO1xuXG5cdCAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1peCBSY29uXG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHQgXj0gUkNPTlsoa3NSb3cgLyBrZXlTaXplKSB8IDBdIDw8IDI0O1xuXHQgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoa2V5U2l6ZSA+IDYgJiYga3NSb3cgJSBrZXlTaXplID09IDQpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3ViIHdvcmRcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdCA9IChTQk9YW3QgPj4+IDI0XSA8PCAyNCkgfCAoU0JPWFsodCA+Pj4gMTYpICYgMHhmZl0gPDwgMTYpIHwgKFNCT1hbKHQgPj4+IDgpICYgMHhmZl0gPDwgOCkgfCBTQk9YW3QgJiAweGZmXTtcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgICAgICAgICBrZXlTY2hlZHVsZVtrc1Jvd10gPSBrZXlTY2hlZHVsZVtrc1JvdyAtIGtleVNpemVdIF4gdDtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIENvbXB1dGUgaW52IGtleSBzY2hlZHVsZVxuXHQgICAgICAgICAgICB2YXIgaW52S2V5U2NoZWR1bGUgPSB0aGlzLl9pbnZLZXlTY2hlZHVsZSA9IFtdO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpbnZLc1JvdyA9IDA7IGludktzUm93IDwga3NSb3dzOyBpbnZLc1JvdysrKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIga3NSb3cgPSBrc1Jvd3MgLSBpbnZLc1JvdztcblxuXHQgICAgICAgICAgICAgICAgaWYgKGludktzUm93ICUgNCkge1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciB0ID0ga2V5U2NoZWR1bGVba3NSb3ddO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgdCA9IGtleVNjaGVkdWxlW2tzUm93IC0gNF07XG5cdCAgICAgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgICAgIGlmIChpbnZLc1JvdyA8IDQgfHwga3NSb3cgPD0gNCkge1xuXHQgICAgICAgICAgICAgICAgICAgIGludktleVNjaGVkdWxlW2ludktzUm93XSA9IHQ7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIGludktleVNjaGVkdWxlW2ludktzUm93XSA9IElOVl9TVUJfTUlYXzBbU0JPWFt0ID4+PiAyNF1dIF4gSU5WX1NVQl9NSVhfMVtTQk9YWyh0ID4+PiAxNikgJiAweGZmXV0gXlxuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOVl9TVUJfTUlYXzJbU0JPWFsodCA+Pj4gOCkgJiAweGZmXV0gXiBJTlZfU1VCX01JWF8zW1NCT1hbdCAmIDB4ZmZdXTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBlbmNyeXB0QmxvY2s6IGZ1bmN0aW9uIChNLCBvZmZzZXQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fZG9DcnlwdEJsb2NrKE0sIG9mZnNldCwgdGhpcy5fa2V5U2NoZWR1bGUsIFNVQl9NSVhfMCwgU1VCX01JWF8xLCBTVUJfTUlYXzIsIFNVQl9NSVhfMywgU0JPWCk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIGRlY3J5cHRCbG9jazogZnVuY3Rpb24gKE0sIG9mZnNldCkge1xuXHQgICAgICAgICAgICAvLyBTd2FwIDJuZCBhbmQgNHRoIHJvd3Ncblx0ICAgICAgICAgICAgdmFyIHQgPSBNW29mZnNldCArIDFdO1xuXHQgICAgICAgICAgICBNW29mZnNldCArIDFdID0gTVtvZmZzZXQgKyAzXTtcblx0ICAgICAgICAgICAgTVtvZmZzZXQgKyAzXSA9IHQ7XG5cblx0ICAgICAgICAgICAgdGhpcy5fZG9DcnlwdEJsb2NrKE0sIG9mZnNldCwgdGhpcy5faW52S2V5U2NoZWR1bGUsIElOVl9TVUJfTUlYXzAsIElOVl9TVUJfTUlYXzEsIElOVl9TVUJfTUlYXzIsIElOVl9TVUJfTUlYXzMsIElOVl9TQk9YKTtcblxuXHQgICAgICAgICAgICAvLyBJbnYgc3dhcCAybmQgYW5kIDR0aCByb3dzXG5cdCAgICAgICAgICAgIHZhciB0ID0gTVtvZmZzZXQgKyAxXTtcblx0ICAgICAgICAgICAgTVtvZmZzZXQgKyAxXSA9IE1bb2Zmc2V0ICsgM107XG5cdCAgICAgICAgICAgIE1bb2Zmc2V0ICsgM10gPSB0O1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBfZG9DcnlwdEJsb2NrOiBmdW5jdGlvbiAoTSwgb2Zmc2V0LCBrZXlTY2hlZHVsZSwgU1VCX01JWF8wLCBTVUJfTUlYXzEsIFNVQl9NSVhfMiwgU1VCX01JWF8zLCBTQk9YKSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0XG5cdCAgICAgICAgICAgIHZhciBuUm91bmRzID0gdGhpcy5fblJvdW5kcztcblxuXHQgICAgICAgICAgICAvLyBHZXQgaW5wdXQsIGFkZCByb3VuZCBrZXlcblx0ICAgICAgICAgICAgdmFyIHMwID0gTVtvZmZzZXRdICAgICBeIGtleVNjaGVkdWxlWzBdO1xuXHQgICAgICAgICAgICB2YXIgczEgPSBNW29mZnNldCArIDFdIF4ga2V5U2NoZWR1bGVbMV07XG5cdCAgICAgICAgICAgIHZhciBzMiA9IE1bb2Zmc2V0ICsgMl0gXiBrZXlTY2hlZHVsZVsyXTtcblx0ICAgICAgICAgICAgdmFyIHMzID0gTVtvZmZzZXQgKyAzXSBeIGtleVNjaGVkdWxlWzNdO1xuXG5cdCAgICAgICAgICAgIC8vIEtleSBzY2hlZHVsZSByb3cgY291bnRlclxuXHQgICAgICAgICAgICB2YXIga3NSb3cgPSA0O1xuXG5cdCAgICAgICAgICAgIC8vIFJvdW5kc1xuXHQgICAgICAgICAgICBmb3IgKHZhciByb3VuZCA9IDE7IHJvdW5kIDwgblJvdW5kczsgcm91bmQrKykge1xuXHQgICAgICAgICAgICAgICAgLy8gU2hpZnQgcm93cywgc3ViIGJ5dGVzLCBtaXggY29sdW1ucywgYWRkIHJvdW5kIGtleVxuXHQgICAgICAgICAgICAgICAgdmFyIHQwID0gU1VCX01JWF8wW3MwID4+PiAyNF0gXiBTVUJfTUlYXzFbKHMxID4+PiAxNikgJiAweGZmXSBeIFNVQl9NSVhfMlsoczIgPj4+IDgpICYgMHhmZl0gXiBTVUJfTUlYXzNbczMgJiAweGZmXSBeIGtleVNjaGVkdWxlW2tzUm93KytdO1xuXHQgICAgICAgICAgICAgICAgdmFyIHQxID0gU1VCX01JWF8wW3MxID4+PiAyNF0gXiBTVUJfTUlYXzFbKHMyID4+PiAxNikgJiAweGZmXSBeIFNVQl9NSVhfMlsoczMgPj4+IDgpICYgMHhmZl0gXiBTVUJfTUlYXzNbczAgJiAweGZmXSBeIGtleVNjaGVkdWxlW2tzUm93KytdO1xuXHQgICAgICAgICAgICAgICAgdmFyIHQyID0gU1VCX01JWF8wW3MyID4+PiAyNF0gXiBTVUJfTUlYXzFbKHMzID4+PiAxNikgJiAweGZmXSBeIFNVQl9NSVhfMlsoczAgPj4+IDgpICYgMHhmZl0gXiBTVUJfTUlYXzNbczEgJiAweGZmXSBeIGtleVNjaGVkdWxlW2tzUm93KytdO1xuXHQgICAgICAgICAgICAgICAgdmFyIHQzID0gU1VCX01JWF8wW3MzID4+PiAyNF0gXiBTVUJfTUlYXzFbKHMwID4+PiAxNikgJiAweGZmXSBeIFNVQl9NSVhfMlsoczEgPj4+IDgpICYgMHhmZl0gXiBTVUJfTUlYXzNbczIgJiAweGZmXSBeIGtleVNjaGVkdWxlW2tzUm93KytdO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBVcGRhdGUgc3RhdGVcblx0ICAgICAgICAgICAgICAgIHMwID0gdDA7XG5cdCAgICAgICAgICAgICAgICBzMSA9IHQxO1xuXHQgICAgICAgICAgICAgICAgczIgPSB0Mjtcblx0ICAgICAgICAgICAgICAgIHMzID0gdDM7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBTaGlmdCByb3dzLCBzdWIgYnl0ZXMsIGFkZCByb3VuZCBrZXlcblx0ICAgICAgICAgICAgdmFyIHQwID0gKChTQk9YW3MwID4+PiAyNF0gPDwgMjQpIHwgKFNCT1hbKHMxID4+PiAxNikgJiAweGZmXSA8PCAxNikgfCAoU0JPWFsoczIgPj4+IDgpICYgMHhmZl0gPDwgOCkgfCBTQk9YW3MzICYgMHhmZl0pIF4ga2V5U2NoZWR1bGVba3NSb3crK107XG5cdCAgICAgICAgICAgIHZhciB0MSA9ICgoU0JPWFtzMSA+Pj4gMjRdIDw8IDI0KSB8IChTQk9YWyhzMiA+Pj4gMTYpICYgMHhmZl0gPDwgMTYpIHwgKFNCT1hbKHMzID4+PiA4KSAmIDB4ZmZdIDw8IDgpIHwgU0JPWFtzMCAmIDB4ZmZdKSBeIGtleVNjaGVkdWxlW2tzUm93KytdO1xuXHQgICAgICAgICAgICB2YXIgdDIgPSAoKFNCT1hbczIgPj4+IDI0XSA8PCAyNCkgfCAoU0JPWFsoczMgPj4+IDE2KSAmIDB4ZmZdIDw8IDE2KSB8IChTQk9YWyhzMCA+Pj4gOCkgJiAweGZmXSA8PCA4KSB8IFNCT1hbczEgJiAweGZmXSkgXiBrZXlTY2hlZHVsZVtrc1JvdysrXTtcblx0ICAgICAgICAgICAgdmFyIHQzID0gKChTQk9YW3MzID4+PiAyNF0gPDwgMjQpIHwgKFNCT1hbKHMwID4+PiAxNikgJiAweGZmXSA8PCAxNikgfCAoU0JPWFsoczEgPj4+IDgpICYgMHhmZl0gPDwgOCkgfCBTQk9YW3MyICYgMHhmZl0pIF4ga2V5U2NoZWR1bGVba3NSb3crK107XG5cblx0ICAgICAgICAgICAgLy8gU2V0IG91dHB1dFxuXHQgICAgICAgICAgICBNW29mZnNldF0gICAgID0gdDA7XG5cdCAgICAgICAgICAgIE1bb2Zmc2V0ICsgMV0gPSB0MTtcblx0ICAgICAgICAgICAgTVtvZmZzZXQgKyAyXSA9IHQyO1xuXHQgICAgICAgICAgICBNW29mZnNldCArIDNdID0gdDM7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIGtleVNpemU6IDI1Ni8zMlxuXHQgICAgfSk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogU2hvcnRjdXQgZnVuY3Rpb25zIHRvIHRoZSBjaXBoZXIncyBvYmplY3QgaW50ZXJmYWNlLlxuXHQgICAgICpcblx0ICAgICAqIEBleGFtcGxlXG5cdCAgICAgKlxuXHQgICAgICogICAgIHZhciBjaXBoZXJ0ZXh0ID0gQ3J5cHRvSlMuQUVTLmVuY3J5cHQobWVzc2FnZSwga2V5LCBjZmcpO1xuXHQgICAgICogICAgIHZhciBwbGFpbnRleHQgID0gQ3J5cHRvSlMuQUVTLmRlY3J5cHQoY2lwaGVydGV4dCwga2V5LCBjZmcpO1xuXHQgICAgICovXG5cdCAgICBDLkFFUyA9IEJsb2NrQ2lwaGVyLl9jcmVhdGVIZWxwZXIoQUVTKTtcblx0fSgpKTtcblxuXG5cdChmdW5jdGlvbiAoKSB7XG5cdCAgICAvLyBTaG9ydGN1dHNcblx0ICAgIHZhciBDID0gQ3J5cHRvSlM7XG5cdCAgICB2YXIgQ19saWIgPSBDLmxpYjtcblx0ICAgIHZhciBXb3JkQXJyYXkgPSBDX2xpYi5Xb3JkQXJyYXk7XG5cdCAgICB2YXIgQmxvY2tDaXBoZXIgPSBDX2xpYi5CbG9ja0NpcGhlcjtcblx0ICAgIHZhciBDX2FsZ28gPSBDLmFsZ287XG5cblx0ICAgIC8vIFBlcm11dGVkIENob2ljZSAxIGNvbnN0YW50c1xuXHQgICAgdmFyIFBDMSA9IFtcblx0ICAgICAgICA1NywgNDksIDQxLCAzMywgMjUsIDE3LCA5LCAgMSxcblx0ICAgICAgICA1OCwgNTAsIDQyLCAzNCwgMjYsIDE4LCAxMCwgMixcblx0ICAgICAgICA1OSwgNTEsIDQzLCAzNSwgMjcsIDE5LCAxMSwgMyxcblx0ICAgICAgICA2MCwgNTIsIDQ0LCAzNiwgNjMsIDU1LCA0NywgMzksXG5cdCAgICAgICAgMzEsIDIzLCAxNSwgNywgIDYyLCA1NCwgNDYsIDM4LFxuXHQgICAgICAgIDMwLCAyMiwgMTQsIDYsICA2MSwgNTMsIDQ1LCAzNyxcblx0ICAgICAgICAyOSwgMjEsIDEzLCA1LCAgMjgsIDIwLCAxMiwgNFxuXHQgICAgXTtcblxuXHQgICAgLy8gUGVybXV0ZWQgQ2hvaWNlIDIgY29uc3RhbnRzXG5cdCAgICB2YXIgUEMyID0gW1xuXHQgICAgICAgIDE0LCAxNywgMTEsIDI0LCAxLCAgNSxcblx0ICAgICAgICAzLCAgMjgsIDE1LCA2LCAgMjEsIDEwLFxuXHQgICAgICAgIDIzLCAxOSwgMTIsIDQsICAyNiwgOCxcblx0ICAgICAgICAxNiwgNywgIDI3LCAyMCwgMTMsIDIsXG5cdCAgICAgICAgNDEsIDUyLCAzMSwgMzcsIDQ3LCA1NSxcblx0ICAgICAgICAzMCwgNDAsIDUxLCA0NSwgMzMsIDQ4LFxuXHQgICAgICAgIDQ0LCA0OSwgMzksIDU2LCAzNCwgNTMsXG5cdCAgICAgICAgNDYsIDQyLCA1MCwgMzYsIDI5LCAzMlxuXHQgICAgXTtcblxuXHQgICAgLy8gQ3VtdWxhdGl2ZSBiaXQgc2hpZnQgY29uc3RhbnRzXG5cdCAgICB2YXIgQklUX1NISUZUUyA9IFsxLCAgMiwgIDQsICA2LCAgOCwgIDEwLCAxMiwgMTQsIDE1LCAxNywgMTksIDIxLCAyMywgMjUsIDI3LCAyOF07XG5cblx0ICAgIC8vIFNCT1hlcyBhbmQgcm91bmQgcGVybXV0YXRpb24gY29uc3RhbnRzXG5cdCAgICB2YXIgU0JPWF9QID0gW1xuXHQgICAgICAgIHtcblx0ICAgICAgICAgICAgMHgwOiAweDgwODIwMCxcblx0ICAgICAgICAgICAgMHgxMDAwMDAwMDogMHg4MDAwLFxuXHQgICAgICAgICAgICAweDIwMDAwMDAwOiAweDgwODAwMixcblx0ICAgICAgICAgICAgMHgzMDAwMDAwMDogMHgyLFxuXHQgICAgICAgICAgICAweDQwMDAwMDAwOiAweDIwMCxcblx0ICAgICAgICAgICAgMHg1MDAwMDAwMDogMHg4MDgyMDIsXG5cdCAgICAgICAgICAgIDB4NjAwMDAwMDA6IDB4ODAwMjAyLFxuXHQgICAgICAgICAgICAweDcwMDAwMDAwOiAweDgwMDAwMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAwMDogMHgyMDIsXG5cdCAgICAgICAgICAgIDB4OTAwMDAwMDA6IDB4ODAwMjAwLFxuXHQgICAgICAgICAgICAweGEwMDAwMDAwOiAweDgyMDAsXG5cdCAgICAgICAgICAgIDB4YjAwMDAwMDA6IDB4ODA4MDAwLFxuXHQgICAgICAgICAgICAweGMwMDAwMDAwOiAweDgwMDIsXG5cdCAgICAgICAgICAgIDB4ZDAwMDAwMDA6IDB4ODAwMDAyLFxuXHQgICAgICAgICAgICAweGUwMDAwMDAwOiAweDAsXG5cdCAgICAgICAgICAgIDB4ZjAwMDAwMDA6IDB4ODIwMixcblx0ICAgICAgICAgICAgMHg4MDAwMDAwOiAweDAsXG5cdCAgICAgICAgICAgIDB4MTgwMDAwMDA6IDB4ODA4MjAyLFxuXHQgICAgICAgICAgICAweDI4MDAwMDAwOiAweDgyMDIsXG5cdCAgICAgICAgICAgIDB4MzgwMDAwMDA6IDB4ODAwMCxcblx0ICAgICAgICAgICAgMHg0ODAwMDAwMDogMHg4MDgyMDAsXG5cdCAgICAgICAgICAgIDB4NTgwMDAwMDA6IDB4MjAwLFxuXHQgICAgICAgICAgICAweDY4MDAwMDAwOiAweDgwODAwMixcblx0ICAgICAgICAgICAgMHg3ODAwMDAwMDogMHgyLFxuXHQgICAgICAgICAgICAweDg4MDAwMDAwOiAweDgwMDIwMCxcblx0ICAgICAgICAgICAgMHg5ODAwMDAwMDogMHg4MjAwLFxuXHQgICAgICAgICAgICAweGE4MDAwMDAwOiAweDgwODAwMCxcblx0ICAgICAgICAgICAgMHhiODAwMDAwMDogMHg4MDAyMDIsXG5cdCAgICAgICAgICAgIDB4YzgwMDAwMDA6IDB4ODAwMDAyLFxuXHQgICAgICAgICAgICAweGQ4MDAwMDAwOiAweDgwMDIsXG5cdCAgICAgICAgICAgIDB4ZTgwMDAwMDA6IDB4MjAyLFxuXHQgICAgICAgICAgICAweGY4MDAwMDAwOiAweDgwMDAwMCxcblx0ICAgICAgICAgICAgMHgxOiAweDgwMDAsXG5cdCAgICAgICAgICAgIDB4MTAwMDAwMDE6IDB4Mixcblx0ICAgICAgICAgICAgMHgyMDAwMDAwMTogMHg4MDgyMDAsXG5cdCAgICAgICAgICAgIDB4MzAwMDAwMDE6IDB4ODAwMDAwLFxuXHQgICAgICAgICAgICAweDQwMDAwMDAxOiAweDgwODAwMixcblx0ICAgICAgICAgICAgMHg1MDAwMDAwMTogMHg4MjAwLFxuXHQgICAgICAgICAgICAweDYwMDAwMDAxOiAweDIwMCxcblx0ICAgICAgICAgICAgMHg3MDAwMDAwMTogMHg4MDAyMDIsXG5cdCAgICAgICAgICAgIDB4ODAwMDAwMDE6IDB4ODA4MjAyLFxuXHQgICAgICAgICAgICAweDkwMDAwMDAxOiAweDgwODAwMCxcblx0ICAgICAgICAgICAgMHhhMDAwMDAwMTogMHg4MDAwMDIsXG5cdCAgICAgICAgICAgIDB4YjAwMDAwMDE6IDB4ODIwMixcblx0ICAgICAgICAgICAgMHhjMDAwMDAwMTogMHgyMDIsXG5cdCAgICAgICAgICAgIDB4ZDAwMDAwMDE6IDB4ODAwMjAwLFxuXHQgICAgICAgICAgICAweGUwMDAwMDAxOiAweDgwMDIsXG5cdCAgICAgICAgICAgIDB4ZjAwMDAwMDE6IDB4MCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAxOiAweDgwODIwMixcblx0ICAgICAgICAgICAgMHgxODAwMDAwMTogMHg4MDgwMDAsXG5cdCAgICAgICAgICAgIDB4MjgwMDAwMDE6IDB4ODAwMDAwLFxuXHQgICAgICAgICAgICAweDM4MDAwMDAxOiAweDIwMCxcblx0ICAgICAgICAgICAgMHg0ODAwMDAwMTogMHg4MDAwLFxuXHQgICAgICAgICAgICAweDU4MDAwMDAxOiAweDgwMDAwMixcblx0ICAgICAgICAgICAgMHg2ODAwMDAwMTogMHgyLFxuXHQgICAgICAgICAgICAweDc4MDAwMDAxOiAweDgyMDIsXG5cdCAgICAgICAgICAgIDB4ODgwMDAwMDE6IDB4ODAwMixcblx0ICAgICAgICAgICAgMHg5ODAwMDAwMTogMHg4MDAyMDIsXG5cdCAgICAgICAgICAgIDB4YTgwMDAwMDE6IDB4MjAyLFxuXHQgICAgICAgICAgICAweGI4MDAwMDAxOiAweDgwODIwMCxcblx0ICAgICAgICAgICAgMHhjODAwMDAwMTogMHg4MDAyMDAsXG5cdCAgICAgICAgICAgIDB4ZDgwMDAwMDE6IDB4MCxcblx0ICAgICAgICAgICAgMHhlODAwMDAwMTogMHg4MjAwLFxuXHQgICAgICAgICAgICAweGY4MDAwMDAxOiAweDgwODAwMlxuXHQgICAgICAgIH0sXG5cdCAgICAgICAge1xuXHQgICAgICAgICAgICAweDA6IDB4NDAwODQwMTAsXG5cdCAgICAgICAgICAgIDB4MTAwMDAwMDogMHg0MDAwLFxuXHQgICAgICAgICAgICAweDIwMDAwMDA6IDB4ODAwMDAsXG5cdCAgICAgICAgICAgIDB4MzAwMDAwMDogMHg0MDA4MDAxMCxcblx0ICAgICAgICAgICAgMHg0MDAwMDAwOiAweDQwMDAwMDEwLFxuXHQgICAgICAgICAgICAweDUwMDAwMDA6IDB4NDAwODQwMDAsXG5cdCAgICAgICAgICAgIDB4NjAwMDAwMDogMHg0MDAwNDAwMCxcblx0ICAgICAgICAgICAgMHg3MDAwMDAwOiAweDEwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDA6IDB4ODQwMDAsXG5cdCAgICAgICAgICAgIDB4OTAwMDAwMDogMHg0MDAwNDAxMCxcblx0ICAgICAgICAgICAgMHhhMDAwMDAwOiAweDQwMDAwMDAwLFxuXHQgICAgICAgICAgICAweGIwMDAwMDA6IDB4ODQwMTAsXG5cdCAgICAgICAgICAgIDB4YzAwMDAwMDogMHg4MDAxMCxcblx0ICAgICAgICAgICAgMHhkMDAwMDAwOiAweDAsXG5cdCAgICAgICAgICAgIDB4ZTAwMDAwMDogMHg0MDEwLFxuXHQgICAgICAgICAgICAweGYwMDAwMDA6IDB4NDAwODAwMDAsXG5cdCAgICAgICAgICAgIDB4ODAwMDAwOiAweDQwMDA0MDAwLFxuXHQgICAgICAgICAgICAweDE4MDAwMDA6IDB4ODQwMTAsXG5cdCAgICAgICAgICAgIDB4MjgwMDAwMDogMHgxMCxcblx0ICAgICAgICAgICAgMHgzODAwMDAwOiAweDQwMDA0MDEwLFxuXHQgICAgICAgICAgICAweDQ4MDAwMDA6IDB4NDAwODQwMTAsXG5cdCAgICAgICAgICAgIDB4NTgwMDAwMDogMHg0MDAwMDAwMCxcblx0ICAgICAgICAgICAgMHg2ODAwMDAwOiAweDgwMDAwLFxuXHQgICAgICAgICAgICAweDc4MDAwMDA6IDB4NDAwODAwMTAsXG5cdCAgICAgICAgICAgIDB4ODgwMDAwMDogMHg4MDAxMCxcblx0ICAgICAgICAgICAgMHg5ODAwMDAwOiAweDAsXG5cdCAgICAgICAgICAgIDB4YTgwMDAwMDogMHg0MDAwLFxuXHQgICAgICAgICAgICAweGI4MDAwMDA6IDB4NDAwODAwMDAsXG5cdCAgICAgICAgICAgIDB4YzgwMDAwMDogMHg0MDAwMDAxMCxcblx0ICAgICAgICAgICAgMHhkODAwMDAwOiAweDg0MDAwLFxuXHQgICAgICAgICAgICAweGU4MDAwMDA6IDB4NDAwODQwMDAsXG5cdCAgICAgICAgICAgIDB4ZjgwMDAwMDogMHg0MDEwLFxuXHQgICAgICAgICAgICAweDEwMDAwMDAwOiAweDAsXG5cdCAgICAgICAgICAgIDB4MTEwMDAwMDA6IDB4NDAwODAwMTAsXG5cdCAgICAgICAgICAgIDB4MTIwMDAwMDA6IDB4NDAwMDQwMTAsXG5cdCAgICAgICAgICAgIDB4MTMwMDAwMDA6IDB4NDAwODQwMDAsXG5cdCAgICAgICAgICAgIDB4MTQwMDAwMDA6IDB4NDAwODAwMDAsXG5cdCAgICAgICAgICAgIDB4MTUwMDAwMDA6IDB4MTAsXG5cdCAgICAgICAgICAgIDB4MTYwMDAwMDA6IDB4ODQwMTAsXG5cdCAgICAgICAgICAgIDB4MTcwMDAwMDA6IDB4NDAwMCxcblx0ICAgICAgICAgICAgMHgxODAwMDAwMDogMHg0MDEwLFxuXHQgICAgICAgICAgICAweDE5MDAwMDAwOiAweDgwMDAwLFxuXHQgICAgICAgICAgICAweDFhMDAwMDAwOiAweDgwMDEwLFxuXHQgICAgICAgICAgICAweDFiMDAwMDAwOiAweDQwMDAwMDEwLFxuXHQgICAgICAgICAgICAweDFjMDAwMDAwOiAweDg0MDAwLFxuXHQgICAgICAgICAgICAweDFkMDAwMDAwOiAweDQwMDA0MDAwLFxuXHQgICAgICAgICAgICAweDFlMDAwMDAwOiAweDQwMDAwMDAwLFxuXHQgICAgICAgICAgICAweDFmMDAwMDAwOiAweDQwMDg0MDEwLFxuXHQgICAgICAgICAgICAweDEwODAwMDAwOiAweDg0MDEwLFxuXHQgICAgICAgICAgICAweDExODAwMDAwOiAweDgwMDAwLFxuXHQgICAgICAgICAgICAweDEyODAwMDAwOiAweDQwMDgwMDAwLFxuXHQgICAgICAgICAgICAweDEzODAwMDAwOiAweDQwMDAsXG5cdCAgICAgICAgICAgIDB4MTQ4MDAwMDA6IDB4NDAwMDQwMDAsXG5cdCAgICAgICAgICAgIDB4MTU4MDAwMDA6IDB4NDAwODQwMTAsXG5cdCAgICAgICAgICAgIDB4MTY4MDAwMDA6IDB4MTAsXG5cdCAgICAgICAgICAgIDB4MTc4MDAwMDA6IDB4NDAwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4MTg4MDAwMDA6IDB4NDAwODQwMDAsXG5cdCAgICAgICAgICAgIDB4MTk4MDAwMDA6IDB4NDAwMDAwMTAsXG5cdCAgICAgICAgICAgIDB4MWE4MDAwMDA6IDB4NDAwMDQwMTAsXG5cdCAgICAgICAgICAgIDB4MWI4MDAwMDA6IDB4ODAwMTAsXG5cdCAgICAgICAgICAgIDB4MWM4MDAwMDA6IDB4MCxcblx0ICAgICAgICAgICAgMHgxZDgwMDAwMDogMHg0MDEwLFxuXHQgICAgICAgICAgICAweDFlODAwMDAwOiAweDQwMDgwMDEwLFxuXHQgICAgICAgICAgICAweDFmODAwMDAwOiAweDg0MDAwXG5cdCAgICAgICAgfSxcblx0ICAgICAgICB7XG5cdCAgICAgICAgICAgIDB4MDogMHgxMDQsXG5cdCAgICAgICAgICAgIDB4MTAwMDAwOiAweDAsXG5cdCAgICAgICAgICAgIDB4MjAwMDAwOiAweDQwMDAxMDAsXG5cdCAgICAgICAgICAgIDB4MzAwMDAwOiAweDEwMTA0LFxuXHQgICAgICAgICAgICAweDQwMDAwMDogMHgxMDAwNCxcblx0ICAgICAgICAgICAgMHg1MDAwMDA6IDB4NDAwMDAwNCxcblx0ICAgICAgICAgICAgMHg2MDAwMDA6IDB4NDAxMDEwNCxcblx0ICAgICAgICAgICAgMHg3MDAwMDA6IDB4NDAxMDAwMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDA6IDB4NDAwMDAwMCxcblx0ICAgICAgICAgICAgMHg5MDAwMDA6IDB4NDAxMDEwMCxcblx0ICAgICAgICAgICAgMHhhMDAwMDA6IDB4MTAxMDAsXG5cdCAgICAgICAgICAgIDB4YjAwMDAwOiAweDQwMTAwMDQsXG5cdCAgICAgICAgICAgIDB4YzAwMDAwOiAweDQwMDAxMDQsXG5cdCAgICAgICAgICAgIDB4ZDAwMDAwOiAweDEwMDAwLFxuXHQgICAgICAgICAgICAweGUwMDAwMDogMHg0LFxuXHQgICAgICAgICAgICAweGYwMDAwMDogMHgxMDAsXG5cdCAgICAgICAgICAgIDB4ODAwMDA6IDB4NDAxMDEwMCxcblx0ICAgICAgICAgICAgMHgxODAwMDA6IDB4NDAxMDAwNCxcblx0ICAgICAgICAgICAgMHgyODAwMDA6IDB4MCxcblx0ICAgICAgICAgICAgMHgzODAwMDA6IDB4NDAwMDEwMCxcblx0ICAgICAgICAgICAgMHg0ODAwMDA6IDB4NDAwMDAwNCxcblx0ICAgICAgICAgICAgMHg1ODAwMDA6IDB4MTAwMDAsXG5cdCAgICAgICAgICAgIDB4NjgwMDAwOiAweDEwMDA0LFxuXHQgICAgICAgICAgICAweDc4MDAwMDogMHgxMDQsXG5cdCAgICAgICAgICAgIDB4ODgwMDAwOiAweDQsXG5cdCAgICAgICAgICAgIDB4OTgwMDAwOiAweDEwMCxcblx0ICAgICAgICAgICAgMHhhODAwMDA6IDB4NDAxMDAwMCxcblx0ICAgICAgICAgICAgMHhiODAwMDA6IDB4MTAxMDQsXG5cdCAgICAgICAgICAgIDB4YzgwMDAwOiAweDEwMTAwLFxuXHQgICAgICAgICAgICAweGQ4MDAwMDogMHg0MDAwMTA0LFxuXHQgICAgICAgICAgICAweGU4MDAwMDogMHg0MDEwMTA0LFxuXHQgICAgICAgICAgICAweGY4MDAwMDogMHg0MDAwMDAwLFxuXHQgICAgICAgICAgICAweDEwMDAwMDA6IDB4NDAxMDEwMCxcblx0ICAgICAgICAgICAgMHgxMTAwMDAwOiAweDEwMDA0LFxuXHQgICAgICAgICAgICAweDEyMDAwMDA6IDB4MTAwMDAsXG5cdCAgICAgICAgICAgIDB4MTMwMDAwMDogMHg0MDAwMTAwLFxuXHQgICAgICAgICAgICAweDE0MDAwMDA6IDB4MTAwLFxuXHQgICAgICAgICAgICAweDE1MDAwMDA6IDB4NDAxMDEwNCxcblx0ICAgICAgICAgICAgMHgxNjAwMDAwOiAweDQwMDAwMDQsXG5cdCAgICAgICAgICAgIDB4MTcwMDAwMDogMHgwLFxuXHQgICAgICAgICAgICAweDE4MDAwMDA6IDB4NDAwMDEwNCxcblx0ICAgICAgICAgICAgMHgxOTAwMDAwOiAweDQwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4MWEwMDAwMDogMHg0LFxuXHQgICAgICAgICAgICAweDFiMDAwMDA6IDB4MTAxMDAsXG5cdCAgICAgICAgICAgIDB4MWMwMDAwMDogMHg0MDEwMDAwLFxuXHQgICAgICAgICAgICAweDFkMDAwMDA6IDB4MTA0LFxuXHQgICAgICAgICAgICAweDFlMDAwMDA6IDB4MTAxMDQsXG5cdCAgICAgICAgICAgIDB4MWYwMDAwMDogMHg0MDEwMDA0LFxuXHQgICAgICAgICAgICAweDEwODAwMDA6IDB4NDAwMDAwMCxcblx0ICAgICAgICAgICAgMHgxMTgwMDAwOiAweDEwNCxcblx0ICAgICAgICAgICAgMHgxMjgwMDAwOiAweDQwMTAxMDAsXG5cdCAgICAgICAgICAgIDB4MTM4MDAwMDogMHgwLFxuXHQgICAgICAgICAgICAweDE0ODAwMDA6IDB4MTAwMDQsXG5cdCAgICAgICAgICAgIDB4MTU4MDAwMDogMHg0MDAwMTAwLFxuXHQgICAgICAgICAgICAweDE2ODAwMDA6IDB4MTAwLFxuXHQgICAgICAgICAgICAweDE3ODAwMDA6IDB4NDAxMDAwNCxcblx0ICAgICAgICAgICAgMHgxODgwMDAwOiAweDEwMDAwLFxuXHQgICAgICAgICAgICAweDE5ODAwMDA6IDB4NDAxMDEwNCxcblx0ICAgICAgICAgICAgMHgxYTgwMDAwOiAweDEwMTA0LFxuXHQgICAgICAgICAgICAweDFiODAwMDA6IDB4NDAwMDAwNCxcblx0ICAgICAgICAgICAgMHgxYzgwMDAwOiAweDQwMDAxMDQsXG5cdCAgICAgICAgICAgIDB4MWQ4MDAwMDogMHg0MDEwMDAwLFxuXHQgICAgICAgICAgICAweDFlODAwMDA6IDB4NCxcblx0ICAgICAgICAgICAgMHgxZjgwMDAwOiAweDEwMTAwXG5cdCAgICAgICAgfSxcblx0ICAgICAgICB7XG5cdCAgICAgICAgICAgIDB4MDogMHg4MDQwMTAwMCxcblx0ICAgICAgICAgICAgMHgxMDAwMDogMHg4MDAwMTA0MCxcblx0ICAgICAgICAgICAgMHgyMDAwMDogMHg0MDEwNDAsXG5cdCAgICAgICAgICAgIDB4MzAwMDA6IDB4ODA0MDAwMDAsXG5cdCAgICAgICAgICAgIDB4NDAwMDA6IDB4MCxcblx0ICAgICAgICAgICAgMHg1MDAwMDogMHg0MDEwMDAsXG5cdCAgICAgICAgICAgIDB4NjAwMDA6IDB4ODAwMDAwNDAsXG5cdCAgICAgICAgICAgIDB4NzAwMDA6IDB4NDAwMDQwLFxuXHQgICAgICAgICAgICAweDgwMDAwOiAweDgwMDAwMDAwLFxuXHQgICAgICAgICAgICAweDkwMDAwOiAweDQwMDAwMCxcblx0ICAgICAgICAgICAgMHhhMDAwMDogMHg0MCxcblx0ICAgICAgICAgICAgMHhiMDAwMDogMHg4MDAwMTAwMCxcblx0ICAgICAgICAgICAgMHhjMDAwMDogMHg4MDQwMDA0MCxcblx0ICAgICAgICAgICAgMHhkMDAwMDogMHgxMDQwLFxuXHQgICAgICAgICAgICAweGUwMDAwOiAweDEwMDAsXG5cdCAgICAgICAgICAgIDB4ZjAwMDA6IDB4ODA0MDEwNDAsXG5cdCAgICAgICAgICAgIDB4ODAwMDogMHg4MDAwMTA0MCxcblx0ICAgICAgICAgICAgMHgxODAwMDogMHg0MCxcblx0ICAgICAgICAgICAgMHgyODAwMDogMHg4MDQwMDA0MCxcblx0ICAgICAgICAgICAgMHgzODAwMDogMHg4MDAwMTAwMCxcblx0ICAgICAgICAgICAgMHg0ODAwMDogMHg0MDEwMDAsXG5cdCAgICAgICAgICAgIDB4NTgwMDA6IDB4ODA0MDEwNDAsXG5cdCAgICAgICAgICAgIDB4NjgwMDA6IDB4MCxcblx0ICAgICAgICAgICAgMHg3ODAwMDogMHg4MDQwMDAwMCxcblx0ICAgICAgICAgICAgMHg4ODAwMDogMHgxMDAwLFxuXHQgICAgICAgICAgICAweDk4MDAwOiAweDgwNDAxMDAwLFxuXHQgICAgICAgICAgICAweGE4MDAwOiAweDQwMDAwMCxcblx0ICAgICAgICAgICAgMHhiODAwMDogMHgxMDQwLFxuXHQgICAgICAgICAgICAweGM4MDAwOiAweDgwMDAwMDAwLFxuXHQgICAgICAgICAgICAweGQ4MDAwOiAweDQwMDA0MCxcblx0ICAgICAgICAgICAgMHhlODAwMDogMHg0MDEwNDAsXG5cdCAgICAgICAgICAgIDB4ZjgwMDA6IDB4ODAwMDAwNDAsXG5cdCAgICAgICAgICAgIDB4MTAwMDAwOiAweDQwMDA0MCxcblx0ICAgICAgICAgICAgMHgxMTAwMDA6IDB4NDAxMDAwLFxuXHQgICAgICAgICAgICAweDEyMDAwMDogMHg4MDAwMDA0MCxcblx0ICAgICAgICAgICAgMHgxMzAwMDA6IDB4MCxcblx0ICAgICAgICAgICAgMHgxNDAwMDA6IDB4MTA0MCxcblx0ICAgICAgICAgICAgMHgxNTAwMDA6IDB4ODA0MDAwNDAsXG5cdCAgICAgICAgICAgIDB4MTYwMDAwOiAweDgwNDAxMDAwLFxuXHQgICAgICAgICAgICAweDE3MDAwMDogMHg4MDAwMTA0MCxcblx0ICAgICAgICAgICAgMHgxODAwMDA6IDB4ODA0MDEwNDAsXG5cdCAgICAgICAgICAgIDB4MTkwMDAwOiAweDgwMDAwMDAwLFxuXHQgICAgICAgICAgICAweDFhMDAwMDogMHg4MDQwMDAwMCxcblx0ICAgICAgICAgICAgMHgxYjAwMDA6IDB4NDAxMDQwLFxuXHQgICAgICAgICAgICAweDFjMDAwMDogMHg4MDAwMTAwMCxcblx0ICAgICAgICAgICAgMHgxZDAwMDA6IDB4NDAwMDAwLFxuXHQgICAgICAgICAgICAweDFlMDAwMDogMHg0MCxcblx0ICAgICAgICAgICAgMHgxZjAwMDA6IDB4MTAwMCxcblx0ICAgICAgICAgICAgMHgxMDgwMDA6IDB4ODA0MDAwMDAsXG5cdCAgICAgICAgICAgIDB4MTE4MDAwOiAweDgwNDAxMDQwLFxuXHQgICAgICAgICAgICAweDEyODAwMDogMHgwLFxuXHQgICAgICAgICAgICAweDEzODAwMDogMHg0MDEwMDAsXG5cdCAgICAgICAgICAgIDB4MTQ4MDAwOiAweDQwMDA0MCxcblx0ICAgICAgICAgICAgMHgxNTgwMDA6IDB4ODAwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4MTY4MDAwOiAweDgwMDAxMDQwLFxuXHQgICAgICAgICAgICAweDE3ODAwMDogMHg0MCxcblx0ICAgICAgICAgICAgMHgxODgwMDA6IDB4ODAwMDAwNDAsXG5cdCAgICAgICAgICAgIDB4MTk4MDAwOiAweDEwMDAsXG5cdCAgICAgICAgICAgIDB4MWE4MDAwOiAweDgwMDAxMDAwLFxuXHQgICAgICAgICAgICAweDFiODAwMDogMHg4MDQwMDA0MCxcblx0ICAgICAgICAgICAgMHgxYzgwMDA6IDB4MTA0MCxcblx0ICAgICAgICAgICAgMHgxZDgwMDA6IDB4ODA0MDEwMDAsXG5cdCAgICAgICAgICAgIDB4MWU4MDAwOiAweDQwMDAwMCxcblx0ICAgICAgICAgICAgMHgxZjgwMDA6IDB4NDAxMDQwXG5cdCAgICAgICAgfSxcblx0ICAgICAgICB7XG5cdCAgICAgICAgICAgIDB4MDogMHg4MCxcblx0ICAgICAgICAgICAgMHgxMDAwOiAweDEwNDAwMDAsXG5cdCAgICAgICAgICAgIDB4MjAwMDogMHg0MDAwMCxcblx0ICAgICAgICAgICAgMHgzMDAwOiAweDIwMDAwMDAwLFxuXHQgICAgICAgICAgICAweDQwMDA6IDB4MjAwNDAwODAsXG5cdCAgICAgICAgICAgIDB4NTAwMDogMHgxMDAwMDgwLFxuXHQgICAgICAgICAgICAweDYwMDA6IDB4MjEwMDAwODAsXG5cdCAgICAgICAgICAgIDB4NzAwMDogMHg0MDA4MCxcblx0ICAgICAgICAgICAgMHg4MDAwOiAweDEwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4OTAwMDogMHgyMDA0MDAwMCxcblx0ICAgICAgICAgICAgMHhhMDAwOiAweDIwMDAwMDgwLFxuXHQgICAgICAgICAgICAweGIwMDA6IDB4MjEwNDAwODAsXG5cdCAgICAgICAgICAgIDB4YzAwMDogMHgyMTA0MDAwMCxcblx0ICAgICAgICAgICAgMHhkMDAwOiAweDAsXG5cdCAgICAgICAgICAgIDB4ZTAwMDogMHgxMDQwMDgwLFxuXHQgICAgICAgICAgICAweGYwMDA6IDB4MjEwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4ODAwOiAweDEwNDAwODAsXG5cdCAgICAgICAgICAgIDB4MTgwMDogMHgyMTAwMDA4MCxcblx0ICAgICAgICAgICAgMHgyODAwOiAweDgwLFxuXHQgICAgICAgICAgICAweDM4MDA6IDB4MTA0MDAwMCxcblx0ICAgICAgICAgICAgMHg0ODAwOiAweDQwMDAwLFxuXHQgICAgICAgICAgICAweDU4MDA6IDB4MjAwNDAwODAsXG5cdCAgICAgICAgICAgIDB4NjgwMDogMHgyMTA0MDAwMCxcblx0ICAgICAgICAgICAgMHg3ODAwOiAweDIwMDAwMDAwLFxuXHQgICAgICAgICAgICAweDg4MDA6IDB4MjAwNDAwMDAsXG5cdCAgICAgICAgICAgIDB4OTgwMDogMHgwLFxuXHQgICAgICAgICAgICAweGE4MDA6IDB4MjEwNDAwODAsXG5cdCAgICAgICAgICAgIDB4YjgwMDogMHgxMDAwMDgwLFxuXHQgICAgICAgICAgICAweGM4MDA6IDB4MjAwMDAwODAsXG5cdCAgICAgICAgICAgIDB4ZDgwMDogMHgyMTAwMDAwMCxcblx0ICAgICAgICAgICAgMHhlODAwOiAweDEwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4ZjgwMDogMHg0MDA4MCxcblx0ICAgICAgICAgICAgMHgxMDAwMDogMHg0MDAwMCxcblx0ICAgICAgICAgICAgMHgxMTAwMDogMHg4MCxcblx0ICAgICAgICAgICAgMHgxMjAwMDogMHgyMDAwMDAwMCxcblx0ICAgICAgICAgICAgMHgxMzAwMDogMHgyMTAwMDA4MCxcblx0ICAgICAgICAgICAgMHgxNDAwMDogMHgxMDAwMDgwLFxuXHQgICAgICAgICAgICAweDE1MDAwOiAweDIxMDQwMDAwLFxuXHQgICAgICAgICAgICAweDE2MDAwOiAweDIwMDQwMDgwLFxuXHQgICAgICAgICAgICAweDE3MDAwOiAweDEwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4MTgwMDA6IDB4MjEwNDAwODAsXG5cdCAgICAgICAgICAgIDB4MTkwMDA6IDB4MjEwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4MWEwMDA6IDB4MTA0MDAwMCxcblx0ICAgICAgICAgICAgMHgxYjAwMDogMHgyMDA0MDAwMCxcblx0ICAgICAgICAgICAgMHgxYzAwMDogMHg0MDA4MCxcblx0ICAgICAgICAgICAgMHgxZDAwMDogMHgyMDAwMDA4MCxcblx0ICAgICAgICAgICAgMHgxZTAwMDogMHgwLFxuXHQgICAgICAgICAgICAweDFmMDAwOiAweDEwNDAwODAsXG5cdCAgICAgICAgICAgIDB4MTA4MDA6IDB4MjEwMDAwODAsXG5cdCAgICAgICAgICAgIDB4MTE4MDA6IDB4MTAwMDAwMCxcblx0ICAgICAgICAgICAgMHgxMjgwMDogMHgxMDQwMDAwLFxuXHQgICAgICAgICAgICAweDEzODAwOiAweDIwMDQwMDgwLFxuXHQgICAgICAgICAgICAweDE0ODAwOiAweDIwMDAwMDAwLFxuXHQgICAgICAgICAgICAweDE1ODAwOiAweDEwNDAwODAsXG5cdCAgICAgICAgICAgIDB4MTY4MDA6IDB4ODAsXG5cdCAgICAgICAgICAgIDB4MTc4MDA6IDB4MjEwNDAwMDAsXG5cdCAgICAgICAgICAgIDB4MTg4MDA6IDB4NDAwODAsXG5cdCAgICAgICAgICAgIDB4MTk4MDA6IDB4MjEwNDAwODAsXG5cdCAgICAgICAgICAgIDB4MWE4MDA6IDB4MCxcblx0ICAgICAgICAgICAgMHgxYjgwMDogMHgyMTAwMDAwMCxcblx0ICAgICAgICAgICAgMHgxYzgwMDogMHgxMDAwMDgwLFxuXHQgICAgICAgICAgICAweDFkODAwOiAweDQwMDAwLFxuXHQgICAgICAgICAgICAweDFlODAwOiAweDIwMDQwMDAwLFxuXHQgICAgICAgICAgICAweDFmODAwOiAweDIwMDAwMDgwXG5cdCAgICAgICAgfSxcblx0ICAgICAgICB7XG5cdCAgICAgICAgICAgIDB4MDogMHgxMDAwMDAwOCxcblx0ICAgICAgICAgICAgMHgxMDA6IDB4MjAwMCxcblx0ICAgICAgICAgICAgMHgyMDA6IDB4MTAyMDAwMDAsXG5cdCAgICAgICAgICAgIDB4MzAwOiAweDEwMjAyMDA4LFxuXHQgICAgICAgICAgICAweDQwMDogMHgxMDAwMjAwMCxcblx0ICAgICAgICAgICAgMHg1MDA6IDB4MjAwMDAwLFxuXHQgICAgICAgICAgICAweDYwMDogMHgyMDAwMDgsXG5cdCAgICAgICAgICAgIDB4NzAwOiAweDEwMDAwMDAwLFxuXHQgICAgICAgICAgICAweDgwMDogMHgwLFxuXHQgICAgICAgICAgICAweDkwMDogMHgxMDAwMjAwOCxcblx0ICAgICAgICAgICAgMHhhMDA6IDB4MjAyMDAwLFxuXHQgICAgICAgICAgICAweGIwMDogMHg4LFxuXHQgICAgICAgICAgICAweGMwMDogMHgxMDIwMDAwOCxcblx0ICAgICAgICAgICAgMHhkMDA6IDB4MjAyMDA4LFxuXHQgICAgICAgICAgICAweGUwMDogMHgyMDA4LFxuXHQgICAgICAgICAgICAweGYwMDogMHgxMDIwMjAwMCxcblx0ICAgICAgICAgICAgMHg4MDogMHgxMDIwMDAwMCxcblx0ICAgICAgICAgICAgMHgxODA6IDB4MTAyMDIwMDgsXG5cdCAgICAgICAgICAgIDB4MjgwOiAweDgsXG5cdCAgICAgICAgICAgIDB4MzgwOiAweDIwMDAwMCxcblx0ICAgICAgICAgICAgMHg0ODA6IDB4MjAyMDA4LFxuXHQgICAgICAgICAgICAweDU4MDogMHgxMDAwMDAwOCxcblx0ICAgICAgICAgICAgMHg2ODA6IDB4MTAwMDIwMDAsXG5cdCAgICAgICAgICAgIDB4NzgwOiAweDIwMDgsXG5cdCAgICAgICAgICAgIDB4ODgwOiAweDIwMDAwOCxcblx0ICAgICAgICAgICAgMHg5ODA6IDB4MjAwMCxcblx0ICAgICAgICAgICAgMHhhODA6IDB4MTAwMDIwMDgsXG5cdCAgICAgICAgICAgIDB4YjgwOiAweDEwMjAwMDA4LFxuXHQgICAgICAgICAgICAweGM4MDogMHgwLFxuXHQgICAgICAgICAgICAweGQ4MDogMHgxMDIwMjAwMCxcblx0ICAgICAgICAgICAgMHhlODA6IDB4MjAyMDAwLFxuXHQgICAgICAgICAgICAweGY4MDogMHgxMDAwMDAwMCxcblx0ICAgICAgICAgICAgMHgxMDAwOiAweDEwMDAyMDAwLFxuXHQgICAgICAgICAgICAweDExMDA6IDB4MTAyMDAwMDgsXG5cdCAgICAgICAgICAgIDB4MTIwMDogMHgxMDIwMjAwOCxcblx0ICAgICAgICAgICAgMHgxMzAwOiAweDIwMDgsXG5cdCAgICAgICAgICAgIDB4MTQwMDogMHgyMDAwMDAsXG5cdCAgICAgICAgICAgIDB4MTUwMDogMHgxMDAwMDAwMCxcblx0ICAgICAgICAgICAgMHgxNjAwOiAweDEwMDAwMDA4LFxuXHQgICAgICAgICAgICAweDE3MDA6IDB4MjAyMDAwLFxuXHQgICAgICAgICAgICAweDE4MDA6IDB4MjAyMDA4LFxuXHQgICAgICAgICAgICAweDE5MDA6IDB4MCxcblx0ICAgICAgICAgICAgMHgxYTAwOiAweDgsXG5cdCAgICAgICAgICAgIDB4MWIwMDogMHgxMDIwMDAwMCxcblx0ICAgICAgICAgICAgMHgxYzAwOiAweDIwMDAsXG5cdCAgICAgICAgICAgIDB4MWQwMDogMHgxMDAwMjAwOCxcblx0ICAgICAgICAgICAgMHgxZTAwOiAweDEwMjAyMDAwLFxuXHQgICAgICAgICAgICAweDFmMDA6IDB4MjAwMDA4LFxuXHQgICAgICAgICAgICAweDEwODA6IDB4OCxcblx0ICAgICAgICAgICAgMHgxMTgwOiAweDIwMjAwMCxcblx0ICAgICAgICAgICAgMHgxMjgwOiAweDIwMDAwMCxcblx0ICAgICAgICAgICAgMHgxMzgwOiAweDEwMDAwMDA4LFxuXHQgICAgICAgICAgICAweDE0ODA6IDB4MTAwMDIwMDAsXG5cdCAgICAgICAgICAgIDB4MTU4MDogMHgyMDA4LFxuXHQgICAgICAgICAgICAweDE2ODA6IDB4MTAyMDIwMDgsXG5cdCAgICAgICAgICAgIDB4MTc4MDogMHgxMDIwMDAwMCxcblx0ICAgICAgICAgICAgMHgxODgwOiAweDEwMjAyMDAwLFxuXHQgICAgICAgICAgICAweDE5ODA6IDB4MTAyMDAwMDgsXG5cdCAgICAgICAgICAgIDB4MWE4MDogMHgyMDAwLFxuXHQgICAgICAgICAgICAweDFiODA6IDB4MjAyMDA4LFxuXHQgICAgICAgICAgICAweDFjODA6IDB4MjAwMDA4LFxuXHQgICAgICAgICAgICAweDFkODA6IDB4MCxcblx0ICAgICAgICAgICAgMHgxZTgwOiAweDEwMDAwMDAwLFxuXHQgICAgICAgICAgICAweDFmODA6IDB4MTAwMDIwMDhcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHtcblx0ICAgICAgICAgICAgMHgwOiAweDEwMDAwMCxcblx0ICAgICAgICAgICAgMHgxMDogMHgyMDAwNDAxLFxuXHQgICAgICAgICAgICAweDIwOiAweDQwMCxcblx0ICAgICAgICAgICAgMHgzMDogMHgxMDA0MDEsXG5cdCAgICAgICAgICAgIDB4NDA6IDB4MjEwMDQwMSxcblx0ICAgICAgICAgICAgMHg1MDogMHgwLFxuXHQgICAgICAgICAgICAweDYwOiAweDEsXG5cdCAgICAgICAgICAgIDB4NzA6IDB4MjEwMDAwMSxcblx0ICAgICAgICAgICAgMHg4MDogMHgyMDAwNDAwLFxuXHQgICAgICAgICAgICAweDkwOiAweDEwMDAwMSxcblx0ICAgICAgICAgICAgMHhhMDogMHgyMDAwMDAxLFxuXHQgICAgICAgICAgICAweGIwOiAweDIxMDA0MDAsXG5cdCAgICAgICAgICAgIDB4YzA6IDB4MjEwMDAwMCxcblx0ICAgICAgICAgICAgMHhkMDogMHg0MDEsXG5cdCAgICAgICAgICAgIDB4ZTA6IDB4MTAwNDAwLFxuXHQgICAgICAgICAgICAweGYwOiAweDIwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4ODogMHgyMTAwMDAxLFxuXHQgICAgICAgICAgICAweDE4OiAweDAsXG5cdCAgICAgICAgICAgIDB4Mjg6IDB4MjAwMDQwMSxcblx0ICAgICAgICAgICAgMHgzODogMHgyMTAwNDAwLFxuXHQgICAgICAgICAgICAweDQ4OiAweDEwMDAwMCxcblx0ICAgICAgICAgICAgMHg1ODogMHgyMDAwMDAxLFxuXHQgICAgICAgICAgICAweDY4OiAweDIwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4Nzg6IDB4NDAxLFxuXHQgICAgICAgICAgICAweDg4OiAweDEwMDQwMSxcblx0ICAgICAgICAgICAgMHg5ODogMHgyMDAwNDAwLFxuXHQgICAgICAgICAgICAweGE4OiAweDIxMDAwMDAsXG5cdCAgICAgICAgICAgIDB4Yjg6IDB4MTAwMDAxLFxuXHQgICAgICAgICAgICAweGM4OiAweDQwMCxcblx0ICAgICAgICAgICAgMHhkODogMHgyMTAwNDAxLFxuXHQgICAgICAgICAgICAweGU4OiAweDEsXG5cdCAgICAgICAgICAgIDB4Zjg6IDB4MTAwNDAwLFxuXHQgICAgICAgICAgICAweDEwMDogMHgyMDAwMDAwLFxuXHQgICAgICAgICAgICAweDExMDogMHgxMDAwMDAsXG5cdCAgICAgICAgICAgIDB4MTIwOiAweDIwMDA0MDEsXG5cdCAgICAgICAgICAgIDB4MTMwOiAweDIxMDAwMDEsXG5cdCAgICAgICAgICAgIDB4MTQwOiAweDEwMDAwMSxcblx0ICAgICAgICAgICAgMHgxNTA6IDB4MjAwMDQwMCxcblx0ICAgICAgICAgICAgMHgxNjA6IDB4MjEwMDQwMCxcblx0ICAgICAgICAgICAgMHgxNzA6IDB4MTAwNDAxLFxuXHQgICAgICAgICAgICAweDE4MDogMHg0MDEsXG5cdCAgICAgICAgICAgIDB4MTkwOiAweDIxMDA0MDEsXG5cdCAgICAgICAgICAgIDB4MWEwOiAweDEwMDQwMCxcblx0ICAgICAgICAgICAgMHgxYjA6IDB4MSxcblx0ICAgICAgICAgICAgMHgxYzA6IDB4MCxcblx0ICAgICAgICAgICAgMHgxZDA6IDB4MjEwMDAwMCxcblx0ICAgICAgICAgICAgMHgxZTA6IDB4MjAwMDAwMSxcblx0ICAgICAgICAgICAgMHgxZjA6IDB4NDAwLFxuXHQgICAgICAgICAgICAweDEwODogMHgxMDA0MDAsXG5cdCAgICAgICAgICAgIDB4MTE4OiAweDIwMDA0MDEsXG5cdCAgICAgICAgICAgIDB4MTI4OiAweDIxMDAwMDEsXG5cdCAgICAgICAgICAgIDB4MTM4OiAweDEsXG5cdCAgICAgICAgICAgIDB4MTQ4OiAweDIwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4MTU4OiAweDEwMDAwMCxcblx0ICAgICAgICAgICAgMHgxNjg6IDB4NDAxLFxuXHQgICAgICAgICAgICAweDE3ODogMHgyMTAwNDAwLFxuXHQgICAgICAgICAgICAweDE4ODogMHgyMDAwMDAxLFxuXHQgICAgICAgICAgICAweDE5ODogMHgyMTAwMDAwLFxuXHQgICAgICAgICAgICAweDFhODogMHgwLFxuXHQgICAgICAgICAgICAweDFiODogMHgyMTAwNDAxLFxuXHQgICAgICAgICAgICAweDFjODogMHgxMDA0MDEsXG5cdCAgICAgICAgICAgIDB4MWQ4OiAweDQwMCxcblx0ICAgICAgICAgICAgMHgxZTg6IDB4MjAwMDQwMCxcblx0ICAgICAgICAgICAgMHgxZjg6IDB4MTAwMDAxXG5cdCAgICAgICAgfSxcblx0ICAgICAgICB7XG5cdCAgICAgICAgICAgIDB4MDogMHg4MDAwODIwLFxuXHQgICAgICAgICAgICAweDE6IDB4MjAwMDAsXG5cdCAgICAgICAgICAgIDB4MjogMHg4MDAwMDAwLFxuXHQgICAgICAgICAgICAweDM6IDB4MjAsXG5cdCAgICAgICAgICAgIDB4NDogMHgyMDAyMCxcblx0ICAgICAgICAgICAgMHg1OiAweDgwMjA4MjAsXG5cdCAgICAgICAgICAgIDB4NjogMHg4MDIwODAwLFxuXHQgICAgICAgICAgICAweDc6IDB4ODAwLFxuXHQgICAgICAgICAgICAweDg6IDB4ODAyMDAwMCxcblx0ICAgICAgICAgICAgMHg5OiAweDgwMDA4MDAsXG5cdCAgICAgICAgICAgIDB4YTogMHgyMDgwMCxcblx0ICAgICAgICAgICAgMHhiOiAweDgwMjAwMjAsXG5cdCAgICAgICAgICAgIDB4YzogMHg4MjAsXG5cdCAgICAgICAgICAgIDB4ZDogMHgwLFxuXHQgICAgICAgICAgICAweGU6IDB4ODAwMDAyMCxcblx0ICAgICAgICAgICAgMHhmOiAweDIwODIwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDAwOiAweDgwMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAwMTogMHg4MDIwODIwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDAyOiAweDgwMDA4MjAsXG5cdCAgICAgICAgICAgIDB4ODAwMDAwMDM6IDB4ODAwMDAwMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAwNDogMHg4MDIwMDAwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDA1OiAweDIwODAwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDA2OiAweDIwODIwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDA3OiAweDIwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDA4OiAweDgwMDAwMjAsXG5cdCAgICAgICAgICAgIDB4ODAwMDAwMDk6IDB4ODIwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDBhOiAweDIwMDIwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDBiOiAweDgwMjA4MDAsXG5cdCAgICAgICAgICAgIDB4ODAwMDAwMGM6IDB4MCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAwZDogMHg4MDIwMDIwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDBlOiAweDgwMDA4MDAsXG5cdCAgICAgICAgICAgIDB4ODAwMDAwMGY6IDB4MjAwMDAsXG5cdCAgICAgICAgICAgIDB4MTA6IDB4MjA4MjAsXG5cdCAgICAgICAgICAgIDB4MTE6IDB4ODAyMDgwMCxcblx0ICAgICAgICAgICAgMHgxMjogMHgyMCxcblx0ICAgICAgICAgICAgMHgxMzogMHg4MDAsXG5cdCAgICAgICAgICAgIDB4MTQ6IDB4ODAwMDgwMCxcblx0ICAgICAgICAgICAgMHgxNTogMHg4MDAwMDIwLFxuXHQgICAgICAgICAgICAweDE2OiAweDgwMjAwMjAsXG5cdCAgICAgICAgICAgIDB4MTc6IDB4MjAwMDAsXG5cdCAgICAgICAgICAgIDB4MTg6IDB4MCxcblx0ICAgICAgICAgICAgMHgxOTogMHgyMDAyMCxcblx0ICAgICAgICAgICAgMHgxYTogMHg4MDIwMDAwLFxuXHQgICAgICAgICAgICAweDFiOiAweDgwMDA4MjAsXG5cdCAgICAgICAgICAgIDB4MWM6IDB4ODAyMDgyMCxcblx0ICAgICAgICAgICAgMHgxZDogMHgyMDgwMCxcblx0ICAgICAgICAgICAgMHgxZTogMHg4MjAsXG5cdCAgICAgICAgICAgIDB4MWY6IDB4ODAwMDAwMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAxMDogMHgyMDAwMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAxMTogMHg4MDAsXG5cdCAgICAgICAgICAgIDB4ODAwMDAwMTI6IDB4ODAyMDAyMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAxMzogMHgyMDgyMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAxNDogMHgyMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAxNTogMHg4MDIwMDAwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDE2OiAweDgwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4ODAwMDAwMTc6IDB4ODAwMDgyMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAxODogMHg4MDIwODIwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDE5OiAweDgwMDAwMjAsXG5cdCAgICAgICAgICAgIDB4ODAwMDAwMWE6IDB4ODAwMDgwMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAxYjogMHgwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDFjOiAweDIwODAwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDFkOiAweDgyMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAxZTogMHgyMDAyMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAxZjogMHg4MDIwODAwXG5cdCAgICAgICAgfVxuXHQgICAgXTtcblxuXHQgICAgLy8gTWFza3MgdGhhdCBzZWxlY3QgdGhlIFNCT1ggaW5wdXRcblx0ICAgIHZhciBTQk9YX01BU0sgPSBbXG5cdCAgICAgICAgMHhmODAwMDAwMSwgMHgxZjgwMDAwMCwgMHgwMWY4MDAwMCwgMHgwMDFmODAwMCxcblx0ICAgICAgICAweDAwMDFmODAwLCAweDAwMDAxZjgwLCAweDAwMDAwMWY4LCAweDgwMDAwMDFmXG5cdCAgICBdO1xuXG5cdCAgICAvKipcblx0ICAgICAqIERFUyBibG9jayBjaXBoZXIgYWxnb3JpdGhtLlxuXHQgICAgICovXG5cdCAgICB2YXIgREVTID0gQ19hbGdvLkRFUyA9IEJsb2NrQ2lwaGVyLmV4dGVuZCh7XG5cdCAgICAgICAgX2RvUmVzZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBrZXkgPSB0aGlzLl9rZXk7XG5cdCAgICAgICAgICAgIHZhciBrZXlXb3JkcyA9IGtleS53b3JkcztcblxuXHQgICAgICAgICAgICAvLyBTZWxlY3QgNTYgYml0cyBhY2NvcmRpbmcgdG8gUEMxXG5cdCAgICAgICAgICAgIHZhciBrZXlCaXRzID0gW107XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNTY7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgdmFyIGtleUJpdFBvcyA9IFBDMVtpXSAtIDE7XG5cdCAgICAgICAgICAgICAgICBrZXlCaXRzW2ldID0gKGtleVdvcmRzW2tleUJpdFBvcyA+Pj4gNV0gPj4+ICgzMSAtIGtleUJpdFBvcyAlIDMyKSkgJiAxO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gQXNzZW1ibGUgMTYgc3Via2V5c1xuXHQgICAgICAgICAgICB2YXIgc3ViS2V5cyA9IHRoaXMuX3N1YktleXMgPSBbXTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgblN1YktleSA9IDA7IG5TdWJLZXkgPCAxNjsgblN1YktleSsrKSB7XG5cdCAgICAgICAgICAgICAgICAvLyBDcmVhdGUgc3Via2V5XG5cdCAgICAgICAgICAgICAgICB2YXIgc3ViS2V5ID0gc3ViS2V5c1tuU3ViS2V5XSA9IFtdO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBTaG9ydGN1dFxuXHQgICAgICAgICAgICAgICAgdmFyIGJpdFNoaWZ0ID0gQklUX1NISUZUU1tuU3ViS2V5XTtcblxuXHQgICAgICAgICAgICAgICAgLy8gU2VsZWN0IDQ4IGJpdHMgYWNjb3JkaW5nIHRvIFBDMlxuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAyNDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgLy8gU2VsZWN0IGZyb20gdGhlIGxlZnQgMjgga2V5IGJpdHNcblx0ICAgICAgICAgICAgICAgICAgICBzdWJLZXlbKGkgLyA2KSB8IDBdIHw9IGtleUJpdHNbKChQQzJbaV0gLSAxKSArIGJpdFNoaWZ0KSAlIDI4XSA8PCAoMzEgLSBpICUgNik7XG5cblx0ICAgICAgICAgICAgICAgICAgICAvLyBTZWxlY3QgZnJvbSB0aGUgcmlnaHQgMjgga2V5IGJpdHNcblx0ICAgICAgICAgICAgICAgICAgICBzdWJLZXlbNCArICgoaSAvIDYpIHwgMCldIHw9IGtleUJpdHNbMjggKyAoKChQQzJbaSArIDI0XSAtIDEpICsgYml0U2hpZnQpICUgMjgpXSA8PCAoMzEgLSBpICUgNik7XG5cdCAgICAgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgICAgIC8vIFNpbmNlIGVhY2ggc3Via2V5IGlzIGFwcGxpZWQgdG8gYW4gZXhwYW5kZWQgMzItYml0IGlucHV0LFxuXHQgICAgICAgICAgICAgICAgLy8gdGhlIHN1YmtleSBjYW4gYmUgYnJva2VuIGludG8gOCB2YWx1ZXMgc2NhbGVkIHRvIDMyLWJpdHMsXG5cdCAgICAgICAgICAgICAgICAvLyB3aGljaCBhbGxvd3MgdGhlIGtleSB0byBiZSB1c2VkIHdpdGhvdXQgZXhwYW5zaW9uXG5cdCAgICAgICAgICAgICAgICBzdWJLZXlbMF0gPSAoc3ViS2V5WzBdIDw8IDEpIHwgKHN1YktleVswXSA+Pj4gMzEpO1xuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCA3OyBpKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICBzdWJLZXlbaV0gPSBzdWJLZXlbaV0gPj4+ICgoaSAtIDEpICogNCArIDMpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgc3ViS2V5WzddID0gKHN1YktleVs3XSA8PCA1KSB8IChzdWJLZXlbN10gPj4+IDI3KTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIENvbXB1dGUgaW52ZXJzZSBzdWJrZXlzXG5cdCAgICAgICAgICAgIHZhciBpbnZTdWJLZXlzID0gdGhpcy5faW52U3ViS2V5cyA9IFtdO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIGludlN1YktleXNbaV0gPSBzdWJLZXlzWzE1IC0gaV07XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgZW5jcnlwdEJsb2NrOiBmdW5jdGlvbiAoTSwgb2Zmc2V0KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2RvQ3J5cHRCbG9jayhNLCBvZmZzZXQsIHRoaXMuX3N1YktleXMpO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBkZWNyeXB0QmxvY2s6IGZ1bmN0aW9uIChNLCBvZmZzZXQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fZG9DcnlwdEJsb2NrKE0sIG9mZnNldCwgdGhpcy5faW52U3ViS2V5cyk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIF9kb0NyeXB0QmxvY2s6IGZ1bmN0aW9uIChNLCBvZmZzZXQsIHN1YktleXMpIHtcblx0ICAgICAgICAgICAgLy8gR2V0IGlucHV0XG5cdCAgICAgICAgICAgIHRoaXMuX2xCbG9jayA9IE1bb2Zmc2V0XTtcblx0ICAgICAgICAgICAgdGhpcy5fckJsb2NrID0gTVtvZmZzZXQgKyAxXTtcblxuXHQgICAgICAgICAgICAvLyBJbml0aWFsIHBlcm11dGF0aW9uXG5cdCAgICAgICAgICAgIGV4Y2hhbmdlTFIuY2FsbCh0aGlzLCA0LCAgMHgwZjBmMGYwZik7XG5cdCAgICAgICAgICAgIGV4Y2hhbmdlTFIuY2FsbCh0aGlzLCAxNiwgMHgwMDAwZmZmZik7XG5cdCAgICAgICAgICAgIGV4Y2hhbmdlUkwuY2FsbCh0aGlzLCAyLCAgMHgzMzMzMzMzMyk7XG5cdCAgICAgICAgICAgIGV4Y2hhbmdlUkwuY2FsbCh0aGlzLCA4LCAgMHgwMGZmMDBmZik7XG5cdCAgICAgICAgICAgIGV4Y2hhbmdlTFIuY2FsbCh0aGlzLCAxLCAgMHg1NTU1NTU1NSk7XG5cblx0ICAgICAgICAgICAgLy8gUm91bmRzXG5cdCAgICAgICAgICAgIGZvciAodmFyIHJvdW5kID0gMDsgcm91bmQgPCAxNjsgcm91bmQrKykge1xuXHQgICAgICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgICAgICB2YXIgc3ViS2V5ID0gc3ViS2V5c1tyb3VuZF07XG5cdCAgICAgICAgICAgICAgICB2YXIgbEJsb2NrID0gdGhpcy5fbEJsb2NrO1xuXHQgICAgICAgICAgICAgICAgdmFyIHJCbG9jayA9IHRoaXMuX3JCbG9jaztcblxuXHQgICAgICAgICAgICAgICAgLy8gRmVpc3RlbCBmdW5jdGlvblxuXHQgICAgICAgICAgICAgICAgdmFyIGYgPSAwO1xuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA4OyBpKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICBmIHw9IFNCT1hfUFtpXVsoKHJCbG9jayBeIHN1YktleVtpXSkgJiBTQk9YX01BU0tbaV0pID4+PiAwXTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIHRoaXMuX2xCbG9jayA9IHJCbG9jaztcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3JCbG9jayA9IGxCbG9jayBeIGY7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBVbmRvIHN3YXAgZnJvbSBsYXN0IHJvdW5kXG5cdCAgICAgICAgICAgIHZhciB0ID0gdGhpcy5fbEJsb2NrO1xuXHQgICAgICAgICAgICB0aGlzLl9sQmxvY2sgPSB0aGlzLl9yQmxvY2s7XG5cdCAgICAgICAgICAgIHRoaXMuX3JCbG9jayA9IHQ7XG5cblx0ICAgICAgICAgICAgLy8gRmluYWwgcGVybXV0YXRpb25cblx0ICAgICAgICAgICAgZXhjaGFuZ2VMUi5jYWxsKHRoaXMsIDEsICAweDU1NTU1NTU1KTtcblx0ICAgICAgICAgICAgZXhjaGFuZ2VSTC5jYWxsKHRoaXMsIDgsICAweDAwZmYwMGZmKTtcblx0ICAgICAgICAgICAgZXhjaGFuZ2VSTC5jYWxsKHRoaXMsIDIsICAweDMzMzMzMzMzKTtcblx0ICAgICAgICAgICAgZXhjaGFuZ2VMUi5jYWxsKHRoaXMsIDE2LCAweDAwMDBmZmZmKTtcblx0ICAgICAgICAgICAgZXhjaGFuZ2VMUi5jYWxsKHRoaXMsIDQsICAweDBmMGYwZjBmKTtcblxuXHQgICAgICAgICAgICAvLyBTZXQgb3V0cHV0XG5cdCAgICAgICAgICAgIE1bb2Zmc2V0XSA9IHRoaXMuX2xCbG9jaztcblx0ICAgICAgICAgICAgTVtvZmZzZXQgKyAxXSA9IHRoaXMuX3JCbG9jaztcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAga2V5U2l6ZTogNjQvMzIsXG5cblx0ICAgICAgICBpdlNpemU6IDY0LzMyLFxuXG5cdCAgICAgICAgYmxvY2tTaXplOiA2NC8zMlxuXHQgICAgfSk7XG5cblx0ICAgIC8vIFN3YXAgYml0cyBhY3Jvc3MgdGhlIGxlZnQgYW5kIHJpZ2h0IHdvcmRzXG5cdCAgICBmdW5jdGlvbiBleGNoYW5nZUxSKG9mZnNldCwgbWFzaykge1xuXHQgICAgICAgIHZhciB0ID0gKCh0aGlzLl9sQmxvY2sgPj4+IG9mZnNldCkgXiB0aGlzLl9yQmxvY2spICYgbWFzaztcblx0ICAgICAgICB0aGlzLl9yQmxvY2sgXj0gdDtcblx0ICAgICAgICB0aGlzLl9sQmxvY2sgXj0gdCA8PCBvZmZzZXQ7XG5cdCAgICB9XG5cblx0ICAgIGZ1bmN0aW9uIGV4Y2hhbmdlUkwob2Zmc2V0LCBtYXNrKSB7XG5cdCAgICAgICAgdmFyIHQgPSAoKHRoaXMuX3JCbG9jayA+Pj4gb2Zmc2V0KSBeIHRoaXMuX2xCbG9jaykgJiBtYXNrO1xuXHQgICAgICAgIHRoaXMuX2xCbG9jayBePSB0O1xuXHQgICAgICAgIHRoaXMuX3JCbG9jayBePSB0IDw8IG9mZnNldDtcblx0ICAgIH1cblxuXHQgICAgLyoqXG5cdCAgICAgKiBTaG9ydGN1dCBmdW5jdGlvbnMgdG8gdGhlIGNpcGhlcidzIG9iamVjdCBpbnRlcmZhY2UuXG5cdCAgICAgKlxuXHQgICAgICogQGV4YW1wbGVcblx0ICAgICAqXG5cdCAgICAgKiAgICAgdmFyIGNpcGhlcnRleHQgPSBDcnlwdG9KUy5ERVMuZW5jcnlwdChtZXNzYWdlLCBrZXksIGNmZyk7XG5cdCAgICAgKiAgICAgdmFyIHBsYWludGV4dCAgPSBDcnlwdG9KUy5ERVMuZGVjcnlwdChjaXBoZXJ0ZXh0LCBrZXksIGNmZyk7XG5cdCAgICAgKi9cblx0ICAgIEMuREVTID0gQmxvY2tDaXBoZXIuX2NyZWF0ZUhlbHBlcihERVMpO1xuXG5cdCAgICAvKipcblx0ICAgICAqIFRyaXBsZS1ERVMgYmxvY2sgY2lwaGVyIGFsZ29yaXRobS5cblx0ICAgICAqL1xuXHQgICAgdmFyIFRyaXBsZURFUyA9IENfYWxnby5UcmlwbGVERVMgPSBCbG9ja0NpcGhlci5leHRlbmQoe1xuXHQgICAgICAgIF9kb1Jlc2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIga2V5ID0gdGhpcy5fa2V5O1xuXHQgICAgICAgICAgICB2YXIga2V5V29yZHMgPSBrZXkud29yZHM7XG5cdCAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUga2V5IGxlbmd0aCBpcyB2YWxpZCAoNjQsIDEyOCBvciA+PSAxOTIgYml0KVxuXHQgICAgICAgICAgICBpZiAoa2V5V29yZHMubGVuZ3RoICE9PSAyICYmIGtleVdvcmRzLmxlbmd0aCAhPT0gNCAmJiBrZXlXb3Jkcy5sZW5ndGggPCA2KSB7XG5cdCAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQga2V5IGxlbmd0aCAtIDNERVMgcmVxdWlyZXMgdGhlIGtleSBsZW5ndGggdG8gYmUgNjQsIDEyOCwgMTkyIG9yID4xOTIuJyk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBFeHRlbmQgdGhlIGtleSBhY2NvcmRpbmcgdG8gdGhlIGtleWluZyBvcHRpb25zIGRlZmluZWQgaW4gM0RFUyBzdGFuZGFyZFxuXHQgICAgICAgICAgICB2YXIga2V5MSA9IGtleVdvcmRzLnNsaWNlKDAsIDIpO1xuXHQgICAgICAgICAgICB2YXIga2V5MiA9IGtleVdvcmRzLmxlbmd0aCA8IDQgPyBrZXlXb3Jkcy5zbGljZSgwLCAyKSA6IGtleVdvcmRzLnNsaWNlKDIsIDQpO1xuXHQgICAgICAgICAgICB2YXIga2V5MyA9IGtleVdvcmRzLmxlbmd0aCA8IDYgPyBrZXlXb3Jkcy5zbGljZSgwLCAyKSA6IGtleVdvcmRzLnNsaWNlKDQsIDYpO1xuXG5cdCAgICAgICAgICAgIC8vIENyZWF0ZSBERVMgaW5zdGFuY2VzXG5cdCAgICAgICAgICAgIHRoaXMuX2RlczEgPSBERVMuY3JlYXRlRW5jcnlwdG9yKFdvcmRBcnJheS5jcmVhdGUoa2V5MSkpO1xuXHQgICAgICAgICAgICB0aGlzLl9kZXMyID0gREVTLmNyZWF0ZUVuY3J5cHRvcihXb3JkQXJyYXkuY3JlYXRlKGtleTIpKTtcblx0ICAgICAgICAgICAgdGhpcy5fZGVzMyA9IERFUy5jcmVhdGVFbmNyeXB0b3IoV29yZEFycmF5LmNyZWF0ZShrZXkzKSk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIGVuY3J5cHRCbG9jazogZnVuY3Rpb24gKE0sIG9mZnNldCkge1xuXHQgICAgICAgICAgICB0aGlzLl9kZXMxLmVuY3J5cHRCbG9jayhNLCBvZmZzZXQpO1xuXHQgICAgICAgICAgICB0aGlzLl9kZXMyLmRlY3J5cHRCbG9jayhNLCBvZmZzZXQpO1xuXHQgICAgICAgICAgICB0aGlzLl9kZXMzLmVuY3J5cHRCbG9jayhNLCBvZmZzZXQpO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBkZWNyeXB0QmxvY2s6IGZ1bmN0aW9uIChNLCBvZmZzZXQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fZGVzMy5kZWNyeXB0QmxvY2soTSwgb2Zmc2V0KTtcblx0ICAgICAgICAgICAgdGhpcy5fZGVzMi5lbmNyeXB0QmxvY2soTSwgb2Zmc2V0KTtcblx0ICAgICAgICAgICAgdGhpcy5fZGVzMS5kZWNyeXB0QmxvY2soTSwgb2Zmc2V0KTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAga2V5U2l6ZTogMTkyLzMyLFxuXG5cdCAgICAgICAgaXZTaXplOiA2NC8zMixcblxuXHQgICAgICAgIGJsb2NrU2l6ZTogNjQvMzJcblx0ICAgIH0pO1xuXG5cdCAgICAvKipcblx0ICAgICAqIFNob3J0Y3V0IGZ1bmN0aW9ucyB0byB0aGUgY2lwaGVyJ3Mgb2JqZWN0IGludGVyZmFjZS5cblx0ICAgICAqXG5cdCAgICAgKiBAZXhhbXBsZVxuXHQgICAgICpcblx0ICAgICAqICAgICB2YXIgY2lwaGVydGV4dCA9IENyeXB0b0pTLlRyaXBsZURFUy5lbmNyeXB0KG1lc3NhZ2UsIGtleSwgY2ZnKTtcblx0ICAgICAqICAgICB2YXIgcGxhaW50ZXh0ICA9IENyeXB0b0pTLlRyaXBsZURFUy5kZWNyeXB0KGNpcGhlcnRleHQsIGtleSwgY2ZnKTtcblx0ICAgICAqL1xuXHQgICAgQy5UcmlwbGVERVMgPSBCbG9ja0NpcGhlci5fY3JlYXRlSGVscGVyKFRyaXBsZURFUyk7XG5cdH0oKSk7XG5cblxuXHQoZnVuY3Rpb24gKCkge1xuXHQgICAgLy8gU2hvcnRjdXRzXG5cdCAgICB2YXIgQyA9IENyeXB0b0pTO1xuXHQgICAgdmFyIENfbGliID0gQy5saWI7XG5cdCAgICB2YXIgU3RyZWFtQ2lwaGVyID0gQ19saWIuU3RyZWFtQ2lwaGVyO1xuXHQgICAgdmFyIENfYWxnbyA9IEMuYWxnbztcblxuXHQgICAgLyoqXG5cdCAgICAgKiBSQzQgc3RyZWFtIGNpcGhlciBhbGdvcml0aG0uXG5cdCAgICAgKi9cblx0ICAgIHZhciBSQzQgPSBDX2FsZ28uUkM0ID0gU3RyZWFtQ2lwaGVyLmV4dGVuZCh7XG5cdCAgICAgICAgX2RvUmVzZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBrZXkgPSB0aGlzLl9rZXk7XG5cdCAgICAgICAgICAgIHZhciBrZXlXb3JkcyA9IGtleS53b3Jkcztcblx0ICAgICAgICAgICAgdmFyIGtleVNpZ0J5dGVzID0ga2V5LnNpZ0J5dGVzO1xuXG5cdCAgICAgICAgICAgIC8vIEluaXQgc2JveFxuXHQgICAgICAgICAgICB2YXIgUyA9IHRoaXMuX1MgPSBbXTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAyNTY7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgU1tpXSA9IGk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBLZXkgc2V0dXBcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGogPSAwOyBpIDwgMjU2OyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHZhciBrZXlCeXRlSW5kZXggPSBpICUga2V5U2lnQnl0ZXM7XG5cdCAgICAgICAgICAgICAgICB2YXIga2V5Qnl0ZSA9IChrZXlXb3Jkc1trZXlCeXRlSW5kZXggPj4+IDJdID4+PiAoMjQgLSAoa2V5Qnl0ZUluZGV4ICUgNCkgKiA4KSkgJiAweGZmO1xuXG5cdCAgICAgICAgICAgICAgICBqID0gKGogKyBTW2ldICsga2V5Qnl0ZSkgJSAyNTY7XG5cblx0ICAgICAgICAgICAgICAgIC8vIFN3YXBcblx0ICAgICAgICAgICAgICAgIHZhciB0ID0gU1tpXTtcblx0ICAgICAgICAgICAgICAgIFNbaV0gPSBTW2pdO1xuXHQgICAgICAgICAgICAgICAgU1tqXSA9IHQ7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBDb3VudGVyc1xuXHQgICAgICAgICAgICB0aGlzLl9pID0gdGhpcy5faiA9IDA7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIF9kb1Byb2Nlc3NCbG9jazogZnVuY3Rpb24gKE0sIG9mZnNldCkge1xuXHQgICAgICAgICAgICBNW29mZnNldF0gXj0gZ2VuZXJhdGVLZXlzdHJlYW1Xb3JkLmNhbGwodGhpcyk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIGtleVNpemU6IDI1Ni8zMixcblxuXHQgICAgICAgIGl2U2l6ZTogMFxuXHQgICAgfSk7XG5cblx0ICAgIGZ1bmN0aW9uIGdlbmVyYXRlS2V5c3RyZWFtV29yZCgpIHtcblx0ICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICB2YXIgUyA9IHRoaXMuX1M7XG5cdCAgICAgICAgdmFyIGkgPSB0aGlzLl9pO1xuXHQgICAgICAgIHZhciBqID0gdGhpcy5fajtcblxuXHQgICAgICAgIC8vIEdlbmVyYXRlIGtleXN0cmVhbSB3b3JkXG5cdCAgICAgICAgdmFyIGtleXN0cmVhbVdvcmQgPSAwO1xuXHQgICAgICAgIGZvciAodmFyIG4gPSAwOyBuIDwgNDsgbisrKSB7XG5cdCAgICAgICAgICAgIGkgPSAoaSArIDEpICUgMjU2O1xuXHQgICAgICAgICAgICBqID0gKGogKyBTW2ldKSAlIDI1NjtcblxuXHQgICAgICAgICAgICAvLyBTd2FwXG5cdCAgICAgICAgICAgIHZhciB0ID0gU1tpXTtcblx0ICAgICAgICAgICAgU1tpXSA9IFNbal07XG5cdCAgICAgICAgICAgIFNbal0gPSB0O1xuXG5cdCAgICAgICAgICAgIGtleXN0cmVhbVdvcmQgfD0gU1soU1tpXSArIFNbal0pICUgMjU2XSA8PCAoMjQgLSBuICogOCk7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgLy8gVXBkYXRlIGNvdW50ZXJzXG5cdCAgICAgICAgdGhpcy5faSA9IGk7XG5cdCAgICAgICAgdGhpcy5faiA9IGo7XG5cblx0ICAgICAgICByZXR1cm4ga2V5c3RyZWFtV29yZDtcblx0ICAgIH1cblxuXHQgICAgLyoqXG5cdCAgICAgKiBTaG9ydGN1dCBmdW5jdGlvbnMgdG8gdGhlIGNpcGhlcidzIG9iamVjdCBpbnRlcmZhY2UuXG5cdCAgICAgKlxuXHQgICAgICogQGV4YW1wbGVcblx0ICAgICAqXG5cdCAgICAgKiAgICAgdmFyIGNpcGhlcnRleHQgPSBDcnlwdG9KUy5SQzQuZW5jcnlwdChtZXNzYWdlLCBrZXksIGNmZyk7XG5cdCAgICAgKiAgICAgdmFyIHBsYWludGV4dCAgPSBDcnlwdG9KUy5SQzQuZGVjcnlwdChjaXBoZXJ0ZXh0LCBrZXksIGNmZyk7XG5cdCAgICAgKi9cblx0ICAgIEMuUkM0ID0gU3RyZWFtQ2lwaGVyLl9jcmVhdGVIZWxwZXIoUkM0KTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBNb2RpZmllZCBSQzQgc3RyZWFtIGNpcGhlciBhbGdvcml0aG0uXG5cdCAgICAgKi9cblx0ICAgIHZhciBSQzREcm9wID0gQ19hbGdvLlJDNERyb3AgPSBSQzQuZXh0ZW5kKHtcblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb25maWd1cmF0aW9uIG9wdGlvbnMuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcHJvcGVydHkge251bWJlcn0gZHJvcCBUaGUgbnVtYmVyIG9mIGtleXN0cmVhbSB3b3JkcyB0byBkcm9wLiBEZWZhdWx0IDE5MlxuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGNmZzogUkM0LmNmZy5leHRlbmQoe1xuXHQgICAgICAgICAgICBkcm9wOiAxOTJcblx0ICAgICAgICB9KSxcblxuXHQgICAgICAgIF9kb1Jlc2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIFJDNC5fZG9SZXNldC5jYWxsKHRoaXMpO1xuXG5cdCAgICAgICAgICAgIC8vIERyb3Bcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMuY2ZnLmRyb3A7IGkgPiAwOyBpLS0pIHtcblx0ICAgICAgICAgICAgICAgIGdlbmVyYXRlS2V5c3RyZWFtV29yZC5jYWxsKHRoaXMpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogU2hvcnRjdXQgZnVuY3Rpb25zIHRvIHRoZSBjaXBoZXIncyBvYmplY3QgaW50ZXJmYWNlLlxuXHQgICAgICpcblx0ICAgICAqIEBleGFtcGxlXG5cdCAgICAgKlxuXHQgICAgICogICAgIHZhciBjaXBoZXJ0ZXh0ID0gQ3J5cHRvSlMuUkM0RHJvcC5lbmNyeXB0KG1lc3NhZ2UsIGtleSwgY2ZnKTtcblx0ICAgICAqICAgICB2YXIgcGxhaW50ZXh0ICA9IENyeXB0b0pTLlJDNERyb3AuZGVjcnlwdChjaXBoZXJ0ZXh0LCBrZXksIGNmZyk7XG5cdCAgICAgKi9cblx0ICAgIEMuUkM0RHJvcCA9IFN0cmVhbUNpcGhlci5fY3JlYXRlSGVscGVyKFJDNERyb3ApO1xuXHR9KCkpO1xuXG5cblx0LyoqIEBwcmVzZXJ2ZVxuXHQgKiBDb3VudGVyIGJsb2NrIG1vZGUgY29tcGF0aWJsZSB3aXRoICBEciBCcmlhbiBHbGFkbWFuIGZpbGVlbmMuY1xuXHQgKiBkZXJpdmVkIGZyb20gQ3J5cHRvSlMubW9kZS5DVFJcblx0ICogSmFuIEhydWJ5IGpocnVieS53ZWJAZ21haWwuY29tXG5cdCAqL1xuXHRDcnlwdG9KUy5tb2RlLkNUUkdsYWRtYW4gPSAoZnVuY3Rpb24gKCkge1xuXHQgICAgdmFyIENUUkdsYWRtYW4gPSBDcnlwdG9KUy5saWIuQmxvY2tDaXBoZXJNb2RlLmV4dGVuZCgpO1xuXG5cdFx0ZnVuY3Rpb24gaW5jV29yZCh3b3JkKVxuXHRcdHtcblx0XHRcdGlmICgoKHdvcmQgPj4gMjQpICYgMHhmZikgPT09IDB4ZmYpIHsgLy9vdmVyZmxvd1xuXHRcdFx0dmFyIGIxID0gKHdvcmQgPj4gMTYpJjB4ZmY7XG5cdFx0XHR2YXIgYjIgPSAod29yZCA+PiA4KSYweGZmO1xuXHRcdFx0dmFyIGIzID0gd29yZCAmIDB4ZmY7XG5cblx0XHRcdGlmIChiMSA9PT0gMHhmZikgLy8gb3ZlcmZsb3cgYjFcblx0XHRcdHtcblx0XHRcdGIxID0gMDtcblx0XHRcdGlmIChiMiA9PT0gMHhmZilcblx0XHRcdHtcblx0XHRcdFx0YjIgPSAwO1xuXHRcdFx0XHRpZiAoYjMgPT09IDB4ZmYpXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRiMyA9IDA7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZVxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0KytiMztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0ZWxzZVxuXHRcdFx0e1xuXHRcdFx0XHQrK2IyO1xuXHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0ZWxzZVxuXHRcdFx0e1xuXHRcdFx0KytiMTtcblx0XHRcdH1cblxuXHRcdFx0d29yZCA9IDA7XG5cdFx0XHR3b3JkICs9IChiMSA8PCAxNik7XG5cdFx0XHR3b3JkICs9IChiMiA8PCA4KTtcblx0XHRcdHdvcmQgKz0gYjM7XG5cdFx0XHR9XG5cdFx0XHRlbHNlXG5cdFx0XHR7XG5cdFx0XHR3b3JkICs9ICgweDAxIDw8IDI0KTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB3b3JkO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGluY0NvdW50ZXIoY291bnRlcilcblx0XHR7XG5cdFx0XHRpZiAoKGNvdW50ZXJbMF0gPSBpbmNXb3JkKGNvdW50ZXJbMF0pKSA9PT0gMClcblx0XHRcdHtcblx0XHRcdFx0Ly8gZW5jcl9kYXRhIGluIGZpbGVlbmMuYyBmcm9tICBEciBCcmlhbiBHbGFkbWFuJ3MgY291bnRzIG9ubHkgd2l0aCBEV09SRCBqIDwgOFxuXHRcdFx0XHRjb3VudGVyWzFdID0gaW5jV29yZChjb3VudGVyWzFdKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBjb3VudGVyO1xuXHRcdH1cblxuXHQgICAgdmFyIEVuY3J5cHRvciA9IENUUkdsYWRtYW4uRW5jcnlwdG9yID0gQ1RSR2xhZG1hbi5leHRlbmQoe1xuXHQgICAgICAgIHByb2Nlc3NCbG9jazogZnVuY3Rpb24gKHdvcmRzLCBvZmZzZXQpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBjaXBoZXIgPSB0aGlzLl9jaXBoZXJcblx0ICAgICAgICAgICAgdmFyIGJsb2NrU2l6ZSA9IGNpcGhlci5ibG9ja1NpemU7XG5cdCAgICAgICAgICAgIHZhciBpdiA9IHRoaXMuX2l2O1xuXHQgICAgICAgICAgICB2YXIgY291bnRlciA9IHRoaXMuX2NvdW50ZXI7XG5cblx0ICAgICAgICAgICAgLy8gR2VuZXJhdGUga2V5c3RyZWFtXG5cdCAgICAgICAgICAgIGlmIChpdikge1xuXHQgICAgICAgICAgICAgICAgY291bnRlciA9IHRoaXMuX2NvdW50ZXIgPSBpdi5zbGljZSgwKTtcblxuXHQgICAgICAgICAgICAgICAgLy8gUmVtb3ZlIElWIGZvciBzdWJzZXF1ZW50IGJsb2Nrc1xuXHQgICAgICAgICAgICAgICAgdGhpcy5faXYgPSB1bmRlZmluZWQ7XG5cdCAgICAgICAgICAgIH1cblxuXHRcdFx0XHRpbmNDb3VudGVyKGNvdW50ZXIpO1xuXG5cdFx0XHRcdHZhciBrZXlzdHJlYW0gPSBjb3VudGVyLnNsaWNlKDApO1xuXHQgICAgICAgICAgICBjaXBoZXIuZW5jcnlwdEJsb2NrKGtleXN0cmVhbSwgMCk7XG5cblx0ICAgICAgICAgICAgLy8gRW5jcnlwdFxuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJsb2NrU2l6ZTsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICB3b3Jkc1tvZmZzZXQgKyBpXSBePSBrZXlzdHJlYW1baV07XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblxuXHQgICAgQ1RSR2xhZG1hbi5EZWNyeXB0b3IgPSBFbmNyeXB0b3I7XG5cblx0ICAgIHJldHVybiBDVFJHbGFkbWFuO1xuXHR9KCkpO1xuXG5cblxuXG5cdChmdW5jdGlvbiAoKSB7XG5cdCAgICAvLyBTaG9ydGN1dHNcblx0ICAgIHZhciBDID0gQ3J5cHRvSlM7XG5cdCAgICB2YXIgQ19saWIgPSBDLmxpYjtcblx0ICAgIHZhciBTdHJlYW1DaXBoZXIgPSBDX2xpYi5TdHJlYW1DaXBoZXI7XG5cdCAgICB2YXIgQ19hbGdvID0gQy5hbGdvO1xuXG5cdCAgICAvLyBSZXVzYWJsZSBvYmplY3RzXG5cdCAgICB2YXIgUyAgPSBbXTtcblx0ICAgIHZhciBDXyA9IFtdO1xuXHQgICAgdmFyIEcgID0gW107XG5cblx0ICAgIC8qKlxuXHQgICAgICogUmFiYml0IHN0cmVhbSBjaXBoZXIgYWxnb3JpdGhtXG5cdCAgICAgKi9cblx0ICAgIHZhciBSYWJiaXQgPSBDX2FsZ28uUmFiYml0ID0gU3RyZWFtQ2lwaGVyLmV4dGVuZCh7XG5cdCAgICAgICAgX2RvUmVzZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBLID0gdGhpcy5fa2V5LndvcmRzO1xuXHQgICAgICAgICAgICB2YXIgaXYgPSB0aGlzLmNmZy5pdjtcblxuXHQgICAgICAgICAgICAvLyBTd2FwIGVuZGlhblxuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDQ7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgS1tpXSA9ICgoKEtbaV0gPDwgOCkgIHwgKEtbaV0gPj4+IDI0KSkgJiAweDAwZmYwMGZmKSB8XG5cdCAgICAgICAgICAgICAgICAgICAgICAgKCgoS1tpXSA8PCAyNCkgfCAoS1tpXSA+Pj4gOCkpICAmIDB4ZmYwMGZmMDApO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gR2VuZXJhdGUgaW5pdGlhbCBzdGF0ZSB2YWx1ZXNcblx0ICAgICAgICAgICAgdmFyIFggPSB0aGlzLl9YID0gW1xuXHQgICAgICAgICAgICAgICAgS1swXSwgKEtbM10gPDwgMTYpIHwgKEtbMl0gPj4+IDE2KSxcblx0ICAgICAgICAgICAgICAgIEtbMV0sIChLWzBdIDw8IDE2KSB8IChLWzNdID4+PiAxNiksXG5cdCAgICAgICAgICAgICAgICBLWzJdLCAoS1sxXSA8PCAxNikgfCAoS1swXSA+Pj4gMTYpLFxuXHQgICAgICAgICAgICAgICAgS1szXSwgKEtbMl0gPDwgMTYpIHwgKEtbMV0gPj4+IDE2KVxuXHQgICAgICAgICAgICBdO1xuXG5cdCAgICAgICAgICAgIC8vIEdlbmVyYXRlIGluaXRpYWwgY291bnRlciB2YWx1ZXNcblx0ICAgICAgICAgICAgdmFyIEMgPSB0aGlzLl9DID0gW1xuXHQgICAgICAgICAgICAgICAgKEtbMl0gPDwgMTYpIHwgKEtbMl0gPj4+IDE2KSwgKEtbMF0gJiAweGZmZmYwMDAwKSB8IChLWzFdICYgMHgwMDAwZmZmZiksXG5cdCAgICAgICAgICAgICAgICAoS1szXSA8PCAxNikgfCAoS1szXSA+Pj4gMTYpLCAoS1sxXSAmIDB4ZmZmZjAwMDApIHwgKEtbMl0gJiAweDAwMDBmZmZmKSxcblx0ICAgICAgICAgICAgICAgIChLWzBdIDw8IDE2KSB8IChLWzBdID4+PiAxNiksIChLWzJdICYgMHhmZmZmMDAwMCkgfCAoS1szXSAmIDB4MDAwMGZmZmYpLFxuXHQgICAgICAgICAgICAgICAgKEtbMV0gPDwgMTYpIHwgKEtbMV0gPj4+IDE2KSwgKEtbM10gJiAweGZmZmYwMDAwKSB8IChLWzBdICYgMHgwMDAwZmZmZilcblx0ICAgICAgICAgICAgXTtcblxuXHQgICAgICAgICAgICAvLyBDYXJyeSBiaXRcblx0ICAgICAgICAgICAgdGhpcy5fYiA9IDA7XG5cblx0ICAgICAgICAgICAgLy8gSXRlcmF0ZSB0aGUgc3lzdGVtIGZvdXIgdGltZXNcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA0OyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIG5leHRTdGF0ZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gTW9kaWZ5IHRoZSBjb3VudGVyc1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgQ1tpXSBePSBYWyhpICsgNCkgJiA3XTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIElWIHNldHVwXG5cdCAgICAgICAgICAgIGlmIChpdikge1xuXHQgICAgICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgICAgICB2YXIgSVYgPSBpdi53b3Jkcztcblx0ICAgICAgICAgICAgICAgIHZhciBJVl8wID0gSVZbMF07XG5cdCAgICAgICAgICAgICAgICB2YXIgSVZfMSA9IElWWzFdO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBHZW5lcmF0ZSBmb3VyIHN1YnZlY3RvcnNcblx0ICAgICAgICAgICAgICAgIHZhciBpMCA9ICgoKElWXzAgPDwgOCkgfCAoSVZfMCA+Pj4gMjQpKSAmIDB4MDBmZjAwZmYpIHwgKCgoSVZfMCA8PCAyNCkgfCAoSVZfMCA+Pj4gOCkpICYgMHhmZjAwZmYwMCk7XG5cdCAgICAgICAgICAgICAgICB2YXIgaTIgPSAoKChJVl8xIDw8IDgpIHwgKElWXzEgPj4+IDI0KSkgJiAweDAwZmYwMGZmKSB8ICgoKElWXzEgPDwgMjQpIHwgKElWXzEgPj4+IDgpKSAmIDB4ZmYwMGZmMDApO1xuXHQgICAgICAgICAgICAgICAgdmFyIGkxID0gKGkwID4+PiAxNikgfCAoaTIgJiAweGZmZmYwMDAwKTtcblx0ICAgICAgICAgICAgICAgIHZhciBpMyA9IChpMiA8PCAxNikgIHwgKGkwICYgMHgwMDAwZmZmZik7XG5cblx0ICAgICAgICAgICAgICAgIC8vIE1vZGlmeSBjb3VudGVyIHZhbHVlc1xuXHQgICAgICAgICAgICAgICAgQ1swXSBePSBpMDtcblx0ICAgICAgICAgICAgICAgIENbMV0gXj0gaTE7XG5cdCAgICAgICAgICAgICAgICBDWzJdIF49IGkyO1xuXHQgICAgICAgICAgICAgICAgQ1szXSBePSBpMztcblx0ICAgICAgICAgICAgICAgIENbNF0gXj0gaTA7XG5cdCAgICAgICAgICAgICAgICBDWzVdIF49IGkxO1xuXHQgICAgICAgICAgICAgICAgQ1s2XSBePSBpMjtcblx0ICAgICAgICAgICAgICAgIENbN10gXj0gaTM7XG5cblx0ICAgICAgICAgICAgICAgIC8vIEl0ZXJhdGUgdGhlIHN5c3RlbSBmb3VyIHRpbWVzXG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDQ7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIG5leHRTdGF0ZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIF9kb1Byb2Nlc3NCbG9jazogZnVuY3Rpb24gKE0sIG9mZnNldCkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dFxuXHQgICAgICAgICAgICB2YXIgWCA9IHRoaXMuX1g7XG5cblx0ICAgICAgICAgICAgLy8gSXRlcmF0ZSB0aGUgc3lzdGVtXG5cdCAgICAgICAgICAgIG5leHRTdGF0ZS5jYWxsKHRoaXMpO1xuXG5cdCAgICAgICAgICAgIC8vIEdlbmVyYXRlIGZvdXIga2V5c3RyZWFtIHdvcmRzXG5cdCAgICAgICAgICAgIFNbMF0gPSBYWzBdIF4gKFhbNV0gPj4+IDE2KSBeIChYWzNdIDw8IDE2KTtcblx0ICAgICAgICAgICAgU1sxXSA9IFhbMl0gXiAoWFs3XSA+Pj4gMTYpIF4gKFhbNV0gPDwgMTYpO1xuXHQgICAgICAgICAgICBTWzJdID0gWFs0XSBeIChYWzFdID4+PiAxNikgXiAoWFs3XSA8PCAxNik7XG5cdCAgICAgICAgICAgIFNbM10gPSBYWzZdIF4gKFhbM10gPj4+IDE2KSBeIChYWzFdIDw8IDE2KTtcblxuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDQ7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgLy8gU3dhcCBlbmRpYW5cblx0ICAgICAgICAgICAgICAgIFNbaV0gPSAoKChTW2ldIDw8IDgpICB8IChTW2ldID4+PiAyNCkpICYgMHgwMGZmMDBmZikgfFxuXHQgICAgICAgICAgICAgICAgICAgICAgICgoKFNbaV0gPDwgMjQpIHwgKFNbaV0gPj4+IDgpKSAgJiAweGZmMDBmZjAwKTtcblxuXHQgICAgICAgICAgICAgICAgLy8gRW5jcnlwdFxuXHQgICAgICAgICAgICAgICAgTVtvZmZzZXQgKyBpXSBePSBTW2ldO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIGJsb2NrU2l6ZTogMTI4LzMyLFxuXG5cdCAgICAgICAgaXZTaXplOiA2NC8zMlxuXHQgICAgfSk7XG5cblx0ICAgIGZ1bmN0aW9uIG5leHRTdGF0ZSgpIHtcblx0ICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICB2YXIgWCA9IHRoaXMuX1g7XG5cdCAgICAgICAgdmFyIEMgPSB0aGlzLl9DO1xuXG5cdCAgICAgICAgLy8gU2F2ZSBvbGQgY291bnRlciB2YWx1ZXNcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDg7IGkrKykge1xuXHQgICAgICAgICAgICBDX1tpXSA9IENbaV07XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgLy8gQ2FsY3VsYXRlIG5ldyBjb3VudGVyIHZhbHVlc1xuXHQgICAgICAgIENbMF0gPSAoQ1swXSArIDB4NGQzNGQzNGQgKyB0aGlzLl9iKSB8IDA7XG5cdCAgICAgICAgQ1sxXSA9IChDWzFdICsgMHhkMzRkMzRkMyArICgoQ1swXSA+Pj4gMCkgPCAoQ19bMF0gPj4+IDApID8gMSA6IDApKSB8IDA7XG5cdCAgICAgICAgQ1syXSA9IChDWzJdICsgMHgzNGQzNGQzNCArICgoQ1sxXSA+Pj4gMCkgPCAoQ19bMV0gPj4+IDApID8gMSA6IDApKSB8IDA7XG5cdCAgICAgICAgQ1szXSA9IChDWzNdICsgMHg0ZDM0ZDM0ZCArICgoQ1syXSA+Pj4gMCkgPCAoQ19bMl0gPj4+IDApID8gMSA6IDApKSB8IDA7XG5cdCAgICAgICAgQ1s0XSA9IChDWzRdICsgMHhkMzRkMzRkMyArICgoQ1szXSA+Pj4gMCkgPCAoQ19bM10gPj4+IDApID8gMSA6IDApKSB8IDA7XG5cdCAgICAgICAgQ1s1XSA9IChDWzVdICsgMHgzNGQzNGQzNCArICgoQ1s0XSA+Pj4gMCkgPCAoQ19bNF0gPj4+IDApID8gMSA6IDApKSB8IDA7XG5cdCAgICAgICAgQ1s2XSA9IChDWzZdICsgMHg0ZDM0ZDM0ZCArICgoQ1s1XSA+Pj4gMCkgPCAoQ19bNV0gPj4+IDApID8gMSA6IDApKSB8IDA7XG5cdCAgICAgICAgQ1s3XSA9IChDWzddICsgMHhkMzRkMzRkMyArICgoQ1s2XSA+Pj4gMCkgPCAoQ19bNl0gPj4+IDApID8gMSA6IDApKSB8IDA7XG5cdCAgICAgICAgdGhpcy5fYiA9IChDWzddID4+PiAwKSA8IChDX1s3XSA+Pj4gMCkgPyAxIDogMDtcblxuXHQgICAgICAgIC8vIENhbGN1bGF0ZSB0aGUgZy12YWx1ZXNcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDg7IGkrKykge1xuXHQgICAgICAgICAgICB2YXIgZ3ggPSBYW2ldICsgQ1tpXTtcblxuXHQgICAgICAgICAgICAvLyBDb25zdHJ1Y3QgaGlnaCBhbmQgbG93IGFyZ3VtZW50IGZvciBzcXVhcmluZ1xuXHQgICAgICAgICAgICB2YXIgZ2EgPSBneCAmIDB4ZmZmZjtcblx0ICAgICAgICAgICAgdmFyIGdiID0gZ3ggPj4+IDE2O1xuXG5cdCAgICAgICAgICAgIC8vIENhbGN1bGF0ZSBoaWdoIGFuZCBsb3cgcmVzdWx0IG9mIHNxdWFyaW5nXG5cdCAgICAgICAgICAgIHZhciBnaCA9ICgoKChnYSAqIGdhKSA+Pj4gMTcpICsgZ2EgKiBnYikgPj4+IDE1KSArIGdiICogZ2I7XG5cdCAgICAgICAgICAgIHZhciBnbCA9ICgoKGd4ICYgMHhmZmZmMDAwMCkgKiBneCkgfCAwKSArICgoKGd4ICYgMHgwMDAwZmZmZikgKiBneCkgfCAwKTtcblxuXHQgICAgICAgICAgICAvLyBIaWdoIFhPUiBsb3dcblx0ICAgICAgICAgICAgR1tpXSA9IGdoIF4gZ2w7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgLy8gQ2FsY3VsYXRlIG5ldyBzdGF0ZSB2YWx1ZXNcblx0ICAgICAgICBYWzBdID0gKEdbMF0gKyAoKEdbN10gPDwgMTYpIHwgKEdbN10gPj4+IDE2KSkgKyAoKEdbNl0gPDwgMTYpIHwgKEdbNl0gPj4+IDE2KSkpIHwgMDtcblx0ICAgICAgICBYWzFdID0gKEdbMV0gKyAoKEdbMF0gPDwgOCkgIHwgKEdbMF0gPj4+IDI0KSkgKyBHWzddKSB8IDA7XG5cdCAgICAgICAgWFsyXSA9IChHWzJdICsgKChHWzFdIDw8IDE2KSB8IChHWzFdID4+PiAxNikpICsgKChHWzBdIDw8IDE2KSB8IChHWzBdID4+PiAxNikpKSB8IDA7XG5cdCAgICAgICAgWFszXSA9IChHWzNdICsgKChHWzJdIDw8IDgpICB8IChHWzJdID4+PiAyNCkpICsgR1sxXSkgfCAwO1xuXHQgICAgICAgIFhbNF0gPSAoR1s0XSArICgoR1szXSA8PCAxNikgfCAoR1szXSA+Pj4gMTYpKSArICgoR1syXSA8PCAxNikgfCAoR1syXSA+Pj4gMTYpKSkgfCAwO1xuXHQgICAgICAgIFhbNV0gPSAoR1s1XSArICgoR1s0XSA8PCA4KSAgfCAoR1s0XSA+Pj4gMjQpKSArIEdbM10pIHwgMDtcblx0ICAgICAgICBYWzZdID0gKEdbNl0gKyAoKEdbNV0gPDwgMTYpIHwgKEdbNV0gPj4+IDE2KSkgKyAoKEdbNF0gPDwgMTYpIHwgKEdbNF0gPj4+IDE2KSkpIHwgMDtcblx0ICAgICAgICBYWzddID0gKEdbN10gKyAoKEdbNl0gPDwgOCkgIHwgKEdbNl0gPj4+IDI0KSkgKyBHWzVdKSB8IDA7XG5cdCAgICB9XG5cblx0ICAgIC8qKlxuXHQgICAgICogU2hvcnRjdXQgZnVuY3Rpb25zIHRvIHRoZSBjaXBoZXIncyBvYmplY3QgaW50ZXJmYWNlLlxuXHQgICAgICpcblx0ICAgICAqIEBleGFtcGxlXG5cdCAgICAgKlxuXHQgICAgICogICAgIHZhciBjaXBoZXJ0ZXh0ID0gQ3J5cHRvSlMuUmFiYml0LmVuY3J5cHQobWVzc2FnZSwga2V5LCBjZmcpO1xuXHQgICAgICogICAgIHZhciBwbGFpbnRleHQgID0gQ3J5cHRvSlMuUmFiYml0LmRlY3J5cHQoY2lwaGVydGV4dCwga2V5LCBjZmcpO1xuXHQgICAgICovXG5cdCAgICBDLlJhYmJpdCA9IFN0cmVhbUNpcGhlci5fY3JlYXRlSGVscGVyKFJhYmJpdCk7XG5cdH0oKSk7XG5cblxuXHQvKipcblx0ICogQ291bnRlciBibG9jayBtb2RlLlxuXHQgKi9cblx0Q3J5cHRvSlMubW9kZS5DVFIgPSAoZnVuY3Rpb24gKCkge1xuXHQgICAgdmFyIENUUiA9IENyeXB0b0pTLmxpYi5CbG9ja0NpcGhlck1vZGUuZXh0ZW5kKCk7XG5cblx0ICAgIHZhciBFbmNyeXB0b3IgPSBDVFIuRW5jcnlwdG9yID0gQ1RSLmV4dGVuZCh7XG5cdCAgICAgICAgcHJvY2Vzc0Jsb2NrOiBmdW5jdGlvbiAod29yZHMsIG9mZnNldCkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIGNpcGhlciA9IHRoaXMuX2NpcGhlclxuXHQgICAgICAgICAgICB2YXIgYmxvY2tTaXplID0gY2lwaGVyLmJsb2NrU2l6ZTtcblx0ICAgICAgICAgICAgdmFyIGl2ID0gdGhpcy5faXY7XG5cdCAgICAgICAgICAgIHZhciBjb3VudGVyID0gdGhpcy5fY291bnRlcjtcblxuXHQgICAgICAgICAgICAvLyBHZW5lcmF0ZSBrZXlzdHJlYW1cblx0ICAgICAgICAgICAgaWYgKGl2KSB7XG5cdCAgICAgICAgICAgICAgICBjb3VudGVyID0gdGhpcy5fY291bnRlciA9IGl2LnNsaWNlKDApO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBSZW1vdmUgSVYgZm9yIHN1YnNlcXVlbnQgYmxvY2tzXG5cdCAgICAgICAgICAgICAgICB0aGlzLl9pdiA9IHVuZGVmaW5lZDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB2YXIga2V5c3RyZWFtID0gY291bnRlci5zbGljZSgwKTtcblx0ICAgICAgICAgICAgY2lwaGVyLmVuY3J5cHRCbG9jayhrZXlzdHJlYW0sIDApO1xuXG5cdCAgICAgICAgICAgIC8vIEluY3JlbWVudCBjb3VudGVyXG5cdCAgICAgICAgICAgIGNvdW50ZXJbYmxvY2tTaXplIC0gMV0gPSAoY291bnRlcltibG9ja1NpemUgLSAxXSArIDEpIHwgMFxuXG5cdCAgICAgICAgICAgIC8vIEVuY3J5cHRcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBibG9ja1NpemU7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgd29yZHNbb2Zmc2V0ICsgaV0gXj0ga2V5c3RyZWFtW2ldO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cblx0ICAgIENUUi5EZWNyeXB0b3IgPSBFbmNyeXB0b3I7XG5cblx0ICAgIHJldHVybiBDVFI7XG5cdH0oKSk7XG5cblxuXHQoZnVuY3Rpb24gKCkge1xuXHQgICAgLy8gU2hvcnRjdXRzXG5cdCAgICB2YXIgQyA9IENyeXB0b0pTO1xuXHQgICAgdmFyIENfbGliID0gQy5saWI7XG5cdCAgICB2YXIgU3RyZWFtQ2lwaGVyID0gQ19saWIuU3RyZWFtQ2lwaGVyO1xuXHQgICAgdmFyIENfYWxnbyA9IEMuYWxnbztcblxuXHQgICAgLy8gUmV1c2FibGUgb2JqZWN0c1xuXHQgICAgdmFyIFMgID0gW107XG5cdCAgICB2YXIgQ18gPSBbXTtcblx0ICAgIHZhciBHICA9IFtdO1xuXG5cdCAgICAvKipcblx0ICAgICAqIFJhYmJpdCBzdHJlYW0gY2lwaGVyIGFsZ29yaXRobS5cblx0ICAgICAqXG5cdCAgICAgKiBUaGlzIGlzIGEgbGVnYWN5IHZlcnNpb24gdGhhdCBuZWdsZWN0ZWQgdG8gY29udmVydCB0aGUga2V5IHRvIGxpdHRsZS1lbmRpYW4uXG5cdCAgICAgKiBUaGlzIGVycm9yIGRvZXNuJ3QgYWZmZWN0IHRoZSBjaXBoZXIncyBzZWN1cml0eSxcblx0ICAgICAqIGJ1dCBpdCBkb2VzIGFmZmVjdCBpdHMgY29tcGF0aWJpbGl0eSB3aXRoIG90aGVyIGltcGxlbWVudGF0aW9ucy5cblx0ICAgICAqL1xuXHQgICAgdmFyIFJhYmJpdExlZ2FjeSA9IENfYWxnby5SYWJiaXRMZWdhY3kgPSBTdHJlYW1DaXBoZXIuZXh0ZW5kKHtcblx0ICAgICAgICBfZG9SZXNldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIEsgPSB0aGlzLl9rZXkud29yZHM7XG5cdCAgICAgICAgICAgIHZhciBpdiA9IHRoaXMuY2ZnLml2O1xuXG5cdCAgICAgICAgICAgIC8vIEdlbmVyYXRlIGluaXRpYWwgc3RhdGUgdmFsdWVzXG5cdCAgICAgICAgICAgIHZhciBYID0gdGhpcy5fWCA9IFtcblx0ICAgICAgICAgICAgICAgIEtbMF0sIChLWzNdIDw8IDE2KSB8IChLWzJdID4+PiAxNiksXG5cdCAgICAgICAgICAgICAgICBLWzFdLCAoS1swXSA8PCAxNikgfCAoS1szXSA+Pj4gMTYpLFxuXHQgICAgICAgICAgICAgICAgS1syXSwgKEtbMV0gPDwgMTYpIHwgKEtbMF0gPj4+IDE2KSxcblx0ICAgICAgICAgICAgICAgIEtbM10sIChLWzJdIDw8IDE2KSB8IChLWzFdID4+PiAxNilcblx0ICAgICAgICAgICAgXTtcblxuXHQgICAgICAgICAgICAvLyBHZW5lcmF0ZSBpbml0aWFsIGNvdW50ZXIgdmFsdWVzXG5cdCAgICAgICAgICAgIHZhciBDID0gdGhpcy5fQyA9IFtcblx0ICAgICAgICAgICAgICAgIChLWzJdIDw8IDE2KSB8IChLWzJdID4+PiAxNiksIChLWzBdICYgMHhmZmZmMDAwMCkgfCAoS1sxXSAmIDB4MDAwMGZmZmYpLFxuXHQgICAgICAgICAgICAgICAgKEtbM10gPDwgMTYpIHwgKEtbM10gPj4+IDE2KSwgKEtbMV0gJiAweGZmZmYwMDAwKSB8IChLWzJdICYgMHgwMDAwZmZmZiksXG5cdCAgICAgICAgICAgICAgICAoS1swXSA8PCAxNikgfCAoS1swXSA+Pj4gMTYpLCAoS1syXSAmIDB4ZmZmZjAwMDApIHwgKEtbM10gJiAweDAwMDBmZmZmKSxcblx0ICAgICAgICAgICAgICAgIChLWzFdIDw8IDE2KSB8IChLWzFdID4+PiAxNiksIChLWzNdICYgMHhmZmZmMDAwMCkgfCAoS1swXSAmIDB4MDAwMGZmZmYpXG5cdCAgICAgICAgICAgIF07XG5cblx0ICAgICAgICAgICAgLy8gQ2FycnkgYml0XG5cdCAgICAgICAgICAgIHRoaXMuX2IgPSAwO1xuXG5cdCAgICAgICAgICAgIC8vIEl0ZXJhdGUgdGhlIHN5c3RlbSBmb3VyIHRpbWVzXG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICBuZXh0U3RhdGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIE1vZGlmeSB0aGUgY291bnRlcnNcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA4OyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIENbaV0gXj0gWFsoaSArIDQpICYgN107XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBJViBzZXR1cFxuXHQgICAgICAgICAgICBpZiAoaXYpIHtcblx0ICAgICAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICAgICAgdmFyIElWID0gaXYud29yZHM7XG5cdCAgICAgICAgICAgICAgICB2YXIgSVZfMCA9IElWWzBdO1xuXHQgICAgICAgICAgICAgICAgdmFyIElWXzEgPSBJVlsxXTtcblxuXHQgICAgICAgICAgICAgICAgLy8gR2VuZXJhdGUgZm91ciBzdWJ2ZWN0b3JzXG5cdCAgICAgICAgICAgICAgICB2YXIgaTAgPSAoKChJVl8wIDw8IDgpIHwgKElWXzAgPj4+IDI0KSkgJiAweDAwZmYwMGZmKSB8ICgoKElWXzAgPDwgMjQpIHwgKElWXzAgPj4+IDgpKSAmIDB4ZmYwMGZmMDApO1xuXHQgICAgICAgICAgICAgICAgdmFyIGkyID0gKCgoSVZfMSA8PCA4KSB8IChJVl8xID4+PiAyNCkpICYgMHgwMGZmMDBmZikgfCAoKChJVl8xIDw8IDI0KSB8IChJVl8xID4+PiA4KSkgJiAweGZmMDBmZjAwKTtcblx0ICAgICAgICAgICAgICAgIHZhciBpMSA9IChpMCA+Pj4gMTYpIHwgKGkyICYgMHhmZmZmMDAwMCk7XG5cdCAgICAgICAgICAgICAgICB2YXIgaTMgPSAoaTIgPDwgMTYpICB8IChpMCAmIDB4MDAwMGZmZmYpO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBNb2RpZnkgY291bnRlciB2YWx1ZXNcblx0ICAgICAgICAgICAgICAgIENbMF0gXj0gaTA7XG5cdCAgICAgICAgICAgICAgICBDWzFdIF49IGkxO1xuXHQgICAgICAgICAgICAgICAgQ1syXSBePSBpMjtcblx0ICAgICAgICAgICAgICAgIENbM10gXj0gaTM7XG5cdCAgICAgICAgICAgICAgICBDWzRdIF49IGkwO1xuXHQgICAgICAgICAgICAgICAgQ1s1XSBePSBpMTtcblx0ICAgICAgICAgICAgICAgIENbNl0gXj0gaTI7XG5cdCAgICAgICAgICAgICAgICBDWzddIF49IGkzO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBJdGVyYXRlIHRoZSBzeXN0ZW0gZm91ciB0aW1lc1xuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA0OyBpKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICBuZXh0U3RhdGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBfZG9Qcm9jZXNzQmxvY2s6IGZ1bmN0aW9uIChNLCBvZmZzZXQpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRcblx0ICAgICAgICAgICAgdmFyIFggPSB0aGlzLl9YO1xuXG5cdCAgICAgICAgICAgIC8vIEl0ZXJhdGUgdGhlIHN5c3RlbVxuXHQgICAgICAgICAgICBuZXh0U3RhdGUuY2FsbCh0aGlzKTtcblxuXHQgICAgICAgICAgICAvLyBHZW5lcmF0ZSBmb3VyIGtleXN0cmVhbSB3b3Jkc1xuXHQgICAgICAgICAgICBTWzBdID0gWFswXSBeIChYWzVdID4+PiAxNikgXiAoWFszXSA8PCAxNik7XG5cdCAgICAgICAgICAgIFNbMV0gPSBYWzJdIF4gKFhbN10gPj4+IDE2KSBeIChYWzVdIDw8IDE2KTtcblx0ICAgICAgICAgICAgU1syXSA9IFhbNF0gXiAoWFsxXSA+Pj4gMTYpIF4gKFhbN10gPDwgMTYpO1xuXHQgICAgICAgICAgICBTWzNdID0gWFs2XSBeIChYWzNdID4+PiAxNikgXiAoWFsxXSA8PCAxNik7XG5cblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA0OyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIC8vIFN3YXAgZW5kaWFuXG5cdCAgICAgICAgICAgICAgICBTW2ldID0gKCgoU1tpXSA8PCA4KSAgfCAoU1tpXSA+Pj4gMjQpKSAmIDB4MDBmZjAwZmYpIHxcblx0ICAgICAgICAgICAgICAgICAgICAgICAoKChTW2ldIDw8IDI0KSB8IChTW2ldID4+PiA4KSkgICYgMHhmZjAwZmYwMCk7XG5cblx0ICAgICAgICAgICAgICAgIC8vIEVuY3J5cHRcblx0ICAgICAgICAgICAgICAgIE1bb2Zmc2V0ICsgaV0gXj0gU1tpXTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBibG9ja1NpemU6IDEyOC8zMixcblxuXHQgICAgICAgIGl2U2l6ZTogNjQvMzJcblx0ICAgIH0pO1xuXG5cdCAgICBmdW5jdGlvbiBuZXh0U3RhdGUoKSB7XG5cdCAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgdmFyIFggPSB0aGlzLl9YO1xuXHQgICAgICAgIHZhciBDID0gdGhpcy5fQztcblxuXHQgICAgICAgIC8vIFNhdmUgb2xkIGNvdW50ZXIgdmFsdWVzXG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA4OyBpKyspIHtcblx0ICAgICAgICAgICAgQ19baV0gPSBDW2ldO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIC8vIENhbGN1bGF0ZSBuZXcgY291bnRlciB2YWx1ZXNcblx0ICAgICAgICBDWzBdID0gKENbMF0gKyAweDRkMzRkMzRkICsgdGhpcy5fYikgfCAwO1xuXHQgICAgICAgIENbMV0gPSAoQ1sxXSArIDB4ZDM0ZDM0ZDMgKyAoKENbMF0gPj4+IDApIDwgKENfWzBdID4+PiAwKSA/IDEgOiAwKSkgfCAwO1xuXHQgICAgICAgIENbMl0gPSAoQ1syXSArIDB4MzRkMzRkMzQgKyAoKENbMV0gPj4+IDApIDwgKENfWzFdID4+PiAwKSA/IDEgOiAwKSkgfCAwO1xuXHQgICAgICAgIENbM10gPSAoQ1szXSArIDB4NGQzNGQzNGQgKyAoKENbMl0gPj4+IDApIDwgKENfWzJdID4+PiAwKSA/IDEgOiAwKSkgfCAwO1xuXHQgICAgICAgIENbNF0gPSAoQ1s0XSArIDB4ZDM0ZDM0ZDMgKyAoKENbM10gPj4+IDApIDwgKENfWzNdID4+PiAwKSA/IDEgOiAwKSkgfCAwO1xuXHQgICAgICAgIENbNV0gPSAoQ1s1XSArIDB4MzRkMzRkMzQgKyAoKENbNF0gPj4+IDApIDwgKENfWzRdID4+PiAwKSA/IDEgOiAwKSkgfCAwO1xuXHQgICAgICAgIENbNl0gPSAoQ1s2XSArIDB4NGQzNGQzNGQgKyAoKENbNV0gPj4+IDApIDwgKENfWzVdID4+PiAwKSA/IDEgOiAwKSkgfCAwO1xuXHQgICAgICAgIENbN10gPSAoQ1s3XSArIDB4ZDM0ZDM0ZDMgKyAoKENbNl0gPj4+IDApIDwgKENfWzZdID4+PiAwKSA/IDEgOiAwKSkgfCAwO1xuXHQgICAgICAgIHRoaXMuX2IgPSAoQ1s3XSA+Pj4gMCkgPCAoQ19bN10gPj4+IDApID8gMSA6IDA7XG5cblx0ICAgICAgICAvLyBDYWxjdWxhdGUgdGhlIGctdmFsdWVzXG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA4OyBpKyspIHtcblx0ICAgICAgICAgICAgdmFyIGd4ID0gWFtpXSArIENbaV07XG5cblx0ICAgICAgICAgICAgLy8gQ29uc3RydWN0IGhpZ2ggYW5kIGxvdyBhcmd1bWVudCBmb3Igc3F1YXJpbmdcblx0ICAgICAgICAgICAgdmFyIGdhID0gZ3ggJiAweGZmZmY7XG5cdCAgICAgICAgICAgIHZhciBnYiA9IGd4ID4+PiAxNjtcblxuXHQgICAgICAgICAgICAvLyBDYWxjdWxhdGUgaGlnaCBhbmQgbG93IHJlc3VsdCBvZiBzcXVhcmluZ1xuXHQgICAgICAgICAgICB2YXIgZ2ggPSAoKCgoZ2EgKiBnYSkgPj4+IDE3KSArIGdhICogZ2IpID4+PiAxNSkgKyBnYiAqIGdiO1xuXHQgICAgICAgICAgICB2YXIgZ2wgPSAoKChneCAmIDB4ZmZmZjAwMDApICogZ3gpIHwgMCkgKyAoKChneCAmIDB4MDAwMGZmZmYpICogZ3gpIHwgMCk7XG5cblx0ICAgICAgICAgICAgLy8gSGlnaCBYT1IgbG93XG5cdCAgICAgICAgICAgIEdbaV0gPSBnaCBeIGdsO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIC8vIENhbGN1bGF0ZSBuZXcgc3RhdGUgdmFsdWVzXG5cdCAgICAgICAgWFswXSA9IChHWzBdICsgKChHWzddIDw8IDE2KSB8IChHWzddID4+PiAxNikpICsgKChHWzZdIDw8IDE2KSB8IChHWzZdID4+PiAxNikpKSB8IDA7XG5cdCAgICAgICAgWFsxXSA9IChHWzFdICsgKChHWzBdIDw8IDgpICB8IChHWzBdID4+PiAyNCkpICsgR1s3XSkgfCAwO1xuXHQgICAgICAgIFhbMl0gPSAoR1syXSArICgoR1sxXSA8PCAxNikgfCAoR1sxXSA+Pj4gMTYpKSArICgoR1swXSA8PCAxNikgfCAoR1swXSA+Pj4gMTYpKSkgfCAwO1xuXHQgICAgICAgIFhbM10gPSAoR1szXSArICgoR1syXSA8PCA4KSAgfCAoR1syXSA+Pj4gMjQpKSArIEdbMV0pIHwgMDtcblx0ICAgICAgICBYWzRdID0gKEdbNF0gKyAoKEdbM10gPDwgMTYpIHwgKEdbM10gPj4+IDE2KSkgKyAoKEdbMl0gPDwgMTYpIHwgKEdbMl0gPj4+IDE2KSkpIHwgMDtcblx0ICAgICAgICBYWzVdID0gKEdbNV0gKyAoKEdbNF0gPDwgOCkgIHwgKEdbNF0gPj4+IDI0KSkgKyBHWzNdKSB8IDA7XG5cdCAgICAgICAgWFs2XSA9IChHWzZdICsgKChHWzVdIDw8IDE2KSB8IChHWzVdID4+PiAxNikpICsgKChHWzRdIDw8IDE2KSB8IChHWzRdID4+PiAxNikpKSB8IDA7XG5cdCAgICAgICAgWFs3XSA9IChHWzddICsgKChHWzZdIDw8IDgpICB8IChHWzZdID4+PiAyNCkpICsgR1s1XSkgfCAwO1xuXHQgICAgfVxuXG5cdCAgICAvKipcblx0ICAgICAqIFNob3J0Y3V0IGZ1bmN0aW9ucyB0byB0aGUgY2lwaGVyJ3Mgb2JqZWN0IGludGVyZmFjZS5cblx0ICAgICAqXG5cdCAgICAgKiBAZXhhbXBsZVxuXHQgICAgICpcblx0ICAgICAqICAgICB2YXIgY2lwaGVydGV4dCA9IENyeXB0b0pTLlJhYmJpdExlZ2FjeS5lbmNyeXB0KG1lc3NhZ2UsIGtleSwgY2ZnKTtcblx0ICAgICAqICAgICB2YXIgcGxhaW50ZXh0ICA9IENyeXB0b0pTLlJhYmJpdExlZ2FjeS5kZWNyeXB0KGNpcGhlcnRleHQsIGtleSwgY2ZnKTtcblx0ICAgICAqL1xuXHQgICAgQy5SYWJiaXRMZWdhY3kgPSBTdHJlYW1DaXBoZXIuX2NyZWF0ZUhlbHBlcihSYWJiaXRMZWdhY3kpO1xuXHR9KCkpO1xuXG5cblx0LyoqXG5cdCAqIFplcm8gcGFkZGluZyBzdHJhdGVneS5cblx0ICovXG5cdENyeXB0b0pTLnBhZC5aZXJvUGFkZGluZyA9IHtcblx0ICAgIHBhZDogZnVuY3Rpb24gKGRhdGEsIGJsb2NrU2l6ZSkge1xuXHQgICAgICAgIC8vIFNob3J0Y3V0XG5cdCAgICAgICAgdmFyIGJsb2NrU2l6ZUJ5dGVzID0gYmxvY2tTaXplICogNDtcblxuXHQgICAgICAgIC8vIFBhZFxuXHQgICAgICAgIGRhdGEuY2xhbXAoKTtcblx0ICAgICAgICBkYXRhLnNpZ0J5dGVzICs9IGJsb2NrU2l6ZUJ5dGVzIC0gKChkYXRhLnNpZ0J5dGVzICUgYmxvY2tTaXplQnl0ZXMpIHx8IGJsb2NrU2l6ZUJ5dGVzKTtcblx0ICAgIH0sXG5cblx0ICAgIHVucGFkOiBmdW5jdGlvbiAoZGF0YSkge1xuXHQgICAgICAgIC8vIFNob3J0Y3V0XG5cdCAgICAgICAgdmFyIGRhdGFXb3JkcyA9IGRhdGEud29yZHM7XG5cblx0ICAgICAgICAvLyBVbnBhZFxuXHQgICAgICAgIHZhciBpID0gZGF0YS5zaWdCeXRlcyAtIDE7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IGRhdGEuc2lnQnl0ZXMgLSAxOyBpID49IDA7IGktLSkge1xuXHQgICAgICAgICAgICBpZiAoKChkYXRhV29yZHNbaSA+Pj4gMl0gPj4+ICgyNCAtIChpICUgNCkgKiA4KSkgJiAweGZmKSkge1xuXHQgICAgICAgICAgICAgICAgZGF0YS5zaWdCeXRlcyA9IGkgKyAxO1xuXHQgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9XG5cdH07XG5cblxuXHRyZXR1cm4gQ3J5cHRvSlM7XG5cbn0pKTsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///40\n"); /***/ }), -/* 33 */ +/* 41 */ /*!*****************************************************************!*\ !*** ./node_modules/@dcloudio/vue-cli-plugin-uni/lib/crypto.js ***! \*****************************************************************/ @@ -1562,7 +1751,7 @@ function base64Decode (source, target) { /***/ }), -/* 34 */ +/* 42 */ /*!*************************************************!*\ !*** ./node_modules/crypto-browserify/index.js ***! \*************************************************/ @@ -1572,22 +1761,22 @@ function base64Decode (source, target) { "use strict"; -exports.randomBytes = exports.rng = exports.pseudoRandomBytes = exports.prng = __webpack_require__(/*! randombytes */ 35) -exports.createHash = exports.Hash = __webpack_require__(/*! create-hash */ 43) -exports.createHmac = exports.Hmac = __webpack_require__(/*! create-hmac */ 78) +exports.randomBytes = exports.rng = exports.pseudoRandomBytes = exports.prng = __webpack_require__(/*! randombytes */ 43) +exports.createHash = exports.Hash = __webpack_require__(/*! create-hash */ 51) +exports.createHmac = exports.Hmac = __webpack_require__(/*! create-hmac */ 86) -var algos = __webpack_require__(/*! browserify-sign/algos */ 81) +var algos = __webpack_require__(/*! browserify-sign/algos */ 89) var algoKeys = Object.keys(algos) var hashes = ['sha1', 'sha224', 'sha256', 'sha384', 'sha512', 'md5', 'rmd160'].concat(algoKeys) exports.getHashes = function () { return hashes } -var p = __webpack_require__(/*! pbkdf2 */ 83) +var p = __webpack_require__(/*! pbkdf2 */ 91) exports.pbkdf2 = p.pbkdf2 exports.pbkdf2Sync = p.pbkdf2Sync -var aes = __webpack_require__(/*! browserify-cipher */ 89) +var aes = __webpack_require__(/*! browserify-cipher */ 97) exports.Cipher = aes.Cipher exports.createCipher = aes.createCipher @@ -1600,7 +1789,7 @@ exports.createDecipheriv = aes.createDecipheriv exports.getCiphers = aes.getCiphers exports.listCiphers = aes.listCiphers -var dh = __webpack_require__(/*! diffie-hellman */ 118) +var dh = __webpack_require__(/*! diffie-hellman */ 126) exports.DiffieHellmanGroup = dh.DiffieHellmanGroup exports.createDiffieHellmanGroup = dh.createDiffieHellmanGroup @@ -1608,16 +1797,16 @@ exports.getDiffieHellman = dh.getDiffieHellman exports.createDiffieHellman = dh.createDiffieHellman exports.DiffieHellman = dh.DiffieHellman -var sign = __webpack_require__(/*! browserify-sign */ 127) +var sign = __webpack_require__(/*! browserify-sign */ 135) exports.createSign = sign.createSign exports.Sign = sign.Sign exports.createVerify = sign.createVerify exports.Verify = sign.Verify -exports.createECDH = __webpack_require__(/*! create-ecdh */ 182) +exports.createECDH = __webpack_require__(/*! create-ecdh */ 190) -var publicEncrypt = __webpack_require__(/*! public-encrypt */ 183) +var publicEncrypt = __webpack_require__(/*! public-encrypt */ 191) exports.publicEncrypt = publicEncrypt.publicEncrypt exports.privateEncrypt = publicEncrypt.privateEncrypt @@ -1637,7 +1826,7 @@ exports.privateDecrypt = publicEncrypt.privateDecrypt // } // }) -var rf = __webpack_require__(/*! randomfill */ 189) +var rf = __webpack_require__(/*! randomfill */ 197) exports.randomFill = rf.randomFill exports.randomFillSync = rf.randomFillSync @@ -1670,7 +1859,7 @@ exports.constants = { /***/ }), -/* 35 */ +/* 43 */ /*!*********************************************!*\ !*** ./node_modules/randombytes/browser.js ***! \*********************************************/ @@ -1692,7 +1881,7 @@ function oldBrowser () { throw new Error('Secure random number generation is not supported by this browser.\nUse Chrome, Firefox or Internet Explorer 11') } -var Buffer = __webpack_require__(/*! safe-buffer */ 38).Buffer +var Buffer = __webpack_require__(/*! safe-buffer */ 46).Buffer var crypto = __webpack_provided_global_dot_crypto || global.msCrypto if (crypto && crypto.getRandomValues) { @@ -1729,10 +1918,10 @@ function randomBytes (size, cb) { return bytes } -/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/vue-cli-plugin-uni/lib/crypto.js */ 33)["default"], __webpack_require__(/*! ./../webpack/buildin/global.js */ 30), __webpack_require__(/*! ./../node-libs-browser/mock/process.js */ 36))) +/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/vue-cli-plugin-uni/lib/crypto.js */ 41)["default"], __webpack_require__(/*! ./../webpack/buildin/global.js */ 38), __webpack_require__(/*! ./../node-libs-browser/mock/process.js */ 44))) /***/ }), -/* 36 */ +/* 44 */ /*!********************************************************!*\ !*** ./node_modules/node-libs-browser/mock/process.js ***! \********************************************************/ @@ -1763,7 +1952,7 @@ exports.binding = function (name) { var path; exports.cwd = function () { return cwd }; exports.chdir = function (dir) { - if (!path) path = __webpack_require__(/*! path */ 37); + if (!path) path = __webpack_require__(/*! path */ 45); cwd = path.resolve(dir, cwd); }; })(); @@ -1776,7 +1965,7 @@ exports.features = {}; /***/ }), -/* 37 */ +/* 45 */ /*!***********************************************!*\ !*** ./node_modules/path-browserify/index.js ***! \***********************************************/ @@ -2086,10 +2275,10 @@ var substr = 'ab'.substr(-1) === 'b' } ; -/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../node-libs-browser/mock/process.js */ 36))) +/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../node-libs-browser/mock/process.js */ 44))) /***/ }), -/* 38 */ +/* 46 */ /*!*******************************************!*\ !*** ./node_modules/safe-buffer/index.js ***! \*******************************************/ @@ -2098,7 +2287,7 @@ var substr = 'ab'.substr(-1) === 'b' /*! safe-buffer. MIT License. Feross Aboukhadijeh */ /* eslint-disable node/no-deprecated-api */ -var buffer = __webpack_require__(/*! buffer */ 39) +var buffer = __webpack_require__(/*! buffer */ 47) var Buffer = buffer.Buffer // alternative to using Object.keys for old browsers @@ -2164,7 +2353,7 @@ SafeBuffer.allocUnsafeSlow = function (size) { /***/ }), -/* 39 */ +/* 47 */ /*!**************************************!*\ !*** ./node_modules/buffer/index.js ***! \**************************************/ @@ -2182,9 +2371,9 @@ SafeBuffer.allocUnsafeSlow = function (size) { -var base64 = __webpack_require__(/*! base64-js */ 40) -var ieee754 = __webpack_require__(/*! ieee754 */ 41) -var isArray = __webpack_require__(/*! isarray */ 42) +var base64 = __webpack_require__(/*! base64-js */ 48) +var ieee754 = __webpack_require__(/*! ieee754 */ 49) +var isArray = __webpack_require__(/*! isarray */ 50) exports.Buffer = Buffer exports.SlowBuffer = SlowBuffer @@ -3962,10 +4151,10 @@ function isnan (val) { return val !== val // eslint-disable-line no-self-compare } -/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../webpack/buildin/global.js */ 30))) +/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../webpack/buildin/global.js */ 38))) /***/ }), -/* 40 */ +/* 48 */ /*!*****************************************!*\ !*** ./node_modules/base64-js/index.js ***! \*****************************************/ @@ -4126,7 +4315,7 @@ function fromByteArray (uint8) { /***/ }), -/* 41 */ +/* 49 */ /*!***************************************!*\ !*** ./node_modules/ieee754/index.js ***! \***************************************/ @@ -4221,7 +4410,7 @@ exports.write = function (buffer, value, offset, isLE, mLen, nBytes) { /***/ }), -/* 42 */ +/* 50 */ /*!***************************************!*\ !*** ./node_modules/isarray/index.js ***! \***************************************/ @@ -4236,7 +4425,7 @@ module.exports = Array.isArray || function (arr) { /***/ }), -/* 43 */ +/* 51 */ /*!*********************************************!*\ !*** ./node_modules/create-hash/browser.js ***! \*********************************************/ @@ -4245,11 +4434,11 @@ module.exports = Array.isArray || function (arr) { "use strict"; -var inherits = __webpack_require__(/*! inherits */ 44) -var MD5 = __webpack_require__(/*! md5.js */ 45) -var RIPEMD160 = __webpack_require__(/*! ripemd160 */ 63) -var sha = __webpack_require__(/*! sha.js */ 64) -var Base = __webpack_require__(/*! cipher-base */ 72) +var inherits = __webpack_require__(/*! inherits */ 52) +var MD5 = __webpack_require__(/*! md5.js */ 53) +var RIPEMD160 = __webpack_require__(/*! ripemd160 */ 71) +var sha = __webpack_require__(/*! sha.js */ 72) +var Base = __webpack_require__(/*! cipher-base */ 80) function Hash (hash) { Base.call(this, 'digest') @@ -4277,7 +4466,7 @@ module.exports = function createHash (alg) { /***/ }), -/* 44 */ +/* 52 */ /*!***************************************************!*\ !*** ./node_modules/inherits/inherits_browser.js ***! \***************************************************/ @@ -4314,7 +4503,7 @@ if (typeof Object.create === 'function') { /***/ }), -/* 45 */ +/* 53 */ /*!**************************************!*\ !*** ./node_modules/md5.js/index.js ***! \**************************************/ @@ -4323,9 +4512,9 @@ if (typeof Object.create === 'function') { "use strict"; -var inherits = __webpack_require__(/*! inherits */ 44) -var HashBase = __webpack_require__(/*! hash-base */ 46) -var Buffer = __webpack_require__(/*! safe-buffer */ 38).Buffer +var inherits = __webpack_require__(/*! inherits */ 52) +var HashBase = __webpack_require__(/*! hash-base */ 54) +var Buffer = __webpack_require__(/*! safe-buffer */ 46).Buffer var ARRAY16 = new Array(16) @@ -4471,7 +4660,7 @@ module.exports = MD5 /***/ }), -/* 46 */ +/* 54 */ /*!*****************************************!*\ !*** ./node_modules/hash-base/index.js ***! \*****************************************/ @@ -4480,9 +4669,9 @@ module.exports = MD5 "use strict"; -var Buffer = __webpack_require__(/*! safe-buffer */ 38).Buffer -var Transform = __webpack_require__(/*! readable-stream */ 47).Transform -var inherits = __webpack_require__(/*! inherits */ 44) +var Buffer = __webpack_require__(/*! safe-buffer */ 46).Buffer +var Transform = __webpack_require__(/*! readable-stream */ 55).Transform +var inherits = __webpack_require__(/*! inherits */ 52) function throwIfNotStringOrBuffer (val, prefix) { if (!Buffer.isBuffer(val) && typeof val !== 'string') { @@ -4577,24 +4766,24 @@ module.exports = HashBase /***/ }), -/* 47 */ +/* 55 */ /*!**********************************************************!*\ !*** ./node_modules/readable-stream/readable-browser.js ***! \**********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { -exports = module.exports = __webpack_require__(/*! ./lib/_stream_readable.js */ 48); +exports = module.exports = __webpack_require__(/*! ./lib/_stream_readable.js */ 56); exports.Stream = exports; exports.Readable = exports; -exports.Writable = __webpack_require__(/*! ./lib/_stream_writable.js */ 58); -exports.Duplex = __webpack_require__(/*! ./lib/_stream_duplex.js */ 57); -exports.Transform = __webpack_require__(/*! ./lib/_stream_transform.js */ 61); -exports.PassThrough = __webpack_require__(/*! ./lib/_stream_passthrough.js */ 62); +exports.Writable = __webpack_require__(/*! ./lib/_stream_writable.js */ 66); +exports.Duplex = __webpack_require__(/*! ./lib/_stream_duplex.js */ 65); +exports.Transform = __webpack_require__(/*! ./lib/_stream_transform.js */ 69); +exports.PassThrough = __webpack_require__(/*! ./lib/_stream_passthrough.js */ 70); /***/ }), -/* 48 */ +/* 56 */ /*!**************************************************************!*\ !*** ./node_modules/readable-stream/lib/_stream_readable.js ***! \**************************************************************/ @@ -4627,13 +4816,13 @@ exports.PassThrough = __webpack_require__(/*! ./lib/_stream_passthrough.js */ 62 /**/ -var pna = __webpack_require__(/*! process-nextick-args */ 49); +var pna = __webpack_require__(/*! process-nextick-args */ 57); /**/ module.exports = Readable; /**/ -var isArray = __webpack_require__(/*! isarray */ 42); +var isArray = __webpack_require__(/*! isarray */ 50); /**/ /**/ @@ -4643,7 +4832,7 @@ var Duplex; Readable.ReadableState = ReadableState; /**/ -var EE = __webpack_require__(/*! events */ 50).EventEmitter; +var EE = __webpack_require__(/*! events */ 58).EventEmitter; var EElistenerCount = function (emitter, type) { return emitter.listeners(type).length; @@ -4651,12 +4840,12 @@ var EElistenerCount = function (emitter, type) { /**/ /**/ -var Stream = __webpack_require__(/*! ./internal/streams/stream */ 51); +var Stream = __webpack_require__(/*! ./internal/streams/stream */ 59); /**/ /**/ -var Buffer = __webpack_require__(/*! safe-buffer */ 38).Buffer; +var Buffer = __webpack_require__(/*! safe-buffer */ 46).Buffer; var OurUint8Array = global.Uint8Array || function () {}; function _uint8ArrayToBuffer(chunk) { return Buffer.from(chunk); @@ -4668,12 +4857,12 @@ function _isUint8Array(obj) { /**/ /**/ -var util = Object.create(__webpack_require__(/*! core-util-is */ 52)); -util.inherits = __webpack_require__(/*! inherits */ 44); +var util = Object.create(__webpack_require__(/*! core-util-is */ 60)); +util.inherits = __webpack_require__(/*! inherits */ 52); /**/ /**/ -var debugUtil = __webpack_require__(/*! util */ 53); +var debugUtil = __webpack_require__(/*! util */ 61); var debug = void 0; if (debugUtil && debugUtil.debuglog) { debug = debugUtil.debuglog('stream'); @@ -4682,8 +4871,8 @@ if (debugUtil && debugUtil.debuglog) { } /**/ -var BufferList = __webpack_require__(/*! ./internal/streams/BufferList */ 54); -var destroyImpl = __webpack_require__(/*! ./internal/streams/destroy */ 56); +var BufferList = __webpack_require__(/*! ./internal/streams/BufferList */ 62); +var destroyImpl = __webpack_require__(/*! ./internal/streams/destroy */ 64); var StringDecoder; util.inherits(Readable, Stream); @@ -4703,7 +4892,7 @@ function prependListener(emitter, event, fn) { } function ReadableState(options, stream) { - Duplex = Duplex || __webpack_require__(/*! ./_stream_duplex */ 57); + Duplex = Duplex || __webpack_require__(/*! ./_stream_duplex */ 65); options = options || {}; @@ -4773,14 +4962,14 @@ function ReadableState(options, stream) { this.decoder = null; this.encoding = null; if (options.encoding) { - if (!StringDecoder) StringDecoder = __webpack_require__(/*! string_decoder/ */ 60).StringDecoder; + if (!StringDecoder) StringDecoder = __webpack_require__(/*! string_decoder/ */ 68).StringDecoder; this.decoder = new StringDecoder(options.encoding); this.encoding = options.encoding; } } function Readable(options) { - Duplex = Duplex || __webpack_require__(/*! ./_stream_duplex */ 57); + Duplex = Duplex || __webpack_require__(/*! ./_stream_duplex */ 65); if (!(this instanceof Readable)) return new Readable(options); @@ -4929,7 +5118,7 @@ Readable.prototype.isPaused = function () { // backwards compatibility. Readable.prototype.setEncoding = function (enc) { - if (!StringDecoder) StringDecoder = __webpack_require__(/*! string_decoder/ */ 60).StringDecoder; + if (!StringDecoder) StringDecoder = __webpack_require__(/*! string_decoder/ */ 68).StringDecoder; this._readableState.decoder = new StringDecoder(enc); this._readableState.encoding = enc; return this; @@ -5621,10 +5810,10 @@ function indexOf(xs, x) { } return -1; } -/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../webpack/buildin/global.js */ 30), __webpack_require__(/*! ./../../node-libs-browser/mock/process.js */ 36))) +/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../webpack/buildin/global.js */ 38), __webpack_require__(/*! ./../../node-libs-browser/mock/process.js */ 44))) /***/ }), -/* 49 */ +/* 57 */ /*!****************************************************!*\ !*** ./node_modules/process-nextick-args/index.js ***! \****************************************************/ @@ -5678,10 +5867,10 @@ function nextTick(fn, arg1, arg2, arg3) { } -/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../node-libs-browser/mock/process.js */ 36))) +/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../node-libs-browser/mock/process.js */ 44))) /***/ }), -/* 50 */ +/* 58 */ /*!***************************************!*\ !*** ./node_modules/events/events.js ***! \***************************************/ @@ -6189,18 +6378,18 @@ function eventTargetAgnosticAddListener(emitter, name, listener, flags) { /***/ }), -/* 51 */ +/* 59 */ /*!*****************************************************************************!*\ !*** ./node_modules/readable-stream/lib/internal/streams/stream-browser.js ***! \*****************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(/*! events */ 50).EventEmitter; +module.exports = __webpack_require__(/*! events */ 58).EventEmitter; /***/ }), -/* 52 */ +/* 60 */ /*!***********************************************!*\ !*** ./node_modules/core-util-is/lib/util.js ***! \***********************************************/ @@ -6309,7 +6498,7 @@ function isPrimitive(arg) { } exports.isPrimitive = isPrimitive; -exports.isBuffer = __webpack_require__(/*! buffer */ 39).Buffer.isBuffer; +exports.isBuffer = __webpack_require__(/*! buffer */ 47).Buffer.isBuffer; function objectToString(o) { return Object.prototype.toString.call(o); @@ -6317,7 +6506,7 @@ function objectToString(o) { /***/ }), -/* 53 */ +/* 61 */ /*!**********************!*\ !*** util (ignored) ***! \**********************/ @@ -6327,7 +6516,7 @@ function objectToString(o) { /* (ignored) */ /***/ }), -/* 54 */ +/* 62 */ /*!*************************************************************************!*\ !*** ./node_modules/readable-stream/lib/internal/streams/BufferList.js ***! \*************************************************************************/ @@ -6339,8 +6528,8 @@ function objectToString(o) { function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } -var Buffer = __webpack_require__(/*! safe-buffer */ 38).Buffer; -var util = __webpack_require__(/*! util */ 55); +var Buffer = __webpack_require__(/*! safe-buffer */ 46).Buffer; +var util = __webpack_require__(/*! util */ 63); function copyBuffer(src, target, offset) { src.copy(target, offset); @@ -6416,7 +6605,7 @@ if (util && util.inspect && util.inspect.custom) { } /***/ }), -/* 55 */ +/* 63 */ /*!**********************!*\ !*** util (ignored) ***! \**********************/ @@ -6426,7 +6615,7 @@ if (util && util.inspect && util.inspect.custom) { /* (ignored) */ /***/ }), -/* 56 */ +/* 64 */ /*!**********************************************************************!*\ !*** ./node_modules/readable-stream/lib/internal/streams/destroy.js ***! \**********************************************************************/ @@ -6438,7 +6627,7 @@ if (util && util.inspect && util.inspect.custom) { /**/ -var pna = __webpack_require__(/*! process-nextick-args */ 49); +var pna = __webpack_require__(/*! process-nextick-args */ 57); /**/ // undocumented cb() API, needed for core, not for public API @@ -6510,7 +6699,7 @@ module.exports = { }; /***/ }), -/* 57 */ +/* 65 */ /*!************************************************************!*\ !*** ./node_modules/readable-stream/lib/_stream_duplex.js ***! \************************************************************/ @@ -6548,7 +6737,7 @@ module.exports = { /**/ -var pna = __webpack_require__(/*! process-nextick-args */ 49); +var pna = __webpack_require__(/*! process-nextick-args */ 57); /**/ /**/ @@ -6563,12 +6752,12 @@ var objectKeys = Object.keys || function (obj) { module.exports = Duplex; /**/ -var util = Object.create(__webpack_require__(/*! core-util-is */ 52)); -util.inherits = __webpack_require__(/*! inherits */ 44); +var util = Object.create(__webpack_require__(/*! core-util-is */ 60)); +util.inherits = __webpack_require__(/*! inherits */ 52); /**/ -var Readable = __webpack_require__(/*! ./_stream_readable */ 48); -var Writable = __webpack_require__(/*! ./_stream_writable */ 58); +var Readable = __webpack_require__(/*! ./_stream_readable */ 56); +var Writable = __webpack_require__(/*! ./_stream_writable */ 66); util.inherits(Duplex, Readable); @@ -6651,7 +6840,7 @@ Duplex.prototype._destroy = function (err, cb) { }; /***/ }), -/* 58 */ +/* 66 */ /*!**************************************************************!*\ !*** ./node_modules/readable-stream/lib/_stream_writable.js ***! \**************************************************************/ @@ -6688,7 +6877,7 @@ Duplex.prototype._destroy = function (err, cb) { /**/ -var pna = __webpack_require__(/*! process-nextick-args */ 49); +var pna = __webpack_require__(/*! process-nextick-args */ 57); /**/ module.exports = Writable; @@ -6725,23 +6914,23 @@ var Duplex; Writable.WritableState = WritableState; /**/ -var util = Object.create(__webpack_require__(/*! core-util-is */ 52)); -util.inherits = __webpack_require__(/*! inherits */ 44); +var util = Object.create(__webpack_require__(/*! core-util-is */ 60)); +util.inherits = __webpack_require__(/*! inherits */ 52); /**/ /**/ var internalUtil = { - deprecate: __webpack_require__(/*! util-deprecate */ 59) + deprecate: __webpack_require__(/*! util-deprecate */ 67) }; /**/ /**/ -var Stream = __webpack_require__(/*! ./internal/streams/stream */ 51); +var Stream = __webpack_require__(/*! ./internal/streams/stream */ 59); /**/ /**/ -var Buffer = __webpack_require__(/*! safe-buffer */ 38).Buffer; +var Buffer = __webpack_require__(/*! safe-buffer */ 46).Buffer; var OurUint8Array = global.Uint8Array || function () {}; function _uint8ArrayToBuffer(chunk) { return Buffer.from(chunk); @@ -6752,14 +6941,14 @@ function _isUint8Array(obj) { /**/ -var destroyImpl = __webpack_require__(/*! ./internal/streams/destroy */ 56); +var destroyImpl = __webpack_require__(/*! ./internal/streams/destroy */ 64); util.inherits(Writable, Stream); function nop() {} function WritableState(options, stream) { - Duplex = Duplex || __webpack_require__(/*! ./_stream_duplex */ 57); + Duplex = Duplex || __webpack_require__(/*! ./_stream_duplex */ 65); options = options || {}; @@ -6909,7 +7098,7 @@ if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.protot } function Writable(options) { - Duplex = Duplex || __webpack_require__(/*! ./_stream_duplex */ 57); + Duplex = Duplex || __webpack_require__(/*! ./_stream_duplex */ 65); // Writable ctor is applied to Duplexes, too. // `realHasInstance` is necessary because using plain `instanceof` @@ -7346,10 +7535,10 @@ Writable.prototype._destroy = function (err, cb) { this.end(); cb(err); }; -/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node-libs-browser/mock/process.js */ 36), __webpack_require__(/*! ./../../webpack/buildin/global.js */ 30))) +/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node-libs-browser/mock/process.js */ 44), __webpack_require__(/*! ./../../webpack/buildin/global.js */ 38))) /***/ }), -/* 59 */ +/* 67 */ /*!************************************************!*\ !*** ./node_modules/util-deprecate/browser.js ***! \************************************************/ @@ -7424,10 +7613,10 @@ function config (name) { return String(val).toLowerCase() === 'true'; } -/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../webpack/buildin/global.js */ 30))) +/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../webpack/buildin/global.js */ 38))) /***/ }), -/* 60 */ +/* 68 */ /*!***********************************************************!*\ !*** ./node_modules/string_decoder/lib/string_decoder.js ***! \***********************************************************/ @@ -7460,7 +7649,7 @@ function config (name) { /**/ -var Buffer = __webpack_require__(/*! safe-buffer */ 38).Buffer; +var Buffer = __webpack_require__(/*! safe-buffer */ 46).Buffer; /**/ var isEncoding = Buffer.isEncoding || function (encoding) { @@ -7733,7 +7922,7 @@ function simpleEnd(buf) { } /***/ }), -/* 61 */ +/* 69 */ /*!***************************************************************!*\ !*** ./node_modules/readable-stream/lib/_stream_transform.js ***! \***************************************************************/ @@ -7808,11 +7997,11 @@ function simpleEnd(buf) { module.exports = Transform; -var Duplex = __webpack_require__(/*! ./_stream_duplex */ 57); +var Duplex = __webpack_require__(/*! ./_stream_duplex */ 65); /**/ -var util = Object.create(__webpack_require__(/*! core-util-is */ 52)); -util.inherits = __webpack_require__(/*! inherits */ 44); +var util = Object.create(__webpack_require__(/*! core-util-is */ 60)); +util.inherits = __webpack_require__(/*! inherits */ 52); /**/ util.inherits(Transform, Duplex); @@ -7957,7 +8146,7 @@ function done(stream, er, data) { } /***/ }), -/* 62 */ +/* 70 */ /*!*****************************************************************!*\ !*** ./node_modules/readable-stream/lib/_stream_passthrough.js ***! \*****************************************************************/ @@ -7994,11 +8183,11 @@ function done(stream, er, data) { module.exports = PassThrough; -var Transform = __webpack_require__(/*! ./_stream_transform */ 61); +var Transform = __webpack_require__(/*! ./_stream_transform */ 69); /**/ -var util = Object.create(__webpack_require__(/*! core-util-is */ 52)); -util.inherits = __webpack_require__(/*! inherits */ 44); +var util = Object.create(__webpack_require__(/*! core-util-is */ 60)); +util.inherits = __webpack_require__(/*! inherits */ 52); /**/ util.inherits(PassThrough, Transform); @@ -8014,7 +8203,7 @@ PassThrough.prototype._transform = function (chunk, encoding, cb) { }; /***/ }), -/* 63 */ +/* 71 */ /*!*****************************************!*\ !*** ./node_modules/ripemd160/index.js ***! \*****************************************/ @@ -8023,9 +8212,9 @@ PassThrough.prototype._transform = function (chunk, encoding, cb) { "use strict"; -var Buffer = __webpack_require__(/*! buffer */ 39).Buffer -var inherits = __webpack_require__(/*! inherits */ 44) -var HashBase = __webpack_require__(/*! hash-base */ 46) +var Buffer = __webpack_require__(/*! buffer */ 47).Buffer +var inherits = __webpack_require__(/*! inherits */ 52) +var HashBase = __webpack_require__(/*! hash-base */ 54) var ARRAY16 = new Array(16) @@ -8188,7 +8377,7 @@ module.exports = RIPEMD160 /***/ }), -/* 64 */ +/* 72 */ /*!**************************************!*\ !*** ./node_modules/sha.js/index.js ***! \**************************************/ @@ -8204,16 +8393,16 @@ var exports = module.exports = function SHA (algorithm) { return new Algorithm() } -exports.sha = __webpack_require__(/*! ./sha */ 65) -exports.sha1 = __webpack_require__(/*! ./sha1 */ 67) -exports.sha224 = __webpack_require__(/*! ./sha224 */ 68) -exports.sha256 = __webpack_require__(/*! ./sha256 */ 69) -exports.sha384 = __webpack_require__(/*! ./sha384 */ 70) -exports.sha512 = __webpack_require__(/*! ./sha512 */ 71) +exports.sha = __webpack_require__(/*! ./sha */ 73) +exports.sha1 = __webpack_require__(/*! ./sha1 */ 75) +exports.sha224 = __webpack_require__(/*! ./sha224 */ 76) +exports.sha256 = __webpack_require__(/*! ./sha256 */ 77) +exports.sha384 = __webpack_require__(/*! ./sha384 */ 78) +exports.sha512 = __webpack_require__(/*! ./sha512 */ 79) /***/ }), -/* 65 */ +/* 73 */ /*!************************************!*\ !*** ./node_modules/sha.js/sha.js ***! \************************************/ @@ -8228,9 +8417,9 @@ exports.sha512 = __webpack_require__(/*! ./sha512 */ 71) * operation was added. */ -var inherits = __webpack_require__(/*! inherits */ 44) -var Hash = __webpack_require__(/*! ./hash */ 66) -var Buffer = __webpack_require__(/*! safe-buffer */ 38).Buffer +var inherits = __webpack_require__(/*! inherits */ 52) +var Hash = __webpack_require__(/*! ./hash */ 74) +var Buffer = __webpack_require__(/*! safe-buffer */ 46).Buffer var K = [ 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0 @@ -8317,14 +8506,14 @@ module.exports = Sha /***/ }), -/* 66 */ +/* 74 */ /*!*************************************!*\ !*** ./node_modules/sha.js/hash.js ***! \*************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { -var Buffer = __webpack_require__(/*! safe-buffer */ 38).Buffer +var Buffer = __webpack_require__(/*! safe-buffer */ 46).Buffer // prototype class for hash functions function Hash (blockSize, finalSize) { @@ -8408,7 +8597,7 @@ module.exports = Hash /***/ }), -/* 67 */ +/* 75 */ /*!*************************************!*\ !*** ./node_modules/sha.js/sha1.js ***! \*************************************/ @@ -8424,9 +8613,9 @@ module.exports = Hash * See http://pajhome.org.uk/crypt/md5 for details. */ -var inherits = __webpack_require__(/*! inherits */ 44) -var Hash = __webpack_require__(/*! ./hash */ 66) -var Buffer = __webpack_require__(/*! safe-buffer */ 38).Buffer +var inherits = __webpack_require__(/*! inherits */ 52) +var Hash = __webpack_require__(/*! ./hash */ 74) +var Buffer = __webpack_require__(/*! safe-buffer */ 46).Buffer var K = [ 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0 @@ -8517,7 +8706,7 @@ module.exports = Sha1 /***/ }), -/* 68 */ +/* 76 */ /*!***************************************!*\ !*** ./node_modules/sha.js/sha224.js ***! \***************************************/ @@ -8532,10 +8721,10 @@ module.exports = Sha1 * */ -var inherits = __webpack_require__(/*! inherits */ 44) -var Sha256 = __webpack_require__(/*! ./sha256 */ 69) -var Hash = __webpack_require__(/*! ./hash */ 66) -var Buffer = __webpack_require__(/*! safe-buffer */ 38).Buffer +var inherits = __webpack_require__(/*! inherits */ 52) +var Sha256 = __webpack_require__(/*! ./sha256 */ 77) +var Hash = __webpack_require__(/*! ./hash */ 74) +var Buffer = __webpack_require__(/*! safe-buffer */ 46).Buffer var W = new Array(64) @@ -8580,7 +8769,7 @@ module.exports = Sha224 /***/ }), -/* 69 */ +/* 77 */ /*!***************************************!*\ !*** ./node_modules/sha.js/sha256.js ***! \***************************************/ @@ -8595,9 +8784,9 @@ module.exports = Sha224 * */ -var inherits = __webpack_require__(/*! inherits */ 44) -var Hash = __webpack_require__(/*! ./hash */ 66) -var Buffer = __webpack_require__(/*! safe-buffer */ 38).Buffer +var inherits = __webpack_require__(/*! inherits */ 52) +var Hash = __webpack_require__(/*! ./hash */ 74) +var Buffer = __webpack_require__(/*! safe-buffer */ 46).Buffer var K = [ 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5, @@ -8725,17 +8914,17 @@ module.exports = Sha256 /***/ }), -/* 70 */ +/* 78 */ /*!***************************************!*\ !*** ./node_modules/sha.js/sha384.js ***! \***************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { -var inherits = __webpack_require__(/*! inherits */ 44) -var SHA512 = __webpack_require__(/*! ./sha512 */ 71) -var Hash = __webpack_require__(/*! ./hash */ 66) -var Buffer = __webpack_require__(/*! safe-buffer */ 38).Buffer +var inherits = __webpack_require__(/*! inherits */ 52) +var SHA512 = __webpack_require__(/*! ./sha512 */ 79) +var Hash = __webpack_require__(/*! ./hash */ 74) +var Buffer = __webpack_require__(/*! safe-buffer */ 46).Buffer var W = new Array(160) @@ -8792,16 +8981,16 @@ module.exports = Sha384 /***/ }), -/* 71 */ +/* 79 */ /*!***************************************!*\ !*** ./node_modules/sha.js/sha512.js ***! \***************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { -var inherits = __webpack_require__(/*! inherits */ 44) -var Hash = __webpack_require__(/*! ./hash */ 66) -var Buffer = __webpack_require__(/*! safe-buffer */ 38).Buffer +var inherits = __webpack_require__(/*! inherits */ 52) +var Hash = __webpack_require__(/*! ./hash */ 74) +var Buffer = __webpack_require__(/*! safe-buffer */ 46).Buffer var K = [ 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, @@ -9062,17 +9251,17 @@ module.exports = Sha512 /***/ }), -/* 72 */ +/* 80 */ /*!*******************************************!*\ !*** ./node_modules/cipher-base/index.js ***! \*******************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { -var Buffer = __webpack_require__(/*! safe-buffer */ 38).Buffer -var Transform = __webpack_require__(/*! stream */ 73).Transform -var StringDecoder = __webpack_require__(/*! string_decoder */ 60).StringDecoder -var inherits = __webpack_require__(/*! inherits */ 44) +var Buffer = __webpack_require__(/*! safe-buffer */ 46).Buffer +var Transform = __webpack_require__(/*! stream */ 81).Transform +var StringDecoder = __webpack_require__(/*! string_decoder */ 68).StringDecoder +var inherits = __webpack_require__(/*! inherits */ 52) function CipherBase (hashMode) { Transform.call(this) @@ -9171,7 +9360,7 @@ module.exports = CipherBase /***/ }), -/* 73 */ +/* 81 */ /*!*************************************************!*\ !*** ./node_modules/stream-browserify/index.js ***! \*************************************************/ @@ -9201,15 +9390,15 @@ module.exports = CipherBase module.exports = Stream; -var EE = __webpack_require__(/*! events */ 50).EventEmitter; -var inherits = __webpack_require__(/*! inherits */ 44); +var EE = __webpack_require__(/*! events */ 58).EventEmitter; +var inherits = __webpack_require__(/*! inherits */ 52); inherits(Stream, EE); -Stream.Readable = __webpack_require__(/*! readable-stream/readable.js */ 47); -Stream.Writable = __webpack_require__(/*! readable-stream/writable.js */ 74); -Stream.Duplex = __webpack_require__(/*! readable-stream/duplex.js */ 75); -Stream.Transform = __webpack_require__(/*! readable-stream/transform.js */ 76); -Stream.PassThrough = __webpack_require__(/*! readable-stream/passthrough.js */ 77); +Stream.Readable = __webpack_require__(/*! readable-stream/readable.js */ 55); +Stream.Writable = __webpack_require__(/*! readable-stream/writable.js */ 82); +Stream.Duplex = __webpack_require__(/*! readable-stream/duplex.js */ 83); +Stream.Transform = __webpack_require__(/*! readable-stream/transform.js */ 84); +Stream.PassThrough = __webpack_require__(/*! readable-stream/passthrough.js */ 85); // Backwards-compat with node 0.4.x Stream.Stream = Stream; @@ -9308,51 +9497,51 @@ Stream.prototype.pipe = function(dest, options) { /***/ }), -/* 74 */ +/* 82 */ /*!**********************************************************!*\ !*** ./node_modules/readable-stream/writable-browser.js ***! \**********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(/*! ./lib/_stream_writable.js */ 58); +module.exports = __webpack_require__(/*! ./lib/_stream_writable.js */ 66); /***/ }), -/* 75 */ +/* 83 */ /*!********************************************************!*\ !*** ./node_modules/readable-stream/duplex-browser.js ***! \********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(/*! ./lib/_stream_duplex.js */ 57); +module.exports = __webpack_require__(/*! ./lib/_stream_duplex.js */ 65); /***/ }), -/* 76 */ +/* 84 */ /*!***************************************************!*\ !*** ./node_modules/readable-stream/transform.js ***! \***************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(/*! ./readable */ 47).Transform +module.exports = __webpack_require__(/*! ./readable */ 55).Transform /***/ }), -/* 77 */ +/* 85 */ /*!*****************************************************!*\ !*** ./node_modules/readable-stream/passthrough.js ***! \*****************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(/*! ./readable */ 47).PassThrough +module.exports = __webpack_require__(/*! ./readable */ 55).PassThrough /***/ }), -/* 78 */ +/* 86 */ /*!*********************************************!*\ !*** ./node_modules/create-hmac/browser.js ***! \*********************************************/ @@ -9361,14 +9550,14 @@ module.exports = __webpack_require__(/*! ./readable */ 47).PassThrough "use strict"; -var inherits = __webpack_require__(/*! inherits */ 44) -var Legacy = __webpack_require__(/*! ./legacy */ 79) -var Base = __webpack_require__(/*! cipher-base */ 72) -var Buffer = __webpack_require__(/*! safe-buffer */ 38).Buffer -var md5 = __webpack_require__(/*! create-hash/md5 */ 80) -var RIPEMD160 = __webpack_require__(/*! ripemd160 */ 63) +var inherits = __webpack_require__(/*! inherits */ 52) +var Legacy = __webpack_require__(/*! ./legacy */ 87) +var Base = __webpack_require__(/*! cipher-base */ 80) +var Buffer = __webpack_require__(/*! safe-buffer */ 46).Buffer +var md5 = __webpack_require__(/*! create-hash/md5 */ 88) +var RIPEMD160 = __webpack_require__(/*! ripemd160 */ 71) -var sha = __webpack_require__(/*! sha.js */ 64) +var sha = __webpack_require__(/*! sha.js */ 72) var ZEROS = Buffer.alloc(128) @@ -9425,7 +9614,7 @@ module.exports = function createHmac (alg, key) { /***/ }), -/* 79 */ +/* 87 */ /*!********************************************!*\ !*** ./node_modules/create-hmac/legacy.js ***! \********************************************/ @@ -9434,10 +9623,10 @@ module.exports = function createHmac (alg, key) { "use strict"; -var inherits = __webpack_require__(/*! inherits */ 44) -var Buffer = __webpack_require__(/*! safe-buffer */ 38).Buffer +var inherits = __webpack_require__(/*! inherits */ 52) +var Buffer = __webpack_require__(/*! safe-buffer */ 46).Buffer -var Base = __webpack_require__(/*! cipher-base */ 72) +var Base = __webpack_require__(/*! cipher-base */ 80) var ZEROS = Buffer.alloc(128) var blocksize = 64 @@ -9482,14 +9671,14 @@ module.exports = Hmac /***/ }), -/* 80 */ +/* 88 */ /*!*****************************************!*\ !*** ./node_modules/create-hash/md5.js ***! \*****************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { -var MD5 = __webpack_require__(/*! md5.js */ 45) +var MD5 = __webpack_require__(/*! md5.js */ 53) module.exports = function (buffer) { return new MD5().update(buffer).digest() @@ -9497,18 +9686,18 @@ module.exports = function (buffer) { /***/ }), -/* 81 */ +/* 89 */ /*!***********************************************!*\ !*** ./node_modules/browserify-sign/algos.js ***! \***********************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(/*! ./browser/algorithms.json */ 82) +module.exports = __webpack_require__(/*! ./browser/algorithms.json */ 90) /***/ }), -/* 82 */ +/* 90 */ /*!**************************************************************!*\ !*** ./node_modules/browserify-sign/browser/algorithms.json ***! \**************************************************************/ @@ -9518,31 +9707,31 @@ module.exports = __webpack_require__(/*! ./browser/algorithms.json */ 82) module.exports = JSON.parse("{\"sha224WithRSAEncryption\":{\"sign\":\"rsa\",\"hash\":\"sha224\",\"id\":\"302d300d06096086480165030402040500041c\"},\"RSA-SHA224\":{\"sign\":\"ecdsa/rsa\",\"hash\":\"sha224\",\"id\":\"302d300d06096086480165030402040500041c\"},\"sha256WithRSAEncryption\":{\"sign\":\"rsa\",\"hash\":\"sha256\",\"id\":\"3031300d060960864801650304020105000420\"},\"RSA-SHA256\":{\"sign\":\"ecdsa/rsa\",\"hash\":\"sha256\",\"id\":\"3031300d060960864801650304020105000420\"},\"sha384WithRSAEncryption\":{\"sign\":\"rsa\",\"hash\":\"sha384\",\"id\":\"3041300d060960864801650304020205000430\"},\"RSA-SHA384\":{\"sign\":\"ecdsa/rsa\",\"hash\":\"sha384\",\"id\":\"3041300d060960864801650304020205000430\"},\"sha512WithRSAEncryption\":{\"sign\":\"rsa\",\"hash\":\"sha512\",\"id\":\"3051300d060960864801650304020305000440\"},\"RSA-SHA512\":{\"sign\":\"ecdsa/rsa\",\"hash\":\"sha512\",\"id\":\"3051300d060960864801650304020305000440\"},\"RSA-SHA1\":{\"sign\":\"rsa\",\"hash\":\"sha1\",\"id\":\"3021300906052b0e03021a05000414\"},\"ecdsa-with-SHA1\":{\"sign\":\"ecdsa\",\"hash\":\"sha1\",\"id\":\"\"},\"sha256\":{\"sign\":\"ecdsa\",\"hash\":\"sha256\",\"id\":\"\"},\"sha224\":{\"sign\":\"ecdsa\",\"hash\":\"sha224\",\"id\":\"\"},\"sha384\":{\"sign\":\"ecdsa\",\"hash\":\"sha384\",\"id\":\"\"},\"sha512\":{\"sign\":\"ecdsa\",\"hash\":\"sha512\",\"id\":\"\"},\"DSA-SHA\":{\"sign\":\"dsa\",\"hash\":\"sha1\",\"id\":\"\"},\"DSA-SHA1\":{\"sign\":\"dsa\",\"hash\":\"sha1\",\"id\":\"\"},\"DSA\":{\"sign\":\"dsa\",\"hash\":\"sha1\",\"id\":\"\"},\"DSA-WITH-SHA224\":{\"sign\":\"dsa\",\"hash\":\"sha224\",\"id\":\"\"},\"DSA-SHA224\":{\"sign\":\"dsa\",\"hash\":\"sha224\",\"id\":\"\"},\"DSA-WITH-SHA256\":{\"sign\":\"dsa\",\"hash\":\"sha256\",\"id\":\"\"},\"DSA-SHA256\":{\"sign\":\"dsa\",\"hash\":\"sha256\",\"id\":\"\"},\"DSA-WITH-SHA384\":{\"sign\":\"dsa\",\"hash\":\"sha384\",\"id\":\"\"},\"DSA-SHA384\":{\"sign\":\"dsa\",\"hash\":\"sha384\",\"id\":\"\"},\"DSA-WITH-SHA512\":{\"sign\":\"dsa\",\"hash\":\"sha512\",\"id\":\"\"},\"DSA-SHA512\":{\"sign\":\"dsa\",\"hash\":\"sha512\",\"id\":\"\"},\"DSA-RIPEMD160\":{\"sign\":\"dsa\",\"hash\":\"rmd160\",\"id\":\"\"},\"ripemd160WithRSA\":{\"sign\":\"rsa\",\"hash\":\"rmd160\",\"id\":\"3021300906052b2403020105000414\"},\"RSA-RIPEMD160\":{\"sign\":\"rsa\",\"hash\":\"rmd160\",\"id\":\"3021300906052b2403020105000414\"},\"md5WithRSAEncryption\":{\"sign\":\"rsa\",\"hash\":\"md5\",\"id\":\"3020300c06082a864886f70d020505000410\"},\"RSA-MD5\":{\"sign\":\"rsa\",\"hash\":\"md5\",\"id\":\"3020300c06082a864886f70d020505000410\"}}"); /***/ }), -/* 83 */ +/* 91 */ /*!****************************************!*\ !*** ./node_modules/pbkdf2/browser.js ***! \****************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { -exports.pbkdf2 = __webpack_require__(/*! ./lib/async */ 84) -exports.pbkdf2Sync = __webpack_require__(/*! ./lib/sync */ 87) +exports.pbkdf2 = __webpack_require__(/*! ./lib/async */ 92) +exports.pbkdf2Sync = __webpack_require__(/*! ./lib/sync */ 95) /***/ }), -/* 84 */ +/* 92 */ /*!******************************************!*\ !*** ./node_modules/pbkdf2/lib/async.js ***! \******************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { -/* WEBPACK VAR INJECTION */(function(__webpack_provided_global_dot_crypto, global) {var Buffer = __webpack_require__(/*! safe-buffer */ 38).Buffer +/* WEBPACK VAR INJECTION */(function(__webpack_provided_global_dot_crypto, global) {var Buffer = __webpack_require__(/*! safe-buffer */ 46).Buffer -var checkParameters = __webpack_require__(/*! ./precondition */ 85) -var defaultEncoding = __webpack_require__(/*! ./default-encoding */ 86) -var sync = __webpack_require__(/*! ./sync */ 87) -var toBuffer = __webpack_require__(/*! ./to-buffer */ 88) +var checkParameters = __webpack_require__(/*! ./precondition */ 93) +var defaultEncoding = __webpack_require__(/*! ./default-encoding */ 94) +var sync = __webpack_require__(/*! ./sync */ 95) +var toBuffer = __webpack_require__(/*! ./to-buffer */ 96) var ZERO_BUF var subtle = __webpack_provided_global_dot_crypto && __webpack_provided_global_dot_crypto.subtle @@ -9656,10 +9845,10 @@ module.exports = function (password, salt, iterations, keylen, digest, callback) }), callback) } -/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/vue-cli-plugin-uni/lib/crypto.js */ 33)["default"], __webpack_require__(/*! ./../../webpack/buildin/global.js */ 30))) +/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/vue-cli-plugin-uni/lib/crypto.js */ 41)["default"], __webpack_require__(/*! ./../../webpack/buildin/global.js */ 38))) /***/ }), -/* 85 */ +/* 93 */ /*!*************************************************!*\ !*** ./node_modules/pbkdf2/lib/precondition.js ***! \*************************************************/ @@ -9688,7 +9877,7 @@ module.exports = function (iterations, keylen) { /***/ }), -/* 86 */ +/* 94 */ /*!*****************************************************!*\ !*** ./node_modules/pbkdf2/lib/default-encoding.js ***! \*****************************************************/ @@ -9708,24 +9897,24 @@ if (global.process && global.process.browser) { } module.exports = defaultEncoding -/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../webpack/buildin/global.js */ 30), __webpack_require__(/*! ./../../node-libs-browser/mock/process.js */ 36))) +/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../webpack/buildin/global.js */ 38), __webpack_require__(/*! ./../../node-libs-browser/mock/process.js */ 44))) /***/ }), -/* 87 */ +/* 95 */ /*!*************************************************!*\ !*** ./node_modules/pbkdf2/lib/sync-browser.js ***! \*************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { -var md5 = __webpack_require__(/*! create-hash/md5 */ 80) -var RIPEMD160 = __webpack_require__(/*! ripemd160 */ 63) -var sha = __webpack_require__(/*! sha.js */ 64) -var Buffer = __webpack_require__(/*! safe-buffer */ 38).Buffer +var md5 = __webpack_require__(/*! create-hash/md5 */ 88) +var RIPEMD160 = __webpack_require__(/*! ripemd160 */ 71) +var sha = __webpack_require__(/*! sha.js */ 72) +var Buffer = __webpack_require__(/*! safe-buffer */ 46).Buffer -var checkParameters = __webpack_require__(/*! ./precondition */ 85) -var defaultEncoding = __webpack_require__(/*! ./default-encoding */ 86) -var toBuffer = __webpack_require__(/*! ./to-buffer */ 88) +var checkParameters = __webpack_require__(/*! ./precondition */ 93) +var defaultEncoding = __webpack_require__(/*! ./default-encoding */ 94) +var toBuffer = __webpack_require__(/*! ./to-buffer */ 96) var ZEROS = Buffer.alloc(128) var sizes = { @@ -9826,14 +10015,14 @@ module.exports = pbkdf2 /***/ }), -/* 88 */ +/* 96 */ /*!**********************************************!*\ !*** ./node_modules/pbkdf2/lib/to-buffer.js ***! \**********************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { -var Buffer = __webpack_require__(/*! safe-buffer */ 38).Buffer +var Buffer = __webpack_require__(/*! safe-buffer */ 46).Buffer module.exports = function (thing, encoding, name) { if (Buffer.isBuffer(thing)) { @@ -9849,18 +10038,18 @@ module.exports = function (thing, encoding, name) { /***/ }), -/* 89 */ +/* 97 */ /*!***************************************************!*\ !*** ./node_modules/browserify-cipher/browser.js ***! \***************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { -var DES = __webpack_require__(/*! browserify-des */ 90) -var aes = __webpack_require__(/*! browserify-aes/browser */ 98) -var aesModes = __webpack_require__(/*! browserify-aes/modes */ 100) -var desModes = __webpack_require__(/*! browserify-des/modes */ 117) -var ebtk = __webpack_require__(/*! evp_bytestokey */ 115) +var DES = __webpack_require__(/*! browserify-des */ 98) +var aes = __webpack_require__(/*! browserify-aes/browser */ 106) +var aesModes = __webpack_require__(/*! browserify-aes/modes */ 108) +var desModes = __webpack_require__(/*! browserify-des/modes */ 125) +var ebtk = __webpack_require__(/*! evp_bytestokey */ 123) function createCipher (suite, password) { suite = suite.toLowerCase() @@ -9926,17 +10115,17 @@ exports.listCiphers = exports.getCiphers = getCiphers /***/ }), -/* 90 */ +/* 98 */ /*!**********************************************!*\ !*** ./node_modules/browserify-des/index.js ***! \**********************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { -var CipherBase = __webpack_require__(/*! cipher-base */ 72) -var des = __webpack_require__(/*! des.js */ 91) -var inherits = __webpack_require__(/*! inherits */ 44) -var Buffer = __webpack_require__(/*! safe-buffer */ 38).Buffer +var CipherBase = __webpack_require__(/*! cipher-base */ 80) +var des = __webpack_require__(/*! des.js */ 99) +var inherits = __webpack_require__(/*! inherits */ 52) +var Buffer = __webpack_require__(/*! safe-buffer */ 46).Buffer var modes = { 'des-ede3-cbc': des.CBC.instantiate(des.EDE), @@ -9986,7 +10175,7 @@ DES.prototype._final = function () { /***/ }), -/* 91 */ +/* 99 */ /*!****************************************!*\ !*** ./node_modules/des.js/lib/des.js ***! \****************************************/ @@ -9996,15 +10185,15 @@ DES.prototype._final = function () { "use strict"; -exports.utils = __webpack_require__(/*! ./des/utils */ 92); -exports.Cipher = __webpack_require__(/*! ./des/cipher */ 93); -exports.DES = __webpack_require__(/*! ./des/des */ 95); -exports.CBC = __webpack_require__(/*! ./des/cbc */ 96); -exports.EDE = __webpack_require__(/*! ./des/ede */ 97); +exports.utils = __webpack_require__(/*! ./des/utils */ 100); +exports.Cipher = __webpack_require__(/*! ./des/cipher */ 101); +exports.DES = __webpack_require__(/*! ./des/des */ 103); +exports.CBC = __webpack_require__(/*! ./des/cbc */ 104); +exports.EDE = __webpack_require__(/*! ./des/ede */ 105); /***/ }), -/* 92 */ +/* 100 */ /*!**********************************************!*\ !*** ./node_modules/des.js/lib/des/utils.js ***! \**********************************************/ @@ -10271,7 +10460,7 @@ exports.padSplit = function padSplit(num, size, group) { /***/ }), -/* 93 */ +/* 101 */ /*!***********************************************!*\ !*** ./node_modules/des.js/lib/des/cipher.js ***! \***********************************************/ @@ -10281,7 +10470,7 @@ exports.padSplit = function padSplit(num, size, group) { "use strict"; -var assert = __webpack_require__(/*! minimalistic-assert */ 94); +var assert = __webpack_require__(/*! minimalistic-assert */ 102); function Cipher(options) { this.options = options; @@ -10423,7 +10612,7 @@ Cipher.prototype._finalDecrypt = function _finalDecrypt() { /***/ }), -/* 94 */ +/* 102 */ /*!***************************************************!*\ !*** ./node_modules/minimalistic-assert/index.js ***! \***************************************************/ @@ -10444,7 +10633,7 @@ assert.equal = function assertEqual(l, r, msg) { /***/ }), -/* 95 */ +/* 103 */ /*!********************************************!*\ !*** ./node_modules/des.js/lib/des/des.js ***! \********************************************/ @@ -10454,11 +10643,11 @@ assert.equal = function assertEqual(l, r, msg) { "use strict"; -var assert = __webpack_require__(/*! minimalistic-assert */ 94); -var inherits = __webpack_require__(/*! inherits */ 44); +var assert = __webpack_require__(/*! minimalistic-assert */ 102); +var inherits = __webpack_require__(/*! inherits */ 52); -var utils = __webpack_require__(/*! ./utils */ 92); -var Cipher = __webpack_require__(/*! ./cipher */ 93); +var utils = __webpack_require__(/*! ./utils */ 100); +var Cipher = __webpack_require__(/*! ./cipher */ 101); function DESState() { this.tmp = new Array(2); @@ -10597,7 +10786,7 @@ DES.prototype._decrypt = function _decrypt(state, lStart, rStart, out, off) { /***/ }), -/* 96 */ +/* 104 */ /*!********************************************!*\ !*** ./node_modules/des.js/lib/des/cbc.js ***! \********************************************/ @@ -10607,8 +10796,8 @@ DES.prototype._decrypt = function _decrypt(state, lStart, rStart, out, off) { "use strict"; -var assert = __webpack_require__(/*! minimalistic-assert */ 94); -var inherits = __webpack_require__(/*! inherits */ 44); +var assert = __webpack_require__(/*! minimalistic-assert */ 102); +var inherits = __webpack_require__(/*! inherits */ 52); var proto = {}; @@ -10673,7 +10862,7 @@ proto._update = function _update(inp, inOff, out, outOff) { /***/ }), -/* 97 */ +/* 105 */ /*!********************************************!*\ !*** ./node_modules/des.js/lib/des/ede.js ***! \********************************************/ @@ -10683,11 +10872,11 @@ proto._update = function _update(inp, inOff, out, outOff) { "use strict"; -var assert = __webpack_require__(/*! minimalistic-assert */ 94); -var inherits = __webpack_require__(/*! inherits */ 44); +var assert = __webpack_require__(/*! minimalistic-assert */ 102); +var inherits = __webpack_require__(/*! inherits */ 52); -var Cipher = __webpack_require__(/*! ./cipher */ 93); -var DES = __webpack_require__(/*! ./des */ 95); +var Cipher = __webpack_require__(/*! ./cipher */ 101); +var DES = __webpack_require__(/*! ./des */ 103); function EDEState(type, key) { assert.equal(key.length, 24, 'Invalid key length'); @@ -10738,16 +10927,16 @@ EDE.prototype._unpad = DES.prototype._unpad; /***/ }), -/* 98 */ +/* 106 */ /*!************************************************!*\ !*** ./node_modules/browserify-aes/browser.js ***! \************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { -var ciphers = __webpack_require__(/*! ./encrypter */ 99) -var deciphers = __webpack_require__(/*! ./decrypter */ 116) -var modes = __webpack_require__(/*! ./modes/list.json */ 110) +var ciphers = __webpack_require__(/*! ./encrypter */ 107) +var deciphers = __webpack_require__(/*! ./decrypter */ 124) +var modes = __webpack_require__(/*! ./modes/list.json */ 118) function getCiphers () { return Object.keys(modes) @@ -10761,21 +10950,21 @@ exports.listCiphers = exports.getCiphers = getCiphers /***/ }), -/* 99 */ +/* 107 */ /*!**************************************************!*\ !*** ./node_modules/browserify-aes/encrypter.js ***! \**************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { -var MODES = __webpack_require__(/*! ./modes */ 100) -var AuthCipher = __webpack_require__(/*! ./authCipher */ 111) -var Buffer = __webpack_require__(/*! safe-buffer */ 38).Buffer -var StreamCipher = __webpack_require__(/*! ./streamCipher */ 114) -var Transform = __webpack_require__(/*! cipher-base */ 72) -var aes = __webpack_require__(/*! ./aes */ 112) -var ebtk = __webpack_require__(/*! evp_bytestokey */ 115) -var inherits = __webpack_require__(/*! inherits */ 44) +var MODES = __webpack_require__(/*! ./modes */ 108) +var AuthCipher = __webpack_require__(/*! ./authCipher */ 119) +var Buffer = __webpack_require__(/*! safe-buffer */ 46).Buffer +var StreamCipher = __webpack_require__(/*! ./streamCipher */ 122) +var Transform = __webpack_require__(/*! cipher-base */ 80) +var aes = __webpack_require__(/*! ./aes */ 120) +var ebtk = __webpack_require__(/*! evp_bytestokey */ 123) +var inherits = __webpack_require__(/*! inherits */ 52) function Cipher (mode, key, iv) { Transform.call(this) @@ -10885,7 +11074,7 @@ exports.createCipher = createCipher /***/ }), -/* 100 */ +/* 108 */ /*!****************************************************!*\ !*** ./node_modules/browserify-aes/modes/index.js ***! \****************************************************/ @@ -10893,17 +11082,17 @@ exports.createCipher = createCipher /***/ (function(module, exports, __webpack_require__) { var modeModules = { - ECB: __webpack_require__(/*! ./ecb */ 101), - CBC: __webpack_require__(/*! ./cbc */ 102), - CFB: __webpack_require__(/*! ./cfb */ 104), - CFB8: __webpack_require__(/*! ./cfb8 */ 105), - CFB1: __webpack_require__(/*! ./cfb1 */ 106), - OFB: __webpack_require__(/*! ./ofb */ 107), - CTR: __webpack_require__(/*! ./ctr */ 108), - GCM: __webpack_require__(/*! ./ctr */ 108) + ECB: __webpack_require__(/*! ./ecb */ 109), + CBC: __webpack_require__(/*! ./cbc */ 110), + CFB: __webpack_require__(/*! ./cfb */ 112), + CFB8: __webpack_require__(/*! ./cfb8 */ 113), + CFB1: __webpack_require__(/*! ./cfb1 */ 114), + OFB: __webpack_require__(/*! ./ofb */ 115), + CTR: __webpack_require__(/*! ./ctr */ 116), + GCM: __webpack_require__(/*! ./ctr */ 116) } -var modes = __webpack_require__(/*! ./list.json */ 110) +var modes = __webpack_require__(/*! ./list.json */ 118) for (var key in modes) { modes[key].module = modeModules[modes[key].mode] @@ -10913,7 +11102,7 @@ module.exports = modes /***/ }), -/* 101 */ +/* 109 */ /*!**************************************************!*\ !*** ./node_modules/browserify-aes/modes/ecb.js ***! \**************************************************/ @@ -10930,14 +11119,14 @@ exports.decrypt = function (self, block) { /***/ }), -/* 102 */ +/* 110 */ /*!**************************************************!*\ !*** ./node_modules/browserify-aes/modes/cbc.js ***! \**************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { -var xor = __webpack_require__(/*! buffer-xor */ 103) +var xor = __webpack_require__(/*! buffer-xor */ 111) exports.encrypt = function (self, block) { var data = xor(block, self._prev) @@ -10957,7 +11146,7 @@ exports.decrypt = function (self, block) { /***/ }), -/* 103 */ +/* 111 */ /*!******************************************!*\ !*** ./node_modules/buffer-xor/index.js ***! \******************************************/ @@ -10975,18 +11164,18 @@ exports.decrypt = function (self, block) { return buffer } -/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../buffer/index.js */ 39).Buffer)) +/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../buffer/index.js */ 47).Buffer)) /***/ }), -/* 104 */ +/* 112 */ /*!**************************************************!*\ !*** ./node_modules/browserify-aes/modes/cfb.js ***! \**************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { -var Buffer = __webpack_require__(/*! safe-buffer */ 38).Buffer -var xor = __webpack_require__(/*! buffer-xor */ 103) +var Buffer = __webpack_require__(/*! safe-buffer */ 46).Buffer +var xor = __webpack_require__(/*! buffer-xor */ 111) function encryptStart (self, data, decrypt) { var len = data.length @@ -11021,14 +11210,14 @@ exports.encrypt = function (self, data, decrypt) { /***/ }), -/* 105 */ +/* 113 */ /*!***************************************************!*\ !*** ./node_modules/browserify-aes/modes/cfb8.js ***! \***************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { -var Buffer = __webpack_require__(/*! safe-buffer */ 38).Buffer +var Buffer = __webpack_require__(/*! safe-buffer */ 46).Buffer function encryptByte (self, byteParam, decrypt) { var pad = self._cipher.encryptBlock(self._prev) @@ -11056,14 +11245,14 @@ exports.encrypt = function (self, chunk, decrypt) { /***/ }), -/* 106 */ +/* 114 */ /*!***************************************************!*\ !*** ./node_modules/browserify-aes/modes/cfb1.js ***! \***************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { -var Buffer = __webpack_require__(/*! safe-buffer */ 38).Buffer +var Buffer = __webpack_require__(/*! safe-buffer */ 46).Buffer function encryptByte (self, byteParam, decrypt) { var pad @@ -11108,14 +11297,14 @@ exports.encrypt = function (self, chunk, decrypt) { /***/ }), -/* 107 */ +/* 115 */ /*!**************************************************!*\ !*** ./node_modules/browserify-aes/modes/ofb.js ***! \**************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { -/* WEBPACK VAR INJECTION */(function(Buffer) {var xor = __webpack_require__(/*! buffer-xor */ 103) +/* WEBPACK VAR INJECTION */(function(Buffer) {var xor = __webpack_require__(/*! buffer-xor */ 111) function getBlock (self) { self._prev = self._cipher.encryptBlock(self._prev) @@ -11132,19 +11321,19 @@ exports.encrypt = function (self, chunk) { return xor(chunk, pad) } -/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../buffer/index.js */ 39).Buffer)) +/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../buffer/index.js */ 47).Buffer)) /***/ }), -/* 108 */ +/* 116 */ /*!**************************************************!*\ !*** ./node_modules/browserify-aes/modes/ctr.js ***! \**************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { -var xor = __webpack_require__(/*! buffer-xor */ 103) -var Buffer = __webpack_require__(/*! safe-buffer */ 38).Buffer -var incr32 = __webpack_require__(/*! ../incr32 */ 109) +var xor = __webpack_require__(/*! buffer-xor */ 111) +var Buffer = __webpack_require__(/*! safe-buffer */ 46).Buffer +var incr32 = __webpack_require__(/*! ../incr32 */ 117) function getBlock (self) { var out = self._cipher.encryptBlockRaw(self._prev) @@ -11175,7 +11364,7 @@ exports.encrypt = function (self, chunk) { /***/ }), -/* 109 */ +/* 117 */ /*!***********************************************!*\ !*** ./node_modules/browserify-aes/incr32.js ***! \***********************************************/ @@ -11200,7 +11389,7 @@ module.exports = incr32 /***/ }), -/* 110 */ +/* 118 */ /*!*****************************************************!*\ !*** ./node_modules/browserify-aes/modes/list.json ***! \*****************************************************/ @@ -11210,20 +11399,20 @@ module.exports = incr32 module.exports = JSON.parse("{\"aes-128-ecb\":{\"cipher\":\"AES\",\"key\":128,\"iv\":0,\"mode\":\"ECB\",\"type\":\"block\"},\"aes-192-ecb\":{\"cipher\":\"AES\",\"key\":192,\"iv\":0,\"mode\":\"ECB\",\"type\":\"block\"},\"aes-256-ecb\":{\"cipher\":\"AES\",\"key\":256,\"iv\":0,\"mode\":\"ECB\",\"type\":\"block\"},\"aes-128-cbc\":{\"cipher\":\"AES\",\"key\":128,\"iv\":16,\"mode\":\"CBC\",\"type\":\"block\"},\"aes-192-cbc\":{\"cipher\":\"AES\",\"key\":192,\"iv\":16,\"mode\":\"CBC\",\"type\":\"block\"},\"aes-256-cbc\":{\"cipher\":\"AES\",\"key\":256,\"iv\":16,\"mode\":\"CBC\",\"type\":\"block\"},\"aes128\":{\"cipher\":\"AES\",\"key\":128,\"iv\":16,\"mode\":\"CBC\",\"type\":\"block\"},\"aes192\":{\"cipher\":\"AES\",\"key\":192,\"iv\":16,\"mode\":\"CBC\",\"type\":\"block\"},\"aes256\":{\"cipher\":\"AES\",\"key\":256,\"iv\":16,\"mode\":\"CBC\",\"type\":\"block\"},\"aes-128-cfb\":{\"cipher\":\"AES\",\"key\":128,\"iv\":16,\"mode\":\"CFB\",\"type\":\"stream\"},\"aes-192-cfb\":{\"cipher\":\"AES\",\"key\":192,\"iv\":16,\"mode\":\"CFB\",\"type\":\"stream\"},\"aes-256-cfb\":{\"cipher\":\"AES\",\"key\":256,\"iv\":16,\"mode\":\"CFB\",\"type\":\"stream\"},\"aes-128-cfb8\":{\"cipher\":\"AES\",\"key\":128,\"iv\":16,\"mode\":\"CFB8\",\"type\":\"stream\"},\"aes-192-cfb8\":{\"cipher\":\"AES\",\"key\":192,\"iv\":16,\"mode\":\"CFB8\",\"type\":\"stream\"},\"aes-256-cfb8\":{\"cipher\":\"AES\",\"key\":256,\"iv\":16,\"mode\":\"CFB8\",\"type\":\"stream\"},\"aes-128-cfb1\":{\"cipher\":\"AES\",\"key\":128,\"iv\":16,\"mode\":\"CFB1\",\"type\":\"stream\"},\"aes-192-cfb1\":{\"cipher\":\"AES\",\"key\":192,\"iv\":16,\"mode\":\"CFB1\",\"type\":\"stream\"},\"aes-256-cfb1\":{\"cipher\":\"AES\",\"key\":256,\"iv\":16,\"mode\":\"CFB1\",\"type\":\"stream\"},\"aes-128-ofb\":{\"cipher\":\"AES\",\"key\":128,\"iv\":16,\"mode\":\"OFB\",\"type\":\"stream\"},\"aes-192-ofb\":{\"cipher\":\"AES\",\"key\":192,\"iv\":16,\"mode\":\"OFB\",\"type\":\"stream\"},\"aes-256-ofb\":{\"cipher\":\"AES\",\"key\":256,\"iv\":16,\"mode\":\"OFB\",\"type\":\"stream\"},\"aes-128-ctr\":{\"cipher\":\"AES\",\"key\":128,\"iv\":16,\"mode\":\"CTR\",\"type\":\"stream\"},\"aes-192-ctr\":{\"cipher\":\"AES\",\"key\":192,\"iv\":16,\"mode\":\"CTR\",\"type\":\"stream\"},\"aes-256-ctr\":{\"cipher\":\"AES\",\"key\":256,\"iv\":16,\"mode\":\"CTR\",\"type\":\"stream\"},\"aes-128-gcm\":{\"cipher\":\"AES\",\"key\":128,\"iv\":12,\"mode\":\"GCM\",\"type\":\"auth\"},\"aes-192-gcm\":{\"cipher\":\"AES\",\"key\":192,\"iv\":12,\"mode\":\"GCM\",\"type\":\"auth\"},\"aes-256-gcm\":{\"cipher\":\"AES\",\"key\":256,\"iv\":12,\"mode\":\"GCM\",\"type\":\"auth\"}}"); /***/ }), -/* 111 */ +/* 119 */ /*!***************************************************!*\ !*** ./node_modules/browserify-aes/authCipher.js ***! \***************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { -var aes = __webpack_require__(/*! ./aes */ 112) -var Buffer = __webpack_require__(/*! safe-buffer */ 38).Buffer -var Transform = __webpack_require__(/*! cipher-base */ 72) -var inherits = __webpack_require__(/*! inherits */ 44) -var GHASH = __webpack_require__(/*! ./ghash */ 113) -var xor = __webpack_require__(/*! buffer-xor */ 103) -var incr32 = __webpack_require__(/*! ./incr32 */ 109) +var aes = __webpack_require__(/*! ./aes */ 120) +var Buffer = __webpack_require__(/*! safe-buffer */ 46).Buffer +var Transform = __webpack_require__(/*! cipher-base */ 80) +var inherits = __webpack_require__(/*! inherits */ 52) +var GHASH = __webpack_require__(/*! ./ghash */ 121) +var xor = __webpack_require__(/*! buffer-xor */ 111) +var incr32 = __webpack_require__(/*! ./incr32 */ 117) function xorTest (a, b) { var out = 0 @@ -11337,7 +11526,7 @@ module.exports = StreamCipher /***/ }), -/* 112 */ +/* 120 */ /*!********************************************!*\ !*** ./node_modules/browserify-aes/aes.js ***! \********************************************/ @@ -11349,7 +11538,7 @@ module.exports = StreamCipher // which is in turn based on the one from crypto-js // https://code.google.com/p/crypto-js/ -var Buffer = __webpack_require__(/*! safe-buffer */ 38).Buffer +var Buffer = __webpack_require__(/*! safe-buffer */ 46).Buffer function asUInt32Array (buf) { if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf) @@ -11575,14 +11764,14 @@ module.exports.AES = AES /***/ }), -/* 113 */ +/* 121 */ /*!**********************************************!*\ !*** ./node_modules/browserify-aes/ghash.js ***! \**********************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { -var Buffer = __webpack_require__(/*! safe-buffer */ 38).Buffer +var Buffer = __webpack_require__(/*! safe-buffer */ 46).Buffer var ZEROES = Buffer.alloc(16, 0) function toArray (buf) { @@ -11674,17 +11863,17 @@ module.exports = GHASH /***/ }), -/* 114 */ +/* 122 */ /*!*****************************************************!*\ !*** ./node_modules/browserify-aes/streamCipher.js ***! \*****************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { -var aes = __webpack_require__(/*! ./aes */ 112) -var Buffer = __webpack_require__(/*! safe-buffer */ 38).Buffer -var Transform = __webpack_require__(/*! cipher-base */ 72) -var inherits = __webpack_require__(/*! inherits */ 44) +var aes = __webpack_require__(/*! ./aes */ 120) +var Buffer = __webpack_require__(/*! safe-buffer */ 46).Buffer +var Transform = __webpack_require__(/*! cipher-base */ 80) +var inherits = __webpack_require__(/*! inherits */ 52) function StreamCipher (mode, key, iv, decrypt) { Transform.call(this) @@ -11711,15 +11900,15 @@ module.exports = StreamCipher /***/ }), -/* 115 */ +/* 123 */ /*!**********************************************!*\ !*** ./node_modules/evp_bytestokey/index.js ***! \**********************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { -var Buffer = __webpack_require__(/*! safe-buffer */ 38).Buffer -var MD5 = __webpack_require__(/*! md5.js */ 45) +var Buffer = __webpack_require__(/*! safe-buffer */ 46).Buffer +var MD5 = __webpack_require__(/*! md5.js */ 53) /* eslint-disable camelcase */ function EVP_BytesToKey (password, salt, keyBits, ivLen) { @@ -11766,21 +11955,21 @@ module.exports = EVP_BytesToKey /***/ }), -/* 116 */ +/* 124 */ /*!**************************************************!*\ !*** ./node_modules/browserify-aes/decrypter.js ***! \**************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { -var AuthCipher = __webpack_require__(/*! ./authCipher */ 111) -var Buffer = __webpack_require__(/*! safe-buffer */ 38).Buffer -var MODES = __webpack_require__(/*! ./modes */ 100) -var StreamCipher = __webpack_require__(/*! ./streamCipher */ 114) -var Transform = __webpack_require__(/*! cipher-base */ 72) -var aes = __webpack_require__(/*! ./aes */ 112) -var ebtk = __webpack_require__(/*! evp_bytestokey */ 115) -var inherits = __webpack_require__(/*! inherits */ 44) +var AuthCipher = __webpack_require__(/*! ./authCipher */ 119) +var Buffer = __webpack_require__(/*! safe-buffer */ 46).Buffer +var MODES = __webpack_require__(/*! ./modes */ 108) +var StreamCipher = __webpack_require__(/*! ./streamCipher */ 122) +var Transform = __webpack_require__(/*! cipher-base */ 80) +var aes = __webpack_require__(/*! ./aes */ 120) +var ebtk = __webpack_require__(/*! evp_bytestokey */ 123) +var inherits = __webpack_require__(/*! inherits */ 52) function Decipher (mode, key, iv) { Transform.call(this) @@ -11900,7 +12089,7 @@ exports.createDecipheriv = createDecipheriv /***/ }), -/* 117 */ +/* 125 */ /*!**********************************************!*\ !*** ./node_modules/browserify-des/modes.js ***! \**********************************************/ @@ -11934,17 +12123,17 @@ exports['des-ede'] = { /***/ }), -/* 118 */ +/* 126 */ /*!************************************************!*\ !*** ./node_modules/diffie-hellman/browser.js ***! \************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { -/* WEBPACK VAR INJECTION */(function(Buffer) {var generatePrime = __webpack_require__(/*! ./lib/generatePrime */ 119) -var primes = __webpack_require__(/*! ./lib/primes.json */ 125) +/* WEBPACK VAR INJECTION */(function(Buffer) {var generatePrime = __webpack_require__(/*! ./lib/generatePrime */ 127) +var primes = __webpack_require__(/*! ./lib/primes.json */ 133) -var DH = __webpack_require__(/*! ./lib/dh */ 126) +var DH = __webpack_require__(/*! ./lib/dh */ 134) function getDiffieHellman (mod) { var prime = new Buffer(primes[mod].prime, 'hex') @@ -11984,23 +12173,23 @@ function createDiffieHellman (prime, enc, generator, genc) { exports.DiffieHellmanGroup = exports.createDiffieHellmanGroup = exports.getDiffieHellman = getDiffieHellman exports.createDiffieHellman = exports.DiffieHellman = createDiffieHellman -/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../buffer/index.js */ 39).Buffer)) +/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../buffer/index.js */ 47).Buffer)) /***/ }), -/* 119 */ +/* 127 */ /*!**********************************************************!*\ !*** ./node_modules/diffie-hellman/lib/generatePrime.js ***! \**********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { -var randomBytes = __webpack_require__(/*! randombytes */ 35); +var randomBytes = __webpack_require__(/*! randombytes */ 43); module.exports = findPrime; findPrime.simpleSieve = simpleSieve; findPrime.fermatTest = fermatTest; -var BN = __webpack_require__(/*! bn.js */ 120); +var BN = __webpack_require__(/*! bn.js */ 128); var TWENTYFOUR = new BN(24); -var MillerRabin = __webpack_require__(/*! miller-rabin */ 122); +var MillerRabin = __webpack_require__(/*! miller-rabin */ 130); var millerRabin = new MillerRabin(); var ONE = new BN(1); var TWO = new BN(2); @@ -12102,7 +12291,7 @@ function findPrime(bits, gen) { /***/ }), -/* 120 */ +/* 128 */ /*!**************************************!*\ !*** ./node_modules/bn.js/lib/bn.js ***! \**************************************/ @@ -12164,7 +12353,7 @@ function findPrime(bits, gen) { if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') { Buffer = window.Buffer; } else { - Buffer = __webpack_require__(/*! buffer */ 121).Buffer; + Buffer = __webpack_require__(/*! buffer */ 129).Buffer; } } catch (e) { } @@ -15556,10 +15745,10 @@ function findPrime(bits, gen) { }; })( false || module, this); -/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../webpack/buildin/module.js */ 29)(module))) +/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../webpack/buildin/module.js */ 37)(module))) /***/ }), -/* 121 */ +/* 129 */ /*!************************!*\ !*** buffer (ignored) ***! \************************/ @@ -15569,15 +15758,15 @@ function findPrime(bits, gen) { /* (ignored) */ /***/ }), -/* 122 */ +/* 130 */ /*!*********************************************!*\ !*** ./node_modules/miller-rabin/lib/mr.js ***! \*********************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { -var bn = __webpack_require__(/*! bn.js */ 120); -var brorand = __webpack_require__(/*! brorand */ 123); +var bn = __webpack_require__(/*! bn.js */ 128); +var brorand = __webpack_require__(/*! brorand */ 131); function MillerRabin(rand) { this.rand = rand || new brorand.Rand(); @@ -15694,7 +15883,7 @@ MillerRabin.prototype.getDivisor = function getDivisor(n, k) { /***/ }), -/* 123 */ +/* 131 */ /*!***************************************!*\ !*** ./node_modules/brorand/index.js ***! \***************************************/ @@ -15756,7 +15945,7 @@ if (typeof self === 'object') { } else { // Node.js or Web worker with no crypto support try { - var crypto = __webpack_require__(/*! crypto */ 124); + var crypto = __webpack_require__(/*! crypto */ 132); if (typeof crypto.randomBytes !== 'function') throw new Error('Not supported'); @@ -15769,7 +15958,7 @@ if (typeof self === 'object') { /***/ }), -/* 124 */ +/* 132 */ /*!************************!*\ !*** crypto (ignored) ***! \************************/ @@ -15779,7 +15968,7 @@ if (typeof self === 'object') { /* (ignored) */ /***/ }), -/* 125 */ +/* 133 */ /*!*****************************************************!*\ !*** ./node_modules/diffie-hellman/lib/primes.json ***! \*****************************************************/ @@ -15789,23 +15978,23 @@ if (typeof self === 'object') { module.exports = JSON.parse("{\"modp1\":{\"gen\":\"02\",\"prime\":\"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a63a3620ffffffffffffffff\"},\"modp2\":{\"gen\":\"02\",\"prime\":\"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece65381ffffffffffffffff\"},\"modp5\":{\"gen\":\"02\",\"prime\":\"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca237327ffffffffffffffff\"},\"modp14\":{\"gen\":\"02\",\"prime\":\"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aacaa68ffffffffffffffff\"},\"modp15\":{\"gen\":\"02\",\"prime\":\"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a93ad2caffffffffffffffff\"},\"modp16\":{\"gen\":\"02\",\"prime\":\"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c934063199ffffffffffffffff\"},\"modp17\":{\"gen\":\"02\",\"prime\":\"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dcc4024ffffffffffffffff\"},\"modp18\":{\"gen\":\"02\",\"prime\":\"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dbe115974a3926f12fee5e438777cb6a932df8cd8bec4d073b931ba3bc832b68d9dd300741fa7bf8afc47ed2576f6936ba424663aab639c5ae4f5683423b4742bf1c978238f16cbe39d652de3fdb8befc848ad922222e04a4037c0713eb57a81a23f0c73473fc646cea306b4bcbc8862f8385ddfa9d4b7fa2c087e879683303ed5bdd3a062b3cf5b3a278a66d2a13f83f44f82ddf310ee074ab6a364597e899a0255dc164f31cc50846851df9ab48195ded7ea1b1d510bd7ee74d73faf36bc31ecfa268359046f4eb879f924009438b481c6cd7889a002ed5ee382bc9190da6fc026e479558e4475677e9aa9e3050e2765694dfc81f56e880b96e7160c980dd98edd3dfffffffffffffffff\"}}"); /***/ }), -/* 126 */ +/* 134 */ /*!***********************************************!*\ !*** ./node_modules/diffie-hellman/lib/dh.js ***! \***********************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { -/* WEBPACK VAR INJECTION */(function(Buffer) {var BN = __webpack_require__(/*! bn.js */ 120); -var MillerRabin = __webpack_require__(/*! miller-rabin */ 122); +/* WEBPACK VAR INJECTION */(function(Buffer) {var BN = __webpack_require__(/*! bn.js */ 128); +var MillerRabin = __webpack_require__(/*! miller-rabin */ 130); var millerRabin = new MillerRabin(); var TWENTYFOUR = new BN(24); var ELEVEN = new BN(11); var TEN = new BN(10); var THREE = new BN(3); var SEVEN = new BN(7); -var primes = __webpack_require__(/*! ./generatePrime */ 119); -var randomBytes = __webpack_require__(/*! randombytes */ 35); +var primes = __webpack_require__(/*! ./generatePrime */ 127); +var randomBytes = __webpack_require__(/*! randombytes */ 43); module.exports = DH; function setPublicKey(pub, enc) { @@ -15961,24 +16150,24 @@ function formatReturnValue(bn, enc) { } } -/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../buffer/index.js */ 39).Buffer)) +/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../buffer/index.js */ 47).Buffer)) /***/ }), -/* 127 */ +/* 135 */ /*!*******************************************************!*\ !*** ./node_modules/browserify-sign/browser/index.js ***! \*******************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { -var Buffer = __webpack_require__(/*! safe-buffer */ 38).Buffer -var createHash = __webpack_require__(/*! create-hash */ 43) -var stream = __webpack_require__(/*! readable-stream */ 47) -var inherits = __webpack_require__(/*! inherits */ 44) -var sign = __webpack_require__(/*! ./sign */ 128) -var verify = __webpack_require__(/*! ./verify */ 181) +var Buffer = __webpack_require__(/*! safe-buffer */ 46).Buffer +var createHash = __webpack_require__(/*! create-hash */ 51) +var stream = __webpack_require__(/*! readable-stream */ 55) +var inherits = __webpack_require__(/*! inherits */ 52) +var sign = __webpack_require__(/*! ./sign */ 136) +var verify = __webpack_require__(/*! ./verify */ 189) -var algorithms = __webpack_require__(/*! ./algorithms.json */ 82) +var algorithms = __webpack_require__(/*! ./algorithms.json */ 90) Object.keys(algorithms).forEach(function (key) { algorithms[key].id = Buffer.from(algorithms[key].id, 'hex') algorithms[key.toLowerCase()] = algorithms[key] @@ -16066,7 +16255,7 @@ module.exports = { /***/ }), -/* 128 */ +/* 136 */ /*!******************************************************!*\ !*** ./node_modules/browserify-sign/browser/sign.js ***! \******************************************************/ @@ -16074,13 +16263,13 @@ module.exports = { /***/ (function(module, exports, __webpack_require__) { // much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js -var Buffer = __webpack_require__(/*! safe-buffer */ 38).Buffer -var createHmac = __webpack_require__(/*! create-hmac */ 78) -var crt = __webpack_require__(/*! browserify-rsa */ 129) -var EC = __webpack_require__(/*! elliptic */ 130).ec -var BN = __webpack_require__(/*! bn.js */ 120) -var parseKeys = __webpack_require__(/*! parse-asn1 */ 160) -var curves = __webpack_require__(/*! ./curves.json */ 180) +var Buffer = __webpack_require__(/*! safe-buffer */ 46).Buffer +var createHmac = __webpack_require__(/*! create-hmac */ 86) +var crt = __webpack_require__(/*! browserify-rsa */ 137) +var EC = __webpack_require__(/*! elliptic */ 138).ec +var BN = __webpack_require__(/*! bn.js */ 128) +var parseKeys = __webpack_require__(/*! parse-asn1 */ 168) +var curves = __webpack_require__(/*! ./curves.json */ 188) function sign (hash, key, hashType, signType, tag) { var priv = parseKeys(key) @@ -16219,15 +16408,15 @@ module.exports.makeKey = makeKey /***/ }), -/* 129 */ +/* 137 */ /*!**********************************************!*\ !*** ./node_modules/browserify-rsa/index.js ***! \**********************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { -/* WEBPACK VAR INJECTION */(function(Buffer) {var BN = __webpack_require__(/*! bn.js */ 120) -var randomBytes = __webpack_require__(/*! randombytes */ 35) +/* WEBPACK VAR INJECTION */(function(Buffer) {var BN = __webpack_require__(/*! bn.js */ 128) +var randomBytes = __webpack_require__(/*! randombytes */ 43) function blind (priv) { var r = getr(priv) @@ -16262,10 +16451,10 @@ crt.getr = getr module.exports = crt -/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../buffer/index.js */ 39).Buffer)) +/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../buffer/index.js */ 47).Buffer)) /***/ }), -/* 130 */ +/* 138 */ /*!***********************************************!*\ !*** ./node_modules/elliptic/lib/elliptic.js ***! \***********************************************/ @@ -16277,19 +16466,19 @@ module.exports = crt var elliptic = exports; -elliptic.version = __webpack_require__(/*! ../package.json */ 131).version; -elliptic.utils = __webpack_require__(/*! ./elliptic/utils */ 132); -elliptic.rand = __webpack_require__(/*! brorand */ 123); -elliptic.curve = __webpack_require__(/*! ./elliptic/curve */ 134); -elliptic.curves = __webpack_require__(/*! ./elliptic/curves */ 139); +elliptic.version = __webpack_require__(/*! ../package.json */ 139).version; +elliptic.utils = __webpack_require__(/*! ./elliptic/utils */ 140); +elliptic.rand = __webpack_require__(/*! brorand */ 131); +elliptic.curve = __webpack_require__(/*! ./elliptic/curve */ 142); +elliptic.curves = __webpack_require__(/*! ./elliptic/curves */ 147); // Protocols -elliptic.ec = __webpack_require__(/*! ./elliptic/ec */ 153); -elliptic.eddsa = __webpack_require__(/*! ./elliptic/eddsa */ 157); +elliptic.ec = __webpack_require__(/*! ./elliptic/ec */ 161); +elliptic.eddsa = __webpack_require__(/*! ./elliptic/eddsa */ 165); /***/ }), -/* 131 */ +/* 139 */ /*!********************************************!*\ !*** ./node_modules/elliptic/package.json ***! \********************************************/ @@ -16299,7 +16488,7 @@ elliptic.eddsa = __webpack_require__(/*! ./elliptic/eddsa */ 157); module.exports = JSON.parse("{\"name\":\"elliptic\",\"version\":\"6.5.4\",\"description\":\"EC cryptography\",\"main\":\"lib/elliptic.js\",\"files\":[\"lib\"],\"scripts\":{\"lint\":\"eslint lib test\",\"lint:fix\":\"npm run lint -- --fix\",\"unit\":\"istanbul test _mocha --reporter=spec test/index.js\",\"test\":\"npm run lint && npm run unit\",\"version\":\"grunt dist && git add dist/\"},\"repository\":{\"type\":\"git\",\"url\":\"git@github.com:indutny/elliptic\"},\"keywords\":[\"EC\",\"Elliptic\",\"curve\",\"Cryptography\"],\"author\":\"Fedor Indutny \",\"license\":\"MIT\",\"bugs\":{\"url\":\"https://github.com/indutny/elliptic/issues\"},\"homepage\":\"https://github.com/indutny/elliptic\",\"devDependencies\":{\"brfs\":\"^2.0.2\",\"coveralls\":\"^3.1.0\",\"eslint\":\"^7.6.0\",\"grunt\":\"^1.2.1\",\"grunt-browserify\":\"^5.3.0\",\"grunt-cli\":\"^1.3.2\",\"grunt-contrib-connect\":\"^3.0.0\",\"grunt-contrib-copy\":\"^1.0.0\",\"grunt-contrib-uglify\":\"^5.0.0\",\"grunt-mocha-istanbul\":\"^5.0.2\",\"grunt-saucelabs\":\"^9.0.1\",\"istanbul\":\"^0.4.5\",\"mocha\":\"^8.0.1\"},\"dependencies\":{\"bn.js\":\"^4.11.9\",\"brorand\":\"^1.1.0\",\"hash.js\":\"^1.0.0\",\"hmac-drbg\":\"^1.0.1\",\"inherits\":\"^2.0.4\",\"minimalistic-assert\":\"^1.0.1\",\"minimalistic-crypto-utils\":\"^1.0.1\"}}"); /***/ }), -/* 132 */ +/* 140 */ /*!*****************************************************!*\ !*** ./node_modules/elliptic/lib/elliptic/utils.js ***! \*****************************************************/ @@ -16310,9 +16499,9 @@ module.exports = JSON.parse("{\"name\":\"elliptic\",\"version\":\"6.5.4\",\"desc var utils = exports; -var BN = __webpack_require__(/*! bn.js */ 120); -var minAssert = __webpack_require__(/*! minimalistic-assert */ 94); -var minUtils = __webpack_require__(/*! minimalistic-crypto-utils */ 133); +var BN = __webpack_require__(/*! bn.js */ 128); +var minAssert = __webpack_require__(/*! minimalistic-assert */ 102); +var minUtils = __webpack_require__(/*! minimalistic-crypto-utils */ 141); utils.assert = minAssert; utils.toArray = minUtils.toArray; @@ -16429,7 +16618,7 @@ utils.intFromLE = intFromLE; /***/ }), -/* 133 */ +/* 141 */ /*!*************************************************************!*\ !*** ./node_modules/minimalistic-crypto-utils/lib/utils.js ***! \*************************************************************/ @@ -16498,7 +16687,7 @@ utils.encode = function encode(arr, enc) { /***/ }), -/* 134 */ +/* 142 */ /*!***********************************************************!*\ !*** ./node_modules/elliptic/lib/elliptic/curve/index.js ***! \***********************************************************/ @@ -16510,14 +16699,14 @@ utils.encode = function encode(arr, enc) { var curve = exports; -curve.base = __webpack_require__(/*! ./base */ 135); -curve.short = __webpack_require__(/*! ./short */ 136); -curve.mont = __webpack_require__(/*! ./mont */ 137); -curve.edwards = __webpack_require__(/*! ./edwards */ 138); +curve.base = __webpack_require__(/*! ./base */ 143); +curve.short = __webpack_require__(/*! ./short */ 144); +curve.mont = __webpack_require__(/*! ./mont */ 145); +curve.edwards = __webpack_require__(/*! ./edwards */ 146); /***/ }), -/* 135 */ +/* 143 */ /*!**********************************************************!*\ !*** ./node_modules/elliptic/lib/elliptic/curve/base.js ***! \**********************************************************/ @@ -16527,8 +16716,8 @@ curve.edwards = __webpack_require__(/*! ./edwards */ 138); "use strict"; -var BN = __webpack_require__(/*! bn.js */ 120); -var utils = __webpack_require__(/*! ../utils */ 132); +var BN = __webpack_require__(/*! bn.js */ 128); +var utils = __webpack_require__(/*! ../utils */ 140); var getNAF = utils.getNAF; var getJSF = utils.getJSF; var assert = utils.assert; @@ -16909,7 +17098,7 @@ BasePoint.prototype.dblp = function dblp(k) { /***/ }), -/* 136 */ +/* 144 */ /*!***********************************************************!*\ !*** ./node_modules/elliptic/lib/elliptic/curve/short.js ***! \***********************************************************/ @@ -16919,10 +17108,10 @@ BasePoint.prototype.dblp = function dblp(k) { "use strict"; -var utils = __webpack_require__(/*! ../utils */ 132); -var BN = __webpack_require__(/*! bn.js */ 120); -var inherits = __webpack_require__(/*! inherits */ 44); -var Base = __webpack_require__(/*! ./base */ 135); +var utils = __webpack_require__(/*! ../utils */ 140); +var BN = __webpack_require__(/*! bn.js */ 128); +var inherits = __webpack_require__(/*! inherits */ 52); +var Base = __webpack_require__(/*! ./base */ 143); var assert = utils.assert; @@ -17858,7 +18047,7 @@ JPoint.prototype.isInfinity = function isInfinity() { /***/ }), -/* 137 */ +/* 145 */ /*!**********************************************************!*\ !*** ./node_modules/elliptic/lib/elliptic/curve/mont.js ***! \**********************************************************/ @@ -17868,11 +18057,11 @@ JPoint.prototype.isInfinity = function isInfinity() { "use strict"; -var BN = __webpack_require__(/*! bn.js */ 120); -var inherits = __webpack_require__(/*! inherits */ 44); -var Base = __webpack_require__(/*! ./base */ 135); +var BN = __webpack_require__(/*! bn.js */ 128); +var inherits = __webpack_require__(/*! inherits */ 52); +var Base = __webpack_require__(/*! ./base */ 143); -var utils = __webpack_require__(/*! ../utils */ 132); +var utils = __webpack_require__(/*! ../utils */ 140); function MontCurve(conf) { Base.call(this, 'mont', conf); @@ -18047,7 +18236,7 @@ Point.prototype.getX = function getX() { /***/ }), -/* 138 */ +/* 146 */ /*!*************************************************************!*\ !*** ./node_modules/elliptic/lib/elliptic/curve/edwards.js ***! \*************************************************************/ @@ -18057,10 +18246,10 @@ Point.prototype.getX = function getX() { "use strict"; -var utils = __webpack_require__(/*! ../utils */ 132); -var BN = __webpack_require__(/*! bn.js */ 120); -var inherits = __webpack_require__(/*! inherits */ 44); -var Base = __webpack_require__(/*! ./base */ 135); +var utils = __webpack_require__(/*! ../utils */ 140); +var BN = __webpack_require__(/*! bn.js */ 128); +var inherits = __webpack_require__(/*! inherits */ 52); +var Base = __webpack_require__(/*! ./base */ 143); var assert = utils.assert; @@ -18493,7 +18682,7 @@ Point.prototype.mixedAdd = Point.prototype.add; /***/ }), -/* 139 */ +/* 147 */ /*!******************************************************!*\ !*** ./node_modules/elliptic/lib/elliptic/curves.js ***! \******************************************************/ @@ -18505,9 +18694,9 @@ Point.prototype.mixedAdd = Point.prototype.add; var curves = exports; -var hash = __webpack_require__(/*! hash.js */ 140); -var curve = __webpack_require__(/*! ./curve */ 134); -var utils = __webpack_require__(/*! ./utils */ 132); +var hash = __webpack_require__(/*! hash.js */ 148); +var curve = __webpack_require__(/*! ./curve */ 142); +var utils = __webpack_require__(/*! ./utils */ 140); var assert = utils.assert; @@ -18671,7 +18860,7 @@ defineCurve('ed25519', { var pre; try { - pre = __webpack_require__(/*! ./precomputed/secp256k1 */ 152); + pre = __webpack_require__(/*! ./precomputed/secp256k1 */ 160); } catch (e) { pre = undefined; } @@ -18710,7 +18899,7 @@ defineCurve('secp256k1', { /***/ }), -/* 140 */ +/* 148 */ /*!******************************************!*\ !*** ./node_modules/hash.js/lib/hash.js ***! \******************************************/ @@ -18719,11 +18908,11 @@ defineCurve('secp256k1', { var hash = exports; -hash.utils = __webpack_require__(/*! ./hash/utils */ 141); -hash.common = __webpack_require__(/*! ./hash/common */ 142); -hash.sha = __webpack_require__(/*! ./hash/sha */ 143); -hash.ripemd = __webpack_require__(/*! ./hash/ripemd */ 150); -hash.hmac = __webpack_require__(/*! ./hash/hmac */ 151); +hash.utils = __webpack_require__(/*! ./hash/utils */ 149); +hash.common = __webpack_require__(/*! ./hash/common */ 150); +hash.sha = __webpack_require__(/*! ./hash/sha */ 151); +hash.ripemd = __webpack_require__(/*! ./hash/ripemd */ 158); +hash.hmac = __webpack_require__(/*! ./hash/hmac */ 159); // Proxy hash functions to the main object hash.sha1 = hash.sha.sha1; @@ -18735,7 +18924,7 @@ hash.ripemd160 = hash.ripemd.ripemd160; /***/ }), -/* 141 */ +/* 149 */ /*!************************************************!*\ !*** ./node_modules/hash.js/lib/hash/utils.js ***! \************************************************/ @@ -18745,8 +18934,8 @@ hash.ripemd160 = hash.ripemd.ripemd160; "use strict"; -var assert = __webpack_require__(/*! minimalistic-assert */ 94); -var inherits = __webpack_require__(/*! inherits */ 44); +var assert = __webpack_require__(/*! minimalistic-assert */ 102); +var inherits = __webpack_require__(/*! inherits */ 52); exports.inherits = inherits; @@ -19024,7 +19213,7 @@ exports.shr64_lo = shr64_lo; /***/ }), -/* 142 */ +/* 150 */ /*!*************************************************!*\ !*** ./node_modules/hash.js/lib/hash/common.js ***! \*************************************************/ @@ -19034,8 +19223,8 @@ exports.shr64_lo = shr64_lo; "use strict"; -var utils = __webpack_require__(/*! ./utils */ 141); -var assert = __webpack_require__(/*! minimalistic-assert */ 94); +var utils = __webpack_require__(/*! ./utils */ 149); +var assert = __webpack_require__(/*! minimalistic-assert */ 102); function BlockHash() { this.pending = null; @@ -19127,7 +19316,7 @@ BlockHash.prototype._pad = function pad() { /***/ }), -/* 143 */ +/* 151 */ /*!**********************************************!*\ !*** ./node_modules/hash.js/lib/hash/sha.js ***! \**********************************************/ @@ -19137,15 +19326,15 @@ BlockHash.prototype._pad = function pad() { "use strict"; -exports.sha1 = __webpack_require__(/*! ./sha/1 */ 144); -exports.sha224 = __webpack_require__(/*! ./sha/224 */ 146); -exports.sha256 = __webpack_require__(/*! ./sha/256 */ 147); -exports.sha384 = __webpack_require__(/*! ./sha/384 */ 148); -exports.sha512 = __webpack_require__(/*! ./sha/512 */ 149); +exports.sha1 = __webpack_require__(/*! ./sha/1 */ 152); +exports.sha224 = __webpack_require__(/*! ./sha/224 */ 154); +exports.sha256 = __webpack_require__(/*! ./sha/256 */ 155); +exports.sha384 = __webpack_require__(/*! ./sha/384 */ 156); +exports.sha512 = __webpack_require__(/*! ./sha/512 */ 157); /***/ }), -/* 144 */ +/* 152 */ /*!************************************************!*\ !*** ./node_modules/hash.js/lib/hash/sha/1.js ***! \************************************************/ @@ -19155,9 +19344,9 @@ exports.sha512 = __webpack_require__(/*! ./sha/512 */ 149); "use strict"; -var utils = __webpack_require__(/*! ../utils */ 141); -var common = __webpack_require__(/*! ../common */ 142); -var shaCommon = __webpack_require__(/*! ./common */ 145); +var utils = __webpack_require__(/*! ../utils */ 149); +var common = __webpack_require__(/*! ../common */ 150); +var shaCommon = __webpack_require__(/*! ./common */ 153); var rotl32 = utils.rotl32; var sum32 = utils.sum32; @@ -19230,7 +19419,7 @@ SHA1.prototype._digest = function digest(enc) { /***/ }), -/* 145 */ +/* 153 */ /*!*****************************************************!*\ !*** ./node_modules/hash.js/lib/hash/sha/common.js ***! \*****************************************************/ @@ -19240,7 +19429,7 @@ SHA1.prototype._digest = function digest(enc) { "use strict"; -var utils = __webpack_require__(/*! ../utils */ 141); +var utils = __webpack_require__(/*! ../utils */ 149); var rotr32 = utils.rotr32; function ft_1(s, x, y, z) { @@ -19290,7 +19479,7 @@ exports.g1_256 = g1_256; /***/ }), -/* 146 */ +/* 154 */ /*!**************************************************!*\ !*** ./node_modules/hash.js/lib/hash/sha/224.js ***! \**************************************************/ @@ -19300,8 +19489,8 @@ exports.g1_256 = g1_256; "use strict"; -var utils = __webpack_require__(/*! ../utils */ 141); -var SHA256 = __webpack_require__(/*! ./256 */ 147); +var utils = __webpack_require__(/*! ../utils */ 149); +var SHA256 = __webpack_require__(/*! ./256 */ 155); function SHA224() { if (!(this instanceof SHA224)) @@ -19331,7 +19520,7 @@ SHA224.prototype._digest = function digest(enc) { /***/ }), -/* 147 */ +/* 155 */ /*!**************************************************!*\ !*** ./node_modules/hash.js/lib/hash/sha/256.js ***! \**************************************************/ @@ -19341,10 +19530,10 @@ SHA224.prototype._digest = function digest(enc) { "use strict"; -var utils = __webpack_require__(/*! ../utils */ 141); -var common = __webpack_require__(/*! ../common */ 142); -var shaCommon = __webpack_require__(/*! ./common */ 145); -var assert = __webpack_require__(/*! minimalistic-assert */ 94); +var utils = __webpack_require__(/*! ../utils */ 149); +var common = __webpack_require__(/*! ../common */ 150); +var shaCommon = __webpack_require__(/*! ./common */ 153); +var assert = __webpack_require__(/*! minimalistic-assert */ 102); var sum32 = utils.sum32; var sum32_4 = utils.sum32_4; @@ -19447,7 +19636,7 @@ SHA256.prototype._digest = function digest(enc) { /***/ }), -/* 148 */ +/* 156 */ /*!**************************************************!*\ !*** ./node_modules/hash.js/lib/hash/sha/384.js ***! \**************************************************/ @@ -19457,9 +19646,9 @@ SHA256.prototype._digest = function digest(enc) { "use strict"; -var utils = __webpack_require__(/*! ../utils */ 141); +var utils = __webpack_require__(/*! ../utils */ 149); -var SHA512 = __webpack_require__(/*! ./512 */ 149); +var SHA512 = __webpack_require__(/*! ./512 */ 157); function SHA384() { if (!(this instanceof SHA384)) @@ -19493,7 +19682,7 @@ SHA384.prototype._digest = function digest(enc) { /***/ }), -/* 149 */ +/* 157 */ /*!**************************************************!*\ !*** ./node_modules/hash.js/lib/hash/sha/512.js ***! \**************************************************/ @@ -19503,9 +19692,9 @@ SHA384.prototype._digest = function digest(enc) { "use strict"; -var utils = __webpack_require__(/*! ../utils */ 141); -var common = __webpack_require__(/*! ../common */ 142); -var assert = __webpack_require__(/*! minimalistic-assert */ 94); +var utils = __webpack_require__(/*! ../utils */ 149); +var common = __webpack_require__(/*! ../common */ 150); +var assert = __webpack_require__(/*! minimalistic-assert */ 102); var rotr64_hi = utils.rotr64_hi; var rotr64_lo = utils.rotr64_lo; @@ -19834,7 +20023,7 @@ function g1_512_lo(xh, xl) { /***/ }), -/* 150 */ +/* 158 */ /*!*************************************************!*\ !*** ./node_modules/hash.js/lib/hash/ripemd.js ***! \*************************************************/ @@ -19844,8 +20033,8 @@ function g1_512_lo(xh, xl) { "use strict"; -var utils = __webpack_require__(/*! ./utils */ 141); -var common = __webpack_require__(/*! ./common */ 142); +var utils = __webpack_require__(/*! ./utils */ 149); +var common = __webpack_require__(/*! ./common */ 150); var rotl32 = utils.rotl32; var sum32 = utils.sum32; @@ -19991,7 +20180,7 @@ var sh = [ /***/ }), -/* 151 */ +/* 159 */ /*!***********************************************!*\ !*** ./node_modules/hash.js/lib/hash/hmac.js ***! \***********************************************/ @@ -20001,8 +20190,8 @@ var sh = [ "use strict"; -var utils = __webpack_require__(/*! ./utils */ 141); -var assert = __webpack_require__(/*! minimalistic-assert */ 94); +var utils = __webpack_require__(/*! ./utils */ 149); +var assert = __webpack_require__(/*! minimalistic-assert */ 102); function Hmac(hash, key, enc) { if (!(this instanceof Hmac)) @@ -20049,7 +20238,7 @@ Hmac.prototype.digest = function digest(enc) { /***/ }), -/* 152 */ +/* 160 */ /*!*********************************************************************!*\ !*** ./node_modules/elliptic/lib/elliptic/precomputed/secp256k1.js ***! \*********************************************************************/ @@ -20839,7 +21028,7 @@ module.exports = { /***/ }), -/* 153 */ +/* 161 */ /*!********************************************************!*\ !*** ./node_modules/elliptic/lib/elliptic/ec/index.js ***! \********************************************************/ @@ -20849,15 +21038,15 @@ module.exports = { "use strict"; -var BN = __webpack_require__(/*! bn.js */ 120); -var HmacDRBG = __webpack_require__(/*! hmac-drbg */ 154); -var utils = __webpack_require__(/*! ../utils */ 132); -var curves = __webpack_require__(/*! ../curves */ 139); -var rand = __webpack_require__(/*! brorand */ 123); +var BN = __webpack_require__(/*! bn.js */ 128); +var HmacDRBG = __webpack_require__(/*! hmac-drbg */ 162); +var utils = __webpack_require__(/*! ../utils */ 140); +var curves = __webpack_require__(/*! ../curves */ 147); +var rand = __webpack_require__(/*! brorand */ 131); var assert = utils.assert; -var KeyPair = __webpack_require__(/*! ./key */ 155); -var Signature = __webpack_require__(/*! ./signature */ 156); +var KeyPair = __webpack_require__(/*! ./key */ 163); +var Signature = __webpack_require__(/*! ./signature */ 164); function EC(options) { if (!(this instanceof EC)) @@ -21093,7 +21282,7 @@ EC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) { /***/ }), -/* 154 */ +/* 162 */ /*!*************************************************!*\ !*** ./node_modules/hmac-drbg/lib/hmac-drbg.js ***! \*************************************************/ @@ -21103,9 +21292,9 @@ EC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) { "use strict"; -var hash = __webpack_require__(/*! hash.js */ 140); -var utils = __webpack_require__(/*! minimalistic-crypto-utils */ 133); -var assert = __webpack_require__(/*! minimalistic-assert */ 94); +var hash = __webpack_require__(/*! hash.js */ 148); +var utils = __webpack_require__(/*! minimalistic-crypto-utils */ 141); +var assert = __webpack_require__(/*! minimalistic-assert */ 102); function HmacDRBG(options) { if (!(this instanceof HmacDRBG)) @@ -21217,7 +21406,7 @@ HmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) { /***/ }), -/* 155 */ +/* 163 */ /*!******************************************************!*\ !*** ./node_modules/elliptic/lib/elliptic/ec/key.js ***! \******************************************************/ @@ -21227,8 +21416,8 @@ HmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) { "use strict"; -var BN = __webpack_require__(/*! bn.js */ 120); -var utils = __webpack_require__(/*! ../utils */ 132); +var BN = __webpack_require__(/*! bn.js */ 128); +var utils = __webpack_require__(/*! ../utils */ 140); var assert = utils.assert; function KeyPair(ec, options) { @@ -21349,7 +21538,7 @@ KeyPair.prototype.inspect = function inspect() { /***/ }), -/* 156 */ +/* 164 */ /*!************************************************************!*\ !*** ./node_modules/elliptic/lib/elliptic/ec/signature.js ***! \************************************************************/ @@ -21359,9 +21548,9 @@ KeyPair.prototype.inspect = function inspect() { "use strict"; -var BN = __webpack_require__(/*! bn.js */ 120); +var BN = __webpack_require__(/*! bn.js */ 128); -var utils = __webpack_require__(/*! ../utils */ 132); +var utils = __webpack_require__(/*! ../utils */ 140); var assert = utils.assert; function Signature(options, enc) { @@ -21526,7 +21715,7 @@ Signature.prototype.toDER = function toDER(enc) { /***/ }), -/* 157 */ +/* 165 */ /*!***********************************************************!*\ !*** ./node_modules/elliptic/lib/elliptic/eddsa/index.js ***! \***********************************************************/ @@ -21536,13 +21725,13 @@ Signature.prototype.toDER = function toDER(enc) { "use strict"; -var hash = __webpack_require__(/*! hash.js */ 140); -var curves = __webpack_require__(/*! ../curves */ 139); -var utils = __webpack_require__(/*! ../utils */ 132); +var hash = __webpack_require__(/*! hash.js */ 148); +var curves = __webpack_require__(/*! ../curves */ 147); +var utils = __webpack_require__(/*! ../utils */ 140); var assert = utils.assert; var parseBytes = utils.parseBytes; -var KeyPair = __webpack_require__(/*! ./key */ 158); -var Signature = __webpack_require__(/*! ./signature */ 159); +var KeyPair = __webpack_require__(/*! ./key */ 166); +var Signature = __webpack_require__(/*! ./signature */ 167); function EDDSA(curve) { assert(curve === 'ed25519', 'only tested with ed25519 so far'); @@ -21655,7 +21844,7 @@ EDDSA.prototype.isPoint = function isPoint(val) { /***/ }), -/* 158 */ +/* 166 */ /*!*********************************************************!*\ !*** ./node_modules/elliptic/lib/elliptic/eddsa/key.js ***! \*********************************************************/ @@ -21665,7 +21854,7 @@ EDDSA.prototype.isPoint = function isPoint(val) { "use strict"; -var utils = __webpack_require__(/*! ../utils */ 132); +var utils = __webpack_require__(/*! ../utils */ 140); var assert = utils.assert; var parseBytes = utils.parseBytes; var cachedProperty = utils.cachedProperty; @@ -21761,7 +21950,7 @@ module.exports = KeyPair; /***/ }), -/* 159 */ +/* 167 */ /*!***************************************************************!*\ !*** ./node_modules/elliptic/lib/elliptic/eddsa/signature.js ***! \***************************************************************/ @@ -21771,8 +21960,8 @@ module.exports = KeyPair; "use strict"; -var BN = __webpack_require__(/*! bn.js */ 120); -var utils = __webpack_require__(/*! ../utils */ 132); +var BN = __webpack_require__(/*! bn.js */ 128); +var utils = __webpack_require__(/*! ../utils */ 140); var assert = utils.assert; var cachedProperty = utils.cachedProperty; var parseBytes = utils.parseBytes; @@ -21837,19 +22026,19 @@ module.exports = Signature; /***/ }), -/* 160 */ +/* 168 */ /*!******************************************!*\ !*** ./node_modules/parse-asn1/index.js ***! \******************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { -var asn1 = __webpack_require__(/*! ./asn1 */ 161) -var aesid = __webpack_require__(/*! ./aesid.json */ 178) -var fixProc = __webpack_require__(/*! ./fixProc */ 179) -var ciphers = __webpack_require__(/*! browserify-aes */ 98) -var compat = __webpack_require__(/*! pbkdf2 */ 83) -var Buffer = __webpack_require__(/*! safe-buffer */ 38).Buffer +var asn1 = __webpack_require__(/*! ./asn1 */ 169) +var aesid = __webpack_require__(/*! ./aesid.json */ 186) +var fixProc = __webpack_require__(/*! ./fixProc */ 187) +var ciphers = __webpack_require__(/*! browserify-aes */ 106) +var compat = __webpack_require__(/*! pbkdf2 */ 91) +var Buffer = __webpack_require__(/*! safe-buffer */ 46).Buffer module.exports = parseKeys function parseKeys (buffer) { @@ -21954,7 +22143,7 @@ function decrypt (data, password) { /***/ }), -/* 161 */ +/* 169 */ /*!*****************************************!*\ !*** ./node_modules/parse-asn1/asn1.js ***! \*****************************************/ @@ -21966,9 +22155,9 @@ function decrypt (data, password) { // Fedor, you are amazing. -var asn1 = __webpack_require__(/*! asn1.js */ 162) +var asn1 = __webpack_require__(/*! asn1.js */ 170) -exports.certificate = __webpack_require__(/*! ./certificate */ 177) +exports.certificate = __webpack_require__(/*! ./certificate */ 185) var RSAPrivateKey = asn1.define('RSAPrivateKey', function () { this.seq().obj( @@ -22087,7 +22276,7 @@ exports.signature = asn1.define('signature', function () { /***/ }), -/* 162 */ +/* 170 */ /*!******************************************!*\ !*** ./node_modules/asn1.js/lib/asn1.js ***! \******************************************/ @@ -22099,17 +22288,17 @@ exports.signature = asn1.define('signature', function () { const asn1 = exports; -asn1.bignum = __webpack_require__(/*! bn.js */ 120); +asn1.bignum = __webpack_require__(/*! bn.js */ 128); -asn1.define = __webpack_require__(/*! ./asn1/api */ 163).define; -asn1.base = __webpack_require__(/*! ./asn1/base */ 175); -asn1.constants = __webpack_require__(/*! ./asn1/constants */ 176); -asn1.decoders = __webpack_require__(/*! ./asn1/decoders */ 172); -asn1.encoders = __webpack_require__(/*! ./asn1/encoders */ 164); +asn1.define = __webpack_require__(/*! ./asn1/api */ 171).define; +asn1.base = __webpack_require__(/*! ./asn1/base */ 183); +asn1.constants = __webpack_require__(/*! ./asn1/constants */ 184); +asn1.decoders = __webpack_require__(/*! ./asn1/decoders */ 180); +asn1.encoders = __webpack_require__(/*! ./asn1/encoders */ 172); /***/ }), -/* 163 */ +/* 171 */ /*!**********************************************!*\ !*** ./node_modules/asn1.js/lib/asn1/api.js ***! \**********************************************/ @@ -22119,9 +22308,9 @@ asn1.encoders = __webpack_require__(/*! ./asn1/encoders */ 164); "use strict"; -const encoders = __webpack_require__(/*! ./encoders */ 164); -const decoders = __webpack_require__(/*! ./decoders */ 172); -const inherits = __webpack_require__(/*! inherits */ 44); +const encoders = __webpack_require__(/*! ./encoders */ 172); +const decoders = __webpack_require__(/*! ./decoders */ 180); +const inherits = __webpack_require__(/*! inherits */ 52); const api = exports; @@ -22177,7 +22366,7 @@ Entity.prototype.encode = function encode(data, enc, /* internal */ reporter) { /***/ }), -/* 164 */ +/* 172 */ /*!*********************************************************!*\ !*** ./node_modules/asn1.js/lib/asn1/encoders/index.js ***! \*********************************************************/ @@ -22189,12 +22378,12 @@ Entity.prototype.encode = function encode(data, enc, /* internal */ reporter) { const encoders = exports; -encoders.der = __webpack_require__(/*! ./der */ 165); -encoders.pem = __webpack_require__(/*! ./pem */ 171); +encoders.der = __webpack_require__(/*! ./der */ 173); +encoders.pem = __webpack_require__(/*! ./pem */ 179); /***/ }), -/* 165 */ +/* 173 */ /*!*******************************************************!*\ !*** ./node_modules/asn1.js/lib/asn1/encoders/der.js ***! \*******************************************************/ @@ -22204,12 +22393,12 @@ encoders.pem = __webpack_require__(/*! ./pem */ 171); "use strict"; -const inherits = __webpack_require__(/*! inherits */ 44); -const Buffer = __webpack_require__(/*! safer-buffer */ 166).Buffer; -const Node = __webpack_require__(/*! ../base/node */ 167); +const inherits = __webpack_require__(/*! inherits */ 52); +const Buffer = __webpack_require__(/*! safer-buffer */ 174).Buffer; +const Node = __webpack_require__(/*! ../base/node */ 175); // Import DER constants -const der = __webpack_require__(/*! ../constants/der */ 170); +const der = __webpack_require__(/*! ../constants/der */ 178); function DEREncoder(entity) { this.enc = 'der'; @@ -22500,7 +22689,7 @@ function encodeTag(tag, primitive, cls, reporter) { /***/ }), -/* 166 */ +/* 174 */ /*!********************************************!*\ !*** ./node_modules/safer-buffer/safer.js ***! \********************************************/ @@ -22512,7 +22701,7 @@ function encodeTag(tag, primitive, cls, reporter) { -var buffer = __webpack_require__(/*! buffer */ 39) +var buffer = __webpack_require__(/*! buffer */ 47) var Buffer = buffer.Buffer var safer = {} @@ -22586,10 +22775,10 @@ if (!safer.constants) { module.exports = safer -/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../node-libs-browser/mock/process.js */ 36))) +/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../node-libs-browser/mock/process.js */ 44))) /***/ }), -/* 167 */ +/* 175 */ /*!****************************************************!*\ !*** ./node_modules/asn1.js/lib/asn1/base/node.js ***! \****************************************************/ @@ -22599,10 +22788,10 @@ module.exports = safer "use strict"; -const Reporter = __webpack_require__(/*! ../base/reporter */ 168).Reporter; -const EncoderBuffer = __webpack_require__(/*! ../base/buffer */ 169).EncoderBuffer; -const DecoderBuffer = __webpack_require__(/*! ../base/buffer */ 169).DecoderBuffer; -const assert = __webpack_require__(/*! minimalistic-assert */ 94); +const Reporter = __webpack_require__(/*! ../base/reporter */ 176).Reporter; +const EncoderBuffer = __webpack_require__(/*! ../base/buffer */ 177).EncoderBuffer; +const DecoderBuffer = __webpack_require__(/*! ../base/buffer */ 177).DecoderBuffer; +const assert = __webpack_require__(/*! minimalistic-assert */ 102); // Supported tags const tags = [ @@ -23238,7 +23427,7 @@ Node.prototype._isPrintstr = function isPrintstr(str) { /***/ }), -/* 168 */ +/* 176 */ /*!********************************************************!*\ !*** ./node_modules/asn1.js/lib/asn1/base/reporter.js ***! \********************************************************/ @@ -23248,7 +23437,7 @@ Node.prototype._isPrintstr = function isPrintstr(str) { "use strict"; -const inherits = __webpack_require__(/*! inherits */ 44); +const inherits = __webpack_require__(/*! inherits */ 52); function Reporter(options) { this._reporterState = { @@ -23372,7 +23561,7 @@ ReporterError.prototype.rethrow = function rethrow(msg) { /***/ }), -/* 169 */ +/* 177 */ /*!******************************************************!*\ !*** ./node_modules/asn1.js/lib/asn1/base/buffer.js ***! \******************************************************/ @@ -23382,9 +23571,9 @@ ReporterError.prototype.rethrow = function rethrow(msg) { "use strict"; -const inherits = __webpack_require__(/*! inherits */ 44); -const Reporter = __webpack_require__(/*! ../base/reporter */ 168).Reporter; -const Buffer = __webpack_require__(/*! safer-buffer */ 166).Buffer; +const inherits = __webpack_require__(/*! inherits */ 52); +const Reporter = __webpack_require__(/*! ../base/reporter */ 176).Reporter; +const Buffer = __webpack_require__(/*! safer-buffer */ 174).Buffer; function DecoderBuffer(base, options) { Reporter.call(this, options); @@ -23536,7 +23725,7 @@ EncoderBuffer.prototype.join = function join(out, offset) { /***/ }), -/* 170 */ +/* 178 */ /*!********************************************************!*\ !*** ./node_modules/asn1.js/lib/asn1/constants/der.js ***! \********************************************************/ @@ -23605,7 +23794,7 @@ exports.tagByName = reverse(exports.tag); /***/ }), -/* 171 */ +/* 179 */ /*!*******************************************************!*\ !*** ./node_modules/asn1.js/lib/asn1/encoders/pem.js ***! \*******************************************************/ @@ -23615,9 +23804,9 @@ exports.tagByName = reverse(exports.tag); "use strict"; -const inherits = __webpack_require__(/*! inherits */ 44); +const inherits = __webpack_require__(/*! inherits */ 52); -const DEREncoder = __webpack_require__(/*! ./der */ 165); +const DEREncoder = __webpack_require__(/*! ./der */ 173); function PEMEncoder(entity) { DEREncoder.call(this, entity); @@ -23639,7 +23828,7 @@ PEMEncoder.prototype.encode = function encode(data, options) { /***/ }), -/* 172 */ +/* 180 */ /*!*********************************************************!*\ !*** ./node_modules/asn1.js/lib/asn1/decoders/index.js ***! \*********************************************************/ @@ -23651,12 +23840,12 @@ PEMEncoder.prototype.encode = function encode(data, options) { const decoders = exports; -decoders.der = __webpack_require__(/*! ./der */ 173); -decoders.pem = __webpack_require__(/*! ./pem */ 174); +decoders.der = __webpack_require__(/*! ./der */ 181); +decoders.pem = __webpack_require__(/*! ./pem */ 182); /***/ }), -/* 173 */ +/* 181 */ /*!*******************************************************!*\ !*** ./node_modules/asn1.js/lib/asn1/decoders/der.js ***! \*******************************************************/ @@ -23666,14 +23855,14 @@ decoders.pem = __webpack_require__(/*! ./pem */ 174); "use strict"; -const inherits = __webpack_require__(/*! inherits */ 44); +const inherits = __webpack_require__(/*! inherits */ 52); -const bignum = __webpack_require__(/*! bn.js */ 120); -const DecoderBuffer = __webpack_require__(/*! ../base/buffer */ 169).DecoderBuffer; -const Node = __webpack_require__(/*! ../base/node */ 167); +const bignum = __webpack_require__(/*! bn.js */ 128); +const DecoderBuffer = __webpack_require__(/*! ../base/buffer */ 177).DecoderBuffer; +const Node = __webpack_require__(/*! ../base/node */ 175); // Import DER constants -const der = __webpack_require__(/*! ../constants/der */ 170); +const der = __webpack_require__(/*! ../constants/der */ 178); function DERDecoder(entity) { this.enc = 'der'; @@ -24002,7 +24191,7 @@ function derDecodeLen(buf, primitive, fail) { /***/ }), -/* 174 */ +/* 182 */ /*!*******************************************************!*\ !*** ./node_modules/asn1.js/lib/asn1/decoders/pem.js ***! \*******************************************************/ @@ -24012,10 +24201,10 @@ function derDecodeLen(buf, primitive, fail) { "use strict"; -const inherits = __webpack_require__(/*! inherits */ 44); -const Buffer = __webpack_require__(/*! safer-buffer */ 166).Buffer; +const inherits = __webpack_require__(/*! inherits */ 52); +const Buffer = __webpack_require__(/*! safer-buffer */ 174).Buffer; -const DERDecoder = __webpack_require__(/*! ./der */ 173); +const DERDecoder = __webpack_require__(/*! ./der */ 181); function PEMDecoder(entity) { DERDecoder.call(this, entity); @@ -24064,7 +24253,7 @@ PEMDecoder.prototype.decode = function decode(data, options) { /***/ }), -/* 175 */ +/* 183 */ /*!*****************************************************!*\ !*** ./node_modules/asn1.js/lib/asn1/base/index.js ***! \*****************************************************/ @@ -24076,14 +24265,14 @@ PEMDecoder.prototype.decode = function decode(data, options) { const base = exports; -base.Reporter = __webpack_require__(/*! ./reporter */ 168).Reporter; -base.DecoderBuffer = __webpack_require__(/*! ./buffer */ 169).DecoderBuffer; -base.EncoderBuffer = __webpack_require__(/*! ./buffer */ 169).EncoderBuffer; -base.Node = __webpack_require__(/*! ./node */ 167); +base.Reporter = __webpack_require__(/*! ./reporter */ 176).Reporter; +base.DecoderBuffer = __webpack_require__(/*! ./buffer */ 177).DecoderBuffer; +base.EncoderBuffer = __webpack_require__(/*! ./buffer */ 177).EncoderBuffer; +base.Node = __webpack_require__(/*! ./node */ 175); /***/ }), -/* 176 */ +/* 184 */ /*!**********************************************************!*\ !*** ./node_modules/asn1.js/lib/asn1/constants/index.js ***! \**********************************************************/ @@ -24111,11 +24300,11 @@ constants._reverse = function reverse(map) { return res; }; -constants.der = __webpack_require__(/*! ./der */ 170); +constants.der = __webpack_require__(/*! ./der */ 178); /***/ }), -/* 177 */ +/* 185 */ /*!************************************************!*\ !*** ./node_modules/parse-asn1/certificate.js ***! \************************************************/ @@ -24128,7 +24317,7 @@ constants.der = __webpack_require__(/*! ./der */ 170); -var asn = __webpack_require__(/*! asn1.js */ 162) +var asn = __webpack_require__(/*! asn1.js */ 170) var Time = asn.define('Time', function () { this.choice({ @@ -24215,7 +24404,7 @@ module.exports = X509Certificate /***/ }), -/* 178 */ +/* 186 */ /*!********************************************!*\ !*** ./node_modules/parse-asn1/aesid.json ***! \********************************************/ @@ -24225,7 +24414,7 @@ module.exports = X509Certificate module.exports = JSON.parse("{\"2.16.840.1.101.3.4.1.1\":\"aes-128-ecb\",\"2.16.840.1.101.3.4.1.2\":\"aes-128-cbc\",\"2.16.840.1.101.3.4.1.3\":\"aes-128-ofb\",\"2.16.840.1.101.3.4.1.4\":\"aes-128-cfb\",\"2.16.840.1.101.3.4.1.21\":\"aes-192-ecb\",\"2.16.840.1.101.3.4.1.22\":\"aes-192-cbc\",\"2.16.840.1.101.3.4.1.23\":\"aes-192-ofb\",\"2.16.840.1.101.3.4.1.24\":\"aes-192-cfb\",\"2.16.840.1.101.3.4.1.41\":\"aes-256-ecb\",\"2.16.840.1.101.3.4.1.42\":\"aes-256-cbc\",\"2.16.840.1.101.3.4.1.43\":\"aes-256-ofb\",\"2.16.840.1.101.3.4.1.44\":\"aes-256-cfb\"}"); /***/ }), -/* 179 */ +/* 187 */ /*!********************************************!*\ !*** ./node_modules/parse-asn1/fixProc.js ***! \********************************************/ @@ -24236,9 +24425,9 @@ module.exports = JSON.parse("{\"2.16.840.1.101.3.4.1.1\":\"aes-128-ecb\",\"2.16. var findProc = /Proc-Type: 4,ENCRYPTED[\n\r]+DEK-Info: AES-((?:128)|(?:192)|(?:256))-CBC,([0-9A-H]+)[\n\r]+([0-9A-z\n\r+/=]+)[\n\r]+/m var startRegex = /^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----/m var fullRegex = /^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----([0-9A-z\n\r+/=]+)-----END \1-----$/m -var evp = __webpack_require__(/*! evp_bytestokey */ 115) -var ciphers = __webpack_require__(/*! browserify-aes */ 98) -var Buffer = __webpack_require__(/*! safe-buffer */ 38).Buffer +var evp = __webpack_require__(/*! evp_bytestokey */ 123) +var ciphers = __webpack_require__(/*! browserify-aes */ 106) +var Buffer = __webpack_require__(/*! safe-buffer */ 46).Buffer module.exports = function (okey, password) { var key = okey.toString() var match = key.match(findProc) @@ -24266,7 +24455,7 @@ module.exports = function (okey, password) { /***/ }), -/* 180 */ +/* 188 */ /*!**********************************************************!*\ !*** ./node_modules/browserify-sign/browser/curves.json ***! \**********************************************************/ @@ -24276,7 +24465,7 @@ module.exports = function (okey, password) { module.exports = JSON.parse("{\"1.3.132.0.10\":\"secp256k1\",\"1.3.132.0.33\":\"p224\",\"1.2.840.10045.3.1.1\":\"p192\",\"1.2.840.10045.3.1.7\":\"p256\",\"1.3.132.0.34\":\"p384\",\"1.3.132.0.35\":\"p521\"}"); /***/ }), -/* 181 */ +/* 189 */ /*!********************************************************!*\ !*** ./node_modules/browserify-sign/browser/verify.js ***! \********************************************************/ @@ -24284,11 +24473,11 @@ module.exports = JSON.parse("{\"1.3.132.0.10\":\"secp256k1\",\"1.3.132.0.33\":\" /***/ (function(module, exports, __webpack_require__) { // much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js -var Buffer = __webpack_require__(/*! safe-buffer */ 38).Buffer -var BN = __webpack_require__(/*! bn.js */ 120) -var EC = __webpack_require__(/*! elliptic */ 130).ec -var parseKeys = __webpack_require__(/*! parse-asn1 */ 160) -var curves = __webpack_require__(/*! ./curves.json */ 180) +var Buffer = __webpack_require__(/*! safe-buffer */ 46).Buffer +var BN = __webpack_require__(/*! bn.js */ 128) +var EC = __webpack_require__(/*! elliptic */ 138).ec +var parseKeys = __webpack_require__(/*! parse-asn1 */ 168) +var curves = __webpack_require__(/*! ./curves.json */ 188) function verify (sig, hash, key, signType, tag) { var pub = parseKeys(key) @@ -24370,15 +24559,15 @@ module.exports = verify /***/ }), -/* 182 */ +/* 190 */ /*!*********************************************!*\ !*** ./node_modules/create-ecdh/browser.js ***! \*********************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { -/* WEBPACK VAR INJECTION */(function(Buffer) {var elliptic = __webpack_require__(/*! elliptic */ 130) -var BN = __webpack_require__(/*! bn.js */ 120) +/* WEBPACK VAR INJECTION */(function(Buffer) {var elliptic = __webpack_require__(/*! elliptic */ 138) +var BN = __webpack_require__(/*! bn.js */ 128) module.exports = function createECDH (curve) { return new ECDH(curve) @@ -24502,18 +24691,18 @@ function formatReturnValue (bn, enc, len) { } } -/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../buffer/index.js */ 39).Buffer)) +/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../buffer/index.js */ 47).Buffer)) /***/ }), -/* 183 */ +/* 191 */ /*!************************************************!*\ !*** ./node_modules/public-encrypt/browser.js ***! \************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { -exports.publicEncrypt = __webpack_require__(/*! ./publicEncrypt */ 184) -exports.privateDecrypt = __webpack_require__(/*! ./privateDecrypt */ 188) +exports.publicEncrypt = __webpack_require__(/*! ./publicEncrypt */ 192) +exports.privateDecrypt = __webpack_require__(/*! ./privateDecrypt */ 196) exports.privateEncrypt = function privateEncrypt (key, buf) { return exports.publicEncrypt(key, buf, true) @@ -24525,22 +24714,22 @@ exports.publicDecrypt = function publicDecrypt (key, buf) { /***/ }), -/* 184 */ +/* 192 */ /*!******************************************************!*\ !*** ./node_modules/public-encrypt/publicEncrypt.js ***! \******************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { -var parseKeys = __webpack_require__(/*! parse-asn1 */ 160) -var randomBytes = __webpack_require__(/*! randombytes */ 35) -var createHash = __webpack_require__(/*! create-hash */ 43) -var mgf = __webpack_require__(/*! ./mgf */ 185) -var xor = __webpack_require__(/*! ./xor */ 186) -var BN = __webpack_require__(/*! bn.js */ 120) -var withPublic = __webpack_require__(/*! ./withPublic */ 187) -var crt = __webpack_require__(/*! browserify-rsa */ 129) -var Buffer = __webpack_require__(/*! safe-buffer */ 38).Buffer +var parseKeys = __webpack_require__(/*! parse-asn1 */ 168) +var randomBytes = __webpack_require__(/*! randombytes */ 43) +var createHash = __webpack_require__(/*! create-hash */ 51) +var mgf = __webpack_require__(/*! ./mgf */ 193) +var xor = __webpack_require__(/*! ./xor */ 194) +var BN = __webpack_require__(/*! bn.js */ 128) +var withPublic = __webpack_require__(/*! ./withPublic */ 195) +var crt = __webpack_require__(/*! browserify-rsa */ 137) +var Buffer = __webpack_require__(/*! safe-buffer */ 46).Buffer module.exports = function publicEncrypt (publicKey, msg, reverse) { var padding @@ -24623,15 +24812,15 @@ function nonZero (len) { /***/ }), -/* 185 */ +/* 193 */ /*!********************************************!*\ !*** ./node_modules/public-encrypt/mgf.js ***! \********************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { -var createHash = __webpack_require__(/*! create-hash */ 43) -var Buffer = __webpack_require__(/*! safe-buffer */ 38).Buffer +var createHash = __webpack_require__(/*! create-hash */ 51) +var Buffer = __webpack_require__(/*! safe-buffer */ 46).Buffer module.exports = function (seed, len) { var t = Buffer.alloc(0) @@ -24652,7 +24841,7 @@ function i2ops (c) { /***/ }), -/* 186 */ +/* 194 */ /*!********************************************!*\ !*** ./node_modules/public-encrypt/xor.js ***! \********************************************/ @@ -24670,15 +24859,15 @@ module.exports = function xor (a, b) { /***/ }), -/* 187 */ +/* 195 */ /*!***************************************************!*\ !*** ./node_modules/public-encrypt/withPublic.js ***! \***************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { -var BN = __webpack_require__(/*! bn.js */ 120) -var Buffer = __webpack_require__(/*! safe-buffer */ 38).Buffer +var BN = __webpack_require__(/*! bn.js */ 128) +var Buffer = __webpack_require__(/*! safe-buffer */ 46).Buffer function withPublic (paddedMsg, key) { return Buffer.from(paddedMsg @@ -24692,21 +24881,21 @@ module.exports = withPublic /***/ }), -/* 188 */ +/* 196 */ /*!*******************************************************!*\ !*** ./node_modules/public-encrypt/privateDecrypt.js ***! \*******************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { -var parseKeys = __webpack_require__(/*! parse-asn1 */ 160) -var mgf = __webpack_require__(/*! ./mgf */ 185) -var xor = __webpack_require__(/*! ./xor */ 186) -var BN = __webpack_require__(/*! bn.js */ 120) -var crt = __webpack_require__(/*! browserify-rsa */ 129) -var createHash = __webpack_require__(/*! create-hash */ 43) -var withPublic = __webpack_require__(/*! ./withPublic */ 187) -var Buffer = __webpack_require__(/*! safe-buffer */ 38).Buffer +var parseKeys = __webpack_require__(/*! parse-asn1 */ 168) +var mgf = __webpack_require__(/*! ./mgf */ 193) +var xor = __webpack_require__(/*! ./xor */ 194) +var BN = __webpack_require__(/*! bn.js */ 128) +var crt = __webpack_require__(/*! browserify-rsa */ 137) +var createHash = __webpack_require__(/*! create-hash */ 51) +var withPublic = __webpack_require__(/*! ./withPublic */ 195) +var Buffer = __webpack_require__(/*! safe-buffer */ 46).Buffer module.exports = function privateDecrypt (privateKey, enc, reverse) { var padding @@ -24807,7 +24996,7 @@ function compare (a, b) { /***/ }), -/* 189 */ +/* 197 */ /*!********************************************!*\ !*** ./node_modules/randomfill/browser.js ***! \********************************************/ @@ -24820,8 +25009,8 @@ function compare (a, b) { function oldBrowser () { throw new Error('secure random number generation not supported by this browser\nuse chrome, FireFox or Internet Explorer 11') } -var safeBuffer = __webpack_require__(/*! safe-buffer */ 38) -var randombytes = __webpack_require__(/*! randombytes */ 35) +var safeBuffer = __webpack_require__(/*! safe-buffer */ 46) +var randombytes = __webpack_require__(/*! randombytes */ 43) var Buffer = safeBuffer.Buffer var kBufferMaxLength = safeBuffer.kMaxLength var crypto = __webpack_provided_global_dot_crypto || global.msCrypto @@ -24924,10 +25113,10 @@ function randomFillSync (buf, offset, size) { return actualFill(buf, offset, size) } -/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/vue-cli-plugin-uni/lib/crypto.js */ 33)["default"], __webpack_require__(/*! ./../webpack/buildin/global.js */ 30), __webpack_require__(/*! ./../node-libs-browser/mock/process.js */ 36))) +/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/vue-cli-plugin-uni/lib/crypto.js */ 41)["default"], __webpack_require__(/*! ./../webpack/buildin/global.js */ 38), __webpack_require__(/*! ./../node-libs-browser/mock/process.js */ 44))) /***/ }), -/* 190 */ +/* 198 */ /*!***************************************************************!*\ !*** D:/里海数字乡村/xunfeiAi/static/fast-xml-parser/src/parser.js ***! \***************************************************************/ @@ -24935,10 +25124,10 @@ function randomFillSync (buf, offset, size) { /***/ (function(module, exports, __webpack_require__) { "use strict"; -eval("/* WEBPACK VAR INJECTION */(function(__f__) {\n\nvar nodeToJson = __webpack_require__(/*! ./node2json */ 191);\nvar xmlToNodeobj = __webpack_require__(/*! ./xmlstr2xmlnode */ 193);\nvar x2xmlnode = __webpack_require__(/*! ./xmlstr2xmlnode */ 193);\nvar buildOptions = __webpack_require__(/*! ./util */ 192).buildOptions;\nvar validator = __webpack_require__(/*! ./validator */ 195);\nexports.parse = function (xmlData, options, validationOption) {\n if (validationOption) {\n if (validationOption === true) validationOption = {};\n var result = validator.validate(xmlData, validationOption);\n if (result !== true) {\n throw Error(result.err.msg);\n }\n }\n options = buildOptions(options, x2xmlnode.defaultOptions, x2xmlnode.props);\n var traversableObj = xmlToNodeobj.getTraversalObj(xmlData, options);\n //print(traversableObj, \" \");\n return nodeToJson.convertToJson(traversableObj, options);\n};\nexports.convertTonimn = __webpack_require__(/*! ../src/nimndata */ 196).convert2nimn;\nexports.getTraversalObj = xmlToNodeobj.getTraversalObj;\nexports.convertToJson = nodeToJson.convertToJson;\nexports.convertToJsonString = __webpack_require__(/*! ./node2json_str */ 197).convertToJsonString;\nexports.validate = validator.validate;\nexports.j2xParser = __webpack_require__(/*! ./json2xml */ 198);\nexports.parseToNimn = function (xmlData, schema, options) {\n return exports.convertTonimn(exports.getTraversalObj(xmlData, options), schema, options);\n};\nfunction print(xmlNode, indentation) {\n if (xmlNode) {\n __f__(\"log\", indentation + \"{\", \" at static/fast-xml-parser/src/parser.js:36\");\n __f__(\"log\", indentation + \" \\\"tagName\\\": \\\"\" + xmlNode.tagname + \"\\\", \", \" at static/fast-xml-parser/src/parser.js:37\");\n if (xmlNode.parent) {\n __f__(\"log\", indentation + \" \\\"parent\\\": \\\"\" + xmlNode.parent.tagname + \"\\\", \", \" at static/fast-xml-parser/src/parser.js:39\");\n }\n __f__(\"log\", indentation + \" \\\"val\\\": \\\"\" + xmlNode.val + \"\\\", \", \" at static/fast-xml-parser/src/parser.js:41\");\n __f__(\"log\", indentation + \" \\\"attrs\\\": \" + JSON.stringify(xmlNode.attrsMap, null, 4) + \", \", \" at static/fast-xml-parser/src/parser.js:42\");\n if (xmlNode.child) {\n __f__(\"log\", indentation + \"\\\"child\\\": {\", \" at static/fast-xml-parser/src/parser.js:45\");\n var indentation2 = indentation + indentation;\n Object.keys(xmlNode.child).forEach(function (key) {\n var node = xmlNode.child[key];\n if (Array.isArray(node)) {\n __f__(\"log\", indentation + \"\\\"\" + key + \"\\\" :[\", \" at static/fast-xml-parser/src/parser.js:51\");\n node.forEach(function (item, index) {\n //console.log(indentation + \" \\\"\"+index+\"\\\" : [\")\n print(item, indentation2);\n });\n __f__(\"log\", indentation + \"],\", \" at static/fast-xml-parser/src/parser.js:56\");\n } else {\n __f__(\"log\", indentation + \" \\\"\" + key + \"\\\" : {\", \" at static/fast-xml-parser/src/parser.js:58\");\n print(node, indentation2);\n __f__(\"log\", indentation + \"},\", \" at static/fast-xml-parser/src/parser.js:60\");\n }\n });\n __f__(\"log\", indentation + \"},\", \" at static/fast-xml-parser/src/parser.js:63\");\n }\n __f__(\"log\", indentation + \"},\", \" at static/fast-xml-parser/src/parser.js:65\");\n }\n}\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/vue-cli-plugin-uni/lib/format-log.js */ 18)[\"default\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vc3RhdGljL2Zhc3QteG1sLXBhcnNlci9zcmMvcGFyc2VyLmpzIl0sIm5hbWVzIjpbIm5vZGVUb0pzb24iLCJyZXF1aXJlIiwieG1sVG9Ob2Rlb2JqIiwieDJ4bWxub2RlIiwiYnVpbGRPcHRpb25zIiwidmFsaWRhdG9yIiwiZXhwb3J0cyIsInBhcnNlIiwieG1sRGF0YSIsIm9wdGlvbnMiLCJ2YWxpZGF0aW9uT3B0aW9uIiwicmVzdWx0IiwidmFsaWRhdGUiLCJFcnJvciIsImVyciIsIm1zZyIsImRlZmF1bHRPcHRpb25zIiwicHJvcHMiLCJ0cmF2ZXJzYWJsZU9iaiIsImdldFRyYXZlcnNhbE9iaiIsImNvbnZlcnRUb0pzb24iLCJjb252ZXJ0VG9uaW1uIiwiY29udmVydDJuaW1uIiwiY29udmVydFRvSnNvblN0cmluZyIsImoyeFBhcnNlciIsInBhcnNlVG9OaW1uIiwic2NoZW1hIiwicHJpbnQiLCJ4bWxOb2RlIiwiaW5kZW50YXRpb24iLCJ0YWduYW1lIiwicGFyZW50IiwidmFsIiwiSlNPTiIsInN0cmluZ2lmeSIsImF0dHJzTWFwIiwiY2hpbGQiLCJpbmRlbnRhdGlvbjIiLCJPYmplY3QiLCJrZXlzIiwiZm9yRWFjaCIsImtleSIsIm5vZGUiLCJBcnJheSIsImlzQXJyYXkiLCJpdGVtIiwiaW5kZXgiXSwibWFwcGluZ3MiOiJBQUFBLDZDQUFhOztBQUViLElBQU1BLFVBQVUsR0FBR0MsbUJBQU8sQ0FBQyxzQkFBYSxDQUFDO0FBQ3pDLElBQU1DLFlBQVksR0FBR0QsbUJBQU8sQ0FBQywyQkFBa0IsQ0FBQztBQUNoRCxJQUFNRSxTQUFTLEdBQUdGLG1CQUFPLENBQUMsMkJBQWtCLENBQUM7QUFDN0MsSUFBTUcsWUFBWSxHQUFHSCxtQkFBTyxDQUFDLGlCQUFRLENBQUMsQ0FBQ0csWUFBWTtBQUNuRCxJQUFNQyxTQUFTLEdBQUdKLG1CQUFPLENBQUMsc0JBQWEsQ0FBQztBQUV4Q0ssT0FBTyxDQUFDQyxLQUFLLEdBQUcsVUFBU0Ms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LENBQUUsVUFBU0ssSUFBSSxFQUFDQyxLQUFLLEVBQUU7WUFDakM7WUFDQW5CLEtBQUssQ0FBQ2tCLElBQUksRUFBRVIsWUFBWSxDQUFDO1VBQzNCLENBQUMsQ0FBQztVQUNGLGFBQVlSLFdBQVcsR0FBRyxJQUFJO1FBQ2hDLENBQUMsTUFBSTtVQUNILGFBQVlBLFdBQVcsR0FBRyxLQUFLLEdBQUNZLEdBQUcsR0FBQyxRQUFRO1VBQzVDZCxLQUFLLENBQUNlLElBQUksRUFBRUwsWUFBWSxDQUFDO1VBQ3pCLGFBQVlSLFdBQVcsR0FBRyxJQUFJO1FBQ2hDO01BQ0YsQ0FBQyxDQUFDO01BQ0YsYUFBWUEsV0FBVyxHQUFHLElBQUk7SUFDaEM7SUFDQSxhQUFZQSxXQUFXLEdBQUcsSUFBSTtFQUNoQztBQUNGLEMiLCJmaWxlIjoiMTkwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBub2RlVG9Kc29uID0gcmVxdWlyZSgnLi9ub2RlMmpzb24nKTtcbmNvbnN0IHhtbFRvTm9kZW9iaiA9IHJlcXVpcmUoJy4veG1sc3RyMnhtbG5vZGUnKTtcbmNvbnN0IHgyeG1sbm9kZSA9IHJlcXVpcmUoJy4veG1sc3RyMnhtbG5vZGUnKTtcbmNvbnN0IGJ1aWxkT3B0aW9ucyA9IHJlcXVpcmUoJy4vdXRpbCcpLmJ1aWxkT3B0aW9ucztcbmNvbnN0IHZhbGlkYXRvciA9IHJlcXVpcmUoJy4vdmFsaWRhdG9yJyk7XG5cbmV4cG9ydHMucGFyc2UgPSBmdW5jdGlvbih4bWxEYXRhLCBvcHRpb25zLCB2YWxpZGF0aW9uT3B0aW9uKSB7XG4gIGlmKCB2YWxpZGF0aW9uT3B0aW9uKXtcbiAgICBpZih2YWxpZGF0aW9uT3B0aW9uID09PSB0cnVlKSB2YWxpZGF0aW9uT3B0aW9uID0ge31cbiAgICBcbiAgICBjb25zdCByZXN1bHQgPSB2YWxpZGF0b3IudmFsaWRhdGUoeG1sRGF0YSwgdmFsaWRhdGlvbk9wdGlvbik7XG4gICAgaWYgKHJlc3VsdCAhPT0gdHJ1ZSkge1xuICAgICAgdGhyb3cgRXJyb3IoIHJlc3VsdC5lcnIubXNnKVxuICAgIH1cbiAgfVxuICBvcHRpb25zID0gYnVpbGRPcHRpb25zKG9wdGlvbnMsIHgyeG1sbm9kZS5kZWZhdWx0T3B0aW9ucywgeDJ4bWxub2RlLnByb3BzKTtcbiAgY29uc3QgdHJhdmVyc2FibGVPYmogPSB4bWxUb05vZGVvYmouZ2V0VHJhdmVyc2FsT2JqKHhtbERhdGEsIG9wdGlvbnMpXG4gIC8vcHJpbnQodHJhdmVyc2FibGVPYmosIFwiICBcIik7XG4gIHJldHVybiBub2RlVG9Kc29uLmNvbnZlcnRUb0pzb24odHJhdmVyc2FibGVPYmosIG9wdGlvbnMpO1xufTtcbmV4cG9ydHMuY29udmVydFRvbmltbiA9IHJlcXVpcmUoJy4uL3NyYy9uaW1uZGF0YScpLmNvbnZlcnQybmltbjtcbmV4cG9ydHMuZ2V0VHJhdmVyc2FsT2JqID0geG1sVG9Ob2Rlb2JqLmdldFRyYXZlcnNhbE9iajtcbmV4cG9ydHMuY29udmVydFRvSnNvbiA9IG5vZGVUb0pzb24uY29udmVydFRvSnNvbjtcbmV4cG9ydHMuY29udmVydFRvSnNvblN0cmluZyA9IHJlcXVpcmUoJy4vbm9kZTJqc29uX3N0cicpLmNvbnZlcnRUb0pzb25TdHJpbmc7XG5leHBvcnRzLnZhbGlkYXRlID0gdmFsaWRhdG9yLnZhbGlkYXRlO1xuZXhwb3J0cy5qMnhQYXJzZXIgPSByZXF1aXJlKCcuL2pzb24yeG1sJyk7XG5leHBvcnRzLnBhcnNlVG9OaW1uID0gZnVuY3Rpb24oeG1sRGF0YSwgc2NoZW1hLCBvcHRpb25zKSB7XG4gIHJldHVybiBleHBvcnRzLmNvbnZlcnRUb25pbW4oZXhwb3J0cy5nZXRUcmF2ZXJzYWxPYmooeG1sRGF0YSwgb3B0aW9ucyksIHNjaGVtYSwgb3B0aW9ucyk7XG59O1xuXG5cbmZ1bmN0aW9uIHByaW50KHhtbE5vZGUsIGluZGVudGF0aW9uKXtcbiAgaWYoeG1sTm9kZSl7XG4gICAgY29uc29sZS5sb2coaW5kZW50YXRpb24gKyBcIntcIilcbiAgICBjb25zb2xlLmxvZyhpbmRlbnRhdGlvbiArIFwiICBcXFwidGFnTmFtZVxcXCI6IFxcXCJcIiArIHhtbE5vZGUudGFnbmFtZSArIFwiXFxcIiwgXCIpO1xuICAgIGlmKHhtbE5vZGUucGFyZW50KXtcbiAgICAgIGNvbnNvbGUubG9nKGluZGVudGF0aW9uICsgXCIgIFxcXCJwYXJlbnRcXFwiOiBcXFwiXCIgKyB4bWxOb2RlLnBhcmVudC50YWduYW1lICArIFwiXFxcIiwgXCIpO1xuICAgIH1cbiAgICBjb25zb2xlLmxvZyhpbmRlbnRhdGlvbiArIFwiICBcXFwidmFsXFxcIjogXFxcIlwiICsgeG1sTm9kZS52YWwgICsgXCJcXFwiLCBcIik7XG4gICAgY29uc29sZS5sb2coaW5kZW50YXRpb24gKyBcIiAgXFxcImF0dHJzXFxcIjogXCIgKyBKU09OLnN0cmluZ2lmeSh4bWxOb2RlLmF0dHJzTWFwLG51bGwsNCkgICsgXCIsIFwiKTtcblxuICAgIGlmKHhtbE5vZGUuY2hpbGQpe1xuICAgICAgY29uc29sZS5sb2coaW5kZW50YXRpb24gKyBcIlxcXCJjaGlsZFxcXCI6IHtcIilcbiAgICAgIGNvbnN0IGluZGVudGF0aW9uMiA9IGluZGVudGF0aW9uICsgaW5kZW50YXRpb247XG4gICAgICBPYmplY3Qua2V5cyh4bWxOb2RlLmNoaWxkKS5mb3JFYWNoKCBmdW5jdGlvbihrZXkpIHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IHhtbE5vZGUuY2hpbGRba2V5XTtcblxuICAgICAgICBpZihBcnJheS5pc0FycmF5KG5vZGUpKXtcbiAgICAgICAgICBjb25zb2xlLmxvZyhpbmRlbnRhdGlvbiArICBcIlxcXCJcIitrZXkrXCJcXFwiIDpbXCIpXG4gICAgICAgICAgbm9kZS5mb3JFYWNoKCBmdW5jdGlvbihpdGVtLGluZGV4KSB7XG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKGluZGVudGF0aW9uICsgXCIgXFxcIlwiK2luZGV4K1wiXFxcIiA6IFtcIilcbiAgICAgICAgICAgIHByaW50KGl0ZW0sIGluZGVudGF0aW9uMik7XG4gICAgICAgICAgfSlcbiAgICAgICAgICBjb25zb2xlLmxvZyhpbmRlbnRhdGlvbiArIFwiXSxcIikgIFxuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICBjb25zb2xlLmxvZyhpbmRlbnRhdGlvbiArIFwiIFxcXCJcIitrZXkrXCJcXFwiIDoge1wiKVxuICAgICAgICAgIHByaW50KG5vZGUsIGluZGVudGF0aW9uMik7XG4gICAgICAgICAgY29uc29sZS5sb2coaW5kZW50YXRpb24gKyBcIn0sXCIpICBcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBjb25zb2xlLmxvZyhpbmRlbnRhdGlvbiArIFwifSxcIilcbiAgICB9XG4gICAgY29uc29sZS5sb2coaW5kZW50YXRpb24gKyBcIn0sXCIpXG4gIH1cbn0iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///190\n"); +eval("/* WEBPACK VAR INJECTION */(function(__f__) {\n\nvar nodeToJson = __webpack_require__(/*! ./node2json */ 199);\nvar xmlToNodeobj = __webpack_require__(/*! ./xmlstr2xmlnode */ 201);\nvar x2xmlnode = __webpack_require__(/*! ./xmlstr2xmlnode */ 201);\nvar buildOptions = __webpack_require__(/*! ./util */ 200).buildOptions;\nvar validator = __webpack_require__(/*! ./validator */ 203);\nexports.parse = function (xmlData, options, validationOption) {\n if (validationOption) {\n if (validationOption === true) validationOption = {};\n var result = validator.validate(xmlData, validationOption);\n if (result !== true) {\n throw Error(result.err.msg);\n }\n }\n options = buildOptions(options, x2xmlnode.defaultOptions, x2xmlnode.props);\n var traversableObj = xmlToNodeobj.getTraversalObj(xmlData, options);\n //print(traversableObj, \" \");\n return nodeToJson.convertToJson(traversableObj, options);\n};\nexports.convertTonimn = __webpack_require__(/*! ../src/nimndata */ 204).convert2nimn;\nexports.getTraversalObj = xmlToNodeobj.getTraversalObj;\nexports.convertToJson = nodeToJson.convertToJson;\nexports.convertToJsonString = __webpack_require__(/*! ./node2json_str */ 205).convertToJsonString;\nexports.validate = validator.validate;\nexports.j2xParser = __webpack_require__(/*! ./json2xml */ 206);\nexports.parseToNimn = function (xmlData, schema, options) {\n return exports.convertTonimn(exports.getTraversalObj(xmlData, options), schema, options);\n};\nfunction print(xmlNode, indentation) {\n if (xmlNode) {\n __f__(\"log\", indentation + \"{\", \" at static/fast-xml-parser/src/parser.js:36\");\n __f__(\"log\", indentation + \" \\\"tagName\\\": \\\"\" + xmlNode.tagname + \"\\\", \", \" at static/fast-xml-parser/src/parser.js:37\");\n if (xmlNode.parent) {\n __f__(\"log\", indentation + \" \\\"parent\\\": \\\"\" + xmlNode.parent.tagname + \"\\\", \", \" at static/fast-xml-parser/src/parser.js:39\");\n }\n __f__(\"log\", indentation + \" \\\"val\\\": \\\"\" + xmlNode.val + \"\\\", \", \" at static/fast-xml-parser/src/parser.js:41\");\n __f__(\"log\", indentation + \" \\\"attrs\\\": \" + JSON.stringify(xmlNode.attrsMap, null, 4) + \", \", \" at static/fast-xml-parser/src/parser.js:42\");\n if (xmlNode.child) {\n __f__(\"log\", indentation + \"\\\"child\\\": {\", \" at static/fast-xml-parser/src/parser.js:45\");\n var indentation2 = indentation + indentation;\n Object.keys(xmlNode.child).forEach(function (key) {\n var node = xmlNode.child[key];\n if (Array.isArray(node)) {\n __f__(\"log\", indentation + \"\\\"\" + key + \"\\\" :[\", \" at static/fast-xml-parser/src/parser.js:51\");\n node.forEach(function (item, index) {\n //console.log(indentation + \" \\\"\"+index+\"\\\" : [\")\n print(item, indentation2);\n });\n __f__(\"log\", indentation + \"],\", \" at static/fast-xml-parser/src/parser.js:56\");\n } else {\n __f__(\"log\", indentation + \" \\\"\" + key + \"\\\" : {\", \" at static/fast-xml-parser/src/parser.js:58\");\n print(node, indentation2);\n __f__(\"log\", indentation + \"},\", \" at static/fast-xml-parser/src/parser.js:60\");\n }\n });\n __f__(\"log\", indentation + \"},\", \" at static/fast-xml-parser/src/parser.js:63\");\n }\n __f__(\"log\", indentation + \"},\", \" at static/fast-xml-parser/src/parser.js:65\");\n }\n}\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/vue-cli-plugin-uni/lib/format-log.js */ 21)[\"default\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vc3RhdGljL2Zhc3QteG1sLXBhcnNlci9zcmMvcGFyc2VyLmpzIl0sIm5hbWVzIjpbIm5vZGVUb0pzb24iLCJyZXF1aXJlIiwieG1sVG9Ob2Rlb2JqIiwieDJ4bWxub2RlIiwiYnVpbGRPcHRpb25zIiwidmFsaWRhdG9yIiwiZXhwb3J0cyIsInBhcnNlIiwieG1sRGF0YSIsIm9wdGlvbnMiLCJ2YWxpZGF0aW9uT3B0aW9uIiwicmVzdWx0IiwidmFsaWRhdGUiLCJFcnJvciIsImVyciIsIm1zZyIsImRlZmF1bHRPcHRpb25zIiwicHJvcHMiLCJ0cmF2ZXJzYWJsZU9iaiIsImdldFRyYXZlcnNhbE9iaiIsImNvbnZlcnRUb0pzb24iLCJjb252ZXJ0VG9uaW1uIiwiY29udmVydDJuaW1uIiwiY29udmVydFRvSnNvblN0cmluZyIsImoyeFBhcnNlciIsInBhcnNlVG9OaW1uIiwic2NoZW1hIiwicHJpbnQiLCJ4bWxOb2RlIiwiaW5kZW50YXRpb24iLCJ0YWduYW1lIiwicGFyZW50IiwidmFsIiwiSlNPTiIsInN0cmluZ2lmeSIsImF0dHJzTWFwIiwiY2hpbGQiLCJpbmRlbnRhdGlvbjIiLCJPYmplY3QiLCJrZXlzIiwiZm9yRWFjaCIsImtleSIsIm5vZGUiLCJBcnJheSIsImlzQXJyYXkiLCJpdGVtIiwiaW5kZXgiXSwibWFwcGluZ3MiOiJBQUFBLDZDQUFhOztBQUViLElBQU1BLFVBQVUsR0FBR0MsbUJBQU8sQ0FBQyxzQkFBYSxDQUFDO0FBQ3pDLElBQU1DLFlBQVksR0FBR0QsbUJBQU8sQ0FBQywyQkFBa0IsQ0FBQztBQUNoRCxJQUFNRSxTQUFTLEdBQUdGLG1CQUFPLENBQUMsMkJBQWtCLENBQUM7QUFDN0MsSUFBTUcsWUFBWSxHQUFHSCxtQkFBTyxDQUFDLGlCQUFRLENBQUMsQ0FBQ0csWUFBWTtBQUNuRCxJQUFNQyxTQUFTLEdBQUdKLG1CQUFPLENBQUMsc0JBQWEsQ0FBQztBQUV4Q0ssT0FBTyxDQUFDQyxLQUFLLEdBQUcsVUFBU0Ms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LENBQUUsVUFBU0ssSUFBSSxFQUFDQyxLQUFLLEVBQUU7WUFDakM7WUFDQW5CLEtBQUssQ0FBQ2tCLElBQUksRUFBRVIsWUFBWSxDQUFDO1VBQzNCLENBQUMsQ0FBQztVQUNGLGFBQVlSLFdBQVcsR0FBRyxJQUFJO1FBQ2hDLENBQUMsTUFBSTtVQUNILGFBQVlBLFdBQVcsR0FBRyxLQUFLLEdBQUNZLEdBQUcsR0FBQyxRQUFRO1VBQzVDZCxLQUFLLENBQUNlLElBQUksRUFBRUwsWUFBWSxDQUFDO1VBQ3pCLGFBQVlSLFdBQVcsR0FBRyxJQUFJO1FBQ2hDO01BQ0YsQ0FBQyxDQUFDO01BQ0YsYUFBWUEsV0FBVyxHQUFHLElBQUk7SUFDaEM7SUFDQSxhQUFZQSxXQUFXLEdBQUcsSUFBSTtFQUNoQztBQUNGLEMiLCJmaWxlIjoiMTk4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBub2RlVG9Kc29uID0gcmVxdWlyZSgnLi9ub2RlMmpzb24nKTtcbmNvbnN0IHhtbFRvTm9kZW9iaiA9IHJlcXVpcmUoJy4veG1sc3RyMnhtbG5vZGUnKTtcbmNvbnN0IHgyeG1sbm9kZSA9IHJlcXVpcmUoJy4veG1sc3RyMnhtbG5vZGUnKTtcbmNvbnN0IGJ1aWxkT3B0aW9ucyA9IHJlcXVpcmUoJy4vdXRpbCcpLmJ1aWxkT3B0aW9ucztcbmNvbnN0IHZhbGlkYXRvciA9IHJlcXVpcmUoJy4vdmFsaWRhdG9yJyk7XG5cbmV4cG9ydHMucGFyc2UgPSBmdW5jdGlvbih4bWxEYXRhLCBvcHRpb25zLCB2YWxpZGF0aW9uT3B0aW9uKSB7XG4gIGlmKCB2YWxpZGF0aW9uT3B0aW9uKXtcbiAgICBpZih2YWxpZGF0aW9uT3B0aW9uID09PSB0cnVlKSB2YWxpZGF0aW9uT3B0aW9uID0ge31cbiAgICBcbiAgICBjb25zdCByZXN1bHQgPSB2YWxpZGF0b3IudmFsaWRhdGUoeG1sRGF0YSwgdmFsaWRhdGlvbk9wdGlvbik7XG4gICAgaWYgKHJlc3VsdCAhPT0gdHJ1ZSkge1xuICAgICAgdGhyb3cgRXJyb3IoIHJlc3VsdC5lcnIubXNnKVxuICAgIH1cbiAgfVxuICBvcHRpb25zID0gYnVpbGRPcHRpb25zKG9wdGlvbnMsIHgyeG1sbm9kZS5kZWZhdWx0T3B0aW9ucywgeDJ4bWxub2RlLnByb3BzKTtcbiAgY29uc3QgdHJhdmVyc2FibGVPYmogPSB4bWxUb05vZGVvYmouZ2V0VHJhdmVyc2FsT2JqKHhtbERhdGEsIG9wdGlvbnMpXG4gIC8vcHJpbnQodHJhdmVyc2FibGVPYmosIFwiICBcIik7XG4gIHJldHVybiBub2RlVG9Kc29uLmNvbnZlcnRUb0pzb24odHJhdmVyc2FibGVPYmosIG9wdGlvbnMpO1xufTtcbmV4cG9ydHMuY29udmVydFRvbmltbiA9IHJlcXVpcmUoJy4uL3NyYy9uaW1uZGF0YScpLmNvbnZlcnQybmltbjtcbmV4cG9ydHMuZ2V0VHJhdmVyc2FsT2JqID0geG1sVG9Ob2Rlb2JqLmdldFRyYXZlcnNhbE9iajtcbmV4cG9ydHMuY29udmVydFRvSnNvbiA9IG5vZGVUb0pzb24uY29udmVydFRvSnNvbjtcbmV4cG9ydHMuY29udmVydFRvSnNvblN0cmluZyA9IHJlcXVpcmUoJy4vbm9kZTJqc29uX3N0cicpLmNvbnZlcnRUb0pzb25TdHJpbmc7XG5leHBvcnRzLnZhbGlkYXRlID0gdmFsaWRhdG9yLnZhbGlkYXRlO1xuZXhwb3J0cy5qMnhQYXJzZXIgPSByZXF1aXJlKCcuL2pzb24yeG1sJyk7XG5leHBvcnRzLnBhcnNlVG9OaW1uID0gZnVuY3Rpb24oeG1sRGF0YSwgc2NoZW1hLCBvcHRpb25zKSB7XG4gIHJldHVybiBleHBvcnRzLmNvbnZlcnRUb25pbW4oZXhwb3J0cy5nZXRUcmF2ZXJzYWxPYmooeG1sRGF0YSwgb3B0aW9ucyksIHNjaGVtYSwgb3B0aW9ucyk7XG59O1xuXG5cbmZ1bmN0aW9uIHByaW50KHhtbE5vZGUsIGluZGVudGF0aW9uKXtcbiAgaWYoeG1sTm9kZSl7XG4gICAgY29uc29sZS5sb2coaW5kZW50YXRpb24gKyBcIntcIilcbiAgICBjb25zb2xlLmxvZyhpbmRlbnRhdGlvbiArIFwiICBcXFwidGFnTmFtZVxcXCI6IFxcXCJcIiArIHhtbE5vZGUudGFnbmFtZSArIFwiXFxcIiwgXCIpO1xuICAgIGlmKHhtbE5vZGUucGFyZW50KXtcbiAgICAgIGNvbnNvbGUubG9nKGluZGVudGF0aW9uICsgXCIgIFxcXCJwYXJlbnRcXFwiOiBcXFwiXCIgKyB4bWxOb2RlLnBhcmVudC50YWduYW1lICArIFwiXFxcIiwgXCIpO1xuICAgIH1cbiAgICBjb25zb2xlLmxvZyhpbmRlbnRhdGlvbiArIFwiICBcXFwidmFsXFxcIjogXFxcIlwiICsgeG1sTm9kZS52YWwgICsgXCJcXFwiLCBcIik7XG4gICAgY29uc29sZS5sb2coaW5kZW50YXRpb24gKyBcIiAgXFxcImF0dHJzXFxcIjogXCIgKyBKU09OLnN0cmluZ2lmeSh4bWxOb2RlLmF0dHJzTWFwLG51bGwsNCkgICsgXCIsIFwiKTtcblxuICAgIGlmKHhtbE5vZGUuY2hpbGQpe1xuICAgICAgY29uc29sZS5sb2coaW5kZW50YXRpb24gKyBcIlxcXCJjaGlsZFxcXCI6IHtcIilcbiAgICAgIGNvbnN0IGluZGVudGF0aW9uMiA9IGluZGVudGF0aW9uICsgaW5kZW50YXRpb247XG4gICAgICBPYmplY3Qua2V5cyh4bWxOb2RlLmNoaWxkKS5mb3JFYWNoKCBmdW5jdGlvbihrZXkpIHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IHhtbE5vZGUuY2hpbGRba2V5XTtcblxuICAgICAgICBpZihBcnJheS5pc0FycmF5KG5vZGUpKXtcbiAgICAgICAgICBjb25zb2xlLmxvZyhpbmRlbnRhdGlvbiArICBcIlxcXCJcIitrZXkrXCJcXFwiIDpbXCIpXG4gICAgICAgICAgbm9kZS5mb3JFYWNoKCBmdW5jdGlvbihpdGVtLGluZGV4KSB7XG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKGluZGVudGF0aW9uICsgXCIgXFxcIlwiK2luZGV4K1wiXFxcIiA6IFtcIilcbiAgICAgICAgICAgIHByaW50KGl0ZW0sIGluZGVudGF0aW9uMik7XG4gICAgICAgICAgfSlcbiAgICAgICAgICBjb25zb2xlLmxvZyhpbmRlbnRhdGlvbiArIFwiXSxcIikgIFxuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICBjb25zb2xlLmxvZyhpbmRlbnRhdGlvbiArIFwiIFxcXCJcIitrZXkrXCJcXFwiIDoge1wiKVxuICAgICAgICAgIHByaW50KG5vZGUsIGluZGVudGF0aW9uMik7XG4gICAgICAgICAgY29uc29sZS5sb2coaW5kZW50YXRpb24gKyBcIn0sXCIpICBcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBjb25zb2xlLmxvZyhpbmRlbnRhdGlvbiArIFwifSxcIilcbiAgICB9XG4gICAgY29uc29sZS5sb2coaW5kZW50YXRpb24gKyBcIn0sXCIpXG4gIH1cbn0iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///198\n"); /***/ }), -/* 191 */ +/* 199 */ /*!******************************************************************!*\ !*** D:/里海数字乡村/xunfeiAi/static/fast-xml-parser/src/node2json.js ***! \******************************************************************/ @@ -24946,10 +25135,10 @@ eval("/* WEBPACK VAR INJECTION */(function(__f__) {\n\nvar nodeToJson = __webpac /***/ (function(module, exports, __webpack_require__) { "use strict"; -eval("\n\nvar _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ 4);\nvar util = __webpack_require__(/*! ./util */ 192);\nvar convertToJson = function convertToJson(node, options) {\n var jObj = {};\n\n //when no child node or attr is present\n if ((!node.child || util.isEmptyObject(node.child)) && (!node.attrsMap || util.isEmptyObject(node.attrsMap))) {\n return util.isExist(node.val) ? node.val : '';\n } else {\n //otherwise create a textnode if node has some text\n if (util.isExist(node.val)) {\n if (!(typeof node.val === 'string' && (node.val === '' || node.val === options.cdataPositionChar))) {\n if (options.arrayMode === \"strict\") {\n jObj[options.textNodeName] = [node.val];\n } else {\n jObj[options.textNodeName] = node.val;\n }\n }\n }\n }\n util.merge(jObj, node.attrsMap, options.arrayMode);\n var keys = Object.keys(node.child);\n for (var index = 0; index < keys.length; index++) {\n var tagname = keys[index];\n if (node.child[tagname] && node.child[tagname].length > 1) {\n jObj[tagname] = [];\n for (var tag in node.child[tagname]) {\n jObj[tagname].push(convertToJson(node.child[tagname][tag], options));\n }\n } else {\n if (options.arrayMode === true) {\n var result = convertToJson(node.child[tagname][0], options);\n if (_typeof(result) === 'object') jObj[tagname] = [result];else jObj[tagname] = result;\n } else if (options.arrayMode === \"strict\") {\n jObj[tagname] = [convertToJson(node.child[tagname][0], options)];\n } else {\n jObj[tagname] = convertToJson(node.child[tagname][0], options);\n }\n }\n }\n\n //add value\n return jObj;\n};\nexports.convertToJson = convertToJson;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vc3RhdGljL2Zhc3QteG1sLXBhcnNlci9zcmMvbm9kZTJqc29uLmpzIl0sIm5hbWVzIjpbInV0aWwiLCJyZXF1aXJlIiwiY29udmVydFRvSnNvbiIsIm5vZGUiLCJvcHRpb25zIiwiak9iaiIsImNoaWxkIiwiaXNFbXB0eU9iamVjdCIsImF0dHJzTWFwIiwiaXNFeGlzdCIsInZhbCIsImNkYXRhUG9zaXRpb25DaGFyIiwiYXJyYXlNb2RlIiwidGV4dE5vZGVOYW1lIiwibWVyZ2UiLCJrZXlzIiwiT2JqZWN0IiwiaW5kZXgiLCJsZW5ndGgiLCJ0YWduYW1lIiwidGFnIiwicHVzaCIsInJlc3VsdCIsImV4cG9ydHMiXSwibWFwcGluZ3MiOiJBQUFhOztBQUFBO0FBRWIsSUFBTUEsSUFBSSxHQUFHQyxtQkFBTyxDQUFDLGlCQUFRLENBQUM7QUFFOUIsSUFBTUMsYUFBYSxHQUFHLFNBQWhCQSxhQUFhLENBQVlDLElBQUksRUFBRUMsT0FBTyxFQUFFO0VBQzVDLElBQU1DLElBQUksR0FBRyxDQUFDLENBQUM7O0VBRWY7RUFDQSxJQUFJLENBQUMsQ0FBQ0YsSUFBSSxDQUFDRyxLQUFLLElBQUlOLElBQUksQ0FBQ08sYUFBYSxDQUFDSixJQUFJLENBQUNHLEtBQUssQ0FBQyxNQUFNLENBQUNILElBQUksQ0FBQ0ssUUFBUSxJQUFJUixJQUFJLENBQUNPLGFBQWEsQ0FBQ0osSUFBSSxDQUFDSyxRQUFRLENBQUMsQ0FBQyxFQUFFO0lBQzVHLE9BQU9SLElBQUksQ0FBQ1MsT0FBTyxDQUFDTixJQUFJLENBQUNPLEdBQUcsQ0FBQyxHQUFHUCxJQUFJLENBQUNPLEdBQUcsR0FBRyxFQUFFO0VBQy9DLENBQUMsTUFBTTtJQUNMO0lBQ0EsSUFBSVYsSUFBSSxDQUFDUyxPQUFPLENBQUNOLElBQUksQ0FBQ08sR0FBRyxDQUFDLEVBQUU7TUFDMUIsSUFBSSxFQUFFLE9BQU9QLElBQUksQ0FBQ08sR0FBRyxLQUFLLFFBQVEsS0FBS1AsSUFBSSxDQUFDTyxHQUFHLEtBQUssRUFBRSxJQUFJUCxJQUFJLENBQUNPLEdBQUcsS0FBS04sT0FBTyxDQUFDTyxpQkFBaUIsQ0FBQyxDQUFDLEVBQUU7UUFDbEcsSUFBR1AsT0FBTyxDQUFDUSxTQUFTLEtBQUssUUFBUSxFQUFDO1VBQ2hDUCxJQUFJLENBQUNELE9BQU8sQ0FBQ1MsWUFBWSxDQUFDLEdBQUcsQ0FBRVYsSUFBSSxDQUFDTyxHQUFHLENBQUU7UUFDM0MsQ0FBQyxNQUFJO1VBQ0hMLElBQUksQ0FBQ0QsT0FBTyxDQUFDUyxZQUFZLENBQUMsR0FBR1YsSUFBSSxDQUFDTyxHQUFHO1FBQ3ZDO01BQ0Y7SUFDRjtFQUNGO0VBRUFWLElBQUksQ0FBQ2MsS0FBSyxDQUFDVCxJQUFJLEVBQUVGLElBQUksQ0FBQ0ssUUFBUSxFQUFFSixPQUFPLENBQUNRLFNBQVMsQ0FBQztFQUVsRCxJQUFNRyxJQUFJLEdBQUdDLE1BQU0sQ0FBQ0QsSUFBSSxDQUFDWixJQUFJLENBQUNHLEtBQUssQ0FBQztFQUNwQyxLQUFLLElBQUlXLEtBQUssR0FBRyxDQUFDLEVBQUVBLEtBQUssR0FBR0YsSUFBSSxDQUFDRyxNQUFNLEVBQUVELEtBQUssRUFBRSxFQUFFO0lBQ2hELElBQUlFLE9BQU8sR0FBR0osSUFBSSxDQUFDRSxLQUFLLENBQUM7SUFDekIsSUFBSWQsSUFBSSxDQUFDRyxLQUFLLENBQUNhLE9BQU8sQ0FBQyxJQUFJaEIsSUFBSSxDQUFDRyxLQUFLLENBQUNhLE9BQU8sQ0FBQyxDQUFDRCxNQUFNLEdBQUcsQ0FBQyxFQUFFO01BQ3pEYixJQUFJLENBQUNjLE9BQU8sQ0FBQyxHQUFHLEVBQUU7TUFDbEIsS0FBSyxJQUFJQyxHQUFHLElBQUlqQixJQUFJLENBQUNHLEtBQUssQ0FBQ2EsT0FBTyxDQUFDLEVBQUU7UUFDbkNkLElBQUksQ0FBQ2MsT0FBTyxDQUFDLENBQUNFLElBQUksQ0FBQ25CLGFBQWEsQ0FBQ0MsSUFBSSxDQUFDRyxLQUFLLENBQUNhLE9BQU8sQ0FBQyxDQUFDQyxHQUFHLENBQUMsRUFBRWhCLE9BQU8sQ0FBQyxDQUFDO01BQ3RFO0lBQ0YsQ0FBQyxNQUFNO01BQ0wsSUFBR0EsT0FBTyxDQUFDUSxTQUFTLEtBQUssSUFBSSxFQUFDO1FBQzVCLElBQU1VLE1BQU0sR0FBR3BCLGFBQWEsQ0FBQ0MsSUFBSSxDQUFDRyxLQUFLLENBQUNhLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFZixPQUFPLENBQUM7UUFDN0QsSUFBRyxRQUFPa0IsTUFBTSxNQUFLLFFBQVEsRUFDM0JqQixJQUFJLENBQUNjLE9BQU8sQ0FBQyxHQUFHLENBQUVHLE1BQU0sQ0FBRSxDQUFDLEtBRTNCakIsSUFBSSxDQUFDYyxPQUFPLENBQUMsR0FBR0csTUFBTTtNQUMxQixDQUFDLE1BQUssSUFBR2xCLE9BQU8sQ0FBQ1EsU0FBUyxLQUFLLFFBQVEsRUFBQztRQUN0Q1AsSUFBSSxDQUFDYyxPQUFPLENBQUMsR0FBRyxDQUFDakIsYUFBYSxDQUFDQyxJQUFJLENBQUNHLEtBQUssQ0FBQ2EsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUVmLE9BQU8sQ0FBQyxDQUFFO01BQ25FLENBQUMsTUFBSTtRQUNIQyxJQUFJLENBQUNjLE9BQU8sQ0FBQyxHQUFHakIsYUFBYSxDQUFDQyxJQUFJLENBQUNHLEtBQUssQ0FBQ2EsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUVmLE9BQU8sQ0FBQztNQUNoRTtJQUNGO0VBQ0Y7O0VBRUE7RUFDQSxPQUFPQyxJQUFJO0FBQ2IsQ0FBQztBQUVEa0IsT0FBTyxDQUFDckIsYUFBYSxHQUFHQSxhQUFhIiwiZmlsZSI6IjE5MS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpO1xuXG5jb25zdCBjb252ZXJ0VG9Kc29uID0gZnVuY3Rpb24obm9kZSwgb3B0aW9ucykge1xuICBjb25zdCBqT2JqID0ge307XG5cbiAgLy93aGVuIG5vIGNoaWxkIG5vZGUgb3IgYXR0ciBpcyBwcmVzZW50XG4gIGlmICgoIW5vZGUuY2hpbGQgfHwgdXRpbC5pc0VtcHR5T2JqZWN0KG5vZGUuY2hpbGQpKSAmJiAoIW5vZGUuYXR0cnNNYXAgfHwgdXRpbC5pc0VtcHR5T2JqZWN0KG5vZGUuYXR0cnNNYXApKSkge1xuICAgIHJldHVybiB1dGlsLmlzRXhpc3Qobm9kZS52YWwpID8gbm9kZS52YWwgOiAnJztcbiAgfSBlbHNlIHtcbiAgICAvL290aGVyd2lzZSBjcmVhdGUgYSB0ZXh0bm9kZSBpZiBub2RlIGhhcyBzb21lIHRleHRcbiAgICBpZiAodXRpbC5pc0V4aXN0KG5vZGUudmFsKSkge1xuICAgICAgaWYgKCEodHlwZW9mIG5vZGUudmFsID09PSAnc3RyaW5nJyAmJiAobm9kZS52YWwgPT09ICcnIHx8IG5vZGUudmFsID09PSBvcHRpb25zLmNkYXRhUG9zaXRpb25DaGFyKSkpIHtcbiAgICAgICAgaWYob3B0aW9ucy5hcnJheU1vZGUgPT09IFwic3RyaWN0XCIpe1xuICAgICAgICAgIGpPYmpbb3B0aW9ucy50ZXh0Tm9kZU5hbWVdID0gWyBub2RlLnZhbCBdO1xuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICBqT2JqW29wdGlvbnMudGV4dE5vZGVOYW1lXSA9IG5vZGUudmFsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdXRpbC5tZXJnZShqT2JqLCBub2RlLmF0dHJzTWFwLCBvcHRpb25zLmFycmF5TW9kZSk7XG5cbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG5vZGUuY2hpbGQpO1xuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwga2V5cy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICB2YXIgdGFnbmFtZSA9IGtleXNbaW5kZXhdO1xuICAgIGlmIChub2RlLmNoaWxkW3RhZ25hbWVdICYmIG5vZGUuY2hpbGRbdGFnbmFtZV0ubGVuZ3RoID4gMSkge1xuICAgICAgak9ialt0YWduYW1lXSA9IFtdO1xuICAgICAgZm9yICh2YXIgdGFnIGluIG5vZGUuY2hpbGRbdGFnbmFtZV0pIHtcbiAgICAgICAgak9ialt0YWduYW1lXS5wdXNoKGNvbnZlcnRUb0pzb24obm9kZS5jaGlsZFt0YWduYW1lXVt0YWddLCBvcHRpb25zKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmKG9wdGlvbnMuYXJyYXlNb2RlID09PSB0cnVlKXtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gY29udmVydFRvSnNvbihub2RlLmNoaWxkW3RhZ25hbWVdWzBdLCBvcHRpb25zKVxuICAgICAgICBpZih0eXBlb2YgcmVzdWx0ID09PSAnb2JqZWN0JylcbiAgICAgICAgICBqT2JqW3RhZ25hbWVdID0gWyByZXN1bHQgXTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIGpPYmpbdGFnbmFtZV0gPSByZXN1bHQ7XG4gICAgICB9ZWxzZSBpZihvcHRpb25zLmFycmF5TW9kZSA9PT0gXCJzdHJpY3RcIil7XG4gICAgICAgIGpPYmpbdGFnbmFtZV0gPSBbY29udmVydFRvSnNvbihub2RlLmNoaWxkW3RhZ25hbWVdWzBdLCBvcHRpb25zKSBdO1xuICAgICAgfWVsc2V7XG4gICAgICAgIGpPYmpbdGFnbmFtZV0gPSBjb252ZXJ0VG9Kc29uKG5vZGUuY2hpbGRbdGFnbmFtZV1bMF0sIG9wdGlvbnMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vYWRkIHZhbHVlXG4gIHJldHVybiBqT2JqO1xufTtcblxuZXhwb3J0cy5jb252ZXJ0VG9Kc29uID0gY29udmVydFRvSnNvbjtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///191\n"); +eval("\n\nvar _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ 4);\nvar util = __webpack_require__(/*! ./util */ 200);\nvar convertToJson = function convertToJson(node, options) {\n var jObj = {};\n\n //when no child node or attr is present\n if ((!node.child || util.isEmptyObject(node.child)) && (!node.attrsMap || util.isEmptyObject(node.attrsMap))) {\n return util.isExist(node.val) ? node.val : '';\n } else {\n //otherwise create a textnode if node has some text\n if (util.isExist(node.val)) {\n if (!(typeof node.val === 'string' && (node.val === '' || node.val === options.cdataPositionChar))) {\n if (options.arrayMode === \"strict\") {\n jObj[options.textNodeName] = [node.val];\n } else {\n jObj[options.textNodeName] = node.val;\n }\n }\n }\n }\n util.merge(jObj, node.attrsMap, options.arrayMode);\n var keys = Object.keys(node.child);\n for (var index = 0; index < keys.length; index++) {\n var tagname = keys[index];\n if (node.child[tagname] && node.child[tagname].length > 1) {\n jObj[tagname] = [];\n for (var tag in node.child[tagname]) {\n jObj[tagname].push(convertToJson(node.child[tagname][tag], options));\n }\n } else {\n if (options.arrayMode === true) {\n var result = convertToJson(node.child[tagname][0], options);\n if (_typeof(result) === 'object') jObj[tagname] = [result];else jObj[tagname] = result;\n } else if (options.arrayMode === \"strict\") {\n jObj[tagname] = [convertToJson(node.child[tagname][0], options)];\n } else {\n jObj[tagname] = convertToJson(node.child[tagname][0], options);\n }\n }\n }\n\n //add value\n return jObj;\n};\nexports.convertToJson = convertToJson;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vc3RhdGljL2Zhc3QteG1sLXBhcnNlci9zcmMvbm9kZTJqc29uLmpzIl0sIm5hbWVzIjpbInV0aWwiLCJyZXF1aXJlIiwiY29udmVydFRvSnNvbiIsIm5vZGUiLCJvcHRpb25zIiwiak9iaiIsImNoaWxkIiwiaXNFbXB0eU9iamVjdCIsImF0dHJzTWFwIiwiaXNFeGlzdCIsInZhbCIsImNkYXRhUG9zaXRpb25DaGFyIiwiYXJyYXlNb2RlIiwidGV4dE5vZGVOYW1lIiwibWVyZ2UiLCJrZXlzIiwiT2JqZWN0IiwiaW5kZXgiLCJsZW5ndGgiLCJ0YWduYW1lIiwidGFnIiwicHVzaCIsInJlc3VsdCIsImV4cG9ydHMiXSwibWFwcGluZ3MiOiJBQUFhOztBQUFBO0FBRWIsSUFBTUEsSUFBSSxHQUFHQyxtQkFBTyxDQUFDLGlCQUFRLENBQUM7QUFFOUIsSUFBTUMsYUFBYSxHQUFHLFNBQWhCQSxhQUFhLENBQVlDLElBQUksRUFBRUMsT0FBTyxFQUFFO0VBQzVDLElBQU1DLElBQUksR0FBRyxDQUFDLENBQUM7O0VBRWY7RUFDQSxJQUFJLENBQUMsQ0FBQ0YsSUFBSSxDQUFDRyxLQUFLLElBQUlOLElBQUksQ0FBQ08sYUFBYSxDQUFDSixJQUFJLENBQUNHLEtBQUssQ0FBQyxNQUFNLENBQUNILElBQUksQ0FBQ0ssUUFBUSxJQUFJUixJQUFJLENBQUNPLGFBQWEsQ0FBQ0osSUFBSSxDQUFDSyxRQUFRLENBQUMsQ0FBQyxFQUFFO0lBQzVHLE9BQU9SLElBQUksQ0FBQ1MsT0FBTyxDQUFDTixJQUFJLENBQUNPLEdBQUcsQ0FBQyxHQUFHUCxJQUFJLENBQUNPLEdBQUcsR0FBRyxFQUFFO0VBQy9DLENBQUMsTUFBTTtJQUNMO0lBQ0EsSUFBSVYsSUFBSSxDQUFDUyxPQUFPLENBQUNOLElBQUksQ0FBQ08sR0FBRyxDQUFDLEVBQUU7TUFDMUIsSUFBSSxFQUFFLE9BQU9QLElBQUksQ0FBQ08sR0FBRyxLQUFLLFFBQVEsS0FBS1AsSUFBSSxDQUFDTyxHQUFHLEtBQUssRUFBRSxJQUFJUCxJQUFJLENBQUNPLEdBQUcsS0FBS04sT0FBTyxDQUFDTyxpQkFBaUIsQ0FBQyxDQUFDLEVBQUU7UUFDbEcsSUFBR1AsT0FBTyxDQUFDUSxTQUFTLEtBQUssUUFBUSxFQUFDO1VBQ2hDUCxJQUFJLENBQUNELE9BQU8sQ0FBQ1MsWUFBWSxDQUFDLEdBQUcsQ0FBRVYsSUFBSSxDQUFDTyxHQUFHLENBQUU7UUFDM0MsQ0FBQyxNQUFJO1VBQ0hMLElBQUksQ0FBQ0QsT0FBTyxDQUFDUyxZQUFZLENBQUMsR0FBR1YsSUFBSSxDQUFDTyxHQUFHO1FBQ3ZDO01BQ0Y7SUFDRjtFQUNGO0VBRUFWLElBQUksQ0FBQ2MsS0FBSyxDQUFDVCxJQUFJLEVBQUVGLElBQUksQ0FBQ0ssUUFBUSxFQUFFSixPQUFPLENBQUNRLFNBQVMsQ0FBQztFQUVsRCxJQUFNRyxJQUFJLEdBQUdDLE1BQU0sQ0FBQ0QsSUFBSSxDQUFDWixJQUFJLENBQUNHLEtBQUssQ0FBQztFQUNwQyxLQUFLLElBQUlXLEtBQUssR0FBRyxDQUFDLEVBQUVBLEtBQUssR0FBR0YsSUFBSSxDQUFDRyxNQUFNLEVBQUVELEtBQUssRUFBRSxFQUFFO0lBQ2hELElBQUlFLE9BQU8sR0FBR0osSUFBSSxDQUFDRSxLQUFLLENBQUM7SUFDekIsSUFBSWQsSUFBSSxDQUFDRyxLQUFLLENBQUNhLE9BQU8sQ0FBQyxJQUFJaEIsSUFBSSxDQUFDRyxLQUFLLENBQUNhLE9BQU8sQ0FBQyxDQUFDRCxNQUFNLEdBQUcsQ0FBQyxFQUFFO01BQ3pEYixJQUFJLENBQUNjLE9BQU8sQ0FBQyxHQUFHLEVBQUU7TUFDbEIsS0FBSyxJQUFJQyxHQUFHLElBQUlqQixJQUFJLENBQUNHLEtBQUssQ0FBQ2EsT0FBTyxDQUFDLEVBQUU7UUFDbkNkLElBQUksQ0FBQ2MsT0FBTyxDQUFDLENBQUNFLElBQUksQ0FBQ25CLGFBQWEsQ0FBQ0MsSUFBSSxDQUFDRyxLQUFLLENBQUNhLE9BQU8sQ0FBQyxDQUFDQyxHQUFHLENBQUMsRUFBRWhCLE9BQU8sQ0FBQyxDQUFDO01BQ3RFO0lBQ0YsQ0FBQyxNQUFNO01BQ0wsSUFBR0EsT0FBTyxDQUFDUSxTQUFTLEtBQUssSUFBSSxFQUFDO1FBQzVCLElBQU1VLE1BQU0sR0FBR3BCLGFBQWEsQ0FBQ0MsSUFBSSxDQUFDRyxLQUFLLENBQUNhLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFZixPQUFPLENBQUM7UUFDN0QsSUFBRyxRQUFPa0IsTUFBTSxNQUFLLFFBQVEsRUFDM0JqQixJQUFJLENBQUNjLE9BQU8sQ0FBQyxHQUFHLENBQUVHLE1BQU0sQ0FBRSxDQUFDLEtBRTNCakIsSUFBSSxDQUFDYyxPQUFPLENBQUMsR0FBR0csTUFBTTtNQUMxQixDQUFDLE1BQUssSUFBR2xCLE9BQU8sQ0FBQ1EsU0FBUyxLQUFLLFFBQVEsRUFBQztRQUN0Q1AsSUFBSSxDQUFDYyxPQUFPLENBQUMsR0FBRyxDQUFDakIsYUFBYSxDQUFDQyxJQUFJLENBQUNHLEtBQUssQ0FBQ2EsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUVmLE9BQU8sQ0FBQyxDQUFFO01BQ25FLENBQUMsTUFBSTtRQUNIQyxJQUFJLENBQUNjLE9BQU8sQ0FBQyxHQUFHakIsYUFBYSxDQUFDQyxJQUFJLENBQUNHLEtBQUssQ0FBQ2EsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUVmLE9BQU8sQ0FBQztNQUNoRTtJQUNGO0VBQ0Y7O0VBRUE7RUFDQSxPQUFPQyxJQUFJO0FBQ2IsQ0FBQztBQUVEa0IsT0FBTyxDQUFDckIsYUFBYSxHQUFHQSxhQUFhIiwiZmlsZSI6IjE5OS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpO1xuXG5jb25zdCBjb252ZXJ0VG9Kc29uID0gZnVuY3Rpb24obm9kZSwgb3B0aW9ucykge1xuICBjb25zdCBqT2JqID0ge307XG5cbiAgLy93aGVuIG5vIGNoaWxkIG5vZGUgb3IgYXR0ciBpcyBwcmVzZW50XG4gIGlmICgoIW5vZGUuY2hpbGQgfHwgdXRpbC5pc0VtcHR5T2JqZWN0KG5vZGUuY2hpbGQpKSAmJiAoIW5vZGUuYXR0cnNNYXAgfHwgdXRpbC5pc0VtcHR5T2JqZWN0KG5vZGUuYXR0cnNNYXApKSkge1xuICAgIHJldHVybiB1dGlsLmlzRXhpc3Qobm9kZS52YWwpID8gbm9kZS52YWwgOiAnJztcbiAgfSBlbHNlIHtcbiAgICAvL290aGVyd2lzZSBjcmVhdGUgYSB0ZXh0bm9kZSBpZiBub2RlIGhhcyBzb21lIHRleHRcbiAgICBpZiAodXRpbC5pc0V4aXN0KG5vZGUudmFsKSkge1xuICAgICAgaWYgKCEodHlwZW9mIG5vZGUudmFsID09PSAnc3RyaW5nJyAmJiAobm9kZS52YWwgPT09ICcnIHx8IG5vZGUudmFsID09PSBvcHRpb25zLmNkYXRhUG9zaXRpb25DaGFyKSkpIHtcbiAgICAgICAgaWYob3B0aW9ucy5hcnJheU1vZGUgPT09IFwic3RyaWN0XCIpe1xuICAgICAgICAgIGpPYmpbb3B0aW9ucy50ZXh0Tm9kZU5hbWVdID0gWyBub2RlLnZhbCBdO1xuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICBqT2JqW29wdGlvbnMudGV4dE5vZGVOYW1lXSA9IG5vZGUudmFsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdXRpbC5tZXJnZShqT2JqLCBub2RlLmF0dHJzTWFwLCBvcHRpb25zLmFycmF5TW9kZSk7XG5cbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG5vZGUuY2hpbGQpO1xuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwga2V5cy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICB2YXIgdGFnbmFtZSA9IGtleXNbaW5kZXhdO1xuICAgIGlmIChub2RlLmNoaWxkW3RhZ25hbWVdICYmIG5vZGUuY2hpbGRbdGFnbmFtZV0ubGVuZ3RoID4gMSkge1xuICAgICAgak9ialt0YWduYW1lXSA9IFtdO1xuICAgICAgZm9yICh2YXIgdGFnIGluIG5vZGUuY2hpbGRbdGFnbmFtZV0pIHtcbiAgICAgICAgak9ialt0YWduYW1lXS5wdXNoKGNvbnZlcnRUb0pzb24obm9kZS5jaGlsZFt0YWduYW1lXVt0YWddLCBvcHRpb25zKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmKG9wdGlvbnMuYXJyYXlNb2RlID09PSB0cnVlKXtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gY29udmVydFRvSnNvbihub2RlLmNoaWxkW3RhZ25hbWVdWzBdLCBvcHRpb25zKVxuICAgICAgICBpZih0eXBlb2YgcmVzdWx0ID09PSAnb2JqZWN0JylcbiAgICAgICAgICBqT2JqW3RhZ25hbWVdID0gWyByZXN1bHQgXTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIGpPYmpbdGFnbmFtZV0gPSByZXN1bHQ7XG4gICAgICB9ZWxzZSBpZihvcHRpb25zLmFycmF5TW9kZSA9PT0gXCJzdHJpY3RcIil7XG4gICAgICAgIGpPYmpbdGFnbmFtZV0gPSBbY29udmVydFRvSnNvbihub2RlLmNoaWxkW3RhZ25hbWVdWzBdLCBvcHRpb25zKSBdO1xuICAgICAgfWVsc2V7XG4gICAgICAgIGpPYmpbdGFnbmFtZV0gPSBjb252ZXJ0VG9Kc29uKG5vZGUuY2hpbGRbdGFnbmFtZV1bMF0sIG9wdGlvbnMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vYWRkIHZhbHVlXG4gIHJldHVybiBqT2JqO1xufTtcblxuZXhwb3J0cy5jb252ZXJ0VG9Kc29uID0gY29udmVydFRvSnNvbjtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///199\n"); /***/ }), -/* 192 */ +/* 200 */ /*!*************************************************************!*\ !*** D:/里海数字乡村/xunfeiAi/static/fast-xml-parser/src/util.js ***! \*************************************************************/ @@ -24957,10 +25146,10 @@ eval("\n\nvar _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -eval("\n\nvar nameStartChar = \":A-Za-z_\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD\";\nvar nameChar = nameStartChar + \"\\\\-.\\\\d\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040\";\nvar nameRegexp = '[' + nameStartChar + '][' + nameChar + ']*';\nvar regexName = new RegExp('^' + nameRegexp + '$');\nvar getAllMatches = function getAllMatches(string, regex) {\n var matches = [];\n var match = regex.exec(string);\n while (match) {\n var allmatches = [];\n var len = match.length;\n for (var index = 0; index < len; index++) {\n allmatches.push(match[index]);\n }\n matches.push(allmatches);\n match = regex.exec(string);\n }\n return matches;\n};\nvar isName = function isName(string) {\n var match = regexName.exec(string);\n return !(match === null || typeof match === 'undefined');\n};\nexports.isExist = function (v) {\n return typeof v !== 'undefined';\n};\nexports.isEmptyObject = function (obj) {\n return Object.keys(obj).length === 0;\n};\n\n/**\n * Copy all the properties of a into b.\n * @param {*} target\n * @param {*} a\n */\nexports.merge = function (target, a, arrayMode) {\n if (a) {\n var keys = Object.keys(a); // will return an array of own properties\n var len = keys.length; //don't make it inline\n for (var i = 0; i < len; i++) {\n if (arrayMode === 'strict') {\n target[keys[i]] = [a[keys[i]]];\n } else {\n target[keys[i]] = a[keys[i]];\n }\n }\n }\n};\n/* exports.merge =function (b,a){\n return Object.assign(b,a);\n} */\n\nexports.getValue = function (v) {\n if (exports.isExist(v)) {\n return v;\n } else {\n return '';\n }\n};\n\n// const fakeCall = function(a) {return a;};\n// const fakeCallNoReturn = function() {};\n\nexports.buildOptions = function (options, defaultOptions, props) {\n var newOptions = {};\n if (!options) {\n return defaultOptions; //if there are not options\n }\n\n for (var i = 0; i < props.length; i++) {\n if (options[props[i]] !== undefined) {\n newOptions[props[i]] = options[props[i]];\n } else {\n newOptions[props[i]] = defaultOptions[props[i]];\n }\n }\n return newOptions;\n};\nexports.isName = isName;\nexports.getAllMatches = getAllMatches;\nexports.nameRegexp = nameRegexp;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vc3RhdGljL2Zhc3QteG1sLXBhcnNlci9zcmMvdXRpbC5qcyJdLCJuYW1lcyI6WyJuYW1lU3RhcnRDaGFyIiwibmFtZUNoYXIiLCJuYW1lUmVnZXhwIiwicmVnZXhOYW1lIiwiUmVnRXhwIiwiZ2V0QWxsTWF0Y2hlcyIsInN0cmluZyIsInJlZ2V4IiwibWF0Y2hlcyIsIm1hdGNoIiwiZXhlYyIsImFsbG1hdGNoZXMiLCJsZW4iLCJsZW5ndGgiLCJpbmRleCIsInB1c2giLCJpc05hbWUiLCJleHBvcnRzIiwiaXNFeGlzdCIsInYiLCJpc0VtcHR5T2JqZWN0Iiwib2JqIiwiT2JqZWN0Iiwia2V5cyIsIm1lcmdlIiwidGFyZ2V0IiwiYSIsImFycmF5TW9kZSIsImkiLCJnZXRWYWx1ZSIsImJ1aWxkT3B0aW9ucyIsIm9wdGlvbnMiLCJkZWZhdWx0T3B0aW9ucyIsInByb3BzIiwibmV3T3B0aW9ucyIsInVuZGVmaW5lZCJdLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsSUFBTUEsYUFBYSxHQUFHLCtLQUErSztBQUNyTSxJQUFNQyxRQUFRLEdBQUdELGFBQWEsR0FBRyw4Q0FBOEM7QUFDL0UsSUFBTUUsVUFBVSxHQUFHLEdBQUcsR0FBR0YsYUFBYSxHQUFHLElBQUksR0FBR0MsUUFBUSxHQUFHLElBQUk7QUFDL0QsSUFBTUUsU0FBUyxHQUFHLElBQUlDLE1BQU0sQ0FBQyxHQUFHLEdBQUdGLFVBQVUsR0FBRyxHQUFHLENBQUM7QUFFcEQsSUFBTUcsYUFBYSxHQUFHLFNBQWhCQSxhQUFhLENBQVlDLE1BQU0sRUFBRUMsS0FBSyxFQUFFO0VBQzVDLElBQU1DLE9BQU8sR0FBRyxFQUFFO0VBQ2xCLElBQUlDLEtBQUssR0FBR0YsS0FBSyxDQUFDRyxJQUFJLENBQUNKLE1BQU0sQ0FBQztFQUM5QixPQUFPRyxLQUFLLEVBQUU7SUFDWixJQUFNRSxVQUFVLEdBQUcsRUFBRTtJQUNyQixJQUFNQyxHQUFHLEdBQUdILEtBQUssQ0FBQ0ksTUFBTTtJQUN4QixL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RCxLQUFLLENBQUNMLENBQUMsQ0FBQyxDQUFDLEdBQUdJLGNBQWMsQ0FBQ0MsS0FBSyxDQUFDTCxDQUFDLENBQUMsQ0FBQztJQUNqRDtFQUNGO0VBQ0EsT0FBT00sVUFBVTtBQUNuQixDQUFDO0FBRURqQixPQUFPLENBQUNELE1BQU0sR0FBR0EsTUFBTTtBQUN2QkMsT0FBTyxDQUFDWixhQUFhLEdBQUdBLGFBQWE7QUFDckNZLE9BQU8sQ0FBQ2YsVUFBVSxHQUFHQSxVQUFVIiwiZmlsZSI6IjE5Mi5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuY29uc3QgbmFtZVN0YXJ0Q2hhciA9ICc6QS1aYS16X1xcXFx1MDBDMC1cXFxcdTAwRDZcXFxcdTAwRDgtXFxcXHUwMEY2XFxcXHUwMEY4LVxcXFx1MDJGRlxcXFx1MDM3MC1cXFxcdTAzN0RcXFxcdTAzN0YtXFxcXHUxRkZGXFxcXHUyMDBDLVxcXFx1MjAwRFxcXFx1MjA3MC1cXFxcdTIxOEZcXFxcdTJDMDAtXFxcXHUyRkVGXFxcXHUzMDAxLVxcXFx1RDdGRlxcXFx1RjkwMC1cXFxcdUZEQ0ZcXFxcdUZERjAtXFxcXHVGRkZEJztcbmNvbnN0IG5hbWVDaGFyID0gbmFtZVN0YXJ0Q2hhciArICdcXFxcLS5cXFxcZFxcXFx1MDBCN1xcXFx1MDMwMC1cXFxcdTAzNkZcXFxcdTIwM0YtXFxcXHUyMDQwJztcbmNvbnN0IG5hbWVSZWdleHAgPSAnWycgKyBuYW1lU3RhcnRDaGFyICsgJ11bJyArIG5hbWVDaGFyICsgJ10qJ1xuY29uc3QgcmVnZXhOYW1lID0gbmV3IFJlZ0V4cCgnXicgKyBuYW1lUmVnZXhwICsgJyQnKTtcblxuY29uc3QgZ2V0QWxsTWF0Y2hlcyA9IGZ1bmN0aW9uKHN0cmluZywgcmVnZXgpIHtcbiAgY29uc3QgbWF0Y2hlcyA9IFtdO1xuICBsZXQgbWF0Y2ggPSByZWdleC5leGVjKHN0cmluZyk7XG4gIHdoaWxlIChtYXRjaCkge1xuICAgIGNvbnN0IGFsbG1hdGNoZXMgPSBbXTtcbiAgICBjb25zdCBsZW4gPSBtYXRjaC5sZW5ndGg7XG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGxlbjsgaW5kZXgrKykge1xuICAgICAgYWxsbWF0Y2hlcy5wdXNoKG1hdGNoW2luZGV4XSk7XG4gICAgfVxuICAgIG1hdGNoZXMucHVzaChhbGxtYXRjaGVzKTtcbiAgICBtYXRjaCA9IHJlZ2V4LmV4ZWMoc3RyaW5nKTtcbiAgfVxuICByZXR1cm4gbWF0Y2hlcztcbn07XG5cbmNvbnN0IGlzTmFtZSA9IGZ1bmN0aW9uKHN0cmluZykge1xuICBjb25zdCBtYXRjaCA9IHJlZ2V4TmFtZS5leGVjKHN0cmluZyk7XG4gIHJldHVybiAhKG1hdGNoID09PSBudWxsIHx8IHR5cGVvZiBtYXRjaCA9PT0gJ3VuZGVmaW5lZCcpO1xufTtcblxuZXhwb3J0cy5pc0V4aXN0ID0gZnVuY3Rpb24odikge1xuICByZXR1cm4gdHlwZW9mIHYgIT09ICd1bmRlZmluZWQnO1xufTtcblxuZXhwb3J0cy5pc0VtcHR5T2JqZWN0ID0gZnVuY3Rpb24ob2JqKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhvYmopLmxlbmd0aCA9PT0gMDtcbn07XG5cbi8qKlxuICogQ29weSBhbGwgdGhlIHByb3BlcnRpZXMgb2YgYSBpbnRvIGIuXG4gKiBAcGFyYW0geyp9IHRhcmdldFxuICogQHBhcmFtIHsqfSBhXG4gKi9cbmV4cG9ydHMubWVyZ2UgPSBmdW5jdGlvbih0YXJnZXQsIGEsIGFycmF5TW9kZSkge1xuICBpZiAoYSkge1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhhKTsgLy8gd2lsbCByZXR1cm4gYW4gYXJyYXkgb2Ygb3duIHByb3BlcnRpZXNcbiAgICBjb25zdCBsZW4gPSBrZXlzLmxlbmd0aDsgLy9kb24ndCBtYWtlIGl0IGlubGluZVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGlmKGFycmF5TW9kZSA9PT0gJ3N0cmljdCcpe1xuICAgICAgICB0YXJnZXRba2V5c1tpXV0gPSBbIGFba2V5c1tpXV0gXTtcbiAgICAgIH1lbHNle1xuICAgICAgICB0YXJnZXRba2V5c1tpXV0gPSBhW2tleXNbaV1dO1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcbi8qIGV4cG9ydHMubWVyZ2UgPWZ1bmN0aW9uIChiLGEpe1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbihiLGEpO1xufSAqL1xuXG5leHBvcnRzLmdldFZhbHVlID0gZnVuY3Rpb24odikge1xuICBpZiAoZXhwb3J0cy5pc0V4aXN0KHYpKSB7XG4gICAgcmV0dXJuIHY7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG59O1xuXG4vLyBjb25zdCBmYWtlQ2FsbCA9IGZ1bmN0aW9uKGEpIHtyZXR1cm4gYTt9O1xuLy8gY29uc3QgZmFrZUNhbGxOb1JldHVybiA9IGZ1bmN0aW9uKCkge307XG5cbmV4cG9ydHMuYnVpbGRPcHRpb25zID0gZnVuY3Rpb24ob3B0aW9ucywgZGVmYXVsdE9wdGlvbnMsIHByb3BzKSB7XG4gIHZhciBuZXdPcHRpb25zID0ge307XG4gIGlmICghb3B0aW9ucykge1xuICAgIHJldHVybiBkZWZhdWx0T3B0aW9uczsgLy9pZiB0aGVyZSBhcmUgbm90IG9wdGlvbnNcbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAob3B0aW9uc1twcm9wc1tpXV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgbmV3T3B0aW9uc1twcm9wc1tpXV0gPSBvcHRpb25zW3Byb3BzW2ldXTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3T3B0aW9uc1twcm9wc1tpXV0gPSBkZWZhdWx0T3B0aW9uc1twcm9wc1tpXV07XG4gICAgfVxuICB9XG4gIHJldHVybiBuZXdPcHRpb25zO1xufTtcblxuZXhwb3J0cy5pc05hbWUgPSBpc05hbWU7XG5leHBvcnRzLmdldEFsbE1hdGNoZXMgPSBnZXRBbGxNYXRjaGVzO1xuZXhwb3J0cy5uYW1lUmVnZXhwID0gbmFtZVJlZ2V4cDtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///192\n"); +eval("\n\nvar nameStartChar = \":A-Za-z_\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD\";\nvar nameChar = nameStartChar + \"\\\\-.\\\\d\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040\";\nvar nameRegexp = '[' + nameStartChar + '][' + nameChar + ']*';\nvar regexName = new RegExp('^' + nameRegexp + '$');\nvar getAllMatches = function getAllMatches(string, regex) {\n var matches = [];\n var match = regex.exec(string);\n while (match) {\n var allmatches = [];\n var len = match.length;\n for (var index = 0; index < len; index++) {\n allmatches.push(match[index]);\n }\n matches.push(allmatches);\n match = regex.exec(string);\n }\n return matches;\n};\nvar isName = function isName(string) {\n var match = regexName.exec(string);\n return !(match === null || typeof match === 'undefined');\n};\nexports.isExist = function (v) {\n return typeof v !== 'undefined';\n};\nexports.isEmptyObject = function (obj) {\n return Object.keys(obj).length === 0;\n};\n\n/**\n * Copy all the properties of a into b.\n * @param {*} target\n * @param {*} a\n */\nexports.merge = function (target, a, arrayMode) {\n if (a) {\n var keys = Object.keys(a); // will return an array of own properties\n var len = keys.length; //don't make it inline\n for (var i = 0; i < len; i++) {\n if (arrayMode === 'strict') {\n target[keys[i]] = [a[keys[i]]];\n } else {\n target[keys[i]] = a[keys[i]];\n }\n }\n }\n};\n/* exports.merge =function (b,a){\n return Object.assign(b,a);\n} */\n\nexports.getValue = function (v) {\n if (exports.isExist(v)) {\n return v;\n } else {\n return '';\n }\n};\n\n// const fakeCall = function(a) {return a;};\n// const fakeCallNoReturn = function() {};\n\nexports.buildOptions = function (options, defaultOptions, props) {\n var newOptions = {};\n if (!options) {\n return defaultOptions; //if there are not options\n }\n\n for (var i = 0; i < props.length; i++) {\n if (options[props[i]] !== undefined) {\n newOptions[props[i]] = options[props[i]];\n } else {\n newOptions[props[i]] = defaultOptions[props[i]];\n }\n }\n return newOptions;\n};\nexports.isName = isName;\nexports.getAllMatches = getAllMatches;\nexports.nameRegexp = nameRegexp;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vc3RhdGljL2Zhc3QteG1sLXBhcnNlci9zcmMvdXRpbC5qcyJdLCJuYW1lcyI6WyJuYW1lU3RhcnRDaGFyIiwibmFtZUNoYXIiLCJuYW1lUmVnZXhwIiwicmVnZXhOYW1lIiwiUmVnRXhwIiwiZ2V0QWxsTWF0Y2hlcyIsInN0cmluZyIsInJlZ2V4IiwibWF0Y2hlcyIsIm1hdGNoIiwiZXhlYyIsImFsbG1hdGNoZXMiLCJsZW4iLCJsZW5ndGgiLCJpbmRleCIsInB1c2giLCJpc05hbWUiLCJleHBvcnRzIiwiaXNFeGlzdCIsInYiLCJpc0VtcHR5T2JqZWN0Iiwib2JqIiwiT2JqZWN0Iiwia2V5cyIsIm1lcmdlIiwidGFyZ2V0IiwiYSIsImFycmF5TW9kZSIsImkiLCJnZXRWYWx1ZSIsImJ1aWxkT3B0aW9ucyIsIm9wdGlvbnMiLCJkZWZhdWx0T3B0aW9ucyIsInByb3BzIiwibmV3T3B0aW9ucyIsInVuZGVmaW5lZCJdLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsSUFBTUEsYUFBYSxHQUFHLCtLQUErSztBQUNyTSxJQUFNQyxRQUFRLEdBQUdELGFBQWEsR0FBRyw4Q0FBOEM7QUFDL0UsSUFBTUUsVUFBVSxHQUFHLEdBQUcsR0FBR0YsYUFBYSxHQUFHLElBQUksR0FBR0MsUUFBUSxHQUFHLElBQUk7QUFDL0QsSUFBTUUsU0FBUyxHQUFHLElBQUlDLE1BQU0sQ0FBQyxHQUFHLEdBQUdGLFVBQVUsR0FBRyxHQUFHLENBQUM7QUFFcEQsSUFBTUcsYUFBYSxHQUFHLFNBQWhCQSxhQUFhLENBQVlDLE1BQU0sRUFBRUMsS0FBSyxFQUFFO0VBQzVDLElBQU1DLE9BQU8sR0FBRyxFQUFFO0VBQ2xCLElBQUlDLEtBQUssR0FBR0YsS0FBSyxDQUFDRyxJQUFJLENBQUNKLE1BQU0sQ0FBQztFQUM5QixPQUFPRyxLQUFLLEVBQUU7SUFDWixJQUFNRSxVQUFVLEdBQUcsRUFBRTtJQUNyQixJQUFNQyxHQUFHLEdBQUdILEtBQUssQ0FBQ0ksTUFBTTtJQUN4QixLQUFLLElBQUlDLEtBQUssR0FBRyxDQUFDLEVBQUVBLEtBQUssR0FBR0YsR0FBRyxFQUFFRSxLQUFLLEVBQUUsRUFBRTtNQUN4Q0gsVUFBVSxDQUFDSSxJQUFJLENBQUNOLEtBQUssQ0FBQ0ssS0FBSyxDQUFDLENBQUM7SUFDL0I7SUFDQU4sT0FBTyxDQUFDTyxJQUFJLENBQUNKLFVBQVUsQ0FBQztJQUN4QkYsS0FBSyxHQUFHRixLQUFLLENBQUNHLElBQUksQ0FBQ0osTUFBTSxDQUFDO0VBQzVCO0VBQ0EsT0FBT0UsT0FBTztBQUNoQixDQUFDO0FBRUQsSUFBTVEsTUFBTSxHQUFHLFNBQVRBLE1BQU0sQ0FBWVYsTUFBTSxFQUFFO0VBQzlCLElBQU1HLEtBQUssR0FBR04sU0FBUyxDQUFDTyxJQUFJLENBQUNKLE1BQU0sQ0FBQztFQUNwQyxPQUFPLEVBQUVHLEtBQUssS0FBSyxJQUFJLElBQUksT0FBT0EsS0FBSyxLQUFLLFdBQVcsQ0FBQztBQUMxRCxDQUFDO0FBRURRLE9BQU8sQ0FBQ0MsT0FBTyxHQUFHLFVBQVNDLENBQUMsRUFBRTtFQUM1QixPQUFPLE9BQU9BLENBQUMsS0FBSyxXQUFXO0FBQ2pDLENBQUM7QUFFREYsT0FBTyxDQUFDRyxhQUFhLEdBQUcsVUFBU0MsR0FBRyxFQUFFO0VBQ3BDLE9BQU9DLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDRixHQUFHLENBQUMsQ0FBQ1IsTUFBTSxLQUFLLENBQUM7QUFDdEMsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0FJLE9BQU8sQ0FBQ08sS0FBSyxHQUFHLFVBQVNDLE1BQU0sRUFBRUMsQ0FBQyxFQUFFQyxTQUFTLEVBQUU7RUFDN0MsSUFBSUQsQ0FBQyxFQUFFO0lBQ0wsSUFBTUgsSUFBSSxHQUFHRCxNQUFNLENBQUNDLElBQUksQ0FBQ0csQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3QixJQUFNZCxHQUFHLEdBQUdXLElBQUksQ0FBQ1YsTUFBTSxDQUFDLENBQUM7SUFDekIsS0FBSyxJQUFJZSxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUdoQixHQUFHLEVBQUVnQixDQUFDLEVBQUUsRUFBRTtNQUM1QixJQUFHRCxTQUFTLEtBQUssUUFBUSxFQUFDO1FBQ3hCRixNQUFNLENBQUNGLElBQUksQ0FBQ0ssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFFRixDQUFDLENBQUNILElBQUksQ0FBQ0ssQ0FBQyxDQUFDLENBQUMsQ0FBRTtNQUNsQyxDQUFDLE1BQUk7UUFDSEgsTUFBTSxDQUFDRixJQUFJLENBQUNLLENBQUMsQ0FBQyxDQUFDLEdBQUdGLENBQUMsQ0FBQ0gsSUFBSSxDQUFDSyxDQUFDLENBQUMsQ0FBQztNQUM5QjtJQUNGO0VBQ0Y7QUFDRixDQUFDO0FBQ0Q7QUFDQTtBQUNBOztBQUVBWCxPQUFPLENBQUNZLFFBQVEsR0FBRyxVQUFTVixDQUFDLEVBQUU7RUFDN0IsSUFBSUYsT0FBTyxDQUFDQyxPQUFPLENBQUNDLENBQUMsQ0FBQyxFQUFFO0lBQ3RCLE9BQU9BLENBQUM7RUFDVixDQUFDLE1BQU07SUFDTCxPQUFPLEVBQUU7RUFDWDtBQUNGLENBQUM7O0FBRUQ7QUFDQTs7QUFFQUYsT0FBTyxDQUFDYSxZQUFZLEdBQUcsVUFBU0MsT0FBTyxFQUFFQyxjQUFjLEVBQUVDLEtBQUssRUFBRTtFQUM5RCxJQUFJQyxVQUFVLEdBQUcsQ0FBQyxDQUFDO0VBQ25CLElBQUksQ0FBQ0gsT0FBTyxFQUFFO0lBQ1osT0FBT0MsY0FBYyxDQUFDLENBQUM7RUFDekI7O0VBRUEsS0FBSyxJQUFJSixDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUdLLEtBQUssQ0FBQ3BCLE1BQU0sRUFBRWUsQ0FBQyxFQUFFLEVBQUU7SUFDckMsSUFBSUcsT0FBTyxDQUFDRSxLQUFLLENBQUNMLENBQUMsQ0FBQyxDQUFDLEtBQUtPLFNBQVMsRUFBRTtNQUNuQ0QsVUFBVSxDQUFDRCxLQUFLLENBQUNMLENBQUMsQ0FBQyxDQUFDLEdBQUdHLE9BQU8sQ0FBQ0UsS0FBSyxDQUFDTCxDQUFDLENBQUMsQ0FBQztJQUMxQyxDQUFDLE1BQU07TUFDTE0sVUFBVSxDQUFDRCxLQUFLLENBQUNMLENBQUMsQ0FBQyxDQUFDLEdBQUdJLGNBQWMsQ0FBQ0MsS0FBSyxDQUFDTCxDQUFDLENBQUMsQ0FBQztJQUNqRDtFQUNGO0VBQ0EsT0FBT00sVUFBVTtBQUNuQixDQUFDO0FBRURqQixPQUFPLENBQUNELE1BQU0sR0FBR0EsTUFBTTtBQUN2QkMsT0FBTyxDQUFDWixhQUFhLEdBQUdBLGFBQWE7QUFDckNZLE9BQU8sQ0FBQ2YsVUFBVSxHQUFHQSxVQUFVIiwiZmlsZSI6IjIwMC5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuY29uc3QgbmFtZVN0YXJ0Q2hhciA9ICc6QS1aYS16X1xcXFx1MDBDMC1cXFxcdTAwRDZcXFxcdTAwRDgtXFxcXHUwMEY2XFxcXHUwMEY4LVxcXFx1MDJGRlxcXFx1MDM3MC1cXFxcdTAzN0RcXFxcdTAzN0YtXFxcXHUxRkZGXFxcXHUyMDBDLVxcXFx1MjAwRFxcXFx1MjA3MC1cXFxcdTIxOEZcXFxcdTJDMDAtXFxcXHUyRkVGXFxcXHUzMDAxLVxcXFx1RDdGRlxcXFx1RjkwMC1cXFxcdUZEQ0ZcXFxcdUZERjAtXFxcXHVGRkZEJztcbmNvbnN0IG5hbWVDaGFyID0gbmFtZVN0YXJ0Q2hhciArICdcXFxcLS5cXFxcZFxcXFx1MDBCN1xcXFx1MDMwMC1cXFxcdTAzNkZcXFxcdTIwM0YtXFxcXHUyMDQwJztcbmNvbnN0IG5hbWVSZWdleHAgPSAnWycgKyBuYW1lU3RhcnRDaGFyICsgJ11bJyArIG5hbWVDaGFyICsgJ10qJ1xuY29uc3QgcmVnZXhOYW1lID0gbmV3IFJlZ0V4cCgnXicgKyBuYW1lUmVnZXhwICsgJyQnKTtcblxuY29uc3QgZ2V0QWxsTWF0Y2hlcyA9IGZ1bmN0aW9uKHN0cmluZywgcmVnZXgpIHtcbiAgY29uc3QgbWF0Y2hlcyA9IFtdO1xuICBsZXQgbWF0Y2ggPSByZWdleC5leGVjKHN0cmluZyk7XG4gIHdoaWxlIChtYXRjaCkge1xuICAgIGNvbnN0IGFsbG1hdGNoZXMgPSBbXTtcbiAgICBjb25zdCBsZW4gPSBtYXRjaC5sZW5ndGg7XG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGxlbjsgaW5kZXgrKykge1xuICAgICAgYWxsbWF0Y2hlcy5wdXNoKG1hdGNoW2luZGV4XSk7XG4gICAgfVxuICAgIG1hdGNoZXMucHVzaChhbGxtYXRjaGVzKTtcbiAgICBtYXRjaCA9IHJlZ2V4LmV4ZWMoc3RyaW5nKTtcbiAgfVxuICByZXR1cm4gbWF0Y2hlcztcbn07XG5cbmNvbnN0IGlzTmFtZSA9IGZ1bmN0aW9uKHN0cmluZykge1xuICBjb25zdCBtYXRjaCA9IHJlZ2V4TmFtZS5leGVjKHN0cmluZyk7XG4gIHJldHVybiAhKG1hdGNoID09PSBudWxsIHx8IHR5cGVvZiBtYXRjaCA9PT0gJ3VuZGVmaW5lZCcpO1xufTtcblxuZXhwb3J0cy5pc0V4aXN0ID0gZnVuY3Rpb24odikge1xuICByZXR1cm4gdHlwZW9mIHYgIT09ICd1bmRlZmluZWQnO1xufTtcblxuZXhwb3J0cy5pc0VtcHR5T2JqZWN0ID0gZnVuY3Rpb24ob2JqKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhvYmopLmxlbmd0aCA9PT0gMDtcbn07XG5cbi8qKlxuICogQ29weSBhbGwgdGhlIHByb3BlcnRpZXMgb2YgYSBpbnRvIGIuXG4gKiBAcGFyYW0geyp9IHRhcmdldFxuICogQHBhcmFtIHsqfSBhXG4gKi9cbmV4cG9ydHMubWVyZ2UgPSBmdW5jdGlvbih0YXJnZXQsIGEsIGFycmF5TW9kZSkge1xuICBpZiAoYSkge1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhhKTsgLy8gd2lsbCByZXR1cm4gYW4gYXJyYXkgb2Ygb3duIHByb3BlcnRpZXNcbiAgICBjb25zdCBsZW4gPSBrZXlzLmxlbmd0aDsgLy9kb24ndCBtYWtlIGl0IGlubGluZVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGlmKGFycmF5TW9kZSA9PT0gJ3N0cmljdCcpe1xuICAgICAgICB0YXJnZXRba2V5c1tpXV0gPSBbIGFba2V5c1tpXV0gXTtcbiAgICAgIH1lbHNle1xuICAgICAgICB0YXJnZXRba2V5c1tpXV0gPSBhW2tleXNbaV1dO1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcbi8qIGV4cG9ydHMubWVyZ2UgPWZ1bmN0aW9uIChiLGEpe1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbihiLGEpO1xufSAqL1xuXG5leHBvcnRzLmdldFZhbHVlID0gZnVuY3Rpb24odikge1xuICBpZiAoZXhwb3J0cy5pc0V4aXN0KHYpKSB7XG4gICAgcmV0dXJuIHY7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG59O1xuXG4vLyBjb25zdCBmYWtlQ2FsbCA9IGZ1bmN0aW9uKGEpIHtyZXR1cm4gYTt9O1xuLy8gY29uc3QgZmFrZUNhbGxOb1JldHVybiA9IGZ1bmN0aW9uKCkge307XG5cbmV4cG9ydHMuYnVpbGRPcHRpb25zID0gZnVuY3Rpb24ob3B0aW9ucywgZGVmYXVsdE9wdGlvbnMsIHByb3BzKSB7XG4gIHZhciBuZXdPcHRpb25zID0ge307XG4gIGlmICghb3B0aW9ucykge1xuICAgIHJldHVybiBkZWZhdWx0T3B0aW9uczsgLy9pZiB0aGVyZSBhcmUgbm90IG9wdGlvbnNcbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAob3B0aW9uc1twcm9wc1tpXV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgbmV3T3B0aW9uc1twcm9wc1tpXV0gPSBvcHRpb25zW3Byb3BzW2ldXTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3T3B0aW9uc1twcm9wc1tpXV0gPSBkZWZhdWx0T3B0aW9uc1twcm9wc1tpXV07XG4gICAgfVxuICB9XG4gIHJldHVybiBuZXdPcHRpb25zO1xufTtcblxuZXhwb3J0cy5pc05hbWUgPSBpc05hbWU7XG5leHBvcnRzLmdldEFsbE1hdGNoZXMgPSBnZXRBbGxNYXRjaGVzO1xuZXhwb3J0cy5uYW1lUmVnZXhwID0gbmFtZVJlZ2V4cDtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///200\n"); /***/ }), -/* 193 */ +/* 201 */ /*!***********************************************************************!*\ !*** D:/里海数字乡村/xunfeiAi/static/fast-xml-parser/src/xmlstr2xmlnode.js ***! \***********************************************************************/ @@ -24968,10 +25157,10 @@ eval("\n\nvar nameStartChar = \":A-Za-z_\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\ /***/ (function(module, exports, __webpack_require__) { "use strict"; -eval("\n\nvar util = __webpack_require__(/*! ./util */ 192);\nvar buildOptions = __webpack_require__(/*! ./util */ 192).buildOptions;\nvar xmlNode = __webpack_require__(/*! ./xmlNode */ 194);\nvar regx = '<((!\\\\[CDATA\\\\[([\\\\s\\\\S]*?)(]]>))|((NAME:)?(NAME))([^>]*)>|((\\\\/)(NAME)\\\\s*>))([^<]*)'.replace(/NAME/g, util.nameRegexp);\n\n//const tagsRegx = new RegExp(\"<(\\\\/?[\\\\w:\\\\-\\._]+)([^>]*)>(\\\\s*\"+cdataRegx+\")*([^<]+)?\",\"g\");\n//const tagsRegx = new RegExp(\"<(\\\\/?)((\\\\w*:)?([\\\\w:\\\\-\\._]+))([^>]*)>([^<]*)(\"+cdataRegx+\"([^<]*))*([^<]+)?\",\"g\");\n\n//polyfill\nif (!Number.parseInt && window.parseInt) {\n Number.parseInt = window.parseInt;\n}\nif (!Number.parseFloat && window.parseFloat) {\n Number.parseFloat = window.parseFloat;\n}\nvar defaultOptions = {\n attributeNamePrefix: '@_',\n attrNodeName: false,\n textNodeName: '#text',\n ignoreAttributes: true,\n ignoreNameSpace: false,\n allowBooleanAttributes: false,\n //a tag can have attributes without any value\n //ignoreRootElement : false,\n parseNodeValue: true,\n parseAttributeValue: false,\n arrayMode: false,\n trimValues: true,\n //Trim string values of tag and attributes\n cdataTagName: false,\n cdataPositionChar: '\\\\c',\n tagValueProcessor: function tagValueProcessor(a, tagName) {\n return a;\n },\n attrValueProcessor: function attrValueProcessor(a, attrName) {\n return a;\n },\n stopNodes: []\n //decodeStrict: false,\n};\n\nexports.defaultOptions = defaultOptions;\nvar props = ['attributeNamePrefix', 'attrNodeName', 'textNodeName', 'ignoreAttributes', 'ignoreNameSpace', 'allowBooleanAttributes', 'parseNodeValue', 'parseAttributeValue', 'arrayMode', 'trimValues', 'cdataTagName', 'cdataPositionChar', 'tagValueProcessor', 'attrValueProcessor', 'parseTrueNumberOnly', 'stopNodes'];\nexports.props = props;\n\n/**\n * Trim -> valueProcessor -> parse value\n * @param {string} tagName\n * @param {string} val\n * @param {object} options\n */\nfunction processTagValue(tagName, val, options) {\n if (val) {\n if (options.trimValues) {\n val = val.trim();\n }\n val = options.tagValueProcessor(val, tagName);\n val = parseValue(val, options.parseNodeValue, options.parseTrueNumberOnly);\n }\n return val;\n}\nfunction resolveNameSpace(tagname, options) {\n if (options.ignoreNameSpace) {\n var tags = tagname.split(':');\n var prefix = tagname.charAt(0) === '/' ? '/' : '';\n if (tags[0] === 'xmlns') {\n return '';\n }\n if (tags.length === 2) {\n tagname = prefix + tags[1];\n }\n }\n return tagname;\n}\nfunction parseValue(val, shouldParse, parseTrueNumberOnly) {\n if (shouldParse && typeof val === 'string') {\n var parsed;\n if (val.trim() === '' || isNaN(val)) {\n parsed = val === 'true' ? true : val === 'false' ? false : val;\n } else {\n if (val.indexOf('0x') !== -1) {\n //support hexa decimal\n parsed = Number.parseInt(val, 16);\n } else if (val.indexOf('.') !== -1) {\n parsed = Number.parseFloat(val);\n val = val.replace(/\\.?0+$/, \"\");\n } else {\n parsed = Number.parseInt(val, 10);\n }\n if (parseTrueNumberOnly) {\n parsed = String(parsed) === val ? parsed : val;\n }\n }\n return parsed;\n } else {\n if (util.isExist(val)) {\n return val;\n } else {\n return '';\n }\n }\n}\n\n//TODO: change regex to capture NS\n//const attrsRegx = new RegExp(\"([\\\\w\\\\-\\\\.\\\\:]+)\\\\s*=\\\\s*(['\\\"])((.|\\n)*?)\\\\2\",\"gm\");\nvar attrsRegx = new RegExp('([^\\\\s=]+)\\\\s*(=\\\\s*([\\'\"])(.*?)\\\\3)?', 'g');\nfunction buildAttributesMap(attrStr, options) {\n if (!options.ignoreAttributes && typeof attrStr === 'string') {\n attrStr = attrStr.replace(/\\r?\\n/g, ' ');\n //attrStr = attrStr || attrStr.trim();\n\n var matches = util.getAllMatches(attrStr, attrsRegx);\n var len = matches.length; //don't make it inline\n var attrs = {};\n for (var i = 0; i < len; i++) {\n var attrName = resolveNameSpace(matches[i][1], options);\n if (attrName.length) {\n if (matches[i][4] !== undefined) {\n if (options.trimValues) {\n matches[i][4] = matches[i][4].trim();\n }\n matches[i][4] = options.attrValueProcessor(matches[i][4], attrName);\n attrs[options.attributeNamePrefix + attrName] = parseValue(matches[i][4], options.parseAttributeValue, options.parseTrueNumberOnly);\n } else if (options.allowBooleanAttributes) {\n attrs[options.attributeNamePrefix + attrName] = true;\n }\n }\n }\n if (!Object.keys(attrs).length) {\n return;\n }\n if (options.attrNodeName) {\n var attrCollection = {};\n attrCollection[options.attrNodeName] = attrs;\n return attrCollection;\n }\n return attrs;\n }\n}\nvar getTraversalObj = function getTraversalObj(xmlData, options) {\n xmlData = xmlData.replace(/(\\r\\n)|\\n/, \" \");\n options = buildOptions(options, defaultOptions, props);\n var xmlObj = new xmlNode('!xml');\n var currentNode = xmlObj;\n var textData = \"\";\n\n //function match(xmlData){\n for (var i = 0; i < xmlData.length; i++) {\n var ch = xmlData[i];\n if (ch === '<') {\n if (xmlData[i + 1] === '/') {\n //Closing Tag\n var closeIndex = findClosingIndex(xmlData, \">\", i, \"Closing Tag is not closed.\");\n var tagName = xmlData.substring(i + 2, closeIndex).trim();\n if (options.ignoreNameSpace) {\n var colonIndex = tagName.indexOf(\":\");\n if (colonIndex !== -1) {\n tagName = tagName.substr(colonIndex + 1);\n }\n }\n\n /* if (currentNode.parent) {\n currentNode.parent.val = util.getValue(currentNode.parent.val) + '' + processTagValue2(tagName, textData , options);\n } */\n if (currentNode) {\n if (currentNode.val) {\n currentNode.val = util.getValue(currentNode.val) + '' + processTagValue(tagName, textData, options);\n } else {\n currentNode.val = processTagValue(tagName, textData, options);\n }\n }\n if (options.stopNodes.length && options.stopNodes.includes(currentNode.tagname)) {\n currentNode.child = [];\n if (currentNode.attrsMap == undefined) {\n currentNode.attrsMap = {};\n }\n currentNode.val = xmlData.substr(currentNode.startIndex + 1, i - currentNode.startIndex - 1);\n }\n currentNode = currentNode.parent;\n textData = \"\";\n i = closeIndex;\n } else if (xmlData[i + 1] === '?') {\n i = findClosingIndex(xmlData, \"?>\", i, \"Pi Tag is not closed.\");\n } else if (xmlData.substr(i + 1, 3) === '!--') {\n i = findClosingIndex(xmlData, \"-->\", i, \"Comment is not closed.\");\n } else if (xmlData.substr(i + 1, 2) === '!D') {\n var _closeIndex = findClosingIndex(xmlData, \">\", i, \"DOCTYPE is not closed.\");\n var tagExp = xmlData.substring(i, _closeIndex);\n if (tagExp.indexOf(\"[\") >= 0) {\n i = xmlData.indexOf(\"]>\", i) + 1;\n } else {\n i = _closeIndex;\n }\n } else if (xmlData.substr(i + 1, 2) === '![') {\n var _closeIndex2 = findClosingIndex(xmlData, \"]]>\", i, \"CDATA is not closed.\") - 2;\n var _tagExp = xmlData.substring(i + 9, _closeIndex2);\n\n //considerations\n //1. CDATA will always have parent node\n //2. A tag with CDATA is not a leaf node so it's value would be string type.\n if (textData) {\n currentNode.val = util.getValue(currentNode.val) + '' + processTagValue(currentNode.tagname, textData, options);\n textData = \"\";\n }\n if (options.cdataTagName) {\n //add cdata node\n var childNode = new xmlNode(options.cdataTagName, currentNode, _tagExp);\n currentNode.addChild(childNode);\n //for backtracking\n currentNode.val = util.getValue(currentNode.val) + options.cdataPositionChar;\n //add rest value to parent node\n if (_tagExp) {\n childNode.val = _tagExp;\n }\n } else {\n currentNode.val = (currentNode.val || '') + (_tagExp || '');\n }\n i = _closeIndex2 + 2;\n } else {\n //Opening tag\n var result = closingIndexForOpeningTag(xmlData, i + 1);\n var _tagExp2 = result.data;\n var _closeIndex3 = result.index;\n var separatorIndex = _tagExp2.indexOf(\" \");\n var _tagName = _tagExp2;\n if (separatorIndex !== -1) {\n _tagName = _tagExp2.substr(0, separatorIndex).trimRight();\n _tagExp2 = _tagExp2.substr(separatorIndex + 1);\n }\n if (options.ignoreNameSpace) {\n var _colonIndex = _tagName.indexOf(\":\");\n if (_colonIndex !== -1) {\n _tagName = _tagName.substr(_colonIndex + 1);\n }\n }\n\n //save text to parent node\n if (currentNode && textData) {\n if (currentNode.tagname !== '!xml') {\n currentNode.val = util.getValue(currentNode.val) + '' + processTagValue(currentNode.tagname, textData, options);\n }\n }\n if (_tagExp2.length > 0 && _tagExp2.lastIndexOf(\"/\") === _tagExp2.length - 1) {\n //selfClosing tag\n\n if (_tagName[_tagName.length - 1] === \"/\") {\n //remove trailing '/'\n _tagName = _tagName.substr(0, _tagName.length - 1);\n _tagExp2 = _tagName;\n } else {\n _tagExp2 = _tagExp2.substr(0, _tagExp2.length - 1);\n }\n var _childNode = new xmlNode(_tagName, currentNode, '');\n if (_tagName !== _tagExp2) {\n _childNode.attrsMap = buildAttributesMap(_tagExp2, options);\n }\n currentNode.addChild(_childNode);\n } else {\n //opening tag\n\n var _childNode2 = new xmlNode(_tagName, currentNode);\n if (options.stopNodes.length && options.stopNodes.includes(_childNode2.tagname)) {\n _childNode2.startIndex = _closeIndex3;\n }\n if (_tagName !== _tagExp2) {\n _childNode2.attrsMap = buildAttributesMap(_tagExp2, options);\n }\n currentNode.addChild(_childNode2);\n currentNode = _childNode2;\n }\n textData = \"\";\n i = _closeIndex3;\n }\n } else {\n textData += xmlData[i];\n }\n }\n return xmlObj;\n};\nfunction closingIndexForOpeningTag(data, i) {\n var attrBoundary;\n var tagExp = \"\";\n for (var index = i; index < data.length; index++) {\n var ch = data[index];\n if (attrBoundary) {\n if (ch === attrBoundary) attrBoundary = \"\"; //reset\n } else if (ch === '\"' || ch === \"'\") {\n attrBoundary = ch;\n } else if (ch === '>') {\n return {\n data: tagExp,\n index: index\n };\n } else if (ch === '\\t') {\n ch = \" \";\n }\n tagExp += ch;\n }\n}\nfunction findClosingIndex(xmlData, str, i, errMsg) {\n var closingIndex = xmlData.indexOf(str, i);\n if (closingIndex === -1) {\n throw new Error(errMsg);\n } else {\n return closingIndex + str.length - 1;\n }\n}\nexports.getTraversalObj = getTraversalObj;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vc3RhdGljL2Zhc3QteG1sLXBhcnNlci9zcmMveG1sc3RyMnhtbG5vZGUuanMiXSwibmFtZXMiOlsidXRpbCIsInJlcXVpcmUiLCJidWlsZE9wdGlvbnMiLCJ4bWxOb2RlIiwicmVneCIsInJlcGxhY2UiLCJuYW1lUmVnZXhwIiwiTnVtYmVyIiwicGFyc2VJbnQiLCJ3aW5kb3ciLCJwYXJzZUZsb2F0IiwiZGVmYXVsdE9wdGlvbnMiLCJhdHRyaWJ1dGVOYW1lUHJlZml4IiwiYXR0ck5vZGVOYW1lIiwidGV4dE5vZGVOYW1lIiwiaWdub3JlQXR0cmlidXRlcyIsImlnbm9yZU5hbWVTcGFjZSIsImFsbG93Qm9vbGVhbkF0dHJpYnV0ZXMiLCJwYXJzZU5vZGVWYWx1ZSIsInBhcnNlQXR0cmlidXRlVmFsdWUiLCJhcnJheU1vZGUiLCJ0cmltVmFsdWVzIiwiY2RhdGFUYWdOYW1lIiwiY2RhdGFQb3NpdGlvbkNoYXIiLCJ0YWdWYWx1ZVByb2Nlc3NvciIsImEiLCJ0YWdOYW1lIiwiYXR0clZhbHVlUHJvY2Vzc29yIiwiYXR0ck5hbWUiLCJzdG9wTm9kZXMiLCJleHBvcnRzIiwicHJvcHMiLCJwcm9jZXNzVGFnVmFsdWUiLCJ2YWwiLCJvcHRpb25zIiwidHJpbSIsInBhcnNlVmFsdWUiLCJwYXJzZVRydWVOdW1iZXJPbmx5IiwicmVzb2x2ZU5hbWVTcGFjZSIsInRhZ25hbWUiLCJ0YWdzIiwic3BsaXQiLCJwcmVmaXgiLCJjaGFyQXQiLCJsZW5ndGgiLCJzaG91bGRQYXJzZSIsInBhcnNlZCIsImlzTmFOIiwiaW5kZXhPZiIsIlN0cmluZyIsImlzRXhpc3QiLCJhdHRyc1JlZ3giLCJSZWdFeHAiLCJidWlsZEF0dHJpYnV0ZXNNYXAiLCJhdHRyU3RyIiwibWF0Y2hlcyIsImdldEFsbE1hdGNoZXMiLCJsZW4iLCJhdHRycyIsImkiLCJ1bmRlZmluZWQiLCJPYmplY3QiLCJrZXlzIiwiYXR0ckNvbGxlY3Rpb24iLCJnZXRUcmF2ZXJzYWxPYmoiLCJ4bWxEYXRhIiwieG1sT2JqIiwiY3VycmVudE5vZGUiLCJ0ZXh0RGF0YSIsImNoIiwiY2xvc2VJbmRleCIsImZpbmRDbG9zaW5nSW5kZXgiLCJzdWJzdHJpbmciLCJjb2xvbkluZGV4Iiwic3Vic3RyIiwiZ2V0VmFsdWUiLCJpbmNsdWRlcyIsImNoaWxkIiwiYXR0cnNNYXAiLCJzdGFydEluZGV4IiwicGFyZW50IiwidGFnRXhwIiwiY2hpbGROb2RlIiwiYWRkQ2hpbGQiLCJyZXN1bHQiLCJjbG9zaW5nSW5kZXhGb3JPcGVuaW5nVGFnIiwiZGF0YSIsImluZGV4Iiwic2VwYXJhdG9ySW5kZXgiLCJ0cmltUmlnaHQiLCJsYXN0SW5kZXhPZiIsImF0dHJCb3VuZGFyeSIsInN0ciIsImVyck1zZyIsImNsb3NpbmdJbmRleCIsIkVycm9yIl0sIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixJQUFNQSxJQUFJLEdBQUdDLG1CQUFPLENBQUMsaUJBQVEsQ0FBQztBQUM5QixJQUFNQyxZQUFZLEdBQUdELG1CQUFPLENBQUMsaUJBQVEsQ0FBQyxDQUFDQyxZQUFZO0FBQ25ELElBQU1DLE9BQU8sR0FBR0YsbUJBQU8sQ0FBQyxvQkFBVyxDQUFDO0FBQ3BDLElBQU1HLElBQUksR0FDUix1RkFBdUYsQ0FDdEZDLE9BQU8sQ0FBQyxPQUFPLEVBQUVMLElBQUksQ0FBQ00sVUFBVSxDQUFDOztBQUVwQztBQUNBOztBQUVBO0FBQ0EsSUFBSSxDQUFDQyxNQUFNLENBQUNDLFFBQVEsSUFBSUMsTUFBTSxDQUFDRCxRQUFRLEVBQUU7RUFDdkNELE1BQU0sQ0FBQ0MsUUFBUSxHQUFHQyxNQUFNLENBQUNELFFBQVE7QUFDbkM7QUFDQSxJQUFJLENBQUNELE1BQU0sQ0FBQ0csVUFBVSxJQUFJRCxNQUFNLENBQUNDLFVBQVUsRUFBRTtFQUMzQ0gsTUFBTSxDQUFDRyxVQUFVLEdBQUdELE1BQU0sQ0FBQ0MsVUFBVTtBQUN2QztBQUVBLElBQU1DLGNBQWMsR0FBRztFQUNyQkMsbUJBQW1CLEVBQUUsSUFBSTtFQUN6QkMsWUFBWSxFQUFFLEtB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QUUyQixHQUFHLEVBQUVqQyxDQUFDLEVBQUVrQyxNQUFNLEVBQUM7RUFDaEQsSUFBTUMsWUFBWSxHQUFHN0IsT0FBTyxDQUFDakIsT0FBTyxDQUFDNEMsR0FBRyxFQUFFakMsQ0FBQyxDQUFDO0VBQzVDLElBQUdtQyxZQUFZLEtBQUssQ0FBQyxDQUFDLEVBQUM7SUFDckIsTUFBTSxJQUFJQyxLQUFLLENBQUNGLE1BQU0sQ0FBQztFQUN6QixDQUFDLE1BQUk7SUFDSCxPQUFPQyxZQUFZLEdBQUdGLEdBQUcsQ0FBQ2hELE1BQU0sR0FBRyxDQUFDO0VBQ3RDO0FBQ0Y7QUFFQWQsT0FBTyxDQUFDa0MsZUFBZSxHQUFHQSxlQUFlIiwiZmlsZSI6IjE5My5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpO1xuY29uc3QgYnVpbGRPcHRpb25zID0gcmVxdWlyZSgnLi91dGlsJykuYnVpbGRPcHRpb25zO1xuY29uc3QgeG1sTm9kZSA9IHJlcXVpcmUoJy4veG1sTm9kZScpO1xuY29uc3QgcmVneCA9XG4gICc8KCghXFxcXFtDREFUQVxcXFxbKFtcXFxcc1xcXFxTXSo/KShdXT4pKXwoKE5BTUU6KT8oTkFNRSkpKFtePl0qKT58KChcXFxcLykoTkFNRSlcXFxccyo+KSkoW148XSopJ1xuICAucmVwbGFjZSgvTkFNRS9nLCB1dGlsLm5hbWVSZWdleHApO1xuXG4vL2NvbnN0IHRhZ3NSZWd4ID0gbmV3IFJlZ0V4cChcIjwoXFxcXC8/W1xcXFx3OlxcXFwtXFwuX10rKShbXj5dKik+KFxcXFxzKlwiK2NkYXRhUmVneCtcIikqKFtePF0rKT9cIixcImdcIik7XG4vL2NvbnN0IHRhZ3NSZWd4ID0gbmV3IFJlZ0V4cChcIjwoXFxcXC8/KSgoXFxcXHcqOik/KFtcXFxcdzpcXFxcLVxcLl9dKykpKFtePl0qKT4oW148XSopKFwiK2NkYXRhUmVneCtcIihbXjxdKikpKihbXjxdKyk/XCIsXCJnXCIpO1xuXG4vL3BvbHlmaWxsXG5pZiAoIU51bWJlci5wYXJzZUludCAmJiB3aW5kb3cucGFyc2VJbnQpIHtcbiAgTnVtYmVyLnBhcnNlSW50ID0gd2luZG93LnBhcnNlSW50O1xufVxuaWYgKCFOdW1iZXIucGFyc2VGbG9hdCAmJiB3aW5kb3cucGFyc2VGbG9hdCkge1xuICBOdW1iZXIucGFyc2VGbG9hdCA9IHdpbmRvdy5wYXJzZUZsb2F0O1xufVxuXG5jb25zdCBkZWZhdWx0T3B0aW9ucyA9IHtcbiAgYXR0cmlidXRlTmFtZVByZWZpeDogJ0BfJyxcbiAgYXR0ck5vZGVOYW1lOiBmYWxzZSxcbiAgdGV4dE5vZGVOYW1lOiAnI3RleHQnLFxuICBpZ25vcmVBdHRyaWJ1dGVzOiB0cnVlLFxuICBpZ25vcmVOYW1lU3BhY2U6IGZhbHNlLFxuICBhbGxvd0Jvb2xlYW5BdHRyaWJ1dGVzOiBmYWxzZSwgLy9hIHRhZyBjYW4gaGF2ZSBhdHRyaWJ1dGVzIHdpdGhvdXQgYW55IHZhbHVlXG4gIC8vaWdub3JlUm9vdEVsZW1lbnQgOiBmYWxzZSxcbiAgcGFyc2VOb2RlVmFsdWU6IHRydWUsXG4gIHBhcnNlQXR0cmlidXRlVmFsdWU6IGZhbHNlLFxuICBhcnJheU1vZGU6IGZhbHNlLFxuICB0cmltVmFsdWVzOiB0cnVlLCAvL1RyaW0gc3RyaW5nIHZhbHVlcyBvZiB0YWcgYW5kIGF0dHJpYnV0ZXNcbiAgY2RhdGFUYWdOYW1lOiBmYWxzZSxcbiAgY2RhdGFQb3NpdGlvbkNoYXI6ICdcXFxcYycsXG4gIHRhZ1ZhbHVlUHJvY2Vzc29yOiBmdW5jdGlvbihhLCB0YWdOYW1lKSB7XG4gICAgcmV0dXJuIGE7XG4gIH0sXG4gIGF0dHJWYWx1ZVByb2Nlc3NvcjogZnVuY3Rpb24oYSwgYXR0ck5hbWUpIHtcbiAgICByZXR1cm4gYTtcbiAgfSxcbiAgc3RvcE5vZGVzOiBbXVxuICAvL2RlY29kZVN0cmljdDogZmFsc2UsXG59O1xuXG5leHBvcnRzLmRlZmF1bHRPcHRpb25zID0gZGVmYXVsdE9wdGlvbnM7XG5cbmNvbnN0IHByb3BzID0gW1xuICAnYXR0cmlidXRlTmFtZVByZWZpeCcsXG4gICdhdHRyTm9kZU5hbWUnLFxuICAndGV4dE5vZGVOYW1lJyxcbiAgJ2lnbm9yZUF0dHJpYnV0ZXMnLFxuICAnaWdub3JlTmFtZVNwYWNlJyxcbiAgJ2FsbG93Qm9vbGVhbkF0dHJpYnV0ZXMnLFxuICAncGFyc2VOb2RlVmFsdWUnLFxuICAncGFyc2VBdHRyaWJ1dGVWYWx1ZScsXG4gICdhcnJheU1vZGUnLFxuICAndHJpbVZhbHVlcycsXG4gICdjZGF0YVRhZ05hbWUnLFxuICAnY2RhdGFQb3NpdGlvbkNoYXInLFxuICAndGFnVmFsdWVQcm9jZXNzb3InLFxuICAnYXR0clZhbHVlUHJvY2Vzc29yJyxcbiAgJ3BhcnNlVHJ1ZU51bWJlck9ubHknLFxuICAnc3RvcE5vZGVzJ1xuXTtcbmV4cG9ydHMucHJvcHMgPSBwcm9wcztcblxuLyoqXG4gKiBUcmltIC0+IHZhbHVlUHJvY2Vzc29yIC0+IHBhcnNlIHZhbHVlXG4gKiBAcGFyYW0ge3N0cmluZ30gdGFnTmFtZVxuICogQHBhcmFtIHtzdHJpbmd9IHZhbFxuICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAqL1xuZnVuY3Rpb24gcHJvY2Vzc1RhZ1ZhbHVlKHRhZ05hbWUsIHZhbCwgb3B0aW9ucykge1xuICBpZiAodmFsKSB7XG4gICAgaWYgKG9wdGlvbnMudHJpbVZhbHVlcykge1xuICAgICAgdmFsID0gdmFsLnRyaW0oKTtcbiAgICB9XG4gICAgdmFsID0gb3B0aW9ucy50YWdWYWx1ZVByb2Nlc3Nvcih2YWwsIHRhZ05hbWUpO1xuICAgIHZhbCA9IHBhcnNlVmFsdWUodmFsLCBvcHRpb25zLnBhcnNlTm9kZVZhbHVlLCBvcHRpb25zLnBhcnNlVHJ1ZU51bWJlck9ubHkpO1xuICB9XG5cbiAgcmV0dXJuIHZhbDtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZU5hbWVTcGFjZSh0YWduYW1lLCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zLmlnbm9yZU5hbWVTcGFjZSkge1xuICAgIGNvbnN0IHRhZ3MgPSB0YWduYW1lLnNwbGl0KCc6Jyk7XG4gICAgY29uc3QgcHJlZml4ID0gdGFnbmFtZS5jaGFyQXQoMCkgPT09ICcvJyA/ICcvJyA6ICcnO1xuICAgIGlmICh0YWdzWzBdID09PSAneG1sbnMnKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIGlmICh0YWdzLmxlbmd0aCA9PT0gMikge1xuICAgICAgdGFnbmFtZSA9IHByZWZpeCArIHRhZ3NbMV07XG4gICAgfVxuICB9XG4gIHJldHVybiB0YWduYW1lO1xufVxuXG5mdW5jdGlvbiBwYXJzZVZhbHVlKHZhbCwgc2hvdWxkUGFyc2UsIHBhcnNlVHJ1ZU51bWJlck9ubHkpIHtcbiAgaWYgKHNob3VsZFBhcnNlICYmIHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgbGV0IHBhcnNlZDtcbiAgICBpZiAodmFsLnRyaW0oKSA9PT0gJycgfHwgaXNOYU4odmFsKSkge1xuICAgICAgcGFyc2VkID0gdmFsID09PSAndHJ1ZScgPyB0cnVlIDogdmFsID09PSAnZmFsc2UnID8gZmFsc2UgOiB2YWw7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh2YWwuaW5kZXhPZignMHgnKSAhPT0gLTEpIHtcbiAgICAgICAgLy9zdXBwb3J0IGhleGEgZGVjaW1hbFxuICAgICAgICBwYXJzZWQgPSBOdW1iZXIucGFyc2VJbnQodmFsLCAxNik7XG4gICAgICB9IGVsc2UgaWYgKHZhbC5pbmRleE9mKCcuJykgIT09IC0xKSB7XG4gICAgICAgIHBhcnNlZCA9IE51bWJlci5wYXJzZUZsb2F0KHZhbCk7XG4gICAgICAgIHZhbCA9IHZhbC5yZXBsYWNlKC9cXC4/MCskLywgXCJcIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJzZWQgPSBOdW1iZXIucGFyc2VJbnQodmFsLCAxMCk7XG4gICAgICB9XG4gICAgICBpZiAocGFyc2VUcnVlTnVtYmVyT25seSkge1xuICAgICAgICBwYXJzZWQgPSBTdHJpbmcocGFyc2VkKSA9PT0gdmFsID8gcGFyc2VkIDogdmFsO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9IGVsc2Uge1xuICAgIGlmICh1dGlsLmlzRXhpc3QodmFsKSkge1xuICAgICAgcmV0dXJuIHZhbDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgfVxufVxuXG4vL1RPRE86IGNoYW5nZSByZWdleCB0byBjYXB0dXJlIE5TXG4vL2NvbnN0IGF0dHJzUmVneCA9IG5ldyBSZWdFeHAoXCIoW1xcXFx3XFxcXC1cXFxcLlxcXFw6XSspXFxcXHMqPVxcXFxzKihbJ1xcXCJdKSgoLnxcXG4pKj8pXFxcXDJcIixcImdtXCIpO1xuY29uc3QgYXR0cnNSZWd4ID0gbmV3IFJlZ0V4cCgnKFteXFxcXHM9XSspXFxcXHMqKD1cXFxccyooW1xcJ1wiXSkoLio/KVxcXFwzKT8nLCAnZycpO1xuXG5mdW5jdGlvbiBidWlsZEF0dHJpYnV0ZXNNYXAoYXR0clN0ciwgb3B0aW9ucykge1xuICBpZiAoIW9wdGlvbnMuaWdub3JlQXR0cmlidXRlcyAmJiB0eXBlb2YgYXR0clN0ciA9PT0gJ3N0cmluZycpIHtcbiAgICBhdHRyU3RyID0gYXR0clN0ci5yZXBsYWNlKC9cXHI/XFxuL2csICcgJyk7XG4gICAgLy9hdHRyU3RyID0gYXR0clN0ciB8fCBhdHRyU3RyLnRyaW0oKTtcblxuICAgIGNvbnN0IG1hdGNoZXMgPSB1dGlsLmdldEFsbE1hdGNoZXMoYXR0clN0ciwgYXR0cnNSZWd4KTtcbiAgICBjb25zdCBsZW4gPSBtYXRjaGVzLmxlbmd0aDsgLy9kb24ndCBtYWtlIGl0IGlubGluZVxuICAgIGNvbnN0IGF0dHJzID0ge307XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgY29uc3QgYXR0ck5hbWUgPSByZXNvbHZlTmFtZVNwYWNlKG1hdGNoZXNbaV1bMV0sIG9wdGlvbnMpO1xuICAgICAgaWYgKGF0dHJOYW1lLmxlbmd0aCkge1xuICAgICAgICBpZiAobWF0Y2hlc1tpXVs0XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaWYgKG9wdGlvbnMudHJpbVZhbHVlcykge1xuICAgICAgICAgICAgbWF0Y2hlc1tpXVs0XSA9IG1hdGNoZXNbaV1bNF0udHJpbSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBtYXRjaGVzW2ldWzRdID0gb3B0aW9ucy5hdHRyVmFsdWVQcm9jZXNzb3IobWF0Y2hlc1tpXVs0XSwgYXR0ck5hbWUpO1xuICAgICAgICAgIGF0dHJzW29wdGlvbnMuYXR0cmlidXRlTmFtZVByZWZpeCArIGF0dHJOYW1lXSA9IHBhcnNlVmFsdWUoXG4gICAgICAgICAgICBtYXRjaGVzW2ldWzRdLFxuICAgICAgICAgICAgb3B0aW9ucy5wYXJzZUF0dHJpYnV0ZVZhbHVlLFxuICAgICAgICAgICAgb3B0aW9ucy5wYXJzZVRydWVOdW1iZXJPbmx5XG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmIChvcHRpb25zLmFsbG93Qm9vbGVhbkF0dHJpYnV0ZXMpIHtcbiAgICAgICAgICBhdHRyc1tvcHRpb25zLmF0dHJpYnV0ZU5hbWVQcmVmaXggKyBhdHRyTmFtZV0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghT2JqZWN0LmtleXMoYXR0cnMpLmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5hdHRyTm9kZU5hbWUpIHtcbiAgICAgIGNvbnN0IGF0dHJDb2xsZWN0aW9uID0ge307XG4gICAgICBhdHRyQ29sbGVjdGlvbltvcHRpb25zLmF0dHJOb2RlTmFtZV0gPSBhdHRycztcbiAgICAgIHJldHVybiBhdHRyQ29sbGVjdGlvbjtcbiAgICB9XG4gICAgcmV0dXJuIGF0dHJzO1xuICB9XG59XG5cbmNvbnN0IGdldFRyYXZlcnNhbE9iaiA9IGZ1bmN0aW9uKHhtbERhdGEsIG9wdGlvbnMpIHtcbiAgeG1sRGF0YSA9IHhtbERhdGEucmVwbGFjZSgvKFxcclxcbil8XFxuLywgXCIgXCIpO1xuICBvcHRpb25zID0gYnVpbGRPcHRpb25zKG9wdGlvbnMsIGRlZmF1bHRPcHRpb25zLCBwcm9wcyk7XG4gIGNvbnN0IHhtbE9iaiA9IG5ldyB4bWxOb2RlKCcheG1sJyk7XG4gIGxldCBjdXJyZW50Tm9kZSA9IHhtbE9iajtcbiAgbGV0IHRleHREYXRhID0gXCJcIjtcblxuLy9mdW5jdGlvbiBtYXRjaCh4bWxEYXRhKXtcbiAgZm9yKGxldCBpPTA7IGk8IHhtbERhdGEubGVuZ3RoOyBpKyspe1xuICAgIGNvbnN0IGNoID0geG1sRGF0YVtpXTtcbiAgICBpZihjaCA9PT0gJzwnKXtcbiAgICAgIGlmKCB4bWxEYXRhW2krMV0gPT09ICcvJykgey8vQ2xvc2luZyBUYWdcbiAgICAgICAgY29uc3QgY2xvc2VJbmRleCA9IGZpbmRDbG9zaW5nSW5kZXgoeG1sRGF0YSwgXCI+XCIsIGksIFwiQ2xvc2luZyBUYWcgaXMgbm90IGNsb3NlZC5cIilcbiAgICAgICAgbGV0IHRhZ05hbWUgPSB4bWxEYXRhLnN1YnN0cmluZyhpKzIsY2xvc2VJbmRleCkudHJpbSgpO1xuXG4gICAgICAgIGlmKG9wdGlvbnMuaWdub3JlTmFtZVNwYWNlKXtcbiAgICAgICAgICBjb25zdCBjb2xvbkluZGV4ID0gdGFnTmFtZS5pbmRleE9mKFwiOlwiKTtcbiAgICAgICAgICBpZihjb2xvbkluZGV4ICE9PSAtMSl7XG4gICAgICAgICAgICB0YWdOYW1lID0gdGFnTmFtZS5zdWJzdHIoY29sb25JbmRleCsxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvKiBpZiAoY3VycmVudE5vZGUucGFyZW50KSB7XG4gICAgICAgICAgY3VycmVudE5vZGUucGFyZW50LnZhbCA9IHV0aWwuZ2V0VmFsdWUoY3VycmVudE5vZGUucGFyZW50LnZhbCkgKyAnJyArIHByb2Nlc3NUYWdWYWx1ZTIodGFnTmFtZSwgdGV4dERhdGEgLCBvcHRpb25zKTtcbiAgICAgICAgfSAqL1xuICAgICAgICBpZihjdXJyZW50Tm9kZSl7XG4gICAgICAgICAgaWYoY3VycmVudE5vZGUudmFsKXtcbiAgICAgICAgICAgIGN1cnJlbnROb2RlLnZhbCA9IHV0aWwuZ2V0VmFsdWUoY3VycmVudE5vZGUudmFsKSArICcnICsgcHJvY2Vzc1RhZ1ZhbHVlKHRhZ05hbWUsIHRleHREYXRhICwgb3B0aW9ucyk7XG4gICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICBjdXJyZW50Tm9kZS52YWwgPSBwcm9jZXNzVGFnVmFsdWUodGFnTmFtZSwgdGV4dERhdGEgLCBvcHRpb25zKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5zdG9wTm9kZXMubGVuZ3RoICYmIG9wdGlvbnMuc3RvcE5vZGVzLmluY2x1ZGVzKGN1cnJlbnROb2RlLnRhZ25hbWUpKSB7XG4gICAgICAgICAgY3VycmVudE5vZGUuY2hpbGQgPSBbXVxuICAgICAgICAgIGlmIChjdXJyZW50Tm9kZS5hdHRyc01hcCA9PSB1bmRlZmluZWQpIHsgY3VycmVudE5vZGUuYXR0cnNNYXAgPSB7fX1cbiAgICAgICAgICBjdXJyZW50Tm9kZS52YWwgPSB4bWxEYXRhLnN1YnN0cihjdXJyZW50Tm9kZS5zdGFydEluZGV4ICsgMSwgaSAtIGN1cnJlbnROb2RlLnN0YXJ0SW5kZXggLSAxKVxuICAgICAgICB9XG4gICAgICAgIGN1cnJlbnROb2RlID0gY3VycmVudE5vZGUucGFyZW50O1xuICAgICAgICB0ZXh0RGF0YSA9IFwiXCI7XG4gICAgICAgIGkgPSBjbG9zZUluZGV4O1xuICAgICAgfSBlbHNlIGlmKCB4bWxEYXRhW2krMV0gPT09ICc/Jykge1xuICAgICAgICBpID0gZmluZENsb3NpbmdJbmRleCh4bWxEYXRhLCBcIj8+XCIsIGksIFwiUGkgVGFnIGlzIG5vdCBjbG9zZWQuXCIpXG4gICAgICB9IGVsc2UgaWYoeG1sRGF0YS5zdWJzdHIoaSArIDEsIDMpID09PSAnIS0tJykge1xuICAgICAgICBpID0gZmluZENsb3NpbmdJbmRleCh4bWxEYXRhLCBcIi0tPlwiLCBpLCBcIkNvbW1lbnQgaXMgbm90IGNsb3NlZC5cIilcbiAgICAgIH0gZWxzZSBpZiggeG1sRGF0YS5zdWJzdHIoaSArIDEsIDIpID09PSAnIUQnKSB7XG4gICAgICAgIGNvbnN0IGNsb3NlSW5kZXggPSBmaW5kQ2xvc2luZ0luZGV4KHhtbERhdGEsIFwiPlwiLCBpLCBcIkRPQ1RZUEUgaXMgbm90IGNsb3NlZC5cIilcbiAgICAgICAgY29uc3QgdGFnRXhwID0geG1sRGF0YS5zdWJzdHJpbmcoaSwgY2xvc2VJbmRleCk7XG4gICAgICAgIGlmKHRhZ0V4cC5pbmRleE9mKFwiW1wiKSA+PSAwKXtcbiAgICAgICAgICBpID0geG1sRGF0YS5pbmRleE9mKFwiXT5cIiwgaSkgKyAxO1xuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICBpID0gY2xvc2VJbmRleDtcbiAgICAgICAgfVxuICAgICAgfWVsc2UgaWYoeG1sRGF0YS5zdWJzdHIoaSArIDEsIDIpID09PSAnIVsnKSB7XG4gICAgICAgIGNvbnN0IGNsb3NlSW5kZXggPSBmaW5kQ2xvc2luZ0luZGV4KHhtbERhdGEsIFwiXV0+XCIsIGksIFwiQ0RBVEEgaXMgbm90IGNsb3NlZC5cIikgLSAyXG4gICAgICAgIGNvbnN0IHRhZ0V4cCA9IHhtbERhdGEuc3Vic3RyaW5nKGkgKyA5LGNsb3NlSW5kZXgpO1xuXG4gICAgICAgIC8vY29uc2lkZXJhdGlvbnNcbiAgICAgICAgLy8xLiBDREFUQSB3aWxsIGFsd2F5cyBoYXZlIHBhcmVudCBub2RlXG4gICAgICAgIC8vMi4gQSB0YWcgd2l0aCBDREFUQSBpcyBub3QgYSBsZWFmIG5vZGUgc28gaXQncyB2YWx1ZSB3b3VsZCBiZSBzdHJpbmcgdHlwZS5cbiAgICAgICAgaWYodGV4dERhdGEpe1xuICAgICAgICAgIGN1cnJlbnROb2RlLnZhbCA9IHV0aWwuZ2V0VmFsdWUoY3VycmVudE5vZGUudmFsKSArICcnICsgcHJvY2Vzc1RhZ1ZhbHVlKGN1cnJlbnROb2RlLnRhZ25hbWUsIHRleHREYXRhICwgb3B0aW9ucyk7XG4gICAgICAgICAgdGV4dERhdGEgPSBcIlwiO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuY2RhdGFUYWdOYW1lKSB7XG4gICAgICAgICAgLy9hZGQgY2RhdGEgbm9kZVxuICAgICAgICAgIGNvbnN0IGNoaWxkTm9kZSA9IG5ldyB4bWxOb2RlKG9wdGlvbnMuY2RhdGFUYWdOYW1lLCBjdXJyZW50Tm9kZSwgdGFnRXhwKTtcbiAgICAgICAgICBjdXJyZW50Tm9kZS5hZGRDaGlsZChjaGlsZE5vZGUpO1xuICAgICAgICAgIC8vZm9yIGJhY2t0cmFja2luZ1xuICAgICAgICAgIGN1cnJlbnROb2RlLnZhbCA9IHV0aWwuZ2V0VmFsdWUoY3VycmVudE5vZGUudmFsKSArIG9wdGlvbnMuY2RhdGFQb3NpdGlvbkNoYXI7XG4gICAgICAgICAgLy9hZGQgcmVzdCB2YWx1ZSB0byBwYXJlbnQgbm9kZVxuICAgICAgICAgIGlmICh0YWdFeHApIHtcbiAgICAgICAgICAgIGNoaWxkTm9kZS52YWwgPSB0YWdFeHA7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGN1cnJlbnROb2RlLnZhbCA9IChjdXJyZW50Tm9kZS52YWwgfHwgJycpICsgKHRhZ0V4cCB8fCAnJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpID0gY2xvc2VJbmRleCArIDI7XG4gICAgICB9ZWxzZSB7Ly9PcGVuaW5nIHRhZ1xuICAgICAgICBjb25zdCByZXN1bHQgPSBjbG9zaW5nSW5kZXhGb3JPcGVuaW5nVGFnKHhtbERhdGEsIGkrMSlcbiAgICAgICAgbGV0IHRhZ0V4cCA9IHJlc3VsdC5kYXRhO1xuICAgICAgICBjb25zdCBjbG9zZUluZGV4ID0gcmVzdWx0LmluZGV4O1xuICAgICAgICBjb25zdCBzZXBhcmF0b3JJbmRleCA9IHRhZ0V4cC5pbmRleE9mKFwiIFwiKTtcbiAgICAgICAgbGV0IHRhZ05hbWUgPSB0YWdFeHA7XG4gICAgICAgIGlmKHNlcGFyYXRvckluZGV4ICE9PSAtMSl7XG4gICAgICAgICAgdGFnTmFtZSA9IHRhZ0V4cC5zdWJzdHIoMCwgc2VwYXJhdG9ySW5kZXgpLnRyaW1SaWdodCgpO1xuICAgICAgICAgIHRhZ0V4cCA9IHRhZ0V4cC5zdWJzdHIoc2VwYXJhdG9ySW5kZXggKyAxKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKG9wdGlvbnMuaWdub3JlTmFtZVNwYWNlKXtcbiAgICAgICAgICBjb25zdCBjb2xvbkluZGV4ID0gdGFnTmFtZS5pbmRleE9mKFwiOlwiKTtcbiAgICAgICAgICBpZihjb2xvbkluZGV4ICE9PSAtMSl7XG4gICAgICAgICAgICB0YWdOYW1lID0gdGFnTmFtZS5zdWJzdHIoY29sb25JbmRleCsxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvL3NhdmUgdGV4dCB0byBwYXJlbnQgbm9kZVxuICAgICAgICBpZiAoY3VycmVudE5vZGUgJiYgdGV4dERhdGEpIHtcbiAgICAgICAgICBpZihjdXJyZW50Tm9kZS50YWduYW1lICE9PSAnIXhtbCcpe1xuICAgICAgICAgICAgY3VycmVudE5vZGUudmFsID0gdXRpbC5nZXRWYWx1ZShjdXJyZW50Tm9kZS52YWwpICsgJycgKyBwcm9jZXNzVGFnVmFsdWUoIGN1cnJlbnROb2RlLnRhZ25hbWUsIHRleHREYXRhLCBvcHRpb25zKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZih0YWdFeHAubGVuZ3RoID4gMCAmJiB0YWdFeHAubGFzdEluZGV4T2YoXCIvXCIpID09PSB0YWdFeHAubGVuZ3RoIC0gMSl7Ly9zZWxmQ2xvc2luZyB0YWdcblxuICAgICAgICAgIGlmKHRhZ05hbWVbdGFnTmFtZS5sZW5ndGggLSAxXSA9PT0gXCIvXCIpeyAvL3JlbW92ZSB0cmFpbGluZyAnLydcbiAgICAgICAgICAgIHRhZ05hbWUgPSB0YWdOYW1lLnN1YnN0cigwLCB0YWdOYW1lLmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgdGFnRXhwID0gdGFnTmFtZTtcbiAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIHRhZ0V4cCA9IHRhZ0V4cC5zdWJzdHIoMCwgdGFnRXhwLmxlbmd0aCAtIDEpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGNoaWxkTm9kZSA9IG5ldyB4bWxOb2RlKHRhZ05hbWUsIGN1cnJlbnROb2RlLCAnJyk7XG4gICAgICAgICAgaWYodGFnTmFtZSAhPT0gdGFnRXhwKXtcbiAgICAgICAgICAgIGNoaWxkTm9kZS5hdHRyc01hcCA9IGJ1aWxkQXR0cmlidXRlc01hcCh0YWdFeHAsIG9wdGlvbnMpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjdXJyZW50Tm9kZS5hZGRDaGlsZChjaGlsZE5vZGUpO1xuICAgICAgICB9ZWxzZXsvL29wZW5pbmcgdGFnXG5cbiAgICAgICAgICBjb25zdCBjaGlsZE5vZGUgPSBuZXcgeG1sTm9kZSggdGFnTmFtZSwgY3VycmVudE5vZGUgKTtcbiAgICAgICAgICBpZiAob3B0aW9ucy5zdG9wTm9kZXMubGVuZ3RoICYmIG9wdGlvbnMuc3RvcE5vZGVzLmluY2x1ZGVzKGNoaWxkTm9kZS50YWduYW1lKSkge1xuICAgICAgICAgICAgY2hpbGROb2RlLnN0YXJ0SW5kZXg9Y2xvc2VJbmRleDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYodGFnTmFtZSAhPT0gdGFnRXhwKXtcbiAgICAgICAgICAgIGNoaWxkTm9kZS5hdHRyc01hcCA9IGJ1aWxkQXR0cmlidXRlc01hcCh0YWdFeHAsIG9wdGlvbnMpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjdXJyZW50Tm9kZS5hZGRDaGlsZChjaGlsZE5vZGUpO1xuICAgICAgICAgIGN1cnJlbnROb2RlID0gY2hpbGROb2RlO1xuICAgICAgICB9XG4gICAgICAgIHRleHREYXRhID0gXCJcIjtcbiAgICAgICAgaSA9IGNsb3NlSW5kZXg7XG4gICAgICB9XG4gICAgfWVsc2V7XG4gICAgICB0ZXh0RGF0YSArPSB4bWxEYXRhW2ldO1xuICAgIH1cbiAgfVxuICByZXR1cm4geG1sT2JqO1xufVxuXG5mdW5jdGlvbiBjbG9zaW5nSW5kZXhGb3JPcGVuaW5nVGFnKGRhdGEsIGkpe1xuICBsZXQgYXR0ckJvdW5kYXJ5O1xuICBsZXQgdGFnRXhwID0gXCJcIjtcbiAgZm9yIChsZXQgaW5kZXggPSBpOyBpbmRleCA8IGRhdGEubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgbGV0IGNoID0gZGF0YVtpbmRleF07XG4gICAgaWYgKGF0dHJCb3VuZGFyeSkge1xuICAgICAgICBpZiAoY2ggPT09IGF0dHJCb3VuZGFyeSkgYXR0ckJvdW5kYXJ5ID0gXCJcIjsvL3Jlc2V0XG4gICAgfSBlbHNlIGlmIChjaCA9PT0gJ1wiJyB8fCBjaCA9PT0gXCInXCIpIHtcbiAgICAgICAgYXR0ckJvdW5kYXJ5ID0gY2g7XG4gICAgfSBlbHNlIGlmIChjaCA9PT0gJz4nKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZGF0YTogdGFnRXhwLFxuICAgICAgICAgIGluZGV4OiBpbmRleFxuICAgICAgICB9XG4gICAgfSBlbHNlIGlmIChjaCA9PT0gJ1xcdCcpIHtcbiAgICAgIGNoID0gXCIgXCJcbiAgICB9XG4gICAgdGFnRXhwICs9IGNoO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZpbmRDbG9zaW5nSW5kZXgoeG1sRGF0YSwgc3RyLCBpLCBlcnJNc2cpe1xuICBjb25zdCBjbG9zaW5nSW5kZXggPSB4bWxEYXRhLmluZGV4T2Yoc3RyLCBpKTtcbiAgaWYoY2xvc2luZ0luZGV4ID09PSAtMSl7XG4gICAgdGhyb3cgbmV3IEVycm9yKGVyck1zZylcbiAgfWVsc2V7XG4gICAgcmV0dXJuIGNsb3NpbmdJbmRleCArIHN0ci5sZW5ndGggLSAxO1xuICB9XG59XG5cbmV4cG9ydHMuZ2V0VHJhdmVyc2FsT2JqID0gZ2V0VHJhdmVyc2FsT2JqO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///193\n"); +eval("\n\nvar util = __webpack_require__(/*! ./util */ 200);\nvar buildOptions = __webpack_require__(/*! ./util */ 200).buildOptions;\nvar xmlNode = __webpack_require__(/*! ./xmlNode */ 202);\nvar regx = '<((!\\\\[CDATA\\\\[([\\\\s\\\\S]*?)(]]>))|((NAME:)?(NAME))([^>]*)>|((\\\\/)(NAME)\\\\s*>))([^<]*)'.replace(/NAME/g, util.nameRegexp);\n\n//const tagsRegx = new RegExp(\"<(\\\\/?[\\\\w:\\\\-\\._]+)([^>]*)>(\\\\s*\"+cdataRegx+\")*([^<]+)?\",\"g\");\n//const tagsRegx = new RegExp(\"<(\\\\/?)((\\\\w*:)?([\\\\w:\\\\-\\._]+))([^>]*)>([^<]*)(\"+cdataRegx+\"([^<]*))*([^<]+)?\",\"g\");\n\n//polyfill\nif (!Number.parseInt && window.parseInt) {\n Number.parseInt = window.parseInt;\n}\nif (!Number.parseFloat && window.parseFloat) {\n Number.parseFloat = window.parseFloat;\n}\nvar defaultOptions = {\n attributeNamePrefix: '@_',\n attrNodeName: false,\n textNodeName: '#text',\n ignoreAttributes: true,\n ignoreNameSpace: false,\n allowBooleanAttributes: false,\n //a tag can have attributes without any value\n //ignoreRootElement : false,\n parseNodeValue: true,\n parseAttributeValue: false,\n arrayMode: false,\n trimValues: true,\n //Trim string values of tag and attributes\n cdataTagName: false,\n cdataPositionChar: '\\\\c',\n tagValueProcessor: function tagValueProcessor(a, tagName) {\n return a;\n },\n attrValueProcessor: function attrValueProcessor(a, attrName) {\n return a;\n },\n stopNodes: []\n //decodeStrict: false,\n};\n\nexports.defaultOptions = defaultOptions;\nvar props = ['attributeNamePrefix', 'attrNodeName', 'textNodeName', 'ignoreAttributes', 'ignoreNameSpace', 'allowBooleanAttributes', 'parseNodeValue', 'parseAttributeValue', 'arrayMode', 'trimValues', 'cdataTagName', 'cdataPositionChar', 'tagValueProcessor', 'attrValueProcessor', 'parseTrueNumberOnly', 'stopNodes'];\nexports.props = props;\n\n/**\n * Trim -> valueProcessor -> parse value\n * @param {string} tagName\n * @param {string} val\n * @param {object} options\n */\nfunction processTagValue(tagName, val, options) {\n if (val) {\n if (options.trimValues) {\n val = val.trim();\n }\n val = options.tagValueProcessor(val, tagName);\n val = parseValue(val, options.parseNodeValue, options.parseTrueNumberOnly);\n }\n return val;\n}\nfunction resolveNameSpace(tagname, options) {\n if (options.ignoreNameSpace) {\n var tags = tagname.split(':');\n var prefix = tagname.charAt(0) === '/' ? '/' : '';\n if (tags[0] === 'xmlns') {\n return '';\n }\n if (tags.length === 2) {\n tagname = prefix + tags[1];\n }\n }\n return tagname;\n}\nfunction parseValue(val, shouldParse, parseTrueNumberOnly) {\n if (shouldParse && typeof val === 'string') {\n var parsed;\n if (val.trim() === '' || isNaN(val)) {\n parsed = val === 'true' ? true : val === 'false' ? false : val;\n } else {\n if (val.indexOf('0x') !== -1) {\n //support hexa decimal\n parsed = Number.parseInt(val, 16);\n } else if (val.indexOf('.') !== -1) {\n parsed = Number.parseFloat(val);\n val = val.replace(/\\.?0+$/, \"\");\n } else {\n parsed = Number.parseInt(val, 10);\n }\n if (parseTrueNumberOnly) {\n parsed = String(parsed) === val ? parsed : val;\n }\n }\n return parsed;\n } else {\n if (util.isExist(val)) {\n return val;\n } else {\n return '';\n }\n }\n}\n\n//TODO: change regex to capture NS\n//const attrsRegx = new RegExp(\"([\\\\w\\\\-\\\\.\\\\:]+)\\\\s*=\\\\s*(['\\\"])((.|\\n)*?)\\\\2\",\"gm\");\nvar attrsRegx = new RegExp('([^\\\\s=]+)\\\\s*(=\\\\s*([\\'\"])(.*?)\\\\3)?', 'g');\nfunction buildAttributesMap(attrStr, options) {\n if (!options.ignoreAttributes && typeof attrStr === 'string') {\n attrStr = attrStr.replace(/\\r?\\n/g, ' ');\n //attrStr = attrStr || attrStr.trim();\n\n var matches = util.getAllMatches(attrStr, attrsRegx);\n var len = matches.length; //don't make it inline\n var attrs = {};\n for (var i = 0; i < len; i++) {\n var attrName = resolveNameSpace(matches[i][1], options);\n if (attrName.length) {\n if (matches[i][4] !== undefined) {\n if (options.trimValues) {\n matches[i][4] = matches[i][4].trim();\n }\n matches[i][4] = options.attrValueProcessor(matches[i][4], attrName);\n attrs[options.attributeNamePrefix + attrName] = parseValue(matches[i][4], options.parseAttributeValue, options.parseTrueNumberOnly);\n } else if (options.allowBooleanAttributes) {\n attrs[options.attributeNamePrefix + attrName] = true;\n }\n }\n }\n if (!Object.keys(attrs).length) {\n return;\n }\n if (options.attrNodeName) {\n var attrCollection = {};\n attrCollection[options.attrNodeName] = attrs;\n return attrCollection;\n }\n return attrs;\n }\n}\nvar getTraversalObj = function getTraversalObj(xmlData, options) {\n xmlData = xmlData.replace(/(\\r\\n)|\\n/, \" \");\n options = buildOptions(options, defaultOptions, props);\n var xmlObj = new xmlNode('!xml');\n var currentNode = xmlObj;\n var textData = \"\";\n\n //function match(xmlData){\n for (var i = 0; i < xmlData.length; i++) {\n var ch = xmlData[i];\n if (ch === '<') {\n if (xmlData[i + 1] === '/') {\n //Closing Tag\n var closeIndex = findClosingIndex(xmlData, \">\", i, \"Closing Tag is not closed.\");\n var tagName = xmlData.substring(i + 2, closeIndex).trim();\n if (options.ignoreNameSpace) {\n var colonIndex = tagName.indexOf(\":\");\n if (colonIndex !== -1) {\n tagName = tagName.substr(colonIndex + 1);\n }\n }\n\n /* if (currentNode.parent) {\n currentNode.parent.val = util.getValue(currentNode.parent.val) + '' + processTagValue2(tagName, textData , options);\n } */\n if (currentNode) {\n if (currentNode.val) {\n currentNode.val = util.getValue(currentNode.val) + '' + processTagValue(tagName, textData, options);\n } else {\n currentNode.val = processTagValue(tagName, textData, options);\n }\n }\n if (options.stopNodes.length && options.stopNodes.includes(currentNode.tagname)) {\n currentNode.child = [];\n if (currentNode.attrsMap == undefined) {\n currentNode.attrsMap = {};\n }\n currentNode.val = xmlData.substr(currentNode.startIndex + 1, i - currentNode.startIndex - 1);\n }\n currentNode = currentNode.parent;\n textData = \"\";\n i = closeIndex;\n } else if (xmlData[i + 1] === '?') {\n i = findClosingIndex(xmlData, \"?>\", i, \"Pi Tag is not closed.\");\n } else if (xmlData.substr(i + 1, 3) === '!--') {\n i = findClosingIndex(xmlData, \"-->\", i, \"Comment is not closed.\");\n } else if (xmlData.substr(i + 1, 2) === '!D') {\n var _closeIndex = findClosingIndex(xmlData, \">\", i, \"DOCTYPE is not closed.\");\n var tagExp = xmlData.substring(i, _closeIndex);\n if (tagExp.indexOf(\"[\") >= 0) {\n i = xmlData.indexOf(\"]>\", i) + 1;\n } else {\n i = _closeIndex;\n }\n } else if (xmlData.substr(i + 1, 2) === '![') {\n var _closeIndex2 = findClosingIndex(xmlData, \"]]>\", i, \"CDATA is not closed.\") - 2;\n var _tagExp = xmlData.substring(i + 9, _closeIndex2);\n\n //considerations\n //1. CDATA will always have parent node\n //2. A tag with CDATA is not a leaf node so it's value would be string type.\n if (textData) {\n currentNode.val = util.getValue(currentNode.val) + '' + processTagValue(currentNode.tagname, textData, options);\n textData = \"\";\n }\n if (options.cdataTagName) {\n //add cdata node\n var childNode = new xmlNode(options.cdataTagName, currentNode, _tagExp);\n currentNode.addChild(childNode);\n //for backtracking\n currentNode.val = util.getValue(currentNode.val) + options.cdataPositionChar;\n //add rest value to parent node\n if (_tagExp) {\n childNode.val = _tagExp;\n }\n } else {\n currentNode.val = (currentNode.val || '') + (_tagExp || '');\n }\n i = _closeIndex2 + 2;\n } else {\n //Opening tag\n var result = closingIndexForOpeningTag(xmlData, i + 1);\n var _tagExp2 = result.data;\n var _closeIndex3 = result.index;\n var separatorIndex = _tagExp2.indexOf(\" \");\n var _tagName = _tagExp2;\n if (separatorIndex !== -1) {\n _tagName = _tagExp2.substr(0, separatorIndex).trimRight();\n _tagExp2 = _tagExp2.substr(separatorIndex + 1);\n }\n if (options.ignoreNameSpace) {\n var _colonIndex = _tagName.indexOf(\":\");\n if (_colonIndex !== -1) {\n _tagName = _tagName.substr(_colonIndex + 1);\n }\n }\n\n //save text to parent node\n if (currentNode && textData) {\n if (currentNode.tagname !== '!xml') {\n currentNode.val = util.getValue(currentNode.val) + '' + processTagValue(currentNode.tagname, textData, options);\n }\n }\n if (_tagExp2.length > 0 && _tagExp2.lastIndexOf(\"/\") === _tagExp2.length - 1) {\n //selfClosing tag\n\n if (_tagName[_tagName.length - 1] === \"/\") {\n //remove trailing '/'\n _tagName = _tagName.substr(0, _tagName.length - 1);\n _tagExp2 = _tagName;\n } else {\n _tagExp2 = _tagExp2.substr(0, _tagExp2.length - 1);\n }\n var _childNode = new xmlNode(_tagName, currentNode, '');\n if (_tagName !== _tagExp2) {\n _childNode.attrsMap = buildAttributesMap(_tagExp2, options);\n }\n currentNode.addChild(_childNode);\n } else {\n //opening tag\n\n var _childNode2 = new xmlNode(_tagName, currentNode);\n if (options.stopNodes.length && options.stopNodes.includes(_childNode2.tagname)) {\n _childNode2.startIndex = _closeIndex3;\n }\n if (_tagName !== _tagExp2) {\n _childNode2.attrsMap = buildAttributesMap(_tagExp2, options);\n }\n currentNode.addChild(_childNode2);\n currentNode = _childNode2;\n }\n textData = \"\";\n i = _closeIndex3;\n }\n } else {\n textData += xmlData[i];\n }\n }\n return xmlObj;\n};\nfunction closingIndexForOpeningTag(data, i) {\n var attrBoundary;\n var tagExp = \"\";\n for (var index = i; index < data.length; index++) {\n var ch = data[index];\n if (attrBoundary) {\n if (ch === attrBoundary) attrBoundary = \"\"; //reset\n } else if (ch === '\"' || ch === \"'\") {\n attrBoundary = ch;\n } else if (ch === '>') {\n return {\n data: tagExp,\n index: index\n };\n } else if (ch === '\\t') {\n ch = \" \";\n }\n tagExp += ch;\n }\n}\nfunction findClosingIndex(xmlData, str, i, errMsg) {\n var closingIndex = xmlData.indexOf(str, i);\n if (closingIndex === -1) {\n throw new Error(errMsg);\n } else {\n return closingIndex + str.length - 1;\n }\n}\nexports.getTraversalObj = getTraversalObj;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vc3RhdGljL2Zhc3QteG1sLXBhcnNlci9zcmMveG1sc3RyMnhtbG5vZGUuanMiXSwibmFtZXMiOlsidXRpbCIsInJlcXVpcmUiLCJidWlsZE9wdGlvbnMiLCJ4bWxOb2RlIiwicmVneCIsInJlcGxhY2UiLCJuYW1lUmVnZXhwIiwiTnVtYmVyIiwicGFyc2VJbnQiLCJ3aW5kb3ciLCJwYXJzZUZsb2F0IiwiZGVmYXVsdE9wdGlvbnMiLCJhdHRyaWJ1dGVOYW1lUHJlZml4IiwiYXR0ck5vZGVOYW1lIiwidGV4dE5vZGVOYW1lIiwiaWdub3JlQXR0cmlidXRlcyIsImlnbm9yZU5hbWVTcGFjZSIsImFsbG93Qm9vbGVhbkF0dHJpYnV0ZXMiLCJwYXJzZU5vZGVWYWx1ZSIsInBhcnNlQXR0cmlidXRlVmFsdWUiLCJhcnJheU1vZGUiLCJ0cmltVmFsdWVzIiwiY2RhdGFUYWdOYW1lIiwiY2RhdGFQb3NpdGlvbkNoYXIiLCJ0YWdWYWx1ZVByb2Nlc3NvciIsImEiLCJ0YWdOYW1lIiwiYXR0clZhbHVlUHJvY2Vzc29yIiwiYXR0ck5hbWUiLCJzdG9wTm9kZXMiLCJleHBvcnRzIiwicHJvcHMiLCJwcm9jZXNzVGFnVmFsdWUiLCJ2YWwiLCJvcHRpb25zIiwidHJpbSIsInBhcnNlVmFsdWUiLCJwYXJzZVRydWVOdW1iZXJPbmx5IiwicmVzb2x2ZU5hbWVTcGFjZSIsInRhZ25hbWUiLCJ0YWdzIiwic3BsaXQiLCJwcmVmaXgiLCJjaGFyQXQiLCJsZW5ndGgiLCJzaG91bGRQYXJzZSIsInBhcnNlZCIsImlzTmFOIiwiaW5kZXhPZiIsIlN0cmluZyIsImlzRXhpc3QiLCJhdHRyc1JlZ3giLCJSZWdFeHAiLCJidWlsZEF0dHJpYnV0ZXNNYXAiLCJhdHRyU3RyIiwibWF0Y2hlcyIsImdldEFsbE1hdGNoZXMiLCJsZW4iLCJhdHRycyIsImkiLCJ1bmRlZmluZWQiLCJPYmplY3QiLCJrZXlzIiwiYXR0ckNvbGxlY3Rpb24iLCJnZXRUcmF2ZXJzYWxPYmoiLCJ4bWxEYXRhIiwieG1sT2JqIiwiY3VycmVudE5vZGUiLCJ0ZXh0RGF0YSIsImNoIiwiY2xvc2VJbmRleCIsImZpbmRDbG9zaW5nSW5kZXgiLCJzdWJzdHJpbmciLCJjb2xvbkluZGV4Iiwic3Vic3RyIiwiZ2V0VmFsdWUiLCJpbmNsdWRlcyIsImNoaWxkIiwiYXR0cnNNYXAiLCJzdGFydEluZGV4IiwicGFyZW50IiwidGFnRXhwIiwiY2hpbGROb2RlIiwiYWRkQ2hpbGQiLCJyZXN1bHQiLCJjbG9zaW5nSW5kZXhGb3JPcGVuaW5nVGFnIiwiZGF0YSIsImluZGV4Iiwic2VwYXJhdG9ySW5kZXgiLCJ0cmltUmlnaHQiLCJsYXN0SW5kZXhPZiIsImF0dHJCb3VuZGFyeSIsInN0ciIsImVyck1zZyIsImNsb3NpbmdJbmRleCIsIkVycm9yIl0sIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixJQUFNQSxJQUFJLEdBQUdDLG1CQUFPLENBQUMsaUJBQVEsQ0FBQztBQUM5QixJQUFNQyxZQUFZLEdBQUdELG1CQUFPLENBQUMsaUJBQVEsQ0FBQyxDQUFDQyxZQUFZO0FBQ25ELElBQU1DLE9BQU8sR0FBR0YsbUJBQU8sQ0FBQyxvQkFBVyxDQUFDO0FBQ3BDLElBQU1HLElBQUksR0FDUix1RkFBdUYsQ0FDdEZDLE9BQU8sQ0FBQyxPQUFPLEVBQUVMLElBQUksQ0FBQ00sVUFBVSxDQUFDOztBQUVwQztBQUNBOztBQUVBO0FBQ0EsSUFBSSxDQUFDQyxNQUFNLENBQUNDLFFBQVEsSUFBSUMsTUFBTSxDQUFDRCxRQUFRLEVBQUU7RUFDdkNELE1BQU0sQ0FBQ0MsUUFBUSxHQUFHQyxNQUFNLENBQUNELFFBQVE7QUFDbkM7QUFDQSxJQUFJLENBQUNELE1BQU0sQ0FBQ0csVUFBVSxJQUFJRCxNQUFNLENBQUNDLFVBQVUsRUFBRTtFQUMzQ0gsTUFBTSxDQUFDRyxVQUFVLEdBQUdELE1BQU0sQ0FBQ0MsVUFBVTtBQUN2QztBQUVBLElBQU1DLGNBQWMsR0FBRztFQUNyQkMsbUJBQW1CLEVBQUUsSUFBSTtFQUN6QkMsWUFBWSxFQUFFLEtBQUs7RUFDbkJDLFlBQVksRUFBRSxPQUFPO0VBQ3JCQyxnQkFBZ0IsRUFBRSxJQUFJO0VBQ3RCQyxlQUFlLEVBQUUsS0FBSztFQUN0QkMsc0JBQXNCLEVBQUUsS0FBSztFQUFFO0VBQy9CO0VBQ0FDLGNBQWMsRUFBRSxJQUFJO0VBQ3BCQyxtQkFBbUIsRUFBRSxLQUFLO0VBQzFCQyxTQUFTLEVBQUUsS0FBSztFQUNoQkMsVUFBVSxFQUFFLElBQUk7RUFBRTtFQUNsQkMsWUFBWSxFQUFFLEtBQUs7RUFDbkJDLGlCQUFpQixFQUFFLEtBQUs7RUFDeEJDLGlCQUFpQixFQUFFLDJCQUFTQyxDQUFDLEVBQUVDLE9BQU8sRUFBRTtJQUN0QyxPQUFPRCxDQUFDO0VBQ1YsQ0FBQztFQUNERSxrQkFBa0IsRUFBRSw0QkFBU0YsQ0FBQyxFQUFFRyxRQUFRLEVBQUU7SUFDeEMsT0FBT0gsQ0FBQztFQUNWLENBQUM7RUFDREksU0FBUyxFQUFFO0VBQ1g7QUFDRixDQUFDOztBQUVEQyxPQUFPLENBQUNuQixjQUFjLEdBQUdBLGNBQWM7QUFFdkMsSUFBTW9CLEtBQUssR0FBRyxDQUNaLHFCQUFxQixFQUNyQixjQUFjLEVBQ2QsY0FBYyxFQUNkLGtCQUFrQixFQUNsQixpQkFBaUIsRUFDakIsd0JBQXdCLEVBQ3hCLGdCQUFnQixFQUNoQixxQkFBcUIsRUFDckIsV0FBVyxFQUNYLFlBQVksRUFDWixjQUFjLEVBQ2QsbUJBQW1CLEVBQ25CLG1CQUFtQixFQUNuQixvQkFBb0IsRUFDcEIscUJBQXFCLEVBQ3JCLFdBQVcsQ0FDWjtBQUNERCxPQUFPLENBQUNDLEtBQUssR0FBR0EsS0FBSzs7QUFFckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBU0MsZUFBZSxDQUFDTixPQUFPLEVBQUVPLEdBQUcsRUFBRUMsT0FBTyxFQUFFO0VBQzlDLElBQUlELEdBQUcsRUFBRTtJQUNQLElBQUlDLE9BQU8sQ0FBQ2IsVUFBVSxFQUFFO01BQ3RCWSxHQUFHLEdBQUdBLEdBQUcsQ0FBQ0UsSUFBSSxFQUFFO0lBQ2xCO0lBQ0FGLEdBQUcsR0FBR0MsT0FBTyxDQUFDVixpQkFBaUIsQ0FBQ1MsR0FBRyxFQUFFUCxPQUFPLENBQUM7SUFDN0NPLEdBQUcsR0FBR0csVUFBVSxDQUFDSCxHQUFHLEVBQUVDLE9BQU8sQ0FBQ2hCLGNBQWMsRUFBRWdCLE9BQU8sQ0FBQ0csbUJBQW1CLENBQUM7RUFDNUU7RUFFQSxPQUFPSixHQUFHO0FBQ1o7QUFFQSxTQUFTSyxnQkFBZ0IsQ0FBQ0MsT0FBTyxFQUFFTCxPQUFPLEVBQUU7RUFDMUMsSUFBSUEsT0FBTyxDQUFDbEIsZUFBZSxFQUFFO0lBQzNCLElBQU13QixJQUFJLEdBQUdELE9BQU8sQ0FBQ0UsS0FBSyxDQUFDLEdBQUcsQ0FBQztJQUMvQixJQUFNQyxNQUFNLEdBQUdILE9BQU8sQ0FBQ0ksTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRTtJQUNuRCxJQUFJSCxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssT0FBTyxFQUFFO01BQ3ZCLE9BQU8sRUFBRTtJQUNYO0lBQ0EsSUFBSUEsSUFBSSxDQUFDSSxNQUFNLEtBQUssQ0FBQyxFQUFFO01BQ3JCTCxPQUFPLEdBQUdHLE1BQU0sR0FBR0YsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUM1QjtFQUNGO0VBQ0EsT0FBT0QsT0FBTztBQUNoQjtBQUVBLFNBQVNILFVBQVUsQ0FBQ0gsR0FBRyxFQUFFWSxXQUFXLEVBQUVSLG1CQUFtQixFQUFFO0VBQ3pELElBQUlRLFdBQVcsSUFBSSxPQUFPWixHQUFHLEtBQUssUUFBUSxFQUFFO0lBQzFDLElBQUlhLE1BQU07SUFDVixJQUFJYixHQUFHLENBQUNFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSVksS0FBSyxDQUFDZCxHQUFHLENBQUMsRUFBRTtNQUNuQ2EsTUFBTSxHQUFHYixHQUFHLEtBQUssTUFBTSxHQUFHLElBQUksR0FBR0EsR0FBRyxLQUFLLE9BQU8sR0FBRyxLQUFLLEdBQUdBLEdBQUc7SUFDaEUsQ0FBQyxNQUFNO01BQ0wsSUFBSUEsR0FBRyxDQUFDZSxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7UUFDNUI7UUFDQUYsTUFBTSxHQUFHdkMsTUFBTSxDQUFDQyxRQUFRLENBQUN5QixHQUFHLEVBQUUsRUFBRSxDQUFDO01BQ25DLENBQUMsTUFBTSxJQUFJQSxHQUFHLENBQUNlLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtRQUNsQ0YsTUFBTSxHQUFHdkMsTUFBTSxDQUFDRyxVQUFVLENBQUN1QixHQUFHLENBQUM7UUFDL0JBLEdBQUcsR0FBR0EsR0FBRyxDQUFDNUIsT0FBTyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUM7TUFDakMsQ0FBQyxNQUFNO1FBQ0x5QyxNQUFNLEdBQUd2QyxNQUFNLENBQUNDLFFBQVEsQ0FBQ3lCLEdBQUcsRUFBRSxFQUFFLENBQUM7TUFDbkM7TUFDQSxJQUFJSSxtQkFBbUIsRUFBRTtRQUN2QlMsTUFBTSxHQUFHRyxNQUFNLENBQUNILE1BQU0sQ0FBQyxLQUFLYixHQUFHLEdBQUdhLE1BQU0sR0FBR2IsR0FBRztNQUNoRDtJQUNGO0lBQ0EsT0FBT2EsTUFBTTtFQUNmLENBQUMsTUFBTTtJQUNMLElBQUk5QyxJQUFJLENBQUNrRCxPQUFPLENBQUNqQixHQUFHLENBQUMsRUFBRTtNQUNyQixPQUFPQSxHQUFHO0lBQ1osQ0FBQyxNQUFNO01BQ0wsT0FBTyxFQUFFO0lBQ1g7RUFDRjtBQUNGOztBQUVBO0FBQ0E7QUFDQSxJQUFNa0IsU0FBUyxHQUFHLElBQUlDLE1BQU0sQ0FBQyx1Q0FBdUMsRUFBRSxHQUFHLENBQUM7QUFFMUUsU0FBU0Msa0JBQWtCLENBQUNDLE9BQU8sRUFBRXBCLE9BQU8sRUFBRTtFQUM1QyxJQUFJLENBQUNBLE9BQU8sQ0FBQ25CLGdCQUFnQixJQUFJLE9BQU91QyxPQUFPLEtBQUssUUFBUSxFQUFFO0lBQzVEQSxPQUFPLEdBQUdBLE9BQU8sQ0FBQ2pELE9BQU8sQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDO0lBQ3hDOztJQUVBLElBQU1rRCxPQUFPLEdBQUd2RCxJQUFJLENBQUN3RCxhQUFhLENBQUNGLE9BQU8sRUFBRUgsU0FBUyxDQUFDO0lBQ3RELElBQU1NLEdBQUcsR0FBR0YsT0FBTyxDQUFDWCxNQUFNLENBQUMsQ0FBQztJQUM1QixJQUFNYyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBQ2hCLEtBQUssSUFBSUMsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHRixHQUFHLEVBQUVFLENBQUMsRUFBRSxFQUFFO01BQzVCLElBQU0vQixRQUFRLEdBQUdVLGdCQUFnQixDQUFDaUIsT0FBTyxDQUFDSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRXpCLE9BQU8sQ0FBQztNQUN6RCxJQUFJTixRQUFRLENBQUNnQixNQUFNLEVBQUU7UUFDbkIsSUFBSVcsT0FBTyxDQUFDSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBS0MsU0FBUyxFQUFFO1VBQy9CLElBQUkxQixPQUFPLENBQUNiLFVBQVUsRUFBRTtZQUN0QmtDLE9BQU8sQ0FBQ0ksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdKLE9BQU8sQ0FBQ0ksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUN4QixJQUFJLEVBQUU7VUFDdEM7VUFDQW9CLE9BQU8sQ0FBQ0ksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUd6QixPQUFPLENBQUNQLGtCQUFrQixDQUFDNEIsT0FBTyxDQUFDSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRS9CLFFBQVEsQ0FBQztVQUNuRThCLEtBQUssQ0FBQ3hCLE9BQU8sQ0FBQ3RCLG1CQUFtQixHQUFHZ0IsUUFBUSxDQUFDLEdBQUdRLFVBQVUsQ0FDeERtQixPQUFPLENBQUNJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUNiekIsT0FBTyxDQUFDZixtQkFBbUIsRUFDM0JlLE9BQU8sQ0FBQ0csbUJBQW1CLENBQzVCO1FBQ0gsQ0FBQyxNQUFNLElBQUlILE9BQU8sQ0FBQ2pCLHNCQUFzQixFQUFFO1VBQ3pDeUMsS0FBSyxDQUFDeEIsT0FBTyxDQUFDdEIsbUJBQW1CLEdBQUdnQixRQUFRLENBQUMsR0FBRyxJQUFJO1FBQ3REO01BQ0Y7SUFDRjtJQUNBLElBQUksQ0FBQ2lDLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDSixLQUFLLENBQUMsQ0FBQ2QsTUFBTSxFQUFFO01BQzlCO0lBQ0Y7SUFDQSxJQUFJVixPQUFPLENBQUNyQixZQUFZLEVBQUU7TUFDeEIsSUFBTWtELGNBQWMsR0FBRyxDQUFDLENBQUM7TUFDekJBLGNBQWMsQ0FBQzdCLE9BQU8sQ0FBQ3JCLFlBQVksQ0FBQyxHQUFHNkMsS0FBSztNQUM1QyxPQUFPSyxjQUFjO0lBQ3ZCO0lBQ0EsT0FBT0wsS0FBSztFQUNkO0FBQ0Y7QUFFQSxJQUFNTSxlQUFlLEdBQUcsU0FBbEJBLGVBQWUsQ0FBWUMsT0FBTyxFQUFFL0IsT0FBTyxFQUFFO0VBQ2pEK0IsT0FBTyxHQUFHQSxPQUFPLENBQUM1RCxPQUFPLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQztFQUMzQzZCLE9BQU8sR0FBR2hDLFlBQVksQ0FBQ2dDLE9BQU8sRUFBRXZCLGNBQWMsRUFBRW9CLEtBQUssQ0FBQztFQUN0RCxJQUFNbUMsTUFBTSxHQUFHLElBQUkvRCxPQUFPLENBQUMsTUFBTSxDQUFDO0VBQ2xDLElBQUlnRSxXQUFXLEdBQUdELE1BQU07RUFDeEIsSUFBSUUsUUFBUSxHQUFHLEVBQUU7O0VBRW5CO0VBQ0UsS0FBSSxJQUFJVCxDQUFDLEdBQUMsQ0FBQyxFQUFFQSxDQUFDLEdBQUVNLE9BQU8sQ0FBQ3JCLE1BQU0sRUFBRWUsQ0FBQyxFQUFFLEVBQUM7SUFDbEMsSUFBTVUsRUFBRSxHQUFHSixPQUFPLENBQUNOLENBQUMsQ0FBQztJQUNyQixJQUFHVSxFQUFFLEtBQUssR0FBRyxFQUFDO01BQ1osSUFBSUosT0FBTyxDQUFDTixDQUFDLEdBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFO1FBQUM7UUFDekIsSUFBTVcsVUFBVSxHQUFHQyxnQkFBZ0IsQ0FBQ04sT0FBTyxFQUFFLEdBQUcsRUFBRU4sQ0FBQyxFQUFFLDRCQUE0QixDQUFDO1FBQ2xGLElBQUlqQyxPQUFPLEdBQUd1QyxPQUFPLENBQUNPLFNBQVMsQ0FBQ2IsQ0FBQyxHQUFDLENBQUMsRUFBQ1csVUFBVSxDQUFDLENBQUNuQyxJQUFJLEVBQUU7UUFFdEQsSUFBR0QsT0FBTyxDQUFDbEIsZUFBZSxFQUFDO1VBQ3pCLElBQU15RCxVQUFVLEdBQUcvQyxPQUFPLENBQUNzQixPQUFPLENBQUMsR0FBRyxDQUFDO1VBQ3ZDLElBQUd5QixVQUFVLEtBQUssQ0FBQyxDQUFDLEVBQUM7WUFDbkIvQyxPQUFPLEdBQUdBLE9BQU8sQ0FBQ2dELE1BQU0sQ0FBQ0QsVUFBVSxHQUFDLENBQUMsQ0FBQztVQUN4QztRQUNGOztRQUVBO0FBQ1I7QUFDQTtRQUNRLElBQUdOLFdBQVcsRUFBQztVQUNiLElBQUdBLFdBQVcsQ0FBQ2xDLEdBQUcsRUFBQztZQUNqQmtDLFdBQVcsQ0FBQ2xDLEdBQUcsR0FBR2pDLElBQUksQ0FBQzJFLFFBQVEsQ0FBQ1IsV0FBVyxDQUFDbEMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHRCxlQUFlLENBQUNOLE9BQU8sRUFBRTBDLFFBQVEsRUFBR2xDLE9BQU8sQ0FBQztVQUN0RyxDQUFDLE1BQUk7WUFDSGlDLFdBQVcsQ0FBQ2xDLEdBQUcsR0FBR0QsZUFBZSxDQUFDTixPQUFPLEVBQUUwQyxRQUFRLEVBQUdsQyxPQUFPLENBQUM7VUFDaEU7UUFDRjtRQUVBLElBQUlBLE9BQU8sQ0FBQ0wsU0FBUyxDQUFDZSxNQUFNLElBQUlWLE9BQU8sQ0FBQ0wsU0FBUyxDQUFDK0MsUUFBUSxDQUFDVCxXQUFXLENBQUM1QixPQUFPLENBQUMsRUFBRTtVQUMvRTRCLFdBQVcsQ0FBQ1UsS0FBSyxHQUFHLEVBQUU7VUFDdEIsSUFBSVYsV0FBVyxDQUFDVyxRQUFRLElBQUlsQixTQUFTLEVBQUU7WUFBRU8sV0FBVyxDQUFDVyxRQUFRLEdBQUcsQ0FBQyxDQUFDO1VBQUE7VUFDbEVYLFdBQVcsQ0FBQ2xDLEdBQUcsR0FBR2dDLE9BQU8sQ0FBQ1MsTUFBTSxDQUFDUCxXQUFXLENBQUNZLFVBQVUsR0FBRyxDQUFDLEVBQUVwQixDQUFDLEdBQUdRLFdBQVcsQ0FBQ1ksVUFBVSxHQUFHLENBQUMsQ0FBQztRQUM5RjtRQUNBWixXQUFXLEdBQUdBLFdBQVcsQ0FBQ2EsTUFBTTtRQUNoQ1osUUFBUSxHQUFHLEVBQUU7UUFDYlQsQ0FBQyxHQUFHVyxVQUFVO01BQ2hCLENBQUMsTUFBTSxJQUFJTCxPQUFPLENBQUNOLENBQUMsR0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUU7UUFDL0JBLENBQUMsR0FBR1ksZ0JBQWdCLENBQUNOLE9BQU8sRUFBRSxJQUFJLEVBQUVOLENBQUMsRUFBRSx1QkFBdUIsQ0FBQztNQUNqRSxDQUFDLE1BQU0sSUFBR00sT0FBTyxDQUFDUyxNQUFNLENBQUNmLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssS0FBSyxFQUFFO1FBQzVDQSxDQUFDLEdBQUdZLGdCQUFnQixDQUFDTixPQUFPLEVBQUUsS0FBSyxFQUFFTixDQUFDLEVBQUUsd0JBQXdCLENBQUM7TUFDbkUsQ0FBQyxNQUFNLElBQUlNLE9BQU8sQ0FBQ1MsTUFBTSxDQUFDZixDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRTtRQUM1QyxJQUFNVyxXQUFVLEdBQUdDLGdCQUFnQixDQUFDTixPQUFPLEVBQUUsR0FBRyxFQUFFTixDQUFDLEVBQUUsd0JBQXdCLENBQUM7UUFDOUUsSUFBTXNCLE1BQU0sR0FBR2hCLE9BQU8sQ0FBQ08sU0FBUyxDQUFDYixDQUFDLEVBQUVXLFdBQVUsQ0FBQztRQUMvQyxJQUFHVyxNQUFNLENBQUNqQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFDO1VBQzFCVyxDQUFDLEdBQUdNLE9BQU8sQ0FBQ2pCLE9BQU8sQ0FBQyxJQUFJLEVBQUVXLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDbEMsQ0FBQyxNQUFJO1VBQ0hBLENBQUMsR0FBR1csV0FBVTtRQUNoQjtNQUNGLENBQUMsTUFBSyxJQUFHTCxPQUFPLENBQUNTLE1BQU0sQ0FBQ2YsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUU7UUFDMUMsSUFBTVcsWUFBVSxHQUFHQyxnQkFBZ0IsQ0FBQ04sT0FBTyxFQUFFLEtBQUssRUFBRU4sQ0FBQyxFQUFFLHNCQUFzQixDQUFDLEdBQUcsQ0FBQztRQUNsRixJQUFNc0IsT0FBTSxHQUFHaEIsT0FBTyxDQUFDTyxTQUFTLENBQUNiLENBQUMsR0FBRyxDQUFDLEVBQUNXLFlBQVUsQ0FBQzs7UUFFbEQ7UUFDQTtRQUNBO1FBQ0EsSUFBR0YsUUFBUSxFQUFDO1VBQ1ZELFdBQVcsQ0FBQ2xDLEdBQUcsR0FBR2pDLElBQUksQ0FBQzJFLFFBQVEsQ0FBQ1IsV0FBVyxDQUFDbEMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHRCxlQUFlLENBQUNtQyxXQUFXLENBQUM1QixPQUFPLEVBQUU2QixRQUFRLEVBQUdsQyxPQUFPLENBQUM7VUFDaEhrQyxRQUFRLEdBQUcsRUFBRTtRQUNmO1FBRUEsSUFBSWxDLE9BQU8sQ0FBQ1osWUFBWSxFQUFFO1VBQ3hCO1VBQ0EsSUFBTTRELFNBQVMsR0FBRyxJQUFJL0UsT0FBTyxDQUFDK0IsT0FBTyxDQUFDWixZQUFZLEVBQUU2QyxXQUFXLEVBQUVjLE9BQU0sQ0FBQztVQUN4RWQsV0FBVyxDQUFDZ0IsUUFBUSxDQUFDRCxTQUFTLENBQUM7VUFDL0I7VUFDQWYsV0FBVyxDQUFDbEMsR0FBRyxHQUFHakMsSUFBSSxDQUFDMkUsUUFBUSxDQUFDUixXQUFXLENBQUNsQyxHQUFHLENBQUMsR0FBR0MsT0FBTyxDQUFDWCxpQkFBaUI7VUFDNUU7VUFDQSxJQUFJMEQsT0FBTSxFQUFFO1lBQ1ZDLFNBQVMsQ0FBQ2pELEdBQUcsR0FBR2dELE9BQU07VUFDeEI7UUFDRixDQUFDLE1BQU07VUFDTGQsV0FBVyxDQUFDbEMsR0FBRyxHQUFHLENBQUNrQyxXQUFXLENBQUNsQyxHQUFHLElBQUksRUFBRSxLQUFLZ0QsT0FBTSxJQUFJLEVBQUUsQ0FBQztRQUM1RDtRQUVBdEIsQ0FBQyxHQUFHVyxZQUFVLEdBQUcsQ0FBQztNQUNwQixDQUFDLE1BQUs7UUFBQztRQUNMLElBQU1jLE1BQU0sR0FBR0MseUJBQXlCLENBQUNwQixPQUFPLEVBQUVOLENBQUMsR0FBQyxDQUFDLENBQUM7UUFDdEQsSUFBSXNCLFFBQU0sR0FBR0csTUFBTSxDQUFDRSxJQUFJO1FBQ3hCLElBQU1oQixZQUFVLEdBQUdjLE1BQU0sQ0FBQ0csS0FBSztRQUMvQixJQUFNQyxjQUFjLEdBQUdQLFFBQU0sQ0FBQ2pDLE9BQU8sQ0FBQyxHQUFHLENBQUM7UUFDMUMsSUFBSXRCLFFBQU8sR0FBR3VELFFBQU07UUFDcEIsSUFBR08sY0FBYyxLQUFLLENBQUMsQ0FBQyxFQUFDO1VBQ3ZCOUQsUUFBTyxHQUFHdUQsUUFBTSxDQUFDUCxNQUFNLENBQUMsQ0FBQyxFQUFFYyxjQUFjLENBQUMsQ0FBQ0MsU0FBUyxFQUFFO1VBQ3REUixRQUFNLEdBQUdBLFFBQU0sQ0FBQ1AsTUFBTSxDQUFDYyxjQUFjLEdBQUcsQ0FBQyxDQUFDO1FBQzVDO1FBRUEsSUFBR3RELE9BQU8sQ0FBQ2xCLGVBQWUsRUFBQztVQUN6QixJQUFNeUQsV0FBVSxHQUFHL0MsUUFBTyxDQUFDc0IsT0FBTyxDQUFDLEdBQUcsQ0FBQztVQUN2QyxJQUFHeUIsV0FBVSxLQUFLLENBQUMsQ0FBQyxFQUFDO1lBQ25CL0MsUUFBTyxHQUFHQSxRQUFPLENBQUNnRCxNQUFNLENBQUNELFdBQVUsR0FBQyxDQUFDLENBQUM7VUFDeEM7UUFDRjs7UUFFQTtRQUNBLElBQUlOLFdBQVcsSUFBSUMsUUFBUSxFQUFFO1VBQzNCLElBQUdELFdBQVcsQ0FBQzVCLE9BQU8sS0FBSyxNQUFNLEVBQUM7WUFDaEM0QixXQUFXLENBQUNsQyxHQUFHLEdBQUdqQyxJQUFJLENBQUMyRSxRQUFRLENBQUNSLFdBQVcsQ0FBQ2xDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBR0QsZUFBZSxDQUFFbUMsV0FBVyxDQUFDNUIsT0FBTyxFQUFFNkIsUUFBUSxFQUFFbEMsT0FBTyxDQUFDO1VBQ2xIO1FBQ0Y7UUFFQSxJQUFHK0MsUUFBTSxDQUFDckMsTUFBTSxHQUFHLENBQUMsSUFBSXFDLFFBQU0sQ0FBQ1MsV0FBVyxDQUFDLEdBQUcsQ0FBQyxLQUFLVCxRQUFNLENBQUNyQyxNQUFNLEdBQUcsQ0FBQyxFQUFDO1VBQUM7O1VBRXJFLElBQUdsQixRQUFPLENBQUNBLFFBQU8sQ0FBQ2tCLE1BQU0sR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUM7WUFBRTtZQUN2Q2xCLFFBQU8sR0FBR0EsUUFBTyxDQUFDZ0QsTUFBTSxDQUFDLENBQUMsRUFBRWhELFFBQU8sQ0FBQ2tCLE1BQU0sR0FBRyxDQUFDLENBQUM7WUFDL0NxQyxRQUFNLEdBQUd2RCxRQUFPO1VBQ2xCLENBQUMsTUFBSTtZQUNIdUQsUUFBTSxHQUFHQSxRQUFNLENBQUNQLE1BQU0sQ0FBQyxDQUFDLEVBQUVPLFFBQU0sQ0FBQ3JDLE1BQU0sR0FBRyxDQUFDLENBQUM7VUFDOUM7VUFFQSxJQUFNc0MsVUFBUyxHQUFHLElBQUkvRSxPQUFPLENBQUN1QixRQUFPLEVBQUV5QyxXQUFXLEVBQUUsRUFBRSxDQUFDO1VBQ3ZELElBQUd6QyxRQUFPLEtBQUt1RCxRQUFNLEVBQUM7WUFDcEJDLFVBQVMsQ0FBQ0osUUFBUSxHQUFHekIsa0JBQWtCLENBQUM0QixRQUFNLEVBQUUvQyxPQUFPLENBQUM7VUFDMUQ7VUFDQWlDLFdBQVcsQ0FBQ2dCLFFBQVEsQ0FBQ0QsVUFBUyxDQUFDO1FBQ2pDLENBQUMsTUFBSTtVQUFDOztVQUVKLElBQU1BLFdBQVMsR0FBRyxJQUFJL0UsT0FBTyxDQUFFdUIsUUFBTyxFQUFFeUMsV0FBVyxDQUFFO1VBQ3JELElBQUlqQyxPQUFPLENBQUNMLFNBQVMsQ0FBQ2UsTUFBTSxJQUFJVixPQUFPLENBQUNMLFNBQVMsQ0FBQytDLFFBQVEsQ0FBQ00sV0FBUyxDQUFDM0MsT0FBTyxDQUFDLEVBQUU7WUFDN0UyQyxXQUFTLENBQUNILFVBQVUsR0FBQ1QsWUFBVTtVQUNqQztVQUNBLElBQUc1QyxRQUFPLEtBQUt1RCxRQUFNLEVBQUM7WUFDcEJDLFdBQVMsQ0FBQ0osUUFBUSxHQUFHekIsa0JBQWtCLENBQUM0QixRQUFNLEVBQUUvQyxPQUFPLENBQUM7VUFDMUQ7VUFDQWlDLFdBQVcsQ0FBQ2dCLFFBQVEsQ0FBQ0QsV0FBUyxDQUFDO1VBQy9CZixXQUFXLEdBQUdlLFdBQVM7UUFDekI7UUFDQWQsUUFBUSxHQUFHLEVBQUU7UUFDYlQsQ0FBQyxHQUFHVyxZQUFVO01BQ2hCO0lBQ0YsQ0FBQyxNQUFJO01BQ0hGLFFBQVEsSUFBSUgsT0FBTyxDQUFDTixDQUFDLENBQUM7SUFDeEI7RUFDRjtFQUNBLE9BQU9PLE1BQU07QUFDZixDQUFDO0FBRUQsU0FBU21CLHlCQUF5QixDQUFDQyxJQUFJLEVBQUUzQixDQUFDLEVBQUM7RUFDekMsSUFBSWdDLFlBQVk7RUFDaEIsSUFBSVYsTUFBTSxHQUFHLEVBQUU7RUFDZixLQUFLLElBQUlNLEtBQUssR0FBRzVCLENBQUMsRUFBRTRCLEtBQUssR0FBR0QsSUFBSSxDQUFDMUMsTUFBTSxFQUFFMkMsS0FBSyxFQUFFLEVBQUU7SUFDaEQsSUFBSWxCLEVBQUUsR0FBR2lCLElBQUksQ0FBQ0MsS0FBSyxDQUFDO0lBQ3BCLElBQUlJLFlBQVksRUFBRTtNQUNkLElBQUl0QixFQUFFLEtBQUtzQixZQUFZLEVBQUVBLFlBQVksR0FBRyxFQUFFLENBQUM7SUFDL0MsQ0FBQyxNQUFNLElBQUl0QixFQUFFLEtBQUssR0FBRyxJQUFJQSxFQUFFLEtBQUssR0FBRyxFQUFFO01BQ2pDc0IsWUFBWSxHQUFHdEIsRUFBRTtJQUNyQixDQUFDLE1BQU0sSUFBSUEsRUFBRSxLQUFLLEdBQUcsRUFBRTtNQUNuQixPQUFPO1FBQ0xpQixJQUFJLEVBQUVMLE1BQU07UUFDWk0sS0FBSyxFQUFFQTtNQUNULENBQUM7SUFDTCxDQUFDLE1BQU0sSUFBSWxCLEVBQUUsS0FBSyxJQUFJLEVBQUU7TUFDdEJBLEVBQUUsR0FBRyxHQUFHO0lBQ1Y7SUFDQVksTUFBTSxJQUFJWixFQUFFO0VBQ2Q7QUFDRjtBQUVBLFNBQVNFLGdCQUFnQixDQUFDTixPQUFPLEVBQUUyQixHQUFHLEVBQUVqQyxDQUFDLEVBQUVrQyxNQUFNLEVBQUM7RUFDaEQsSUFBTUMsWUFBWSxHQUFHN0IsT0FBTyxDQUFDakIsT0FBTyxDQUFDNEMsR0FBRyxFQUFFakMsQ0FBQyxDQUFDO0VBQzVDLElBQUdtQyxZQUFZLEtBQUssQ0FBQyxDQUFDLEVBQUM7SUFDckIsTUFBTSxJQUFJQyxLQUFLLENBQUNGLE1BQU0sQ0FBQztFQUN6QixDQUFDLE1BQUk7SUFDSCxPQUFPQyxZQUFZLEdBQUdGLEdBQUcsQ0FBQ2hELE1BQU0sR0FBRyxDQUFDO0VBQ3RDO0FBQ0Y7QUFFQWQsT0FBTyxDQUFDa0MsZUFBZSxHQUFHQSxlQUFlIiwiZmlsZSI6IjIwMS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpO1xuY29uc3QgYnVpbGRPcHRpb25zID0gcmVxdWlyZSgnLi91dGlsJykuYnVpbGRPcHRpb25zO1xuY29uc3QgeG1sTm9kZSA9IHJlcXVpcmUoJy4veG1sTm9kZScpO1xuY29uc3QgcmVneCA9XG4gICc8KCghXFxcXFtDREFUQVxcXFxbKFtcXFxcc1xcXFxTXSo/KShdXT4pKXwoKE5BTUU6KT8oTkFNRSkpKFtePl0qKT58KChcXFxcLykoTkFNRSlcXFxccyo+KSkoW148XSopJ1xuICAucmVwbGFjZSgvTkFNRS9nLCB1dGlsLm5hbWVSZWdleHApO1xuXG4vL2NvbnN0IHRhZ3NSZWd4ID0gbmV3IFJlZ0V4cChcIjwoXFxcXC8/W1xcXFx3OlxcXFwtXFwuX10rKShbXj5dKik+KFxcXFxzKlwiK2NkYXRhUmVneCtcIikqKFtePF0rKT9cIixcImdcIik7XG4vL2NvbnN0IHRhZ3NSZWd4ID0gbmV3IFJlZ0V4cChcIjwoXFxcXC8/KSgoXFxcXHcqOik/KFtcXFxcdzpcXFxcLVxcLl9dKykpKFtePl0qKT4oW148XSopKFwiK2NkYXRhUmVneCtcIihbXjxdKikpKihbXjxdKyk/XCIsXCJnXCIpO1xuXG4vL3BvbHlmaWxsXG5pZiAoIU51bWJlci5wYXJzZUludCAmJiB3aW5kb3cucGFyc2VJbnQpIHtcbiAgTnVtYmVyLnBhcnNlSW50ID0gd2luZG93LnBhcnNlSW50O1xufVxuaWYgKCFOdW1iZXIucGFyc2VGbG9hdCAmJiB3aW5kb3cucGFyc2VGbG9hdCkge1xuICBOdW1iZXIucGFyc2VGbG9hdCA9IHdpbmRvdy5wYXJzZUZsb2F0O1xufVxuXG5jb25zdCBkZWZhdWx0T3B0aW9ucyA9IHtcbiAgYXR0cmlidXRlTmFtZVByZWZpeDogJ0BfJyxcbiAgYXR0ck5vZGVOYW1lOiBmYWxzZSxcbiAgdGV4dE5vZGVOYW1lOiAnI3RleHQnLFxuICBpZ25vcmVBdHRyaWJ1dGVzOiB0cnVlLFxuICBpZ25vcmVOYW1lU3BhY2U6IGZhbHNlLFxuICBhbGxvd0Jvb2xlYW5BdHRyaWJ1dGVzOiBmYWxzZSwgLy9hIHRhZyBjYW4gaGF2ZSBhdHRyaWJ1dGVzIHdpdGhvdXQgYW55IHZhbHVlXG4gIC8vaWdub3JlUm9vdEVsZW1lbnQgOiBmYWxzZSxcbiAgcGFyc2VOb2RlVmFsdWU6IHRydWUsXG4gIHBhcnNlQXR0cmlidXRlVmFsdWU6IGZhbHNlLFxuICBhcnJheU1vZGU6IGZhbHNlLFxuICB0cmltVmFsdWVzOiB0cnVlLCAvL1RyaW0gc3RyaW5nIHZhbHVlcyBvZiB0YWcgYW5kIGF0dHJpYnV0ZXNcbiAgY2RhdGFUYWdOYW1lOiBmYWxzZSxcbiAgY2RhdGFQb3NpdGlvbkNoYXI6ICdcXFxcYycsXG4gIHRhZ1ZhbHVlUHJvY2Vzc29yOiBmdW5jdGlvbihhLCB0YWdOYW1lKSB7XG4gICAgcmV0dXJuIGE7XG4gIH0sXG4gIGF0dHJWYWx1ZVByb2Nlc3NvcjogZnVuY3Rpb24oYSwgYXR0ck5hbWUpIHtcbiAgICByZXR1cm4gYTtcbiAgfSxcbiAgc3RvcE5vZGVzOiBbXVxuICAvL2RlY29kZVN0cmljdDogZmFsc2UsXG59O1xuXG5leHBvcnRzLmRlZmF1bHRPcHRpb25zID0gZGVmYXVsdE9wdGlvbnM7XG5cbmNvbnN0IHByb3BzID0gW1xuICAnYXR0cmlidXRlTmFtZVByZWZpeCcsXG4gICdhdHRyTm9kZU5hbWUnLFxuICAndGV4dE5vZGVOYW1lJyxcbiAgJ2lnbm9yZUF0dHJpYnV0ZXMnLFxuICAnaWdub3JlTmFtZVNwYWNlJyxcbiAgJ2FsbG93Qm9vbGVhbkF0dHJpYnV0ZXMnLFxuICAncGFyc2VOb2RlVmFsdWUnLFxuICAncGFyc2VBdHRyaWJ1dGVWYWx1ZScsXG4gICdhcnJheU1vZGUnLFxuICAndHJpbVZhbHVlcycsXG4gICdjZGF0YVRhZ05hbWUnLFxuICAnY2RhdGFQb3NpdGlvbkNoYXInLFxuICAndGFnVmFsdWVQcm9jZXNzb3InLFxuICAnYXR0clZhbHVlUHJvY2Vzc29yJyxcbiAgJ3BhcnNlVHJ1ZU51bWJlck9ubHknLFxuICAnc3RvcE5vZGVzJ1xuXTtcbmV4cG9ydHMucHJvcHMgPSBwcm9wcztcblxuLyoqXG4gKiBUcmltIC0+IHZhbHVlUHJvY2Vzc29yIC0+IHBhcnNlIHZhbHVlXG4gKiBAcGFyYW0ge3N0cmluZ30gdGFnTmFtZVxuICogQHBhcmFtIHtzdHJpbmd9IHZhbFxuICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAqL1xuZnVuY3Rpb24gcHJvY2Vzc1RhZ1ZhbHVlKHRhZ05hbWUsIHZhbCwgb3B0aW9ucykge1xuICBpZiAodmFsKSB7XG4gICAgaWYgKG9wdGlvbnMudHJpbVZhbHVlcykge1xuICAgICAgdmFsID0gdmFsLnRyaW0oKTtcbiAgICB9XG4gICAgdmFsID0gb3B0aW9ucy50YWdWYWx1ZVByb2Nlc3Nvcih2YWwsIHRhZ05hbWUpO1xuICAgIHZhbCA9IHBhcnNlVmFsdWUodmFsLCBvcHRpb25zLnBhcnNlTm9kZVZhbHVlLCBvcHRpb25zLnBhcnNlVHJ1ZU51bWJlck9ubHkpO1xuICB9XG5cbiAgcmV0dXJuIHZhbDtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZU5hbWVTcGFjZSh0YWduYW1lLCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zLmlnbm9yZU5hbWVTcGFjZSkge1xuICAgIGNvbnN0IHRhZ3MgPSB0YWduYW1lLnNwbGl0KCc6Jyk7XG4gICAgY29uc3QgcHJlZml4ID0gdGFnbmFtZS5jaGFyQXQoMCkgPT09ICcvJyA/ICcvJyA6ICcnO1xuICAgIGlmICh0YWdzWzBdID09PSAneG1sbnMnKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIGlmICh0YWdzLmxlbmd0aCA9PT0gMikge1xuICAgICAgdGFnbmFtZSA9IHByZWZpeCArIHRhZ3NbMV07XG4gICAgfVxuICB9XG4gIHJldHVybiB0YWduYW1lO1xufVxuXG5mdW5jdGlvbiBwYXJzZVZhbHVlKHZhbCwgc2hvdWxkUGFyc2UsIHBhcnNlVHJ1ZU51bWJlck9ubHkpIHtcbiAgaWYgKHNob3VsZFBhcnNlICYmIHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgbGV0IHBhcnNlZDtcbiAgICBpZiAodmFsLnRyaW0oKSA9PT0gJycgfHwgaXNOYU4odmFsKSkge1xuICAgICAgcGFyc2VkID0gdmFsID09PSAndHJ1ZScgPyB0cnVlIDogdmFsID09PSAnZmFsc2UnID8gZmFsc2UgOiB2YWw7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh2YWwuaW5kZXhPZignMHgnKSAhPT0gLTEpIHtcbiAgICAgICAgLy9zdXBwb3J0IGhleGEgZGVjaW1hbFxuICAgICAgICBwYXJzZWQgPSBOdW1iZXIucGFyc2VJbnQodmFsLCAxNik7XG4gICAgICB9IGVsc2UgaWYgKHZhbC5pbmRleE9mKCcuJykgIT09IC0xKSB7XG4gICAgICAgIHBhcnNlZCA9IE51bWJlci5wYXJzZUZsb2F0KHZhbCk7XG4gICAgICAgIHZhbCA9IHZhbC5yZXBsYWNlKC9cXC4/MCskLywgXCJcIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJzZWQgPSBOdW1iZXIucGFyc2VJbnQodmFsLCAxMCk7XG4gICAgICB9XG4gICAgICBpZiAocGFyc2VUcnVlTnVtYmVyT25seSkge1xuICAgICAgICBwYXJzZWQgPSBTdHJpbmcocGFyc2VkKSA9PT0gdmFsID8gcGFyc2VkIDogdmFsO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9IGVsc2Uge1xuICAgIGlmICh1dGlsLmlzRXhpc3QodmFsKSkge1xuICAgICAgcmV0dXJuIHZhbDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgfVxufVxuXG4vL1RPRE86IGNoYW5nZSByZWdleCB0byBjYXB0dXJlIE5TXG4vL2NvbnN0IGF0dHJzUmVneCA9IG5ldyBSZWdFeHAoXCIoW1xcXFx3XFxcXC1cXFxcLlxcXFw6XSspXFxcXHMqPVxcXFxzKihbJ1xcXCJdKSgoLnxcXG4pKj8pXFxcXDJcIixcImdtXCIpO1xuY29uc3QgYXR0cnNSZWd4ID0gbmV3IFJlZ0V4cCgnKFteXFxcXHM9XSspXFxcXHMqKD1cXFxccyooW1xcJ1wiXSkoLio/KVxcXFwzKT8nLCAnZycpO1xuXG5mdW5jdGlvbiBidWlsZEF0dHJpYnV0ZXNNYXAoYXR0clN0ciwgb3B0aW9ucykge1xuICBpZiAoIW9wdGlvbnMuaWdub3JlQXR0cmlidXRlcyAmJiB0eXBlb2YgYXR0clN0ciA9PT0gJ3N0cmluZycpIHtcbiAgICBhdHRyU3RyID0gYXR0clN0ci5yZXBsYWNlKC9cXHI/XFxuL2csICcgJyk7XG4gICAgLy9hdHRyU3RyID0gYXR0clN0ciB8fCBhdHRyU3RyLnRyaW0oKTtcblxuICAgIGNvbnN0IG1hdGNoZXMgPSB1dGlsLmdldEFsbE1hdGNoZXMoYXR0clN0ciwgYXR0cnNSZWd4KTtcbiAgICBjb25zdCBsZW4gPSBtYXRjaGVzLmxlbmd0aDsgLy9kb24ndCBtYWtlIGl0IGlubGluZVxuICAgIGNvbnN0IGF0dHJzID0ge307XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgY29uc3QgYXR0ck5hbWUgPSByZXNvbHZlTmFtZVNwYWNlKG1hdGNoZXNbaV1bMV0sIG9wdGlvbnMpO1xuICAgICAgaWYgKGF0dHJOYW1lLmxlbmd0aCkge1xuICAgICAgICBpZiAobWF0Y2hlc1tpXVs0XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaWYgKG9wdGlvbnMudHJpbVZhbHVlcykge1xuICAgICAgICAgICAgbWF0Y2hlc1tpXVs0XSA9IG1hdGNoZXNbaV1bNF0udHJpbSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBtYXRjaGVzW2ldWzRdID0gb3B0aW9ucy5hdHRyVmFsdWVQcm9jZXNzb3IobWF0Y2hlc1tpXVs0XSwgYXR0ck5hbWUpO1xuICAgICAgICAgIGF0dHJzW29wdGlvbnMuYXR0cmlidXRlTmFtZVByZWZpeCArIGF0dHJOYW1lXSA9IHBhcnNlVmFsdWUoXG4gICAgICAgICAgICBtYXRjaGVzW2ldWzRdLFxuICAgICAgICAgICAgb3B0aW9ucy5wYXJzZUF0dHJpYnV0ZVZhbHVlLFxuICAgICAgICAgICAgb3B0aW9ucy5wYXJzZVRydWVOdW1iZXJPbmx5XG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmIChvcHRpb25zLmFsbG93Qm9vbGVhbkF0dHJpYnV0ZXMpIHtcbiAgICAgICAgICBhdHRyc1tvcHRpb25zLmF0dHJpYnV0ZU5hbWVQcmVmaXggKyBhdHRyTmFtZV0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghT2JqZWN0LmtleXMoYXR0cnMpLmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5hdHRyTm9kZU5hbWUpIHtcbiAgICAgIGNvbnN0IGF0dHJDb2xsZWN0aW9uID0ge307XG4gICAgICBhdHRyQ29sbGVjdGlvbltvcHRpb25zLmF0dHJOb2RlTmFtZV0gPSBhdHRycztcbiAgICAgIHJldHVybiBhdHRyQ29sbGVjdGlvbjtcbiAgICB9XG4gICAgcmV0dXJuIGF0dHJzO1xuICB9XG59XG5cbmNvbnN0IGdldFRyYXZlcnNhbE9iaiA9IGZ1bmN0aW9uKHhtbERhdGEsIG9wdGlvbnMpIHtcbiAgeG1sRGF0YSA9IHhtbERhdGEucmVwbGFjZSgvKFxcclxcbil8XFxuLywgXCIgXCIpO1xuICBvcHRpb25zID0gYnVpbGRPcHRpb25zKG9wdGlvbnMsIGRlZmF1bHRPcHRpb25zLCBwcm9wcyk7XG4gIGNvbnN0IHhtbE9iaiA9IG5ldyB4bWxOb2RlKCcheG1sJyk7XG4gIGxldCBjdXJyZW50Tm9kZSA9IHhtbE9iajtcbiAgbGV0IHRleHREYXRhID0gXCJcIjtcblxuLy9mdW5jdGlvbiBtYXRjaCh4bWxEYXRhKXtcbiAgZm9yKGxldCBpPTA7IGk8IHhtbERhdGEubGVuZ3RoOyBpKyspe1xuICAgIGNvbnN0IGNoID0geG1sRGF0YVtpXTtcbiAgICBpZihjaCA9PT0gJzwnKXtcbiAgICAgIGlmKCB4bWxEYXRhW2krMV0gPT09ICcvJykgey8vQ2xvc2luZyBUYWdcbiAgICAgICAgY29uc3QgY2xvc2VJbmRleCA9IGZpbmRDbG9zaW5nSW5kZXgoeG1sRGF0YSwgXCI+XCIsIGksIFwiQ2xvc2luZyBUYWcgaXMgbm90IGNsb3NlZC5cIilcbiAgICAgICAgbGV0IHRhZ05hbWUgPSB4bWxEYXRhLnN1YnN0cmluZyhpKzIsY2xvc2VJbmRleCkudHJpbSgpO1xuXG4gICAgICAgIGlmKG9wdGlvbnMuaWdub3JlTmFtZVNwYWNlKXtcbiAgICAgICAgICBjb25zdCBjb2xvbkluZGV4ID0gdGFnTmFtZS5pbmRleE9mKFwiOlwiKTtcbiAgICAgICAgICBpZihjb2xvbkluZGV4ICE9PSAtMSl7XG4gICAgICAgICAgICB0YWdOYW1lID0gdGFnTmFtZS5zdWJzdHIoY29sb25JbmRleCsxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvKiBpZiAoY3VycmVudE5vZGUucGFyZW50KSB7XG4gICAgICAgICAgY3VycmVudE5vZGUucGFyZW50LnZhbCA9IHV0aWwuZ2V0VmFsdWUoY3VycmVudE5vZGUucGFyZW50LnZhbCkgKyAnJyArIHByb2Nlc3NUYWdWYWx1ZTIodGFnTmFtZSwgdGV4dERhdGEgLCBvcHRpb25zKTtcbiAgICAgICAgfSAqL1xuICAgICAgICBpZihjdXJyZW50Tm9kZSl7XG4gICAgICAgICAgaWYoY3VycmVudE5vZGUudmFsKXtcbiAgICAgICAgICAgIGN1cnJlbnROb2RlLnZhbCA9IHV0aWwuZ2V0VmFsdWUoY3VycmVudE5vZGUudmFsKSArICcnICsgcHJvY2Vzc1RhZ1ZhbHVlKHRhZ05hbWUsIHRleHREYXRhICwgb3B0aW9ucyk7XG4gICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICBjdXJyZW50Tm9kZS52YWwgPSBwcm9jZXNzVGFnVmFsdWUodGFnTmFtZSwgdGV4dERhdGEgLCBvcHRpb25zKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5zdG9wTm9kZXMubGVuZ3RoICYmIG9wdGlvbnMuc3RvcE5vZGVzLmluY2x1ZGVzKGN1cnJlbnROb2RlLnRhZ25hbWUpKSB7XG4gICAgICAgICAgY3VycmVudE5vZGUuY2hpbGQgPSBbXVxuICAgICAgICAgIGlmIChjdXJyZW50Tm9kZS5hdHRyc01hcCA9PSB1bmRlZmluZWQpIHsgY3VycmVudE5vZGUuYXR0cnNNYXAgPSB7fX1cbiAgICAgICAgICBjdXJyZW50Tm9kZS52YWwgPSB4bWxEYXRhLnN1YnN0cihjdXJyZW50Tm9kZS5zdGFydEluZGV4ICsgMSwgaSAtIGN1cnJlbnROb2RlLnN0YXJ0SW5kZXggLSAxKVxuICAgICAgICB9XG4gICAgICAgIGN1cnJlbnROb2RlID0gY3VycmVudE5vZGUucGFyZW50O1xuICAgICAgICB0ZXh0RGF0YSA9IFwiXCI7XG4gICAgICAgIGkgPSBjbG9zZUluZGV4O1xuICAgICAgfSBlbHNlIGlmKCB4bWxEYXRhW2krMV0gPT09ICc/Jykge1xuICAgICAgICBpID0gZmluZENsb3NpbmdJbmRleCh4bWxEYXRhLCBcIj8+XCIsIGksIFwiUGkgVGFnIGlzIG5vdCBjbG9zZWQuXCIpXG4gICAgICB9IGVsc2UgaWYoeG1sRGF0YS5zdWJzdHIoaSArIDEsIDMpID09PSAnIS0tJykge1xuICAgICAgICBpID0gZmluZENsb3NpbmdJbmRleCh4bWxEYXRhLCBcIi0tPlwiLCBpLCBcIkNvbW1lbnQgaXMgbm90IGNsb3NlZC5cIilcbiAgICAgIH0gZWxzZSBpZiggeG1sRGF0YS5zdWJzdHIoaSArIDEsIDIpID09PSAnIUQnKSB7XG4gICAgICAgIGNvbnN0IGNsb3NlSW5kZXggPSBmaW5kQ2xvc2luZ0luZGV4KHhtbERhdGEsIFwiPlwiLCBpLCBcIkRPQ1RZUEUgaXMgbm90IGNsb3NlZC5cIilcbiAgICAgICAgY29uc3QgdGFnRXhwID0geG1sRGF0YS5zdWJzdHJpbmcoaSwgY2xvc2VJbmRleCk7XG4gICAgICAgIGlmKHRhZ0V4cC5pbmRleE9mKFwiW1wiKSA+PSAwKXtcbiAgICAgICAgICBpID0geG1sRGF0YS5pbmRleE9mKFwiXT5cIiwgaSkgKyAxO1xuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICBpID0gY2xvc2VJbmRleDtcbiAgICAgICAgfVxuICAgICAgfWVsc2UgaWYoeG1sRGF0YS5zdWJzdHIoaSArIDEsIDIpID09PSAnIVsnKSB7XG4gICAgICAgIGNvbnN0IGNsb3NlSW5kZXggPSBmaW5kQ2xvc2luZ0luZGV4KHhtbERhdGEsIFwiXV0+XCIsIGksIFwiQ0RBVEEgaXMgbm90IGNsb3NlZC5cIikgLSAyXG4gICAgICAgIGNvbnN0IHRhZ0V4cCA9IHhtbERhdGEuc3Vic3RyaW5nKGkgKyA5LGNsb3NlSW5kZXgpO1xuXG4gICAgICAgIC8vY29uc2lkZXJhdGlvbnNcbiAgICAgICAgLy8xLiBDREFUQSB3aWxsIGFsd2F5cyBoYXZlIHBhcmVudCBub2RlXG4gICAgICAgIC8vMi4gQSB0YWcgd2l0aCBDREFUQSBpcyBub3QgYSBsZWFmIG5vZGUgc28gaXQncyB2YWx1ZSB3b3VsZCBiZSBzdHJpbmcgdHlwZS5cbiAgICAgICAgaWYodGV4dERhdGEpe1xuICAgICAgICAgIGN1cnJlbnROb2RlLnZhbCA9IHV0aWwuZ2V0VmFsdWUoY3VycmVudE5vZGUudmFsKSArICcnICsgcHJvY2Vzc1RhZ1ZhbHVlKGN1cnJlbnROb2RlLnRhZ25hbWUsIHRleHREYXRhICwgb3B0aW9ucyk7XG4gICAgICAgICAgdGV4dERhdGEgPSBcIlwiO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuY2RhdGFUYWdOYW1lKSB7XG4gICAgICAgICAgLy9hZGQgY2RhdGEgbm9kZVxuICAgICAgICAgIGNvbnN0IGNoaWxkTm9kZSA9IG5ldyB4bWxOb2RlKG9wdGlvbnMuY2RhdGFUYWdOYW1lLCBjdXJyZW50Tm9kZSwgdGFnRXhwKTtcbiAgICAgICAgICBjdXJyZW50Tm9kZS5hZGRDaGlsZChjaGlsZE5vZGUpO1xuICAgICAgICAgIC8vZm9yIGJhY2t0cmFja2luZ1xuICAgICAgICAgIGN1cnJlbnROb2RlLnZhbCA9IHV0aWwuZ2V0VmFsdWUoY3VycmVudE5vZGUudmFsKSArIG9wdGlvbnMuY2RhdGFQb3NpdGlvbkNoYXI7XG4gICAgICAgICAgLy9hZGQgcmVzdCB2YWx1ZSB0byBwYXJlbnQgbm9kZVxuICAgICAgICAgIGlmICh0YWdFeHApIHtcbiAgICAgICAgICAgIGNoaWxkTm9kZS52YWwgPSB0YWdFeHA7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGN1cnJlbnROb2RlLnZhbCA9IChjdXJyZW50Tm9kZS52YWwgfHwgJycpICsgKHRhZ0V4cCB8fCAnJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpID0gY2xvc2VJbmRleCArIDI7XG4gICAgICB9ZWxzZSB7Ly9PcGVuaW5nIHRhZ1xuICAgICAgICBjb25zdCByZXN1bHQgPSBjbG9zaW5nSW5kZXhGb3JPcGVuaW5nVGFnKHhtbERhdGEsIGkrMSlcbiAgICAgICAgbGV0IHRhZ0V4cCA9IHJlc3VsdC5kYXRhO1xuICAgICAgICBjb25zdCBjbG9zZUluZGV4ID0gcmVzdWx0LmluZGV4O1xuICAgICAgICBjb25zdCBzZXBhcmF0b3JJbmRleCA9IHRhZ0V4cC5pbmRleE9mKFwiIFwiKTtcbiAgICAgICAgbGV0IHRhZ05hbWUgPSB0YWdFeHA7XG4gICAgICAgIGlmKHNlcGFyYXRvckluZGV4ICE9PSAtMSl7XG4gICAgICAgICAgdGFnTmFtZSA9IHRhZ0V4cC5zdWJzdHIoMCwgc2VwYXJhdG9ySW5kZXgpLnRyaW1SaWdodCgpO1xuICAgICAgICAgIHRhZ0V4cCA9IHRhZ0V4cC5zdWJzdHIoc2VwYXJhdG9ySW5kZXggKyAxKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKG9wdGlvbnMuaWdub3JlTmFtZVNwYWNlKXtcbiAgICAgICAgICBjb25zdCBjb2xvbkluZGV4ID0gdGFnTmFtZS5pbmRleE9mKFwiOlwiKTtcbiAgICAgICAgICBpZihjb2xvbkluZGV4ICE9PSAtMSl7XG4gICAgICAgICAgICB0YWdOYW1lID0gdGFnTmFtZS5zdWJzdHIoY29sb25JbmRleCsxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvL3NhdmUgdGV4dCB0byBwYXJlbnQgbm9kZVxuICAgICAgICBpZiAoY3VycmVudE5vZGUgJiYgdGV4dERhdGEpIHtcbiAgICAgICAgICBpZihjdXJyZW50Tm9kZS50YWduYW1lICE9PSAnIXhtbCcpe1xuICAgICAgICAgICAgY3VycmVudE5vZGUudmFsID0gdXRpbC5nZXRWYWx1ZShjdXJyZW50Tm9kZS52YWwpICsgJycgKyBwcm9jZXNzVGFnVmFsdWUoIGN1cnJlbnROb2RlLnRhZ25hbWUsIHRleHREYXRhLCBvcHRpb25zKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZih0YWdFeHAubGVuZ3RoID4gMCAmJiB0YWdFeHAubGFzdEluZGV4T2YoXCIvXCIpID09PSB0YWdFeHAubGVuZ3RoIC0gMSl7Ly9zZWxmQ2xvc2luZyB0YWdcblxuICAgICAgICAgIGlmKHRhZ05hbWVbdGFnTmFtZS5sZW5ndGggLSAxXSA9PT0gXCIvXCIpeyAvL3JlbW92ZSB0cmFpbGluZyAnLydcbiAgICAgICAgICAgIHRhZ05hbWUgPSB0YWdOYW1lLnN1YnN0cigwLCB0YWdOYW1lLmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgdGFnRXhwID0gdGFnTmFtZTtcbiAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIHRhZ0V4cCA9IHRhZ0V4cC5zdWJzdHIoMCwgdGFnRXhwLmxlbmd0aCAtIDEpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGNoaWxkTm9kZSA9IG5ldyB4bWxOb2RlKHRhZ05hbWUsIGN1cnJlbnROb2RlLCAnJyk7XG4gICAgICAgICAgaWYodGFnTmFtZSAhPT0gdGFnRXhwKXtcbiAgICAgICAgICAgIGNoaWxkTm9kZS5hdHRyc01hcCA9IGJ1aWxkQXR0cmlidXRlc01hcCh0YWdFeHAsIG9wdGlvbnMpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjdXJyZW50Tm9kZS5hZGRDaGlsZChjaGlsZE5vZGUpO1xuICAgICAgICB9ZWxzZXsvL29wZW5pbmcgdGFnXG5cbiAgICAgICAgICBjb25zdCBjaGlsZE5vZGUgPSBuZXcgeG1sTm9kZSggdGFnTmFtZSwgY3VycmVudE5vZGUgKTtcbiAgICAgICAgICBpZiAob3B0aW9ucy5zdG9wTm9kZXMubGVuZ3RoICYmIG9wdGlvbnMuc3RvcE5vZGVzLmluY2x1ZGVzKGNoaWxkTm9kZS50YWduYW1lKSkge1xuICAgICAgICAgICAgY2hpbGROb2RlLnN0YXJ0SW5kZXg9Y2xvc2VJbmRleDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYodGFnTmFtZSAhPT0gdGFnRXhwKXtcbiAgICAgICAgICAgIGNoaWxkTm9kZS5hdHRyc01hcCA9IGJ1aWxkQXR0cmlidXRlc01hcCh0YWdFeHAsIG9wdGlvbnMpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjdXJyZW50Tm9kZS5hZGRDaGlsZChjaGlsZE5vZGUpO1xuICAgICAgICAgIGN1cnJlbnROb2RlID0gY2hpbGROb2RlO1xuICAgICAgICB9XG4gICAgICAgIHRleHREYXRhID0gXCJcIjtcbiAgICAgICAgaSA9IGNsb3NlSW5kZXg7XG4gICAgICB9XG4gICAgfWVsc2V7XG4gICAgICB0ZXh0RGF0YSArPSB4bWxEYXRhW2ldO1xuICAgIH1cbiAgfVxuICByZXR1cm4geG1sT2JqO1xufVxuXG5mdW5jdGlvbiBjbG9zaW5nSW5kZXhGb3JPcGVuaW5nVGFnKGRhdGEsIGkpe1xuICBsZXQgYXR0ckJvdW5kYXJ5O1xuICBsZXQgdGFnRXhwID0gXCJcIjtcbiAgZm9yIChsZXQgaW5kZXggPSBpOyBpbmRleCA8IGRhdGEubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgbGV0IGNoID0gZGF0YVtpbmRleF07XG4gICAgaWYgKGF0dHJCb3VuZGFyeSkge1xuICAgICAgICBpZiAoY2ggPT09IGF0dHJCb3VuZGFyeSkgYXR0ckJvdW5kYXJ5ID0gXCJcIjsvL3Jlc2V0XG4gICAgfSBlbHNlIGlmIChjaCA9PT0gJ1wiJyB8fCBjaCA9PT0gXCInXCIpIHtcbiAgICAgICAgYXR0ckJvdW5kYXJ5ID0gY2g7XG4gICAgfSBlbHNlIGlmIChjaCA9PT0gJz4nKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZGF0YTogdGFnRXhwLFxuICAgICAgICAgIGluZGV4OiBpbmRleFxuICAgICAgICB9XG4gICAgfSBlbHNlIGlmIChjaCA9PT0gJ1xcdCcpIHtcbiAgICAgIGNoID0gXCIgXCJcbiAgICB9XG4gICAgdGFnRXhwICs9IGNoO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZpbmRDbG9zaW5nSW5kZXgoeG1sRGF0YSwgc3RyLCBpLCBlcnJNc2cpe1xuICBjb25zdCBjbG9zaW5nSW5kZXggPSB4bWxEYXRhLmluZGV4T2Yoc3RyLCBpKTtcbiAgaWYoY2xvc2luZ0luZGV4ID09PSAtMSl7XG4gICAgdGhyb3cgbmV3IEVycm9yKGVyck1zZylcbiAgfWVsc2V7XG4gICAgcmV0dXJuIGNsb3NpbmdJbmRleCArIHN0ci5sZW5ndGggLSAxO1xuICB9XG59XG5cbmV4cG9ydHMuZ2V0VHJhdmVyc2FsT2JqID0gZ2V0VHJhdmVyc2FsT2JqO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///201\n"); /***/ }), -/* 194 */ +/* 202 */ /*!****************************************************************!*\ !*** D:/里海数字乡村/xunfeiAi/static/fast-xml-parser/src/xmlNode.js ***! \****************************************************************/ @@ -24979,10 +25168,10 @@ eval("\n\nvar util = __webpack_require__(/*! ./util */ 192);\nvar buildOptions = /***/ (function(module, exports, __webpack_require__) { "use strict"; -eval("\n\nmodule.exports = function (tagname, parent, val) {\n this.tagname = tagname;\n this.parent = parent;\n this.child = {}; //child tags\n this.attrsMap = {}; //attributes map\n this.val = val; //text only\n this.addChild = function (child) {\n if (Array.isArray(this.child[child.tagname])) {\n //already presents\n this.child[child.tagname].push(child);\n } else {\n this.child[child.tagname] = [child];\n }\n };\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vc3RhdGljL2Zhc3QteG1sLXBhcnNlci9zcmMveG1sTm9kZS5qcyJdLCJuYW1lcyI6WyJtb2R1bGUiLCJleHBvcnRzIiwidGFnbmFtZSIsInBhcmVudCIsInZhbCIsImNoaWxkIiwiYXR0cnNNYXAiLCJhZGRDaGlsZCIsIkFycmF5IiwiaXNBcnJheSIsInB1c2giXSwibWFwcGluZ3MiOiJBQUFhOztBQUViQSxNQUFNLENBQUNDLE9BQU8sR0FBRyxVQUFTQyxPQUFPLEVBQUVDLE1BQU0sRUFBRUMsR0FBRyxFQUFFO0VBQzlDLElBQUksQ0FBQ0YsT0FBTyxHQUFHQSxPQUFPO0VBQ3RCLElBQUksQ0FBQ0MsTUFBTSxHQUFHQSxNQUFNO0VBQ3BCLElBQUksQ0FBQ0UsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDakIsSUFBSSxDQUFDQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNwQixJQUFJLENBQUNGLEdBQUcsR0FBR0EsR0FBRyxDQUFDLENBQUM7RUFDaEIsSUFBSSxDQUFDRyxRQUFRLEdBQUcsVUFBU0YsS0FBSyxFQUFFO0lBQzlCLElBQUlHLEtBQUssQ0FBQ0MsT0FBTyxDQUFDLElBQUksQ0FBQ0osS0FBSyxDQUFDQSxLQUFLLENBQUNILE9BQU8sQ0FBQyxDQUFDLEVBQUU7TUFDNUM7TUFDQSxJQUFJLENBQUNHLEtBQUssQ0FBQ0EsS0FBSyxDQUFDSCxPQUFPLENBQUMsQ0FBQ1EsSUFBSSxDQUFDTCxLQUFLLENBQUM7SUFDdkMsQ0FBQyxNQUFNO01BQ0wsSUFBSSxDQUFDQSxLQUFLLENBQUNBLEtBQUssQ0FBQ0gsT0FBTyxDQUFDLEdBQUcsQ0FBQ0csS0FBSyxDQUFDO0lBQ3JDO0VBQ0YsQ0FBQztBQUNILENBQUMiLCJmaWxlIjoiMTk0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHRhZ25hbWUsIHBhcmVudCwgdmFsKSB7XG4gIHRoaXMudGFnbmFtZSA9IHRhZ25hbWU7XG4gIHRoaXMucGFyZW50ID0gcGFyZW50O1xuICB0aGlzLmNoaWxkID0ge307IC8vY2hpbGQgdGFnc1xuICB0aGlzLmF0dHJzTWFwID0ge307IC8vYXR0cmlidXRlcyBtYXBcbiAgdGhpcy52YWwgPSB2YWw7IC8vdGV4dCBvbmx5XG4gIHRoaXMuYWRkQ2hpbGQgPSBmdW5jdGlvbihjaGlsZCkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuY2hpbGRbY2hpbGQudGFnbmFtZV0pKSB7XG4gICAgICAvL2FscmVhZHkgcHJlc2VudHNcbiAgICAgIHRoaXMuY2hpbGRbY2hpbGQudGFnbmFtZV0ucHVzaChjaGlsZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2hpbGRbY2hpbGQudGFnbmFtZV0gPSBbY2hpbGRdO1xuICAgIH1cbiAgfTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///194\n"); +eval("\n\nmodule.exports = function (tagname, parent, val) {\n this.tagname = tagname;\n this.parent = parent;\n this.child = {}; //child tags\n this.attrsMap = {}; //attributes map\n this.val = val; //text only\n this.addChild = function (child) {\n if (Array.isArray(this.child[child.tagname])) {\n //already presents\n this.child[child.tagname].push(child);\n } else {\n this.child[child.tagname] = [child];\n }\n };\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vc3RhdGljL2Zhc3QteG1sLXBhcnNlci9zcmMveG1sTm9kZS5qcyJdLCJuYW1lcyI6WyJtb2R1bGUiLCJleHBvcnRzIiwidGFnbmFtZSIsInBhcmVudCIsInZhbCIsImNoaWxkIiwiYXR0cnNNYXAiLCJhZGRDaGlsZCIsIkFycmF5IiwiaXNBcnJheSIsInB1c2giXSwibWFwcGluZ3MiOiJBQUFhOztBQUViQSxNQUFNLENBQUNDLE9BQU8sR0FBRyxVQUFTQyxPQUFPLEVBQUVDLE1BQU0sRUFBRUMsR0FBRyxFQUFFO0VBQzlDLElBQUksQ0FBQ0YsT0FBTyxHQUFHQSxPQUFPO0VBQ3RCLElBQUksQ0FBQ0MsTUFBTSxHQUFHQSxNQUFNO0VBQ3BCLElBQUksQ0FBQ0UsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDakIsSUFBSSxDQUFDQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNwQixJQUFJLENBQUNGLEdBQUcsR0FBR0EsR0FBRyxDQUFDLENBQUM7RUFDaEIsSUFBSSxDQUFDRyxRQUFRLEdBQUcsVUFBU0YsS0FBSyxFQUFFO0lBQzlCLElBQUlHLEtBQUssQ0FBQ0MsT0FBTyxDQUFDLElBQUksQ0FBQ0osS0FBSyxDQUFDQSxLQUFLLENBQUNILE9BQU8sQ0FBQyxDQUFDLEVBQUU7TUFDNUM7TUFDQSxJQUFJLENBQUNHLEtBQUssQ0FBQ0EsS0FBSyxDQUFDSCxPQUFPLENBQUMsQ0FBQ1EsSUFBSSxDQUFDTCxLQUFLLENBQUM7SUFDdkMsQ0FBQyxNQUFNO01BQ0wsSUFBSSxDQUFDQSxLQUFLLENBQUNBLEtBQUssQ0FBQ0gsT0FBTyxDQUFDLEdBQUcsQ0FBQ0csS0FBSyxDQUFDO0lBQ3JDO0VBQ0YsQ0FBQztBQUNILENBQUMiLCJmaWxlIjoiMjAyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHRhZ25hbWUsIHBhcmVudCwgdmFsKSB7XG4gIHRoaXMudGFnbmFtZSA9IHRhZ25hbWU7XG4gIHRoaXMucGFyZW50ID0gcGFyZW50O1xuICB0aGlzLmNoaWxkID0ge307IC8vY2hpbGQgdGFnc1xuICB0aGlzLmF0dHJzTWFwID0ge307IC8vYXR0cmlidXRlcyBtYXBcbiAgdGhpcy52YWwgPSB2YWw7IC8vdGV4dCBvbmx5XG4gIHRoaXMuYWRkQ2hpbGQgPSBmdW5jdGlvbihjaGlsZCkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuY2hpbGRbY2hpbGQudGFnbmFtZV0pKSB7XG4gICAgICAvL2FscmVhZHkgcHJlc2VudHNcbiAgICAgIHRoaXMuY2hpbGRbY2hpbGQudGFnbmFtZV0ucHVzaChjaGlsZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2hpbGRbY2hpbGQudGFnbmFtZV0gPSBbY2hpbGRdO1xuICAgIH1cbiAgfTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///202\n"); /***/ }), -/* 195 */ +/* 203 */ /*!******************************************************************!*\ !*** D:/里海数字乡村/xunfeiAi/static/fast-xml-parser/src/validator.js ***! \******************************************************************/ @@ -24990,10 +25179,10 @@ eval("\n\nmodule.exports = function (tagname, parent, val) {\n this.tagname = t /***/ (function(module, exports, __webpack_require__) { "use strict"; -eval("\n\nvar util = __webpack_require__(/*! ./util */ 192);\nvar defaultOptions = {\n allowBooleanAttributes: false //A tag can have attributes without any value\n};\n\nvar props = ['allowBooleanAttributes'];\n\n//const tagsPattern = new RegExp(\"<\\\\/?([\\\\w:\\\\-_\\.]+)\\\\s*\\/?>\",\"g\");\nexports.validate = function (xmlData, options) {\n options = util.buildOptions(options, defaultOptions, props);\n\n //xmlData = xmlData.replace(/(\\r\\n|\\n|\\r)/gm,\"\");//make it single line\n //xmlData = xmlData.replace(/(^\\s*<\\?xml.*?\\?>)/g,\"\");//Remove XML starting tag\n //xmlData = xmlData.replace(/()/g,\"\");//Remove DOCTYPE\n var tags = [];\n var tagFound = false;\n\n //indicates that the root tag has been closed (aka. depth 0 has been reached)\n var reachedRoot = false;\n if (xmlData[0] === \"\\uFEFF\") {\n // check for byte order mark (BOM)\n xmlData = xmlData.substr(1);\n }\n for (var i = 0; i < xmlData.length; i++) {\n if (xmlData[i] === '<') {\n //starting of tag\n //read until you reach to '>' avoiding any '>' in attribute value\n\n i++;\n if (xmlData[i] === '?') {\n i = readPI(xmlData, ++i);\n if (i.err) {\n return i;\n }\n } else if (xmlData[i] === '!') {\n i = readCommentAndCDATA(xmlData, i);\n continue;\n } else {\n var closingTag = false;\n if (xmlData[i] === '/') {\n //closing tag\n closingTag = true;\n i++;\n }\n //read tagname\n var tagName = '';\n for (; i < xmlData.length && xmlData[i] !== '>' && xmlData[i] !== ' ' && xmlData[i] !== '\\t' && xmlData[i] !== '\\n' && xmlData[i] !== '\\r'; i++) {\n tagName += xmlData[i];\n }\n tagName = tagName.trim();\n //console.log(tagName);\n\n if (tagName[tagName.length - 1] === '/') {\n //self closing tag without attributes\n tagName = tagName.substring(0, tagName.length - 1);\n //continue;\n i--;\n }\n if (!validateTagName(tagName)) {\n var msg = void 0;\n if (tagName.trim().length === 0) {\n msg = \"There is an unnecessary space between tag name and backward slash ' 0) {\n return getErrorObject('InvalidTag', \"Closing tag '\" + tagName + \"' can't have attributes or invalid starting.\", getLineNumberForPosition(xmlData, i));\n } else {\n var otg = tags.pop();\n if (tagName !== otg) {\n return getErrorObject('InvalidTag', \"Closing tag '\" + otg + \"' is expected inplace of '\" + tagName + \"'.\", getLineNumberForPosition(xmlData, i));\n }\n\n //when there are no more tags, we reached the root level.\n if (tags.length == 0) {\n reachedRoot = true;\n }\n }\n } else {\n var _isValid = validateAttributeString(attrStr, options);\n if (_isValid !== true) {\n //the result from the nested function returns the position of the error within the attribute\n //in order to get the 'true' error line, we need to calculate the position where the attribute begins (i - attrStr.length) and then add the position within the attribute\n //this gives us the absolute index in the entire xml, which we can use to find the line at last\n return getErrorObject(_isValid.err.code, _isValid.err.msg, getLineNumberForPosition(xmlData, i - attrStr.length + _isValid.err.line));\n }\n\n //if the root level has been reached before ...\n if (reachedRoot === true) {\n return getErrorObject('InvalidXml', 'Multiple possible root nodes found.', getLineNumberForPosition(xmlData, i));\n } else {\n tags.push(tagName);\n }\n tagFound = true;\n }\n\n //skip tag text value\n //It may include comments and CDATA value\n for (i++; i < xmlData.length; i++) {\n if (xmlData[i] === '<') {\n if (xmlData[i + 1] === '!') {\n //comment or CADATA\n i++;\n i = readCommentAndCDATA(xmlData, i);\n continue;\n } else {\n break;\n }\n } else if (xmlData[i] === '&') {\n var afterAmp = validateAmpersand(xmlData, i);\n if (afterAmp == -1) return getErrorObject('InvalidChar', \"char '&' is not expected.\", getLineNumberForPosition(xmlData, i));\n i = afterAmp;\n }\n } //end of reading tag text value\n if (xmlData[i] === '<') {\n i--;\n }\n }\n } else {\n if (xmlData[i] === ' ' || xmlData[i] === '\\t' || xmlData[i] === '\\n' || xmlData[i] === '\\r') {\n continue;\n }\n return getErrorObject('InvalidChar', \"char '\" + xmlData[i] + \"' is not expected.\", getLineNumberForPosition(xmlData, i));\n }\n }\n if (!tagFound) {\n return getErrorObject('InvalidXml', 'Start tag expected.', 1);\n } else if (tags.length > 0) {\n return getErrorObject('InvalidXml', \"Invalid '\" + JSON.stringify(tags, null, 4).replace(/\\r?\\n/g, '') + \"' found.\", 1);\n }\n return true;\n};\n\n/**\n * Read Processing insstructions and skip\n * @param {*} xmlData\n * @param {*} i\n */\nfunction readPI(xmlData, i) {\n var start = i;\n for (; i < xmlData.length; i++) {\n if (xmlData[i] == '?' || xmlData[i] == ' ') {\n //tagname\n var tagname = xmlData.substr(start, i - start);\n if (i > 5 && tagname === 'xml') {\n return getErrorObject('InvalidXml', 'XML declaration allowed only at the start of the document.', getLineNumberForPosition(xmlData, i));\n } else if (xmlData[i] == '?' && xmlData[i + 1] == '>') {\n //check if valid attribut string\n i++;\n break;\n } else {\n continue;\n }\n }\n }\n return i;\n}\nfunction readCommentAndCDATA(xmlData, i) {\n if (xmlData.length > i + 5 && xmlData[i + 1] === '-' && xmlData[i + 2] === '-') {\n //comment\n for (i += 3; i < xmlData.length; i++) {\n if (xmlData[i] === '-' && xmlData[i + 1] === '-' && xmlData[i + 2] === '>') {\n i += 2;\n break;\n }\n }\n } else if (xmlData.length > i + 8 && xmlData[i + 1] === 'D' && xmlData[i + 2] === 'O' && xmlData[i + 3] === 'C' && xmlData[i + 4] === 'T' && xmlData[i + 5] === 'Y' && xmlData[i + 6] === 'P' && xmlData[i + 7] === 'E') {\n var angleBracketsCount = 1;\n for (i += 8; i < xmlData.length; i++) {\n if (xmlData[i] === '<') {\n angleBracketsCount++;\n } else if (xmlData[i] === '>') {\n angleBracketsCount--;\n if (angleBracketsCount === 0) {\n break;\n }\n }\n }\n } else if (xmlData.length > i + 9 && xmlData[i + 1] === '[' && xmlData[i + 2] === 'C' && xmlData[i + 3] === 'D' && xmlData[i + 4] === 'A' && xmlData[i + 5] === 'T' && xmlData[i + 6] === 'A' && xmlData[i + 7] === '[') {\n for (i += 8; i < xmlData.length; i++) {\n if (xmlData[i] === ']' && xmlData[i + 1] === ']' && xmlData[i + 2] === '>') {\n i += 2;\n break;\n }\n }\n }\n return i;\n}\nvar doubleQuote = '\"';\nvar singleQuote = \"'\";\n\n/**\n * Keep reading xmlData until '<' is found outside the attribute value.\n * @param {string} xmlData\n * @param {number} i\n */\nfunction readAttributeStr(xmlData, i) {\n var attrStr = '';\n var startChar = '';\n var tagClosed = false;\n for (; i < xmlData.length; i++) {\n if (xmlData[i] === doubleQuote || xmlData[i] === singleQuote) {\n if (startChar === '') {\n startChar = xmlData[i];\n } else if (startChar !== xmlData[i]) {\n //if vaue is enclosed with double quote then single quotes are allowed inside the value and vice versa\n continue;\n } else {\n startChar = '';\n }\n } else if (xmlData[i] === '>') {\n if (startChar === '') {\n tagClosed = true;\n break;\n }\n }\n attrStr += xmlData[i];\n }\n if (startChar !== '') {\n return false;\n }\n return {\n value: attrStr,\n index: i,\n tagClosed: tagClosed\n };\n}\n\n/**\n * Select all the attributes whether valid or invalid.\n */\nvar validAttrStrRegxp = new RegExp('(\\\\s*)([^\\\\s=]+)(\\\\s*=)?(\\\\s*([\\'\"])(([\\\\s\\\\S])*?)\\\\5)?', 'g');\n\n//attr, =\"sd\", a=\"amit's\", a=\"sd\"b=\"saf\", ab cd=\"\"\n\nfunction validateAttributeString(attrStr, options) {\n //console.log(\"start:\"+attrStr+\":end\");\n\n //if(attrStr.trim().length === 0) return true; //empty string\n\n var matches = util.getAllMatches(attrStr, validAttrStrRegxp);\n var attrNames = {};\n for (var i = 0; i < matches.length; i++) {\n if (matches[i][1].length === 0) {\n //nospace before attribute name: a=\"sd\"b=\"saf\"\n return getErrorObject('InvalidAttr', \"Attribute '\" + matches[i][2] + \"' has no space in starting.\", getPositionFromMatch(attrStr, matches[i][0]));\n } else if (matches[i][3] === undefined && !options.allowBooleanAttributes) {\n //independent attribute: ab\n return getErrorObject('InvalidAttr', \"boolean attribute '\" + matches[i][2] + \"' is not allowed.\", getPositionFromMatch(attrStr, matches[i][0]));\n }\n /* else if(matches[i][6] === undefined){//attribute without value: ab=\n return { err: { code:\"InvalidAttr\",msg:\"attribute \" + matches[i][2] + \" has no value assigned.\"}};\n } */\n var attrName = matches[i][2];\n if (!validateAttrName(attrName)) {\n return getErrorObject('InvalidAttr', \"Attribute '\" + attrName + \"' is an invalid name.\", getPositionFromMatch(attrStr, matches[i][0]));\n }\n if (!attrNames.hasOwnProperty(attrName)) {\n //check for duplicate attribute.\n attrNames[attrName] = 1;\n } else {\n return getErrorObject('InvalidAttr', \"Attribute '\" + attrName + \"' is repeated.\", getPositionFromMatch(attrStr, matches[i][0]));\n }\n }\n return true;\n}\nfunction validateNumberAmpersand(xmlData, i) {\n var re = /\\d/;\n if (xmlData[i] === 'x') {\n i++;\n re = /[\\da-fA-F]/;\n }\n for (; i < xmlData.length; i++) {\n if (xmlData[i] === ';') return i;\n if (!xmlData[i].match(re)) break;\n }\n return -1;\n}\nfunction validateAmpersand(xmlData, i) {\n // https://www.w3.org/TR/xml/#dt-charref\n i++;\n if (xmlData[i] === ';') return -1;\n if (xmlData[i] === '#') {\n i++;\n return validateNumberAmpersand(xmlData, i);\n }\n var count = 0;\n for (; i < xmlData.length; i++, count++) {\n if (xmlData[i].match(/\\w/) && count < 20) continue;\n if (xmlData[i] === ';') break;\n return -1;\n }\n return i;\n}\nfunction getErrorObject(code, message, lineNumber) {\n return {\n err: {\n code: code,\n msg: message,\n line: lineNumber\n }\n };\n}\nfunction validateAttrName(attrName) {\n return util.isName(attrName);\n}\n\n// const startsWithXML = /^xml/i;\n\nfunction validateTagName(tagname) {\n return util.isName(tagname) /* && !tagname.match(startsWithXML) */;\n}\n\n//this function returns the line number for the character at the given index\nfunction getLineNumberForPosition(xmlData, index) {\n var lines = xmlData.substring(0, index).split(/\\r?\\n/);\n return lines.length;\n}\n\n//this function returns the position of the last character of match within attrStr\nfunction getPositionFromMatch(attrStr, match) {\n return attrStr.indexOf(match) + match.length;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vc3RhdGljL2Zhc3QteG1sLXBhcnNlci9zcmMvdmFsaWRhdG9yLmpzIl0sIm5hbWVzIjpbInV0aWwiLCJyZXF1aXJlIiwiZGVmYXVsdE9wdGlvbnMiLCJhbGxvd0Jvb2xlYW5BdHRyaWJ1dGVzIiwicHJvcHMiLCJleHBvcnRzIiwidmFsaWRhdGUiLCJ4bWxEYXRhIiwib3B0aW9ucyIsImJ1aWxkT3B0aW9ucyIsInRhZ3MiLCJ0YWdGb3VuZCIsInJlYWNoZWRSb290Iiwic3Vic3RyIiwiaSIsImxlbmd0aCIsInJlYWRQSSIsImVyciIsInJlYWRDb21tZW50QW5kQ0RBVEEiLCJjbG9zaW5nVGFnIiwidGFnTmFtZSIsInRyaW0iLCJzdWJzdHJpbmciLCJ2YWxpZGF0ZVRhZ05hbWUiLCJtc2ciLCJnZXRFcnJvck9iamVjdCIsImdldExpbmVOdW1iZXJGb3JQb3NpdGlvbiIsInJlc3VsdCIsInJlYWRBdHRyaWJ1dGVTdHIiLCJhdHRyU3RyIiwidmFsdWUiLCJpbmRleCIsImlzVmFsaWQiLCJ2YWxpZGF0ZUF0dHJpYnV0ZVN0cmluZyIsImNvZGUiLCJsaW5lIiwidGFnQ2xvc2VkIiwib3RnIiwicG9wIiwicHVzaCIsImFmdGVyQW1wIiwidmFsaWRhdGVBbXBlcnNhbmQiLCJKU09OIiwic3RyaW5naWZ5IiwicmVwbGFjZSIsInN0YXJ0IiwidGFnbmFtZSIsImFuZ2xlQnJhY2tldHNDb3VudCIsImRvdWJsZVF1b3RlIiwic2luZ2xlUXVvdGUiLCJzdGFydENoYXIiLCJ2YWxpZEF0dHJTdHJSZWd4cCIsIlJlZ0V4cCIsIm1hdGNoZXMiLCJnZXRBbGxNYXRjaGVzIiwiYXR0ck5hbWVzIiwiZ2V0UG9zaXRpb25Gcm9tTWF0Y2giLCJ1bmRlZmluZWQiLCJhdHRyTmFtZSIsInZhbGlkYXRlQXR0ck5hbWUiLCJoYXNPd25Qcm9wZXJ0eSIsInZhbGlkYXRlTnVtYmVyQW1wZXJzYW5kIiwicmUiLCJtYXRjaCIsImNvdW50IiwibWVzc2FnZSIsImxpbmVOdW1i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QUMsQ0FBQyxDQUFDaUQsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJQyxLQUFLLEdBQUcsRUFBRSxFQUN0QztJQUNGLElBQUl6RCxPQUFPLENBQUNPLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFDcEI7SUFDRixPQUFPLENBQUMsQ0FBQztFQUNYO0VBQ0EsT0FBT0EsQ0FBQztBQUNWO0FBRUEsU0FBU1csY0FBYyxDQUFDUyxJQUFJLEVBQUUrQixPQUFPLEVBQUVDLFVBQVUsRUFBRTtFQUNqRCxPQUFPO0lBQ0xqRCxHQUFHLEVBQUU7TUFDSGlCLElBQUksRUFBRUEsSUFBSTtNQUNWVixHQUFHLEVBQUV5QyxPQUFPO01BQ1o5QixJQUFJLEVBQUUrQjtJQUNSO0VBQ0YsQ0FBQztBQUNIO0FBRUEsU0FBU1AsZ0JBQWdCLENBQUNELFFBQVEsRUFBRTtFQUNsQyxPQUFPMUQsSUFBSSxDQUFDbUUsTUFBTSxDQUFDVCxRQUFRLENBQUM7QUFDOUI7O0FBRUE7O0FBRUEsU0FBU25DLGVBQWUsQ0FBQ3VCLE9BQU8sRUFBRTtFQUNoQyxPQUFPOUMsSUFBSSxDQUFDbUUsTUFBTSxDQUFDckIsT0FBTyxDQUFDLENBQUM7QUFDOUI7O0FBRUE7QUFDQSxTQUFTcEIsd0JBQXdCLENBQUNuQixPQUFPLEVBQUV3QixLQUFLLEVBQUU7RUFDaEQsSUFBSXFDLEtBQUssR0FBRzdELE9BQU8sQ0FBQ2UsU0FBUyxDQUFDLENBQUMsRUFBRVMsS0FBSyxDQUFDLENBQUNzQyxLQUFLLENBQUMsT0FBTyxDQUFDO0VBQ3RELE9BQU9ELEtBQUssQ0FBQ3JELE1BQU07QUFDckI7O0FBRUE7QUFDQSxTQUFTeUMsb0JBQW9CLENBQUMzQixPQUFPLEVBQUVrQyxLQUFLLEVBQUU7RUFDNUMsT0FBT2xDLE9BQU8sQ0FBQ3lDLE9BQU8sQ0FBQ1AsS0FBSyxDQUFDLEdBQUdBLEtBQUssQ0FBQ2hELE1BQU07QUFDOUMiLCJmaWxlIjoiMTk1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi91dGlsJyk7XG5cbmNvbnN0IGRlZmF1bHRPcHRpb25zID0ge1xuICBhbGxvd0Jvb2xlYW5BdHRyaWJ1dGVzOiBmYWxzZSwgLy9BIHRhZyBjYW4gaGF2ZSBhdHRyaWJ1dGVzIHdpdGhvdXQgYW55IHZhbHVlXG59O1xuXG5jb25zdCBwcm9wcyA9IFsnYWxsb3dCb29sZWFuQXR0cmlidXRlcyddO1xuXG4vL2NvbnN0IHRhZ3NQYXR0ZXJuID0gbmV3IFJlZ0V4cChcIjxcXFxcLz8oW1xcXFx3OlxcXFwtX1xcLl0rKVxcXFxzKlxcLz8+XCIsXCJnXCIpO1xuZXhwb3J0cy52YWxpZGF0ZSA9IGZ1bmN0aW9uICh4bWxEYXRhLCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSB1dGlsLmJ1aWxkT3B0aW9ucyhvcHRpb25zLCBkZWZhdWx0T3B0aW9ucywgcHJvcHMpO1xuXG4gIC8veG1sRGF0YSA9IHhtbERhdGEucmVwbGFjZSgvKFxcclxcbnxcXG58XFxyKS9nbSxcIlwiKTsvL21ha2UgaXQgc2luZ2xlIGxpbmVcbiAgLy94bWxEYXRhID0geG1sRGF0YS5yZXBsYWNlKC8oXlxccyo8XFw/eG1sLio/XFw/PikvZyxcIlwiKTsvL1JlbW92ZSBYTUwgc3RhcnRpbmcgdGFnXG4gIC8veG1sRGF0YSA9IHhtbERhdGEucmVwbGFjZSgvKDwhRE9DVFlQRVtcXHNcXHdcXFwiXFwuXFwvXFwtXFw6XSsoXFxbLipcXF0pKlxccyo+KS9nLFwiXCIpOy8vUmVtb3ZlIERPQ1RZUEVcbiAgY29uc3QgdGFncyA9IFtdO1xuICBsZXQgdGFnRm91bmQgPSBmYWxzZTtcblxuICAvL2luZGljYXRlcyB0aGF0IHRoZSByb290IHRhZyBoYXMgYmVlbiBjbG9zZWQgKGFrYS4gZGVwdGggMCBoYXMgYmVlbiByZWFjaGVkKVxuICBsZXQgcmVhY2hlZFJvb3QgPSBmYWxzZTtcblxuICBpZiAoeG1sRGF0YVswXSA9PT0gJ1xcdWZlZmYnKSB7XG4gICAgLy8gY2hlY2sgZm9yIGJ5dGUgb3JkZXIgbWFyayAoQk9NKVxuICAgIHhtbERhdGEgPSB4bWxEYXRhLnN1YnN0cigxKTtcbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgeG1sRGF0YS5sZW5ndGg7IGkrKykge1xuICAgIGlmICh4bWxEYXRhW2ldID09PSAnPCcpIHtcbiAgICAgIC8vc3RhcnRpbmcgb2YgdGFnXG4gICAgICAvL3JlYWQgdW50aWwgeW91IHJlYWNoIHRvICc+JyBhdm9pZGluZyBhbnkgJz4nIGluIGF0dHJpYnV0ZSB2YWx1ZVxuXG4gICAgICBpKys7XG4gICAgICBpZiAoeG1sRGF0YVtpXSA9PT0gJz8nKSB7XG4gICAgICAgIGkgPSByZWFkUEkoeG1sRGF0YSwgKytpKTtcbiAgICAgICAgaWYgKGkuZXJyKSB7XG4gICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoeG1sRGF0YVtpXSA9PT0gJyEnKSB7XG4gICAgICAgIGkgPSByZWFkQ29tbWVudEFuZENEQVRBKHhtbERhdGEsIGkpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBjbG9zaW5nVGFnID0gZmFsc2U7XG4gICAgICAgIGlmICh4bWxEYXRhW2ldID09PSAnLycpIHtcbiAgICAgICAgICAvL2Nsb3NpbmcgdGFnXG4gICAgICAgICAgY2xvc2luZ1RhZyA9IHRydWU7XG4gICAgICAgICAgaSsrO1xuICAgICAgICB9XG4gICAgICAgIC8vcmVhZCB0YWduYW1lXG4gICAgICAgIGxldCB0YWdOYW1lID0gJyc7XG4gICAgICAgIGZvciAoOyBpIDwgeG1sRGF0YS5sZW5ndGggJiZcbiAgICAgICAgICB4bWxEYXRhW2ldICE9PSAnPicgJiZcbiAgICAgICAgICB4bWxEYXRhW2ldICE9PSAnICcgJiZcbiAgICAgICAgICB4bWxEYXRhW2ldICE9PSAnXFx0JyAmJlxuICAgICAgICAgIHhtbERhdGFbaV0gIT09ICdcXG4nICYmXG4gICAgICAgICAgeG1sRGF0YVtpXSAhPT0gJ1xccic7IGkrK1xuICAgICAgICApIHtcbiAgICAgICAgICB0YWdOYW1lICs9IHhtbERhdGFbaV07XG4gICAgICAgIH1cbiAgICAgICAgdGFnTmFtZSA9IHRhZ05hbWUudHJpbSgpO1xuICAgICAgICAvL2NvbnNvbGUubG9nKHRhZ05hbWUpO1xuXG4gICAgICAgIGlmICh0YWdOYW1lW3RhZ05hbWUubGVuZ3RoIC0gMV0gPT09ICcvJykge1xuICAgICAgICAgIC8vc2VsZiBjbG9zaW5nIHRhZyB3aXRob3V0IGF0dHJpYnV0ZXNcbiAgICAgICAgICB0YWdOYW1lID0gdGFnTmFtZS5zdWJzdHJpbmcoMCwgdGFnTmFtZS5sZW5ndGggLSAxKTtcbiAgICAgICAgICAvL2NvbnRpbnVlO1xuICAgICAgICAgIGktLTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXZhbGlkYXRlVGFnTmFtZSh0YWdOYW1lKSkge1xuICAgICAgICAgIGxldCBtc2c7XG4gICAgICAgICAgaWYgKHRhZ05hbWUudHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgbXNnID0gXCJUaGVyZSBpcyBhbiB1bm5lY2Vzc2FyeSBzcGFjZSBiZXR3ZWVuIHRhZyBuYW1lIGFuZCBiYWNrd2FyZCBzbGFzaCAnPC8gLi4nLlwiO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtc2cgPSBcIlRhZyAnXCIrdGFnTmFtZStcIicgaXMgYW4gaW52YWxpZCBuYW1lLlwiO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZ2V0RXJyb3JPYmplY3QoJ0ludmFsaWRUYWcnLCBtc2csIGdldExpbmVOdW1iZXJGb3JQb3NpdGlvbih4bWxEYXRhLCBpKSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXN1bHQgPSByZWFkQXR0cmlidXRlU3RyKHhtbERhdGEsIGkpO1xuICAgICAgICBpZiAocmVzdWx0ID09PSBmYWxzZSkge1xuICAgICAgICAgIHJldHVybiBnZXRFcnJvck9iamVjdCgnSW52YWxpZEF0dHInLCBcIkF0dHJpYnV0ZXMgZm9yICdcIit0YWdOYW1lK1wiJyBoYXZlIG9wZW4gcXVvdGUuXCIsIGdldExpbmVOdW1iZXJGb3JQb3NpdGlvbih4bWxEYXRhLCBpKSk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGF0dHJTdHIgPSByZXN1bHQudmFsdWU7XG4gICAgICAgIGkgPSByZXN1bHQuaW5kZXg7XG5cbiAgICAgICAgaWYgKGF0dHJTdHJbYXR0clN0ci5sZW5ndGggLSAxXSA9PT0gJy8nKSB7XG4gICAgICAgICAgLy9zZWxmIGNsb3NpbmcgdGFnXG4gICAgICAgICAgYXR0clN0ciA9IGF0dHJTdHIuc3Vic3RyaW5nKDAsIGF0dHJTdHIubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgY29uc3QgaXNWYWxpZCA9IHZhbGlkYXRlQXR0cmlidXRlU3RyaW5nKGF0dHJTdHIsIG9wdGlvbnMpO1xuICAgICAgICAgIGlmIChpc1ZhbGlkID09PSB0cnVlKSB7XG4gICAgICAgICAgICB0YWdGb3VuZCA9IHRydWU7XG4gICAgICAgICAgICAvL2NvbnRpbnVlOyAvL3RleHQgbWF5IHByZXNlbnRzIGFmdGVyIHNlbGYgY2xvc2luZyB0YWdcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy90aGUgcmVzdWx0IGZyb20gdGhlIG5lc3RlZCBmdW5jdGlvbiByZXR1cm5zIHRoZSBwb3NpdGlvbiBvZiB0aGUgZXJyb3Igd2l0aGluIHRoZSBhdHRyaWJ1dGVcbiAgICAgICAgICAgIC8vaW4gb3JkZXIgdG8gZ2V0IHRoZSAndHJ1ZScgZXJyb3IgbGluZSwgd2UgbmVlZCB0byBjYWxjdWxhdGUgdGhlIHBvc2l0aW9uIHdoZXJlIHRoZSBhdHRyaWJ1dGUgYmVnaW5zIChpIC0gYXR0clN0ci5sZW5ndGgpIGFuZCB0aGVuIGFkZCB0aGUgcG9zaXRpb24gd2l0aGluIHRoZSBhdHRyaWJ1dGVcbiAgICAgICAgICAgIC8vdGhpcyBnaXZlcyB1cyB0aGUgYWJzb2x1dGUgaW5kZXggaW4gdGhlIGVudGlyZSB4bWwsIHdoaWNoIHdlIGNhbiB1c2UgdG8gZmluZCB0aGUgbGluZSBhdCBsYXN0XG4gICAgICAgICAgICByZXR1cm4gZ2V0RXJyb3JPYmplY3QoaXNWYWxpZC5lcnIuY29kZSwgaXNWYWxpZC5lcnIubXNnLCBnZXRMaW5lTnVtYmVyRm9yUG9zaXRpb24oeG1sRGF0YSwgaSAtIGF0dHJTdHIubGVuZ3RoICsgaXNWYWxpZC5lcnIubGluZSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChjbG9zaW5nVGFnKSB7XG4gICAgICAgICAgaWYgKCFyZXN1bHQudGFnQ2xvc2VkKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0RXJyb3JPYmplY3QoJ0ludmFsaWRUYWcnLCBcIkNsb3NpbmcgdGFnICdcIit0YWdOYW1lK1wiJyBkb2Vzbid0IGhhdmUgcHJvcGVyIGNsb3NpbmcuXCIsIGdldExpbmVOdW1iZXJGb3JQb3NpdGlvbih4bWxEYXRhLCBpKSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChhdHRyU3RyLnRyaW0oKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0RXJyb3JPYmplY3QoJ0ludmFsaWRUYWcnLCBcIkNsb3NpbmcgdGFnICdcIit0YWdOYW1lK1wiJyBjYW4ndCBoYXZlIGF0dHJpYnV0ZXMgb3IgaW52YWxpZCBzdGFydGluZy5cIiwgZ2V0TGluZU51bWJlckZvclBvc2l0aW9uKHhtbERhdGEsIGkpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qgb3RnID0gdGFncy5wb3AoKTtcbiAgICAgICAgICAgIGlmICh0YWdOYW1lICE9PSBvdGcpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGdldEVycm9yT2JqZWN0KCdJbnZhbGlkVGFnJywgXCJDbG9zaW5nIHRhZyAnXCIrb3RnK1wiJyBpcyBleHBlY3RlZCBpbnBsYWNlIG9mICdcIit0YWdOYW1lK1wiJy5cIiwgZ2V0TGluZU51bWJlckZvclBvc2l0aW9uKHhtbERhdGEsIGkpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy93aGVuIHRoZXJlIGFyZSBubyBtb3JlIHRhZ3MsIHdlIHJlYWNoZWQgdGhlIHJvb3QgbGV2ZWwuXG4gICAgICAgICAgICBpZiAodGFncy5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgICByZWFjaGVkUm9vdCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGlzVmFsaWQgPSB2YWxpZGF0ZUF0dHJpYnV0ZVN0cmluZyhhdHRyU3RyLCBvcHRpb25zKTtcbiAgICAgICAgICBpZiAoaXNWYWxpZCAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgLy90aGUgcmVzdWx0IGZyb20gdGhlIG5lc3RlZCBmdW5jdGlvbiByZXR1cm5zIHRoZSBwb3NpdGlvbiBvZiB0aGUgZXJyb3Igd2l0aGluIHRoZSBhdHRyaWJ1dGVcbiAgICAgICAgICAgIC8vaW4gb3JkZXIgdG8gZ2V0IHRoZSAndHJ1ZScgZXJyb3IgbGluZSwgd2UgbmVlZCB0byBjYWxjdWxhdGUgdGhlIHBvc2l0aW9uIHdoZXJlIHRoZSBhdHRyaWJ1dGUgYmVnaW5zIChpIC0gYXR0clN0ci5sZW5ndGgpIGFuZCB0aGVuIGFkZCB0aGUgcG9zaXRpb24gd2l0aGluIHRoZSBhdHRyaWJ1dGVcbiAgICAgICAgICAgIC8vdGhpcyBnaXZlcyB1cyB0aGUgYWJzb2x1dGUgaW5kZXggaW4gdGhlIGVudGlyZSB4bWwsIHdoaWNoIHdlIGNhbiB1c2UgdG8gZmluZCB0aGUgbGluZSBhdCBsYXN0XG4gICAgICAgICAgICByZXR1cm4gZ2V0RXJyb3JPYmplY3QoaXNWYWxpZC5lcnIuY29kZSwgaXNWYWxpZC5lcnIubXNnLCBnZXRMaW5lTnVtYmVyRm9yUG9zaXRpb24oeG1sRGF0YSwgaSAtIGF0dHJTdHIubGVuZ3RoICsgaXNWYWxpZC5lcnIubGluZSkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vaWYgdGhlIHJvb3QgbGV2ZWwgaGFzIGJlZW4gcmVhY2hlZCBiZWZvcmUgLi4uXG4gICAgICAgICAgaWYgKHJlYWNoZWRSb290ID09PSB0cnVlKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0RXJyb3JPYmplY3QoJ0ludmFsaWRYbWwnLCAnTXVsdGlwbGUgcG9zc2libGUgcm9vdCBub2RlcyBmb3VuZC4nLCBnZXRMaW5lTnVtYmVyRm9yUG9zaXRpb24oeG1sRGF0YSwgaSkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0YWdzLnB1c2godGFnTmFtZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRhZ0ZvdW5kID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vc2tpcCB0YWcgdGV4dCB2YWx1ZVxuICAgICAgICAvL0l0IG1heSBpbmNsdWRlIGNvbW1lbnRzIGFuZCBDREFUQSB2YWx1ZVxuICAgICAgICBmb3IgKGkrKzsgaSA8IHhtbERhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAoeG1sRGF0YVtpXSA9PT0gJzwnKSB7XG4gICAgICAgICAgICBpZiAoeG1sRGF0YVtpICsgMV0gPT09ICchJykge1xuICAgICAgICAgICAgICAvL2NvbW1lbnQgb3IgQ0FEQVRBXG4gICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgaSA9IHJlYWRDb21tZW50QW5kQ0RBVEEoeG1sRGF0YSwgaSk7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmICh4bWxEYXRhW2ldID09PSAnJicpIHtcbiAgICAgICAgICAgIGNvbnN0IGFmdGVyQW1wID0gdmFsaWRhdGVBbXBlcnNhbmQoeG1sRGF0YSwgaSk7XG4gICAgICAgICAgICBpZiAoYWZ0ZXJBbXAgPT0gLTEpXG4gICAgICAgICAgICAgIHJldHVybiBnZXRFcnJvck9iamVjdCgnSW52YWxpZENoYXInLCBcImNoYXIgJyYnIGlzIG5vdCBleHBlY3RlZC5cIiwgZ2V0TGluZU51bWJlckZvclBvc2l0aW9uKHhtbERhdGEsIGkpKTtcbiAgICAgICAgICAgIGkgPSBhZnRlckFtcDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gLy9lbmQgb2YgcmVhZGluZyB0YWcgdGV4dCB2YWx1ZVxuICAgICAgICBpZiAoeG1sRGF0YVtpXSA9PT0gJzwnKSB7XG4gICAgICAgICAgaS0tO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh4bWxEYXRhW2ldID09PSAnICcgfHwgeG1sRGF0YVtpXSA9PT0gJ1xcdCcgfHwgeG1sRGF0YVtpXSA9PT0gJ1xcbicgfHwgeG1sRGF0YVtpXSA9PT0gJ1xccicpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gZ2V0RXJyb3JPYmplY3QoJ0ludmFsaWRDaGFyJywgXCJjaGFyICdcIit4bWxEYXRhW2ldK1wiJyBpcyBub3QgZXhwZWN0ZWQuXCIsIGdldExpbmVOdW1iZXJGb3JQb3NpdGlvbih4bWxEYXRhLCBpKSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKCF0YWdGb3VuZCkge1xuICAgIHJldHVybiBnZXRFcnJvck9iamVjdCgnSW52YWxpZFhtbCcsICdTdGFydCB0YWcgZXhwZWN0ZWQuJywgMSk7XG4gIH0gZWxzZSBpZiAodGFncy5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIGdldEVycm9yT2JqZWN0KCdJbnZhbGlkWG1sJywgXCJJbnZhbGlkICdcIitKU09OLnN0cmluZ2lmeSh0YWdzLCBudWxsLCA0KS5yZXBsYWNlKC9cXHI/XFxuL2csICcnKStcIicgZm91bmQuXCIsIDEpO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG4vKipcbiAqIFJlYWQgUHJvY2Vzc2luZyBpbnNzdHJ1Y3Rpb25zIGFuZCBza2lwXG4gKiBAcGFyYW0geyp9IHhtbERhdGFcbiAqIEBwYXJhbSB7Kn0gaVxuICovXG5mdW5jdGlvbiByZWFkUEkoeG1sRGF0YSwgaSkge1xuICB2YXIgc3RhcnQgPSBpO1xuICBmb3IgKDsgaSA8IHhtbERhdGEubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoeG1sRGF0YVtpXSA9PSAnPycgfHwgeG1sRGF0YVtpXSA9PSAnICcpIHtcbiAgICAgIC8vdGFnbmFtZVxuICAgICAgdmFyIHRhZ25hbWUgPSB4bWxEYXRhLnN1YnN0cihzdGFydCwgaSAtIHN0YXJ0KTtcbiAgICAgIGlmIChpID4gNSAmJiB0YWduYW1lID09PSAneG1sJykge1xuICAgICAgICByZXR1cm4gZ2V0RXJyb3JPYmplY3QoJ0ludmFsaWRYbWwnLCAnWE1MIGRlY2xhcmF0aW9uIGFsbG93ZWQgb25seSBhdCB0aGUgc3RhcnQgb2YgdGhlIGRvY3VtZW50LicsIGdldExpbmVOdW1iZXJGb3JQb3NpdGlvbih4bWxEYXRhLCBpKSk7XG4gICAgICB9IGVsc2UgaWYgKHhtbERhdGFbaV0gPT0gJz8nICYmIHhtbERhdGFbaSArIDFdID09ICc+Jykge1xuICAgICAgICAvL2NoZWNrIGlmIHZhbGlkIGF0dHJpYnV0IHN0cmluZ1xuICAgICAgICBpKys7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBpO1xufVxuXG5mdW5jdGlvbiByZWFkQ29tbWVudEFuZENEQVRBKHhtbERhdGEsIGkpIHtcbiAgaWYgKHhtbERhdGEubGVuZ3RoID4gaSArIDUgJiYgeG1sRGF0YVtpICsgMV0gPT09ICctJyAmJiB4bWxEYXRhW2kgKyAyXSA9PT0gJy0nKSB7XG4gICAgLy9jb21tZW50XG4gICAgZm9yIChpICs9IDM7IGkgPCB4bWxEYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoeG1sRGF0YVtpXSA9PT0gJy0nICYmIHhtbERhdGFbaSArIDFdID09PSAnLScgJiYgeG1sRGF0YVtpICsgMl0gPT09ICc+Jykge1xuICAgICAgICBpICs9IDI7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmIChcbiAgICB4bWxEYXRhLmxlbmd0aCA+IGkgKyA4ICYmXG4gICAgeG1sRGF0YVtpICsgMV0gPT09ICdEJyAmJlxuICAgIHhtbERhdGFbaSArIDJdID09PSAnTycgJiZcbiAgICB4bWxEYXRhW2kgKyAzXSA9PT0gJ0MnICYmXG4gICAgeG1sRGF0YVtpICsgNF0gPT09ICdUJyAmJlxuICAgIHhtbERhdGFbaSArIDVdID09PSAnWScgJiZcbiAgICB4bWxEYXRhW2kgKyA2XSA9PT0gJ1AnICYmXG4gICAgeG1sRGF0YVtpICsgN10gPT09ICdFJ1xuICApIHtcbiAgICBsZXQgYW5nbGVCcmFja2V0c0NvdW50ID0gMTtcbiAgICBmb3IgKGkgKz0gODsgaSA8IHhtbERhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh4bWxEYXRhW2ldID09PSAnPCcpIHtcbiAgICAgICAgYW5nbGVCcmFja2V0c0NvdW50Kys7XG4gICAgICB9IGVsc2UgaWYgKHhtbERhdGFbaV0gPT09ICc+Jykge1xuICAgICAgICBhbmdsZUJyYWNrZXRzQ291bnQtLTtcbiAgICAgICAgaWYgKGFuZ2xlQnJhY2tldHNDb3VudCA9PT0gMCkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2UgaWYgKFxuICAgIHhtbERhdGEubGVuZ3RoID4gaSArIDkgJiZcbiAgICB4bWxEYXRhW2kgKyAxXSA9PT0gJ1snICYmXG4gICAgeG1sRGF0YVtpICsgMl0gPT09ICdDJyAmJlxuICAgIHhtbERhdGFbaSArIDNdID09PSAnRCcgJiZcbiAgICB4bWxEYXRhW2kgKyA0XSA9PT0gJ0EnICYmXG4gICAgeG1sRGF0YVtpICsgNV0gPT09ICdUJyAmJlxuICAgIHhtbERhdGFbaSArIDZdID09PSAnQScgJiZcbiAgICB4bWxEYXRhW2kgKyA3XSA9PT0gJ1snXG4gICkge1xuICAgIGZvciAoaSArPSA4OyBpIDwgeG1sRGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHhtbERhdGFbaV0gPT09ICddJyAmJiB4bWxEYXRhW2kgKyAxXSA9PT0gJ10nICYmIHhtbERhdGFbaSArIDJdID09PSAnPicpIHtcbiAgICAgICAgaSArPSAyO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gaTtcbn1cblxudmFyIGRvdWJsZVF1b3RlID0gJ1wiJztcbnZhciBzaW5nbGVRdW90ZSA9IFwiJ1wiO1xuXG4vKipcbiAqIEtlZXAgcmVhZGluZyB4bWxEYXRhIHVudGlsICc8JyBpcyBmb3VuZCBvdXRzaWRlIHRoZSBhdHRyaWJ1dGUgdmFsdWUuXG4gKiBAcGFyYW0ge3N0cmluZ30geG1sRGF0YVxuICogQHBhcmFtIHtudW1iZXJ9IGlcbiAqL1xuZnVuY3Rpb24gcmVhZEF0dHJpYnV0ZVN0cih4bWxEYXRhLCBpKSB7XG4gIGxldCBhdHRyU3RyID0gJyc7XG4gIGxldCBzdGFydENoYXIgPSAnJztcbiAgbGV0IHRhZ0Nsb3NlZCA9IGZhbHNlO1xuICBmb3IgKDsgaSA8IHhtbERhdGEubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoeG1sRGF0YVtpXSA9PT0gZG91YmxlUXVvdGUgfHwgeG1sRGF0YVtpXSA9PT0gc2luZ2xlUXVvdGUpIHtcbiAgICAgIGlmIChzdGFydENoYXIgPT09ICcnKSB7XG4gICAgICAgIHN0YXJ0Q2hhciA9IHhtbERhdGFbaV07XG4gICAgICB9IGVsc2UgaWYgKHN0YXJ0Q2hhciAhPT0geG1sRGF0YVtpXSkge1xuICAgICAgICAvL2lmIHZhdWUgaXMgZW5jbG9zZWQgd2l0aCBkb3VibGUgcXVvdGUgdGhlbiBzaW5nbGUgcXVvdGVzIGFyZSBhbGxvd2VkIGluc2lkZSB0aGUgdmFsdWUgYW5kIHZpY2UgdmVyc2FcbiAgICAgICAgY29udGludWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGFydENoYXIgPSAnJztcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHhtbERhdGFbaV0gPT09ICc+Jykge1xuICAgICAgaWYgKHN0YXJ0Q2hhciA9PT0gJycpIHtcbiAgICAgICAgdGFnQ2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIGF0dHJTdHIgKz0geG1sRGF0YVtpXTtcbiAgfVxuICBpZiAoc3RhcnRDaGFyICE9PSAnJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdmFsdWU6IGF0dHJTdHIsXG4gICAgaW5kZXg6IGksXG4gICAgdGFnQ2xvc2VkOiB0YWdDbG9zZWRcbiAgfTtcbn1cblxuLyoqXG4gKiBTZWxlY3QgYWxsIHRoZSBhdHRyaWJ1dGVzIHdoZXRoZXIgdmFsaWQgb3IgaW52YWxpZC5cbiAqL1xuY29uc3QgdmFsaWRBdHRyU3RyUmVneHAgPSBuZXcgUmVnRXhwKCcoXFxcXHMqKShbXlxcXFxzPV0rKShcXFxccyo9KT8oXFxcXHMqKFtcXCdcIl0pKChbXFxcXHNcXFxcU10pKj8pXFxcXDUpPycsICdnJyk7XG5cbi8vYXR0ciwgPVwic2RcIiwgYT1cImFtaXQnc1wiLCBhPVwic2RcImI9XCJzYWZcIiwgYWIgIGNkPVwiXCJcblxuZnVuY3Rpb24gdmFsaWRhdGVBdHRyaWJ1dGVTdHJpbmcoYXR0clN0ciwgb3B0aW9ucykge1xuICAvL2NvbnNvbGUubG9nKFwic3RhcnQ6XCIrYXR0clN0citcIjplbmRcIik7XG5cbiAgLy9pZihhdHRyU3RyLnRyaW0oKS5sZW5ndGggPT09IDApIHJldHVybiB0cnVlOyAvL2VtcHR5IHN0cmluZ1xuXG4gIGNvbnN0IG1hdGNoZXMgPSB1dGlsLmdldEFsbE1hdGNoZXMoYXR0clN0ciwgdmFsaWRBdHRyU3RyUmVneHApO1xuICBjb25zdCBhdHRyTmFtZXMgPSB7fTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IG1hdGNoZXMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAobWF0Y2hlc1tpXVsxXS5sZW5ndGggPT09IDApIHtcbiAgICAgIC8vbm9zcGFjZSBiZWZvcmUgYXR0cmlidXRlIG5hbWU6IGE9XCJzZFwiYj1cInNhZlwiXG4gICAgICByZXR1cm4gZ2V0RXJyb3JPYmplY3QoJ0ludmFsaWRBdHRyJywgXCJBdHRyaWJ1dGUgJ1wiK21hdGNoZXNbaV1bMl0rXCInIGhhcyBubyBzcGFjZSBpbiBzdGFydGluZy5cIiwgZ2V0UG9zaXRpb25Gcm9tTWF0Y2goYXR0clN0ciwgbWF0Y2hlc1tpXVswXSkpXG4gICAgfSBlbHNlIGlmIChtYXRjaGVzW2ldWzNdID09PSB1bmRlZmluZWQgJiYgIW9wdGlvbnMuYWxsb3dCb29sZWFuQXR0cmlidXRlcykge1xuICAgICAgLy9pbmRlcGVuZGVudCBhdHRyaWJ1dGU6IGFiXG4gICAgICByZXR1cm4gZ2V0RXJyb3JPYmplY3QoJ0ludmFsaWRBdHRyJywgXCJib29sZWFuIGF0dHJpYnV0ZSAnXCIrbWF0Y2hlc1tpXVsyXStcIicgaXMgbm90IGFsbG93ZWQuXCIsIGdldFBvc2l0aW9uRnJvbU1hdGNoKGF0dHJTdHIsIG1hdGNoZXNbaV1bMF0pKTtcbiAgICB9XG4gICAgLyogZWxzZSBpZihtYXRjaGVzW2ldWzZdID09PSB1bmRlZmluZWQpey8vYXR0cmlidXRlIHdpdGhvdXQgdmFsdWU6IGFiPVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBlcnI6IHsgY29kZTpcIkludmFsaWRBdHRyXCIsbXNnOlwiYXR0cmlidXRlIFwiICsgbWF0Y2hlc1tpXVsyXSArIFwiIGhhcyBubyB2YWx1ZSBhc3NpZ25lZC5cIn19O1xuICAgICAgICAgICAgICAgIH0gKi9cbiAgICBjb25zdCBhdHRyTmFtZSA9IG1hdGNoZXNbaV1bMl07XG4gICAgaWYgKCF2YWxpZGF0ZUF0dHJOYW1lKGF0dHJOYW1lKSkge1xuICAgICAgcmV0dXJuIGdldEVycm9yT2JqZWN0KCdJbnZhbGlkQXR0cicsIFwiQXR0cmlidXRlICdcIithdHRyTmFtZStcIicgaXMgYW4gaW52YWxpZCBuYW1lLlwiLCBnZXRQb3NpdGlvbkZyb21NYXRjaChhdHRyU3RyLCBtYXRjaGVzW2ldWzBdKSk7XG4gICAgfVxuICAgIGlmICghYXR0ck5hbWVzLmhhc093blByb3BlcnR5KGF0dHJOYW1lKSkge1xuICAgICAgLy9jaGVjayBmb3IgZHVwbGljYXRlIGF0dHJpYnV0ZS5cbiAgICAgIGF0dHJOYW1lc1thdHRyTmFtZV0gPSAxO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZ2V0RXJyb3JPYmplY3QoJ0ludmFsaWRBdHRyJywgXCJBdHRyaWJ1dGUgJ1wiK2F0dHJOYW1lK1wiJyBpcyByZXBlYXRlZC5cIiwgZ2V0UG9zaXRpb25Gcm9tTWF0Y2goYXR0clN0ciwgbWF0Y2hlc1tpXVswXSkpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZU51bWJlckFtcGVyc2FuZCh4bWxEYXRhLCBpKSB7XG4gIGxldCByZSA9IC9cXGQvO1xuICBpZiAoeG1sRGF0YVtpXSA9PT0gJ3gnKSB7XG4gICAgaSsrO1xuICAgIHJlID0gL1tcXGRhLWZBLUZdLztcbiAgfVxuICBmb3IgKDsgaSA8IHhtbERhdGEubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoeG1sRGF0YVtpXSA9PT0gJzsnKVxuICAgICAgcmV0dXJuIGk7XG4gICAgaWYgKCF4bWxEYXRhW2ldLm1hdGNoKHJlKSlcbiAgICAgIGJyZWFrO1xuICB9XG4gIHJldHVybiAtMTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVBbXBlcnNhbmQoeG1sRGF0YSwgaSkge1xuICAvLyBodHRwczovL3d3dy53My5vcmcvVFIveG1sLyNkdC1jaGFycmVmXG4gIGkrKztcbiAgaWYgKHhtbERhdGFbaV0gPT09ICc7JylcbiAgICByZXR1cm4gLTE7XG4gIGlmICh4bWxEYXRhW2ldID09PSAnIycpIHtcbiAgICBpKys7XG4gICAgcmV0dXJuIHZhbGlkYXRlTnVtYmVyQW1wZXJzYW5kKHhtbERhdGEsIGkpO1xuICB9XG4gIGxldCBjb3VudCA9IDA7XG4gIGZvciAoOyBpIDwgeG1sRGF0YS5sZW5ndGg7IGkrKywgY291bnQrKykge1xuICAgIGlmICh4bWxEYXRhW2ldLm1hdGNoKC9cXHcvKSAmJiBjb3VudCA8IDIwKVxuICAgICAgY29udGludWU7XG4gICAgaWYgKHhtbERhdGFbaV0gPT09ICc7JylcbiAgICAgIGJyZWFrO1xuICAgIHJldHVybiAtMTtcbiAgfVxuICByZXR1cm4gaTtcbn1cblxuZnVuY3Rpb24gZ2V0RXJyb3JPYmplY3QoY29kZSwgbWVzc2FnZSwgbGluZU51bWJlcikge1xuICByZXR1cm4ge1xuICAgIGVycjoge1xuICAgICAgY29kZTogY29kZSxcbiAgICAgIG1zZzogbWVzc2FnZSxcbiAgICAgIGxpbmU6IGxpbmVOdW1iZXIsXG4gICAgfSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVBdHRyTmFtZShhdHRyTmFtZSkge1xuICByZXR1cm4gdXRpbC5pc05hbWUoYXR0ck5hbWUpO1xufVxuXG4vLyBjb25zdCBzdGFydHNXaXRoWE1MID0gL154bWwvaTtcblxuZnVuY3Rpb24gdmFsaWRhdGVUYWdOYW1lKHRhZ25hbWUpIHtcbiAgcmV0dXJuIHV0aWwuaXNOYW1lKHRhZ25hbWUpIC8qICYmICF0YWduYW1lLm1hdGNoKHN0YXJ0c1dpdGhYTUwpICovO1xufVxuXG4vL3RoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgbGluZSBudW1iZXIgZm9yIHRoZSBjaGFyYWN0ZXIgYXQgdGhlIGdpdmVuIGluZGV4XG5mdW5jdGlvbiBnZXRMaW5lTnVtYmVyRm9yUG9zaXRpb24oeG1sRGF0YSwgaW5kZXgpIHtcbiAgdmFyIGxpbmVzID0geG1sRGF0YS5zdWJzdHJpbmcoMCwgaW5kZXgpLnNwbGl0KC9cXHI/XFxuLyk7XG4gIHJldHVybiBsaW5lcy5sZW5ndGg7XG59XG5cbi8vdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBwb3NpdGlvbiBvZiB0aGUgbGFzdCBjaGFyYWN0ZXIgb2YgbWF0Y2ggd2l0aGluIGF0dHJTdHJcbmZ1bmN0aW9uIGdldFBvc2l0aW9uRnJvbU1hdGNoKGF0dHJTdHIsIG1hdGNoKSB7XG4gIHJldHVybiBhdHRyU3RyLmluZGV4T2YobWF0Y2gpICsgbWF0Y2gubGVuZ3RoO1xufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///195\n"); +eval("\n\nvar util = __webpack_require__(/*! ./util */ 200);\nvar defaultOptions = {\n allowBooleanAttributes: false //A tag can have attributes without any value\n};\n\nvar props = ['allowBooleanAttributes'];\n\n//const tagsPattern = new RegExp(\"<\\\\/?([\\\\w:\\\\-_\\.]+)\\\\s*\\/?>\",\"g\");\nexports.validate = function (xmlData, options) {\n options = util.buildOptions(options, defaultOptions, props);\n\n //xmlData = xmlData.replace(/(\\r\\n|\\n|\\r)/gm,\"\");//make it single line\n //xmlData = xmlData.replace(/(^\\s*<\\?xml.*?\\?>)/g,\"\");//Remove XML starting tag\n //xmlData = xmlData.replace(/()/g,\"\");//Remove DOCTYPE\n var tags = [];\n var tagFound = false;\n\n //indicates that the root tag has been closed (aka. depth 0 has been reached)\n var reachedRoot = false;\n if (xmlData[0] === \"\\uFEFF\") {\n // check for byte order mark (BOM)\n xmlData = xmlData.substr(1);\n }\n for (var i = 0; i < xmlData.length; i++) {\n if (xmlData[i] === '<') {\n //starting of tag\n //read until you reach to '>' avoiding any '>' in attribute value\n\n i++;\n if (xmlData[i] === '?') {\n i = readPI(xmlData, ++i);\n if (i.err) {\n return i;\n }\n } else if (xmlData[i] === '!') {\n i = readCommentAndCDATA(xmlData, i);\n continue;\n } else {\n var closingTag = false;\n if (xmlData[i] === '/') {\n //closing tag\n closingTag = true;\n i++;\n }\n //read tagname\n var tagName = '';\n for (; i < xmlData.length && xmlData[i] !== '>' && xmlData[i] !== ' ' && xmlData[i] !== '\\t' && xmlData[i] !== '\\n' && xmlData[i] !== '\\r'; i++) {\n tagName += xmlData[i];\n }\n tagName = tagName.trim();\n //console.log(tagName);\n\n if (tagName[tagName.length - 1] === '/') {\n //self closing tag without attributes\n tagName = tagName.substring(0, tagName.length - 1);\n //continue;\n i--;\n }\n if (!validateTagName(tagName)) {\n var msg = void 0;\n if (tagName.trim().length === 0) {\n msg = \"There is an unnecessary space between tag name and backward slash ' 0) {\n return getErrorObject('InvalidTag', \"Closing tag '\" + tagName + \"' can't have attributes or invalid starting.\", getLineNumberForPosition(xmlData, i));\n } else {\n var otg = tags.pop();\n if (tagName !== otg) {\n return getErrorObject('InvalidTag', \"Closing tag '\" + otg + \"' is expected inplace of '\" + tagName + \"'.\", getLineNumberForPosition(xmlData, i));\n }\n\n //when there are no more tags, we reached the root level.\n if (tags.length == 0) {\n reachedRoot = true;\n }\n }\n } else {\n var _isValid = validateAttributeString(attrStr, options);\n if (_isValid !== true) {\n //the result from the nested function returns the position of the error within the attribute\n //in order to get the 'true' error line, we need to calculate the position where the attribute begins (i - attrStr.length) and then add the position within the attribute\n //this gives us the absolute index in the entire xml, which we can use to find the line at last\n return getErrorObject(_isValid.err.code, _isValid.err.msg, getLineNumberForPosition(xmlData, i - attrStr.length + _isValid.err.line));\n }\n\n //if the root level has been reached before ...\n if (reachedRoot === true) {\n return getErrorObject('InvalidXml', 'Multiple possible root nodes found.', getLineNumberForPosition(xmlData, i));\n } else {\n tags.push(tagName);\n }\n tagFound = true;\n }\n\n //skip tag text value\n //It may include comments and CDATA value\n for (i++; i < xmlData.length; i++) {\n if (xmlData[i] === '<') {\n if (xmlData[i + 1] === '!') {\n //comment or CADATA\n i++;\n i = readCommentAndCDATA(xmlData, i);\n continue;\n } else {\n break;\n }\n } else if (xmlData[i] === '&') {\n var afterAmp = validateAmpersand(xmlData, i);\n if (afterAmp == -1) return getErrorObject('InvalidChar', \"char '&' is not expected.\", getLineNumberForPosition(xmlData, i));\n i = afterAmp;\n }\n } //end of reading tag text value\n if (xmlData[i] === '<') {\n i--;\n }\n }\n } else {\n if (xmlData[i] === ' ' || xmlData[i] === '\\t' || xmlData[i] === '\\n' || xmlData[i] === '\\r') {\n continue;\n }\n return getErrorObject('InvalidChar', \"char '\" + xmlData[i] + \"' is not expected.\", getLineNumberForPosition(xmlData, i));\n }\n }\n if (!tagFound) {\n return getErrorObject('InvalidXml', 'Start tag expected.', 1);\n } else if (tags.length > 0) {\n return getErrorObject('InvalidXml', \"Invalid '\" + JSON.stringify(tags, null, 4).replace(/\\r?\\n/g, '') + \"' found.\", 1);\n }\n return true;\n};\n\n/**\n * Read Processing insstructions and skip\n * @param {*} xmlData\n * @param {*} i\n */\nfunction readPI(xmlData, i) {\n var start = i;\n for (; i < xmlData.length; i++) {\n if (xmlData[i] == '?' || xmlData[i] == ' ') {\n //tagname\n var tagname = xmlData.substr(start, i - start);\n if (i > 5 && tagname === 'xml') {\n return getErrorObject('InvalidXml', 'XML declaration allowed only at the start of the document.', getLineNumberForPosition(xmlData, i));\n } else if (xmlData[i] == '?' && xmlData[i + 1] == '>') {\n //check if valid attribut string\n i++;\n break;\n } else {\n continue;\n }\n }\n }\n return i;\n}\nfunction readCommentAndCDATA(xmlData, i) {\n if (xmlData.length > i + 5 && xmlData[i + 1] === '-' && xmlData[i + 2] === '-') {\n //comment\n for (i += 3; i < xmlData.length; i++) {\n if (xmlData[i] === '-' && xmlData[i + 1] === '-' && xmlData[i + 2] === '>') {\n i += 2;\n break;\n }\n }\n } else if (xmlData.length > i + 8 && xmlData[i + 1] === 'D' && xmlData[i + 2] === 'O' && xmlData[i + 3] === 'C' && xmlData[i + 4] === 'T' && xmlData[i + 5] === 'Y' && xmlData[i + 6] === 'P' && xmlData[i + 7] === 'E') {\n var angleBracketsCount = 1;\n for (i += 8; i < xmlData.length; i++) {\n if (xmlData[i] === '<') {\n angleBracketsCount++;\n } else if (xmlData[i] === '>') {\n angleBracketsCount--;\n if (angleBracketsCount === 0) {\n break;\n }\n }\n }\n } else if (xmlData.length > i + 9 && xmlData[i + 1] === '[' && xmlData[i + 2] === 'C' && xmlData[i + 3] === 'D' && xmlData[i + 4] === 'A' && xmlData[i + 5] === 'T' && xmlData[i + 6] === 'A' && xmlData[i + 7] === '[') {\n for (i += 8; i < xmlData.length; i++) {\n if (xmlData[i] === ']' && xmlData[i + 1] === ']' && xmlData[i + 2] === '>') {\n i += 2;\n break;\n }\n }\n }\n return i;\n}\nvar doubleQuote = '\"';\nvar singleQuote = \"'\";\n\n/**\n * Keep reading xmlData until '<' is found outside the attribute value.\n * @param {string} xmlData\n * @param {number} i\n */\nfunction readAttributeStr(xmlData, i) {\n var attrStr = '';\n var startChar = '';\n var tagClosed = false;\n for (; i < xmlData.length; i++) {\n if (xmlData[i] === doubleQuote || xmlData[i] === singleQuote) {\n if (startChar === '') {\n startChar = xmlData[i];\n } else if (startChar !== xmlData[i]) {\n //if vaue is enclosed with double quote then single quotes are allowed inside the value and vice versa\n continue;\n } else {\n startChar = '';\n }\n } else if (xmlData[i] === '>') {\n if (startChar === '') {\n tagClosed = true;\n break;\n }\n }\n attrStr += xmlData[i];\n }\n if (startChar !== '') {\n return false;\n }\n return {\n value: attrStr,\n index: i,\n tagClosed: tagClosed\n };\n}\n\n/**\n * Select all the attributes whether valid or invalid.\n */\nvar validAttrStrRegxp = new RegExp('(\\\\s*)([^\\\\s=]+)(\\\\s*=)?(\\\\s*([\\'\"])(([\\\\s\\\\S])*?)\\\\5)?', 'g');\n\n//attr, =\"sd\", a=\"amit's\", a=\"sd\"b=\"saf\", ab cd=\"\"\n\nfunction validateAttributeString(attrStr, options) {\n //console.log(\"start:\"+attrStr+\":end\");\n\n //if(attrStr.trim().length === 0) return true; //empty string\n\n var matches = util.getAllMatches(attrStr, validAttrStrRegxp);\n var attrNames = {};\n for (var i = 0; i < matches.length; i++) {\n if (matches[i][1].length === 0) {\n //nospace before attribute name: a=\"sd\"b=\"saf\"\n return getErrorObject('InvalidAttr', \"Attribute '\" + matches[i][2] + \"' has no space in starting.\", getPositionFromMatch(attrStr, matches[i][0]));\n } else if (matches[i][3] === undefined && !options.allowBooleanAttributes) {\n //independent attribute: ab\n return getErrorObject('InvalidAttr', \"boolean attribute '\" + matches[i][2] + \"' is not allowed.\", getPositionFromMatch(attrStr, matches[i][0]));\n }\n /* else if(matches[i][6] === undefined){//attribute without value: ab=\n return { err: { code:\"InvalidAttr\",msg:\"attribute \" + matches[i][2] + \" has no value assigned.\"}};\n } */\n var attrName = matches[i][2];\n if (!validateAttrName(attrName)) {\n return getErrorObject('InvalidAttr', \"Attribute '\" + attrName + \"' is an invalid name.\", getPositionFromMatch(attrStr, matches[i][0]));\n }\n if (!attrNames.hasOwnProperty(attrName)) {\n //check for duplicate attribute.\n attrNames[attrName] = 1;\n } else {\n return getErrorObject('InvalidAttr', \"Attribute '\" + attrName + \"' is repeated.\", getPositionFromMatch(attrStr, matches[i][0]));\n }\n }\n return true;\n}\nfunction validateNumberAmpersand(xmlData, i) {\n var re = /\\d/;\n if (xmlData[i] === 'x') {\n i++;\n re = /[\\da-fA-F]/;\n }\n for (; i < xmlData.length; i++) {\n if (xmlData[i] === ';') return i;\n if (!xmlData[i].match(re)) break;\n }\n return -1;\n}\nfunction validateAmpersand(xmlData, i) {\n // https://www.w3.org/TR/xml/#dt-charref\n i++;\n if (xmlData[i] === ';') return -1;\n if (xmlData[i] === '#') {\n i++;\n return validateNumberAmpersand(xmlData, i);\n }\n var count = 0;\n for (; i < xmlData.length; i++, count++) {\n if (xmlData[i].match(/\\w/) && count < 20) continue;\n if (xmlData[i] === ';') break;\n return -1;\n }\n return i;\n}\nfunction getErrorObject(code, message, lineNumber) {\n return {\n err: {\n code: code,\n msg: message,\n line: lineNumber\n }\n };\n}\nfunction validateAttrName(attrName) {\n return util.isName(attrName);\n}\n\n// const startsWithXML = /^xml/i;\n\nfunction validateTagName(tagname) {\n return util.isName(tagname) /* && !tagname.match(startsWithXML) */;\n}\n\n//this function returns the line number for the character at the given index\nfunction getLineNumberForPosition(xmlData, index) {\n var lines = xmlData.substring(0, index).split(/\\r?\\n/);\n return lines.length;\n}\n\n//this function returns the position of the last character of match within attrStr\nfunction getPositionFromMatch(attrStr, match) {\n return attrStr.indexOf(match) + match.length;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vc3RhdGljL2Zhc3QteG1sLXBhcnNlci9zcmMvdmFsaWRhdG9yLmpzIl0sIm5hbWVzIjpbInV0aWwiLCJyZXF1aXJlIiwiZGVmYXVsdE9wdGlvbnMiLCJhbGxvd0Jvb2xlYW5BdHRyaWJ1dGVzIiwicHJvcHMiLCJleHBvcnRzIiwidmFsaWRhdGUiLCJ4bWxEYXRhIiwib3B0aW9ucyIsImJ1aWxkT3B0aW9ucyIsInRhZ3MiLCJ0YWdGb3VuZCIsInJlYWNoZWRSb290Iiwic3Vic3RyIiwiaSIsImxlbmd0aCIsInJlYWRQSSIsImVyciIsInJlYWRDb21tZW50QW5kQ0RBVEEiLCJjbG9zaW5nVGFnIiwidGFnTmFtZSIsInRyaW0iLCJzdWJzdHJpbmciLCJ2YWxpZGF0ZVRhZ05hbWUiLCJtc2ciLCJnZXRFcnJvck9iamVjdCIsImdldExpbmVOdW1iZXJGb3JQb3NpdGlvbiIsInJlc3VsdCIsInJlYWRBdHRyaWJ1dGVTdHIiLCJhdHRyU3RyIiwidmFsdWUiLCJpbmRleCIsImlzVmFsaWQiLCJ2YWxpZGF0ZUF0dHJpYnV0ZVN0cmluZyIsImNvZGUiLCJsaW5lIiwidGFnQ2xvc2VkIiwib3RnIiwicG9wIiwicHVzaCIsImFmdGVyQW1wIiwidmFsaWRhdGVBbXBlcnNhbmQiLCJKU09OIiwic3RyaW5naWZ5IiwicmVwbGFjZSIsInN0YXJ0IiwidGFnbmFtZSIsImFuZ2xlQnJhY2tldHNDb3VudCIsImRvdWJsZVF1b3RlIiwic2luZ2xlUXVvdGUiLCJzdGFydENoYXIiLCJ2YWxpZEF0dHJTdHJSZWd4cCIsIlJlZ0V4cCIsIm1hdGNoZXMiLCJnZXRBbGxNYXRjaGVzIiwiYXR0ck5hbWVzIiwiZ2V0UG9zaXRpb25Gcm9tTWF0Y2giLCJ1bmRlZmluZWQiLCJhdHRyTmFtZSIsInZhbGlkYXRlQXR0ck5hbWUiLCJoYXNPd25Qcm9wZXJ0eSIsInZhbGlkYXRlTnVtYmVyQW1wZXJzYW5kIiwicmUiLCJtYXRjaCIsImNvdW50IiwibWVzc2FnZSIsImxpbmVOdW1i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QUMsQ0FBQyxDQUFDaUQsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJQyxLQUFLLEdBQUcsRUFBRSxFQUN0QztJQUNGLElBQUl6RCxPQUFPLENBQUNPLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFDcEI7SUFDRixPQUFPLENBQUMsQ0FBQztFQUNYO0VBQ0EsT0FBT0EsQ0FBQztBQUNWO0FBRUEsU0FBU1csY0FBYyxDQUFDUyxJQUFJLEVBQUUrQixPQUFPLEVBQUVDLFVBQVUsRUFBRTtFQUNqRCxPQUFPO0lBQ0xqRCxHQUFHLEVBQUU7TUFDSGlCLElBQUksRUFBRUEsSUFBSTtNQUNWVixHQUFHLEVBQUV5QyxPQUFPO01BQ1o5QixJQUFJLEVBQUUrQjtJQUNSO0VBQ0YsQ0FBQztBQUNIO0FBRUEsU0FBU1AsZ0JBQWdCLENBQUNELFFBQVEsRUFBRTtFQUNsQyxPQUFPMUQsSUFBSSxDQUFDbUUsTUFBTSxDQUFDVCxRQUFRLENBQUM7QUFDOUI7O0FBRUE7O0FBRUEsU0FBU25DLGVBQWUsQ0FBQ3VCLE9BQU8sRUFBRTtFQUNoQyxPQUFPOUMsSUFBSSxDQUFDbUUsTUFBTSxDQUFDckIsT0FBTyxDQUFDLENBQUM7QUFDOUI7O0FBRUE7QUFDQSxTQUFTcEIsd0JBQXdCLENBQUNuQixPQUFPLEVBQUV3QixLQUFLLEVBQUU7RUFDaEQsSUFBSXFDLEtBQUssR0FBRzdELE9BQU8sQ0FBQ2UsU0FBUyxDQUFDLENBQUMsRUFBRVMsS0FBSyxDQUFDLENBQUNzQyxLQUFLLENBQUMsT0FBTyxDQUFDO0VBQ3RELE9BQU9ELEtBQUssQ0FBQ3JELE1BQU07QUFDckI7O0FBRUE7QUFDQSxTQUFTeUMsb0JBQW9CLENBQUMzQixPQUFPLEVBQUVrQyxLQUFLLEVBQUU7RUFDNUMsT0FBT2xDLE9BQU8sQ0FBQ3lDLE9BQU8sQ0FBQ1AsS0FBSyxDQUFDLEdBQUdBLEtBQUssQ0FBQ2hELE1BQU07QUFDOUMiLCJmaWxlIjoiMjAzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi91dGlsJyk7XG5cbmNvbnN0IGRlZmF1bHRPcHRpb25zID0ge1xuICBhbGxvd0Jvb2xlYW5BdHRyaWJ1dGVzOiBmYWxzZSwgLy9BIHRhZyBjYW4gaGF2ZSBhdHRyaWJ1dGVzIHdpdGhvdXQgYW55IHZhbHVlXG59O1xuXG5jb25zdCBwcm9wcyA9IFsnYWxsb3dCb29sZWFuQXR0cmlidXRlcyddO1xuXG4vL2NvbnN0IHRhZ3NQYXR0ZXJuID0gbmV3IFJlZ0V4cChcIjxcXFxcLz8oW1xcXFx3OlxcXFwtX1xcLl0rKVxcXFxzKlxcLz8+XCIsXCJnXCIpO1xuZXhwb3J0cy52YWxpZGF0ZSA9IGZ1bmN0aW9uICh4bWxEYXRhLCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSB1dGlsLmJ1aWxkT3B0aW9ucyhvcHRpb25zLCBkZWZhdWx0T3B0aW9ucywgcHJvcHMpO1xuXG4gIC8veG1sRGF0YSA9IHhtbERhdGEucmVwbGFjZSgvKFxcclxcbnxcXG58XFxyKS9nbSxcIlwiKTsvL21ha2UgaXQgc2luZ2xlIGxpbmVcbiAgLy94bWxEYXRhID0geG1sRGF0YS5yZXBsYWNlKC8oXlxccyo8XFw/eG1sLio/XFw/PikvZyxcIlwiKTsvL1JlbW92ZSBYTUwgc3RhcnRpbmcgdGFnXG4gIC8veG1sRGF0YSA9IHhtbERhdGEucmVwbGFjZSgvKDwhRE9DVFlQRVtcXHNcXHdcXFwiXFwuXFwvXFwtXFw6XSsoXFxbLipcXF0pKlxccyo+KS9nLFwiXCIpOy8vUmVtb3ZlIERPQ1RZUEVcbiAgY29uc3QgdGFncyA9IFtdO1xuICBsZXQgdGFnRm91bmQgPSBmYWxzZTtcblxuICAvL2luZGljYXRlcyB0aGF0IHRoZSByb290IHRhZyBoYXMgYmVlbiBjbG9zZWQgKGFrYS4gZGVwdGggMCBoYXMgYmVlbiByZWFjaGVkKVxuICBsZXQgcmVhY2hlZFJvb3QgPSBmYWxzZTtcblxuICBpZiAoeG1sRGF0YVswXSA9PT0gJ1xcdWZlZmYnKSB7XG4gICAgLy8gY2hlY2sgZm9yIGJ5dGUgb3JkZXIgbWFyayAoQk9NKVxuICAgIHhtbERhdGEgPSB4bWxEYXRhLnN1YnN0cigxKTtcbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgeG1sRGF0YS5sZW5ndGg7IGkrKykge1xuICAgIGlmICh4bWxEYXRhW2ldID09PSAnPCcpIHtcbiAgICAgIC8vc3RhcnRpbmcgb2YgdGFnXG4gICAgICAvL3JlYWQgdW50aWwgeW91IHJlYWNoIHRvICc+JyBhdm9pZGluZyBhbnkgJz4nIGluIGF0dHJpYnV0ZSB2YWx1ZVxuXG4gICAgICBpKys7XG4gICAgICBpZiAoeG1sRGF0YVtpXSA9PT0gJz8nKSB7XG4gICAgICAgIGkgPSByZWFkUEkoeG1sRGF0YSwgKytpKTtcbiAgICAgICAgaWYgKGkuZXJyKSB7XG4gICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoeG1sRGF0YVtpXSA9PT0gJyEnKSB7XG4gICAgICAgIGkgPSByZWFkQ29tbWVudEFuZENEQVRBKHhtbERhdGEsIGkpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBjbG9zaW5nVGFnID0gZmFsc2U7XG4gICAgICAgIGlmICh4bWxEYXRhW2ldID09PSAnLycpIHtcbiAgICAgICAgICAvL2Nsb3NpbmcgdGFnXG4gICAgICAgICAgY2xvc2luZ1RhZyA9IHRydWU7XG4gICAgICAgICAgaSsrO1xuICAgICAgICB9XG4gICAgICAgIC8vcmVhZCB0YWduYW1lXG4gICAgICAgIGxldCB0YWdOYW1lID0gJyc7XG4gICAgICAgIGZvciAoOyBpIDwgeG1sRGF0YS5sZW5ndGggJiZcbiAgICAgICAgICB4bWxEYXRhW2ldICE9PSAnPicgJiZcbiAgICAgICAgICB4bWxEYXRhW2ldICE9PSAnICcgJiZcbiAgICAgICAgICB4bWxEYXRhW2ldICE9PSAnXFx0JyAmJlxuICAgICAgICAgIHhtbERhdGFbaV0gIT09ICdcXG4nICYmXG4gICAgICAgICAgeG1sRGF0YVtpXSAhPT0gJ1xccic7IGkrK1xuICAgICAgICApIHtcbiAgICAgICAgICB0YWdOYW1lICs9IHhtbERhdGFbaV07XG4gICAgICAgIH1cbiAgICAgICAgdGFnTmFtZSA9IHRhZ05hbWUudHJpbSgpO1xuICAgICAgICAvL2NvbnNvbGUubG9nKHRhZ05hbWUpO1xuXG4gICAgICAgIGlmICh0YWdOYW1lW3RhZ05hbWUubGVuZ3RoIC0gMV0gPT09ICcvJykge1xuICAgICAgICAgIC8vc2VsZiBjbG9zaW5nIHRhZyB3aXRob3V0IGF0dHJpYnV0ZXNcbiAgICAgICAgICB0YWdOYW1lID0gdGFnTmFtZS5zdWJzdHJpbmcoMCwgdGFnTmFtZS5sZW5ndGggLSAxKTtcbiAgICAgICAgICAvL2NvbnRpbnVlO1xuICAgICAgICAgIGktLTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXZhbGlkYXRlVGFnTmFtZSh0YWdOYW1lKSkge1xuICAgICAgICAgIGxldCBtc2c7XG4gICAgICAgICAgaWYgKHRhZ05hbWUudHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgbXNnID0gXCJUaGVyZSBpcyBhbiB1bm5lY2Vzc2FyeSBzcGFjZSBiZXR3ZWVuIHRhZyBuYW1lIGFuZCBiYWNrd2FyZCBzbGFzaCAnPC8gLi4nLlwiO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtc2cgPSBcIlRhZyAnXCIrdGFnTmFtZStcIicgaXMgYW4gaW52YWxpZCBuYW1lLlwiO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZ2V0RXJyb3JPYmplY3QoJ0ludmFsaWRUYWcnLCBtc2csIGdldExpbmVOdW1iZXJGb3JQb3NpdGlvbih4bWxEYXRhLCBpKSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXN1bHQgPSByZWFkQXR0cmlidXRlU3RyKHhtbERhdGEsIGkpO1xuICAgICAgICBpZiAocmVzdWx0ID09PSBmYWxzZSkge1xuICAgICAgICAgIHJldHVybiBnZXRFcnJvck9iamVjdCgnSW52YWxpZEF0dHInLCBcIkF0dHJpYnV0ZXMgZm9yICdcIit0YWdOYW1lK1wiJyBoYXZlIG9wZW4gcXVvdGUuXCIsIGdldExpbmVOdW1iZXJGb3JQb3NpdGlvbih4bWxEYXRhLCBpKSk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGF0dHJTdHIgPSByZXN1bHQudmFsdWU7XG4gICAgICAgIGkgPSByZXN1bHQuaW5kZXg7XG5cbiAgICAgICAgaWYgKGF0dHJTdHJbYXR0clN0ci5sZW5ndGggLSAxXSA9PT0gJy8nKSB7XG4gICAgICAgICAgLy9zZWxmIGNsb3NpbmcgdGFnXG4gICAgICAgICAgYXR0clN0ciA9IGF0dHJTdHIuc3Vic3RyaW5nKDAsIGF0dHJTdHIubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgY29uc3QgaXNWYWxpZCA9IHZhbGlkYXRlQXR0cmlidXRlU3RyaW5nKGF0dHJTdHIsIG9wdGlvbnMpO1xuICAgICAgICAgIGlmIChpc1ZhbGlkID09PSB0cnVlKSB7XG4gICAgICAgICAgICB0YWdGb3VuZCA9IHRydWU7XG4gICAgICAgICAgICAvL2NvbnRpbnVlOyAvL3RleHQgbWF5IHByZXNlbnRzIGFmdGVyIHNlbGYgY2xvc2luZyB0YWdcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy90aGUgcmVzdWx0IGZyb20gdGhlIG5lc3RlZCBmdW5jdGlvbiByZXR1cm5zIHRoZSBwb3NpdGlvbiBvZiB0aGUgZXJyb3Igd2l0aGluIHRoZSBhdHRyaWJ1dGVcbiAgICAgICAgICAgIC8vaW4gb3JkZXIgdG8gZ2V0IHRoZSAndHJ1ZScgZXJyb3IgbGluZSwgd2UgbmVlZCB0byBjYWxjdWxhdGUgdGhlIHBvc2l0aW9uIHdoZXJlIHRoZSBhdHRyaWJ1dGUgYmVnaW5zIChpIC0gYXR0clN0ci5sZW5ndGgpIGFuZCB0aGVuIGFkZCB0aGUgcG9zaXRpb24gd2l0aGluIHRoZSBhdHRyaWJ1dGVcbiAgICAgICAgICAgIC8vdGhpcyBnaXZlcyB1cyB0aGUgYWJzb2x1dGUgaW5kZXggaW4gdGhlIGVudGlyZSB4bWwsIHdoaWNoIHdlIGNhbiB1c2UgdG8gZmluZCB0aGUgbGluZSBhdCBsYXN0XG4gICAgICAgICAgICByZXR1cm4gZ2V0RXJyb3JPYmplY3QoaXNWYWxpZC5lcnIuY29kZSwgaXNWYWxpZC5lcnIubXNnLCBnZXRMaW5lTnVtYmVyRm9yUG9zaXRpb24oeG1sRGF0YSwgaSAtIGF0dHJTdHIubGVuZ3RoICsgaXNWYWxpZC5lcnIubGluZSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChjbG9zaW5nVGFnKSB7XG4gICAgICAgICAgaWYgKCFyZXN1bHQudGFnQ2xvc2VkKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0RXJyb3JPYmplY3QoJ0ludmFsaWRUYWcnLCBcIkNsb3NpbmcgdGFnICdcIit0YWdOYW1lK1wiJyBkb2Vzbid0IGhhdmUgcHJvcGVyIGNsb3NpbmcuXCIsIGdldExpbmVOdW1iZXJGb3JQb3NpdGlvbih4bWxEYXRhLCBpKSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChhdHRyU3RyLnRyaW0oKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0RXJyb3JPYmplY3QoJ0ludmFsaWRUYWcnLCBcIkNsb3NpbmcgdGFnICdcIit0YWdOYW1lK1wiJyBjYW4ndCBoYXZlIGF0dHJpYnV0ZXMgb3IgaW52YWxpZCBzdGFydGluZy5cIiwgZ2V0TGluZU51bWJlckZvclBvc2l0aW9uKHhtbERhdGEsIGkpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qgb3RnID0gdGFncy5wb3AoKTtcbiAgICAgICAgICAgIGlmICh0YWdOYW1lICE9PSBvdGcpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGdldEVycm9yT2JqZWN0KCdJbnZhbGlkVGFnJywgXCJDbG9zaW5nIHRhZyAnXCIrb3RnK1wiJyBpcyBleHBlY3RlZCBpbnBsYWNlIG9mICdcIit0YWdOYW1lK1wiJy5cIiwgZ2V0TGluZU51bWJlckZvclBvc2l0aW9uKHhtbERhdGEsIGkpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy93aGVuIHRoZXJlIGFyZSBubyBtb3JlIHRhZ3MsIHdlIHJlYWNoZWQgdGhlIHJvb3QgbGV2ZWwuXG4gICAgICAgICAgICBpZiAodGFncy5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgICByZWFjaGVkUm9vdCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGlzVmFsaWQgPSB2YWxpZGF0ZUF0dHJpYnV0ZVN0cmluZyhhdHRyU3RyLCBvcHRpb25zKTtcbiAgICAgICAgICBpZiAoaXNWYWxpZCAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgLy90aGUgcmVzdWx0IGZyb20gdGhlIG5lc3RlZCBmdW5jdGlvbiByZXR1cm5zIHRoZSBwb3NpdGlvbiBvZiB0aGUgZXJyb3Igd2l0aGluIHRoZSBhdHRyaWJ1dGVcbiAgICAgICAgICAgIC8vaW4gb3JkZXIgdG8gZ2V0IHRoZSAndHJ1ZScgZXJyb3IgbGluZSwgd2UgbmVlZCB0byBjYWxjdWxhdGUgdGhlIHBvc2l0aW9uIHdoZXJlIHRoZSBhdHRyaWJ1dGUgYmVnaW5zIChpIC0gYXR0clN0ci5sZW5ndGgpIGFuZCB0aGVuIGFkZCB0aGUgcG9zaXRpb24gd2l0aGluIHRoZSBhdHRyaWJ1dGVcbiAgICAgICAgICAgIC8vdGhpcyBnaXZlcyB1cyB0aGUgYWJzb2x1dGUgaW5kZXggaW4gdGhlIGVudGlyZSB4bWwsIHdoaWNoIHdlIGNhbiB1c2UgdG8gZmluZCB0aGUgbGluZSBhdCBsYXN0XG4gICAgICAgICAgICByZXR1cm4gZ2V0RXJyb3JPYmplY3QoaXNWYWxpZC5lcnIuY29kZSwgaXNWYWxpZC5lcnIubXNnLCBnZXRMaW5lTnVtYmVyRm9yUG9zaXRpb24oeG1sRGF0YSwgaSAtIGF0dHJTdHIubGVuZ3RoICsgaXNWYWxpZC5lcnIubGluZSkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vaWYgdGhlIHJvb3QgbGV2ZWwgaGFzIGJlZW4gcmVhY2hlZCBiZWZvcmUgLi4uXG4gICAgICAgICAgaWYgKHJlYWNoZWRSb290ID09PSB0cnVlKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0RXJyb3JPYmplY3QoJ0ludmFsaWRYbWwnLCAnTXVsdGlwbGUgcG9zc2libGUgcm9vdCBub2RlcyBmb3VuZC4nLCBnZXRMaW5lTnVtYmVyRm9yUG9zaXRpb24oeG1sRGF0YSwgaSkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0YWdzLnB1c2godGFnTmFtZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRhZ0ZvdW5kID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vc2tpcCB0YWcgdGV4dCB2YWx1ZVxuICAgICAgICAvL0l0IG1heSBpbmNsdWRlIGNvbW1lbnRzIGFuZCBDREFUQSB2YWx1ZVxuICAgICAgICBmb3IgKGkrKzsgaSA8IHhtbERhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAoeG1sRGF0YVtpXSA9PT0gJzwnKSB7XG4gICAgICAgICAgICBpZiAoeG1sRGF0YVtpICsgMV0gPT09ICchJykge1xuICAgICAgICAgICAgICAvL2NvbW1lbnQgb3IgQ0FEQVRBXG4gICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgaSA9IHJlYWRDb21tZW50QW5kQ0RBVEEoeG1sRGF0YSwgaSk7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmICh4bWxEYXRhW2ldID09PSAnJicpIHtcbiAgICAgICAgICAgIGNvbnN0IGFmdGVyQW1wID0gdmFsaWRhdGVBbXBlcnNhbmQoeG1sRGF0YSwgaSk7XG4gICAgICAgICAgICBpZiAoYWZ0ZXJBbXAgPT0gLTEpXG4gICAgICAgICAgICAgIHJldHVybiBnZXRFcnJvck9iamVjdCgnSW52YWxpZENoYXInLCBcImNoYXIgJyYnIGlzIG5vdCBleHBlY3RlZC5cIiwgZ2V0TGluZU51bWJlckZvclBvc2l0aW9uKHhtbERhdGEsIGkpKTtcbiAgICAgICAgICAgIGkgPSBhZnRlckFtcDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gLy9lbmQgb2YgcmVhZGluZyB0YWcgdGV4dCB2YWx1ZVxuICAgICAgICBpZiAoeG1sRGF0YVtpXSA9PT0gJzwnKSB7XG4gICAgICAgICAgaS0tO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh4bWxEYXRhW2ldID09PSAnICcgfHwgeG1sRGF0YVtpXSA9PT0gJ1xcdCcgfHwgeG1sRGF0YVtpXSA9PT0gJ1xcbicgfHwgeG1sRGF0YVtpXSA9PT0gJ1xccicpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gZ2V0RXJyb3JPYmplY3QoJ0ludmFsaWRDaGFyJywgXCJjaGFyICdcIit4bWxEYXRhW2ldK1wiJyBpcyBub3QgZXhwZWN0ZWQuXCIsIGdldExpbmVOdW1iZXJGb3JQb3NpdGlvbih4bWxEYXRhLCBpKSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKCF0YWdGb3VuZCkge1xuICAgIHJldHVybiBnZXRFcnJvck9iamVjdCgnSW52YWxpZFhtbCcsICdTdGFydCB0YWcgZXhwZWN0ZWQuJywgMSk7XG4gIH0gZWxzZSBpZiAodGFncy5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIGdldEVycm9yT2JqZWN0KCdJbnZhbGlkWG1sJywgXCJJbnZhbGlkICdcIitKU09OLnN0cmluZ2lmeSh0YWdzLCBudWxsLCA0KS5yZXBsYWNlKC9cXHI/XFxuL2csICcnKStcIicgZm91bmQuXCIsIDEpO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG4vKipcbiAqIFJlYWQgUHJvY2Vzc2luZyBpbnNzdHJ1Y3Rpb25zIGFuZCBza2lwXG4gKiBAcGFyYW0geyp9IHhtbERhdGFcbiAqIEBwYXJhbSB7Kn0gaVxuICovXG5mdW5jdGlvbiByZWFkUEkoeG1sRGF0YSwgaSkge1xuICB2YXIgc3RhcnQgPSBpO1xuICBmb3IgKDsgaSA8IHhtbERhdGEubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoeG1sRGF0YVtpXSA9PSAnPycgfHwgeG1sRGF0YVtpXSA9PSAnICcpIHtcbiAgICAgIC8vdGFnbmFtZVxuICAgICAgdmFyIHRhZ25hbWUgPSB4bWxEYXRhLnN1YnN0cihzdGFydCwgaSAtIHN0YXJ0KTtcbiAgICAgIGlmIChpID4gNSAmJiB0YWduYW1lID09PSAneG1sJykge1xuICAgICAgICByZXR1cm4gZ2V0RXJyb3JPYmplY3QoJ0ludmFsaWRYbWwnLCAnWE1MIGRlY2xhcmF0aW9uIGFsbG93ZWQgb25seSBhdCB0aGUgc3RhcnQgb2YgdGhlIGRvY3VtZW50LicsIGdldExpbmVOdW1iZXJGb3JQb3NpdGlvbih4bWxEYXRhLCBpKSk7XG4gICAgICB9IGVsc2UgaWYgKHhtbERhdGFbaV0gPT0gJz8nICYmIHhtbERhdGFbaSArIDFdID09ICc+Jykge1xuICAgICAgICAvL2NoZWNrIGlmIHZhbGlkIGF0dHJpYnV0IHN0cmluZ1xuICAgICAgICBpKys7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBpO1xufVxuXG5mdW5jdGlvbiByZWFkQ29tbWVudEFuZENEQVRBKHhtbERhdGEsIGkpIHtcbiAgaWYgKHhtbERhdGEubGVuZ3RoID4gaSArIDUgJiYgeG1sRGF0YVtpICsgMV0gPT09ICctJyAmJiB4bWxEYXRhW2kgKyAyXSA9PT0gJy0nKSB7XG4gICAgLy9jb21tZW50XG4gICAgZm9yIChpICs9IDM7IGkgPCB4bWxEYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoeG1sRGF0YVtpXSA9PT0gJy0nICYmIHhtbERhdGFbaSArIDFdID09PSAnLScgJiYgeG1sRGF0YVtpICsgMl0gPT09ICc+Jykge1xuICAgICAgICBpICs9IDI7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmIChcbiAgICB4bWxEYXRhLmxlbmd0aCA+IGkgKyA4ICYmXG4gICAgeG1sRGF0YVtpICsgMV0gPT09ICdEJyAmJlxuICAgIHhtbERhdGFbaSArIDJdID09PSAnTycgJiZcbiAgICB4bWxEYXRhW2kgKyAzXSA9PT0gJ0MnICYmXG4gICAgeG1sRGF0YVtpICsgNF0gPT09ICdUJyAmJlxuICAgIHhtbERhdGFbaSArIDVdID09PSAnWScgJiZcbiAgICB4bWxEYXRhW2kgKyA2XSA9PT0gJ1AnICYmXG4gICAgeG1sRGF0YVtpICsgN10gPT09ICdFJ1xuICApIHtcbiAgICBsZXQgYW5nbGVCcmFja2V0c0NvdW50ID0gMTtcbiAgICBmb3IgKGkgKz0gODsgaSA8IHhtbERhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh4bWxEYXRhW2ldID09PSAnPCcpIHtcbiAgICAgICAgYW5nbGVCcmFja2V0c0NvdW50Kys7XG4gICAgICB9IGVsc2UgaWYgKHhtbERhdGFbaV0gPT09ICc+Jykge1xuICAgICAgICBhbmdsZUJyYWNrZXRzQ291bnQtLTtcbiAgICAgICAgaWYgKGFuZ2xlQnJhY2tldHNDb3VudCA9PT0gMCkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2UgaWYgKFxuICAgIHhtbERhdGEubGVuZ3RoID4gaSArIDkgJiZcbiAgICB4bWxEYXRhW2kgKyAxXSA9PT0gJ1snICYmXG4gICAgeG1sRGF0YVtpICsgMl0gPT09ICdDJyAmJlxuICAgIHhtbERhdGFbaSArIDNdID09PSAnRCcgJiZcbiAgICB4bWxEYXRhW2kgKyA0XSA9PT0gJ0EnICYmXG4gICAgeG1sRGF0YVtpICsgNV0gPT09ICdUJyAmJlxuICAgIHhtbERhdGFbaSArIDZdID09PSAnQScgJiZcbiAgICB4bWxEYXRhW2kgKyA3XSA9PT0gJ1snXG4gICkge1xuICAgIGZvciAoaSArPSA4OyBpIDwgeG1sRGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHhtbERhdGFbaV0gPT09ICddJyAmJiB4bWxEYXRhW2kgKyAxXSA9PT0gJ10nICYmIHhtbERhdGFbaSArIDJdID09PSAnPicpIHtcbiAgICAgICAgaSArPSAyO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gaTtcbn1cblxudmFyIGRvdWJsZVF1b3RlID0gJ1wiJztcbnZhciBzaW5nbGVRdW90ZSA9IFwiJ1wiO1xuXG4vKipcbiAqIEtlZXAgcmVhZGluZyB4bWxEYXRhIHVudGlsICc8JyBpcyBmb3VuZCBvdXRzaWRlIHRoZSBhdHRyaWJ1dGUgdmFsdWUuXG4gKiBAcGFyYW0ge3N0cmluZ30geG1sRGF0YVxuICogQHBhcmFtIHtudW1iZXJ9IGlcbiAqL1xuZnVuY3Rpb24gcmVhZEF0dHJpYnV0ZVN0cih4bWxEYXRhLCBpKSB7XG4gIGxldCBhdHRyU3RyID0gJyc7XG4gIGxldCBzdGFydENoYXIgPSAnJztcbiAgbGV0IHRhZ0Nsb3NlZCA9IGZhbHNlO1xuICBmb3IgKDsgaSA8IHhtbERhdGEubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoeG1sRGF0YVtpXSA9PT0gZG91YmxlUXVvdGUgfHwgeG1sRGF0YVtpXSA9PT0gc2luZ2xlUXVvdGUpIHtcbiAgICAgIGlmIChzdGFydENoYXIgPT09ICcnKSB7XG4gICAgICAgIHN0YXJ0Q2hhciA9IHhtbERhdGFbaV07XG4gICAgICB9IGVsc2UgaWYgKHN0YXJ0Q2hhciAhPT0geG1sRGF0YVtpXSkge1xuICAgICAgICAvL2lmIHZhdWUgaXMgZW5jbG9zZWQgd2l0aCBkb3VibGUgcXVvdGUgdGhlbiBzaW5nbGUgcXVvdGVzIGFyZSBhbGxvd2VkIGluc2lkZSB0aGUgdmFsdWUgYW5kIHZpY2UgdmVyc2FcbiAgICAgICAgY29udGludWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGFydENoYXIgPSAnJztcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHhtbERhdGFbaV0gPT09ICc+Jykge1xuICAgICAgaWYgKHN0YXJ0Q2hhciA9PT0gJycpIHtcbiAgICAgICAgdGFnQ2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIGF0dHJTdHIgKz0geG1sRGF0YVtpXTtcbiAgfVxuICBpZiAoc3RhcnRDaGFyICE9PSAnJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdmFsdWU6IGF0dHJTdHIsXG4gICAgaW5kZXg6IGksXG4gICAgdGFnQ2xvc2VkOiB0YWdDbG9zZWRcbiAgfTtcbn1cblxuLyoqXG4gKiBTZWxlY3QgYWxsIHRoZSBhdHRyaWJ1dGVzIHdoZXRoZXIgdmFsaWQgb3IgaW52YWxpZC5cbiAqL1xuY29uc3QgdmFsaWRBdHRyU3RyUmVneHAgPSBuZXcgUmVnRXhwKCcoXFxcXHMqKShbXlxcXFxzPV0rKShcXFxccyo9KT8oXFxcXHMqKFtcXCdcIl0pKChbXFxcXHNcXFxcU10pKj8pXFxcXDUpPycsICdnJyk7XG5cbi8vYXR0ciwgPVwic2RcIiwgYT1cImFtaXQnc1wiLCBhPVwic2RcImI9XCJzYWZcIiwgYWIgIGNkPVwiXCJcblxuZnVuY3Rpb24gdmFsaWRhdGVBdHRyaWJ1dGVTdHJpbmcoYXR0clN0ciwgb3B0aW9ucykge1xuICAvL2NvbnNvbGUubG9nKFwic3RhcnQ6XCIrYXR0clN0citcIjplbmRcIik7XG5cbiAgLy9pZihhdHRyU3RyLnRyaW0oKS5sZW5ndGggPT09IDApIHJldHVybiB0cnVlOyAvL2VtcHR5IHN0cmluZ1xuXG4gIGNvbnN0IG1hdGNoZXMgPSB1dGlsLmdldEFsbE1hdGNoZXMoYXR0clN0ciwgdmFsaWRBdHRyU3RyUmVneHApO1xuICBjb25zdCBhdHRyTmFtZXMgPSB7fTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IG1hdGNoZXMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAobWF0Y2hlc1tpXVsxXS5sZW5ndGggPT09IDApIHtcbiAgICAgIC8vbm9zcGFjZSBiZWZvcmUgYXR0cmlidXRlIG5hbWU6IGE9XCJzZFwiYj1cInNhZlwiXG4gICAgICByZXR1cm4gZ2V0RXJyb3JPYmplY3QoJ0ludmFsaWRBdHRyJywgXCJBdHRyaWJ1dGUgJ1wiK21hdGNoZXNbaV1bMl0rXCInIGhhcyBubyBzcGFjZSBpbiBzdGFydGluZy5cIiwgZ2V0UG9zaXRpb25Gcm9tTWF0Y2goYXR0clN0ciwgbWF0Y2hlc1tpXVswXSkpXG4gICAgfSBlbHNlIGlmIChtYXRjaGVzW2ldWzNdID09PSB1bmRlZmluZWQgJiYgIW9wdGlvbnMuYWxsb3dCb29sZWFuQXR0cmlidXRlcykge1xuICAgICAgLy9pbmRlcGVuZGVudCBhdHRyaWJ1dGU6IGFiXG4gICAgICByZXR1cm4gZ2V0RXJyb3JPYmplY3QoJ0ludmFsaWRBdHRyJywgXCJib29sZWFuIGF0dHJpYnV0ZSAnXCIrbWF0Y2hlc1tpXVsyXStcIicgaXMgbm90IGFsbG93ZWQuXCIsIGdldFBvc2l0aW9uRnJvbU1hdGNoKGF0dHJTdHIsIG1hdGNoZXNbaV1bMF0pKTtcbiAgICB9XG4gICAgLyogZWxzZSBpZihtYXRjaGVzW2ldWzZdID09PSB1bmRlZmluZWQpey8vYXR0cmlidXRlIHdpdGhvdXQgdmFsdWU6IGFiPVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBlcnI6IHsgY29kZTpcIkludmFsaWRBdHRyXCIsbXNnOlwiYXR0cmlidXRlIFwiICsgbWF0Y2hlc1tpXVsyXSArIFwiIGhhcyBubyB2YWx1ZSBhc3NpZ25lZC5cIn19O1xuICAgICAgICAgICAgICAgIH0gKi9cbiAgICBjb25zdCBhdHRyTmFtZSA9IG1hdGNoZXNbaV1bMl07XG4gICAgaWYgKCF2YWxpZGF0ZUF0dHJOYW1lKGF0dHJOYW1lKSkge1xuICAgICAgcmV0dXJuIGdldEVycm9yT2JqZWN0KCdJbnZhbGlkQXR0cicsIFwiQXR0cmlidXRlICdcIithdHRyTmFtZStcIicgaXMgYW4gaW52YWxpZCBuYW1lLlwiLCBnZXRQb3NpdGlvbkZyb21NYXRjaChhdHRyU3RyLCBtYXRjaGVzW2ldWzBdKSk7XG4gICAgfVxuICAgIGlmICghYXR0ck5hbWVzLmhhc093blByb3BlcnR5KGF0dHJOYW1lKSkge1xuICAgICAgLy9jaGVjayBmb3IgZHVwbGljYXRlIGF0dHJpYnV0ZS5cbiAgICAgIGF0dHJOYW1lc1thdHRyTmFtZV0gPSAxO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZ2V0RXJyb3JPYmplY3QoJ0ludmFsaWRBdHRyJywgXCJBdHRyaWJ1dGUgJ1wiK2F0dHJOYW1lK1wiJyBpcyByZXBlYXRlZC5cIiwgZ2V0UG9zaXRpb25Gcm9tTWF0Y2goYXR0clN0ciwgbWF0Y2hlc1tpXVswXSkpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZU51bWJlckFtcGVyc2FuZCh4bWxEYXRhLCBpKSB7XG4gIGxldCByZSA9IC9cXGQvO1xuICBpZiAoeG1sRGF0YVtpXSA9PT0gJ3gnKSB7XG4gICAgaSsrO1xuICAgIHJlID0gL1tcXGRhLWZBLUZdLztcbiAgfVxuICBmb3IgKDsgaSA8IHhtbERhdGEubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoeG1sRGF0YVtpXSA9PT0gJzsnKVxuICAgICAgcmV0dXJuIGk7XG4gICAgaWYgKCF4bWxEYXRhW2ldLm1hdGNoKHJlKSlcbiAgICAgIGJyZWFrO1xuICB9XG4gIHJldHVybiAtMTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVBbXBlcnNhbmQoeG1sRGF0YSwgaSkge1xuICAvLyBodHRwczovL3d3dy53My5vcmcvVFIveG1sLyNkdC1jaGFycmVmXG4gIGkrKztcbiAgaWYgKHhtbERhdGFbaV0gPT09ICc7JylcbiAgICByZXR1cm4gLTE7XG4gIGlmICh4bWxEYXRhW2ldID09PSAnIycpIHtcbiAgICBpKys7XG4gICAgcmV0dXJuIHZhbGlkYXRlTnVtYmVyQW1wZXJzYW5kKHhtbERhdGEsIGkpO1xuICB9XG4gIGxldCBjb3VudCA9IDA7XG4gIGZvciAoOyBpIDwgeG1sRGF0YS5sZW5ndGg7IGkrKywgY291bnQrKykge1xuICAgIGlmICh4bWxEYXRhW2ldLm1hdGNoKC9cXHcvKSAmJiBjb3VudCA8IDIwKVxuICAgICAgY29udGludWU7XG4gICAgaWYgKHhtbERhdGFbaV0gPT09ICc7JylcbiAgICAgIGJyZWFrO1xuICAgIHJldHVybiAtMTtcbiAgfVxuICByZXR1cm4gaTtcbn1cblxuZnVuY3Rpb24gZ2V0RXJyb3JPYmplY3QoY29kZSwgbWVzc2FnZSwgbGluZU51bWJlcikge1xuICByZXR1cm4ge1xuICAgIGVycjoge1xuICAgICAgY29kZTogY29kZSxcbiAgICAgIG1zZzogbWVzc2FnZSxcbiAgICAgIGxpbmU6IGxpbmVOdW1iZXIsXG4gICAgfSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVBdHRyTmFtZShhdHRyTmFtZSkge1xuICByZXR1cm4gdXRpbC5pc05hbWUoYXR0ck5hbWUpO1xufVxuXG4vLyBjb25zdCBzdGFydHNXaXRoWE1MID0gL154bWwvaTtcblxuZnVuY3Rpb24gdmFsaWRhdGVUYWdOYW1lKHRhZ25hbWUpIHtcbiAgcmV0dXJuIHV0aWwuaXNOYW1lKHRhZ25hbWUpIC8qICYmICF0YWduYW1lLm1hdGNoKHN0YXJ0c1dpdGhYTUwpICovO1xufVxuXG4vL3RoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgbGluZSBudW1iZXIgZm9yIHRoZSBjaGFyYWN0ZXIgYXQgdGhlIGdpdmVuIGluZGV4XG5mdW5jdGlvbiBnZXRMaW5lTnVtYmVyRm9yUG9zaXRpb24oeG1sRGF0YSwgaW5kZXgpIHtcbiAgdmFyIGxpbmVzID0geG1sRGF0YS5zdWJzdHJpbmcoMCwgaW5kZXgpLnNwbGl0KC9cXHI/XFxuLyk7XG4gIHJldHVybiBsaW5lcy5sZW5ndGg7XG59XG5cbi8vdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBwb3NpdGlvbiBvZiB0aGUgbGFzdCBjaGFyYWN0ZXIgb2YgbWF0Y2ggd2l0aGluIGF0dHJTdHJcbmZ1bmN0aW9uIGdldFBvc2l0aW9uRnJvbU1hdGNoKGF0dHJTdHIsIG1hdGNoKSB7XG4gIHJldHVybiBhdHRyU3RyLmluZGV4T2YobWF0Y2gpICsgbWF0Y2gubGVuZ3RoO1xufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///203\n"); /***/ }), -/* 196 */ +/* 204 */ /*!*****************************************************************!*\ !*** D:/里海数字乡村/xunfeiAi/static/fast-xml-parser/src/nimndata.js ***! \*****************************************************************/ @@ -25001,10 +25190,10 @@ eval("\n\nvar util = __webpack_require__(/*! ./util */ 192);\nvar defaultOptions /***/ (function(module, exports, __webpack_require__) { "use strict"; -eval("\n\nvar char = function char(a) {\n return String.fromCharCode(a);\n};\nvar chars = {\n nilChar: char(176),\n missingChar: char(201),\n nilPremitive: char(175),\n missingPremitive: char(200),\n emptyChar: char(178),\n emptyValue: char(177),\n //empty Premitive\n\n boundryChar: char(179),\n objStart: char(198),\n arrStart: char(204),\n arrayEnd: char(185)\n};\nvar charsArr = [chars.nilChar, chars.nilPremitive, chars.missingChar, chars.missingPremitive, chars.boundryChar, chars.emptyChar, chars.emptyValue, chars.arrayEnd, chars.objStart, chars.arrStart];\nvar _e = function _e(node, e_schema, options) {\n if (typeof e_schema === 'string') {\n //premitive\n if (node && node[0] && node[0].val !== undefined) {\n return getValue(node[0].val, e_schema);\n } else {\n return getValue(node, e_schema);\n }\n } else {\n var hasValidData = hasData(node);\n if (hasValidData === true) {\n var str = '';\n if (Array.isArray(e_schema)) {\n //attributes can't be repeated. hence check in children tags only\n str += chars.arrStart;\n var itemSchema = e_schema[0];\n //var itemSchemaType = itemSchema;\n var arr_len = node.length;\n if (typeof itemSchema === 'string') {\n for (var arr_i = 0; arr_i < arr_len; arr_i++) {\n var r = getValue(node[arr_i].val, itemSchema);\n str = processValue(str, r);\n }\n } else {\n for (var _arr_i = 0; _arr_i < arr_len; _arr_i++) {\n var _r = _e(node[_arr_i], itemSchema, options);\n str = processValue(str, _r);\n }\n }\n str += chars.arrayEnd; //indicates that next item is not array item\n } else {\n //object\n str += chars.objStart;\n var keys = Object.keys(e_schema);\n if (Array.isArray(node)) {\n node = node[0];\n }\n for (var i in keys) {\n var key = keys[i];\n //a property defined in schema can be present either in attrsMap or children tags\n //options.textNodeName will not present in both maps, take it's value from val\n //options.attrNodeName will be present in attrsMap\n var _r2 = void 0;\n if (!options.ignoreAttributes && node.attrsMap && node.attrsMap[key]) {\n _r2 = _e(node.attrsMap[key], e_schema[key], options);\n } else if (key === options.textNodeName) {\n _r2 = _e(node.val, e_schema[key], options);\n } else {\n _r2 = _e(node.child[key], e_schema[key], options);\n }\n str = processValue(str, _r2);\n }\n }\n return str;\n } else {\n return hasValidData;\n }\n }\n};\nvar getValue = function getValue(a /*, type*/) {\n switch (a) {\n case undefined:\n return chars.missingPremitive;\n case null:\n return chars.nilPremitive;\n case '':\n return chars.emptyValue;\n default:\n return a;\n }\n};\nvar processValue = function processValue(str, r) {\n if (!isAppChar(r[0]) && !isAppChar(str[str.length - 1])) {\n str += chars.boundryChar;\n }\n return str + r;\n};\nvar isAppChar = function isAppChar(ch) {\n return charsArr.indexOf(ch) !== -1;\n};\nfunction hasData(jObj) {\n if (jObj === undefined) {\n return chars.missingChar;\n } else if (jObj === null) {\n return chars.nilChar;\n } else if (jObj.child && Object.keys(jObj.child).length === 0 && (!jObj.attrsMap || Object.keys(jObj.attrsMap).length === 0)) {\n return chars.emptyChar;\n } else {\n return true;\n }\n}\nvar x2j = __webpack_require__(/*! ./xmlstr2xmlnode */ 193);\nvar buildOptions = __webpack_require__(/*! ./util */ 192).buildOptions;\nvar convert2nimn = function convert2nimn(node, e_schema, options) {\n options = buildOptions(options, x2j.defaultOptions, x2j.props);\n return _e(node, e_schema, options);\n};\nexports.convert2nimn = convert2nimn;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vc3RhdGljL2Zhc3QteG1sLXBhcnNlci9zcmMvbmltbmRhdGEuanMiXSwibmFtZXMiOlsiY2hhciIsImEiLCJTdHJpbmciLCJmcm9tQ2hhckNvZGUiLCJjaGFycyIsIm5pbENoYXIiLCJtaXNzaW5nQ2hhciIsIm5pbFByZW1pdGl2ZSIsIm1pc3NpbmdQcmVtaXRpdmUiLCJlbXB0eUNoYXIiLCJlbXB0eVZhbHVlIiwiYm91bmRyeUNoYXIiLCJvYmpTdGFydCIsImFyclN0YXJ0IiwiYXJyYXlFbmQiLCJjaGFyc0FyciIsIl9lIiwibm9kZSIsImVfc2NoZW1hIiwib3B0aW9ucyIsInZhbCIsInVuZGVmaW5lZCIsImdldFZhbHVlIiwiaGFzVmFsaWREYXRhIiwiaGFzRGF0YSIsInN0ciIsIkFycmF5IiwiaXNBcnJheSIsIml0ZW1TY2hlbWEiLCJhcnJfbGVuIiwibGVuZ3RoIiwiYXJyX2kiLCJyIiwicHJvY2Vzc1ZhbHVlIiwia2V5cyIsIk9iamVjdCIsImkiLCJrZXkiLCJpZ25vcmVBdHRyaWJ1dGVzIiwiYXR0cnNNYXAiLCJ0ZXh0Tm9kZU5hbWUiLCJjaGlsZCIsImlzQXBwQ2hhciIsImNoIiwiaW5kZXhPZiIsImpPYmoiLCJ4MmoiLCJyZXF1aXJlIiwiYnVpbGRPcHRpb25zIiwiY29udmVydDJuaW1uIiwiZGVmYXVsdE9wdGlvbnMiLCJwcm9wcyIsImV4cG9ydHMiXSwibWFwcGluZ3MiOiJBQUFhOztBQUNiLElBQU1BLElBQUksR0FBRyxTQUFQQSxJQUFJLENBQVlDLENBQUMsRUFBRTtFQUN2QixPQUFPQyxNQUFNLENBQUNDLFlBQVksQ0FBQ0YsQ0FBQyxDQUFDO0FBQy9CLENBQUM7QUFFRCxJQUFNRyxLQUFLLEdBQUc7RUFDWkMsT0FBTyxFQUFFTCxJQUFJLENBQUMsR0FBRyxDQUFDO0VBQ2xCTSxXQUFXLEVBQUVOLElBQUksQ0FBQyxHQUFHLENBQUM7RUFDdEJPLFlBQVksRUFBRVAsSUFBSSxDQUFDLEdBQUcsQ0FBQztFQUN2QlEsZ0JB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LENBQUMsQ0FBQ1QsTUFBTSxLQUFLLENBQUMsQ0FBQyxFQUMzRDtJQUNBLE9BQU8xQixLQUFLLENBQUNLLFNBQVM7RUFDeEIsQ0FBQyxNQUFNO0lBQ0wsT0FBTyxJQUFJO0VBQ2I7QUFDRjtBQUVBLElBQU1xQyxHQUFHLEdBQUdDLG1CQUFPLENBQUMsMkJBQWtCLENBQUM7QUFDdkMsSUFBTUMsWUFBWSxHQUFHRCxtQkFBTyxDQUFDLGlCQUFRLENBQUMsQ0FBQ0MsWUFBWTtBQUVuRCxJQUFNQyxZQUFZLEdBQUcsU0FBZkEsWUFBWSxDQUFZaEMsSUFBSSxFQUFFQyxRQUFRLEVBQUVDLE9BQU8sRUFBRTtFQUNyREEsT0FBTyxHQUFHNkIsWUFBWSxDQUFDN0IsT0FBTyxFQUFFMkIsR0FBRyxDQUFDSSxjQUFjLEVBQUVKLEdBQUcsQ0FBQ0ssS0FBSyxDQUFDO0VBQzlELE9BQU9uQyxFQUFFLENBQUNDLElBQUksRUFBRUMsUUFBUSxFQUFFQyxPQUFPLENBQUM7QUFDcEMsQ0FBQztBQUVEaUMsT0FBTyxDQUFDSCxZQUFZLEdBQUdBLFlBQVkiLCJmaWxlIjoiMTk2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuY29uc3QgY2hhciA9IGZ1bmN0aW9uKGEpIHtcbiAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoYSk7XG59O1xuXG5jb25zdCBjaGFycyA9IHtcbiAgbmlsQ2hhcjogY2hhcigxNzYpLFxuICBtaXNzaW5nQ2hhcjogY2hhcigyMDEpLFxuICBuaWxQcmVtaXRpdmU6IGNoYXIoMTc1KSxcbiAgbWlzc2luZ1ByZW1pdGl2ZTogY2hhcigyMDApLFxuXG4gIGVtcHR5Q2hhcjogY2hhcigxNzgpLFxuICBlbXB0eVZhbHVlOiBjaGFyKDE3NyksIC8vZW1wdHkgUHJlbWl0aXZlXG5cbiAgYm91bmRyeUNoYXI6IGNoYXIoMTc5KSxcblxuICBvYmpTdGFydDogY2hhcigxOTgpLFxuICBhcnJTdGFydDogY2hhcigyMDQpLFxuICBhcnJheUVuZDogY2hhcigxODUpLFxufTtcblxuY29uc3QgY2hhcnNBcnIgPSBbXG4gIGNoYXJzLm5pbENoYXIsXG4gIGNoYXJzLm5pbFByZW1pdGl2ZSxcbiAgY2hhcnMubWlzc2luZ0NoYXIsXG4gIGNoYXJzLm1pc3NpbmdQcmVtaXRpdmUsXG4gIGNoYXJzLmJvdW5kcnlDaGFyLFxuICBjaGFycy5lbXB0eUNoYXIsXG4gIGNoYXJzLmVtcHR5VmFsdWUsXG4gIGNoYXJzLmFycmF5RW5kLFxuICBjaGFycy5vYmpTdGFydCxcbiAgY2hhcnMuYXJyU3RhcnQsXG5dO1xuXG5jb25zdCBfZSA9IGZ1bmN0aW9uKG5vZGUsIGVfc2NoZW1hLCBvcHRpb25zKSB7XG4gIGlmICh0eXBlb2YgZV9zY2hlbWEgPT09ICdzdHJpbmcnKSB7XG4gICAgLy9wcmVtaXRpdmVcbiAgICBpZiAobm9kZSAmJiBub2RlWzBdICYmIG5vZGVbMF0udmFsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBnZXRWYWx1ZShub2RlWzBdLnZhbCwgZV9zY2hlbWEpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZ2V0VmFsdWUobm9kZSwgZV9zY2hlbWEpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBjb25zdCBoYXNWYWxpZERhdGEgPSBoYXNEYXRhKG5vZGUpO1xuICAgIGlmIChoYXNWYWxpZERhdGEgPT09IHRydWUpIHtcbiAgICAgIGxldCBzdHIgPSAnJztcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGVfc2NoZW1hKSkge1xuICAgICAgICAvL2F0dHJpYnV0ZXMgY2FuJ3QgYmUgcmVwZWF0ZWQuIGhlbmNlIGNoZWNrIGluIGNoaWxkcmVuIHRhZ3Mgb25seVxuICAgICAgICBzdHIgKz0gY2hhcnMuYXJyU3RhcnQ7XG4gICAgICAgIGNvbnN0IGl0ZW1TY2hlbWEgPSBlX3NjaGVtYVswXTtcbiAgICAgICAgLy92YXIgaXRlbVNjaGVtYVR5cGUgPSBpdGVtU2NoZW1hO1xuICAgICAgICBjb25zdCBhcnJfbGVuID0gbm9kZS5sZW5ndGg7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBpdGVtU2NoZW1hID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIGZvciAobGV0IGFycl9pID0gMDsgYXJyX2kgPCBhcnJfbGVuOyBhcnJfaSsrKSB7XG4gICAgICAgICAgICBjb25zdCByID0gZ2V0VmFsdWUobm9kZVthcnJfaV0udmFsLCBpdGVtU2NoZW1hKTtcbiAgICAgICAgICAgIHN0ciA9IHByb2Nlc3NWYWx1ZShzdHIsIHIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmb3IgKGxldCBhcnJfaSA9IDA7IGFycl9pIDwgYXJyX2xlbjsgYXJyX2krKykge1xuICAgICAgICAgICAgY29uc3QgciA9IF9lKG5vZGVbYXJyX2ldLCBpdGVtU2NoZW1hLCBvcHRpb25zKTtcbiAgICAgICAgICAgIHN0ciA9IHByb2Nlc3NWYWx1ZShzdHIsIHIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzdHIgKz0gY2hhcnMuYXJyYXlFbmQ7IC8vaW5kaWNhdGVzIHRoYXQgbmV4dCBpdGVtIGlzIG5vdCBhcnJheSBpdGVtXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvL29iamVjdFxuICAgICAgICBzdHIgKz0gY2hhcnMub2JqU3RhcnQ7XG4gICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhlX3NjaGVtYSk7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KG5vZGUpKSB7XG4gICAgICAgICAgbm9kZSA9IG5vZGVbMF07XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSBpbiBrZXlzKSB7XG4gICAgICAgICAgY29uc3Qga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgICAvL2EgcHJvcGVydHkgZGVmaW5lZCBpbiBzY2hlbWEgY2FuIGJlIHByZXNlbnQgZWl0aGVyIGluIGF0dHJzTWFwIG9yIGNoaWxkcmVuIHRhZ3NcbiAgICAgICAgICAvL29wdGlvbnMudGV4dE5vZGVOYW1lIHdpbGwgbm90IHByZXNlbnQgaW4gYm90aCBtYXBzLCB0YWtlIGl0J3MgdmFsdWUgZnJvbSB2YWxcbiAgICAgICAgICAvL29wdGlvbnMuYXR0ck5vZGVOYW1lIHdpbGwgYmUgcHJlc2VudCBpbiBhdHRyc01hcFxuICAgICAgICAgIGxldCByO1xuICAgICAgICAgIGlmICghb3B0aW9ucy5pZ25vcmVBdHRyaWJ1dGVzICYmIG5vZGUuYXR0cnNNYXAgJiYgbm9kZS5hdHRyc01hcFtrZXldKSB7XG4gICAgICAgICAgICByID0gX2Uobm9kZS5hdHRyc01hcFtrZXldLCBlX3NjaGVtYVtrZXldLCBvcHRpb25zKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gb3B0aW9ucy50ZXh0Tm9kZU5hbWUpIHtcbiAgICAgICAgICAgIHIgPSBfZShub2RlLnZhbCwgZV9zY2hlbWFba2V5XSwgb3B0aW9ucyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHIgPSBfZShub2RlLmNoaWxkW2tleV0sIGVfc2NoZW1hW2tleV0sIG9wdGlvbnMpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzdHIgPSBwcm9jZXNzVmFsdWUoc3RyLCByKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHN0cjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGhhc1ZhbGlkRGF0YTtcbiAgICB9XG4gIH1cbn07XG5cbmNvbnN0IGdldFZhbHVlID0gZnVuY3Rpb24oYSAvKiwgdHlwZSovKSB7XG4gIHN3aXRjaCAoYSkge1xuICAgIGNhc2UgdW5kZWZpbmVkOlxuICAgICAgcmV0dXJuIGNoYXJzLm1pc3NpbmdQcmVtaXRpdmU7XG4gICAgY2FzZSBudWxsOlxuICAgICAgcmV0dXJuIGNoYXJzLm5pbFByZW1pdGl2ZTtcbiAgICBjYXNlICcnOlxuICAgICAgcmV0dXJuIGNoYXJzLmVtcHR5VmFsdWU7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBhO1xuICB9XG59O1xuXG5jb25zdCBwcm9jZXNzVmFsdWUgPSBmdW5jdGlvbihzdHIsIHIpIHtcbiAgaWYgKCFpc0FwcENoYXIoclswXSkgJiYgIWlzQXBwQ2hhcihzdHJbc3RyLmxlbmd0aCAtIDFdKSkge1xuICAgIHN0ciArPSBjaGFycy5ib3VuZHJ5Q2hhcjtcbiAgfVxuICByZXR1cm4gc3RyICsgcjtcbn07XG5cbmNvbnN0IGlzQXBwQ2hhciA9IGZ1bmN0aW9uKGNoKSB7XG4gIHJldHVybiBjaGFyc0Fyci5pbmRleE9mKGNoKSAhPT0gLTE7XG59O1xuXG5mdW5jdGlvbiBoYXNEYXRhKGpPYmopIHtcbiAgaWYgKGpPYmogPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBjaGFycy5taXNzaW5nQ2hhcjtcbiAgfSBlbHNlIGlmIChqT2JqID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGNoYXJzLm5pbENoYXI7XG4gIH0gZWxzZSBpZiAoXG4gICAgak9iai5jaGlsZCAmJlxuICAgIE9iamVjdC5rZXlzKGpPYmouY2hpbGQpLmxlbmd0aCA9PT0gMCAmJlxuICAgICghak9iai5hdHRyc01hcCB8fCBPYmplY3Qua2V5cyhqT2JqLmF0dHJzTWFwKS5sZW5ndGggPT09IDApXG4gICkge1xuICAgIHJldHVybiBjaGFycy5lbXB0eUNoYXI7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuY29uc3QgeDJqID0gcmVxdWlyZSgnLi94bWxzdHIyeG1sbm9kZScpO1xuY29uc3QgYnVpbGRPcHRpb25zID0gcmVxdWlyZSgnLi91dGlsJykuYnVpbGRPcHRpb25zO1xuXG5jb25zdCBjb252ZXJ0Mm5pbW4gPSBmdW5jdGlvbihub2RlLCBlX3NjaGVtYSwgb3B0aW9ucykge1xuICBvcHRpb25zID0gYnVpbGRPcHRpb25zKG9wdGlvbnMsIHgyai5kZWZhdWx0T3B0aW9ucywgeDJqLnByb3BzKTtcbiAgcmV0dXJuIF9lKG5vZGUsIGVfc2NoZW1hLCBvcHRpb25zKTtcbn07XG5cbmV4cG9ydHMuY29udmVydDJuaW1uID0gY29udmVydDJuaW1uO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///196\n"); +eval("\n\nvar char = function char(a) {\n return String.fromCharCode(a);\n};\nvar chars = {\n nilChar: char(176),\n missingChar: char(201),\n nilPremitive: char(175),\n missingPremitive: char(200),\n emptyChar: char(178),\n emptyValue: char(177),\n //empty Premitive\n\n boundryChar: char(179),\n objStart: char(198),\n arrStart: char(204),\n arrayEnd: char(185)\n};\nvar charsArr = [chars.nilChar, chars.nilPremitive, chars.missingChar, chars.missingPremitive, chars.boundryChar, chars.emptyChar, chars.emptyValue, chars.arrayEnd, chars.objStart, chars.arrStart];\nvar _e = function _e(node, e_schema, options) {\n if (typeof e_schema === 'string') {\n //premitive\n if (node && node[0] && node[0].val !== undefined) {\n return getValue(node[0].val, e_schema);\n } else {\n return getValue(node, e_schema);\n }\n } else {\n var hasValidData = hasData(node);\n if (hasValidData === true) {\n var str = '';\n if (Array.isArray(e_schema)) {\n //attributes can't be repeated. hence check in children tags only\n str += chars.arrStart;\n var itemSchema = e_schema[0];\n //var itemSchemaType = itemSchema;\n var arr_len = node.length;\n if (typeof itemSchema === 'string') {\n for (var arr_i = 0; arr_i < arr_len; arr_i++) {\n var r = getValue(node[arr_i].val, itemSchema);\n str = processValue(str, r);\n }\n } else {\n for (var _arr_i = 0; _arr_i < arr_len; _arr_i++) {\n var _r = _e(node[_arr_i], itemSchema, options);\n str = processValue(str, _r);\n }\n }\n str += chars.arrayEnd; //indicates that next item is not array item\n } else {\n //object\n str += chars.objStart;\n var keys = Object.keys(e_schema);\n if (Array.isArray(node)) {\n node = node[0];\n }\n for (var i in keys) {\n var key = keys[i];\n //a property defined in schema can be present either in attrsMap or children tags\n //options.textNodeName will not present in both maps, take it's value from val\n //options.attrNodeName will be present in attrsMap\n var _r2 = void 0;\n if (!options.ignoreAttributes && node.attrsMap && node.attrsMap[key]) {\n _r2 = _e(node.attrsMap[key], e_schema[key], options);\n } else if (key === options.textNodeName) {\n _r2 = _e(node.val, e_schema[key], options);\n } else {\n _r2 = _e(node.child[key], e_schema[key], options);\n }\n str = processValue(str, _r2);\n }\n }\n return str;\n } else {\n return hasValidData;\n }\n }\n};\nvar getValue = function getValue(a /*, type*/) {\n switch (a) {\n case undefined:\n return chars.missingPremitive;\n case null:\n return chars.nilPremitive;\n case '':\n return chars.emptyValue;\n default:\n return a;\n }\n};\nvar processValue = function processValue(str, r) {\n if (!isAppChar(r[0]) && !isAppChar(str[str.length - 1])) {\n str += chars.boundryChar;\n }\n return str + r;\n};\nvar isAppChar = function isAppChar(ch) {\n return charsArr.indexOf(ch) !== -1;\n};\nfunction hasData(jObj) {\n if (jObj === undefined) {\n return chars.missingChar;\n } else if (jObj === null) {\n return chars.nilChar;\n } else if (jObj.child && Object.keys(jObj.child).length === 0 && (!jObj.attrsMap || Object.keys(jObj.attrsMap).length === 0)) {\n return chars.emptyChar;\n } else {\n return true;\n }\n}\nvar x2j = __webpack_require__(/*! ./xmlstr2xmlnode */ 201);\nvar buildOptions = __webpack_require__(/*! ./util */ 200).buildOptions;\nvar convert2nimn = function convert2nimn(node, e_schema, options) {\n options = buildOptions(options, x2j.defaultOptions, x2j.props);\n return _e(node, e_schema, options);\n};\nexports.convert2nimn = convert2nimn;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vc3RhdGljL2Zhc3QteG1sLXBhcnNlci9zcmMvbmltbmRhdGEuanMiXSwibmFtZXMiOlsiY2hhciIsImEiLCJTdHJpbmciLCJmcm9tQ2hhckNvZGUiLCJjaGFycyIsIm5pbENoYXIiLCJtaXNzaW5nQ2hhciIsIm5pbFByZW1pdGl2ZSIsIm1pc3NpbmdQcmVtaXRpdmUiLCJlbXB0eUNoYXIiLCJlbXB0eVZhbHVlIiwiYm91bmRyeUNoYXIiLCJvYmpTdGFydCIsImFyclN0YXJ0IiwiYXJyYXlFbmQiLCJjaGFyc0FyciIsIl9lIiwibm9kZSIsImVfc2NoZW1hIiwib3B0aW9ucyIsInZhbCIsInVuZGVmaW5lZCIsImdldFZhbHVlIiwiaGFzVmFsaWREYXRhIiwiaGFzRGF0YSIsInN0ciIsIkFycmF5IiwiaXNBcnJheSIsIml0ZW1TY2hlbWEiLCJhcnJfbGVuIiwibGVuZ3RoIiwiYXJyX2kiLCJyIiwicHJvY2Vzc1ZhbHVlIiwia2V5cyIsIk9iamVjdCIsImkiLCJrZXkiLCJpZ25vcmVBdHRyaWJ1dGVzIiwiYXR0cnNNYXAiLCJ0ZXh0Tm9kZU5hbWUiLCJjaGlsZCIsImlzQXBwQ2hhciIsImNoIiwiaW5kZXhPZiIsImpPYmoiLCJ4MmoiLCJyZXF1aXJlIiwiYnVpbGRPcHRpb25zIiwiY29udmVydDJuaW1uIiwiZGVmYXVsdE9wdGlvbnMiLCJwcm9wcyIsImV4cG9ydHMiXSwibWFwcGluZ3MiOiJBQUFhOztBQUNiLElBQU1BLElBQUksR0FBRyxTQUFQQSxJQUFJLENBQVlDLENBQUMsRUFBRTtFQUN2QixPQUFPQyxNQUFNLENBQUNDLFlBQVksQ0FBQ0YsQ0FBQyxDQUFDO0FBQy9CLENBQUM7QUFFRCxJQUFNRyxLQUFLLEdBQUc7RUFDWkMsT0FBTyxFQUFFTCxJQUFJLENBQUMsR0FBRyxDQUFDO0VBQ2xCTSxXQUFXLEVBQUVOLElBQUksQ0FBQyxHQUFHLENBQUM7RUFDdEJPLFlBQVksRUFBRVAsSUFBSSxDQUFDLEdBQUcsQ0FBQztFQUN2QlEsZ0JB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LENBQUMsQ0FBQ1QsTUFBTSxLQUFLLENBQUMsQ0FBQyxFQUMzRDtJQUNBLE9BQU8xQixLQUFLLENBQUNLLFNBQVM7RUFDeEIsQ0FBQyxNQUFNO0lBQ0wsT0FBTyxJQUFJO0VBQ2I7QUFDRjtBQUVBLElBQU1xQyxHQUFHLEdBQUdDLG1CQUFPLENBQUMsMkJBQWtCLENBQUM7QUFDdkMsSUFBTUMsWUFBWSxHQUFHRCxtQkFBTyxDQUFDLGlCQUFRLENBQUMsQ0FBQ0MsWUFBWTtBQUVuRCxJQUFNQyxZQUFZLEdBQUcsU0FBZkEsWUFBWSxDQUFZaEMsSUFBSSxFQUFFQyxRQUFRLEVBQUVDLE9BQU8sRUFBRTtFQUNyREEsT0FBTyxHQUFHNkIsWUFBWSxDQUFDN0IsT0FBTyxFQUFFMkIsR0FBRyxDQUFDSSxjQUFjLEVBQUVKLEdBQUcsQ0FBQ0ssS0FBSyxDQUFDO0VBQzlELE9BQU9uQyxFQUFFLENBQUNDLElBQUksRUFBRUMsUUFBUSxFQUFFQyxPQUFPLENBQUM7QUFDcEMsQ0FBQztBQUVEaUMsT0FBTyxDQUFDSCxZQUFZLEdBQUdBLFlBQVkiLCJmaWxlIjoiMjA0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuY29uc3QgY2hhciA9IGZ1bmN0aW9uKGEpIHtcbiAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoYSk7XG59O1xuXG5jb25zdCBjaGFycyA9IHtcbiAgbmlsQ2hhcjogY2hhcigxNzYpLFxuICBtaXNzaW5nQ2hhcjogY2hhcigyMDEpLFxuICBuaWxQcmVtaXRpdmU6IGNoYXIoMTc1KSxcbiAgbWlzc2luZ1ByZW1pdGl2ZTogY2hhcigyMDApLFxuXG4gIGVtcHR5Q2hhcjogY2hhcigxNzgpLFxuICBlbXB0eVZhbHVlOiBjaGFyKDE3NyksIC8vZW1wdHkgUHJlbWl0aXZlXG5cbiAgYm91bmRyeUNoYXI6IGNoYXIoMTc5KSxcblxuICBvYmpTdGFydDogY2hhcigxOTgpLFxuICBhcnJTdGFydDogY2hhcigyMDQpLFxuICBhcnJheUVuZDogY2hhcigxODUpLFxufTtcblxuY29uc3QgY2hhcnNBcnIgPSBbXG4gIGNoYXJzLm5pbENoYXIsXG4gIGNoYXJzLm5pbFByZW1pdGl2ZSxcbiAgY2hhcnMubWlzc2luZ0NoYXIsXG4gIGNoYXJzLm1pc3NpbmdQcmVtaXRpdmUsXG4gIGNoYXJzLmJvdW5kcnlDaGFyLFxuICBjaGFycy5lbXB0eUNoYXIsXG4gIGNoYXJzLmVtcHR5VmFsdWUsXG4gIGNoYXJzLmFycmF5RW5kLFxuICBjaGFycy5vYmpTdGFydCxcbiAgY2hhcnMuYXJyU3RhcnQsXG5dO1xuXG5jb25zdCBfZSA9IGZ1bmN0aW9uKG5vZGUsIGVfc2NoZW1hLCBvcHRpb25zKSB7XG4gIGlmICh0eXBlb2YgZV9zY2hlbWEgPT09ICdzdHJpbmcnKSB7XG4gICAgLy9wcmVtaXRpdmVcbiAgICBpZiAobm9kZSAmJiBub2RlWzBdICYmIG5vZGVbMF0udmFsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBnZXRWYWx1ZShub2RlWzBdLnZhbCwgZV9zY2hlbWEpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZ2V0VmFsdWUobm9kZSwgZV9zY2hlbWEpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBjb25zdCBoYXNWYWxpZERhdGEgPSBoYXNEYXRhKG5vZGUpO1xuICAgIGlmIChoYXNWYWxpZERhdGEgPT09IHRydWUpIHtcbiAgICAgIGxldCBzdHIgPSAnJztcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGVfc2NoZW1hKSkge1xuICAgICAgICAvL2F0dHJpYnV0ZXMgY2FuJ3QgYmUgcmVwZWF0ZWQuIGhlbmNlIGNoZWNrIGluIGNoaWxkcmVuIHRhZ3Mgb25seVxuICAgICAgICBzdHIgKz0gY2hhcnMuYXJyU3RhcnQ7XG4gICAgICAgIGNvbnN0IGl0ZW1TY2hlbWEgPSBlX3NjaGVtYVswXTtcbiAgICAgICAgLy92YXIgaXRlbVNjaGVtYVR5cGUgPSBpdGVtU2NoZW1hO1xuICAgICAgICBjb25zdCBhcnJfbGVuID0gbm9kZS5sZW5ndGg7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBpdGVtU2NoZW1hID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIGZvciAobGV0IGFycl9pID0gMDsgYXJyX2kgPCBhcnJfbGVuOyBhcnJfaSsrKSB7XG4gICAgICAgICAgICBjb25zdCByID0gZ2V0VmFsdWUobm9kZVthcnJfaV0udmFsLCBpdGVtU2NoZW1hKTtcbiAgICAgICAgICAgIHN0ciA9IHByb2Nlc3NWYWx1ZShzdHIsIHIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmb3IgKGxldCBhcnJfaSA9IDA7IGFycl9pIDwgYXJyX2xlbjsgYXJyX2krKykge1xuICAgICAgICAgICAgY29uc3QgciA9IF9lKG5vZGVbYXJyX2ldLCBpdGVtU2NoZW1hLCBvcHRpb25zKTtcbiAgICAgICAgICAgIHN0ciA9IHByb2Nlc3NWYWx1ZShzdHIsIHIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzdHIgKz0gY2hhcnMuYXJyYXlFbmQ7IC8vaW5kaWNhdGVzIHRoYXQgbmV4dCBpdGVtIGlzIG5vdCBhcnJheSBpdGVtXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvL29iamVjdFxuICAgICAgICBzdHIgKz0gY2hhcnMub2JqU3RhcnQ7XG4gICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhlX3NjaGVtYSk7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KG5vZGUpKSB7XG4gICAgICAgICAgbm9kZSA9IG5vZGVbMF07XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSBpbiBrZXlzKSB7XG4gICAgICAgICAgY29uc3Qga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgICAvL2EgcHJvcGVydHkgZGVmaW5lZCBpbiBzY2hlbWEgY2FuIGJlIHByZXNlbnQgZWl0aGVyIGluIGF0dHJzTWFwIG9yIGNoaWxkcmVuIHRhZ3NcbiAgICAgICAgICAvL29wdGlvbnMudGV4dE5vZGVOYW1lIHdpbGwgbm90IHByZXNlbnQgaW4gYm90aCBtYXBzLCB0YWtlIGl0J3MgdmFsdWUgZnJvbSB2YWxcbiAgICAgICAgICAvL29wdGlvbnMuYXR0ck5vZGVOYW1lIHdpbGwgYmUgcHJlc2VudCBpbiBhdHRyc01hcFxuICAgICAgICAgIGxldCByO1xuICAgICAgICAgIGlmICghb3B0aW9ucy5pZ25vcmVBdHRyaWJ1dGVzICYmIG5vZGUuYXR0cnNNYXAgJiYgbm9kZS5hdHRyc01hcFtrZXldKSB7XG4gICAgICAgICAgICByID0gX2Uobm9kZS5hdHRyc01hcFtrZXldLCBlX3NjaGVtYVtrZXldLCBvcHRpb25zKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gb3B0aW9ucy50ZXh0Tm9kZU5hbWUpIHtcbiAgICAgICAgICAgIHIgPSBfZShub2RlLnZhbCwgZV9zY2hlbWFba2V5XSwgb3B0aW9ucyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHIgPSBfZShub2RlLmNoaWxkW2tleV0sIGVfc2NoZW1hW2tleV0sIG9wdGlvbnMpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzdHIgPSBwcm9jZXNzVmFsdWUoc3RyLCByKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHN0cjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGhhc1ZhbGlkRGF0YTtcbiAgICB9XG4gIH1cbn07XG5cbmNvbnN0IGdldFZhbHVlID0gZnVuY3Rpb24oYSAvKiwgdHlwZSovKSB7XG4gIHN3aXRjaCAoYSkge1xuICAgIGNhc2UgdW5kZWZpbmVkOlxuICAgICAgcmV0dXJuIGNoYXJzLm1pc3NpbmdQcmVtaXRpdmU7XG4gICAgY2FzZSBudWxsOlxuICAgICAgcmV0dXJuIGNoYXJzLm5pbFByZW1pdGl2ZTtcbiAgICBjYXNlICcnOlxuICAgICAgcmV0dXJuIGNoYXJzLmVtcHR5VmFsdWU7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBhO1xuICB9XG59O1xuXG5jb25zdCBwcm9jZXNzVmFsdWUgPSBmdW5jdGlvbihzdHIsIHIpIHtcbiAgaWYgKCFpc0FwcENoYXIoclswXSkgJiYgIWlzQXBwQ2hhcihzdHJbc3RyLmxlbmd0aCAtIDFdKSkge1xuICAgIHN0ciArPSBjaGFycy5ib3VuZHJ5Q2hhcjtcbiAgfVxuICByZXR1cm4gc3RyICsgcjtcbn07XG5cbmNvbnN0IGlzQXBwQ2hhciA9IGZ1bmN0aW9uKGNoKSB7XG4gIHJldHVybiBjaGFyc0Fyci5pbmRleE9mKGNoKSAhPT0gLTE7XG59O1xuXG5mdW5jdGlvbiBoYXNEYXRhKGpPYmopIHtcbiAgaWYgKGpPYmogPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBjaGFycy5taXNzaW5nQ2hhcjtcbiAgfSBlbHNlIGlmIChqT2JqID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGNoYXJzLm5pbENoYXI7XG4gIH0gZWxzZSBpZiAoXG4gICAgak9iai5jaGlsZCAmJlxuICAgIE9iamVjdC5rZXlzKGpPYmouY2hpbGQpLmxlbmd0aCA9PT0gMCAmJlxuICAgICghak9iai5hdHRyc01hcCB8fCBPYmplY3Qua2V5cyhqT2JqLmF0dHJzTWFwKS5sZW5ndGggPT09IDApXG4gICkge1xuICAgIHJldHVybiBjaGFycy5lbXB0eUNoYXI7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuY29uc3QgeDJqID0gcmVxdWlyZSgnLi94bWxzdHIyeG1sbm9kZScpO1xuY29uc3QgYnVpbGRPcHRpb25zID0gcmVxdWlyZSgnLi91dGlsJykuYnVpbGRPcHRpb25zO1xuXG5jb25zdCBjb252ZXJ0Mm5pbW4gPSBmdW5jdGlvbihub2RlLCBlX3NjaGVtYSwgb3B0aW9ucykge1xuICBvcHRpb25zID0gYnVpbGRPcHRpb25zKG9wdGlvbnMsIHgyai5kZWZhdWx0T3B0aW9ucywgeDJqLnByb3BzKTtcbiAgcmV0dXJuIF9lKG5vZGUsIGVfc2NoZW1hLCBvcHRpb25zKTtcbn07XG5cbmV4cG9ydHMuY29udmVydDJuaW1uID0gY29udmVydDJuaW1uO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///204\n"); /***/ }), -/* 197 */ +/* 205 */ /*!**********************************************************************!*\ !*** D:/里海数字乡村/xunfeiAi/static/fast-xml-parser/src/node2json_str.js ***! \**********************************************************************/ @@ -25012,10 +25201,10 @@ eval("\n\nvar char = function char(a) {\n return String.fromCharCode(a);\n};\nv /***/ (function(module, exports, __webpack_require__) { "use strict"; -eval("\n\nvar util = __webpack_require__(/*! ./util */ 192);\nvar buildOptions = __webpack_require__(/*! ./util */ 192).buildOptions;\nvar x2j = __webpack_require__(/*! ./xmlstr2xmlnode */ 193);\n\n//TODO: do it later\nvar convertToJsonString = function convertToJsonString(node, options) {\n options = buildOptions(options, x2j.defaultOptions, x2j.props);\n options.indentBy = options.indentBy || '';\n return _cToJsonStr(node, options, 0);\n};\nvar _cToJsonStr = function _cToJsonStr(node, options, level) {\n var jObj = '{';\n\n //traver through all the children\n var keys = Object.keys(node.child);\n for (var index = 0; index < keys.length; index++) {\n var tagname = keys[index];\n if (node.child[tagname] && node.child[tagname].length > 1) {\n jObj += '\"' + tagname + '\" : [ ';\n for (var tag in node.child[tagname]) {\n jObj += _cToJsonStr(node.child[tagname][tag], options) + ' , ';\n }\n jObj = jObj.substr(0, jObj.length - 1) + ' ] '; //remove extra comma in last\n } else {\n jObj += '\"' + tagname + '\" : ' + _cToJsonStr(node.child[tagname][0], options) + ' ,';\n }\n }\n util.merge(jObj, node.attrsMap);\n //add attrsMap as new children\n if (util.isEmptyObject(jObj)) {\n return util.isExist(node.val) ? node.val : '';\n } else {\n if (util.isExist(node.val)) {\n if (!(typeof node.val === 'string' && (node.val === '' || node.val === options.cdataPositionChar))) {\n jObj += '\"' + options.textNodeName + '\" : ' + stringval(node.val);\n }\n }\n }\n //add value\n if (jObj[jObj.length - 1] === ',') {\n jObj = jObj.substr(0, jObj.length - 2);\n }\n return jObj + '}';\n};\nfunction stringval(v) {\n if (v === true || v === false || !isNaN(v)) {\n return v;\n } else {\n return '\"' + v + '\"';\n }\n}\nfunction indentate(options, level) {\n return options.indentBy.repeat(level);\n}\nexports.convertToJsonString = convertToJsonString;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vc3RhdGljL2Zhc3QteG1sLXBhcnNlci9zcmMvbm9kZTJqc29uX3N0ci5qcyJdLCJuYW1lcyI6WyJ1dGlsIiwicmVxdWlyZSIsImJ1aWxkT3B0aW9ucyIsIngyaiIsImNvbnZlcnRUb0pzb25TdHJpbmciLCJub2RlIiwib3B0aW9ucyIsImRlZmF1bHRPcHRpb25zIiwicHJvcHMiLCJpbmRlbnRCeSIsIl9jVG9Kc29uU3RyIiwibGV2ZWwiLCJqT2JqIiwia2V5cyIsIk9iamVjdCIsImNoaWxkIiwiaW5kZXgiLCJsZW5ndGgiLCJ0YWduYW1lIiwidGFnIiwic3Vic3RyIiwibWVyZ2UiLCJhdHRyc01hcCIsImlzRW1wdHlPYmplY3QiLCJpc0V4aXN0IiwidmFsIiwiY2RhdGFQb3NpdGlvbkNoYXIiLCJ0ZXh0Tm9kZU5hbWUiLCJzdHJpbmd2YWwiLCJ2IiwiaXNOYU4iLCJpbmRlbnRhdGUiLCJyZXBlYXQiLCJleHBvcnRzIl0sIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixJQUFNQSxJQUFJLEdBQUdDLG1CQUFPLENBQUMsaUJBQVEsQ0FBQztBQUM5QixJQUFNQyxZQUFZLEdBQUdELG1CQUFPLENBQUMsaUJBQVEsQ0FBQyxDQUFDQyxZQUFZO0FBQ25ELElBQU1DLEdBQUcsR0FBR0YsbUJBQU8sQ0FBQywyQkFBa0IsQ0FBQzs7QUFFdkM7QUFDQSxJQUFNRyxtQkFBbUIsR0FBRyxTQUF0QkEsbUJBQW1CLENBQVlDLElBQUksRUFBRUMsT0FBTyxFQUFFO0VBQ2xEQSxPQUFPLEdBQUdKLFlBQVksQ0FBQ0ksT0FBTyxFQUFFSCxHQUFHLENBQUNJLGNBQWMsRUFBRUosR0FBRyxDQUFDSyxLQUFLLENBQUM7RUFFOURGLE9BQU8sQ0FBQ0csUUFBUSxHQUFHSCxPQUFPLENBQUNHLFFBQVEsSUFBSSxFQUFFO0VBQ3pDLE9BQU9DLFdBQVcsQ0FBQ0wsSUFBSSxFQUFFQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0FBQ3RDLENBQUM7QUFFRCxJQUFNSSxXQUFXLEdBQUcsU0FBZEEsV0FBVyxDQUFZTCxJQUFJLEVBQUVDLE9BQU8sRUFBRUssS0FBSyxFQUFFO0VBQ2pELElBQUlDLElBQUksR0FBRyxHQUFHOztFQUVkO0VBQ0EsSUFBTUMsSUFBSSxHQUFHQyxNQUFNLENBQUNELElBQUksQ0FBQ1IsSUFBSSxDQUFDVSxLQUFLLENBQUM7RUFFcEMsS0FBSyxJQUFJQyxLQUFLLEdBQUcsQ0FBQyxFQUFFQSxLQUFLLEdBQUdILElBQUksQ0FBQ0ksTUFBTSxFQUFFRCxLQUFLLEVBQUUsRUFBRTtJQUNoRCxJQUFJRSxPQUFPLEdBQUdMLElBQUksQ0FBQ0csS0FBSyxDQUFDO0lBQ3pCLElBQUlYLElBQUksQ0FBQ1UsS0FBSyxDQUFDRyxPQUFPLENBQUMsSUFBSWIsSUFBSSxDQUFDVSxLQUFLLENBQUNHLE9BQU8sQ0FBQyxDQUFDRCxNQUFNLEdBQUcsQ0FBQyxFQUFFO01BQ3pETCxJQUFJLElBQUksR0FBRyxHQUFHTSxPQUFPLEdBQUcsUUFBUTtNQUNoQyxLQUFLLElBQUlDLEdBQUcsSUFBSWQsSUFBSSxDQUFDVSxLQUFLLENBQUNHLE9BQU8sQ0FBQyxFQUFFO1FBQ25DTixJQUFJLElBQUlGLFdBQVcsQ0FBQ0wsSUFBSSxDQUFDVSxLQUFLLENBQUNHLE9BQU8sQ0FBQyxDQUFDQyxHQUFHLENBQUMsRUFBRWIsT0FBTyxDQUFDLEdBQUcsS0FBSztNQUNoRTtNQUNBTSxJQUFJLEdBQUdBLElBQUksQ0FBQ1EsTUFBTSxDQUFDLENBQUMsRUFBRVIsSUFBSSxDQUFDSyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUM7SUFDbEQsQ0FBQyxNQUFNO01BQ0xMLElBQUksSUFBSSxHQUFHLEdBQUdNLE9BQU8sR0FBRyxNQUFNLEdBQUdSLFdBQVcsQ0FBQ0wsSUFBSSxDQUFDVSxLQUFLLENBQUNHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFWixPQUFPLENBQUMsR0FBRyxJQUFJO0lBQ3RGO0VBQ0Y7RUFDQU4sSUFBSSxDQUFDcUIsS0FBSyxDQUFDVCxJQUFJLEVBQUVQLElBQUksQ0FBQ2lCLFFBQVEsQ0FBQztFQUMvQjtFQUNBLElBQUl0QixJQUFJLENBQUN1QixhQUFhLENBQUNYLElBQUksQ0FBQyxFQUFFO0lBQzVCLE9BQU9aLElBQUksQ0FBQ3dCLE9BQU8sQ0FBQ25CLElBQUksQ0FBQ29CLEdBQUcsQ0FBQyxHQUFHcEIsSUFBSSxDQUFDb0IsR0FBRyxHQUFHLEVBQUU7RUFDL0MsQ0FBQyxNQUFNO0lBQ0wsSUFBSXpCLElBQUksQ0FBQ3dCLE9BQU8sQ0FBQ25CLElBQUksQ0FBQ29CLEdBQUcsQ0FBQyxFQUFFO01BQzFCLElBQUksRUFBRSxPQUFPcEIsSUFBSSxDQUFDb0IsR0FBRyxLQUFLLFFBQVEsS0FBS3BCLElBQUksQ0FBQ29CLEdBQUcsS0FBSyxFQUFFLElBQUlwQixJQUFJLENBQUNvQixHQUFHLEtBQUtuQixPQUFPLENBQUNvQixpQkFBaUIsQ0FBQyxDQUFDLEVBQUU7UUFDbEdkLElBQUksSUFBSSxHQUFHLEdBQUdOLE9BQU8sQ0FBQ3FCLFlBQVksR0FBRyxNQUFNLEdBQUdDLFNBQVMsQ0FBQ3ZCLElBQUksQ0FBQ29CLEdBQUcsQ0FBQztNQUNuRTtJQUNGO0VBQ0Y7RUFDQTtFQUNBLElBQUliLElBQUksQ0FBQ0EsSUFBSSxDQUFDSyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFO0lBQ2pDTCxJQUFJLEdBQUdBLElBQUksQ0FBQ1EsTUFBTSxDQUFDLENBQUMsRUFBRVIsSUFBSSxDQUFDSyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0VBQ3hDO0VBQ0EsT0FBT0wsSUFBSSxHQUFHLEdBQUc7QUFDbkIsQ0FBQztBQUVELFNBQVNnQixTQUFTLENBQUNDLENBQUMsRUFBRTtFQUNwQixJQUFJQSxDQUFDLEtBQUssSUFBSSxJQUFJQSxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUNDLEtBQUssQ0FBQ0QsQ0FBQyxDQUFDLEVBQUU7SUFDMUMsT0FBT0EsQ0FBQztFQUNWLENBQUMsTUFBTTtJQUNMLE9BQU8sR0FBRyxHQUFHQSxDQUFDLEdBQUcsR0FBRztFQUN0QjtBQUNGO0FBRUEsU0FBU0UsU0FBUyxDQUFDekIsT0FBTyxFQUFFSyxLQUFLLEVBQUU7RUFDakMsT0FBT0wsT0FBTyxDQUFDRyxRQUFRLENBQUN1QixNQUFNLENBQUNyQixLQUFLLENBQUM7QUFDdkM7QUFFQXNCLE9BQU8sQ0FBQzdCLG1CQUFtQixHQUFHQSxtQkFBbUIiLCJmaWxlIjoiMTk3LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi91dGlsJyk7XG5jb25zdCBidWlsZE9wdGlvbnMgPSByZXF1aXJlKCcuL3V0aWwnKS5idWlsZE9wdGlvbnM7XG5jb25zdCB4MmogPSByZXF1aXJlKCcuL3htbHN0cjJ4bWxub2RlJyk7XG5cbi8vVE9ETzogZG8gaXQgbGF0ZXJcbmNvbnN0IGNvbnZlcnRUb0pzb25TdHJpbmcgPSBmdW5jdGlvbihub2RlLCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBidWlsZE9wdGlvbnMob3B0aW9ucywgeDJqLmRlZmF1bHRPcHRpb25zLCB4MmoucHJvcHMpO1xuXG4gIG9wdGlvbnMuaW5kZW50QnkgPSBvcHRpb25zLmluZGVudEJ5IHx8ICcnO1xuICByZXR1cm4gX2NUb0pzb25TdHIobm9kZSwgb3B0aW9ucywgMCk7XG59O1xuXG5jb25zdCBfY1RvSnNvblN0ciA9IGZ1bmN0aW9uKG5vZGUsIG9wdGlvbnMsIGxldmVsKSB7XG4gIGxldCBqT2JqID0gJ3snO1xuXG4gIC8vdHJhdmVyIHRocm91Z2ggYWxsIHRoZSBjaGlsZHJlblxuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMobm9kZS5jaGlsZCk7XG5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGtleXMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgdmFyIHRhZ25hbWUgPSBrZXlzW2luZGV4XTtcbiAgICBpZiAobm9kZS5jaGlsZFt0YWduYW1lXSAmJiBub2RlLmNoaWxkW3RhZ25hbWVdLmxlbmd0aCA+IDEpIHtcbiAgICAgIGpPYmogKz0gJ1wiJyArIHRhZ25hbWUgKyAnXCIgOiBbICc7XG4gICAgICBmb3IgKHZhciB0YWcgaW4gbm9kZS5jaGlsZFt0YWduYW1lXSkge1xuICAgICAgICBqT2JqICs9IF9jVG9Kc29uU3RyKG5vZGUuY2hpbGRbdGFnbmFtZV1bdGFnXSwgb3B0aW9ucykgKyAnICwgJztcbiAgICAgIH1cbiAgICAgIGpPYmogPSBqT2JqLnN1YnN0cigwLCBqT2JqLmxlbmd0aCAtIDEpICsgJyBdICc7IC8vcmVtb3ZlIGV4dHJhIGNvbW1hIGluIGxhc3RcbiAgICB9IGVsc2Uge1xuICAgICAgak9iaiArPSAnXCInICsgdGFnbmFtZSArICdcIiA6ICcgKyBfY1RvSnNvblN0cihub2RlLmNoaWxkW3RhZ25hbWVdWzBdLCBvcHRpb25zKSArICcgLCc7XG4gICAgfVxuICB9XG4gIHV0aWwubWVyZ2Uoak9iaiwgbm9kZS5hdHRyc01hcCk7XG4gIC8vYWRkIGF0dHJzTWFwIGFzIG5ldyBjaGlsZHJlblxuICBpZiAodXRpbC5pc0VtcHR5T2JqZWN0KGpPYmopKSB7XG4gICAgcmV0dXJuIHV0aWwuaXNFeGlzdChub2RlLnZhbCkgPyBub2RlLnZhbCA6ICcnO1xuICB9IGVsc2Uge1xuICAgIGlmICh1dGlsLmlzRXhpc3Qobm9kZS52YWwpKSB7XG4gICAgICBpZiAoISh0eXBlb2Ygbm9kZS52YWwgPT09ICdzdHJpbmcnICYmIChub2RlLnZhbCA9PT0gJycgfHwgbm9kZS52YWwgPT09IG9wdGlvbnMuY2RhdGFQb3NpdGlvbkNoYXIpKSkge1xuICAgICAgICBqT2JqICs9ICdcIicgKyBvcHRpb25zLnRleHROb2RlTmFtZSArICdcIiA6ICcgKyBzdHJpbmd2YWwobm9kZS52YWwpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAvL2FkZCB2YWx1ZVxuICBpZiAoak9ialtqT2JqLmxlbmd0aCAtIDFdID09PSAnLCcpIHtcbiAgICBqT2JqID0gak9iai5zdWJzdHIoMCwgak9iai5sZW5ndGggLSAyKTtcbiAgfVxuICByZXR1cm4gak9iaiArICd9Jztcbn07XG5cbmZ1bmN0aW9uIHN0cmluZ3ZhbCh2KSB7XG4gIGlmICh2ID09PSB0cnVlIHx8IHYgPT09IGZhbHNlIHx8ICFpc05hTih2KSkge1xuICAgIHJldHVybiB2O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAnXCInICsgdiArICdcIic7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW5kZW50YXRlKG9wdGlvbnMsIGxldmVsKSB7XG4gIHJldHVybiBvcHRpb25zLmluZGVudEJ5LnJlcGVhdChsZXZlbCk7XG59XG5cbmV4cG9ydHMuY29udmVydFRvSnNvblN0cmluZyA9IGNvbnZlcnRUb0pzb25TdHJpbmc7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///197\n"); +eval("\n\nvar util = __webpack_require__(/*! ./util */ 200);\nvar buildOptions = __webpack_require__(/*! ./util */ 200).buildOptions;\nvar x2j = __webpack_require__(/*! ./xmlstr2xmlnode */ 201);\n\n//TODO: do it later\nvar convertToJsonString = function convertToJsonString(node, options) {\n options = buildOptions(options, x2j.defaultOptions, x2j.props);\n options.indentBy = options.indentBy || '';\n return _cToJsonStr(node, options, 0);\n};\nvar _cToJsonStr = function _cToJsonStr(node, options, level) {\n var jObj = '{';\n\n //traver through all the children\n var keys = Object.keys(node.child);\n for (var index = 0; index < keys.length; index++) {\n var tagname = keys[index];\n if (node.child[tagname] && node.child[tagname].length > 1) {\n jObj += '\"' + tagname + '\" : [ ';\n for (var tag in node.child[tagname]) {\n jObj += _cToJsonStr(node.child[tagname][tag], options) + ' , ';\n }\n jObj = jObj.substr(0, jObj.length - 1) + ' ] '; //remove extra comma in last\n } else {\n jObj += '\"' + tagname + '\" : ' + _cToJsonStr(node.child[tagname][0], options) + ' ,';\n }\n }\n util.merge(jObj, node.attrsMap);\n //add attrsMap as new children\n if (util.isEmptyObject(jObj)) {\n return util.isExist(node.val) ? node.val : '';\n } else {\n if (util.isExist(node.val)) {\n if (!(typeof node.val === 'string' && (node.val === '' || node.val === options.cdataPositionChar))) {\n jObj += '\"' + options.textNodeName + '\" : ' + stringval(node.val);\n }\n }\n }\n //add value\n if (jObj[jObj.length - 1] === ',') {\n jObj = jObj.substr(0, jObj.length - 2);\n }\n return jObj + '}';\n};\nfunction stringval(v) {\n if (v === true || v === false || !isNaN(v)) {\n return v;\n } else {\n return '\"' + v + '\"';\n }\n}\nfunction indentate(options, level) {\n return options.indentBy.repeat(level);\n}\nexports.convertToJsonString = convertToJsonString;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vc3RhdGljL2Zhc3QteG1sLXBhcnNlci9zcmMvbm9kZTJqc29uX3N0ci5qcyJdLCJuYW1lcyI6WyJ1dGlsIiwicmVxdWlyZSIsImJ1aWxkT3B0aW9ucyIsIngyaiIsImNvbnZlcnRUb0pzb25TdHJpbmciLCJub2RlIiwib3B0aW9ucyIsImRlZmF1bHRPcHRpb25zIiwicHJvcHMiLCJpbmRlbnRCeSIsIl9jVG9Kc29uU3RyIiwibGV2ZWwiLCJqT2JqIiwia2V5cyIsIk9iamVjdCIsImNoaWxkIiwiaW5kZXgiLCJsZW5ndGgiLCJ0YWduYW1lIiwidGFnIiwic3Vic3RyIiwibWVyZ2UiLCJhdHRyc01hcCIsImlzRW1wdHlPYmplY3QiLCJpc0V4aXN0IiwidmFsIiwiY2RhdGFQb3NpdGlvbkNoYXIiLCJ0ZXh0Tm9kZU5hbWUiLCJzdHJpbmd2YWwiLCJ2IiwiaXNOYU4iLCJpbmRlbnRhdGUiLCJyZXBlYXQiLCJleHBvcnRzIl0sIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixJQUFNQSxJQUFJLEdBQUdDLG1CQUFPLENBQUMsaUJBQVEsQ0FBQztBQUM5QixJQUFNQyxZQUFZLEdBQUdELG1CQUFPLENBQUMsaUJBQVEsQ0FBQyxDQUFDQyxZQUFZO0FBQ25ELElBQU1DLEdBQUcsR0FBR0YsbUJBQU8sQ0FBQywyQkFBa0IsQ0FBQzs7QUFFdkM7QUFDQSxJQUFNRyxtQkFBbUIsR0FBRyxTQUF0QkEsbUJBQW1CLENBQVlDLElBQUksRUFBRUMsT0FBTyxFQUFFO0VBQ2xEQSxPQUFPLEdBQUdKLFlBQVksQ0FBQ0ksT0FBTyxFQUFFSCxHQUFHLENBQUNJLGNBQWMsRUFBRUosR0FBRyxDQUFDSyxLQUFLLENBQUM7RUFFOURGLE9BQU8sQ0FBQ0csUUFBUSxHQUFHSCxPQUFPLENBQUNHLFFBQVEsSUFBSSxFQUFFO0VBQ3pDLE9BQU9DLFdBQVcsQ0FBQ0wsSUFBSSxFQUFFQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0FBQ3RDLENBQUM7QUFFRCxJQUFNSSxXQUFXLEdBQUcsU0FBZEEsV0FBVyxDQUFZTCxJQUFJLEVBQUVDLE9BQU8sRUFBRUssS0FBSyxFQUFFO0VBQ2pELElBQUlDLElBQUksR0FBRyxHQUFHOztFQUVkO0VBQ0EsSUFBTUMsSUFBSSxHQUFHQyxNQUFNLENBQUNELElBQUksQ0FBQ1IsSUFBSSxDQUFDVSxLQUFLLENBQUM7RUFFcEMsS0FBSyxJQUFJQyxLQUFLLEdBQUcsQ0FBQyxFQUFFQSxLQUFLLEdBQUdILElBQUksQ0FBQ0ksTUFBTSxFQUFFRCxLQUFLLEVBQUUsRUFBRTtJQUNoRCxJQUFJRSxPQUFPLEdBQUdMLElBQUksQ0FBQ0csS0FBSyxDQUFDO0lBQ3pCLElBQUlYLElBQUksQ0FBQ1UsS0FBSyxDQUFDRyxPQUFPLENBQUMsSUFBSWIsSUFBSSxDQUFDVSxLQUFLLENBQUNHLE9BQU8sQ0FBQyxDQUFDRCxNQUFNLEdBQUcsQ0FBQyxFQUFFO01BQ3pETCxJQUFJLElBQUksR0FBRyxHQUFHTSxPQUFPLEdBQUcsUUFBUTtNQUNoQyxLQUFLLElBQUlDLEdBQUcsSUFBSWQsSUFBSSxDQUFDVSxLQUFLLENBQUNHLE9BQU8sQ0FBQyxFQUFFO1FBQ25DTixJQUFJLElBQUlGLFdBQVcsQ0FBQ0wsSUFBSSxDQUFDVSxLQUFLLENBQUNHLE9BQU8sQ0FBQyxDQUFDQyxHQUFHLENBQUMsRUFBRWIsT0FBTyxDQUFDLEdBQUcsS0FBSztNQUNoRTtNQUNBTSxJQUFJLEdBQUdBLElBQUksQ0FBQ1EsTUFBTSxDQUFDLENBQUMsRUFBRVIsSUFBSSxDQUFDSyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUM7SUFDbEQsQ0FBQyxNQUFNO01BQ0xMLElBQUksSUFBSSxHQUFHLEdBQUdNLE9BQU8sR0FBRyxNQUFNLEdBQUdSLFdBQVcsQ0FBQ0wsSUFBSSxDQUFDVSxLQUFLLENBQUNHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFWixPQUFPLENBQUMsR0FBRyxJQUFJO0lBQ3RGO0VBQ0Y7RUFDQU4sSUFBSSxDQUFDcUIsS0FBSyxDQUFDVCxJQUFJLEVBQUVQLElBQUksQ0FBQ2lCLFFBQVEsQ0FBQztFQUMvQjtFQUNBLElBQUl0QixJQUFJLENBQUN1QixhQUFhLENBQUNYLElBQUksQ0FBQyxFQUFFO0lBQzVCLE9BQU9aLElBQUksQ0FBQ3dCLE9BQU8sQ0FBQ25CLElBQUksQ0FBQ29CLEdBQUcsQ0FBQyxHQUFHcEIsSUFBSSxDQUFDb0IsR0FBRyxHQUFHLEVBQUU7RUFDL0MsQ0FBQyxNQUFNO0lBQ0wsSUFBSXpCLElBQUksQ0FBQ3dCLE9BQU8sQ0FBQ25CLElBQUksQ0FBQ29CLEdBQUcsQ0FBQyxFQUFFO01BQzFCLElBQUksRUFBRSxPQUFPcEIsSUFBSSxDQUFDb0IsR0FBRyxLQUFLLFFBQVEsS0FBS3BCLElBQUksQ0FBQ29CLEdBQUcsS0FBSyxFQUFFLElBQUlwQixJQUFJLENBQUNvQixHQUFHLEtBQUtuQixPQUFPLENBQUNvQixpQkFBaUIsQ0FBQyxDQUFDLEVBQUU7UUFDbEdkLElBQUksSUFBSSxHQUFHLEdBQUdOLE9BQU8sQ0FBQ3FCLFlBQVksR0FBRyxNQUFNLEdBQUdDLFNBQVMsQ0FBQ3ZCLElBQUksQ0FBQ29CLEdBQUcsQ0FBQztNQUNuRTtJQUNGO0VBQ0Y7RUFDQTtFQUNBLElBQUliLElBQUksQ0FBQ0EsSUFBSSxDQUFDSyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFO0lBQ2pDTCxJQUFJLEdBQUdBLElBQUksQ0FBQ1EsTUFBTSxDQUFDLENBQUMsRUFBRVIsSUFBSSxDQUFDSyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0VBQ3hDO0VBQ0EsT0FBT0wsSUFBSSxHQUFHLEdBQUc7QUFDbkIsQ0FBQztBQUVELFNBQVNnQixTQUFTLENBQUNDLENBQUMsRUFBRTtFQUNwQixJQUFJQSxDQUFDLEtBQUssSUFBSSxJQUFJQSxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUNDLEtBQUssQ0FBQ0QsQ0FBQyxDQUFDLEVBQUU7SUFDMUMsT0FBT0EsQ0FBQztFQUNWLENBQUMsTUFBTTtJQUNMLE9BQU8sR0FBRyxHQUFHQSxDQUFDLEdBQUcsR0FBRztFQUN0QjtBQUNGO0FBRUEsU0FBU0UsU0FBUyxDQUFDekIsT0FBTyxFQUFFSyxLQUFLLEVBQUU7RUFDakMsT0FBT0wsT0FBTyxDQUFDRyxRQUFRLENBQUN1QixNQUFNLENBQUNyQixLQUFLLENBQUM7QUFDdkM7QUFFQXNCLE9BQU8sQ0FBQzdCLG1CQUFtQixHQUFHQSxtQkFBbUIiLCJmaWxlIjoiMjA1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi91dGlsJyk7XG5jb25zdCBidWlsZE9wdGlvbnMgPSByZXF1aXJlKCcuL3V0aWwnKS5idWlsZE9wdGlvbnM7XG5jb25zdCB4MmogPSByZXF1aXJlKCcuL3htbHN0cjJ4bWxub2RlJyk7XG5cbi8vVE9ETzogZG8gaXQgbGF0ZXJcbmNvbnN0IGNvbnZlcnRUb0pzb25TdHJpbmcgPSBmdW5jdGlvbihub2RlLCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBidWlsZE9wdGlvbnMob3B0aW9ucywgeDJqLmRlZmF1bHRPcHRpb25zLCB4MmoucHJvcHMpO1xuXG4gIG9wdGlvbnMuaW5kZW50QnkgPSBvcHRpb25zLmluZGVudEJ5IHx8ICcnO1xuICByZXR1cm4gX2NUb0pzb25TdHIobm9kZSwgb3B0aW9ucywgMCk7XG59O1xuXG5jb25zdCBfY1RvSnNvblN0ciA9IGZ1bmN0aW9uKG5vZGUsIG9wdGlvbnMsIGxldmVsKSB7XG4gIGxldCBqT2JqID0gJ3snO1xuXG4gIC8vdHJhdmVyIHRocm91Z2ggYWxsIHRoZSBjaGlsZHJlblxuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMobm9kZS5jaGlsZCk7XG5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGtleXMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgdmFyIHRhZ25hbWUgPSBrZXlzW2luZGV4XTtcbiAgICBpZiAobm9kZS5jaGlsZFt0YWduYW1lXSAmJiBub2RlLmNoaWxkW3RhZ25hbWVdLmxlbmd0aCA+IDEpIHtcbiAgICAgIGpPYmogKz0gJ1wiJyArIHRhZ25hbWUgKyAnXCIgOiBbICc7XG4gICAgICBmb3IgKHZhciB0YWcgaW4gbm9kZS5jaGlsZFt0YWduYW1lXSkge1xuICAgICAgICBqT2JqICs9IF9jVG9Kc29uU3RyKG5vZGUuY2hpbGRbdGFnbmFtZV1bdGFnXSwgb3B0aW9ucykgKyAnICwgJztcbiAgICAgIH1cbiAgICAgIGpPYmogPSBqT2JqLnN1YnN0cigwLCBqT2JqLmxlbmd0aCAtIDEpICsgJyBdICc7IC8vcmVtb3ZlIGV4dHJhIGNvbW1hIGluIGxhc3RcbiAgICB9IGVsc2Uge1xuICAgICAgak9iaiArPSAnXCInICsgdGFnbmFtZSArICdcIiA6ICcgKyBfY1RvSnNvblN0cihub2RlLmNoaWxkW3RhZ25hbWVdWzBdLCBvcHRpb25zKSArICcgLCc7XG4gICAgfVxuICB9XG4gIHV0aWwubWVyZ2Uoak9iaiwgbm9kZS5hdHRyc01hcCk7XG4gIC8vYWRkIGF0dHJzTWFwIGFzIG5ldyBjaGlsZHJlblxuICBpZiAodXRpbC5pc0VtcHR5T2JqZWN0KGpPYmopKSB7XG4gICAgcmV0dXJuIHV0aWwuaXNFeGlzdChub2RlLnZhbCkgPyBub2RlLnZhbCA6ICcnO1xuICB9IGVsc2Uge1xuICAgIGlmICh1dGlsLmlzRXhpc3Qobm9kZS52YWwpKSB7XG4gICAgICBpZiAoISh0eXBlb2Ygbm9kZS52YWwgPT09ICdzdHJpbmcnICYmIChub2RlLnZhbCA9PT0gJycgfHwgbm9kZS52YWwgPT09IG9wdGlvbnMuY2RhdGFQb3NpdGlvbkNoYXIpKSkge1xuICAgICAgICBqT2JqICs9ICdcIicgKyBvcHRpb25zLnRleHROb2RlTmFtZSArICdcIiA6ICcgKyBzdHJpbmd2YWwobm9kZS52YWwpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAvL2FkZCB2YWx1ZVxuICBpZiAoak9ialtqT2JqLmxlbmd0aCAtIDFdID09PSAnLCcpIHtcbiAgICBqT2JqID0gak9iai5zdWJzdHIoMCwgak9iai5sZW5ndGggLSAyKTtcbiAgfVxuICByZXR1cm4gak9iaiArICd9Jztcbn07XG5cbmZ1bmN0aW9uIHN0cmluZ3ZhbCh2KSB7XG4gIGlmICh2ID09PSB0cnVlIHx8IHYgPT09IGZhbHNlIHx8ICFpc05hTih2KSkge1xuICAgIHJldHVybiB2O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAnXCInICsgdiArICdcIic7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW5kZW50YXRlKG9wdGlvbnMsIGxldmVsKSB7XG4gIHJldHVybiBvcHRpb25zLmluZGVudEJ5LnJlcGVhdChsZXZlbCk7XG59XG5cbmV4cG9ydHMuY29udmVydFRvSnNvblN0cmluZyA9IGNvbnZlcnRUb0pzb25TdHJpbmc7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///205\n"); /***/ }), -/* 198 */ +/* 206 */ /*!*****************************************************************!*\ !*** D:/里海数字乡村/xunfeiAi/static/fast-xml-parser/src/json2xml.js ***! \*****************************************************************/ @@ -25023,10 +25212,10 @@ eval("\n\nvar util = __webpack_require__(/*! ./util */ 192);\nvar buildOptions = /***/ (function(module, exports, __webpack_require__) { "use strict"; -eval("\n\n//parse Empty Node as self closing node\nvar _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ 4);\nvar buildOptions = __webpack_require__(/*! ./util */ 192).buildOptions;\nvar defaultOptions = {\n attributeNamePrefix: '@_',\n attrNodeName: false,\n textNodeName: '#text',\n ignoreAttributes: true,\n cdataTagName: false,\n cdataPositionChar: '\\\\c',\n format: false,\n indentBy: ' ',\n supressEmptyNode: false,\n tagValueProcessor: function tagValueProcessor(a) {\n return a;\n },\n attrValueProcessor: function attrValueProcessor(a) {\n return a;\n }\n};\nvar props = ['attributeNamePrefix', 'attrNodeName', 'textNodeName', 'ignoreAttributes', 'cdataTagName', 'cdataPositionChar', 'format', 'indentBy', 'supressEmptyNode', 'tagValueProcessor', 'attrValueProcessor'];\nfunction Parser(options) {\n this.options = buildOptions(options, defaultOptions, props);\n if (this.options.ignoreAttributes || this.options.attrNodeName) {\n this.isAttribute = function /*a*/\n () {\n return false;\n };\n } else {\n this.attrPrefixLen = this.options.attributeNamePrefix.length;\n this.isAttribute = isAttribute;\n }\n if (this.options.cdataTagName) {\n this.isCDATA = isCDATA;\n } else {\n this.isCDATA = function /*a*/\n () {\n return false;\n };\n }\n this.replaceCDATAstr = replaceCDATAstr;\n this.replaceCDATAarr = replaceCDATAarr;\n if (this.options.format) {\n this.indentate = indentate;\n this.tagEndChar = '>\\n';\n this.newLine = '\\n';\n } else {\n this.indentate = function () {\n return '';\n };\n this.tagEndChar = '>';\n this.newLine = '';\n }\n if (this.options.supressEmptyNode) {\n this.buildTextNode = buildEmptyTextNode;\n this.buildObjNode = buildEmptyObjNode;\n } else {\n this.buildTextNode = buildTextValNode;\n this.buildObjNode = buildObjectNode;\n }\n this.buildTextValNode = buildTextValNode;\n this.buildObjectNode = buildObjectNode;\n}\nParser.prototype.parse = function (jObj) {\n return this.j2x(jObj, 0).val;\n};\nParser.prototype.j2x = function (jObj, level) {\n var attrStr = '';\n var val = '';\n var keys = Object.keys(jObj);\n var len = keys.length;\n for (var i = 0; i < len; i++) {\n var key = keys[i];\n if (typeof jObj[key] === 'undefined') {\n // supress undefined node\n } else if (jObj[key] === null) {\n val += this.indentate(level) + '<' + key + '/' + this.tagEndChar;\n } else if (jObj[key] instanceof Date) {\n val += this.buildTextNode(jObj[key], key, '', level);\n } else if (_typeof(jObj[key]) !== 'object') {\n //premitive type\n var attr = this.isAttribute(key);\n if (attr) {\n attrStr += ' ' + attr + '=\"' + this.options.attrValueProcessor('' + jObj[key]) + '\"';\n } else if (this.isCDATA(key)) {\n if (jObj[this.options.textNodeName]) {\n val += this.replaceCDATAstr(jObj[this.options.textNodeName], jObj[key]);\n } else {\n val += this.replaceCDATAstr('', jObj[key]);\n }\n } else {\n //tag value\n if (key === this.options.textNodeName) {\n if (jObj[this.options.cdataTagName]) {\n //value will added while processing cdata\n } else {\n val += this.options.tagValueProcessor('' + jObj[key]);\n }\n } else {\n val += this.buildTextNode(jObj[key], key, '', level);\n }\n }\n } else if (Array.isArray(jObj[key])) {\n //repeated nodes\n if (this.isCDATA(key)) {\n val += this.indentate(level);\n if (jObj[this.options.textNodeName]) {\n val += this.replaceCDATAarr(jObj[this.options.textNodeName], jObj[key]);\n } else {\n val += this.replaceCDATAarr('', jObj[key]);\n }\n } else {\n //nested nodes\n var arrLen = jObj[key].length;\n for (var j = 0; j < arrLen; j++) {\n var item = jObj[key][j];\n if (typeof item === 'undefined') {\n // supress undefined node\n } else if (item === null) {\n val += this.indentate(level) + '<' + key + '/' + this.tagEndChar;\n } else if (_typeof(item) === 'object') {\n var result = this.j2x(item, level + 1);\n val += this.buildObjNode(result.val, key, result.attrStr, level);\n } else {\n val += this.buildTextNode(item, key, '', level);\n }\n }\n }\n } else {\n //nested node\n if (this.options.attrNodeName && key === this.options.attrNodeName) {\n var Ks = Object.keys(jObj[key]);\n var L = Ks.length;\n for (var _j = 0; _j < L; _j++) {\n attrStr += ' ' + Ks[_j] + '=\"' + this.options.attrValueProcessor('' + jObj[key][Ks[_j]]) + '\"';\n }\n } else {\n var _result = this.j2x(jObj[key], level + 1);\n val += this.buildObjNode(_result.val, key, _result.attrStr, level);\n }\n }\n }\n return {\n attrStr: attrStr,\n val: val\n };\n};\nfunction replaceCDATAstr(str, cdata) {\n str = this.options.tagValueProcessor('' + str);\n if (this.options.cdataPositionChar === '' || str === '') {\n return str + '');\n }\n return str + this.newLine;\n }\n}\nfunction buildObjectNode(val, key, attrStr, level) {\n if (attrStr && !val.includes('<')) {\n return this.indentate(level) + '<' + key + attrStr + '>' + val +\n //+ this.newLine\n // + this.indentate(level)\n '' + this.options.tagValueProcessor(val) + '\\n';\n this.newLine = '\\n';\n } else {\n this.indentate = function () {\n return '';\n };\n this.tagEndChar = '>';\n this.newLine = '';\n }\n if (this.options.supressEmptyNode) {\n this.buildTextNode = buildEmptyTextNode;\n this.buildObjNode = buildEmptyObjNode;\n } else {\n this.buildTextNode = buildTextValNode;\n this.buildObjNode = buildObjectNode;\n }\n this.buildTextValNode = buildTextValNode;\n this.buildObjectNode = buildObjectNode;\n}\nParser.prototype.parse = function (jObj) {\n return this.j2x(jObj, 0).val;\n};\nParser.prototype.j2x = function (jObj, level) {\n var attrStr = '';\n var val = '';\n var keys = Object.keys(jObj);\n var len = keys.length;\n for (var i = 0; i < len; i++) {\n var key = keys[i];\n if (typeof jObj[key] === 'undefined') {\n // supress undefined node\n } else if (jObj[key] === null) {\n val += this.indentate(level) + '<' + key + '/' + this.tagEndChar;\n } else if (jObj[key] instanceof Date) {\n val += this.buildTextNode(jObj[key], key, '', level);\n } else if (_typeof(jObj[key]) !== 'object') {\n //premitive type\n var attr = this.isAttribute(key);\n if (attr) {\n attrStr += ' ' + attr + '=\"' + this.options.attrValueProcessor('' + jObj[key]) + '\"';\n } else if (this.isCDATA(key)) {\n if (jObj[this.options.textNodeName]) {\n val += this.replaceCDATAstr(jObj[this.options.textNodeName], jObj[key]);\n } else {\n val += this.replaceCDATAstr('', jObj[key]);\n }\n } else {\n //tag value\n if (key === this.options.textNodeName) {\n if (jObj[this.options.cdataTagName]) {\n //value will added while processing cdata\n } else {\n val += this.options.tagValueProcessor('' + jObj[key]);\n }\n } else {\n val += this.buildTextNode(jObj[key], key, '', level);\n }\n }\n } else if (Array.isArray(jObj[key])) {\n //repeated nodes\n if (this.isCDATA(key)) {\n val += this.indentate(level);\n if (jObj[this.options.textNodeName]) {\n val += this.replaceCDATAarr(jObj[this.options.textNodeName], jObj[key]);\n } else {\n val += this.replaceCDATAarr('', jObj[key]);\n }\n } else {\n //nested nodes\n var arrLen = jObj[key].length;\n for (var j = 0; j < arrLen; j++) {\n var item = jObj[key][j];\n if (typeof item === 'undefined') {\n // supress undefined node\n } else if (item === null) {\n val += this.indentate(level) + '<' + key + '/' + this.tagEndChar;\n } else if (_typeof(item) === 'object') {\n var result = this.j2x(item, level + 1);\n val += this.buildObjNode(result.val, key, result.attrStr, level);\n } else {\n val += this.buildTextNode(item, key, '', level);\n }\n }\n }\n } else {\n //nested node\n if (this.options.attrNodeName && key === this.options.attrNodeName) {\n var Ks = Object.keys(jObj[key]);\n var L = Ks.length;\n for (var _j = 0; _j < L; _j++) {\n attrStr += ' ' + Ks[_j] + '=\"' + this.options.attrValueProcessor('' + jObj[key][Ks[_j]]) + '\"';\n }\n } else {\n var _result = this.j2x(jObj[key], level + 1);\n val += this.buildObjNode(_result.val, key, _result.attrStr, level);\n }\n }\n }\n return {\n attrStr: attrStr,\n val: val\n };\n};\nfunction replaceCDATAstr(str, cdata) {\n str = this.options.tagValueProcessor('' + str);\n if (this.options.cdataPositionChar === '' || str === '') {\n return str + '');\n }\n return str + this.newLine;\n }\n}\nfunction buildObjectNode(val, key, attrStr, level) {\n if (attrStr && !val.includes('<')) {\n return this.indentate(level) + '<' + key + attrStr + '>' + val +\n //+ this.newLine\n // + this.indentate(level)\n '' + this.options.tagValueProcessor(val) + ' tag // load the styles -var content = __webpack_require__(/*! !../../../../HBuilderX/plugins/uniapp-cli/node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/vue-loader/lib/loaders/stylePostLoader.js!../../../../HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/webpack-preprocess-loader??ref--8-oneOf-1-2!../../../../HBuilderX/plugins/uniapp-cli/node_modules/postcss-loader/src??ref--8-oneOf-1-3!../../../../HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/sass-loader/dist/cjs.js??ref--8-oneOf-1-4!../../../../HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/webpack-preprocess-loader??ref--8-oneOf-1-5!../../../../HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/vue-loader/lib??vue-loader-options!../../../../HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/webpack-uni-app-loader/view/style.js!./index.vue?vue&type=style&index=0&lang=scss&mpType=page */ 20); +var content = __webpack_require__(/*! !../../../../HBuilderX/plugins/uniapp-cli/node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/vue-loader/lib/loaders/stylePostLoader.js!../../../../HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/webpack-preprocess-loader??ref--8-oneOf-1-2!../../../../HBuilderX/plugins/uniapp-cli/node_modules/postcss-loader/src??ref--8-oneOf-1-3!../../../../HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/sass-loader/dist/cjs.js??ref--8-oneOf-1-4!../../../../HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/webpack-preprocess-loader??ref--8-oneOf-1-5!../../../../HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/vue-loader/lib??vue-loader-options!../../../../HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/webpack-uni-app-loader/view/style.js!./index.vue?vue&type=style&index=0&lang=scss&mpType=page */ 25); if(content.__esModule) content = content.default; if(typeof content === 'string') content = [[module.i, content, '']]; if(content.locals) module.exports = content.locals; // add the styles to the DOM -var add = __webpack_require__(/*! ../../../../HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/app-vue-style-loader/lib/addStylesClient.js */ 22).default +var add = __webpack_require__(/*! ../../../../HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/app-vue-style-loader/lib/addStylesClient.js */ 27).default var update = add("5067e13a", content, false, {"sourceMap":false,"shadowMode":false}); // Hot Module Replacement if(false) {} /***/ }), -/* 20 */ +/* 25 */ /*!*******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!./node_modules/@dcloudio/vue-cli-plugin-uni/packages/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/@dcloudio/vue-cli-plugin-uni/packages/webpack-preprocess-loader??ref--8-oneOf-1-2!./node_modules/postcss-loader/src??ref--8-oneOf-1-3!./node_modules/@dcloudio/vue-cli-plugin-uni/packages/sass-loader/dist/cjs.js??ref--8-oneOf-1-4!./node_modules/@dcloudio/vue-cli-plugin-uni/packages/webpack-preprocess-loader??ref--8-oneOf-1-5!./node_modules/@dcloudio/vue-cli-plugin-uni/packages/vue-loader/lib??vue-loader-options!./node_modules/@dcloudio/vue-cli-plugin-uni/packages/webpack-uni-app-loader/view/style.js!D:/里海数字乡村/xunfeiAi/pages/index/index.vue?vue&type=style&index=0&lang=scss&mpType=page ***! \*******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ @@ -1052,16 +1233,16 @@ if(false) {} /***/ (function(module, exports, __webpack_require__) { // Imports -var ___CSS_LOADER_API_IMPORT___ = __webpack_require__(/*! ../../../../HBuilderX/plugins/uniapp-cli/node_modules/css-loader/dist/runtime/api.js */ 21); +var ___CSS_LOADER_API_IMPORT___ = __webpack_require__(/*! ../../../../HBuilderX/plugins/uniapp-cli/node_modules/css-loader/dist/runtime/api.js */ 26); exports = ___CSS_LOADER_API_IMPORT___(false); // Module -exports.push([module.i, "@charset \"UTF-8\";\r\n/**\r\n * 这里是uni-app内置的常用样式变量\r\n *\r\n * uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量\r\n * 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App\r\n *\r\n */\r\n/**\r\n * 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能\r\n *\r\n * 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件\r\n */\r\n/* 颜色变量 */\r\n/* 行为相关颜色 */\r\n/* 文字基本颜色 */\r\n/* 背景颜色 */\r\n/* 边框颜色 */\r\n/* 尺寸变量 */\r\n/* 文字尺寸 */\r\n/* 图片尺寸 */\r\n/* Border Radius */\r\n/* 水平间距 */\r\n/* 垂直间距 */\r\n/* 透明度 */\r\n/* 文章场景相关 */\r\n/* 根元素样式 设置页面背景、字体大小、字体颜色,字符间距、长单词换行 */\nbody {\r\n background-color: #f3f3f3;\r\n font-size: 28rpx;\r\n box-sizing: border-box;\r\n color: #333;\r\n letter-spacing: 0;\r\n word-wrap: break-word;\n}\r\n/* 设置常用元素尺寸规则 */\nuni-view, uni-textarea, uni-input, uni-label, uni-form, uni-button, uni-image {\r\n box-sizing: border-box;\n}\r\n/* 按钮样式处理 */\nuni-button {\r\n font-size: 28rpx;\n}\r\n/* 取消按钮默认的边框线效果 */\nuni-button:after {\r\n border: none;\n}\r\n/* 设置图片默认样式,取消默认尺寸 */\nuni-image {\r\n display: block;\r\n height: auto;\r\n width: auto;\n}\r\n/* 输入框默认字体大小 */\nuni-textarea, uni-input {\r\n font-size: 28rpx;\n}\r\n/* 列式弹性盒子 */\n.flex_col {\r\n display: flex;\r\n flex-direction: row;\r\n flex-wrap: nowrap;\r\n justify-content: flex-start;\r\n align-items: center;\r\n align-content: center;\n}\r\n/* 行式弹性盒子 */\n.flex_row {\r\n display: flex;\r\n flex-direction: column;\r\n flex-wrap: nowrap;\r\n justify-content: flex-start;\r\n align-items: flex-start;\r\n align-content: flex-start;\n}\r\n/* 弹性盒子弹性容器 */\n.flex_col .flex_grow {\r\n width: 0;\r\n flex-grow: 1;\n}\n.flex_row .flex_grow {\r\n flex-grow: 1;\n}\r\n/* 弹性盒子允许换行 */\n.flex_col.flex_wrap {\r\n flex-wrap: wrap;\n}\r\n/* 弹性盒子居中对齐 */\n.flex_col.flex_center, .flex_row.flex_center {\r\n justify-content: center;\n}\r\n/* 列式弹性盒子两端对齐 */\n.flex_col.flex_space {\r\n justify-content: space-between;\n}\r\n/* 弹性盒子快速分栏 ,这里非常郁闷 uniapp 居然不支持 * 选择器 */\n.flex_col.flex_col_2 > uni-view {\r\n width: 50%;\n}\n.flex_col.flex_col_3 > uni-view {\r\n width: 33.33333%;\n}\n.flex_col.flex_col_4 > uni-view {\r\n width: 25%;\n}\n.flex_col.flex_col_5 > uni-view {\r\n width: 20%;\n}\n.flex_col.flex_col_6 > uni-view {\r\n width: 16.66666%;\n}\r\n/* 字体颜色 */\n.color_333 {\r\n color: #333;\n}\n.color_666 {\r\n color: #666;\n}\n.color_999 {\r\n color: #999;\n}\n.color_ccc {\r\n color: #ccc;\n}\n.color_fff {\r\n color: #fff;\n}\n.color_6dc {\r\n color: #6dca6d;\n}\n.color_d51 {\r\n color: #d51917;\n}\n.color_09f {\r\n color: #0099ff;\n}\r\n/* 背景色*/\n.bg_fff {\r\n background-color: #ffffff;\n}\r\n/* 字体大小 */\n.size_10 {\r\n font-size: 20rpx;\n}\n.size_12 {\r\n font-size: 24rpx;\n}\n.size_14 {\r\n font-size: 28rpx;\n}\n.size_16 {\r\n font-size: 32rpx;\n}\n.size_18 {\r\n font-size: 36rpx;\n}\n.size_20 {\r\n font-size: 40rpx;\n}\r\n/* 字体加粗 */\n.font_b {\r\n font-weight: bold;\n}\r\n/* 对齐方式 */\n.align_c {\r\n text-align: center;\n}\n.align_l {\r\n text-align: left;\n}\n.align_r {\r\n text-align: right;\n}\r\n/* 遮罩 */\n.shade {\r\n position: fixed;\r\n top: 0;\r\n right: 0;\r\n bottom: 0;\r\n left: 0;\r\n background-color: rgba(0, 0, 0, 0.8);\r\n z-index: 100;\n}\r\n/* 弹窗 */\n.shade_box {\r\n position: fixed;\r\n top: 0;\r\n right: 0;\r\n bottom: 0;\r\n left: 0;\r\n margin: auto;\r\n z-index: 101;\r\n min-width: 200rpx;\r\n min-height: 200rpx;\n}\nbody {\r\n background-color: #f5f5f5;\r\n font-size: 28rpx;\n}\n@-webkit-keyframes blink {\n0% {\r\n opacity: 1;\n}\n50% {\r\n opacity: 0;\n}\n100% {\r\n opacity: 1;\n}\n}\n@keyframes blink {\n0% {\r\n opacity: 1;\n}\n50% {\r\n opacity: 0;\n}\n100% {\r\n opacity: 1;\n}\n}\n.blinking-box {\r\n background-color: #333;\r\n color: #333;\r\n -webkit-animation: blink 1s infinite;\r\n animation: blink 1s infinite;\r\n width: 2px;\r\n overflow: hidden;\n}\n.wrapper {\r\n height: auto !important;\n}\r\n/* 加载数据提示 */\n.tips {\r\n position: fixed;\r\n left: 0;\r\n top: var(--window-top);\r\n width: 100%;\r\n z-index: 9;\r\n background-color: rgba(0, 0, 0, 0.15);\r\n height: 72rpx;\r\n line-height: 72rpx;\r\n -webkit-transform: translateY(-80rpx);\r\n transform: translateY(-80rpx);\r\n transition: -webkit-transform 0.3s ease-in-out 0s;\r\n transition: transform 0.3s ease-in-out 0s;\r\n transition: transform 0.3s ease-in-out 0s, -webkit-transform 0.3s ease-in-out 0s;\n}\n.tips.show {\r\n -webkit-transform: translateY(0);\r\n transform: translateY(0);\n}\n.box-1 {\r\n width: 100%;\r\n height: auto;\r\n min-height: calc(100vh - 100rpx);\r\n padding-bottom: 100rpx;\r\n box-sizing: content-box;\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: flex-end;\r\n /* 兼容iPhoneX */\r\n margin-bottom: 0;\r\n margin-bottom: constant(safe-area-inset-bottom);\r\n margin-bottom: env(safe-area-inset-bottom);\n}\n.multiline-text {\r\n white-space: pre-line;\r\n /* 或 white-space: pre-wrap; */\n}\n.box-2 {\r\n position: fixed;\r\n left: 0;\r\n width: 100%;\r\n bottom: 0;\r\n height: auto;\r\n z-index: 2;\r\n border-top: #e5e5e5 solid 1px;\r\n box-sizing: content-box;\r\n background-color: #f5f5f5;\r\n -webkit-transform: translateY(0);\r\n transform: translateY(0);\r\n /* 初始化 transform 属性 */\r\n transition: -webkit-transform 0.3s ease;\r\n transition: transform 0.3s ease;\r\n transition: transform 0.3s ease, -webkit-transform 0.3s ease;\r\n /* 添加过渡效果 */\r\n /* 兼容iPhoneX */\r\n padding-bottom: 0;\r\n padding-bottom: constant(safe-area-inset-bottom);\r\n padding-bottom: env(safe-area-inset-bottom);\n}\n.box-2 > uni-view {\r\n padding: 0 20rpx;\r\n height: 100rpx;\n}\n.box-2 .content {\r\n background-color: #fff;\r\n height: 64rpx;\r\n padding: 0 20rpx;\r\n border-radius: 6rpx;\r\n font-size: 28rpx;\n}\n.box-2 .send {\r\n background-color: #2573fb;\r\n color: #fff;\r\n height: 64rpx;\r\n margin-left: 20rpx;\r\n border-radius: 6rpx;\r\n padding: 0;\r\n width: 120rpx;\r\n line-height: 62rpx;\n}\n.box-2 .send:active {\r\n background-color: #1573fb;\n}\n.talk-list {\r\n padding-bottom: 20rpx;\r\n /* 消息项,基础类 */\n}\n.talk-list .item {\r\n padding: 20rpx 20rpx 0 20rpx;\r\n align-items: flex-start;\r\n align-content: flex-start;\r\n color: #333;\r\n /* 收到的消息 */\r\n /* 发出的消息 */\n}\n.talk-list .item .pic {\r\n width: 92rpx;\r\n height: 92rpx;\r\n border-radius: 50%;\r\n border: #fff solid 1px;\n}\n.talk-list .item .content {\r\n padding: 20rpx;\r\n border-radius: 4px;\r\n max-width: 500rpx;\r\n word-break: break-all;\r\n line-height: 52rpx;\r\n position: relative;\n}\n.talk-list .item.pull .content {\r\n min-width: 20rpx;\r\n min-height: 52rpx;\r\n margin-left: 32rpx;\r\n background-color: #fff;\n}\n.talk-list .item.pull .content::after {\r\n content: '';\r\n display: block;\r\n width: 0;\r\n height: 0;\r\n border-top: 16rpx solid transparent;\r\n border-bottom: 16rpx solid transparent;\r\n border-right: 20rpx solid #fff;\r\n position: absolute;\r\n top: 30rpx;\r\n left: -18rpx;\n}\n.talk-list .item.push {\r\n /* 主轴为水平方向,起点在右端。使不修改DOM结构,也能改变元素排列顺序 */\r\n flex-direction: row-reverse;\n}\n.talk-list .item.push .content {\r\n min-width: 20rpx;\r\n min-height: 52rpx;\r\n margin-right: 32rpx;\r\n background-color: #2573fb;\r\n color: #fff;\n}\n.talk-list .item.push .content::after {\r\n content: '';\r\n display: block;\r\n width: 0;\r\n height: 0;\r\n border-top: 16rpx solid transparent;\r\n border-bottom: 16rpx solid transparent;\r\n border-left: 20rpx solid #2573fb;\r\n position: absolute;\r\n top: 30rpx;\r\n right: -18rpx;\n}\n.bing-math {\r\n margin: 0 !important;\r\n padding: 0 !important;\n}\n.placeholder {\r\n width: 100vw;\r\n background-color: #1573fb;\n}\r\n", ""]); +exports.push([module.i, "@charset \"UTF-8\";\r\n/**\r\n * 这里是uni-app内置的常用样式变量\r\n *\r\n * uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量\r\n * 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App\r\n *\r\n */\r\n/**\r\n * 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能\r\n *\r\n * 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件\r\n */\r\n/* 颜色变量 */\r\n/* 行为相关颜色 */\r\n/* 文字基本颜色 */\r\n/* 背景颜色 */\r\n/* 边框颜色 */\r\n/* 尺寸变量 */\r\n/* 文字尺寸 */\r\n/* 图片尺寸 */\r\n/* Border Radius */\r\n/* 水平间距 */\r\n/* 垂直间距 */\r\n/* 透明度 */\r\n/* 文章场景相关 */\r\n/* 根元素样式 设置页面背景、字体大小、字体颜色,字符间距、长单词换行 */\nbody {\r\n background-color: #f3f3f3;\r\n font-size: 28rpx;\r\n box-sizing: border-box;\r\n color: #333;\r\n letter-spacing: 0;\r\n word-wrap: break-word;\n}\r\n/* 设置常用元素尺寸规则 */\nuni-view, uni-textarea, uni-input, uni-label, uni-form, uni-button, uni-image {\r\n box-sizing: border-box;\n}\r\n/* 按钮样式处理 */\nuni-button {\r\n font-size: 28rpx;\n}\r\n/* 取消按钮默认的边框线效果 */\nuni-button:after {\r\n border: none;\n}\r\n/* 设置图片默认样式,取消默认尺寸 */\nuni-image {\r\n display: block;\r\n height: auto;\r\n width: auto;\n}\r\n/* 输入框默认字体大小 */\nuni-textarea, uni-input {\r\n font-size: 28rpx;\n}\r\n/* 列式弹性盒子 */\n.flex_col {\r\n display: flex;\r\n flex-direction: row;\r\n flex-wrap: nowrap;\r\n justify-content: flex-start;\r\n align-items: center;\r\n align-content: center;\n}\r\n/* 行式弹性盒子 */\n.flex_row {\r\n display: flex;\r\n flex-direction: column;\r\n flex-wrap: nowrap;\r\n justify-content: flex-start;\r\n align-items: flex-start;\r\n align-content: flex-start;\n}\r\n/* 弹性盒子弹性容器 */\n.flex_col .flex_grow {\r\n width: 0;\r\n flex-grow: 1;\n}\n.flex_row .flex_grow {\r\n flex-grow: 1;\n}\r\n/* 弹性盒子允许换行 */\n.flex_col.flex_wrap {\r\n flex-wrap: wrap;\n}\r\n/* 弹性盒子居中对齐 */\n.flex_col.flex_center, .flex_row.flex_center {\r\n justify-content: center;\n}\r\n/* 列式弹性盒子两端对齐 */\n.flex_col.flex_space {\r\n justify-content: space-between;\n}\r\n/* 弹性盒子快速分栏 ,这里非常郁闷 uniapp 居然不支持 * 选择器 */\n.flex_col.flex_col_2 > uni-view {\r\n width: 50%;\n}\n.flex_col.flex_col_3 > uni-view {\r\n width: 33.33333%;\n}\n.flex_col.flex_col_4 > uni-view {\r\n width: 25%;\n}\n.flex_col.flex_col_5 > uni-view {\r\n width: 20%;\n}\n.flex_col.flex_col_6 > uni-view {\r\n width: 16.66666%;\n}\r\n/* 字体颜色 */\n.color_333 {\r\n color: #333;\n}\n.color_666 {\r\n color: #666;\n}\n.color_999 {\r\n color: #999;\n}\n.color_ccc {\r\n color: #ccc;\n}\n.color_fff {\r\n color: #fff;\n}\n.color_6dc {\r\n color: #6dca6d;\n}\n.color_d51 {\r\n color: #d51917;\n}\n.color_09f {\r\n color: #0099ff;\n}\r\n/* 背景色*/\n.bg_fff {\r\n background-color: #ffffff;\n}\r\n/* 字体大小 */\n.size_10 {\r\n font-size: 20rpx;\n}\n.size_12 {\r\n font-size: 24rpx;\n}\n.size_14 {\r\n font-size: 28rpx;\n}\n.size_16 {\r\n font-size: 32rpx;\n}\n.size_18 {\r\n font-size: 36rpx;\n}\n.size_20 {\r\n font-size: 40rpx;\n}\r\n/* 字体加粗 */\n.font_b {\r\n font-weight: bold;\n}\r\n/* 对齐方式 */\n.align_c {\r\n text-align: center;\n}\n.align_l {\r\n text-align: left;\n}\n.align_r {\r\n text-align: right;\n}\r\n/* 遮罩 */\n.shade {\r\n position: fixed;\r\n top: 0;\r\n right: 0;\r\n bottom: 0;\r\n left: 0;\r\n background-color: rgba(0, 0, 0, 0.8);\r\n z-index: 100;\n}\r\n/* 弹窗 */\n.shade_box {\r\n position: fixed;\r\n top: 0;\r\n right: 0;\r\n bottom: 0;\r\n left: 0;\r\n margin: auto;\r\n z-index: 101;\r\n min-width: 200rpx;\r\n min-height: 200rpx;\n}\nbody {\r\n background-color: #f5f5f5;\r\n font-size: 28rpx;\n}\n@-webkit-keyframes blink {\n0% {\r\n opacity: 1;\n}\n50% {\r\n opacity: 0;\n}\n100% {\r\n opacity: 1;\n}\n}\n@keyframes blink {\n0% {\r\n opacity: 1;\n}\n50% {\r\n opacity: 0;\n}\n100% {\r\n opacity: 1;\n}\n}\n.blinking-box {\r\n background-color: #333;\r\n color: #333;\r\n -webkit-animation: blink 1s infinite;\r\n animation: blink 1s infinite;\r\n width: 2px;\r\n overflow: hidden;\n}\n.wrapper {\r\n height: auto !important;\n}\r\n/* 加载数据提示 */\n.tips {\r\n position: fixed;\r\n left: 0;\r\n top: var(--window-top);\r\n width: 100%;\r\n z-index: 9;\r\n background-color: rgba(0, 0, 0, 0.15);\r\n height: 72rpx;\r\n line-height: 72rpx;\r\n -webkit-transform: translateY(-80rpx);\r\n transform: translateY(-80rpx);\r\n transition: -webkit-transform 0.3s ease-in-out 0s;\r\n transition: transform 0.3s ease-in-out 0s;\r\n transition: transform 0.3s ease-in-out 0s, -webkit-transform 0.3s ease-in-out 0s;\n}\n.tips.show {\r\n -webkit-transform: translateY(0);\r\n transform: translateY(0);\n}\n.box-1 {\r\n width: 100%;\r\n height: auto;\r\n min-height: calc(100vh - 100rpx);\r\n padding-bottom: 100rpx;\r\n box-sizing: content-box;\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: flex-end;\r\n /* 兼容iPhoneX */\r\n margin-bottom: 0;\r\n margin-bottom: constant(safe-area-inset-bottom);\r\n margin-bottom: env(safe-area-inset-bottom);\n}\n.multiline-text {\r\n white-space: pre-line;\r\n /* 或 white-space: pre-wrap; */\n}\n.box-2 {\r\n position: fixed;\r\n left: 0;\r\n width: 100%;\r\n bottom: 0;\r\n height: auto;\r\n z-index: 2;\r\n border-top: #e5e5e5 solid 1px;\r\n box-sizing: content-box;\r\n background-color: #f5f5f5;\r\n -webkit-transform: translateY(0);\r\n transform: translateY(0);\r\n /* 初始化 transform 属性 */\r\n transition: -webkit-transform 0.3s ease;\r\n transition: transform 0.3s ease;\r\n transition: transform 0.3s ease, -webkit-transform 0.3s ease;\r\n /* 添加过渡效果 */\r\n /* 兼容iPhoneX */\r\n padding-bottom: 0;\r\n padding-bottom: constant(safe-area-inset-bottom);\r\n padding-bottom: env(safe-area-inset-bottom);\n}\n.box-2 > uni-view {\r\n padding: 0 20rpx;\r\n height: 100rpx;\n}\n.box-2 .content {\r\n background-color: #fff;\r\n height: 64rpx;\r\n padding: 0 20rpx;\r\n border-radius: 6rpx;\r\n font-size: 28rpx;\n}\n.box-2 .send {\r\n background-color: #2573fb;\r\n color: #fff;\r\n height: 64rpx;\r\n margin-left: 20rpx;\r\n border-radius: 6rpx;\r\n padding: 0;\r\n width: 120rpx;\r\n line-height: 62rpx;\n}\n.box-2 .send:active {\r\n background-color: #1573fb;\n}\n.talk-list {\r\n padding-bottom: 20rpx;\r\n /* 消息项,基础类 */\n}\n.talk-list .item {\r\n padding: 20rpx 20rpx 0 20rpx;\r\n align-items: flex-start;\r\n align-content: flex-start;\r\n color: #333;\r\n /* 收到的消息 */\r\n /* 发出的消息 */\n}\n.talk-list .item .pic {\r\n width: 92rpx;\r\n height: 92rpx;\r\n border-radius: 50%;\r\n border: #fff solid 1px;\n}\n.talk-list .item .content {\r\n padding: 20rpx;\r\n border-radius: 4px;\r\n max-width: 500rpx;\r\n word-break: break-all;\r\n line-height: 52rpx;\r\n position: relative;\n}\n.talk-list .item.pull .content {\r\n min-width: 20rpx;\r\n min-height: 52rpx;\r\n margin-left: 32rpx;\r\n background-color: #fff;\n}\n.talk-list .item.pull .content::after {\r\n content: '';\r\n display: block;\r\n width: 0;\r\n height: 0;\r\n border-top: 16rpx solid transparent;\r\n border-bottom: 16rpx solid transparent;\r\n border-right: 20rpx solid #fff;\r\n position: absolute;\r\n top: 30rpx;\r\n left: -18rpx;\n}\n.talk-list .item.push {\r\n /* 主轴为水平方向,起点在右端。使不修改DOM结构,也能改变元素排列顺序 */\r\n flex-direction: row-reverse;\n}\n.talk-list .item.push .content {\r\n min-width: 20rpx;\r\n min-height: 52rpx;\r\n margin-right: 32rpx;\r\n background-color: #2573fb;\r\n color: #fff;\n}\n.talk-list .item.push .content::after {\r\n content: '';\r\n display: block;\r\n width: 0;\r\n height: 0;\r\n border-top: 16rpx solid transparent;\r\n border-bottom: 16rpx solid transparent;\r\n border-left: 20rpx solid #2573fb;\r\n position: absolute;\r\n top: 30rpx;\r\n right: -18rpx;\n}\n.bing-math {\r\n margin: 0 !important;\r\n padding: 0 !important;\n}\n.placeholder {\r\n width: 100vw;\r\n background-color: #1573fb;\n}\n.downsocket {\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n background-color: #2573fb !important;\r\n color: #fff !important;\n}\r\n", ""]); // Exports module.exports = exports; /***/ }), -/* 21 */ +/* 26 */ /*!*****************************************************!*\ !*** ./node_modules/css-loader/dist/runtime/api.js ***! \*****************************************************/ @@ -1165,7 +1346,7 @@ function toComment(sourceMap) { } /***/ }), -/* 22 */ +/* 27 */ /*!********************************************************************************************************!*\ !*** ./node_modules/@dcloudio/vue-cli-plugin-uni/packages/app-vue-style-loader/lib/addStylesClient.js ***! \********************************************************************************************************/ @@ -1175,7 +1356,7 @@ function toComment(sourceMap) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return addStylesClient; }); -/* harmony import */ var _listToStyles__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./listToStyles */ 23); +/* harmony import */ var _listToStyles__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./listToStyles */ 28); /* MIT License http://www.opensource.org/licenses/mit-license.php Author Tobias Koppers @sokra @@ -1433,7 +1614,7 @@ function processCss(css) { /***/ }), -/* 23 */ +/* 28 */ /*!*****************************************************************************************************!*\ !*** ./node_modules/@dcloudio/vue-cli-plugin-uni/packages/app-vue-style-loader/lib/listToStyles.js ***! \*****************************************************************************************************/ @@ -1473,7 +1654,7 @@ function listToStyles (parentId, list) { /***/ }), -/* 24 */ +/* 29 */ /*!***********************************************************!*\ !*** D:/里海数字乡村/xunfeiAi/pages/index/chat.vue?mpType=page ***! \***********************************************************/ @@ -1482,8 +1663,8 @@ function listToStyles (parentId, list) { "use strict"; __webpack_require__.r(__webpack_exports__); -/* harmony import */ var _chat_vue_vue_type_template_id_4e295d7e_mpType_page__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chat.vue?vue&type=template&id=4e295d7e&mpType=page */ 25); -/* harmony import */ var _chat_vue_vue_type_script_lang_js_mpType_page__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./chat.vue?vue&type=script&lang=js&mpType=page */ 27); +/* harmony import */ var _chat_vue_vue_type_template_id_4e295d7e_mpType_page__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chat.vue?vue&type=template&id=4e295d7e&mpType=page */ 30); +/* harmony import */ var _chat_vue_vue_type_script_lang_js_mpType_page__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./chat.vue?vue&type=script&lang=js&mpType=page */ 32); /* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _chat_vue_vue_type_script_lang_js_mpType_page__WEBPACK_IMPORTED_MODULE_1__) if(["default"].indexOf(__WEBPACK_IMPORT_KEY__) < 0) (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return _chat_vue_vue_type_script_lang_js_mpType_page__WEBPACK_IMPORTED_MODULE_1__[key]; }) }(__WEBPACK_IMPORT_KEY__)); /* harmony import */ var _HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/vue-loader/lib/runtime/componentNormalizer.js */ 15); @@ -1511,7 +1692,7 @@ component.options.__file = "pages/index/chat.vue" /* harmony default export */ __webpack_exports__["default"] = (component.exports); /***/ }), -/* 25 */ +/* 30 */ /*!*****************************************************************************************!*\ !*** D:/里海数字乡村/xunfeiAi/pages/index/chat.vue?vue&type=template&id=4e295d7e&mpType=page ***! \*****************************************************************************************/ @@ -1520,7 +1701,7 @@ component.options.__file = "pages/index/chat.vue" "use strict"; __webpack_require__.r(__webpack_exports__); -/* harmony import */ var _HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_preprocess_loader_index_js_ref_17_0_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_uni_app_loader_filter_modules_template_js_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_uni_app_loader_page_meta_js_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_index_js_vue_loader_options_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_uni_app_loader_view_style_js_chat_vue_vue_type_template_id_4e295d7e_mpType_page__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/webpack-preprocess-loader??ref--17-0!../../../../HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/webpack-uni-app-loader/filter-modules-template.js!../../../../HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/webpack-uni-app-loader/page-meta.js!../../../../HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/vue-loader/lib??vue-loader-options!../../../../HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/webpack-uni-app-loader/view/style.js!./chat.vue?vue&type=template&id=4e295d7e&mpType=page */ 26); +/* harmony import */ var _HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_preprocess_loader_index_js_ref_17_0_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_uni_app_loader_filter_modules_template_js_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_uni_app_loader_page_meta_js_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_index_js_vue_loader_options_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_uni_app_loader_view_style_js_chat_vue_vue_type_template_id_4e295d7e_mpType_page__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/webpack-preprocess-loader??ref--17-0!../../../../HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/webpack-uni-app-loader/filter-modules-template.js!../../../../HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/webpack-uni-app-loader/page-meta.js!../../../../HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/vue-loader/lib??vue-loader-options!../../../../HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/webpack-uni-app-loader/view/style.js!./chat.vue?vue&type=template&id=4e295d7e&mpType=page */ 31); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_preprocess_loader_index_js_ref_17_0_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_uni_app_loader_filter_modules_template_js_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_uni_app_loader_page_meta_js_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_index_js_vue_loader_options_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_uni_app_loader_view_style_js_chat_vue_vue_type_template_id_4e295d7e_mpType_page__WEBPACK_IMPORTED_MODULE_0__["render"]; }); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_preprocess_loader_index_js_ref_17_0_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_uni_app_loader_filter_modules_template_js_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_uni_app_loader_page_meta_js_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_index_js_vue_loader_options_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_uni_app_loader_view_style_js_chat_vue_vue_type_template_id_4e295d7e_mpType_page__WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; }); @@ -1532,7 +1713,7 @@ __webpack_require__.r(__webpack_exports__); /***/ }), -/* 26 */ +/* 31 */ /*!***************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/@dcloudio/vue-cli-plugin-uni/packages/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/@dcloudio/vue-cli-plugin-uni/packages/webpack-preprocess-loader??ref--17-0!./node_modules/@dcloudio/vue-cli-plugin-uni/packages/webpack-uni-app-loader/filter-modules-template.js!./node_modules/@dcloudio/vue-cli-plugin-uni/packages/webpack-uni-app-loader/page-meta.js!./node_modules/@dcloudio/vue-cli-plugin-uni/packages/vue-loader/lib??vue-loader-options!./node_modules/@dcloudio/vue-cli-plugin-uni/packages/webpack-uni-app-loader/view/style.js!D:/里海数字乡村/xunfeiAi/pages/index/chat.vue?vue&type=template&id=4e295d7e&mpType=page ***! \***************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ @@ -1598,7 +1779,7 @@ render._withStripped = true /***/ }), -/* 27 */ +/* 32 */ /*!***********************************************************************************!*\ !*** D:/里海数字乡村/xunfeiAi/pages/index/chat.vue?vue&type=script&lang=js&mpType=page ***! \***********************************************************************************/ @@ -1607,13 +1788,13 @@ render._withStripped = true "use strict"; __webpack_require__.r(__webpack_exports__); -/* harmony import */ var _HBuilderX_plugins_uniapp_cli_node_modules_babel_loader_lib_index_js_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_preprocess_loader_index_js_ref_13_1_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_uni_app_loader_view_script_js_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_uni_app_loader_using_components_js_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_index_js_vue_loader_options_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_uni_app_loader_view_style_js_chat_vue_vue_type_script_lang_js_mpType_page__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../HBuilderX/plugins/uniapp-cli/node_modules/babel-loader/lib!../../../../HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/webpack-preprocess-loader??ref--13-1!../../../../HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/webpack-uni-app-loader/view/script.js!../../../../HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/webpack-uni-app-loader/using-components.js!../../../../HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/vue-loader/lib??vue-loader-options!../../../../HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/webpack-uni-app-loader/view/style.js!./chat.vue?vue&type=script&lang=js&mpType=page */ 28); +/* harmony import */ var _HBuilderX_plugins_uniapp_cli_node_modules_babel_loader_lib_index_js_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_preprocess_loader_index_js_ref_13_1_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_uni_app_loader_view_script_js_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_uni_app_loader_using_components_js_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_index_js_vue_loader_options_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_uni_app_loader_view_style_js_chat_vue_vue_type_script_lang_js_mpType_page__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../HBuilderX/plugins/uniapp-cli/node_modules/babel-loader/lib!../../../../HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/webpack-preprocess-loader??ref--13-1!../../../../HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/webpack-uni-app-loader/view/script.js!../../../../HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/webpack-uni-app-loader/using-components.js!../../../../HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/vue-loader/lib??vue-loader-options!../../../../HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/webpack-uni-app-loader/view/style.js!./chat.vue?vue&type=script&lang=js&mpType=page */ 33); /* harmony import */ var _HBuilderX_plugins_uniapp_cli_node_modules_babel_loader_lib_index_js_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_preprocess_loader_index_js_ref_13_1_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_uni_app_loader_view_script_js_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_uni_app_loader_using_components_js_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_index_js_vue_loader_options_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_uni_app_loader_view_style_js_chat_vue_vue_type_script_lang_js_mpType_page__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_HBuilderX_plugins_uniapp_cli_node_modules_babel_loader_lib_index_js_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_preprocess_loader_index_js_ref_13_1_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_uni_app_loader_view_script_js_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_uni_app_loader_using_components_js_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_index_js_vue_loader_options_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_uni_app_loader_view_style_js_chat_vue_vue_type_script_lang_js_mpType_page__WEBPACK_IMPORTED_MODULE_0__); /* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _HBuilderX_plugins_uniapp_cli_node_modules_babel_loader_lib_index_js_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_preprocess_loader_index_js_ref_13_1_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_uni_app_loader_view_script_js_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_uni_app_loader_using_components_js_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_index_js_vue_loader_options_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_uni_app_loader_view_style_js_chat_vue_vue_type_script_lang_js_mpType_page__WEBPACK_IMPORTED_MODULE_0__) if(["default"].indexOf(__WEBPACK_IMPORT_KEY__) < 0) (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return _HBuilderX_plugins_uniapp_cli_node_modules_babel_loader_lib_index_js_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_preprocess_loader_index_js_ref_13_1_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_uni_app_loader_view_script_js_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_uni_app_loader_using_components_js_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_index_js_vue_loader_options_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_uni_app_loader_view_style_js_chat_vue_vue_type_script_lang_js_mpType_page__WEBPACK_IMPORTED_MODULE_0__[key]; }) }(__WEBPACK_IMPORT_KEY__)); /* harmony default export */ __webpack_exports__["default"] = (_HBuilderX_plugins_uniapp_cli_node_modules_babel_loader_lib_index_js_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_preprocess_loader_index_js_ref_13_1_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_uni_app_loader_view_script_js_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_uni_app_loader_using_components_js_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_index_js_vue_loader_options_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_uni_app_loader_view_style_js_chat_vue_vue_type_script_lang_js_mpType_page__WEBPACK_IMPORTED_MODULE_0___default.a); /***/ }), -/* 28 */ +/* 33 */ /*!******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib!./node_modules/@dcloudio/vue-cli-plugin-uni/packages/webpack-preprocess-loader??ref--13-1!./node_modules/@dcloudio/vue-cli-plugin-uni/packages/webpack-uni-app-loader/view/script.js!./node_modules/@dcloudio/vue-cli-plugin-uni/packages/webpack-uni-app-loader/using-components.js!./node_modules/@dcloudio/vue-cli-plugin-uni/packages/vue-loader/lib??vue-loader-options!./node_modules/@dcloudio/vue-cli-plugin-uni/packages/webpack-uni-app-loader/view/style.js!D:/里海数字乡村/xunfeiAi/pages/index/chat.vue?vue&type=script&lang=js&mpType=page ***! \******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ @@ -1638,7 +1819,7 @@ var _default = { exports.default = _default; /***/ }), -/* 29 */ +/* 34 */ /*!*******************************************************************!*\ !*** D:/里海数字乡村/xunfeiAi/App.vue?vue&type=style&index=0&lang=css& ***! \*******************************************************************/ @@ -1647,13 +1828,13 @@ exports.default = _default; "use strict"; __webpack_require__.r(__webpack_exports__); -/* harmony import */ var _HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_app_vue_style_loader_index_js_ref_6_oneOf_1_0_HBuilderX_plugins_uniapp_cli_node_modules_css_loader_dist_cjs_js_ref_6_oneOf_1_1_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_loaders_stylePostLoader_js_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_preprocess_loader_index_js_ref_6_oneOf_1_2_HBuilderX_plugins_uniapp_cli_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_3_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_index_js_vue_loader_options_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_uni_app_loader_view_style_js_App_vue_vue_type_style_index_0_lang_css___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/app-vue-style-loader??ref--6-oneOf-1-0!../../HBuilderX/plugins/uniapp-cli/node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/vue-loader/lib/loaders/stylePostLoader.js!../../HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/webpack-preprocess-loader??ref--6-oneOf-1-2!../../HBuilderX/plugins/uniapp-cli/node_modules/postcss-loader/src??ref--6-oneOf-1-3!../../HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/vue-loader/lib??vue-loader-options!../../HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/webpack-uni-app-loader/view/style.js!./App.vue?vue&type=style&index=0&lang=css& */ 30); +/* harmony import */ var _HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_app_vue_style_loader_index_js_ref_6_oneOf_1_0_HBuilderX_plugins_uniapp_cli_node_modules_css_loader_dist_cjs_js_ref_6_oneOf_1_1_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_loaders_stylePostLoader_js_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_preprocess_loader_index_js_ref_6_oneOf_1_2_HBuilderX_plugins_uniapp_cli_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_3_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_index_js_vue_loader_options_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_uni_app_loader_view_style_js_App_vue_vue_type_style_index_0_lang_css___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/app-vue-style-loader??ref--6-oneOf-1-0!../../HBuilderX/plugins/uniapp-cli/node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/vue-loader/lib/loaders/stylePostLoader.js!../../HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/webpack-preprocess-loader??ref--6-oneOf-1-2!../../HBuilderX/plugins/uniapp-cli/node_modules/postcss-loader/src??ref--6-oneOf-1-3!../../HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/vue-loader/lib??vue-loader-options!../../HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/webpack-uni-app-loader/view/style.js!./App.vue?vue&type=style&index=0&lang=css& */ 35); /* harmony import */ var _HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_app_vue_style_loader_index_js_ref_6_oneOf_1_0_HBuilderX_plugins_uniapp_cli_node_modules_css_loader_dist_cjs_js_ref_6_oneOf_1_1_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_loaders_stylePostLoader_js_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_preprocess_loader_index_js_ref_6_oneOf_1_2_HBuilderX_plugins_uniapp_cli_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_3_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_index_js_vue_loader_options_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_uni_app_loader_view_style_js_App_vue_vue_type_style_index_0_lang_css___WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_app_vue_style_loader_index_js_ref_6_oneOf_1_0_HBuilderX_plugins_uniapp_cli_node_modules_css_loader_dist_cjs_js_ref_6_oneOf_1_1_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_loaders_stylePostLoader_js_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_preprocess_loader_index_js_ref_6_oneOf_1_2_HBuilderX_plugins_uniapp_cli_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_3_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_index_js_vue_loader_options_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_uni_app_loader_view_style_js_App_vue_vue_type_style_index_0_lang_css___WEBPACK_IMPORTED_MODULE_0__); /* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_app_vue_style_loader_index_js_ref_6_oneOf_1_0_HBuilderX_plugins_uniapp_cli_node_modules_css_loader_dist_cjs_js_ref_6_oneOf_1_1_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_loaders_stylePostLoader_js_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_preprocess_loader_index_js_ref_6_oneOf_1_2_HBuilderX_plugins_uniapp_cli_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_3_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_index_js_vue_loader_options_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_uni_app_loader_view_style_js_App_vue_vue_type_style_index_0_lang_css___WEBPACK_IMPORTED_MODULE_0__) if(["default"].indexOf(__WEBPACK_IMPORT_KEY__) < 0) (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return _HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_app_vue_style_loader_index_js_ref_6_oneOf_1_0_HBuilderX_plugins_uniapp_cli_node_modules_css_loader_dist_cjs_js_ref_6_oneOf_1_1_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_loaders_stylePostLoader_js_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_preprocess_loader_index_js_ref_6_oneOf_1_2_HBuilderX_plugins_uniapp_cli_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_3_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_index_js_vue_loader_options_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_uni_app_loader_view_style_js_App_vue_vue_type_style_index_0_lang_css___WEBPACK_IMPORTED_MODULE_0__[key]; }) }(__WEBPACK_IMPORT_KEY__)); /* harmony default export */ __webpack_exports__["default"] = (_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_app_vue_style_loader_index_js_ref_6_oneOf_1_0_HBuilderX_plugins_uniapp_cli_node_modules_css_loader_dist_cjs_js_ref_6_oneOf_1_1_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_loaders_stylePostLoader_js_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_preprocess_loader_index_js_ref_6_oneOf_1_2_HBuilderX_plugins_uniapp_cli_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_3_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_index_js_vue_loader_options_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_uni_app_loader_view_style_js_App_vue_vue_type_style_index_0_lang_css___WEBPACK_IMPORTED_MODULE_0___default.a); /***/ }), -/* 30 */ +/* 35 */ /*!*************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/@dcloudio/vue-cli-plugin-uni/packages/app-vue-style-loader??ref--6-oneOf-1-0!./node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!./node_modules/@dcloudio/vue-cli-plugin-uni/packages/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/@dcloudio/vue-cli-plugin-uni/packages/webpack-preprocess-loader??ref--6-oneOf-1-2!./node_modules/postcss-loader/src??ref--6-oneOf-1-3!./node_modules/@dcloudio/vue-cli-plugin-uni/packages/vue-loader/lib??vue-loader-options!./node_modules/@dcloudio/vue-cli-plugin-uni/packages/webpack-uni-app-loader/view/style.js!D:/里海数字乡村/xunfeiAi/App.vue?vue&type=style&index=0&lang=css& ***! \*************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ @@ -1663,18 +1844,18 @@ __webpack_require__.r(__webpack_exports__); // style-loader: Adds some css to the DOM by adding a