From 724e74c6545f8895c35cebe5dd56dfda7cc95adb Mon Sep 17 00:00:00 2001
From: jt <jt@activesoft.com.cn>
Date: 星期六, 20 七月 2024 15:41:02 +0800
Subject: [PATCH] test

---
 unpackage/dist/dev/app-plus/app-service.js |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/unpackage/dist/dev/app-plus/app-service.js b/unpackage/dist/dev/app-plus/app-service.js
index 925e79d..e3a1adc 100644
--- a/unpackage/dist/dev/app-plus/app-service.js
+++ b/unpackage/dist/dev/app-plus/app-service.js
@@ -35233,7 +35233,7 @@
 /***/ (function(module, exports, __webpack_require__) {
 
 "use strict";
-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 _regenerator = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/regenerator */ 57));\nvar _asyncToGenerator2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ 59));\nvar _base = _interopRequireDefault(__webpack_require__(/*! ../../components/js-base64/base64.js */ 67));\nvar _utils = _interopRequireDefault(__webpack_require__(/*! @/js/utils.js */ 61));\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//\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//\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//\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//\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  modules: {\n    Base64: _base.default\n  },\n  onNavigationBarButtonTap: function onNavigationBarButtonTap(e) {\n    //  \tconsole.log(e);\n    // e.text=\"\\ue924\";\n    // console.log(e.fontSize);\n    if (this.isFilter) this.isFilter = false;else this.isFilter = true;\n  },\n  onBackPress: function onBackPress(e) {\n    // console.log(\"鐩戝惉杩斿洖鎸夐挳浜嬩欢\",e);\n    var eventChannel = this.$scope.eventChannel;\n    // const eventChannel = this.getOpenerEventChannel();\n    eventChannel.emit('view_3201', \"\");\n    // uni.navigateBack({\n    // \tdelta:1 ,//杩斿洖灞傛暟锛�鍒欎笂涓婇〉\n    // });\n    // return true;\n  },\n  data: function data() {\n    return {\n      title: this.translateSys('add2'),\n      isFilter: true,\n      param: {},\n      focusMateria: false,\n      styledef: {},\n      head_styledef: {\n        form: {\n          items: []\n        }\n      },\n      detail1_styledef: {},\n      detail1StyleDefList: [],\n      detail2_styledef: {},\n      detail2StyleDefList: [],\n      items: [],\n      active_id: '',\n      activelist: [],\n      where: '',\n      wheres: '',\n      orderby: '',\n      query_id: '',\n      pageindex: 1,\n      page_size: 10,\n      page_count: 0,\n      scrollTop: 0,\n      old: {\n        scrollTop: 0\n      },\n      isScroll: true,\n      //鑾峰彇鏁版嵁绫荤殑HTML椤甸潰\n      ListHtml_Panel: \"\",\n      ListPageHtml_Show: {\n        name: \"\",\n        event: {\n          id: \"\",\n          name: \"\"\n        }\n      }\n    };\n  },\n  onLoad: function onLoad(options) {\n    var _this = this;\n    return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {\n      var _this$param$ListPage$;\n      return _regenerator.default.wrap(function _callee$(_context) {\n        while (1) {\n          switch (_context.prev = _context.next) {\n            case 0:\n              // console.log(options);\n              uni.setNavigationBarTitle({\n                title: options.titlename\n              }); //璁剧疆椤堕儴鏍囬 \n              _this.$data.title = options.titlename;\n              _this.$data.param = JSON.parse(options.param);\n              _this.styledef = {};\n              _this.head_styledef = {\n                form: {\n                  items: []\n                }\n              };\n              _this.detail1_styledef = {};\n              _this.detail1StyleDefList = [];\n              _this.detail2_styledef = {};\n              _this.detail2StyleDefList = [];\n              _this.ListHtml_Panel = \"\";\n              _this.ListPageHtml_Show = {\n                name: \"\",\n                event: {\n                  id: \"\",\n                  name: \"\"\n                }\n              };\n              _this.items = [];\n              _this.active_id = '';\n              _this.activelist = [];\n              if (!(((_this$param$ListPage$ = _this.param.ListPage.ListItem_UIDef) === null || _this$param$ListPage$ === void 0 ? void 0 : _this$param$ListPage$.ui_type) == \"HTML椤甸潰\")) {\n                _context.next = 19;\n                break;\n              }\n              _context.next = 17;\n              return _this.Html_UIstyleGetInfo(_this.param.DataCls.id, _this.param.ListPage.ListItem_UIDef.id);\n            case 17:\n              _context.next = 21;\n              break;\n            case 19:\n              _context.next = 21;\n              return _this.Detail1_UIstyleGetInfo(_this.param.DataCls.id, _this.param.ListPage.ListItem_UIDef.id);\n            case 21:\n              _context.next = 23;\n              return _this.initial(options.paramValue);\n            case 23:\n            case \"end\":\n              return _context.stop();\n          }\n        }\n      }, _callee);\n    }))();\n  },\n  methods: {\n    //\n    setData: function setData(obj) {\n      var that = this;\n      var keys = [];\n      var val, data;\n      Object.keys(obj).forEach(function (key) {\n        keys = key.split(\".\");\n        val = obj[key];\n        data = that.$data;\n        keys.forEach(function (key2, index) {\n          if (index + 1 == keys.length) {\n            that.$set(data, key2, val);\n          } else {\n            if (!data[key2]) {\n              that.$set(data, key2, {});\n            }\n          }\n          data = data[key2];\n        });\n      });\n    },\n    //鍒濆鍖朶n    initial: function initial(paramValue) {\n      var _this2 = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee6() {\n        var _this2$$data$head_sty, _this2$$data$head_sty2, attrs;\n        return _regenerator.default.wrap(function _callee6$(_context6) {\n          while (1) {\n            switch (_context6.prev = _context6.next) {\n              case 0:\n                _this2.isFilter = true;\n                if (_this2.param.ShowFilter) _this2.isFilter = false;\n                //鑾峰彇鏁版嵁绫荤殑鑷畾涔夎〃鍗曞弬鏁癨n                if (!_this2.param.Query_Panel) {\n                  _context6.next = 6;\n                  break;\n                }\n                _context6.next = 5;\n                return _this2.Head_UIStyleGetInfo(_this2.param.DataCls.id, _this2.param.Query_Panel.id);\n              case 5:\n                //浼犲叆鍙傛暟鍊糪n                if (paramValue) {\n                  attrs = paramValue.attrs || [];\n                  (((_this2$$data$head_sty = _this2.$data.head_styledef) === null || _this2$$data$head_sty === void 0 ? void 0 : (_this2$$data$head_sty2 = _this2$$data$head_sty.form) === null || _this2$$data$head_sty2 === void 0 ? void 0 : _this2$$data$head_sty2.items) || []).forEach( /*#__PURE__*/function () {\n                    var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee5(ele, index) {\n                      return _regenerator.default.wrap(function _callee5$(_context5) {\n                        while (1) {\n                          switch (_context5.prev = _context5.next) {\n                            case 0:\n                              if (ele.name != \"Layout\") {\n                                attrs.forEach( /*#__PURE__*/function () {\n                                  var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(ele2, index2) {\n                                    return _regenerator.default.wrap(function _callee2$(_context2) {\n                                      while (1) {\n                                        switch (_context2.prev = _context2.next) {\n                                          case 0:\n                                            if (ele.fieldId == ele2.name) {\n                                              ele.value = ele2.value;\n                                            }\n                                          case 1:\n                                          case \"end\":\n                                            return _context2.stop();\n                                        }\n                                      }\n                                    }, _callee2);\n                                  }));\n                                  return function (_x3, _x4) {\n                                    return _ref2.apply(this, arguments);\n                                  };\n                                }());\n                              } else {\n                                ele.setting.colList.forEach( /*#__PURE__*/function () {\n                                  var _ref3 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4(col) {\n                                    return _regenerator.default.wrap(function _callee4$(_context4) {\n                                      while (1) {\n                                        switch (_context4.prev = _context4.next) {\n                                          case 0:\n                                            if (col) {\n                                              attrs.forEach( /*#__PURE__*/function () {\n                                                var _ref4 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3(ele2, index2) {\n                                                  return _regenerator.default.wrap(function _callee3$(_context3) {\n                                                    while (1) {\n                                                      switch (_context3.prev = _context3.next) {\n                                                        case 0:\n                                                          if (col.fieldId == ele2.name) {\n                                                            col.value = ele2.value;\n                                                          }\n                                                        case 1:\n                                                        case \"end\":\n                                                          return _context3.stop();\n                                                      }\n                                                    }\n                                                  }, _callee3);\n                                                }));\n                                                return function (_x6, _x7) {\n                                                  return _ref4.apply(this, arguments);\n                                                };\n                                              }());\n                                            }\n                                          case 1:\n                                          case \"end\":\n                                            return _context4.stop();\n                                        }\n                                      }\n                                    }, _callee4);\n                                  }));\n                                  return function (_x5) {\n                                    return _ref3.apply(this, arguments);\n                                  };\n                                }());\n                              }\n                            case 1:\n                            case \"end\":\n                              return _context5.stop();\n                          }\n                        }\n                      }, _callee5);\n                    }));\n                    return function (_x, _x2) {\n                      return _ref.apply(this, arguments);\n                    };\n                  }());\n                }\n              case 6:\n                _this2.orderby = _this2.param.Order ? _this2.param.Order : 'T_CREATE Desc';\n                if (!_this2.param.Query_Event) {\n                  _context6.next = 12;\n                  break;\n                }\n                _context6.next = 10;\n                return _this2.onSearChange(_this2.param.DataCls.id, _this2.param.Query_Event.id);\n              case 10:\n                _context6.next = 18;\n                break;\n              case 12:\n                _this2.wheres = _this2.param.Condition;\n                _this2.pageindex = 1;\n                _this2.page_size = 3;\n                _this2.query_id = \"\";\n                _context6.next = 18;\n                return _this2.loadDataGetList();\n              case 18:\n              case \"end\":\n                return _context6.stop();\n            }\n          }\n        }, _callee6);\n      }))();\n    },\n    //婊氬姩鍒板簳閮ㄥ悗鎳掑姞杞芥暟鎹甛n    scrolltolower: function scrolltolower(e) {\n      var _this3 = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee7() {\n        return _regenerator.default.wrap(function _callee7$(_context7) {\n          while (1) {\n            switch (_context7.prev = _context7.next) {\n              case 0:\n                if (!_this3.isScroll) {\n                  _context7.next = 7;\n                  break;\n                }\n                if (!(_this3.page_count == _this3.pageindex)) {\n                  _context7.next = 3;\n                  break;\n                }\n                return _context7.abrupt(\"return\");\n              case 3:\n                _this3.pageindex += 1;\n                if (_this3.where || _this3.page_count == 1) {\n                  _this3.query_id = \"\";\n                  _this3.detail1StyleDefList = [];\n                }\n                _context7.next = 7;\n                return _this3.loadDataGetList();\n              case 7:\n              case \"end\":\n                return _context7.stop();\n            }\n          }\n        }, _callee7);\n      }))();\n    },\n    scroll: function scroll(e) {\n      // console.log(e.detail.scrollTop)\n      this.old.scrollTop = e.detail.scrollTop;\n    },\n    Head_UIStyleGetInfo: function Head_UIStyleGetInfo(class_id, style_id) {\n      var _this4 = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee9() {\n        var $this, dataInfo;\n        return _regenerator.default.wrap(function _callee9$(_context9) {\n          while (1) {\n            switch (_context9.prev = _context9.next) {\n              case 0:\n                //鑾峰彇鑷畾涔夎〃鍗曟牱寮廫n                $this = _this4;\n                dataInfo = {\n                  class_id: class_id,\n                  ui_style_id: style_id\n                }; // console.log(dataInfo);\n                _this4.$store.dispatch('UIStyleGetInfo', dataInfo).then(function (ret) {\n                  // console.log(ret);\n                  if (ret.err_code == 0) {\n                    var styledef = \"\";\n                    if (ret.result.style_def) {\n                      //mobox2鐨剆tyle_def鏄痡son瀛楃涓瞈n                      styledef = ret.result.style_def.replace(/\\\\/g, \"\");\n                      //mobox3鐨剆tyle_def鏄痓ase64瀛楃涓瞈n                      if (!ret.result.style_def.includes('\"')) styledef = _base.default.decode(ret.result.style_def);\n                    }\n                    $this.$data.head_styledef = ret.result.style_def ? JSON.parse(styledef) : {};\n                    // this.form = this.head_styledef.form.model;\n                    // console.log($this.$data.head_styledef);\n                    $this.head_styledef.form.items.forEach( /*#__PURE__*/function () {\n                      var _ref5 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee8(ele, index) {\n                        return _regenerator.default.wrap(function _callee8$(_context8) {\n                          while (1) {\n                            switch (_context8.prev = _context8.next) {\n                              case 0:\n                                __f__(\"log\", ele.useDict, \" at pages/modal/3200.vue:446\");\n                                if (!(ele.useDict == true)) {\n                                  _context8.next = 4;\n                                  break;\n                                }\n                                _context8.next = 4;\n                                return _this4.DictGetInfo(ele.bind.dict, index, 'mast');\n                              case 4:\n                              case \"end\":\n                                return _context8.stop();\n                            }\n                          }\n                        }, _callee8);\n                      }));\n                      return function (_x8, _x9) {\n                        return _ref5.apply(this, arguments);\n                      };\n                    }());\n                  } else {\n                    uni.showModal({\n                      title: _this4.translateSys(\"error\") + \"1\",\n                      content: ret.err_msg,\n                      showCancel: false,\n                      confirmText: _this4.translateSys(\"cancel\")\n                    });\n                  }\n                }).catch(function (ex) {\n                  // console.log(ex);\n                  uni.showModal({\n                    title: _this4.translateSys(\"error\") + \"1.1\",\n                    content: ex.errMsg,\n                    showCancel: false,\n                    confirmText: _this4.translateSys(\"cancel\")\n                  });\n                });\n              case 3:\n              case \"end\":\n                return _context9.stop();\n            }\n          }\n        }, _callee9);\n      }))();\n    },\n    Detail1_UIstyleGetInfo: function Detail1_UIstyleGetInfo(class_id, style_id) {\n      var _this5 = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee10() {\n        var $this, dataInfo;\n        return _regenerator.default.wrap(function _callee10$(_context10) {\n          while (1) {\n            switch (_context10.prev = _context10.next) {\n              case 0:\n                //鑾峰彇鑷畾涔夎〃鍗曟牱寮廫n                $this = _this5;\n                dataInfo = {\n                  class_id: class_id,\n                  ui_style_id: style_id\n                };\n                _this5.$store.dispatch('UIStyleGetInfo', dataInfo).then(function (ret) {\n                  __f__(\"log\", ret, \" at pages/modal/3200.vue:478\");\n                  if (ret.err_code == 0) {\n                    var styledef = \"\";\n                    if (ret.result.style_def) {\n                      //mobox2鐨剆tyle_def鏄痡son瀛楃涓瞈n                      styledef = ret.result.style_def.replace(/\\\\/g, \"\");\n                      //mobox3鐨剆tyle_def鏄痓ase64瀛楃涓瞈n                      if (!ret.result.style_def.includes('\"')) styledef = _base.default.decode(ret.result.style_def);\n                    }\n                    $this.$data.detail1_styledef = ret.result.style_def ? JSON.parse(styledef) : {};\n                    $this.$data.detail1_styledef.SelBut_Checked = false;\n                    // console.log($this.$data.detail1_styledef);\n                    // $this.$data.detail1StyleDefList.push($this.$data.detail1_styledef);\n                    // var aa = JSON.stringify(this.detail1_styledef);\n                    // $this.$data.detail1StyleDefList.push(JSON.parse(aa));\n                    // console.log($this.$data.detail1StyleDefList);\n                  } else {\n                    uni.showModal({\n                      title: _this5.translateSys(\"error\") + \"2\",\n                      content: ret.err_msg,\n                      showCancel: false,\n                      confirmText: _this5.translateSys(\"cancel\")\n                    });\n                  }\n                }).catch(function (ex) {\n                  // console.log(ex);\n                  uni.showModal({\n                    title: _this5.translateSys(\"error\") + \"2.1\",\n                    content: ex.errMsg,\n                    showCancel: false,\n                    confirmText: _this5.translateSys(\"cancel\")\n                  });\n                });\n              case 3:\n              case \"end\":\n                return _context10.stop();\n            }\n          }\n        }, _callee10);\n      }))();\n    },\n    Html_UIstyleGetInfo: function Html_UIstyleGetInfo(class_id, style_id) {\n      var _this6 = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee11() {\n        var $this, dataInfo;\n        return _regenerator.default.wrap(function _callee11$(_context11) {\n          while (1) {\n            switch (_context11.prev = _context11.next) {\n              case 0:\n                //鑾峰彇鑷畾涔夎〃鍗曟牱寮廫n                $this = _this6;\n                dataInfo = {\n                  class_id: class_id,\n                  ui_style_id: style_id\n                };\n                _this6.$store.dispatch('UIStyleGetInfo', dataInfo).then(function (ret) {\n                  // console.log(ret);\n                  if (ret.err_code == 0) {\n                    var styledef = \"\";\n                    if (ret.result.style_def) {\n                      //mobox2鐨剆tyle_def鏄痡son瀛楃涓瞈n                      styledef = ret.result.style_def.replace(/\\\\/g, \"\");\n                      //mobox3鐨剆tyle_def鏄痓ase64瀛楃涓瞈n                      if (!ret.result.style_def.includes('\"')) styledef = _base.default.decode(ret.result.style_def);\n                    }\n                    // console.log(styledef);\n                    $this.ListPageHtml_Show = ret.result.style_def ? JSON.parse(styledef) : {};\n                    // console.log($this.ListPageHtml_Show);\n                  } else {\n                    uni.showModal({\n                      title: _this6.translateSys(\"error\") + \"10\",\n                      content: ret.err_msg,\n                      showCancel: false,\n                      confirmText: _this6.translateSys(\"cancel\")\n                    });\n                  }\n                }).catch(function (ex) {\n                  // console.log(ex);\n                  uni.showModal({\n                    title: _this6.translateSys(\"error\") + \"10.1\",\n                    content: ex.errMsg,\n                    showCancel: false,\n                    confirmText: _this6.translateSys(\"cancel\")\n                  });\n                });\n              case 3:\n              case \"end\":\n                return _context11.stop();\n            }\n          }\n        }, _callee11);\n      }))();\n    },\n    DictGetInfo: function DictGetInfo(dict, index, type) {\n      var _this7 = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee13() {\n        var $this, dataInfo;\n        return _regenerator.default.wrap(function _callee13$(_context13) {\n          while (1) {\n            switch (_context13.prev = _context13.next) {\n              case 0:\n                //Mobox3寰楀埌寰楀埌瀛楀吀淇℃伅瀛楀吀椤瑰垪琛╘n                _this7.data = [];\n                $this = _this7;\n                dataInfo = {\n                  dict_id: dict.id,\n                  dict_name: dict.name\n                }; // console.log(dataInfo);\n                _this7.$store.dispatch('DictGetInfo', dataInfo).then( /*#__PURE__*/function () {\n                  var _ref6 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee12(success) {\n                    var list, itemName, attr, head_styledef;\n                    return _regenerator.default.wrap(function _callee12$(_context12) {\n                      while (1) {\n                        switch (_context12.prev = _context12.next) {\n                          case 0:\n                            __f__(\"log\", success, \" at pages/modal/3200.vue:563\");\n                            if (success.err_code == 0) {\n                              if (type == 'mast') {\n                                list = [];\n                                itemName = '';\n                                success.result.dict_item_list.forEach(function (item) {\n                                  if (item.is_default == '1') itemName = item.name;\n                                  list.push({\n                                    text: item.value,\n                                    value: item.name\n                                  });\n                                });\n                                //鏈夐粯璁ゅ�锛屾樉绀洪粯璁ゅ�\n                                if (itemName) {\n                                  $this.head_styledef.form.items[index].value = itemName;\n                                  attr = $this.head_styledef.form.items[index].fieldId;\n                                  $this.head_styledef.form.model[attr] = itemName;\n                                }\n                                $this.head_styledef.form.items[index].dict = list;\n                                head_styledef = JSON.parse(JSON.stringify($this.head_styledef));\n                                $this.head_styledef = [];\n                                $this.head_styledef = head_styledef;\n                              } else {\n                                // $this.$data.subClassAttrList[index].attr_list[key].dictitem=success.result;\n                                // this.$store.commit(\"subClassAttrList\", $this.$data.subClassAttrList);\n                              }\n                            } else {\n                              uni.showModal({\n                                title: _this7.translateSys(\"error\") + \"3.1\",\n                                content: success.err_msg,\n                                showCancel: false,\n                                confirmText: _this7.translateSys(\"cancel\")\n                              });\n                            }\n                          case 2:\n                          case \"end\":\n                            return _context12.stop();\n                        }\n                      }\n                    }, _callee12);\n                  }));\n                  return function (_x10) {\n                    return _ref6.apply(this, arguments);\n                  };\n                }()).catch(function (ex) {\n                  // console.log(ex);\n                  uni.showModal({\n                    title: _this7.translateSys(\"error\") + \"3\",\n                    content: ex.errMsg,\n                    showCancel: false,\n                    confirmText: _this7.translateSys(\"cancel\")\n                  });\n                });\n              case 4:\n              case \"end\":\n                return _context13.stop();\n            }\n          }\n        }, _callee13);\n      }))();\n    },\n    // 鎵ц鏌ヨ浜嬩欢\n    onSearChange: function onSearChange(clsid, eventid) {\n      var _this8 = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee14() {\n        var $this, dataInfo, tip;\n        return _regenerator.default.wrap(function _callee14$(_context14) {\n          while (1) {\n            switch (_context14.prev = _context14.next) {\n              case 0:\n                try {\n                  if (eventid) {\n                    $this = _this8;\n                    dataInfo = {\n                      ed_type: 0,\n                      start_transaction: true,\n                      class_id: clsid,\n                      event_id: eventid\n                    };\n                    _this8.$store.dispatch('runCustomEvent', dataInfo).then(function (ret) {\n                      // console.log(ret);\n                      if (ret.err_code == 0) {\n                        var result = ret.result;\n                        if (result.ret != 0) {\n                          var tip = result.err_info ? typeof result.err_info == 'string' ? result.err_info : result.err_info.join('<br/>') : '';\n                          if (result.ret == 801) {\n                            if (_this8.param.Only_Script_Error) {\n                              var pos = tip.indexOf(\"锛歕");\n                              if (pos > -1) tip = tip.substring(pos + 1);\n                            }\n                            uni.showModal({\n                              title: _this8.translateSys(\"tip\"),\n                              content: tip,\n                              showCancel: false,\n                              confirmText: _this8.translateSys(\"cancel\")\n                            });\n                          } else uni.showModal({\n                            title: _this8.translateSys(\"tip\"),\n                            content: tip + ',' + _this8.translateSys('tip') + ':' + result.ret,\n                            showCancel: false,\n                            confirmText: _this8.translateSys(\"cancel\")\n                          });\n                          return false;\n                        } else {\n                          var tip = result.info ? typeof result.info == 'string' ? result.info : result.info.join('<br/>') : '';\n                          if (tip) uni.showModal({\n                            title: _this8.translateSys(\"tip\"),\n                            content: tip,\n                            showCancel: false,\n                            confirmText: _this8.translateSys(\"cancel\")\n                          });\n                          if (result.result_type == 0 && result.action) {\n                            result.action.forEach(function (item) {\n                              if (item.action_type == \"set_query_condition\") {\n                                var value = item.value;\n                                $this.wheres = value.condition;\n                                $this.orderby = value.order ? value.order : $this.orderby;\n                                $this.pageindex = 1;\n                                $this.query_id = \"\";\n                                $this.detail1StyleDefList = [];\n                                $this.loadDataGetList();\n                              }\n                            });\n                          } else {\n                            // this.detail2StyleDefList=[];\n                            if (result.info) {\n                              uni.showModal({\n                                title: _this8.translateSys(\"tip\"),\n                                content: result.info,\n                                showCancel: false,\n                                confirmText: _this8.translateSys(\"cancel\")\n                              });\n                            }\n                          }\n                        }\n                      } else {\n                        uni.showModal({\n                          title: _this8.translateSys(\"error\") + \"4\",\n                          content: ret.err_msg,\n                          showCancel: false,\n                          confirmText: _this8.translateSys(\"cancel\")\n                        });\n                      }\n                    }).catch(function (ex) {\n                      // console.log(ex);\n                      uni.showModal({\n                        title: _this8.translateSys(\"error\") + \"4.1\",\n                        content: ex.errMsg,\n                        showCancel: false,\n                        confirmText: _this8.translateSys(\"cancel\")\n                      });\n                    });\n                  }\n                } catch (ex) {\n                  tip = typeof ex == \"string\" ? ex : ex.message;\n                  uni.showModal({\n                    title: _this8.translateSys(\"error\") + \"4.2\",\n                    content: _this8.translate(\"execute_query_event_failed\") + _this8.translateSys(\"comma\") + tip,\n                    showCancel: false,\n                    confirmText: _this8.translateSys(\"cancel\")\n                  });\n                }\n              case 1:\n              case \"end\":\n                return _context14.stop();\n            }\n          }\n        }, _callee14);\n      }))();\n    },\n    //鏌ヨ鏁版嵁绫绘暟鎹俊鎭痋n    loadDataGetList: function loadDataGetList() {\n      var _this9 = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee15() {\n        var condition, $this, dataInfo, tip;\n        return _regenerator.default.wrap(function _callee15$(_context15) {\n          while (1) {\n            switch (_context15.prev = _context15.next) {\n              case 0:\n                try {\n                  uni.showLoading({\n                    title: _this9.translateSys(\"loading\"),\n                    mask: true\n                  });\n                  //鏉′欢鏌ヨ\n                  condition = _this9.wheres;\n                  if (_this9.where) {\n                    if (condition) condition += ' and ';\n                    condition += _this9.where;\n                  }\n                  // console.log(condition);\n                  // console.log(this.orderby);\n                  $this = _this9;\n                  dataInfo = {\n                    class_id: _this9.param.DataCls.id,\n                    attrs: [],\n                    condition: _this9.toWhereBase64String(\"\" + condition + \"\"),\n                    prj_rel_type: \"\",\n                    order_by: _this9.orderby,\n                    page_size: _this9.page_size,\n                    page: _this9.pageindex,\n                    query_id: _this9.query_id\n                  };\n                  _this9.$store.dispatch('dataObjQuery', dataInfo).then(function (ret) {\n                    __f__(\"log\", ret, \" at pages/modal/3200.vue:741\");\n                    uni.hideLoading();\n                    if (ret.err_code == 0) {\n                      // var list=[];\n                      $this.query_id = '';\n                      if (ret.result) {\n                        $this.page_count = ret.result.page_count;\n                        if (ret.result.page_count > 1) $this.query_id = ret.result.query_id;\n                        // console.log($this.ListPageHtml_Show.event);\n                        if ($this.ListPageHtml_Show.event.id) {\n                          ret.result.obj_list.forEach(function (obj) {\n                            var info = {\n                              id: obj.id\n                            };\n                            obj.attr_list.forEach(function (attr) {\n                              info[attr.name] = attr.value;\n                            });\n                            var detailStyle = {\n                              SelBut_Checked: false,\n                              form: {},\n                              info: info\n                            };\n                            detailStyle.form.htmlobjId = obj.id ? obj.id.replace(/-/g, '').replace('{', '').replace('}', '') : 'null';\n                            detailStyle.form.objId = obj.id;\n                            detailStyle.form.attrs = obj.attr_list;\n                            $this.detail1StyleDefList.push(detailStyle);\n                            $this.activelist.push({\n                              active: false\n                            });\n                          });\n                          // console.log(this.detail1StyleDefList);\n                          var jsonlist = [];\n                          $this.detail1StyleDefList.forEach(function (attr) {\n                            jsonlist.push({\n                              id: attr.info.id,\n                              attrs: Object.keys(attr.info).map(function (a) {\n                                return {\n                                  attr: a,\n                                  value: attr.info[a] || \"\"\n                                };\n                              })\n                            });\n                          });\n                          // console.log(jsonlist);\n                          var data_json = _base.default.encode(JSON.stringify(jsonlist));\n                          var eventid = $this.ListPageHtml_Show.event.id;\n                          if (!$this.ListPageHtml_Show.event.id.includes('{')) eventid = '{' + $this.ListPageHtml_Show.event.id + '}';\n                          //HTML椤甸潰浜嬩欢\n                          $this.runCustomEvent({\n                            ed_type: 0,\n                            start_transaction: true,\n                            class_id: $this.param.DataCls.id,\n                            event_id: eventid,\n                            data_json: data_json\n                          });\n                        } else {\n                          // $this.detail1StyleDefList=[];\n                          ret.result.obj_list.forEach(function (obj) {\n                            var styleStr = JSON.stringify($this.detail1_styledef);\n                            var detailStyle = JSON.parse(styleStr);\n                            // var info ={\n                            //     S_ID:obj.id,\n                            // };\n                            obj.attr_list.forEach(function (attr) {\n                              // info[attr.name]=attr.value;\n                              detailStyle.form.items.forEach(function (ele) {\n                                if (ele.name != 'Layout') {\n                                  if (ele.fieldId == attr.name) ele.value = attr.value;\n                                } else if (ele.name == 'Layout') {\n                                  ele.setting.colList.forEach(function (col) {\n                                    if (col) {\n                                      if (col.fieldId == attr.name) col.value = attr.value;\n                                    }\n                                  });\n                                }\n                              });\n                            });\n                            detailStyle.form.htmlobjId = obj.id ? obj.id.replace(/-/g, '').replace('{', '').replace('}', '') : 'null';\n                            detailStyle.form.objId = obj.id;\n                            detailStyle.form.attrs = obj.attr_list;\n                            $this.detail1StyleDefList.push(detailStyle);\n                            $this.activelist.push({\n                              active: false\n                            });\n                            //list.push(info);\n                          });\n                        }\n\n                        // 瑙e喅view灞備笉鍚屾鐨勯棶棰榎n                        // $this.scrollTop = $this.old.scrollTop;\n                        $this.isScroll = false;\n                        setTimeout(function () {\n                          $this.isScroll = true;\n                        }, 1000);\n                        // console.log($this.detail1StyleDefList);\n                      }\n                    } else {\n                      uni.showModal({\n                        title: _this9.translateSys(\"error\") + \"5\",\n                        content: ret.err_msg,\n                        showCancel: false,\n                        confirmText: _this9.translateSys(\"cancel\")\n                      });\n                    }\n                  }).catch(function (ex) {\n                    // console.log(ex);\n                    uni.showModal({\n                      title: _this9.translateSys(\"error\") + \"5.1\",\n                      content: ex.errMsg,\n                      showCancel: false,\n                      confirmText: _this9.translateSys(\"cancel\")\n                    });\n                  });\n                } catch (ex) {\n                  tip = typeof ex == \"string\" ? ex : ex.message;\n                  uni.showModal({\n                    title: _this9.translateSys(\"error\") + \"5.2\",\n                    content: tip,\n                    showCancel: false,\n                    confirmText: _this9.translateSys(\"cancel\")\n                  });\n                }\n              case 1:\n              case \"end\":\n                return _context15.stop();\n            }\n          }\n        }, _callee15);\n      }))();\n    },\n    //鍒锋柊\n    Refresh: function Refresh(value) {\n      //鍒锋柊褰撳墠椤甸潰\n      this.initial();\n      // uni.redirectTo({\n      // \turl:'../modal/3200?param='+JSON.stringify(this.$data.param)+\"&titlename=\"+this.$data.title,\n      // });\n    },\n    //鐐瑰嚮鏄剧ず娴忚瀵硅薄鏄剧ず椤甸潰\n    onViewPageClick: function onViewPageClick(style) {\n      var _this10 = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee16() {\n        var $this;\n        return _regenerator.default.wrap(function _callee16$(_context16) {\n          while (1) {\n            switch (_context16.prev = _context16.next) {\n              case 0:\n                if (_this10.param.ViewPage) {\n                  if (_this10.param.ViewPage.View_UIDef) {\n                    _this10.styledef = style;\n                    $this = _this10;\n                    uni.navigateTo({\n                      url: '../modal/3200_view?param=' + JSON.stringify(_this10.param) + \"&titlename=\" + _this10.title + \"&style=\" + JSON.stringify(style),\n                      events: {\n                        // 涓烘寚瀹氫簨浠舵坊鍔犱竴涓洃鍚櫒锛岃幏鍙栬鎵撳紑椤甸潰浼犻�鍒板綋鍓嶉〉闈㈢殑鏁版嵁\n                        ExitViewEvent: function ExitViewEvent(data) {\n                          var _$this$param$ViewPage;\n                          __f__(\"log\", data, \" at pages/modal/3200.vue:895\");\n                          //閫�嚭椤甸潰鍚庝簨浠禱n                          var eventid = (_$this$param$ViewPage = $this.param.ViewPage.Exit_View_Event) === null || _$this$param$ViewPage === void 0 ? void 0 : _$this$param$ViewPage.id;\n                          if (eventid) {\n                            try {\n                              var obj_attr = {\n                                'S_ID': $this.styledef.form.objId\n                              };\n                              $this.styledef.form.attrs.forEach(function (attr) {\n                                obj_attr[attr.name] = attr.value;\n                              });\n                              // console.log(obj_attr);\n                              var input_param = _base.default.encode(JSON.stringify(obj_attr));\n                              $this.runCustomEvent({\n                                ed_type: 0,\n                                start_transaction: true,\n                                class_id: $this.param.DataCls.id,\n                                event_id: eventid,\n                                data_obj_id: $this.styledef.form.objId,\n                                obj_attr: obj_attr,\n                                input_param: input_param\n                              });\n                            } catch (ex) {\n                              var tip = typeof ex == \"string\" ? ex : ex.message;\n                              uni.showModal({\n                                title: this.translateSys(\"error\"),\n                                content: tip,\n                                showCancel: false,\n                                confirmText: this.translateSys(\"cancel\")\n                              });\n                            }\n                          }\n                        }\n                      }\n                    });\n                  }\n                }\n              case 1:\n              case \"end\":\n                return _context16.stop();\n            }\n          }\n        }, _callee16);\n      }))();\n    },\n    //鐐瑰嚮鎸夐挳\n    onBtnClick: function onBtnClick(btn, style) {\n      var that = this;\n      if (btn.Prompt) {\n        uni.showModal({\n          title: this.translateSys(\"tip\"),\n          content: btn.PromptContent || this.translate(\"are_you_sure\"),\n          success: function success(res) {\n            if (res.confirm) {\n              that.onButtonClicked(btn, style);\n              // } else if (res.cancel) {\n              // \tconsole.log('鐢ㄦ埛鐐瑰嚮鍙栨秷');\n            }\n          }\n        });\n      } else that.onButtonClicked(btn, style);\n    },\n    //鐐瑰嚮鎸夐挳鍒楄〃\n    actionSheetTap: function actionSheetTap() {\n      var _this11 = this;\n      var that = this;\n      var itemlist = [];\n      this.param.ListPage.Page_Button.forEach(function (btn) {\n        itemlist.push(btn.ShowName);\n      });\n      uni.showActionSheet({\n        // title: '鎸夐挳鍒楄〃',\n        itemList: itemlist,\n        success: function success(e) {\n          __f__(\"log\", e.tapIndex, \" at pages/modal/3200.vue:961\");\n          var btn = that.param.ListPage.Page_Button[e.tapIndex];\n          if (btn.Prompt) {\n            uni.showModal({\n              title: _this11.translateSys(\"tip\"),\n              content: btn.PromptContent || _this11.translate(\"are_you_sure\"),\n              success: function success(res) {\n                if (res.confirm) {\n                  that.onButtonClicked(btn);\n                  // } else if (res.cancel) {\n                  // \tconsole.log('鐢ㄦ埛鐐瑰嚮鍙栨秷');\n                }\n              }\n            });\n          } else that.onButtonClicked(btn);\n        }\n      });\n    },\n    //澶勭悊鐩稿叧鎸夐挳\n    onButtonClicked: function onButtonClicked(btn, style) {\n      var _this12 = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee17() {\n        var enviroment, tip;\n        return _regenerator.default.wrap(function _callee17$(_context17) {\n          while (1) {\n            switch (_context17.prev = _context17.next) {\n              case 0:\n                style = style || '';\n                try {\n                  enviroment = {\n                    button: \"top\",\n                    button_name: btn.ShowName,\n                    cls_id: btn.Cls_ID,\n                    function: \"3200\",\n                    master: {}\n                  };\n                  if (btn.FunCode == \"Add\" || btn.FunCode == \"Modify\") {\n                    if (btn.Edit_dlg.Model == \"small\") {\n                      _this12.showAddSmallDialog(btn, style, enviroment);\n                    }\n                  } else if (btn.FunCode == \"Delete\") {\n                    _this12.DeleteObj(btn, style, enviroment);\n                    // } else if (btn.FunCode == \"TriggerEvent\") {\n                    //   this.triggerEvent(btn, style, enviroment);\n                  } else if (btn.FunCode == \"TriggerEvent\") {\n                    _this12.TriggerEvent(btn, style, enviroment);\n                    // } else if (btn.FunCode == \"TriggerEvent\") {\n                    //   this.triggerEvent(btn, style, enviroment);\n                  } else if (btn.FunCode == \"RelatedFunction\") {\n                    _this12.RelatedFunction(btn, style, enviroment);\n                    // } else if (btn.FunCode == \"TriggerEvent\") {\n                    //   this.triggerEvent(btn, style, enviroment);\n                  } else {\n                    uni.showModal({\n                      title: _this12.translateSys(\"tip\"),\n                      content: _this12.translateSys(\"unrealized\"),\n                      showCancel: false,\n                      confirmText: _this12.translateSys(\"cancel\")\n                    });\n                  }\n                } catch (ex) {\n                  tip = typeof ex == \"string\" ? ex : ex.message;\n                  uni.showModal({\n                    title: _this12.translateSys(\"error\"),\n                    content: tip,\n                    showCancel: false,\n                    confirmText: _this12.translateSys(\"cancel\")\n                  });\n                }\n              case 2:\n              case \"end\":\n                return _context17.stop();\n            }\n          }\n        }, _callee17);\n      }))();\n    },\n    //鏂板淇敼灏忕獥鍙f暟鎹甛n    showAddSmallDialog: function showAddSmallDialog(btn, style, enviroment) {\n      var data = {\n        Add_BtnName: btn.ShowName,\n        EditDlgMode: btn.Edit_dlg.Model,\n        clsid: this.param.DataCls.id,\n        cls_name: this.param.DataCls.name,\n        Edit_dlg: btn.Edit_dlg\n      };\n      var $this = this;\n      uni.navigateTo({\n        url: '../modal/3018?param=' + JSON.stringify(data) + \"&titlename=\" + btn.Edit_dlg.Name + \"&type=addDataObj\",\n        events: {\n          // 涓烘寚瀹氫簨浠舵坊鍔犱竴涓洃鍚櫒锛岃幏鍙栬鎵撳紑椤甸潰浼犻�鍒板綋鍓嶉〉闈㈢殑鏁版嵁\n          addDataObj: function addDataObj(data) {\n            __f__(\"log\", data, \" at pages/modal/3200.vue:1040\");\n            $this.Refresh();\n          }\n        }\n      });\n    },\n    //鍒犻櫎鏁版嵁瀵硅薄\n    DeleteObj: function DeleteObj(btn, style, enviroment) {\n      // console.log(style);\n      var $this = this;\n      uni.showModal({\n        title: this.translateSys(\"tip\"),\n        content: this.translate(\"confirm_delete_data\"),\n        success: function success(res) {\n          var _this13 = this;\n          if (res.confirm) {\n            var objID = style.form.objId;\n            if (!style.form.objId.includes('{')) objID = '{' + style.form.objId + '}';\n            var dataInfo = {\n              class_id: btn.Cls_ID,\n              class_name: '',\n              obj_id: objID\n            };\n            // console.log(dataInfo);\n            $this.$store.dispatch('dataObjDel', dataInfo).then(function (ret) {\n              // console.log(ret);\n              if (ret.err_code == 0) {\n                //鎵ц鍚庡鐞嗕簨浠禱n                $this.AfterProcess_Event(btn.clsId, btm.AfterProcess_Event, enviroment);\n                //娓呴櫎褰撳墠鍒楄〃鏁版嵁\n                $this.detail1StyleDefList.forEach(function (ele, index) {\n                  if (ele.form.objId == objID) {\n                    $this.detail1StyleDefList.splice(index, 1);\n                  }\n                });\n                uni.showModal({\n                  title: _this13.translateSys(\"tip\"),\n                  content: _this13.translate(\"delete_success\"),\n                  showCancel: false,\n                  confirmText: _this13.translateSys(\"cancel\")\n                });\n              } else {\n                uni.showModal({\n                  title: _this13.translateSys(\"error\") + \"6.1\",\n                  content: ret.err_msg,\n                  showCancel: false,\n                  confirmText: _this13.translateSys(\"cancel\")\n                });\n              }\n            }).catch(function (ex) {\n              // console.log(ex);\n              uni.showModal({\n                title: _this13.translateSys(\"error\") + \"6\",\n                content: ex.errMsg,\n                showCancel: false,\n                confirmText: _this13.translateSys(\"cancel\")\n              });\n            });\n          } else if (res.cancel) {}\n        }\n      });\n    },\n    //鎵ц浜嬩欢\n    TriggerEvent: function TriggerEvent(btn, style, enviroment) {\n      var _this14 = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee20() {\n        var obj_attr, dataInfo, tip;\n        return _regenerator.default.wrap(function _callee20$(_context20) {\n          while (1) {\n            switch (_context20.prev = _context20.next) {\n              case 0:\n                //鎵ц瑙﹀彂浜嬩欢\n                try {\n                  obj_attr = {\n                    S_ID: _this14.styledef.form.objId\n                  };\n                  style.form.attrs.forEach(function (attr) {\n                    obj_attr[attr.name] = attr.value;\n                  });\n                  if (!_this14.ListPageHtml_Show.event.id) {\n                    //鍒ゆ柇娌℃湁HTML椤甸潰浜嬩欢\n                    // console.log(this.detail2_styledef);\n                    _this14.detail2_styledef.form.items.forEach( /*#__PURE__*/function () {\n                      var _ref7 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee19(ele, index) {\n                        return _regenerator.default.wrap(function _callee19$(_context19) {\n                          while (1) {\n                            switch (_context19.prev = _context19.next) {\n                              case 0:\n                                if (ele.name != \"Layout\") {\n                                  if (!obj_attr[ele.fieldId]) {\n                                    obj_attr[ele.fieldId] = ele.value;\n                                  }\n                                } else if (ele.name == \"Layout\") {\n                                  ele.setting.colList.forEach( /*#__PURE__*/function () {\n                                    var _ref8 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee18(col, key) {\n                                      return _regenerator.default.wrap(function _callee18$(_context18) {\n                                        while (1) {\n                                          switch (_context18.prev = _context18.next) {\n                                            case 0:\n                                              if (col) {\n                                                if (!obj_attr[col.fieldId]) {\n                                                  obj_attr[col.fieldId] = col.value;\n                                                }\n                                              }\n                                            case 1:\n                                            case \"end\":\n                                              return _context18.stop();\n                                          }\n                                        }\n                                      }, _callee18);\n                                    }));\n                                    return function (_x13, _x14) {\n                                      return _ref8.apply(this, arguments);\n                                    };\n                                  }());\n                                }\n                              case 1:\n                              case \"end\":\n                                return _context19.stop();\n                            }\n                          }\n                        }, _callee19);\n                      }));\n                      return function (_x11, _x12) {\n                        return _ref7.apply(this, arguments);\n                      };\n                    }());\n                  }\n                  dataInfo = {\n                    ed_type: 0,\n                    start_transaction: true,\n                    class_id: btn.clsId,\n                    event_id: btn.event.id,\n                    data_obj_id: _this14.styledef.form.objId,\n                    obj_attr: obj_attr\n                  };\n                  _this14.$store.dispatch('runCustomEvent', dataInfo).then(function (ret) {\n                    // console.log(ret);\n                    if (ret.err_code == 0) {\n                      var result = ret.result;\n                      if (result.ret != 0) {\n                        var tip = result.err_info ? typeof result.err_info == 'string' ? result.err_info : result.err_info.join('<br/>') : '';\n                        if (result.ret == 801) {\n                          if (_this14.param.Only_Script_Error) {\n                            var pos = tip.indexOf(\"锛歕");\n                            if (pos > -1) tip = tip.substring(pos + 1);\n                          }\n                          uni.showModal({\n                            title: _this14.translateSys(\"tip\"),\n                            content: tip,\n                            showCancel: false,\n                            confirmText: _this14.translateSys(\"cancel\")\n                          });\n                        } else uni.showModal({\n                          title: _this14.translateSys(\"tip\"),\n                          content: tip + ',' + _this14.translateSys('tip') + ':' + result.ret,\n                          showCancel: false,\n                          confirmText: _this14.translateSys(\"cancel\")\n                        });\n                        return false;\n                      } else {\n                        var tip = result.info ? typeof result.info == 'string' ? result.info : result.info.join('<br/>') : '';\n                        if (tip) uni.showModal({\n                          title: _this14.translateSys(\"tip\"),\n                          content: tip,\n                          showCancel: false,\n                          confirmText: _this14.translateSys(\"cancel\")\n                        });\n                      }\n                    } else {\n                      uni.showModal({\n                        title: _this14.translateSys(\"error\") + \"8\",\n                        content: ret.err_msg,\n                        showCancel: false,\n                        confirmText: _this14.translateSys(\"cancel\")\n                      });\n                    }\n                  }).catch(function (ex) {\n                    // console.log(ex);\n                    uni.showModal({\n                      title: _this14.translateSys(\"error\") + \"8.1\",\n                      content: ex.errMsg,\n                      showCancel: false,\n                      confirmText: _this14.translateSys(\"cancel\")\n                    });\n                  });\n                } catch (ex) {\n                  tip = typeof ex == \"string\" ? ex : ex.message;\n                  uni.showModal({\n                    title: _this14.translateSys(\"error\"),\n                    content: tip,\n                    showCancel: false,\n                    confirmText: _this14.translateSys(\"cancel\")\n                  });\n                  _this14.showError(ex);\n                }\n              case 1:\n              case \"end\":\n                return _context20.stop();\n            }\n          }\n        }, _callee20);\n      }))();\n    },\n    //璺宠浆\n    RelatedFunction: function RelatedFunction(btn, style, enviroment) {\n      var _this15 = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee21() {\n        var _btn$Related_Function, _btn$Related_Function2, _btn$Related_Function3, _btn$Related_Function4, _btn$Related_Function5, _btn$Related_Function6, _btn$Related_Function7;\n        var _btn$Related_Function8, _btn$Related_Function9, _btn$Related_Function10, _btn$Related_Function11, name, $this, json;\n        return _regenerator.default.wrap(function _callee21$(_context21) {\n          while (1) {\n            switch (_context21.prev = _context21.next) {\n              case 0:\n                if (((_btn$Related_Function = btn.Related_Function) === null || _btn$Related_Function === void 0 ? void 0 : _btn$Related_Function.Def_Code) == \"3018\" || ((_btn$Related_Function2 = btn.Related_Function) === null || _btn$Related_Function2 === void 0 ? void 0 : _btn$Related_Function2.Def_Code) == \"3037\" || ((_btn$Related_Function3 = btn.Related_Function) === null || _btn$Related_Function3 === void 0 ? void 0 : _btn$Related_Function3.Def_Code) == \"3200\" || ((_btn$Related_Function4 = btn.Related_Function) === null || _btn$Related_Function4 === void 0 ? void 0 : _btn$Related_Function4.Def_Code) == \"3201\" || ((_btn$Related_Function5 = btn.Related_Function) === null || _btn$Related_Function5 === void 0 ? void 0 : _btn$Related_Function5.Def_Code) == \"5600\" || ((_btn$Related_Function6 = btn.Related_Function) === null || _btn$Related_Function6 === void 0 ? void 0 : _btn$Related_Function6.Def_Code) == \"5601\" || ((_btn$Related_Function7 = btn.Related_Function) === null || _btn$Related_Function7 === void 0 ? void 0 : _btn$Related_Function7.Def_Code) == \"5602\") {\n                  name = (_btn$Related_Function8 = btn.Related_Function) === null || _btn$Related_Function8 === void 0 ? void 0 : _btn$Related_Function8.Def_Code;\n                  if (((_btn$Related_Function9 = btn.Related_Function) === null || _btn$Related_Function9 === void 0 ? void 0 : _btn$Related_Function9.Def_Code) == \"3018\" || ((_btn$Related_Function10 = btn.Related_Function) === null || _btn$Related_Function10 === void 0 ? void 0 : _btn$Related_Function10.Def_Code) == \"3037\") name = ((_btn$Related_Function11 = btn.Related_Function) === null || _btn$Related_Function11 === void 0 ? void 0 : _btn$Related_Function11.Def_Code) + \"_2\";\n                  $this = _this15;\n                  json = {\n                    app_id: appId\n                  };\n                  _this15.$store.dispatch('appGetInfo', json).then(function (success) {\n                    // console.log(success);\n                    if (success.err_code == 0) {\n                      if ((success.result || []).length > 0) {\n                        var app = success.result[0];\n                        var param = \"\";\n                        var appName = app.name || app.list_name.Name;\n                        var paramStr = app.param;\n                        if (paramStr) {\n                          //mobox2鐨刾aram鏄痡son瀛楃涓瞈n                          param = paramStr.replace(/\\\\/g, \"\");\n                          //mobox3鐨刾aram鏄痓ase64瀛楃涓瞈n                          if (!paramStr.includes('\"')) param = _base.default.decode(paramStr);\n                        }\n                        if (!param) {\n                          uni.showModal({\n                            title: _this15.translateSys(\"tip\"),\n                            content: _this15.translate('tip_no_app_param'),\n                            showCancel: false,\n                            confirmText: _this15.translateSys(\"cancel\")\n                          });\n                          return;\n                        }\n                        uni.navigateTo({\n                          url: '../modal/' + name + '?param=' + param + \"&titlename=\" + appName + \"&type=relatedFunction&paramValue=\" + JSON.stringify(style.form),\n                          events: {\n                            relatedFunction: function relatedFunction(data) {\n                              __f__(\"log\", data, \" at pages/modal/3200.vue:1268\");\n                              $this.Refresh();\n                            }\n                          }\n                        });\n                      } else {\n                        uni.showModal({\n                          title: _this15.translateSys(\"error\"),\n                          content: _this15.translate(\"function_not_exist\"),\n                          showCancel: false,\n                          confirmText: _this15.translateSys(\"cancel\")\n                        });\n                      }\n                    } else {\n                      uni.showModal({\n                        title: _this15.translateSys(\"error\"),\n                        content: success.msg,\n                        showCancel: false,\n                        confirmText: _this15.translateSys(\"cancel\")\n                      });\n                    }\n                  }).catch(function (ex) {\n                    // console.log(ex);\n                    uni.showModal({\n                      title: _this15.translateSys(\"error\"),\n                      content: ex.errMsg,\n                      showCancel: false,\n                      confirmText: _this15.translateSys(\"cancel\")\n                    });\n                  });\n                } else {\n                  uni.showModal({\n                    title: _this15.translateSys(\"error\"),\n                    content: _this15.translate(\"cannot_related_function\"),\n                    showCancel: false,\n                    confirmText: _this15.translateSys(\"cancel\")\n                  });\n                }\n              case 1:\n              case \"end\":\n                return _context21.stop();\n            }\n          }\n        }, _callee21);\n      }))();\n    },\n    //鎵ц鍚庡鐞嗕簨浠禱n    AfterProcess_Event: function AfterProcess_Event(clsId, afterProcess_Event, enviroment) {\n      var _this16 = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee22() {\n        var tip;\n        return _regenerator.default.wrap(function _callee22$(_context22) {\n          while (1) {\n            switch (_context22.prev = _context22.next) {\n              case 0:\n                _context22.prev = 0;\n                if (!afterProcess_Event.ID) {\n                  _context22.next = 4;\n                  break;\n                }\n                _context22.next = 4;\n                return _this16.runCustomEvent({\n                  ed_type: 0,\n                  start_transaction: true,\n                  class_id: clsId,\n                  event_id: afterProcess_Event.ID\n                });\n              case 4:\n                _context22.next = 10;\n                break;\n              case 6:\n                _context22.prev = 6;\n                _context22.t0 = _context22[\"catch\"](0);\n                tip = typeof _context22.t0 == \"string\" ? _context22.t0 : _context22.t0.message;\n                uni.showModal({\n                  title: _this16.translateSys(\"error\") + \"7\",\n                  content: tip,\n                  showCancel: false,\n                  confirmText: _this16.translateSys(\"cancel\")\n                });\n              case 10:\n              case \"end\":\n                return _context22.stop();\n            }\n          }\n        }, _callee22, null, [[0, 6]]);\n      }))();\n    },\n    ontap: function ontap(item) {\n      var _this17 = this;\n      //鎵爜鍔熻兘\n      // var $ele = e;\n      //console.log(e.target)\n      getApp().onScan(function (result) {\n        __f__(\"log\", result.decodedata, \" at pages/modal/3200.vue:1335\");\n        item.value = result.decodedata;\n        uni.hideKeyboard();\n        var $this = _this17;\n        __f__(\"log\", item, \" at pages/modal/3200.vue:1340\");\n        if (item.oldvalue != item.value) {\n          item.oldvalue = item.value;\n          var attr = item.fieldId;\n          _this17.head_styledef.form.model[attr] = item.value;\n          var onChangeEvent = item.bind.onChangeEvent; //鍐呭鍙樺寲鍚庝簨浠禱n          var onSuffixClickCallbackEvent = item.bind.onSuffixClickCallbackEvent; //鍚庡浘鏍囩偣鍑讳簨浠禱n          var onSuffixClickEvent = item.bind.onSuffixClickEvent; //鍚庡浘鏍囩偣鍑诲洖璋僜n          var isflag = false;\n          if (onChangeEvent.id) {\n            //鍐呭鍙樺寲鍚庝簨浠禱n            $this.onChange(onChangeEvent);\n          } else {\n            $this.where = '';\n            if (item.value) $this.where = item.fieldId + \" like '%\" + item.value + \"%'\";\n            $this.query_id = '';\n            $this.pageindex = 1;\n            $this.detail1StyleDefList = [];\n            $this.loadDataGetList();\n          }\n          if (item.value) {\n            //绗竴涓緭鍏ユ涓嶄负绌篭n            $this.focusMateria = true; //鍒濆鍖栵紝绗簩涓緭鍏ユfocus灞炴�\n            // setTimeout(function(){\n            // \t$this.focusMateria=true; //绗簩涓緭鍏ユ鑾峰彇鐒︾偣\n            setTimeout(function () {\n              uni.hideKeyboard();\n            }, 1000);\n            // },500);\n          }\n          // if(onSuffixClickCallbackEvent.id){   //鍚庡浘鏍囩偣鍑讳簨浠禱n          //   this.onSuffixClick(onSuffixClickCallbackEvent);\n          // }\n          // if(onSuffixClickEvent.id){   //鍚庡浘鏍囩偣鍑诲洖璋僜n          //   this.onSuffixClickCallback(onSuffixClickEvent);\n          // }\n        }\n      });\n    },\n    onEnterChange: function onEnterChange(item) {\n      //鍥炶溅锛岀偣鍑绘寜閽紝鍙栨秷鑺傜偣浜嬩欢\n      // console.log(item);\n      if (item.oldvalue != item.value) {\n        item.oldvalue = item.value;\n        var attr = item.fieldId;\n        this.head_styledef.form.model[attr] = item.value;\n        var onChangeEvent = item.bind.onChangeEvent; //鍐呭鍙樺寲鍚庝簨浠禱n        var onSuffixClickCallbackEvent = item.bind.onSuffixClickCallbackEvent; //鍚庡浘鏍囩偣鍑讳簨浠禱n        var onSuffixClickEvent = item.bind.onSuffixClickEvent; //鍚庡浘鏍囩偣鍑诲洖璋僜n        var isflag = false;\n        if (onChangeEvent.id) {\n          //鍐呭鍙樺寲鍚庝簨浠禱n          this.onChange(onChangeEvent);\n        } else {\n          this.where = '';\n          if (item.value) this.where = item.fieldId + \" like '%\" + item.value + \"%'\";\n          this.query_id = '';\n          this.pageindex = 1;\n          this.detail1StyleDefList = [];\n          this.loadDataGetList();\n        }\n        // if(onSuffixClickCallbackEvent.id){   //鍚庡浘鏍囩偣鍑讳簨浠禱n        //   this.onSuffixClick(onSuffixClickCallbackEvent);\n        // }\n        // if(onSuffixClickEvent.id){   //鍚庡浘鏍囩偣鍑诲洖璋僜n        //   this.onSuffixClickCallback(onSuffixClickEvent);\n        // }\n      }\n    },\n    // 鍐呭鍙樺寲鍚庝簨浠禱n    onChange: function onChange(event) {\n      var _this18 = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee25() {\n        var obj_attr, input_param, $this, dataInfo, tip;\n        return _regenerator.default.wrap(function _callee25$(_context25) {\n          while (1) {\n            switch (_context25.prev = _context25.next) {\n              case 0:\n                try {\n                  if (event.id) {\n                    obj_attr = _this18.head_styledef.form.model; // console.log(obj_attr);\n                    input_param = _base.default.encode(JSON.stringify(Object.keys(obj_attr).map(function (a) {\n                      return {\n                        attr: a,\n                        value: obj_attr[a] || \"\"\n                      };\n                    })));\n                    $this = _this18;\n                    dataInfo = {\n                      ed_type: 0,\n                      start_transaction: true,\n                      class_id: _this18.$data.head_styledef.form.clsId,\n                      class_name: '',\n                      event_id: event.id,\n                      event_name: '',\n                      data_obj_id: '',\n                      obj_attr: obj_attr,\n                      prj_id: '',\n                      ref_cls_id: '',\n                      rel_obj_id: '',\n                      user_login: '',\n                      data_json: '',\n                      compose_info: '',\n                      ext_info: '',\n                      global_attr: '',\n                      input_param: input_param\n                    };\n                    _this18.$store.dispatch('runCustomEvent', dataInfo).then(function (ret) {\n                      // console.log(ret);\n                      if (ret.err_code == 0) {\n                        var result = ret.result;\n                        if (result.ret != 0) {\n                          var tip = result.err_info ? typeof result.err_info == 'string' ? result.err_info : result.err_info.join('<br/>') : '';\n                          if (result.ret == 801) {\n                            if (_this18.param.Only_Script_Error) {\n                              var pos = tip.indexOf(\"锛歕");\n                              if (pos > -1) tip = tip.substring(pos + 1);\n                            }\n                            uni.showModal({\n                              title: _this18.translateSys(\"tip\"),\n                              content: tip,\n                              showCancel: false,\n                              confirmText: _this18.translateSys(\"cancel\")\n                            });\n                          } else uni.showModal({\n                            title: _this18.translateSys(\"tip\"),\n                            content: tip + ',' + _this18.translateSys('tip') + ':' + result.ret,\n                            showCancel: false,\n                            confirmText: _this18.translateSys(\"cancel\")\n                          });\n                          return false;\n                        } else {\n                          var tip = result.info ? typeof result.info == 'string' ? result.info : result.info.join('<br/>') : '';\n                          if (tip) uni.showModal({\n                            title: _this18.translateSys(\"tip\"),\n                            content: tip,\n                            showCancel: false,\n                            confirmText: _this18.translateSys(\"cancel\")\n                          });\n                          if (result.result_type == 0 && result.action) {\n                            result.action.forEach(function (item) {\n                              if (item.action_type == \"set_dlg_attr\") {\n                                // value = {\"attr\":\"xxx\", \"value\":\"xxx\"}\n                                var data = item.value;\n                                $this.$data.head_styledef.form.items.forEach( /*#__PURE__*/function () {\n                                  var _ref9 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee24(ele, index) {\n                                    return _regenerator.default.wrap(function _callee24$(_context24) {\n                                      while (1) {\n                                        switch (_context24.prev = _context24.next) {\n                                          case 0:\n                                            data.forEach( /*#__PURE__*/function () {\n                                              var _ref10 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee23(ele2, index) {\n                                                return _regenerator.default.wrap(function _callee23$(_context23) {\n                                                  while (1) {\n                                                    switch (_context23.prev = _context23.next) {\n                                                      case 0:\n                                                        if (ele.fieldId == ele2.attr) {\n                                                          ele.value = ele2.value;\n                                                        }\n                                                      case 1:\n                                                      case \"end\":\n                                                        return _context23.stop();\n                                                    }\n                                                  }\n                                                }, _callee23);\n                                              }));\n                                              return function (_x17, _x18) {\n                                                return _ref10.apply(this, arguments);\n                                              };\n                                            }());\n                                          case 1:\n                                          case \"end\":\n                                            return _context24.stop();\n                                        }\n                                      }\n                                    }, _callee24);\n                                  }));\n                                  return function (_x15, _x16) {\n                                    return _ref9.apply(this, arguments);\n                                  };\n                                }());\n                              }\n                            });\n                          } else {\n                            // this.detail2StyleDefList=[];\n                            if (result.info) {\n                              uni.showModal({\n                                title: _this18.translateSys(\"tip\"),\n                                content: result.info,\n                                showCancel: false,\n                                confirmText: _this18.translateSys(\"cancel\")\n                              });\n                            }\n                          }\n                        }\n                      } else {\n                        uni.showModal({\n                          title: _this18.translateSys(\"error\") + \"8\",\n                          content: ret.err_msg,\n                          showCancel: false,\n                          confirmText: _this18.translateSys(\"cancel\")\n                        });\n                      }\n                    }).catch(function (ex) {\n                      // console.log(ex);\n                      uni.showModal({\n                        title: _this18.translateSys(\"error\") + \"8.1\",\n                        content: ex.errMsg,\n                        showCancel: false,\n                        confirmText: _this18.translateSys(\"cancel\")\n                      });\n                    });\n                  }\n                } catch (ex) {\n                  tip = typeof ex == \"string\" ? ex : ex.message;\n                  uni.showModal({\n                    title: _this18.translateSys(\"error\") + \"8.2\",\n                    content: _this18.translate('execute_after_change_event_failed') + _this18.translateSys(\"comma\") + _this18.translate('reason') + _this18.translateSys(\"colon\") + tip,\n                    showCancel: false,\n                    confirmText: _this18.translateSys(\"cancel\")\n                  });\n                }\n              case 1:\n              case \"end\":\n                return _context25.stop();\n            }\n          }\n        }, _callee25);\n      }))();\n    },\n    //鐐逛腑琛ㄥ崟\n    onPanelClick: function onPanelClick(value) {\n      //鐐瑰嚮闈㈡澘楂樹寒鏄剧ず\n      // console.log(value);\n      this.activelist.forEach(function (ele) {\n        ele.active = false;\n      });\n      this.activelist[value].active = true;\n    },\n    //浜嬩欢澶勭悊\n    runCustomEvent: function runCustomEvent(dataInfo) {\n      var _this19 = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee26() {\n        var $this, tip;\n        return _regenerator.default.wrap(function _callee26$(_context26) {\n          while (1) {\n            switch (_context26.prev = _context26.next) {\n              case 0:\n                try {\n                  $this = _this19;\n                  _this19.$store.dispatch('runCustomEvent', dataInfo).then(function (ret) {\n                    __f__(\"log\", ret, \" at pages/modal/3200.vue:1568\");\n                    if (ret.err_code == 0) {\n                      var result = ret.result;\n                      if (result.ret != 0) {\n                        var tip = result.err_info ? typeof result.err_info == 'string' ? result.err_info : result.err_info.join('<br/>') : '';\n                        if (result.ret == 801) {\n                          if (_this19.param.Only_Script_Error) {\n                            var pos = tip.indexOf(\"锛歕");\n                            if (pos > -1) tip = tip.substring(pos + 1);\n                          }\n                          uni.showModal({\n                            title: _this19.translateSys(\"tip\"),\n                            content: tip,\n                            showCancel: false,\n                            confirmText: _this19.translateSys(\"cancel\")\n                          });\n                        } else uni.showModal({\n                          title: _this19.translateSys(\"tip\"),\n                          content: tip + ',' + _this19.translateSys('tip') + ':' + result.ret,\n                          showCancel: false,\n                          confirmText: _this19.translateSys(\"cancel\")\n                        });\n                        return false;\n                      } else {\n                        var tip = result.info ? typeof result.info == 'string' ? result.info : result.info.join('<br/>') : '';\n                        if (tip) uni.showModal({\n                          title: _this19.translateSys(\"tip\"),\n                          content: tip,\n                          showCancel: false,\n                          confirmText: _this19.translateSys(\"cancel\")\n                        });\n                        if (result.result_type == 0 && result.action) {\n                          result.action.forEach(function (item) {\n                            if (item.action_type == \"goback_to_pre_page\") {\n                              //杩斿洖涓婁竴椤礬n                              var value = item.value;\n                              uni.navigateBack({\n                                delta: 1 //杩斿洖灞傛暟锛�鍒欎笂涓婇〉\n                              });\n                            } else if (item.action_type == \"hidden_button\") {\n                              //闅愯棌鎸夐挳\n                              var value = item.value;\n                              value.forEach(function (btn) {\n                                var index = $this.param.ListPage.Page_Button.findIndex(function (button) {\n                                  return button.ShowName == btn;\n                                });\n                                if (index > -1) $this.param.ListPage.Page_Button.splice(index, 1);\n                              });\n                              // } else if(item.action_type == \"refresh_cur_row\"){ //\n                              // \tvar value = item.value;\n                            } else if (item.action_type == \"set_panel_html\") {\n                              //鏄剧ずHtml椤甸潰\n                              // var value = item.value;\n                              $this.ListHtml_Panel = item.value;\n                              // $this.detail1StyleDefList.forEach((ele,index)=>{\n                              // \tele.ListHtml_Panel = item.value[index];\n                              // });\n                            } else {\n                              uni.showModal({\n                                title: _this19.translateSys(\"tip\"),\n                                content: _this19.translateSys(\"quotation_mark_left\") + item.action_type + _this19.translateSys(\"quotation_mark_right\") + _this19.translate(\"tip_action_unprocessed\"),\n                                showCancel: false,\n                                confirmText: _this19.translateSys(\"cancel\")\n                              });\n                            }\n                          });\n                        } else {\n                          // this.detail2StyleDefList=[];\n                          if (result.info) {\n                            uni.showModal({\n                              title: _this19.translateSys(\"tip\"),\n                              content: result.info,\n                              showCancel: false,\n                              confirmText: _this19.translateSys(\"cancel\")\n                            });\n                          }\n                        }\n                      }\n                    } else {\n                      uni.showModal({\n                        title: _this19.translateSys(\"error\") + \"9\",\n                        content: ret.err_msg,\n                        showCancel: false,\n                        confirmText: _this19.translateSys(\"cancel\")\n                      });\n                    }\n                  }).catch(function (ex) {\n                    // console.log(ex);\n                    uni.showModal({\n                      title: _this19.translateSys(\"error\") + \"9.1\",\n                      content: ex.errMsg,\n                      showCancel: false,\n                      confirmText: _this19.translateSys(\"cancel\")\n                    });\n                  });\n                } catch (ex) {\n                  tip = typeof ex == \"string\" ? ex : ex.message;\n                  uni.showModal({\n                    title: _this19.translateSys(\"error\") + \"9.2\",\n                    content: _this19.translate('execute_event_failed') + _this19.translateSys(\"comma\") + _this19.translate('reason') + _this19.translateSys(\"colon\") + tip,\n                    showCancel: false,\n                    confirmText: _this19.translateSys(\"cancel\")\n                  });\n                }\n              case 1:\n              case \"end\":\n                return _context26.stop();\n            }\n          }\n        }, _callee26);\n      }))();\n    },\n    cancel: function cancel(e) {\n      //鍙栨秷\n      // var eventChannel = this.$scope.eventChannel;\n      // // const eventChannel = this.getOpenerEventChannel();\n      // eventChannel.emit('view_3201',\"\");\n      uni.navigateBack({\n        delta: 1 //杩斿洖灞傛暟锛�鍒欎笂涓婇〉\n      });\n    },\n    /**\n     * 鍙敮鎸乕\"column1='A' or column2='B'\", \"column3='C' and column4='D'\", \"column5='E'\"]杩欑鏍煎紡\n     * {\n     *     \"model\": 0 / 1,\n     *     \"condition\":\n     *     [\n     *         [\n     *             { },\n     *             { },\n     *             { }\n     *         ],\n     *         [\n     *             { }\n     *         ],\n     *         [\n     *             { }\n     *         ]\n     *     ]\n     * }\n     */\n    toWhereBase64String: function toWhereBase64String(list) {\n      if (typeof list == 'string') list = [list];\n      var sql = [];\n      var seps = [' not in', ' in', '<>', '!=', '<=', '>=', '<', '=', '>', ' like'];\n      list.forEach(function (ls) {\n        var where = ls.trim();\n        if (where.startsWith('(') && where.endsWith(')')) where = where.replace(/^\\(/, '').replace(/\\)$/, '');\n        if (where.toLowerCase().includes(' and ')) {\n          // 浜岀骇and鏀惧湪绗竴绾ф暟缁勪腑\n          where.split(/ and /i).forEach(function (li) {\n            var l = li.trim();\n            if (l.startsWith('(') && l.endsWith(')')) l = l.replace(/^\\(/, '').replace(/\\)$/, '');\n            var sep = '';\n            for (var i = 0; i < seps.length; i++) {\n              if (l.toLowerCase().includes(seps[i])) {\n                sep = seps[i];\n                break;\n              }\n            }\n            if (sep) {\n              var _values$, _values$2, _values$3;\n              var values = l.split(new RegExp(sep, 'i'));\n              var field = (_values$ = values[0]) === null || _values$ === void 0 ? void 0 : _values$.trim().replace(/^\\[/, '').replace(/\\]$/, '');\n              var value = '';\n              var op = sep.trim();\n              if ([' in', ' not in'].includes(sep) && (_values$2 = values[1]) !== null && _values$2 !== void 0 && _values$2.toLowerCase().includes('select ') && (_values$3 = values[1]) !== null && _values$3 !== void 0 && _values$3.toLowerCase().includes(' from ')) {\n                value = l.replace(field, '').replace(/^\\s*(in|not in)\\s*/i, '').trim();\n                if (value.startsWith('(') && value.endsWith(')')) value = value.replace(/^\\(/, '').replace(/\\)$/, '').trim();\n              } else {\n                var _values$4;\n                value = (_values$4 = values[1]) === null || _values$4 === void 0 ? void 0 : _values$4.trim().replace(/^\\'/, '').replace(/\\'$/, '');\n                if (['in', 'not in'].includes(op)) {\n                  value = value.replace(/^\\(/, '').replace(/\\)$/, '');\n                  value = value.split(',').map(function (v) {\n                    return v.trim().replace(/^\\'/, '').replace(/\\'$/, '');\n                  });\n                }\n              }\n              sql.push([{\n                field: field,\n                value: value,\n                op: op\n              }]);\n            }\n          });\n        } else if (where.toLowerCase().includes(' or ')) {\n          // 浜岀骇or鏀惧湪绗簩绾у悓涓�粍鏁扮粍涓璡n          var s = [];\n          where.split(/ or /i).forEach(function (li) {\n            var l = li.trim();\n            if (l.startsWith('(') && l.endsWith(')')) l = l.replace(/^\\(/, '').replace(/\\)$/, '');\n            var sep = '';\n            for (var i = 0; i < seps.length; i++) {\n              if (l.toLowerCase().includes(seps[i])) {\n                sep = seps[i];\n                break;\n              }\n            }\n            if (sep) {\n              var _values$5, _values$6, _values$7;\n              var values = l.split(new RegExp(sep, 'i'));\n              var field = (_values$5 = values[0]) === null || _values$5 === void 0 ? void 0 : _values$5.trim().replace(/^\\[/, '').replace(/\\]$/, '');\n              var value = '';\n              var op = sep.trim();\n              if ([' in', ' not in'].includes(sep) && (_values$6 = values[1]) !== null && _values$6 !== void 0 && _values$6.toLowerCase().includes('select ') && (_values$7 = values[1]) !== null && _values$7 !== void 0 && _values$7.toLowerCase().includes(' from ')) {\n                value = l.replace(field, '').replace(/^\\s*(in|not in)\\s*/i, '').trim();\n                if (value.startsWith('(') && value.endsWith(')')) value = value.replace(/^\\(/, '').replace(/\\)$/, '').trim();\n              } else {\n                var _values$8;\n                value = (_values$8 = values[1]) === null || _values$8 === void 0 ? void 0 : _values$8.trim().replace(/^\\'/, '').replace(/\\'$/, '');\n                if (['in', 'not in'].includes(op)) {\n                  value = value.replace(/^\\(/, '').replace(/\\)$/, '');\n                  value = value.split(',').map(function (v) {\n                    return v.trim().replace(/^\\'/, '').replace(/\\'$/, '');\n                  });\n                }\n              }\n              sql.push([{\n                field: field,\n                value: value,\n                op: op\n              }]);\n            }\n          });\n          sql.push(s);\n        } else {\n          var li = where;\n          // 鍗曚竴鏌ヨ鏉′欢鐩存帴鏀惧湪绗竴绾ф暟缁勪腑\n          var l = li.trim();\n          if (l.startsWith('(') && l.endsWith(')')) l = l.replace(/^\\(/, '').replace(/\\)$/, '');\n          var sep = '';\n          for (var i = 0; i < seps.length; i++) {\n            if (l.toLowerCase().includes(seps[i])) {\n              sep = seps[i];\n              break;\n            }\n          }\n          if (sep) {\n            var _values$9, _values$10, _values$11;\n            var values = l.split(new RegExp(sep, 'i'));\n            var field = (_values$9 = values[0]) === null || _values$9 === void 0 ? void 0 : _values$9.trim().replace(/^\\[/, '').replace(/\\]$/, '');\n            var value = '';\n            var op = sep.trim();\n            if ([' in', ' not in'].includes(sep) && (_values$10 = values[1]) !== null && _values$10 !== void 0 && _values$10.toLowerCase().includes('select ') && (_values$11 = values[1]) !== null && _values$11 !== void 0 && _values$11.toLowerCase().includes(' from ')) {\n              value = l.replace(field, '').replace(/^\\s*(in|not in)\\s*/i, '').trim();\n              if (value.startsWith('(') && value.endsWith(')')) value = value.replace(/^\\(/, '').replace(/\\)$/, '').trim();\n            } else {\n              var _values$12;\n              value = (_values$12 = values[1]) === null || _values$12 === void 0 ? void 0 : _values$12.trim().replace(/^\\'/, '').replace(/\\'$/, '');\n              if (['in', 'not in'].includes(op)) {\n                value = value.replace(/^\\(/, '').replace(/\\)$/, '');\n                value = value.split(',').map(function (v) {\n                  return v.trim().replace(/^\\'/, '').replace(/\\'$/, '');\n                });\n              }\n            }\n            sql.push([{\n              field: field,\n              value: value,\n              op: op\n            }]);\n          }\n        }\n      });\n      if (sql.length > 0) return _base.default.encode(JSON.stringify({\n        model: 1,\n        condition: sql\n      }));else return '';\n    },\n    translate: function translate(t) {\n      if (typeof this.$t == \"function\") return this.$t(\"page.\".concat(t));else return t;\n    },\n    translateSys: function translateSys(t) {\n      if (typeof this.$t == \"function\") return this.$t(\"sys.\".concat(t));else return t;\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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vcGFnZXMvbW9kYWwvMzIwMC52dWUiXSwibmFtZXMiOlsibW9kdWxlcyIsIkJhc2U2NCIsIm9uTmF2aWdhdGlvbkJhckJ1dHRvblRhcCIsIm9uQmFja1ByZXNzIiwiZXZlbnRDaGFubmVsIiwiZGF0YSIsInRpdGxlIiwiaXNGaWx0ZXIiLCJwYXJhbSIsImZvY3VzTWF0ZXJpYSIsInN0eWxlZGVmIiwiaGVhZF9zdHlsZWRlZiIsImZvcm0iLCJpdGVtcyIsImRldGFpbDFfc3R5bGVkZWYiLCJkZXRhaWwxU3R5bGVEZWZMaXN0IiwiZGV0YWlsMl9zdHlsZWRlZiIsImRldGFpbDJTdHlsZURlZkxpc3QiLCJhY3RpdmVfaWQiLCJhY3RpdmVsaXN0Iiwid2hlcmUiLCJ3aGVyZXMiLCJvcmRlcmJ5IiwicXVlcnlfaWQiLCJwYWdlaW5kZXgiLCJwYWdlX3NpemUiLCJwYWdlX2NvdW50Iiwic2Nyb2xsVG9wIiwib2xkIiwiaXNTY3JvbGwiLCJMaXN0SHRtbF9QYW5lbCIsIkxpc3RQYWdlSHRtbF9TaG93IiwibmFtZSIsImV2ZW50IiwiaWQiLCJvbkxvYWQiLCJ1bmkiLCJtZXRob2RzIiwic2V0RGF0YSIsIk9iamVjdCIsImtleXMiLCJ2YWwiLCJ0aGF0IiwiaW5pdGlhbCIsImF0dHJzIiwiZWxlIiwiaW5kZXgyIiwiY29sIiwic2Nyb2xsdG9sb3dlciIsInNjcm9sbCIsIkhlYWRfVUlTdHlsZUdldEluZm8iLCIkdGhpcyIsImRhdGFJbmZvIiwiY2xhc3NfaWQiLCJ1aV9zdHlsZV9pZCIsInN0eWxlX2RlZiIsImNvbnRlbnQiLCJzaG93Q2FuY2VsIiwiY29uZmlybVRleHQiLCJEZXRhaWwxX1VJc3R5bGVHZXRJbmZvIiwiSHRtbF9VSXN0eWxlR2V0SW5mbyIsIkRpY3RHZXRJbmZvIiwiZGljdF9pZCIsImRpY3RfbmFtZSIsImxpc3QiLCJpdGVtTmFtZSIsInN1Y2Nlc3MiLCJ0ZXh0IiwidmFsdWUiLCJhdHRyIiwib25TZWFyQ2hhbmdlIiwiZWRfdHlwZSIsInN0YXJ0X3RyYW5zYWN0aW9uIiwiZXZlbnRfaWQiLCJlcnJfaW5mbyIsInJldCIsInJlc3VsdCIsInRpcCIsImxvYWREYXRhR2V0TGlzdCIsIm1hc2siLCJjb25kaXRpb24iLCJwcmpfcmVsX3R5cGUiLCJvcmRlcl9ieSIsInBhZ2UiLCJvYmoiLCJpbmZvIiwiU2VsQnV0X0NoZWNrZWQiLCJkZXRhaWxTdHlsZSIsInJlcGxhY2UiLCJhY3RpdmUiLCJqc29ubGlzdCIsImV2ZW50aWQiLCJkYXRhX2pzb24iLCJzZXRUaW1lb3V0IiwiUmVmcmVzaCIsIm9uVmlld1BhZ2VDbGljayIsInVybCIsImV2ZW50cyIsIkV4aXRWaWV3RXZlbnQiLCJvYmpfYXR0ciIsImRhdGFfb2JqX2lkIiwiaW5wdXRfcGFyYW0iLCJvbkJ0bkNsaWNrIiwiYWN0aW9uU2hlZXRUYXAiLCJpdGVtbGlzdCIsIml0ZW1MaXN0Iiwib25CdXR0b25DbGlja2VkIiwic3R5bGUiLCJlbnZpcm9tZW50IiwiYnV0dG9uIiwiYnV0dG9uX25hbWUiLCJjbHNfaWQiLCJmdW5jdGlvbiIsIm1hc3RlciIsInNob3dBZGRTbWFsbERpYWxvZyIsIkFkZF9CdG5OYW1lIiwiRWRpdERsZ01vZGUiLCJjbHNpZCIsImNsc19uYW1lIiwiRWRpdF9kbGciLCJhZGREYXRhT2JqIiwiRGVsZXRlT2JqIiwiY2xhc3NfbmFtZSIsIm9ial9pZCIsIlRyaWdnZXJFdmVudCIsIlNfSUQiLCJSZWxhdGVkRnVuY3Rpb24iLCJqc29uIiwiYXBwX2lkIiwiTmFtZSIsImFwcE5hbWUiLCJyZWxhdGVkRnVuY3Rpb24iLCJBZnRlclByb2Nlc3NfRXZlbnQiLCJhZnRlclByb2Nlc3NfRXZlbnQiLCJvbnRhcCIsImdldEFwcCIsIml0ZW0iLCJvblN1ZmZpeENsaWNrQ2FsbGJhY2tFdmVudCIsIm9uRW50ZXJDaGFuZ2UiLCJvbkNoYW5nZSIsIkpTT04iLCJldmVudF9uYW1lIiwicHJqX2lkIiwicmVmX2Nsc19pZCIsInJlbF9vYmpfaWQiLCJ1c2VyX2xvZ2luIiwiY29tcG9zZV9pbmZvIiwiZXh0X2luZm8iLCJnbG9iYWxfYXR0ciIsImZvckVhY2giLCJpbmRleCIsImZpZWxkSWQiLCJlbGUyIiwidHJhbnNsYXRlU3lzIiwib25QYW5lbENsaWNrIiwicnVuQ3VzdG9tRXZlbnQiLCJkZWx0YSIsIkxpc3RQYWdlIiwiUGFnZV9CdXR0b24iLCJmaW5kSW5kZXgiLCJTaG93TmFtZSIsImJ0biIsImFjdGlvbl90eXBlIiwidHJhbnNsYXRlIiwiY2FuY2VsIiwidG9XaGVyZUJhc2U2NFN0cmluZyIsInNlcCIsInRvTG93ZXJDYXNlIiwiaW5jbHVkZXMiLCJzcWwiLCJmaWVsZCIsIm9wIiwidmFsdWVzIiwidHJpbSIsIm1vZGVsIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUF5TUE7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O2VBQ0E7RUFDQUE7SUFDQUM7RUFDQTtFQUNBQztJQUNBO0lBQ0E7SUFDQTtJQUNBLG1CQUNBLDJCQUVBO0VBQ0E7RUFDQUM7SUFDQTtJQUNBO0lBQ0E7SUFDQUM7SUFDQTtJQUNBO0lBQ0E7SUFDQTtFQUNBO0VBQ0FDO0lBQ0E7TUFDQUM7TUFDQUM7TUFDQUM7TUFDQUM7TUFDQUM7TUFDQUM7UUFDQUM7VUFDQUM7UUFDQTtNQUNBO01BQ0FDO01BQ0FDO01BQ0FDO01BQ0FDO01BQ0FKO01BQ0FLO01BQ0FDO01BQ0FDO01BQ0FDO01BQ0FDO01BQ0FDO01BQ0FDO01BQ0FDO01BQ0FDO01BQ0FDO01BQ0FDO1FBQ0FEO01BQ0E7TUFDQUU7TUFDQTtNQUNBQztNQUNBQztRQUNBQztRQUNBQztVQUNBQztVQUNBRjtRQUNBO01BQ0E7SUFDQTtFQUNBO0VBQ0FHO0lBQUE7SUFBQTtNQUFBO01BQUE7UUFBQTtVQUFBO1lBQUE7Y0FDQTtjQUNBQztnQkFDQTlCO2NBQ0E7Y0FDQTtjQUNBO2NBR0E7Y0FDQTtnQkFDQU07a0JBQ0FDO2dCQUNBO2NBQ0E7Y0FDQTtjQUNBO2NBQ0E7Y0FDQTtjQUNBO2NBQ0E7Z0JBQ0FtQjtnQkFDQUM7a0JBQ0FDO2tCQUNBRjtnQkFDQTtjQUNBO2NBQ0E7Y0FDQTtjQUNBO2NBQUEsTUFFQTtnQkFBQTtnQkFBQTtjQUFBO2NBQUE7Y0FBQSxPQUdBO1lBQUE7Y0FBQTtjQUFBO1lBQUE7Y0FBQTtjQUFBLE9BRUE7WUFBQTtjQUFBO2NBQUEsT0FFQTtZQUFBO1lBQUE7Y0FBQTtVQUFBO1FBQUE7TUFBQTtJQUFBO0VBNEJBO0VBQ0FLO0lBQ0E7SUFDQUM7TUFDQTtNQUNBO01BQ0E7TUFFQUM7UUFDQUM7UUFDQUM7UUFDQXBDO1FBQ0FtQztVQUNBO1lBQ0FFO1VBQ0E7WUFDQTtjQUNBQTtZQUNBO1VBQ0E7VUFDQXJDO1FBQ0E7TUFDQTtJQUNBO0lBRUE7SUFDQXNDO01BQUE7TUFBQTtRQUFBO1FBQUE7VUFBQTtZQUFBO2NBQUE7Z0JBQ0E7Z0JBQ0EsNkJBQ0E7Z0JBQ0E7Z0JBQUEsS0FDQTtrQkFBQTtrQkFBQTtnQkFBQTtnQkFBQTtnQkFBQSxPQUNBO2NBQUE7Z0JBQ0E7Z0JBQ0E7a0JBQ0FDO2tCQUNBO29CQUFBO3NCQUFBO3dCQUFBOzBCQUFBOzRCQUFBOzhCQUNBO2dDQUNBQTtrQ0FBQTtvQ0FBQTtzQ0FBQTt3Q0FBQTswQ0FBQTs0Q0FDQTs4Q0FDQUM7NENBQ0E7MENBQUE7MENBQUE7NENBQUE7d0NBQUE7c0NBQUE7b0NBQUE7a0NBQUEsQ0FDQTtrQ0FBQTtvQ0FBQTtrQ0FBQTtnQ0FBQTs4QkFDQTtnQ0FDQUE7a0NBQUE7b0NBQUE7c0NBQUE7d0NBQUE7MENBQUE7NENBQ0E7OENBQ0FEO2dEQUFBLDRHQUNBRTtrREFBQTtvREFBQTtzREFBQTt3REFBQTswREFDQTs0REFDQUM7MERBQ0E7d0RBQUE7d0RBQUE7MERBQUE7c0RBQUE7b0RBQUE7a0RBQUE7Z0RBQUEsQ0FDQTtnREFBQTtrREFBQTtnREFBQTs4Q0FBQTs0Q0FDQTswQ0FBQTswQ0FBQTs0Q0FBQTt3Q0FBQTtzQ0FBQTtvQ0FBQTtrQ0FBQSxDQUNBO2tDQUFBO29DQUFBO2tDQUFBO2dDQUFBOzhCQUNBOzRCQUFBOzRCQUFBOzhCQUFBOzBCQUFBO3dCQUFBO3NCQUFBO29CQUFBLENBQ0E7b0JBQUE7c0JBQUE7b0JBQUE7a0JBQUE7Z0JBQ0E7Y0FBQTtnQkFFQTtnQkFBQSxLQUNBO2tCQUFBO2tCQUFBO2dCQUFBO2dCQUFBO2dCQUFBLE9BQ0E7Y0FBQTtnQkFBQTtnQkFBQTtjQUFBO2dCQUVBO2dCQUNBO2dCQUNBO2dCQUNBO2dCQUFBO2dCQUFBLE9BQ0E7Y0FBQTtjQUFBO2dCQUFBO1lBQUE7VUFBQTtRQUFBO01BQUE7SUFHQTtJQUNBO0lBQ0FDO01BQUE7TUFBQTtRQUFBO1VBQUE7WUFBQTtjQUFBO2dCQUFBLEtBRUE7a0JBQUE7a0JBQUE7Z0JBQUE7Z0JBQUEsTUFDQTtrQkFBQTtrQkFBQTtnQkFBQTtnQkFBQTtjQUFBO2dCQUdBO2dCQUNBO2tCQUNBO2tCQUNBO2dCQUNBO2dCQUFBO2dCQUFBLE9BQ0E7Y0FBQTtjQUFBO2dCQUFBO1lBQUE7VUFBQTtRQUFBO01BQUE7SUFFQTtJQUNBQztNQUNBO01BQ0E7SUFDQTtJQUNBQztNQUFBO01BQUE7UUFBQTtRQUFBO1VBQUE7WUFBQTtjQUFBO2dCQUFBO2dCQUNBQztnQkFDQUM7a0JBQ0FDO2tCQUNBQztnQkFDQSxHQUNBO2dCQUNBO2tCQUNBO2tCQUNBO29CQUNBO29CQUNBO3NCQUNBO3NCQUNBNUM7c0JBQ0E7c0JBQ0Esb0ZBQ0E2QztvQkFDQTtvQkFDQUo7b0JBQ0E7b0JBQ0E7b0JBQ0FBO3NCQUFBO3dCQUFBOzBCQUFBOzRCQUFBOzhCQUFBO2dDQUNBO2dDQUFBLE1BQ0FOO2tDQUFBO2tDQUFBO2dDQUFBO2dDQUFBO2dDQUFBLE9BQ0E7OEJBQUE7OEJBQUE7Z0NBQUE7NEJBQUE7MEJBQUE7d0JBQUE7c0JBQUEsQ0FFQTtzQkFBQTt3QkFBQTtzQkFBQTtvQkFBQTtrQkFFQTtvQkFDQVQ7c0JBQ0E5QjtzQkFDQWtEO3NCQUNBQztzQkFDQUM7b0JBQ0E7a0JBQ0E7Z0JBQ0E7a0JBQ0E7a0JBQ0F0QjtvQkFDQTlCO29CQUNBa0Q7b0JBQ0FDO29CQUNBQztrQkFDQTtnQkFDQTtjQUFBO2NBQUE7Z0JBQUE7WUFBQTtVQUFBO1FBQUE7TUFBQTtJQUVBO0lBQ0FDO01BQUE7TUFBQTtRQUFBO1FBQUE7VUFBQTtZQUFBO2NBQUE7Z0JBQUE7Z0JBQ0FSO2dCQUNBQztrQkFDQUM7a0JBQ0FDO2dCQUNBO2dCQUNBO2tCQUNBO2tCQUNBO29CQUNBO29CQUNBO3NCQUNBO3NCQUNBNUM7c0JBQ0E7c0JBQ0Esb0ZBQ0E2QztvQkFDQTtvQkFDQUo7b0JBQ0FBO29CQUNBO29CQUNBO29CQUNBO29CQUNBO29CQUNBO2tCQUVBO29CQUNBZjtzQkFDQTlCO3NCQUNBa0Q7c0JBQ0FDO3NCQUNBQztvQkFDQTtrQkFDQTtnQkFDQTtrQkFDQTtrQkFDQXRCO29CQUNBOUI7b0JBQ0FrRDtvQkFDQUM7b0JBQ0FDO2tCQUNBO2dCQUNBO2NBQUE7Y0FBQTtnQkFBQTtZQUFBO1VBQUE7UUFBQTtNQUFBO0lBRUE7SUFDQUU7TUFBQTtNQUFBO1FBQUE7UUFBQTtVQUFBO1lBQUE7Y0FBQTtnQkFBQTtnQkFDQVQ7Z0JBQ0FDO2tCQUNBQztrQkFDQUM7Z0JBQ0E7Z0JBQ0E7a0JBQ0E7a0JBQ0E7b0JBQ0E7b0JBQ0E7c0JBQ0E7c0JBQ0E1QztzQkFDQTtzQkFDQSxvRkFDQTZDO29CQUNBO29CQUNBO29CQUNBSjtvQkFDQTtrQkFDQTtvQkFDQWY7c0JBQ0E5QjtzQkFDQWtEO3NCQUNBQztzQkFDQUM7b0JBQ0E7a0JBQ0E7Z0JBQ0E7a0JBQ0E7a0JBQ0F0QjtvQkFDQTlCO29CQUNBa0Q7b0JBQ0FDO29CQUNBQztrQkFDQTtnQkFDQTtjQUFBO2NBQUE7Z0JBQUE7WUFBQTtVQUFBO1FBQUE7TUFBQTtJQUVBO0lBQ0FHO01BQUE7TUFBQTtRQUFBO1FBQUE7VUFBQTtZQUFBO2NBQUE7Z0JBQUE7Z0JBQ0E7Z0JBQ0FWO2dCQUNBQztrQkFDQVU7a0JBQ0FDO2dCQUNBLEdBQ0E7Z0JBQ0E7a0JBQUE7b0JBQUE7b0JBQUE7c0JBQUE7d0JBQUE7MEJBQUE7NEJBQ0E7NEJBQ0E7OEJBQ0E7Z0NBQ0FDO2dDQUNBQztnQ0FDQUM7a0NBQ0EsNEJBQ0FEO2tDQUNBRDtvQ0FDQUc7b0NBQ0FDO2tDQUNBO2dDQUNBO2dDQUNBO2dDQUNBO2tDQUNBakI7a0NBQ0FrQjtrQ0FDQWxCO2dDQUNBO2dDQUNBQTtnQ0FDQXhDO2dDQUNBd0M7Z0NBQ0FBOzhCQUNBO2dDQUNBO2dDQUNBOzhCQUFBOzRCQUdBOzhCQUNBZjtnQ0FDQTlCO2dDQUNBa0Q7Z0NBQ0FDO2dDQUNBQzs4QkFDQTs0QkFDQTswQkFBQTswQkFBQTs0QkFBQTt3QkFBQTtzQkFBQTtvQkFBQTtrQkFBQSxDQUNBO2tCQUFBO29CQUFBO2tCQUFBO2dCQUFBO2tCQUNBO2tCQUNBdEI7b0JBQ0E5QjtvQkFDQWtEO29CQUNBQztvQkFDQUM7a0JBQ0E7Z0JBQ0E7Y0FBQTtjQUFBO2dCQUFBO1lBQUE7VUFBQTtRQUFBO01BQUE7SUFDQTtJQUVBO0lBQ0FZO01BQUE7TUFBQTtRQUFBO1FBQUE7VUFBQTtZQUFBO2NBQUE7Z0JBQ0E7a0JBQ0E7b0JBQ0FuQjtvQkFDQUM7c0JBQ0FtQjtzQkFDQUM7c0JBQ0FuQjtzQkFDQW9CO29CQUNBO29CQUNBO3NCQUNBO3NCQUNBO3dCQUNBO3dCQUNBOzBCQUNBLHdFQUNBQzswQkFDQTs0QkFDQTs4QkFDQTs4QkFDQTs0QkFDQTs0QkFDQXRDOzhCQUNBOUI7OEJBQ0FrRDs4QkFDQUM7OEJBQ0FDOzRCQUNBOzBCQUNBOzRCQUNBcEQ7NEJBQ0FrRCwrREFDQW1COzRCQUNBbEI7NEJBQ0FDOzBCQUNBOzBCQUNBO3dCQUNBOzBCQUNBLHVFQUNBa0I7MEJBQ0E7NEJBQ0F0RTs0QkFDQWtEOzRCQUNBQzs0QkFDQUM7MEJBQ0E7MEJBRUE7NEJBQ0FrQjs4QkFDQTtnQ0FDQTtnQ0FDQXpCO2dDQUNBQSxrREFDQTdCO2dDQUNBNkI7Z0NBQ0FBO2dDQUNBQTtnQ0FDQUE7OEJBQ0E7NEJBRUE7MEJBQ0E7NEJBQ0E7NEJBQ0E7OEJBQ0FmO2dDQUNBOUI7Z0NBQ0FrRDtnQ0FDQUM7Z0NBQ0FDOzhCQUNBOzRCQUNBOzBCQUNBO3dCQUNBO3NCQUVBO3dCQUNBdEI7MEJBQ0E5QjswQkFDQWtEOzBCQUNBQzswQkFDQUM7d0JBQ0E7c0JBQ0E7b0JBQ0E7c0JBQ0E7c0JBQ0F0Qjt3QkFDQTlCO3dCQUNBa0Q7d0JBQ0FDO3dCQUNBQztzQkFDQTtvQkFDQTtrQkFDQTtnQkFDQTtrQkFDQW1CO2tCQUNBekM7b0JBQ0E5QjtvQkFDQWtELHlGQUNBcUI7b0JBQ0FwQjtvQkFDQUM7a0JBQ0E7Z0JBRUE7Y0FBQTtjQUFBO2dCQUFBO1lBQUE7VUFBQTtRQUFBO01BQUE7SUFDQTtJQUNBO0lBQ0FvQjtNQUFBO01BQUE7UUFBQTtRQUFBO1VBQUE7WUFBQTtjQUFBO2dCQUNBO2tCQUNBMUM7b0JBQ0E5QjtvQkFDQXlFO2tCQUNBO2tCQUNBO2tCQUNBQztrQkFDQTtvQkFDQTtvQkFDQUE7a0JBQ0E7a0JBQ0E7a0JBQ0E7a0JBQ0E3QjtrQkFDQUM7b0JBQ0FDO29CQUNBVDtvQkFDQW9DO29CQUNBQztvQkFDQUM7b0JBQ0F6RDtvQkFDQTBEO29CQUNBNUQ7a0JBQ0E7a0JBQ0E7b0JBQ0E7b0JBQ0FhO29CQUNBO3NCQUNBO3NCQUNBZTtzQkFDQTt3QkFDQUE7d0JBQ0E7d0JBQ0E7d0JBQ0E7MEJBQ0F3Qjs0QkFDQTs4QkFDQXpDOzRCQUNBOzRCQUNBa0Q7OEJBQ0FDOzRCQUNBOzRCQUNBOzhCQUNBQzs4QkFDQTFFOzhCQUNBeUU7NEJBQ0E7NEJBQ0FFLCtEQUNBQzs0QkFDQUQ7NEJBQ0FBOzRCQUNBcEM7NEJBQ0FBOzhCQUNBc0M7NEJBQ0E7MEJBQ0E7MEJBQ0E7MEJBQ0E7MEJBQ0F0Qzs0QkFDQXVDOzhCQUNBeEQ7OEJBQ0FVO2dDQUFBO2tDQUNBeUI7a0NBQ0FEO2dDQUNBOzhCQUFBOzRCQUNBOzBCQUNBOzBCQUNBOzBCQUNBOzBCQUNBOzBCQUNBLHFEQUNBdUI7MEJBQ0E7MEJBQ0F4Qzs0QkFDQW9COzRCQUNBQzs0QkFDQW5COzRCQUNBb0I7NEJBQ0FtQjswQkFDQTt3QkFDQTswQkFDQTswQkFDQWpCOzRCQUNBOzRCQUNBOzRCQUNBOzRCQUNBOzRCQUNBOzRCQUNBUzs4QkFDQTs4QkFDQUc7Z0NBQ0E7a0NBQ0Esa0NBQ0FuQjtnQ0FDQTtrQ0FDQXZCLDRCQUNBO29DQUNBO3NDQUNBLG1CQUNBd0IsZUFDQUQsYUFDQUE7b0NBQ0E7a0NBQ0E7Z0NBQ0E7OEJBQ0E7NEJBQ0E7NEJBRUFtQiwrREFDQUM7NEJBQ0FEOzRCQUNBQTs0QkFDQXBDOzRCQUNBQTs4QkFDQXNDOzRCQUNBOzRCQUNBOzBCQUNBO3dCQUNBOzt3QkFFQTt3QkFDQTt3QkFDQXRDO3dCQUNBMEM7MEJBQ0ExQzt3QkFDQTt3QkFDQTtzQkFDQTtvQkFJQTtzQkFDQWY7d0JBQ0E5Qjt3QkFDQWtEO3dCQUNBQzt3QkFDQUM7c0JBQ0E7b0JBQ0E7a0JBQ0E7b0JBQ0E7b0JBQ0F0QjtzQkFDQTlCO3NCQUNBa0Q7c0JBQ0FDO3NCQUNBQztvQkFDQTtrQkFDQTtnQkFDQTtrQkFDQW1CO2tCQUNBekM7b0JBQ0E5QjtvQkFDQWtEO29CQUNBQztvQkFDQUM7a0JBQ0E7Z0JBQ0E7Y0FBQTtjQUFBO2dCQUFBO1lBQUE7VUFBQTtRQUFBO01BQUE7SUFDQTtJQUVBO0lBQ0FvQztNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7SUFDQTtJQUNBO0lBQ0FDO01BQUE7TUFBQTtRQUFBO1FBQUE7VUFBQTtZQUFBO2NBQUE7Z0JBQ0E7a0JBQ0E7b0JBQ0E7b0JBQ0E1QztvQkFDQWY7c0JBQ0E0RCxtRkFDQTtzQkFDQUM7d0JBQ0E7d0JBQ0FDOzBCQUFBOzBCQUNBOzBCQUNBOzBCQUNBOzBCQUNBOzRCQUNBOzhCQUNBO2dDQUNBOzhCQUNBOzhCQUNBL0M7Z0NBQ0FnRDs4QkFDQTs4QkFDQTs4QkFDQTs4QkFDQWhEO2dDQUNBb0I7Z0NBQ0FDO2dDQUNBbkI7Z0NBQ0FvQjtnQ0FDQTJCO2dDQUNBRDtnQ0FDQUU7OEJBQ0E7NEJBQ0E7OEJBQ0E7OEJBQ0FqRTtnQ0FDQTlCO2dDQUNBa0Q7Z0NBQ0FDO2dDQUNBQzs4QkFDQTs0QkFDQTswQkFDQTt3QkFDQTtzQkFDQTtvQkFDQTtrQkFDQTtnQkFDQTtjQUFBO2NBQUE7Z0JBQUE7WUFBQTtVQUFBO1FBQUE7TUFBQTtJQUNBO0lBQ0E7SUFDQTRDO01BQ0E7TUFDQTtRQUNBbEU7VUFDQTlCO1VBQ0FrRDtVQUNBVTtZQUNBO2NBQ0F4QjtjQUNBO2NBQ0E7WUFDQTtVQUNBO1FBQ0E7TUFDQTtJQUNBO0lBQ0E7SUFDQTZEO01BQUE7TUFDQTtNQUNBO01BQ0E7UUFDQUM7TUFDQTtNQUNBcEU7UUFDQTtRQUNBcUU7UUFDQXZDO1VBQ0E7VUFDQTtVQUNBO1lBQ0E5QjtjQUNBOUI7Y0FDQWtEO2NBQ0FVO2dCQUNBO2tCQUNBeEI7a0JBQ0E7a0JBQ0E7Z0JBQ0E7Y0FDQTtZQUNBO1VBQ0E7UUFDQTtNQUNBO0lBQ0E7SUFDQTtJQUNBZ0U7TUFBQTtNQUFBO1FBQUE7UUFBQTtVQUFBO1lBQUE7Y0FBQTtnQkFDQUM7Z0JBQ0E7a0JBQ0FDO29CQUNBQztvQkFDQUM7b0JBQ0FDO29CQUNBQztvQkFDQUM7a0JBQ0E7a0JBQ0E7b0JBQ0E7c0JBQ0E7b0JBQ0E7a0JBQ0E7b0JBQ0E7b0JBQ0E7b0JBQ0E7a0JBQ0E7b0JBQ0E7b0JBQ0E7b0JBQ0E7a0JBQ0E7b0JBQ0E7b0JBQ0E7b0JBQ0E7a0JBQ0E7b0JBQ0E3RTtzQkFDQTlCO3NCQUNBa0Q7c0JBQ0FDO3NCQUNBQztvQkFDQTtrQkFDQTtnQkFDQTtrQkFDQW1CO2tCQUNBekM7b0JBQ0E5QjtvQkFDQWtEO29CQUNBQztvQkFDQUM7a0JBQ0E7Z0JBQ0E7Y0FBQTtjQUFBO2dCQUFBO1lBQUE7VUFBQTtRQUFBO01BQUE7SUFDQTtJQUNBO0lBQ0F3RDtNQUNBO1FBQ0FDO1FBQ0FDO1FBQ0FDO1FBQ0FDO1FBQ0FDO01BQ0E7TUFDQTtNQUNBbkY7UUFDQTRELHlGQUNBO1FBQ0FDO1VBQ0E7VUFDQXVCO1lBQ0E7WUFDQXJFO1VBQ0E7UUFDQTtNQUNBO0lBQ0E7SUFDQTtJQUNBc0U7TUFDQTtNQUNBO01BQ0FyRjtRQUNBOUI7UUFDQWtEO1FBQ0FVO1VBQUE7VUFDQTtZQUNBO1lBQ0E7WUFFQTtjQUNBYjtjQUNBcUU7Y0FDQUM7WUFDQTtZQUNBO1lBQ0F4RTtjQUNBO2NBQ0E7Z0JBQ0E7Z0JBQ0FBLDREQUNBeUQ7Z0JBQ0E7Z0JBQ0F6RDtrQkFDQTtvQkFDQUE7a0JBQ0E7Z0JBQ0E7Z0JBQ0FmO2tCQUNBOUI7a0JBQ0FrRDtrQkFDQUM7a0JBQ0FDO2dCQUNBO2NBRUE7Z0JBQ0F0QjtrQkFDQTlCO2tCQUNBa0Q7a0JBQ0FDO2tCQUNBQztnQkFDQTtjQUNBO1lBQ0E7Y0FDQTtjQUNBdEI7Z0JBQ0E5QjtnQkFDQWtEO2dCQUNBQztnQkFDQUM7Y0FDQTtZQUNBO1VBQ0Esd0JBRUE7UUFDQTtNQUNBO0lBRUE7SUFDQTtJQUNBa0U7TUFBQTtNQUFBO1FBQUE7UUFBQTtVQUFBO1lBQUE7Y0FBQTtnQkFBQTtnQkFDQTtrQkFDQXpCO29CQUNBMEI7a0JBQ0E7a0JBQ0FsQjtvQkFDQVI7a0JBQ0E7a0JBRUE7b0JBQ0E7b0JBQ0E7b0JBQ0E7c0JBQUE7d0JBQUE7MEJBQUE7NEJBQUE7OEJBQUE7Z0NBQ0E7a0NBQ0E7b0NBQ0FBO2tDQUNBO2dDQUNBO2tDQUNBdEQ7b0NBQUE7c0NBQUE7d0NBQUE7MENBQUE7NENBQUE7OENBQ0E7Z0RBQ0E7a0RBQ0FzRDtnREFDQTs4Q0FDQTs0Q0FBQTs0Q0FBQTs4Q0FBQTswQ0FBQTt3Q0FBQTtzQ0FBQTtvQ0FBQSxDQUNBO29DQUFBO3NDQUFBO29DQUFBO2tDQUFBO2dDQUNBOzhCQUFBOzhCQUFBO2dDQUFBOzRCQUFBOzBCQUFBO3dCQUFBO3NCQUFBLENBQ0E7c0JBQUE7d0JBQUE7c0JBQUE7b0JBQUE7a0JBQ0E7a0JBRUEvQztvQkFDQW1CO29CQUNBQztvQkFDQW5CO29CQUNBb0I7b0JBQ0EyQjtvQkFDQUQ7a0JBQ0E7a0JBQ0E7b0JBQ0E7b0JBQ0E7c0JBQ0E7c0JBQ0E7d0JBQ0Esc0RBQ0EsV0FDQXZCLE9BQ0FGO3dCQUNBOzBCQUNBOzRCQUNBOzRCQUNBOzBCQUNBOzBCQUNBdEM7NEJBQ0E5Qjs0QkFDQWtEOzRCQUNBQzs0QkFDQUM7MEJBQ0E7d0JBQ0E7MEJBQ0FwRDswQkFDQWtELG1EQUNBLE1BQ0FvQixPQUNBRDswQkFDQWxCOzBCQUNBQzt3QkFDQTt3QkFDQTtzQkFDQTt3QkFDQSxnRUFDQTJCLE9BQ0FUO3dCQUNBOzBCQUNBdEU7MEJBQ0FrRDswQkFDQUM7MEJBQ0FDO3dCQUNBO3NCQUVBO29CQUNBO3NCQUNBdEI7d0JBQ0E5Qjt3QkFDQWtEO3dCQUNBQzt3QkFDQUM7c0JBQ0E7b0JBQ0E7a0JBRUE7b0JBQ0E7b0JBQ0F0QjtzQkFDQTlCO3NCQUNBa0Q7c0JBQ0FDO3NCQUNBQztvQkFDQTtrQkFDQTtnQkFDQTtrQkFDQW1CO2tCQUNBekM7b0JBQ0E5QjtvQkFDQWtEO29CQUNBQztvQkFDQUM7a0JBQ0E7a0JBQ0E7Z0JBQ0E7Y0FBQTtjQUFBO2dCQUFBO1lBQUE7VUFBQTtRQUFBO01BQUE7SUFDQTtJQUNBO0lBQ0FvRTtNQUFBO01BQUE7UUFBQTtRQUFBO1FBQUE7VUFBQTtZQUFBO2NBQUE7Z0JBRUEsSUFDQSxxSkFDQSx3SkFDQSx3SkFDQSx3SkFDQSx3SkFDQSx3SkFDQSxzSkFDQTtrQkFDQTlGO2tCQUNBLHFUQUNBQTtrQkFFQW1CO2tCQUNBNEU7b0JBQ0FDO2tCQUNBO2tCQUNBO29CQUNBO29CQUNBO3NCQUNBO3dCQUNBO3dCQUNBO3dCQUNBLHdDQUNBQzt3QkFDQTt3QkFDQTswQkFDQTswQkFDQXpIOzBCQUNBOzBCQUNBO3dCQUNBO3dCQUNBOzBCQUNBNEI7NEJBQ0E5Qjs0QkFDQWtEOzRCQUNBQzs0QkFDQUM7MEJBQ0E7MEJBQ0E7d0JBQ0E7d0JBRUF0QjswQkFDQTRELDhEQUNBa0MsVUFDQSwyREFDQXRIOzBCQUNBcUY7NEJBQ0FrQzs4QkFDQTs4QkFDQWhGOzRCQUNBOzBCQUNBO3dCQUNBO3NCQUNBO3dCQUNBZjswQkFDQTlCOzBCQUNBa0Q7MEJBQ0FDOzBCQUNBQzt3QkFDQTtzQkFDQTtvQkFDQTtzQkFDQXRCO3dCQUNBOUI7d0JBQ0FrRDt3QkFDQUM7d0JBQ0FDO3NCQUNBO29CQUNBO2tCQUNBO29CQUNBO29CQUNBdEI7c0JBQ0E5QjtzQkFDQWtEO3NCQUNBQztzQkFDQUM7b0JBQ0E7a0JBQ0E7Z0JBQ0E7a0JBQ0F0QjtvQkFDQTlCO29CQUNBa0Q7b0JBQ0FDO29CQUNBQztrQkFDQTtnQkFFQTtjQUFBO2NBQUE7Z0JBQUE7WUFBQTtVQUFBO1FBQUE7TUFBQTtJQUNBO0lBQ0E7SUFDQTBFO01BQUE7TUFBQTtRQUFBO1FBQUE7VUFBQTtZQUFBO2NBQUE7Z0JBQUE7Z0JBQUEsS0FFQUM7a0JBQUE7a0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUEsT0FFQTtrQkFDQTlEO2tCQUNBQztrQkFDQW5CO2tCQUNBb0I7Z0JBQ0E7Y0FBQTtnQkFBQTtnQkFBQTtjQUFBO2dCQUFBO2dCQUFBO2dCQUdBSTtnQkFDQXpDO2tCQUNBOUI7a0JBQ0FrRDtrQkFDQUM7a0JBQ0FDO2dCQUNBO2NBQUE7Y0FBQTtnQkFBQTtZQUFBO1VBQUE7UUFBQTtNQUFBO0lBRUE7SUFFQTRFO01BQUE7TUFBQTtNQUNBO01BQ0E7TUFDQUM7UUFDQTtRQUNBQztRQUNBcEc7UUFDQTtRQUVBO1FBQ0E7VUFDQW9HO1VBQ0E7VUFDQTtVQUNBO1VBQ0EsMkNBQ0FDO1VBQ0E7VUFDQTtVQUVBO1lBQUE7WUFDQXRGO1VBQ0E7WUFDQUE7WUFDQSxnQkFDQUE7WUFDQUE7WUFDQUE7WUFDQUE7WUFDQUE7VUFDQTtVQUNBO1lBQUE7WUFDQUE7WUFDQTtZQUNBO1lBQ0EwQztjQUNBekQ7WUFDQTtZQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7UUFDQTtNQUNBO0lBQ0E7SUFDQXNHO01BQUE7TUFDQTtNQUNBO1FBQ0FGO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBRUE7VUFBQTtVQUNBO1FBQ0E7VUFDQTtVQUNBLGdCQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtNQUNBO0lBQ0E7SUFDQTtJQUNBRztNQUFBO01BQUE7UUFBQTtRQUFBO1VBQUE7WUFBQTtjQUFBO2dCQUNBO2tCQUNBO29CQUNBeEMsNkNBQ0E7b0JBQ0FFLG1DQUNBdUMsZUFDQXJHO3NCQUFBO3dCQUNBOEI7d0JBQ0FEO3NCQUNBO29CQUFBLEdBQ0EsQ0FDQTtvQkFDQWpCO29CQUNBQztzQkFDQW1CO3NCQUNBQztzQkFDQW5CO3NCQUNBcUU7c0JBQ0FqRDtzQkFDQW9FO3NCQUNBekM7c0JBQ0FEO3NCQUNBMkM7c0JBQ0FDO3NCQUNBQztzQkFDQUM7c0JBQ0FyRDtzQkFDQXNEO3NCQUNBQztzQkFDQUM7c0JBQ0EvQztvQkFDQTtvQkFDQTtzQkFDQTtzQkFDQTt3QkFDQTt3QkFDQTswQkFDQSxzREFDQSxXQUNBekIsT0FDQUY7MEJBQ0E7NEJBQ0E7OEJBQ0E7OEJBQ0E7NEJBQ0E7NEJBQ0F0Qzs4QkFDQTlCOzhCQUNBa0Q7OEJBQ0FDOzhCQUNBQzs0QkFDQTswQkFDQTs0QkFDQXBEOzRCQUNBa0QsbURBQ0EsTUFDQW9CLE9BQ0FEOzRCQUNBbEI7NEJBQ0FDOzBCQUNBOzBCQUNBO3dCQUNBOzBCQUNBLGdFQUNBMkIsT0FDQVQ7MEJBQ0E7NEJBQ0F0RTs0QkFDQWtEOzRCQUNBQzs0QkFDQUM7MEJBQ0E7MEJBRUE7NEJBQ0FrQjs4QkFDQTtnQ0FDQTtnQ0FDQTtnQ0FDQXpCLHFDQUNBa0c7a0NBQUEsb0ZBQ0EsbUJBQ0F4RztvQ0FBQTtzQ0FBQTt3Q0FBQTswQ0FBQTs0Q0FDQXhDOzhDQUFBLDhHQUNBaUo7Z0RBQUE7a0RBQUE7b0RBQUE7c0RBQUE7d0RBQ0EsUUFDQUMsV0FDQUMsS0FDQW5GLE1BQ0E7MERBQ0F4QixZQUNBMkcsS0FDQXBGO3dEQUNBO3NEQUFBO3NEQUFBO3dEQUFBO29EQUFBO2tEQUFBO2dEQUFBOzhDQUFBLENBQ0E7OENBQUE7Z0RBQUE7OENBQUE7NENBQUE7MENBQUE7MENBQUE7NENBQUE7d0NBQUE7c0NBQUE7b0NBQUE7a0NBQUEsQ0FDQTtrQ0FBQTtvQ0FBQTtrQ0FBQTtnQ0FBQTs4QkFDQTs0QkFDQTswQkFDQTs0QkFDQTs0QkFDQTs4QkFDQWhDO2dDQUNBOUI7Z0NBQ0FrRDtnQ0FDQUM7Z0NBQ0FDOzhCQUNBOzRCQUNBOzBCQUNBO3dCQUNBO3NCQUVBO3dCQUNBdEI7MEJBQ0E5QjswQkFDQWtEOzBCQUNBQzswQkFDQUM7d0JBQ0E7c0JBQ0E7b0JBQ0E7c0JBQ0E7c0JBQ0F0Qjt3QkFDQTlCO3dCQUNBa0Q7d0JBQ0FDO3dCQUNBQztzQkFDQTtvQkFDQTtrQkFDQTtnQkFDQTtrQkFDQW1CO2tCQUNBekM7b0JBQ0E5QjtvQkFDQWtELDBFQUNBaUcsYUFDQSxXQUNBO29CQUNBaEc7b0JBQ0FDO2tCQUNBO2dCQUVBO2NBQUE7Y0FBQTtnQkFBQTtZQUFBO1VBQUE7UUFBQTtNQUFBO0lBQ0E7SUFDQTtJQUNBZ0c7TUFBQTtNQUNBO01BQ0E7UUFDQTdHO01BQ0E7TUFDQTtJQUNBO0lBRUE7SUFDQThHO01BQUE7TUFBQTtRQUFBO1FBQUE7VUFBQTtZQUFBO2NBQUE7Z0JBQ0E7a0JBQ0F4RztrQkFDQTtvQkFDQTtvQkFDQTtzQkFDQTtzQkFDQTt3QkFDQSxzREFDQSxXQUNBeUIsT0FDQUY7d0JBQ0E7MEJBQ0E7NEJBQ0E7NEJBQ0E7MEJBQ0E7MEJBQ0F0Qzs0QkFDQTlCOzRCQUNBa0Q7NEJBQ0FDOzRCQUNBQzswQkFDQTt3QkFDQTswQkFDQXBEOzBCQUNBa0QsbURBQ0EsTUFDQW9COzBCQUNBbkI7MEJBQ0FDO3dCQUNBO3dCQUNBO3NCQUNBO3dCQUNBLGdFQUNBMkIsY0FDQUE7d0JBQ0E7MEJBQ0EvRTswQkFDQWtEOzBCQUNBQzswQkFDQUM7d0JBQ0E7d0JBRUE7MEJBQ0FrQjs0QkFDQSx3QkFDQTs4QkFBQTs4QkFDQTs4QkFDQXhDO2dDQUNBd0g7OEJBQ0E7NEJBQ0EsK0JBQ0E7OEJBQUE7OEJBQ0E7OEJBQ0F4RjtnQ0FDQSx3QkFDQXlGLFNBQ0FDLFlBQ0FDO2tDQUFBLGNBQ0FDLFlBQ0FDO2dDQUFBO2dDQUNBLGdCQUNBOUcscUJBQ0EyRyxtQkFDQVI7OEJBQ0E7OEJBQ0E7OEJBQ0E7NEJBQ0EsK0JBQ0E7OEJBQUE7OEJBQ0E7OEJBQ0FuRzs4QkFDQTs4QkFDQTs4QkFDQTs0QkFFQTs4QkFDQWY7Z0NBQ0E5Qiw0QkFDQTtnQ0FDQWtELDhCQUNBLHNCQUNBLEdBQ0FnRixLQUNBMEIsc0JBQ0FULGFBQ0EsdUJBQ0EsR0FDQSxRQUNBVSxVQUNBLHlCQUNBO2dDQUNBMUc7Z0NBQ0FDLGtDQUNBOzhCQUNBOzRCQUNBOzBCQUNBO3dCQUNBOzBCQUNBOzBCQUNBOzRCQUNBdEI7OEJBQ0E5Qjs4QkFDQWtEOzhCQUNBQzs4QkFDQUM7NEJBQ0E7MEJBQ0E7d0JBQ0E7c0JBQ0E7b0JBRUE7c0JBQ0F0Qjt3QkFDQTlCO3dCQUNBa0Q7d0JBQ0FDO3dCQUNBQztzQkFDQTtvQkFDQTtrQkFDQTtvQkFDQTtvQkFDQXRCO3NCQUNBOUI7c0JBQ0FrRDtzQkFDQUM7c0JBQ0FDO29CQUNBO2tCQUNBO2dCQUNBO2tCQUNBbUI7a0JBQ0F6QztvQkFDQTlCO29CQUNBa0QsMEVBQ0EsV0FDQTtvQkFDQUM7b0JBQ0FDO2tCQUNBO2dCQUVBO2NBQUE7Y0FBQTtnQkFBQTtZQUFBO1VBQUE7UUFBQTtNQUFBO0lBQ0E7SUFFQTBHO01BQUE7TUFDQTtNQUNBO01BQ0E7TUFDQWhJO1FBQ0F3SDtNQUNBO0lBQ0E7SUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0lBRUFTO01BQ0E7TUFDQTtNQUNBO01BQ0FyRztRQUNBO1FBQ0Esd0VBQ0EsT0FDQSxZQUNBO1FBQ0E7VUFDQTtVQUNBNUM7WUFDQTtZQUNBLHdEQUNBLE9BQ0EsWUFDQTtZQUNBO1lBQ0E7Y0FDQTtnQkFDQWtKO2dCQUNBO2NBQ0E7WUFDQTtZQUNBO2NBQUE7Y0FDQTtjQUNBLGlIQUNBOUUsUUFDQTtjQUNBO2NBQ0E7Y0FFQSw4R0FDQStFLHVCQUNBLGtHQUNBQyxTQUNBO2dCQUNBcEcscUNBQ0E7Z0JBQ0Esa0RBQ0FBLGNBQ0FvQjtjQUNBO2dCQUFBO2dCQUNBcEIsZ0hBQ0FvQixRQUNBO2dCQUVBO2tCQUNBcEIsZ0RBQ0E7a0JBQ0FBO29CQUFBLGdCQUNBb0IsUUFDQSxXQUNBQTtrQkFBQTtnQkFDQTtjQUNBO2NBQ0FpRjtnQkFDQUM7Z0JBQ0F0RztnQkFDQXVHO2NBQ0E7WUFDQTtVQUNBO1FBQ0E7VUFDQTtVQUNBO1VBQ0F2SjtZQUNBO1lBQ0Esd0RBQ0EsT0FDQSxZQUNBO1lBQ0E7WUFDQTtjQUNBO2dCQUNBa0o7Z0JBQ0E7Y0FDQTtZQUNBO1lBQ0E7Y0FBQTtjQUNBO2NBQ0Esb0hBQ0E5RSxRQUNBO2NBQ0E7Y0FDQTtjQUVBLDhHQUNBK0UsdUJBQ0Esa0dBQ0FDLFNBQ0E7Z0JBQ0FwRyxxQ0FDQTtnQkFDQSxrREFDQUEsY0FDQW9CO2NBQ0E7Z0JBQUE7Z0JBQ0FwQixnSEFDQW9CLFFBQ0E7Z0JBRUE7a0JBQ0FwQixnREFDQTtrQkFDQUE7b0JBQUEsZ0JBQ0FvQixRQUNBLFdBQ0FBO2tCQUFBO2dCQUNBO2NBQ0E7Y0FDQWlGO2dCQUNBQztnQkFDQXRHO2dCQUNBdUc7Y0FDQTtZQUNBO1VBQ0E7VUFDQUY7UUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBLG1FQUNBakYsUUFDQTtVQUNBO1VBQ0E7WUFDQTtjQUNBOEU7Y0FDQTtZQUNBO1VBQ0E7VUFDQTtZQUFBO1lBQ0E7WUFDQTtZQUNBO1lBQ0E7WUFFQSwrSEFDQUUscUNBQ0FJO2NBQ0F4RyxnRUFDQXlHO2NBQ0EsZ0VBQ0FyRixtQkFDQUE7WUFDQTtjQUFBO2NBQ0FwQjtjQUVBO2dCQUNBQTtnQkFDQUE7a0JBQUEsK0JBQ0EsSUFDQW9CLGVBQ0E7Z0JBQUE7Y0FDQTtZQUNBO1lBQ0FpRjtjQUNBQztjQUNBdEc7Y0FDQXVHO1lBQ0E7VUFDQTtRQUNBO01BQ0E7TUFFQSxvQkFDQTtRQUNBRztRQUNBOUY7TUFDQSxTQUVBO0lBQ0E7SUFDQW1GO01BQ0EseUVBQ0E7SUFDQTtJQUNBVjtNQUNBLHdFQUNBO0lBQ0E7RUFFQTtBQUNBO0FBQUEsMkIiLCJmaWxlIjoiMTY5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiPHRlbXBsYXRlPlxyXG5cdDx2aWV3IGNsYXNzPVwidW5pLXBhZ2UtbW9kYWwtMzIwMFwiPlxyXG5cdFx0PHZpZXcgY2xhc3M9XCJ2LWNvbnRlbnRcIj5cclxuXHRcdFx0PCEtLSDooajlpLTmoLflvI8gLS0+XHJcblx0XHRcdDx2aWV3IGNsYXNzPVwidi1oZWFkU3R5bGVcIiB2LWZvcj1cIihpdGVtLGluZGV4KSBpbiBoZWFkX3N0eWxlZGVmLmZvcm0uaXRlbXNcIiB2LWlmPVwiaXNGaWx0ZXI9PXRydWVcIj5cclxuXHRcdFx0XHQ8dGV4dCBjbGFzcz1cInR4dF90aXRsZVwiIDpzdHlsZT1cInsnd2lkdGgnOml0ZW0ubGFiZWxXaWR0aCsncHgnfVwiPnt7aXRlbS5sYWJlbH1977yaPC90ZXh0PlxyXG5cdFx0XHRcdDwhLS0g5LiL5ouJ5qGGLeWNlemAiSBpdGVtLnVzZURpY3Q/aXRlbS5kaWN0Oml0ZW0uc2VsZWN0aW9ucy0tPlxyXG5cdFx0XHRcdDx1bmktZGF0YS1zZWxlY3QgaWQ9XCJkdl9zZWxlY3RcIiB2LWlmPVwiaXRlbS5uYW1lPT0nU2VsZWN0J1wiIDpjbGFzcz1cIml0ZW0uZGlzYWJsZWQ/J2lucHV0LWRpc2FibGVkJzonJ1wiXHJcblx0XHRcdFx0XHR2LW1vZGVsPVwiaXRlbS52YWx1ZVwiIDpsb2NhbGRhdGE9XCJpdGVtLmRpY3RcIiBAY2hhbmdlPVwib25DaGFuZ2UoaXRlbSlcIiA6ZGlzYWJsZWQ9XCJpdGVtLmRpc2FibGVkXCJcclxuXHRcdFx0XHRcdDpjbGVhcj1cImZhbHNlXCI+PC91bmktZGF0YS1zZWxlY3Q+XHJcblx0XHRcdFx0PHZpZXcgY2xhc3M9XCJpbnB1dC13cmFwcGVyXCIgdi1pZj1cIml0ZW0ubmFtZT09J0lucHV0JyB8fCBpdGVtLm5hbWU9PSdJbnB1dE51bWJlcidcIj5cclxuXHRcdFx0XHRcdDx0ZXh0IHYtaWY9XCJpdGVtLnNldHRpbmcucHJlZml4XCIgY2xhc3M9XCJ1bmktaWNvblwiIDpjbGFzcz1cIltpdGVtLnNldHRpbmcucHJlZml4XVwiXHJcblx0XHRcdFx0XHRcdEBjbGljaz1cIm9uRW50ZXJDaGFuZ2UoaXRlbSlcIj4mI3hlNTY4OzwvdGV4dD5cclxuXHRcdFx0XHRcdDxpbnB1dCBjbGFzcz1cInVuaS1pbnB1dFwiIDpjbGFzcz1cIml0ZW0uZGlzYWJsZWQ/J2lucHV0LWRpc2FibGVkJzonJ1wiXHJcblx0XHRcdFx0XHRcdDp0eXBlPVwiaXRlbS5uYW1lPT0nSW5wdXQnPyd0ZXh0JzonbnVtYmVyJ1wiIHYtbW9kZWw9XCJpdGVtLnZhbHVlXCIgOmRpc2FibGVkPVwiaXRlbS5kaXNhYmxlZFwiXHJcblx0XHRcdFx0XHRcdDpwbGFjZWhvbGRlcj1cIml0ZW0ucGxhY2Vob2xkZXJcIlxyXG5cdFx0XHRcdFx0XHQ6c3R5bGU9XCJ7J3dpZHRoJzppdGVtLnNldHRpbmcucHJlZml4ICYmIGl0ZW0uc2V0dGluZy5zdWZmaXg/Jzc4JSc6aXRlbS5zZXR0aW5nLnByZWZpeCB8fCBpdGVtLnNldHRpbmcuc3VmZml4Pyc4NyUnOic5NiUnfVwiXHJcblx0XHRcdFx0XHRcdDpmb2N1cz1cImZvY3VzTWF0ZXJpYVwiIEBmb2N1cz1cIm9udGFwKGl0ZW0pXCIgQGtleXVwLmVudGVyPVwib25FbnRlckNoYW5nZShpdGVtKVwiXHJcblx0XHRcdFx0XHRcdEBibHVyPVwib25FbnRlckNoYW5nZShpdGVtKVwiIC8+XHJcblx0XHRcdFx0XHQ8dGV4dCB2LWlmPVwiaXRlbS5zZXR0aW5nLnN1ZmZpeFwiIGNsYXNzPVwidW5pLWljb25cIiA6Y2xhc3M9XCJbaXRlbS5zZXR0aW5nLnN1ZmZpeF1cIlxyXG5cdFx0XHRcdFx0XHRAY2xpY2s9XCJvbkVudGVyQ2hhbmdlKGl0ZW0pXCI+JiN4ZTU2ODs8L3RleHQ+XHJcblx0XHRcdFx0PC92aWV3PlxyXG5cdFx0XHQ8L3ZpZXc+XHJcblxyXG5cdFx0XHQ8c2Nyb2xsLXZpZXcgOnNjcm9sbC10b3A9XCJzY3JvbGxUb3BcIiA6c2Nyb2xsLXk9XCJ0cnVlXCIgY2xhc3M9XCJzY3JvbGwtWVwiIEBzY3JvbGx0b2xvd2VyPVwic2Nyb2xsdG9sb3dlclwiXHJcblx0XHRcdFx0QHNjcm9sbD1cInNjcm9sbFwiPlxyXG5cdFx0XHRcdDx2aWV3IGNsYXNzPVwidmlldy1jb250ZW50XCIgaWQ9XCJ0YWJwYW5lbFwiPlxyXG5cdFx0XHRcdFx0PHZpZXcgY2xhc3M9XCJkdi1wYW5lbCBkdi1wYW5lbC1ia2NvbG9yXCIgdi1mb3I9XCIoc3R5bGUsaWkpIGluIGRldGFpbDFTdHlsZURlZkxpc3RcIlxyXG5cdFx0XHRcdFx0XHRAY2xpY2s9XCJvblBhbmVsQ2xpY2soaWkpXCIgOmlkPVwiJ3BhbmVsJytzdHlsZS5mb3JtLmh0bWxvYmpJZFwiXHJcblx0XHRcdFx0XHRcdDpjbGFzcz1cImFjdGl2ZWxpc3RbaWldLmFjdGl2ZT09dHJ1ZT8nYmstYWN0aXZlJzonJ1wiPlxyXG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiZHYtcGFuZWwtYnV0dG9uXCIgdi1pZj1cInBhcmFtLkxpc3RQYWdlLkNoZWNrQm94PT10cnVlXCI+XHJcblx0XHRcdFx0XHRcdFx0PGNoZWNrYm94LWdyb3VwPlxyXG5cdFx0XHRcdFx0XHRcdFx0PGxhYmVsPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8Y2hlY2tib3ggOnZhbHVlPVwic3R5bGUuU2VsQnV0X0NoZWNrZWRcIiA6Y2hlY2tlZD1cInN0eWxlLlNlbEJ1dF9DaGVja2VkXCIgLz5cclxuXHRcdFx0XHRcdFx0XHRcdDwvbGFiZWw+XHJcblx0XHRcdFx0XHRcdFx0PC9jaGVja2JveC1ncm91cD5cclxuXHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHRcdDwhLS0gSFRNTOmhtemdouexu+Wei+aYvuekuiAtLT5cclxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImR2LWxpc3RIdG1sLVBhbmVsXCIgdi1pZj1cIkxpc3RIdG1sX1BhbmVsXCIgdi1odG1sPVwiTGlzdEh0bWxfUGFuZWxbaWldXCIgOnN0eWxlPVwicGFyYW0uTGlzdFBhZ2UuQ2hlY2tCb3g9PXRydWUgJiYgcGFyYW0uTGlzdFBhZ2UuQ2xpY2tfVmlldz09dHJ1ZT8nd2lkdGg6ODUlOyc6XHJcblx0XHRcdFx0ICBwYXJhbS5MaXN0UGFnZS5DaGVja0JveD09ZmFsc2UgJiYgcGFyYW0uTGlzdFBhZ2UuQ2xpY2tfVmlldz09dHJ1ZT8nd2lkdGg6OTElOyc6XHJcblx0XHRcdFx0ICBwYXJhbS5MaXN0UGFnZS5DaGVja0JveD09dHJ1ZSAmJiBwYXJhbS5MaXN0UGFnZS5DbGlja19WaWV3PT1mYWxzZT8nd2lkdGg6ODglOyc6J3dpZHRoOjEwMCU7J1wiPlxyXG5cclxuXHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJkdi1wYW5lbC1pbnB1dFwiIHYtaWY9XCIhTGlzdEh0bWxfUGFuZWxcIiA6c3R5bGU9XCJwYXJhbS5MaXN0UGFnZS5DaGVja0JveD09dHJ1ZSAmJiBwYXJhbS5MaXN0UGFnZS5DbGlja19WaWV3PT10cnVlPyd3aWR0aDo4NSU7JzpcclxuXHRcdFx0XHQgIHBhcmFtLkxpc3RQYWdlLkNoZWNrQm94PT1mYWxzZSAmJiBwYXJhbS5MaXN0UGFnZS5DbGlja19WaWV3PT10cnVlPyd3aWR0aDo5MSU7JzpcclxuXHRcdFx0XHQgIHBhcmFtLkxpc3RQYWdlLkNoZWNrQm94PT10cnVlICYmIHBhcmFtLkxpc3RQYWdlLkNsaWNrX1ZpZXc9PWZhbHNlPyd3aWR0aDo4OCU7Jzond2lkdGg6MTAwJTsnXCI+XHJcblx0XHRcdFx0XHRcdFx0PGRpdiB2LWZvcj1cIihpdGVtLGluZGV4KSBpbiBzdHlsZS5mb3JtLml0ZW1zXCI+XHJcblx0XHRcdFx0XHRcdFx0XHQ8IS0tIOaZrumAmuW4g+WxgCAtLT5cclxuXHRcdFx0XHRcdFx0XHRcdDx2aWV3IHYtaWY9XCJpdGVtLm5hbWUhPSdMYXlvdXQnXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDx0ZXh0IGNsYXNzPVwidHh0X3RpdGxlXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ6c3R5bGU9XCJ7J3dpZHRoJzppdGVtLmxhYmVsV2lkdGgrJ3B4J31cIj57e2l0ZW0ubGFiZWx9fe+8mjwvdGV4dD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJmb3JtLWl0ZW0tc3BhblwiIHYtaWY9XCJpdGVtLmRpc2FibGVkXCI+e3tpdGVtLnZhbHVlfX08L3NwYW4+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDwhLS0g5paH5pys5qGGL+aVsOWtl+ahhiAtLT5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PHZpZXcgY2xhc3M9XCJkdl9pbnB1dFwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0di1pZj1cIihpdGVtLm5hbWU9PSdJbnB1dCcgfHwgaXRlbS5uYW1lPT0nSW5wdXROdW1iZXInKSAmJiAhaXRlbS5kaXNhYmxlZFwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZXh0IHYtaWY9XCJpdGVtLnNldHRpbmcucHJlZml4XCIgY2xhc3M9XCJ1bmktaWNvblwiIDpjbGFzcz1cIltpdGVtLnNldHRpbmcucHJlZml4XVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRAY2hhbmdlPVwib25DaGFuZ2UoaXRlbSlcIj4mI3hlNTY4OzwvdGV4dD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8aW5wdXQgY2xhc3M9XCJ1bmktaW5wdXRcIiA6Y2xhc3M9XCJpdGVtLmRpc2FibGVkPydpbnB1dC1kaXNhYmxlZCc6JydcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0OnR5cGU9XCJpdGVtLm5hbWU9PSdJbnB1dCc/J3RleHQnOml0ZW0ubmFtZT09J0lucHV0TnVtYmVyJz8nbnVtYmVyJzondGV4dCdcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0di1tb2RlbD1cIml0ZW0udmFsdWVcIiA6ZGlzYWJsZWQ9XCJpdGVtLmRpc2FibGVkXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDpwbGFjZWhvbGRlcj1cIml0ZW0ucGxhY2Vob2xkZXJcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0OnN0eWxlPVwieyd3aWR0aCc6aXRlbS5zZXR0aW5nLnByZWZpeCAmJiBpdGVtLnNldHRpbmcuc3VmZml4Pyc3OCUnOml0ZW0uc2V0dGluZy5wcmVmaXggfHwgaXRlbS5zZXR0aW5nLnN1ZmZpeD8nODclJzonOTYlJ31cIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0OmZvY3VzPVwiZm9jdXNNYXRlcmlhXCIgQGZvY3VzPVwib250YXAoaXRlbSlcIiBAYmx1cj1cIm9uZXZlbnQoaXRlbSlcIiAvPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZXh0IHYtaWY9XCJpdGVtLnNldHRpbmcuc3VmZml4XCIgY2xhc3M9XCJ1bmktaWNvblwiIDpjbGFzcz1cIltpdGVtLnNldHRpbmcuc3VmZml4XVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRAY2xpY2s9XCJvbkNoYW5nZShpdGVtKVwiPiYjeGU1Njg7PC90ZXh0PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDwhLS0g5LiL5ouJ5qGGLeWNlemAiSBpdGVtLnVzZURpY3Q/aXRlbS5kaWN0Oml0ZW0uc2VsZWN0aW9ucy0tPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8dW5pLWRhdGEtc2VsZWN0IGlkPVwiZHZfc2VsZWN0XCIgdi1pZj1cIml0ZW0ubmFtZT09J1NlbGVjdCcgJiYgIWl0ZW0uZGlzYWJsZWRcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDpjbGFzcz1cIml0ZW0uZGlzYWJsZWQ/J2lucHV0LWRpc2FibGVkJzonJ1wiIHYtbW9kZWw9XCJpdGVtLnZhbHVlXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ6bG9jYWxkYXRhPVwiaXRlbS5kaWN0XCIgQGNoYW5nZT1cIm9uQ2hhbmdlKGl0ZW0pXCIgOmRpc2FibGVkPVwiaXRlbS5kaXNhYmxlZFwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0OmNsZWFyPVwiZmFsc2VcIj48L3VuaS1kYXRhLXNlbGVjdD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PCEtLSDlpJrooYzmlofmnKwgLS0+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDx2aWV3IGNsYXNzPVwiaW5wdXQtd3JhcHBlclwiIHYtaWY9XCJpdGVtLm5hbWU9PSdUZXh0YXJlYScgJiYgIWl0ZW0uZGlzYWJsZWRcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGV4dGFyZWEgY2xhc3M9XCJ1bmktaW5wdXRcIiA6dmFsdWU9XCJpdGVtLnZhbHVlXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDpjbGFzcz1cIml0ZW0uZGlzYWJsZWQ/J2lucHV0LWRpc2FibGVkJzonJ1wiIDpwbGFjZWhvbGRlcj1cIml0ZW0ucGxhY2Vob2xkZXJcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0QGJsdXI9XCJvbk1vZGVsVmFsdWUoaXRlbSlcIiBzdHlsZT1cImhlaWdodDo2MHB4O1wiIDpzdHlsZT1cInsnd2lkdGgnOic5NiUnfVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ6ZGlzYWJsZWQ9XCJpdGVtLmRpc2FibGVkXCI+PC90ZXh0YXJlYT5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PC92aWV3PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8IS0tIOWkjemAieahhiAtLT5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PGNoZWNrYm94LWdyb3VwIGNsYXNzPVwiY2hlY2tfcmVtZW1iZXJQd2RcIiB2LWlmPVwiaXRlbS5uYW1lPT0nQ2hlY2tib3gnXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ6Y2xhc3M9XCJpdGVtLmRpc2FibGVkPydpbnB1dC1kaXNhYmxlZCc6JydcIiBAY2hhbmdlPVwib25Nb2RlbFZhbHVlKGl0ZW0pXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ6ZGF0YS1pc2NoZWNrPVwiaXRlbS52YWx1ZVwiIDpkaXNhYmxlZD1cIml0ZW0uZGlzYWJsZWRcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDpzdHlsZT1cInsnbWFyZ2luLWxlZnQnOicxMHJweCd9XCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PGxhYmVsPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGNoZWNrYm94IDp2YWx1ZT1cIml0ZW0udmFsdWVcIiA6Y2hlY2tlZD1cIml0ZW0udmFsdWVcIiAvPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRleHQ+e3tpdGVtLmxhYmVsfX08L3RleHQ+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PC9sYWJlbD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PC9jaGVja2JveC1ncm91cD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PCEtLSBTd2l0Y2jlvIDlhbMgLS0+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDxzd2l0Y2ggdi1pZj1cIml0ZW0ubmFtZT09J1N3aXRjaCdcIiA6Y2xhc3M9XCJpdGVtLmRpc2FibGVkPydpbnB1dC1kaXNhYmxlZCc6JydcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDpkaXNhYmxlZD1cIml0ZW0uZGlzYWJsZWRcIiB2LW1vZGVsPVwiaXRlbS52YWx1ZVwiIEBjaGFuZ2U9XCJvbk1vZGVsVmFsdWUoaXRlbSlcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDpzdHlsZT1cInsnbWFyZ2luLWxlZnQnOicxMHJweCd9XCIgLz5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PCEtLSDml6XmnJ/ml7bpl7QgLS0+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDx2aWV3IGNsYXNzPVwiaW5wdXQtd3JhcHBlclwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0di1pZj1cIihpdGVtLm5hbWU9PSdUaW1lUGlja2VyJyB8fCBpdGVtLm5hbWU9PSdEYXRlUGlja2VyJykgJiYgIWl0ZW0uZGlzYWJsZWRcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8cGlja2VyIG1vZGU9XCJkYXRlXCIgY2xhc3M9XCJkYXRlX2lwdXRcIiA6Y2xhc3M9XCJpdGVtLmRpc2FibGVkPydpbnB1dC1kaXNhYmxlZCc6JydcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0OmRpc2FibGVkPVwiaXRlbS5kaXNhYmxlZFwiIDp2YWx1ZT1cIml0ZW0udmFsdWVcIiBAY2hhbmdlPVwib25Nb2RlbFZhbHVlKGl0ZW0pXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dmlldyBjbGFzcz1cInBpY2tlclwiPnt7aXRlbS52YWx1ZX19PC92aWV3PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDwvcGlja2VyPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdFx0XHRcdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdFx0XHRcdFx0XHQ8IS0tIOagheagvOW4g+WxgCAtLT5cclxuXHRcdFx0XHRcdFx0XHRcdDx1bmktcm93IGNsYXNzPVwiZGVtby11bmktcm93XCIgdi1pZj1cIml0ZW0ubmFtZT09J0xheW91dCdcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PHVuaS1jb2wgdi1mb3I9XCIoY29scyxrZXkpIGluIGl0ZW0uc2V0dGluZy5jb2xMaXN0XCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ6c3Bhbj1cIml0ZW0uc2V0dGluZy5zcGFuTGlzdD9pdGVtLnNldHRpbmcuc3Bhbkxpc3Rba2V5XToyNCAvIGl0ZW0uc2V0dGluZy5jb2xcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8dmlldyB2LWlmPVwiY29scyE9bnVsbFwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRleHQgY2xhc3M9XCJ0eHRfdGl0bGVcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ6c3R5bGU9XCJ7J3dpZHRoJzpjb2xzLmxhYmVsV2lkdGgrJ3B4J31cIj57e2NvbHMubGFiZWx9fe+8mjwvdGV4dD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwiZm9ybS1pdGVtLXNwYW5cIiB2LWlmPVwiY29scy5kaXNhYmxlZFwiPnt7Y29scy52YWx1ZX19PC9zcGFuPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHZpZXcgY2xhc3M9XCJkdl9pbnB1dFwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHYtaWY9XCIoY29scy5uYW1lPT0nSW5wdXQnIHx8IGNvbHMubmFtZT09J0lucHV0TnVtYmVyJykgJiYgIWNvbHMuZGlzYWJsZWRcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRleHQgdi1pZj1cImNvbHMuc2V0dGluZy5wcmVmaXhcIiBjbGFzcz1cInVuaS1pY29uXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ6Y2xhc3M9XCJbY29scy5zZXR0aW5nLnByZWZpeF1cIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdEBjaGFuZ2U9XCJvbkNoYW5nZShjb2xzKVwiPiYjeGU1Njg7PC90ZXh0PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8aW5wdXQgY2xhc3M9XCJ1bmktaW5wdXRcIiA6Y2xhc3M9XCJjb2xzLmRpc2FibGVkPydpbnB1dC1kaXNhYmxlZCc6JydcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDp0eXBlPVwiY29scy5uYW1lPT0nSW5wdXQnPyd0ZXh0Jzpjb2xzLm5hbWU9PSdJbnB1dE51bWJlcic/J251bWJlcic6J3RleHQnXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2LW1vZGVsPVwiY29scy52YWx1ZVwiIDpkaXNhYmxlZD1cImNvbHMuZGlzYWJsZWRcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDpwbGFjZWhvbGRlcj1cImNvbHMucGxhY2Vob2xkZXJcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDpzdHlsZT1cInsnd2lkdGgnOmNvbHMuc2V0dGluZy5wcmVmaXggJiYgY29scy5zZXR0aW5nLnN1ZmZpeD8nNzglJzpjb2xzLnNldHRpbmcucHJlZml4IHx8IGNvbHMuc2V0dGluZy5zdWZmaXg/Jzg3JSc6Jzk2JSd9XCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ6Zm9jdXM9XCJmb2N1c01hdGVyaWFcIiBAZm9jdXM9XCJvbnRhcChjb2xzKVwiIEBibHVyPVwib25ldmVudChjb2xzKVwiIC8+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZXh0IHYtaWY9XCJjb2xzLnNldHRpbmcuc3VmZml4XCIgY2xhc3M9XCJ1bmktaWNvblwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0OmNsYXNzPVwiW2NvbHMuc2V0dGluZy5zdWZmaXhdXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRAY2xpY2s9XCJvbkNoYW5nZShjb2xzKVwiPiYjeGU1Njg7PC90ZXh0PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC92aWV3PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PCEtLSDkuIvmi4nmoYYt5Y2V6YCJIGNvbHMudXNlRGljdD9jb2xzLmRpY3Q6Y29scy5zZWxlY3Rpb25zLS0+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dW5pLWRhdGEtc2VsZWN0IGlkPVwiZHZfc2VsZWN0XCIgdi1pZj1cImNvbHMubmFtZT09J1NlbGVjdCcgJiYgIWNvbHMuZGlzYWJsZWRcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ6Y2xhc3M9XCJjb2xzLmRpc2FibGVkPydpbnB1dC1kaXNhYmxlZCc6JydcIiB2LW1vZGVsPVwiY29scy52YWx1ZVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDpsb2NhbGRhdGE9XCJjb2xzLmRpY3RcIiBAY2hhbmdlPVwib25DaGFuZ2UoY29scylcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ6ZGlzYWJsZWQ9XCJjb2xzLmRpc2FibGVkXCIgOmNsZWFyPVwiZmFsc2VcIj48L3VuaS1kYXRhLXNlbGVjdD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwhLS0g5aSa6KGM5paH5pysIC0tPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHZpZXcgY2xhc3M9XCJpbnB1dC13cmFwcGVyXCIgdi1pZj1cImNvbHMubmFtZT09J1RleHRhcmVhJyAmJiAhY29scy5kaXNhYmxlZFwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGV4dGFyZWEgY2xhc3M9XCJ1bmktaW5wdXRcIiA6dmFsdWU9XCJjb2xzLnZhbHVlXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ6Y2xhc3M9XCJjb2xzLmRpc2FibGVkPydpbnB1dC1kaXNhYmxlZCc6JydcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDpwbGFjZWhvbGRlcj1cImNvbHMucGxhY2Vob2xkZXJcIiBAYmx1cj1cIm9uTW9kZWxWYWx1ZShjb2xzKVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0c3R5bGU9XCJoZWlnaHQ6NjBweDtcIiA6c3R5bGU9XCJ7J3dpZHRoJzonOTYlJ31cIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDpkaXNhYmxlZD1cImNvbHMuZGlzYWJsZWRcIj48L3RleHRhcmVhPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC92aWV3PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PCEtLSDlpI3pgInmoYYgLS0+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8Y2hlY2tib3gtZ3JvdXAgY2xhc3M9XCJjaGVja19yZW1lbWJlclB3ZFwiIHYtaWY9XCJjb2xzLm5hbWU9PSdDaGVja2JveCdcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ6Y2xhc3M9XCJjb2xzLmRpc2FibGVkPydpbnB1dC1kaXNhYmxlZCc6JydcIiA6ZGlzYWJsZWQ9XCJpdGVtLmRpc2FibGVkXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0QGNoYW5nZT1cIm9uTW9kZWxWYWx1ZShjb2xzKVwiIDpkYXRhLWlzY2hlY2s9XCJjb2xzLnZhbHVlXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0OnN0eWxlPVwieydtYXJnaW4tbGVmdCc6JzEwcnB4J31cIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGxhYmVsPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxjaGVja2JveCA6dmFsdWU9XCJjb2xzLnZhbHVlXCIgOmNoZWNrZWQ9XCJjb2xzLnZhbHVlXCIgLz5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGV4dD57e2NvbHMubGFiZWx9fTwvdGV4dD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9sYWJlbD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvY2hlY2tib3gtZ3JvdXA+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8IS0tIFN3aXRjaOW8gOWFsyAtLT5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxzd2l0Y2ggdi1pZj1cImNvbHMubmFtZT09J1N3aXRjaCdcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ6Y2xhc3M9XCJjb2xzLmRpc2FibGVkPydpbnB1dC1kaXNhYmxlZCc6JydcIiA6ZGlzYWJsZWQ9XCJpdGVtLmRpc2FibGVkXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0di1tb2RlbD1cImNvbHMudmFsdWVcIiBAY2hhbmdlPVwib25Nb2RlbFZhbHVlKGNvbHMpXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0OnN0eWxlPVwieydtYXJnaW4tbGVmdCc6JzEwcnB4J31cIiAvPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PCEtLSDml6XmnJ/ml7bpl7QgLS0+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dmlldyBjbGFzcz1cImlucHV0LXdyYXBwZXJcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2LWlmPVwiKGNvbHMubmFtZT09J1RpbWVQaWNrZXInIHx8IGNvbHMubmFtZT09J0RhdGVQaWNrZXInKSAmJiAhY29scy5kaXNhYmxlZFwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8cGlja2VyIG1vZGU9XCJkYXRlXCIgY2xhc3M9XCJkYXRlX2lwdXRcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDpjbGFzcz1cImNvbHMuZGlzYWJsZWQ/J2lucHV0LWRpc2FibGVkJzonJ1wiIDpkaXNhYmxlZD1cIml0ZW0uZGlzYWJsZWRcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDp2YWx1ZT1cImNvbHMudmFsdWVcIiBAY2hhbmdlPVwib25Nb2RlbFZhbHVlKGNvbHMpXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHZpZXcgY2xhc3M9XCJwaWNrZXJcIj57e2NvbHMudmFsdWV9fTwvdmlldz5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9waWNrZXI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3ZpZXc+XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDwvdmlldz5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PC91bmktY29sPlxyXG5cdFx0XHRcdFx0XHRcdFx0PC91bmktcm93PlxyXG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImR2LXBhbmVsLWJ1dHRvblwiIHYtaWY9XCJwYXJhbS5MaXN0UGFnZS5DbGlja19WaWV3PT10cnVlXCI+XHJcblx0XHRcdFx0XHRcdFx0PGEgQGNsaWNrPVwib25WaWV3UGFnZUNsaWNrKHN0eWxlKVwiPjxpIGNsYXNzPVwibW9ib3gtbm9ybWFsLXJpZ2h0LWFycm93XCIgLz48L2E+XHJcblx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiZHYtcGFuZWwtYnV0aWNvblwiIHYtaWY9XCJwYXJhbS5MaXN0UGFnZS5MaXN0SXRlbV9CdXR0b25cIj5cclxuXHRcdFx0XHRcdFx0XHQ8dmlldyBjbGFzcz1cImJ0bi1wYWRkaW5nXCIgdi1mb3I9XCIoYnRuLGtleSkgaW4gcGFyYW0uTGlzdFBhZ2UuTGlzdEl0ZW1fQnV0dG9uXCI+XHJcblx0XHRcdFx0XHRcdFx0XHQ8YSBAY2xpY2s9XCJvbkJ0bkNsaWNrKGJ0bixzdHlsZSlcIiA6dGl0bGU9XCJidG4uU2hvd05hbWVcIiB2LWlmPVwiYnRuLlN0eWxlPT0naW1nJ1wiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8aSA6Y2xhc3M9XCJidG4uSW1nXCIgLz5cclxuXHRcdFx0XHRcdFx0XHRcdDwvYT5cclxuXHRcdFx0XHRcdFx0XHRcdDxidXR0b24gdHlwZT1cImRlZmF1bHRcIiBAY2xpY2s9XCJvbkJ0bkNsaWNrKGJ0bixzdHlsZSlcIiBjbGFzcz1cImJ0bi1wYWRkaW5nXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0di1lbHNlLWlmPVwiYnRuLlN0eWxlPT0ndGV4dCdcIj57e2J0bi5TaG93TmFtZX19PC9idXR0b24+XHJcblx0XHRcdFx0XHRcdFx0PC92aWV3PlxyXG5cdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdDwvdmlldz5cclxuXHRcdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdDwvc2Nyb2xsLXZpZXc+XHJcblx0XHQ8L3ZpZXc+XHJcblxyXG5cdFx0PHZpZXcgY2xhc3M9XCJ2aWV3LWZsb29yXCI+XHJcblx0XHRcdDxidXR0b24gdHlwZT1cImRlZmF1bHRcIiBAY2xpY2s9XCJjYW5jZWxcIiBjbGFzcz1cImJ0bl9jYW5jZWxcIlxyXG5cdFx0XHRcdDpzdHlsZT1cInsnd2lkdGgnOnBhcmFtLkxpc3RQYWdlLlBhZ2VfQnV0dG9uLmxlbmd0aD4wPyczOS41JSc6JzQ4LjUlJ31cIj57e3RyYW5zbGF0ZVN5cyhcImNsb3NlXCIpfX08L2J1dHRvbj5cclxuXHRcdFx0PGJ1dHRvbiB0eXBlPVwiZGVmYXVsdFwiIEBjbGljaz1cIlJlZnJlc2hcIiBjbGFzcz1cImJ0bl9yZWZyZXNoXCJcclxuXHRcdFx0XHQ6c3R5bGU9XCJ7J3dpZHRoJzpwYXJhbS5MaXN0UGFnZS5QYWdlX0J1dHRvbi5sZW5ndGg+MD8nMzkuNSUnOic0OC41JSd9XCI+e3t0cmFuc2xhdGVTeXMoXCJyZWZyZXNoXCIpfX08L2J1dHRvbj5cclxuXHRcdFx0PHZpZXcgY2xhc3M9XCJ1bmktcGFkZGluZy13cmFwXCIgdi1pZj1cInBhcmFtLkxpc3RQYWdlLlBhZ2VfQnV0dG9uLmxlbmd0aD4wXCI+XHJcblx0XHRcdFx0PHZpZXcgY2xhc3M9XCJ1bmktYnRuLXZcIj5cclxuXHRcdFx0XHRcdDxhIEB0YXA9XCJhY3Rpb25TaGVldFRhcFwiPlxyXG5cdFx0XHRcdFx0XHQ8SWNvbiBjbGFzcz1cIm1vYm94LW5vcm1hbC1tb3JlXCIgLz5cclxuXHRcdFx0XHRcdDwvYT5cclxuXHRcdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdDwvdmlldz5cclxuXHRcdDwvdmlldz5cclxuXHQ8L3ZpZXc+XHJcbjwvdGVtcGxhdGU+XHJcblxyXG48c2NyaXB0PlxyXG5cdGltcG9ydCBCYXNlNjQgZnJvbSAnLi4vLi4vY29tcG9uZW50cy9qcy1iYXNlNjQvYmFzZTY0LmpzJ1xyXG5cdGltcG9ydCBjbGFzc1V0aWxzIGZyb20gXCJAL2pzL3V0aWxzLmpzXCJcclxuXHRleHBvcnQgZGVmYXVsdCB7XHJcblx0XHRtb2R1bGVzOiB7XHJcblx0XHRcdEJhc2U2NCxcclxuXHRcdH0sXHJcblx0XHRvbk5hdmlnYXRpb25CYXJCdXR0b25UYXAoZSkge1xyXG5cdFx0XHQvLyAgXHRjb25zb2xlLmxvZyhlKTtcclxuXHRcdFx0Ly8gZS50ZXh0PVwiXFx1ZTkyNFwiO1xyXG5cdFx0XHQvLyBjb25zb2xlLmxvZyhlLmZvbnRTaXplKTtcclxuXHRcdFx0aWYgKHRoaXMuaXNGaWx0ZXIpXHJcblx0XHRcdFx0dGhpcy5pc0ZpbHRlciA9IGZhbHNlO1xyXG5cdFx0XHRlbHNlXHJcblx0XHRcdFx0dGhpcy5pc0ZpbHRlciA9IHRydWU7XHJcblx0XHR9LFxyXG5cdFx0b25CYWNrUHJlc3MoZSkge1xyXG5cdFx0XHQvLyBjb25zb2xlLmxvZyhcIuebkeWQrOi/lOWbnuaMiemSruS6i+S7tlwiLGUpO1xyXG5cdFx0XHR2YXIgZXZlbnRDaGFubmVsID0gdGhpcy4kc2NvcGUuZXZlbnRDaGFubmVsO1xyXG5cdFx0XHQvLyBjb25zdCBldmVudENoYW5uZWwgPSB0aGlzLmdldE9wZW5lckV2ZW50Q2hhbm5lbCgpO1xyXG5cdFx0XHRldmVudENoYW5uZWwuZW1pdCgndmlld18zMjAxJywgXCJcIik7XHJcblx0XHRcdC8vIHVuaS5uYXZpZ2F0ZUJhY2soe1xyXG5cdFx0XHQvLyBcdGRlbHRhOjEgLC8v6L+U5Zue5bGC5pWw77yMMuWImeS4iuS4iumhtVxyXG5cdFx0XHQvLyB9KTtcclxuXHRcdFx0Ly8gcmV0dXJuIHRydWU7XHJcblx0XHR9LFxyXG5cdFx0ZGF0YSgpIHtcclxuXHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHR0aXRsZTogdGhpcy50cmFuc2xhdGVTeXMoJ2FkZDInKSxcclxuXHRcdFx0XHRpc0ZpbHRlcjogdHJ1ZSxcclxuXHRcdFx0XHRwYXJhbToge30sXHJcblx0XHRcdFx0Zm9jdXNNYXRlcmlhOiBmYWxzZSxcclxuXHRcdFx0XHRzdHlsZWRlZjoge30sXHJcblx0XHRcdFx0aGVhZF9zdHlsZWRlZjoge1xyXG5cdFx0XHRcdFx0Zm9ybToge1xyXG5cdFx0XHRcdFx0XHRpdGVtczogW11cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdGRldGFpbDFfc3R5bGVkZWY6IHt9LFxyXG5cdFx0XHRcdGRldGFpbDFTdHlsZURlZkxpc3Q6IFtdLFxyXG5cdFx0XHRcdGRldGFpbDJfc3R5bGVkZWY6IHt9LFxyXG5cdFx0XHRcdGRldGFpbDJTdHlsZURlZkxpc3Q6IFtdLFxyXG5cdFx0XHRcdGl0ZW1zOiBbXSxcclxuXHRcdFx0XHRhY3RpdmVfaWQ6ICcnLFxyXG5cdFx0XHRcdGFjdGl2ZWxpc3Q6IFtdLFxyXG5cdFx0XHRcdHdoZXJlOiAnJyxcclxuXHRcdFx0XHR3aGVyZXM6ICcnLFxyXG5cdFx0XHRcdG9yZGVyYnk6ICcnLFxyXG5cdFx0XHRcdHF1ZXJ5X2lkOiAnJyxcclxuXHRcdFx0XHRwYWdlaW5kZXg6IDEsXHJcblx0XHRcdFx0cGFnZV9zaXplOiAxMCxcclxuXHRcdFx0XHRwYWdlX2NvdW50OiAwLFxyXG5cdFx0XHRcdHNjcm9sbFRvcDogMCxcclxuXHRcdFx0XHRvbGQ6IHtcclxuXHRcdFx0XHRcdHNjcm9sbFRvcDogMFxyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0aXNTY3JvbGw6IHRydWUsXHJcblx0XHRcdFx0Ly/ojrflj5bmlbDmja7nsbvnmoRIVE1M6aG16Z2iXHJcblx0XHRcdFx0TGlzdEh0bWxfUGFuZWw6IFwiXCIsXHJcblx0XHRcdFx0TGlzdFBhZ2VIdG1sX1Nob3c6IHtcclxuXHRcdFx0XHRcdG5hbWU6IFwiXCIsXHJcblx0XHRcdFx0XHRldmVudDoge1xyXG5cdFx0XHRcdFx0XHRpZDogXCJcIixcclxuXHRcdFx0XHRcdFx0bmFtZTogXCJcIlxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0sXHJcblx0XHRcdH07XHJcblx0XHR9LFxyXG5cdFx0YXN5bmMgb25Mb2FkKG9wdGlvbnMpIHtcclxuXHRcdFx0Ly8gY29uc29sZS5sb2cob3B0aW9ucyk7XHJcblx0XHRcdHVuaS5zZXROYXZpZ2F0aW9uQmFyVGl0bGUoe1xyXG5cdFx0XHRcdHRpdGxlOiBvcHRpb25zLnRpdGxlbmFtZVxyXG5cdFx0XHR9KTsgLy/orr7nva7pobbpg6jmoIfpopggXHJcblx0XHRcdHRoaXMuJGRhdGEudGl0bGUgPSBvcHRpb25zLnRpdGxlbmFtZTtcclxuXHRcdFx0dGhpcy4kZGF0YS5wYXJhbSA9IEpTT04ucGFyc2Uob3B0aW9ucy5wYXJhbSk7XHJcblxyXG5cclxuXHRcdFx0dGhpcy5zdHlsZWRlZiA9IHt9O1xyXG5cdFx0XHR0aGlzLmhlYWRfc3R5bGVkZWYgPSB7XHJcblx0XHRcdFx0Zm9ybToge1xyXG5cdFx0XHRcdFx0aXRlbXM6IFtdXHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9O1xyXG5cdFx0XHR0aGlzLmRldGFpbDFfc3R5bGVkZWYgPSB7fTtcclxuXHRcdFx0dGhpcy5kZXRhaWwxU3R5bGVEZWZMaXN0ID0gW107XHJcblx0XHRcdHRoaXMuZGV0YWlsMl9zdHlsZWRlZiA9IHt9O1xyXG5cdFx0XHR0aGlzLmRldGFpbDJTdHlsZURlZkxpc3QgPSBbXTtcclxuXHRcdFx0dGhpcy5MaXN0SHRtbF9QYW5lbCA9IFwiXCI7XHJcblx0XHRcdHRoaXMuTGlzdFBhZ2VIdG1sX1Nob3cgPSB7XHJcblx0XHRcdFx0bmFtZTogXCJcIixcclxuXHRcdFx0XHRldmVudDoge1xyXG5cdFx0XHRcdFx0aWQ6IFwiXCIsXHJcblx0XHRcdFx0XHRuYW1lOiBcIlwiXHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9O1xyXG5cdFx0XHR0aGlzLml0ZW1zID0gW107XHJcblx0XHRcdHRoaXMuYWN0aXZlX2lkID0gJyc7XHJcblx0XHRcdHRoaXMuYWN0aXZlbGlzdCA9IFtdO1xyXG5cclxuXHRcdFx0aWYgKHRoaXMucGFyYW0uTGlzdFBhZ2UuTGlzdEl0ZW1fVUlEZWY/LnVpX3R5cGUgPT0gXCJIVE1M6aG16Z2iXCIpIHtcclxuXHRcdFx0XHQvLyBIVE1M6aG16Z2iXHJcblx0XHRcdFx0Ly/ojrflj5bmlbDmja7nsbvnmoRIVE1M6aG16Z2iXHJcblx0XHRcdFx0YXdhaXQgdGhpcy5IdG1sX1VJc3R5bGVHZXRJbmZvKHRoaXMucGFyYW0uRGF0YUNscy5pZCwgdGhpcy5wYXJhbS5MaXN0UGFnZS5MaXN0SXRlbV9VSURlZi5pZCk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0YXdhaXQgdGhpcy5EZXRhaWwxX1VJc3R5bGVHZXRJbmZvKHRoaXMucGFyYW0uRGF0YUNscy5pZCwgdGhpcy5wYXJhbS5MaXN0UGFnZS5MaXN0SXRlbV9VSURlZi5pZCk7XHJcblx0XHRcdH1cclxuXHRcdFx0YXdhaXQgdGhpcy5pbml0aWFsKG9wdGlvbnMucGFyYW1WYWx1ZSk7XHJcblx0XHRcdC8vIHRoaXMuaXNGaWx0ZXI9dHJ1ZTtcclxuXHRcdFx0Ly8gaWYodGhpcy5wYXJhbS5TaG93RmlsdGVyKVxyXG5cdFx0XHQvLyAgIHRoaXMuaXNGaWx0ZXI9ZmFsc2U7XHJcblx0XHRcdC8vIC8v6I635Y+W5pWw5o2u57G755qE6Ieq5a6a5LmJ6KGo5Y2V5Y+C5pWwXHJcblx0XHRcdC8vIGlmKHRoaXMucGFyYW0uUXVlcnlfUGFuZWwpe1xyXG5cdFx0XHQvLyBcdHRoaXMuSGVhZF9VSVN0eWxlR2V0SW5mbyh0aGlzLnBhcmFtLkRhdGFDbHMuaWQsdGhpcy5wYXJhbS5RdWVyeV9QYW5lbC5pZCk7XHJcblx0XHRcdC8vIH1cclxuXHRcdFx0Ly8gaWYodGhpcy5wYXJhbS5MaXN0UGFnZS5MaXN0SXRlbV9VSURlZj8udWlfdHlwZT09XCJIVE1M6aG16Z2iXCIpe1xyXG5cdFx0XHQvLyBcdC8vIEhUTUzpobXpnaJcclxuXHRcdFx0Ly8gXHQvL+iOt+WPluaVsOaNruexu+eahEhUTUzpobXpnaJcclxuXHRcdFx0Ly8gXHRhd2FpdCB0aGlzLkh0bWxfVUlzdHlsZUdldEluZm8odGhpcy5wYXJhbS5EYXRhQ2xzLmlkLHRoaXMucGFyYW0uTGlzdFBhZ2UuTGlzdEl0ZW1fVUlEZWYuaWQpO1xyXG5cdFx0XHQvLyB9ZWxzZXtcclxuXHRcdFx0Ly8gXHRhd2FpdCB0aGlzLkRldGFpbDFfVUlzdHlsZUdldEluZm8odGhpcy5wYXJhbS5EYXRhQ2xzLmlkLHRoaXMucGFyYW0uTGlzdFBhZ2UuTGlzdEl0ZW1fVUlEZWYuaWQpO1xyXG5cdFx0XHQvLyB9XHJcblx0XHRcdC8vIHRoaXMub3JkZXJieSA9IHRoaXMucGFyYW0uT3JkZXI/dGhpcy5wYXJhbS5PcmRlcjonVF9DUkVBVEUgRGVzYyc7XHJcblx0XHRcdC8vIGlmKHRoaXMucGFyYW0uUXVlcnlfRXZlbnQpe1xyXG5cdFx0XHQvLyAgICAgYXdhaXQgdGhpcy5vblNlYXJDaGFuZ2UodGhpcy5wYXJhbS5EYXRhQ2xzLmlkLHRoaXMucGFyYW0uUXVlcnlfRXZlbnQuaWQpO1xyXG5cdFx0XHQvLyB9IGVsc2V7XHJcblx0XHRcdC8vICAgdGhpcy53aGVyZXMgPSB0aGlzLnBhcmFtLkNvbmRpdGlvbjtcclxuXHRcdFx0Ly8gICB0aGlzLnBhZ2VpbmRleCA9IDE7XHJcblx0XHRcdC8vICAgdGhpcy5wYWdlX3NpemUgPSAzO1xyXG5cdFx0XHQvLyAgIHRoaXMucXVlcnlfaWQgPSBcIlwiO1xyXG5cdFx0XHQvLyAgIGF3YWl0IHRoaXMubG9hZERhdGFHZXRMaXN0KCk7XHJcblx0XHRcdC8vIH1cclxuXHRcdFx0Ly8gY29uc29sZS5sb2codGhpcy4kZGF0YS5wYXJhbSk7XHJcblx0XHRcdC8v6aG16Z2i5Yid5aeL5YyW6I635Y+W54Sm54K5XHJcblx0XHRcdC8vIHRoaXMuZm9jdXNNYXRlcmlhPXRydWU7IFxyXG5cdFx0fSxcclxuXHRcdG1ldGhvZHM6IHtcclxuXHRcdFx0Ly9cclxuXHRcdFx0c2V0RGF0YTogZnVuY3Rpb24ob2JqKSB7XHJcblx0XHRcdFx0bGV0IHRoYXQgPSB0aGlzO1xyXG5cdFx0XHRcdGxldCBrZXlzID0gW107XHJcblx0XHRcdFx0bGV0IHZhbCwgZGF0YTtcclxuXHJcblx0XHRcdFx0T2JqZWN0LmtleXMob2JqKS5mb3JFYWNoKGZ1bmN0aW9uKGtleSkge1xyXG5cdFx0XHRcdFx0a2V5cyA9IGtleS5zcGxpdChcIi5cIik7XHJcblx0XHRcdFx0XHR2YWwgPSBvYmpba2V5XTtcclxuXHRcdFx0XHRcdGRhdGEgPSB0aGF0LiRkYXRhO1xyXG5cdFx0XHRcdFx0a2V5cy5mb3JFYWNoKGZ1bmN0aW9uKGtleTIsIGluZGV4KSB7XHJcblx0XHRcdFx0XHRcdGlmIChpbmRleCArIDEgPT0ga2V5cy5sZW5ndGgpIHtcclxuXHRcdFx0XHRcdFx0XHR0aGF0LiRzZXQoZGF0YSwga2V5MiwgdmFsKTtcclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRpZiAoIWRhdGFba2V5Ml0pIHtcclxuXHRcdFx0XHRcdFx0XHRcdHRoYXQuJHNldChkYXRhLCBrZXkyLCB7fSk7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdGRhdGEgPSBkYXRhW2tleTJdO1xyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH0sXHJcblxyXG5cdFx0XHQvL+WIneWni+WMllxyXG5cdFx0XHRhc3luYyBpbml0aWFsKHBhcmFtVmFsdWUpIHtcclxuXHRcdFx0XHR0aGlzLmlzRmlsdGVyID0gdHJ1ZTtcclxuXHRcdFx0XHRpZiAodGhpcy5wYXJhbS5TaG93RmlsdGVyKVxyXG5cdFx0XHRcdFx0dGhpcy5pc0ZpbHRlciA9IGZhbHNlO1xyXG5cdFx0XHRcdC8v6I635Y+W5pWw5o2u57G755qE6Ieq5a6a5LmJ6KGo5Y2V5Y+C5pWwXHJcblx0XHRcdFx0aWYgKHRoaXMucGFyYW0uUXVlcnlfUGFuZWwpIHtcclxuXHRcdFx0XHRcdGF3YWl0IHRoaXMuSGVhZF9VSVN0eWxlR2V0SW5mbyh0aGlzLnBhcmFtLkRhdGFDbHMuaWQsIHRoaXMucGFyYW0uUXVlcnlfUGFuZWwuaWQpO1xyXG5cdFx0XHRcdFx0Ly/kvKDlhaXlj4LmlbDlgLxcclxuXHRcdFx0XHRcdGlmIChwYXJhbVZhbHVlKSB7XHJcblx0XHRcdFx0XHRcdGNvbnN0IGF0dHJzID0gcGFyYW1WYWx1ZS5hdHRycyB8fCBbXTtcclxuXHRcdFx0XHRcdFx0KHRoaXMuJGRhdGEuaGVhZF9zdHlsZWRlZj8uZm9ybT8uaXRlbXMgfHwgW10pLmZvckVhY2goYXN5bmMgKGVsZSwgaW5kZXgpID0+IHtcclxuXHRcdFx0XHRcdFx0XHRpZiAoZWxlLm5hbWUgIT0gXCJMYXlvdXRcIikge1xyXG5cdFx0XHRcdFx0XHRcdFx0YXR0cnMuZm9yRWFjaChhc3luYyAoZWxlMiwgaW5kZXgyKSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChlbGUuZmllbGRJZCA9PSBlbGUyLm5hbWUpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRlbGUudmFsdWUgPSBlbGUyLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0ZWxlLnNldHRpbmcuY29sTGlzdC5mb3JFYWNoKGFzeW5jIChjb2wpID0+IHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKGNvbCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGF0dHJzLmZvckVhY2goYXN5bmMgKGVsZTIsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpbmRleDIpID0+IHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChjb2wuZmllbGRJZCA9PSBlbGUyLm5hbWUpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29sLnZhbHVlID0gZWxlMi52YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9KVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHR0aGlzLm9yZGVyYnkgPSB0aGlzLnBhcmFtLk9yZGVyID8gdGhpcy5wYXJhbS5PcmRlciA6ICdUX0NSRUFURSBEZXNjJztcclxuXHRcdFx0XHRpZiAodGhpcy5wYXJhbS5RdWVyeV9FdmVudCkge1xyXG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5vblNlYXJDaGFuZ2UodGhpcy5wYXJhbS5EYXRhQ2xzLmlkLCB0aGlzLnBhcmFtLlF1ZXJ5X0V2ZW50LmlkKTtcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0dGhpcy53aGVyZXMgPSB0aGlzLnBhcmFtLkNvbmRpdGlvbjtcclxuXHRcdFx0XHRcdHRoaXMucGFnZWluZGV4ID0gMTtcclxuXHRcdFx0XHRcdHRoaXMucGFnZV9zaXplID0gMztcclxuXHRcdFx0XHRcdHRoaXMucXVlcnlfaWQgPSBcIlwiO1xyXG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5sb2FkRGF0YUdldExpc3QoKTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHR9LFxyXG5cdFx0XHQvL+a7muWKqOWIsOW6lemDqOWQjuaHkuWKoOi9veaVsOaNrlxyXG5cdFx0XHRhc3luYyBzY3JvbGx0b2xvd2VyKGUpIHtcclxuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhlKVxyXG5cdFx0XHRcdGlmICh0aGlzLmlzU2Nyb2xsKSB7IC8v5Yik5pat5Yi35paw5LiA5qyh5ZCO5LiN5Lya5oyB57ut5Yi35pawXHJcblx0XHRcdFx0XHRpZiAodGhpcy5wYWdlX2NvdW50ID09IHRoaXMucGFnZWluZGV4KSB7XHJcblx0XHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdHRoaXMucGFnZWluZGV4ICs9IDE7XHJcblx0XHRcdFx0XHRpZiAodGhpcy53aGVyZSB8fCB0aGlzLnBhZ2VfY291bnQgPT0gMSkge1xyXG5cdFx0XHRcdFx0XHR0aGlzLnF1ZXJ5X2lkID0gXCJcIjtcclxuXHRcdFx0XHRcdFx0dGhpcy5kZXRhaWwxU3R5bGVEZWZMaXN0ID0gW107XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRhd2FpdCB0aGlzLmxvYWREYXRhR2V0TGlzdCgpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSxcclxuXHRcdFx0c2Nyb2xsOiBmdW5jdGlvbihlKSB7XHJcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coZS5kZXRhaWwuc2Nyb2xsVG9wKVxyXG5cdFx0XHRcdHRoaXMub2xkLnNjcm9sbFRvcCA9IGUuZGV0YWlsLnNjcm9sbFRvcFxyXG5cdFx0XHR9LFxyXG5cdFx0XHRhc3luYyBIZWFkX1VJU3R5bGVHZXRJbmZvKGNsYXNzX2lkLCBzdHlsZV9pZCkgeyAvL+iOt+WPluiHquWumuS5ieihqOWNleagt+W8j1xyXG5cdFx0XHRcdHZhciAkdGhpcyA9IHRoaXM7XHJcblx0XHRcdFx0dmFyIGRhdGFJbmZvID0ge1xyXG5cdFx0XHRcdFx0Y2xhc3NfaWQ6IGNsYXNzX2lkLFxyXG5cdFx0XHRcdFx0dWlfc3R5bGVfaWQ6IHN0eWxlX2lkLFxyXG5cdFx0XHRcdH07XHJcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coZGF0YUluZm8pO1xyXG5cdFx0XHRcdHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdVSVN0eWxlR2V0SW5mbycsIGRhdGFJbmZvKS50aGVuKHJldCA9PiB7XHJcblx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhyZXQpO1xyXG5cdFx0XHRcdFx0aWYgKHJldC5lcnJfY29kZSA9PSAwKSB7XHJcblx0XHRcdFx0XHRcdHZhciBzdHlsZWRlZiA9IFwiXCI7XHJcblx0XHRcdFx0XHRcdGlmIChyZXQucmVzdWx0LnN0eWxlX2RlZikge1xyXG5cdFx0XHRcdFx0XHRcdC8vbW9ib3gy55qEc3R5bGVfZGVm5pivanNvbuWtl+espuS4slxyXG5cdFx0XHRcdFx0XHRcdHN0eWxlZGVmID0gcmV0LnJlc3VsdC5zdHlsZV9kZWYucmVwbGFjZSgvXFxcXC9nLCBcIlwiKTtcclxuXHRcdFx0XHRcdFx0XHQvL21vYm94M+eahHN0eWxlX2RlZuaYr2Jhc2U2NOWtl+espuS4slxyXG5cdFx0XHRcdFx0XHRcdGlmICghcmV0LnJlc3VsdC5zdHlsZV9kZWYuaW5jbHVkZXMoJ1wiJykpIHN0eWxlZGVmID0gQmFzZTY0LmRlY29kZShyZXQucmVzdWx0XHJcblx0XHRcdFx0XHRcdFx0XHQuc3R5bGVfZGVmKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5oZWFkX3N0eWxlZGVmID0gcmV0LnJlc3VsdC5zdHlsZV9kZWYgPyBKU09OLnBhcnNlKHN0eWxlZGVmKSA6IHt9O1xyXG5cdFx0XHRcdFx0XHQvLyB0aGlzLmZvcm0gPSB0aGlzLmhlYWRfc3R5bGVkZWYuZm9ybS5tb2RlbDtcclxuXHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coJHRoaXMuJGRhdGEuaGVhZF9zdHlsZWRlZik7XHJcblx0XHRcdFx0XHRcdCR0aGlzLmhlYWRfc3R5bGVkZWYuZm9ybS5pdGVtcy5mb3JFYWNoKGFzeW5jIChlbGUsIGluZGV4KSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0Y29uc29sZS5sb2coZWxlLnVzZURpY3QpO1xyXG5cdFx0XHRcdFx0XHRcdGlmIChlbGUudXNlRGljdCA9PSB0cnVlKSB7IC8v5Yik5patdXNlRGljdOaYr+WQpuS9v+eUqOWtl+WFuFxyXG5cdFx0XHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5EaWN0R2V0SW5mbyhlbGUuYmluZC5kaWN0LCBpbmRleCwgJ21hc3QnKTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH0pO1xyXG5cclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe1xyXG5cdFx0XHRcdFx0XHRcdHRpdGxlOiB0aGlzLnRyYW5zbGF0ZVN5cyhcImVycm9yXCIpICsgXCIxXCIsXHJcblx0XHRcdFx0XHRcdFx0Y29udGVudDogcmV0LmVycl9tc2csXHJcblx0XHRcdFx0XHRcdFx0c2hvd0NhbmNlbDogZmFsc2UsXHJcblx0XHRcdFx0XHRcdFx0Y29uZmlybVRleHQ6IHRoaXMudHJhbnNsYXRlU3lzKFwiY2FuY2VsXCIpXHJcblx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pLmNhdGNoKGV4ID0+IHtcclxuXHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKGV4KTtcclxuXHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe1xyXG5cdFx0XHRcdFx0XHR0aXRsZTogdGhpcy50cmFuc2xhdGVTeXMoXCJlcnJvclwiKSArIFwiMS4xXCIsXHJcblx0XHRcdFx0XHRcdGNvbnRlbnQ6IGV4LmVyck1zZyxcclxuXHRcdFx0XHRcdFx0c2hvd0NhbmNlbDogZmFsc2UsXHJcblx0XHRcdFx0XHRcdGNvbmZpcm1UZXh0OiB0aGlzLnRyYW5zbGF0ZVN5cyhcImNhbmNlbFwiKVxyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0fSk7XHJcblxyXG5cdFx0XHR9LFxyXG5cdFx0XHRhc3luYyBEZXRhaWwxX1VJc3R5bGVHZXRJbmZvKGNsYXNzX2lkLCBzdHlsZV9pZCkgeyAvL+iOt+WPluiHquWumuS5ieihqOWNleagt+W8j1xyXG5cdFx0XHRcdHZhciAkdGhpcyA9IHRoaXM7XHJcblx0XHRcdFx0dmFyIGRhdGFJbmZvID0ge1xyXG5cdFx0XHRcdFx0Y2xhc3NfaWQ6IGNsYXNzX2lkLFxyXG5cdFx0XHRcdFx0dWlfc3R5bGVfaWQ6IHN0eWxlX2lkLFxyXG5cdFx0XHRcdH07XHJcblx0XHRcdFx0dGhpcy4kc3RvcmUuZGlzcGF0Y2goJ1VJU3R5bGVHZXRJbmZvJywgZGF0YUluZm8pLnRoZW4ocmV0ID0+IHtcclxuXHRcdFx0XHRcdGNvbnNvbGUubG9nKHJldCk7XHJcblx0XHRcdFx0XHRpZiAocmV0LmVycl9jb2RlID09IDApIHtcclxuXHRcdFx0XHRcdFx0dmFyIHN0eWxlZGVmID0gXCJcIjtcclxuXHRcdFx0XHRcdFx0aWYgKHJldC5yZXN1bHQuc3R5bGVfZGVmKSB7XHJcblx0XHRcdFx0XHRcdFx0Ly9tb2JveDLnmoRzdHlsZV9kZWbmmK9qc29u5a2X56ym5LiyXHJcblx0XHRcdFx0XHRcdFx0c3R5bGVkZWYgPSByZXQucmVzdWx0LnN0eWxlX2RlZi5yZXBsYWNlKC9cXFxcL2csIFwiXCIpO1xyXG5cdFx0XHRcdFx0XHRcdC8vbW9ib3gz55qEc3R5bGVfZGVm5pivYmFzZTY05a2X56ym5LiyXHJcblx0XHRcdFx0XHRcdFx0aWYgKCFyZXQucmVzdWx0LnN0eWxlX2RlZi5pbmNsdWRlcygnXCInKSkgc3R5bGVkZWYgPSBCYXNlNjQuZGVjb2RlKHJldC5yZXN1bHRcclxuXHRcdFx0XHRcdFx0XHRcdC5zdHlsZV9kZWYpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLmRldGFpbDFfc3R5bGVkZWYgPSByZXQucmVzdWx0LnN0eWxlX2RlZiA/IEpTT04ucGFyc2Uoc3R5bGVkZWYpIDoge307XHJcblx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLmRldGFpbDFfc3R5bGVkZWYuU2VsQnV0X0NoZWNrZWQgPSBmYWxzZTtcclxuXHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coJHRoaXMuJGRhdGEuZGV0YWlsMV9zdHlsZWRlZik7XHJcblx0XHRcdFx0XHRcdC8vICR0aGlzLiRkYXRhLmRldGFpbDFTdHlsZURlZkxpc3QucHVzaCgkdGhpcy4kZGF0YS5kZXRhaWwxX3N0eWxlZGVmKTtcclxuXHRcdFx0XHRcdFx0Ly8gdmFyIGFhID0gSlNPTi5zdHJpbmdpZnkodGhpcy5kZXRhaWwxX3N0eWxlZGVmKTtcclxuXHRcdFx0XHRcdFx0Ly8gJHRoaXMuJGRhdGEuZGV0YWlsMVN0eWxlRGVmTGlzdC5wdXNoKEpTT04ucGFyc2UoYWEpKTtcclxuXHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coJHRoaXMuJGRhdGEuZGV0YWlsMVN0eWxlRGVmTGlzdCk7XHJcblxyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7XHJcblx0XHRcdFx0XHRcdFx0dGl0bGU6IHRoaXMudHJhbnNsYXRlU3lzKFwiZXJyb3JcIikgKyBcIjJcIixcclxuXHRcdFx0XHRcdFx0XHRjb250ZW50OiByZXQuZXJyX21zZyxcclxuXHRcdFx0XHRcdFx0XHRzaG93Q2FuY2VsOiBmYWxzZSxcclxuXHRcdFx0XHRcdFx0XHRjb25maXJtVGV4dDogdGhpcy50cmFuc2xhdGVTeXMoXCJjYW5jZWxcIilcclxuXHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSkuY2F0Y2goZXggPT4ge1xyXG5cdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coZXgpO1xyXG5cdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7XHJcblx0XHRcdFx0XHRcdHRpdGxlOiB0aGlzLnRyYW5zbGF0ZVN5cyhcImVycm9yXCIpICsgXCIyLjFcIixcclxuXHRcdFx0XHRcdFx0Y29udGVudDogZXguZXJyTXNnLFxyXG5cdFx0XHRcdFx0XHRzaG93Q2FuY2VsOiBmYWxzZSxcclxuXHRcdFx0XHRcdFx0Y29uZmlybVRleHQ6IHRoaXMudHJhbnNsYXRlU3lzKFwiY2FuY2VsXCIpXHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHR9KTtcclxuXHJcblx0XHRcdH0sXHJcblx0XHRcdGFzeW5jIEh0bWxfVUlzdHlsZUdldEluZm8oY2xhc3NfaWQsIHN0eWxlX2lkKSB7IC8v6I635Y+W6Ieq5a6a5LmJ6KGo5Y2V5qC35byPXHJcblx0XHRcdFx0dmFyICR0aGlzID0gdGhpcztcclxuXHRcdFx0XHR2YXIgZGF0YUluZm8gPSB7XHJcblx0XHRcdFx0XHRjbGFzc19pZDogY2xhc3NfaWQsXHJcblx0XHRcdFx0XHR1aV9zdHlsZV9pZDogc3R5bGVfaWQsXHJcblx0XHRcdFx0fTtcclxuXHRcdFx0XHR0aGlzLiRzdG9yZS5kaXNwYXRjaCgnVUlTdHlsZUdldEluZm8nLCBkYXRhSW5mbykudGhlbihyZXQgPT4ge1xyXG5cdFx0XHRcdFx0Ly8gY29uc29sZS5sb2cocmV0KTtcclxuXHRcdFx0XHRcdGlmIChyZXQuZXJyX2NvZGUgPT0gMCkge1xyXG5cdFx0XHRcdFx0XHR2YXIgc3R5bGVkZWYgPSBcIlwiO1xyXG5cdFx0XHRcdFx0XHRpZiAocmV0LnJlc3VsdC5zdHlsZV9kZWYpIHtcclxuXHRcdFx0XHRcdFx0XHQvL21vYm94MueahHN0eWxlX2RlZuaYr2pzb27lrZfnrKbkuLJcclxuXHRcdFx0XHRcdFx0XHRzdHlsZWRlZiA9IHJldC5yZXN1bHQuc3R5bGVfZGVmLnJlcGxhY2UoL1xcXFwvZywgXCJcIik7XHJcblx0XHRcdFx0XHRcdFx0Ly9tb2JveDPnmoRzdHlsZV9kZWbmmK9iYXNlNjTlrZfnrKbkuLJcclxuXHRcdFx0XHRcdFx0XHRpZiAoIXJldC5yZXN1bHQuc3R5bGVfZGVmLmluY2x1ZGVzKCdcIicpKSBzdHlsZWRlZiA9IEJhc2U2NC5kZWNvZGUocmV0LnJlc3VsdFxyXG5cdFx0XHRcdFx0XHRcdFx0LnN0eWxlX2RlZik7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coc3R5bGVkZWYpO1xyXG5cdFx0XHRcdFx0XHQkdGhpcy5MaXN0UGFnZUh0bWxfU2hvdyA9IHJldC5yZXN1bHQuc3R5bGVfZGVmID8gSlNPTi5wYXJzZShzdHlsZWRlZikgOiB7fTtcclxuXHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coJHRoaXMuTGlzdFBhZ2VIdG1sX1Nob3cpO1xyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7XHJcblx0XHRcdFx0XHRcdFx0dGl0bGU6IHRoaXMudHJhbnNsYXRlU3lzKFwiZXJyb3JcIikgKyBcIjEwXCIsXHJcblx0XHRcdFx0XHRcdFx0Y29udGVudDogcmV0LmVycl9tc2csXHJcblx0XHRcdFx0XHRcdFx0c2hvd0NhbmNlbDogZmFsc2UsXHJcblx0XHRcdFx0XHRcdFx0Y29uZmlybVRleHQ6IHRoaXMudHJhbnNsYXRlU3lzKFwiY2FuY2VsXCIpXHJcblx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pLmNhdGNoKGV4ID0+IHtcclxuXHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKGV4KTtcclxuXHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe1xyXG5cdFx0XHRcdFx0XHR0aXRsZTogdGhpcy50cmFuc2xhdGVTeXMoXCJlcnJvclwiKSArIFwiMTAuMVwiLFxyXG5cdFx0XHRcdFx0XHRjb250ZW50OiBleC5lcnJNc2csXHJcblx0XHRcdFx0XHRcdHNob3dDYW5jZWw6IGZhbHNlLFxyXG5cdFx0XHRcdFx0XHRjb25maXJtVGV4dDogdGhpcy50cmFuc2xhdGVTeXMoXCJjYW5jZWxcIilcclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdH0pO1xyXG5cclxuXHRcdFx0fSxcclxuXHRcdFx0YXN5bmMgRGljdEdldEluZm8oZGljdCwgaW5kZXgsIHR5cGUpIHsgLy9Nb2JveDPlvpfliLDlvpfliLDlrZflhbjkv6Hmga/lrZflhbjpobnliJfooahcclxuXHRcdFx0XHR0aGlzLmRhdGEgPSBbXTtcclxuXHRcdFx0XHR2YXIgJHRoaXMgPSB0aGlzO1xyXG5cdFx0XHRcdHZhciBkYXRhSW5mbyA9IHtcclxuXHRcdFx0XHRcdGRpY3RfaWQ6IGRpY3QuaWQsXHJcblx0XHRcdFx0XHRkaWN0X25hbWU6IGRpY3QubmFtZVxyXG5cdFx0XHRcdH07XHJcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coZGF0YUluZm8pO1xyXG5cdFx0XHRcdHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdEaWN0R2V0SW5mbycsIGRhdGFJbmZvKS50aGVuKGFzeW5jIChzdWNjZXNzKSA9PiB7XHJcblx0XHRcdFx0XHRjb25zb2xlLmxvZyhzdWNjZXNzKTtcclxuXHRcdFx0XHRcdGlmIChzdWNjZXNzLmVycl9jb2RlID09IDApIHtcclxuXHRcdFx0XHRcdFx0aWYgKHR5cGUgPT0gJ21hc3QnKSB7XHJcblx0XHRcdFx0XHRcdFx0dmFyIGxpc3QgPSBbXTtcclxuXHRcdFx0XHRcdFx0XHR2YXIgaXRlbU5hbWUgPSAnJztcclxuXHRcdFx0XHRcdFx0XHRzdWNjZXNzLnJlc3VsdC5kaWN0X2l0ZW1fbGlzdC5mb3JFYWNoKChpdGVtKSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0XHRpZiAoaXRlbS5pc19kZWZhdWx0ID09ICcxJylcclxuXHRcdFx0XHRcdFx0XHRcdFx0aXRlbU5hbWUgPSBpdGVtLm5hbWU7XHJcblx0XHRcdFx0XHRcdFx0XHRsaXN0LnB1c2goe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR0ZXh0OiBpdGVtLnZhbHVlLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogaXRlbS5uYW1lLFxyXG5cdFx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdFx0Ly/mnInpu5jorqTlgLzvvIzmmL7npLrpu5jorqTlgLxcclxuXHRcdFx0XHRcdFx0XHRpZiAoaXRlbU5hbWUpIHtcclxuXHRcdFx0XHRcdFx0XHRcdCR0aGlzLmhlYWRfc3R5bGVkZWYuZm9ybS5pdGVtc1tpbmRleF0udmFsdWUgPSBpdGVtTmFtZTtcclxuXHRcdFx0XHRcdFx0XHRcdHZhciBhdHRyID0gJHRoaXMuaGVhZF9zdHlsZWRlZi5mb3JtLml0ZW1zW2luZGV4XS5maWVsZElkO1xyXG5cdFx0XHRcdFx0XHRcdFx0JHRoaXMuaGVhZF9zdHlsZWRlZi5mb3JtLm1vZGVsW2F0dHJdID0gaXRlbU5hbWU7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdCR0aGlzLmhlYWRfc3R5bGVkZWYuZm9ybS5pdGVtc1tpbmRleF0uZGljdCA9IGxpc3Q7XHJcblx0XHRcdFx0XHRcdFx0dmFyIGhlYWRfc3R5bGVkZWYgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KCR0aGlzLmhlYWRfc3R5bGVkZWYpKTtcclxuXHRcdFx0XHRcdFx0XHQkdGhpcy5oZWFkX3N0eWxlZGVmID0gW107XHJcblx0XHRcdFx0XHRcdFx0JHRoaXMuaGVhZF9zdHlsZWRlZiA9IGhlYWRfc3R5bGVkZWY7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0Ly8gJHRoaXMuJGRhdGEuc3ViQ2xhc3NBdHRyTGlzdFtpbmRleF0uYXR0cl9saXN0W2tleV0uZGljdGl0ZW09c3VjY2Vzcy5yZXN1bHQ7XHJcblx0XHRcdFx0XHRcdFx0Ly8gdGhpcy4kc3RvcmUuY29tbWl0KFwic3ViQ2xhc3NBdHRyTGlzdFwiLCAkdGhpcy4kZGF0YS5zdWJDbGFzc0F0dHJMaXN0KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe1xyXG5cdFx0XHRcdFx0XHRcdHRpdGxlOiB0aGlzLnRyYW5zbGF0ZVN5cyhcImVycm9yXCIpICsgXCIzLjFcIixcclxuXHRcdFx0XHRcdFx0XHRjb250ZW50OiBzdWNjZXNzLmVycl9tc2csXHJcblx0XHRcdFx0XHRcdFx0c2hvd0NhbmNlbDogZmFsc2UsXHJcblx0XHRcdFx0XHRcdFx0Y29uZmlybVRleHQ6IHRoaXMudHJhbnNsYXRlU3lzKFwiY2FuY2VsXCIpXHJcblx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pLmNhdGNoKGV4ID0+IHtcclxuXHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKGV4KTtcclxuXHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe1xyXG5cdFx0XHRcdFx0XHR0aXRsZTogdGhpcy50cmFuc2xhdGVTeXMoXCJlcnJvclwiKSArIFwiM1wiLFxyXG5cdFx0XHRcdFx0XHRjb250ZW50OiBleC5lcnJNc2csXHJcblx0XHRcdFx0XHRcdHNob3dDYW5jZWw6IGZhbHNlLFxyXG5cdFx0XHRcdFx0XHRjb25maXJtVGV4dDogdGhpcy50cmFuc2xhdGVTeXMoXCJjYW5jZWxcIilcclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9LFxyXG5cclxuXHRcdFx0Ly8g5omn6KGM5p+l6K+i5LqL5Lu2XHJcblx0XHRcdGFzeW5jIG9uU2VhckNoYW5nZShjbHNpZCwgZXZlbnRpZCkge1xyXG5cdFx0XHRcdHRyeSB7XHJcblx0XHRcdFx0XHRpZiAoZXZlbnRpZCkge1xyXG5cdFx0XHRcdFx0XHR2YXIgJHRoaXMgPSB0aGlzO1xyXG5cdFx0XHRcdFx0XHR2YXIgZGF0YUluZm8gPSB7XHJcblx0XHRcdFx0XHRcdFx0ZWRfdHlwZTogMCxcclxuXHRcdFx0XHRcdFx0XHRzdGFydF90cmFuc2FjdGlvbjogdHJ1ZSxcclxuXHRcdFx0XHRcdFx0XHRjbGFzc19pZDogY2xzaWQsXHJcblx0XHRcdFx0XHRcdFx0ZXZlbnRfaWQ6IGV2ZW50aWQsXHJcblx0XHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHRcdHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdydW5DdXN0b21FdmVudCcsIGRhdGFJbmZvKS50aGVuKHJldCA9PiB7XHJcblx0XHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2cocmV0KTtcclxuXHRcdFx0XHRcdFx0XHRpZiAocmV0LmVycl9jb2RlID09IDApIHtcclxuXHRcdFx0XHRcdFx0XHRcdHZhciByZXN1bHQgPSByZXQucmVzdWx0O1xyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKHJlc3VsdC5yZXQgIT0gMCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgdGlwID0gcmVzdWx0LmVycl9pbmZvID8gdHlwZW9mIHJlc3VsdC5lcnJfaW5mbyA9PSAnc3RyaW5nJyA/IHJlc3VsdFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC5lcnJfaW5mbyA6IHJlc3VsdC5lcnJfaW5mby5qb2luKCc8YnIvPicpIDogJyc7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChyZXN1bHQucmV0ID09IDgwMSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmICh0aGlzLnBhcmFtLk9ubHlfU2NyaXB0X0Vycm9yKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRsZXQgcG9zID0gdGlwLmluZGV4T2YoXCLvvJpcIik7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAocG9zID4gLTEpIHRpcCA9IHRpcC5zdWJzdHJpbmcocG9zICsgMSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGl0bGU6IHRoaXMudHJhbnNsYXRlU3lzKFwidGlwXCIpLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29udGVudDogdGlwLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0c2hvd0NhbmNlbDogZmFsc2UsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb25maXJtVGV4dDogdGhpcy50cmFuc2xhdGVTeXMoXCJjYW5jZWxcIilcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHVuaS5zaG93TW9kYWwoe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRpdGxlOiB0aGlzLnRyYW5zbGF0ZVN5cyhcInRpcFwiKSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb250ZW50OiB0aXAgKyAnLCcgKyB0aGlzLnRyYW5zbGF0ZVN5cygndGlwJykgKyAnOicgKyByZXN1bHRcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC5yZXQsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0c2hvd0NhbmNlbDogZmFsc2UsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uZmlybVRleHQ6IHRoaXMudHJhbnNsYXRlU3lzKFwiY2FuY2VsXCIpXHJcblx0XHRcdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgdGlwID0gcmVzdWx0LmluZm8gPyB0eXBlb2YgcmVzdWx0LmluZm8gPT0gJ3N0cmluZycgPyByZXN1bHQuaW5mbyA6XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzdWx0LmluZm8uam9pbignPGJyLz4nKSA6ICcnO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAodGlwKSB1bmkuc2hvd01vZGFsKHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aXRsZTogdGhpcy50cmFuc2xhdGVTeXMoXCJ0aXBcIiksXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29udGVudDogdGlwLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHNob3dDYW5jZWw6IGZhbHNlLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvbmZpcm1UZXh0OiB0aGlzLnRyYW5zbGF0ZVN5cyhcImNhbmNlbFwiKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHR9KTtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChyZXN1bHQucmVzdWx0X3R5cGUgPT0gMCAmJiByZXN1bHQuYWN0aW9uKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzdWx0LmFjdGlvbi5mb3JFYWNoKGl0ZW0gPT4ge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGl0ZW0uYWN0aW9uX3R5cGUgPT0gXCJzZXRfcXVlcnlfY29uZGl0aW9uXCIpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIHZhbHVlID0gaXRlbS52YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMud2hlcmVzID0gdmFsdWUuY29uZGl0aW9uO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy5vcmRlcmJ5ID0gdmFsdWUub3JkZXIgPyB2YWx1ZS5vcmRlciA6ICR0aGlzXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Lm9yZGVyYnk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLnBhZ2VpbmRleCA9IDE7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLnF1ZXJ5X2lkID0gXCJcIjtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMuZGV0YWlsMVN0eWxlRGVmTGlzdCA9IFtdO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy5sb2FkRGF0YUdldExpc3QoKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gdGhpcy5kZXRhaWwyU3R5bGVEZWZMaXN0PVtdO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChyZXN1bHQuaW5mbykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRpdGxlOiB0aGlzLnRyYW5zbGF0ZVN5cyhcInRpcFwiKSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29udGVudDogcmVzdWx0LmluZm8sXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHNob3dDYW5jZWw6IGZhbHNlLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb25maXJtVGV4dDogdGhpcy50cmFuc2xhdGVTeXMoXCJjYW5jZWxcIilcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHRpdGxlOiB0aGlzLnRyYW5zbGF0ZVN5cyhcImVycm9yXCIpICsgXCI0XCIsXHJcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnRlbnQ6IHJldC5lcnJfbXNnLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRzaG93Q2FuY2VsOiBmYWxzZSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0Y29uZmlybVRleHQ6IHRoaXMudHJhbnNsYXRlU3lzKFwiY2FuY2VsXCIpXHJcblx0XHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH0pLmNhdGNoKGV4ID0+IHtcclxuXHRcdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhleCk7XHJcblx0XHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7XHJcblx0XHRcdFx0XHRcdFx0XHR0aXRsZTogdGhpcy50cmFuc2xhdGVTeXMoXCJlcnJvclwiKSArIFwiNC4xXCIsXHJcblx0XHRcdFx0XHRcdFx0XHRjb250ZW50OiBleC5lcnJNc2csXHJcblx0XHRcdFx0XHRcdFx0XHRzaG93Q2FuY2VsOiBmYWxzZSxcclxuXHRcdFx0XHRcdFx0XHRcdGNvbmZpcm1UZXh0OiB0aGlzLnRyYW5zbGF0ZVN5cyhcImNhbmNlbFwiKVxyXG5cdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9IGNhdGNoIChleCkge1xyXG5cdFx0XHRcdFx0dmFyIHRpcCA9IHR5cGVvZiBleCA9PSBcInN0cmluZ1wiID8gZXggOiBleC5tZXNzYWdlO1xyXG5cdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7XHJcblx0XHRcdFx0XHRcdHRpdGxlOiB0aGlzLnRyYW5zbGF0ZVN5cyhcImVycm9yXCIpICsgXCI0LjJcIixcclxuXHRcdFx0XHRcdFx0Y29udGVudDogdGhpcy50cmFuc2xhdGUoXCJleGVjdXRlX3F1ZXJ5X2V2ZW50X2ZhaWxlZFwiKSArIHRoaXMudHJhbnNsYXRlU3lzKFwiY29tbWFcIikgK1xyXG5cdFx0XHRcdFx0XHRcdHRpcCxcclxuXHRcdFx0XHRcdFx0c2hvd0NhbmNlbDogZmFsc2UsXHJcblx0XHRcdFx0XHRcdGNvbmZpcm1UZXh0OiB0aGlzLnRyYW5zbGF0ZVN5cyhcImNhbmNlbFwiKVxyXG5cdFx0XHRcdFx0fSk7XHJcblxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSxcclxuXHRcdFx0Ly/mn6Xor6LmlbDmja7nsbvmlbDmja7kv6Hmga9cclxuXHRcdFx0YXN5bmMgbG9hZERhdGFHZXRMaXN0KCkge1xyXG5cdFx0XHRcdHRyeSB7XHJcblx0XHRcdFx0XHR1bmkuc2hvd0xvYWRpbmcoe1xyXG5cdFx0XHRcdFx0XHR0aXRsZTogdGhpcy50cmFuc2xhdGVTeXMoXCJsb2FkaW5nXCIpLFxyXG5cdFx0XHRcdFx0XHRtYXNrOiB0cnVlXHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdC8v5p2h5Lu25p+l6K+iXHJcblx0XHRcdFx0XHR2YXIgY29uZGl0aW9uID0gdGhpcy53aGVyZXM7XHJcblx0XHRcdFx0XHRpZiAodGhpcy53aGVyZSkge1xyXG5cdFx0XHRcdFx0XHRpZiAoY29uZGl0aW9uKSBjb25kaXRpb24gKz0gJyBhbmQgJztcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uICs9IHRoaXMud2hlcmU7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhjb25kaXRpb24pO1xyXG5cdFx0XHRcdFx0Ly8gY29uc29sZS5sb2codGhpcy5vcmRlcmJ5KTtcclxuXHRcdFx0XHRcdHZhciAkdGhpcyA9IHRoaXM7XHJcblx0XHRcdFx0XHR2YXIgZGF0YUluZm8gPSB7XHJcblx0XHRcdFx0XHRcdGNsYXNzX2lkOiB0aGlzLnBhcmFtLkRhdGFDbHMuaWQsXHJcblx0XHRcdFx0XHRcdGF0dHJzOiBbXSxcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uOiB0aGlzLnRvV2hlcmVCYXNlNjRTdHJpbmcoXCJcIiArIGNvbmRpdGlvbiArIFwiXCIpLFxyXG5cdFx0XHRcdFx0XHRwcmpfcmVsX3R5cGU6IFwiXCIsXHJcblx0XHRcdFx0XHRcdG9yZGVyX2J5OiB0aGlzLm9yZGVyYnksXHJcblx0XHRcdFx0XHRcdHBhZ2Vfc2l6ZTogdGhpcy5wYWdlX3NpemUsXHJcblx0XHRcdFx0XHRcdHBhZ2U6IHRoaXMucGFnZWluZGV4LFxyXG5cdFx0XHRcdFx0XHRxdWVyeV9pZDogdGhpcy5xdWVyeV9pZCxcclxuXHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHR0aGlzLiRzdG9yZS5kaXNwYXRjaCgnZGF0YU9ialF1ZXJ5JywgZGF0YUluZm8pLnRoZW4ocmV0ID0+IHtcclxuXHRcdFx0XHRcdFx0Y29uc29sZS5sb2cocmV0KTtcclxuXHRcdFx0XHRcdFx0dW5pLmhpZGVMb2FkaW5nKCk7XHJcblx0XHRcdFx0XHRcdGlmIChyZXQuZXJyX2NvZGUgPT0gMCkge1xyXG5cdFx0XHRcdFx0XHRcdC8vIHZhciBsaXN0PVtdO1xyXG5cdFx0XHRcdFx0XHRcdCR0aGlzLnF1ZXJ5X2lkID0gJyc7XHJcblx0XHRcdFx0XHRcdFx0aWYgKHJldC5yZXN1bHQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdCR0aGlzLnBhZ2VfY291bnQgPSByZXQucmVzdWx0LnBhZ2VfY291bnQ7XHJcblx0XHRcdFx0XHRcdFx0XHRpZiAocmV0LnJlc3VsdC5wYWdlX2NvdW50ID4gMSkgJHRoaXMucXVlcnlfaWQgPSByZXQucmVzdWx0LnF1ZXJ5X2lkO1xyXG5cdFx0XHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coJHRoaXMuTGlzdFBhZ2VIdG1sX1Nob3cuZXZlbnQpO1xyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKCR0aGlzLkxpc3RQYWdlSHRtbF9TaG93LmV2ZW50LmlkKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHJldC5yZXN1bHQub2JqX2xpc3QuZm9yRWFjaCgob2JqKSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGluZm8gPSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZDogb2JqLmlkLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0b2JqLmF0dHJfbGlzdC5mb3JFYWNoKChhdHRyKSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpbmZvW2F0dHIubmFtZV0gPSBhdHRyLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBkZXRhaWxTdHlsZSA9IHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFNlbEJ1dF9DaGVja2VkOiBmYWxzZSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvcm06IHt9LFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aW5mbzogaW5mb1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZGV0YWlsU3R5bGUuZm9ybS5odG1sb2JqSWQgPSBvYmouaWQgPyBvYmouaWQucmVwbGFjZSgvLS9nLCAnJylcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC5yZXBsYWNlKCd7JywgJycpLnJlcGxhY2UoJ30nLCAnJykgOiAnbnVsbCc7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZGV0YWlsU3R5bGUuZm9ybS5vYmpJZCA9IG9iai5pZDtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRkZXRhaWxTdHlsZS5mb3JtLmF0dHJzID0gb2JqLmF0dHJfbGlzdDtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy5kZXRhaWwxU3R5bGVEZWZMaXN0LnB1c2goZGV0YWlsU3R5bGUpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLmFjdGl2ZWxpc3QucHVzaCh7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhY3RpdmU6IGZhbHNlXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyh0aGlzLmRldGFpbDFTdHlsZURlZkxpc3QpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIganNvbmxpc3QgPSBbXTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMuZGV0YWlsMVN0eWxlRGVmTGlzdC5mb3JFYWNoKGF0dHIgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGpzb25saXN0LnB1c2goe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ6IGF0dHIuaW5mby5pZCxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGF0dHJzOiBPYmplY3Qua2V5cyhhdHRyLmluZm8pLm1hcCgoYSkgPT4gKHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXR0cjogYSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU6IGF0dHIuaW5mb1thXSB8fCBcIlwiLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSkpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhqc29ubGlzdCk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBkYXRhX2pzb24gPSBCYXNlNjQuZW5jb2RlKEpTT04uc3RyaW5naWZ5KGpzb25saXN0KSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBldmVudGlkID0gJHRoaXMuTGlzdFBhZ2VIdG1sX1Nob3cuZXZlbnQuaWQ7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmICghJHRoaXMuTGlzdFBhZ2VIdG1sX1Nob3cuZXZlbnQuaWQuaW5jbHVkZXMoJ3snKSlcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRldmVudGlkID0gJ3snICsgJHRoaXMuTGlzdFBhZ2VIdG1sX1Nob3cuZXZlbnQuaWQgKyAnfSc7XHJcblx0XHRcdFx0XHRcdFx0XHRcdC8vSFRNTOmhtemdouS6i+S7tlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy5ydW5DdXN0b21FdmVudCh7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZWRfdHlwZTogMCxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRzdGFydF90cmFuc2FjdGlvbjogdHJ1ZSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzc19pZDogJHRoaXMucGFyYW0uRGF0YUNscy5pZCxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRldmVudF9pZDogZXZlbnRpZCxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRhX2pzb24sXHJcblx0XHRcdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gJHRoaXMuZGV0YWlsMVN0eWxlRGVmTGlzdD1bXTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0LnJlc3VsdC5vYmpfbGlzdC5mb3JFYWNoKChvYmopID0+IHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgc3R5bGVTdHIgPSBKU09OLnN0cmluZ2lmeSgkdGhpcy5kZXRhaWwxX3N0eWxlZGVmKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgZGV0YWlsU3R5bGUgPSBKU09OLnBhcnNlKHN0eWxlU3RyKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyB2YXIgaW5mbyA9e1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vICAgICBTX0lEOm9iai5pZCxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyB9O1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9iai5hdHRyX2xpc3QuZm9yRWFjaCgoYXR0cikgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gaW5mb1thdHRyLm5hbWVdPWF0dHIudmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkZXRhaWxTdHlsZS5mb3JtLml0ZW1zLmZvckVhY2goZWxlID0+IHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGVsZS5uYW1lICE9ICdMYXlvdXQnKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGVsZS5maWVsZElkID09IGF0dHIubmFtZSkgZWxlXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQudmFsdWUgPSBhdHRyLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGVsZS5uYW1lID09ICdMYXlvdXQnKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZWxlLnNldHRpbmcuY29sTGlzdC5mb3JFYWNoKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29sID0+IHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGNvbCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChjb2wuZmllbGRJZCA9PVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXR0ci5uYW1lKSBjb2xcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC52YWx1ZSA9IGF0dHJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC52YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0pO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRkZXRhaWxTdHlsZS5mb3JtLmh0bWxvYmpJZCA9IG9iai5pZCA/IG9iai5pZC5yZXBsYWNlKC8tL2csICcnKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0LnJlcGxhY2UoJ3snLCAnJykucmVwbGFjZSgnfScsICcnKSA6ICdudWxsJztcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRkZXRhaWxTdHlsZS5mb3JtLm9iaklkID0gb2JqLmlkO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGRldGFpbFN0eWxlLmZvcm0uYXR0cnMgPSBvYmouYXR0cl9saXN0O1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLmRldGFpbDFTdHlsZURlZkxpc3QucHVzaChkZXRhaWxTdHlsZSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMuYWN0aXZlbGlzdC5wdXNoKHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFjdGl2ZTogZmFsc2VcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvL2xpc3QucHVzaChpbmZvKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0Ly8g6Kej5Yazdmlld+WxguS4jeWQjOatpeeahOmXrumimFxyXG5cdFx0XHRcdFx0XHRcdFx0Ly8gJHRoaXMuc2Nyb2xsVG9wID0gJHRoaXMub2xkLnNjcm9sbFRvcDtcclxuXHRcdFx0XHRcdFx0XHRcdCR0aGlzLmlzU2Nyb2xsID0gZmFsc2U7XHJcblx0XHRcdFx0XHRcdFx0XHRzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy5pc1Njcm9sbCA9IHRydWU7XHJcblx0XHRcdFx0XHRcdFx0XHR9LCAxMDAwKTtcclxuXHRcdFx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKCR0aGlzLmRldGFpbDFTdHlsZURlZkxpc3QpO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHJcblxyXG5cclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHtcclxuXHRcdFx0XHRcdFx0XHRcdHRpdGxlOiB0aGlzLnRyYW5zbGF0ZVN5cyhcImVycm9yXCIpICsgXCI1XCIsXHJcblx0XHRcdFx0XHRcdFx0XHRjb250ZW50OiByZXQuZXJyX21zZyxcclxuXHRcdFx0XHRcdFx0XHRcdHNob3dDYW5jZWw6IGZhbHNlLFxyXG5cdFx0XHRcdFx0XHRcdFx0Y29uZmlybVRleHQ6IHRoaXMudHJhbnNsYXRlU3lzKFwiY2FuY2VsXCIpXHJcblx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0pLmNhdGNoKGV4ID0+IHtcclxuXHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coZXgpO1xyXG5cdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHtcclxuXHRcdFx0XHRcdFx0XHR0aXRsZTogdGhpcy50cmFuc2xhdGVTeXMoXCJlcnJvclwiKSArIFwiNS4xXCIsXHJcblx0XHRcdFx0XHRcdFx0Y29udGVudDogZXguZXJyTXNnLFxyXG5cdFx0XHRcdFx0XHRcdHNob3dDYW5jZWw6IGZhbHNlLFxyXG5cdFx0XHRcdFx0XHRcdGNvbmZpcm1UZXh0OiB0aGlzLnRyYW5zbGF0ZVN5cyhcImNhbmNlbFwiKVxyXG5cdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdH0gY2F0Y2ggKGV4KSB7XHJcblx0XHRcdFx0XHR2YXIgdGlwID0gdHlwZW9mIGV4ID09IFwic3RyaW5nXCIgPyBleCA6IGV4Lm1lc3NhZ2U7XHJcblx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHtcclxuXHRcdFx0XHRcdFx0dGl0bGU6IHRoaXMudHJhbnNsYXRlU3lzKFwiZXJyb3JcIikgKyBcIjUuMlwiLFxyXG5cdFx0XHRcdFx0XHRjb250ZW50OiB0aXAsXHJcblx0XHRcdFx0XHRcdHNob3dDYW5jZWw6IGZhbHNlLFxyXG5cdFx0XHRcdFx0XHRjb25maXJtVGV4dDogdGhpcy50cmFuc2xhdGVTeXMoXCJjYW5jZWxcIilcclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSxcclxuXHJcblx0XHRcdC8v5Yi35pawXHJcblx0XHRcdFJlZnJlc2godmFsdWUpIHtcclxuXHRcdFx0XHQvL+WIt+aWsOW9k+WJjemhtemdolxyXG5cdFx0XHRcdHRoaXMuaW5pdGlhbCgpO1xyXG5cdFx0XHRcdC8vIHVuaS5yZWRpcmVjdFRvKHtcclxuXHRcdFx0XHQvLyBcdHVybDonLi4vbW9kYWwvMzIwMD9wYXJhbT0nK0pTT04uc3RyaW5naWZ5KHRoaXMuJGRhdGEucGFyYW0pK1wiJnRpdGxlbmFtZT1cIit0aGlzLiRkYXRhLnRpdGxlLFxyXG5cdFx0XHRcdC8vIH0pO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHQvL+eCueWHu+aYvuekuua1j+iniOWvueixoeaYvuekuumhtemdolxyXG5cdFx0XHRhc3luYyBvblZpZXdQYWdlQ2xpY2soc3R5bGUpIHtcclxuXHRcdFx0XHRpZiAodGhpcy5wYXJhbS5WaWV3UGFnZSkge1xyXG5cdFx0XHRcdFx0aWYgKHRoaXMucGFyYW0uVmlld1BhZ2UuVmlld19VSURlZikge1xyXG5cdFx0XHRcdFx0XHR0aGlzLnN0eWxlZGVmID0gc3R5bGU7XHJcblx0XHRcdFx0XHRcdHZhciAkdGhpcyA9IHRoaXM7XHJcblx0XHRcdFx0XHRcdHVuaS5uYXZpZ2F0ZVRvKHtcclxuXHRcdFx0XHRcdFx0XHR1cmw6ICcuLi9tb2RhbC8zMjAwX3ZpZXc/cGFyYW09JyArIEpTT04uc3RyaW5naWZ5KHRoaXMucGFyYW0pICsgXCImdGl0bGVuYW1lPVwiICtcclxuXHRcdFx0XHRcdFx0XHRcdHRoaXMudGl0bGUgKyBcIiZzdHlsZT1cIiArIEpTT04uc3RyaW5naWZ5KHN0eWxlKSxcclxuXHRcdFx0XHRcdFx0XHRldmVudHM6IHtcclxuXHRcdFx0XHRcdFx0XHRcdC8vIOS4uuaMh+WumuS6i+S7tua3u+WKoOS4gOS4quebkeWQrOWZqO+8jOiOt+WPluiiq+aJk+W8gOmhtemdouS8oOmAgeWIsOW9k+WJjemhtemdoueahOaVsOaNrlxyXG5cdFx0XHRcdFx0XHRcdFx0RXhpdFZpZXdFdmVudDogZnVuY3Rpb24oZGF0YSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhkYXRhKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0Ly/pgIDlh7rpobXpnaLlkI7kuovku7ZcclxuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIGV2ZW50aWQgPSAkdGhpcy5wYXJhbS5WaWV3UGFnZS5FeGl0X1ZpZXdfRXZlbnQ/LmlkO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoZXZlbnRpZCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRyeSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgb2JqX2F0dHIgPSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdTX0lEJzogJHRoaXMuc3R5bGVkZWYuZm9ybS5vYmpJZFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLnN0eWxlZGVmLmZvcm0uYXR0cnMuZm9yRWFjaCgoYXR0cikgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvYmpfYXR0clthdHRyLm5hbWVdID0gYXR0ci52YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2cob2JqX2F0dHIpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGlucHV0X3BhcmFtID0gQmFzZTY0LmVuY29kZShKU09OLnN0cmluZ2lmeShvYmpfYXR0cikpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMucnVuQ3VzdG9tRXZlbnQoe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlZF90eXBlOiAwLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzdGFydF90cmFuc2FjdGlvbjogdHJ1ZSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NfaWQ6ICR0aGlzLnBhcmFtLkRhdGFDbHMuaWQsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGV2ZW50X2lkOiBldmVudGlkLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRhX29ial9pZDogJHRoaXMuc3R5bGVkZWYuZm9ybS5vYmpJZCxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0b2JqX2F0dHIsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlucHV0X3BhcmFtLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fSBjYXRjaCAoZXgpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciB0aXAgPSB0eXBlb2YgZXggPT0gXCJzdHJpbmdcIiA/IGV4IDogZXgubWVzc2FnZTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aXRsZTogdGhpcy50cmFuc2xhdGVTeXMoXCJlcnJvclwiKSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29udGVudDogdGlwLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzaG93Q2FuY2VsOiBmYWxzZSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uZmlybVRleHQ6IHRoaXMudHJhbnNsYXRlU3lzKFwiY2FuY2VsXCIpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH0sXHJcblx0XHRcdC8v54K55Ye75oyJ6ZKuXHJcblx0XHRcdG9uQnRuQ2xpY2soYnRuLCBzdHlsZSkge1xyXG5cdFx0XHRcdHZhciB0aGF0ID0gdGhpc1xyXG5cdFx0XHRcdGlmIChidG4uUHJvbXB0KSB7XHJcblx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHtcclxuXHRcdFx0XHRcdFx0dGl0bGU6IHRoaXMudHJhbnNsYXRlU3lzKFwidGlwXCIpLFxyXG5cdFx0XHRcdFx0XHRjb250ZW50OiBidG4uUHJvbXB0Q29udGVudCB8fCB0aGlzLnRyYW5zbGF0ZShcImFyZV95b3Vfc3VyZVwiKSxcclxuXHRcdFx0XHRcdFx0c3VjY2VzczogZnVuY3Rpb24ocmVzKSB7XHJcblx0XHRcdFx0XHRcdFx0aWYgKHJlcy5jb25maXJtKSB7XHJcblx0XHRcdFx0XHRcdFx0XHR0aGF0Lm9uQnV0dG9uQ2xpY2tlZChidG4sIHN0eWxlKTtcclxuXHRcdFx0XHRcdFx0XHRcdC8vIH0gZWxzZSBpZiAocmVzLmNhbmNlbCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0Ly8gXHRjb25zb2xlLmxvZygn55So5oi354K55Ye75Y+W5raIJyk7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHR9IGVsc2UgdGhhdC5vbkJ1dHRvbkNsaWNrZWQoYnRuLCBzdHlsZSk7XHJcblx0XHRcdH0sXHJcblx0XHRcdC8v54K55Ye75oyJ6ZKu5YiX6KGoXHJcblx0XHRcdGFjdGlvblNoZWV0VGFwKCkge1xyXG5cdFx0XHRcdHZhciB0aGF0ID0gdGhpc1xyXG5cdFx0XHRcdHZhciBpdGVtbGlzdCA9IFtdO1xyXG5cdFx0XHRcdHRoaXMucGFyYW0uTGlzdFBhZ2UuUGFnZV9CdXR0b24uZm9yRWFjaCgoYnRuKSA9PiB7XHJcblx0XHRcdFx0XHRpdGVtbGlzdC5wdXNoKGJ0bi5TaG93TmFtZSk7XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdFx0dW5pLnNob3dBY3Rpb25TaGVldCh7XHJcblx0XHRcdFx0XHQvLyB0aXRsZTogJ+aMiemSruWIl+ihqCcsXHJcblx0XHRcdFx0XHRpdGVtTGlzdDogaXRlbWxpc3QsXHJcblx0XHRcdFx0XHRzdWNjZXNzOiAoZSkgPT4ge1xyXG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhlLnRhcEluZGV4KTtcclxuXHRcdFx0XHRcdFx0dmFyIGJ0biA9IHRoYXQucGFyYW0uTGlzdFBhZ2UuUGFnZV9CdXR0b25bZS50YXBJbmRleF07XHJcblx0XHRcdFx0XHRcdGlmIChidG4uUHJvbXB0KSB7XHJcblx0XHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7XHJcblx0XHRcdFx0XHRcdFx0XHR0aXRsZTogdGhpcy50cmFuc2xhdGVTeXMoXCJ0aXBcIiksXHJcblx0XHRcdFx0XHRcdFx0XHRjb250ZW50OiBidG4uUHJvbXB0Q29udGVudCB8fCB0aGlzLnRyYW5zbGF0ZShcImFyZV95b3Vfc3VyZVwiKSxcclxuXHRcdFx0XHRcdFx0XHRcdHN1Y2Nlc3M6IGZ1bmN0aW9uKHJlcykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAocmVzLmNvbmZpcm0pIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGF0Lm9uQnV0dG9uQ2xpY2tlZChidG4pO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIH0gZWxzZSBpZiAocmVzLmNhbmNlbCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFx0Y29uc29sZS5sb2coJ+eUqOaIt+eCueWHu+WPlua2iCcpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB0aGF0Lm9uQnV0dG9uQ2xpY2tlZChidG4pO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pXHJcblx0XHRcdH0sXHJcblx0XHRcdC8v5aSE55CG55u45YWz5oyJ6ZKuXHJcblx0XHRcdGFzeW5jIG9uQnV0dG9uQ2xpY2tlZChidG4sIHN0eWxlKSB7XHJcblx0XHRcdFx0c3R5bGUgPSBzdHlsZSB8fCAnJztcclxuXHRcdFx0XHR0cnkge1xyXG5cdFx0XHRcdFx0dmFyIGVudmlyb21lbnQgPSB7XHJcblx0XHRcdFx0XHRcdGJ1dHRvbjogXCJ0b3BcIixcclxuXHRcdFx0XHRcdFx0YnV0dG9uX25hbWU6IGJ0bi5TaG93TmFtZSxcclxuXHRcdFx0XHRcdFx0Y2xzX2lkOiBidG4uQ2xzX0lELFxyXG5cdFx0XHRcdFx0XHRmdW5jdGlvbjogXCIzMjAwXCIsXHJcblx0XHRcdFx0XHRcdG1hc3Rlcjoge30sXHJcblx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdFx0aWYgKGJ0bi5GdW5Db2RlID09IFwiQWRkXCIgfHwgYnRuLkZ1bkNvZGUgPT0gXCJNb2RpZnlcIikge1xyXG5cdFx0XHRcdFx0XHRpZiAoYnRuLkVkaXRfZGxnLk1vZGVsID09IFwic21hbGxcIikge1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMuc2hvd0FkZFNtYWxsRGlhbG9nKGJ0biwgc3R5bGUsIGVudmlyb21lbnQpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKGJ0bi5GdW5Db2RlID09IFwiRGVsZXRlXCIpIHtcclxuXHRcdFx0XHRcdFx0dGhpcy5EZWxldGVPYmooYnRuLCBzdHlsZSwgZW52aXJvbWVudCk7XHJcblx0XHRcdFx0XHRcdC8vIH0gZWxzZSBpZiAoYnRuLkZ1bkNvZGUgPT0gXCJUcmlnZ2VyRXZlbnRcIikge1xyXG5cdFx0XHRcdFx0XHQvLyAgIHRoaXMudHJpZ2dlckV2ZW50KGJ0biwgc3R5bGUsIGVudmlyb21lbnQpO1xyXG5cdFx0XHRcdFx0fSBlbHNlIGlmIChidG4uRnVuQ29kZSA9PSBcIlRyaWdnZXJFdmVudFwiKSB7XHJcblx0XHRcdFx0XHRcdHRoaXMuVHJpZ2dlckV2ZW50KGJ0biwgc3R5bGUsIGVudmlyb21lbnQpO1xyXG5cdFx0XHRcdFx0XHQvLyB9IGVsc2UgaWYgKGJ0bi5GdW5Db2RlID09IFwiVHJpZ2dlckV2ZW50XCIpIHtcclxuXHRcdFx0XHRcdFx0Ly8gICB0aGlzLnRyaWdnZXJFdmVudChidG4sIHN0eWxlLCBlbnZpcm9tZW50KTtcclxuXHRcdFx0XHRcdH0gZWxzZSBpZiAoYnRuLkZ1bkNvZGUgPT0gXCJSZWxhdGVkRnVuY3Rpb25cIikge1xyXG5cdFx0XHRcdFx0XHR0aGlzLlJlbGF0ZWRGdW5jdGlvbihidG4sIHN0eWxlLCBlbnZpcm9tZW50KTtcclxuXHRcdFx0XHRcdFx0Ly8gfSBlbHNlIGlmIChidG4uRnVuQ29kZSA9PSBcIlRyaWdnZXJFdmVudFwiKSB7XHJcblx0XHRcdFx0XHRcdC8vICAgdGhpcy50cmlnZ2VyRXZlbnQoYnRuLCBzdHlsZSwgZW52aXJvbWVudCk7XHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHtcclxuXHRcdFx0XHRcdFx0XHR0aXRsZTogdGhpcy50cmFuc2xhdGVTeXMoXCJ0aXBcIiksXHJcblx0XHRcdFx0XHRcdFx0Y29udGVudDogdGhpcy50cmFuc2xhdGVTeXMoXCJ1bnJlYWxpemVkXCIpLFxyXG5cdFx0XHRcdFx0XHRcdHNob3dDYW5jZWw6IGZhbHNlLFxyXG5cdFx0XHRcdFx0XHRcdGNvbmZpcm1UZXh0OiB0aGlzLnRyYW5zbGF0ZVN5cyhcImNhbmNlbFwiKVxyXG5cdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9IGNhdGNoIChleCkge1xyXG5cdFx0XHRcdFx0dmFyIHRpcCA9IHR5cGVvZiBleCA9PSBcInN0cmluZ1wiID8gZXggOiBleC5tZXNzYWdlO1xyXG5cdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7XHJcblx0XHRcdFx0XHRcdHRpdGxlOiB0aGlzLnRyYW5zbGF0ZVN5cyhcImVycm9yXCIpLFxyXG5cdFx0XHRcdFx0XHRjb250ZW50OiB0aXAsXHJcblx0XHRcdFx0XHRcdHNob3dDYW5jZWw6IGZhbHNlLFxyXG5cdFx0XHRcdFx0XHRjb25maXJtVGV4dDogdGhpcy50cmFuc2xhdGVTeXMoXCJjYW5jZWxcIilcclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSxcclxuXHRcdFx0Ly/mlrDlop7kv67mlLnlsI/nqpflj6PmlbDmja5cclxuXHRcdFx0c2hvd0FkZFNtYWxsRGlhbG9nKGJ0biwgc3R5bGUsIGVudmlyb21lbnQpIHtcclxuXHRcdFx0XHR2YXIgZGF0YSA9IHtcclxuXHRcdFx0XHRcdEFkZF9CdG5OYW1lOiBidG4uU2hvd05hbWUsXHJcblx0XHRcdFx0XHRFZGl0RGxnTW9kZTogYnRuLkVkaXRfZGxnLk1vZGVsLFxyXG5cdFx0XHRcdFx0Y2xzaWQ6IHRoaXMucGFyYW0uRGF0YUNscy5pZCxcclxuXHRcdFx0XHRcdGNsc19uYW1lOiB0aGlzLnBhcmFtLkRhdGFDbHMubmFtZSxcclxuXHRcdFx0XHRcdEVkaXRfZGxnOiBidG4uRWRpdF9kbGdcclxuXHRcdFx0XHR9O1xyXG5cdFx0XHRcdHZhciAkdGhpcyA9IHRoaXM7XHJcblx0XHRcdFx0dW5pLm5hdmlnYXRlVG8oe1xyXG5cdFx0XHRcdFx0dXJsOiAnLi4vbW9kYWwvMzAxOD9wYXJhbT0nICsgSlNPTi5zdHJpbmdpZnkoZGF0YSkgKyBcIiZ0aXRsZW5hbWU9XCIgKyBidG4uRWRpdF9kbGcuTmFtZSArXHJcblx0XHRcdFx0XHRcdFwiJnR5cGU9YWRkRGF0YU9ialwiLFxyXG5cdFx0XHRcdFx0ZXZlbnRzOiB7XHJcblx0XHRcdFx0XHRcdC8vIOS4uuaMh+WumuS6i+S7tua3u+WKoOS4gOS4quebkeWQrOWZqO+8jOiOt+WPluiiq+aJk+W8gOmhtemdouS8oOmAgeWIsOW9k+WJjemhtemdoueahOaVsOaNrlxyXG5cdFx0XHRcdFx0XHRhZGREYXRhT2JqOiBmdW5jdGlvbihkYXRhKSB7XHJcblx0XHRcdFx0XHRcdFx0Y29uc29sZS5sb2coZGF0YSk7XHJcblx0XHRcdFx0XHRcdFx0JHRoaXMuUmVmcmVzaCgpO1xyXG5cdFx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHQvL+WIoOmZpOaVsOaNruWvueixoVxyXG5cdFx0XHREZWxldGVPYmooYnRuLCBzdHlsZSwgZW52aXJvbWVudCkge1xyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKHN0eWxlKTtcclxuXHRcdFx0XHR2YXIgJHRoaXMgPSB0aGlzO1xyXG5cdFx0XHRcdHVuaS5zaG93TW9kYWwoe1xyXG5cdFx0XHRcdFx0dGl0bGU6IHRoaXMudHJhbnNsYXRlU3lzKFwidGlwXCIpLFxyXG5cdFx0XHRcdFx0Y29udGVudDogdGhpcy50cmFuc2xhdGUoXCJjb25maXJtX2RlbGV0ZV9kYXRhXCIpLFxyXG5cdFx0XHRcdFx0c3VjY2VzczogZnVuY3Rpb24ocmVzKSB7XHJcblx0XHRcdFx0XHRcdGlmIChyZXMuY29uZmlybSkge1xyXG5cdFx0XHRcdFx0XHRcdHZhciBvYmpJRCA9IHN0eWxlLmZvcm0ub2JqSWQ7XHJcblx0XHRcdFx0XHRcdFx0aWYgKCFzdHlsZS5mb3JtLm9iaklkLmluY2x1ZGVzKCd7JykpIG9iaklEID0gJ3snICsgc3R5bGUuZm9ybS5vYmpJZCArICd9JztcclxuXHJcblx0XHRcdFx0XHRcdFx0dmFyIGRhdGFJbmZvID0ge1xyXG5cdFx0XHRcdFx0XHRcdFx0Y2xhc3NfaWQ6IGJ0bi5DbHNfSUQsXHJcblx0XHRcdFx0XHRcdFx0XHRjbGFzc19uYW1lOiAnJyxcclxuXHRcdFx0XHRcdFx0XHRcdG9ial9pZDogb2JqSURcclxuXHRcdFx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKGRhdGFJbmZvKTtcclxuXHRcdFx0XHRcdFx0XHQkdGhpcy4kc3RvcmUuZGlzcGF0Y2goJ2RhdGFPYmpEZWwnLCBkYXRhSW5mbykudGhlbihyZXQgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2cocmV0KTtcclxuXHRcdFx0XHRcdFx0XHRcdGlmIChyZXQuZXJyX2NvZGUgPT0gMCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHQvL+aJp+ihjOWQjuWkhOeQhuS6i+S7tlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy5BZnRlclByb2Nlc3NfRXZlbnQoYnRuLmNsc0lkLCBidG0uQWZ0ZXJQcm9jZXNzX0V2ZW50LFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGVudmlyb21lbnQpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHQvL+a4hemZpOW9k+WJjeWIl+ihqOaVsOaNrlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy5kZXRhaWwxU3R5bGVEZWZMaXN0LmZvckVhY2goKGVsZSwgaW5kZXgpID0+IHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoZWxlLmZvcm0ub2JqSWQgPT0gb2JqSUQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLmRldGFpbDFTdHlsZURlZkxpc3Quc3BsaWNlKGluZGV4LCAxKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aXRsZTogdGhpcy50cmFuc2xhdGVTeXMoXCJ0aXBcIiksXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29udGVudDogdGhpcy50cmFuc2xhdGUoXCJkZWxldGVfc3VjY2Vzc1wiKSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRzaG93Q2FuY2VsOiBmYWxzZSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb25maXJtVGV4dDogdGhpcy50cmFuc2xhdGVTeXMoXCJjYW5jZWxcIilcclxuXHRcdFx0XHRcdFx0XHRcdFx0fSk7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGl0bGU6IHRoaXMudHJhbnNsYXRlU3lzKFwiZXJyb3JcIikgKyBcIjYuMVwiLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnRlbnQ6IHJldC5lcnJfbXNnLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHNob3dDYW5jZWw6IGZhbHNlLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvbmZpcm1UZXh0OiB0aGlzLnRyYW5zbGF0ZVN5cyhcImNhbmNlbFwiKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR9KS5jYXRjaChleCA9PiB7XHJcblx0XHRcdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhleCk7XHJcblx0XHRcdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0dGl0bGU6IHRoaXMudHJhbnNsYXRlU3lzKFwiZXJyb3JcIikgKyBcIjZcIixcclxuXHRcdFx0XHRcdFx0XHRcdFx0Y29udGVudDogZXguZXJyTXNnLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRzaG93Q2FuY2VsOiBmYWxzZSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0Y29uZmlybVRleHQ6IHRoaXMudHJhbnNsYXRlU3lzKFwiY2FuY2VsXCIpXHJcblx0XHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0fSBlbHNlIGlmIChyZXMuY2FuY2VsKSB7XHJcblxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSk7XHJcblxyXG5cdFx0XHR9LFxyXG5cdFx0XHQvL+aJp+ihjOS6i+S7tlxyXG5cdFx0XHRhc3luYyBUcmlnZ2VyRXZlbnQoYnRuLCBzdHlsZSwgZW52aXJvbWVudCkgeyAvL+aJp+ihjOinpuWPkeS6i+S7tlxyXG5cdFx0XHRcdHRyeSB7XHJcblx0XHRcdFx0XHRsZXQgb2JqX2F0dHIgPSB7XHJcblx0XHRcdFx0XHRcdFNfSUQ6IHRoaXMuc3R5bGVkZWYuZm9ybS5vYmpJZFxyXG5cdFx0XHRcdFx0fTtcclxuXHRcdFx0XHRcdHN0eWxlLmZvcm0uYXR0cnMuZm9yRWFjaCgoYXR0cikgPT4ge1xyXG5cdFx0XHRcdFx0XHRvYmpfYXR0clthdHRyLm5hbWVdID0gYXR0ci52YWx1ZTtcclxuXHRcdFx0XHRcdH0pO1xyXG5cclxuXHRcdFx0XHRcdGlmICghdGhpcy5MaXN0UGFnZUh0bWxfU2hvdy5ldmVudC5pZCkge1xyXG5cdFx0XHRcdFx0XHQvL+WIpOaWreayoeaciUhUTUzpobXpnaLkuovku7ZcclxuXHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2codGhpcy5kZXRhaWwyX3N0eWxlZGVmKTtcclxuXHRcdFx0XHRcdFx0dGhpcy5kZXRhaWwyX3N0eWxlZGVmLmZvcm0uaXRlbXMuZm9yRWFjaChhc3luYyAoZWxlLCBpbmRleCkgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdGlmIChlbGUubmFtZSAhPSBcIkxheW91dFwiKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRpZiAoIW9ial9hdHRyW2VsZS5maWVsZElkXSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRvYmpfYXR0cltlbGUuZmllbGRJZF0gPSBlbGUudmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmIChlbGUubmFtZSA9PSBcIkxheW91dFwiKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRlbGUuc2V0dGluZy5jb2xMaXN0LmZvckVhY2goYXN5bmMgKGNvbCwga2V5KSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChjb2wpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIW9ial9hdHRyW2NvbC5maWVsZElkXSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0b2JqX2F0dHJbY29sLmZpZWxkSWRdID0gY29sLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRjb25zdCBkYXRhSW5mbyA9IHtcclxuXHRcdFx0XHRcdFx0ZWRfdHlwZTogMCxcclxuXHRcdFx0XHRcdFx0c3RhcnRfdHJhbnNhY3Rpb246IHRydWUsXHJcblx0XHRcdFx0XHRcdGNsYXNzX2lkOiBidG4uY2xzSWQsXHJcblx0XHRcdFx0XHRcdGV2ZW50X2lkOiBidG4uZXZlbnQuaWQsXHJcblx0XHRcdFx0XHRcdGRhdGFfb2JqX2lkOiB0aGlzLnN0eWxlZGVmLmZvcm0ub2JqSWQsXHJcblx0XHRcdFx0XHRcdG9ial9hdHRyOiBvYmpfYXR0cixcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdydW5DdXN0b21FdmVudCcsIGRhdGFJbmZvKS50aGVuKHJldCA9PiB7XHJcblx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKHJldCk7XHJcblx0XHRcdFx0XHRcdGlmIChyZXQuZXJyX2NvZGUgPT0gMCkge1xyXG5cdFx0XHRcdFx0XHRcdHZhciByZXN1bHQgPSByZXQucmVzdWx0O1xyXG5cdFx0XHRcdFx0XHRcdGlmIChyZXN1bHQucmV0ICE9IDApIHtcclxuXHRcdFx0XHRcdFx0XHRcdHZhciB0aXAgPSByZXN1bHQuZXJyX2luZm8gPyB0eXBlb2YgcmVzdWx0LmVycl9pbmZvID09XHJcblx0XHRcdFx0XHRcdFx0XHRcdCdzdHJpbmcnID9cclxuXHRcdFx0XHRcdFx0XHRcdFx0cmVzdWx0XHJcblx0XHRcdFx0XHRcdFx0XHRcdC5lcnJfaW5mbyA6IHJlc3VsdC5lcnJfaW5mby5qb2luKCc8YnIvPicpIDogJyc7XHJcblx0XHRcdFx0XHRcdFx0XHRpZiAocmVzdWx0LnJldCA9PSA4MDEpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKHRoaXMucGFyYW0uT25seV9TY3JpcHRfRXJyb3IpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRsZXQgcG9zID0gdGlwLmluZGV4T2YoXCLvvJpcIik7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKHBvcyA+IC0xKSB0aXAgPSB0aXAuc3Vic3RyaW5nKHBvcyArIDEpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRpdGxlOiB0aGlzLnRyYW5zbGF0ZVN5cyhcInRpcFwiKSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb250ZW50OiB0aXAsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0c2hvd0NhbmNlbDogZmFsc2UsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uZmlybVRleHQ6IHRoaXMudHJhbnNsYXRlU3lzKFwiY2FuY2VsXCIpXHJcblx0XHRcdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHVuaS5zaG93TW9kYWwoe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR0aXRsZTogdGhpcy50cmFuc2xhdGVTeXMoXCJ0aXBcIiksXHJcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnRlbnQ6IHRpcCArICcsJyArIHRoaXMudHJhbnNsYXRlU3lzKCd0aXAnKSArXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0JzonICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXN1bHRcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQucmV0LFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRzaG93Q2FuY2VsOiBmYWxzZSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0Y29uZmlybVRleHQ6IHRoaXMudHJhbnNsYXRlU3lzKFwiY2FuY2VsXCIpXHJcblx0XHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0dmFyIHRpcCA9IHJlc3VsdC5pbmZvID8gdHlwZW9mIHJlc3VsdC5pbmZvID09ICdzdHJpbmcnID8gcmVzdWx0XHJcblx0XHRcdFx0XHRcdFx0XHRcdC5pbmZvIDpcclxuXHRcdFx0XHRcdFx0XHRcdFx0cmVzdWx0LmluZm8uam9pbignPGJyLz4nKSA6ICcnO1xyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKHRpcCkgdW5pLnNob3dNb2RhbCh7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHRpdGxlOiB0aGlzLnRyYW5zbGF0ZVN5cyhcInRpcFwiKSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0Y29udGVudDogdGlwLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRzaG93Q2FuY2VsOiBmYWxzZSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0Y29uZmlybVRleHQ6IHRoaXMudHJhbnNsYXRlU3lzKFwiY2FuY2VsXCIpXHJcblx0XHRcdFx0XHRcdFx0XHR9KTtcclxuXHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe1xyXG5cdFx0XHRcdFx0XHRcdFx0dGl0bGU6IHRoaXMudHJhbnNsYXRlU3lzKFwiZXJyb3JcIikgKyBcIjhcIixcclxuXHRcdFx0XHRcdFx0XHRcdGNvbnRlbnQ6IHJldC5lcnJfbXNnLFxyXG5cdFx0XHRcdFx0XHRcdFx0c2hvd0NhbmNlbDogZmFsc2UsXHJcblx0XHRcdFx0XHRcdFx0XHRjb25maXJtVGV4dDogdGhpcy50cmFuc2xhdGVTeXMoXCJjYW5jZWxcIilcclxuXHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdH0pLmNhdGNoKGV4ID0+IHtcclxuXHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coZXgpO1xyXG5cdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHtcclxuXHRcdFx0XHRcdFx0XHR0aXRsZTogdGhpcy50cmFuc2xhdGVTeXMoXCJlcnJvclwiKSArIFwiOC4xXCIsXHJcblx0XHRcdFx0XHRcdFx0Y29udGVudDogZXguZXJyTXNnLFxyXG5cdFx0XHRcdFx0XHRcdHNob3dDYW5jZWw6IGZhbHNlLFxyXG5cdFx0XHRcdFx0XHRcdGNvbmZpcm1UZXh0OiB0aGlzLnRyYW5zbGF0ZVN5cyhcImNhbmNlbFwiKVxyXG5cdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdH0gY2F0Y2ggKGV4KSB7XHJcblx0XHRcdFx0XHR2YXIgdGlwID0gdHlwZW9mIGV4ID09IFwic3RyaW5nXCIgPyBleCA6IGV4Lm1lc3NhZ2U7XHJcblx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHtcclxuXHRcdFx0XHRcdFx0dGl0bGU6IHRoaXMudHJhbnNsYXRlU3lzKFwiZXJyb3JcIiksXHJcblx0XHRcdFx0XHRcdGNvbnRlbnQ6IHRpcCxcclxuXHRcdFx0XHRcdFx0c2hvd0NhbmNlbDogZmFsc2UsXHJcblx0XHRcdFx0XHRcdGNvbmZpcm1UZXh0OiB0aGlzLnRyYW5zbGF0ZVN5cyhcImNhbmNlbFwiKVxyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHR0aGlzLnNob3dFcnJvcihleCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9LFxyXG5cdFx0XHQvL+i3s+i9rFxyXG5cdFx0XHRhc3luYyBSZWxhdGVkRnVuY3Rpb24oYnRuLCBzdHlsZSwgZW52aXJvbWVudCkge1xyXG5cclxuXHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRidG4uUmVsYXRlZF9GdW5jdGlvbj8uRGVmX0NvZGUgPT0gXCIzMDE4XCIgfHxcclxuXHRcdFx0XHRcdGJ0bi5SZWxhdGVkX0Z1bmN0aW9uPy5EZWZfQ29kZSA9PSBcIjMwMzdcIiB8fFxyXG5cdFx0XHRcdFx0YnRuLlJlbGF0ZWRfRnVuY3Rpb24/LkRlZl9Db2RlID09IFwiMzIwMFwiIHx8XHJcblx0XHRcdFx0XHRidG4uUmVsYXRlZF9GdW5jdGlvbj8uRGVmX0NvZGUgPT0gXCIzMjAxXCIgfHxcclxuXHRcdFx0XHRcdGJ0bi5SZWxhdGVkX0Z1bmN0aW9uPy5EZWZfQ29kZSA9PSBcIjU2MDBcIiB8fFxyXG5cdFx0XHRcdFx0YnRuLlJlbGF0ZWRfRnVuY3Rpb24/LkRlZl9Db2RlID09IFwiNTYwMVwiIHx8XHJcblx0XHRcdFx0XHRidG4uUmVsYXRlZF9GdW5jdGlvbj8uRGVmX0NvZGUgPT0gXCI1NjAyXCJcclxuXHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdGxldCBuYW1lID0gYnRuLlJlbGF0ZWRfRnVuY3Rpb24/LkRlZl9Db2RlXHJcblx0XHRcdFx0XHRpZiAoYnRuLlJlbGF0ZWRfRnVuY3Rpb24/LkRlZl9Db2RlID09IFwiMzAxOFwiIHx8IGJ0bi5SZWxhdGVkX0Z1bmN0aW9uPy5EZWZfQ29kZSA9PSBcIjMwMzdcIilcclxuXHRcdFx0XHRcdFx0bmFtZSA9IGJ0bi5SZWxhdGVkX0Z1bmN0aW9uPy5EZWZfQ29kZSArIFwiXzJcIlxyXG5cclxuXHRcdFx0XHRcdHZhciAkdGhpcyA9IHRoaXM7XHJcblx0XHRcdFx0XHR2YXIganNvbiA9IHtcclxuXHRcdFx0XHRcdFx0YXBwX2lkOiBhcHBJZCxcclxuXHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHR0aGlzLiRzdG9yZS5kaXNwYXRjaCgnYXBwR2V0SW5mbycsIGpzb24pLnRoZW4oc3VjY2VzcyA9PiB7XHJcblx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKHN1Y2Nlc3MpO1xyXG5cdFx0XHRcdFx0XHRpZiAoc3VjY2Vzcy5lcnJfY29kZSA9PSAwKSB7XHJcblx0XHRcdFx0XHRcdFx0aWYgKChzdWNjZXNzLnJlc3VsdCB8fCBbXSkubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgYXBwID0gc3VjY2Vzcy5yZXN1bHRbMF1cclxuXHRcdFx0XHRcdFx0XHRcdHZhciBwYXJhbSA9IFwiXCI7XHJcblx0XHRcdFx0XHRcdFx0XHR2YXIgYXBwTmFtZSA9IGFwcC5uYW1lIHx8IGFwcC5saXN0X25hbWVcclxuXHRcdFx0XHRcdFx0XHRcdFx0Lk5hbWU7XHJcblx0XHRcdFx0XHRcdFx0XHR2YXIgcGFyYW1TdHIgPSBhcHAucGFyYW1cclxuXHRcdFx0XHRcdFx0XHRcdGlmIChwYXJhbVN0cikge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHQvL21vYm94MueahHBhcmFt5pivanNvbuWtl+espuS4slxyXG5cdFx0XHRcdFx0XHRcdFx0XHRwYXJhbSA9IHBhcmFtU3RyLnJlcGxhY2UoL1xcXFwvZywgXCJcIik7XHJcblx0XHRcdFx0XHRcdFx0XHRcdC8vbW9ib3gz55qEcGFyYW3mmK9iYXNlNjTlrZfnrKbkuLJcclxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCFwYXJhbVN0ci5pbmNsdWRlcygnXCInKSkgcGFyYW0gPSBCYXNlNjQuZGVjb2RlKHBhcmFtU3RyKTtcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdGlmICghcGFyYW0pIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGl0bGU6IHRoaXMudHJhbnNsYXRlU3lzKFwidGlwXCIpLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnRlbnQ6IHRoaXMudHJhbnNsYXRlKCd0aXBfbm9fYXBwX3BhcmFtJyksXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0c2hvd0NhbmNlbDogZmFsc2UsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uZmlybVRleHQ6IHRoaXMudHJhbnNsYXRlU3lzKFwiY2FuY2VsXCIpXHJcblx0XHRcdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0dW5pLm5hdmlnYXRlVG8oe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR1cmw6ICcuLi9tb2RhbC8nICsgbmFtZSArICc/cGFyYW09JyArIHBhcmFtICsgXCImdGl0bGVuYW1lPVwiICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRhcHBOYW1lICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcIiZ0eXBlPXJlbGF0ZWRGdW5jdGlvbiZwYXJhbVZhbHVlPVwiICsgSlNPTi5zdHJpbmdpZnkoc3R5bGVcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC5mb3JtKSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0ZXZlbnRzOiB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmVsYXRlZEZ1bmN0aW9uOiBmdW5jdGlvbihkYXRhKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhkYXRhKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLlJlZnJlc2goKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHRpdGxlOiB0aGlzLnRyYW5zbGF0ZVN5cyhcImVycm9yXCIpLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRjb250ZW50OiB0aGlzLnRyYW5zbGF0ZShcImZ1bmN0aW9uX25vdF9leGlzdFwiKSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0c2hvd0NhbmNlbDogZmFsc2UsXHJcblx0XHRcdFx0XHRcdFx0XHRcdGNvbmZpcm1UZXh0OiB0aGlzLnRyYW5zbGF0ZVN5cyhcImNhbmNlbFwiKVxyXG5cdFx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe1xyXG5cdFx0XHRcdFx0XHRcdFx0dGl0bGU6IHRoaXMudHJhbnNsYXRlU3lzKFwiZXJyb3JcIiksXHJcblx0XHRcdFx0XHRcdFx0XHRjb250ZW50OiBzdWNjZXNzLm1zZyxcclxuXHRcdFx0XHRcdFx0XHRcdHNob3dDYW5jZWw6IGZhbHNlLFxyXG5cdFx0XHRcdFx0XHRcdFx0Y29uZmlybVRleHQ6IHRoaXMudHJhbnNsYXRlU3lzKFwiY2FuY2VsXCIpXHJcblx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0pLmNhdGNoKGV4ID0+IHtcclxuXHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coZXgpO1xyXG5cdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHtcclxuXHRcdFx0XHRcdFx0XHR0aXRsZTogdGhpcy50cmFuc2xhdGVTeXMoXCJlcnJvclwiKSxcclxuXHRcdFx0XHRcdFx0XHRjb250ZW50OiBleC5lcnJNc2csXHJcblx0XHRcdFx0XHRcdFx0c2hvd0NhbmNlbDogZmFsc2UsXHJcblx0XHRcdFx0XHRcdFx0Y29uZmlybVRleHQ6IHRoaXMudHJhbnNsYXRlU3lzKFwiY2FuY2VsXCIpXHJcblx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe1xyXG5cdFx0XHRcdFx0XHR0aXRsZTogdGhpcy50cmFuc2xhdGVTeXMoXCJlcnJvclwiKSxcclxuXHRcdFx0XHRcdFx0Y29udGVudDogdGhpcy50cmFuc2xhdGUoXCJjYW5ub3RfcmVsYXRlZF9mdW5jdGlvblwiKSxcclxuXHRcdFx0XHRcdFx0c2hvd0NhbmNlbDogZmFsc2UsXHJcblx0XHRcdFx0XHRcdGNvbmZpcm1UZXh0OiB0aGlzLnRyYW5zbGF0ZVN5cyhcImNhbmNlbFwiKVxyXG5cdFx0XHRcdFx0fSk7XHJcblxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSxcclxuXHRcdFx0Ly/miafooYzlkI7lpITnkIbkuovku7ZcclxuXHRcdFx0YXN5bmMgQWZ0ZXJQcm9jZXNzX0V2ZW50KGNsc0lkLCBhZnRlclByb2Nlc3NfRXZlbnQsIGVudmlyb21lbnQpIHtcclxuXHRcdFx0XHR0cnkge1xyXG5cdFx0XHRcdFx0aWYgKGFmdGVyUHJvY2Vzc19FdmVudC5JRCkge1xyXG5cdFx0XHRcdFx0XHQvL+aJp+ihjOWQjuWkhOeQhuS6i+S7tlxyXG5cdFx0XHRcdFx0XHRhd2FpdCB0aGlzLnJ1bkN1c3RvbUV2ZW50KHtcclxuXHRcdFx0XHRcdFx0XHRlZF90eXBlOiAwLFxyXG5cdFx0XHRcdFx0XHRcdHN0YXJ0X3RyYW5zYWN0aW9uOiB0cnVlLFxyXG5cdFx0XHRcdFx0XHRcdGNsYXNzX2lkOiBjbHNJZCxcclxuXHRcdFx0XHRcdFx0XHRldmVudF9pZDogYWZ0ZXJQcm9jZXNzX0V2ZW50LklELFxyXG5cdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9IGNhdGNoIChleCkge1xyXG5cdFx0XHRcdFx0dmFyIHRpcCA9IHR5cGVvZiBleCA9PSBcInN0cmluZ1wiID8gZXggOiBleC5tZXNzYWdlO1xyXG5cdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7XHJcblx0XHRcdFx0XHRcdHRpdGxlOiB0aGlzLnRyYW5zbGF0ZVN5cyhcImVycm9yXCIpICsgXCI3XCIsXHJcblx0XHRcdFx0XHRcdGNvbnRlbnQ6IHRpcCxcclxuXHRcdFx0XHRcdFx0c2hvd0NhbmNlbDogZmFsc2UsXHJcblx0XHRcdFx0XHRcdGNvbmZpcm1UZXh0OiB0aGlzLnRyYW5zbGF0ZVN5cyhcImNhbmNlbFwiKVxyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9LFxyXG5cclxuXHRcdFx0b250YXAoaXRlbSkgeyAvL+aJq+eggeWKn+iDvVxyXG5cdFx0XHRcdC8vIHZhciAkZWxlID0gZTtcclxuXHRcdFx0XHQvL2NvbnNvbGUubG9nKGUudGFyZ2V0KVxyXG5cdFx0XHRcdGdldEFwcCgpLm9uU2NhbigocmVzdWx0KSA9PiB7XHJcblx0XHRcdFx0XHRjb25zb2xlLmxvZyhyZXN1bHQuZGVjb2RlZGF0YSk7XHJcblx0XHRcdFx0XHRpdGVtLnZhbHVlID0gcmVzdWx0LmRlY29kZWRhdGE7XHJcblx0XHRcdFx0XHR1bmkuaGlkZUtleWJvYXJkKCk7XHJcblx0XHRcdFx0XHR2YXIgJHRoaXMgPSB0aGlzO1xyXG5cclxuXHRcdFx0XHRcdGNvbnNvbGUubG9nKGl0ZW0pO1xyXG5cdFx0XHRcdFx0aWYgKGl0ZW0ub2xkdmFsdWUgIT0gaXRlbS52YWx1ZSkge1xyXG5cdFx0XHRcdFx0XHRpdGVtLm9sZHZhbHVlID0gaXRlbS52YWx1ZTtcclxuXHRcdFx0XHRcdFx0dmFyIGF0dHIgPSBpdGVtLmZpZWxkSWQ7XHJcblx0XHRcdFx0XHRcdHRoaXMuaGVhZF9zdHlsZWRlZi5mb3JtLm1vZGVsW2F0dHJdID0gaXRlbS52YWx1ZTtcclxuXHRcdFx0XHRcdFx0dmFyIG9uQ2hhbmdlRXZlbnQgPSBpdGVtLmJpbmQub25DaGFuZ2VFdmVudDsgLy/lhoXlrrnlj5jljJblkI7kuovku7ZcclxuXHRcdFx0XHRcdFx0dmFyIG9uU3VmZml4Q2xpY2tDYWxsYmFja0V2ZW50ID0gaXRlbS5iaW5kXHJcblx0XHRcdFx0XHRcdFx0Lm9uU3VmZml4Q2xpY2tDYWxsYmFja0V2ZW50OyAvL+WQjuWbvuagh+eCueWHu+S6i+S7tlxyXG5cdFx0XHRcdFx0XHR2YXIgb25TdWZmaXhDbGlja0V2ZW50ID0gaXRlbS5iaW5kLm9uU3VmZml4Q2xpY2tFdmVudDsgLy/lkI7lm77moIfngrnlh7vlm57osINcclxuXHRcdFx0XHRcdFx0dmFyIGlzZmxhZyA9IGZhbHNlO1xyXG5cclxuXHRcdFx0XHRcdFx0aWYgKG9uQ2hhbmdlRXZlbnQuaWQpIHsgLy/lhoXlrrnlj5jljJblkI7kuovku7ZcclxuXHRcdFx0XHRcdFx0XHQkdGhpcy5vbkNoYW5nZShvbkNoYW5nZUV2ZW50KTtcclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHQkdGhpcy53aGVyZSA9ICcnO1xyXG5cdFx0XHRcdFx0XHRcdGlmIChpdGVtLnZhbHVlKVxyXG5cdFx0XHRcdFx0XHRcdFx0JHRoaXMud2hlcmUgPSBpdGVtLmZpZWxkSWQgKyBcIiBsaWtlICclXCIgKyBpdGVtLnZhbHVlICsgXCIlJ1wiO1xyXG5cdFx0XHRcdFx0XHRcdCR0aGlzLnF1ZXJ5X2lkID0gJyc7XHJcblx0XHRcdFx0XHRcdFx0JHRoaXMucGFnZWluZGV4ID0gMTtcclxuXHRcdFx0XHRcdFx0XHQkdGhpcy5kZXRhaWwxU3R5bGVEZWZMaXN0ID0gW107XHJcblx0XHRcdFx0XHRcdFx0JHRoaXMubG9hZERhdGFHZXRMaXN0KCk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0aWYgKGl0ZW0udmFsdWUpIHsgLy/nrKzkuIDkuKrovpPlhaXmoYbkuI3kuLrnqbpcclxuXHRcdFx0XHRcdFx0XHQkdGhpcy5mb2N1c01hdGVyaWEgPSB0cnVlOyAvL+WIneWni+WMlu+8jOesrOS6jOS4qui+k+WFpeahhmZvY3Vz5bGe5oCnXHJcblx0XHRcdFx0XHRcdFx0Ly8gc2V0VGltZW91dChmdW5jdGlvbigpe1xyXG5cdFx0XHRcdFx0XHRcdC8vIFx0JHRoaXMuZm9jdXNNYXRlcmlhPXRydWU7IC8v56ys5LqM5Liq6L6T5YWl5qGG6I635Y+W54Sm54K5XHJcblx0XHRcdFx0XHRcdFx0c2V0VGltZW91dChmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRcdFx0XHRcdHVuaS5oaWRlS2V5Ym9hcmQoKTtcclxuXHRcdFx0XHRcdFx0XHR9LCAxMDAwKTtcclxuXHRcdFx0XHRcdFx0XHQvLyB9LDUwMCk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0Ly8gaWYob25TdWZmaXhDbGlja0NhbGxiYWNrRXZlbnQuaWQpeyAgIC8v5ZCO5Zu+5qCH54K55Ye75LqL5Lu2XHJcblx0XHRcdFx0XHRcdC8vICAgdGhpcy5vblN1ZmZpeENsaWNrKG9uU3VmZml4Q2xpY2tDYWxsYmFja0V2ZW50KTtcclxuXHRcdFx0XHRcdFx0Ly8gfVxyXG5cdFx0XHRcdFx0XHQvLyBpZihvblN1ZmZpeENsaWNrRXZlbnQuaWQpeyAgIC8v5ZCO5Zu+5qCH54K55Ye75Zue6LCDXHJcblx0XHRcdFx0XHRcdC8vICAgdGhpcy5vblN1ZmZpeENsaWNrQ2FsbGJhY2sob25TdWZmaXhDbGlja0V2ZW50KTtcclxuXHRcdFx0XHRcdFx0Ly8gfVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pXHJcblx0XHRcdH0sXHJcblx0XHRcdG9uRW50ZXJDaGFuZ2UoaXRlbSkgeyAvL+Wbnui9pu+8jOeCueWHu+aMiemSru+8jOWPlua2iOiKgueCueS6i+S7tlxyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKGl0ZW0pO1xyXG5cdFx0XHRcdGlmIChpdGVtLm9sZHZhbHVlICE9IGl0ZW0udmFsdWUpIHtcclxuXHRcdFx0XHRcdGl0ZW0ub2xkdmFsdWUgPSBpdGVtLnZhbHVlO1xyXG5cdFx0XHRcdFx0dmFyIGF0dHIgPSBpdGVtLmZpZWxkSWQ7XHJcblx0XHRcdFx0XHR0aGlzLmhlYWRfc3R5bGVkZWYuZm9ybS5tb2RlbFthdHRyXSA9IGl0ZW0udmFsdWU7XHJcblx0XHRcdFx0XHR2YXIgb25DaGFuZ2VFdmVudCA9IGl0ZW0uYmluZC5vbkNoYW5nZUV2ZW50OyAvL+WGheWuueWPmOWMluWQjuS6i+S7tlxyXG5cdFx0XHRcdFx0dmFyIG9uU3VmZml4Q2xpY2tDYWxsYmFja0V2ZW50ID0gaXRlbS5iaW5kLm9uU3VmZml4Q2xpY2tDYWxsYmFja0V2ZW50OyAvL+WQjuWbvuagh+eCueWHu+S6i+S7tlxyXG5cdFx0XHRcdFx0dmFyIG9uU3VmZml4Q2xpY2tFdmVudCA9IGl0ZW0uYmluZC5vblN1ZmZpeENsaWNrRXZlbnQ7IC8v5ZCO5Zu+5qCH54K55Ye75Zue6LCDXHJcblx0XHRcdFx0XHR2YXIgaXNmbGFnID0gZmFsc2U7XHJcblxyXG5cdFx0XHRcdFx0aWYgKG9uQ2hhbmdlRXZlbnQuaWQpIHsgLy/lhoXlrrnlj5jljJblkI7kuovku7ZcclxuXHRcdFx0XHRcdFx0dGhpcy5vbkNoYW5nZShvbkNoYW5nZUV2ZW50KTtcclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdHRoaXMud2hlcmUgPSAnJztcclxuXHRcdFx0XHRcdFx0aWYgKGl0ZW0udmFsdWUpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy53aGVyZSA9IGl0ZW0uZmllbGRJZCArIFwiIGxpa2UgJyVcIiArIGl0ZW0udmFsdWUgKyBcIiUnXCI7XHJcblx0XHRcdFx0XHRcdHRoaXMucXVlcnlfaWQgPSAnJztcclxuXHRcdFx0XHRcdFx0dGhpcy5wYWdlaW5kZXggPSAxO1xyXG5cdFx0XHRcdFx0XHR0aGlzLmRldGFpbDFTdHlsZURlZkxpc3QgPSBbXTtcclxuXHRcdFx0XHRcdFx0dGhpcy5sb2FkRGF0YUdldExpc3QoKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdC8vIGlmKG9uU3VmZml4Q2xpY2tDYWxsYmFja0V2ZW50LmlkKXsgICAvL+WQjuWbvuagh+eCueWHu+S6i+S7tlxyXG5cdFx0XHRcdFx0Ly8gICB0aGlzLm9uU3VmZml4Q2xpY2sob25TdWZmaXhDbGlja0NhbGxiYWNrRXZlbnQpO1xyXG5cdFx0XHRcdFx0Ly8gfVxyXG5cdFx0XHRcdFx0Ly8gaWYob25TdWZmaXhDbGlja0V2ZW50LmlkKXsgICAvL+WQjuWbvuagh+eCueWHu+Wbnuiwg1xyXG5cdFx0XHRcdFx0Ly8gICB0aGlzLm9uU3VmZml4Q2xpY2tDYWxsYmFjayhvblN1ZmZpeENsaWNrRXZlbnQpO1xyXG5cdFx0XHRcdFx0Ly8gfVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSxcclxuXHRcdFx0Ly8g5YaF5a655Y+Y5YyW5ZCO5LqL5Lu2XHJcblx0XHRcdGFzeW5jIG9uQ2hhbmdlKGV2ZW50KSB7XHJcblx0XHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRcdGlmIChldmVudC5pZCkge1xyXG5cdFx0XHRcdFx0XHR2YXIgb2JqX2F0dHIgPSB0aGlzLmhlYWRfc3R5bGVkZWYuZm9ybS5tb2RlbDtcclxuXHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2cob2JqX2F0dHIpO1xyXG5cdFx0XHRcdFx0XHR2YXIgaW5wdXRfcGFyYW0gPSBCYXNlNjQuZW5jb2RlKFxyXG5cdFx0XHRcdFx0XHRcdEpTT04uc3RyaW5naWZ5KFxyXG5cdFx0XHRcdFx0XHRcdFx0T2JqZWN0LmtleXMob2JqX2F0dHIpLm1hcCgoYSkgPT4gKHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0YXR0cjogYSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU6IG9ial9hdHRyW2FdIHx8IFwiXCIsXHJcblx0XHRcdFx0XHRcdFx0XHR9KSlcclxuXHRcdFx0XHRcdFx0XHQpXHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdHZhciAkdGhpcyA9IHRoaXM7XHJcblx0XHRcdFx0XHRcdHZhciBkYXRhSW5mbyA9IHtcclxuXHRcdFx0XHRcdFx0XHRlZF90eXBlOiAwLFxyXG5cdFx0XHRcdFx0XHRcdHN0YXJ0X3RyYW5zYWN0aW9uOiB0cnVlLFxyXG5cdFx0XHRcdFx0XHRcdGNsYXNzX2lkOiB0aGlzLiRkYXRhLmhlYWRfc3R5bGVkZWYuZm9ybS5jbHNJZCxcclxuXHRcdFx0XHRcdFx0XHRjbGFzc19uYW1lOiAnJyxcclxuXHRcdFx0XHRcdFx0XHRldmVudF9pZDogZXZlbnQuaWQsXHJcblx0XHRcdFx0XHRcdFx0ZXZlbnRfbmFtZTogJycsXHJcblx0XHRcdFx0XHRcdFx0ZGF0YV9vYmpfaWQ6ICcnLFxyXG5cdFx0XHRcdFx0XHRcdG9ial9hdHRyOiBvYmpfYXR0cixcclxuXHRcdFx0XHRcdFx0XHRwcmpfaWQ6ICcnLFxyXG5cdFx0XHRcdFx0XHRcdHJlZl9jbHNfaWQ6ICcnLFxyXG5cdFx0XHRcdFx0XHRcdHJlbF9vYmpfaWQ6ICcnLFxyXG5cdFx0XHRcdFx0XHRcdHVzZXJfbG9naW46ICcnLFxyXG5cdFx0XHRcdFx0XHRcdGRhdGFfanNvbjogJycsXHJcblx0XHRcdFx0XHRcdFx0Y29tcG9zZV9pbmZvOiAnJyxcclxuXHRcdFx0XHRcdFx0XHRleHRfaW5mbzogJycsXHJcblx0XHRcdFx0XHRcdFx0Z2xvYmFsX2F0dHI6ICcnLFxyXG5cdFx0XHRcdFx0XHRcdGlucHV0X3BhcmFtOiBpbnB1dF9wYXJhbSxcclxuXHRcdFx0XHRcdFx0fTtcclxuXHRcdFx0XHRcdFx0dGhpcy4kc3RvcmUuZGlzcGF0Y2goJ3J1bkN1c3RvbUV2ZW50JywgZGF0YUluZm8pLnRoZW4ocmV0ID0+IHtcclxuXHRcdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhyZXQpO1xyXG5cdFx0XHRcdFx0XHRcdGlmIChyZXQuZXJyX2NvZGUgPT0gMCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0dmFyIHJlc3VsdCA9IHJldC5yZXN1bHQ7XHJcblx0XHRcdFx0XHRcdFx0XHRpZiAocmVzdWx0LnJldCAhPSAwKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHZhciB0aXAgPSByZXN1bHQuZXJyX2luZm8gPyB0eXBlb2YgcmVzdWx0LmVycl9pbmZvID09XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0J3N0cmluZycgP1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJlc3VsdFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC5lcnJfaW5mbyA6IHJlc3VsdC5lcnJfaW5mby5qb2luKCc8YnIvPicpIDogJyc7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChyZXN1bHQucmV0ID09IDgwMSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmICh0aGlzLnBhcmFtLk9ubHlfU2NyaXB0X0Vycm9yKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRsZXQgcG9zID0gdGlwLmluZGV4T2YoXCLvvJpcIik7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAocG9zID4gLTEpIHRpcCA9IHRpcC5zdWJzdHJpbmcocG9zICsgMSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGl0bGU6IHRoaXMudHJhbnNsYXRlU3lzKFwidGlwXCIpLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29udGVudDogdGlwLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0c2hvd0NhbmNlbDogZmFsc2UsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb25maXJtVGV4dDogdGhpcy50cmFuc2xhdGVTeXMoXCJjYW5jZWxcIilcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHVuaS5zaG93TW9kYWwoe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRpdGxlOiB0aGlzLnRyYW5zbGF0ZVN5cyhcInRpcFwiKSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb250ZW50OiB0aXAgKyAnLCcgKyB0aGlzLnRyYW5zbGF0ZVN5cygndGlwJykgK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0JzonICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlc3VsdFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0LnJldCxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRzaG93Q2FuY2VsOiBmYWxzZSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb25maXJtVGV4dDogdGhpcy50cmFuc2xhdGVTeXMoXCJjYW5jZWxcIilcclxuXHRcdFx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHZhciB0aXAgPSByZXN1bHQuaW5mbyA/IHR5cGVvZiByZXN1bHQuaW5mbyA9PSAnc3RyaW5nJyA/IHJlc3VsdFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC5pbmZvIDpcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXN1bHQuaW5mby5qb2luKCc8YnIvPicpIDogJyc7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmICh0aXApIHVuaS5zaG93TW9kYWwoe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRpdGxlOiB0aGlzLnRyYW5zbGF0ZVN5cyhcInRpcFwiKSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb250ZW50OiB0aXAsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0c2hvd0NhbmNlbDogZmFsc2UsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uZmlybVRleHQ6IHRoaXMudHJhbnNsYXRlU3lzKFwiY2FuY2VsXCIpXHJcblx0XHRcdFx0XHRcdFx0XHRcdH0pO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKHJlc3VsdC5yZXN1bHRfdHlwZSA9PSAwICYmIHJlc3VsdC5hY3Rpb24pIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXN1bHQuYWN0aW9uLmZvckVhY2goaXRlbSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoaXRlbS5hY3Rpb25fdHlwZSA9PSBcInNldF9kbGdfYXR0clwiKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIHZhbHVlID0ge1wiYXR0clwiOlwieHh4XCIsIFwidmFsdWVcIjpcInh4eFwifVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgZGF0YSA9IGl0ZW0udmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLmhlYWRfc3R5bGVkZWYuZm9ybS5pdGVtc1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC5mb3JFYWNoKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXN5bmMgKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlbGUsIGluZGV4KSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRhdGEuZm9yRWFjaChhc3luYyAoZWxlMixcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpbmRleCkgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChlbGVcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC5maWVsZElkID09XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlbGUyXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQuYXR0clxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZWxlLnZhbHVlID1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZWxlMlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQudmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIHRoaXMuZGV0YWlsMlN0eWxlRGVmTGlzdD1bXTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAocmVzdWx0LmluZm8pIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aXRsZTogdGhpcy50cmFuc2xhdGVTeXMoXCJ0aXBcIiksXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnRlbnQ6IHJlc3VsdC5pbmZvLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzaG93Q2FuY2VsOiBmYWxzZSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uZmlybVRleHQ6IHRoaXMudHJhbnNsYXRlU3lzKFwiY2FuY2VsXCIpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR0aXRsZTogdGhpcy50cmFuc2xhdGVTeXMoXCJlcnJvclwiKSArIFwiOFwiLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRjb250ZW50OiByZXQuZXJyX21zZyxcclxuXHRcdFx0XHRcdFx0XHRcdFx0c2hvd0NhbmNlbDogZmFsc2UsXHJcblx0XHRcdFx0XHRcdFx0XHRcdGNvbmZpcm1UZXh0OiB0aGlzLnRyYW5zbGF0ZVN5cyhcImNhbmNlbFwiKVxyXG5cdFx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9KS5jYXRjaChleCA9PiB7XHJcblx0XHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coZXgpO1xyXG5cdFx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe1xyXG5cdFx0XHRcdFx0XHRcdFx0dGl0bGU6IHRoaXMudHJhbnNsYXRlU3lzKFwiZXJyb3JcIikgKyBcIjguMVwiLFxyXG5cdFx0XHRcdFx0XHRcdFx0Y29udGVudDogZXguZXJyTXNnLFxyXG5cdFx0XHRcdFx0XHRcdFx0c2hvd0NhbmNlbDogZmFsc2UsXHJcblx0XHRcdFx0XHRcdFx0XHRjb25maXJtVGV4dDogdGhpcy50cmFuc2xhdGVTeXMoXCJjYW5jZWxcIilcclxuXHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSBjYXRjaCAoZXgpIHtcclxuXHRcdFx0XHRcdHZhciB0aXAgPSB0eXBlb2YgZXggPT0gXCJzdHJpbmdcIiA/IGV4IDogZXgubWVzc2FnZTtcclxuXHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe1xyXG5cdFx0XHRcdFx0XHR0aXRsZTogdGhpcy50cmFuc2xhdGVTeXMoXCJlcnJvclwiKSArIFwiOC4yXCIsXHJcblx0XHRcdFx0XHRcdGNvbnRlbnQ6IHRoaXMudHJhbnNsYXRlKCdleGVjdXRlX2FmdGVyX2NoYW5nZV9ldmVudF9mYWlsZWQnKSArIHRoaXNcclxuXHRcdFx0XHRcdFx0XHQudHJhbnNsYXRlU3lzKFxyXG5cdFx0XHRcdFx0XHRcdFx0XCJjb21tYVwiKSArXHJcblx0XHRcdFx0XHRcdFx0dGhpcy50cmFuc2xhdGUoJ3JlYXNvbicpICsgdGhpcy50cmFuc2xhdGVTeXMoXCJjb2xvblwiKSArIHRpcCxcclxuXHRcdFx0XHRcdFx0c2hvd0NhbmNlbDogZmFsc2UsXHJcblx0XHRcdFx0XHRcdGNvbmZpcm1UZXh0OiB0aGlzLnRyYW5zbGF0ZVN5cyhcImNhbmNlbFwiKVxyXG5cdFx0XHRcdFx0fSk7XHJcblxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSxcclxuXHRcdFx0Ly/ngrnkuK3ooajljZVcclxuXHRcdFx0b25QYW5lbENsaWNrKHZhbHVlKSB7IC8v54K55Ye76Z2i5p2/6auY5Lqu5pi+56S6XHJcblx0XHRcdFx0Ly8gY29uc29sZS5sb2codmFsdWUpO1xyXG5cdFx0XHRcdHRoaXMuYWN0aXZlbGlzdC5mb3JFYWNoKGVsZSA9PiB7XHJcblx0XHRcdFx0XHRlbGUuYWN0aXZlID0gZmFsc2U7XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdFx0dGhpcy5hY3RpdmVsaXN0W3ZhbHVlXS5hY3RpdmUgPSB0cnVlO1xyXG5cdFx0XHR9LFxyXG5cclxuXHRcdFx0Ly/kuovku7blpITnkIZcclxuXHRcdFx0YXN5bmMgcnVuQ3VzdG9tRXZlbnQoZGF0YUluZm8pIHtcclxuXHRcdFx0XHR0cnkge1xyXG5cdFx0XHRcdFx0dmFyICR0aGlzID0gdGhpcztcclxuXHRcdFx0XHRcdHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdydW5DdXN0b21FdmVudCcsIGRhdGFJbmZvKS50aGVuKHJldCA9PiB7XHJcblx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKHJldCk7XHJcblx0XHRcdFx0XHRcdGlmIChyZXQuZXJyX2NvZGUgPT0gMCkge1xyXG5cdFx0XHRcdFx0XHRcdHZhciByZXN1bHQgPSByZXQucmVzdWx0O1xyXG5cdFx0XHRcdFx0XHRcdGlmIChyZXN1bHQucmV0ICE9IDApIHtcclxuXHRcdFx0XHRcdFx0XHRcdHZhciB0aXAgPSByZXN1bHQuZXJyX2luZm8gPyB0eXBlb2YgcmVzdWx0LmVycl9pbmZvID09XHJcblx0XHRcdFx0XHRcdFx0XHRcdCdzdHJpbmcnID9cclxuXHRcdFx0XHRcdFx0XHRcdFx0cmVzdWx0XHJcblx0XHRcdFx0XHRcdFx0XHRcdC5lcnJfaW5mbyA6IHJlc3VsdC5lcnJfaW5mby5qb2luKCc8YnIvPicpIDogJyc7XHJcblx0XHRcdFx0XHRcdFx0XHRpZiAocmVzdWx0LnJldCA9PSA4MDEpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKHRoaXMucGFyYW0uT25seV9TY3JpcHRfRXJyb3IpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRsZXQgcG9zID0gdGlwLmluZGV4T2YoXCLvvJpcIik7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKHBvcyA+IC0xKSB0aXAgPSB0aXAuc3Vic3RyaW5nKHBvcyArIDEpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRpdGxlOiB0aGlzLnRyYW5zbGF0ZVN5cyhcInRpcFwiKSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb250ZW50OiB0aXAsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0c2hvd0NhbmNlbDogZmFsc2UsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uZmlybVRleHQ6IHRoaXMudHJhbnNsYXRlU3lzKFwiY2FuY2VsXCIpXHJcblx0XHRcdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHVuaS5zaG93TW9kYWwoe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR0aXRsZTogdGhpcy50cmFuc2xhdGVTeXMoXCJ0aXBcIiksXHJcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnRlbnQ6IHRpcCArICcsJyArIHRoaXMudHJhbnNsYXRlU3lzKCd0aXAnKSArXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0JzonICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXN1bHQucmV0LFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRzaG93Q2FuY2VsOiBmYWxzZSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0Y29uZmlybVRleHQ6IHRoaXMudHJhbnNsYXRlU3lzKFwiY2FuY2VsXCIpXHJcblx0XHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0dmFyIHRpcCA9IHJlc3VsdC5pbmZvID8gdHlwZW9mIHJlc3VsdC5pbmZvID09ICdzdHJpbmcnID8gcmVzdWx0XHJcblx0XHRcdFx0XHRcdFx0XHRcdC5pbmZvIDogcmVzdWx0XHJcblx0XHRcdFx0XHRcdFx0XHRcdC5pbmZvLmpvaW4oJzxici8+JykgOiAnJztcclxuXHRcdFx0XHRcdFx0XHRcdGlmICh0aXApIHVuaS5zaG93TW9kYWwoe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR0aXRsZTogdGhpcy50cmFuc2xhdGVTeXMoXCJ0aXBcIiksXHJcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnRlbnQ6IHRpcCxcclxuXHRcdFx0XHRcdFx0XHRcdFx0c2hvd0NhbmNlbDogZmFsc2UsXHJcblx0XHRcdFx0XHRcdFx0XHRcdGNvbmZpcm1UZXh0OiB0aGlzLnRyYW5zbGF0ZVN5cyhcImNhbmNlbFwiKVxyXG5cdFx0XHRcdFx0XHRcdFx0fSk7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKHJlc3VsdC5yZXN1bHRfdHlwZSA9PSAwICYmIHJlc3VsdC5hY3Rpb24pIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0cmVzdWx0LmFjdGlvbi5mb3JFYWNoKGl0ZW0gPT4ge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChpdGVtLmFjdGlvbl90eXBlID09XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcImdvYmFja190b19wcmVfcGFnZVwiKSB7IC8v6L+U5Zue5LiK5LiA6aG1XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgdmFsdWUgPSBpdGVtLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dW5pLm5hdmlnYXRlQmFjayh7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRlbHRhOiAxLCAvL+i/lOWbnuWxguaVsO+8jDLliJnkuIrkuIrpobVcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoaXRlbS5hY3Rpb25fdHlwZSA9PVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XCJoaWRkZW5fYnV0dG9uXCIpIHsgLy/pmpDol4/mjInpkq5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciB2YWx1ZSA9IGl0ZW0udmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZS5mb3JFYWNoKGJ0biA9PiB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBpbmRleCA9ICR0aGlzLnBhcmFtXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Lkxpc3RQYWdlXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0LlBhZ2VfQnV0dG9uXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0LmZpbmRJbmRleChidXR0b24gPT4gYnV0dG9uXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQuU2hvd05hbWUgPT1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGJ0bilcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGluZGV4ID4gLTEpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMucGFyYW0uTGlzdFBhZ2VcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQuUGFnZV9CdXR0b24uc3BsaWNlKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aW5kZXgsIDEpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9KVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gfSBlbHNlIGlmKGl0ZW0uYWN0aW9uX3R5cGUgPT0gXCJyZWZyZXNoX2N1cl9yb3dcIil7IC8vXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBcdHZhciB2YWx1ZSA9IGl0ZW0udmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmIChpdGVtLmFjdGlvbl90eXBlID09XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcInNldF9wYW5lbF9odG1sXCIpIHsgLy/mmL7npLpIdG1s6aG16Z2iXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyB2YXIgdmFsdWUgPSBpdGVtLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMuTGlzdEh0bWxfUGFuZWwgPSBpdGVtLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gJHRoaXMuZGV0YWlsMVN0eWxlRGVmTGlzdC5mb3JFYWNoKChlbGUsaW5kZXgpPT57XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBcdGVsZS5MaXN0SHRtbF9QYW5lbCA9IGl0ZW0udmFsdWVbaW5kZXhdO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gfSk7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGl0bGU6IHRoaXMudHJhbnNsYXRlU3lzKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFwidGlwXCIpLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb250ZW50OiB0aGlzLnRyYW5zbGF0ZVN5cyhcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFwicXVvdGF0aW9uX21hcmtfbGVmdFwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KSArXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aXRlbVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC5hY3Rpb25fdHlwZSArIHRoaXNcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQudHJhbnNsYXRlU3lzKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XCJxdW90YXRpb25fbWFya19yaWdodFwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KSArXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpc1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC50cmFuc2xhdGUoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcInRpcF9hY3Rpb25fdW5wcm9jZXNzZWRcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCksXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHNob3dDYW5jZWw6IGZhbHNlLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb25maXJtVGV4dDogdGhpcy50cmFuc2xhdGVTeXMoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XCJjYW5jZWxcIilcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyB0aGlzLmRldGFpbDJTdHlsZURlZkxpc3Q9W107XHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChyZXN1bHQuaW5mbykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGl0bGU6IHRoaXMudHJhbnNsYXRlU3lzKFwidGlwXCIpLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29udGVudDogcmVzdWx0LmluZm8sXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzaG93Q2FuY2VsOiBmYWxzZSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbmZpcm1UZXh0OiB0aGlzLnRyYW5zbGF0ZVN5cyhcImNhbmNlbFwiKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHtcclxuXHRcdFx0XHRcdFx0XHRcdHRpdGxlOiB0aGlzLnRyYW5zbGF0ZVN5cyhcImVycm9yXCIpICsgXCI5XCIsXHJcblx0XHRcdFx0XHRcdFx0XHRjb250ZW50OiByZXQuZXJyX21zZyxcclxuXHRcdFx0XHRcdFx0XHRcdHNob3dDYW5jZWw6IGZhbHNlLFxyXG5cdFx0XHRcdFx0XHRcdFx0Y29uZmlybVRleHQ6IHRoaXMudHJhbnNsYXRlU3lzKFwiY2FuY2VsXCIpXHJcblx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0pLmNhdGNoKGV4ID0+IHtcclxuXHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coZXgpO1xyXG5cdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHtcclxuXHRcdFx0XHRcdFx0XHR0aXRsZTogdGhpcy50cmFuc2xhdGVTeXMoXCJlcnJvclwiKSArIFwiOS4xXCIsXHJcblx0XHRcdFx0XHRcdFx0Y29udGVudDogZXguZXJyTXNnLFxyXG5cdFx0XHRcdFx0XHRcdHNob3dDYW5jZWw6IGZhbHNlLFxyXG5cdFx0XHRcdFx0XHRcdGNvbmZpcm1UZXh0OiB0aGlzLnRyYW5zbGF0ZVN5cyhcImNhbmNlbFwiKVxyXG5cdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdH0gY2F0Y2ggKGV4KSB7XHJcblx0XHRcdFx0XHR2YXIgdGlwID0gdHlwZW9mIGV4ID09IFwic3RyaW5nXCIgPyBleCA6IGV4Lm1lc3NhZ2U7XHJcblx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHtcclxuXHRcdFx0XHRcdFx0dGl0bGU6IHRoaXMudHJhbnNsYXRlU3lzKFwiZXJyb3JcIikgKyBcIjkuMlwiLFxyXG5cdFx0XHRcdFx0XHRjb250ZW50OiB0aGlzLnRyYW5zbGF0ZSgnZXhlY3V0ZV9ldmVudF9mYWlsZWQnKSArIHRoaXMudHJhbnNsYXRlU3lzKFxyXG5cdFx0XHRcdFx0XHRcdFx0XCJjb21tYVwiKSArXHJcblx0XHRcdFx0XHRcdFx0dGhpcy50cmFuc2xhdGUoJ3JlYXNvbicpICsgdGhpcy50cmFuc2xhdGVTeXMoXCJjb2xvblwiKSArIHRpcCxcclxuXHRcdFx0XHRcdFx0c2hvd0NhbmNlbDogZmFsc2UsXHJcblx0XHRcdFx0XHRcdGNvbmZpcm1UZXh0OiB0aGlzLnRyYW5zbGF0ZVN5cyhcImNhbmNlbFwiKVxyXG5cdFx0XHRcdFx0fSk7XHJcblxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSxcclxuXHJcblx0XHRcdGNhbmNlbChlKSB7IC8v5Y+W5raIXHJcblx0XHRcdFx0Ly8gdmFyIGV2ZW50Q2hhbm5lbCA9IHRoaXMuJHNjb3BlLmV2ZW50Q2hhbm5lbDtcclxuXHRcdFx0XHQvLyAvLyBjb25zdCBldmVudENoYW5uZWwgPSB0aGlzLmdldE9wZW5lckV2ZW50Q2hhbm5lbCgpO1xyXG5cdFx0XHRcdC8vIGV2ZW50Q2hhbm5lbC5lbWl0KCd2aWV3XzMyMDEnLFwiXCIpO1xyXG5cdFx0XHRcdHVuaS5uYXZpZ2F0ZUJhY2soe1xyXG5cdFx0XHRcdFx0ZGVsdGE6IDEsIC8v6L+U5Zue5bGC5pWw77yMMuWImeS4iuS4iumhtVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHQvKipcclxuXHRcdFx0ICog5Y+q5pSv5oyBW1wiY29sdW1uMT0nQScgb3IgY29sdW1uMj0nQidcIiwgXCJjb2x1bW4zPSdDJyBhbmQgY29sdW1uND0nRCdcIiwgXCJjb2x1bW41PSdFJ1wiXei/meenjeagvOW8j1xyXG5cdFx0XHQgKiB7XHJcblx0XHRcdCAqICAgICBcIm1vZGVsXCI6IDAgLyAxLFxyXG5cdFx0XHQgKiAgICAgXCJjb25kaXRpb25cIjpcclxuXHRcdFx0ICogICAgIFtcclxuXHRcdFx0ICogICAgICAgICBbXHJcblx0XHRcdCAqICAgICAgICAgICAgIHsgfSxcclxuXHRcdFx0ICogICAgICAgICAgICAgeyB9LFxyXG5cdFx0XHQgKiAgICAgICAgICAgICB7IH1cclxuXHRcdFx0ICogICAgICAgICBdLFxyXG5cdFx0XHQgKiAgICAgICAgIFtcclxuXHRcdFx0ICogICAgICAgICAgICAgeyB9XHJcblx0XHRcdCAqICAgICAgICAgXSxcclxuXHRcdFx0ICogICAgICAgICBbXHJcblx0XHRcdCAqICAgICAgICAgICAgIHsgfVxyXG5cdFx0XHQgKiAgICAgICAgIF1cclxuXHRcdFx0ICogICAgIF1cclxuXHRcdFx0ICogfVxyXG5cdFx0XHQgKi9cclxuXHJcblx0XHRcdHRvV2hlcmVCYXNlNjRTdHJpbmcobGlzdCkge1xyXG5cdFx0XHRcdGlmICh0eXBlb2YgbGlzdCA9PSAnc3RyaW5nJykgbGlzdCA9IFtsaXN0XVxyXG5cdFx0XHRcdHZhciBzcWwgPSBbXVxyXG5cdFx0XHRcdHZhciBzZXBzID0gWycgbm90IGluJywgJyBpbicsICc8PicsICchPScsICc8PScsICc+PScsICc8JywgJz0nLCAnPicsICcgbGlrZSddXHJcblx0XHRcdFx0bGlzdC5mb3JFYWNoKGxzID0+IHtcclxuXHRcdFx0XHRcdHZhciB3aGVyZSA9IGxzLnRyaW0oKVxyXG5cdFx0XHRcdFx0aWYgKHdoZXJlLnN0YXJ0c1dpdGgoJygnKSAmJiB3aGVyZS5lbmRzV2l0aCgnKScpKSB3aGVyZSA9IHdoZXJlLnJlcGxhY2UoXHJcblx0XHRcdFx0XHRcdC9eXFwoLyxcclxuXHRcdFx0XHRcdFx0JycpLnJlcGxhY2UoXHJcblx0XHRcdFx0XHRcdC9cXCkkLywgJycpXHJcblx0XHRcdFx0XHRpZiAod2hlcmUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnIGFuZCAnKSkge1xyXG5cdFx0XHRcdFx0XHQvLyDkuoznuqdhbmTmlL7lnKjnrKzkuIDnuqfmlbDnu4TkuK1cclxuXHRcdFx0XHRcdFx0d2hlcmUuc3BsaXQoLyBhbmQgL2kpLmZvckVhY2gobGkgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdHZhciBsID0gbGkudHJpbSgpXHJcblx0XHRcdFx0XHRcdFx0aWYgKGwuc3RhcnRzV2l0aCgnKCcpICYmIGwuZW5kc1dpdGgoJyknKSkgbCA9IGwucmVwbGFjZShcclxuXHRcdFx0XHRcdFx0XHRcdC9eXFwoLyxcclxuXHRcdFx0XHRcdFx0XHRcdCcnKS5yZXBsYWNlKFxyXG5cdFx0XHRcdFx0XHRcdFx0L1xcKSQvLCAnJylcclxuXHRcdFx0XHRcdFx0XHR2YXIgc2VwID0gJydcclxuXHRcdFx0XHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHNlcHMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRcdFx0XHRcdGlmIChsLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2Vwc1tpXSkpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0c2VwID0gc2Vwc1tpXVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRicmVha1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRpZiAoc2VwKSB7XHJcblx0XHRcdFx0XHRcdFx0XHR2YXIgdmFsdWVzID0gbC5zcGxpdChuZXcgUmVnRXhwKHNlcCwgJ2knKSlcclxuXHRcdFx0XHRcdFx0XHRcdHZhciBmaWVsZCA9IHZhbHVlc1swXT8udHJpbSgpLnJlcGxhY2UoL15cXFsvLCAnJylcclxuXHRcdFx0XHRcdFx0XHRcdFx0LnJlcGxhY2UoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0L1xcXSQvLCAnJylcclxuXHRcdFx0XHRcdFx0XHRcdHZhciB2YWx1ZSA9ICcnXHJcblx0XHRcdFx0XHRcdFx0XHR2YXIgb3AgPSBzZXAudHJpbSgpXHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKFsnIGluJywgJyBub3QgaW4nXS5pbmNsdWRlcyhzZXApICYmIHZhbHVlc1sxXVxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ/LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0J3NlbGVjdCAnKSAmJiB2YWx1ZXNbMV0/LnRvTG93ZXJDYXNlKClcclxuXHRcdFx0XHRcdFx0XHRcdFx0LmluY2x1ZGVzKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCcgZnJvbSAnKSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZSA9IGwucmVwbGFjZShmaWVsZCwgJycpLnJlcGxhY2UoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0L15cXHMqKGlufG5vdCBpbilcXHMqL2ksICcnKS50cmltKClcclxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKHZhbHVlLnN0YXJ0c1dpdGgoJygnKSAmJiB2YWx1ZS5lbmRzV2l0aCgnKScpKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlID0gdmFsdWVcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQucmVwbGFjZSgvXlxcKC8sICcnKS5yZXBsYWNlKC9cXCkkLywgJycpLnRyaW0oKVxyXG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0dmFsdWUgPSB2YWx1ZXNbMV0/LnRyaW0oKS5yZXBsYWNlKC9eXFwnLywgJycpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0LnJlcGxhY2UoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvXFwnJC8sICcnKVxyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKFsnaW4nLCAnbm90IGluJ10uaW5jbHVkZXMob3ApKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsdWUgPSB2YWx1ZS5yZXBsYWNlKC9eXFwoLywgJycpLnJlcGxhY2UoL1xcKSQvLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0JycpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsdWUgPSB2YWx1ZS5zcGxpdCgnLCcpLm1hcCh2ID0+IHYudHJpbSgpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQucmVwbGFjZShcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0L15cXCcvLCAnJylcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC5yZXBsYWNlKC9cXCckLywgJycpKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRzcWwucHVzaChbe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRmaWVsZCxcclxuXHRcdFx0XHRcdFx0XHRcdFx0dmFsdWUsXHJcblx0XHRcdFx0XHRcdFx0XHRcdG9wXHJcblx0XHRcdFx0XHRcdFx0XHR9XSlcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH0pXHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKHdoZXJlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJyBvciAnKSkge1xyXG5cdFx0XHRcdFx0XHQvLyDkuoznuqdvcuaUvuWcqOesrOS6jOe6p+WQjOS4gOe7hOaVsOe7hOS4rVxyXG5cdFx0XHRcdFx0XHR2YXIgcyA9IFtdXHJcblx0XHRcdFx0XHRcdHdoZXJlLnNwbGl0KC8gb3IgL2kpLmZvckVhY2gobGkgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdHZhciBsID0gbGkudHJpbSgpXHJcblx0XHRcdFx0XHRcdFx0aWYgKGwuc3RhcnRzV2l0aCgnKCcpICYmIGwuZW5kc1dpdGgoJyknKSkgbCA9IGwucmVwbGFjZShcclxuXHRcdFx0XHRcdFx0XHRcdC9eXFwoLyxcclxuXHRcdFx0XHRcdFx0XHRcdCcnKS5yZXBsYWNlKFxyXG5cdFx0XHRcdFx0XHRcdFx0L1xcKSQvLCAnJylcclxuXHRcdFx0XHRcdFx0XHR2YXIgc2VwID0gJydcclxuXHRcdFx0XHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHNlcHMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRcdFx0XHRcdGlmIChsLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2Vwc1tpXSkpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0c2VwID0gc2Vwc1tpXVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRicmVha1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRpZiAoc2VwKSB7XHJcblx0XHRcdFx0XHRcdFx0XHR2YXIgdmFsdWVzID0gbC5zcGxpdChuZXcgUmVnRXhwKHNlcCwgJ2knKSlcclxuXHRcdFx0XHRcdFx0XHRcdHZhciBmaWVsZCA9IHZhbHVlc1swXT8udHJpbSgpLnJlcGxhY2UoL15cXFsvLCAnJylcclxuXHRcdFx0XHRcdFx0XHRcdFx0LnJlcGxhY2UoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0L1xcXSQvLCAnJylcclxuXHRcdFx0XHRcdFx0XHRcdHZhciB2YWx1ZSA9ICcnXHJcblx0XHRcdFx0XHRcdFx0XHR2YXIgb3AgPSBzZXAudHJpbSgpXHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKFsnIGluJywgJyBub3QgaW4nXS5pbmNsdWRlcyhzZXApICYmIHZhbHVlc1sxXVxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ/LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0J3NlbGVjdCAnKSAmJiB2YWx1ZXNbMV0/LnRvTG93ZXJDYXNlKClcclxuXHRcdFx0XHRcdFx0XHRcdFx0LmluY2x1ZGVzKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCcgZnJvbSAnKSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZSA9IGwucmVwbGFjZShmaWVsZCwgJycpLnJlcGxhY2UoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0L15cXHMqKGlufG5vdCBpbilcXHMqL2ksICcnKS50cmltKClcclxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKHZhbHVlLnN0YXJ0c1dpdGgoJygnKSAmJiB2YWx1ZS5lbmRzV2l0aCgnKScpKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlID0gdmFsdWVcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQucmVwbGFjZSgvXlxcKC8sICcnKS5yZXBsYWNlKC9cXCkkLywgJycpLnRyaW0oKVxyXG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0dmFsdWUgPSB2YWx1ZXNbMV0/LnRyaW0oKS5yZXBsYWNlKC9eXFwnLywgJycpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0LnJlcGxhY2UoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvXFwnJC8sICcnKVxyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKFsnaW4nLCAnbm90IGluJ10uaW5jbHVkZXMob3ApKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsdWUgPSB2YWx1ZS5yZXBsYWNlKC9eXFwoLywgJycpLnJlcGxhY2UoL1xcKSQvLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0JycpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsdWUgPSB2YWx1ZS5zcGxpdCgnLCcpLm1hcCh2ID0+IHYudHJpbSgpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQucmVwbGFjZShcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0L15cXCcvLCAnJylcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC5yZXBsYWNlKC9cXCckLywgJycpKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRzcWwucHVzaChbe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRmaWVsZCxcclxuXHRcdFx0XHRcdFx0XHRcdFx0dmFsdWUsXHJcblx0XHRcdFx0XHRcdFx0XHRcdG9wXHJcblx0XHRcdFx0XHRcdFx0XHR9XSlcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH0pXHJcblx0XHRcdFx0XHRcdHNxbC5wdXNoKHMpXHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHR2YXIgbGkgPSB3aGVyZVxyXG5cdFx0XHRcdFx0XHQvLyDljZXkuIDmn6Xor6LmnaHku7bnm7TmjqXmlL7lnKjnrKzkuIDnuqfmlbDnu4TkuK1cclxuXHRcdFx0XHRcdFx0dmFyIGwgPSBsaS50cmltKClcclxuXHRcdFx0XHRcdFx0aWYgKGwuc3RhcnRzV2l0aCgnKCcpICYmIGwuZW5kc1dpdGgoJyknKSkgbCA9IGwucmVwbGFjZSgvXlxcKC8sICcnKVxyXG5cdFx0XHRcdFx0XHRcdC5yZXBsYWNlKFxyXG5cdFx0XHRcdFx0XHRcdFx0L1xcKSQvLCAnJylcclxuXHRcdFx0XHRcdFx0dmFyIHNlcCA9ICcnXHJcblx0XHRcdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgc2Vwcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdFx0XHRcdGlmIChsLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2Vwc1tpXSkpIHtcclxuXHRcdFx0XHRcdFx0XHRcdHNlcCA9IHNlcHNbaV1cclxuXHRcdFx0XHRcdFx0XHRcdGJyZWFrXHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdGlmIChzZXApIHtcclxuXHRcdFx0XHRcdFx0XHR2YXIgdmFsdWVzID0gbC5zcGxpdChuZXcgUmVnRXhwKHNlcCwgJ2knKSlcclxuXHRcdFx0XHRcdFx0XHR2YXIgZmllbGQgPSB2YWx1ZXNbMF0/LnRyaW0oKS5yZXBsYWNlKC9eXFxbLywgJycpLnJlcGxhY2UoL1xcXSQvLCAnJylcclxuXHRcdFx0XHRcdFx0XHR2YXIgdmFsdWUgPSAnJ1xyXG5cdFx0XHRcdFx0XHRcdHZhciBvcCA9IHNlcC50cmltKClcclxuXHJcblx0XHRcdFx0XHRcdFx0aWYgKFsnIGluJywgJyBub3QgaW4nXS5pbmNsdWRlcyhzZXApICYmIHZhbHVlc1sxXT8udG9Mb3dlckNhc2UoKVxyXG5cdFx0XHRcdFx0XHRcdFx0LmluY2x1ZGVzKCdzZWxlY3QgJykgJiZcclxuXHRcdFx0XHRcdFx0XHRcdHZhbHVlc1sxXT8udG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnIGZyb20gJykpIHtcclxuXHRcdFx0XHRcdFx0XHRcdHZhbHVlID0gbC5yZXBsYWNlKGZpZWxkLCAnJykucmVwbGFjZSgvXlxccyooaW58bm90IGluKVxccyovaSwgJycpXHJcblx0XHRcdFx0XHRcdFx0XHRcdC50cmltKClcclxuXHRcdFx0XHRcdFx0XHRcdGlmICh2YWx1ZS5zdGFydHNXaXRoKCcoJykgJiYgdmFsdWUuZW5kc1dpdGgoJyknKSkgdmFsdWUgPSB2YWx1ZVxyXG5cdFx0XHRcdFx0XHRcdFx0XHQucmVwbGFjZSgvXlxcKC8sICcnKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHQucmVwbGFjZSgvXFwpJC8sICcnKS50cmltKClcclxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0dmFsdWUgPSB2YWx1ZXNbMV0/LnRyaW0oKS5yZXBsYWNlKC9eXFwnLywgJycpLnJlcGxhY2UoL1xcJyQvLCAnJylcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRpZiAoWydpbicsICdub3QgaW4nXS5pbmNsdWRlcyhvcCkpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0dmFsdWUgPSB2YWx1ZS5yZXBsYWNlKC9eXFwoLywgJycpLnJlcGxhY2UoL1xcKSQvLCAnJylcclxuXHRcdFx0XHRcdFx0XHRcdFx0dmFsdWUgPSB2YWx1ZS5zcGxpdCgnLCcpLm1hcCh2ID0+IHYudHJpbSgpLnJlcGxhY2UoL15cXCcvLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0JycpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0LnJlcGxhY2UoL1xcJyQvLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0JycpKVxyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRzcWwucHVzaChbe1xyXG5cdFx0XHRcdFx0XHRcdFx0ZmllbGQsXHJcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZSxcclxuXHRcdFx0XHRcdFx0XHRcdG9wXHJcblx0XHRcdFx0XHRcdFx0fV0pXHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KVxyXG5cclxuXHRcdFx0XHRpZiAoc3FsLmxlbmd0aCA+IDApXHJcblx0XHRcdFx0XHRyZXR1cm4gQmFzZTY0LmVuY29kZShKU09OLnN0cmluZ2lmeSh7XHJcblx0XHRcdFx0XHRcdG1vZGVsOiAxLFxyXG5cdFx0XHRcdFx0XHRjb25kaXRpb246IHNxbFxyXG5cdFx0XHRcdFx0fSkpXHJcblx0XHRcdFx0ZWxzZVxyXG5cdFx0XHRcdFx0cmV0dXJuICcnXHJcblx0XHRcdH0sXHJcblx0XHRcdHRyYW5zbGF0ZSh0KSB7XHJcblx0XHRcdFx0aWYgKHR5cGVvZiB0aGlzLiR0ID09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRoaXMuJHQoYHBhZ2UuJHt0fWApXHJcblx0XHRcdFx0ZWxzZSByZXR1cm4gdDtcclxuXHRcdFx0fSxcclxuXHRcdFx0dHJhbnNsYXRlU3lzKHQpIHtcclxuXHRcdFx0XHRpZiAodHlwZW9mIHRoaXMuJHQgPT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdGhpcy4kdChgc3lzLiR7dH1gKVxyXG5cdFx0XHRcdGVsc2UgcmV0dXJuIHQ7XHJcblx0XHRcdH0sXHJcblxyXG5cdFx0fSxcclxuXHR9O1xyXG48L3NjcmlwdD5cclxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XHJcblx0LnVuaS1wYWdlLW1vZGFsLTMyMDAge1xyXG5cdFx0LnYtaGVhZFN0eWxlOmZpcnN0LWNoaWxkIHtcclxuXHRcdFx0bWFyZ2luLXRvcDogMTVycHg7XHJcblx0XHR9XHJcblxyXG5cdFx0LnYtaGVhZFN0eWxlIC50eHRfdGl0bGUge1xyXG5cdFx0XHRmb250LXNpemU6IDM0cnB4O1xyXG5cdFx0XHR0ZXh0LWFsaWduOiByaWdodDtcclxuXHRcdFx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG5cdFx0XHR2ZXJ0aWNhbC1hbGlnbjogMjRycHg7XHJcblx0XHR9XHJcblxyXG5cdFx0LnYtaGVhZFN0eWxlIGlucHV0IHtcclxuXHRcdFx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG5cdFx0XHQvKiBib3JkZXI6IDFweCBzb2xpZCAjZDVkNWQ1OyAqL1xyXG5cdFx0XHQvKiB3aWR0aDogNjUlOyAqL1xyXG5cdFx0XHR3aWR0aDogODUlO1xyXG5cdFx0XHRoZWlnaHQ6IDUycnB4O1xyXG5cdFx0XHRsaW5lLWhlaWdodDogMzRycHg7XHJcblx0XHRcdGJhY2tncm91bmQ6ICNGRkY7XHJcblx0XHRcdGJvcmRlci1yYWRpdXM6IDAgIWltcG9ydGFudDtcclxuXHRcdFx0Y29sb3I6ICMyZDhjZjA7XHJcblx0XHRcdHBhZGRpbmc6IDEwcnB4IDhycHggMTJycHg7XHJcblx0XHRcdGZvbnQtc2l6ZTogMzRycHg7XHJcblx0XHRcdGZvbnQtZmFtaWx5OiBpbmhlcml0O1xyXG5cdFx0XHRib3gtc2hhZG93OiBub25lICFpbXBvcnRhbnQ7XHJcblx0XHRcdHRyYW5zaXRpb24tZHVyYXRpb246IDAuMXM7XHJcblx0XHRcdG1hcmdpbi10b3A6IDRycHg7XHJcblx0XHR9XHJcblxyXG5cdFx0LnYtaGVhZFN0eWxlIGlucHV0Ojotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyIHtcclxuXHRcdFx0Zm9udC1zaXplOiAxMnJweDtcclxuXHRcdH1cclxuXHJcblx0XHQuaW5wdXQtd3JhcHBlciB7XHJcblx0XHRcdGJvcmRlcjogMXB4IHNvbGlkICNkNWQ1ZDU7XHJcblx0XHRcdGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuXHRcdFx0d2lkdGg6IDY1JTtcclxuXHRcdFx0bGluZS1oZWlnaHQ6IDIycnB4O1xyXG5cdFx0fVxyXG5cclxuXHRcdFtudnVlXSB1bmktdmlldyB7XHJcblx0XHRcdHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuXHRcdFx0Ym9yZGVyOiAwIHNvbGlkICMwMDA7XHJcblx0XHRcdGJveC1zaXppbmc6IGJvcmRlci1ib3g7XHJcblx0XHR9XHJcblxyXG5cdFx0LnVuaS1pbnB1dCB7XHJcblx0XHRcdC8qIGJvcmRlcjogbm9uZTsgKi9cclxuXHRcdH1cclxuXHJcblx0XHQudW5pLWljb24ge1xyXG5cdFx0XHQvKiBib3JkZXI6IDFweCBzb2xpZCByZWQ7ICovXHJcblx0XHRcdHdpZHRoOiA4JTtcclxuXHRcdFx0Zm9udC1mYW1pbHk6IHVuaWljb25zO1xyXG5cdFx0XHRmb250LXNpemU6IDQwcnB4O1xyXG5cdFx0XHRmb250LXdlaWdodDogNDAwO1xyXG5cdFx0XHRmb250LXN0eWxlOiBub3JtYWw7XHJcblx0XHRcdC8qIHdpZHRoOiA0OHJweDsgKi9cclxuXHRcdFx0aGVpZ2h0OiA0OHJweDtcclxuXHRcdFx0bGluZS1oZWlnaHQ6IDQ4cnB4O1xyXG5cdFx0XHRjb2xvcjogIzJkOGNmMDtcclxuXHRcdFx0Y3Vyc29yOiBwb2ludGVyO1xyXG5cdFx0XHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcblx0XHRcdHZlcnRpY2FsLWFsaWduOiAxOHJweDtcclxuXHRcdH1cclxuXHJcblx0XHQudi1jb250ZW50IHtcclxuXHRcdFx0aGVpZ2h0OiA5NDVycHg7XHJcblx0XHRcdG92ZXJmbG93OiBoaWRlO1xyXG5cdFx0XHQvKiBib3JkZXI6MC4xcHggc29saWQgcmVkOyAqL1xyXG5cdFx0fVxyXG5cclxuXHRcdC52aWV3LWNvbnRlbnQge1xyXG5cdFx0XHRtYXJnaW4tdG9wOiAxMHJweDtcclxuXHRcdH1cclxuXHJcblx0XHQuZHYtcGFuZWwtYmtjb2xvciB7XHJcblx0XHRcdGJhY2tncm91bmQtY29sb3I6ICNlZmVmZWY7XHJcblx0XHR9XHJcblxyXG5cdFx0LmR2LXBhbmVsIHtcclxuXHRcdFx0YmFja2dyb3VuZC1jb2xvcjogI2VmZWZlZjtcclxuXHRcdFx0cGFkZGluZzogMjBycHggMjBycHggMjBycHggMHB4O1xyXG5cdFx0XHRib3JkZXItcmFkaXVzOiAxMnJweDtcclxuXHRcdFx0bWFyZ2luLWJvdHRvbTogMjBycHg7XHJcblx0XHRcdHRleHQtYWxpZ246IHJpZ2h0O1xyXG5cdFx0fVxyXG5cclxuXHRcdC5kdi1saXN0SHRtbC1QYW5lbCxcclxuXHRcdC5kdi1wYW5lbC1pbnB1dCB7XHJcblx0XHRcdHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XHJcblx0XHRcdHdpZHRoOiA5MSU7XHJcblx0XHRcdGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuXHRcdFx0dGV4dC1hbGlnbjogbGVmdDtcclxuXHRcdH1cclxuXHJcblx0XHQuZHYtcGFuZWwtYnV0aWNvbiB7XHJcblx0XHRcdGxpbmUtaGVpZ2h0OiAwcnB4O1xyXG5cdFx0XHR0ZXh0LWFsaWduOiBsZWZ0O1xyXG5cdFx0XHQvKiBmb250LXNpemU6IDE3cHg7ICovXHJcblx0XHRcdHBhZGRpbmc6IDAgMzBycHg7XHJcblx0XHR9XHJcblxyXG5cdFx0LmR2LXBhbmVsLWJ1dGljb24gLmJ0bi1wYWRkaW5nIHtcclxuXHRcdFx0cGFkZGluZzogMTBycHggMjBycHg7XHJcblx0XHRcdGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuXHRcdFx0dmVydGljYWwtYWxpZ246IG1pZGRsZTtcclxuXHRcdH1cclxuXHJcblx0XHQuZHYtcGFuZWwtYnV0aWNvbiBhIGkge1xyXG5cdFx0XHRmb250LXNpemU6IDM4cnB4O1xyXG5cdFx0fVxyXG5cclxuXHRcdC5kdi1wYW5lbC1idXRpY29uIGJ1dHRvbiB7XHJcblx0XHRcdG1pbi13aWR0aDogMTIwcnB4O1xyXG5cdFx0XHRmb250LXNpemU6IDMycnB4O1xyXG5cdFx0XHRwYWRkaW5nOiAyMHJweCAyMHJweCAwcnB4IDIwcnB4O1xyXG5cdFx0XHRsaW5lLWhlaWdodDogMTtcclxuXHRcdFx0YmFja2dyb3VuZDogIzRENkFGNDtcclxuXHRcdFx0Ym9yZGVyOiBub25lO1xyXG5cdFx0XHRjb2xvcjogI2ZmZjtcclxuXHRcdFx0Zm9udC13ZWlnaHQ6IGJvbGQ7XHJcblx0XHRcdGJvcmRlci1yYWRpdXM6IDhycHg7XHJcblx0XHR9XHJcblxyXG5cdFx0LmR2LXBhbmVsIC50eHRfdGl0bGUge1xyXG5cdFx0XHRmb250LXNpemU6IDM0cnB4O1xyXG5cdFx0XHR0ZXh0LWFsaWduOiByaWdodDtcclxuXHRcdFx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG5cdFx0fVxyXG5cclxuXHRcdC5kdi1wYW5lbCBpbnB1dCB7XHJcblx0XHRcdHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XHJcblx0XHRcdGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuXHRcdFx0Ym9yZGVyOiAycnB4IHNvbGlkICNkNWQ1ZDU7XHJcblx0XHRcdHdpZHRoOiA2OCU7XHJcblx0XHRcdGhlaWdodDogNTJycHg7XHJcblx0XHRcdGxpbmUtaGVpZ2h0OiAzNHJweDtcclxuXHRcdFx0YmFja2dyb3VuZDogI0ZGRjtcclxuXHRcdFx0Ym9yZGVyLXJhZGl1czogMTRycHggIWltcG9ydGFudDtcclxuXHRcdFx0Y29sb3I6ICMyZDhjZjA7XHJcblx0XHRcdHBhZGRpbmc6IDZycHggOHJweCA4cnB4O1xyXG5cdFx0XHRmb250LXNpemU6IDMycnB4O1xyXG5cdFx0XHRmb250LWZhbWlseTogaW5oZXJpdDtcclxuXHRcdFx0Ym94LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50O1xyXG5cdFx0XHR0cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjFzO1xyXG5cdFx0XHRtYXJnaW4tdG9wOiAwcnB4O1xyXG5cdFx0fVxyXG5cclxuXHRcdC5kdi1wYW5lbCBpbnB1dDo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciB7XHJcblx0XHRcdGZvbnQtc2l6ZTogMTBycHg7XHJcblx0XHR9XHJcblxyXG5cdFx0LmR2LXBhbmVsIC5mb3JtLWl0ZW0tc3BhbiB7XHJcblx0XHRcdHZlcnRpY2FsLWFsaWduOiB0ZXh0LXRvcDtcclxuXHRcdFx0Y29sb3I6ICMyZDhjZjA7XHJcblx0XHRcdHdoaXRlLXNwYWNlOiBub3JtYWw7XHJcblx0XHRcdHdvcmQtYnJlYWs6IGJyZWFrLWFsbDtcclxuXHRcdFx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG5cdFx0XHR3aWR0aDogY2FsYygxMDAlIC0gMTAwcHgpO1xyXG5cdFx0fVxyXG5cclxuXHRcdC5kdi1wYW5lbC1idXR0b24ge1xyXG5cdFx0XHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcblx0XHR9XHJcblxyXG5cdFx0LmR2LXBhbmVsLWJ1dHRvbiBjaGVja2JveC1ncm91cCB7XHJcblx0XHRcdGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuXHRcdH1cclxuXHJcblx0XHQuZHYtcGFuZWwtYnV0dG9uIHVuaS1jaGVja2JveCAudW5pLWNoZWNrYm94LWlucHV0IHtcclxuXHRcdFx0d2lkdGg6IDM0cnB4O1xyXG5cdFx0XHRoZWlnaHQ6IDM0cnB4O1xyXG5cdFx0fVxyXG5cclxuXHRcdC5kdi1wYW5lbC1idXR0b24gYSBpIHtcclxuXHRcdFx0Zm9udC1zaXplOiAzNnJweDtcclxuXHRcdH1cclxuXHJcblx0XHQuZHYtcGFuZWwtYnV0dG9uIGJ1dHRvbiB7XHJcblx0XHRcdGhlaWdodDogNTBycHg7XHJcblx0XHRcdGZvbnQtc2l6ZTogMjZycHg7XHJcblx0XHRcdHBhZGRpbmc6IDAgMjRycHg7XHJcblx0XHR9XHJcblxyXG5cdFx0LnZpZXctZmxvb3Ige1xyXG5cdFx0XHRwYWRkaW5nOiAwIDIwcnB4O1xyXG5cdFx0XHQvKiBib3JkZXI6MXB4IHNvbGlkIHJlZDsgKi9cclxuXHRcdH1cclxuXHJcblx0XHRidXR0b24uYnRuX3JlZnJlc2gge1xyXG5cdFx0XHR3aWR0aDogNDkuNSU7XHJcblx0XHRcdG1hcmdpbi10b3A6IDI1cnB4O1xyXG5cdFx0XHRwYWRkaW5nOiAyMHJweDtcclxuXHRcdFx0bGluZS1oZWlnaHQ6IDEuNTtcclxuXHRcdFx0YmFja2dyb3VuZDogIzRENkFGNDtcclxuXHRcdFx0Ym9yZGVyOiBub25lO1xyXG5cdFx0XHRjb2xvcjogI2ZmZjtcclxuXHRcdFx0Zm9udC1zaXplOiAzOHJweDtcclxuXHRcdFx0Zm9udC13ZWlnaHQ6IGJvbGQ7XHJcblx0XHRcdGZsb2F0OiBsZWZ0O1xyXG5cdFx0XHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcblx0XHR9XHJcblxyXG5cdFx0YnV0dG9uLmJ0bl9jYW5jZWwge1xyXG5cdFx0XHR3aWR0aDogNDkuNSU7XHJcblx0XHRcdG1hcmdpbi10b3A6IDI1cnB4O1xyXG5cdFx0XHRwYWRkaW5nOiAyMHJweDtcclxuXHRcdFx0bGluZS1oZWlnaHQ6IDEuNTtcclxuXHRcdFx0YmFja2dyb3VuZDogI2ZmZjtcclxuXHRcdFx0Ym9yZGVyOiBub25lO1xyXG5cdFx0XHRjb2xvcjogIzAwMDtcclxuXHRcdFx0Zm9udC1zaXplOiAzOHJweDtcclxuXHRcdFx0Zm9udC13ZWlnaHQ6IGJvbGQ7XHJcblx0XHRcdGZsb2F0OiBsZWZ0O1xyXG5cdFx0XHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcblx0XHRcdG1hcmdpbi1yaWdodDogMjBycHg7XHJcblx0XHR9XHJcblxyXG5cdFx0LmJrLWFjdGl2ZSB7XHJcblx0XHRcdGJhY2tncm91bmQtY29sb3I6ICNENkZDQjI7XHJcblx0XHR9XHJcblxyXG5cdFx0LnVuaS1wYWRkaW5nLXdyYXAge1xyXG5cdFx0XHRtYXJnaW4tdG9wOiAyMHJweDtcclxuXHRcdFx0YmFja2dyb3VuZC1jb2xvcjogIzk4REFFQTtcclxuXHRcdFx0d2lkdGg6IDEwNHJweDtcclxuXHRcdFx0aGVpZ2h0OiA4MHJweDtcclxuXHRcdFx0dGV4dC1hbGlnbjogY2VudGVyO1xyXG5cdFx0XHRib3JkZXItcmFkaXVzOiA1NHJweDtcclxuXHRcdFx0cGFkZGluZzogMjRycHggMCAwIDA7XHJcblx0XHRcdGZsb2F0OiByaWdodDtcclxuXHRcdFx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG5cdFx0fVxyXG5cclxuXHRcdC51bmktcGFkZGluZy13cmFwIGEge1xyXG5cdFx0XHRmb250LXNpemU6IDQwcnB4O1xyXG5cdFx0fVxyXG5cclxuXHRcdCNkdl9zZWxlY3Qge1xyXG5cdFx0XHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcblx0XHRcdHdpZHRoOiA2NiU7XHJcblx0XHRcdGJhY2tncm91bmQ6ICNGRkY7XHJcblx0XHRcdGJvcmRlci1yYWRpdXM6IDAgIWltcG9ydGFudDtcclxuXHRcdFx0Y29sb3I6ICMyZDhjZjA7XHJcblx0XHRcdC8qIHBhZGRpbmc6IDEwcnB4IDhycHggMTJycHg7ICovXHJcblx0XHRcdGZvbnQtc2l6ZTogMzRycHg7XHJcblx0XHRcdGZvbnQtZmFtaWx5OiBpbmhlcml0O1xyXG5cdFx0XHRib3gtc2hhZG93OiBub25lICFpbXBvcnRhbnQ7XHJcblx0XHRcdHRyYW5zaXRpb24tZHVyYXRpb246IDAuMXM7XHJcblx0XHRcdG1hcmdpbi10b3A6IDBycHg7XHJcblx0XHRcdHZlcnRpY2FsLWFsaWduOiAyMHJweDtcclxuXHRcdH1cclxuXHJcblx0XHQjZHZfc2VsZWN0IC51bmktc2VsZWN0IHtcclxuXHRcdFx0Ym9yZGVyOiAycnB4IHNvbGlkICNjY2M7XHJcblx0XHRcdGJvcmRlci1yYWRpdXM6IDAgIWltcG9ydGFudDtcclxuXHRcdFx0Y29sb3I6ICMyZDhjZjA7XHJcblx0XHR9XHJcblxyXG5cdFx0I2R2X3NlbGVjdCAudW5pLXNlbGVjdF9faW5wdXQtdGV4dCB7XHJcblx0XHRcdGNvbG9yOiAjMmQ4Y2YwO1xyXG5cdFx0fVxyXG5cclxuXHRcdC5pbnB1dC1kaXNhYmxlZCB7XHJcblx0XHRcdGJhY2tncm91bmQtY29sb3I6ICNmM2YzZjMgIWltcG9ydGFudDtcclxuXHRcdH1cclxuXHJcblx0XHQuZHZfcGFuZWxfY29uZGVudCB7XHJcblx0XHRcdGJhY2tncm91bmQtY29sb3I6ICNENkZDQjI7XHJcblx0XHRcdHBhZGRpbmc6IDIwcnB4O1xyXG5cdFx0XHRib3JkZXItcmFkaXVzOiAxMnJweDtcclxuXHRcdH1cclxuXHJcblx0XHQuZHZfcGFuZWxfYXR0ciB7XHJcblx0XHRcdG1hcmdpbi1ib3R0b206IDEwcnB4O1xyXG5cdFx0fVxyXG5cclxuXHRcdC5kdl9wYW5lbF9hdHRyIC5kdl9pbmxpbmUge1xyXG5cdFx0XHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcblx0XHRcdHRleHQtYWxpZ246IGNlbnRlcjtcclxuXHRcdH1cclxuXHJcblx0XHQuZHZfcGFuZWxfYXR0ciBpIHtcclxuXHRcdFx0dmVydGljYWwtYWxpZ246IDI1cHg7XHJcblx0XHRcdG1hcmdpbjogMCAxMHB4O1xyXG5cdFx0fVxyXG5cclxuXHRcdC5kdl9wYW5lbF9hdHRyIC5kdl9pbmxpbmUgcCB7XHJcblx0XHRcdGJhY2tncm91bmQ6ICM0RDZBRjQ7XHJcblx0XHRcdGNvbG9yOiAjZmZmO1xyXG5cdFx0XHRwYWRkaW5nOiAxMHJweCAxNXJweDtcclxuXHRcdFx0bGluZS1oZWlnaHQ6IDEuNTtcclxuXHRcdFx0Ym9yZGVyLXJhZGl1czogMTBycHg7XHJcblx0XHR9XHJcblxyXG5cdFx0LnNjcm9sbC1ZIHtcclxuXHRcdFx0aGVpZ2h0OiAxMDAlO1xyXG5cdFx0fVxyXG5cclxuXHRcdC5zY3JvbGwtdmlld19IIHtcclxuXHRcdFx0d2hpdGUtc3BhY2U6IG5vd3JhcDtcclxuXHRcdFx0d2lkdGg6IDEwMCU7XHJcblx0XHR9XHJcblxyXG5cdFx0LmR2X3BhbmVsX2NvbnRlbnQge1xyXG5cdFx0XHRtYXJnaW46IDAgMTBweDtcclxuXHRcdH1cclxuXHJcblx0XHQuZHZfcGFuZWxfY29udGVudCAuZHZfcGFuZWxfYXR0ciB7XHJcblx0XHRcdG1hcmdpbi1ib3R0b206IDVweDtcclxuXHRcdH1cclxuXHJcblx0XHQuZHZfcGFuZWxfY29udGVudCAuZHZfcGFuZWxfYXR0ciBpIHtcclxuXHRcdFx0dmVydGljYWwtYWxpZ246IHN1cGVyO1xyXG5cdFx0XHRtYXJnaW46IDAgMTBweDtcclxuXHRcdH1cclxuXHJcblx0XHQuZHZfcGFuZWxfY29udGVudCAuZHZfcGFuZWxfYXR0ciAuY2lyY2VsX25vZGUge31cclxuXHJcblx0XHQvKiDmmK/oj7HlvaLnmoQgKi9cclxuXHRcdC5kdl9wYW5lbF9jb250ZW50IC5kdl9wYW5lbF9hdHRyIC5kdl9kaWFtb25kX25vZGUgcCB7XHJcblx0XHRcdHdpZHRoOiA1MHB4O1xyXG5cdFx0XHRoZWlnaHQ6IDUwcHg7XHJcblx0XHRcdGJhY2tncm91bmQtY29sb3I6ICM0RDZBRjQ7XHJcblx0XHRcdHRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKTtcclxuXHRcdFx0LW1zLXRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKTtcclxuXHRcdFx0LW1vei10cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZyk7XHJcblx0XHRcdC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoNDVkZWcpO1xyXG5cdFx0XHQtby10cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZyk7XHJcblx0XHRcdG1hcmdpbjogMTVweCBhdXRvO1xyXG5cdFx0XHRwYWRkaW5nOiA5cHg7XHJcblx0XHRcdC8vIGxpbmUtaGVpZ2h0OiAyOHB4O1xyXG5cdFx0XHR0ZXh0LWFsaWduOiBjZW50ZXI7XHJcblx0XHR9XHJcblxyXG5cdFx0LmR2X3BhbmVsX2NvbnRlbnQgLmR2X3BhbmVsX2F0dHIgLmR2X2RpYW1vbmRfbm9kZSBwIHNwYW4ge1xyXG5cdFx0XHRjb2xvcjogI2ZmZjtcclxuXHRcdFx0dHJhbnNmb3JtOiByb3RhdGUoLTQ1ZGVnKTtcclxuXHRcdFx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG5cdFx0XHR0ZXh0LWFsaWduOiBjZW50ZXI7XHJcblx0XHRcdG92ZXJmbG93OiBoaWRkZW47XHJcblx0XHRcdHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xyXG5cdFx0XHQvLyB3aGl0ZS1zcGFjZTogbm93cmFwO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qIOm7mOiupOW9oiAqL1xyXG5cdFx0LmR2X3BhbmVsX2NvbnRlbnQgLmR2X3BhbmVsX2F0dHIgLmR2X2JveF9ub2RlLFxyXG5cdFx0LmR2X3BhbmVsX2NvbnRlbnQgLmR2X3BhbmVsX2F0dHIgLmR2X2RpYW1vbmRfbm9kZSB7XHJcblx0XHRcdHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XHJcblx0XHRcdGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuXHRcdFx0dGV4dC1hbGlnbjogY2VudGVyO1xyXG5cdFx0XHR3aWR0aDogMTAwcHg7XHJcblx0XHR9XHJcblxyXG5cdFx0LmR2X3BhbmVsX2NvbnRlbnQgLmR2X3BhbmVsX2F0dHIgLmR2X2JveF9ub2RlIHAge1xyXG5cdFx0XHRiYWNrZ3JvdW5kOiAjNEQ2QUY0O1xyXG5cdFx0XHRjb2xvcjogI2ZmZjtcclxuXHRcdFx0cGFkZGluZzogM3B4IDdweDtcclxuXHRcdFx0bGluZS1oZWlnaHQ6IDEuNTtcclxuXHRcdFx0Ym9yZGVyLXJhZGl1czogNXB4O1xyXG5cdFx0fVxyXG5cclxuXHRcdC5kZW1vLXVuaS1yb3cge1xyXG5cdFx0XHRtYXJnaW4tYm90dG9tOiAwcHg7XHJcblx0XHRcdGRpc3BsYXk6IGJsb2NrO1xyXG5cdFx0fVxyXG5cclxuXHRcdDo6di1kZWVwIC51bmktcm93IHtcclxuXHRcdFx0bWFyZ2luLWJvdHRvbTogMHB4O1xyXG5cdFx0fVxyXG5cclxuXHRcdC52aWV3LXRhYnBhZ2UgOjp2LWRlZXAgLnVuaS1yb3cge1xyXG5cdFx0XHRtYXJnaW4tYm90dG9tOiA1cHg7XHJcblx0XHR9XHJcblxyXG5cdFx0LmRlbW8tdW5pLWNvbCB7XHJcblx0XHRcdGhlaWdodDogMzZweDtcclxuXHRcdFx0Ym9yZGVyLXJhZGl1czogNXB4O1xyXG5cdFx0fVxyXG5cclxuXHRcdC5kZW1vLXVuaS1yb3cgLnVuaS1pbnB1dCB7XHJcblx0XHRcdHdpZHRoOiBjYWxjKDEwMCUgLSAxMjBweCk7XHJcblx0XHR9XHJcblx0fVxyXG48L3N0eWxlPiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///169\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 _regenerator = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/regenerator */ 57));\nvar _asyncToGenerator2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ 59));\nvar _base = _interopRequireDefault(__webpack_require__(/*! ../../components/js-base64/base64.js */ 67));\nvar _utils = _interopRequireDefault(__webpack_require__(/*! @/js/utils.js */ 61));\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//\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//\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//\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//\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  modules: {\n    Base64: _base.default\n  },\n  onNavigationBarButtonTap: function onNavigationBarButtonTap(e) {\n    //  \tconsole.log(e);\n    // e.text=\"\\ue924\";\n    // console.log(e.fontSize);\n    if (this.isFilter) this.isFilter = false;else this.isFilter = true;\n  },\n  onBackPress: function onBackPress(e) {\n    // console.log(\"鐩戝惉杩斿洖鎸夐挳浜嬩欢\",e);\n    var eventChannel = this.$scope.eventChannel;\n    // const eventChannel = this.getOpenerEventChannel();\n    eventChannel.emit('view_3201', \"\");\n    // uni.navigateBack({\n    // \tdelta:1 ,//杩斿洖灞傛暟锛�鍒欎笂涓婇〉\n    // });\n    // return true;\n  },\n  data: function data() {\n    return {\n      title: this.translateSys('add2'),\n      isFilter: true,\n      param: {},\n      focusMateria: false,\n      styledef: {},\n      head_styledef: {\n        form: {\n          items: []\n        }\n      },\n      detail1_styledef: {},\n      detail1StyleDefList: [],\n      detail2_styledef: {},\n      detail2StyleDefList: [],\n      items: [],\n      active_id: '',\n      activelist: [],\n      where: '',\n      wheres: '',\n      orderby: '',\n      query_id: '',\n      pageindex: 1,\n      page_size: 10,\n      page_count: 0,\n      scrollTop: 0,\n      old: {\n        scrollTop: 0\n      },\n      isScroll: true,\n      //鑾峰彇鏁版嵁绫荤殑HTML椤甸潰\n      ListHtml_Panel: \"\",\n      ListPageHtml_Show: {\n        name: \"\",\n        event: {\n          id: \"\",\n          name: \"\"\n        }\n      }\n    };\n  },\n  onLoad: function onLoad(options) {\n    var _this = this;\n    return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {\n      var _this$param$ListPage$;\n      return _regenerator.default.wrap(function _callee$(_context) {\n        while (1) {\n          switch (_context.prev = _context.next) {\n            case 0:\n              // console.log(options);\n              uni.setNavigationBarTitle({\n                title: options.titlename\n              }); //璁剧疆椤堕儴鏍囬 \n              _this.$data.title = options.titlename;\n              _this.$data.param = JSON.parse(options.param);\n              _this.styledef = {};\n              _this.head_styledef = {\n                form: {\n                  items: []\n                }\n              };\n              _this.detail1_styledef = {};\n              _this.detail1StyleDefList = [];\n              _this.detail2_styledef = {};\n              _this.detail2StyleDefList = [];\n              _this.ListHtml_Panel = \"\";\n              _this.ListPageHtml_Show = {\n                name: \"\",\n                event: {\n                  id: \"\",\n                  name: \"\"\n                }\n              };\n              _this.items = [];\n              _this.active_id = '';\n              _this.activelist = [];\n              if (!(((_this$param$ListPage$ = _this.param.ListPage.ListItem_UIDef) === null || _this$param$ListPage$ === void 0 ? void 0 : _this$param$ListPage$.ui_type) == \"HTML椤甸潰\")) {\n                _context.next = 19;\n                break;\n              }\n              _context.next = 17;\n              return _this.Html_UIstyleGetInfo(_this.param.DataCls.id, _this.param.ListPage.ListItem_UIDef.id, options.paramValue);\n            case 17:\n              _context.next = 23;\n              break;\n            case 19:\n              _context.next = 21;\n              return _this.Detail1_UIstyleGetInfo(_this.param.DataCls.id, _this.param.ListPage.ListItem_UIDef.id);\n            case 21:\n              _context.next = 23;\n              return _this.initial(options.paramValue);\n            case 23:\n            case \"end\":\n              return _context.stop();\n          }\n        }\n      }, _callee);\n    }))();\n  },\n  methods: {\n    //\n    setData: function setData(obj) {\n      var that = this;\n      var keys = [];\n      var val, data;\n      Object.keys(obj).forEach(function (key) {\n        keys = key.split(\".\");\n        val = obj[key];\n        data = that.$data;\n        keys.forEach(function (key2, index) {\n          if (index + 1 == keys.length) {\n            that.$set(data, key2, val);\n          } else {\n            if (!data[key2]) {\n              that.$set(data, key2, {});\n            }\n          }\n          data = data[key2];\n        });\n      });\n    },\n    //鍒濆鍖朶n    initial: function initial(paramValue) {\n      var _this2 = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee6() {\n        var _this2$$data$head_sty, _this2$$data$head_sty2, attrs;\n        return _regenerator.default.wrap(function _callee6$(_context6) {\n          while (1) {\n            switch (_context6.prev = _context6.next) {\n              case 0:\n                _this2.isFilter = true;\n                if (_this2.param.ShowFilter) _this2.isFilter = false;\n                //鑾峰彇鏁版嵁绫荤殑鑷畾涔夎〃鍗曞弬鏁癨n                if (!_this2.param.Query_Panel) {\n                  _context6.next = 6;\n                  break;\n                }\n                _context6.next = 5;\n                return _this2.Head_UIStyleGetInfo(_this2.param.DataCls.id, _this2.param.Query_Panel.id);\n              case 5:\n                //浼犲叆鍙傛暟鍊糪n                if (paramValue) {\n                  attrs = paramValue.attrs || [];\n                  (((_this2$$data$head_sty = _this2.$data.head_styledef) === null || _this2$$data$head_sty === void 0 ? void 0 : (_this2$$data$head_sty2 = _this2$$data$head_sty.form) === null || _this2$$data$head_sty2 === void 0 ? void 0 : _this2$$data$head_sty2.items) || []).forEach( /*#__PURE__*/function () {\n                    var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee5(ele, index) {\n                      return _regenerator.default.wrap(function _callee5$(_context5) {\n                        while (1) {\n                          switch (_context5.prev = _context5.next) {\n                            case 0:\n                              if (ele.name != \"Layout\") {\n                                attrs.forEach( /*#__PURE__*/function () {\n                                  var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(ele2, index2) {\n                                    return _regenerator.default.wrap(function _callee2$(_context2) {\n                                      while (1) {\n                                        switch (_context2.prev = _context2.next) {\n                                          case 0:\n                                            if (ele.fieldId == ele2.name) {\n                                              ele.value = ele2.value;\n                                            }\n                                          case 1:\n                                          case \"end\":\n                                            return _context2.stop();\n                                        }\n                                      }\n                                    }, _callee2);\n                                  }));\n                                  return function (_x3, _x4) {\n                                    return _ref2.apply(this, arguments);\n                                  };\n                                }());\n                              } else {\n                                ele.setting.colList.forEach( /*#__PURE__*/function () {\n                                  var _ref3 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4(col) {\n                                    return _regenerator.default.wrap(function _callee4$(_context4) {\n                                      while (1) {\n                                        switch (_context4.prev = _context4.next) {\n                                          case 0:\n                                            if (col) {\n                                              attrs.forEach( /*#__PURE__*/function () {\n                                                var _ref4 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3(ele2, index2) {\n                                                  return _regenerator.default.wrap(function _callee3$(_context3) {\n                                                    while (1) {\n                                                      switch (_context3.prev = _context3.next) {\n                                                        case 0:\n                                                          if (col.fieldId == ele2.name) {\n                                                            col.value = ele2.value;\n                                                          }\n                                                        case 1:\n                                                        case \"end\":\n                                                          return _context3.stop();\n                                                      }\n                                                    }\n                                                  }, _callee3);\n                                                }));\n                                                return function (_x6, _x7) {\n                                                  return _ref4.apply(this, arguments);\n                                                };\n                                              }());\n                                            }\n                                          case 1:\n                                          case \"end\":\n                                            return _context4.stop();\n                                        }\n                                      }\n                                    }, _callee4);\n                                  }));\n                                  return function (_x5) {\n                                    return _ref3.apply(this, arguments);\n                                  };\n                                }());\n                              }\n                            case 1:\n                            case \"end\":\n                              return _context5.stop();\n                          }\n                        }\n                      }, _callee5);\n                    }));\n                    return function (_x, _x2) {\n                      return _ref.apply(this, arguments);\n                    };\n                  }());\n                }\n              case 6:\n                _this2.orderby = _this2.param.Order ? _this2.param.Order : 'T_CREATE Desc';\n                if (!_this2.param.Query_Event) {\n                  _context6.next = 12;\n                  break;\n                }\n                _context6.next = 10;\n                return _this2.onSearChange(_this2.param.DataCls.id, _this2.param.Query_Event.id);\n              case 10:\n                _context6.next = 18;\n                break;\n              case 12:\n                _this2.wheres = _this2.param.Condition;\n                _this2.pageindex = 1;\n                _this2.page_size = 3;\n                _this2.query_id = \"\";\n                _context6.next = 18;\n                return _this2.loadDataGetList();\n              case 18:\n              case \"end\":\n                return _context6.stop();\n            }\n          }\n        }, _callee6);\n      }))();\n    },\n    //婊氬姩鍒板簳閮ㄥ悗鎳掑姞杞芥暟鎹甛n    scrolltolower: function scrolltolower(e) {\n      var _this3 = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee7() {\n        return _regenerator.default.wrap(function _callee7$(_context7) {\n          while (1) {\n            switch (_context7.prev = _context7.next) {\n              case 0:\n                if (!_this3.isScroll) {\n                  _context7.next = 7;\n                  break;\n                }\n                if (!(_this3.page_count == _this3.pageindex)) {\n                  _context7.next = 3;\n                  break;\n                }\n                return _context7.abrupt(\"return\");\n              case 3:\n                _this3.pageindex += 1;\n                if (_this3.where || _this3.page_count == 1) {\n                  _this3.query_id = \"\";\n                  _this3.detail1StyleDefList = [];\n                }\n                _context7.next = 7;\n                return _this3.loadDataGetList();\n              case 7:\n              case \"end\":\n                return _context7.stop();\n            }\n          }\n        }, _callee7);\n      }))();\n    },\n    scroll: function scroll(e) {\n      // console.log(e.detail.scrollTop)\n      this.old.scrollTop = e.detail.scrollTop;\n    },\n    Head_UIStyleGetInfo: function Head_UIStyleGetInfo(class_id, style_id) {\n      var _this4 = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee9() {\n        var $this, dataInfo;\n        return _regenerator.default.wrap(function _callee9$(_context9) {\n          while (1) {\n            switch (_context9.prev = _context9.next) {\n              case 0:\n                //鑾峰彇鑷畾涔夎〃鍗曟牱寮廫n                $this = _this4;\n                dataInfo = {\n                  class_id: class_id,\n                  ui_style_id: style_id\n                }; // console.log(dataInfo);\n                _this4.$store.dispatch('UIStyleGetInfo', dataInfo).then(function (ret) {\n                  // console.log(ret);\n                  if (ret.err_code == 0) {\n                    var styledef = \"\";\n                    if (ret.result.style_def) {\n                      //mobox2鐨剆tyle_def鏄痡son瀛楃涓瞈n                      styledef = ret.result.style_def.replace(/\\\\/g, \"\");\n                      //mobox3鐨剆tyle_def鏄痓ase64瀛楃涓瞈n                      if (!ret.result.style_def.includes('\"')) styledef = _base.default.decode(ret.result.style_def);\n                    }\n                    $this.$data.head_styledef = ret.result.style_def ? JSON.parse(styledef) : {};\n                    // this.form = this.head_styledef.form.model;\n                    // console.log($this.$data.head_styledef);\n                    $this.head_styledef.form.items.forEach( /*#__PURE__*/function () {\n                      var _ref5 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee8(ele, index) {\n                        return _regenerator.default.wrap(function _callee8$(_context8) {\n                          while (1) {\n                            switch (_context8.prev = _context8.next) {\n                              case 0:\n                                __f__(\"log\", ele.useDict, \" at pages/modal/3200.vue:447\");\n                                if (!(ele.useDict == true)) {\n                                  _context8.next = 4;\n                                  break;\n                                }\n                                _context8.next = 4;\n                                return _this4.DictGetInfo(ele.bind.dict, index, 'mast');\n                              case 4:\n                              case \"end\":\n                                return _context8.stop();\n                            }\n                          }\n                        }, _callee8);\n                      }));\n                      return function (_x8, _x9) {\n                        return _ref5.apply(this, arguments);\n                      };\n                    }());\n                  } else {\n                    uni.showModal({\n                      title: _this4.translateSys(\"error\") + \"1\",\n                      content: ret.err_msg,\n                      showCancel: false,\n                      confirmText: _this4.translateSys(\"cancel\")\n                    });\n                  }\n                }).catch(function (ex) {\n                  // console.log(ex);\n                  uni.showModal({\n                    title: _this4.translateSys(\"error\") + \"1.1\",\n                    content: ex.errMsg,\n                    showCancel: false,\n                    confirmText: _this4.translateSys(\"cancel\")\n                  });\n                });\n              case 3:\n              case \"end\":\n                return _context9.stop();\n            }\n          }\n        }, _callee9);\n      }))();\n    },\n    Detail1_UIstyleGetInfo: function Detail1_UIstyleGetInfo(class_id, style_id) {\n      var _this5 = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee10() {\n        var $this, dataInfo;\n        return _regenerator.default.wrap(function _callee10$(_context10) {\n          while (1) {\n            switch (_context10.prev = _context10.next) {\n              case 0:\n                //鑾峰彇鑷畾涔夎〃鍗曟牱寮廫n                $this = _this5;\n                dataInfo = {\n                  class_id: class_id,\n                  ui_style_id: style_id\n                };\n                _this5.$store.dispatch('UIStyleGetInfo', dataInfo).then(function (ret) {\n                  __f__(\"log\", ret, \" at pages/modal/3200.vue:479\");\n                  if (ret.err_code == 0) {\n                    var styledef = \"\";\n                    if (ret.result.style_def) {\n                      //mobox2鐨剆tyle_def鏄痡son瀛楃涓瞈n                      styledef = ret.result.style_def.replace(/\\\\/g, \"\");\n                      //mobox3鐨剆tyle_def鏄痓ase64瀛楃涓瞈n                      if (!ret.result.style_def.includes('\"')) styledef = _base.default.decode(ret.result.style_def);\n                    }\n                    $this.$data.detail1_styledef = ret.result.style_def ? JSON.parse(styledef) : {};\n                    $this.$data.detail1_styledef.SelBut_Checked = false;\n                    // console.log($this.$data.detail1_styledef);\n                    // $this.$data.detail1StyleDefList.push($this.$data.detail1_styledef);\n                    // var aa = JSON.stringify(this.detail1_styledef);\n                    // $this.$data.detail1StyleDefList.push(JSON.parse(aa));\n                    // console.log($this.$data.detail1StyleDefList);\n                  } else {\n                    uni.showModal({\n                      title: _this5.translateSys(\"error\") + \"2\",\n                      content: ret.err_msg,\n                      showCancel: false,\n                      confirmText: _this5.translateSys(\"cancel\")\n                    });\n                  }\n                }).catch(function (ex) {\n                  // console.log(ex);\n                  uni.showModal({\n                    title: _this5.translateSys(\"error\") + \"2.1\",\n                    content: ex.errMsg,\n                    showCancel: false,\n                    confirmText: _this5.translateSys(\"cancel\")\n                  });\n                });\n              case 3:\n              case \"end\":\n                return _context10.stop();\n            }\n          }\n        }, _callee10);\n      }))();\n    },\n    Html_UIstyleGetInfo: function Html_UIstyleGetInfo(class_id, style_id, paramValue) {\n      var _this6 = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee11() {\n        var $this, dataInfo;\n        return _regenerator.default.wrap(function _callee11$(_context11) {\n          while (1) {\n            switch (_context11.prev = _context11.next) {\n              case 0:\n                //鑾峰彇鑷畾涔夎〃鍗曟牱寮廫n                $this = _this6;\n                dataInfo = {\n                  class_id: class_id,\n                  ui_style_id: style_id\n                };\n                _this6.$store.dispatch('UIStyleGetInfo', dataInfo).then(function (ret) {\n                  // console.log(ret);\n                  if (ret.err_code == 0) {\n                    var styledef = \"\";\n                    if (ret.result.style_def) {\n                      //mobox2鐨剆tyle_def鏄痡son瀛楃涓瞈n                      styledef = ret.result.style_def.replace(/\\\\/g, \"\");\n                      //mobox3鐨剆tyle_def鏄痓ase64瀛楃涓瞈n                      if (!ret.result.style_def.includes('\"')) styledef = _base.default.decode(ret.result.style_def);\n                    }\n                    // console.log(styledef);\n                    $this.ListPageHtml_Show = ret.result.style_def ? JSON.parse(styledef) : {};\n                    // console.log($this.ListPageHtml_Show);\n\n                    $this.initial(paramValue);\n                  } else {\n                    uni.showModal({\n                      title: _this6.translateSys(\"error\") + \"10\",\n                      content: ret.err_msg,\n                      showCancel: false,\n                      confirmText: _this6.translateSys(\"cancel\")\n                    });\n                  }\n                }).catch(function (ex) {\n                  // console.log(ex);\n                  uni.showModal({\n                    title: _this6.translateSys(\"error\") + \"10.1\",\n                    content: ex.errMsg,\n                    showCancel: false,\n                    confirmText: _this6.translateSys(\"cancel\")\n                  });\n                });\n              case 3:\n              case \"end\":\n                return _context11.stop();\n            }\n          }\n        }, _callee11);\n      }))();\n    },\n    DictGetInfo: function DictGetInfo(dict, index, type) {\n      var _this7 = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee13() {\n        var $this, dataInfo;\n        return _regenerator.default.wrap(function _callee13$(_context13) {\n          while (1) {\n            switch (_context13.prev = _context13.next) {\n              case 0:\n                //Mobox3寰楀埌寰楀埌瀛楀吀淇℃伅瀛楀吀椤瑰垪琛╘n                _this7.data = [];\n                $this = _this7;\n                dataInfo = {\n                  dict_id: dict.id,\n                  dict_name: dict.name\n                }; // console.log(dataInfo);\n                _this7.$store.dispatch('DictGetInfo', dataInfo).then( /*#__PURE__*/function () {\n                  var _ref6 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee12(success) {\n                    var list, itemName, attr, head_styledef;\n                    return _regenerator.default.wrap(function _callee12$(_context12) {\n                      while (1) {\n                        switch (_context12.prev = _context12.next) {\n                          case 0:\n                            __f__(\"log\", success, \" at pages/modal/3200.vue:566\");\n                            if (success.err_code == 0) {\n                              if (type == 'mast') {\n                                list = [];\n                                itemName = '';\n                                success.result.dict_item_list.forEach(function (item) {\n                                  if (item.is_default == '1') itemName = item.name;\n                                  list.push({\n                                    text: item.value,\n                                    value: item.name\n                                  });\n                                });\n                                //鏈夐粯璁ゅ�锛屾樉绀洪粯璁ゅ�\n                                if (itemName) {\n                                  $this.head_styledef.form.items[index].value = itemName;\n                                  attr = $this.head_styledef.form.items[index].fieldId;\n                                  $this.head_styledef.form.model[attr] = itemName;\n                                }\n                                $this.head_styledef.form.items[index].dict = list;\n                                head_styledef = JSON.parse(JSON.stringify($this.head_styledef));\n                                $this.head_styledef = [];\n                                $this.head_styledef = head_styledef;\n                              } else {\n                                // $this.$data.subClassAttrList[index].attr_list[key].dictitem=success.result;\n                                // this.$store.commit(\"subClassAttrList\", $this.$data.subClassAttrList);\n                              }\n                            } else {\n                              uni.showModal({\n                                title: _this7.translateSys(\"error\") + \"3.1\",\n                                content: success.err_msg,\n                                showCancel: false,\n                                confirmText: _this7.translateSys(\"cancel\")\n                              });\n                            }\n                          case 2:\n                          case \"end\":\n                            return _context12.stop();\n                        }\n                      }\n                    }, _callee12);\n                  }));\n                  return function (_x10) {\n                    return _ref6.apply(this, arguments);\n                  };\n                }()).catch(function (ex) {\n                  // console.log(ex);\n                  uni.showModal({\n                    title: _this7.translateSys(\"error\") + \"3\",\n                    content: ex.errMsg,\n                    showCancel: false,\n                    confirmText: _this7.translateSys(\"cancel\")\n                  });\n                });\n              case 4:\n              case \"end\":\n                return _context13.stop();\n            }\n          }\n        }, _callee13);\n      }))();\n    },\n    // 鎵ц鏌ヨ浜嬩欢\n    onSearChange: function onSearChange(clsid, eventid) {\n      var _this8 = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee14() {\n        var $this, dataInfo, tip;\n        return _regenerator.default.wrap(function _callee14$(_context14) {\n          while (1) {\n            switch (_context14.prev = _context14.next) {\n              case 0:\n                try {\n                  if (eventid) {\n                    $this = _this8;\n                    dataInfo = {\n                      ed_type: 0,\n                      start_transaction: true,\n                      class_id: clsid,\n                      event_id: eventid\n                    };\n                    _this8.$store.dispatch('runCustomEvent', dataInfo).then(function (ret) {\n                      // console.log(ret);\n                      if (ret.err_code == 0) {\n                        var result = ret.result;\n                        if (result.ret != 0) {\n                          var tip = result.err_info ? typeof result.err_info == 'string' ? result.err_info : result.err_info.join('<br/>') : '';\n                          if (result.ret == 801) {\n                            if (_this8.param.Only_Script_Error) {\n                              var pos = tip.indexOf(\"锛歕");\n                              if (pos > -1) tip = tip.substring(pos + 1);\n                            }\n                            uni.showModal({\n                              title: _this8.translateSys(\"tip\"),\n                              content: tip,\n                              showCancel: false,\n                              confirmText: _this8.translateSys(\"cancel\")\n                            });\n                          } else uni.showModal({\n                            title: _this8.translateSys(\"tip\"),\n                            content: tip + ',' + _this8.translateSys('tip') + ':' + result.ret,\n                            showCancel: false,\n                            confirmText: _this8.translateSys(\"cancel\")\n                          });\n                          return false;\n                        } else {\n                          var tip = result.info ? typeof result.info == 'string' ? result.info : result.info.join('<br/>') : '';\n                          if (tip) uni.showModal({\n                            title: _this8.translateSys(\"tip\"),\n                            content: tip,\n                            showCancel: false,\n                            confirmText: _this8.translateSys(\"cancel\")\n                          });\n                          if (result.result_type == 0 && result.action) {\n                            result.action.forEach(function (item) {\n                              if (item.action_type == \"set_query_condition\") {\n                                var value = item.value;\n                                $this.wheres = value.condition;\n                                $this.orderby = value.order ? value.order : $this.orderby;\n                                $this.pageindex = 1;\n                                $this.query_id = \"\";\n                                $this.detail1StyleDefList = [];\n                                $this.loadDataGetList();\n                              }\n                            });\n                          } else {\n                            // this.detail2StyleDefList=[];\n                            if (result.info) {\n                              uni.showModal({\n                                title: _this8.translateSys(\"tip\"),\n                                content: result.info,\n                                showCancel: false,\n                                confirmText: _this8.translateSys(\"cancel\")\n                              });\n                            }\n                          }\n                        }\n                      } else {\n                        uni.showModal({\n                          title: _this8.translateSys(\"error\") + \"4\",\n                          content: ret.err_msg,\n                          showCancel: false,\n                          confirmText: _this8.translateSys(\"cancel\")\n                        });\n                      }\n                    }).catch(function (ex) {\n                      // console.log(ex);\n                      uni.showModal({\n                        title: _this8.translateSys(\"error\") + \"4.1\",\n                        content: ex.errMsg,\n                        showCancel: false,\n                        confirmText: _this8.translateSys(\"cancel\")\n                      });\n                    });\n                  }\n                } catch (ex) {\n                  tip = typeof ex == \"string\" ? ex : ex.message;\n                  uni.showModal({\n                    title: _this8.translateSys(\"error\") + \"4.2\",\n                    content: _this8.translate(\"execute_query_event_failed\") + _this8.translateSys(\"comma\") + tip,\n                    showCancel: false,\n                    confirmText: _this8.translateSys(\"cancel\")\n                  });\n                }\n              case 1:\n              case \"end\":\n                return _context14.stop();\n            }\n          }\n        }, _callee14);\n      }))();\n    },\n    //鏌ヨ鏁版嵁绫绘暟鎹俊鎭痋n    loadDataGetList: function loadDataGetList() {\n      var _this9 = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee15() {\n        var condition, $this, dataInfo, tip;\n        return _regenerator.default.wrap(function _callee15$(_context15) {\n          while (1) {\n            switch (_context15.prev = _context15.next) {\n              case 0:\n                try {\n                  uni.showLoading({\n                    title: _this9.translateSys(\"loading\"),\n                    mask: true\n                  });\n                  //鏉′欢鏌ヨ\n                  condition = _this9.wheres;\n                  if (_this9.where) {\n                    if (condition) condition += ' and ';\n                    condition += _this9.where;\n                  }\n                  // console.log(condition);\n                  // console.log(this.orderby);\n                  $this = _this9;\n                  dataInfo = {\n                    class_id: _this9.param.DataCls.id,\n                    attrs: [],\n                    condition: _this9.toWhereBase64String(\"\" + condition + \"\"),\n                    prj_rel_type: \"\",\n                    order_by: _this9.orderby,\n                    page_size: _this9.page_size,\n                    page: _this9.pageindex,\n                    query_id: _this9.query_id\n                  };\n                  _this9.$store.dispatch('dataObjQuery', dataInfo).then(function (ret) {\n                    __f__(\"log\", ret, \" at pages/modal/3200.vue:744\");\n                    uni.hideLoading();\n                    if (ret.err_code == 0) {\n                      // var list=[];\n                      $this.query_id = '';\n                      if (ret.result) {\n                        $this.page_count = ret.result.page_count;\n                        if (ret.result.page_count > 1) $this.query_id = ret.result.query_id;\n                        // console.log($this.ListPageHtml_Show.event);\n                        if ($this.ListPageHtml_Show.event.id) {\n                          ret.result.obj_list.forEach(function (obj) {\n                            var info = {\n                              id: obj.id\n                            };\n                            obj.attr_list.forEach(function (attr) {\n                              info[attr.name] = attr.value;\n                            });\n                            var detailStyle = {\n                              SelBut_Checked: false,\n                              form: {},\n                              info: info\n                            };\n                            detailStyle.form.htmlobjId = obj.id ? obj.id.replace(/-/g, '').replace('{', '').replace('}', '') : 'null';\n                            detailStyle.form.objId = obj.id;\n                            detailStyle.form.attrs = obj.attr_list;\n                            $this.detail1StyleDefList.push(detailStyle);\n                            $this.activelist.push({\n                              active: false\n                            });\n                          });\n                          // console.log(this.detail1StyleDefList);\n                          var jsonlist = [];\n                          $this.detail1StyleDefList.forEach(function (attr) {\n                            jsonlist.push({\n                              id: attr.info.id,\n                              attrs: Object.keys(attr.info).map(function (a) {\n                                return {\n                                  attr: a,\n                                  value: attr.info[a] || \"\"\n                                };\n                              })\n                            });\n                          });\n                          // console.log(jsonlist);\n                          var data_json = _base.default.encode(JSON.stringify(jsonlist));\n                          var eventid = $this.ListPageHtml_Show.event.id;\n                          if (!$this.ListPageHtml_Show.event.id.includes('{')) eventid = '{' + $this.ListPageHtml_Show.event.id + '}';\n                          //HTML椤甸潰浜嬩欢\n                          $this.runCustomEvent({\n                            ed_type: 0,\n                            start_transaction: true,\n                            class_id: $this.param.DataCls.id,\n                            event_id: eventid,\n                            data_json: data_json\n                          });\n                        } else {\n                          // $this.detail1StyleDefList=[];\n                          ret.result.obj_list.forEach(function (obj) {\n                            var styleStr = JSON.stringify($this.detail1_styledef);\n                            var detailStyle = JSON.parse(styleStr);\n                            // var info ={\n                            //     S_ID:obj.id,\n                            // };\n                            obj.attr_list.forEach(function (attr) {\n                              // info[attr.name]=attr.value;\n                              detailStyle.form.items.forEach(function (ele) {\n                                if (ele.name != 'Layout') {\n                                  if (ele.fieldId == attr.name) ele.value = attr.value;\n                                } else if (ele.name == 'Layout') {\n                                  ele.setting.colList.forEach(function (col) {\n                                    if (col) {\n                                      if (col.fieldId == attr.name) col.value = attr.value;\n                                    }\n                                  });\n                                }\n                              });\n                            });\n                            detailStyle.form.htmlobjId = obj.id ? obj.id.replace(/-/g, '').replace('{', '').replace('}', '') : 'null';\n                            detailStyle.form.objId = obj.id;\n                            detailStyle.form.attrs = obj.attr_list;\n                            $this.detail1StyleDefList.push(detailStyle);\n                            $this.activelist.push({\n                              active: false\n                            });\n                            //list.push(info);\n                          });\n                        }\n\n                        // 瑙e喅view灞備笉鍚屾鐨勯棶棰榎n                        // $this.scrollTop = $this.old.scrollTop;\n                        $this.isScroll = false;\n                        setTimeout(function () {\n                          $this.isScroll = true;\n                        }, 1000);\n                        // console.log($this.detail1StyleDefList);\n                      }\n                    } else {\n                      uni.showModal({\n                        title: _this9.translateSys(\"error\") + \"5\",\n                        content: ret.err_msg,\n                        showCancel: false,\n                        confirmText: _this9.translateSys(\"cancel\")\n                      });\n                    }\n                  }).catch(function (ex) {\n                    // console.log(ex);\n                    uni.showModal({\n                      title: _this9.translateSys(\"error\") + \"5.1\",\n                      content: ex.errMsg,\n                      showCancel: false,\n                      confirmText: _this9.translateSys(\"cancel\")\n                    });\n                  });\n                } catch (ex) {\n                  tip = typeof ex == \"string\" ? ex : ex.message;\n                  uni.showModal({\n                    title: _this9.translateSys(\"error\") + \"5.2\",\n                    content: tip,\n                    showCancel: false,\n                    confirmText: _this9.translateSys(\"cancel\")\n                  });\n                }\n              case 1:\n              case \"end\":\n                return _context15.stop();\n            }\n          }\n        }, _callee15);\n      }))();\n    },\n    //鍒锋柊\n    Refresh: function Refresh(value) {\n      //鍒锋柊褰撳墠椤甸潰\n      this.initial();\n      // uni.redirectTo({\n      // \turl:'../modal/3200?param='+JSON.stringify(this.$data.param)+\"&titlename=\"+this.$data.title,\n      // });\n    },\n    //鐐瑰嚮鏄剧ず娴忚瀵硅薄鏄剧ず椤甸潰\n    onViewPageClick: function onViewPageClick(style) {\n      var _this10 = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee16() {\n        var $this;\n        return _regenerator.default.wrap(function _callee16$(_context16) {\n          while (1) {\n            switch (_context16.prev = _context16.next) {\n              case 0:\n                if (_this10.param.ViewPage) {\n                  if (_this10.param.ViewPage.View_UIDef) {\n                    _this10.styledef = style;\n                    $this = _this10;\n                    uni.navigateTo({\n                      url: '../modal/3200_view?param=' + JSON.stringify(_this10.param) + \"&titlename=\" + _this10.title + \"&style=\" + JSON.stringify(style),\n                      events: {\n                        // 涓烘寚瀹氫簨浠舵坊鍔犱竴涓洃鍚櫒锛岃幏鍙栬鎵撳紑椤甸潰浼犻�鍒板綋鍓嶉〉闈㈢殑鏁版嵁\n                        ExitViewEvent: function ExitViewEvent(data) {\n                          var _$this$param$ViewPage;\n                          __f__(\"log\", data, \" at pages/modal/3200.vue:898\");\n                          //閫�嚭椤甸潰鍚庝簨浠禱n                          var eventid = (_$this$param$ViewPage = $this.param.ViewPage.Exit_View_Event) === null || _$this$param$ViewPage === void 0 ? void 0 : _$this$param$ViewPage.id;\n                          if (eventid) {\n                            try {\n                              var obj_attr = {\n                                'S_ID': $this.styledef.form.objId\n                              };\n                              $this.styledef.form.attrs.forEach(function (attr) {\n                                obj_attr[attr.name] = attr.value;\n                              });\n                              // console.log(obj_attr);\n                              var input_param = _base.default.encode(JSON.stringify(obj_attr));\n                              $this.runCustomEvent({\n                                ed_type: 0,\n                                start_transaction: true,\n                                class_id: $this.param.DataCls.id,\n                                event_id: eventid,\n                                data_obj_id: $this.styledef.form.objId,\n                                obj_attr: obj_attr,\n                                input_param: input_param\n                              });\n                            } catch (ex) {\n                              var tip = typeof ex == \"string\" ? ex : ex.message;\n                              uni.showModal({\n                                title: this.translateSys(\"error\"),\n                                content: tip,\n                                showCancel: false,\n                                confirmText: this.translateSys(\"cancel\")\n                              });\n                            }\n                          }\n                        }\n                      }\n                    });\n                  }\n                }\n              case 1:\n              case \"end\":\n                return _context16.stop();\n            }\n          }\n        }, _callee16);\n      }))();\n    },\n    //鐐瑰嚮鎸夐挳\n    onBtnClick: function onBtnClick(btn, style) {\n      var that = this;\n      if (btn.Prompt) {\n        uni.showModal({\n          title: this.translateSys(\"tip\"),\n          content: btn.PromptContent || this.translate(\"are_you_sure\"),\n          success: function success(res) {\n            if (res.confirm) {\n              that.onButtonClicked(btn, style);\n              // } else if (res.cancel) {\n              // \tconsole.log('鐢ㄦ埛鐐瑰嚮鍙栨秷');\n            }\n          }\n        });\n      } else that.onButtonClicked(btn, style);\n    },\n    //鐐瑰嚮鎸夐挳鍒楄〃\n    actionSheetTap: function actionSheetTap() {\n      var _this11 = this;\n      var that = this;\n      var itemlist = [];\n      this.param.ListPage.Page_Button.forEach(function (btn) {\n        itemlist.push(btn.ShowName);\n      });\n      uni.showActionSheet({\n        // title: '鎸夐挳鍒楄〃',\n        itemList: itemlist,\n        success: function success(e) {\n          __f__(\"log\", e.tapIndex, \" at pages/modal/3200.vue:964\");\n          var btn = that.param.ListPage.Page_Button[e.tapIndex];\n          if (btn.Prompt) {\n            uni.showModal({\n              title: _this11.translateSys(\"tip\"),\n              content: btn.PromptContent || _this11.translate(\"are_you_sure\"),\n              success: function success(res) {\n                if (res.confirm) {\n                  that.onButtonClicked(btn);\n                  // } else if (res.cancel) {\n                  // \tconsole.log('鐢ㄦ埛鐐瑰嚮鍙栨秷');\n                }\n              }\n            });\n          } else that.onButtonClicked(btn);\n        }\n      });\n    },\n    //澶勭悊鐩稿叧鎸夐挳\n    onButtonClicked: function onButtonClicked(btn, style) {\n      var _this12 = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee17() {\n        var enviroment, tip;\n        return _regenerator.default.wrap(function _callee17$(_context17) {\n          while (1) {\n            switch (_context17.prev = _context17.next) {\n              case 0:\n                style = style || '';\n                try {\n                  enviroment = {\n                    button: \"top\",\n                    button_name: btn.ShowName,\n                    cls_id: btn.Cls_ID,\n                    function: \"3200\",\n                    master: {}\n                  };\n                  if (btn.FunCode == \"Add\" || btn.FunCode == \"Modify\") {\n                    if (btn.Edit_dlg.Model == \"small\") {\n                      _this12.showAddSmallDialog(btn, style, enviroment);\n                    }\n                  } else if (btn.FunCode == \"Delete\") {\n                    _this12.DeleteObj(btn, style, enviroment);\n                    // } else if (btn.FunCode == \"TriggerEvent\") {\n                    //   this.triggerEvent(btn, style, enviroment);\n                  } else if (btn.FunCode == \"TriggerEvent\") {\n                    _this12.TriggerEvent(btn, style, enviroment);\n                    // } else if (btn.FunCode == \"TriggerEvent\") {\n                    //   this.triggerEvent(btn, style, enviroment);\n                  } else if (btn.FunCode == \"RelatedFunction\") {\n                    _this12.RelatedFunction(btn, style, enviroment);\n                    // } else if (btn.FunCode == \"TriggerEvent\") {\n                    //   this.triggerEvent(btn, style, enviroment);\n                  } else {\n                    uni.showModal({\n                      title: _this12.translateSys(\"tip\"),\n                      content: _this12.translateSys(\"unrealized\"),\n                      showCancel: false,\n                      confirmText: _this12.translateSys(\"cancel\")\n                    });\n                  }\n                } catch (ex) {\n                  tip = typeof ex == \"string\" ? ex : ex.message;\n                  uni.showModal({\n                    title: _this12.translateSys(\"error\"),\n                    content: tip,\n                    showCancel: false,\n                    confirmText: _this12.translateSys(\"cancel\")\n                  });\n                }\n              case 2:\n              case \"end\":\n                return _context17.stop();\n            }\n          }\n        }, _callee17);\n      }))();\n    },\n    //鏂板淇敼灏忕獥鍙f暟鎹甛n    showAddSmallDialog: function showAddSmallDialog(btn, style, enviroment) {\n      var data = {\n        Add_BtnName: btn.ShowName,\n        EditDlgMode: btn.Edit_dlg.Model,\n        clsid: this.param.DataCls.id,\n        cls_name: this.param.DataCls.name,\n        Edit_dlg: btn.Edit_dlg\n      };\n      var $this = this;\n      uni.navigateTo({\n        url: '../modal/3018?param=' + JSON.stringify(data) + \"&titlename=\" + btn.Edit_dlg.Name + \"&type=addDataObj\",\n        events: {\n          // 涓烘寚瀹氫簨浠舵坊鍔犱竴涓洃鍚櫒锛岃幏鍙栬鎵撳紑椤甸潰浼犻�鍒板綋鍓嶉〉闈㈢殑鏁版嵁\n          addDataObj: function addDataObj(data) {\n            __f__(\"log\", data, \" at pages/modal/3200.vue:1043\");\n            $this.Refresh();\n          }\n        }\n      });\n    },\n    //鍒犻櫎鏁版嵁瀵硅薄\n    DeleteObj: function DeleteObj(btn, style, enviroment) {\n      // console.log(style);\n      var $this = this;\n      uni.showModal({\n        title: this.translateSys(\"tip\"),\n        content: this.translate(\"confirm_delete_data\"),\n        success: function success(res) {\n          var _this13 = this;\n          if (res.confirm) {\n            var objID = style.form.objId;\n            if (!style.form.objId.includes('{')) objID = '{' + style.form.objId + '}';\n            var dataInfo = {\n              class_id: btn.Cls_ID,\n              class_name: '',\n              obj_id: objID\n            };\n            // console.log(dataInfo);\n            $this.$store.dispatch('dataObjDel', dataInfo).then(function (ret) {\n              // console.log(ret);\n              if (ret.err_code == 0) {\n                //鎵ц鍚庡鐞嗕簨浠禱n                $this.AfterProcess_Event(btn.clsId, btm.AfterProcess_Event, enviroment);\n                //娓呴櫎褰撳墠鍒楄〃鏁版嵁\n                $this.detail1StyleDefList.forEach(function (ele, index) {\n                  if (ele.form.objId == objID) {\n                    $this.detail1StyleDefList.splice(index, 1);\n                  }\n                });\n                uni.showModal({\n                  title: _this13.translateSys(\"tip\"),\n                  content: _this13.translate(\"delete_success\"),\n                  showCancel: false,\n                  confirmText: _this13.translateSys(\"cancel\")\n                });\n              } else {\n                uni.showModal({\n                  title: _this13.translateSys(\"error\") + \"6.1\",\n                  content: ret.err_msg,\n                  showCancel: false,\n                  confirmText: _this13.translateSys(\"cancel\")\n                });\n              }\n            }).catch(function (ex) {\n              // console.log(ex);\n              uni.showModal({\n                title: _this13.translateSys(\"error\") + \"6\",\n                content: ex.errMsg,\n                showCancel: false,\n                confirmText: _this13.translateSys(\"cancel\")\n              });\n            });\n          } else if (res.cancel) {}\n        }\n      });\n    },\n    //鎵ц浜嬩欢\n    TriggerEvent: function TriggerEvent(btn, style, enviroment) {\n      var _this14 = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee20() {\n        var obj_attr, dataInfo, tip;\n        return _regenerator.default.wrap(function _callee20$(_context20) {\n          while (1) {\n            switch (_context20.prev = _context20.next) {\n              case 0:\n                //鎵ц瑙﹀彂浜嬩欢\n                try {\n                  obj_attr = {\n                    S_ID: _this14.styledef.form.objId\n                  };\n                  style.form.attrs.forEach(function (attr) {\n                    obj_attr[attr.name] = attr.value;\n                  });\n                  if (!_this14.ListPageHtml_Show.event.id) {\n                    //鍒ゆ柇娌℃湁HTML椤甸潰浜嬩欢\n                    // console.log(this.detail2_styledef);\n                    _this14.detail2_styledef.form.items.forEach( /*#__PURE__*/function () {\n                      var _ref7 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee19(ele, index) {\n                        return _regenerator.default.wrap(function _callee19$(_context19) {\n                          while (1) {\n                            switch (_context19.prev = _context19.next) {\n                              case 0:\n                                if (ele.name != \"Layout\") {\n                                  if (!obj_attr[ele.fieldId]) {\n                                    obj_attr[ele.fieldId] = ele.value;\n                                  }\n                                } else if (ele.name == \"Layout\") {\n                                  ele.setting.colList.forEach( /*#__PURE__*/function () {\n                                    var _ref8 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee18(col, key) {\n                                      return _regenerator.default.wrap(function _callee18$(_context18) {\n                                        while (1) {\n                                          switch (_context18.prev = _context18.next) {\n                                            case 0:\n                                              if (col) {\n                                                if (!obj_attr[col.fieldId]) {\n                                                  obj_attr[col.fieldId] = col.value;\n                                                }\n                                              }\n                                            case 1:\n                                            case \"end\":\n                                              return _context18.stop();\n                                          }\n                                        }\n                                      }, _callee18);\n                                    }));\n                                    return function (_x13, _x14) {\n                                      return _ref8.apply(this, arguments);\n                                    };\n                                  }());\n                                }\n                              case 1:\n                              case \"end\":\n                                return _context19.stop();\n                            }\n                          }\n                        }, _callee19);\n                      }));\n                      return function (_x11, _x12) {\n                        return _ref7.apply(this, arguments);\n                      };\n                    }());\n                  }\n                  dataInfo = {\n                    ed_type: 0,\n                    start_transaction: true,\n                    class_id: btn.clsId,\n                    event_id: btn.event.id,\n                    data_obj_id: _this14.styledef.form.objId,\n                    obj_attr: obj_attr\n                  };\n                  _this14.$store.dispatch('runCustomEvent', dataInfo).then(function (ret) {\n                    // console.log(ret);\n                    if (ret.err_code == 0) {\n                      var result = ret.result;\n                      if (result.ret != 0) {\n                        var tip = result.err_info ? typeof result.err_info == 'string' ? result.err_info : result.err_info.join('<br/>') : '';\n                        if (result.ret == 801) {\n                          if (_this14.param.Only_Script_Error) {\n                            var pos = tip.indexOf(\"锛歕");\n                            if (pos > -1) tip = tip.substring(pos + 1);\n                          }\n                          uni.showModal({\n                            title: _this14.translateSys(\"tip\"),\n                            content: tip,\n                            showCancel: false,\n                            confirmText: _this14.translateSys(\"cancel\")\n                          });\n                        } else uni.showModal({\n                          title: _this14.translateSys(\"tip\"),\n                          content: tip + ',' + _this14.translateSys('tip') + ':' + result.ret,\n                          showCancel: false,\n                          confirmText: _this14.translateSys(\"cancel\")\n                        });\n                        return false;\n                      } else {\n                        var tip = result.info ? typeof result.info == 'string' ? result.info : result.info.join('<br/>') : '';\n                        if (tip) uni.showModal({\n                          title: _this14.translateSys(\"tip\"),\n                          content: tip,\n                          showCancel: false,\n                          confirmText: _this14.translateSys(\"cancel\")\n                        });\n                      }\n                    } else {\n                      uni.showModal({\n                        title: _this14.translateSys(\"error\") + \"8\",\n                        content: ret.err_msg,\n                        showCancel: false,\n                        confirmText: _this14.translateSys(\"cancel\")\n                      });\n                    }\n                  }).catch(function (ex) {\n                    // console.log(ex);\n                    uni.showModal({\n                      title: _this14.translateSys(\"error\") + \"8.1\",\n                      content: ex.errMsg,\n                      showCancel: false,\n                      confirmText: _this14.translateSys(\"cancel\")\n                    });\n                  });\n                } catch (ex) {\n                  tip = typeof ex == \"string\" ? ex : ex.message;\n                  uni.showModal({\n                    title: _this14.translateSys(\"error\"),\n                    content: tip,\n                    showCancel: false,\n                    confirmText: _this14.translateSys(\"cancel\")\n                  });\n                  _this14.showError(ex);\n                }\n              case 1:\n              case \"end\":\n                return _context20.stop();\n            }\n          }\n        }, _callee20);\n      }))();\n    },\n    //璺宠浆\n    RelatedFunction: function RelatedFunction(btn, style, enviroment) {\n      var _this15 = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee21() {\n        var _btn$Related_Function, _btn$Related_Function2, _btn$Related_Function3, _btn$Related_Function4, _btn$Related_Function5, _btn$Related_Function6, _btn$Related_Function7;\n        var _btn$Related_Function8, _btn$Related_Function9, _btn$Related_Function10, _btn$Related_Function11, name, $this, json;\n        return _regenerator.default.wrap(function _callee21$(_context21) {\n          while (1) {\n            switch (_context21.prev = _context21.next) {\n              case 0:\n                if (((_btn$Related_Function = btn.Related_Function) === null || _btn$Related_Function === void 0 ? void 0 : _btn$Related_Function.Def_Code) == \"3018\" || ((_btn$Related_Function2 = btn.Related_Function) === null || _btn$Related_Function2 === void 0 ? void 0 : _btn$Related_Function2.Def_Code) == \"3037\" || ((_btn$Related_Function3 = btn.Related_Function) === null || _btn$Related_Function3 === void 0 ? void 0 : _btn$Related_Function3.Def_Code) == \"3200\" || ((_btn$Related_Function4 = btn.Related_Function) === null || _btn$Related_Function4 === void 0 ? void 0 : _btn$Related_Function4.Def_Code) == \"3201\" || ((_btn$Related_Function5 = btn.Related_Function) === null || _btn$Related_Function5 === void 0 ? void 0 : _btn$Related_Function5.Def_Code) == \"5600\" || ((_btn$Related_Function6 = btn.Related_Function) === null || _btn$Related_Function6 === void 0 ? void 0 : _btn$Related_Function6.Def_Code) == \"5601\" || ((_btn$Related_Function7 = btn.Related_Function) === null || _btn$Related_Function7 === void 0 ? void 0 : _btn$Related_Function7.Def_Code) == \"5602\") {\n                  name = (_btn$Related_Function8 = btn.Related_Function) === null || _btn$Related_Function8 === void 0 ? void 0 : _btn$Related_Function8.Def_Code;\n                  if (((_btn$Related_Function9 = btn.Related_Function) === null || _btn$Related_Function9 === void 0 ? void 0 : _btn$Related_Function9.Def_Code) == \"3018\" || ((_btn$Related_Function10 = btn.Related_Function) === null || _btn$Related_Function10 === void 0 ? void 0 : _btn$Related_Function10.Def_Code) == \"3037\") name = ((_btn$Related_Function11 = btn.Related_Function) === null || _btn$Related_Function11 === void 0 ? void 0 : _btn$Related_Function11.Def_Code) + \"_2\";\n                  $this = _this15;\n                  json = {\n                    app_id: appId\n                  };\n                  _this15.$store.dispatch('appGetInfo', json).then(function (success) {\n                    // console.log(success);\n                    if (success.err_code == 0) {\n                      if ((success.result || []).length > 0) {\n                        var app = success.result[0];\n                        var param = \"\";\n                        var appName = app.name || app.list_name.Name;\n                        var paramStr = app.param;\n                        if (paramStr) {\n                          //mobox2鐨刾aram鏄痡son瀛楃涓瞈n                          param = paramStr.replace(/\\\\/g, \"\");\n                          //mobox3鐨刾aram鏄痓ase64瀛楃涓瞈n                          if (!paramStr.includes('\"')) param = _base.default.decode(paramStr);\n                        }\n                        if (!param) {\n                          uni.showModal({\n                            title: _this15.translateSys(\"tip\"),\n                            content: _this15.translate('tip_no_app_param'),\n                            showCancel: false,\n                            confirmText: _this15.translateSys(\"cancel\")\n                          });\n                          return;\n                        }\n                        uni.navigateTo({\n                          url: '../modal/' + name + '?param=' + param + \"&titlename=\" + appName + \"&type=relatedFunction&paramValue=\" + JSON.stringify(style.form),\n                          events: {\n                            relatedFunction: function relatedFunction(data) {\n                              __f__(\"log\", data, \" at pages/modal/3200.vue:1271\");\n                              $this.Refresh();\n                            }\n                          }\n                        });\n                      } else {\n                        uni.showModal({\n                          title: _this15.translateSys(\"error\"),\n                          content: _this15.translate(\"function_not_exist\"),\n                          showCancel: false,\n                          confirmText: _this15.translateSys(\"cancel\")\n                        });\n                      }\n                    } else {\n                      uni.showModal({\n                        title: _this15.translateSys(\"error\"),\n                        content: success.msg,\n                        showCancel: false,\n                        confirmText: _this15.translateSys(\"cancel\")\n                      });\n                    }\n                  }).catch(function (ex) {\n                    // console.log(ex);\n                    uni.showModal({\n                      title: _this15.translateSys(\"error\"),\n                      content: ex.errMsg,\n                      showCancel: false,\n                      confirmText: _this15.translateSys(\"cancel\")\n                    });\n                  });\n                } else {\n                  uni.showModal({\n                    title: _this15.translateSys(\"error\"),\n                    content: _this15.translate(\"cannot_related_function\"),\n                    showCancel: false,\n                    confirmText: _this15.translateSys(\"cancel\")\n                  });\n                }\n              case 1:\n              case \"end\":\n                return _context21.stop();\n            }\n          }\n        }, _callee21);\n      }))();\n    },\n    //鎵ц鍚庡鐞嗕簨浠禱n    AfterProcess_Event: function AfterProcess_Event(clsId, afterProcess_Event, enviroment) {\n      var _this16 = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee22() {\n        var tip;\n        return _regenerator.default.wrap(function _callee22$(_context22) {\n          while (1) {\n            switch (_context22.prev = _context22.next) {\n              case 0:\n                _context22.prev = 0;\n                if (!afterProcess_Event.ID) {\n                  _context22.next = 4;\n                  break;\n                }\n                _context22.next = 4;\n                return _this16.runCustomEvent({\n                  ed_type: 0,\n                  start_transaction: true,\n                  class_id: clsId,\n                  event_id: afterProcess_Event.ID\n                });\n              case 4:\n                _context22.next = 10;\n                break;\n              case 6:\n                _context22.prev = 6;\n                _context22.t0 = _context22[\"catch\"](0);\n                tip = typeof _context22.t0 == \"string\" ? _context22.t0 : _context22.t0.message;\n                uni.showModal({\n                  title: _this16.translateSys(\"error\") + \"7\",\n                  content: tip,\n                  showCancel: false,\n                  confirmText: _this16.translateSys(\"cancel\")\n                });\n              case 10:\n              case \"end\":\n                return _context22.stop();\n            }\n          }\n        }, _callee22, null, [[0, 6]]);\n      }))();\n    },\n    ontap: function ontap(item) {\n      var _this17 = this;\n      //鎵爜鍔熻兘\n      // var $ele = e;\n      //console.log(e.target)\n      getApp().onScan(function (result) {\n        __f__(\"log\", result.decodedata, \" at pages/modal/3200.vue:1338\");\n        item.value = result.decodedata;\n        uni.hideKeyboard();\n        var $this = _this17;\n        __f__(\"log\", item, \" at pages/modal/3200.vue:1343\");\n        if (item.oldvalue != item.value) {\n          item.oldvalue = item.value;\n          var attr = item.fieldId;\n          _this17.head_styledef.form.model[attr] = item.value;\n          var onChangeEvent = item.bind.onChangeEvent; //鍐呭鍙樺寲鍚庝簨浠禱n          var onSuffixClickCallbackEvent = item.bind.onSuffixClickCallbackEvent; //鍚庡浘鏍囩偣鍑讳簨浠禱n          var onSuffixClickEvent = item.bind.onSuffixClickEvent; //鍚庡浘鏍囩偣鍑诲洖璋僜n          var isflag = false;\n          if (onChangeEvent.id) {\n            //鍐呭鍙樺寲鍚庝簨浠禱n            $this.onChange(onChangeEvent);\n          } else {\n            $this.where = '';\n            if (item.value) $this.where = item.fieldId + \" like '%\" + item.value + \"%'\";\n            $this.query_id = '';\n            $this.pageindex = 1;\n            $this.detail1StyleDefList = [];\n            $this.loadDataGetList();\n          }\n          if (item.value) {\n            //绗竴涓緭鍏ユ涓嶄负绌篭n            $this.focusMateria = true; //鍒濆鍖栵紝绗簩涓緭鍏ユfocus灞炴�\n            // setTimeout(function(){\n            // \t$this.focusMateria=true; //绗簩涓緭鍏ユ鑾峰彇鐒︾偣\n            setTimeout(function () {\n              uni.hideKeyboard();\n            }, 1000);\n            // },500);\n          }\n          // if(onSuffixClickCallbackEvent.id){   //鍚庡浘鏍囩偣鍑讳簨浠禱n          //   this.onSuffixClick(onSuffixClickCallbackEvent);\n          // }\n          // if(onSuffixClickEvent.id){   //鍚庡浘鏍囩偣鍑诲洖璋僜n          //   this.onSuffixClickCallback(onSuffixClickEvent);\n          // }\n        }\n      });\n    },\n    onEnterChange: function onEnterChange(item) {\n      //鍥炶溅锛岀偣鍑绘寜閽紝鍙栨秷鑺傜偣浜嬩欢\n      // console.log(item);\n      if (item.oldvalue != item.value) {\n        item.oldvalue = item.value;\n        var attr = item.fieldId;\n        this.head_styledef.form.model[attr] = item.value;\n        var onChangeEvent = item.bind.onChangeEvent; //鍐呭鍙樺寲鍚庝簨浠禱n        var onSuffixClickCallbackEvent = item.bind.onSuffixClickCallbackEvent; //鍚庡浘鏍囩偣鍑讳簨浠禱n        var onSuffixClickEvent = item.bind.onSuffixClickEvent; //鍚庡浘鏍囩偣鍑诲洖璋僜n        var isflag = false;\n        if (onChangeEvent.id) {\n          //鍐呭鍙樺寲鍚庝簨浠禱n          this.onChange(onChangeEvent);\n        } else {\n          this.where = '';\n          if (item.value) this.where = item.fieldId + \" like '%\" + item.value + \"%'\";\n          this.query_id = '';\n          this.pageindex = 1;\n          this.detail1StyleDefList = [];\n          this.loadDataGetList();\n        }\n        // if(onSuffixClickCallbackEvent.id){   //鍚庡浘鏍囩偣鍑讳簨浠禱n        //   this.onSuffixClick(onSuffixClickCallbackEvent);\n        // }\n        // if(onSuffixClickEvent.id){   //鍚庡浘鏍囩偣鍑诲洖璋僜n        //   this.onSuffixClickCallback(onSuffixClickEvent);\n        // }\n      }\n    },\n    // 鍐呭鍙樺寲鍚庝簨浠禱n    onChange: function onChange(event) {\n      var _this18 = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee25() {\n        var obj_attr, input_param, $this, dataInfo, tip;\n        return _regenerator.default.wrap(function _callee25$(_context25) {\n          while (1) {\n            switch (_context25.prev = _context25.next) {\n              case 0:\n                try {\n                  if (event.id) {\n                    obj_attr = _this18.head_styledef.form.model; // console.log(obj_attr);\n                    input_param = _base.default.encode(JSON.stringify(Object.keys(obj_attr).map(function (a) {\n                      return {\n                        attr: a,\n                        value: obj_attr[a] || \"\"\n                      };\n                    })));\n                    $this = _this18;\n                    dataInfo = {\n                      ed_type: 0,\n                      start_transaction: true,\n                      class_id: _this18.$data.head_styledef.form.clsId,\n                      class_name: '',\n                      event_id: event.id,\n                      event_name: '',\n                      data_obj_id: '',\n                      obj_attr: obj_attr,\n                      prj_id: '',\n                      ref_cls_id: '',\n                      rel_obj_id: '',\n                      user_login: '',\n                      data_json: '',\n                      compose_info: '',\n                      ext_info: '',\n                      global_attr: '',\n                      input_param: input_param\n                    };\n                    _this18.$store.dispatch('runCustomEvent', dataInfo).then(function (ret) {\n                      // console.log(ret);\n                      if (ret.err_code == 0) {\n                        var result = ret.result;\n                        if (result.ret != 0) {\n                          var tip = result.err_info ? typeof result.err_info == 'string' ? result.err_info : result.err_info.join('<br/>') : '';\n                          if (result.ret == 801) {\n                            if (_this18.param.Only_Script_Error) {\n                              var pos = tip.indexOf(\"锛歕");\n                              if (pos > -1) tip = tip.substring(pos + 1);\n                            }\n                            uni.showModal({\n                              title: _this18.translateSys(\"tip\"),\n                              content: tip,\n                              showCancel: false,\n                              confirmText: _this18.translateSys(\"cancel\")\n                            });\n                          } else uni.showModal({\n                            title: _this18.translateSys(\"tip\"),\n                            content: tip + ',' + _this18.translateSys('tip') + ':' + result.ret,\n                            showCancel: false,\n                            confirmText: _this18.translateSys(\"cancel\")\n                          });\n                          return false;\n                        } else {\n                          var tip = result.info ? typeof result.info == 'string' ? result.info : result.info.join('<br/>') : '';\n                          if (tip) uni.showModal({\n                            title: _this18.translateSys(\"tip\"),\n                            content: tip,\n                            showCancel: false,\n                            confirmText: _this18.translateSys(\"cancel\")\n                          });\n                          if (result.result_type == 0 && result.action) {\n                            result.action.forEach(function (item) {\n                              if (item.action_type == \"set_dlg_attr\") {\n                                // value = {\"attr\":\"xxx\", \"value\":\"xxx\"}\n                                var data = item.value;\n                                $this.$data.head_styledef.form.items.forEach( /*#__PURE__*/function () {\n                                  var _ref9 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee24(ele, index) {\n                                    return _regenerator.default.wrap(function _callee24$(_context24) {\n                                      while (1) {\n                                        switch (_context24.prev = _context24.next) {\n                                          case 0:\n                                            data.forEach( /*#__PURE__*/function () {\n                                              var _ref10 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee23(ele2, index) {\n                                                return _regenerator.default.wrap(function _callee23$(_context23) {\n                                                  while (1) {\n                                                    switch (_context23.prev = _context23.next) {\n                                                      case 0:\n                                                        if (ele.fieldId == ele2.attr) {\n                                                          ele.value = ele2.value;\n                                                        }\n                                                      case 1:\n                                                      case \"end\":\n                                                        return _context23.stop();\n                                                    }\n                                                  }\n                                                }, _callee23);\n                                              }));\n                                              return function (_x17, _x18) {\n                                                return _ref10.apply(this, arguments);\n                                              };\n                                            }());\n                                          case 1:\n                                          case \"end\":\n                                            return _context24.stop();\n                                        }\n                                      }\n                                    }, _callee24);\n                                  }));\n                                  return function (_x15, _x16) {\n                                    return _ref9.apply(this, arguments);\n                                  };\n                                }());\n                              }\n                            });\n                          } else {\n                            // this.detail2StyleDefList=[];\n                            if (result.info) {\n                              uni.showModal({\n                                title: _this18.translateSys(\"tip\"),\n                                content: result.info,\n                                showCancel: false,\n                                confirmText: _this18.translateSys(\"cancel\")\n                              });\n                            }\n                          }\n                        }\n                      } else {\n                        uni.showModal({\n                          title: _this18.translateSys(\"error\") + \"8\",\n                          content: ret.err_msg,\n                          showCancel: false,\n                          confirmText: _this18.translateSys(\"cancel\")\n                        });\n                      }\n                    }).catch(function (ex) {\n                      // console.log(ex);\n                      uni.showModal({\n                        title: _this18.translateSys(\"error\") + \"8.1\",\n                        content: ex.errMsg,\n                        showCancel: false,\n                        confirmText: _this18.translateSys(\"cancel\")\n                      });\n                    });\n                  }\n                } catch (ex) {\n                  tip = typeof ex == \"string\" ? ex : ex.message;\n                  uni.showModal({\n                    title: _this18.translateSys(\"error\") + \"8.2\",\n                    content: _this18.translate('execute_after_change_event_failed') + _this18.translateSys(\"comma\") + _this18.translate('reason') + _this18.translateSys(\"colon\") + tip,\n                    showCancel: false,\n                    confirmText: _this18.translateSys(\"cancel\")\n                  });\n                }\n              case 1:\n              case \"end\":\n                return _context25.stop();\n            }\n          }\n        }, _callee25);\n      }))();\n    },\n    //鐐逛腑琛ㄥ崟\n    onPanelClick: function onPanelClick(value) {\n      //鐐瑰嚮闈㈡澘楂樹寒鏄剧ず\n      // console.log(value);\n      this.activelist.forEach(function (ele) {\n        ele.active = false;\n      });\n      this.activelist[value].active = true;\n    },\n    //浜嬩欢澶勭悊\n    runCustomEvent: function runCustomEvent(dataInfo) {\n      var _this19 = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee26() {\n        var $this, tip;\n        return _regenerator.default.wrap(function _callee26$(_context26) {\n          while (1) {\n            switch (_context26.prev = _context26.next) {\n              case 0:\n                try {\n                  $this = _this19;\n                  _this19.$store.dispatch('runCustomEvent', dataInfo).then(function (ret) {\n                    __f__(\"log\", ret, \" at pages/modal/3200.vue:1571\");\n                    if (ret.err_code == 0) {\n                      var result = ret.result;\n                      if (result.ret != 0) {\n                        var tip = result.err_info ? typeof result.err_info == 'string' ? result.err_info : result.err_info.join('<br/>') : '';\n                        if (result.ret == 801) {\n                          if (_this19.param.Only_Script_Error) {\n                            var pos = tip.indexOf(\"锛歕");\n                            if (pos > -1) tip = tip.substring(pos + 1);\n                          }\n                          uni.showModal({\n                            title: _this19.translateSys(\"tip\"),\n                            content: tip,\n                            showCancel: false,\n                            confirmText: _this19.translateSys(\"cancel\")\n                          });\n                        } else uni.showModal({\n                          title: _this19.translateSys(\"tip\"),\n                          content: tip + ',' + _this19.translateSys('tip') + ':' + result.ret,\n                          showCancel: false,\n                          confirmText: _this19.translateSys(\"cancel\")\n                        });\n                        return false;\n                      } else {\n                        var tip = result.info ? typeof result.info == 'string' ? result.info : result.info.join('<br/>') : '';\n                        if (tip) uni.showModal({\n                          title: _this19.translateSys(\"tip\"),\n                          content: tip,\n                          showCancel: false,\n                          confirmText: _this19.translateSys(\"cancel\")\n                        });\n                        if (result.result_type == 0 && result.action) {\n                          result.action.forEach(function (item) {\n                            if (item.action_type == \"goback_to_pre_page\") {\n                              //杩斿洖涓婁竴椤礬n                              var value = item.value;\n                              uni.navigateBack({\n                                delta: 1 //杩斿洖灞傛暟锛�鍒欎笂涓婇〉\n                              });\n                            } else if (item.action_type == \"hidden_button\") {\n                              //闅愯棌鎸夐挳\n                              var value = item.value;\n                              value.forEach(function (btn) {\n                                var index = $this.param.ListPage.Page_Button.findIndex(function (button) {\n                                  return button.ShowName == btn;\n                                });\n                                if (index > -1) $this.param.ListPage.Page_Button.splice(index, 1);\n                              });\n                              // } else if(item.action_type == \"refresh_cur_row\"){ //\n                              // \tvar value = item.value;\n                            } else if (item.action_type == \"set_panel_html\") {\n                              //鏄剧ずHtml椤甸潰\n                              // var value = item.value;\n                              $this.ListHtml_Panel = item.value;\n                              // $this.detail1StyleDefList.forEach((ele,index)=>{\n                              // \tele.ListHtml_Panel = item.value[index];\n                              // });\n                            } else {\n                              uni.showModal({\n                                title: _this19.translateSys(\"tip\"),\n                                content: _this19.translateSys(\"quotation_mark_left\") + item.action_type + _this19.translateSys(\"quotation_mark_right\") + _this19.translate(\"tip_action_unprocessed\"),\n                                showCancel: false,\n                                confirmText: _this19.translateSys(\"cancel\")\n                              });\n                            }\n                          });\n                        } else {\n                          // this.detail2StyleDefList=[];\n                          if (result.info) {\n                            uni.showModal({\n                              title: _this19.translateSys(\"tip\"),\n                              content: result.info,\n                              showCancel: false,\n                              confirmText: _this19.translateSys(\"cancel\")\n                            });\n                          }\n                        }\n                      }\n                    } else {\n                      uni.showModal({\n                        title: _this19.translateSys(\"error\") + \"9\",\n                        content: ret.err_msg,\n                        showCancel: false,\n                        confirmText: _this19.translateSys(\"cancel\")\n                      });\n                    }\n                  }).catch(function (ex) {\n                    // console.log(ex);\n                    uni.showModal({\n                      title: _this19.translateSys(\"error\") + \"9.1\",\n                      content: ex.errMsg,\n                      showCancel: false,\n                      confirmText: _this19.translateSys(\"cancel\")\n                    });\n                  });\n                } catch (ex) {\n                  tip = typeof ex == \"string\" ? ex : ex.message;\n                  uni.showModal({\n                    title: _this19.translateSys(\"error\") + \"9.2\",\n                    content: _this19.translate('execute_event_failed') + _this19.translateSys(\"comma\") + _this19.translate('reason') + _this19.translateSys(\"colon\") + tip,\n                    showCancel: false,\n                    confirmText: _this19.translateSys(\"cancel\")\n                  });\n                }\n              case 1:\n              case \"end\":\n                return _context26.stop();\n            }\n          }\n        }, _callee26);\n      }))();\n    },\n    cancel: function cancel(e) {\n      //鍙栨秷\n      // var eventChannel = this.$scope.eventChannel;\n      // // const eventChannel = this.getOpenerEventChannel();\n      // eventChannel.emit('view_3201',\"\");\n      uni.navigateBack({\n        delta: 1 //杩斿洖灞傛暟锛�鍒欎笂涓婇〉\n      });\n    },\n    /**\n     * 鍙敮鎸乕\"column1='A' or column2='B'\", \"column3='C' and column4='D'\", \"column5='E'\"]杩欑鏍煎紡\n     * {\n     *     \"model\": 0 / 1,\n     *     \"condition\":\n     *     [\n     *         [\n     *             { },\n     *             { },\n     *             { }\n     *         ],\n     *         [\n     *             { }\n     *         ],\n     *         [\n     *             { }\n     *         ]\n     *     ]\n     * }\n     */\n    toWhereBase64String: function toWhereBase64String(list) {\n      if (typeof list == 'string') list = [list];\n      var sql = [];\n      var seps = [' not in', ' in', '<>', '!=', '<=', '>=', '<', '=', '>', ' like'];\n      list.forEach(function (ls) {\n        var where = ls.trim();\n        if (where.startsWith('(') && where.endsWith(')')) where = where.replace(/^\\(/, '').replace(/\\)$/, '');\n        if (where.toLowerCase().includes(' and ')) {\n          // 浜岀骇and鏀惧湪绗竴绾ф暟缁勪腑\n          where.split(/ and /i).forEach(function (li) {\n            var l = li.trim();\n            if (l.startsWith('(') && l.endsWith(')')) l = l.replace(/^\\(/, '').replace(/\\)$/, '');\n            var sep = '';\n            for (var i = 0; i < seps.length; i++) {\n              if (l.toLowerCase().includes(seps[i])) {\n                sep = seps[i];\n                break;\n              }\n            }\n            if (sep) {\n              var _values$, _values$2, _values$3;\n              var values = l.split(new RegExp(sep, 'i'));\n              var field = (_values$ = values[0]) === null || _values$ === void 0 ? void 0 : _values$.trim().replace(/^\\[/, '').replace(/\\]$/, '');\n              var value = '';\n              var op = sep.trim();\n              if ([' in', ' not in'].includes(sep) && (_values$2 = values[1]) !== null && _values$2 !== void 0 && _values$2.toLowerCase().includes('select ') && (_values$3 = values[1]) !== null && _values$3 !== void 0 && _values$3.toLowerCase().includes(' from ')) {\n                value = l.replace(field, '').replace(/^\\s*(in|not in)\\s*/i, '').trim();\n                if (value.startsWith('(') && value.endsWith(')')) value = value.replace(/^\\(/, '').replace(/\\)$/, '').trim();\n              } else {\n                var _values$4;\n                value = (_values$4 = values[1]) === null || _values$4 === void 0 ? void 0 : _values$4.trim().replace(/^\\'/, '').replace(/\\'$/, '');\n                if (['in', 'not in'].includes(op)) {\n                  value = value.replace(/^\\(/, '').replace(/\\)$/, '');\n                  value = value.split(',').map(function (v) {\n                    return v.trim().replace(/^\\'/, '').replace(/\\'$/, '');\n                  });\n                }\n              }\n              sql.push([{\n                field: field,\n                value: value,\n                op: op\n              }]);\n            }\n          });\n        } else if (where.toLowerCase().includes(' or ')) {\n          // 浜岀骇or鏀惧湪绗簩绾у悓涓�粍鏁扮粍涓璡n          var s = [];\n          where.split(/ or /i).forEach(function (li) {\n            var l = li.trim();\n            if (l.startsWith('(') && l.endsWith(')')) l = l.replace(/^\\(/, '').replace(/\\)$/, '');\n            var sep = '';\n            for (var i = 0; i < seps.length; i++) {\n              if (l.toLowerCase().includes(seps[i])) {\n                sep = seps[i];\n                break;\n              }\n            }\n            if (sep) {\n              var _values$5, _values$6, _values$7;\n              var values = l.split(new RegExp(sep, 'i'));\n              var field = (_values$5 = values[0]) === null || _values$5 === void 0 ? void 0 : _values$5.trim().replace(/^\\[/, '').replace(/\\]$/, '');\n              var value = '';\n              var op = sep.trim();\n              if ([' in', ' not in'].includes(sep) && (_values$6 = values[1]) !== null && _values$6 !== void 0 && _values$6.toLowerCase().includes('select ') && (_values$7 = values[1]) !== null && _values$7 !== void 0 && _values$7.toLowerCase().includes(' from ')) {\n                value = l.replace(field, '').replace(/^\\s*(in|not in)\\s*/i, '').trim();\n                if (value.startsWith('(') && value.endsWith(')')) value = value.replace(/^\\(/, '').replace(/\\)$/, '').trim();\n              } else {\n                var _values$8;\n                value = (_values$8 = values[1]) === null || _values$8 === void 0 ? void 0 : _values$8.trim().replace(/^\\'/, '').replace(/\\'$/, '');\n                if (['in', 'not in'].includes(op)) {\n                  value = value.replace(/^\\(/, '').replace(/\\)$/, '');\n                  value = value.split(',').map(function (v) {\n                    return v.trim().replace(/^\\'/, '').replace(/\\'$/, '');\n                  });\n                }\n              }\n              sql.push([{\n                field: field,\n                value: value,\n                op: op\n              }]);\n            }\n          });\n          sql.push(s);\n        } else {\n          var li = where;\n          // 鍗曚竴鏌ヨ鏉′欢鐩存帴鏀惧湪绗竴绾ф暟缁勪腑\n          var l = li.trim();\n          if (l.startsWith('(') && l.endsWith(')')) l = l.replace(/^\\(/, '').replace(/\\)$/, '');\n          var sep = '';\n          for (var i = 0; i < seps.length; i++) {\n            if (l.toLowerCase().includes(seps[i])) {\n              sep = seps[i];\n              break;\n            }\n          }\n          if (sep) {\n            var _values$9, _values$10, _values$11;\n            var values = l.split(new RegExp(sep, 'i'));\n            var field = (_values$9 = values[0]) === null || _values$9 === void 0 ? void 0 : _values$9.trim().replace(/^\\[/, '').replace(/\\]$/, '');\n            var value = '';\n            var op = sep.trim();\n            if ([' in', ' not in'].includes(sep) && (_values$10 = values[1]) !== null && _values$10 !== void 0 && _values$10.toLowerCase().includes('select ') && (_values$11 = values[1]) !== null && _values$11 !== void 0 && _values$11.toLowerCase().includes(' from ')) {\n              value = l.replace(field, '').replace(/^\\s*(in|not in)\\s*/i, '').trim();\n              if (value.startsWith('(') && value.endsWith(')')) value = value.replace(/^\\(/, '').replace(/\\)$/, '').trim();\n            } else {\n              var _values$12;\n              value = (_values$12 = values[1]) === null || _values$12 === void 0 ? void 0 : _values$12.trim().replace(/^\\'/, '').replace(/\\'$/, '');\n              if (['in', 'not in'].includes(op)) {\n                value = value.replace(/^\\(/, '').replace(/\\)$/, '');\n                value = value.split(',').map(function (v) {\n                  return v.trim().replace(/^\\'/, '').replace(/\\'$/, '');\n                });\n              }\n            }\n            sql.push([{\n              field: field,\n              value: value,\n              op: op\n            }]);\n          }\n        }\n      });\n      if (sql.length > 0) return _base.default.encode(JSON.stringify({\n        model: 1,\n        condition: sql\n      }));else return '';\n    },\n    translate: function translate(t) {\n      if (typeof this.$t == \"function\") return this.$t(\"page.\".concat(t));else return t;\n    },\n    translateSys: function translateSys(t) {\n      if (typeof this.$t == \"function\") return this.$t(\"sys.\".concat(t));else return t;\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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vcGFnZXMvbW9kYWwvMzIwMC52dWUiXSwibmFtZXMiOlsibW9kdWxlcyIsIkJhc2U2NCIsIm9uTmF2aWdhdGlvbkJhckJ1dHRvblRhcCIsIm9uQmFja1ByZXNzIiwiZXZlbnRDaGFubmVsIiwiZGF0YSIsInRpdGxlIiwiaXNGaWx0ZXIiLCJwYXJhbSIsImZvY3VzTWF0ZXJpYSIsInN0eWxlZGVmIiwiaGVhZF9zdHlsZWRlZiIsImZvcm0iLCJpdGVtcyIsImRldGFpbDFfc3R5bGVkZWYiLCJkZXRhaWwxU3R5bGVEZWZMaXN0IiwiZGV0YWlsMl9zdHlsZWRlZiIsImRldGFpbDJTdHlsZURlZkxpc3QiLCJhY3RpdmVfaWQiLCJhY3RpdmVsaXN0Iiwid2hlcmUiLCJ3aGVyZXMiLCJvcmRlcmJ5IiwicXVlcnlfaWQiLCJwYWdlaW5kZXgiLCJwYWdlX3NpemUiLCJwYWdlX2NvdW50Iiwic2Nyb2xsVG9wIiwib2xkIiwiaXNTY3JvbGwiLCJMaXN0SHRtbF9QYW5lbCIsIkxpc3RQYWdlSHRtbF9TaG93IiwibmFtZSIsImV2ZW50IiwiaWQiLCJvbkxvYWQiLCJ1bmkiLCJtZXRob2RzIiwic2V0RGF0YSIsIk9iamVjdCIsImtleXMiLCJ2YWwiLCJ0aGF0IiwiaW5pdGlhbCIsImF0dHJzIiwiZWxlIiwiaW5kZXgyIiwiY29sIiwic2Nyb2xsdG9sb3dlciIsInNjcm9sbCIsIkhlYWRfVUlTdHlsZUdldEluZm8iLCIkdGhpcyIsImRhdGFJbmZvIiwiY2xhc3NfaWQiLCJ1aV9zdHlsZV9pZCIsInN0eWxlX2RlZiIsImNvbnRlbnQiLCJzaG93Q2FuY2VsIiwiY29uZmlybVRleHQiLCJEZXRhaWwxX1VJc3R5bGVHZXRJbmZvIiwiSHRtbF9VSXN0eWxlR2V0SW5mbyIsIkRpY3RHZXRJbmZvIiwiZGljdF9pZCIsImRpY3RfbmFtZSIsImxpc3QiLCJpdGVtTmFtZSIsInN1Y2Nlc3MiLCJ0ZXh0IiwidmFsdWUiLCJhdHRyIiwib25TZWFyQ2hhbmdlIiwiZWRfdHlwZSIsInN0YXJ0X3RyYW5zYWN0aW9uIiwiZXZlbnRfaWQiLCJlcnJfaW5mbyIsInJldCIsInJlc3VsdCIsInRpcCIsImxvYWREYXRhR2V0TGlzdCIsIm1hc2siLCJjb25kaXRpb24iLCJwcmpfcmVsX3R5cGUiLCJvcmRlcl9ieSIsInBhZ2UiLCJvYmoiLCJpbmZvIiwiU2VsQnV0X0NoZWNrZWQiLCJkZXRhaWxTdHlsZSIsInJlcGxhY2UiLCJhY3RpdmUiLCJqc29ubGlzdCIsImV2ZW50aWQiLCJkYXRhX2pzb24iLCJzZXRUaW1lb3V0IiwiUmVmcmVzaCIsIm9uVmlld1BhZ2VDbGljayIsInVybCIsImV2ZW50cyIsIkV4aXRWaWV3RXZlbnQiLCJvYmpfYXR0ciIsImRhdGFfb2JqX2lkIiwiaW5wdXRfcGFyYW0iLCJvbkJ0bkNsaWNrIiwiYWN0aW9uU2hlZXRUYXAiLCJpdGVtbGlzdCIsIml0ZW1MaXN0Iiwib25CdXR0b25DbGlja2VkIiwic3R5bGUiLCJlbnZpcm9tZW50IiwiYnV0dG9uIiwiYnV0dG9uX25hbWUiLCJjbHNfaWQiLCJmdW5jdGlvbiIsIm1hc3RlciIsInNob3dBZGRTbWFsbERpYWxvZyIsIkFkZF9CdG5OYW1lIiwiRWRpdERsZ01vZGUiLCJjbHNpZCIsImNsc19uYW1lIiwiRWRpdF9kbGciLCJhZGREYXRhT2JqIiwiRGVsZXRlT2JqIiwiY2xhc3NfbmFtZSIsIm9ial9pZCIsIlRyaWdnZXJFdmVudCIsIlNfSUQiLCJSZWxhdGVkRnVuY3Rpb24iLCJqc29uIiwiYXBwX2lkIiwiTmFtZSIsImFwcE5hbWUiLCJyZWxhdGVkRnVuY3Rpb24iLCJBZnRlclByb2Nlc3NfRXZlbnQiLCJhZnRlclByb2Nlc3NfRXZlbnQiLCJvbnRhcCIsImdldEFwcCIsIml0ZW0iLCJvblN1ZmZpeENsaWNrQ2FsbGJhY2tFdmVudCIsIm9uRW50ZXJDaGFuZ2UiLCJvbkNoYW5nZSIsIkpTT04iLCJldmVudF9uYW1lIiwicHJqX2lkIiwicmVmX2Nsc19pZCIsInJlbF9vYmpfaWQiLCJ1c2VyX2xvZ2luIiwiY29tcG9zZV9pbmZvIiwiZXh0X2luZm8iLCJnbG9iYWxfYXR0ciIsImZvckVhY2giLCJpbmRleCIsImZpZWxkSWQiLCJlbGUyIiwidHJhbnNsYXRlU3lzIiwib25QYW5lbENsaWNrIiwicnVuQ3VzdG9tRXZlbnQiLCJkZWx0YSIsIkxpc3RQYWdlIiwiUGFnZV9CdXR0b24iLCJmaW5kSW5kZXgiLCJTaG93TmFtZSIsImJ0biIsImFjdGlvbl90eXBlIiwidHJhbnNsYXRlIiwiY2FuY2VsIiwidG9XaGVyZUJhc2U2NFN0cmluZyIsInNlcCIsInRvTG93ZXJDYXNlIiwiaW5jbHVkZXMiLCJzcWwiLCJmaWVsZCIsIm9wIiwidmFsdWVzIiwidHJpbSIsIm1vZGVsIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUF5TUE7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O2VBQ0E7RUFDQUE7SUFDQUM7RUFDQTtFQUNBQztJQUNBO0lBQ0E7SUFDQTtJQUNBLG1CQUNBLDJCQUVBO0VBQ0E7RUFDQUM7SUFDQTtJQUNBO0lBQ0E7SUFDQUM7SUFDQTtJQUNBO0lBQ0E7SUFDQTtFQUNBO0VBQ0FDO0lBQ0E7TUFDQUM7TUFDQUM7TUFDQUM7TUFDQUM7TUFDQUM7TUFDQUM7UUFDQUM7VUFDQUM7UUFDQTtNQUNBO01BQ0FDO01BQ0FDO01BQ0FDO01BQ0FDO01BQ0FKO01BQ0FLO01BQ0FDO01BQ0FDO01BQ0FDO01BQ0FDO01BQ0FDO01BQ0FDO01BQ0FDO01BQ0FDO01BQ0FDO01BQ0FDO1FBQ0FEO01BQ0E7TUFDQUU7TUFDQTtNQUNBQztNQUNBQztRQUNBQztRQUNBQztVQUNBQztVQUNBRjtRQUNBO01BQ0E7SUFDQTtFQUNB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dCI6WyI8dGVtcGxhdGU+XHJcblx0PHZpZXcgY2xhc3M9XCJ1bmktcGFnZS1tb2RhbC0zMjAwXCI+XHJcblx0XHQ8dmlldyBjbGFzcz1cInYtY29udGVudFwiPlxyXG5cdFx0XHQ8IS0tIOihqOWktOagt+W8jyAtLT5cclxuXHRcdFx0PHZpZXcgY2xhc3M9XCJ2LWhlYWRTdHlsZVwiIHYtZm9yPVwiKGl0ZW0saW5kZXgpIGluIGhlYWRfc3R5bGVkZWYuZm9ybS5pdGVtc1wiIHYtaWY9XCJpc0ZpbHRlcj09dHJ1ZVwiPlxyXG5cdFx0XHRcdDx0ZXh0IGNsYXNzPVwidHh0X3RpdGxlXCIgOnN0eWxlPVwieyd3aWR0aCc6aXRlbS5sYWJlbFdpZHRoKydweCd9XCI+e3tpdGVtLmxhYmVsfX3vvJo8L3RleHQ+XHJcblx0XHRcdFx0PCEtLSDkuIvmi4nmoYYt5Y2V6YCJIGl0ZW0udXNlRGljdD9pdGVtLmRpY3Q6aXRlbS5zZWxlY3Rpb25zLS0+XHJcblx0XHRcdFx0PHVuaS1kYXRhLXNlbGVjdCBpZD1cImR2X3NlbGVjdFwiIHYtaWY9XCJpdGVtLm5hbWU9PSdTZWxlY3QnXCIgOmNsYXNzPVwiaXRlbS5kaXNhYmxlZD8naW5wdXQtZGlzYWJsZWQnOicnXCJcclxuXHRcdFx0XHRcdHYtbW9kZWw9XCJpdGVtLnZhbHVlXCIgOmxvY2FsZGF0YT1cIml0ZW0uZGljdFwiIEBjaGFuZ2U9XCJvbkNoYW5nZShpdGVtKVwiIDpkaXNhYmxlZD1cIml0ZW0uZGlzYWJsZWRcIlxyXG5cdFx0XHRcdFx0OmNsZWFyPVwiZmFsc2VcIj48L3VuaS1kYXRhLXNlbGVjdD5cclxuXHRcdFx0XHQ8dmlldyBjbGFzcz1cImlucHV0LXdyYXBwZXJcIiB2LWlmPVwiaXRlbS5uYW1lPT0nSW5wdXQnIHx8IGl0ZW0ubmFtZT09J0lucHV0TnVtYmVyJ1wiPlxyXG5cdFx0XHRcdFx0PHRleHQgdi1pZj1cIml0ZW0uc2V0dGluZy5wcmVmaXhcIiBjbGFzcz1cInVuaS1pY29uXCIgOmNsYXNzPVwiW2l0ZW0uc2V0dGluZy5wcmVmaXhdXCJcclxuXHRcdFx0XHRcdFx0QGNsaWNrPVwib25FbnRlckNoYW5nZShpdGVtKVwiPiYjeGU1Njg7PC90ZXh0PlxyXG5cdFx0XHRcdFx0PGlucHV0IGNsYXNzPVwidW5pLWlucHV0XCIgOmNsYXNzPVwiaXRlbS5kaXNhYmxlZD8naW5wdXQtZGlzYWJsZWQnOicnXCJcclxuXHRcdFx0XHRcdFx0OnR5cGU9XCJpdGVtLm5hbWU9PSdJbnB1dCc/J3RleHQnOidudW1iZXInXCIgdi1tb2RlbD1cIml0ZW0udmFsdWVcIiA6ZGlzYWJsZWQ9XCJpdGVtLmRpc2FibGVkXCJcclxuXHRcdFx0XHRcdFx0OnBsYWNlaG9sZGVyPVwiaXRlbS5wbGFjZWhvbGRlclwiXHJcblx0XHRcdFx0XHRcdDpzdHlsZT1cInsnd2lkdGgnOml0ZW0uc2V0dGluZy5wcmVmaXggJiYgaXRlbS5zZXR0aW5nLnN1ZmZpeD8nNzglJzppdGVtLnNldHRpbmcucHJlZml4IHx8IGl0ZW0uc2V0dGluZy5zdWZmaXg/Jzg3JSc6Jzk2JSd9XCJcclxuXHRcdFx0XHRcdFx0OmZvY3VzPVwiZm9jdXNNYXRlcmlhXCIgQGZvY3VzPVwib250YXAoaXRlbSlcIiBAa2V5dXAuZW50ZXI9XCJvbkVudGVyQ2hhbmdlKGl0ZW0pXCJcclxuXHRcdFx0XHRcdFx0QGJsdXI9XCJvbkVudGVyQ2hhbmdlKGl0ZW0pXCIgLz5cclxuXHRcdFx0XHRcdDx0ZXh0IHYtaWY9XCJpdGVtLnNldHRpbmcuc3VmZml4XCIgY2xhc3M9XCJ1bmktaWNvblwiIDpjbGFzcz1cIltpdGVtLnNldHRpbmcuc3VmZml4XVwiXHJcblx0XHRcdFx0XHRcdEBjbGljaz1cIm9uRW50ZXJDaGFuZ2UoaXRlbSlcIj4mI3hlNTY4OzwvdGV4dD5cclxuXHRcdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdDwvdmlldz5cclxuXHJcblx0XHRcdDxzY3JvbGwtdmlldyA6c2Nyb2xsLXRvcD1cInNjcm9sbFRvcFwiIDpzY3JvbGwteT1cInRydWVcIiBjbGFzcz1cInNjcm9sbC1ZXCIgQHNjcm9sbHRvbG93ZXI9XCJzY3JvbGx0b2xvd2VyXCJcclxuXHRcdFx0XHRAc2Nyb2xsPVwic2Nyb2xsXCI+XHJcblx0XHRcdFx0PHZpZXcgY2xhc3M9XCJ2aWV3LWNvbnRlbnRcIiBpZD1cInRhYnBhbmVsXCI+XHJcblx0XHRcdFx0XHQ8dmlldyBjbGFzcz1cImR2LXBhbmVsIGR2LXBhbmVsLWJrY29sb3JcIiB2LWZvcj1cIihzdHlsZSxpaSkgaW4gZGV0YWlsMVN0eWxlRGVmTGlzdFwiXHJcblx0XHRcdFx0XHRcdEBjbGljaz1cIm9uUGFuZWxDbGljayhpaSlcIiA6aWQ9XCIncGFuZWwnK3N0eWxlLmZvcm0uaHRtbG9iaklkXCJcclxuXHRcdFx0XHRcdFx0OmNsYXNzPVwiYWN0aXZlbGlzdFtpaV0uYWN0aXZlPT10cnVlPydiay1hY3RpdmUnOicnXCI+XHJcblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJkdi1wYW5lbC1idXR0b25cIiB2LWlmPVwicGFyYW0uTGlzdFBhZ2UuQ2hlY2tCb3g9PXRydWVcIj5cclxuXHRcdFx0XHRcdFx0XHQ8Y2hlY2tib3gtZ3JvdXA+XHJcblx0XHRcdFx0XHRcdFx0XHQ8bGFiZWw+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDxjaGVja2JveCA6dmFsdWU9XCJzdHlsZS5TZWxCdXRfQ2hlY2tlZFwiIDpjaGVja2VkPVwic3R5bGUuU2VsQnV0X0NoZWNrZWRcIiAvPlxyXG5cdFx0XHRcdFx0XHRcdFx0PC9sYWJlbD5cclxuXHRcdFx0XHRcdFx0XHQ8L2NoZWNrYm94LWdyb3VwPlxyXG5cdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdFx0PCEtLSBIVE1M6aG16Z2i57G75Z6L5pi+56S6IC0tPlxyXG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiZHYtbGlzdEh0bWwtUGFuZWxcIiB2LWlmPVwiTGlzdEh0bWxfUGFuZWxcIiB2LWh0bWw9XCJMaXN0SHRtbF9QYW5lbFtpaV1cIiA6c3R5bGU9XCJwYXJhbS5MaXN0UGFnZS5DaGVja0JveD09dHJ1ZSAmJiBwYXJhbS5MaXN0UGFnZS5DbGlja19WaWV3PT10cnVlPyd3aWR0aDo4NSU7JzpcclxuXHRcdFx0XHQgIHBhcmFtLkxpc3RQYWdlLkNoZWNrQm94PT1mYWxzZSAmJiBwYXJhbS5MaXN0UGFnZS5DbGlja19WaWV3PT10cnVlPyd3aWR0aDo5MSU7JzpcclxuXHRcdFx0XHQgIHBhcmFtLkxpc3RQYWdlLkNoZWNrQm94PT10cnVlICYmIHBhcmFtLkxpc3RQYWdlLkNsaWNrX1ZpZXc9PWZhbHNlPyd3aWR0aDo4OCU7Jzond2lkdGg6MTAwJTsnXCI+XHJcblxyXG5cdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImR2LXBhbmVsLWlucHV0XCIgdi1pZj1cIiFMaXN0SHRtbF9QYW5lbFwiIDpzdHlsZT1cInBhcmFtLkxpc3RQYWdlLkNoZWNrQm94PT10cnVlICYmIHBhcmFtLkxpc3RQYWdlLkNsaWNrX1ZpZXc9PXRydWU/J3dpZHRoOjg1JTsnOlxyXG5cdFx0XHRcdCAgcGFyYW0uTGlzdFBhZ2UuQ2hlY2tCb3g9PWZhbHNlICYmIHBhcmFtLkxpc3RQYWdlLkNsaWNrX1ZpZXc9PXRydWU/J3dpZHRoOjkxJTsnOlxyXG5cdFx0XHRcdCAgcGFyYW0uTGlzdFBhZ2UuQ2hlY2tCb3g9PXRydWUgJiYgcGFyYW0uTGlzdFBhZ2UuQ2xpY2tfVmlldz09ZmFsc2U/J3dpZHRoOjg4JTsnOid3aWR0aDoxMDAlOydcIj5cclxuXHRcdFx0XHRcdFx0XHQ8ZGl2IHYtZm9yPVwiKGl0ZW0saW5kZXgpIGluIHN0eWxlLmZvcm0uaXRlbXNcIj5cclxuXHRcdFx0XHRcdFx0XHRcdDwhLS0g5pmu6YCa5biD5bGAIC0tPlxyXG5cdFx0XHRcdFx0XHRcdFx0PHZpZXcgdi1pZj1cIml0ZW0ubmFtZSE9J0xheW91dCdcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PHRleHQgY2xhc3M9XCJ0eHRfdGl0bGVcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDpzdHlsZT1cInsnd2lkdGgnOml0ZW0ubGFiZWxXaWR0aCsncHgnfVwiPnt7aXRlbS5sYWJlbH1977yaPC90ZXh0PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cImZvcm0taXRlbS1zcGFuXCIgdi1pZj1cIml0ZW0uZGlzYWJsZWRcIj57e2l0ZW0udmFsdWV9fTwvc3Bhbj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PCEtLSDmlofmnKzmoYYv5pWw5a2X5qGGIC0tPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8dmlldyBjbGFzcz1cImR2X2lucHV0XCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2LWlmPVwiKGl0ZW0ubmFtZT09J0lucHV0JyB8fCBpdGVtLm5hbWU9PSdJbnB1dE51bWJlcicpICYmICFpdGVtLmRpc2FibGVkXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PHRleHQgdi1pZj1cIml0ZW0uc2V0dGluZy5wcmVmaXhcIiBjbGFzcz1cInVuaS1pY29uXCIgOmNsYXNzPVwiW2l0ZW0uc2V0dGluZy5wcmVmaXhdXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdEBjaGFuZ2U9XCJvbkNoYW5nZShpdGVtKVwiPiYjeGU1Njg7PC90ZXh0PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxpbnB1dCBjbGFzcz1cInVuaS1pbnB1dFwiIDpjbGFzcz1cIml0ZW0uZGlzYWJsZWQ/J2lucHV0LWRpc2FibGVkJzonJ1wiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ6dHlwZT1cIml0ZW0ubmFtZT09J0lucHV0Jz8ndGV4dCc6aXRlbS5uYW1lPT0nSW5wdXROdW1iZXInPydudW1iZXInOid0ZXh0J1wiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2LW1vZGVsPVwiaXRlbS52YWx1ZVwiIDpkaXNhYmxlZD1cIml0ZW0uZGlzYWJsZWRcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0OnBsYWNlaG9sZGVyPVwiaXRlbS5wbGFjZWhvbGRlclwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ6c3R5bGU9XCJ7J3dpZHRoJzppdGVtLnNldHRpbmcucHJlZml4ICYmIGl0ZW0uc2V0dGluZy5zdWZmaXg/Jzc4JSc6aXRlbS5zZXR0aW5nLnByZWZpeCB8fCBpdGVtLnNldHRpbmcuc3VmZml4Pyc4NyUnOic5NiUnfVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ6Zm9jdXM9XCJmb2N1c01hdGVyaWFcIiBAZm9jdXM9XCJvbnRhcChpdGVtKVwiIEBibHVyPVwib25ldmVudChpdGVtKVwiIC8+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PHRleHQgdi1pZj1cIml0ZW0uc2V0dGluZy5zdWZmaXhcIiBjbGFzcz1cInVuaS1pY29uXCIgOmNsYXNzPVwiW2l0ZW0uc2V0dGluZy5zdWZmaXhdXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdEBjbGljaz1cIm9uQ2hhbmdlKGl0ZW0pXCI+JiN4ZTU2ODs8L3RleHQ+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDwvdmlldz5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PCEtLSDkuIvmi4nmoYYt5Y2V6YCJIGl0ZW0udXNlRGljdD9pdGVtLmRpY3Q6aXRlbS5zZWxlY3Rpb25zLS0+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDx1bmktZGF0YS1zZWxlY3QgaWQ9XCJkdl9zZWxlY3RcIiB2LWlmPVwiaXRlbS5uYW1lPT0nU2VsZWN0JyAmJiAhaXRlbS5kaXNhYmxlZFwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0OmNsYXNzPVwiaXRlbS5kaXNhYmxlZD8naW5wdXQtZGlzYWJsZWQnOicnXCIgdi1tb2RlbD1cIml0ZW0udmFsdWVcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDpsb2NhbGRhdGE9XCJpdGVtLmRpY3RcIiBAY2hhbmdlPVwib25DaGFuZ2UoaXRlbSlcIiA6ZGlzYWJsZWQ9XCJpdGVtLmRpc2FibGVkXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ6Y2xlYXI9XCJmYWxzZVwiPjwvdW5pLWRhdGEtc2VsZWN0PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8IS0tIOWkmuihjOaWh+acrCAtLT5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PHZpZXcgY2xhc3M9XCJpbnB1dC13cmFwcGVyXCIgdi1pZj1cIml0ZW0ubmFtZT09J1RleHRhcmVhJyAmJiAhaXRlbS5kaXNhYmxlZFwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZXh0YXJlYSBjbGFzcz1cInVuaS1pbnB1dFwiIDp2YWx1ZT1cIml0ZW0udmFsdWVcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0OmNsYXNzPVwiaXRlbS5kaXNhYmxlZD8naW5wdXQtZGlzYWJsZWQnOicnXCIgOnBsYWNlaG9sZGVyPVwiaXRlbS5wbGFjZWhvbGRlclwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRAYmx1cj1cIm9uTW9kZWxWYWx1ZShpdGVtKVwiIHN0eWxlPVwiaGVpZ2h0OjYwcHg7XCIgOnN0eWxlPVwieyd3aWR0aCc6Jzk2JSd9XCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDpkaXNhYmxlZD1cIml0ZW0uZGlzYWJsZWRcIj48L3RleHRhcmVhPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDwhLS0g5aSN6YCJ5qGGIC0tPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8Y2hlY2tib3gtZ3JvdXAgY2xhc3M9XCJjaGVja19yZW1lbWJlclB3ZFwiIHYtaWY9XCJpdGVtLm5hbWU9PSdDaGVja2JveCdcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDpjbGFzcz1cIml0ZW0uZGlzYWJsZWQ/J2lucHV0LWRpc2FibGVkJzonJ1wiIEBjaGFuZ2U9XCJvbk1vZGVsVmFsdWUoaXRlbSlcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDpkYXRhLWlzY2hlY2s9XCJpdGVtLnZhbHVlXCIgOmRpc2FibGVkPVwiaXRlbS5kaXNhYmxlZFwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0OnN0eWxlPVwieydtYXJnaW4tbGVmdCc6JzEwcnB4J31cIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8bGFiZWw+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8Y2hlY2tib3ggOnZhbHVlPVwiaXRlbS52YWx1ZVwiIDpjaGVja2VkPVwiaXRlbS52YWx1ZVwiIC8+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGV4dD57e2l0ZW0ubGFiZWx9fTwvdGV4dD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2xhYmVsPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8L2NoZWNrYm94LWdyb3VwPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8IS0tIFN3aXRjaOW8gOWFsyAtLT5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PHN3aXRjaCB2LWlmPVwiaXRlbS5uYW1lPT0nU3dpdGNoJ1wiIDpjbGFzcz1cIml0ZW0uZGlzYWJsZWQ/J2lucHV0LWRpc2FibGVkJzonJ1wiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0OmRpc2FibGVkPVwiaXRlbS5kaXNhYmxlZFwiIHYtbW9kZWw9XCJpdGVtLnZhbHVlXCIgQGNoYW5nZT1cIm9uTW9kZWxWYWx1ZShpdGVtKVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0OnN0eWxlPVwieydtYXJnaW4tbGVmdCc6JzEwcnB4J31cIiAvPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8IS0tIOaXpeacn+aXtumXtCAtLT5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PHZpZXcgY2xhc3M9XCJpbnB1dC13cmFwcGVyXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2LWlmPVwiKGl0ZW0ubmFtZT09J1RpbWVQaWNrZXInIHx8IGl0ZW0ubmFtZT09J0RhdGVQaWNrZXInKSAmJiAhaXRlbS5kaXNhYmxlZFwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxwaWNrZXIgbW9kZT1cImRhdGVcIiBjbGFzcz1cImRhdGVfaXB1dFwiIDpjbGFzcz1cIml0ZW0uZGlzYWJsZWQ/J2lucHV0LWRpc2FibGVkJzonJ1wiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ6ZGlzYWJsZWQ9XCJpdGVtLmRpc2FibGVkXCIgOnZhbHVlPVwiaXRlbS52YWx1ZVwiIEBjaGFuZ2U9XCJvbk1vZGVsVmFsdWUoaXRlbSlcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx2aWV3IGNsYXNzPVwicGlja2VyXCI+e3tpdGVtLnZhbHVlfX08L3ZpZXc+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PC9waWNrZXI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDwvdmlldz5cclxuXHRcdFx0XHRcdFx0XHRcdDwvdmlldz5cclxuXHRcdFx0XHRcdFx0XHRcdDwhLS0g5qCF5qC85biD5bGAIC0tPlxyXG5cdFx0XHRcdFx0XHRcdFx0PHVuaS1yb3cgY2xhc3M9XCJkZW1vLXVuaS1yb3dcIiB2LWlmPVwiaXRlbS5uYW1lPT0nTGF5b3V0J1wiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8dW5pLWNvbCB2LWZvcj1cIihjb2xzLGtleSkgaW4gaXRlbS5zZXR0aW5nLmNvbExpc3RcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDpzcGFuPVwiaXRlbS5zZXR0aW5nLnNwYW5MaXN0P2l0ZW0uc2V0dGluZy5zcGFuTGlzdFtrZXldOjI0IC8gaXRlbS5zZXR0aW5nLmNvbFwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDx2aWV3IHYtaWY9XCJjb2xzIT1udWxsXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGV4dCBjbGFzcz1cInR4dF90aXRsZVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDpzdHlsZT1cInsnd2lkdGgnOmNvbHMubGFiZWxXaWR0aCsncHgnfVwiPnt7Y29scy5sYWJlbH1977yaPC90ZXh0PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJmb3JtLWl0ZW0tc3BhblwiIHYtaWY9XCJjb2xzLmRpc2FibGVkXCI+e3tjb2xzLnZhbHVlfX08L3NwYW4+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dmlldyBjbGFzcz1cImR2X2lucHV0XCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0di1pZj1cIihjb2xzLm5hbWU9PSdJbnB1dCcgfHwgY29scy5uYW1lPT0nSW5wdXROdW1iZXInKSAmJiAhY29scy5kaXNhYmxlZFwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGV4dCB2LWlmPVwiY29scy5zZXR0aW5nLnByZWZpeFwiIGNsYXNzPVwidW5pLWljb25cIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDpjbGFzcz1cIltjb2xzLnNldHRpbmcucHJlZml4XVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0QGNoYW5nZT1cIm9uQ2hhbmdlKGNvbHMpXCI+JiN4ZTU2ODs8L3RleHQ+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxpbnB1dCBjbGFzcz1cInVuaS1pbnB1dFwiIDpjbGFzcz1cImNvbHMuZGlzYWJsZWQ/J2lucHV0LWRpc2FibGVkJzonJ1wiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0OnR5cGU9XCJjb2xzLm5hbWU9PSdJbnB1dCc/J3RleHQnOmNvbHMubmFtZT09J0lucHV0TnVtYmVyJz8nbnVtYmVyJzondGV4dCdcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHYtbW9kZWw9XCJjb2xzLnZhbHVlXCIgOmRpc2FibGVkPVwiY29scy5kaXNhYmxlZFwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0OnBsYWNlaG9sZGVyPVwiY29scy5wbGFjZWhvbGRlclwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0OnN0eWxlPVwieyd3aWR0aCc6Y29scy5zZXR0aW5nLnByZWZpeCAmJiBjb2xzLnNldHRpbmcuc3VmZml4Pyc3OCUnOmNvbHMuc2V0dGluZy5wcmVmaXggfHwgY29scy5zZXR0aW5nLnN1ZmZpeD8nODclJzonOTYlJ31cIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDpmb2N1cz1cImZvY3VzTWF0ZXJpYVwiIEBmb2N1cz1cIm9udGFwKGNvbHMpXCIgQGJsdXI9XCJvbmV2ZW50KGNvbHMpXCIgLz5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRleHQgdi1pZj1cImNvbHMuc2V0dGluZy5zdWZmaXhcIiBjbGFzcz1cInVuaS1pY29uXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ6Y2xhc3M9XCJbY29scy5zZXR0aW5nLnN1ZmZpeF1cIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdEBjbGljaz1cIm9uQ2hhbmdlKGNvbHMpXCI+JiN4ZTU2ODs8L3RleHQ+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8IS0tIOS4i+aLieahhi3ljZXpgIkgY29scy51c2VEaWN0P2NvbHMuZGljdDpjb2xzLnNlbGVjdGlvbnMtLT5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx1bmktZGF0YS1zZWxlY3QgaWQ9XCJkdl9zZWxlY3RcIiB2LWlmPVwiY29scy5uYW1lPT0nU2VsZWN0JyAmJiAhY29scy5kaXNhYmxlZFwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDpjbGFzcz1cImNvbHMuZGlzYWJsZWQ/J2lucHV0LWRpc2FibGVkJzonJ1wiIHYtbW9kZWw9XCJjb2xzLnZhbHVlXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0OmxvY2FsZGF0YT1cImNvbHMuZGljdFwiIEBjaGFuZ2U9XCJvbkNoYW5nZShjb2xzKVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDpkaXNhYmxlZD1cImNvbHMuZGlzYWJsZWRcIiA6Y2xlYXI9XCJmYWxzZVwiPjwvdW5pLWRhdGEtc2VsZWN0PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PCEtLSDlpJrooYzmlofmnKwgLS0+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dmlldyBjbGFzcz1cImlucHV0LXdyYXBwZXJcIiB2LWlmPVwiY29scy5uYW1lPT0nVGV4dGFyZWEnICYmICFjb2xzLmRpc2FibGVkXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZXh0YXJlYSBjbGFzcz1cInVuaS1pbnB1dFwiIDp2YWx1ZT1cImNvbHMudmFsdWVcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDpjbGFzcz1cImNvbHMuZGlzYWJsZWQ/J2lucHV0LWRpc2FibGVkJzonJ1wiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0OnBsYWNlaG9sZGVyPVwiY29scy5wbGFjZWhvbGRlclwiIEBibHVyPVwib25Nb2RlbFZhbHVlKGNvbHMpXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzdHlsZT1cImhlaWdodDo2MHB4O1wiIDpzdHlsZT1cInsnd2lkdGgnOic5NiUnfVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0OmRpc2FibGVkPVwiY29scy5kaXNhYmxlZFwiPjwvdGV4dGFyZWE+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8IS0tIOWkjemAieahhiAtLT5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxjaGVja2JveC1ncm91cCBjbGFzcz1cImNoZWNrX3JlbWVtYmVyUHdkXCIgdi1pZj1cImNvbHMubmFtZT09J0NoZWNrYm94J1wiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDpjbGFzcz1cImNvbHMuZGlzYWJsZWQ/J2lucHV0LWRpc2FibGVkJzonJ1wiIDpkaXNhYmxlZD1cIml0ZW0uZGlzYWJsZWRcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRAY2hhbmdlPVwib25Nb2RlbFZhbHVlKGNvbHMpXCIgOmRhdGEtaXNjaGVjaz1cImNvbHMudmFsdWVcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ6c3R5bGU9XCJ7J21hcmdpbi1sZWZ0JzonMTBycHgnfVwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8bGFiZWw+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGNoZWNrYm94IDp2YWx1ZT1cImNvbHMudmFsdWVcIiA6Y2hlY2tlZD1cImNvbHMudmFsdWVcIiAvPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZXh0Pnt7Y29scy5sYWJlbH19PC90ZXh0PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2xhYmVsPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9jaGVja2JveC1ncm91cD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwhLS0gU3dpdGNo5byA5YWzIC0tPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHN3aXRjaCB2LWlmPVwiY29scy5uYW1lPT0nU3dpdGNoJ1wiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDpjbGFzcz1cImNvbHMuZGlzYWJsZWQ/J2lucHV0LWRpc2FibGVkJzonJ1wiIDpkaXNhYmxlZD1cIml0ZW0uZGlzYWJsZWRcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2LW1vZGVsPVwiY29scy52YWx1ZVwiIEBjaGFuZ2U9XCJvbk1vZGVsVmFsdWUoY29scylcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ6c3R5bGU9XCJ7J21hcmdpbi1sZWZ0JzonMTBycHgnfVwiIC8+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8IS0tIOaXpeacn+aXtumXtCAtLT5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx2aWV3IGNsYXNzPVwiaW5wdXQtd3JhcHBlclwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHYtaWY9XCIoY29scy5uYW1lPT0nVGltZVBpY2tlcicgfHwgY29scy5uYW1lPT0nRGF0ZVBpY2tlcicpICYmICFjb2xzLmRpc2FibGVkXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxwaWNrZXIgbW9kZT1cImRhdGVcIiBjbGFzcz1cImRhdGVfaXB1dFwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0OmNsYXNzPVwiY29scy5kaXNhYmxlZD8naW5wdXQtZGlzYWJsZWQnOicnXCIgOmRpc2FibGVkPVwiaXRlbS5kaXNhYmxlZFwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0OnZhbHVlPVwiY29scy52YWx1ZVwiIEBjaGFuZ2U9XCJvbk1vZGVsVmFsdWUoY29scylcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dmlldyBjbGFzcz1cInBpY2tlclwiPnt7Y29scy52YWx1ZX19PC92aWV3PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3BpY2tlcj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdmlldz5cclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PC92aWV3PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8L3VuaS1jb2w+XHJcblx0XHRcdFx0XHRcdFx0XHQ8L3VuaS1yb3c+XHJcblx0XHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiZHYtcGFuZWwtYnV0dG9uXCIgdi1pZj1cInBhcmFtLkxpc3RQYWdlLkNsaWNrX1ZpZXc9PXRydWVcIj5cclxuXHRcdFx0XHRcdFx0XHQ8YSBAY2xpY2s9XCJvblZpZXdQYWdlQ2xpY2soc3R5bGUpXCI+PGkgY2xhc3M9XCJtb2JveC1ub3JtYWwtcmlnaHQtYXJyb3dcIiAvPjwvYT5cclxuXHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJkdi1wYW5lbC1idXRpY29uXCIgdi1pZj1cInBhcmFtLkxpc3RQYWdlLkxpc3RJdGVtX0J1dHRvblwiPlxyXG5cdFx0XHRcdFx0XHRcdDx2aWV3IGNsYXNzPVwiYnRuLXBhZGRpbmdcIiB2LWZvcj1cIihidG4sa2V5KSBpbiBwYXJhbS5MaXN0UGFnZS5MaXN0SXRlbV9CdXR0b25cIj5cclxuXHRcdFx0XHRcdFx0XHRcdDxhIEBjbGljaz1cIm9uQnRuQ2xpY2soYnRuLHN0eWxlKVwiIDp0aXRsZT1cImJ0bi5TaG93TmFtZVwiIHYtaWY9XCJidG4uU3R5bGU9PSdpbWcnXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDxpIDpjbGFzcz1cImJ0bi5JbWdcIiAvPlxyXG5cdFx0XHRcdFx0XHRcdFx0PC9hPlxyXG5cdFx0XHRcdFx0XHRcdFx0PGJ1dHRvbiB0eXBlPVwiZGVmYXVsdFwiIEBjbGljaz1cIm9uQnRuQ2xpY2soYnRuLHN0eWxlKVwiIGNsYXNzPVwiYnRuLXBhZGRpbmdcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHR2LWVsc2UtaWY9XCJidG4uU3R5bGU9PSd0ZXh0J1wiPnt7YnRuLlNob3dOYW1lfX08L2J1dHRvbj5cclxuXHRcdFx0XHRcdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0PC92aWV3PlxyXG5cdFx0XHRcdDwvdmlldz5cclxuXHRcdFx0PC9zY3JvbGwtdmlldz5cclxuXHRcdDwvdmlldz5cclxuXHJcblx0XHQ8dmlldyBjbGFzcz1cInZpZXctZmxvb3JcIj5cclxuXHRcdFx0PGJ1dHRvbiB0eXBlPVwiZGVmYXVsdFwiIEBjbGljaz1cImNhbmNlbFwiIGNsYXNzPVwiYnRuX2NhbmNlbFwiXHJcblx0XHRcdFx0OnN0eWxlPVwieyd3aWR0aCc6cGFyYW0uTGlzdFBhZ2UuUGFnZV9CdXR0b24ubGVuZ3RoPjA/JzM5LjUlJzonNDguNSUnfVwiPnt7dHJhbnNsYXRlU3lzKFwiY2xvc2VcIil9fTwvYnV0dG9uPlxyXG5cdFx0XHQ8YnV0dG9uIHR5cGU9XCJkZWZhdWx0XCIgQGNsaWNrPVwiUmVmcmVzaFwiIGNsYXNzPVwiYnRuX3JlZnJlc2hcIlxyXG5cdFx0XHRcdDpzdHlsZT1cInsnd2lkdGgnOnBhcmFtLkxpc3RQYWdlLlBhZ2VfQnV0dG9uLmxlbmd0aD4wPyczOS41JSc6JzQ4LjUlJ31cIj57e3RyYW5zbGF0ZVN5cyhcInJlZnJlc2hcIil9fTwvYnV0dG9uPlxyXG5cdFx0XHQ8dmlldyBjbGFzcz1cInVuaS1wYWRkaW5nLXdyYXBcIiB2LWlmPVwicGFyYW0uTGlzdFBhZ2UuUGFnZV9CdXR0b24ubGVuZ3RoPjBcIj5cclxuXHRcdFx0XHQ8dmlldyBjbGFzcz1cInVuaS1idG4tdlwiPlxyXG5cdFx0XHRcdFx0PGEgQHRhcD1cImFjdGlvblNoZWV0VGFwXCI+XHJcblx0XHRcdFx0XHRcdDxJY29uIGNsYXNzPVwibW9ib3gtbm9ybWFsLW1vcmVcIiAvPlxyXG5cdFx0XHRcdFx0PC9hPlxyXG5cdFx0XHRcdDwvdmlldz5cclxuXHRcdFx0PC92aWV3PlxyXG5cdFx0PC92aWV3PlxyXG5cdDwvdmlldz5cclxuPC90ZW1wbGF0ZT5cclxuXHJcbjxzY3JpcHQ+XHJcblx0aW1wb3J0IEJhc2U2NCBmcm9tICcuLi8uLi9jb21wb25lbnRzL2pzLWJhc2U2NC9iYXNlNjQuanMnXHJcblx0aW1wb3J0IGNsYXNzVXRpbHMgZnJvbSBcIkAvanMvdXRpbHMuanNcIlxyXG5cdGV4cG9ydCBkZWZhdWx0IHtcclxuXHRcdG1vZHVsZXM6IHtcclxuXHRcdFx0QmFzZTY0LFxyXG5cdFx0fSxcclxuXHRcdG9uTmF2aWdhdGlvbkJhckJ1dHRvblRhcChlKSB7XHJcblx0XHRcdC8vICBcdGNvbnNvbGUubG9nKGUpO1xyXG5cdFx0XHQvLyBlLnRleHQ9XCJcXHVlOTI0XCI7XHJcblx0XHRcdC8vIGNvbnNvbGUubG9nKGUuZm9udFNpemUpO1xyXG5cdFx0XHRpZiAodGhpcy5pc0ZpbHRlcilcclxuXHRcdFx0XHR0aGlzLmlzRmlsdGVyID0gZmFsc2U7XHJcblx0XHRcdGVsc2VcclxuXHRcdFx0XHR0aGlzLmlzRmlsdGVyID0gdHJ1ZTtcclxuXHRcdH0sXHJcblx0XHRvbkJhY2tQcmVzcyhlKSB7XHJcblx0XHRcdC8vIGNvbnNvbGUubG9nKFwi55uR5ZCs6L+U5Zue5oyJ6ZKu5LqL5Lu2XCIsZSk7XHJcblx0XHRcdHZhciBldmVudENoYW5uZWwgPSB0aGlzLiRzY29wZS5ldmVudENoYW5uZWw7XHJcblx0XHRcdC8vIGNvbnN0IGV2ZW50Q2hhbm5lbCA9IHRoaXMuZ2V0T3BlbmVyRXZlbnRDaGFubmVsKCk7XHJcblx0XHRcdGV2ZW50Q2hhbm5lbC5lbWl0KCd2aWV3XzMyMDEnLCBcIlwiKTtcclxuXHRcdFx0Ly8gdW5pLm5hdmlnYXRlQmFjayh7XHJcblx0XHRcdC8vIFx0ZGVsdGE6MSAsLy/ov5Tlm57lsYLmlbDvvIwy5YiZ5LiK5LiK6aG1XHJcblx0XHRcdC8vIH0pO1xyXG5cdFx0XHQvLyByZXR1cm4gdHJ1ZTtcclxuXHRcdH0sXHJcblx0XHRkYXRhKCkge1xyXG5cdFx0XHRyZXR1cm4ge1xyXG5cdFx0XHRcdHRpdGxlOiB0aGlzLnRyYW5zbGF0ZVN5cygnYWRkMicpLFxyXG5cdFx0XHRcdGlzRmlsdGVyOiB0cnVlLFxyXG5cdFx0XHRcdHBhcmFtOiB7fSxcclxuXHRcdFx0XHRmb2N1c01hdGVyaWE6IGZhbHNlLFxyXG5cdFx0XHRcdHN0eWxlZGVmOiB7fSxcclxuXHRcdFx0XHRoZWFkX3N0eWxlZGVmOiB7XHJcblx0XHRcdFx0XHRmb3JtOiB7XHJcblx0XHRcdFx0XHRcdGl0ZW1zOiBbXVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0ZGV0YWlsMV9zdHlsZWRlZjoge30sXHJcblx0XHRcdFx0ZGV0YWlsMVN0eWxlRGVmTGlzdDogW10sXHJcblx0XHRcdFx0ZGV0YWlsMl9zdHlsZWRlZjoge30sXHJcblx0XHRcdFx0ZGV0YWlsMlN0eWxlRGVmTGlzdDogW10sXHJcblx0XHRcdFx0aXRlbXM6IFtdLFxyXG5cdFx0XHRcdGFjdGl2ZV9pZDogJycsXHJcblx0XHRcdFx0YWN0aXZlbGlzdDogW10sXHJcblx0XHRcdFx0d2hlcmU6ICcnLFxyXG5cdFx0XHRcdHdoZXJlczogJycsXHJcblx0XHRcdFx0b3JkZXJieTogJycsXHJcblx0XHRcdFx0cXVlcnlfaWQ6ICcnLFxyXG5cdFx0XHRcdHBhZ2VpbmRleDogMSxcclxuXHRcdFx0XHRwYWdlX3NpemU6IDEwLFxyXG5cdFx0XHRcdHBhZ2VfY291bnQ6IDAsXHJcblx0XHRcdFx0c2Nyb2xsVG9wOiAwLFxyXG5cdFx0XHRcdG9sZDoge1xyXG5cdFx0XHRcdFx0c2Nyb2xsVG9wOiAwXHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHRpc1Njcm9sbDogdHJ1ZSxcclxuXHRcdFx0XHQvL+iOt+WPluaVsOaNruexu+eahEhUTUzpobXpnaJcclxuXHRcdFx0XHRMaXN0SHRtbF9QYW5lbDogXCJcIixcclxuXHRcdFx0XHRMaXN0UGFnZUh0bWxfU2hvdzoge1xyXG5cdFx0XHRcdFx0bmFtZTogXCJcIixcclxuXHRcdFx0XHRcdGV2ZW50OiB7XHJcblx0XHRcdFx0XHRcdGlkOiBcIlwiLFxyXG5cdFx0XHRcdFx0XHRuYW1lOiBcIlwiXHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0fTtcclxuXHRcdH0sXHJcblx0XHRhc3luYyBvbkxvYWQob3B0aW9ucykge1xyXG5cdFx0XHQvLyBjb25zb2xlLmxvZyhvcHRpb25zKTtcclxuXHRcdFx0dW5pLnNldE5hdmlnYXRpb25CYXJUaXRsZSh7XHJcblx0XHRcdFx0dGl0bGU6IG9wdGlvbnMudGl0bGVuYW1lXHJcblx0XHRcdH0pOyAvL+iuvue9rumhtumDqOagh+mimCBcclxuXHRcdFx0dGhpcy4kZGF0YS50aXRsZSA9IG9wdGlvbnMudGl0bGVuYW1lO1xyXG5cdFx0XHR0aGlzLiRkYXRhLnBhcmFtID0gSlNPTi5wYXJzZShvcHRpb25zLnBhcmFtKTtcclxuXHJcblxyXG5cdFx0XHR0aGlzLnN0eWxlZGVmID0ge307XHJcblx0XHRcdHRoaXMuaGVhZF9zdHlsZWRlZiA9IHtcclxuXHRcdFx0XHRmb3JtOiB7XHJcblx0XHRcdFx0XHRpdGVtczogW11cclxuXHRcdFx0XHR9XHJcblx0XHRcdH07XHJcblx0XHRcdHRoaXMuZGV0YWlsMV9zdHlsZWRlZiA9IHt9O1xyXG5cdFx0XHR0aGlzLmRldGFpbDFTdHlsZURlZkxpc3QgPSBbXTtcclxuXHRcdFx0dGhpcy5kZXRhaWwyX3N0eWxlZGVmID0ge307XHJcblx0XHRcdHRoaXMuZGV0YWlsMlN0eWxlRGVmTGlzdCA9IFtdO1xyXG5cdFx0XHR0aGlzLkxpc3RIdG1sX1BhbmVsID0gXCJcIjtcclxuXHRcdFx0dGhpcy5MaXN0UGFnZUh0bWxfU2hvdyA9IHtcclxuXHRcdFx0XHRuYW1lOiBcIlwiLFxyXG5cdFx0XHRcdGV2ZW50OiB7XHJcblx0XHRcdFx0XHRpZDogXCJcIixcclxuXHRcdFx0XHRcdG5hbWU6IFwiXCJcclxuXHRcdFx0XHR9XHJcblx0XHRcdH07XHJcblx0XHRcdHRoaXMuaXRlbXMgPSBbXTtcclxuXHRcdFx0dGhpcy5hY3RpdmVfaWQgPSAnJztcclxuXHRcdFx0dGhpcy5hY3RpdmVsaXN0ID0gW107XHJcblxyXG5cdFx0XHRpZiAodGhpcy5wYXJhbS5MaXN0UGFnZS5MaXN0SXRlbV9VSURlZj8udWlfdHlwZSA9PSBcIkhUTUzpobXpnaJcIikge1xyXG5cdFx0XHRcdC8vIEhUTUzpobXpnaJcclxuXHRcdFx0XHQvL+iOt+WPluaVsOaNruexu+eahEhUTUzpobXpnaJcclxuXHRcdFx0XHRhd2FpdCB0aGlzLkh0bWxfVUlzdHlsZUdldEluZm8odGhpcy5wYXJhbS5EYXRhQ2xzLmlkLCB0aGlzLnBhcmFtLkxpc3RQYWdlLkxpc3RJdGVtX1VJRGVmLmlkLG9wdGlvbnMucGFyYW1WYWx1ZSk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0YXdhaXQgdGhpcy5EZXRhaWwxX1VJc3R5bGVHZXRJbmZvKHRoaXMucGFyYW0uRGF0YUNscy5pZCwgdGhpcy5wYXJhbS5MaXN0UGFnZS5MaXN0SXRlbV9VSURlZi5pZCk7XHJcblx0XHRcdFxyXG5cdFx0XHRcdGF3YWl0IHRoaXMuaW5pdGlhbChvcHRpb25zLnBhcmFtVmFsdWUpO1xyXG5cdFx0XHR9XHJcblx0XHRcdC8vIHRoaXMuaXNGaWx0ZXI9dHJ1ZTtcclxuXHRcdFx0Ly8gaWYodGhpcy5wYXJhbS5TaG93RmlsdGVyKVxyXG5cdFx0XHQvLyAgIHRoaXMuaXNGaWx0ZXI9ZmFsc2U7XHJcblx0XHRcdC8vIC8v6I635Y+W5pWw5o2u57G755qE6Ieq5a6a5LmJ6KGo5Y2V5Y+C5pWwXHJcblx0XHRcdC8vIGlmKHRoaXMucGFyYW0uUXVlcnlfUGFuZWwpe1xyXG5cdFx0XHQvLyBcdHRoaXMuSGVhZF9VSVN0eWxlR2V0SW5mbyh0aGlzLnBhcmFtLkRhdGFDbHMuaWQsdGhpcy5wYXJhbS5RdWVyeV9QYW5lbC5pZCk7XHJcblx0XHRcdC8vIH1cclxuXHRcdFx0Ly8gaWYodGhpcy5wYXJhbS5MaXN0UGFnZS5MaXN0SXRlbV9VSURlZj8udWlfdHlwZT09XCJIVE1M6aG16Z2iXCIpe1xyXG5cdFx0XHQvLyBcdC8vIEhUTUzpobXpnaJcclxuXHRcdFx0Ly8gXHQvL+iOt+WPluaVsOaNruexu+eahEhUTUzpobXpnaJcclxuXHRcdFx0Ly8gXHRhd2FpdCB0aGlzLkh0bWxfVUlzdHlsZUdldEluZm8odGhpcy5wYXJhbS5EYXRhQ2xzLmlkLHRoaXMucGFyYW0uTGlzdFBhZ2UuTGlzdEl0ZW1fVUlEZWYuaWQpO1xyXG5cdFx0XHQvLyB9ZWxzZXtcclxuXHRcdFx0Ly8gXHRhd2FpdCB0aGlzLkRldGFpbDFfVUlzdHlsZUdldEluZm8odGhpcy5wYXJhbS5EYXRhQ2xzLmlkLHRoaXMucGFyYW0uTGlzdFBhZ2UuTGlzdEl0ZW1fVUlEZWYuaWQpO1xyXG5cdFx0XHQvLyB9XHJcblx0XHRcdC8vIHRoaXMub3JkZXJieSA9IHRoaXMucGFyYW0uT3JkZXI/dGhpcy5wYXJhbS5PcmRlcjonVF9DUkVBVEUgRGVzYyc7XHJcblx0XHRcdC8vIGlmKHRoaXMucGFyYW0uUXVlcnlfRXZlbnQpe1xyXG5cdFx0XHQvLyAgICAgYXdhaXQgdGhpcy5vblNlYXJDaGFuZ2UodGhpcy5wYXJhbS5EYXRhQ2xzLmlkLHRoaXMucGFyYW0uUXVlcnlfRXZlbnQuaWQpO1xyXG5cdFx0XHQvLyB9IGVsc2V7XHJcblx0XHRcdC8vICAgdGhpcy53aGVyZXMgPSB0aGlzLnBhcmFtLkNvbmRpdGlvbjtcclxuXHRcdFx0Ly8gICB0aGlzLnBhZ2VpbmRleCA9IDE7XHJcblx0XHRcdC8vICAgdGhpcy5wYWdlX3NpemUgPSAzO1xyXG5cdFx0XHQvLyAgIHRoaXMucXVlcnlfaWQgPSBcIlwiO1xyXG5cdFx0XHQvLyAgIGF3YWl0IHRoaXMubG9hZERhdGFHZXRMaXN0KCk7XHJcblx0XHRcdC8vIH1cclxuXHRcdFx0Ly8gY29uc29sZS5sb2codGhpcy4kZGF0YS5wYXJhbSk7XHJcblx0XHRcdC8v6aG16Z2i5Yid5aeL5YyW6I635Y+W54Sm54K5XHJcblx0XHRcdC8vIHRoaXMuZm9jdXNNYXRlcmlhPXRydWU7IFxyXG5cdFx0fSxcclxuXHRcdG1ldGhvZHM6IHtcclxuXHRcdFx0Ly9cclxuXHRcdFx0c2V0RGF0YTogZnVuY3Rpb24ob2JqKSB7XHJcblx0XHRcdFx0bGV0IHRoYXQgPSB0aGlzO1xyXG5cdFx0XHRcdGxldCBrZXlzID0gW107XHJcblx0XHRcdFx0bGV0IHZhbCwgZGF0YTtcclxuXHJcblx0XHRcdFx0T2JqZWN0LmtleXMob2JqKS5mb3JFYWNoKGZ1bmN0aW9uKGtleSkge1xyXG5cdFx0XHRcdFx0a2V5cyA9IGtleS5zcGxpdChcIi5cIik7XHJcblx0XHRcdFx0XHR2YWwgPSBvYmpba2V5XTtcclxuXHRcdFx0XHRcdGRhdGEgPSB0aGF0LiRkYXRhO1xyXG5cdFx0XHRcdFx0a2V5cy5mb3JFYWNoKGZ1bmN0aW9uKGtleTIsIGluZGV4KSB7XHJcblx0XHRcdFx0XHRcdGlmIChpbmRleCArIDEgPT0ga2V5cy5sZW5ndGgpIHtcclxuXHRcdFx0XHRcdFx0XHR0aGF0LiRzZXQoZGF0YSwga2V5MiwgdmFsKTtcclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRpZiAoIWRhdGFba2V5Ml0pIHtcclxuXHRcdFx0XHRcdFx0XHRcdHRoYXQuJHNldChkYXRhLCBrZXkyLCB7fSk7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdGRhdGEgPSBkYXRhW2tleTJdO1xyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH0sXHJcblxyXG5cdFx0XHQvL+WIneWni+WMllxyXG5cdFx0XHRhc3luYyBpbml0aWFsKHBhcmFtVmFsdWUpIHtcclxuXHRcdFx0XHR0aGlzLmlzRmlsdGVyID0gdHJ1ZTtcclxuXHRcdFx0XHRpZiAodGhpcy5wYXJhbS5TaG93RmlsdGVyKVxyXG5cdFx0XHRcdFx0dGhpcy5pc0ZpbHRlciA9IGZhbHNlO1xyXG5cdFx0XHRcdC8v6I635Y+W5pWw5o2u57G755qE6Ieq5a6a5LmJ6KGo5Y2V5Y+C5pWwXHJcblx0XHRcdFx0aWYgKHRoaXMucGFyYW0uUXVlcnlfUGFuZWwpIHtcclxuXHRcdFx0XHRcdGF3YWl0IHRoaXMuSGVhZF9VSVN0eWxlR2V0SW5mbyh0aGlzLnBhcmFtLkRhdGFDbHMuaWQsIHRoaXMucGFyYW0uUXVlcnlfUGFuZWwuaWQpO1xyXG5cdFx0XHRcdFx0Ly/kvKDlhaXlj4LmlbDlgLxcclxuXHRcdFx0XHRcdGlmIChwYXJhbVZhbHVlKSB7XHJcblx0XHRcdFx0XHRcdGNvbnN0IGF0dHJzID0gcGFyYW1WYWx1ZS5hdHRycyB8fCBbXTtcclxuXHRcdFx0XHRcdFx0KHRoaXMuJGRhdGEuaGVhZF9zdHlsZWRlZj8uZm9ybT8uaXRlbXMgfHwgW10pLmZvckVhY2goYXN5bmMgKGVsZSwgaW5kZXgpID0+IHtcclxuXHRcdFx0XHRcdFx0XHRpZiAoZWxlLm5hbWUgIT0gXCJMYXlvdXRcIikge1xyXG5cdFx0XHRcdFx0XHRcdFx0YXR0cnMuZm9yRWFjaChhc3luYyAoZWxlMiwgaW5kZXgyKSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChlbGUuZmllbGRJZCA9PSBlbGUyLm5hbWUpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRlbGUudmFsdWUgPSBlbGUyLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0ZWxlLnNldHRpbmcuY29sTGlzdC5mb3JFYWNoKGFzeW5jIChjb2wpID0+IHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKGNvbCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGF0dHJzLmZvckVhY2goYXN5bmMgKGVsZTIsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpbmRleDIpID0+IHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChjb2wuZmllbGRJZCA9PSBlbGUyLm5hbWUpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29sLnZhbHVlID0gZWxlMi52YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9KVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHR0aGlzLm9yZGVyYnkgPSB0aGlzLnBhcmFtLk9yZGVyID8gdGhpcy5wYXJhbS5PcmRlciA6ICdUX0NSRUFURSBEZXNjJztcclxuXHRcdFx0XHRpZiAodGhpcy5wYXJhbS5RdWVyeV9FdmVudCkge1xyXG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5vblNlYXJDaGFuZ2UodGhpcy5wYXJhbS5EYXRhQ2xzLmlkLCB0aGlzLnBhcmFtLlF1ZXJ5X0V2ZW50LmlkKTtcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0dGhpcy53aGVyZXMgPSB0aGlzLnBhcmFtLkNvbmRpdGlvbjtcclxuXHRcdFx0XHRcdHRoaXMucGFnZWluZGV4ID0gMTtcclxuXHRcdFx0XHRcdHRoaXMucGFnZV9zaXplID0gMztcclxuXHRcdFx0XHRcdHRoaXMucXVlcnlfaWQgPSBcIlwiO1xyXG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5sb2FkRGF0YUdldExpc3QoKTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHR9LFxyXG5cdFx0XHQvL+a7muWKqOWIsOW6lemDqOWQjuaHkuWKoOi9veaVsOaNrlxyXG5cdFx0XHRhc3luYyBzY3JvbGx0b2xvd2VyKGUpIHtcclxuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhlKVxyXG5cdFx0XHRcdGlmICh0aGlzLmlzU2Nyb2xsKSB7IC8v5Yik5pat5Yi35paw5LiA5qyh5ZCO5LiN5Lya5oyB57ut5Yi35pawXHJcblx0XHRcdFx0XHRpZiAodGhpcy5wYWdlX2NvdW50ID09IHRoaXMucGFnZWluZGV4KSB7XHJcblx0XHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdHRoaXMucGFnZWluZGV4ICs9IDE7XHJcblx0XHRcdFx0XHRpZiAodGhpcy53aGVyZSB8fCB0aGlzLnBhZ2VfY291bnQgPT0gMSkge1xyXG5cdFx0XHRcdFx0XHR0aGlzLnF1ZXJ5X2lkID0gXCJcIjtcclxuXHRcdFx0XHRcdFx0dGhpcy5kZXRhaWwxU3R5bGVEZWZMaXN0ID0gW107XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRhd2FpdCB0aGlzLmxvYWREYXRhR2V0TGlzdCgpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSxcclxuXHRcdFx0c2Nyb2xsOiBmdW5jdGlvbihlKSB7XHJcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coZS5kZXRhaWwuc2Nyb2xsVG9wKVxyXG5cdFx0XHRcdHRoaXMub2xkLnNjcm9sbFRvcCA9IGUuZGV0YWlsLnNjcm9sbFRvcFxyXG5cdFx0XHR9LFxyXG5cdFx0XHRhc3luYyBIZWFkX1VJU3R5bGVHZXRJbmZvKGNsYXNzX2lkLCBzdHlsZV9pZCkgeyAvL+iOt+WPluiHquWumuS5ieihqOWNleagt+W8j1xyXG5cdFx0XHRcdHZhciAkdGhpcyA9IHRoaXM7XHJcblx0XHRcdFx0dmFyIGRhdGFJbmZvID0ge1xyXG5cdFx0XHRcdFx0Y2xhc3NfaWQ6IGNsYXNzX2lkLFxyXG5cdFx0XHRcdFx0dWlfc3R5bGVfaWQ6IHN0eWxlX2lkLFxyXG5cdFx0XHRcdH07XHJcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coZGF0YUluZm8pO1xyXG5cdFx0XHRcdHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdVSVN0eWxlR2V0SW5mbycsIGRhdGFJbmZvKS50aGVuKHJldCA9PiB7XHJcblx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhyZXQpO1xyXG5cdFx0XHRcdFx0aWYgKHJldC5lcnJfY29kZSA9PSAwKSB7XHJcblx0XHRcdFx0XHRcdHZhciBzdHlsZWRlZiA9IFwiXCI7XHJcblx0XHRcdFx0XHRcdGlmIChyZXQucmVzdWx0LnN0eWxlX2RlZikge1xyXG5cdFx0XHRcdFx0XHRcdC8vbW9ib3gy55qEc3R5bGVfZGVm5pivanNvbuWtl+espuS4slxyXG5cdFx0XHRcdFx0XHRcdHN0eWxlZGVmID0gcmV0LnJlc3VsdC5zdHlsZV9kZWYucmVwbGFjZSgvXFxcXC9nLCBcIlwiKTtcclxuXHRcdFx0XHRcdFx0XHQvL21vYm94M+eahHN0eWxlX2RlZuaYr2Jhc2U2NOWtl+espuS4slxyXG5cdFx0XHRcdFx0XHRcdGlmICghcmV0LnJlc3VsdC5zdHlsZV9kZWYuaW5jbHVkZXMoJ1wiJykpIHN0eWxlZGVmID0gQmFzZTY0LmRlY29kZShyZXQucmVzdWx0XHJcblx0XHRcdFx0XHRcdFx0XHQuc3R5bGVfZGVmKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5oZWFkX3N0eWxlZGVmID0gcmV0LnJlc3VsdC5zdHlsZV9kZWYgPyBKU09OLnBhcnNlKHN0eWxlZGVmKSA6IHt9O1xyXG5cdFx0XHRcdFx0XHQvLyB0aGlzLmZvcm0gPSB0aGlzLmhlYWRfc3R5bGVkZWYuZm9ybS5tb2RlbDtcclxuXHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coJHRoaXMuJGRhdGEuaGVhZF9zdHlsZWRlZik7XHJcblx0XHRcdFx0XHRcdCR0aGlzLmhlYWRfc3R5bGVkZWYuZm9ybS5pdGVtcy5mb3JFYWNoKGFzeW5jIChlbGUsIGluZGV4KSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0Y29uc29sZS5sb2coZWxlLnVzZURpY3QpO1xyXG5cdFx0XHRcdFx0XHRcdGlmIChlbGUudXNlRGljdCA9PSB0cnVlKSB7IC8v5Yik5patdXNlRGljdOaYr+WQpuS9v+eUqOWtl+WFuFxyXG5cdFx0XHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5EaWN0R2V0SW5mbyhlbGUuYmluZC5kaWN0LCBpbmRleCwgJ21hc3QnKTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH0pO1xyXG5cclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe1xyXG5cdFx0XHRcdFx0XHRcdHRpdGxlOiB0aGlzLnRyYW5zbGF0ZVN5cyhcImVycm9yXCIpICsgXCIxXCIsXHJcblx0XHRcdFx0XHRcdFx0Y29udGVudDogcmV0LmVycl9tc2csXHJcblx0XHRcdFx0XHRcdFx0c2hvd0NhbmNlbDogZmFsc2UsXHJcblx0XHRcdFx0XHRcdFx0Y29uZmlybVRleHQ6IHRoaXMudHJhbnNsYXRlU3lzKFwiY2FuY2VsXCIpXHJcblx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pLmNhdGNoKGV4ID0+IHtcclxuXHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKGV4KTtcclxuXHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe1xyXG5cdFx0XHRcdFx0XHR0aXRsZTogdGhpcy50cmFuc2xhdGVTeXMoXCJlcnJvclwiKSArIFwiMS4xXCIsXHJcblx0XHRcdFx0XHRcdGNvbnRlbnQ6IGV4LmVyck1zZyxcclxuXHRcdFx0XHRcdFx0c2hvd0NhbmNlbDogZmFsc2UsXHJcblx0XHRcdFx0XHRcdGNvbmZpcm1UZXh0OiB0aGlzLnRyYW5zbGF0ZVN5cyhcImNhbmNlbFwiKVxyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0fSk7XHJcblxyXG5cdFx0XHR9LFxyXG5cdFx0XHRhc3luYyBEZXRhaWwxX1VJc3R5bGVHZXRJbmZvKGNsYXNzX2lkLCBzdHlsZV9pZCkgeyAvL+iOt+WPluiHquWumuS5ieihqOWNleagt+W8j1xyXG5cdFx0XHRcdHZhciAkdGhpcyA9IHRoaXM7XHJcblx0XHRcdFx0dmFyIGRhdGFJbmZvID0ge1xyXG5cdFx0XHRcdFx0Y2xhc3NfaWQ6IGNsYXNzX2lkLFxyXG5cdFx0XHRcdFx0dWlfc3R5bGVfaWQ6IHN0eWxlX2lkLFxyXG5cdFx0XHRcdH07XHJcblx0XHRcdFx0dGhpcy4kc3RvcmUuZGlzcGF0Y2goJ1VJU3R5bGVHZXRJbmZvJywgZGF0YUluZm8pLnRoZW4ocmV0ID0+IHtcclxuXHRcdFx0XHRcdGNvbnNvbGUubG9nKHJldCk7XHJcblx0XHRcdFx0XHRpZiAocmV0LmVycl9jb2RlID09IDApIHtcclxuXHRcdFx0XHRcdFx0dmFyIHN0eWxlZGVmID0gXCJcIjtcclxuXHRcdFx0XHRcdFx0aWYgKHJldC5yZXN1bHQuc3R5bGVfZGVmKSB7XHJcblx0XHRcdFx0XHRcdFx0Ly9tb2JveDLnmoRzdHlsZV9kZWbmmK9qc29u5a2X56ym5LiyXHJcblx0XHRcdFx0XHRcdFx0c3R5bGVkZWYgPSByZXQucmVzdWx0LnN0eWxlX2RlZi5yZXBsYWNlKC9cXFxcL2csIFwiXCIpO1xyXG5cdFx0XHRcdFx0XHRcdC8vbW9ib3gz55qEc3R5bGVfZGVm5pivYmFzZTY05a2X56ym5LiyXHJcblx0XHRcdFx0XHRcdFx0aWYgKCFyZXQucmVzdWx0LnN0eWxlX2RlZi5pbmNsdWRlcygnXCInKSkgc3R5bGVkZWYgPSBCYXNlNjQuZGVjb2RlKHJldC5yZXN1bHRcclxuXHRcdFx0XHRcdFx0XHRcdC5zdHlsZV9kZWYpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLmRldGFpbDFfc3R5bGVkZWYgPSByZXQucmVzdWx0LnN0eWxlX2RlZiA/IEpTT04ucGFyc2Uoc3R5bGVkZWYpIDoge307XHJcblx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLmRldGFpbDFfc3R5bGVkZWYuU2VsQnV0X0NoZWNrZWQgPSBmYWxzZTtcclxuXHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coJHRoaXMuJGRhdGEuZGV0YWlsMV9zdHlsZWRlZik7XHJcblx0XHRcdFx0XHRcdC8vICR0aGlzLiRkYXRhLmRldGFpbDFTdHlsZURlZkxpc3QucHVzaCgkdGhpcy4kZGF0YS5kZXRhaWwxX3N0eWxlZGVmKTtcclxuXHRcdFx0XHRcdFx0Ly8gdmFyIGFhID0gSlNPTi5zdHJpbmdpZnkodGhpcy5kZXRhaWwxX3N0eWxlZGVmKTtcclxuXHRcdFx0XHRcdFx0Ly8gJHRoaXMuJGRhdGEuZGV0YWlsMVN0eWxlRGVmTGlzdC5wdXNoKEpTT04ucGFyc2UoYWEpKTtcclxuXHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coJHRoaXMuJGRhdGEuZGV0YWlsMVN0eWxlRGVmTGlzdCk7XHJcblxyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7XHJcblx0XHRcdFx0XHRcdFx0dGl0bGU6IHRoaXMudHJhbnNsYXRlU3lzKFwiZXJyb3JcIikgKyBcIjJcIixcclxuXHRcdFx0XHRcdFx0XHRjb250ZW50OiByZXQuZXJyX21zZyxcclxuXHRcdFx0XHRcdFx0XHRzaG93Q2FuY2VsOiBmYWxzZSxcclxuXHRcdFx0XHRcdFx0XHRjb25maXJtVGV4dDogdGhpcy50cmFuc2xhdGVTeXMoXCJjYW5jZWxcIilcclxuXHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSkuY2F0Y2goZXggPT4ge1xyXG5cdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coZXgpO1xyXG5cdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7XHJcblx0XHRcdFx0XHRcdHRpdGxlOiB0aGlzLnRyYW5zbGF0ZVN5cyhcImVycm9yXCIpICsgXCIyLjFcIixcclxuXHRcdFx0XHRcdFx0Y29udGVudDogZXguZXJyTXNnLFxyXG5cdFx0XHRcdFx0XHRzaG93Q2FuY2VsOiBmYWxzZSxcclxuXHRcdFx0XHRcdFx0Y29uZmlybVRleHQ6IHRoaXMudHJhbnNsYXRlU3lzKFwiY2FuY2VsXCIpXHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHR9KTtcclxuXHJcblx0XHRcdH0sXHJcblx0XHRcdGFzeW5jIEh0bWxfVUlzdHlsZUdldEluZm8oY2xhc3NfaWQsIHN0eWxlX2lkLCBwYXJhbVZhbHVlKSB7IC8v6I635Y+W6Ieq5a6a5LmJ6KGo5Y2V5qC35byPXHJcblx0XHRcdFx0dmFyICR0aGlzID0gdGhpcztcclxuXHRcdFx0XHR2YXIgZGF0YUluZm8gPSB7XHJcblx0XHRcdFx0XHRjbGFzc19pZDogY2xhc3NfaWQsXHJcblx0XHRcdFx0XHR1aV9zdHlsZV9pZDogc3R5bGVfaWQsXHJcblx0XHRcdFx0fTtcclxuXHRcdFx0XHR0aGlzLiRzdG9yZS5kaXNwYXRjaCgnVUlTdHlsZUdldEluZm8nLCBkYXRhSW5mbykudGhlbihyZXQgPT4ge1xyXG5cdFx0XHRcdFx0Ly8gY29uc29sZS5sb2cocmV0KTtcclxuXHRcdFx0XHRcdGlmIChyZXQuZXJyX2NvZGUgPT0gMCkge1xyXG5cdFx0XHRcdFx0XHR2YXIgc3R5bGVkZWYgPSBcIlwiO1xyXG5cdFx0XHRcdFx0XHRpZiAocmV0LnJlc3VsdC5zdHlsZV9kZWYpIHtcclxuXHRcdFx0XHRcdFx0XHQvL21vYm94MueahHN0eWxlX2RlZuaYr2pzb27lrZfnrKbkuLJcclxuXHRcdFx0XHRcdFx0XHRzdHlsZWRlZiA9IHJldC5yZXN1bHQuc3R5bGVfZGVmLnJlcGxhY2UoL1xcXFwvZywgXCJcIik7XHJcblx0XHRcdFx0XHRcdFx0Ly9tb2JveDPnmoRzdHlsZV9kZWbmmK9iYXNlNjTlrZfnrKbkuLJcclxuXHRcdFx0XHRcdFx0XHRpZiAoIXJldC5yZXN1bHQuc3R5bGVfZGVmLmluY2x1ZGVzKCdcIicpKSBzdHlsZWRlZiA9IEJhc2U2NC5kZWNvZGUocmV0LnJlc3VsdFxyXG5cdFx0XHRcdFx0XHRcdFx0LnN0eWxlX2RlZik7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coc3R5bGVkZWYpO1xyXG5cdFx0XHRcdFx0XHQkdGhpcy5MaXN0UGFnZUh0bWxfU2hvdyA9IHJldC5yZXN1bHQuc3R5bGVfZGVmID8gSlNPTi5wYXJzZShzdHlsZWRlZikgOiB7fTtcclxuXHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coJHRoaXMuTGlzdFBhZ2VIdG1sX1Nob3cpO1xyXG5cdFx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdFx0JHRoaXMuaW5pdGlhbChwYXJhbVZhbHVlKTtcclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe1xyXG5cdFx0XHRcdFx0XHRcdHRpdGxlOiB0aGlzLnRyYW5zbGF0ZVN5cyhcImVycm9yXCIpICsgXCIxMFwiLFxyXG5cdFx0XHRcdFx0XHRcdGNvbnRlbnQ6IHJldC5lcnJfbXNnLFxyXG5cdFx0XHRcdFx0XHRcdHNob3dDYW5jZWw6IGZhbHNlLFxyXG5cdFx0XHRcdFx0XHRcdGNvbmZpcm1UZXh0OiB0aGlzLnRyYW5zbGF0ZVN5cyhcImNhbmNlbFwiKVxyXG5cdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KS5jYXRjaChleCA9PiB7XHJcblx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhleCk7XHJcblx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHtcclxuXHRcdFx0XHRcdFx0dGl0bGU6IHRoaXMudHJhbnNsYXRlU3lzKFwiZXJyb3JcIikgKyBcIjEwLjFcIixcclxuXHRcdFx0XHRcdFx0Y29udGVudDogZXguZXJyTXNnLFxyXG5cdFx0XHRcdFx0XHRzaG93Q2FuY2VsOiBmYWxzZSxcclxuXHRcdFx0XHRcdFx0Y29uZmlybVRleHQ6IHRoaXMudHJhbnNsYXRlU3lzKFwiY2FuY2VsXCIpXHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHR9KTtcclxuXHJcblx0XHRcdH0sXHJcblx0XHRcdGFzeW5jIERpY3RHZXRJbmZvKGRpY3QsIGluZGV4LCB0eXBlKSB7IC8vTW9ib3gz5b6X5Yiw5b6X5Yiw5a2X5YW45L+h5oGv5a2X5YW46aG55YiX6KGoXHJcblx0XHRcdFx0dGhpcy5kYXRhID0gW107XHJcblx0XHRcdFx0dmFyICR0aGlzID0gdGhpcztcclxuXHRcdFx0XHR2YXIgZGF0YUluZm8gPSB7XHJcblx0XHRcdFx0XHRkaWN0X2lkOiBkaWN0LmlkLFxyXG5cdFx0XHRcdFx0ZGljdF9uYW1lOiBkaWN0Lm5hbWVcclxuXHRcdFx0XHR9O1xyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKGRhdGFJbmZvKTtcclxuXHRcdFx0XHR0aGlzLiRzdG9yZS5kaXNwYXRjaCgnRGljdEdldEluZm8nLCBkYXRhSW5mbykudGhlbihhc3luYyAoc3VjY2VzcykgPT4ge1xyXG5cdFx0XHRcdFx0Y29uc29sZS5sb2coc3VjY2Vzcyk7XHJcblx0XHRcdFx0XHRpZiAoc3VjY2Vzcy5lcnJfY29kZSA9PSAwKSB7XHJcblx0XHRcdFx0XHRcdGlmICh0eXBlID09ICdtYXN0Jykge1xyXG5cdFx0XHRcdFx0XHRcdHZhciBsaXN0ID0gW107XHJcblx0XHRcdFx0XHRcdFx0dmFyIGl0ZW1OYW1lID0gJyc7XHJcblx0XHRcdFx0XHRcdFx0c3VjY2Vzcy5yZXN1bHQuZGljdF9pdGVtX2xpc3QuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKGl0ZW0uaXNfZGVmYXVsdCA9PSAnMScpXHJcblx0XHRcdFx0XHRcdFx0XHRcdGl0ZW1OYW1lID0gaXRlbS5uYW1lO1xyXG5cdFx0XHRcdFx0XHRcdFx0bGlzdC5wdXNoKHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0dGV4dDogaXRlbS52YWx1ZSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU6IGl0ZW0ubmFtZSxcclxuXHRcdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdC8v5pyJ6buY6K6k5YC877yM5pi+56S66buY6K6k5YC8XHJcblx0XHRcdFx0XHRcdFx0aWYgKGl0ZW1OYW1lKSB7XHJcblx0XHRcdFx0XHRcdFx0XHQkdGhpcy5oZWFkX3N0eWxlZGVmLmZvcm0uaXRlbXNbaW5kZXhdLnZhbHVlID0gaXRlbU5hbWU7XHJcblx0XHRcdFx0XHRcdFx0XHR2YXIgYXR0ciA9ICR0aGlzLmhlYWRfc3R5bGVkZWYuZm9ybS5pdGVtc1tpbmRleF0uZmllbGRJZDtcclxuXHRcdFx0XHRcdFx0XHRcdCR0aGlzLmhlYWRfc3R5bGVkZWYuZm9ybS5tb2RlbFthdHRyXSA9IGl0ZW1OYW1lO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHQkdGhpcy5oZWFkX3N0eWxlZGVmLmZvcm0uaXRlbXNbaW5kZXhdLmRpY3QgPSBsaXN0O1xyXG5cdFx0XHRcdFx0XHRcdHZhciBoZWFkX3N0eWxlZGVmID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSgkdGhpcy5oZWFkX3N0eWxlZGVmKSk7XHJcblx0XHRcdFx0XHRcdFx0JHRoaXMuaGVhZF9zdHlsZWRlZiA9IFtdO1xyXG5cdFx0XHRcdFx0XHRcdCR0aGlzLmhlYWRfc3R5bGVkZWYgPSBoZWFkX3N0eWxlZGVmO1xyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdC8vICR0aGlzLiRkYXRhLnN1YkNsYXNzQXR0ckxpc3RbaW5kZXhdLmF0dHJfbGlzdFtrZXldLmRpY3RpdGVtPXN1Y2Nlc3MucmVzdWx0O1xyXG5cdFx0XHRcdFx0XHRcdC8vIHRoaXMuJHN0b3JlLmNvbW1pdChcInN1YkNsYXNzQXR0ckxpc3RcIiwgJHRoaXMuJGRhdGEuc3ViQ2xhc3NBdHRyTGlzdCk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHtcclxuXHRcdFx0XHRcdFx0XHR0aXRsZTogdGhpcy50cmFuc2xhdGVTeXMoXCJlcnJvclwiKSArIFwiMy4xXCIsXHJcblx0XHRcdFx0XHRcdFx0Y29udGVudDogc3VjY2Vzcy5lcnJfbXNnLFxyXG5cdFx0XHRcdFx0XHRcdHNob3dDYW5jZWw6IGZhbHNlLFxyXG5cdFx0XHRcdFx0XHRcdGNvbmZpcm1UZXh0OiB0aGlzLnRyYW5zbGF0ZVN5cyhcImNhbmNlbFwiKVxyXG5cdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KS5jYXRjaChleCA9PiB7XHJcblx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhleCk7XHJcblx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHtcclxuXHRcdFx0XHRcdFx0dGl0bGU6IHRoaXMudHJhbnNsYXRlU3lzKFwiZXJyb3JcIikgKyBcIjNcIixcclxuXHRcdFx0XHRcdFx0Y29udGVudDogZXguZXJyTXNnLFxyXG5cdFx0XHRcdFx0XHRzaG93Q2FuY2VsOiBmYWxzZSxcclxuXHRcdFx0XHRcdFx0Y29uZmlybVRleHQ6IHRoaXMudHJhbnNsYXRlU3lzKFwiY2FuY2VsXCIpXHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fSxcclxuXHJcblx0XHRcdC8vIOaJp+ihjOafpeivouS6i+S7tlxyXG5cdFx0XHRhc3luYyBvblNlYXJDaGFuZ2UoY2xzaWQsIGV2ZW50aWQpIHtcclxuXHRcdFx0XHR0cnkge1xyXG5cdFx0XHRcdFx0aWYgKGV2ZW50aWQpIHtcclxuXHRcdFx0XHRcdFx0dmFyICR0aGlzID0gdGhpcztcclxuXHRcdFx0XHRcdFx0dmFyIGRhdGFJbmZvID0ge1xyXG5cdFx0XHRcdFx0XHRcdGVkX3R5cGU6IDAsXHJcblx0XHRcdFx0XHRcdFx0c3RhcnRfdHJhbnNhY3Rpb246IHRydWUsXHJcblx0XHRcdFx0XHRcdFx0Y2xhc3NfaWQ6IGNsc2lkLFxyXG5cdFx0XHRcdFx0XHRcdGV2ZW50X2lkOiBldmVudGlkLFxyXG5cdFx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdFx0XHR0aGlzLiRzdG9yZS5kaXNwYXRjaCgncnVuQ3VzdG9tRXZlbnQnLCBkYXRhSW5mbykudGhlbihyZXQgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKHJldCk7XHJcblx0XHRcdFx0XHRcdFx0aWYgKHJldC5lcnJfY29kZSA9PSAwKSB7XHJcblx0XHRcdFx0XHRcdFx0XHR2YXIgcmVzdWx0ID0gcmV0LnJlc3VsdDtcclxuXHRcdFx0XHRcdFx0XHRcdGlmIChyZXN1bHQucmV0ICE9IDApIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIHRpcCA9IHJlc3VsdC5lcnJfaW5mbyA/IHR5cGVvZiByZXN1bHQuZXJyX2luZm8gPT0gJ3N0cmluZycgPyByZXN1bHRcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQuZXJyX2luZm8gOiByZXN1bHQuZXJyX2luZm8uam9pbignPGJyLz4nKSA6ICcnO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAocmVzdWx0LnJldCA9PSA4MDEpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAodGhpcy5wYXJhbS5Pbmx5X1NjcmlwdF9FcnJvcikge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bGV0IHBvcyA9IHRpcC5pbmRleE9mKFwi77yaXCIpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKHBvcyA+IC0xKSB0aXAgPSB0aXAuc3Vic3RyaW5nKHBvcyArIDEpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRpdGxlOiB0aGlzLnRyYW5zbGF0ZVN5cyhcInRpcFwiKSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnRlbnQ6IHRpcCxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHNob3dDYW5jZWw6IGZhbHNlLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uZmlybVRleHQ6IHRoaXMudHJhbnNsYXRlU3lzKFwiY2FuY2VsXCIpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB1bmkuc2hvd01vZGFsKHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aXRsZTogdGhpcy50cmFuc2xhdGVTeXMoXCJ0aXBcIiksXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29udGVudDogdGlwICsgJywnICsgdGhpcy50cmFuc2xhdGVTeXMoJ3RpcCcpICsgJzonICsgcmVzdWx0XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQucmV0LFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHNob3dDYW5jZWw6IGZhbHNlLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvbmZpcm1UZXh0OiB0aGlzLnRyYW5zbGF0ZVN5cyhcImNhbmNlbFwiKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIHRpcCA9IHJlc3VsdC5pbmZvID8gdHlwZW9mIHJlc3VsdC5pbmZvID09ICdzdHJpbmcnID8gcmVzdWx0LmluZm8gOlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJlc3VsdC5pbmZvLmpvaW4oJzxici8+JykgOiAnJztcclxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKHRpcCkgdW5pLnNob3dNb2RhbCh7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGl0bGU6IHRoaXMudHJhbnNsYXRlU3lzKFwidGlwXCIpLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnRlbnQ6IHRpcCxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRzaG93Q2FuY2VsOiBmYWxzZSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb25maXJtVGV4dDogdGhpcy50cmFuc2xhdGVTeXMoXCJjYW5jZWxcIilcclxuXHRcdFx0XHRcdFx0XHRcdFx0fSk7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAocmVzdWx0LnJlc3VsdF90eXBlID09IDAgJiYgcmVzdWx0LmFjdGlvbikge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJlc3VsdC5hY3Rpb24uZm9yRWFjaChpdGVtID0+IHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChpdGVtLmFjdGlvbl90eXBlID09IFwic2V0X3F1ZXJ5X2NvbmRpdGlvblwiKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciB2YWx1ZSA9IGl0ZW0udmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLndoZXJlcyA9IHZhbHVlLmNvbmRpdGlvbjtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMub3JkZXJieSA9IHZhbHVlLm9yZGVyID8gdmFsdWUub3JkZXIgOiAkdGhpc1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC5vcmRlcmJ5O1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy5wYWdlaW5kZXggPSAxO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy5xdWVyeV9pZCA9IFwiXCI7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLmRldGFpbDFTdHlsZURlZkxpc3QgPSBbXTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMubG9hZERhdGFHZXRMaXN0KCk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIHRoaXMuZGV0YWlsMlN0eWxlRGVmTGlzdD1bXTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAocmVzdWx0LmluZm8pIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aXRsZTogdGhpcy50cmFuc2xhdGVTeXMoXCJ0aXBcIiksXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnRlbnQ6IHJlc3VsdC5pbmZvLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzaG93Q2FuY2VsOiBmYWxzZSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uZmlybVRleHQ6IHRoaXMudHJhbnNsYXRlU3lzKFwiY2FuY2VsXCIpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR0aXRsZTogdGhpcy50cmFuc2xhdGVTeXMoXCJlcnJvclwiKSArIFwiNFwiLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRjb250ZW50OiByZXQuZXJyX21zZyxcclxuXHRcdFx0XHRcdFx0XHRcdFx0c2hvd0NhbmNlbDogZmFsc2UsXHJcblx0XHRcdFx0XHRcdFx0XHRcdGNvbmZpcm1UZXh0OiB0aGlzLnRyYW5zbGF0ZVN5cyhcImNhbmNlbFwiKVxyXG5cdFx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9KS5jYXRjaChleCA9PiB7XHJcblx0XHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coZXgpO1xyXG5cdFx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe1xyXG5cdFx0XHRcdFx0XHRcdFx0dGl0bGU6IHRoaXMudHJhbnNsYXRlU3lzKFwiZXJyb3JcIikgKyBcIjQuMVwiLFxyXG5cdFx0XHRcdFx0XHRcdFx0Y29udGVudDogZXguZXJyTXNnLFxyXG5cdFx0XHRcdFx0XHRcdFx0c2hvd0NhbmNlbDogZmFsc2UsXHJcblx0XHRcdFx0XHRcdFx0XHRjb25maXJtVGV4dDogdGhpcy50cmFuc2xhdGVTeXMoXCJjYW5jZWxcIilcclxuXHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSBjYXRjaCAoZXgpIHtcclxuXHRcdFx0XHRcdHZhciB0aXAgPSB0eXBlb2YgZXggPT0gXCJzdHJpbmdcIiA/IGV4IDogZXgubWVzc2FnZTtcclxuXHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe1xyXG5cdFx0XHRcdFx0XHR0aXRsZTogdGhpcy50cmFuc2xhdGVTeXMoXCJlcnJvclwiKSArIFwiNC4yXCIsXHJcblx0XHRcdFx0XHRcdGNvbnRlbnQ6IHRoaXMudHJhbnNsYXRlKFwiZXhlY3V0ZV9xdWVyeV9ldmVudF9mYWlsZWRcIikgKyB0aGlzLnRyYW5zbGF0ZVN5cyhcImNvbW1hXCIpICtcclxuXHRcdFx0XHRcdFx0XHR0aXAsXHJcblx0XHRcdFx0XHRcdHNob3dDYW5jZWw6IGZhbHNlLFxyXG5cdFx0XHRcdFx0XHRjb25maXJtVGV4dDogdGhpcy50cmFuc2xhdGVTeXMoXCJjYW5jZWxcIilcclxuXHRcdFx0XHRcdH0pO1xyXG5cclxuXHRcdFx0XHR9XHJcblx0XHRcdH0sXHJcblx0XHRcdC8v5p+l6K+i5pWw5o2u57G75pWw5o2u5L+h5oGvXHJcblx0XHRcdGFzeW5jIGxvYWREYXRhR2V0TGlzdCgpIHtcclxuXHRcdFx0XHR0cnkge1xyXG5cdFx0XHRcdFx0dW5pLnNob3dMb2FkaW5nKHtcclxuXHRcdFx0XHRcdFx0dGl0bGU6IHRoaXMudHJhbnNsYXRlU3lzKFwibG9hZGluZ1wiKSxcclxuXHRcdFx0XHRcdFx0bWFzazogdHJ1ZVxyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHQvL+adoeS7tuafpeivolxyXG5cdFx0XHRcdFx0dmFyIGNvbmRpdGlvbiA9IHRoaXMud2hlcmVzO1xyXG5cdFx0XHRcdFx0aWYgKHRoaXMud2hlcmUpIHtcclxuXHRcdFx0XHRcdFx0aWYgKGNvbmRpdGlvbikgY29uZGl0aW9uICs9ICcgYW5kICc7XHJcblx0XHRcdFx0XHRcdGNvbmRpdGlvbiArPSB0aGlzLndoZXJlO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coY29uZGl0aW9uKTtcclxuXHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKHRoaXMub3JkZXJieSk7XHJcblx0XHRcdFx0XHR2YXIgJHRoaXMgPSB0aGlzO1xyXG5cdFx0XHRcdFx0dmFyIGRhdGFJbmZvID0ge1xyXG5cdFx0XHRcdFx0XHRjbGFzc19pZDogdGhpcy5wYXJhbS5EYXRhQ2xzLmlkLFxyXG5cdFx0XHRcdFx0XHRhdHRyczogW10sXHJcblx0XHRcdFx0XHRcdGNvbmRpdGlvbjogdGhpcy50b1doZXJlQmFzZTY0U3RyaW5nKFwiXCIgKyBjb25kaXRpb24gKyBcIlwiKSxcclxuXHRcdFx0XHRcdFx0cHJqX3JlbF90eXBlOiBcIlwiLFxyXG5cdFx0XHRcdFx0XHRvcmRlcl9ieTogdGhpcy5vcmRlcmJ5LFxyXG5cdFx0XHRcdFx0XHRwYWdlX3NpemU6IHRoaXMucGFnZV9zaXplLFxyXG5cdFx0XHRcdFx0XHRwYWdlOiB0aGlzLnBhZ2VpbmRleCxcclxuXHRcdFx0XHRcdFx0cXVlcnlfaWQ6IHRoaXMucXVlcnlfaWQsXHJcblx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdFx0dGhpcy4kc3RvcmUuZGlzcGF0Y2goJ2RhdGFPYmpRdWVyeScsIGRhdGFJbmZvKS50aGVuKHJldCA9PiB7XHJcblx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKHJldCk7XHJcblx0XHRcdFx0XHRcdHVuaS5oaWRlTG9hZGluZygpO1xyXG5cdFx0XHRcdFx0XHRpZiAocmV0LmVycl9jb2RlID09IDApIHtcclxuXHRcdFx0XHRcdFx0XHQvLyB2YXIgbGlzdD1bXTtcclxuXHRcdFx0XHRcdFx0XHQkdGhpcy5xdWVyeV9pZCA9ICcnO1xyXG5cdFx0XHRcdFx0XHRcdGlmIChyZXQucmVzdWx0KSB7XHJcblx0XHRcdFx0XHRcdFx0XHQkdGhpcy5wYWdlX2NvdW50ID0gcmV0LnJlc3VsdC5wYWdlX2NvdW50O1xyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKHJldC5yZXN1bHQucGFnZV9jb3VudCA+IDEpICR0aGlzLnF1ZXJ5X2lkID0gcmV0LnJlc3VsdC5xdWVyeV9pZDtcclxuXHRcdFx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKCR0aGlzLkxpc3RQYWdlSHRtbF9TaG93LmV2ZW50KTtcclxuXHRcdFx0XHRcdFx0XHRcdGlmICgkdGhpcy5MaXN0UGFnZUh0bWxfU2hvdy5ldmVudC5pZCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXQucmVzdWx0Lm9ial9saXN0LmZvckVhY2goKG9iaikgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBpbmZvID0ge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ6IG9iai5pZCxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9iai5hdHRyX2xpc3QuZm9yRWFjaCgoYXR0cikgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aW5mb1thdHRyLm5hbWVdID0gYXR0ci52YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgZGV0YWlsU3R5bGUgPSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRTZWxCdXRfQ2hlY2tlZDogZmFsc2UsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3JtOiB7fSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGluZm86IGluZm9cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGRldGFpbFN0eWxlLmZvcm0uaHRtbG9iaklkID0gb2JqLmlkID8gb2JqLmlkLnJlcGxhY2UoLy0vZywgJycpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQucmVwbGFjZSgneycsICcnKS5yZXBsYWNlKCd9JywgJycpIDogJ251bGwnO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGRldGFpbFN0eWxlLmZvcm0ub2JqSWQgPSBvYmouaWQ7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZGV0YWlsU3R5bGUuZm9ybS5hdHRycyA9IG9iai5hdHRyX2xpc3Q7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMuZGV0YWlsMVN0eWxlRGVmTGlzdC5wdXNoKGRldGFpbFN0eWxlKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy5hY3RpdmVsaXN0LnB1c2goe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YWN0aXZlOiBmYWxzZVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2codGhpcy5kZXRhaWwxU3R5bGVEZWZMaXN0KTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIGpzb25saXN0ID0gW107XHJcblx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLmRldGFpbDFTdHlsZURlZkxpc3QuZm9yRWFjaChhdHRyID0+IHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRqc29ubGlzdC5wdXNoKHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlkOiBhdHRyLmluZm8uaWQsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhdHRyczogT2JqZWN0LmtleXMoYXR0ci5pbmZvKS5tYXAoKGEpID0+ICh7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGF0dHI6IGEsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlOiBhdHRyLmluZm9bYV0gfHwgXCJcIixcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0pKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coanNvbmxpc3QpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgZGF0YV9qc29uID0gQmFzZTY0LmVuY29kZShKU09OLnN0cmluZ2lmeShqc29ubGlzdCkpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgZXZlbnRpZCA9ICR0aGlzLkxpc3RQYWdlSHRtbF9TaG93LmV2ZW50LmlkO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoISR0aGlzLkxpc3RQYWdlSHRtbF9TaG93LmV2ZW50LmlkLmluY2x1ZGVzKCd7JykpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZXZlbnRpZCA9ICd7JyArICR0aGlzLkxpc3RQYWdlSHRtbF9TaG93LmV2ZW50LmlkICsgJ30nO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHQvL0hUTUzpobXpnaLkuovku7ZcclxuXHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMucnVuQ3VzdG9tRXZlbnQoe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGVkX3R5cGU6IDAsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0c3RhcnRfdHJhbnNhY3Rpb246IHRydWUsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NfaWQ6ICR0aGlzLnBhcmFtLkRhdGFDbHMuaWQsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZXZlbnRfaWQ6IGV2ZW50aWQsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF0YV9qc29uLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdC8vICR0aGlzLmRldGFpbDFTdHlsZURlZkxpc3Q9W107XHJcblx0XHRcdFx0XHRcdFx0XHRcdHJldC5yZXN1bHQub2JqX2xpc3QuZm9yRWFjaCgob2JqKSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIHN0eWxlU3RyID0gSlNPTi5zdHJpbmdpZnkoJHRoaXMuZGV0YWlsMV9zdHlsZWRlZik7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGRldGFpbFN0eWxlID0gSlNPTi5wYXJzZShzdHlsZVN0cik7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gdmFyIGluZm8gPXtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyAgICAgU19JRDpvYmouaWQsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gfTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvYmouYXR0cl9saXN0LmZvckVhY2goKGF0dHIpID0+IHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGluZm9bYXR0ci5uYW1lXT1hdHRyLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGV0YWlsU3R5bGUuZm9ybS5pdGVtcy5mb3JFYWNoKGVsZSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChlbGUubmFtZSAhPSAnTGF5b3V0Jykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChlbGUuZmllbGRJZCA9PSBhdHRyLm5hbWUpIGVsZVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0LnZhbHVlID0gYXR0ci52YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmIChlbGUubmFtZSA9PSAnTGF5b3V0Jykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGVsZS5zZXR0aW5nLmNvbExpc3QuZm9yRWFjaChcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbCA9PiB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChjb2wpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoY29sLmZpZWxkSWQgPT1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGF0dHIubmFtZSkgY29sXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQudmFsdWUgPSBhdHRyXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQudmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9KTtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZGV0YWlsU3R5bGUuZm9ybS5odG1sb2JqSWQgPSBvYmouaWQgPyBvYmouaWQucmVwbGFjZSgvLS9nLCAnJylcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC5yZXBsYWNlKCd7JywgJycpLnJlcGxhY2UoJ30nLCAnJykgOiAnbnVsbCc7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZGV0YWlsU3R5bGUuZm9ybS5vYmpJZCA9IG9iai5pZDtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRkZXRhaWxTdHlsZS5mb3JtLmF0dHJzID0gb2JqLmF0dHJfbGlzdDtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy5kZXRhaWwxU3R5bGVEZWZMaXN0LnB1c2goZGV0YWlsU3R5bGUpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLmFjdGl2ZWxpc3QucHVzaCh7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhY3RpdmU6IGZhbHNlXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly9saXN0LnB1c2goaW5mbyk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0XHRcdC8vIOino+WGs3ZpZXflsYLkuI3lkIzmraXnmoTpl67pophcclxuXHRcdFx0XHRcdFx0XHRcdC8vICR0aGlzLnNjcm9sbFRvcCA9ICR0aGlzLm9sZC5zY3JvbGxUb3A7XHJcblx0XHRcdFx0XHRcdFx0XHQkdGhpcy5pc1Njcm9sbCA9IGZhbHNlO1xyXG5cdFx0XHRcdFx0XHRcdFx0c2V0VGltZW91dChmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMuaXNTY3JvbGwgPSB0cnVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0fSwgMTAwMCk7XHJcblx0XHRcdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZygkdGhpcy5kZXRhaWwxU3R5bGVEZWZMaXN0KTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblxyXG5cclxuXHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7XHJcblx0XHRcdFx0XHRcdFx0XHR0aXRsZTogdGhpcy50cmFuc2xhdGVTeXMoXCJlcnJvclwiKSArIFwiNVwiLFxyXG5cdFx0XHRcdFx0XHRcdFx0Y29udGVudDogcmV0LmVycl9tc2csXHJcblx0XHRcdFx0XHRcdFx0XHRzaG93Q2FuY2VsOiBmYWxzZSxcclxuXHRcdFx0XHRcdFx0XHRcdGNvbmZpcm1UZXh0OiB0aGlzLnRyYW5zbGF0ZVN5cyhcImNhbmNlbFwiKVxyXG5cdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9KS5jYXRjaChleCA9PiB7XHJcblx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKGV4KTtcclxuXHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7XHJcblx0XHRcdFx0XHRcdFx0dGl0bGU6IHRoaXMudHJhbnNsYXRlU3lzKFwiZXJyb3JcIikgKyBcIjUuMVwiLFxyXG5cdFx0XHRcdFx0XHRcdGNvbnRlbnQ6IGV4LmVyck1zZyxcclxuXHRcdFx0XHRcdFx0XHRzaG93Q2FuY2VsOiBmYWxzZSxcclxuXHRcdFx0XHRcdFx0XHRjb25maXJtVGV4dDogdGhpcy50cmFuc2xhdGVTeXMoXCJjYW5jZWxcIilcclxuXHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHR9IGNhdGNoIChleCkge1xyXG5cdFx0XHRcdFx0dmFyIHRpcCA9IHR5cGVvZiBleCA9PSBcInN0cmluZ1wiID8gZXggOiBleC5tZXNzYWdlO1xyXG5cdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7XHJcblx0XHRcdFx0XHRcdHRpdGxlOiB0aGlzLnRyYW5zbGF0ZVN5cyhcImVycm9yXCIpICsgXCI1LjJcIixcclxuXHRcdFx0XHRcdFx0Y29udGVudDogdGlwLFxyXG5cdFx0XHRcdFx0XHRzaG93Q2FuY2VsOiBmYWxzZSxcclxuXHRcdFx0XHRcdFx0Y29uZmlybVRleHQ6IHRoaXMudHJhbnNsYXRlU3lzKFwiY2FuY2VsXCIpXHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0sXHJcblxyXG5cdFx0XHQvL+WIt+aWsFxyXG5cdFx0XHRSZWZyZXNoKHZhbHVlKSB7XHJcblx0XHRcdFx0Ly/liLfmlrDlvZPliY3pobXpnaJcclxuXHRcdFx0XHR0aGlzLmluaXRpYWwoKTtcclxuXHRcdFx0XHQvLyB1bmkucmVkaXJlY3RUbyh7XHJcblx0XHRcdFx0Ly8gXHR1cmw6Jy4uL21vZGFsLzMyMDA/cGFyYW09JytKU09OLnN0cmluZ2lmeSh0aGlzLiRkYXRhLnBhcmFtKStcIiZ0aXRsZW5hbWU9XCIrdGhpcy4kZGF0YS50aXRsZSxcclxuXHRcdFx0XHQvLyB9KTtcclxuXHRcdFx0fSxcclxuXHRcdFx0Ly/ngrnlh7vmmL7npLrmtY/op4jlr7nosaHmmL7npLrpobXpnaJcclxuXHRcdFx0YXN5bmMgb25WaWV3UGFnZUNsaWNrKHN0eWxlKSB7XHJcblx0XHRcdFx0aWYgKHRoaXMucGFyYW0uVmlld1BhZ2UpIHtcclxuXHRcdFx0XHRcdGlmICh0aGlzLnBhcmFtLlZpZXdQYWdlLlZpZXdfVUlEZWYpIHtcclxuXHRcdFx0XHRcdFx0dGhpcy5zdHlsZWRlZiA9IHN0eWxlO1xyXG5cdFx0XHRcdFx0XHR2YXIgJHRoaXMgPSB0aGlzO1xyXG5cdFx0XHRcdFx0XHR1bmkubmF2aWdhdGVUbyh7XHJcblx0XHRcdFx0XHRcdFx0dXJsOiAnLi4vbW9kYWwvMzIwMF92aWV3P3BhcmFtPScgKyBKU09OLnN0cmluZ2lmeSh0aGlzLnBhcmFtKSArIFwiJnRpdGxlbmFtZT1cIiArXHJcblx0XHRcdFx0XHRcdFx0XHR0aGlzLnRpdGxlICsgXCImc3R5bGU9XCIgKyBKU09OLnN0cmluZ2lmeShzdHlsZSksXHJcblx0XHRcdFx0XHRcdFx0ZXZlbnRzOiB7XHJcblx0XHRcdFx0XHRcdFx0XHQvLyDkuLrmjIflrprkuovku7bmt7vliqDkuIDkuKrnm5HlkKzlmajvvIzojrflj5booqvmiZPlvIDpobXpnaLkvKDpgIHliLDlvZPliY3pobXpnaLnmoTmlbDmja5cclxuXHRcdFx0XHRcdFx0XHRcdEV4aXRWaWV3RXZlbnQ6IGZ1bmN0aW9uKGRhdGEpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0Y29uc29sZS5sb2coZGF0YSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdC8v6YCA5Ye66aG16Z2i5ZCO5LqL5Lu2XHJcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBldmVudGlkID0gJHRoaXMucGFyYW0uVmlld1BhZ2UuRXhpdF9WaWV3X0V2ZW50Py5pZDtcclxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKGV2ZW50aWQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0cnkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIG9ial9hdHRyID0ge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnU19JRCc6ICR0aGlzLnN0eWxlZGVmLmZvcm0ub2JqSWRcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy5zdHlsZWRlZi5mb3JtLmF0dHJzLmZvckVhY2goKGF0dHIpID0+IHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0b2JqX2F0dHJbYXR0ci5uYW1lXSA9IGF0dHIudmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKG9ial9hdHRyKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBpbnB1dF9wYXJhbSA9IEJhc2U2NC5lbmNvZGUoSlNPTi5zdHJpbmdpZnkob2JqX2F0dHIpKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLnJ1bkN1c3RvbUV2ZW50KHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZWRfdHlwZTogMCxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0c3RhcnRfdHJhbnNhY3Rpb246IHRydWUsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzX2lkOiAkdGhpcy5wYXJhbS5EYXRhQ2xzLmlkLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRldmVudF9pZDogZXZlbnRpZCxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF0YV9vYmpfaWQ6ICR0aGlzLnN0eWxlZGVmLmZvcm0ub2JqSWQsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9ial9hdHRyLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpbnB1dF9wYXJhbSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0gY2F0Y2ggKGV4KSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgdGlwID0gdHlwZW9mIGV4ID09IFwic3RyaW5nXCIgPyBleCA6IGV4Lm1lc3NhZ2U7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGl0bGU6IHRoaXMudHJhbnNsYXRlU3lzKFwiZXJyb3JcIiksXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnRlbnQ6IHRpcCxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0c2hvd0NhbmNlbDogZmFsc2UsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbmZpcm1UZXh0OiB0aGlzLnRyYW5zbGF0ZVN5cyhcImNhbmNlbFwiKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9LFxyXG5cdFx0XHQvL+eCueWHu+aMiemSrlxyXG5cdFx0XHRvbkJ0bkNsaWNrKGJ0biwgc3R5bGUpIHtcclxuXHRcdFx0XHR2YXIgdGhhdCA9IHRoaXNcclxuXHRcdFx0XHRpZiAoYnRuLlByb21wdCkge1xyXG5cdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7XHJcblx0XHRcdFx0XHRcdHRpdGxlOiB0aGlzLnRyYW5zbGF0ZVN5cyhcInRpcFwiKSxcclxuXHRcdFx0XHRcdFx0Y29udGVudDogYnRuLlByb21wdENvbnRlbnQgfHwgdGhpcy50cmFuc2xhdGUoXCJhcmVfeW91X3N1cmVcIiksXHJcblx0XHRcdFx0XHRcdHN1Y2Nlc3M6IGZ1bmN0aW9uKHJlcykge1xyXG5cdFx0XHRcdFx0XHRcdGlmIChyZXMuY29uZmlybSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0dGhhdC5vbkJ1dHRvbkNsaWNrZWQoYnRuLCBzdHlsZSk7XHJcblx0XHRcdFx0XHRcdFx0XHQvLyB9IGVsc2UgaWYgKHJlcy5jYW5jZWwpIHtcclxuXHRcdFx0XHRcdFx0XHRcdC8vIFx0Y29uc29sZS5sb2coJ+eUqOaIt+eCueWHu+WPlua2iCcpO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0fSBlbHNlIHRoYXQub25CdXR0b25DbGlja2VkKGJ0biwgc3R5bGUpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHQvL+eCueWHu+aMiemSruWIl+ihqFxyXG5cdFx0XHRhY3Rpb25TaGVldFRhcCgpIHtcclxuXHRcdFx0XHR2YXIgdGhhdCA9IHRoaXNcclxuXHRcdFx0XHR2YXIgaXRlbWxpc3QgPSBbXTtcclxuXHRcdFx0XHR0aGlzLnBhcmFtLkxpc3RQYWdlLlBhZ2VfQnV0dG9uLmZvckVhY2goKGJ0bikgPT4ge1xyXG5cdFx0XHRcdFx0aXRlbWxpc3QucHVzaChidG4uU2hvd05hbWUpO1xyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHRcdHVuaS5zaG93QWN0aW9uU2hlZXQoe1xyXG5cdFx0XHRcdFx0Ly8gdGl0bGU6ICfmjInpkq7liJfooagnLFxyXG5cdFx0XHRcdFx0aXRlbUxpc3Q6IGl0ZW1saXN0LFxyXG5cdFx0XHRcdFx0c3VjY2VzczogKGUpID0+IHtcclxuXHRcdFx0XHRcdFx0Y29uc29sZS5sb2coZS50YXBJbmRleCk7XHJcblx0XHRcdFx0XHRcdHZhciBidG4gPSB0aGF0LnBhcmFtLkxpc3RQYWdlLlBhZ2VfQnV0dG9uW2UudGFwSW5kZXhdO1xyXG5cdFx0XHRcdFx0XHRpZiAoYnRuLlByb21wdCkge1xyXG5cdFx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe1xyXG5cdFx0XHRcdFx0XHRcdFx0dGl0bGU6IHRoaXMudHJhbnNsYXRlU3lzKFwidGlwXCIpLFxyXG5cdFx0XHRcdFx0XHRcdFx0Y29udGVudDogYnRuLlByb21wdENvbnRlbnQgfHwgdGhpcy50cmFuc2xhdGUoXCJhcmVfeW91X3N1cmVcIiksXHJcblx0XHRcdFx0XHRcdFx0XHRzdWNjZXNzOiBmdW5jdGlvbihyZXMpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKHJlcy5jb25maXJtKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhhdC5vbkJ1dHRvbkNsaWNrZWQoYnRuKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyB9IGVsc2UgaWYgKHJlcy5jYW5jZWwpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBcdGNvbnNvbGUubG9nKCfnlKjmiLfngrnlh7vlj5bmtognKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHR9IGVsc2UgdGhhdC5vbkJ1dHRvbkNsaWNrZWQoYnRuKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KVxyXG5cdFx0XHR9LFxyXG5cdFx0XHQvL+WkhOeQhuebuOWFs+aMiemSrlxyXG5cdFx0XHRhc3luYyBvbkJ1dHRvbkNsaWNrZWQoYnRuLCBzdHlsZSkge1xyXG5cdFx0XHRcdHN0eWxlID0gc3R5bGUgfHwgJyc7XHJcblx0XHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRcdHZhciBlbnZpcm9tZW50ID0ge1xyXG5cdFx0XHRcdFx0XHRidXR0b246IFwidG9wXCIsXHJcblx0XHRcdFx0XHRcdGJ1dHRvbl9uYW1lOiBidG4uU2hvd05hbWUsXHJcblx0XHRcdFx0XHRcdGNsc19pZDogYnRuLkNsc19JRCxcclxuXHRcdFx0XHRcdFx0ZnVuY3Rpb246IFwiMzIwMFwiLFxyXG5cdFx0XHRcdFx0XHRtYXN0ZXI6IHt9LFxyXG5cdFx0XHRcdFx0fTtcclxuXHRcdFx0XHRcdGlmIChidG4uRnVuQ29kZSA9PSBcIkFkZFwiIHx8IGJ0bi5GdW5Db2RlID09IFwiTW9kaWZ5XCIpIHtcclxuXHRcdFx0XHRcdFx0aWYgKGJ0bi5FZGl0X2RsZy5Nb2RlbCA9PSBcInNtYWxsXCIpIHtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLnNob3dBZGRTbWFsbERpYWxvZyhidG4sIHN0eWxlLCBlbnZpcm9tZW50KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSBlbHNlIGlmIChidG4uRnVuQ29kZSA9PSBcIkRlbGV0ZVwiKSB7XHJcblx0XHRcdFx0XHRcdHRoaXMuRGVsZXRlT2JqKGJ0biwgc3R5bGUsIGVudmlyb21lbnQpO1xyXG5cdFx0XHRcdFx0XHQvLyB9IGVsc2UgaWYgKGJ0bi5GdW5Db2RlID09IFwiVHJpZ2dlckV2ZW50XCIpIHtcclxuXHRcdFx0XHRcdFx0Ly8gICB0aGlzLnRyaWdnZXJFdmVudChidG4sIHN0eWxlLCBlbnZpcm9tZW50KTtcclxuXHRcdFx0XHRcdH0gZWxzZSBpZiAoYnRuLkZ1bkNvZGUgPT0gXCJUcmlnZ2VyRXZlbnRcIikge1xyXG5cdFx0XHRcdFx0XHR0aGlzLlRyaWdnZXJFdmVudChidG4sIHN0eWxlLCBlbnZpcm9tZW50KTtcclxuXHRcdFx0XHRcdFx0Ly8gfSBlbHNlIGlmIChidG4uRnVuQ29kZSA9PSBcIlRyaWdnZXJFdmVudFwiKSB7XHJcblx0XHRcdFx0XHRcdC8vICAgdGhpcy50cmlnZ2VyRXZlbnQoYnRuLCBzdHlsZSwgZW52aXJvbWVudCk7XHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKGJ0bi5GdW5Db2RlID09IFwiUmVsYXRlZEZ1bmN0aW9uXCIpIHtcclxuXHRcdFx0XHRcdFx0dGhpcy5SZWxhdGVkRnVuY3Rpb24oYnRuLCBzdHlsZSwgZW52aXJvbWVudCk7XHJcblx0XHRcdFx0XHRcdC8vIH0gZWxzZSBpZiAoYnRuLkZ1bkNvZGUgPT0gXCJUcmlnZ2VyRXZlbnRcIikge1xyXG5cdFx0XHRcdFx0XHQvLyAgIHRoaXMudHJpZ2dlckV2ZW50KGJ0biwgc3R5bGUsIGVudmlyb21lbnQpO1xyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7XHJcblx0XHRcdFx0XHRcdFx0dGl0bGU6IHRoaXMudHJhbnNsYXRlU3lzKFwidGlwXCIpLFxyXG5cdFx0XHRcdFx0XHRcdGNvbnRlbnQ6IHRoaXMudHJhbnNsYXRlU3lzKFwidW5yZWFsaXplZFwiKSxcclxuXHRcdFx0XHRcdFx0XHRzaG93Q2FuY2VsOiBmYWxzZSxcclxuXHRcdFx0XHRcdFx0XHRjb25maXJtVGV4dDogdGhpcy50cmFuc2xhdGVTeXMoXCJjYW5jZWxcIilcclxuXHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSBjYXRjaCAoZXgpIHtcclxuXHRcdFx0XHRcdHZhciB0aXAgPSB0eXBlb2YgZXggPT0gXCJzdHJpbmdcIiA/IGV4IDogZXgubWVzc2FnZTtcclxuXHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe1xyXG5cdFx0XHRcdFx0XHR0aXRsZTogdGhpcy50cmFuc2xhdGVTeXMoXCJlcnJvclwiKSxcclxuXHRcdFx0XHRcdFx0Y29udGVudDogdGlwLFxyXG5cdFx0XHRcdFx0XHRzaG93Q2FuY2VsOiBmYWxzZSxcclxuXHRcdFx0XHRcdFx0Y29uZmlybVRleHQ6IHRoaXMudHJhbnNsYXRlU3lzKFwiY2FuY2VsXCIpXHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0sXHJcblx0XHRcdC8v5paw5aKe5L+u5pS55bCP56qX5Y+j5pWw5o2uXHJcblx0XHRcdHNob3dBZGRTbWFsbERpYWxvZyhidG4sIHN0eWxlLCBlbnZpcm9tZW50KSB7XHJcblx0XHRcdFx0dmFyIGRhdGEgPSB7XHJcblx0XHRcdFx0XHRBZGRfQnRuTmFtZTogYnRuLlNob3dOYW1lLFxyXG5cdFx0XHRcdFx0RWRpdERsZ01vZGU6IGJ0bi5FZGl0X2RsZy5Nb2RlbCxcclxuXHRcdFx0XHRcdGNsc2lkOiB0aGlzLnBhcmFtLkRhdGFDbHMuaWQsXHJcblx0XHRcdFx0XHRjbHNfbmFtZTogdGhpcy5wYXJhbS5EYXRhQ2xzLm5hbWUsXHJcblx0XHRcdFx0XHRFZGl0X2RsZzogYnRuLkVkaXRfZGxnXHJcblx0XHRcdFx0fTtcclxuXHRcdFx0XHR2YXIgJHRoaXMgPSB0aGlzO1xyXG5cdFx0XHRcdHVuaS5uYXZpZ2F0ZVRvKHtcclxuXHRcdFx0XHRcdHVybDogJy4uL21vZGFsLzMwMTg/cGFyYW09JyArIEpTT04uc3RyaW5naWZ5KGRhdGEpICsgXCImdGl0bGVuYW1lPVwiICsgYnRuLkVkaXRfZGxnLk5hbWUgK1xyXG5cdFx0XHRcdFx0XHRcIiZ0eXBlPWFkZERhdGFPYmpcIixcclxuXHRcdFx0XHRcdGV2ZW50czoge1xyXG5cdFx0XHRcdFx0XHQvLyDkuLrmjIflrprkuovku7bmt7vliqDkuIDkuKrnm5HlkKzlmajvvIzojrflj5booqvmiZPlvIDpobXpnaLkvKDpgIHliLDlvZPliY3pobXpnaLnmoTmlbDmja5cclxuXHRcdFx0XHRcdFx0YWRkRGF0YU9iajogZnVuY3Rpb24oZGF0YSkge1xyXG5cdFx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKGRhdGEpO1xyXG5cdFx0XHRcdFx0XHRcdCR0aGlzLlJlZnJlc2goKTtcclxuXHRcdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fSxcclxuXHRcdFx0Ly/liKDpmaTmlbDmja7lr7nosaFcclxuXHRcdFx0RGVsZXRlT2JqKGJ0biwgc3R5bGUsIGVudmlyb21lbnQpIHtcclxuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhzdHlsZSk7XHJcblx0XHRcdFx0dmFyICR0aGlzID0gdGhpcztcclxuXHRcdFx0XHR1bmkuc2hvd01vZGFsKHtcclxuXHRcdFx0XHRcdHRpdGxlOiB0aGlzLnRyYW5zbGF0ZVN5cyhcInRpcFwiKSxcclxuXHRcdFx0XHRcdGNvbnRlbnQ6IHRoaXMudHJhbnNsYXRlKFwiY29uZmlybV9kZWxldGVfZGF0YVwiKSxcclxuXHRcdFx0XHRcdHN1Y2Nlc3M6IGZ1bmN0aW9uKHJlcykge1xyXG5cdFx0XHRcdFx0XHRpZiAocmVzLmNvbmZpcm0pIHtcclxuXHRcdFx0XHRcdFx0XHR2YXIgb2JqSUQgPSBzdHlsZS5mb3JtLm9iaklkO1xyXG5cdFx0XHRcdFx0XHRcdGlmICghc3R5bGUuZm9ybS5vYmpJZC5pbmNsdWRlcygneycpKSBvYmpJRCA9ICd7JyArIHN0eWxlLmZvcm0ub2JqSWQgKyAnfSc7XHJcblxyXG5cdFx0XHRcdFx0XHRcdHZhciBkYXRhSW5mbyA9IHtcclxuXHRcdFx0XHRcdFx0XHRcdGNsYXNzX2lkOiBidG4uQ2xzX0lELFxyXG5cdFx0XHRcdFx0XHRcdFx0Y2xhc3NfbmFtZTogJycsXHJcblx0XHRcdFx0XHRcdFx0XHRvYmpfaWQ6IG9iaklEXHJcblx0XHRcdFx0XHRcdFx0fTtcclxuXHRcdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhkYXRhSW5mbyk7XHJcblx0XHRcdFx0XHRcdFx0JHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdkYXRhT2JqRGVsJywgZGF0YUluZm8pLnRoZW4ocmV0ID0+IHtcclxuXHRcdFx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKHJldCk7XHJcblx0XHRcdFx0XHRcdFx0XHRpZiAocmV0LmVycl9jb2RlID09IDApIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0Ly/miafooYzlkI7lpITnkIbkuovku7ZcclxuXHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMuQWZ0ZXJQcm9jZXNzX0V2ZW50KGJ0bi5jbHNJZCwgYnRtLkFmdGVyUHJvY2Vzc19FdmVudCxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRlbnZpcm9tZW50KTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0Ly/muIXpmaTlvZPliY3liJfooajmlbDmja5cclxuXHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMuZGV0YWlsMVN0eWxlRGVmTGlzdC5mb3JFYWNoKChlbGUsIGluZGV4KSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGVsZS5mb3JtLm9iaklkID09IG9iaklEKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy5kZXRhaWwxU3R5bGVEZWZMaXN0LnNwbGljZShpbmRleCwgMSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGl0bGU6IHRoaXMudHJhbnNsYXRlU3lzKFwidGlwXCIpLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnRlbnQ6IHRoaXMudHJhbnNsYXRlKFwiZGVsZXRlX3N1Y2Nlc3NcIiksXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0c2hvd0NhbmNlbDogZmFsc2UsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uZmlybVRleHQ6IHRoaXMudHJhbnNsYXRlU3lzKFwiY2FuY2VsXCIpXHJcblx0XHRcdFx0XHRcdFx0XHRcdH0pO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRpdGxlOiB0aGlzLnRyYW5zbGF0ZVN5cyhcImVycm9yXCIpICsgXCI2LjFcIixcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb250ZW50OiByZXQuZXJyX21zZyxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRzaG93Q2FuY2VsOiBmYWxzZSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb25maXJtVGV4dDogdGhpcy50cmFuc2xhdGVTeXMoXCJjYW5jZWxcIilcclxuXHRcdFx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0fSkuY2F0Y2goZXggPT4ge1xyXG5cdFx0XHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coZXgpO1xyXG5cdFx0XHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHRpdGxlOiB0aGlzLnRyYW5zbGF0ZVN5cyhcImVycm9yXCIpICsgXCI2XCIsXHJcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnRlbnQ6IGV4LmVyck1zZyxcclxuXHRcdFx0XHRcdFx0XHRcdFx0c2hvd0NhbmNlbDogZmFsc2UsXHJcblx0XHRcdFx0XHRcdFx0XHRcdGNvbmZpcm1UZXh0OiB0aGlzLnRyYW5zbGF0ZVN5cyhcImNhbmNlbFwiKVxyXG5cdFx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAocmVzLmNhbmNlbCkge1xyXG5cclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pO1xyXG5cclxuXHRcdFx0fSxcclxuXHRcdFx0Ly/miafooYzkuovku7ZcclxuXHRcdFx0YXN5bmMgVHJpZ2dlckV2ZW50KGJ0biwgc3R5bGUsIGVudmlyb21lbnQpIHsgLy/miafooYzop6blj5Hkuovku7ZcclxuXHRcdFx0XHR0cnkge1xyXG5cdFx0XHRcdFx0bGV0IG9ial9hdHRyID0ge1xyXG5cdFx0XHRcdFx0XHRTX0lEOiB0aGlzLnN0eWxlZGVmLmZvcm0ub2JqSWRcclxuXHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHRzdHlsZS5mb3JtLmF0dHJzLmZvckVhY2goKGF0dHIpID0+IHtcclxuXHRcdFx0XHRcdFx0b2JqX2F0dHJbYXR0ci5uYW1lXSA9IGF0dHIudmFsdWU7XHJcblx0XHRcdFx0XHR9KTtcclxuXHJcblx0XHRcdFx0XHRpZiAoIXRoaXMuTGlzdFBhZ2VIdG1sX1Nob3cuZXZlbnQuaWQpIHtcclxuXHRcdFx0XHRcdFx0Ly/liKTmlq3msqHmnIlIVE1M6aG16Z2i5LqL5Lu2XHJcblx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKHRoaXMuZGV0YWlsMl9zdHlsZWRlZik7XHJcblx0XHRcdFx0XHRcdHRoaXMuZGV0YWlsMl9zdHlsZWRlZi5mb3JtLml0ZW1zLmZvckVhY2goYXN5bmMgKGVsZSwgaW5kZXgpID0+IHtcclxuXHRcdFx0XHRcdFx0XHRpZiAoZWxlLm5hbWUgIT0gXCJMYXlvdXRcIikge1xyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKCFvYmpfYXR0cltlbGUuZmllbGRJZF0pIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0b2JqX2F0dHJbZWxlLmZpZWxkSWRdID0gZWxlLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoZWxlLm5hbWUgPT0gXCJMYXlvdXRcIikge1xyXG5cdFx0XHRcdFx0XHRcdFx0ZWxlLnNldHRpbmcuY29sTGlzdC5mb3JFYWNoKGFzeW5jIChjb2wsIGtleSkgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoY29sKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCFvYmpfYXR0cltjb2wuZmllbGRJZF0pIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9ial9hdHRyW2NvbC5maWVsZElkXSA9IGNvbC52YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0Y29uc3QgZGF0YUluZm8gPSB7XHJcblx0XHRcdFx0XHRcdGVkX3R5cGU6IDAsXHJcblx0XHRcdFx0XHRcdHN0YXJ0X3RyYW5zYWN0aW9uOiB0cnVlLFxyXG5cdFx0XHRcdFx0XHRjbGFzc19pZDogYnRuLmNsc0lkLFxyXG5cdFx0XHRcdFx0XHRldmVudF9pZDogYnRuLmV2ZW50LmlkLFxyXG5cdFx0XHRcdFx0XHRkYXRhX29ial9pZDogdGhpcy5zdHlsZWRlZi5mb3JtLm9iaklkLFxyXG5cdFx0XHRcdFx0XHRvYmpfYXR0cjogb2JqX2F0dHIsXHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR0aGlzLiRzdG9yZS5kaXNwYXRjaCgncnVuQ3VzdG9tRXZlbnQnLCBkYXRhSW5mbykudGhlbihyZXQgPT4ge1xyXG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhyZXQpO1xyXG5cdFx0XHRcdFx0XHRpZiAocmV0LmVycl9jb2RlID09IDApIHtcclxuXHRcdFx0XHRcdFx0XHR2YXIgcmVzdWx0ID0gcmV0LnJlc3VsdDtcclxuXHRcdFx0XHRcdFx0XHRpZiAocmVzdWx0LnJldCAhPSAwKSB7XHJcblx0XHRcdFx0XHRcdFx0XHR2YXIgdGlwID0gcmVzdWx0LmVycl9pbmZvID8gdHlwZW9mIHJlc3VsdC5lcnJfaW5mbyA9PVxyXG5cdFx0XHRcdFx0XHRcdFx0XHQnc3RyaW5nJyA/XHJcblx0XHRcdFx0XHRcdFx0XHRcdHJlc3VsdFxyXG5cdFx0XHRcdFx0XHRcdFx0XHQuZXJyX2luZm8gOiByZXN1bHQuZXJyX2luZm8uam9pbignPGJyLz4nKSA6ICcnO1xyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKHJlc3VsdC5yZXQgPT0gODAxKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmICh0aGlzLnBhcmFtLk9ubHlfU2NyaXB0X0Vycm9yKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0bGV0IHBvcyA9IHRpcC5pbmRleE9mKFwi77yaXCIpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChwb3MgPiAtMSkgdGlwID0gdGlwLnN1YnN0cmluZyhwb3MgKyAxKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aXRsZTogdGhpcy50cmFuc2xhdGVTeXMoXCJ0aXBcIiksXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29udGVudDogdGlwLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHNob3dDYW5jZWw6IGZhbHNlLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvbmZpcm1UZXh0OiB0aGlzLnRyYW5zbGF0ZVN5cyhcImNhbmNlbFwiKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB1bmkuc2hvd01vZGFsKHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0dGl0bGU6IHRoaXMudHJhbnNsYXRlU3lzKFwidGlwXCIpLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRjb250ZW50OiB0aXAgKyAnLCcgKyB0aGlzLnRyYW5zbGF0ZVN5cygndGlwJykgK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCc6JyArXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzdWx0XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0LnJldCxcclxuXHRcdFx0XHRcdFx0XHRcdFx0c2hvd0NhbmNlbDogZmFsc2UsXHJcblx0XHRcdFx0XHRcdFx0XHRcdGNvbmZpcm1UZXh0OiB0aGlzLnRyYW5zbGF0ZVN5cyhcImNhbmNlbFwiKVxyXG5cdFx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdHZhciB0aXAgPSByZXN1bHQuaW5mbyA/IHR5cGVvZiByZXN1bHQuaW5mbyA9PSAnc3RyaW5nJyA/IHJlc3VsdFxyXG5cdFx0XHRcdFx0XHRcdFx0XHQuaW5mbyA6XHJcblx0XHRcdFx0XHRcdFx0XHRcdHJlc3VsdC5pbmZvLmpvaW4oJzxici8+JykgOiAnJztcclxuXHRcdFx0XHRcdFx0XHRcdGlmICh0aXApIHVuaS5zaG93TW9kYWwoe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR0aXRsZTogdGhpcy50cmFuc2xhdGVTeXMoXCJ0aXBcIiksXHJcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnRlbnQ6IHRpcCxcclxuXHRcdFx0XHRcdFx0XHRcdFx0c2hvd0NhbmNlbDogZmFsc2UsXHJcblx0XHRcdFx0XHRcdFx0XHRcdGNvbmZpcm1UZXh0OiB0aGlzLnRyYW5zbGF0ZVN5cyhcImNhbmNlbFwiKVxyXG5cdFx0XHRcdFx0XHRcdFx0fSk7XHJcblxyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHtcclxuXHRcdFx0XHRcdFx0XHRcdHRpdGxlOiB0aGlzLnRyYW5zbGF0ZVN5cyhcImVycm9yXCIpICsgXCI4XCIsXHJcblx0XHRcdFx0XHRcdFx0XHRjb250ZW50OiByZXQuZXJyX21zZyxcclxuXHRcdFx0XHRcdFx0XHRcdHNob3dDYW5jZWw6IGZhbHNlLFxyXG5cdFx0XHRcdFx0XHRcdFx0Y29uZmlybVRleHQ6IHRoaXMudHJhbnNsYXRlU3lzKFwiY2FuY2VsXCIpXHJcblx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHR9KS5jYXRjaChleCA9PiB7XHJcblx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKGV4KTtcclxuXHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7XHJcblx0XHRcdFx0XHRcdFx0dGl0bGU6IHRoaXMudHJhbnNsYXRlU3lzKFwiZXJyb3JcIikgKyBcIjguMVwiLFxyXG5cdFx0XHRcdFx0XHRcdGNvbnRlbnQ6IGV4LmVyck1zZyxcclxuXHRcdFx0XHRcdFx0XHRzaG93Q2FuY2VsOiBmYWxzZSxcclxuXHRcdFx0XHRcdFx0XHRjb25maXJtVGV4dDogdGhpcy50cmFuc2xhdGVTeXMoXCJjYW5jZWxcIilcclxuXHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHR9IGNhdGNoIChleCkge1xyXG5cdFx0XHRcdFx0dmFyIHRpcCA9IHR5cGVvZiBleCA9PSBcInN0cmluZ1wiID8gZXggOiBleC5tZXNzYWdlO1xyXG5cdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7XHJcblx0XHRcdFx0XHRcdHRpdGxlOiB0aGlzLnRyYW5zbGF0ZVN5cyhcImVycm9yXCIpLFxyXG5cdFx0XHRcdFx0XHRjb250ZW50OiB0aXAsXHJcblx0XHRcdFx0XHRcdHNob3dDYW5jZWw6IGZhbHNlLFxyXG5cdFx0XHRcdFx0XHRjb25maXJtVGV4dDogdGhpcy50cmFuc2xhdGVTeXMoXCJjYW5jZWxcIilcclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0dGhpcy5zaG93RXJyb3IoZXgpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSxcclxuXHRcdFx0Ly/ot7PovaxcclxuXHRcdFx0YXN5bmMgUmVsYXRlZEZ1bmN0aW9uKGJ0biwgc3R5bGUsIGVudmlyb21lbnQpIHtcclxuXHJcblx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0YnRuLlJlbGF0ZWRfRnVuY3Rpb24/LkRlZl9Db2RlID09IFwiMzAxOFwiIHx8XHJcblx0XHRcdFx0XHRidG4uUmVsYXRlZF9GdW5jdGlvbj8uRGVmX0NvZGUgPT0gXCIzMDM3XCIgfHxcclxuXHRcdFx0XHRcdGJ0bi5SZWxhdGVkX0Z1bmN0aW9uPy5EZWZfQ29kZSA9PSBcIjMyMDBcIiB8fFxyXG5cdFx0XHRcdFx0YnRuLlJlbGF0ZWRfRnVuY3Rpb24/LkRlZl9Db2RlID09IFwiMzIwMVwiIHx8XHJcblx0XHRcdFx0XHRidG4uUmVsYXRlZF9GdW5jdGlvbj8uRGVmX0NvZGUgPT0gXCI1NjAwXCIgfHxcclxuXHRcdFx0XHRcdGJ0bi5SZWxhdGVkX0Z1bmN0aW9uPy5EZWZfQ29kZSA9PSBcIjU2MDFcIiB8fFxyXG5cdFx0XHRcdFx0YnRuLlJlbGF0ZWRfRnVuY3Rpb24/LkRlZl9Db2RlID09IFwiNTYwMlwiXHJcblx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRsZXQgbmFtZSA9IGJ0bi5SZWxhdGVkX0Z1bmN0aW9uPy5EZWZfQ29kZVxyXG5cdFx0XHRcdFx0aWYgKGJ0bi5SZWxhdGVkX0Z1bmN0aW9uPy5EZWZfQ29kZSA9PSBcIjMwMThcIiB8fCBidG4uUmVsYXRlZF9GdW5jdGlvbj8uRGVmX0NvZGUgPT0gXCIzMDM3XCIpXHJcblx0XHRcdFx0XHRcdG5hbWUgPSBidG4uUmVsYXRlZF9GdW5jdGlvbj8uRGVmX0NvZGUgKyBcIl8yXCJcclxuXHJcblx0XHRcdFx0XHR2YXIgJHRoaXMgPSB0aGlzO1xyXG5cdFx0XHRcdFx0dmFyIGpzb24gPSB7XHJcblx0XHRcdFx0XHRcdGFwcF9pZDogYXBwSWQsXHJcblx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdFx0dGhpcy4kc3RvcmUuZGlzcGF0Y2goJ2FwcEdldEluZm8nLCBqc29uKS50aGVuKHN1Y2Nlc3MgPT4ge1xyXG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhzdWNjZXNzKTtcclxuXHRcdFx0XHRcdFx0aWYgKHN1Y2Nlc3MuZXJyX2NvZGUgPT0gMCkge1xyXG5cdFx0XHRcdFx0XHRcdGlmICgoc3VjY2Vzcy5yZXN1bHQgfHwgW10pLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IGFwcCA9IHN1Y2Nlc3MucmVzdWx0WzBdXHJcblx0XHRcdFx0XHRcdFx0XHR2YXIgcGFyYW0gPSBcIlwiO1xyXG5cdFx0XHRcdFx0XHRcdFx0dmFyIGFwcE5hbWUgPSBhcHAubmFtZSB8fCBhcHAubGlzdF9uYW1lXHJcblx0XHRcdFx0XHRcdFx0XHRcdC5OYW1lO1xyXG5cdFx0XHRcdFx0XHRcdFx0dmFyIHBhcmFtU3RyID0gYXBwLnBhcmFtXHJcblx0XHRcdFx0XHRcdFx0XHRpZiAocGFyYW1TdHIpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0Ly9tb2JveDLnmoRwYXJhbeaYr2pzb27lrZfnrKbkuLJcclxuXHRcdFx0XHRcdFx0XHRcdFx0cGFyYW0gPSBwYXJhbVN0ci5yZXBsYWNlKC9cXFxcL2csIFwiXCIpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHQvL21vYm94M+eahHBhcmFt5pivYmFzZTY05a2X56ym5LiyXHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmICghcGFyYW1TdHIuaW5jbHVkZXMoJ1wiJykpIHBhcmFtID0gQmFzZTY0LmRlY29kZShwYXJhbVN0cik7XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRpZiAoIXBhcmFtKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRpdGxlOiB0aGlzLnRyYW5zbGF0ZVN5cyhcInRpcFwiKSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb250ZW50OiB0aGlzLnRyYW5zbGF0ZSgndGlwX25vX2FwcF9wYXJhbScpLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHNob3dDYW5jZWw6IGZhbHNlLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvbmZpcm1UZXh0OiB0aGlzLnRyYW5zbGF0ZVN5cyhcImNhbmNlbFwiKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0XHRcdHVuaS5uYXZpZ2F0ZVRvKHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0dXJsOiAnLi4vbW9kYWwvJyArIG5hbWUgKyAnP3BhcmFtPScgKyBwYXJhbSArIFwiJnRpdGxlbmFtZT1cIiArXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0YXBwTmFtZSArXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XCImdHlwZT1yZWxhdGVkRnVuY3Rpb24mcGFyYW1WYWx1ZT1cIiArIEpTT04uc3RyaW5naWZ5KHN0eWxlXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQuZm9ybSksXHJcblx0XHRcdFx0XHRcdFx0XHRcdGV2ZW50czoge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJlbGF0ZWRGdW5jdGlvbjogZnVuY3Rpb24oZGF0YSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc29sZS5sb2coZGF0YSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy5SZWZyZXNoKCk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR0aXRsZTogdGhpcy50cmFuc2xhdGVTeXMoXCJlcnJvclwiKSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0Y29udGVudDogdGhpcy50cmFuc2xhdGUoXCJmdW5jdGlvbl9ub3RfZXhpc3RcIiksXHJcblx0XHRcdFx0XHRcdFx0XHRcdHNob3dDYW5jZWw6IGZhbHNlLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRjb25maXJtVGV4dDogdGhpcy50cmFuc2xhdGVTeXMoXCJjYW5jZWxcIilcclxuXHRcdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHtcclxuXHRcdFx0XHRcdFx0XHRcdHRpdGxlOiB0aGlzLnRyYW5zbGF0ZVN5cyhcImVycm9yXCIpLFxyXG5cdFx0XHRcdFx0XHRcdFx0Y29udGVudDogc3VjY2Vzcy5tc2csXHJcblx0XHRcdFx0XHRcdFx0XHRzaG93Q2FuY2VsOiBmYWxzZSxcclxuXHRcdFx0XHRcdFx0XHRcdGNvbmZpcm1UZXh0OiB0aGlzLnRyYW5zbGF0ZVN5cyhcImNhbmNlbFwiKVxyXG5cdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9KS5jYXRjaChleCA9PiB7XHJcblx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKGV4KTtcclxuXHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7XHJcblx0XHRcdFx0XHRcdFx0dGl0bGU6IHRoaXMudHJhbnNsYXRlU3lzKFwiZXJyb3JcIiksXHJcblx0XHRcdFx0XHRcdFx0Y29udGVudDogZXguZXJyTXNnLFxyXG5cdFx0XHRcdFx0XHRcdHNob3dDYW5jZWw6IGZhbHNlLFxyXG5cdFx0XHRcdFx0XHRcdGNvbmZpcm1UZXh0OiB0aGlzLnRyYW5zbGF0ZVN5cyhcImNhbmNlbFwiKVxyXG5cdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHtcclxuXHRcdFx0XHRcdFx0dGl0bGU6IHRoaXMudHJhbnNsYXRlU3lzKFwiZXJyb3JcIiksXHJcblx0XHRcdFx0XHRcdGNvbnRlbnQ6IHRoaXMudHJhbnNsYXRlKFwiY2Fubm90X3JlbGF0ZWRfZnVuY3Rpb25cIiksXHJcblx0XHRcdFx0XHRcdHNob3dDYW5jZWw6IGZhbHNlLFxyXG5cdFx0XHRcdFx0XHRjb25maXJtVGV4dDogdGhpcy50cmFuc2xhdGVTeXMoXCJjYW5jZWxcIilcclxuXHRcdFx0XHRcdH0pO1xyXG5cclxuXHRcdFx0XHR9XHJcblx0XHRcdH0sXHJcblx0XHRcdC8v5omn6KGM5ZCO5aSE55CG5LqL5Lu2XHJcblx0XHRcdGFzeW5jIEFmdGVyUHJvY2Vzc19FdmVudChjbHNJZCwgYWZ0ZXJQcm9jZXNzX0V2ZW50LCBlbnZpcm9tZW50KSB7XHJcblx0XHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRcdGlmIChhZnRlclByb2Nlc3NfRXZlbnQuSUQpIHtcclxuXHRcdFx0XHRcdFx0Ly/miafooYzlkI7lpITnkIbkuovku7ZcclxuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5ydW5DdXN0b21FdmVudCh7XHJcblx0XHRcdFx0XHRcdFx0ZWRfdHlwZTogMCxcclxuXHRcdFx0XHRcdFx0XHRzdGFydF90cmFuc2FjdGlvbjogdHJ1ZSxcclxuXHRcdFx0XHRcdFx0XHRjbGFzc19pZDogY2xzSWQsXHJcblx0XHRcdFx0XHRcdFx0ZXZlbnRfaWQ6IGFmdGVyUHJvY2Vzc19FdmVudC5JRCxcclxuXHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSBjYXRjaCAoZXgpIHtcclxuXHRcdFx0XHRcdHZhciB0aXAgPSB0eXBlb2YgZXggPT0gXCJzdHJpbmdcIiA/IGV4IDogZXgubWVzc2FnZTtcclxuXHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe1xyXG5cdFx0XHRcdFx0XHR0aXRsZTogdGhpcy50cmFuc2xhdGVTeXMoXCJlcnJvclwiKSArIFwiN1wiLFxyXG5cdFx0XHRcdFx0XHRjb250ZW50OiB0aXAsXHJcblx0XHRcdFx0XHRcdHNob3dDYW5jZWw6IGZhbHNlLFxyXG5cdFx0XHRcdFx0XHRjb25maXJtVGV4dDogdGhpcy50cmFuc2xhdGVTeXMoXCJjYW5jZWxcIilcclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSxcclxuXHJcblx0XHRcdG9udGFwKGl0ZW0pIHsgLy/miavnoIHlip/og71cclxuXHRcdFx0XHQvLyB2YXIgJGVsZSA9IGU7XHJcblx0XHRcdFx0Ly9jb25zb2xlLmxvZyhlLnRhcmdldClcclxuXHRcdFx0XHRnZXRBcHAoKS5vblNjYW4oKHJlc3VsdCkgPT4ge1xyXG5cdFx0XHRcdFx0Y29uc29sZS5sb2cocmVzdWx0LmRlY29kZWRhdGEpO1xyXG5cdFx0XHRcdFx0aXRlbS52YWx1ZSA9IHJlc3VsdC5kZWNvZGVkYXRhO1xyXG5cdFx0XHRcdFx0dW5pLmhpZGVLZXlib2FyZCgpO1xyXG5cdFx0XHRcdFx0dmFyICR0aGlzID0gdGhpcztcclxuXHJcblx0XHRcdFx0XHRjb25zb2xlLmxvZyhpdGVtKTtcclxuXHRcdFx0XHRcdGlmIChpdGVtLm9sZHZhbHVlICE9IGl0ZW0udmFsdWUpIHtcclxuXHRcdFx0XHRcdFx0aXRlbS5vbGR2YWx1ZSA9IGl0ZW0udmFsdWU7XHJcblx0XHRcdFx0XHRcdHZhciBhdHRyID0gaXRlbS5maWVsZElkO1xyXG5cdFx0XHRcdFx0XHR0aGlzLmhlYWRfc3R5bGVkZWYuZm9ybS5tb2RlbFthdHRyXSA9IGl0ZW0udmFsdWU7XHJcblx0XHRcdFx0XHRcdHZhciBvbkNoYW5nZUV2ZW50ID0gaXRlbS5iaW5kLm9uQ2hhbmdlRXZlbnQ7IC8v5YaF5a655Y+Y5YyW5ZCO5LqL5Lu2XHJcblx0XHRcdFx0XHRcdHZhciBvblN1ZmZpeENsaWNrQ2FsbGJhY2tFdmVudCA9IGl0ZW0uYmluZFxyXG5cdFx0XHRcdFx0XHRcdC5vblN1ZmZpeENsaWNrQ2FsbGJhY2tFdmVudDsgLy/lkI7lm77moIfngrnlh7vkuovku7ZcclxuXHRcdFx0XHRcdFx0dmFyIG9uU3VmZml4Q2xpY2tFdmVudCA9IGl0ZW0uYmluZC5vblN1ZmZpeENsaWNrRXZlbnQ7IC8v5ZCO5Zu+5qCH54K55Ye75Zue6LCDXHJcblx0XHRcdFx0XHRcdHZhciBpc2ZsYWcgPSBmYWxzZTtcclxuXHJcblx0XHRcdFx0XHRcdGlmIChvbkNoYW5nZUV2ZW50LmlkKSB7IC8v5YaF5a655Y+Y5YyW5ZCO5LqL5Lu2XHJcblx0XHRcdFx0XHRcdFx0JHRoaXMub25DaGFuZ2Uob25DaGFuZ2VFdmVudCk7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0JHRoaXMud2hlcmUgPSAnJztcclxuXHRcdFx0XHRcdFx0XHRpZiAoaXRlbS52YWx1ZSlcclxuXHRcdFx0XHRcdFx0XHRcdCR0aGlzLndoZXJlID0gaXRlbS5maWVsZElkICsgXCIgbGlrZSAnJVwiICsgaXRlbS52YWx1ZSArIFwiJSdcIjtcclxuXHRcdFx0XHRcdFx0XHQkdGhpcy5xdWVyeV9pZCA9ICcnO1xyXG5cdFx0XHRcdFx0XHRcdCR0aGlzLnBhZ2VpbmRleCA9IDE7XHJcblx0XHRcdFx0XHRcdFx0JHRoaXMuZGV0YWlsMVN0eWxlRGVmTGlzdCA9IFtdO1xyXG5cdFx0XHRcdFx0XHRcdCR0aGlzLmxvYWREYXRhR2V0TGlzdCgpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdGlmIChpdGVtLnZhbHVlKSB7IC8v56ys5LiA5Liq6L6T5YWl5qGG5LiN5Li656m6XHJcblx0XHRcdFx0XHRcdFx0JHRoaXMuZm9jdXNNYXRlcmlhID0gdHJ1ZTsgLy/liJ3lp4vljJbvvIznrKzkuozkuKrovpPlhaXmoYZmb2N1c+WxnuaAp1xyXG5cdFx0XHRcdFx0XHRcdC8vIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcclxuXHRcdFx0XHRcdFx0XHQvLyBcdCR0aGlzLmZvY3VzTWF0ZXJpYT10cnVlOyAvL+esrOS6jOS4qui+k+WFpeahhuiOt+WPlueEpueCuVxyXG5cdFx0XHRcdFx0XHRcdHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0XHRcdFx0XHR1bmkuaGlkZUtleWJvYXJkKCk7XHJcblx0XHRcdFx0XHRcdFx0fSwgMTAwMCk7XHJcblx0XHRcdFx0XHRcdFx0Ly8gfSw1MDApO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdC8vIGlmKG9uU3VmZml4Q2xpY2tDYWxsYmFja0V2ZW50LmlkKXsgICAvL+WQjuWbvuagh+eCueWHu+S6i+S7tlxyXG5cdFx0XHRcdFx0XHQvLyAgIHRoaXMub25TdWZmaXhDbGljayhvblN1ZmZpeENsaWNrQ2FsbGJhY2tFdmVudCk7XHJcblx0XHRcdFx0XHRcdC8vIH1cclxuXHRcdFx0XHRcdFx0Ly8gaWYob25TdWZmaXhDbGlja0V2ZW50LmlkKXsgICAvL+WQjuWbvuagh+eCueWHu+Wbnuiwg1xyXG5cdFx0XHRcdFx0XHQvLyAgIHRoaXMub25TdWZmaXhDbGlja0NhbGxiYWNrKG9uU3VmZml4Q2xpY2tFdmVudCk7XHJcblx0XHRcdFx0XHRcdC8vIH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KVxyXG5cdFx0XHR9LFxyXG5cdFx0XHRvbkVudGVyQ2hhbmdlKGl0ZW0pIHsgLy/lm57ovabvvIzngrnlh7vmjInpkq7vvIzlj5bmtojoioLngrnkuovku7ZcclxuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhpdGVtKTtcclxuXHRcdFx0XHRpZiAoaXRlbS5vbGR2YWx1ZSAhPSBpdGVtLnZhbHVlKSB7XHJcblx0XHRcdFx0XHRpdGVtLm9sZHZhbHVlID0gaXRlbS52YWx1ZTtcclxuXHRcdFx0XHRcdHZhciBhdHRyID0gaXRlbS5maWVsZElkO1xyXG5cdFx0XHRcdFx0dGhpcy5oZWFkX3N0eWxlZGVmLmZvcm0ubW9kZWxbYXR0cl0gPSBpdGVtLnZhbHVlO1xyXG5cdFx0XHRcdFx0dmFyIG9uQ2hhbmdlRXZlbnQgPSBpdGVtLmJpbmQub25DaGFuZ2VFdmVudDsgLy/lhoXlrrnlj5jljJblkI7kuovku7ZcclxuXHRcdFx0XHRcdHZhciBvblN1ZmZpeENsaWNrQ2FsbGJhY2tFdmVudCA9IGl0ZW0uYmluZC5vblN1ZmZpeENsaWNrQ2FsbGJhY2tFdmVudDsgLy/lkI7lm77moIfngrnlh7vkuovku7ZcclxuXHRcdFx0XHRcdHZhciBvblN1ZmZpeENsaWNrRXZlbnQgPSBpdGVtLmJpbmQub25TdWZmaXhDbGlja0V2ZW50OyAvL+WQjuWbvuagh+eCueWHu+Wbnuiwg1xyXG5cdFx0XHRcdFx0dmFyIGlzZmxhZyA9IGZhbHNlO1xyXG5cclxuXHRcdFx0XHRcdGlmIChvbkNoYW5nZUV2ZW50LmlkKSB7IC8v5YaF5a655Y+Y5YyW5ZCO5LqL5Lu2XHJcblx0XHRcdFx0XHRcdHRoaXMub25DaGFuZ2Uob25DaGFuZ2VFdmVudCk7XHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHR0aGlzLndoZXJlID0gJyc7XHJcblx0XHRcdFx0XHRcdGlmIChpdGVtLnZhbHVlKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMud2hlcmUgPSBpdGVtLmZpZWxkSWQgKyBcIiBsaWtlICclXCIgKyBpdGVtLnZhbHVlICsgXCIlJ1wiO1xyXG5cdFx0XHRcdFx0XHR0aGlzLnF1ZXJ5X2lkID0gJyc7XHJcblx0XHRcdFx0XHRcdHRoaXMucGFnZWluZGV4ID0gMTtcclxuXHRcdFx0XHRcdFx0dGhpcy5kZXRhaWwxU3R5bGVEZWZMaXN0ID0gW107XHJcblx0XHRcdFx0XHRcdHRoaXMubG9hZERhdGFHZXRMaXN0KCk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHQvLyBpZihvblN1ZmZpeENsaWNrQ2FsbGJhY2tFdmVudC5pZCl7ICAgLy/lkI7lm77moIfngrnlh7vkuovku7ZcclxuXHRcdFx0XHRcdC8vICAgdGhpcy5vblN1ZmZpeENsaWNrKG9uU3VmZml4Q2xpY2tDYWxsYmFja0V2ZW50KTtcclxuXHRcdFx0XHRcdC8vIH1cclxuXHRcdFx0XHRcdC8vIGlmKG9uU3VmZml4Q2xpY2tFdmVudC5pZCl7ICAgLy/lkI7lm77moIfngrnlh7vlm57osINcclxuXHRcdFx0XHRcdC8vICAgdGhpcy5vblN1ZmZpeENsaWNrQ2FsbGJhY2sob25TdWZmaXhDbGlja0V2ZW50KTtcclxuXHRcdFx0XHRcdC8vIH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH0sXHJcblx0XHRcdC8vIOWGheWuueWPmOWMluWQjuS6i+S7tlxyXG5cdFx0XHRhc3luYyBvbkNoYW5nZShldmVudCkge1xyXG5cdFx0XHRcdHRyeSB7XHJcblx0XHRcdFx0XHRpZiAoZXZlbnQuaWQpIHtcclxuXHRcdFx0XHRcdFx0dmFyIG9ial9hdHRyID0gdGhpcy5oZWFkX3N0eWxlZGVmLmZvcm0ubW9kZWw7XHJcblx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKG9ial9hdHRyKTtcclxuXHRcdFx0XHRcdFx0dmFyIGlucHV0X3BhcmFtID0gQmFzZTY0LmVuY29kZShcclxuXHRcdFx0XHRcdFx0XHRKU09OLnN0cmluZ2lmeShcclxuXHRcdFx0XHRcdFx0XHRcdE9iamVjdC5rZXlzKG9ial9hdHRyKS5tYXAoKGEpID0+ICh7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGF0dHI6IGEsXHJcblx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlOiBvYmpfYXR0clthXSB8fCBcIlwiLFxyXG5cdFx0XHRcdFx0XHRcdFx0fSkpXHJcblx0XHRcdFx0XHRcdFx0KVxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHR2YXIgJHRoaXMgPSB0aGlzO1xyXG5cdFx0XHRcdFx0XHR2YXIgZGF0YUluZm8gPSB7XHJcblx0XHRcdFx0XHRcdFx0ZWRfdHlwZTogMCxcclxuXHRcdFx0XHRcdFx0XHRzdGFydF90cmFuc2FjdGlvbjogdHJ1ZSxcclxuXHRcdFx0XHRcdFx0XHRjbGFzc19pZDogdGhpcy4kZGF0YS5oZWFkX3N0eWxlZGVmLmZvcm0uY2xzSWQsXHJcblx0XHRcdFx0XHRcdFx0Y2xhc3NfbmFtZTogJycsXHJcblx0XHRcdFx0XHRcdFx0ZXZlbnRfaWQ6IGV2ZW50LmlkLFxyXG5cdFx0XHRcdFx0XHRcdGV2ZW50X25hbWU6ICcnLFxyXG5cdFx0XHRcdFx0XHRcdGRhdGFfb2JqX2lkOiAnJyxcclxuXHRcdFx0XHRcdFx0XHRvYmpfYXR0cjogb2JqX2F0dHIsXHJcblx0XHRcdFx0XHRcdFx0cHJqX2lkOiAnJyxcclxuXHRcdFx0XHRcdFx0XHRyZWZfY2xzX2lkOiAnJyxcclxuXHRcdFx0XHRcdFx0XHRyZWxfb2JqX2lkOiAnJyxcclxuXHRcdFx0XHRcdFx0XHR1c2VyX2xvZ2luOiAnJyxcclxuXHRcdFx0XHRcdFx0XHRkYXRhX2pzb246ICcnLFxyXG5cdFx0XHRcdFx0XHRcdGNvbXBvc2VfaW5mbzogJycsXHJcblx0XHRcdFx0XHRcdFx0ZXh0X2luZm86ICcnLFxyXG5cdFx0XHRcdFx0XHRcdGdsb2JhbF9hdHRyOiAnJyxcclxuXHRcdFx0XHRcdFx0XHRpbnB1dF9wYXJhbTogaW5wdXRfcGFyYW0sXHJcblx0XHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHRcdHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdydW5DdXN0b21FdmVudCcsIGRhdGFJbmZvKS50aGVuKHJldCA9PiB7XHJcblx0XHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2cocmV0KTtcclxuXHRcdFx0XHRcdFx0XHRpZiAocmV0LmVycl9jb2RlID09IDApIHtcclxuXHRcdFx0XHRcdFx0XHRcdHZhciByZXN1bHQgPSByZXQucmVzdWx0O1xyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKHJlc3VsdC5yZXQgIT0gMCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgdGlwID0gcmVzdWx0LmVycl9pbmZvID8gdHlwZW9mIHJlc3VsdC5lcnJfaW5mbyA9PVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCdzdHJpbmcnID9cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXN1bHRcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQuZXJyX2luZm8gOiByZXN1bHQuZXJyX2luZm8uam9pbignPGJyLz4nKSA6ICcnO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAocmVzdWx0LnJldCA9PSA4MDEpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAodGhpcy5wYXJhbS5Pbmx5X1NjcmlwdF9FcnJvcikge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bGV0IHBvcyA9IHRpcC5pbmRleE9mKFwi77yaXCIpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKHBvcyA+IC0xKSB0aXAgPSB0aXAuc3Vic3RyaW5nKHBvcyArIDEpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRpdGxlOiB0aGlzLnRyYW5zbGF0ZVN5cyhcInRpcFwiKSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnRlbnQ6IHRpcCxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHNob3dDYW5jZWw6IGZhbHNlLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uZmlybVRleHQ6IHRoaXMudHJhbnNsYXRlU3lzKFwiY2FuY2VsXCIpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB1bmkuc2hvd01vZGFsKHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aXRsZTogdGhpcy50cmFuc2xhdGVTeXMoXCJ0aXBcIiksXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29udGVudDogdGlwICsgJywnICsgdGhpcy50cmFuc2xhdGVTeXMoJ3RpcCcpICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCc6JyArXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXN1bHRcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC5yZXQsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0c2hvd0NhbmNlbDogZmFsc2UsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uZmlybVRleHQ6IHRoaXMudHJhbnNsYXRlU3lzKFwiY2FuY2VsXCIpXHJcblx0XHRcdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgdGlwID0gcmVzdWx0LmluZm8gPyB0eXBlb2YgcmVzdWx0LmluZm8gPT0gJ3N0cmluZycgPyByZXN1bHRcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQuaW5mbyA6XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzdWx0LmluZm8uam9pbignPGJyLz4nKSA6ICcnO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAodGlwKSB1bmkuc2hvd01vZGFsKHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aXRsZTogdGhpcy50cmFuc2xhdGVTeXMoXCJ0aXBcIiksXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29udGVudDogdGlwLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHNob3dDYW5jZWw6IGZhbHNlLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvbmZpcm1UZXh0OiB0aGlzLnRyYW5zbGF0ZVN5cyhcImNhbmNlbFwiKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHR9KTtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChyZXN1bHQucmVzdWx0X3R5cGUgPT0gMCAmJiByZXN1bHQuYWN0aW9uKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzdWx0LmFjdGlvbi5mb3JFYWNoKGl0ZW0gPT4ge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGl0ZW0uYWN0aW9uX3R5cGUgPT0gXCJzZXRfZGxnX2F0dHJcIikge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyB2YWx1ZSA9IHtcImF0dHJcIjpcInh4eFwiLCBcInZhbHVlXCI6XCJ4eHhcIn1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGRhdGEgPSBpdGVtLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5oZWFkX3N0eWxlZGVmLmZvcm0uaXRlbXNcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQuZm9yRWFjaChcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFzeW5jIChcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZWxlLCBpbmRleCkgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRhLmZvckVhY2goYXN5bmMgKGVsZTIsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aW5kZXgpID0+IHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoZWxlXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQuZmllbGRJZCA9PVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZWxlMlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0LmF0dHJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGVsZS52YWx1ZSA9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGVsZTJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0LnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyB0aGlzLmRldGFpbDJTdHlsZURlZkxpc3Q9W107XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKHJlc3VsdC5pbmZvKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGl0bGU6IHRoaXMudHJhbnNsYXRlU3lzKFwidGlwXCIpLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb250ZW50OiByZXN1bHQuaW5mbyxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0c2hvd0NhbmNlbDogZmFsc2UsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbmZpcm1UZXh0OiB0aGlzLnRyYW5zbGF0ZVN5cyhcImNhbmNlbFwiKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0dGl0bGU6IHRoaXMudHJhbnNsYXRlU3lzKFwiZXJyb3JcIikgKyBcIjhcIixcclxuXHRcdFx0XHRcdFx0XHRcdFx0Y29udGVudDogcmV0LmVycl9tc2csXHJcblx0XHRcdFx0XHRcdFx0XHRcdHNob3dDYW5jZWw6IGZhbHNlLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRjb25maXJtVGV4dDogdGhpcy50cmFuc2xhdGVTeXMoXCJjYW5jZWxcIilcclxuXHRcdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fSkuY2F0Y2goZXggPT4ge1xyXG5cdFx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKGV4KTtcclxuXHRcdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHtcclxuXHRcdFx0XHRcdFx0XHRcdHRpdGxlOiB0aGlzLnRyYW5zbGF0ZVN5cyhcImVycm9yXCIpICsgXCI4LjFcIixcclxuXHRcdFx0XHRcdFx0XHRcdGNvbnRlbnQ6IGV4LmVyck1zZyxcclxuXHRcdFx0XHRcdFx0XHRcdHNob3dDYW5jZWw6IGZhbHNlLFxyXG5cdFx0XHRcdFx0XHRcdFx0Y29uZmlybVRleHQ6IHRoaXMudHJhbnNsYXRlU3lzKFwiY2FuY2VsXCIpXHJcblx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0gY2F0Y2ggKGV4KSB7XHJcblx0XHRcdFx0XHR2YXIgdGlwID0gdHlwZW9mIGV4ID09IFwic3RyaW5nXCIgPyBleCA6IGV4Lm1lc3NhZ2U7XHJcblx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHtcclxuXHRcdFx0XHRcdFx0dGl0bGU6IHRoaXMudHJhbnNsYXRlU3lzKFwiZXJyb3JcIikgKyBcIjguMlwiLFxyXG5cdFx0XHRcdFx0XHRjb250ZW50OiB0aGlzLnRyYW5zbGF0ZSgnZXhlY3V0ZV9hZnRlcl9jaGFuZ2VfZXZlbnRfZmFpbGVkJykgKyB0aGlzXHJcblx0XHRcdFx0XHRcdFx0LnRyYW5zbGF0ZVN5cyhcclxuXHRcdFx0XHRcdFx0XHRcdFwiY29tbWFcIikgK1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMudHJhbnNsYXRlKCdyZWFzb24nKSArIHRoaXMudHJhbnNsYXRlU3lzKFwiY29sb25cIikgKyB0aXAsXHJcblx0XHRcdFx0XHRcdHNob3dDYW5jZWw6IGZhbHNlLFxyXG5cdFx0XHRcdFx0XHRjb25maXJtVGV4dDogdGhpcy50cmFuc2xhdGVTeXMoXCJjYW5jZWxcIilcclxuXHRcdFx0XHRcdH0pO1xyXG5cclxuXHRcdFx0XHR9XHJcblx0XHRcdH0sXHJcblx0XHRcdC8v54K55Lit6KGo5Y2VXHJcblx0XHRcdG9uUGFuZWxDbGljayh2YWx1ZSkgeyAvL+eCueWHu+mdouadv+mrmOS6ruaYvuekulxyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKHZhbHVlKTtcclxuXHRcdFx0XHR0aGlzLmFjdGl2ZWxpc3QuZm9yRWFjaChlbGUgPT4ge1xyXG5cdFx0XHRcdFx0ZWxlLmFjdGl2ZSA9IGZhbHNlO1xyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHRcdHRoaXMuYWN0aXZlbGlzdFt2YWx1ZV0uYWN0aXZlID0gdHJ1ZTtcclxuXHRcdFx0fSxcclxuXHJcblx0XHRcdC8v5LqL5Lu25aSE55CGXHJcblx0XHRcdGFzeW5jIHJ1bkN1c3RvbUV2ZW50KGRhdGFJbmZvKSB7XHJcblx0XHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRcdHZhciAkdGhpcyA9IHRoaXM7XHJcblx0XHRcdFx0XHR0aGlzLiRzdG9yZS5kaXNwYXRjaCgncnVuQ3VzdG9tRXZlbnQnLCBkYXRhSW5mbykudGhlbihyZXQgPT4ge1xyXG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhyZXQpO1xyXG5cdFx0XHRcdFx0XHRpZiAocmV0LmVycl9jb2RlID09IDApIHtcclxuXHRcdFx0XHRcdFx0XHR2YXIgcmVzdWx0ID0gcmV0LnJlc3VsdDtcclxuXHRcdFx0XHRcdFx0XHRpZiAocmVzdWx0LnJldCAhPSAwKSB7XHJcblx0XHRcdFx0XHRcdFx0XHR2YXIgdGlwID0gcmVzdWx0LmVycl9pbmZvID8gdHlwZW9mIHJlc3VsdC5lcnJfaW5mbyA9PVxyXG5cdFx0XHRcdFx0XHRcdFx0XHQnc3RyaW5nJyA/XHJcblx0XHRcdFx0XHRcdFx0XHRcdHJlc3VsdFxyXG5cdFx0XHRcdFx0XHRcdFx0XHQuZXJyX2luZm8gOiByZXN1bHQuZXJyX2luZm8uam9pbignPGJyLz4nKSA6ICcnO1xyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKHJlc3VsdC5yZXQgPT0gODAxKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmICh0aGlzLnBhcmFtLk9ubHlfU2NyaXB0X0Vycm9yKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0bGV0IHBvcyA9IHRpcC5pbmRleE9mKFwi77yaXCIpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChwb3MgPiAtMSkgdGlwID0gdGlwLnN1YnN0cmluZyhwb3MgKyAxKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aXRsZTogdGhpcy50cmFuc2xhdGVTeXMoXCJ0aXBcIiksXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29udGVudDogdGlwLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHNob3dDYW5jZWw6IGZhbHNlLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvbmZpcm1UZXh0OiB0aGlzLnRyYW5zbGF0ZVN5cyhcImNhbmNlbFwiKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB1bmkuc2hvd01vZGFsKHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0dGl0bGU6IHRoaXMudHJhbnNsYXRlU3lzKFwidGlwXCIpLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRjb250ZW50OiB0aXAgKyAnLCcgKyB0aGlzLnRyYW5zbGF0ZVN5cygndGlwJykgK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCc6JyArXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzdWx0LnJldCxcclxuXHRcdFx0XHRcdFx0XHRcdFx0c2hvd0NhbmNlbDogZmFsc2UsXHJcblx0XHRcdFx0XHRcdFx0XHRcdGNvbmZpcm1UZXh0OiB0aGlzLnRyYW5zbGF0ZVN5cyhcImNhbmNlbFwiKVxyXG5cdFx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdHZhciB0aXAgPSByZXN1bHQuaW5mbyA/IHR5cGVvZiByZXN1bHQuaW5mbyA9PSAnc3RyaW5nJyA/IHJlc3VsdFxyXG5cdFx0XHRcdFx0XHRcdFx0XHQuaW5mbyA6IHJlc3VsdFxyXG5cdFx0XHRcdFx0XHRcdFx0XHQuaW5mby5qb2luKCc8YnIvPicpIDogJyc7XHJcblx0XHRcdFx0XHRcdFx0XHRpZiAodGlwKSB1bmkuc2hvd01vZGFsKHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0dGl0bGU6IHRoaXMudHJhbnNsYXRlU3lzKFwidGlwXCIpLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRjb250ZW50OiB0aXAsXHJcblx0XHRcdFx0XHRcdFx0XHRcdHNob3dDYW5jZWw6IGZhbHNlLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRjb25maXJtVGV4dDogdGhpcy50cmFuc2xhdGVTeXMoXCJjYW5jZWxcIilcclxuXHRcdFx0XHRcdFx0XHRcdH0pO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdGlmIChyZXN1bHQucmVzdWx0X3R5cGUgPT0gMCAmJiByZXN1bHQuYWN0aW9uKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHJlc3VsdC5hY3Rpb24uZm9yRWFjaChpdGVtID0+IHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoaXRlbS5hY3Rpb25fdHlwZSA9PVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XCJnb2JhY2tfdG9fcHJlX3BhZ2VcIikgeyAvL+i/lOWbnuS4iuS4gOmhtVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIHZhbHVlID0gaXRlbS52YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHVuaS5uYXZpZ2F0ZUJhY2soe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkZWx0YTogMSwgLy/ov5Tlm57lsYLmlbDvvIwy5YiZ5LiK5LiK6aG1XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGl0ZW0uYWN0aW9uX3R5cGUgPT1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFwiaGlkZGVuX2J1dHRvblwiKSB7IC8v6ZqQ6JeP5oyJ6ZKuXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgdmFsdWUgPSBpdGVtLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsdWUuZm9yRWFjaChidG4gPT4ge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgaW5kZXggPSAkdGhpcy5wYXJhbVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC5MaXN0UGFnZVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC5QYWdlX0J1dHRvblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC5maW5kSW5kZXgoYnV0dG9uID0+IGJ1dHRvblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0LlNob3dOYW1lID09XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRidG4pXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChpbmRleCA+IC0xKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLnBhcmFtLkxpc3RQYWdlXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0LlBhZ2VfQnV0dG9uLnNwbGljZShcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGluZGV4LCAxKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSlcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIH0gZWxzZSBpZihpdGVtLmFjdGlvbl90eXBlID09IFwicmVmcmVzaF9jdXJfcm93XCIpeyAvL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gXHR2YXIgdmFsdWUgPSBpdGVtLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoaXRlbS5hY3Rpb25fdHlwZSA9PVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XCJzZXRfcGFuZWxfaHRtbFwiKSB7IC8v5pi+56S6SHRtbOmhtemdolxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gdmFyIHZhbHVlID0gaXRlbS52YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLkxpc3RIdG1sX1BhbmVsID0gaXRlbS52YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vICR0aGlzLmRldGFpbDFTdHlsZURlZkxpc3QuZm9yRWFjaCgoZWxlLGluZGV4KT0+e1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gXHRlbGUuTGlzdEh0bWxfUGFuZWwgPSBpdGVtLnZhbHVlW2luZGV4XTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIH0pO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRpdGxlOiB0aGlzLnRyYW5zbGF0ZVN5cyhcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcInRpcFwiKSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29udGVudDogdGhpcy50cmFuc2xhdGVTeXMoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcInF1b3RhdGlvbl9tYXJrX2xlZnRcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCkgK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGl0ZW1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQuYWN0aW9uX3R5cGUgKyB0aGlzXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0LnRyYW5zbGF0ZVN5cyhcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFwicXVvdGF0aW9uX21hcmtfcmlnaHRcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCkgK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXNcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQudHJhbnNsYXRlKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XCJ0aXBfYWN0aW9uX3VucHJvY2Vzc2VkXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzaG93Q2FuY2VsOiBmYWxzZSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uZmlybVRleHQ6IHRoaXMudHJhbnNsYXRlU3lzKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFwiY2FuY2VsXCIpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gdGhpcy5kZXRhaWwyU3R5bGVEZWZMaXN0PVtdO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAocmVzdWx0LmluZm8pIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRpdGxlOiB0aGlzLnRyYW5zbGF0ZVN5cyhcInRpcFwiKSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnRlbnQ6IHJlc3VsdC5pbmZvLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0c2hvd0NhbmNlbDogZmFsc2UsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb25maXJtVGV4dDogdGhpcy50cmFuc2xhdGVTeXMoXCJjYW5jZWxcIilcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7XHJcblx0XHRcdFx0XHRcdFx0XHR0aXRsZTogdGhpcy50cmFuc2xhdGVTeXMoXCJlcnJvclwiKSArIFwiOVwiLFxyXG5cdFx0XHRcdFx0XHRcdFx0Y29udGVudDogcmV0LmVycl9tc2csXHJcblx0XHRcdFx0XHRcdFx0XHRzaG93Q2FuY2VsOiBmYWxzZSxcclxuXHRcdFx0XHRcdFx0XHRcdGNvbmZpcm1UZXh0OiB0aGlzLnRyYW5zbGF0ZVN5cyhcImNhbmNlbFwiKVxyXG5cdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9KS5jYXRjaChleCA9PiB7XHJcblx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKGV4KTtcclxuXHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7XHJcblx0XHRcdFx0XHRcdFx0dGl0bGU6IHRoaXMudHJhbnNsYXRlU3lzKFwiZXJyb3JcIikgKyBcIjkuMVwiLFxyXG5cdFx0XHRcdFx0XHRcdGNvbnRlbnQ6IGV4LmVyck1zZyxcclxuXHRcdFx0XHRcdFx0XHRzaG93Q2FuY2VsOiBmYWxzZSxcclxuXHRcdFx0XHRcdFx0XHRjb25maXJtVGV4dDogdGhpcy50cmFuc2xhdGVTeXMoXCJjYW5jZWxcIilcclxuXHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHR9IGNhdGNoIChleCkge1xyXG5cdFx0XHRcdFx0dmFyIHRpcCA9IHR5cGVvZiBleCA9PSBcInN0cmluZ1wiID8gZXggOiBleC5tZXNzYWdlO1xyXG5cdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7XHJcblx0XHRcdFx0XHRcdHRpdGxlOiB0aGlzLnRyYW5zbGF0ZVN5cyhcImVycm9yXCIpICsgXCI5LjJcIixcclxuXHRcdFx0XHRcdFx0Y29udGVudDogdGhpcy50cmFuc2xhdGUoJ2V4ZWN1dGVfZXZlbnRfZmFpbGVkJykgKyB0aGlzLnRyYW5zbGF0ZVN5cyhcclxuXHRcdFx0XHRcdFx0XHRcdFwiY29tbWFcIikgK1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMudHJhbnNsYXRlKCdyZWFzb24nKSArIHRoaXMudHJhbnNsYXRlU3lzKFwiY29sb25cIikgKyB0aXAsXHJcblx0XHRcdFx0XHRcdHNob3dDYW5jZWw6IGZhbHNlLFxyXG5cdFx0XHRcdFx0XHRjb25maXJtVGV4dDogdGhpcy50cmFuc2xhdGVTeXMoXCJjYW5jZWxcIilcclxuXHRcdFx0XHRcdH0pO1xyXG5cclxuXHRcdFx0XHR9XHJcblx0XHRcdH0sXHJcblxyXG5cdFx0XHRjYW5jZWwoZSkgeyAvL+WPlua2iFxyXG5cdFx0XHRcdC8vIHZhciBldmVudENoYW5uZWwgPSB0aGlzLiRzY29wZS5ldmVudENoYW5uZWw7XHJcblx0XHRcdFx0Ly8gLy8gY29uc3QgZXZlbnRDaGFubmVsID0gdGhpcy5nZXRPcGVuZXJFdmVudENoYW5uZWwoKTtcclxuXHRcdFx0XHQvLyBldmVudENoYW5uZWwuZW1pdCgndmlld18zMjAxJyxcIlwiKTtcclxuXHRcdFx0XHR1bmkubmF2aWdhdGVCYWNrKHtcclxuXHRcdFx0XHRcdGRlbHRhOiAxLCAvL+i/lOWbnuWxguaVsO+8jDLliJnkuIrkuIrpobVcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fSxcclxuXHRcdFx0LyoqXHJcblx0XHRcdCAqIOWPquaUr+aMgVtcImNvbHVtbjE9J0EnIG9yIGNvbHVtbjI9J0InXCIsIFwiY29sdW1uMz0nQycgYW5kIGNvbHVtbjQ9J0QnXCIsIFwiY29sdW1uNT0nRSdcIl3ov5nnp43moLzlvI9cclxuXHRcdFx0ICoge1xyXG5cdFx0XHQgKiAgICAgXCJtb2RlbFwiOiAwIC8gMSxcclxuXHRcdFx0ICogICAgIFwiY29uZGl0aW9uXCI6XHJcblx0XHRcdCAqICAgICBbXHJcblx0XHRcdCAqICAgICAgICAgW1xyXG5cdFx0XHQgKiAgICAgICAgICAgICB7IH0sXHJcblx0XHRcdCAqICAgICAgICAgICAgIHsgfSxcclxuXHRcdFx0ICogICAgICAgICAgICAgeyB9XHJcblx0XHRcdCAqICAgICAgICAgXSxcclxuXHRcdFx0ICogICAgICAgICBbXHJcblx0XHRcdCAqICAgICAgICAgICAgIHsgfVxyXG5cdFx0XHQgKiAgICAgICAgIF0sXHJcblx0XHRcdCAqICAgICAgICAgW1xyXG5cdFx0XHQgKiAgICAgICAgICAgICB7IH1cclxuXHRcdFx0ICogICAgICAgICBdXHJcblx0XHRcdCAqICAgICBdXHJcblx0XHRcdCAqIH1cclxuXHRcdFx0ICovXHJcblxyXG5cdFx0XHR0b1doZXJlQmFzZTY0U3RyaW5nKGxpc3QpIHtcclxuXHRcdFx0XHRpZiAodHlwZW9mIGxpc3QgPT0gJ3N0cmluZycpIGxpc3QgPSBbbGlzdF1cclxuXHRcdFx0XHR2YXIgc3FsID0gW11cclxuXHRcdFx0XHR2YXIgc2VwcyA9IFsnIG5vdCBpbicsICcgaW4nLCAnPD4nLCAnIT0nLCAnPD0nLCAnPj0nLCAnPCcsICc9JywgJz4nLCAnIGxpa2UnXVxyXG5cdFx0XHRcdGxpc3QuZm9yRWFjaChscyA9PiB7XHJcblx0XHRcdFx0XHR2YXIgd2hlcmUgPSBscy50cmltKClcclxuXHRcdFx0XHRcdGlmICh3aGVyZS5zdGFydHNXaXRoKCcoJykgJiYgd2hlcmUuZW5kc1dpdGgoJyknKSkgd2hlcmUgPSB3aGVyZS5yZXBsYWNlKFxyXG5cdFx0XHRcdFx0XHQvXlxcKC8sXHJcblx0XHRcdFx0XHRcdCcnKS5yZXBsYWNlKFxyXG5cdFx0XHRcdFx0XHQvXFwpJC8sICcnKVxyXG5cdFx0XHRcdFx0aWYgKHdoZXJlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJyBhbmQgJykpIHtcclxuXHRcdFx0XHRcdFx0Ly8g5LqM57qnYW5k5pS+5Zyo56ys5LiA57qn5pWw57uE5LitXHJcblx0XHRcdFx0XHRcdHdoZXJlLnNwbGl0KC8gYW5kIC9pKS5mb3JFYWNoKGxpID0+IHtcclxuXHRcdFx0XHRcdFx0XHR2YXIgbCA9IGxpLnRyaW0oKVxyXG5cdFx0XHRcdFx0XHRcdGlmIChsLnN0YXJ0c1dpdGgoJygnKSAmJiBsLmVuZHNXaXRoKCcpJykpIGwgPSBsLnJlcGxhY2UoXHJcblx0XHRcdFx0XHRcdFx0XHQvXlxcKC8sXHJcblx0XHRcdFx0XHRcdFx0XHQnJykucmVwbGFjZShcclxuXHRcdFx0XHRcdFx0XHRcdC9cXCkkLywgJycpXHJcblx0XHRcdFx0XHRcdFx0dmFyIHNlcCA9ICcnXHJcblx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBzZXBzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRpZiAobC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlcHNbaV0pKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHNlcCA9IHNlcHNbaV1cclxuXHRcdFx0XHRcdFx0XHRcdFx0YnJlYWtcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0aWYgKHNlcCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0dmFyIHZhbHVlcyA9IGwuc3BsaXQobmV3IFJlZ0V4cChzZXAsICdpJykpXHJcblx0XHRcdFx0XHRcdFx0XHR2YXIgZmllbGQgPSB2YWx1ZXNbMF0/LnRyaW0oKS5yZXBsYWNlKC9eXFxbLywgJycpXHJcblx0XHRcdFx0XHRcdFx0XHRcdC5yZXBsYWNlKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC9cXF0kLywgJycpXHJcblx0XHRcdFx0XHRcdFx0XHR2YXIgdmFsdWUgPSAnJ1xyXG5cdFx0XHRcdFx0XHRcdFx0dmFyIG9wID0gc2VwLnRyaW0oKVxyXG5cclxuXHRcdFx0XHRcdFx0XHRcdGlmIChbJyBpbicsICcgbm90IGluJ10uaW5jbHVkZXMoc2VwKSAmJiB2YWx1ZXNbMV1cclxuXHRcdFx0XHRcdFx0XHRcdFx0Py50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCdzZWxlY3QgJykgJiYgdmFsdWVzWzFdPy50b0xvd2VyQ2FzZSgpXHJcblx0XHRcdFx0XHRcdFx0XHRcdC5pbmNsdWRlcyhcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQnIGZyb20gJykpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0dmFsdWUgPSBsLnJlcGxhY2UoZmllbGQsICcnKS5yZXBsYWNlKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC9eXFxzKihpbnxub3QgaW4pXFxzKi9pLCAnJykudHJpbSgpXHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmICh2YWx1ZS5zdGFydHNXaXRoKCcoJykgJiYgdmFsdWUuZW5kc1dpdGgoJyknKSlcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZSA9IHZhbHVlXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0LnJlcGxhY2UoL15cXCgvLCAnJykucmVwbGFjZSgvXFwpJC8sICcnKS50cmltKClcclxuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlID0gdmFsdWVzWzFdPy50cmltKCkucmVwbGFjZSgvXlxcJy8sICcnKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC5yZXBsYWNlKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0L1xcJyQvLCAnJylcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChbJ2luJywgJ25vdCBpbiddLmluY2x1ZGVzKG9wKSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlID0gdmFsdWUucmVwbGFjZSgvXlxcKC8sICcnKS5yZXBsYWNlKC9cXCkkLyxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCcnKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlID0gdmFsdWUuc3BsaXQoJywnKS5tYXAodiA9PiB2LnRyaW0oKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0LnJlcGxhY2UoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC9eXFwnLywgJycpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQucmVwbGFjZSgvXFwnJC8sICcnKSlcclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0c3FsLnB1c2goW3tcclxuXHRcdFx0XHRcdFx0XHRcdFx0ZmllbGQsXHJcblx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRvcFxyXG5cdFx0XHRcdFx0XHRcdFx0fV0pXHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9KVxyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICh3aGVyZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCcgb3IgJykpIHtcclxuXHRcdFx0XHRcdFx0Ly8g5LqM57qnb3LmlL7lnKjnrKzkuoznuqflkIzkuIDnu4TmlbDnu4TkuK1cclxuXHRcdFx0XHRcdFx0dmFyIHMgPSBbXVxyXG5cdFx0XHRcdFx0XHR3aGVyZS5zcGxpdCgvIG9yIC9pKS5mb3JFYWNoKGxpID0+IHtcclxuXHRcdFx0XHRcdFx0XHR2YXIgbCA9IGxpLnRyaW0oKVxyXG5cdFx0XHRcdFx0XHRcdGlmIChsLnN0YXJ0c1dpdGgoJygnKSAmJiBsLmVuZHNXaXRoKCcpJykpIGwgPSBsLnJlcGxhY2UoXHJcblx0XHRcdFx0XHRcdFx0XHQvXlxcKC8sXHJcblx0XHRcdFx0XHRcdFx0XHQnJykucmVwbGFjZShcclxuXHRcdFx0XHRcdFx0XHRcdC9cXCkkLywgJycpXHJcblx0XHRcdFx0XHRcdFx0dmFyIHNlcCA9ICcnXHJcblx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBzZXBzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRpZiAobC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlcHNbaV0pKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHNlcCA9IHNlcHNbaV1cclxuXHRcdFx0XHRcdFx0XHRcdFx0YnJlYWtcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0aWYgKHNlcCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0dmFyIHZhbHVlcyA9IGwuc3BsaXQobmV3IFJlZ0V4cChzZXAsICdpJykpXHJcblx0XHRcdFx0XHRcdFx0XHR2YXIgZmllbGQgPSB2YWx1ZXNbMF0/LnRyaW0oKS5yZXBsYWNlKC9eXFxbLywgJycpXHJcblx0XHRcdFx0XHRcdFx0XHRcdC5yZXBsYWNlKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC9cXF0kLywgJycpXHJcblx0XHRcdFx0XHRcdFx0XHR2YXIgdmFsdWUgPSAnJ1xyXG5cdFx0XHRcdFx0XHRcdFx0dmFyIG9wID0gc2VwLnRyaW0oKVxyXG5cclxuXHRcdFx0XHRcdFx0XHRcdGlmIChbJyBpbicsICcgbm90IGluJ10uaW5jbHVkZXMoc2VwKSAmJiB2YWx1ZXNbMV1cclxuXHRcdFx0XHRcdFx0XHRcdFx0Py50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCdzZWxlY3QgJykgJiYgdmFsdWVzWzFdPy50b0xvd2VyQ2FzZSgpXHJcblx0XHRcdFx0XHRcdFx0XHRcdC5pbmNsdWRlcyhcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQnIGZyb20gJykpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0dmFsdWUgPSBsLnJlcGxhY2UoZmllbGQsICcnKS5yZXBsYWNlKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC9eXFxzKihpbnxub3QgaW4pXFxzKi9pLCAnJykudHJpbSgpXHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmICh2YWx1ZS5zdGFydHNXaXRoKCcoJykgJiYgdmFsdWUuZW5kc1dpdGgoJyknKSlcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZSA9IHZhbHVlXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0LnJlcGxhY2UoL15cXCgvLCAnJykucmVwbGFjZSgvXFwpJC8sICcnKS50cmltKClcclxuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlID0gdmFsdWVzWzFdPy50cmltKCkucmVwbGFjZSgvXlxcJy8sICcnKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC5yZXBsYWNlKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0L1xcJyQvLCAnJylcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChbJ2luJywgJ25vdCBpbiddLmluY2x1ZGVzKG9wKSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlID0gdmFsdWUucmVwbGFjZSgvXlxcKC8sICcnKS5yZXBsYWNlKC9cXCkkLyxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCcnKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlID0gdmFsdWUuc3BsaXQoJywnKS5tYXAodiA9PiB2LnRyaW0oKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0LnJlcGxhY2UoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC9eXFwnLywgJycpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQucmVwbGFjZSgvXFwnJC8sICcnKSlcclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0c3FsLnB1c2goW3tcclxuXHRcdFx0XHRcdFx0XHRcdFx0ZmllbGQsXHJcblx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRvcFxyXG5cdFx0XHRcdFx0XHRcdFx0fV0pXHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9KVxyXG5cdFx0XHRcdFx0XHRzcWwucHVzaChzKVxyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0dmFyIGxpID0gd2hlcmVcclxuXHRcdFx0XHRcdFx0Ly8g5Y2V5LiA5p+l6K+i5p2h5Lu255u05o6l5pS+5Zyo56ys5LiA57qn5pWw57uE5LitXHJcblx0XHRcdFx0XHRcdHZhciBsID0gbGkudHJpbSgpXHJcblx0XHRcdFx0XHRcdGlmIChsLnN0YXJ0c1dpdGgoJygnKSAmJiBsLmVuZHNXaXRoKCcpJykpIGwgPSBsLnJlcGxhY2UoL15cXCgvLCAnJylcclxuXHRcdFx0XHRcdFx0XHQucmVwbGFjZShcclxuXHRcdFx0XHRcdFx0XHRcdC9cXCkkLywgJycpXHJcblx0XHRcdFx0XHRcdHZhciBzZXAgPSAnJ1xyXG5cdFx0XHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHNlcHMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRcdFx0XHRpZiAobC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlcHNbaV0pKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRzZXAgPSBzZXBzW2ldXHJcblx0XHRcdFx0XHRcdFx0XHRicmVha1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRpZiAoc2VwKSB7XHJcblx0XHRcdFx0XHRcdFx0dmFyIHZhbHVlcyA9IGwuc3BsaXQobmV3IFJlZ0V4cChzZXAsICdpJykpXHJcblx0XHRcdFx0XHRcdFx0dmFyIGZpZWxkID0gdmFsdWVzWzBdPy50cmltKCkucmVwbGFjZSgvXlxcWy8sICcnKS5yZXBsYWNlKC9cXF0kLywgJycpXHJcblx0XHRcdFx0XHRcdFx0dmFyIHZhbHVlID0gJydcclxuXHRcdFx0XHRcdFx0XHR2YXIgb3AgPSBzZXAudHJpbSgpXHJcblxyXG5cdFx0XHRcdFx0XHRcdGlmIChbJyBpbicsICcgbm90IGluJ10uaW5jbHVkZXMoc2VwKSAmJiB2YWx1ZXNbMV0/LnRvTG93ZXJDYXNlKClcclxuXHRcdFx0XHRcdFx0XHRcdC5pbmNsdWRlcygnc2VsZWN0ICcpICYmXHJcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZXNbMV0/LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJyBmcm9tICcpKSB7XHJcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZSA9IGwucmVwbGFjZShmaWVsZCwgJycpLnJlcGxhY2UoL15cXHMqKGlufG5vdCBpbilcXHMqL2ksICcnKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHQudHJpbSgpXHJcblx0XHRcdFx0XHRcdFx0XHRpZiAodmFsdWUuc3RhcnRzV2l0aCgnKCcpICYmIHZhbHVlLmVuZHNXaXRoKCcpJykpIHZhbHVlID0gdmFsdWVcclxuXHRcdFx0XHRcdFx0XHRcdFx0LnJlcGxhY2UoL15cXCgvLCAnJylcclxuXHRcdFx0XHRcdFx0XHRcdFx0LnJlcGxhY2UoL1xcKSQvLCAnJykudHJpbSgpXHJcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdHZhbHVlID0gdmFsdWVzWzFdPy50cmltKCkucmVwbGFjZSgvXlxcJy8sICcnKS5yZXBsYWNlKC9cXCckLywgJycpXHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKFsnaW4nLCAnbm90IGluJ10uaW5jbHVkZXMob3ApKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlID0gdmFsdWUucmVwbGFjZSgvXlxcKC8sICcnKS5yZXBsYWNlKC9cXCkkLywgJycpXHJcblx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlID0gdmFsdWUuc3BsaXQoJywnKS5tYXAodiA9PiB2LnRyaW0oKS5yZXBsYWNlKC9eXFwnLyxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCcnKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC5yZXBsYWNlKC9cXCckLyxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCcnKSlcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0c3FsLnB1c2goW3tcclxuXHRcdFx0XHRcdFx0XHRcdGZpZWxkLFxyXG5cdFx0XHRcdFx0XHRcdFx0dmFsdWUsXHJcblx0XHRcdFx0XHRcdFx0XHRvcFxyXG5cdFx0XHRcdFx0XHRcdH1dKVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSlcclxuXHJcblx0XHRcdFx0aWYgKHNxbC5sZW5ndGggPiAwKVxyXG5cdFx0XHRcdFx0cmV0dXJuIEJhc2U2NC5lbmNvZGUoSlNPTi5zdHJpbmdpZnkoe1xyXG5cdFx0XHRcdFx0XHRtb2RlbDogMSxcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uOiBzcWxcclxuXHRcdFx0XHRcdH0pKVxyXG5cdFx0XHRcdGVsc2VcclxuXHRcdFx0XHRcdHJldHVybiAnJ1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0cmFuc2xhdGUodCkge1xyXG5cdFx0XHRcdGlmICh0eXBlb2YgdGhpcy4kdCA9PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0aGlzLiR0KGBwYWdlLiR7dH1gKVxyXG5cdFx0XHRcdGVsc2UgcmV0dXJuIHQ7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRyYW5zbGF0ZVN5cyh0KSB7XHJcblx0XHRcdFx0aWYgKHR5cGVvZiB0aGlzLiR0ID09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRoaXMuJHQoYHN5cy4ke3R9YClcclxuXHRcdFx0XHRlbHNlIHJldHVybiB0O1xyXG5cdFx0XHR9LFxyXG5cclxuXHRcdH0sXHJcblx0fTtcclxuPC9zY3JpcHQ+XHJcbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxyXG5cdC51bmktcGFnZS1tb2RhbC0zMjAwIHtcclxuXHRcdC52LWhlYWRTdHlsZTpmaXJzdC1jaGlsZCB7XHJcblx0XHRcdG1hcmdpbi10b3A6IDE1cnB4O1xyXG5cdFx0fVxyXG5cclxuXHRcdC52LWhlYWRTdHlsZSAudHh0X3RpdGxlIHtcclxuXHRcdFx0Zm9udC1zaXplOiAzNHJweDtcclxuXHRcdFx0dGV4dC1hbGlnbjogcmlnaHQ7XHJcblx0XHRcdGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuXHRcdFx0dmVydGljYWwtYWxpZ246IDI0cnB4O1xyXG5cdFx0fVxyXG5cclxuXHRcdC52LWhlYWRTdHlsZSBpbnB1dCB7XHJcblx0XHRcdGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuXHRcdFx0LyogYm9yZGVyOiAxcHggc29saWQgI2Q1ZDVkNTsgKi9cclxuXHRcdFx0Lyogd2lkdGg6IDY1JTsgKi9cclxuXHRcdFx0d2lkdGg6IDg1JTtcclxuXHRcdFx0aGVpZ2h0OiA1MnJweDtcclxuXHRcdFx0bGluZS1oZWlnaHQ6IDM0cnB4O1xyXG5cdFx0XHRiYWNrZ3JvdW5kOiAjRkZGO1xyXG5cdFx0XHRib3JkZXItcmFkaXVzOiAwICFpbXBvcnRhbnQ7XHJcblx0XHRcdGNvbG9yOiAjMmQ4Y2YwO1xyXG5cdFx0XHRwYWRkaW5nOiAxMHJweCA4cnB4IDEycnB4O1xyXG5cdFx0XHRmb250LXNpemU6IDM0cnB4O1xyXG5cdFx0XHRmb250LWZhbWlseTogaW5oZXJpdDtcclxuXHRcdFx0Ym94LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50O1xyXG5cdFx0XHR0cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjFzO1xyXG5cdFx0XHRtYXJnaW4tdG9wOiA0cnB4O1xyXG5cdFx0fVxyXG5cclxuXHRcdC52LWhlYWRTdHlsZSBpbnB1dDo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciB7XHJcblx0XHRcdGZvbnQtc2l6ZTogMTJycHg7XHJcblx0XHR9XHJcblxyXG5cdFx0LmlucHV0LXdyYXBwZXIge1xyXG5cdFx0XHRib3JkZXI6IDFweCBzb2xpZCAjZDVkNWQ1O1xyXG5cdFx0XHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcblx0XHRcdHdpZHRoOiA2NSU7XHJcblx0XHRcdGxpbmUtaGVpZ2h0OiAyMnJweDtcclxuXHRcdH1cclxuXHJcblx0XHRbbnZ1ZV0gdW5pLXZpZXcge1xyXG5cdFx0XHRwb3NpdGlvbjogcmVsYXRpdmU7XHJcblx0XHRcdGJvcmRlcjogMCBzb2xpZCAjMDAwO1xyXG5cdFx0XHRib3gtc2l6aW5nOiBib3JkZXItYm94O1xyXG5cdFx0fVxyXG5cclxuXHRcdC51bmktaW5wdXQge1xyXG5cdFx0XHQvKiBib3JkZXI6IG5vbmU7ICovXHJcblx0XHR9XHJcblxyXG5cdFx0LnVuaS1pY29uIHtcclxuXHRcdFx0LyogYm9yZGVyOiAxcHggc29saWQgcmVkOyAqL1xyXG5cdFx0XHR3aWR0aDogOCU7XHJcblx0XHRcdGZvbnQtZmFtaWx5OiB1bmlpY29ucztcclxuXHRcdFx0Zm9udC1zaXplOiA0MHJweDtcclxuXHRcdFx0Zm9udC13ZWlnaHQ6IDQwMDtcclxuXHRcdFx0Zm9udC1zdHlsZTogbm9ybWFsO1xyXG5cdFx0XHQvKiB3aWR0aDogNDhycHg7ICovXHJcblx0XHRcdGhlaWdodDogNDhycHg7XHJcblx0XHRcdGxpbmUtaGVpZ2h0OiA0OHJweDtcclxuXHRcdFx0Y29sb3I6ICMyZDhjZjA7XHJcblx0XHRcdGN1cnNvcjogcG9pbnRlcjtcclxuXHRcdFx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG5cdFx0XHR2ZXJ0aWNhbC1hbGlnbjogMThycHg7XHJcblx0XHR9XHJcblxyXG5cdFx0LnYtY29udGVudCB7XHJcblx0XHRcdGhlaWdodDogOTQ1cnB4O1xyXG5cdFx0XHRvdmVyZmxvdzogaGlkZTtcclxuXHRcdFx0LyogYm9yZGVyOjAuMXB4IHNvbGlkIHJlZDsgKi9cclxuXHRcdH1cclxuXHJcblx0XHQudmlldy1jb250ZW50IHtcclxuXHRcdFx0bWFyZ2luLXRvcDogMTBycHg7XHJcblx0XHR9XHJcblxyXG5cdFx0LmR2LXBhbmVsLWJrY29sb3Ige1xyXG5cdFx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjZWZlZmVmO1xyXG5cdFx0fVxyXG5cclxuXHRcdC5kdi1wYW5lbCB7XHJcblx0XHRcdGJhY2tncm91bmQtY29sb3I6ICNlZmVmZWY7XHJcblx0XHRcdHBhZGRpbmc6IDIwcnB4IDIwcnB4IDIwcnB4IDBweDtcclxuXHRcdFx0Ym9yZGVyLXJhZGl1czogMTJycHg7XHJcblx0XHRcdG1hcmdpbi1ib3R0b206IDIwcnB4O1xyXG5cdFx0XHR0ZXh0LWFsaWduOiByaWdodDtcclxuXHRcdH1cclxuXHJcblx0XHQuZHYtbGlzdEh0bWwtUGFuZWwsXHJcblx0XHQuZHYtcGFuZWwtaW5wdXQge1xyXG5cdFx0XHR2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xyXG5cdFx0XHR3aWR0aDogOTElO1xyXG5cdFx0XHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcblx0XHRcdHRleHQtYWxpZ246IGxlZnQ7XHJcblx0XHR9XHJcblxyXG5cdFx0LmR2LXBhbmVsLWJ1dGljb24ge1xyXG5cdFx0XHRsaW5lLWhlaWdodDogMHJweDtcclxuXHRcdFx0dGV4dC1hbGlnbjogbGVmdDtcclxuXHRcdFx0LyogZm9udC1zaXplOiAxN3B4OyAqL1xyXG5cdFx0XHRwYWRkaW5nOiAwIDMwcnB4O1xyXG5cdFx0fVxyXG5cclxuXHRcdC5kdi1wYW5lbC1idXRpY29uIC5idG4tcGFkZGluZyB7XHJcblx0XHRcdHBhZGRpbmc6IDEwcnB4IDIwcnB4O1xyXG5cdFx0XHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcblx0XHRcdHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XHJcblx0XHR9XHJcblxyXG5cdFx0LmR2LXBhbmVsLWJ1dGljb24gYSBpIHtcclxuXHRcdFx0Zm9udC1zaXplOiAzOHJweDtcclxuXHRcdH1cclxuXHJcblx0XHQuZHYtcGFuZWwtYnV0aWNvbiBidXR0b24ge1xyXG5cdFx0XHRtaW4td2lkdGg6IDEyMHJweDtcclxuXHRcdFx0Zm9udC1zaXplOiAzMnJweDtcclxuXHRcdFx0cGFkZGluZzogMjBycHggMjBycHggMHJweCAyMHJweDtcclxuXHRcdFx0bGluZS1oZWlnaHQ6IDE7XHJcblx0XHRcdGJhY2tncm91bmQ6ICM0RDZBRjQ7XHJcblx0XHRcdGJvcmRlcjogbm9uZTtcclxuXHRcdFx0Y29sb3I6ICNmZmY7XHJcblx0XHRcdGZvbnQtd2VpZ2h0OiBib2xkO1xyXG5cdFx0XHRib3JkZXItcmFkaXVzOiA4cnB4O1xyXG5cdFx0fVxyXG5cclxuXHRcdC5kdi1wYW5lbCAudHh0X3RpdGxlIHtcclxuXHRcdFx0Zm9udC1zaXplOiAzNHJweDtcclxuXHRcdFx0dGV4dC1hbGlnbjogcmlnaHQ7XHJcblx0XHRcdGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuXHRcdH1cclxuXHJcblx0XHQuZHYtcGFuZWwgaW5wdXQge1xyXG5cdFx0XHR2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xyXG5cdFx0XHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcblx0XHRcdGJvcmRlcjogMnJweCBzb2xpZCAjZDVkNWQ1O1xyXG5cdFx0XHR3aWR0aDogNjglO1xyXG5cdFx0XHRoZWlnaHQ6IDUycnB4O1xyXG5cdFx0XHRsaW5lLWhlaWdodDogMzRycHg7XHJcblx0XHRcdGJhY2tncm91bmQ6ICNGRkY7XHJcblx0XHRcdGJvcmRlci1yYWRpdXM6IDE0cnB4ICFpbXBvcnRhbnQ7XHJcblx0XHRcdGNvbG9yOiAjMmQ4Y2YwO1xyXG5cdFx0XHRwYWRkaW5nOiA2cnB4IDhycHggOHJweDtcclxuXHRcdFx0Zm9udC1zaXplOiAzMnJweDtcclxuXHRcdFx0Zm9udC1mYW1pbHk6IGluaGVyaXQ7XHJcblx0XHRcdGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDtcclxuXHRcdFx0dHJhbnNpdGlvbi1kdXJhdGlvbjogMC4xcztcclxuXHRcdFx0bWFyZ2luLXRvcDogMHJweDtcclxuXHRcdH1cclxuXHJcblx0XHQuZHYtcGFuZWwgaW5wdXQ6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXIge1xyXG5cdFx0XHRmb250LXNpemU6IDEwcnB4O1xyXG5cdFx0fVxyXG5cclxuXHRcdC5kdi1wYW5lbCAuZm9ybS1pdGVtLXNwYW4ge1xyXG5cdFx0XHR2ZXJ0aWNhbC1hbGlnbjogdGV4dC10b3A7XHJcblx0XHRcdGNvbG9yOiAjMmQ4Y2YwO1xyXG5cdFx0XHR3aGl0ZS1zcGFjZTogbm9ybWFsO1xyXG5cdFx0XHR3b3JkLWJyZWFrOiBicmVhay1hbGw7XHJcblx0XHRcdGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuXHRcdFx0d2lkdGg6IGNhbGMoMTAwJSAtIDEwMHB4KTtcclxuXHRcdH1cclxuXHJcblx0XHQuZHYtcGFuZWwtYnV0dG9uIHtcclxuXHRcdFx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG5cdFx0fVxyXG5cclxuXHRcdC5kdi1wYW5lbC1idXR0b24gY2hlY2tib3gtZ3JvdXAge1xyXG5cdFx0XHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcblx0XHR9XHJcblxyXG5cdFx0LmR2LXBhbmVsLWJ1dHRvbiB1bmktY2hlY2tib3ggLnVuaS1jaGVja2JveC1pbnB1dCB7XHJcblx0XHRcdHdpZHRoOiAzNHJweDtcclxuXHRcdFx0aGVpZ2h0OiAzNHJweDtcclxuXHRcdH1cclxuXHJcblx0XHQuZHYtcGFuZWwtYnV0dG9uIGEgaSB7XHJcblx0XHRcdGZvbnQtc2l6ZTogMzZycHg7XHJcblx0XHR9XHJcblxyXG5cdFx0LmR2LXBhbmVsLWJ1dHRvbiBidXR0b24ge1xyXG5cdFx0XHRoZWlnaHQ6IDUwcnB4O1xyXG5cdFx0XHRmb250LXNpemU6IDI2cnB4O1xyXG5cdFx0XHRwYWRkaW5nOiAwIDI0cnB4O1xyXG5cdFx0fVxyXG5cclxuXHRcdC52aWV3LWZsb29yIHtcclxuXHRcdFx0cGFkZGluZzogMCAyMHJweDtcclxuXHRcdFx0LyogYm9yZGVyOjFweCBzb2xpZCByZWQ7ICovXHJcblx0XHR9XHJcblxyXG5cdFx0YnV0dG9uLmJ0bl9yZWZyZXNoIHtcclxuXHRcdFx0d2lkdGg6IDQ5LjUlO1xyXG5cdFx0XHRtYXJnaW4tdG9wOiAyNXJweDtcclxuXHRcdFx0cGFkZGluZzogMjBycHg7XHJcblx0XHRcdGxpbmUtaGVpZ2h0OiAxLjU7XHJcblx0XHRcdGJhY2tncm91bmQ6ICM0RDZBRjQ7XHJcblx0XHRcdGJvcmRlcjogbm9uZTtcclxuXHRcdFx0Y29sb3I6ICNmZmY7XHJcblx0XHRcdGZvbnQtc2l6ZTogMzhycHg7XHJcblx0XHRcdGZvbnQtd2VpZ2h0OiBib2xkO1xyXG5cdFx0XHRmbG9hdDogbGVmdDtcclxuXHRcdFx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG5cdFx0fVxyXG5cclxuXHRcdGJ1dHRvbi5idG5fY2FuY2VsIHtcclxuXHRcdFx0d2lkdGg6IDQ5LjUlO1xyXG5cdFx0XHRtYXJnaW4tdG9wOiAyNXJweDtcclxuXHRcdFx0cGFkZGluZzogMjBycHg7XHJcblx0XHRcdGxpbmUtaGVpZ2h0OiAxLjU7XHJcblx0XHRcdGJhY2tncm91bmQ6ICNmZmY7XHJcblx0XHRcdGJvcmRlcjogbm9uZTtcclxuXHRcdFx0Y29sb3I6ICMwMDA7XHJcblx0XHRcdGZvbnQtc2l6ZTogMzhycHg7XHJcblx0XHRcdGZvbnQtd2VpZ2h0OiBib2xkO1xyXG5cdFx0XHRmbG9hdDogbGVmdDtcclxuXHRcdFx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG5cdFx0XHRtYXJnaW4tcmlnaHQ6IDIwcnB4O1xyXG5cdFx0fVxyXG5cclxuXHRcdC5iay1hY3RpdmUge1xyXG5cdFx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjRDZGQ0IyO1xyXG5cdFx0fVxyXG5cclxuXHRcdC51bmktcGFkZGluZy13cmFwIHtcclxuXHRcdFx0bWFyZ2luLXRvcDogMjBycHg7XHJcblx0XHRcdGJhY2tncm91bmQtY29sb3I6ICM5OERBRUE7XHJcblx0XHRcdHdpZHRoOiAxMDRycHg7XHJcblx0XHRcdGhlaWdodDogODBycHg7XHJcblx0XHRcdHRleHQtYWxpZ246IGNlbnRlcjtcclxuXHRcdFx0Ym9yZGVyLXJhZGl1czogNTRycHg7XHJcblx0XHRcdHBhZGRpbmc6IDI0cnB4IDAgMCAwO1xyXG5cdFx0XHRmbG9hdDogcmlnaHQ7XHJcblx0XHRcdGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuXHRcdH1cclxuXHJcblx0XHQudW5pLXBhZGRpbmctd3JhcCBhIHtcclxuXHRcdFx0Zm9udC1zaXplOiA0MHJweDtcclxuXHRcdH1cclxuXHJcblx0XHQjZHZfc2VsZWN0IHtcclxuXHRcdFx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG5cdFx0XHR3aWR0aDogNjYlO1xyXG5cdFx0XHRiYWNrZ3JvdW5kOiAjRkZGO1xyXG5cdFx0XHRib3JkZXItcmFkaXVzOiAwICFpbXBvcnRhbnQ7XHJcblx0XHRcdGNvbG9yOiAjMmQ4Y2YwO1xyXG5cdFx0XHQvKiBwYWRkaW5nOiAxMHJweCA4cnB4IDEycnB4OyAqL1xyXG5cdFx0XHRmb250LXNpemU6IDM0cnB4O1xyXG5cdFx0XHRmb250LWZhbWlseTogaW5oZXJpdDtcclxuXHRcdFx0Ym94LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50O1xyXG5cdFx0XHR0cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjFzO1xyXG5cdFx0XHRtYXJnaW4tdG9wOiAwcnB4O1xyXG5cdFx0XHR2ZXJ0aWNhbC1hbGlnbjogMjBycHg7XHJcblx0XHR9XHJcblxyXG5cdFx0I2R2X3NlbGVjdCAudW5pLXNlbGVjdCB7XHJcblx0XHRcdGJvcmRlcjogMnJweCBzb2xpZCAjY2NjO1xyXG5cdFx0XHRib3JkZXItcmFkaXVzOiAwICFpbXBvcnRhbnQ7XHJcblx0XHRcdGNvbG9yOiAjMmQ4Y2YwO1xyXG5cdFx0fVxyXG5cclxuXHRcdCNkdl9zZWxlY3QgLnVuaS1zZWxlY3RfX2lucHV0LXRleHQge1xyXG5cdFx0XHRjb2xvcjogIzJkOGNmMDtcclxuXHRcdH1cclxuXHJcblx0XHQuaW5wdXQtZGlzYWJsZWQge1xyXG5cdFx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjZjNmM2YzICFpbXBvcnRhbnQ7XHJcblx0XHR9XHJcblxyXG5cdFx0LmR2X3BhbmVsX2NvbmRlbnQge1xyXG5cdFx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjRDZGQ0IyO1xyXG5cdFx0XHRwYWRkaW5nOiAyMHJweDtcclxuXHRcdFx0Ym9yZGVyLXJhZGl1czogMTJycHg7XHJcblx0XHR9XHJcblxyXG5cdFx0LmR2X3BhbmVsX2F0dHIge1xyXG5cdFx0XHRtYXJnaW4tYm90dG9tOiAxMHJweDtcclxuXHRcdH1cclxuXHJcblx0XHQuZHZfcGFuZWxfYXR0ciAuZHZfaW5saW5lIHtcclxuXHRcdFx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG5cdFx0XHR0ZXh0LWFsaWduOiBjZW50ZXI7XHJcblx0XHR9XHJcblxyXG5cdFx0LmR2X3BhbmVsX2F0dHIgaSB7XHJcblx0XHRcdHZlcnRpY2FsLWFsaWduOiAyNXB4O1xyXG5cdFx0XHRtYXJnaW46IDAgMTBweDtcclxuXHRcdH1cclxuXHJcblx0XHQuZHZfcGFuZWxfYXR0ciAuZHZfaW5saW5lIHAge1xyXG5cdFx0XHRiYWNrZ3JvdW5kOiAjNEQ2QUY0O1xyXG5cdFx0XHRjb2xvcjogI2ZmZjtcclxuXHRcdFx0cGFkZGluZzogMTBycHggMTVycHg7XHJcblx0XHRcdGxpbmUtaGVpZ2h0OiAxLjU7XHJcblx0XHRcdGJvcmRlci1yYWRpdXM6IDEwcnB4O1xyXG5cdFx0fVxyXG5cclxuXHRcdC5zY3JvbGwtWSB7XHJcblx0XHRcdGhlaWdodDogMTAwJTtcclxuXHRcdH1cclxuXHJcblx0XHQuc2Nyb2xsLXZpZXdfSCB7XHJcblx0XHRcdHdoaXRlLXNwYWNlOiBub3dyYXA7XHJcblx0XHRcdHdpZHRoOiAxMDAlO1xyXG5cdFx0fVxyXG5cclxuXHRcdC5kdl9wYW5lbF9jb250ZW50IHtcclxuXHRcdFx0bWFyZ2luOiAwIDEwcHg7XHJcblx0XHR9XHJcblxyXG5cdFx0LmR2X3BhbmVsX2NvbnRlbnQgLmR2X3BhbmVsX2F0dHIge1xyXG5cdFx0XHRtYXJnaW4tYm90dG9tOiA1cHg7XHJcblx0XHR9XHJcblxyXG5cdFx0LmR2X3BhbmVsX2NvbnRlbnQgLmR2X3BhbmVsX2F0dHIgaSB7XHJcblx0XHRcdHZlcnRpY2FsLWFsaWduOiBzdXBlcjtcclxuXHRcdFx0bWFyZ2luOiAwIDEwcHg7XHJcblx0XHR9XHJcblxyXG5cdFx0LmR2X3BhbmVsX2NvbnRlbnQgLmR2X3BhbmVsX2F0dHIgLmNpcmNlbF9ub2RlIHt9XHJcblxyXG5cdFx0Lyog5piv6I+x5b2i55qEICovXHJcblx0XHQuZHZfcGFuZWxfY29udGVudCAuZHZfcGFuZWxfYXR0ciAuZHZfZGlhbW9uZF9ub2RlIHAge1xyXG5cdFx0XHR3aWR0aDogNTBweDtcclxuXHRcdFx0aGVpZ2h0OiA1MHB4O1xyXG5cdFx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjNEQ2QUY0O1xyXG5cdFx0XHR0cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZyk7XHJcblx0XHRcdC1tcy10cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZyk7XHJcblx0XHRcdC1tb3otdHJhbnNmb3JtOiByb3RhdGUoNDVkZWcpO1xyXG5cdFx0XHQtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKTtcclxuXHRcdFx0LW8tdHJhbnNmb3JtOiByb3RhdGUoNDVkZWcpO1xyXG5cdFx0XHRtYXJnaW46IDE1cHggYXV0bztcclxuXHRcdFx0cGFkZGluZzogOXB4O1xyXG5cdFx0XHQvLyBsaW5lLWhlaWdodDogMjhweDtcclxuXHRcdFx0dGV4dC1hbGlnbjogY2VudGVyO1xyXG5cdFx0fVxyXG5cclxuXHRcdC5kdl9wYW5lbF9jb250ZW50IC5kdl9wYW5lbF9hdHRyIC5kdl9kaWFtb25kX25vZGUgcCBzcGFuIHtcclxuXHRcdFx0Y29sb3I6ICNmZmY7XHJcblx0XHRcdHRyYW5zZm9ybTogcm90YXRlKC00NWRlZyk7XHJcblx0XHRcdGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuXHRcdFx0dGV4dC1hbGlnbjogY2VudGVyO1xyXG5cdFx0XHRvdmVyZmxvdzogaGlkZGVuO1xyXG5cdFx0XHR0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcclxuXHRcdFx0Ly8gd2hpdGUtc3BhY2U6IG5vd3JhcDtcclxuXHRcdH1cclxuXHJcblx0XHQvKiDpu5jorqTlvaIgKi9cclxuXHRcdC5kdl9wYW5lbF9jb250ZW50IC5kdl9wYW5lbF9hdHRyIC5kdl9ib3hfbm9kZSxcclxuXHRcdC5kdl9wYW5lbF9jb250ZW50IC5kdl9wYW5lbF9hdHRyIC5kdl9kaWFtb25kX25vZGUge1xyXG5cdFx0XHR2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xyXG5cdFx0XHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcblx0XHRcdHRleHQtYWxpZ246IGNlbnRlcjtcclxuXHRcdFx0d2lkdGg6IDEwMHB4O1xyXG5cdFx0fVxyXG5cclxuXHRcdC5kdl9wYW5lbF9jb250ZW50IC5kdl9wYW5lbF9hdHRyIC5kdl9ib3hfbm9kZSBwIHtcclxuXHRcdFx0YmFja2dyb3VuZDogIzRENkFGNDtcclxuXHRcdFx0Y29sb3I6ICNmZmY7XHJcblx0XHRcdHBhZGRpbmc6IDNweCA3cHg7XHJcblx0XHRcdGxpbmUtaGVpZ2h0OiAxLjU7XHJcblx0XHRcdGJvcmRlci1yYWRpdXM6IDVweDtcclxuXHRcdH1cclxuXHJcblx0XHQuZGVtby11bmktcm93IHtcclxuXHRcdFx0bWFyZ2luLWJvdHRvbTogMHB4O1xyXG5cdFx0XHRkaXNwbGF5OiBibG9jaztcclxuXHRcdH1cclxuXHJcblx0XHQ6OnYtZGVlcCAudW5pLXJvdyB7XHJcblx0XHRcdG1hcmdpbi1ib3R0b206IDBweDtcclxuXHRcdH1cclxuXHJcblx0XHQudmlldy10YWJwYWdlIDo6di1kZWVwIC51bmktcm93IHtcclxuXHRcdFx0bWFyZ2luLWJvdHRvbTogNXB4O1xyXG5cdFx0fVxyXG5cclxuXHRcdC5kZW1vLXVuaS1jb2wge1xyXG5cdFx0XHRoZWlnaHQ6IDM2cHg7XHJcblx0XHRcdGJvcmRlci1yYWRpdXM6IDVweDtcclxuXHRcdH1cclxuXHJcblx0XHQuZGVtby11bmktcm93IC51bmktaW5wdXQge1xyXG5cdFx0XHR3aWR0aDogY2FsYygxMDAlIC0gMTIwcHgpO1xyXG5cdFx0fVxyXG5cdH1cclxuPC9zdHlsZT4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///169\n");
 
 /***/ }),
 /* 170 */

--
Gitblit v1.9.1