unpackage/dist/dev/app-plus/app-service.js
@@ -18053,7 +18053,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 _pickerAddress = _interopRequireDefault(__webpack_require__(/*! ../../js/pickerAddress/pickerAddress.vue */ 80));\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\nvar _default = {\n  components: {\n    pickerAddress: _pickerAddress.default\n  },\n  data: function data() {\n    return {\n      title: '新增',\n      param: {},\n      classAttrList: [],\n      classGridStyle: [],\n      edit_inital_event: \"\",\n      //弹窗初始化事件ID\n      edit_ok_event: \"\",\n      //弹窗点击OK 触发事件ID\n      edit_select_compose_event: \"\",\n      //选择组成对象时调用\n      edit_compose_cls_id: \"\",\n      global_attr: [],\n      refdatastore: [],\n      //引用数据存储区// {attr:'G_PRJ_' + bindattr + '_ID', value:info.id}\n      scanCodeVal: \"\",\n      subClassAttrList: [],\n      subPanelList: [],\n      subClassGridStyle: [],\n      popupType: \"center\",\n      check_list: {}\n    };\n  },\n  onLoad: function onLoad(options) {\n    // console.log(options);\n    uni.setNavigationBarTitle({\n      title: options.titlename\n    }); //设置顶部标题 \n    var param = JSON.parse(options.param);\n    this.$data.title = param.Add_BtnName ? param.Add_BtnName : options.titlename; //设置按钮文字\n    __f__(\"log\", param, \" at pages/modal/ms_classAttr.vue:732\");\n    if (!param.Master_Cls.View_Style) {\n      uni.showModal({\n        title: \"提示\",\n        content: \"该功能点未配置界面窗口,请重新配置!\",\n        showCancel: false,\n        confirmText: \"取消\"\n      });\n      return;\n    }\n    if (!param.Master_Cls.View_Style.Name) {\n      uni.showModal({\n        title: \"提示\",\n        content: \"该功能点未配置窗口样式,请重新配置!\",\n        showCancel: false,\n        confirmText: \"取消\"\n      });\n      return;\n    }\n    this.$data.param = param;\n    // var edit_dlg = {\n    //     Model: param.EditDlgMode,\n    //     Name: param.Master_Cls.View_Style.Name\n    // }\n    //主数据类获取\n    var dataInfo = {\n      class_id: param.Master_Cls.ID\n    };\n    var $this = this;\n    $this.$store.state.thisareaFuncID = param.Master_Cls.ID;\n    // console.log($this.$store.getters.getclassAttrList);\n    if ($this.$store.getters.getclassAttrList) {\n      $this.$data.classAttrList = $this.$store.getters.getclassAttrList.data;\n      $this.classGridStyleInfo(param.Master_Cls.ID, $this.$data.param.Master_Cls.View_Style.Name, 'Mast');\n    } else {\n      $this.$store.dispatch('classAttrList', dataInfo).then(function (success) {\n        // console.log(success);\n        if (success.code == '00000') {\n          $this.$data.classAttrList = success.data;\n          $this.classGridStyleInfo(param.Master_Cls.ID, $this.$data.param.Master_Cls.View_Style.Name, 'Mast');\n        } else {\n          uni.showModal({\n            title: \"错误1\",\n            content: success.msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        // console.log(ex);\n        uni.showModal({\n          title: \"错误1.1\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\n    }\n\n    //从数据类获取\n    var subdataInfo = {\n      class_id: param.Sub_Cls.ID\n    };\n    $this.$store.state.thisareaFuncSubID = param.Sub_Cls.ID;\n    if ($this.$store.getters.getSubClassAttrList) {\n      $this.$data.subClassAttrList = $this.$store.getters.getSubClassAttrList.data;\n      $this.classGridStyleInfo(param.Sub_Cls.ID, $this.$data.param.Sub_Cls.View_Style.Name, 'Sub');\n    } else {\n      $this.$store.dispatch('subClassAttrList', subdataInfo).then(function (success) {\n        // console.log(success);\n        if (success.code == '00000') {\n          $this.$data.subClassAttrList = success.data;\n          $this.classGridStyleInfo(param.Sub_Cls.ID, $this.$data.param.Sub_Cls.View_Style.Name, 'Sub');\n        } else {\n          uni.showModal({\n            title: \"错误1_1\",\n            content: success.msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        // console.log(ex);\n        uni.showModal({\n          title: \"错误1_1.1\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\n    }\n  },\n  methods: {\n    scan_classAttr_extButton: function scan_classAttr_extButton(e) {\n      //选择按钮前\n      var $this = this;\n      var Before_Select_Event = $this.$data.param.Scan_Code.Before_Select_Event;\n      if (!Before_Select_Event) {\n        uni.showModal({\n          title: \"提示\",\n          content: \"选择前事件为空!\",\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n        return;\n      }\n      // if(!After_Select_Event){\n      // \tuni.showModal({title:\"提示\",content:\"选择后事件为空!\",showCancel:false,confirmText:\"取消\"});\n      // \treturn;\n      // }\n      // var data_attr = this.$data.classAttrList[index].Attr[iindex];\n      // this.DataObjRunCustomEvent_Return(Before_Select_Event, '', After_Select_Event, '', '');\n      var mast_attr = [];\n      var attrlist = this.$data.classAttrList;\n      for (var i = 0; i < attrlist.length; i++) {\n        var attr = attrlist[i].Attr;\n        for (var j = 0; j < attr.length; j++) {\n          var ar = attr[j];\n          if (ar.Value == '请选择') {\n            uni.showModal({\n              title: \"提示\",\n              content: ar.DispName + \"未选择数据!\",\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n            return;\n          }\n          if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n          if (ar.Type == '引用人员' || ar.Type == '引用项目') mast_attr.push({\n            attr: ar.Name,\n            value: ar.ValID ? ar.ValID : ''\n          });else if (ar.Type == '布尔值') mast_attr.push({\n            attr: ar.Name,\n            value: ar.Value ? '1' : '0'\n          });else mast_attr.push({\n            attr: ar.Name,\n            value: ar.Value ? ar.Value : ''\n          });\n        }\n      }\n      var req = [];\n      var attrlist = this.$data.subClassAttrList;\n      var msg = '';\n      for (var i = 0; i < attrlist.length; i++) {\n        var attr = attrlist[i].Attr;\n        for (var j = 0; j < attr.length; j++) {\n          var ar = attr[j];\n          if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n          if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n            attr: ar.Name,\n            value: ar.ValID ? ar.ValID : ''\n          });else if (ar.Type == '布尔值') req.push({\n            attr: ar.Name,\n            value: ar.Value ? '1' : '0'\n          });else req.push({\n            attr: ar.Name,\n            value: ar.Value ? ar.Value : ''\n          });\n        }\n      }\n      var info = {\n        eventid: Before_Select_Event.ID,\n        edtype: \"7\",\n        //\"0\",\n        projectid: '',\n        rclsid: '',\n        robjid: '',\n        userlogin: '',\n        clsid: 'MBOX',\n        //this.$data.param.Sub_Cls.ID,\n        objid: \"\",\n        attr: req,\n        mast_attr: mast_attr,\n        inputParamter: mast_attr\n      };\n      // console.log(info);\n      this.scan_DataObjRunCustomEvent(info, \"\");\n    },\n    popupChange: function popupChange(e) {\n      __f__(\"log\", '当前模式:' + e.type + ',状态:' + e.show, \" at pages/modal/ms_classAttr.vue:866\");\n    },\n    checkChange: function checkChange(e) {\n      //弹框check选择\n      // console.log(e.target.dataset);\n      var index = e.target.dataset.index;\n      var ischeck = e.target.dataset.ischeck;\n      var data = this.$data.check_list.items;\n      // this.$data.check_list.items=[];\n      if (this.$data.check_list.multiple_choice == \"0\") {\n        //判断时单选还是多选\n        for (var i in data) {\n          data[i].check = false;\n        }\n      }\n      data[index].check = ischeck ? false : true;\n      this.$data.check_list.items = data;\n    },\n    popup_cancel: function popup_cancel(e) {\n      //弹框取消\n      this.$refs.popup.close();\n    },\n    popup_sava: function popup_sava(e) {\n      //弹框确定 选择按钮后\n      var $this = this;\n      var After_Select_Event = $this.$data.param.Scan_Code.After_Select_Event;\n      if (!After_Select_Event) {\n        uni.showModal({\n          title: \"提示\",\n          content: \"选择后事件为空!\",\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n        return;\n      }\n      var items = $this.$data.check_list.items;\n      var data = [];\n      var name = \"\";\n      for (var i = 0; i < items.length; i++) {\n        if (items[i].check == true) {\n          if (name) name += ';';\n          name += items[i].name;\n          data.push({\n            id: items[i].id,\n            name: items[i].name\n          });\n        }\n      }\n      if (data.length == 0) {\n        uni.showModal({\n          title: \"提示\",\n          content: \"未选择数据!\",\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n        return;\n      }\n      var mast_attr = [];\n      var attrlist = this.$data.classAttrList;\n      for (var i = 0; i < attrlist.length; i++) {\n        var attr = attrlist[i].Attr;\n        for (var j = 0; j < attr.length; j++) {\n          var ar = attr[j];\n          if (ar.Value == '请选择') {\n            uni.showModal({\n              title: \"提示\",\n              content: ar.DispName + \"未选择数据!\",\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n            return;\n          }\n          if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n          if (ar.Type == '引用人员' || ar.Type == '引用项目') mast_attr.push({\n            attr: ar.Name,\n            value: ar.ValID ? ar.ValID : ''\n          });else if (ar.Type == '布尔值') mast_attr.push({\n            attr: ar.Name,\n            value: ar.Value ? '1' : '0'\n          });else mast_attr.push({\n            attr: ar.Name,\n            value: ar.Value ? ar.Value : ''\n          });\n        }\n      }\n      $this.$data.scanCodeVal = name;\n      var info = {\n        eventid: After_Select_Event.ID,\n        edtype: \"7\",\n        projectid: '',\n        rclsid: '',\n        robjid: '',\n        userlogin: '',\n        clsid: 'MBOX',\n        objid: \"\",\n        attr: mast_attr,\n        inputParamter: data,\n        enviroment: ''\n      };\n      // console.log(info);\n      this.scan_DataObjRunCustomEvent(info, \"\");\n      this.$refs.popup.close();\n    },\n    cancel: function cancel(e) {\n      uni.navigateBack({\n        delta: 1 //返回层数,2则上上页\n      });\n    },\n    panel_del: function panel_del(index) {\n      var $this = this;\n      if (this.$data.subPanelList[index].scanCodeVal == this.$data.scanCodeVal) {\n        this.$data.scanCodeVal = '';\n      }\n      if (!this.$data.subPanelList[index].ObjID) this.$data.subPanelList.splice(index, 1);else {\n        var dataInfo = {\n          clsId: this.$data.param.Sub_Cls.ID,\n          objId: this.$data.subPanelList[index].ObjID\n        };\n        __f__(\"log\", dataInfo, \" at pages/modal/ms_classAttr.vue:965\");\n        // return;\n        uni.showLoading({\n          title: \"加载中...\"\n        });\n        this.$store.dispatch('DelObj', dataInfo).then(function (success) {\n          __f__(\"log\", success, \" at pages/modal/ms_classAttr.vue:969\");\n          uni.hideLoading();\n          if (success.code == '00000') {\n            $this.$data.subPanelList.splice(index, 1);\n            uni.showModal({\n              title: \"提示\",\n              content: \"删除成功!\",\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n          } else {\n            uni.showModal({\n              title: \"错误9\",\n              content: success.msg,\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n          }\n        }).catch(function (ex) {\n          __f__(\"log\", ex, \" at pages/modal/ms_classAttr.vue:978\");\n          uni.hideLoading();\n          uni.showModal({\n            title: \"提示9.1\",\n            content: ex.errMsg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        });\n      }\n    },\n    classGridStyleInfo: function classGridStyleInfo(clsid, styleName, clsType) {\n      var _this = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {\n        var $this, gridstyleInfo;\n        return _regenerator.default.wrap(function _callee$(_context) {\n          while (1) {\n            switch (_context.prev = _context.next) {\n              case 0:\n                $this = _this;\n                gridstyleInfo = {\n                  class_id: clsid,\n                  name: styleName,\n                  type: '2'\n                }; // console.log($this.$store.getters.getclassGridStyleInfo);\n                //获取主数据类界面样式\n                if (clsType == 'Mast') {\n                  $this.$store.state.thisEditName = styleName;\n                  if ($this.$store.getters.getclassGridStyleInfo) {\n                    $this.$data.classGridStyle = $this.$store.getters.getclassGridStyleInfo.data;\n                    $this.class_attr_init();\n                  } else {\n                    //console.log(gridstyleInfo);\n                    $this.$store.dispatch('classGridStyleInfo', gridstyleInfo).then(function (success) {\n                      // console.log(success);\n                      if (success.code == '00000') {\n                        success.data.StyleDef = JSON.parse(success.data.StyleDef);\n                        $this.$data.classGridStyle = success.data;\n                        $this.class_attr_init();\n                      } else {\n                        uni.showModal({\n                          title: \"错误1.2\",\n                          content: success.msg,\n                          showCancel: false,\n                          confirmText: \"取消\"\n                        });\n                      }\n                    }).catch(function (ex) {\n                      __f__(\"log\", ex, \" at pages/modal/ms_classAttr.vue:1011\");\n                      uni.showModal({\n                        title: \"错误1.3\",\n                        content: ex.errMsg,\n                        showCancel: false,\n                        confirmText: \"取消\"\n                      });\n                    });\n                  }\n                } else if (clsType == 'Sub') {\n                  //获取从数据类界面样式\n                  $this.$store.state.thisEditSubName = styleName;\n                  if ($this.$store.getters.getSubClassGridStyleInfo) {\n                    $this.$data.subClassGridStyle = $this.$store.getters.getSubClassGridStyleInfo.data;\n                    $this.subClass_attr_init();\n                  } else {\n                    //console.log(gridstyleInfo);\n                    $this.$store.dispatch('subClassGridStyleInfo', gridstyleInfo).then(function (success) {\n                      // console.log(success);\n                      if (success.code == '00000') {\n                        success.data.StyleDef = JSON.parse(success.data.StyleDef);\n                        $this.$data.subClassGridStyle = success.data;\n                        $this.subClass_attr_init();\n                      } else {\n                        uni.showModal({\n                          title: \"错误1.2\",\n                          content: success.msg,\n                          showCancel: false,\n                          confirmText: \"取消\"\n                        });\n                      }\n                    }).catch(function (ex) {\n                      __f__(\"log\", ex, \" at pages/modal/ms_classAttr.vue:1033\");\n                      uni.showModal({\n                        title: \"错误1.3\",\n                        content: ex.errMsg,\n                        showCancel: false,\n                        confirmText: \"取消\"\n                      });\n                    });\n                  }\n                }\n              case 3:\n              case \"end\":\n                return _context.stop();\n            }\n          }\n        }, _callee);\n      }))();\n    },\n    ontap: function ontap(e) {\n      var _this2 = this;\n      //扫码功能\n      //console.log(e.target)\n      getApp().onScan(function (result) {\n        //console.log(result.decodedata);\n        var isVal = _this2.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value;\n        // if(!isVal){\n        // \tthis.$data.subPanelList[e.target.dataset['iiindex']].subClassAttr[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value=result.decodedata;\n        // \tvar isVald =this.$data.subPanelList[e.target.dataset['iiindex']].subClassAttr[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value;\n        // \treturn;\n        // }\n        //主数据类扫码查询数据\n        if (isVal != result.decodedata) {\n          _this2.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value = result.decodedata;\n          uni.hideKeyboard();\n          //子数据类扫码区事件脚本\n          var eventid = _this2.$data.param.Scan_Code.Input_Change_Event.ID;\n          if (eventid) {\n            var req = [];\n            var attrlist = _this2.$data.classAttrList; //主数据类属性\n            for (var i = 0; i < attrlist.length; i++) {\n              var attr = attrlist[i].Attr;\n              for (var j = 0; j < attr.length; j++) {\n                var ar = attr[j];\n                if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n                if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n                  attr: ar.Name,\n                  value: ar.ValID ? ar.ValID : ''\n                });else if (ar.Type == '布尔值') req.push({\n                  attr: ar.Name,\n                  value: ar.Value ? '1' : '0'\n                });else req.push({\n                  attr: ar.Name,\n                  value: ar.Value ? ar.Value : ''\n                });\n              }\n            }\n            var info = {\n              eventid: eventid,\n              edtype: \"7\",\n              //\"0\",\n              projectid: '',\n              rclsid: '',\n              robjid: '',\n              userlogin: '',\n              clsid: 'MBOX',\n              //this.$data.param.Sub_Cls.ID,\n              objid: \"\",\n              attr: req,\n              mast_attr: [],\n              inputParamter: [{\n                attr: 'mast_input_3037',\n                value: result.decodedata\n              }]\n            };\n            _this2.scan_DataObjRunCustomEvent(info, \"\");\n          }\n        }\n      });\n    },\n    subontap: function subontap(e) {\n      var _this3 = this;\n      //扫码功能\n      //console.log(e.target)\n      getApp().onScan(function (result) {\n        //console.log(result.decodedata);\n        var isVal = _this3.$data.subClassAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value;\n        //主数据类扫码查询数据\n        if (isVal != result.decodedata) {\n          _this3.$data.subClassAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value = result.decodedata;\n          uni.hideKeyboard();\n          //子数据类扫码区事件脚本\n          var eventid = _this3.$data.param.Scan_Code.Input_Change_Event.ID;\n          if (eventid) {\n            var req = [];\n            var attrlist = _this3.$data.subClassAttrList; //主数据类属性\n            for (var i = 0; i < attrlist.length; i++) {\n              var attr = attrlist[i].Attr;\n              for (var j = 0; j < attr.length; j++) {\n                var ar = attr[j];\n                if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n                if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n                  attr: ar.Name,\n                  value: ar.ValID ? ar.ValID : ''\n                });else if (ar.Type == '布尔值') req.push({\n                  attr: ar.Name,\n                  value: ar.Value ? '1' : '0'\n                });else req.push({\n                  attr: ar.Name,\n                  value: ar.Value ? ar.Value : ''\n                });\n              }\n            }\n            var info = {\n              eventid: eventid,\n              edtype: \"7\",\n              //\"0\",\n              projectid: '',\n              rclsid: '',\n              robjid: '',\n              userlogin: '',\n              clsid: 'MBOX',\n              //this.$data.param.Sub_Cls.ID,\n              objid: \"\",\n              attr: req,\n              mast_attr: [],\n              inputParamter: [{\n                attr: 'mast_input_3037',\n                value: result.decodedata\n              }]\n            };\n            _this3.scan_DataObjRunCustomEvent(info, \"\");\n          }\n        }\n      });\n    },\n    scan_ontap: function scan_ontap(e) {\n      var _this4 = this;\n      //扫码区扫码功能\n      //console.log(e.target)\n      getApp().onScan(function (result) {\n        __f__(\"log\", result.decodedata, \" at pages/modal/ms_classAttr.vue:1141\");\n        var isflag = true;\n        for (var i in _this4.$data.subPanelList) {\n          if (_this4.$data.subPanelList[i].scanCodeVal == result.decodedata) isflag = false;\n        }\n        //子数据类扫码查询数据\n        if (isflag) {\n          uni.hideKeyboard();\n          _this4.$data.scanCodeVal = result.decodedata;\n          var eventid = _this4.$data.param.Scan_Code.Input_Change_Event.ID;\n          if (eventid) {\n            var mast_req = [];\n            //主数据类属性\n            var classattrlist = _this4.$data.classAttrList;\n            for (var i = 0; i < classattrlist.length; i++) {\n              var attr = classattrlist[i].Attr;\n              for (var j = 0; j < attr.length; j++) {\n                var ar = attr[j];\n                if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n                if (ar.Type == '引用人员' || ar.Type == '引用项目') mast_req.push({\n                  attr: ar.Name,\n                  value: ar.ValID ? ar.ValID : ''\n                });else if (ar.Type == '布尔值') mast_req.push({\n                  attr: ar.Name,\n                  value: ar.Value ? '1' : '0'\n                });else mast_req.push({\n                  attr: ar.Name,\n                  value: ar.Value ? ar.Value : ''\n                });\n              }\n            }\n            var req = [];\n            //子数据类属性\n            var attrlist = _this4.$data.subClassAttrList;\n            for (var i = 0; i < attrlist.length; i++) {\n              var attr = attrlist[i].Attr;\n              for (var j = 0; j < attr.length; j++) {\n                var ar = attr[j];\n                if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n                if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n                  attr: ar.Name,\n                  value: ar.ValID ? ar.ValID : ''\n                });else if (ar.Type == '布尔值') req.push({\n                  attr: ar.Name,\n                  value: ar.Value ? '1' : '0'\n                });else req.push({\n                  attr: ar.Name,\n                  value: ar.Value ? ar.Value : ''\n                });\n              }\n            }\n            var info = {\n              eventid: eventid,\n              edtype: '7',\n              //\"0\",\n              projectid: '',\n              rclsid: '',\n              robjid: '',\n              userlogin: '',\n              clsid: 'MBOX',\n              //this.$data.param.Sub_Cls.ID,\n              objid: \"\",\n              attr: req,\n              mast_attr: mast_req,\n              inputParamter: [{\n                attr: 'input_3037',\n                value: _this4.$data.scanCodeVal\n              }]\n            };\n            _this4.scan_DataObjRunCustomEvent(info, \"\");\n          }\n        }\n      });\n    },\n    scan_onevent: function scan_onevent(e) {\n      // console.log(e.target);\n      if (e.target.value) {\n        var isflag = true;\n        for (var i in this.$data.subPanelList) {\n          if (this.$data.subPanelList[i].scanCodeVal == e.target.value) isflag = false;\n        }\n        //子数据类扫码查询数据\n        if (isflag) {\n          uni.hideKeyboard();\n          this.$data.scanCodeVal = e.target.value;\n          var eventid = this.$data.param.Scan_Code.Input_Change_Event.ID;\n          if (eventid) {\n            var mast_req = [];\n            //主数据类属性\n            var classattrlist = this.$data.classAttrList;\n            for (var i = 0; i < classattrlist.length; i++) {\n              var attr = classattrlist[i].Attr;\n              for (var j = 0; j < attr.length; j++) {\n                var ar = attr[j];\n                if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n                if (ar.Type == '引用人员' || ar.Type == '引用项目') mast_req.push({\n                  attr: ar.Name,\n                  value: ar.ValID ? ar.ValID : ''\n                });else if (ar.Type == '布尔值') mast_req.push({\n                  attr: ar.Name,\n                  value: ar.Value ? '1' : '0'\n                });else mast_req.push({\n                  attr: ar.Name,\n                  value: ar.Value ? ar.Value : ''\n                });\n              }\n            }\n            var req = [];\n            //子数据类属性\n            var attrlist = this.$data.subClassAttrList;\n            for (var i = 0; i < attrlist.length; i++) {\n              var attr = attrlist[i].Attr;\n              for (var j = 0; j < attr.length; j++) {\n                var ar = attr[j];\n                if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n                if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n                  attr: ar.Name,\n                  value: ar.ValID ? ar.ValID : ''\n                });else if (ar.Type == '布尔值') req.push({\n                  attr: ar.Name,\n                  value: ar.Value ? '1' : '0'\n                });else req.push({\n                  attr: ar.Name,\n                  value: ar.Value ? ar.Value : ''\n                });\n              }\n            }\n            var info = {\n              eventid: eventid,\n              edtype: '7',\n              //\"0\",\n              projectid: '',\n              rclsid: '',\n              robjid: '',\n              userlogin: '',\n              clsid: 'MBOX',\n              //this.$data.param.Sub_Cls.ID,\n              objid: \"\",\n              attr: req,\n              mast_attr: mast_req,\n              inputParamter: [{\n                attr: 'input_3037',\n                value: this.$data.scanCodeVal\n              }]\n            };\n            this.scan_DataObjRunCustomEvent(info, \"\");\n          }\n        }\n      }\n    },\n    onarrow: function onarrow(index, open) {\n      // console.log(index+'--'+open);\n      var data_attr = this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Open;\n      if (!data_attr) {\n        this.$data.subPanelList[e.target.dataset['iiindex']].subClassAttr[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value = open == true ? false : true;\n        return;\n      }\n      this.$data.classAttrList[e.target.dataset['iiindex']].subClassAttr[index].Open = open == true ? false : true;\n    },\n    ondateTime: function ondateTime(e) {\n      //console.log(e.target)\n      var data_attr = this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value;\n      if (!data_attr) {\n        this.$data.subPanelList[e.target.dataset['iiindex']].subClassAttr[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value = e.target.value;\n        return;\n      }\n      this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value = e.target.value;\n    },\n    onchange: function onchange(e) {\n      __f__(\"log\", e.target, \" at pages/modal/ms_classAttr.vue:1293\");\n      var value = this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].dictitem[e.target.value];\n      var data_attr = this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']];\n      __f__(\"log\", data_attr, \" at pages/modal/ms_classAttr.vue:1296\");\n      if (value.Name != data_attr.Value) {\n        this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value = value.Name;\n        __f__(\"log\", this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value, \" at pages/modal/ms_classAttr.vue:1299\");\n        var eventid = this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].action;\n        if (eventid) {\n          // self.event_no_sub = 1;\n          var req = [];\n          var attrlist = this.$data.classAttrList;\n          for (var i = 0; i < attrlist.length; i++) {\n            var attr = attrlist[i].Attr;\n            for (var j = 0; j < attr.length; j++) {\n              var ar = attr[j];\n              if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n              if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n                attr: ar.Name,\n                val: ar.ValID ? ar.ValID : ''\n              });else if (ar.Type == '布尔值') req.push({\n                attr: ar.Name,\n                val: ar.Value ? '1' : '0'\n              });else req.push({\n                attr: ar.Name,\n                val: ar.Value ? ar.Value : ''\n              });\n            }\n          }\n          var info = {\n            eventid: eventid,\n            edtype: \"0\",\n            projectid: '',\n            rclsid: '',\n            robjid: '',\n            userlogin: '',\n            clsid: this.$data.param.Master_Cls.ID,\n            objid: \"\",\n            attr: req\n          };\n          this.DataObjRunCustomEvent(info);\n        }\n      }\n    },\n    onchange2: function onchange2(item, value, delvalue) {\n      // console.log(item);\n      // console.log(value);\n      // console.log(delvalue);\n      if (item.length == 0) {\n        //为空时,清空属性value\n        var index,\n          iindex,\n          dindex = 0;\n        for (var i in this.$data.classAttrList) {\n          for (var j in this.$data.classAttrList[i].Attr) {\n            if (delvalue[0].attr == this.$data.classAttrList[i].Attr[j].Name) {\n              this.$data.classAttrList[i].Attr[j].Value = \"\";\n            }\n          }\n        }\n      }\n      for (var v in item) {\n        var index,\n          iindex,\n          dindex = 0;\n        for (var i in this.$data.classAttrList) {\n          for (var j in this.$data.classAttrList[i].Attr) {\n            if (item[v].attr == this.$data.classAttrList[i].Attr[j].Name) {\n              index = i;\n              iindex = j;\n            }\n          }\n        }\n        var itemvalue = item[v];\n        var data_attr = this.$data.classAttrList[index].Attr[iindex];\n        __f__(\"log\", data_attr, \" at pages/modal/ms_classAttr.vue:1362\");\n        if (itemvalue.Name != data_attr.Value) {\n          this.$data.classAttrList[index].Attr[iindex].Value = value;\n          __f__(\"log\", this.$data.classAttrList[index].Attr[iindex].Value, \" at pages/modal/ms_classAttr.vue:1365\");\n          var eventid = this.$data.classAttrList[index].Attr[iindex].action;\n          if (eventid) {\n            // self.event_no_sub = 1;\n            var req = [];\n            var attrlist = this.$data.classAttrList;\n            for (var i = 0; i < attrlist.length; i++) {\n              var attr = attrlist[i].Attr;\n              for (var j = 0; j < attr.length; j++) {\n                var ar = attr[j];\n                if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n                if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n                  attr: ar.Name,\n                  val: ar.ValID ? ar.ValID : ''\n                });else if (ar.Type == '布尔值') req.push({\n                  attr: ar.Name,\n                  val: ar.Value ? '1' : '0'\n                });else if (ar.Type == '字典' || ar.Type == '字典-字符串' || ar.Type == '字典-整数') req.push({\n                  attr: ar.Name,\n                  val: itemvalue.Name\n                });else req.push({\n                  attr: ar.Name,\n                  val: ar.Value ? ar.Value : ''\n                });\n              }\n            }\n            var info = {\n              eventid: eventid,\n              edtype: \"0\",\n              projectid: '',\n              rclsid: '',\n              robjid: '',\n              userlogin: '',\n              clsid: this.$data.param.Master_Cls.ID,\n              objid: \"\",\n              attr: req\n            };\n            this.DataObjRunCustomEvent(info);\n          }\n        }\n      }\n    },\n    sub_onchange: function sub_onchange(e) {\n      __f__(\"log\", e.target, \" at pages/modal/ms_classAttr.vue:1406\");\n      var value = this.$data.subPanelList[e.target.dataset['iiindex']].subClassAttr[e.target.dataset['index']].Attr[e.target.dataset['iindex']].dictitem[e.target.value];\n      var data_attr = this.$data.subPanelList[e.target.dataset['iiindex']].subClassAttr[e.target.dataset['index']].Attr[e.target.dataset['iindex']];\n      __f__(\"log\", data_attr, \" at pages/modal/ms_classAttr.vue:1409\");\n      if (value.Name != data_attr.Value) {\n        this.$data.subPanelList[e.target.dataset['iiindex']].subClassAttr[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value = value.Name;\n        __f__(\"log\", this.$data.subPanelList[e.target.dataset['iiindex']].subClassAttr[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value, \" at pages/modal/ms_classAttr.vue:1412\");\n        var eventid = this.$data.subPanelList[e.target.dataset['iiindex']].subClassAttr[e.target.dataset['index']].Attr[e.target.dataset['iindex']].action;\n        if (eventid) {\n          // self.event_no_sub = 1;\n          var req = [];\n          var attrlist = this.$data.subPanelList[e.target.dataset['iiindex']].subClassAttr;\n          for (var i = 0; i < attrlist.length; i++) {\n            var attr = attrlist[i].Attr;\n            for (var j = 0; j < attr.length; j++) {\n              var ar = attr[j];\n              if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n              if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n                attr: ar.Name,\n                val: ar.ValID ? ar.ValID : ''\n              });else if (ar.Type == '布尔值') req.push({\n                attr: ar.Name,\n                val: ar.Value ? '1' : '0'\n              });else req.push({\n                attr: ar.Name,\n                val: ar.Value ? ar.Value : ''\n              });\n            }\n          }\n          var info = {\n            eventid: eventid,\n            edtype: \"0\",\n            projectid: '',\n            rclsid: '',\n            robjid: '',\n            userlogin: '',\n            clsid: this.$data.param.Sub_Cls.ID,\n            objid: \"\",\n            attr: req\n          };\n          this.DataObjRunCustomEvent(info);\n        }\n      }\n    },\n    sub_onchange2: function sub_onchange2(item, value, delvalue) {\n      // console.log(item);\n      // console.log(value);\n      // console.log(delvalue);\n      var subClassAttr = this.$data.subPanelList[e.target.dataset['iiindex']].subClassAttr;\n      if (item.length == 0) {\n        //为空时,清空属性value\n        var index,\n          iindex,\n          dindex = 0;\n        for (var i in subClassAttr) {\n          for (var j in subClassAttr[i].Attr) {\n            for (var d in subClassAttr[i].Attr[j].dictitem) {\n              if (delvalue[0].Name == subClassAttr[i].Attr[j].dictitem[d].Name) {\n                subClassAttr[i].Attr[j].Value = \"\";\n              }\n            }\n          }\n        }\n      }\n      for (var v in item) {\n        var index,\n          iindex,\n          dindex = 0;\n        for (var i in subClassAttr) {\n          for (var j in subClassAttr[i].Attr) {\n            for (var d in subClassAttr[i].Attr[j].dictitem) {\n              if (item[v].Name == subClassAttr[i].Attr[j].dictitem[d].Name) {\n                index = i;\n                iindex = j;\n                dindex = d;\n              }\n            }\n          }\n        }\n        var itemvalue = item[v];\n        var data_attr = subClassAttr[index].Attr[iindex];\n        __f__(\"log\", data_attr, \" at pages/modal/ms_classAttr.vue:1480\");\n        if (itemvalue.Name != data_attr.Value) {\n          subClassAttr[index].Attr[iindex].Value = value;\n          __f__(\"log\", subClassAttr[index].Attr[iindex].Value, \" at pages/modal/ms_classAttr.vue:1483\");\n          var eventid = subClassAttr[index].Attr[iindex].action;\n          if (eventid) {\n            // self.event_no_sub = 1;\n            var req = [];\n            var attrlist = subClassAttr;\n            for (var i = 0; i < attrlist.length; i++) {\n              var attr = attrlist[i].Attr;\n              for (var j = 0; j < attr.length; j++) {\n                var ar = attr[j];\n                if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n                if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n                  attr: ar.Name,\n                  val: ar.ValID ? ar.ValID : ''\n                });else if (ar.Type == '布尔值') req.push({\n                  attr: ar.Name,\n                  val: ar.Value ? '1' : '0'\n                });else if (ar.Type == '字典' || ar.Type == '字典-字符串' || ar.Type == '字典-整数') req.push({\n                  attr: ar.Name,\n                  val: itemvalue.Name\n                });else req.push({\n                  attr: ar.Name,\n                  val: ar.Value ? ar.Value : ''\n                });\n              }\n            }\n            var info = {\n              eventid: eventid,\n              edtype: \"0\",\n              projectid: '',\n              rclsid: '',\n              robjid: '',\n              userlogin: '',\n              clsid: this.$data.param.Sub_Cls.ID,\n              objid: \"\",\n              attr: req\n            };\n            this.DataObjRunCustomEvent(info);\n          }\n        }\n      }\n    },\n    onevent: function onevent(e) {\n      // console.log(e.target);\n      var data_attr = this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']];\n      if (!data_attr) {\n        this.$data.subPanelList[e.target.dataset['iiindex']].subClassAttr[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value = e.target.value;\n        return;\n      }\n      // console.log(data_attr);\n      if (e.target.value != data_attr.Value) {\n        this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value = e.target.value;\n        // var eventid = this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].action;\n        //子数据类扫码区事件脚本\n        var eventid = this.$data.param.Scan_Code.Input_Change_Event.ID;\n        if (eventid) {\n          // self.event_no_sub = 1;\n          var req = [];\n          var attrlist = this.$data.classAttrList; //主数据类属性\n          for (var i = 0; i < attrlist.length; i++) {\n            var attr = attrlist[i].Attr;\n            for (var j = 0; j < attr.length; j++) {\n              var ar = attr[j];\n              if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n              if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n                attr: ar.Name,\n                value: ar.ValID ? ar.ValID : ''\n              });else if (ar.Type == '布尔值') req.push({\n                attr: ar.Name,\n                value: ar.Value ? '1' : '0'\n              });else req.push({\n                attr: ar.Name,\n                value: ar.Value ? ar.Value : ''\n              });\n            }\n          }\n          var info = {\n            eventid: eventid,\n            edtype: \"7\",\n            //\"0\",\n            projectid: '',\n            rclsid: '',\n            robjid: '',\n            userlogin: '',\n            clsid: 'MBOX',\n            //this.$data.param.Sub_Cls.ID,\n            objid: \"\",\n            attr: req,\n            mast_attr: [],\n            inputParamter: [{\n              attr: 'mast_input_3037',\n              value: e.target.value\n            }]\n          };\n          this.scan_DataObjRunCustomEvent(info, \"\");\n        }\n      }\n    },\n    oncheck: function oncheck(e) {\n      // console.log(e.target);\n      var ischecked = e.target.dataset.ischeck ? false : true;\n      var data_attr = this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']];\n      if (!data_attr) {\n        this.$data.subPanelList[e.target.dataset['iiindex']].subClassAttr[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value = ischecked;\n        return;\n      }\n      // console.log(data_attr);\n      if (ischecked != data_attr.Value) {\n        this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value = ischecked;\n        var eventid = this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].action;\n        if (eventid) {\n          // self.event_no_sub = 1;\n          var req = [];\n          var attrlist = this.$data.classAttrList;\n          for (var i = 0; i < attrlist.length; i++) {\n            var attr = attrlist[i].Attr;\n            for (var j = 0; j < attr.length; j++) {\n              var ar = attr[j];\n              if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n              if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n                attr: ar.Name,\n                val: ar.ValID ? ar.ValID : ''\n              });else if (ar.Type == '布尔值') req.push({\n                attr: ar.Name,\n                val: ar.Value ? '1' : '0'\n              });else req.push({\n                attr: ar.Name,\n                val: ar.Value ? ar.Value : ''\n              });\n            }\n          }\n          var info = {\n            eventid: eventid,\n            edtype: \"0\",\n            projectid: '',\n            rclsid: '',\n            robjid: '',\n            userlogin: '',\n            clsid: this.$data.param.Master_Cls.ID,\n            objid: \"\",\n            attr: req\n          };\n          this.DataObjRunCustomEvent(info);\n        }\n      }\n    },\n    inputValListIsDel: function inputValListIsDel(index) {\n      // console.log(index);\n      this.$data.inputValList.splice(index, 1); //删除tabPagejson的内容\n      // console.log(this.$data.inputValList);\n    },\n    addresschange: function addresschange(e) {\n      // console.log(e.target);\n      __f__(\"log\", e.data.join(';'), \" at pages/modal/ms_classAttr.vue:1627\");\n      this.$data.subClassAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value = e.data.join(';');\n    },\n    classAttr_extButton: function classAttr_extButton(index, iindex) {\n      var $this = this;\n      var before_click_button = $this.$data.classAttrList[index].Attr[iindex].before_click_button;\n      var button_callback = $this.$data.classAttrList[index].Attr[iindex].button_callback;\n      if (!before_click_button) {\n        uni.showModal({\n          title: \"提示\",\n          content: \"before_click_button-event_id为空!\",\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n        return;\n      }\n      if (!button_callback) {\n        uni.showModal({\n          title: \"提示\",\n          content: \"button_callback-event_id为空!\",\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n        return;\n      }\n      var data_attr = this.$data.classAttrList[index].Attr[iindex];\n      this.DataObjRunCustomEvent_Return(before_click_button, data_attr, button_callback, index, iindex);\n    },\n    classAttr_AddPer: function classAttr_AddPer(index, iindex) {\n      var param = {\n        index: index,\n        iindex: iindex\n      };\n      var $this = this;\n      uni.navigateTo({\n        url: '../selpsn/index?mulit=false&param=' + JSON.stringify(param),\n        events: {\n          AddPer: function AddPer(data, param) {\n            // console.log(param);\n            __f__(\"log\", data, \" at pages/modal/ms_classAttr.vue:1653\");\n            $this.$data.classAttrList[param.index].Attr[param.iindex].Value = data[0].Name;\n            $this.$data.classAttrList[param.index].Attr[param.iindex].ValID = data[0].Login + ';' + data[0].Name;\n            var eventid = $this.$data.classAttrList[param.index].Attr[param.iindex].action;\n            if (eventid) {\n              eventid = eventid.trim();\n              if (eventid) {\n                var info = {\n                  eventid: eventid,\n                  edtype: \"4\",\n                  projectid: \"\",\n                  rclsid: \"\",\n                  robjid: \"\",\n                  userlogin: data[0].Login,\n                  clsid: $this.$data.param.Master_Cls.ID,\n                  objid: \"\",\n                  attr: []\n                };\n\n                // var data_attr = $this.$data.classAttrList[param.index].Attr[param.iindex];\n                $this.DataObjRunCustomEvent(info);\n              }\n            }\n          }\n        }\n      });\n    },\n    classAttr_AddRef: function classAttr_AddRef(e) {\n      __f__(\"log\", e.target, \" at pages/modal/ms_classAttr.vue:1682\");\n      uni.showModal({\n        title: \"提示\",\n        content: \"此功能还未实现!\",\n        showCancel: false,\n        confirmText: \"取消\"\n      });\n      // var value=this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].RelCls[e.target.value];\n      // this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value=value;\n    },\n    classAttr_AddPrj: function classAttr_AddPrj(index, iindex) {\n      var param = {\n        index: index,\n        iindex: iindex\n      };\n      var $this = this;\n      uni.navigateTo({\n        url: '../selPrj/index?relation=-1&param=' + JSON.stringify(param),\n        events: {\n          AddPer: function AddPer(data, param) {\n            // console.log(param);\n            // console.log(data);\n            $this.$data.classAttrList[param.index].Attr[param.iindex].Value = data[0].Name;\n            $this.$data.classAttrList[param.index].Attr[param.iindex].ValID = data[0].ID + ';' + data[0].Name;\n            var eventid = $this.$data.classAttrList[param.index].Attr[param.iindex].action;\n            if (eventid) {\n              eventid = eventid.trim();\n              if (eventid) {\n                var info = {\n                  eventid: eventid,\n                  edtype: \"2\",\n                  projectid: data[0].ID,\n                  rclsid: \"\",\n                  robjid: \"\",\n                  userlogin: \"\",\n                  clsid: $this.$data.param.Master_Cls.ID,\n                  objid: \"\",\n                  attr: []\n                };\n\n                // var data_attr = $this.$data.classAttrList[param.index].Attr[param.iindex];\n                $this.DataObjRunCustomEvent(info);\n              }\n            }\n          }\n        }\n      });\n    },\n    sava: function sava() {\n      if (this.$data.param.Before_OK_Event)\n        //判断功能点参数是否有确定前脚本\n        this.scan_OKDataObjRunCustomEvent(this.$data.param.Before_OK_Event.ID);else if (this.$data.param.After_OK_Event)\n        //判断功能点参数是否有确定后脚本\n        this.scan_OKDataObjRunCustomEvent(this.$data.param.After_OK_Event.ID);else uni.navigateBack({\n        delta: 1\n      }); //返回层数,2则上上页\n    },\n    add: function add() {\n      var _this5 = this;\n      uni.showLoading({\n        title: \"加载中...\",\n        mask: true\n      });\n      var req = [];\n      var attrlist = this.$data.classAttrList;\n      for (var i = 0; i < attrlist.length; i++) {\n        var attr = attrlist[i].Attr;\n        for (var j = 0; j < attr.length; j++) {\n          var ar = attr[j];\n          if (ar.Value == '请选择' || ar.Value == '——请选择——') ar.Value = '';\n          if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n          if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n            name: ar.Name,\n            value: ar.ValID ? ar.ValID : ''\n          });else if (ar.Type == '布尔值') req.push({\n            name: ar.Name,\n            value: ar.Value ? '1' : '0'\n          });else if (ar.Type == '字典' || ar.Type == '字典-字符串' || ar.Type == '字典-整数') {\n            if (ar.select == true) {\n              //判断下拉是否多选\n              var valStr = \"\";\n              for (var v in ar.Value) {\n                if (valStr) valStr += \";\";\n                valStr += ar.Value[v];\n              }\n              req.push({\n                name: ar.Name,\n                value: valStr\n              });\n            } else req.push({\n              name: ar.Name,\n              value: ar.Value\n            });\n          } else req.push({\n            name: ar.Name,\n            value: ar.Value ? ar.Value : ''\n          });\n          if (ar.notempty == true && !ar.Value) {\n            // if(ar.NotEmpty=='1'){\n            uni.hideLoading();\n            // uni.showToast({title:ar.DispName+'不能为空!',icon:\"success\",duration:3000});\n            uni.showModal({\n              title: \"提示\",\n              content: ar.DispName + '不能为空!',\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n            return;\n          }\n        }\n      }\n      var enviroment = {\n        'function': '3000',\n        // 功能点编号\n        cls_id: this.$data.param.Master_Cls.ID,\n        // 功能点主数据类标识\n        'button': 'top',\n        // top/bottom\n        button_name: '新增',\n        master: {\n          cls_id: this.$data.param.Master_Cls.ID\n        }\n      };\n      var dataInfo = {\n        class_id: this.$data.param.Master_Cls.ID,\n        data_obj_id: '',\n        masterclsid: '',\n        req: JSON.stringify(req),\n        upfile: JSON.stringify([]),\n        post_data: JSON.stringify({}),\n        compose: JSON.stringify([]),\n        refdatastore: JSON.stringify([]),\n        extinfo: JSON.stringify(enviroment),\n        not_trigger_sys_event: ''\n      };\n\n      // return\n      __f__(\"log\", dataInfo, \" at pages/modal/ms_classAttr.vue:1791\");\n      this.$store.dispatch('addclassattr', dataInfo).then(function (success) {\n        __f__(\"log\", success, \" at pages/modal/ms_classAttr.vue:1793\");\n        uni.hideLoading();\n        if (success.code == '00000') {\n          var action = JSON.parse(success.data.Action);\n          if (action.ret == '0') {\n            if (action.result_type == '0') {\n              uni.showToast({\n                title: action.result,\n                icon: \"success\",\n                duration: 3000\n              });\n            }\n            // \"{\"ret\":0, \"result_type\":0, \"result\":\"创建成功123123123\",\"info\":\"\"}\"\n          }\n          //刷新\n          uni.redirectTo({\n            url: '../modal/ms_classAttr?param=' + JSON.stringify(_this5.$data.param) + \"&titlename=\" + _this5.$data.title\n          });\n          // this.class_attr_init();\n        } else {\n          uni.showModal({\n            title: \"错误\",\n            content: success.msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        __f__(\"log\", ex, \" at pages/modal/ms_classAttr.vue:1812\");\n        uni.hideLoading();\n        uni.showModal({\n          title: \"提示\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\n    },\n    class_attr_init: function class_attr_init() {\n      var attrlist = this.$data.classGridStyle.StyleDef.show_style;\n      var newattrlist = [];\n      if (this.$data.classAttrList.length > 0) {\n        for (var i = 0; i < attrlist.length; i++) {\n          var open = attrlist[i].open;\n          var name = attrlist[i].attrgroup_name;\n          var attrs = attrlist[i].attrs;\n          for (var s = 0; s < this.$data.classAttrList.length; s++) {\n            var clsattr = this.$data.classAttrList[s];\n            if (name == clsattr.Name) {\n              var attr = [];\n              for (var j = 0; j < attrs.length; j++) {\n                for (var l = 0; l < clsattr.Attr.length; l++) {\n                  var ca = clsattr.Attr[l];\n                  if (attrs[j].attr == ca.Name) {\n                    ca.action = attrs[j].action;\n                    ca.edit = attrs[j].edit;\n                    ca.notempty = attrs[j].notempty;\n                    ca.ext_button = attrs[j].ext_button;\n                    ca.button_img = attrs[j].button_img;\n                    ca.button_tooltip = attrs[j].button_tooltip;\n                    ca.before_click_button = attrs[j].before_click_button;\n                    ca.button_callback = attrs[j].button_callback;\n                    ca.hidden = attrs[j].hidden;\n                    ca.select = attrs[j].select == undefined ? false : attrs[j].select;\n                    ca.Value = \"\";\n                    if (ca.dictitem) {\n                      if (ca.select == true) ca.Value = []; //ca.dictitem[0].CN_S_NAME;\n                      else ca.Value = '请选择'; //ca.dictitem[0].CN_S_NAME;\n                      var dictitemlist = [];\n                      for (var d = 0; d < ca.dictitem.length; d++) {\n                        ca.dictitem[d].label = ca.dictitem[d].CN_S_NAME;\n                        ca.dictitem[d].value = ca.dictitem[d].CN_S_NAME;\n                        ca.dictitem[d].attr = ca.Name;\n                        if (ca.dictitem[d].CN_C_IS_DEFAULT == '1') ca.Value = ca.dictitem[d].CN_S_NAME;\n                      }\n                    }\n                    if (ca.Type == '日期' || ca.Type == '时间') {\n                      var nowDate = new Date();\n                      var date = {\n                        year: nowDate.getFullYear(),\n                        month: nowDate.getMonth() + 1,\n                        day: nowDate.getDate()\n                      };\n                      ca.Value = date.year + '-' + (date.month >= 10 ? date.month : '0' + date.month) + '-' + (date.day >= 10 ? date.day : '0' + date.day);\n                    }\n                    if (ca.Type == '引用对象(多个)') {\n                      var relClsList = [];\n                      var attr_rescls = ca.RelCls.split(',');\n                      for (var ii in attr_rescls) {\n                        var rescls = attr_rescls[ii].split('|');\n                        relClsList.push({\n                          id: rescls[0],\n                          name: rescls[1]\n                        });\n                      }\n                      ca.RelClsList = relClsList;\n                      ca.Value = '请';\n                    }\n                    if (ca.Type == '省市区') ca.Value = '请选择';\n                    if (ca.Type == '布尔值') ca.Value = false;\n                    attr.push(ca);\n                  }\n                }\n              }\n              newattrlist.push({\n                BkColor: clsattr.BkColor,\n                HasAce: clsattr.HasAce,\n                ImgFontStyle: clsattr.ImgFontStyle,\n                Name: clsattr.Name,\n                Order: clsattr.Order,\n                Open: open,\n                Attr: attr,\n                control_style: this.$data.classGridStyle.StyleDef.control_style,\n                title_p_wdith: this.$data.classGridStyle.StyleDef.title_p_wdith,\n                Font: this.$data.classGridStyle.StyleDef.Font ? this.$data.classGridStyle.StyleDef.Font : {},\n                Bk_Color: this.$data.classGridStyle.StyleDef.Bk_Color ? this.$data.classGridStyle.StyleDef.Bk_Color : '#FFFFFF',\n                Text_Color: this.$data.classGridStyle.StyleDef.Text_Color ? this.$data.classGridStyle.StyleDef.Text_Color : '#000000'\n              });\n            }\n          }\n        }\n        if (newattrlist.length > 0) {\n          this.$data.classAttrList = newattrlist;\n        }\n        var req = [];\n        if (this.$data.classGridStyle.StyleDef) {\n          if (this.$data.classGridStyle.StyleDef.show_style.length > 0) {\n            var attrlist = this.$data.classGridStyle.StyleDef.show_style;\n            // $el.find('.attr_field').prop('readonly', true);\n            // $el.find('.attr_field').prop('disabled', true);\n            for (var i = 0; i < attrlist.length; i++) {\n              var attr = attrlist[i].attrs;\n              for (var j = 0; j < attr.length; j++) {\n                var ar = attr[j];\n                req.push({\n                  attr: ar.attr,\n                  value: ar.value ? ar.value : ''\n                });\n              }\n            }\n          }\n        }\n        var eventlist = this.$data.classGridStyle.StyleDef.event;\n        if (eventlist) {\n          if (eventlist.length > 0) {\n            for (var i = 0; i < eventlist.length; i++) {\n              if (eventlist[i].event_id == 'before_ok') {\n                this.$data.edit_ok_event = eventlist[i];\n              } else if (eventlist[i].event_id == 'initial') {\n                this.$data.edit_inital_event = eventlist[i];\n              } else if (eventlist[i].event_id == 'before_select_compose') {\n                this.$data.edit_select_compose_event = eventlist[i].scrip_id;\n                this.$data.edit_compose_cls_id = eventlist[i].compose_cls_id;\n              }\n            }\n          }\n        }\n        // console.log(req);\n        if (this.$data.edit_inital_event) {\n          var eventid = this.$data.edit_inital_event.scrip_id;\n          var info = {\n            eventid: eventid,\n            edtype: \"0\",\n            projectid: '',\n            rclsid: '',\n            robjid: '',\n            userlogin: '',\n            clsid: this.$data.param.Master_Cls.ID,\n            objid: \"\",\n            attr: req\n          };\n          this.ini_DataObjRunCustomEvent(info);\n        }\n        __f__(\"log\", this.$data.classGridStyle, \" at pages/modal/ms_classAttr.vue:1949\");\n        __f__(\"log\", this.$data.classAttrList, \" at pages/modal/ms_classAttr.vue:1950\");\n      } else {\n        uni.showModal({\n          title: \"提示\",\n          content: \"未找到可显示的的属性\",\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      }\n    },\n    subClass_attr_init: function subClass_attr_init() {\n      var attrlist = this.$data.subClassGridStyle.StyleDef.show_style;\n      var newattrlist = [];\n      if (this.$data.subClassAttrList.length > 0) {\n        for (var i = 0; i < attrlist.length; i++) {\n          var open = attrlist[i].open;\n          var name = attrlist[i].attrgroup_name;\n          var attrs = attrlist[i].attrs;\n          for (var s = 0; s < this.$data.subClassAttrList.length; s++) {\n            var clsattr = this.$data.subClassAttrList[s];\n            if (name == clsattr.Name) {\n              var attr = [];\n              for (var j = 0; j < attrs.length; j++) {\n                for (var l = 0; l < clsattr.Attr.length; l++) {\n                  var ca = clsattr.Attr[l];\n                  if (attrs[j].attr == ca.Name) {\n                    ca.action = attrs[j].action;\n                    ca.edit = attrs[j].edit;\n                    ca.notempty = attrs[j].notempty;\n                    ca.ext_button = attrs[j].ext_button;\n                    ca.button_img = attrs[j].button_img;\n                    ca.button_tooltip = attrs[j].button_tooltip;\n                    ca.before_click_button = attrs[j].before_click_button;\n                    ca.button_callback = attrs[j].button_callback;\n                    ca.hidden = attrs[j].hidden;\n                    ca.select = attrs[j].select == undefined ? false : attrs[j].select;\n                    ca.Value = \"\";\n                    if (ca.dictitem) {\n                      if (ca.select == true) ca.Value = []; //ca.dictitem[0].CN_S_NAME;\n                      else ca.Value = '请选择'; //ca.dictitem[0].CN_S_NAME;\n                      var dictitemlist = [];\n                      for (var d = 0; d < ca.dictitem.length; d++) {\n                        ca.dictitem[d].label = ca.dictitem[d].CN_S_NAME;\n                        ca.dictitem[d].value = ca.dictitem[d].CN_S_NAME;\n                        ca.dictitem[d].attr = ca.Name;\n                        if (ca.dictitem[d].CN_C_IS_DEFAULT == '1') ca.Value = ca.dictitem[d].CN_S_NAME;\n                      }\n                    }\n                    if (ca.Type == '日期' || ca.Type == '时间') {\n                      var nowDate = new Date();\n                      var date = {\n                        year: nowDate.getFullYear(),\n                        month: nowDate.getMonth() + 1,\n                        day: nowDate.getDate()\n                      };\n                      ca.Value = date.year + '-' + (date.month >= 10 ? date.month : '0' + date.month) + '-' + (date.day >= 10 ? date.day : '0' + date.day);\n                    }\n                    if (ca.Type == '引用对象(多个)') {\n                      var relClsList = [];\n                      var attr_rescls = ca.RelCls.split(',');\n                      for (var ii in attr_rescls) {\n                        var rescls = attr_rescls[ii].split('|');\n                        relClsList.push({\n                          id: rescls[0],\n                          name: rescls[1]\n                        });\n                      }\n                      ca.RelClsList = relClsList;\n                      ca.Value = '请';\n                    }\n                    if (ca.Type == '省市区') ca.Value = '请选择';\n                    if (ca.Type == '布尔值') ca.Value = false;\n                    attr.push(ca);\n                  }\n                }\n              }\n              newattrlist.push({\n                BkColor: clsattr.BkColor,\n                HasAce: clsattr.HasAce,\n                ImgFontStyle: clsattr.ImgFontStyle,\n                Name: clsattr.Name,\n                Order: clsattr.Order,\n                Open: open,\n                Attr: attr,\n                control_style: this.$data.subClassGridStyle.StyleDef.control_style,\n                title_p_wdith: this.$data.subClassGridStyle.StyleDef.title_p_wdith,\n                Font: this.$data.subClassGridStyle.StyleDef.Font ? this.$data.subClassGridStyle.StyleDef.Font : {},\n                Bk_Color: this.$data.subClassGridStyle.StyleDef.Bk_Color ? this.$data.subClassGridStyle.StyleDef.Bk_Color : '#FFFFFF',\n                Text_Color: this.$data.subClassGridStyle.StyleDef.Text_Color ? this.$data.subClassGridStyle.StyleDef.Text_Color : '#000000'\n              });\n            }\n          }\n        }\n        if (newattrlist.length > 0) {\n          this.$data.subClassAttrList = newattrlist;\n        }\n        var req = [];\n        if (this.$data.subClassGridStyle.StyleDef) {\n          if (this.$data.subClassGridStyle.StyleDef.show_style.length > 0) {\n            var attrlist = this.$data.subClassGridStyle.StyleDef.show_style;\n            // $el.find('.attr_field').prop('readonly', true);\n            // $el.find('.attr_field').prop('disabled', true);\n            for (var i = 0; i < attrlist.length; i++) {\n              var attr = attrlist[i].attrs;\n              for (var j = 0; j < attr.length; j++) {\n                var ar = attr[j];\n                req.push({\n                  attr: ar.attr,\n                  value: ar.value ? ar.value : ''\n                });\n              }\n            }\n          }\n        }\n        var eventlist = this.$data.subClassGridStyle.StyleDef.event;\n        if (eventlist) {\n          if (eventlist.length > 0) {\n            for (var i = 0; i < eventlist.length; i++) {\n              if (eventlist[i].event_id == 'before_ok') {\n                this.$data.edit_ok_event = eventlist[i];\n              } else if (eventlist[i].event_id == 'initial') {\n                this.$data.edit_inital_event = eventlist[i];\n              } else if (eventlist[i].event_id == 'before_select_compose') {\n                this.$data.edit_select_compose_event = eventlist[i].scrip_id;\n                this.$data.edit_compose_cls_id = eventlist[i].compose_cls_id;\n              }\n            }\n          }\n        }\n        // console.log(req);\n        if (this.$data.edit_inital_event) {\n          var eventid = this.$data.edit_inital_event.scrip_id;\n          var info = {\n            eventid: eventid,\n            edtype: \"0\",\n            projectid: '',\n            rclsid: '',\n            robjid: '',\n            userlogin: '',\n            clsid: this.$data.param.Sub_Cls.ID,\n            objid: \"\",\n            attr: req\n          };\n          this.scan_ini_DataObjRunCustomEvent(info);\n        }\n        __f__(\"log\", this.$data.subClassGridStyle, \" at pages/modal/ms_classAttr.vue:2088\");\n        __f__(\"log\", this.$data.subClassAttrList, \" at pages/modal/ms_classAttr.vue:2089\");\n      } else {\n        uni.showModal({\n          title: \"提示\",\n          content: \"未找到可显示的的属性\",\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      }\n    },\n    ini_DataObjRunCustomEvent: function ini_DataObjRunCustomEvent(info) {\n      var _this6 = this;\n      var param = {\n        EditStyle: this.$data.param.Master_Cls.View_Style.Name,\n        ViewStyle: this.$data.param.Master_Cls.View_Style.Name,\n        NotTriggerSysEvent: 0,\n        enviroment: {\n          'function': '3000',\n          // 功能点编号\n          cls_id: this.$data.param.Master_Cls.ID,\n          // 功能点主数据类标识\n          'button': 'top',\n          // top/bottom\n          button_name: '新增',\n          master: {\n            cls_id: this.$data.param.Master_Cls.ID // button=bottom时 master的cls_id\n            //obj_id: ''  // button=bottom时 master的obj_id\n          }\n        }\n      };\n\n      var inputparameter = '';\n      var global_attr = '';\n      var dataInfo = {\n        edtype: info.edtype,\n        eventid: info.eventid,\n        projectid: info.projectid,\n        rclsid: info.rclsid,\n        robjid: info.robjid,\n        userlogin: info.userlogin,\n        clsid: info.clsid,\n        objid: info.objid,\n        attr: JSON.stringify(info.attr),\n        extinfo: JSON.stringify(param),\n        inputparameter: inputparameter,\n        global_attr: global_attr\n      };\n      __f__(\"log\", dataInfo, \" at pages/modal/ms_classAttr.vue:2119\");\n      this.$store.dispatch('DataObjRunCustomEventInfo', dataInfo).then(function (success) {\n        __f__(\"log\", success, \" at pages/modal/ms_classAttr.vue:2121\");\n        if (success.code == '00000') {\n          var data = JSON.parse(success.data);\n          var actionlist = data.action;\n          if (actionlist) {\n            for (var j = 0; j < actionlist.length; j++) {\n              var action = actionlist[j];\n              var action_type = action.action_type;\n              var value = action.value;\n              if (action_type == 'set_dlg_attr') {\n                if (value) {\n                  var val = value;\n                  if (typeof value == 'string') {\n                    val = JSON.parse(value);\n                  }\n                  __f__(\"log\", val, \" at pages/modal/ms_classAttr.vue:2136\");\n                  for (var i = 0; i < val.length; i++) {\n                    for (var a = 0; a < _this6.$data.classAttrList.length; a++) {\n                      for (var l = 0; l < _this6.$data.classAttrList[a].Attr.length; l++) {\n                        var ca = _this6.$data.classAttrList[a].Attr[l];\n                        if (val[i].attr == ca.Name) {\n                          if (ca.Type == '字典' || ca.Type == '字典-字符串' || ca.Type == '字典-整数') {\n                            var dictItemList = [];\n                            for (var d in val[i].choice_list) {\n                              var val = val[i].choice_list[d];\n                              dictItemList.push({\n                                \"CN_S_NAME\": val,\n                                \"Name\": val,\n                                \"label\": val,\n                                \"value\": val\n                              });\n                            }\n                            ca.dictitem = dictItemList;\n                            // attr[j].dictitem = val[i].choice_list;\n                          } else {\n                            // ca.value = val[i].value;\n                          }\n                        }\n                      }\n                    }\n                    var length = 0;\n                    if (!_this6.$data.refdatastore.filter(function (s) {\n                      return val[i].attr == s.attr;\n                    }).length) {\n                      length = 1;\n                      _this6.$data.refdatastore.push(val[i]);\n                    }\n                    if (length == 0) {\n                      for (var j = 0; j < _this6.$data.refdatastore.length; j++) {\n                        if (_this6.$data.refdatastore[j].attr == val[i].attr) {\n                          _this6.$data.refdatastore[j].value = val[i].value;\n                        }\n                      }\n                    }\n                  }\n                }\n              }\n              if (action_type == 'open_select_userdlg') {\n                uni.showModal({\n                  title: \"错误2.2\",\n                  content: \"open_select_userdlg这个action_type还未处理!\",\n                  showCancel: false,\n                  confirmText: \"取消\"\n                });\n              }\n            }\n          }\n        } else {\n          uni.showModal({\n            title: \"错误2\",\n            content: success.msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        // console.log(ex);\n        uni.showModal({\n          title: \"错误2.1\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\n    },\n    DataObjRunCustomEvent: function DataObjRunCustomEvent(info, data_attr) {\n      var $this = this;\n      var enviroment = {\n        'function': '3000',\n        // 功能点编号\n        cls_id: this.$data.param.Master_Cls.ID,\n        // 功能点主数据类标识\n        'button': 'top',\n        // top/bottom\n        button_name: '新增',\n        master: {\n          cls_id: this.$data.param.Master_Cls.ID // button=bottom时 master的cls_id\n          //obj_id: ''  // button=bottom时 master的obj_id\n        }\n      };\n\n      enviroment.edit_dlg = {\n        type: 'small',\n        //小窗口\n        class_id: this.$data.param.Master_Cls.ID //当前数据类id\n      };\n\n      if (data_attr) {\n        enviroment.edit_dlg.form_control = {\n          //所属的表单控件\n          name: data_attr.Name,\n          //字段属性\n          text: data_attr.DispName,\n          //显示文本\n          group_name: data_attr.GroupName,\n          //属性组\n          type: data_attr.Type,\n          //字段类型\n          readonly: data_attr.ReadOnly,\n          //是否只读\n          button_img: data_attr.button_img,\n          //引用按钮的图标\n          button_tooltip: data_attr.button_tooltip //引用按钮的tooltip\n        };\n      }\n\n      var dataInfo = {\n        edtype: info.edtype,\n        eventid: info.eventid,\n        projectid: info.projectid.replace('{', '').replace('}', ''),\n        rclsid: info.rclsid,\n        robjid: info.robjid,\n        userlogin: info.userlogin,\n        clsid: info.clsid,\n        objid: info.objid,\n        attr: JSON.stringify(info.attr),\n        extinfo: JSON.stringify(enviroment),\n        inputparameter: '',\n        global_attr: JSON.stringify(this.$data.global_attr)\n      };\n      __f__(\"log\", dataInfo, \" at pages/modal/ms_classAttr.vue:2221\");\n      this.$store.dispatch('DataObjRunCustomEventInfo', dataInfo).then(function (success) {\n        __f__(\"log\", success, \" at pages/modal/ms_classAttr.vue:2223\");\n        if (success.code == '00000') {\n          var data = JSON.parse(success.data);\n          var actionlist = data.action;\n          if (actionlist) {\n            __f__(\"log\", actionlist, \" at pages/modal/ms_classAttr.vue:2229\");\n            for (var i = 0; i < actionlist.length; i++) {\n              var action = actionlist[i];\n              if (action.action_type == 'set_dlg_attr') {\n                var result = action.value;\n                for (var i = 0; i < result.length; i++) {\n                  if (result[i].choice_list) {\n                    for (var c = 0; c < $this.$data.classAttrList.length; c++) {\n                      var attr = $this.$data.classAttrList[c].Attr;\n                      for (var j = 0; j < attr.length; j++) {\n                        if (attr[j].Name == result[i].attr) {\n                          if (attr[j].Type == '字典' || attr[j].Type == '字典-字符串' || attr[j].Type == '字典-整数') {\n                            var dictItemList = [];\n                            for (var d in result[i].choice_list) {\n                              var val = result[i].choice_list[d];\n                              dictItemList.push({\n                                \"CN_S_NAME\": val,\n                                \"Name\": val,\n                                \"label\": val,\n                                \"value\": val\n                              });\n                            }\n                            attr[j].dictitem = dictItemList;\n                            // attr[j].dictitem = result[i].choice_list;\n                          }\n                        }\n                      }\n                    }\n                  }\n\n                  for (var c = 0; c < $this.$data.classAttrList.length; c++) {\n                    var attr = $this.$data.classAttrList[c].Attr;\n                    for (var j = 0; j < attr.length; j++) {\n                      __f__(\"log\", attr[j].Name + '==' + result[i].attr, \" at pages/modal/ms_classAttr.vue:2256\");\n                      if (attr[j].Name == result[i].attr) {\n                        attr[j].Value = result[i].value;\n                      }\n                    }\n                  }\n                  var length = 0;\n                  if (!$this.$data.refdatastore.filter(function (s) {\n                    return result[i].attr == s.attr;\n                  }).length) {\n                    length = 1;\n                    $this.$data.refdatastore.push(result[i]);\n                  }\n                  if (length == 0) {\n                    for (var j = 0; j < $this.$data.refdatastore.length; j++) {\n                      if ($this.$data.refdatastore[j].attr == result[i].attr) {\n                        $this.$data.refdatastore[j].value = result[i].value;\n                      }\n                    }\n                  }\n                }\n              } else if (data.action[i].action_type == 'set_global_attr') {\n                $this.$data.global_attr = data.action[i].value || [];\n              }\n            }\n          }\n          if (data.result) {\n            var result = data.result;\n            for (var i = 0; i < result.length; i++) {\n              for (var c = 0; c < $this.$data.classAttrList.length; c++) {\n                var attr = $this.$data.classAttrList[c].Attr;\n                for (var j = 0; j < attr.length; j++) {\n                  if (attr[j].Name == result[i].attr) {\n                    attr[j].Value = result[i].value;\n                  }\n                }\n              }\n              var length = 0;\n              if (!$this.$data.refdatastore.filter(function (s) {\n                return result[i].attr == s.attr;\n              }).length) {\n                length = 1;\n                $this.$data.refdatastore.push(result[i]);\n              }\n              if (length == 0) {\n                for (var j = 0; j < $this.$data.refdatastore.length; j++) {\n                  if ($this.$data.refdatastore[j].attr == result[i].attr) {\n                    $this.$data.refdatastore[j].value = result[i].value;\n                  }\n                }\n              }\n            }\n          }\n        } else {\n          uni.showModal({\n            title: \"错误3\",\n            content: success.msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        // console.log(ex);\n        uni.showModal({\n          title: \"错误3.1\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\n    },\n    OKDataObjRunCustomEvent: function OKDataObjRunCustomEvent() {\n      var _this7 = this;\n      var enviroment = {\n        'function': '3000',\n        // 功能点编号\n        cls_id: this.$data.param.Master_Cls.ID,\n        // 功能点主数据类标识\n        'button': 'top',\n        // top/bottom\n        button_name: '新增',\n        master: {\n          cls_id: this.$data.param.Master_Cls.ID // button=bottom时 master的cls_id\n        }\n      };\n\n      var eventid = this.$data.edit_ok_event.scrip_id;\n      var req = [];\n      var attrlist = this.$data.classAttrList;\n      for (var i = 0; i < attrlist.length; i++) {\n        var attr = attrlist[i].Attr;\n        for (var j = 0; j < attr.length; j++) {\n          var ar = attr[j];\n          if (ar.Value == '请选择' || ar.Value == '——请选择——') ar.Value = '';\n          if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n          if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n            attr: ar.Name,\n            value: ar.ValID ? ar.ValID : ''\n          });else if (ar.Type == '布尔值') req.push({\n            attr: ar.Name,\n            value: ar.Value ? '1' : '0'\n          });else req.push({\n            attr: ar.Name,\n            value: ar.Value\n          });\n        }\n      }\n      if (this.$data.refdatastore.length > 0) {\n        for (var i = 0; i < this.$data.refdatastore.length; i++) {\n          if (!req.filter(function (s) {\n            return this.$data.refdatastore[i].attr == s.name;\n          }).length) {\n            length = 1;\n            req.push({\n              'attr': this.$data.refdatastore[i].attr,\n              'value': this.$data.refdatastore[i].value\n            });\n          }\n        }\n      }\n      var info = {\n        eventid: eventid,\n        edtype: \"0\",\n        projectid: '',\n        rclsid: '',\n        robjid: '',\n        userlogin: '',\n        clsid: this.$data.param.Master_Cls.ID,\n        objid: \"\",\n        attr: req\n      };\n      var dataInfo = {\n        edtype: info.edtype,\n        eventid: info.eventid,\n        projectid: info.projectid,\n        rclsid: info.rclsid,\n        robjid: info.robjid,\n        userlogin: info.userlogin,\n        clsid: info.clsid,\n        objid: info.objid,\n        attr: JSON.stringify(info.attr),\n        extinfo: JSON.stringify(enviroment),\n        global_attr: JSON.stringify(this.$data.global_attr)\n      };\n      __f__(\"log\", dataInfo, \" at pages/modal/ms_classAttr.vue:2376\");\n      this.$store.dispatch('DataObjRunCustomEventInfo', dataInfo).then(function (success) {\n        __f__(\"log\", success, \" at pages/modal/ms_classAttr.vue:2378\");\n        if (success.code == '00000') {\n          var data = JSON.parse(success.data);\n          var result = data.result;\n          for (var i = 0; i < result.length; i++) {\n            // self.class_attr_ele.find('.attr_field[data-field=\"' + result[i].attr + '\"]').val(result[i].value).data('val', result[i].value);\n            var length = 0;\n            if (!_this7.$data.refdatastore.filter(function (s) {\n              return result[i].attr == s.attr;\n            }).length) {\n              length = 1;\n              _this7.$data.refdatastore.push(result[i]);\n            }\n            if (length == 0) {\n              for (var j = 0; j < _this7.$data.refdatastore.length; j++) {\n                if (_this7.$data.refdatastore[j].attr == result[i].attr) {\n                  _this7.$data.refdatastore[j].value = result[i].value;\n                }\n              }\n            }\n          }\n          _this7.add();\n        } else {\n          uni.showModal({\n            title: \"错误4\",\n            content: success.msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        // console.log(ex);\n        uni.showModal({\n          title: \"错误4.1\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\n    },\n    DataObjRunCustomEvent_Return: function DataObjRunCustomEvent_Return(eventid, data_attr, button_callback, index, iindex) {\n      var _this8 = this;\n      var enviroment = {\n        'function': '3000',\n        // 功能点编号\n        cls_id: this.$data.param.Master_Cls.ID,\n        // 功能点主数据类标识\n        'button': 'top',\n        // top/bottom\n        button_name: '新增',\n        master: {\n          cls_id: this.$data.param.Master_Cls.ID // button=bottom时 master的cls_id\n          //obj_id: ''  // button=bottom时 master的obj_id\n        }\n      };\n\n      var req = [];\n      var attrlist = this.$data.classAttrList;\n      for (var i = 0; i < attrlist.length; i++) {\n        var attr = attrlist[i].Attr;\n        for (var j = 0; j < attr.length; j++) {\n          var ar = attr[j];\n          if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n          if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n            attr: ar.Name,\n            value: ar.ValID ? ar.ValID : ''\n          });else if (ar.Type == '布尔值') req.push({\n            attr: ar.Name,\n            value: ar.Value ? '1' : '0'\n          });else req.push({\n            attr: ar.Name,\n            value: ar.Value\n          });\n        }\n      }\n      if (this.$data.refdatastore.length > 0) {\n        for (var i = 0; i < this.$data.refdatastore.length; i++) {\n          if (!req.filter(function (s) {\n            return this.$data.refdatastore[i].attr == s.name;\n          }).length) {\n            length = 1;\n            req.push({\n              'attr': this.$data.refdatastore[i].attr,\n              'value': this.$data.refdatastore[i].value\n            });\n          }\n        }\n      }\n      var extinfo = enviroment;\n      extinfo.edit_dlg = {\n        type: 'small',\n        //小窗口\n        class_id: this.$data.param.Master_Cls.ID //当前数据类id\n      };\n\n      if (data_attr) {\n        extinfo.edit_dlg.form_control = {\n          //所属的表单控件\n          name: data_attr.Name,\n          //字段属性\n          text: data_attr.DispName,\n          //显示文本\n          group_name: data_attr.GroupName,\n          //属性组\n          type: data_attr.Type,\n          //字段类型\n          readonly: data_attr.ReadOnly,\n          //是否只读\n          button_img: data_attr.button_img,\n          //引用按钮的图标\n          button_tooltip: data_attr.button_tooltip //引用按钮的tooltip\n        };\n      }\n\n      var dataInfo = {\n        edtype: \"0\",\n        eventid: eventid,\n        projectid: '',\n        rclsid: '',\n        robjid: '',\n        userlogin: '',\n        clsid: this.$data.param.Master_Cls.ID,\n        objid: '',\n        attr: JSON.stringify(req),\n        extinfo: JSON.stringify(extinfo),\n        global_attr: JSON.stringify(this.$data.global_attr)\n      };\n      __f__(\"log\", dataInfo, \" at pages/modal/ms_classAttr.vue:2467\");\n      this.$store.dispatch('DataObjRunCustomEventInfo', dataInfo).then(function (success) {\n        __f__(\"log\", success, \" at pages/modal/ms_classAttr.vue:2469\");\n        if (success.code == '00000') {\n          var data = JSON.parse(success.data);\n          if (data != \"\") {\n            var actions = data.action;\n            __f__(\"log\", actions, \" at pages/modal/ms_classAttr.vue:2475\");\n            if (actions) {\n              for (var i = 0; i < actions.length; i++) {\n                var action = actions[i];\n                var val = action.value;\n                var enviroment = JSON.stringify(enviroment);\n                if (action.action_type == 'open_panel') {\n                  var d = dialog({\n                    title: '<i class=\"ace-icon fa fa-info-circle\"></i> ' + '提示',\n                    content: action.action_type + '此action尚未处理!'\n                  });\n                  d.show();\n                } else if (action.action_type == 'open_select_userdlg') {\n                  var style = val.style;\n                  // style == 'user' ? '选择人员' : style == 'department' ? '选择部门' : style == 'role' ? '选择角色' : ''\n                  var $this = _this8;\n                  var param = {\n                    index: index,\n                    iindex: iindex,\n                    button_callback: button_callback,\n                    req: req,\n                    data_attr: data_attr\n                  };\n                  uni.navigateTo({\n                    url: '../selpsn/index?mulit=false&param=' + JSON.stringify(param),\n                    events: {\n                      AddPer: function AddPer(data, param) {\n                        // console.log(param);\n                        __f__(\"log\", data, \" at pages/modal/ms_classAttr.vue:2505\");\n                        var callback_eventid = param.button_callback.trim();\n                        var info = {\n                          eventid: callback_eventid,\n                          edtype: \"0\",\n                          projectid: '',\n                          rclsid: '',\n                          robjid: '',\n                          userlogin: '',\n                          clsid: $this.$data.param.Master_Cls.ID,\n                          objid: \"\",\n                          attr: param.req,\n                          inputparameter: data\n                        };\n                        $this.DataObjRunCustomEvent(info, param.data_attr);\n                      }\n                    }\n                  });\n                } else if (action.action_type == 'open_data_query_dlg') {} else if (action.action_type == 'open_common_dlg') {\n                  var value = action.value;\n                  var d = dialog({\n                    title: '<i class=\"ace-icon fa fa-info-circle\"></i> ' + '提示',\n                    content: action.action_type + '此action尚未处理!'\n                  });\n                  d.show();\n                } else if (action.action_type == 'open_project_query_dlg') {\n                  //console.log(action.value.select_range);\n                  //console.log(action.value.mulit_select);\n                  var priRel = '-1';\n                  if (action.value.select_range == '全部相关') priRel = '0';else if (action.value.select_range == '我负责的项目') priRel = '1';else if (action.value.select_range == '我创建的') priRel = '2';else if (action.value.select_range == '我参与的' || action.value.select_range == '我参加的') priRel = '3';else if (action.value.select_range == '我关注的') priRel = '4';else if (action.value.select_range == '我下属的项目') priRel = '5';\n                  var $this = _this8;\n                  var param_ = {\n                    index: index,\n                    iindex: iindex,\n                    button_callback: button_callback,\n                    req: req\n                  };\n                  uni.navigateTo({\n                    url: '../selPrj/index?relation=' + priRel + '&param=' + JSON.stringify(param_),\n                    events: {\n                      AddPer: function AddPer(data, param) {\n                        $this.$data.classAttrList[param.index].Attr[param.iindex].Value = data[0].Name;\n                        $this.$data.classAttrList[param.index].Attr[param.iindex].ValID = data[0].ID + ';' + data[0].Name;\n                        var callback_eventid = param.button_callback.trim();\n                        if (callback_eventid) {\n                          var info = {\n                            eventid: callback_eventid,\n                            edtype: \"2\",\n                            projectid: data[0].ID,\n                            rclsid: \"\",\n                            robjid: \"\",\n                            userlogin: \"\",\n                            clsid: $this.$data.param.Master_Cls.ID,\n                            objid: \"\",\n                            attr: param.req\n                          };\n                          $this.DataObjRunCustomEvent(info);\n                        }\n                      }\n                    }\n                  });\n                } else {\n                  var d = dialog({\n                    title: '<i class=\"ace-icon fa fa-info-circle\"></i> ' + '提示',\n                    content: action.action_type + '此action尚未处理!'\n                  });\n                  d.show();\n                }\n              }\n            }\n          } else {\n            uni.showModal({\n              title: \"提示5.2\",\n              content: '调用 before_click_button 脚本返回空,event_id' + eventid,\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n          }\n        } else {\n          uni.showModal({\n            title: \"错误5\",\n            content: success.msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        // console.log(ex);\n        uni.showModal({\n          title: \"提示5.1\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\n    },\n    scan_ini_DataObjRunCustomEvent: function scan_ini_DataObjRunCustomEvent(info) {\n      var _this9 = this;\n      var param = {\n        EditStyle: this.$data.param.Sub_Cls.View_Style.Name,\n        ViewStyle: this.$data.param.Sub_Cls.View_Style.Name,\n        NotTriggerSysEvent: 0,\n        enviroment: {\n          'function': '3000',\n          // 功能点编号\n          cls_id: this.$data.param.Sub_Cls.ID,\n          // 功能点主数据类标识\n          'button': 'top',\n          // top/bottom\n          button_name: '新增',\n          master: {\n            cls_id: this.$data.param.Sub_Cls.ID // button=bottom时 master的cls_id\n            //obj_id: ''  // button=bottom时 master的obj_id\n          }\n        }\n      };\n\n      var inputparameter = '';\n      var global_attr = '';\n      var dataInfo = {\n        edtype: info.edtype,\n        eventid: info.eventid,\n        projectid: info.projectid,\n        rclsid: info.rclsid,\n        robjid: info.robjid,\n        userlogin: info.userlogin,\n        clsid: info.clsid,\n        objid: info.objid,\n        attr: JSON.stringify(info.attr),\n        extinfo: JSON.stringify(param),\n        inputparameter: inputparameter,\n        global_attr: global_attr\n      };\n      __f__(\"log\", dataInfo, \" at pages/modal/ms_classAttr.vue:2628\");\n      this.$store.dispatch('DataObjRunCustomEventInfo', dataInfo).then(function (success) {\n        __f__(\"log\", success, \" at pages/modal/ms_classAttr.vue:2630\");\n        if (success.code == '00000') {\n          var data = JSON.parse(success.data);\n          var actionlist = data.action;\n          if (actionlist) {\n            for (var j = 0; j < actionlist.length; j++) {\n              var action = actionlist[j];\n              var action_type = action.action_type;\n              var value = action.value;\n              if (action_type == 'set_dlg_attr') {\n                if (value) {\n                  var val = value;\n                  if (typeof value == 'string') {\n                    val = JSON.parse(value);\n                  }\n                  __f__(\"log\", val, \" at pages/modal/ms_classAttr.vue:2645\");\n                  for (var i = 0; i < val.length; i++) {\n                    for (var a = 0; a < _this9.$data.subClassAttrList.length; a++) {\n                      for (var l = 0; l < _this9.$data.subClassAttrList[a].Attr.length; l++) {\n                        var ca = _this9.$data.subClassAttrList[a].Attr[l];\n                        if (val[i].attr == ca.Name) {\n                          if (ca.Type == '字典' || ca.Type == '字典-字符串' || ca.Type == '字典-整数') {\n                            var dictItemList = [];\n                            for (var d in val[i].choice_list) {\n                              var val = val[i].choice_list[d];\n                              dictItemList.push({\n                                \"CN_S_NAME\": val,\n                                \"Name\": val,\n                                \"label\": val,\n                                \"value\": val\n                              });\n                            }\n                            ca.dictitem = dictItemList;\n                            // attr[j].dictitem = val[i].choice_list;\n                          } else {\n                            // ca.value = val[i].value;\n                          }\n                        }\n                      }\n                    }\n                    var length = 0;\n                    if (!_this9.$data.refdatastore.filter(function (s) {\n                      return val[i].attr == s.attr;\n                    }).length) {\n                      length = 1;\n                      _this9.$data.refdatastore.push(val[i]);\n                    }\n                    if (length == 0) {\n                      for (var j = 0; j < _this9.$data.refdatastore.length; j++) {\n                        if (_this9.$data.refdatastore[j].attr == val[i].attr) {\n                          _this9.$data.refdatastore[j].value = val[i].value;\n                        }\n                      }\n                    }\n                  }\n                }\n              }\n              if (action_type == 'open_select_userdlg') {\n                uni.showModal({\n                  title: \"错误6.2\",\n                  content: \"open_select_userdlg这个action_type还未处理!\",\n                  showCancel: false,\n                  confirmText: \"取消\"\n                });\n              }\n            }\n          }\n        } else {\n          uni.showModal({\n            title: \"错误6\",\n            content: success.msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        // console.log(ex);\n        uni.showModal({\n          title: \"错误6.1\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\n    },\n    scan_DataObjRunCustomEvent: function scan_DataObjRunCustomEvent(info, data_attr) {\n      var _this10 = this;\n      var $this = this;\n      var enviroment = {\n        'function': '3000',\n        // 功能点编号\n        cls_id: 'MBOX',\n        //this.$data.param.Sub_Cls.ID,     // 功能点从数据类标识\n        'button': 'top',\n        // top/bottom\n        button_name: '新增',\n        master: {\n          cls_id: 'MBOX',\n          //this.$data.param.Sub_Cls.ID, // button=bottom时 master的cls_id\n          attr: info.mast_attr //主数据类属性\n          //obj_id: ''  // button=bottom时 master的obj_id\n        }\n      };\n\n      enviroment.edit_dlg = {\n        type: 'small',\n        //小窗口\n        class_id: 'MBOX' //this.$data.param.Sub_Cls.ID,//当前数据类id\n      };\n\n      if (data_attr) {\n        enviroment.edit_dlg.form_control = {\n          //所属的表单控件\n          name: data_attr.Name,\n          //字段属性\n          text: data_attr.DispName,\n          //显示文本\n          group_name: data_attr.GroupName,\n          //属性组\n          type: data_attr.Type,\n          //字段类型\n          readonly: data_attr.ReadOnly,\n          //是否只读\n          button_img: data_attr.button_img,\n          //引用按钮的图标\n          button_tooltip: data_attr.button_tooltip //引用按钮的tooltip\n        };\n      }\n\n      var dataInfo = {\n        edtype: info.edtype,\n        eventid: info.eventid,\n        projectid: info.projectid.replace('{', '').replace('}', ''),\n        rclsid: info.rclsid,\n        robjid: info.robjid,\n        userlogin: info.userlogin,\n        clsid: info.clsid,\n        objid: info.objid,\n        attr: JSON.stringify(info.attr),\n        extinfo: JSON.stringify(enviroment),\n        inputparameter: JSON.stringify(info.inputParamter),\n        global_attr: JSON.stringify(this.$data.global_attr)\n      };\n      __f__(\"log\", dataInfo, \" at pages/modal/ms_classAttr.vue:2732\");\n      this.$store.dispatch('DataObjRunCustomEventInfo', dataInfo).then(function (success) {\n        __f__(\"log\", success, \" at pages/modal/ms_classAttr.vue:2734\");\n        if (success.code == '00000') {\n          var data = JSON.parse(success.data);\n          var actionlist = data.action;\n          if (actionlist) {\n            __f__(\"log\", actionlist, \" at pages/modal/ms_classAttr.vue:2740\");\n            for (var ii = 0; ii < actionlist.length; ii++) {\n              var action = actionlist[ii];\n              if (action.action_type == 'set_dlg_attr') {\n                var result = action.value;\n                for (var i = 0; i < result.length; i++) {\n                  if (result[i].choice_list) {\n                    for (var s = 0; s < $this.$data.subPanelList.length; s++) {\n                      for (var c = 0; c < $this.$data.subPanelList[s].subClassAttrList.length; c++) {\n                        var attr = $this.$data.subPanelList[s].subClassAttrList[c].Attr;\n                        for (var j = 0; j < attr.length; j++) {\n                          if (attr[j].Name == result[i].attr) {\n                            if (attr[j].Type == '字典' || attr[j].Type == '字典-字符串' || attr[j].Type == '字典-整数') {\n                              var dictItemList = [];\n                              for (var d in result[i].choice_list) {\n                                var val = result[i].choice_list[d];\n                                dictItemList.push({\n                                  \"CN_S_NAME\": val,\n                                  \"Name\": val,\n                                  \"label\": val,\n                                  \"value\": val\n                                });\n                              }\n                              attr[j].dictitem = dictItemList;\n                              // attr[j].dictitem = result[i].choice_list;\n                            }\n                          }\n                        }\n                      }\n                    }\n                  }\n\n                  for (var s = 0; s < $this.$data.subPanelList.length; s++) {\n                    for (var c = 0; c < $this.$data.subPanelList[s].subClassAttrList.length; c++) {\n                      var attr = $this.$data.subPanelList[s].subClassAttrList[c].Attr;\n                      for (var j = 0; j < attr.length; j++) {\n                        __f__(\"log\", attr[j].Name + '==' + result[i].attr, \" at pages/modal/ms_classAttr.vue:2770\");\n                        if (attr[j].Name == result[i].attr) {\n                          attr[j].Value = result[i].value;\n                        }\n                      }\n                    }\n                  }\n                  var length = 0;\n                  if (!$this.$data.refdatastore.filter(function (s) {\n                    return result[i].attr == s.attr;\n                  }).length) {\n                    length = 1;\n                    $this.$data.refdatastore.push(result[i]);\n                  }\n                  if (length == 0) {\n                    for (var j = 0; j < $this.$data.refdatastore.length; j++) {\n                      if ($this.$data.refdatastore[j].attr == result[i].attr) {\n                        $this.$data.refdatastore[j].value = result[i].value;\n                      }\n                    }\n                  }\n                }\n              } else if (action.action_type == 'set_global_attr') {\n                $this.$actiontr = action.value || [];\n              } else if (action.action_type == 'open_common_dlg') {\n                //打开侧滑弹框\n                var $this = _this10;\n                if (action.value.common_dlg_id == 'check_list') {\n                  $this.$data.check_list = action.value.config;\n                  if (action.value.config.appear_style == 'sideslip')\n                    //判断是否是侧滑\n                    $this.$data.popupType = 'right';else $this.$data.popupType = 'center';\n                  // open 方法传入参数 等同在 uni-popup 组件上绑定 type属性\n                  $this.$refs.popup.open($this.$data.popupType);\n                }\n              } else if (action.action_type == 'add_subcls_panel') {\n                //主从数据类扫码查询数据\n                var result = action.value;\n                var $this = _this10;\n                var list_1 = JSON.parse(JSON.stringify(_this10.$data.subClassAttrList));\n                var scanCodeVal = $this.$data.scanCodeVal;\n                if (info.inputParamter[0].attr) {\n                  if (info.inputParamter[0].attr == \"mast_input_3037\")\n                    //判断是主数据类扫码查询数据\n                    scanCodeVal = \"mast_input_3037-\" + ii;\n                }\n                $this.$data.subPanelList.push({\n                  scanCodeVal: scanCodeVal,\n                  subClassAttr: list_1\n                });\n                for (var i = 0; i < result.length; i++) {\n                  for (var s = 0; s < $this.$data.subPanelList.length; s++) {\n                    if ($this.$data.subPanelList[s].scanCodeVal == scanCodeVal) {\n                      if (result[i].attr == \"S_ID\") $this.$data.subPanelList[s].ObjID = result[i].value;\n                      var _subClassAttr = $this.$data.subPanelList[s].subClassAttr;\n                      for (var c = 0; c < _subClassAttr.length; c++) {\n                        var attr = _subClassAttr[c].Attr;\n                        for (var j = 0; j < attr.length; j++) {\n                          // console.log(attr[j].Name+'=='+result[i].attr);\n                          if (attr[j].Name == result[i].attr) {\n                            attr[j].Value = result[i].value;\n                          }\n                        }\n                      }\n\n                      // $this.$data.subPanelList[s].subClassAttr=list_1;\n                    }\n                  }\n\n                  var length = 0;\n                  if (!$this.$data.refdatastore.filter(function (s) {\n                    return result[i].attr == s.attr;\n                  }).length) {\n                    length = 1;\n                    $this.$data.refdatastore.push(result[i]);\n                  }\n                  if (length == 0) {\n                    for (var j = 0; j < $this.$data.refdatastore.length; j++) {\n                      if ($this.$data.refdatastore[j].attr == result[i].attr) {\n                        $this.$data.refdatastore[j].value = result[i].value;\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          }\n          if (data.result) {\n            var _list_ = JSON.parse(JSON.stringify(_this10.$data.subClassAttrList));\n            var scanCodeVal = $this.$data.scanCodeVal;\n            if (info.inputParamter[0].attr == \"mast_input_3037\") scanCodeVal = \"mast_input_3037-\" + ii;\n            $this.$data.subPanelList.push({\n              scanCodeVal: scanCodeVal,\n              subClassAttr: _list_\n            });\n            var result = data.result;\n            for (var i = 0; i < result.length; i++) {\n              for (var s = 0; s < $this.$data.subPanelList.length; s++) {\n                if ($this.$data.subPanelList[s].scanCodeVal == scanCodeVal) {\n                  if (result[i].attr == \"S_ID\") $this.$data.subPanelList[s].ObjID = result[i].value;\n                  var _subClassAttr = $this.$data.subPanelList[s].subClassAttr;\n                  for (var c = 0; c < _subClassAttr.length; c++) {\n                    var attr = _subClassAttr[c].Attr;\n                    for (var j = 0; j < attr.length; j++) {\n                      // console.log(attr[j].Name+'=='+result[i].attr);\n                      if (attr[j].Name == result[i].attr) {\n                        attr[j].Value = result[i].value;\n                      }\n                    }\n                  }\n                }\n              }\n              var length = 0;\n              if (!$this.$data.refdatastore.filter(function (s) {\n                return result[i].attr == s.attr;\n              }).length) {\n                length = 1;\n                $this.$data.refdatastore.push(result[i]);\n              }\n              if (length == 0) {\n                for (var j = 0; j < $this.$data.refdatastore.length; j++) {\n                  if ($this.$data.refdatastore[j].attr == result[i].attr) {\n                    $this.$data.refdatastore[j].value = result[i].value;\n                  }\n                }\n              }\n            }\n          }\n        } else {\n          uni.showModal({\n            title: \"错误7\",\n            content: success.msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        // console.log(ex);\n        uni.showModal({\n          title: \"错误7.1\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\n    },\n    scan_OKDataObjRunCustomEvent: function scan_OKDataObjRunCustomEvent(eventID) {\n      uni.showLoading({\n        title: \"加载中...\",\n        mask: true\n      });\n      var $this = this;\n      var req = [];\n      var attrlist = $this.$data.classAttrList;\n      for (var i = 0; i < attrlist.length; i++) {\n        var attr = attrlist[i].Attr;\n        for (var j = 0; j < attr.length; j++) {\n          var ar = attr[j];\n          if (ar.Value == '请选择' || ar.Value == '——请选择——') ar.Value = '';\n          if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n          if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n            attr: ar.Name,\n            value: ar.ValID ? ar.ValID : ''\n          });else if (ar.Type == '布尔值') req.push({\n            attr: ar.Name,\n            value: ar.Value ? '1' : '0'\n          });else if (ar.Type == '字典' || ar.Type == '字典-字符串' || ar.Type == '字典-整数') {\n            if (ar.select == true) {\n              //判断下拉是否多选\n              var valStr = \"\";\n              for (var v in ar.Value) {\n                if (valStr) valStr += \";\";\n                valStr += ar.Value[v];\n              }\n              req.push({\n                attr: ar.Name,\n                value: valStr\n              });\n            } else req.push({\n              attr: ar.Name,\n              value: ar.Value\n            });\n          } else req.push({\n            attr: ar.Name,\n            value: ar.Value ? ar.Value : ''\n          });\n          if (ar.notempty == true && !ar.Value) {\n            // if(ar.NotEmpty=='1'){\n            uni.hideLoading();\n            // uni.showToast({title:ar.DispName+'不能为空!',icon:\"success\",duration:3000});\n            uni.showModal({\n              title: \"提示\",\n              content: ar.DispName + '不能为空!',\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n            return;\n          }\n        }\n      }\n      var objects = [];\n      var subPanelList = $this.$data.subPanelList;\n      for (var s = 0; s < subPanelList.length; s++) {\n        var sub_req = [];\n        for (var i = 0; i < subPanelList[s].subClassAttr.length; i++) {\n          var attr = subPanelList[s].subClassAttr[i].Attr;\n          for (var j = 0; j < attr.length; j++) {\n            var ar = attr[j];\n            if (ar.Value == '请选择' || ar.Value == '——请选择——') ar.Value = '';\n            if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n            if (ar.Type == '引用人员' || ar.Type == '引用项目') sub_req.push({\n              attr: ar.Name,\n              value: ar.ValID ? ar.ValID : ''\n            });else if (ar.Type == '布尔值') sub_req.push({\n              attr: ar.Name,\n              value: ar.Value ? '1' : '0'\n            });else if (ar.Type == '字典' || ar.Type == '字典-字符串' || ar.Type == '字典-整数') {\n              if (ar.select == true) {\n                //判断下拉是否多选\n                var valStr = \"\";\n                for (var v in ar.Value) {\n                  if (valStr) valStr += \";\";\n                  valStr += ar.Value[v];\n                }\n                sub_req.push({\n                  attr: ar.Name,\n                  value: valStr\n                });\n              } else sub_req.push({\n                attr: ar.Name,\n                value: ar.Value\n              });\n            } else sub_req.push({\n              attr: ar.Name,\n              value: ar.Value ? ar.Value : ''\n            });\n            if (ar.notempty == true && !ar.Value) {\n              // if(ar.NotEmpty=='1'){\n              uni.hideLoading();\n              // uni.showToast({title:ar.DispName+'不能为空!',icon:\"success\",duration:3000});\n              uni.showModal({\n                title: \"提示\",\n                content: ar.DispName + '不能为空!',\n                showCancel: false,\n                confirmText: \"取消\"\n              });\n              return;\n            }\n          }\n        }\n        objects.push({\n          obj_id: subPanelList[s].scanCodeVal,\n          obj_attrs: sub_req\n        });\n      }\n      var dataJson = {\n        master_cls: {\n          cls_name: 'MBOX',\n          //$this.$data.param.Master_Cls.Name,\n          obj_attrs: req\n        },\n        input_3037: $this.$data.scanCodeVal,\n        //扫码内容\n        op_type: $this.$data.param.OperationType,\n        //作业类型定义\n        sub_cls: {\n          cls_name: 'MBOX',\n          //$this.$data.param.Sub_Cls.Name,\n          objects: objects\n        }\n      };\n      // console.log(JSON.stringify(dataJson));\n      var dataInfo = {\n        edtype: \"7\",\n        eventid: eventID,\n        projectid: '',\n        rclsid: '',\n        robjid: '',\n        userlogin: '',\n        clsid: 'MBOX',\n        objid: '',\n        attr: JSON.stringify([]),\n        extinfo: JSON.stringify([]),\n        global_attr: JSON.stringify($this.$data.global_attr),\n        dataJson: JSON.stringify(dataJson)\n      };\n      // console.log(JSON.stringify(dataInfo));\n      __f__(\"log\", dataInfo, \" at pages/modal/ms_classAttr.vue:3015\");\n      this.$store.dispatch('DataObjRunCustomEventInfo', dataInfo).then(function (success) {\n        __f__(\"log\", success, \" at pages/modal/ms_classAttr.vue:3017\");\n        uni.hideLoading();\n        if (success.code == '00000') {\n          var data = JSON.parse(success.data);\n          var result = data.result;\n          if (eventID != $this.$data.param.After_OK_Event.ID) $this.scan_OKDataObjRunCustomEvent($this.$data.param.After_OK_Event.ID);else {\n            //刷新\n            uni.redirectTo({\n              url: '../modal/ms_classAttr?param=' + JSON.stringify($this.$data.param) + \"&titlename=\" + $this.$data.title\n            });\n          }\n        } else {\n          uni.showModal({\n            title: \"错误8\",\n            content: success.msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        // console.log(ex);\n        uni.hideLoading();\n        uni.showModal({\n          title: \"错误8.1\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vcGFnZXMvbW9kYWwvbXNfY2xhc3NBdHRyLnZ1ZSJdLCJuYW1lcyI6WyJjb21wb25lbnRzIiwicGlja2VyQWRkcmVzcyIsImRhdGEiLCJ0aXRsZSIsInBhcmFtIiwiY2xhc3NBdHRyTGlzdCIsImNsYXNzR3JpZFN0eWxlIiwiZWRpdF9pbml0YWxfZXZlbnQiLCJlZGl0X29rX2V2ZW50IiwiZWRpdF9zZWxlY3RfY29tcG9zZV9ldmVudCIsImVkaXRfY29tcG9zZV9jbHNfaWQiLCJnbG9iYWxfYXR0ciIsInJlZmRhdGFzdG9yZSIsInNjYW5Db2RlVmFsIiwic3ViQ2xhc3NBdHRyTGlzdCIsInN1YlBhbmVsTGlzdCIsInN1YkNsYXNzR3JpZFN0eWxlIiwicG9wdXBUeXBlIiwiY2hlY2tfbGlzdCIsIm9uTG9hZCIsIm9wdGlvbnMiLCJ1bmkiLCJzZXROYXZpZ2F0aW9uQmFyVGl0bGUiLCJ0aXRsZW5hbWUiLCJKU09OIiwicGFyc2UiLCIkZGF0YSIsIkFkZF9CdG5OYW1lIiwiTWFzdGVyX0NscyIsIlZpZXdfU3R5bGUiLCJzaG93TW9kYWwiLCJjb250ZW50Iiwic2hvd0NhbmNlbCIsImNvbmZpcm1UZXh0IiwiTmFtZSIsImRhdGFJbmZvIiwiY2xhc3NfaWQiLCJJRCIsIiR0aGlzIiwiJHN0b3JlIiwic3RhdGUiLCJ0aGlzYXJlYUZ1bmNJRCIsImdldHRlcnMiLCJnZXRjbGFzc0F0dHJMaXN0IiwiY2xhc3NHcmlkU3R5bGVJbmZvIiwiZGlzcGF0Y2giLCJ0aGVuIiwic3VjY2VzcyIsImNvZGUiLCJtc2ciLCJjYXRjaCIsImV4IiwiZXJyTXNnIiwic3ViZGF0YUluZm8iLCJTdWJfQ2xzIiwidGhpc2FyZWFGdW5jU3ViSUQiLCJnZXRTdWJDbGFzc0F0dHJMaXN0IiwibWV0aG9kcyIsInNjYW5fY2xhc3NBdHRyX2V4dEJ1dHRvbiIsImUiLCJCZWZvcmVfU2VsZWN0X0V2ZW50IiwiU2Nhbl9Db2RlIiwibWFzdF9hdHRyIiwiYXR0cmxpc3QiLCJpIiwibGVuZ3RoIiwiYXR0ciIsIkF0dHIiLCJqIiwiYXIiLCJWYWx1ZSIsIkRpc3BOYW1lIiwiVHlwZSIsInB1c2giLCJ2YWx1ZSIsIlZhbElEIiwicmVxIiwiaW5mbyIsImV2ZW50aWQiLCJlZHR5cGUiLCJwcm9qZWN0aWQiLCJyY2xzaWQiLCJyb2JqaWQiLCJ1c2VybG9naW4iLCJjbHNpZCIsIm9iamlkIiwiaW5wdXRQYXJhbXRlciIsInNjYW5fRGF0YU9ialJ1bkN1c3RvbUV2ZW50IiwicG9wdXBDaGFuZ2UiLCJ0eXBlIiwic2hvdyIsImNoZWNrQ2hhbmdlIiwiaW5kZXgiLCJ0YXJnZXQiLCJkYXRhc2V0IiwiaXNjaGVjayIsIml0ZW1zIiwibXVsdGlwbGVfY2hvaWNlIiwiY2hlY2siLCJwb3B1cF9jYW5jZWwiLCIkcmVmcyIsInBvcHVwIiwiY2xvc2UiLCJwb3B1cF9zYXZhIiwiQWZ0ZXJfU2VsZWN0X0V2ZW50IiwibmFtZSIsImlkIiwiZW52aXJvbWVudCIsImNhbmNlbCIsIm5hdmlnYXRlQmFjayIsImRlbHRhIiwicGFuZWxfZGVsIiwiT2JqSUQiLCJzcGxpY2UiLCJjbHNJZCIsIm9iaklkIiwic2hvd0xvYWRpbmciLCJoaWRlTG9hZGluZyIsInN0eWxlTmFtZSIsImNsc1R5cGUiLCJncmlkc3R5bGVJbmZvIiwidGhpc0VkaXROYW1lIiwiZ2V0Y2xhc3NHcmlkU3R5bGVJbmZvIiwiY2xhc3NfYXR0cl9pbml0IiwiU3R5bGVEZWYiLCJ0aGlzRWRpdFN1Yk5hbWUiLCJnZXRTdWJDbGFzc0dyaWRTdHlsZUluZm8iLCJzdWJDbGFzc19hdHRyX2luaXQiLCJvbnRhcCIsImdldEFwcCIsIm9uU2NhbiIsInJlc3VsdCIsImlzVmFsIiwiZGVjb2RlZGF0YSIsImhpZGVLZXlib2FyZCIsIklucHV0X0NoYW5nZV9FdmVudCIsInN1Ym9udGFwIiwic2Nhbl9vbnRhcCIsImlzZmxhZyIsIm1hc3RfcmVxIiwiY2xhc3NhdHRybGlzdCIsInNjYW5fb25ldmVudCIsIm9uYXJyb3ciLCJvcGVuIiwiZGF0YV9hdHRyIiwiT3BlbiIsInN1YkNsYXNzQXR0ciIsIm9uZGF0ZVRpbWUiLCJvbmNoYW5nZSIsImRpY3RpdGVtIiwiYWN0aW9uIiwidmFsIiwiRGF0YU9ialJ1bkN1c3RvbUV2ZW50Iiwib25jaGFuZ2UyIiwiaXRlbSIsImRlbHZhbHVlIiwiaWluZGV4IiwiZGluZGV4IiwidiIsIml0ZW12YWx1ZSIsInN1Yl9vbmNoYW5nZSIsInN1Yl9vbmNoYW5nZTIiLCJkIiwib25ldmVudCIsIm9uY2hlY2siLCJpc2NoZWNrZWQiLCJpbnB1dFZhbExpc3RJc0RlbCIsImlucHV0VmFsTGlzdCIsImFkZHJlc3NjaGFuZ2UiLCJqb2luIiwiY2xhc3NBdHRyX2V4dEJ1dHRvbiIsImJlZm9yZV9jbGlja19idXR0b24iLCJidXR0b25fY2FsbGJhY2siLCJEYXRhT2JqUnVuQ3VzdG9tRXZlbnRfUmV0dXJuIiwiY2xhc3NBdHRyX0FkZFBlciIsIm5hdmlnYXRlVG8iLCJ1cmwiLCJzdHJpbmdpZnkiLCJldmVudHMiLCJBZGRQZXIiLCJMb2dpbiIsInRyaW0iLCJjbGFzc0F0dHJfQWRkUmVmIiwiY2xhc3NBdHRyX0FkZFByaiIsInNhdmEiLCJCZWZvcmVfT0tfRXZlbnQiLCJzY2FuX09LRGF0YU9ialJ1bkN1c3RvbUV2ZW50IiwiQWZ0ZXJfT0tfRXZlbnQiLCJhZGQiLCJtYXNrIiwic2VsZWN0IiwidmFsU3RyIiwibm90ZW1wdHkiLCJjbHNfaWQiLCJidXR0b25fbmFtZSIsIm1hc3RlciIsImRhdGFfb2JqX2lkIiwibWFzdGVyY2xzaWQiLCJ1cGZpbGUiLCJwb3N0X2RhdGEiLCJjb21wb3NlIiwiZXh0aW5mbyIsIm5vdF90cmlnZ2VyX3N5c19ldmVudCIsIkFjdGlvbiIsInJldCIsInJlc3VsdF90eXBlIiwic2hvd1RvYXN0IiwiaWNvbiIsImR1cmF0aW9uIiwicmVkaXJlY3RUbyIsInNob3dfc3R5bGUiLCJuZXdhdHRybGlzdCIsImF0dHJncm91cF9uYW1lIiwiYXR0cnMiLCJzIiwiY2xzYXR0ciIsImwiLCJjYSIsImVkaXQiLCJleHRfYnV0dG9uIiwiYnV0dG9uX2ltZyIsImJ1dHRvbl90b29sdGlwIiwiaGlkZGVuIiwidW5kZWZpbmVkIiwiZGljdGl0ZW1saXN0IiwibGFiZWwiLCJDTl9TX05BTUUiLCJDTl9DX0lTX0RFRkFVTFQiLCJub3dEYXRlIiwiRGF0ZSIsImRhdGUiLCJ5ZWFyIiwiZ2V0RnVsbFllYXIiLCJtb250aCIsImdldE1vbnRoIiwiZGF5IiwiZ2V0RGF0ZSIsInJlbENsc0xpc3QiLCJhdHRyX3Jlc2NscyIsIlJlbENscyIsInNwbGl0IiwiaWkiLCJyZXNjbHMiLCJSZWxDbHNMaXN0IiwiQmtDb2xvciIsIkhhc0FjZSIsIkltZ0ZvbnRTdHlsZSIsIk9yZGVyIiwiY29udHJvbF9zdHlsZSIsInRpdGxlX3Bfd2RpdGgiLCJGb250IiwiQmtfQ29sb3IiLCJUZXh0X0NvbG9yIiwiZXZlbnRsaXN0IiwiZXZlbnQiLCJldmVudF9pZCIsInNjcmlwX2lkIiwiY29tcG9zZV9jbHNfaWQiLCJpbmlfRGF0YU9ialJ1bkN1c3RvbUV2ZW50Iiwic2Nhbl9pbmlfRGF0YU9ialJ1bkN1c3RvbUV2ZW50IiwiRWRpdFN0eWxlIiwiVmlld1N0eWxlIiwiTm90VHJpZ2dlclN5c0V2ZW50IiwiaW5wdXRwYXJhbWV0ZXIiLCJhY3Rpb25saXN0IiwiYWN0aW9uX3R5cGUiLCJhIiwiZGljdEl0ZW1MaXN0IiwiY2hvaWNlX2xpc3QiLCJmaWx0ZXIiLCJlZGl0X2RsZyIsImZvcm1fY29udHJvbCIsInRleHQiLCJncm91cF9uYW1lIiwiR3JvdXBOYW1lIiwicmVhZG9ubHkiLCJSZWFkT25seSIsInJlcGxhY2UiLCJjIiwiT0tEYXRhT2JqUnVuQ3VzdG9tRXZlbnQiLCJhY3Rpb25zIiwiZGlhbG9nIiwic3R5bGUiLCJjYWxsYmFja19ldmVudGlkIiwicHJpUmVsIiwic2VsZWN0X3JhbmdlIiwicGFyYW1fIiwiJGFjdGlvbnRyIiwiY29tbW9uX2RsZ19pZCIsImNvbmZpZyIsImFwcGVhcl9zdHlsZSIsImxpc3RfMSIsIl9zdWJDbGFzc0F0dHIiLCJldmVudElEIiwib2JqZWN0cyIsInN1Yl9yZXEiLCJvYmpfaWQiLCJvYmpfYXR0cnMiLCJkYXRhSnNvbiIsIm1hc3Rlcl9jbHMiLCJjbHNfbmFtZSIsImlucHV0XzMwMzciLCJvcF90eXBlIiwiT3BlcmF0aW9uVHlwZSIsInN1Yl9jbHMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQTZyQkM7QUE3ckJEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUEsZUFHZ0I7RUFDZEEsVUFBVSxFQUFFO0lBQ0ZDLGFBQWEsRUFBYkE7RUFDSixDQUFDO0VBQ1BDLElBQUksa0JBQUc7SUFDTixPQUFPO01BQ05DLEtBQUssRUFBRSxJQUFJO01BQ1hDLEtBQUssRUFBQyxDQUFDLENBQUM7TUFDUkMsYUFBYSxFQUFDLEVBQUU7TUFDaEJDLGNBQWMsRUFBQyxFQUFFO01BQ2pCQyxpQkFBaUIsRUFBQyxFQUFFO01BQUc7TUFDdkJDLGFBQWEsRUFBQyxFQUFFO01BQU87TUFDdkJDLHlCQUF5QixFQUFDLEVBQUU7TUFBRztNQUMvQkMsbUJBQW1CLEVBQUMsRUFBRTtNQUN0QkMsV0FBVyxFQUFDLEVBQUU7TUFDZEMsWUFBWSxFQUFFLEVBQUU7TUFBSztNQUNyQkMsV0FBVyxFQUFDLEVBQUU7TUFDZEMsZ0JBQWdCLEVBQUMsRUFBRTtNQUNuQkMsWUFBWSxFQUFDLEVBQUU7TUFDZkMsaUJBQWlCLEVBQUMsRUFBRTtNQUNwQkMsU0FBUyxFQUFDLFFBQVE7TUFDbEJDLFVBQVUsRUFBQyxDQUFDO0lBQ2IsQ0FBQztFQUNGLENBQUM7RUFDREMsTUFBTSxrQkFBQ0MsT0FBTyxFQUFFO0lBQ2Y7SUFDQUMsR0FBRyxDQUFDQyxxQkFBcUIsQ0FBQztNQUFFbkIsS0FBSyxFQUFFaUIsT0FBTyxDQUFDRztJQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEQsSUFBSW5CLEtBQUssR0FBR29CLElBQUksQ0FBQ0MsS0FBSyxDQUFDTCxPQUFPLENBQUNoQixLQUFLLENBQUM7SUFDckMsSUFBSSxDQUFDc0IsS0FBSyxDQUFDdkIsS0FBSyxHQUFHQyxLQUFLLENBQUN1QixXQUFXLEdBQUN2QixLQUFLLENBQUN1QixXQUFXLEdBQUNQLE9BQU8sQ0FBQ0csU0FBUyxDQUFDLENBQUM7SUFDMUUsYUFBWW5CLEtBQUs7SUFDakIsSUFBRyxDQUFDQSxLQUFLLENBQUN3QixVQUFVLENBQUNDLFVBQVUsRUFBQztNQUMvQlIsR0FBRyxDQUFDUyxTQUFTLENBQUM7UUFBQzNCLEtBQUssRUFBQyxJQUFJO1FBQUM0QixPQUFPLEVBQUMsb0JBQW9CO1FBQUNDLFVBQVUsRUFBQyxLQUFLO1FBQUNDLFdBQVcsRUFBQztNQUFJLENBQUMsQ0FBQztNQUMxRjtJQUNEO0lBQ0EsSUFBRyxDQUFDN0IsS0FBSyxDQUFDd0IsVUFBVSxDQUFDQyxVQUFVLENBQUNLLElBQUksRUFBQztNQUNwQ2IsR0FBRyxDQUFDUyxTQUFTLENBQUM7UUFBQzNCLEtBQUssRUFBQyxJQUFJO1FBQUM0QixPQUFPLEVBQUMsb0JBQW9CO1FBQUNDLFVBQVUsRUFBQyxLQUFLO1FBQUNDLFdBQVcsRUFBQztNQUFJLENBQUMsQ0FBQztNQUMxRjtJQUNEO0lBQ0EsSUFBSSxDQUFDUCxLQUFLLENBQUN0QixLQUFLLEdBQUdBLEtBQUs7SUFDeEI7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBLElBQUkrQixRQUFRLEdBQUc7TUFDZEMsUUFBUSxFQUFFaEMsS0FBSyxDQUFDd0IsVUFBVSxDQUFDUztJQUM1QixDQUFDO0lBQ0QsSUFBSUMsS0FBSyxHQUFHLElBQUk7SUFDaEJBLEtBQUssQ0FBQ0MsTUFBTSxDQUFDQyxLQUFLLENBQUNDLGNBQWMsR0FBR3JDLEtBQUssQ0FBQ3dCLFVBQVUsQ0FBQ1MsRUFBRTtJQUN2RDtJQUNBLElBQUdDLEtBQUssQ0FBQ0MsTUFBTSxDQUFDRyxPQUFPLENBQUNDLGdCQUFnQixFQUFDO01BQ3ZDTCxLQUFLLENBQUNaLEtBQUssQ0FBQ3JCLGFBQWEsR0FBR2lDLEtBQUssQ0FBQ0MsTUFBTSxDQUFDRyxPQUFPLENBQUNDLGdCQUFnQixDQUFDekMsSUFBSTtNQUN2RW9DLEtBQUssQ0FBQ00sa0JBQWtCLENBQUN4QyxLQUFLLENBQUN3QixVQUFVLENBQUNTLEVBQUUsRUFBQ0MsS0FBSyxDQUFDWixLQUFLLENBQUN0QixLQUFLLENBQUN3QixVQUFVLENBQUNDLFVBQVUsQ0FBQ0ssSUFBSSxFQUFDLE1BQU0sQ0FBQztJQUNsRyxDQUFDLE1BQUk7TUFDSkksS0FBSyxDQUFDQyxNQUFNLENBQUNNLFFBQVEsQ0FBQyxlQUFlLEVBQUNWLFFBQVEsQ0FBQyxDQUFDVyxJQUFJLENBQUMsVUFBQUMsT0FBTyxFQUFFO1FBQzdEO1FBQ0EsSUFBSUEsT0FBTyxDQUFDQyxJQUFJLElBQUUsT0FBTyxFQUFFO1VBQzFCVixLQUFLLENBQUNaLEtBQUssQ0FBQ3JCLGFBQWEsR0FBRzBDLE9BQU8sQ0FBQzdDLElBQUk7VUFFeENvQyxLQUFLLENBQUNNLGtCQUFrQixDQUFDeEMsS0FBSyxDQUFDd0IsVUFBVSxDQUFDUyxFQUFFLEVBQUNDLEtBQUssQ0FBQ1osS0FBSyxDQUFDdEIsS0FBSyxDQUFDd0IsVUFBVSxDQUFDQyxVQUFVLENBQUNLLElBQUksRUFBQyxNQUFNLENBQUM7UUFDbEcsQ0FBQyxNQUFJO1VBQ0piLEdBQUcsQ0FBQ1MsU0FBUyxDQUFDO1lBQUMzQixLQUFLLEVBQUMsS0FBSztZQUFDNEIsT0FBTyxFQUFDZ0IsT0FBTyxDQUFDRSxHQUFHO1lBQUNqQixVQUFVLEVBQUMsS0FBSztZQUFDQyxXQUFXLEVBQUM7VUFBSSxDQUFDLENBQUM7UUFDbkY7TUFDRCxDQUFDLENBQUMsQ0FBQ2lCLEtBQUssQ0FBQyxVQUFBQyxFQUFFLEVBQUU7UUFDWjtRQUNBOUIsR0FBRyxDQUFDUyxTQUFTLENBQUM7VUFBQzNCLEtBQUssRUFBQyxPQUFPO1VBQUM0QixPQUFPLEVBQUNvQixFQUFFLENBQUNDLE1BQU07VUFBQ3BCLFVBQVUsRUFBQyxLQUFLO1VBQUNDLFdBQVcsRUFBQztRQUFJLENBQUMsQ0FBQztNQUNuRixDQUFDLENBQUM7SUFDSDs7SUFFQTtJQUNBLElBQUlvQixXQUFXLEdBQUc7TUFDakJqQixRQUFRLEVBQUVoQyxLQUFLLENBQUNrRCxPQUFPLENBQUNqQjtJQUN6QixDQUFDO0lBQ0RDLEtBQUssQ0FBQ0MsTUFBTSxDQUFDQyxLQUFLLENBQUNlLGlCQUFpQixHQUFHbkQsS0FBSyxDQUFDa0QsT0FBTyxDQUFDakIsRUFBRTtJQUN2RCxJQUFHQyxLQUFLLENBQUNDLE1BQU0sQ0FBQ0csT0FBTyxDQUFDYyxtQkFBbUIsRUFBQztNQUMxQ2xCLEtBQUssQ0FBQ1osS0FBSyxDQUFDWixnQkFBZ0IsR0FBR3dCLEtBQUssQ0FBQ0MsTUFBTSxDQUFDRyxPQUFPLENBQUNjLG1CQUFtQixDQUFDdEQsSUFBSTtNQUMzRW9DLEtBQUssQ0FBQ00sa0JBQWtCLENBQUN4QyxLQUFLLENBQUNrRCxPQUFPLENBQUNqQixFQUFFLEVBQUNDLEtBQUssQ0FBQ1osS0FBSyxDQUFDdEIsS0FBSyxDQUFDa0QsT0FBTyxDQUFDekIsVUFBVSxDQUFDSyxJQUFJLEVBQUMsS0FBSyxDQUFDO0lBQzdGLENBQUMsTUFBSTtNQUNKSSxLQUFLLENBQUNDLE1BQU0sQ0FBQ00sUUFBUSxDQUFDLGtCQUFrQixFQUFDUSxXQUFXLENBQUMsQ0FBQ1AsSUFBSSxDQUFDLFVBQUFDLE9BQU8sRUFBRTtRQUNuRTtRQUNBLElBQUlBLE9BQU8sQ0FBQ0MsSUFBSSxJQUFFLE9BQU8sRUFBRTtVQUMxQlYsS0FBSyxDQUFDWixLQUFLLENBQUNaLGdCQUFnQixHQUFHaUMsT0FBTyxDQUFDN0MsSUFBSTtVQUUzQ29DLEtBQUssQ0FBQ00sa0JBQWtCLENBQUN4QyxLQUFLLENBQUNrRCxPQUFPLENBQUNqQixFQUFFLEVBQUNDLEtBQUssQ0FBQ1osS0FBSyxDQUFDdEIsS0FBSyxDQUFDa0QsT0FBTyxDQUFDekIsVUFBVSxDQUFDSyxJQUFJLEVBQUMsS0FBSyxDQUFDO1FBQzNGLENBQUMsTUFBSTtVQUNKYixHQUFHLENBQUNTLFNBQVMsQ0FBQztZQUFDM0IsS0FBSyxFQUFDLE9BQU87WUFBQzRCLE9BQU8sRUFBQ2dCLE9BQU8sQ0FBQ0UsR0FBRztZQUFDakIsVUFBVSxFQUFDLEtBQUs7WUFBQ0MsV0FBVyxFQUFDO1VBQUksQ0FBQyxDQUFDO1FBQ3JGO01BQ0QsQ0FBQyxDQUFDLENBQUNpQixLQUFLLENBQUMsVUFBQUMsRUFBRSxFQUFFO1FBQ1o7UUFDQTlCLEdBQUcsQ0FBQ1MsU0FBUyxDQUFDO1VBQUMzQixLQUFLLEVBQUMsU0FBUztVQUFDNEIsT0FBTyxFQUFDb0IsRUFBRSxDQUFDQyxNQUFNO1VBQUNwQixVQUFVLEVBQUMsS0FBSztVQUFDQyxXQUFXLEVBQUM7UUFBSSxDQUFDLENBQUM7TUFDckYsQ0FBQyxDQUFDO0lBQ0g7RUFDRCxDQUFDO0VBQ0R3QixPQUFPLEVBQUU7SUFDUkMsd0JBQXdCLG9DQUFDQyxDQUFDLEVBQUM7TUFBRTtNQUM1QixJQUFJckIsS0FBSyxHQUFHLElBQUk7TUFDaEIsSUFBSXNCLG1CQUFtQixHQUFHdEIsS0FBSyxDQUFDWixLQUFLLENBQUN0QixLQUFLLENBQUN5RCxTQUFTLENBQUNELG1CQUFtQjtNQUN6RSxJQUFHLENBQUNBLG1CQUFtQixFQUFDO1FBQ3ZCdkMsR0FBRyxDQUFDUyxTQUFTLENBQUM7VUFBQzNCLEtBQUssRUFBQyxJQUFJO1VBQUM0QixPQUFPLEVBQUMsVUFBVTtVQUFDQyxVQUFVLEVBQUMsS0FBSztVQUFDQyxXQUFXLEVBQUM7UUFBSSxDQUFDLENBQUM7UUFDaEY7TUFDRDtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBLElBQUk2QixTQUFTLEdBQUMsRUFBRTtNQUNoQixJQUFJQyxRQUFRLEdBQUcsSUFBSSxDQUFDckMsS0FBSyxDQUFDckIsYUFBYTtNQUN2QyxLQUFLLElBQUkyRCxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUdELFFBQVEsQ0FBQ0UsTUFBTSxFQUFFRCxDQUFDLEVBQUUsRUFBRTtRQUN6QyxJQUFJRSxJQUFJLEdBQUdILFFBQVEsQ0FBQ0MsQ0FBQyxDQUFDLENBQUNHLElBQUk7UUFDM0IsS0FBSyxJQUFJQyxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUdGLElBQUksQ0FBQ0QsTUFBTSxFQUFFRyxDQUFDLEVBQUUsRUFBRTtVQUNyQyxJQUFJQyxFQUFFLEdBQUdILElBQUksQ0FBQ0UsQ0FBQyxDQUFDO1VBQ2hCLElBQUdDLEVBQUUsQ0FBQ0MsS0FBSyxJQUFFLEtBQUssRUFBQztZQUNsQmpELEdBQUcsQ0FBQ1MsU0FBUyxDQUFDO2NBQUMzQixLQUFLLEVBQUMsSUFBSTtjQUFDNEIsT0FBTyxFQUFDc0MsRUFBRSxDQUFDRSxRQUFRLEdBQUMsUUFBUTtjQUFDdkMsVUFBVSxFQUFDLEtBQUs7Y0FBQ0MsV0FBVyxFQUFDO1lBQUksQ0FBQyxDQUFDO1lBQzFGO1VBQ0Q7VUFDQSxJQUFHb0MsRUFBRSxDQUFDRyxJQUFJLElBQUUsVUFBVSxFQUNyQixJQUFHSCxFQUFFLENBQUNDLEtBQUssSUFBRSxHQUFHLEVBQUVELEVBQUUsQ0FBQ0MsS0FBSyxHQUFDLEVBQUU7VUFDOUIsSUFBR0QsRUFBRSxDQUFDRyxJQUFJLElBQUUsTUFBTSxJQUFJSCxFQUFFLENBQUNHLElBQUksSUFBRSxNQUFNLEVBQ3BDVixTQUFTLENBQUNXLElBQUksQ0FBQztZQUFFUCxJQUFJLEVBQUVHLEVBQUUsQ0FBQ25DLElBQUk7WUFBRXdDLEtBQUssRUFBRUwsRUFBRSxDQUFDTSxLQUFLLEdBQUVOLEVBQUUsQ0FBQ00sS0FBSyxHQUFFO1VBQUcsQ0FBQyxDQUFDLENBQUMsS0FDN0QsSUFBR04sRUFBRSxDQUFDRyxJQUFJLElBQUUsS0FBSyxFQUNyQlYsU0FBUyxDQUFDVyxJQUFJLENBQUM7WUFBRVAsSUFBSSxFQUFFRyxFQUFFLENBQUNuQyxJQUFJO1lBQUV3QyxLQUFLLEVBQUVMLEVBQUUsQ0FBQ0MsS0FBSyxHQUFDLEdBQUcsR0FBQztVQUFHLENBQUMsQ0FBQyxDQUFDLEtBRTFEUixTQUFTLENBQUNXLElBQUksQ0FBQztZQUFFUCxJQUFJLEVBQUVHLEVBQUUsQ0FBQ25DLElBQUk7WUFBRXdDLEtBQUssRUFBRUwsRUFBRSxDQUFDQyxLQUFLLEdBQUVELEVBQUUsQ0FBQ0MsS0FBSyxHQUFFO1VBQUUsQ0FBQyxDQUFDO1FBQ2pFO01BQ0Q7TUFFQSxJQUFJTSxHQUFHLEdBQUMsRUFBRTtNQUNWLElBQUliLFFBQVEsR0FBRyxJQUFJLENBQUNyQyxLQUFLLENBQUNaLGdCQUFnQjtNQUMxQyxJQUFJbUMsR0FBRyxHQUFDLEVBQUU7TUFDVixLQUFLLElBQUllLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBR0QsUUFBUSxDQUFDRSxNQUFNLEVBQUVELENBQUMsRUFBRSxFQUFFO1FBQ3pDLElBQUlFLElBQUksR0FBR0gsUUFBUSxDQUFDQyxDQUFDLENBQUMsQ0FBQ0csSUFBSTtRQUMzQixLQUFLLElBQUlDLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBR0YsSUFBSSxDQUFDRCxNQUFNLEVBQUVHLENBQUMsRUFBRSxFQUFFO1VBQ3JDLElBQUlDLEVBQUUsR0FBR0gsSUFBSSxDQUFDRSxDQUFDLENBQUM7VUFDaEIsSUFBR0MsRUFBRSxDQUFDRyxJQUFJLElBQUUsVUFBVSxFQUNyQixJQUFHSCxFQUFFLENBQUNDLEtBQUssSUFBRSxHQUFHLEVBQUVELEVBQUUsQ0FBQ0MsS0FBSyxHQUFDLEVBQUU7VUFDOUIsSUFBR0QsRUFBRSxDQUFDRyxJQUFJLElBQUUsTUFBTSxJQUFJSCxFQUFFLENBQUNHLElBQUksSUFBRSxNQUFNLEVBQ3BDSSxHQUFHLENBQUNILElBQUksQ0FBQztZQUFFUCxJQUFJLEVBQUVHLEVBQUUsQ0FBQ25DLElBQUk7WUFBRXdDLEtBQUssRUFBRUwsRUFBRSxDQUFDTSxLQUFLLEdBQUVOLEVBQUUsQ0FBQ00sS0FBSyxHQUFFO1VBQUcsQ0FBQyxDQUFDLENBQUMsS0FDdkQsSUFBR04sRUFBRSxDQUFDRyxJQUFJLElBQUUsS0FBSyxFQUNyQkksR0FBRyxDQUFDSCxJQUFJLENBQUM7WUFBRVAsSUFBSSxFQUFFRyxFQUFFLENBQUNuQyxJQUFJO1lBQUV3QyxLQUFLLEVBQUVMLEVBQUUsQ0FBQ0MsS0FBSyxHQUFDLEdBQUcsR0FBQztVQUFHLENBQUMsQ0FBQyxDQUFDLEtBRXBETSxHQUFHLENBQUNILElBQUksQ0FBQztZQUFFUCxJQUFJLEVBQUVHLEVBQUUsQ0FBQ25DLElBQUk7WUFBRXdDLEtBQUssRUFBRUwsRUFBRSxDQUFDQyxLQUFLLEdBQUVELEVBQUUsQ0FBQ0MsS0FBSyxHQUFFO1VBQUUsQ0FBQyxDQUFDO1FBQzNEO01BQ0Q7TUFFQSxJQUFJTyxJQUFJLEdBQUc7UUFDUEMsT0FBTyxFQUFFbEIsbUJBQW1CLENBQUN2QixFQUFFO1FBQy9CMEMsTUFBTSxFQUFFLEdBQUc7UUFBQztRQUNaQyxTQUFTLEVBQUUsRUFBRTtRQUNiQyxNQUFNLEVBQUUsRUFBRTtRQUNWQyxNQUFNLEVBQUUsRUFBRTtRQUNWQyxTQUFTLEVBQUUsRUFBRTtRQUNiQyxLQUFLLEVBQUUsTUFBTTtRQUFDO1FBQ2RDLEtBQUssRUFBRSxFQUFFO1FBQ1RuQixJQUFJLEVBQUVVLEdBQUc7UUFDWmQsU0FBUyxFQUFFQSxTQUFTO1FBQ3BCd0IsYUFBYSxFQUFFeEI7TUFDaEIsQ0FBQztNQUNEO01BQ0EsSUFBSSxDQUFDeUIsMEJBQTBCLENBQUNWLElBQUksRUFBRSxFQUFFLENBQUM7SUFDMUMsQ0FBQztJQUNEVyxXQUFXLHVCQUFDN0IsQ0FBQyxFQUFFO01BQ2QsYUFBWSxPQUFPLEdBQUdBLENBQUMsQ0FBQzhCLElBQUksR0FBRyxNQUFNLEdBQUc5QixDQUFDLENBQUMrQixJQUFJO0lBQy9DLENBQUM7SUFDREMsV0FBVyx1QkFBQ2hDLENBQUMsRUFBQztNQUFFO01BQ2Y7TUFDQSxJQUFJaUMsS0FBSyxHQUFHakMsQ0FBQyxDQUFDa0MsTUFBTSxDQUFDQyxPQUFPLENBQUNGLEtBQUs7TUFDbEMsSUFBSUcsT0FBTyxHQUFHcEMsQ0FBQyxDQUFDa0MsTUFBTSxDQUFDQyxPQUFPLENBQUNDLE9BQU87TUFDdEMsSUFBSTdGLElBQUksR0FBRyxJQUFJLENBQUN3QixLQUFLLENBQUNSLFVBQVUsQ0FBQzhFLEtBQUs7TUFDdEM7TUFDQSxJQUFHLElBQUksQ0FBQ3RFLEtBQUssQ0FBQ1IsVUFBVSxDQUFDK0UsZUFBZSxJQUFFLEdBQUcsRUFBQztRQUFFO1FBQy9DLEtBQUksSUFBSWpDLENBQUMsSUFBSTlELElBQUksRUFBQztVQUNqQkEsSUFBSSxDQUFDOEQsQ0FBQyxDQUFDLENBQUNrQyxLQUFLLEdBQUMsS0FBSztRQUNwQjtNQUNEO01BQ0FoRyxJQUFJLENBQUMwRixLQUFLLENBQUMsQ0FBQ00sS0FBSyxHQUFDSCxPQUFPLEdBQUMsS0FBSyxHQUFDLElBQUk7TUFDcEMsSUFBSSxDQUFDckUsS0FBSyxDQUFDUixVQUFVLENBQUM4RSxLQUFLLEdBQUM5RixJQUFJO0lBRWpDLENBQUM7SUFDRGlHLFlBQVksd0JBQUN4QyxDQUFDLEVBQUM7TUFBRTtNQUNoQixJQUFJLENBQUN5QyxLQUFLLENBQUNDLEtBQUssQ0FBQ0MsS0FBSyxFQUFFO0lBQ3pCLENBQUM7SUFDREMsVUFBVSxzQkFBQzVDLENBQUMsRUFBQztNQUFFO01BQ2QsSUFBSXJCLEtBQUssR0FBRyxJQUFJO01BQ2hCLElBQUlrRSxrQkFBa0IsR0FBR2xFLEtBQUssQ0FBQ1osS0FBSyxDQUFDdEIsS0FBSyxDQUFDeUQsU0FBUyxDQUFDMkMsa0JBQWtCO01BQ3ZFLElBQUcsQ0FBQ0Esa0JBQWtCLEVBQUM7UUFDdEJuRixHQUFHLENBQUNTLFNBQVMsQ0FBQztVQUFDM0IsS0FBSyxFQUFDLElBQUk7VUFBQzRCLE9BQU8sRUFBQyxVQUFVO1VBQUNDLFVBQVUsRUFBQyxLQUFLO1VBQUNDLFdBQVcsRUFBQztRQUFJLENBQUMsQ0FBQztRQUNoRjtNQUNEO01BQ0EsSUFBSStELEtBQUssR0FBRzFELEtBQUssQ0FBQ1osS0FBSyxDQUFDUixVQUFVLENBQUM4RSxLQUFLO01BQ3hDLElBQUk5RixJQUFJLEdBQUMsRUFBRTtNQUNYLElBQUl1RyxJQUFJLEdBQUMsRUFBRTtNQUNYLEtBQUssSUFBSXpDLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBR2dDLEtBQUssQ0FBQy9CLE1BQU0sRUFBRUQsQ0FBQyxFQUFFLEVBQUU7UUFDdEMsSUFBR2dDLEtBQUssQ0FBQ2hDLENBQUMsQ0FBQyxDQUFDa0MsS0FBSyxJQUFFLElBQUksRUFBQztVQUN2QixJQUFHTyxJQUFJLEVBQ05BLElBQUksSUFBRSxHQUFHO1VBQ1ZBLElBQUksSUFBRVQsS0FBSyxDQUFDaEMsQ0FBQyxDQUFDLENBQUN5QyxJQUFJO1VBQ25CdkcsSUFBSSxDQUFDdUUsSUFBSSxDQUFDO1lBQUNpQyxFQUFFLEVBQUNWLEtBQUssQ0FBQ2hDLENBQUMsQ0FBQyxDQUFDMEMsRUFBRTtZQUFDRCxJQUFJLEVBQUNULEtBQUssQ0FBQ2hDLENBQUMsQ0FBQyxDQUFDeUM7VUFBSSxDQUFDLENBQUM7UUFDL0M7TUFDRDtNQUNBLElBQUd2RyxJQUFJLENBQUMrRCxNQUFNLElBQUUsQ0FBQyxFQUFDO1FBQ2pCNUMsR0FBRyxDQUFDUyxTQUFTLENBQUM7VUFBQzNCLEtBQUssRUFBQyxJQUFJO1VBQUM0QixPQUFPLEVBQUMsUUFBUTtVQUFDQyxVQUFVLEVBQUMsS0FBSztVQUFDQyxXQUFXLEVBQUM7UUFBSSxDQUFDLENBQUM7UUFDOUU7TUFDRDtNQUNBLElBQUk2QixTQUFTLEdBQUMsRUFBRTtNQUNoQixJQUFJQyxRQUFRLEdBQUcsSUFBSSxDQUFDckMsS0FBSyxDQUFDckIsYUFBYTtNQUN2QyxLQUFLLElBQUkyRCxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUdELFFBQVEsQ0FBQ0UsTUFBTSxFQUFFRCxDQUFDLEVBQUUsRUFBRTtRQUN6QyxJQUFJRSxJQUFJLEdBQUdILFFBQVEsQ0FBQ0MsQ0FBQyxDQUFDLENBQUNHLElBQUk7UUFDM0IsS0FBSyxJQUFJQyxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUdGLElBQUksQ0FBQ0QsTUFBTSxFQUFFRyxDQUFDLEVBQUUsRUFBRTtVQUNyQyxJQUFJQyxFQUFFLEdBQUdILElBQUksQ0FBQ0UsQ0FBQyxDQUFDO1VBQ2hCLElBQUdDLEVBQUUsQ0FBQ0MsS0FBSyxJQUFFLEtBQUssRUFBQztZQUNsQmpELEdBQUcsQ0FBQ1MsU0FBUyxDQUFDO2NBQUMzQixLQUFLLEVBQUMsSUFBSTtjQUFDNEIsT0FBTyxFQUFDc0MsRUFBRSxDQUFDRSxRQUFRLEdBQUMsUUFBUTtjQUFDdkMsVUFBVSxFQUFDLEtBQUs7Y0FBQ0MsV0FBVyxFQUFDO1lBQUksQ0FBQyxDQUFDO1lBQzFGO1VBQ0Q7VUFDQSxJQUFHb0MsRUFBRSxDQUFDRyxJQUFJLElBQUUsVUFBVSxFQUNyQixJQUFHSCxFQUFFLENBQUNDLEtBQUssSUFBRSxHQUFHLEVBQUVELEVBQUUsQ0FBQ0MsS0FBSyxHQUFDLEVBQUU7VUFDOUIsSUFBR0QsRUFBRSxDQUFDRyxJQUFJLElBQUUsTUFBTSxJQUFJSCxFQUFFLENBQUNHLElBQUksSUFBRSxNQUFNLEVBQ3BDVixTQUFTLENBQUNXLElBQUksQ0FBQztZQUFFUCxJQUFJLEVBQUVHLEVBQUUsQ0FBQ25DLElBQUk7WUFBRXdDLEtBQUssRUFBRUwsRUFBRSxDQUFDTSxLQUFLLEdBQUVOLEVBQUUsQ0FBQ00sS0FBSyxHQUFFO1VBQUcsQ0FBQyxDQUFDLENBQUMsS0FDN0QsSUFBR04sRUFBRSxDQUFDRyxJQUFJLElBQUUsS0FBSyxFQUNyQlYsU0FBUyxDQUFDVyxJQUFJLENBQUM7WUFBRVAsSUFBSSxFQUFFRyxFQUFFLENBQUNuQyxJQUFJO1lBQUV3QyxLQUFLLEVBQUVMLEVBQUUsQ0FBQ0MsS0FBSyxHQUFDLEdBQUcsR0FBQztVQUFHLENBQUMsQ0FBQyxDQUFDLEtBRTFEUixTQUFTLENBQUNXLElBQUksQ0FBQztZQUFFUCxJQUFJLEVBQUVHLEVBQUUsQ0FBQ25DLElBQUk7WUFBRXdDLEtBQUssRUFBRUwsRUFBRSxDQUFDQyxLQUFLLEdBQUVELEVBQUUsQ0FBQ0MsS0FBSyxHQUFFO1VBQUUsQ0FBQyxDQUFDO1FBQ2pFO01BQ0Q7TUFFQWhDLEtBQUssQ0FBQ1osS0FBSyxDQUFDYixXQUFXLEdBQUM0RixJQUFJO01BQzVCLElBQUk1QixJQUFJLEdBQUc7UUFDUEMsT0FBTyxFQUFFMEIsa0JBQWtCLENBQUNuRSxFQUFFO1FBQzlCMEMsTUFBTSxFQUFFLEdBQUc7UUFDWEMsU0FBUyxFQUFFLEVBQUU7UUFDYkMsTUFBTSxFQUFFLEVBQUU7UUFDVkMsTUFBTSxFQUFFLEVBQUU7UUFDYkMsU0FBUyxFQUFFLEVBQUU7UUFDYkMsS0FBSyxFQUFFLE1BQU07UUFDYkMsS0FBSyxFQUFFLEVBQUU7UUFDTm5CLElBQUksRUFBRUosU0FBUztRQUNsQndCLGFBQWEsRUFBRXBGLElBQUk7UUFDbkJ5RyxVQUFVLEVBQUU7TUFDYixDQUFDO01BQ0Q7TUFDQSxJQUFJLENBQUNwQiwwQkFBMEIsQ0FBQ1YsSUFBSSxFQUFFLEVBQUUsQ0FBQztNQUN6QyxJQUFJLENBQUN1QixLQUFLLENBQUNDLEtBQUssQ0FBQ0MsS0FBSyxFQUFFO0lBQ3pCLENBQUM7SUFFRE0sTUFBTSxrQkFBQ2pELENBQUMsRUFBQztNQUNSdEMsR0FBRyxDQUFDd0YsWUFBWSxDQUFDO1FBQ2hCQyxLQUFLLEVBQUMsQ0FBQyxDQUFDO01BQ1QsQ0FBQyxDQUFDO0lBQ0gsQ0FBQztJQUNEQyxTQUFTLHFCQUFDbkIsS0FBSyxFQUFDO01BQ2YsSUFBSXRELEtBQUssR0FBRyxJQUFJO01BQ2hCLElBQUksSUFBSSxDQUFDWixLQUFLLENBQUNYLFlBQVksQ0FBQzZFLEtBQUssQ0FBQyxDQUFDL0UsV0FBVyxJQUFJLElBQUksQ0FBQ2EsS0FBSyxDQUFDYixXQUFXLEVBQUU7UUFDekUsSUFBSSxDQUFDYSxLQUFLLENBQUNiLFdBQVcsR0FBQyxFQUFFO01BQzFCO01BQ0EsSUFBRyxDQUFDLElBQUksQ0FBQ2EsS0FBSyxDQUFDWCxZQUFZLENBQUM2RSxLQUFLLENBQUMsQ0FBQ29CLEtBQUssRUFDdkMsSUFBSSxDQUFDdEYsS0FBSyxDQUFDWCxZQUFZLENBQUNrRyxNQUFNLENBQUNyQixLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FDdEM7UUFDSCxJQUFJekQsUUFBUSxHQUFHO1VBQ2QrRSxLQUFLLEVBQUMsSUFBSSxDQUFDeEYsS0FBSyxDQUFDdEIsS0FBSyxDQUFDa0QsT0FBTyxDQUFDakIsRUFBRTtVQUNqQzhFLEtBQUssRUFBQyxJQUFJLENBQUN6RixLQUFLLENBQUNYLFlBQVksQ0FBQzZFLEtBQUssQ0FBQyxDQUFDb0I7UUFDdEMsQ0FBQztRQUNELGFBQVk3RSxRQUFRO1FBQ3BCO1FBQ0FkLEdBQUcsQ0FBQytGLFdBQVcsQ0FBQztVQUFFakgsS0FBSyxFQUFDO1FBQVMsQ0FBQyxDQUFDO1FBQ25DLElBQUksQ0FBQ29DLE1BQU0sQ0FBQ00sUUFBUSxDQUFDLFFBQVEsRUFBQ1YsUUFBUSxDQUFDLENBQUNXLElBQUksQ0FBQyxVQUFBQyxPQUFPLEVBQUU7VUFDckQsYUFBWUEsT0FBTztVQUNuQjFCLEdBQUcsQ0FBQ2dHLFdBQVcsRUFBRTtVQUNqQixJQUFJdEUsT0FBTyxDQUFDQyxJQUFJLElBQUUsT0FBTyxFQUFFO1lBQzFCVixLQUFLLENBQUNaLEtBQUssQ0FBQ1gsWUFBWSxDQUFDa0csTUFBTSxDQUFDckIsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUN6Q3ZFLEdBQUcsQ0FBQ1MsU0FBUyxDQUFDO2NBQUMzQixLQUFLLEVBQUMsSUFBSTtjQUFDNEIsT0FBTyxFQUFDLE9BQU87Y0FBQ0MsVUFBVSxFQUFDLEtBQUs7Y0FBQ0MsV0FBVyxFQUFDO1lBQUksQ0FBQyxDQUFDO1VBQzlFLENBQUMsTUFBSTtZQUNKWixHQUFHLENBQUNTLFNBQVMsQ0FBQztjQUFDM0IsS0FBSyxFQUFDLEtBQUs7Y0FBQzRCLE9BQU8sRUFBQ2dCLE9BQU8sQ0FBQ0UsR0FBRztjQUFDakIsVUFBVSxFQUFDLEtBQUs7Y0FBQ0MsV0FBVyxFQUFDO1lBQUksQ0FBQyxDQUFDO1VBQ25GO1FBQ0QsQ0FBQyxDQUFDLENBQUNpQixLQUFLLENBQUMsVUFBQUMsRUFBRSxFQUFFO1VBQ1osYUFBWUEsRUFBRTtVQUNkOUIsR0FBRyxDQUFDZ0csV0FBVyxFQUFFO1VBQ2pCaEcsR0FBRyxDQUFDUyxTQUFTLENBQUM7WUFBQzNCLEtBQUssRUFBQyxPQUFPO1lBQUM0QixPQUFPLEVBQUNvQixFQUFFLENBQUNDLE1BQU07WUFBQ3BCLFVBQVUsRUFBQyxLQUFLO1lBQUNDLFdBQVcsRUFBQztVQUFJLENBQUMsQ0FBQztRQUNuRixDQUFDLENBQUM7TUFDSDtJQUNELENBQUM7SUFDS1csa0JBQWtCLDhCQUFDd0MsS0FBSyxFQUFDa0MsU0FBUyxFQUFDQyxPQUFPLEVBQUM7TUFBQTtNQUFBO1FBQUE7UUFBQTtVQUFBO1lBQUE7Y0FBQTtnQkFDNUNqRixLQUFLLEdBQUcsS0FBSTtnQkFDWmtGLGFBQWEsR0FBRztrQkFDbkJwRixRQUFRLEVBQUVnRCxLQUFLO2tCQUNmcUIsSUFBSSxFQUFFYSxTQUFTO2tCQUNmN0IsSUFBSSxFQUFFO2dCQUNQLENBQUMsRUFDRDtnQkFDQTtnQkFDQSxJQUFHOEIsT0FBTyxJQUFFLE1BQU0sRUFBQztrQkFDbEJqRixLQUFLLENBQUNDLE1BQU0sQ0FBQ0MsS0FBSyxDQUFDaUYsWUFBWSxHQUFHSCxTQUFTO2tCQUMzQyxJQUFHaEYsS0FBSyxDQUFDQyxNQUFNLENBQUNHLE9BQU8sQ0FBQ2dGLHFCQUFxQixFQUFDO29CQUM3Q3BGLEtBQUssQ0FBQ1osS0FBSyxDQUFDcEIsY0FBYyxHQUFHZ0MsS0FBSyxDQUFDQyxNQUFNLENBQUNHLE9BQU8sQ0FBQ2dGLHFCQUFxQixDQUFDeEgsSUFBSTtvQkFDNUVvQyxLQUFLLENBQUNxRixlQUFlLEVBQUU7a0JBQ3hCLENBQUMsTUFBSTtvQkFDSjtvQkFDQXJGLEtBQUssQ0FBQ0MsTUFBTSxDQUFDTSxRQUFRLENBQUMsb0JBQW9CLEVBQUMyRSxhQUFhLENBQUMsQ0FBQzFFLElBQUksQ0FBQyxVQUFBQyxPQUFPLEVBQUU7c0JBQ3ZFO3NCQUNBLElBQUlBLE9BQU8sQ0FBQ0MsSUFBSSxJQUFFLE9BQU8sRUFBRTt3QkFDMUJELE9BQU8sQ0FBQzdDLElBQUksQ0FBQzBILFFBQVEsR0FBR3BHLElBQUksQ0FBQ0MsS0FBSyxDQUFDc0IsT0FBTyxDQUFDN0MsSUFBSSxDQUFDMEgsUUFBUSxDQUFDO3dCQUN6RHRGLEtBQUssQ0FBQ1osS0FBSyxDQUFDcEIsY0FBYyxHQUFHeUMsT0FBTyxDQUFDN0MsSUFBSTt3QkFFekNvQyxLQUFLLENBQUNxRixlQUFlLEVBQUU7c0JBQ3hCLENBQUMsTUFBSTt3QkFDSnRHLEdBQUcsQ0FBQ1MsU0FBUyxDQUFDOzBCQUFDM0IsS0FBSyxFQUFDLE9BQU87MEJBQUM0QixPQUFPLEVBQUNnQixPQUFPLENBQUNFLEdBQUc7MEJBQUNqQixVQUFVLEVBQUMsS0FBSzswQkFBQ0MsV0FBVyxFQUFDO3dCQUFJLENBQUMsQ0FBQztzQkFDckY7b0JBQ0QsQ0FBQyxDQUFDLENBQUNpQixLQUFLLENBQUMsVUFBQUMsRUFBRSxFQUFFO3NCQUNaLGFBQVlBLEVBQUU7c0JBQ2Q5QixHQUFHLENBQUNTLFNBQVMsQ0FBQzt3QkFBQzNCLEtBQUssRUFBQyxPQUFPO3dCQUFDNEIsT0FBTyxFQUFDb0IsRUFBRSxDQUFDQyxNQUFNO3dCQUFDcEIsVUFBVSxFQUFDLEtBQUs7d0JBQUNDLFdBQVcsRUFBQztzQkFBSSxDQUFDLENBQUM7b0JBQ25GLENBQUMsQ0FBQztrQkFDSDtnQkFDRCxDQUFDLE1BQU0sSUFBR3NGLE9BQU8sSUFBRSxLQUFLLEVBQUM7a0JBQUc7a0JBQzNCakYsS0FBSyxDQUFDQyxNQUFNLENBQUNDLEtBQUssQ0FBQ3FGLGVBQWUsR0FBR1AsU0FBUztrQkFDOUMsSUFBR2hGLEtBQUssQ0FBQ0MsTUFBTSxDQUFDRyxPQUFPLENBQUNvRix3QkFBd0IsRUFBQztvQkFDaER4RixLQUFLLENBQUNaLEtBQUssQ0FBQ1YsaUJBQWlCLEdBQUdzQixLQUFLLENBQUNDLE1BQU0sQ0FBQ0csT0FBTyxDQUFDb0Ysd0JBQXdCLENBQUM1SCxJQUFJO29CQUNsRm9DLEtBQUssQ0FBQ3lGLGtCQUFrQixFQUFFO2tCQUMzQixDQUFDLE1BQUk7b0JBQ0o7b0JBQ0F6RixLQUFLLENBQUNDLE1BQU0sQ0FBQ00sUUFBUSxDQUFDLHVCQUF1QixFQUFDMkUsYUFBYSxDQUFDLENBQUMxRSxJQUFJLENBQUMsVUFBQUMsT0FBTyxFQUFFO3NCQUMxRTtzQkFDQSxJQUFJQSxPQUFPLENBQUNDLElBQUksSUFBRSxPQUFPLEVBQUU7d0JBQzFCRCxPQUFPLENBQUM3QyxJQUFJLENBQUMwSCxRQUFRLEdBQUdwRyxJQUFJLENBQUNDLEtBQUssQ0FBQ3NCLE9BQU8sQ0FBQzdDLElBQUksQ0FBQzBILFFBQVEsQ0FBQzt3QkFDekR0RixLQUFLLENBQUNaLEtBQUssQ0FBQ1YsaUJBQWlCLEdBQUcrQixPQUFPLENBQUM3QyxJQUFJO3dCQUU1Q29DLEtBQUssQ0FBQ3lGLGtCQUFrQixFQUFFO3NCQUMzQixDQUFDLE1BQUk7d0JBQ0oxRyxHQUFHLENBQUNTLFNBQVMsQ0FBQzswQkFBQzNCLEtBQUssRUFBQyxPQUFPOzBCQUFDNEIsT0FBTyxFQUFDZ0IsT0FBTyxDQUFDRSxHQUFHOzBCQUFDakIsVUFBVSxFQUFDLEtBQUs7MEJBQUNDLFdBQVcsRUFBQzt3QkFBSSxDQUFDLENBQUM7c0JBQ3JGO29CQUNELENBQUMsQ0FBQyxDQUFDaUIsS0FBSyxDQUFDLFVBQUFDLEVBQUUsRUFBRTtzQkFDWixhQUFZQSxFQUFFO3NCQUNkOUIsR0FBRyxDQUFDUyxTQUFTLENBQUM7d0JBQUMzQixLQUFLLEVBQUMsT0FBTzt3QkFBQzRCLE9BQU8sRUFBQ29CLEVBQUUsQ0FBQ0MsTUFBTTt3QkFBQ3BCLFVBQVUsRUFBQyxLQUFLO3dCQUFDQyxXQUFXLEVBQUM7c0JBQUksQ0FBQyxDQUFDO29CQUNuRixDQUFDLENBQUM7a0JBQ0g7Z0JBQ0Q7Y0FBQztjQUFBO2dCQUFBO1lBQUE7VUFBQTtRQUFBO01BQUE7SUFDRixDQUFDO0lBQ0QrRixLQUFLLGlCQUFDckUsQ0FBQyxFQUFDO01BQUE7TUFBRTtNQUNUO01BQ0FzRSxNQUFNLEVBQUUsQ0FBQ0MsTUFBTSxDQUFDLFVBQUNDLE1BQU0sRUFBRztRQUN6QjtRQUNBLElBQUlDLEtBQUssR0FBRSxNQUFJLENBQUMxRyxLQUFLLENBQUNyQixhQUFhLENBQUNzRCxDQUFDLENBQUNrQyxNQUFNLENBQUNDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDM0IsSUFBSSxDQUFDUixDQUFDLENBQUNrQyxNQUFNLENBQUNDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDeEIsS0FBSztRQUNyRztRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQSxJQUFJOEQsS0FBSyxJQUFFRCxNQUFNLENBQUNFLFVBQVUsRUFBRTtVQUM3QixNQUFJLENBQUMzRyxLQUFLLENBQUNyQixhQUFhLENBQUNzRCxDQUFDLENBQUNrQyxNQUFNLENBQUNDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDM0IsSUFBSSxDQUFDUixDQUFDLENBQUNrQyxNQUFNLENBQUNDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDeEIsS0FBSyxHQUFDNkQsTUFBTSxDQUFDRSxVQUFVO1VBQzVHaEgsR0FBRyxDQUFDaUgsWUFBWSxFQUFFO1VBQ2xCO1VBQ0EsSUFBSXhELE9BQU8sR0FBRyxNQUFJLENBQUNwRCxLQUFLLENBQUN0QixLQUFLLENBQUN5RCxTQUFTLENBQUMwRSxrQkFBa0IsQ0FBQ2xHLEVBQUU7VUFDOUQsSUFBSXlDLE9BQU8sRUFBRTtZQUNOLElBQUlGLEdBQUcsR0FBQyxFQUFFO1lBQ1YsSUFBSWIsUUFBUSxHQUFHLE1BQUksQ0FBQ3JDLEtBQUssQ0FBQ3JCLGFBQWEsQ0FBQyxDQUFFO1lBQzFDLEtBQUssSUFBSTJELENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBR0QsUUFBUSxDQUFDRSxNQUFNLEVBQUVELENBQUMsRUFBRSxFQUFFO2NBQ3pDLElBQUlFLElBQUksR0FBR0gsUUFBUSxDQUFDQyxDQUFDLENBQUMsQ0FBQ0csSUFBSTtjQUMzQixLQUFLLElBQUlDLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBR0YsSUFBSSxDQUFDRCxNQUFNLEVBQUVHLENBQUMsRUFBRSxFQUFFO2dCQUNyQyxJQUFJQyxFQUFFLEdBQUdILElBQUksQ0FBQ0UsQ0FBQyxDQUFDO2dCQUNoQixJQUFHQyxFQUFFLENBQUNHLElBQUksSUFBRSxVQUFVLEVBQ3JCLElBQUdILEVBQUUsQ0FBQ0MsS0FBSyxJQUFFLEdBQUcsRUFBRUQsRUFBRSxDQUFDQyxLQUFLLEdBQUMsRUFBRTtnQkFDOUIsSUFBR0QsRUFBRSxDQUFDRyxJQUFJLElBQUUsTUFBTSxJQUFJSCxFQUFFLENBQUNHLElBQUksSUFBRSxNQUFNLEVBQ3BDSSxHQUFHLENBQUNILElBQUksQ0FBQztrQkFBRVAsSUFBSSxFQUFFRyxFQUFFLENBQUNuQyxJQUFJO2tCQUFFd0MsS0FBSyxFQUFFTCxFQUFFLENBQUNNLEtBQUssR0FBRU4sRUFBRSxDQUFDTSxLQUFLLEdBQUU7Z0JBQUcsQ0FBQyxDQUFDLENBQUMsS0FDdkQsSUFBR04sRUFBRSxDQUFDRyxJQUFJLElBQUUsS0FBSyxFQUNyQkksR0FBRyxDQUFDSCxJQUFJLENBQUM7a0JBQUVQLElBQUksRUFBRUcsRUFBRSxDQUFDbkMsSUFBSTtrQkFBRXdDLEtBQUssRUFBRUwsRUFBRSxDQUFDQyxLQUFLLEdBQUMsR0FBRyxHQUFDO2dCQUFHLENBQUMsQ0FBQyxDQUFDLEtBRXBETSxHQUFHLENBQUNILElBQUksQ0FBQztrQkFBRVAsSUFBSSxFQUFFRyxFQUFFLENBQUNuQyxJQUFJO2tCQUFFd0MsS0FBSyxFQUFFTCxFQUFFLENBQUNDLEtBQUssR0FBRUQsRUFBRSxDQUFDQyxLQUFLLEdBQUU7Z0JBQUUsQ0FBQyxDQUFDO2NBQzNEO1lBQ0Q7WUFDQSxJQUFJTyxJQUFJLEdBQUc7Y0FDUEMsT0FBTyxFQUFFQSxPQUFPO2NBQ2hCQyxNQUFNLEVBQUUsR0FBRztjQUFDO2NBQ1pDLFNBQVMsRUFBRSxFQUFFO2NBQ2JDLE1BQU0sRUFBRSxFQUFFO2NBQ1ZDLE1BQU0sRUFBRSxFQUFFO2NBQ1ZDLFNBQVMsRUFBRSxFQUFFO2NBQ2JDLEtBQUssRUFBRSxNQUFNO2NBQUM7Y0FDZEMsS0FBSyxFQUFFLEVBQUU7Y0FDVG5CLElBQUksRUFBRVUsR0FBRztjQUNsQmQsU0FBUyxFQUFFLEVBQUU7Y0FDYndCLGFBQWEsRUFBQyxDQUFDO2dCQUFFcEIsSUFBSSxFQUFFLGlCQUFpQjtnQkFBRVEsS0FBSyxFQUFFeUQsTUFBTSxDQUFDRTtjQUFXLENBQUM7WUFDL0QsQ0FBQztZQUVELE1BQUksQ0FBQzlDLDBCQUEwQixDQUFDVixJQUFJLEVBQUUsRUFBRSxDQUFDO1VBQzdDO1FBQ0o7TUFDRCxDQUFDLENBQUM7SUFDSCxDQUFDO0lBQ0QyRCxRQUFRLG9CQUFDN0UsQ0FBQyxFQUFDO01BQUE7TUFBRTtNQUNaO01BQ0FzRSxNQUFNLEVBQUUsQ0FBQ0MsTUFBTSxDQUFDLFVBQUNDLE1BQU0sRUFBRztRQUN6QjtRQUNBLElBQUlDLEtBQUssR0FBRSxNQUFJLENBQUMxRyxLQUFLLENBQUNaLGdCQUFnQixDQUFDNkMsQ0FBQyxDQUFDa0MsTUFBTSxDQUFDQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQzNCLElBQUksQ0FBQ1IsQ0FBQyxDQUFDa0MsTUFBTSxDQUFDQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQ3hCLEtBQUs7UUFDeEc7UUFDQSxJQUFJOEQsS0FBSyxJQUFFRCxNQUFNLENBQUNFLFVBQVUsRUFBRTtVQUM3QixNQUFJLENBQUMzRyxLQUFLLENBQUNaLGdCQUFnQixDQUFDNkMsQ0FBQyxDQUFDa0MsTUFBTSxDQUFDQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQzNCLElBQUksQ0FBQ1IsQ0FBQyxDQUFDa0MsTUFBTSxDQUFDQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQ3hCLEtBQUssR0FBQzZELE1BQU0sQ0FBQ0UsVUFBVTtVQUMvR2hILEdBQUcsQ0FBQ2lILFlBQVksRUFBRTtVQUNsQjtVQUNBLElBQUl4RCxPQUFPLEdBQUcsTUFBSSxDQUFDcEQsS0FBSyxDQUFDdEIsS0FBSyxDQUFDeUQsU0FBUyxDQUFDMEUsa0JBQWtCLENBQUNsRyxFQUFFO1VBQzlELElBQUl5QyxPQUFPLEVBQUU7WUFDTixJQUFJRixHQUFHLEdBQUMsRUFBRTtZQUNWLElBQUliLFFBQVEsR0FBRyxNQUFJLENBQUNyQyxLQUFLLENBQUNaLGdCQUFnQixDQUFDLENBQUU7WUFDN0MsS0FBSyxJQUFJa0QsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHRCxRQUFRLENBQUNFLE1BQU0sRUFBRUQsQ0FBQyxFQUFFLEVBQUU7Y0FDekMsSUFBSUUsSUFBSSxHQUFHSCxRQUFRLENBQUNDLENBQUMsQ0FBQyxDQUFDRyxJQUFJO2NBQzNCLEtBQUssSUFBSUMsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHRixJQUFJLENBQUNELE1BQU0sRUFBRUcsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3JDLElBQUlDLEVBQUUsR0FBR0gsSUFBSSxDQUFDRSxDQUFDLENBQUM7Z0JBQ2hCLElBQUdDLEVBQUUsQ0FBQ0csSUFBSSxJQUFFLFVBQVUsRUFDckIsSUFBR0gsRUFBRSxDQUFDQyxLQUFLLElBQUUsR0FBRyxFQUFFRCxFQUFFLENBQUNDLEtBQUssR0FBQyxFQUFFO2dCQUM5QixJQUFHRCxFQUFFLENBQUNHLElBQUksSUFBRSxNQUFNLElBQUlILEVBQUUsQ0FBQ0csSUFBSSxJQUFFLE1BQU0sRUFDcENJLEdBQUcsQ0FBQ0gsSUFBSSxDQUFDO2tCQUFFUCxJQUFJLEVBQUVHLEVBQUUsQ0FBQ25DLElBQUk7a0JBQUV3QyxLQUFLLEVBQUVMLEVBQUUsQ0FBQ00sS0FBSyxHQUFFTixFQUFFLENBQUNNLEtBQUssR0FBRTtnQkFBRyxDQUFDLENBQUMsQ0FBQyxLQUN2RCxJQUFHTixFQUFFLENBQUNHLElBQUksSUFBRSxLQUFLLEVBQ3JCSSxHQUFHLENBQUNILElBQUksQ0FBQztrQkFBRVAsSUFBSSxFQUFFRyxFQUFFLENBQUNuQyxJQUFJO2tCQUFFd0MsS0FBSyxFQUFFTCxFQUFFLENBQUNDLEtBQUssR0FBQyxHQUFHLEdBQUM7Z0JBQUcsQ0FBQyxDQUFDLENBQUMsS0FFcERNLEdBQUcsQ0FBQ0gsSUFBSSxDQUFDO2tCQUFFUCxJQUFJLEVBQUVHLEVBQUUsQ0FBQ25DLElBQUk7a0JBQUV3QyxLQUFLLEVBQUVMLEVBQUUsQ0FBQ0MsS0FBSyxHQUFFRCxFQUFFLENBQUNDLEtBQUssR0FBRTtnQkFBRSxDQUFDLENBQUM7Y0FDM0Q7WUFDRDtZQUNBLElBQUlPLElBQUksR0FBRztjQUNQQyxPQUFPLEVBQUVBLE9BQU87Y0FDaEJDLE1BQU0sRUFBRSxHQUFHO2NBQUM7Y0FDWkMsU0FBUyxFQUFFLEVBQUU7Y0FDYkMsTUFBTSxFQUFFLEVBQUU7Y0FDVkMsTUFBTSxFQUFFLEVBQUU7Y0FDVkMsU0FBUyxFQUFFLEVBQUU7Y0FDYkMsS0FBSyxFQUFFLE1BQU07Y0FBQztjQUNkQyxLQUFLLEVBQUUsRUFBRTtjQUNUbkIsSUFBSSxFQUFFVSxHQUFHO2NBQ2xCZCxTQUFTLEVBQUUsRUFBRTtjQUNid0IsYUFBYSxFQUFDLENBQUM7Z0JBQUVwQixJQUFJLEVBQUUsaUJBQWlCO2dCQUFFUSxLQUFLLEVBQUV5RCxNQUFNLENBQUNFO2NBQVcsQ0FBQztZQUMvRCxDQUFDO1lBRUQsTUFBSSxDQUFDOUMsMEJBQTBCLENBQUNWLElBQUksRUFBRSxFQUFFLENBQUM7VUFDN0M7UUFDSjtNQUNELENBQUMsQ0FBQztJQUNILENBQUM7SUFDRDRELFVBQVUsc0JBQUM5RSxDQUFDLEVBQUM7TUFBQTtNQUFFO01BQ2Q7TUFDQXNFLE1BQU0sRUFBRSxDQUFDQyxNQUFNLENBQUMsVUFBQ0MsTUFBTSxFQUFHO1FBQ3pCLGFBQVlBLE1BQU0sQ0FBQ0UsVUFBVTtRQUM3QixJQUFJSyxNQUFNLEdBQUMsSUFBSTtRQUNmLEtBQUksSUFBSTFFLENBQUMsSUFBSSxNQUFJLENBQUN0QyxLQUFLLENBQUNYLFlBQVksRUFBQztVQUNwQyxJQUFHLE1BQUksQ0FBQ1csS0FBSyxDQUFDWCxZQUFZLENBQUNpRCxDQUFDLENBQUMsQ0FBQ25ELFdBQVcsSUFBSXNILE1BQU0sQ0FBQ0UsVUFBVSxFQUM3REssTUFBTSxHQUFDLEtBQUs7UUFDZDtRQUNBO1FBQ0EsSUFBSUEsTUFBTSxFQUFFO1VBQ1hySCxHQUFHLENBQUNpSCxZQUFZLEVBQUU7VUFDbEIsTUFBSSxDQUFDNUcsS0FBSyxDQUFDYixXQUFXLEdBQUNzSCxNQUFNLENBQUNFLFVBQVU7VUFDeEMsSUFBSXZELE9BQU8sR0FBRyxNQUFJLENBQUNwRCxLQUFLLENBQUN0QixLQUFLLENBQUN5RCxTQUFTLENBQUMwRSxrQkFBa0IsQ0FBQ2xHLEVBQUU7VUFDOUQsSUFBSXlDLE9BQU8sRUFBRTtZQUNOLElBQUk2RCxRQUFRLEdBQUMsRUFBRTtZQUNyQjtZQUNBLElBQUlDLGFBQWEsR0FBRyxNQUFJLENBQUNsSCxLQUFLLENBQUNyQixhQUFhO1lBQzVDLEtBQUssSUFBSTJELENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBRzRFLGFBQWEsQ0FBQzNFLE1BQU0sRUFBRUQsQ0FBQyxFQUFFLEVBQUU7Y0FDOUMsSUFBSUUsSUFBSSxHQUFHMEUsYUFBYSxDQUFDNUUsQ0FBQyxDQUFDLENBQUNHLElBQUk7Y0FDaEMsS0FBSyxJQUFJQyxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUdGLElBQUksQ0FBQ0QsTUFBTSxFQUFFRyxDQUFDLEVBQUUsRUFBRTtnQkFDckMsSUFBSUMsRUFBRSxHQUFHSCxJQUFJLENBQUNFLENBQUMsQ0FBQztnQkFDaEIsSUFBR0MsRUFBRSxDQUFDRyxJQUFJLElBQUUsVUFBVSxFQUNyQixJQUFHSCxFQUFFLENBQUNDLEtBQUssSUFBRSxHQUFHLEVBQUVELEVBQUUsQ0FBQ0MsS0FBSyxHQUFDLEVBQUU7Z0JBQzlCLElBQUdELEVBQUUsQ0FBQ0csSUFBSSxJQUFFLE1BQU0sSUFBSUgsRUFBRSxDQUFDRyxJQUFJLElBQUUsTUFBTSxFQUNwQ21FLFFBQVEsQ0FBQ2xFLElBQUksQ0FBQztrQkFBRVAsSUFBSSxFQUFFRyxFQUFFLENBQUNuQyxJQUFJO2tCQUFFd0MsS0FBSyxFQUFFTCxFQUFFLENBQUNNLEtBQUssR0FBRU4sRUFBRSxDQUFDTSxLQUFLLEdBQUU7Z0JBQUcsQ0FBQyxDQUFDLENBQUMsS0FDNUQsSUFBR04sRUFBRSxDQUFDRyxJQUFJLElBQUUsS0FBSyxFQUNyQm1FLFFBQVEsQ0FBQ2xFLElBQUksQ0FBQztrQkFBRVAsSUFBSSxFQUFFRyxFQUFFLENBQUNuQyxJQUFJO2tCQUFFd0MsS0FBSyxFQUFFTCxFQUFFLENBQUNDLEtBQUssR0FBQyxHQUFHLEdBQUM7Z0JBQUcsQ0FBQyxDQUFDLENBQUMsS0FFekRxRSxRQUFRLENBQUNsRSxJQUFJLENBQUM7a0JBQUVQLElBQUksRUFBRUcsRUFBRSxDQUFDbkMsSUFBSTtrQkFBRXdDLEtBQUssRUFBRUwsRUFBRSxDQUFDQyxLQUFLLEdBQUVELEVBQUUsQ0FBQ0MsS0FBSyxHQUFFO2dCQUFFLENBQUMsQ0FBQztjQUNoRTtZQUNEO1lBQ00sSUFBSU0sR0FBRyxHQUFDLEVBQUU7WUFDVjtZQUNOLElBQUliLFFBQVEsR0FBRyxNQUFJLENBQUNyQyxLQUFLLENBQUNaLGdCQUFnQjtZQUNwQyxLQUFLLElBQUlrRCxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUdELFFBQVEsQ0FBQ0UsTUFBTSxFQUFFRCxDQUFDLEVBQUUsRUFBRTtjQUN6QyxJQUFJRSxJQUFJLEdBQUdILFFBQVEsQ0FBQ0MsQ0FBQyxDQUFDLENBQUNHLElBQUk7Y0FDM0IsS0FBSyxJQUFJQyxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUdGLElBQUksQ0FBQ0QsTUFBTSxFQUFFRyxDQUFDLEVBQUUsRUFBRTtnQkFDckMsSUFBSUMsRUFBRSxHQUFHSCxJQUFJLENBQUNFLENBQUMsQ0FBQztnQkFDaEIsSUFBR0MsRUFBRSxDQUFDRyxJQUFJLElBQUUsVUFBVSxFQUNyQixJQUFHSCxFQUFFLENBQUNDLEtBQUssSUFBRSxHQUFHLEVBQUVELEVBQUUsQ0FBQ0MsS0FBSyxHQUFDLEVBQUU7Z0JBQzlCLElBQUdELEVBQUUsQ0FBQ0csSUFBSSxJQUFFLE1BQU0sSUFBSUgsRUFBRSxDQUFDRyxJQUFJLElBQUUsTUFBTSxFQUNwQ0ksR0FBRyxDQUFDSCxJQUFJLENBQUM7a0JBQUVQLElBQUksRUFBRUcsRUFBRSxDQUFDbkMsSUFBSTtrQkFBRXdDLEtBQUssRUFBRUwsRUFBRSxDQUFDTSxLQUFLLEdBQUVOLEVBQUUsQ0FBQ00sS0FBSyxHQUFFO2dCQUFHLENBQUMsQ0FBQyxDQUFDLEtBQ3ZELElBQUdOLEVBQUUsQ0FBQ0csSUFBSSxJQUFFLEtBQUssRUFDM0JJLEdBQUcsQ0FBQ0gsSUFBSSxDQUFDO2tCQUFFUCxJQUFJLEVBQUVHLEVBQUUsQ0FBQ25DLElBQUk7a0JBQUV3QyxLQUFLLEVBQUVMLEVBQUUsQ0FBQ0MsS0FBSyxHQUFDLEdBQUcsR0FBQztnQkFBRyxDQUFDLENBQUMsQ0FBQyxLQUU5Q00sR0FBRyxDQUFDSCxJQUFJLENBQUM7a0JBQUVQLElBQUksRUFBRUcsRUFBRSxDQUFDbkMsSUFBSTtrQkFBRXdDLEtBQUssRUFBRUwsRUFBRSxDQUFDQyxLQUFLLEdBQUVELEVBQUUsQ0FBQ0MsS0FBSyxHQUFFO2dCQUFFLENBQUMsQ0FBQztjQUMzRDtZQUNEO1lBQ0EsSUFBSU8sSUFBSSxHQUFHO2NBQ1BDLE9BQU8sRUFBRUEsT0FBTztjQUNoQkMsTUFBTSxFQUFFLEdBQUc7Y0FBQztjQUNaQyxTQUFTLEVBQUUsRUFBRTtjQUNiQyxNQUFNLEVBQUUsRUFBRTtjQUNWQyxNQUFNLEVBQUUsRUFBRTtjQUNWQyxTQUFTLEVBQUUsRUFBRTtjQUNiQyxLQUFLLEVBQUUsTUFBTTtjQUFDO2NBQ2RDLEtBQUssRUFBRSxFQUFFO2NBQ1RuQixJQUFJLEVBQUVVLEdBQUc7Y0FDbEJkLFNBQVMsRUFBRTZFLFFBQVE7Y0FDbkJyRCxhQUFhLEVBQUMsQ0FBQztnQkFBRXBCLElBQUksRUFBRSxZQUFZO2dCQUFFUSxLQUFLLEVBQUUsTUFBSSxDQUFDaEQsS0FBSyxDQUFDYjtjQUFZLENBQUM7WUFDL0QsQ0FBQztZQUVELE1BQUksQ0FBQzBFLDBCQUEwQixDQUFDVixJQUFJLEVBQUUsRUFBRSxDQUFDO1VBQzdDO1FBQ0o7TUFDRCxDQUFDLENBQUM7SUFDSCxDQUFDO0lBQ0RnRSxZQUFZLHdCQUFDbEYsQ0FBQyxFQUFDO01BQ2Q7TUFDQSxJQUFHQSxDQUFDLENBQUNrQyxNQUFNLENBQUNuQixLQUFLLEVBQUM7UUFDakIsSUFBSWdFLE1BQU0sR0FBQyxJQUFJO1FBQ2YsS0FBSSxJQUFJMUUsQ0FBQyxJQUFJLElBQUksQ0FBQ3RDLEtBQUssQ0FBQ1gsWUFBWSxFQUFDO1VBQ3BDLElBQUcsSUFBSSxDQUFDVyxLQUFLLENBQUNYLFlBQVksQ0FBQ2lELENBQUMsQ0FBQyxDQUFDbkQsV0FBVyxJQUFJOEMsQ0FBQyxDQUFDa0MsTUFBTSxDQUFDbkIsS0FBSyxFQUMxRGdFLE1BQU0sR0FBQyxLQUFLO1FBQ2Q7UUFDQTtRQUNBLElBQUlBLE1BQU0sRUFBRTtVQUNYckgsR0FBRyxDQUFDaUgsWUFBWSxFQUFFO1VBQ2xCLElBQUksQ0FBQzVHLEtBQUssQ0FBQ2IsV0FBVyxHQUFDOEMsQ0FBQyxDQUFDa0MsTUFBTSxDQUFDbkIsS0FBSztVQUNyQyxJQUFJSSxPQUFPLEdBQUcsSUFBSSxDQUFDcEQsS0FBSyxDQUFDdEIsS0FBSyxDQUFDeUQsU0FBUyxDQUFDMEUsa0JBQWtCLENBQUNsRyxFQUFFO1VBQzlELElBQUl5QyxPQUFPLEVBQUU7WUFDWixJQUFJNkQsUUFBUSxHQUFDLEVBQUU7WUFDZjtZQUNBLElBQUlDLGFBQWEsR0FBRyxJQUFJLENBQUNsSCxLQUFLLENBQUNyQixhQUFhO1lBQzVDLEtBQUssSUFBSTJELENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBRzRFLGFBQWEsQ0FBQzNFLE1BQU0sRUFBRUQsQ0FBQyxFQUFFLEVBQUU7Y0FDOUMsSUFBSUUsSUFBSSxHQUFHMEUsYUFBYSxDQUFDNUUsQ0FBQyxDQUFDLENBQUNHLElBQUk7Y0FDaEMsS0FBSyxJQUFJQyxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUdGLElBQUksQ0FBQ0QsTUFBTSxFQUFFRyxDQUFDLEVBQUUsRUFBRTtnQkFDckMsSUFBSUMsRUFBRSxHQUFHSCxJQUFJLENBQUNFLENBQUMsQ0FBQztnQkFDaEIsSUFBR0MsRUFBRSxDQUFDRyxJQUFJLElBQUUsVUFBVSxFQUNyQixJQUFHSCxFQUFFLENBQUNDLEtBQUssSUFBRSxHQUFHLEVBQUVELEVBQUUsQ0FBQ0MsS0FBSyxHQUFDLEVBQUU7Z0JBQzlCLElBQUdELEVBQUUsQ0FBQ0csSUFBSSxJQUFFLE1BQU0sSUFBSUgsRUFBRSxDQUFDRyxJQUFJLElBQUUsTUFBTSxFQUNwQ21FLFFBQVEsQ0FBQ2xFLElBQUksQ0FBQztrQkFBRVAsSUFBSSxFQUFFRyxFQUFFLENBQUNuQyxJQUFJO2tCQUFFd0MsS0FBSyxFQUFFTCxFQUFFLENBQUNNLEtBQUssR0FBRU4sRUFBRSxDQUFDTSxLQUFLLEdBQUU7Z0JBQUcsQ0FBQyxDQUFDLENBQUMsS0FDNUQsSUFBR04sRUFBRSxDQUFDRyxJQUFJLElBQUUsS0FBSyxFQUNyQm1FLFFBQVEsQ0FBQ2xFLElBQUksQ0FBQztrQkFBRVAsSUFBSSxFQUFFRyxFQUFFLENBQUNuQyxJQUFJO2tCQUFFd0MsS0FBSyxFQUFFTCxFQUFFLENBQUNDLEtBQUssR0FBQyxHQUFHLEdBQUM7Z0JBQUcsQ0FBQyxDQUFDLENBQUMsS0FFekRxRSxRQUFRLENBQUNsRSxJQUFJLENBQUM7a0JBQUVQLElBQUksRUFBRUcsRUFBRSxDQUFDbkMsSUFBSTtrQkFBRXdDLEtBQUssRUFBRUwsRUFBRSxDQUFDQyxLQUFLLEdBQUVELEVBQUUsQ0FBQ0MsS0FBSyxHQUFFO2dCQUFFLENBQUMsQ0FBQztjQUNoRTtZQUNEO1lBQ0EsSUFBSU0sR0FBRyxHQUFDLEVBQUU7WUFDVjtZQUNBLElBQUliLFFBQVEsR0FBRyxJQUFJLENBQUNyQyxLQUFLLENBQUNaLGdCQUFnQjtZQUMxQyxLQUFLLElBQUlrRCxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUdELFFBQVEsQ0FBQ0UsTUFBTSxFQUFFRCxDQUFDLEVBQUUsRUFBRTtjQUN6QyxJQUFJRSxJQUFJLEdBQUdILFFBQVEsQ0FBQ0MsQ0FBQyxDQUFDLENBQUNHLElBQUk7Y0FDM0IsS0FBSyxJQUFJQyxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUdGLElBQUksQ0FBQ0QsTUFBTSxFQUFFRyxDQUFDLEVBQUUsRUFBRTtnQkFDckMsSUFBSUMsRUFBRSxHQUFHSCxJQUFJLENBQUNFLENBQUMsQ0FBQztnQkFDaEIsSUFBR0MsRUFBRSxDQUFDRyxJQUFJLElBQUUsVUFBVSxFQUNyQixJQUFHSCxFQUFFLENBQUNDLEtBQUssSUFBRSxHQUFHLEVBQUVELEVBQUUsQ0FBQ0MsS0FBSyxHQUFDLEVBQUU7Z0JBQzlCLElBQUdELEVBQUUsQ0FBQ0csSUFBSSxJQUFFLE1BQU0sSUFBSUgsRUFBRSxDQUFDRyxJQUFJLElBQUUsTUFBTSxFQUNwQ0ksR0FBRyxDQUFDSCxJQUFJLENBQUM7a0JBQUVQLElBQUksRUFBRUcsRUFBRSxDQUFDbkMsSUFBSTtrQkFBRXdDLEtBQUssRUFBRUwsRUFBRSxDQUFDTSxLQUFLLEdBQUVOLEVBQUUsQ0FBQ00sS0FBSyxHQUFFO2dCQUFHLENBQUMsQ0FBQyxDQUFDLEtBQ3ZELElBQUdOLEVBQUUsQ0FBQ0csSUFBSSxJQUFFLEtBQUssRUFDckJJLEdBQUcsQ0FBQ0gsSUFBSSxDQUFDO2tCQUFFUCxJQUFJLEVBQUVHLEVBQUUsQ0FBQ25DLElBQUk7a0JBQUV3QyxLQUFLLEVBQUVMLEVBQUUsQ0FBQ0MsS0FBSyxHQUFDLEdBQUcsR0FBQztnQkFBRyxDQUFDLENBQUMsQ0FBQyxLQUVwRE0sR0FBRyxDQUFDSCxJQUFJLENBQUM7a0JBQUVQLElBQUksRUFBRUcsRUFBRSxDQUFDbkMsSUFBSTtrQkFBRXdDLEtBQUssRUFBRUwsRUFBRSxDQUFDQyxLQUFLLEdBQUVELEVBQUUsQ0FBQ0MsS0FBSyxHQUFFO2dCQUFFLENBQUMsQ0FBQztjQUMzRDtZQUNEO1lBQ0EsSUFBSU8sSUFBSSxHQUFHO2NBQ1ZDLE9BQU8sRUFBRUEsT0FBTztjQUNoQkMsTUFBTSxFQUFFLEdBQUc7Y0FBQztjQUNaQyxTQUFTLEVBQUUsRUFBRTtjQUNiQyxNQUFNLEVBQUUsRUFBRTtjQUNWQyxNQUFNLEVBQUUsRUFBRTtjQUNWQyxTQUFTLEVBQUUsRUFBRTtjQUNiQyxLQUFLLEVBQUUsTUFBTTtjQUFDO2NBQ2RDLEtBQUssRUFBRSxFQUFFO2NBQ1RuQixJQUFJLEVBQUVVLEdBQUc7Y0FDVGQsU0FBUyxFQUFFNkUsUUFBUTtjQUNuQnJELGFBQWEsRUFBQyxDQUFDO2dCQUFFcEIsSUFBSSxFQUFFLFlBQVk7Z0JBQUVRLEtBQUssRUFBRSxJQUFJLENBQUNoRCxLQUFLLENBQUNiO2NBQVksQ0FBQztZQUNyRSxDQUFDO1lBRUQsSUFBSSxDQUFDMEUsMEJBQTBCLENBQUNWLElBQUksRUFBRSxFQUFFLENBQUM7VUFDMUM7UUFDRDtNQUNEO0lBQ0QsQ0FBQztJQUNEaUUsT0FBTyxtQkFBQ2xELEtBQUssRUFBQ21ELElBQUksRUFBQztNQUNsQjtNQUNBLElBQUlDLFNBQVMsR0FBQyxJQUFJLENBQUN0SCxLQUFLLENBQUNyQixhQUFhLENBQUNzRCxDQUFDLENBQUNrQyxNQUFNLENBQUNDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDM0IsSUFBSSxDQUFDUixDQUFDLENBQUNrQyxNQUFNLENBQUNDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDbUQsSUFBSTtNQUN2RyxJQUFHLENBQUNELFNBQVMsRUFBQztRQUNiLElBQUksQ0FBQ3RILEtBQUssQ0FBQ1gsWUFBWSxDQUFDNEMsQ0FBQyxDQUFDa0MsTUFBTSxDQUFDQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQ29ELFlBQVksQ0FBQ3ZGLENBQUMsQ0FBQ2tDLE1BQU0sQ0FBQ0MsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMzQixJQUFJLENBQUNSLENBQUMsQ0FBQ2tDLE1BQU0sQ0FBQ0MsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUN4QixLQUFLLEdBQUN5RSxJQUFJLElBQUUsSUFBSSxHQUFDLEtBQUssR0FBQyxJQUFJO1FBQ3pKO01BQ0Q7TUFDQSxJQUFJLENBQUNySCxLQUFLLENBQUNyQixhQUFhLENBQUNzRCxDQUFDLENBQUNrQyxNQUFNLENBQUNDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDb0QsWUFBWSxDQUFDdEQsS0FBSyxDQUFDLENBQUNxRCxJQUFJLEdBQUNGLElBQUksSUFBRSxJQUFJLEdBQUMsS0FBSyxHQUFDLElBQUk7SUFDckcsQ0FBQztJQUNESSxVQUFVLHNCQUFDeEYsQ0FBQyxFQUFFO01BQ2I7TUFDQSxJQUFJcUYsU0FBUyxHQUFDLElBQUksQ0FBQ3RILEtBQUssQ0FBQ3JCLGFBQWEsQ0FBQ3NELENBQUMsQ0FBQ2tDLE1BQU0sQ0FBQ0MsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMzQixJQUFJLENBQUNSLENBQUMsQ0FBQ2tDLE1BQU0sQ0FBQ0MsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUN4QixLQUFLO01BQ3hHLElBQUcsQ0FBQzBFLFNBQVMsRUFBQztRQUNiLElBQUksQ0FBQ3RILEtBQUssQ0FBQ1gsWUFBWSxDQUFDNEMsQ0FBQyxDQUFDa0MsTUFBTSxDQUFDQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQ29ELFlBQVksQ0FBQ3ZGLENBQUMsQ0FBQ2tDLE1BQU0sQ0FBQ0MsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMzQixJQUFJLENBQUNSLENBQUMsQ0FBQ2tDLE1BQU0sQ0FBQ0MsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUN4QixLQUFLLEdBQUNYLENBQUMsQ0FBQ2tDLE1BQU0sQ0FBQ25CLEtBQUs7UUFDbEo7TUFDRDtNQUNBLElBQUksQ0FBQ2hELEtBQUssQ0FBQ3JCLGFBQWEsQ0FBQ3NELENBQUMsQ0FBQ2tDLE1BQU0sQ0FBQ0MsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMzQixJQUFJLENBQUNSLENBQUMsQ0FBQ2tDLE1BQU0sQ0FBQ0MsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUN4QixLQUFLLEdBQUNYLENBQUMsQ0FBQ2tDLE1BQU0sQ0FBQ25CLEtBQUs7SUFFMUcsQ0FBQztJQUNEMEUsUUFBUSxvQkFBQ3pGLENBQUMsRUFBRTtNQUNYLGFBQVlBLENBQUMsQ0FBQ2tDLE1BQU07TUFDcEIsSUFBSW5CLEtBQUssR0FBQyxJQUFJLENBQUNoRCxLQUFLLENBQUNyQixhQUFhLENBQUNzRCxDQUFDLENBQUNrQyxNQUFNLENBQUNDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDM0IsSUFBSSxDQUFDUixDQUFDLENBQUNrQyxNQUFNLENBQUNDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDdUQsUUFBUSxDQUFDMUYsQ0FBQyxDQUFDa0MsTUFBTSxDQUFDbkIsS0FBSyxDQUFDO01BQ3ZILElBQUlzRSxTQUFTLEdBQUcsSUFBSSxDQUFDdEgsS0FBSyxDQUFDckIsYUFBYSxDQUFDc0QsQ0FBQyxDQUFDa0MsTUFBTSxDQUFDQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQzNCLElBQUksQ0FBQ1IsQ0FBQyxDQUFDa0MsTUFBTSxDQUFDQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7TUFDcEcsYUFBWWtELFNBQVM7TUFDckIsSUFBSXRFLEtBQUssQ0FBQ3hDLElBQUksSUFBSThHLFNBQVMsQ0FBQzFFLEtBQUssRUFBRTtRQUNsQyxJQUFJLENBQUM1QyxLQUFLLENBQUNyQixhQUFhLENBQUNzRCxDQUFDLENBQUNrQyxNQUFNLENBQUNDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDM0IsSUFBSSxDQUFDUixDQUFDLENBQUNrQyxNQUFNLENBQUNDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDeEIsS0FBSyxHQUFDSSxLQUFLLENBQUN4QyxJQUFJO1FBQ3JHLGFBQVksSUFBSSxDQUFDUixLQUFLLENBQUNyQixhQUFhLENBQUNzRCxDQUFDLENBQUNrQyxNQUFNLENBQUNDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDM0IsSUFBSSxDQUFDUixDQUFDLENBQUNrQyxNQUFNLENBQUNDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDeEIsS0FBSztRQUN0RyxJQUFJUSxPQUFPLEdBQUcsSUFBSSxDQUFDcEQsS0FBSyxDQUFDckIsYUFBYSxDQUFDc0QsQ0FBQyxDQUFDa0MsTUFBTSxDQUFDQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQzNCLElBQUksQ0FBQ1IsQ0FBQyxDQUFDa0MsTUFBTSxDQUFDQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQ3dELE1BQU07UUFDekcsSUFBSXhFLE9BQU8sRUFBRTtVQUNOO1VBQ0EsSUFBSUYsR0FBRyxHQUFDLEVBQUU7VUFDVixJQUFJYixRQUFRLEdBQUcsSUFBSSxDQUFDckMsS0FBSyxDQUFDckIsYUFBYTtVQUN2QyxLQUFLLElBQUkyRCxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUdELFFBQVEsQ0FBQ0UsTUFBTSxFQUFFRCxDQUFDLEVBQUUsRUFBRTtZQUN6QyxJQUFJRSxJQUFJLEdBQUdILFFBQVEsQ0FBQ0MsQ0FBQyxDQUFDLENBQUNHLElBQUk7WUFDM0IsS0FBSyxJQUFJQyxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUdGLElBQUksQ0FBQ0QsTUFBTSxFQUFFRyxDQUFDLEVBQUUsRUFBRTtjQUNyQyxJQUFJQyxFQUFFLEdBQUdILElBQUksQ0FBQ0UsQ0FBQyxDQUFDO2NBQ2hCLElBQUdDLEVBQUUsQ0FBQ0csSUFBSSxJQUFFLFVBQVUsRUFDckIsSUFBR0gsRUFBRSxDQUFDQyxLQUFLLElBQUUsR0FBRyxFQUFFRCxFQUFFLENBQUNDLEtBQUssR0FBQyxFQUFFO2NBQzlCLElBQUdELEVBQUUsQ0FBQ0csSUFBSSxJQUFFLE1BQU0sSUFBSUgsRUFBRSxDQUFDRyxJQUFJLElBQUUsTUFBTSxFQUNwQ0ksR0FBRyxDQUFDSCxJQUFJLENBQUM7Z0JBQUVQLElBQUksRUFBRUcsRUFBRSxDQUFDbkMsSUFBSTtnQkFBRXFILEdBQUcsRUFBRWxGLEVBQUUsQ0FBQ00sS0FBSyxHQUFFTixFQUFFLENBQUNNLEtBQUssR0FBRTtjQUFHLENBQUMsQ0FBQyxDQUFDLEtBQ3JELElBQUdOLEVBQUUsQ0FBQ0csSUFBSSxJQUFFLEtBQUssRUFDM0JJLEdBQUcsQ0FBQ0gsSUFBSSxDQUFDO2dCQUFFUCxJQUFJLEVBQUVHLEVBQUUsQ0FBQ25DLElBQUk7Z0JBQUVxSCxHQUFHLEVBQUVsRixFQUFFLENBQUNDLEtBQUssR0FBQyxHQUFHLEdBQUM7Y0FBRyxDQUFDLENBQUMsQ0FBQyxLQUU1Q00sR0FBRyxDQUFDSCxJQUFJLENBQUM7Z0JBQUVQLElBQUksRUFBRUcsRUFBRSxDQUFDbkMsSUFBSTtnQkFBRXFILEdBQUcsRUFBRWxGLEVBQUUsQ0FBQ0MsS0FBSyxHQUFFRCxFQUFFLENBQUNDLEtBQUssR0FBRTtjQUFFLENBQUMsQ0FBQztZQUN6RDtVQUNEO1VBQ0EsSUFBSU8sSUFBSSxHQUFHO1lBQ1BDLE9BQU8sRUFBRUEsT0FBTztZQUNoQkMsTUFBTSxFQUFFLEdBQUc7WUFDWEMsU0FBUyxFQUFFLEVBQUU7WUFDYkMsTUFBTSxFQUFFLEVBQUU7WUFDVkMsTUFBTSxFQUFFLEVBQUU7WUFDVkMsU0FBUyxFQUFFLEVBQUU7WUFDYkMsS0FBSyxFQUFFLElBQUksQ0FBQzFELEtBQUssQ0FBQ3RCLEtBQUssQ0FBQ3dCLFVBQVUsQ0FBQ1MsRUFBRTtZQUNyQ2dELEtBQUssRUFBRSxFQUFFO1lBQ1RuQixJQUFJLEVBQUVVO1VBQ1YsQ0FBQztVQUNELElBQUksQ0FBQzRFLHFCQUFxQixDQUFDM0UsSUFBSSxDQUFDO1FBQ3BDO01BQ0o7SUFFRCxDQUFDO0lBQ0Q0RSxTQUFTLHFCQUFDQyxJQUFJLEVBQUNoRixLQUFLLEVBQUNpRixRQUFRLEVBQUU7TUFDOUI7TUFDQTtNQUNBO01BQ0EsSUFBR0QsSUFBSSxDQUFDekYsTUFBTSxJQUFFLENBQUMsRUFBQztRQUFFO1FBQ25CLElBQUkyQixLQUFLO1VBQUVnRSxNQUFNO1VBQUNDLE1BQU0sR0FBQyxDQUFDO1FBQzFCLEtBQUksSUFBSTdGLENBQUMsSUFBSSxJQUFJLENBQUN0QyxLQUFLLENBQUNyQixhQUFhLEVBQUM7VUFDckMsS0FBSSxJQUFJK0QsQ0FBQyxJQUFJLElBQUksQ0FBQzFDLEtBQUssQ0FBQ3JCLGFBQWEsQ0FBQzJELENBQUMsQ0FBQyxDQUFDRyxJQUFJLEVBQUM7WUFDN0MsSUFBR3dGLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQ3pGLElBQUksSUFBSSxJQUFJLENBQUN4QyxLQUFLLENBQUNyQixhQUFhLENBQUMyRCxDQUFDLENBQUMsQ0FBQ0csSUFBSSxDQUFDQyxDQUFDLENBQUMsQ0FBQ2xDLElBQUksRUFBQztjQUMvRCxJQUFJLENBQUNSLEtBQUssQ0FBQ3JCLGFBQWEsQ0FBQzJELENBQUMsQ0FBQyxDQUFDRyxJQUFJLENBQUNDLENBQUMsQ0FBQyxDQUFDRSxLQUFLLEdBQUMsRUFBRTtZQUM3QztVQUNEO1FBQ0Q7TUFDRDtNQUVBLEtBQUksSUFBSXdGLENBQUMsSUFBSUosSUFBSSxFQUFDO1FBQ2pCLElBQUk5RCxLQUFLO1VBQUVnRSxNQUFNO1VBQUNDLE1BQU0sR0FBQyxDQUFDO1FBQzFCLEtBQUksSUFBSTdGLENBQUMsSUFBSSxJQUFJLENBQUN0QyxLQUFLLENBQUNyQixhQUFhLEVBQUM7VUFDckMsS0FBSSxJQUFJK0QsQ0FBQyxJQUFJLElBQUksQ0FBQzFDLEtBQUssQ0FBQ3JCLGFBQWEsQ0FBQzJELENBQUMsQ0FBQyxDQUFDRyxJQUFJLEVBQUM7WUFDN0MsSUFBR3VGLElBQUksQ0FBQ0ksQ0FBQyxDQUFDLENBQUM1RixJQUFJLElBQUksSUFBSSxDQUFDeEMsS0FBSyxDQUFDckIsYUFBYSxDQUFDMkQsQ0FBQyxDQUFDLENBQUNHLElBQUksQ0FBQ0MsQ0FBQyxDQUFDLENBQUNsQyxJQUFJLEVBQUM7Y0FDM0QwRCxLQUFLLEdBQUM1QixDQUFDO2NBQUM0RixNQUFNLEdBQUN4RixDQUFDO1lBQ2pCO1VBQ0Q7UUFDRDtRQUNBLElBQUkyRixTQUFTLEdBQUdMLElBQUksQ0FBQ0ksQ0FBQyxDQUFDO1FBQ3ZCLElBQUlkLFNBQVMsR0FBRyxJQUFJLENBQUN0SCxLQUFLLENBQUNyQixhQUFhLENBQUN1RixLQUFLLENBQUMsQ0FBQ3pCLElBQUksQ0FBQ3lGLE1BQU0sQ0FBQztRQUU1RCxhQUFZWixTQUFTO1FBQ3JCLElBQUllLFNBQVMsQ0FBQzdILElBQUksSUFBSThHLFNBQVMsQ0FBQzFFLEtBQUssRUFBRTtVQUN0QyxJQUFJLENBQUM1QyxLQUFLLENBQUNyQixhQUFhLENBQUN1RixLQUFLLENBQUMsQ0FBQ3pCLElBQUksQ0FBQ3lGLE1BQU0sQ0FBQyxDQUFDdEYsS0FBSyxHQUFDSSxLQUFLO1VBQ3hELGFBQVksSUFBSSxDQUFDaEQsS0FBSyxDQUFDckIsYUFBYSxDQUFDdUYsS0FBSyxDQUFDLENBQUN6QixJQUFJLENBQUN5RixNQUFNLENBQUMsQ0FBQ3RGLEtBQUs7VUFDOUQsSUFBSVEsT0FBTyxHQUFHLElBQUksQ0FBQ3BELEtBQUssQ0FBQ3JCLGFBQWEsQ0FBQ3VGLEtBQUssQ0FBQyxDQUFDekIsSUFBSSxDQUFDeUYsTUFBTSxDQUFDLENBQUNOLE1BQU07VUFDakUsSUFBSXhFLE9BQU8sRUFBRTtZQUNOO1lBQ0EsSUFBSUYsR0FBRyxHQUFDLEVBQUU7WUFDVixJQUFJYixRQUFRLEdBQUcsSUFBSSxDQUFDckMsS0FBSyxDQUFDckIsYUFBYTtZQUN2QyxLQUFLLElBQUkyRCxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUdELFFBQVEsQ0FBQ0UsTUFBTSxFQUFFRCxDQUFDLEVBQUUsRUFBRTtjQUN6QyxJQUFJRSxJQUFJLEdBQUdILFFBQVEsQ0FBQ0MsQ0FBQyxDQUFDLENBQUNHLElBQUk7Y0FDM0IsS0FBSyxJQUFJQyxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUdGLElBQUksQ0FBQ0QsTUFBTSxFQUFFRyxDQUFDLEVBQUUsRUFBRTtnQkFDckMsSUFBSUMsRUFBRSxHQUFHSCxJQUFJLENBQUNFLENBQUMsQ0FBQztnQkFDaEIsSUFBR0MsRUFBRSxDQUFDRyxJQUFJLElBQUUsVUFBVSxFQUNyQixJQUFHSCxFQUFFLENBQUNDLEtBQUssSUFBRSxHQUFHLEVBQUVELEVBQUUsQ0FBQ0MsS0FBSyxHQUFDLEVBQUU7Z0JBQzlCLElBQUdELEVBQUUsQ0FBQ0csSUFBSSxJQUFFLE1BQU0sSUFBSUgsRUFBRSxDQUFDRyxJQUFJLElBQUUsTUFBTSxFQUNwQ0ksR0FBRyxDQUFDSCxJQUFJLENBQUM7a0JBQUVQLElBQUksRUFBRUcsRUFBRSxDQUFDbkMsSUFBSTtrQkFBRXFILEdBQUcsRUFBRWxGLEVBQUUsQ0FBQ00sS0FBSyxHQUFFTixFQUFFLENBQUNNLEtBQUssR0FBRTtnQkFBRyxDQUFDLENBQUMsQ0FBQyxLQUNyRCxJQUFHTixFQUFFLENBQUNHLElBQUksSUFBRSxLQUFLLEVBQzNCSSxHQUFHLENBQUNILElBQUksQ0FBQztrQkFBRVAsSUFBSSxFQUFFRyxFQUFFLENBQUNuQyxJQUFJO2tCQUFFcUgsR0FBRyxFQUFFbEYsRUFBRSxDQUFDQyxLQUFLLEdBQUMsR0FBRyxHQUFDO2dCQUFHLENBQUMsQ0FBQyxDQUFDLEtBQ3hDLElBQUdELEVBQUUsQ0FBQ0csSUFBSSxJQUFFLElBQUksSUFBSUgsRUFBRSxDQUFDRyxJQUFJLElBQUUsUUFBUSxJQUFJSCxFQUFFLENBQUNHLElBQUksSUFBRSxPQUFPLEVBQ25FSSxHQUFHLENBQUNILElBQUksQ0FBQztrQkFBRVAsSUFBSSxFQUFFRyxFQUFFLENBQUNuQyxJQUFJO2tCQUFFcUgsR0FBRyxFQUFFUSxTQUFTLENBQUM3SDtnQkFBSSxDQUFDLENBQUMsQ0FBQyxLQUUxQzBDLEdBQUcsQ0FBQ0gsSUFBSSxDQUFDO2tCQUFFUCxJQUFJLEVBQUVHLEVBQUUsQ0FBQ25DLElBQUk7a0JBQUVxSCxHQUFHLEVBQUVsRixFQUFFLENBQUNDLEtBQUssR0FBRUQsRUFBRSxDQUFDQyxLQUFLLEdBQUU7Z0JBQUUsQ0FBQyxDQUFDO2NBQ3pEO1lBQ0Q7WUFDQSxJQUFJTyxJQUFJLEdBQUc7Y0FDUEMsT0FBTyxFQUFFQSxPQUFPO2NBQ2hCQyxNQUFNLEVBQUUsR0FBRztjQUNYQyxTQUFTLEVBQUUsRUFBRTtjQUNiQyxNQUFNLEVBQUUsRUFBRTtjQUNWQyxNQUFNLEVBQUUsRUFBRTtjQUNWQyxTQUFTLEVBQUUsRUFBRTtjQUNiQyxLQUFLLEVBQUUsSUFBSSxDQUFDMUQsS0FBSyxDQUFDdEIsS0FBSyxDQUFDd0IsVUFBVSxDQUFDUyxFQUFFO2NBQ3JDZ0QsS0FBSyxFQUFFLEVBQUU7Y0FDVG5CLElBQUksRUFBRVU7WUFDVixDQUFDO1lBQ0QsSUFBSSxDQUFDNEUscUJBQXFCLENBQUMzRSxJQUFJLENBQUM7VUFDcEM7UUFDSjtNQUNEO0lBR0QsQ0FBQztJQUNEbUYsWUFBWSx3QkFBQ3JHLENBQUMsRUFBRTtNQUNmLGFBQVlBLENBQUMsQ0FBQ2tDLE1BQU07TUFDcEIsSUFBSW5CLEtBQUssR0FBQyxJQUFJLENBQUNoRCxLQUFLLENBQUNYLFlBQVksQ0FBQzRDLENBQUMsQ0FBQ2tDLE1BQU0sQ0FBQ0MsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUNvRCxZQUFZLENBQUN2RixDQUFDLENBQUNrQyxNQUFNLENBQUNDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDM0IsSUFBSSxDQUFDUixDQUFDLENBQUNrQyxNQUFNLENBQUNDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDdUQsUUFBUSxDQUFDMUYsQ0FBQyxDQUFDa0MsTUFBTSxDQUFDbkIsS0FBSyxDQUFDO01BQ2hLLElBQUlzRSxTQUFTLEdBQUcsSUFBSSxDQUFDdEgsS0FBSyxDQUFDWCxZQUFZLENBQUM0QyxDQUFDLENBQUNrQyxNQUFNLENBQUNDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDb0QsWUFBWSxDQUFDdkYsQ0FBQyxDQUFDa0MsTUFBTSxDQUFDQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQzNCLElBQUksQ0FBQ1IsQ0FBQyxDQUFDa0MsTUFBTSxDQUFDQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7TUFDN0ksYUFBWWtELFNBQVM7TUFDckIsSUFBSXRFLEtBQUssQ0FBQ3hDLElBQUksSUFBSThHLFNBQVMsQ0FBQzFFLEtBQUssRUFBRTtRQUNsQyxJQUFJLENBQUM1QyxLQUFLLENBQUNYLFlBQVksQ0FBQzRDLENBQUMsQ0FBQ2tDLE1BQU0sQ0FBQ0MsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUNvRCxZQUFZLENBQUN2RixDQUFDLENBQUNrQyxNQUFNLENBQUNDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDM0IsSUFBSSxDQUFDUixDQUFDLENBQUNrQyxNQUFNLENBQUNDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDeEIsS0FBSyxHQUFDSSxLQUFLLENBQUN4QyxJQUFJO1FBQzlJLGFBQVksSUFBSSxDQUFDUixLQUFLLENBQUNYLFlBQVksQ0FBQzRDLENBQUMsQ0FBQ2tDLE1BQU0sQ0FBQ0MsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUNvRCxZQUFZLENBQUN2RixDQUFDLENBQUNrQyxNQUFNLENBQUNDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDM0IsSUFBSSxDQUFDUixDQUFDLENBQUNrQyxNQUFNLENBQUNDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDeEIsS0FBSztRQUMvSSxJQUFJUSxPQUFPLEdBQUcsSUFBSSxDQUFDcEQsS0FBSyxDQUFDWCxZQUFZLENBQUM0QyxDQUFDLENBQUNrQyxNQUFNLENBQUNDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDb0QsWUFBWSxDQUFDdkYsQ0FBQyxDQUFDa0MsTUFBTSxDQUFDQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQzNCLElBQUksQ0FBQ1IsQ0FBQyxDQUFDa0MsTUFBTSxDQUFDQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQ3dELE1BQU07UUFDbEosSUFBSXhFLE9BQU8sRUFBRTtVQUNOO1VBQ0EsSUFBSUYsR0FBRyxHQUFDLEVBQUU7VUFDVixJQUFJYixRQUFRLEdBQUcsSUFBSSxDQUFDckMsS0FBSyxDQUFDWCxZQUFZLENBQUM0QyxDQUFDLENBQUNrQyxNQUFNLENBQUNDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDb0QsWUFBWTtVQUNoRixLQUFLLElBQUlsRixDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUdELFFBQVEsQ0FBQ0UsTUFBTSxFQUFFRCxDQUFDLEVBQUUsRUFBRTtZQUN6QyxJQUFJRSxJQUFJLEdBQUdILFFBQVEsQ0FBQ0MsQ0FBQyxDQUFDLENBQUNHLElBQUk7WUFDM0IsS0FBSyxJQUFJQyxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUdGLElBQUksQ0FBQ0QsTUFBTSxFQUFFRyxDQUFDLEVBQUUsRUFBRTtjQUNyQyxJQUFJQyxFQUFFLEdBQUdILElBQUksQ0FBQ0UsQ0FBQyxDQUFDO2NBQ2hCLElBQUdDLEVBQUUsQ0FBQ0csSUFBSSxJQUFFLFVBQVUsRUFDckIsSUFBR0gsRUFBRSxDQUFDQyxLQUFLLElBQUUsR0FBRyxFQUFFRCxFQUFFLENBQUNDLEtBQUssR0FBQyxFQUFFO2NBQzlCLElBQUdELEVBQUUsQ0FBQ0csSUFBSSxJQUFFLE1BQU0sSUFBSUgsRUFBRSxDQUFDRyxJQUFJLElBQUUsTUFBTSxFQUNwQ0ksR0FBRyxDQUFDSCxJQUFJLENBQUM7Z0JBQUVQLElBQUksRUFBRUcsRUFBRSxDQUFDbkMsSUFBSTtnQkFBRXFILEdBQUcsRUFBRWxGLEVBQUUsQ0FBQ00sS0FBSyxHQUFFTixFQUFFLENBQUNNLEtBQUssR0FBRTtjQUFHLENBQUMsQ0FBQyxDQUFDLEtBQ3JELElBQUdOLEVBQUUsQ0FBQ0csSUFBSSxJQUFFLEtBQUssRUFDM0JJLEdBQUcsQ0FBQ0gsSUFBSSxDQUFDO2dCQUFFUCxJQUFJLEVBQUVHLEVBQUUsQ0FBQ25DLElBQUk7Z0JBQUVxSCxHQUFHLEVBQUVsRixFQUFFLENBQUNDLEtBQUssR0FBQyxHQUFHLEdBQUM7Y0FBRyxDQUFDLENBQUMsQ0FBQyxLQUU1Q00sR0FBRyxDQUFDSCxJQUFJLENBQUM7Z0JBQUVQLElBQUksRUFBRUcsRUFBRSxDQUFDbkMsSUFBSTtnQkFBRXFILEdBQUcsRUFBRWxGLEVBQUUsQ0FBQ0MsS0FBSyxHQUFFRCxFQUFFLENBQUNDLEtBQUssR0FBRTtjQUFFLENBQUMsQ0FBQztZQUN6RDtVQUNEO1VBQ0EsSUFBSU8sSUFBSSxHQUFHO1lBQ1BDLE9BQU8sRUFBRUEsT0FBTztZQUNoQkMsTUFBTSxFQUFFLEdBQUc7WUFDWEMsU0FBUyxFQUFFLEVBQUU7WUFDYkMsTUFBTSxFQUFFLEVBQUU7WUFDVkMsTUFBTSxFQUFFLEVBQUU7WUFDVkMsU0FBUyxFQUFFLEVBQUU7WUFDYkMsS0FBSyxFQUFFLElBQUksQ0FBQzFELEtBQUssQ0FBQ3RCLEtBQUssQ0FBQ2tELE9BQU8sQ0FBQ2pCLEVBQUU7WUFDbENnRCxLQUFLLEVBQUUsRUFBRTtZQUNUbkIsSUFBSSxFQUFFVTtVQUNWLENBQUM7VUFDRCxJQUFJLENBQUM0RSxxQkFBcUIsQ0FBQzNFLElBQUksQ0FBQztRQUNwQztNQUNKO0lBRUQsQ0FBQztJQUNEb0YsYUFBYSx5QkFBQ1AsSUFBSSxFQUFDaEYsS0FBSyxFQUFDaUYsUUFBUSxFQUFFO01BQ2xDO01BQ0E7TUFDQTtNQUNBLElBQUlULFlBQVksR0FBRyxJQUFJLENBQUN4SCxLQUFLLENBQUNYLFlBQVksQ0FBQzRDLENBQUMsQ0FBQ2tDLE1BQU0sQ0FBQ0MsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUNvRCxZQUFZO01BQ3BGLElBQUdRLElBQUksQ0FBQ3pGLE1BQU0sSUFBRSxDQUFDLEVBQUM7UUFBRTtRQUNuQixJQUFJMkIsS0FBSztVQUFFZ0UsTUFBTTtVQUFDQyxNQUFNLEdBQUMsQ0FBQztRQUMxQixLQUFJLElBQUk3RixDQUFDLElBQUlrRixZQUFZLEVBQUM7VUFDekIsS0FBSSxJQUFJOUUsQ0FBQyxJQUFJOEUsWUFBWSxDQUFDbEYsQ0FBQyxDQUFDLENBQUNHLElBQUksRUFBQztZQUNqQyxLQUFJLElBQUkrRixDQUFDLElBQUloQixZQUFZLENBQUNsRixDQUFDLENBQUMsQ0FBQ0csSUFBSSxDQUFDQyxDQUFDLENBQUMsQ0FBQ2lGLFFBQVEsRUFBQztjQUM3QyxJQUFHTSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUN6SCxJQUFJLElBQUlnSCxZQUFZLENBQUNsRixDQUFDLENBQUMsQ0FBQ0csSUFBSSxDQUFDQyxDQUFDLENBQUMsQ0FBQ2lGLFFBQVEsQ0FBQ2EsQ0FBQyxDQUFDLENBQUNoSSxJQUFJLEVBQUM7Z0JBQy9EZ0gsWUFBWSxDQUFDbEYsQ0FBQyxDQUFDLENBQUNHLElBQUksQ0FBQ0MsQ0FBQyxDQUFDLENBQUNFLEtBQUssR0FBQyxFQUFFO2NBQ2pDO1lBQ0Q7VUFDRDtRQUNEO01BQ0Q7TUFFQSxLQUFJLElBQUl3RixDQUFDLElBQUlKLElBQUksRUFBQztRQUNqQixJQUFJOUQsS0FBSztVQUFFZ0UsTUFBTTtVQUFDQyxNQUFNLEdBQUMsQ0FBQztRQUMxQixLQUFJLElBQUk3RixDQUFDLElBQUlrRixZQUFZLEVBQUM7VUFDekIsS0FBSSxJQUFJOUUsQ0FBQyxJQUFJOEUsWUFBWSxDQUFDbEYsQ0FBQyxDQUFDLENBQUNHLElBQUksRUFBQztZQUNqQyxLQUFJLElBQUkrRixDQUFDLElBQUloQixZQUFZLENBQUNsRixDQUFDLENBQUMsQ0FBQ0csSUFBSSxDQUFDQyxDQUFDLENBQUMsQ0FBQ2lGLFFBQVEsRUFBQztjQUM3QyxJQUFHSyxJQUFJLENBQUNJLENBQUMsQ0FBQyxDQUFDNUgsSUFBSSxJQUFJZ0gsWUFBWSxDQUFDbEYsQ0FBQyxDQUFDLENBQUNHLElBQUksQ0FBQ0MsQ0FBQyxDQUFDLENBQUNpRixRQUFRLENBQUNhLENBQUMsQ0FBQyxDQUFDaEksSUFBSSxFQUFDO2dCQUMzRDBELEtBQUssR0FBQzVCLENBQUM7Z0JBQUM0RixNQUFNLEdBQUN4RixDQUFDO2dCQUFDeUYsTUFBTSxHQUFDSyxDQUFDO2NBQzFCO1lBQ0Q7VUFDRDtRQUNEO1FBQ0EsSUFBSUgsU0FBUyxHQUFHTCxJQUFJLENBQUNJLENBQUMsQ0FBQztRQUN2QixJQUFJZCxTQUFTLEdBQUdFLFlBQVksQ0FBQ3RELEtBQUssQ0FBQyxDQUFDekIsSUFBSSxDQUFDeUYsTUFBTSxDQUFDO1FBRWhELGFBQVlaLFNBQVM7UUFDckIsSUFBSWUsU0FBUyxDQUFDN0gsSUFBSSxJQUFJOEcsU0FBUyxDQUFDMUUsS0FBSyxFQUFFO1VBQ3RDNEUsWUFBWSxDQUFDdEQsS0FBSyxDQUFDLENBQUN6QixJQUFJLENBQUN5RixNQUFNLENBQUMsQ0FBQ3RGLEtBQUssR0FBQ0ksS0FBSztVQUM1QyxhQUFZd0UsWUFBWSxDQUFDdEQsS0FBSyxDQUFDLENBQUN6QixJQUFJLENBQUN5RixNQUFNLENBQUMsQ0FBQ3RGLEtBQUs7VUFDbEQsSUFBSVEsT0FBTyxHQUFHb0UsWUFBWSxDQUFDdEQsS0FBSyxDQUFDLENBQUN6QixJQUFJLENBQUN5RixNQUFNLENBQUMsQ0FBQ04sTUFBTTtVQUNyRCxJQUFJeEUsT0FBTyxFQUFFO1lBQ047WUFDQSxJQUFJRixHQUFHLEdBQUMsRUFBRTtZQUNWLElBQUliLFFBQVEsR0FBR21GLFlBQVk7WUFDM0IsS0FBSyxJQUFJbEYsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHRCxRQUFRLENBQUNFLE1BQU0sRUFBRUQsQ0FBQyxFQUFFLEVBQUU7Y0FDekMsSUFBSUUsSUFBSSxHQUFHSCxRQUFRLENBQUNDLENBQUMsQ0FBQyxDQUFDRyxJQUFJO2NBQzNCLEtBQUssSUFBSUMsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHRixJQUFJLENBQUNELE1BQU0sRUFBRUcsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3JDLElBQUlDLEVBQUUsR0FBR0gsSUFBSSxDQUFDRSxDQUFDLENBQUM7Z0JBQ2hCLElBQUdDLEVBQUUsQ0FBQ0csSUFBSSxJQUFFLFVBQVUsRUFDckIsSUFBR0gsRUFBRSxDQUFDQyxLQUFLLElBQUUsR0FBRyxFQUFFRCxFQUFFLENBQUNDLEtBQUssR0FBQyxFQUFFO2dCQUM5QixJQUFHRCxFQUFFLENBQUNHLElBQUksSUFBRSxNQUFNLElBQUlILEVBQUUsQ0FBQ0csSUFBSSxJQUFFLE1BQU0sRUFDcENJLEdBQUcsQ0FBQ0gsSUFBSSxDQUFDO2tCQUFFUCxJQUFJLEVBQUVHLEVBQUUsQ0FBQ25DLElBQUk7a0JBQUVxSCxHQUFHLEVBQUVsRixFQUFFLENBQUNNLEtBQUssR0FBRU4sRUFBRSxDQUFDTSxLQUFLLEdBQUU7Z0JBQUcsQ0FBQyxDQUFDLENBQUMsS0FDckQsSUFBR04sRUFBRSxDQUFDRyxJQUFJLElBQUUsS0FBSyxFQUMzQkksR0FBRyxDQUFDSCxJQUFJLENBQUM7a0JBQUVQLElBQUksRUFBRUcsRUFBRSxDQUFDbkMsSUFBSTtrQkFBRXFILEdBQUcsRUFBRWxGLEVBQUUsQ0FBQ0MsS0FBSyxHQUFDLEdBQUcsR0FBQztnQkFBRyxDQUFDLENBQUMsQ0FBQyxLQUN4QyxJQUFHRCxFQUFFLENBQUNHLElBQUksSUFBRSxJQUFJLElBQUlILEVBQUUsQ0FBQ0csSUFBSSxJQUFFLFFBQVEsSUFBSUgsRUFBRSxDQUFDRyxJQUFJLElBQUUsT0FBTyxFQUNuRUksR0FBRyxDQUFDSCxJQUFJLENBQUM7a0JBQUVQLElBQUksRUFBRUcsRUFBRSxDQUFDbkMsSUFBSTtrQkFBRXFILEdBQUcsRUFBRVEsU0FBUyxDQUFDN0g7Z0JBQUksQ0FBQyxDQUFDLENBQUMsS0FFMUMwQyxHQUFHLENBQUNILElBQUksQ0FBQztrQkFBRVAsSUFBSSxFQUFFRyxFQUFFLENBQUNuQyxJQUFJO2tCQUFFcUgsR0FBRyxFQUFFbEYsRUFBRSxDQUFDQyxLQUFLLEdBQUVELEVBQUUsQ0FBQ0MsS0FBSyxHQUFFO2dCQUFFLENBQUMsQ0FBQztjQUN6RDtZQUNEO1lBQ0EsSUFBSU8sSUFBSSxHQUFHO2NBQ1BDLE9BQU8sRUFBRUEsT0FBTztjQUNoQkMsTUFBTSxFQUFFLEdBQUc7Y0FDWEMsU0FBUyxFQUFFLEVBQUU7Y0FDYkMsTUFBTSxFQUFFLEVBQUU7Y0FDVkMsTUFBTSxFQUFFLEVBQUU7Y0FDVkMsU0FBUyxFQUFFLEVBQUU7Y0FDYkMsS0FBSyxFQUFFLElBQUksQ0FBQzFELEtBQUssQ0FBQ3RCLEtBQUssQ0FBQ2tELE9BQU8sQ0FBQ2pCLEVBQUU7Y0FDbENnRCxLQUFLLEVBQUUsRUFBRTtjQUNUbkIsSUFBSSxFQUFFVTtZQUNWLENBQUM7WUFDRCxJQUFJLENBQUM0RSxxQkFBcUIsQ0FBQzNFLElBQUksQ0FBQztVQUNwQztRQUNKO01BQ0Q7SUFHRCxDQUFDO0lBQ0RzRixPQUFPLG1CQUFDeEcsQ0FBQyxFQUFDO01BQ1Q7TUFDQSxJQUFJcUYsU0FBUyxHQUFHLElBQUksQ0FBQ3RILEtBQUssQ0FBQ3JCLGFBQWEsQ0FBQ3NELENBQUMsQ0FBQ2tDLE1BQU0sQ0FBQ0MsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMzQixJQUFJLENBQUNSLENBQUMsQ0FBQ2tDLE1BQU0sQ0FBQ0MsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO01BQ3BHLElBQUcsQ0FBQ2tELFNBQVMsRUFBQztRQUNiLElBQUksQ0FBQ3RILEtBQUssQ0FBQ1gsWUFBWSxDQUFDNEMsQ0FBQyxDQUFDa0MsTUFBTSxDQUFDQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQ29ELFlBQVksQ0FBQ3ZGLENBQUMsQ0FBQ2tDLE1BQU0sQ0FBQ0MsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMzQixJQUFJLENBQUNSLENBQUMsQ0FBQ2tDLE1BQU0sQ0FBQ0MsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUN4QixLQUFLLEdBQUNYLENBQUMsQ0FBQ2tDLE1BQU0sQ0FBQ25CLEtBQUs7UUFDbEo7TUFDRDtNQUNBO01BQ0EsSUFBSWYsQ0FBQyxDQUFDa0MsTUFBTSxDQUFDbkIsS0FBSyxJQUFJc0UsU0FBUyxDQUFDMUUsS0FBSyxFQUFFO1FBQ3RDLElBQUksQ0FBQzVDLEtBQUssQ0FBQ3JCLGFBQWEsQ0FBQ3NELENBQUMsQ0FBQ2tDLE1BQU0sQ0FBQ0MsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMzQixJQUFJLENBQUNSLENBQUMsQ0FBQ2tDLE1BQU0sQ0FBQ0MsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUN4QixLQUFLLEdBQUNYLENBQUMsQ0FBQ2tDLE1BQU0sQ0FBQ25CLEtBQUs7UUFDekc7UUFDQTtRQUNBLElBQUlJLE9BQU8sR0FBRyxJQUFJLENBQUNwRCxLQUFLLENBQUN0QixLQUFLLENBQUN5RCxTQUFTLENBQUMwRSxrQkFBa0IsQ0FBQ2xHLEVBQUU7UUFDOUQsSUFBSXlDLE9BQU8sRUFBRTtVQUNOO1VBQ0EsSUFBSUYsR0FBRyxHQUFDLEVBQUU7VUFDVixJQUFJYixRQUFRLEdBQUcsSUFBSSxDQUFDckMsS0FBSyxDQUFDckIsYUFBYSxDQUFDLENBQUU7VUFDMUMsS0FBSyxJQUFJMkQsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHRCxRQUFRLENBQUNFLE1BQU0sRUFBRUQsQ0FBQyxFQUFFLEVBQUU7WUFDekMsSUFBSUUsSUFBSSxHQUFHSCxRQUFRLENBQUNDLENBQUMsQ0FBQyxDQUFDRyxJQUFJO1lBQzNCLEtBQUssSUFBSUMsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHRixJQUFJLENBQUNELE1BQU0sRUFBRUcsQ0FBQyxFQUFFLEVBQUU7Y0FDckMsSUFBSUMsRUFBRSxHQUFHSCxJQUFJLENBQUNFLENBQUMsQ0FBQztjQUNoQixJQUFHQyxFQUFFLENBQUNHLElBQUksSUFBRSxVQUFVLEVBQ3JCLElBQUdILEVBQUUsQ0FBQ0MsS0FBSyxJQUFFLEdBQUcsRUFBRUQsRUFBRSxDQUFDQyxLQUFLLEdBQUMsRUFBRTtjQUM5QixJQUFHRCxFQUFFLENBQUNHLElBQUksSUFBRSxNQUFNLElBQUlILEVBQUUsQ0FBQ0csSUFBSSxJQUFFLE1BQU0sRUFDcENJLEdBQUcsQ0FBQ0gsSUFBSSxDQUFDO2dCQUFFUCxJQUFJLEVBQUVHLEVBQUUsQ0FBQ25DLElBQUk7Z0JBQUV3QyxLQUFLLEVBQUVMLEVBQUUsQ0FBQ00sS0FBSyxHQUFFTixFQUFFLENBQUNNLEtBQUssR0FBRTtjQUFHLENBQUMsQ0FBQyxDQUFDLEtBQ3ZELElBQUdOLEVBQUUsQ0FBQ0csSUFBSSxJQUFFLEtBQUssRUFDckJJLEdBQUcsQ0FBQ0gsSUFBSSxDQUFDO2dCQUFFUCxJQUFJLEVBQUVHLEVBQUUsQ0FBQ25DLElBQUk7Z0JBQUV3QyxLQUFLLEVBQUVMLEVBQUUsQ0FBQ0MsS0FBSyxHQUFDLEdBQUcsR0FBQztjQUFHLENBQUMsQ0FBQyxDQUFDLEtBRXBETSxHQUFHLENBQUNILElBQUksQ0FBQztnQkFBRVAsSUFBSSxFQUFFRyxFQUFFLENBQUNuQyxJQUFJO2dCQUFFd0MsS0FBSyxFQUFFTCxFQUFFLENBQUNDLEtBQUssR0FBRUQsRUFBRSxDQUFDQyxLQUFLLEdBQUU7Y0FBRSxDQUFDLENBQUM7WUFDM0Q7VUFDRDtVQUNBLElBQUlPLElBQUksR0FBRztZQUNQQyxPQUFPLEVBQUVBLE9BQU87WUFDaEJDLE1BQU0sRUFBRSxHQUFHO1lBQUM7WUFDWkMsU0FBUyxFQUFFLEVBQUU7WUFDYkMsTUFBTSxFQUFFLEVBQUU7WUFDVkMsTUFBTSxFQUFFLEVBQUU7WUFDVkMsU0FBUyxFQUFFLEVBQUU7WUFDYkMsS0FBSyxFQUFFLE1BQU07WUFBQztZQUNkQyxLQUFLLEVBQUUsRUFBRTtZQUNUbkIsSUFBSSxFQUFFVSxHQUFHO1lBQ1pkLFNBQVMsRUFBRSxFQUFFO1lBQ2J3QixhQUFhLEVBQUMsQ0FBQztjQUFFcEIsSUFBSSxFQUFFLGlCQUFpQjtjQUFFUSxLQUFLLEVBQUVmLENBQUMsQ0FBQ2tDLE1BQU0sQ0FBQ25CO1lBQU0sQ0FBQztVQUNsRSxDQUFDO1VBRUQsSUFBSSxDQUFDYSwwQkFBMEIsQ0FBQ1YsSUFBSSxFQUFFLEVBQUUsQ0FBQztRQUM3QztNQUNKO0lBRUQsQ0FBQztJQUNEdUYsT0FBTyxtQkFBQ3pHLENBQUMsRUFBRTtNQUNWO01BQ0EsSUFBSTBHLFNBQVMsR0FBRzFHLENBQUMsQ0FBQ2tDLE1BQU0sQ0FBQ0MsT0FBTyxDQUFDQyxPQUFPLEdBQUMsS0FBSyxHQUFDLElBQUk7TUFDbkQsSUFBSWlELFNBQVMsR0FBRyxJQUFJLENBQUN0SCxLQUFLLENBQUNyQixhQUFhLENBQUNzRCxDQUFDLENBQUNrQyxNQUFNLENBQUNDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDM0IsSUFBSSxDQUFDUixDQUFDLENBQUNrQyxNQUFNLENBQUNDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztNQUNwRyxJQUFHLENBQUNrRCxTQUFTLEVBQUM7UUFDYixJQUFJLENBQUN0SCxLQUFLLENBQUNYLFlBQVksQ0FBQzRDLENBQUMsQ0FBQ2tDLE1BQU0sQ0FBQ0MsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUNvRCxZQUFZLENBQUN2RixDQUFDLENBQUNrQyxNQUFNLENBQUNDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDM0IsSUFBSSxDQUFDUixDQUFDLENBQUNrQyxNQUFNLENBQUNDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDeEIsS0FBSyxHQUFDK0YsU0FBUztRQUM3STtNQUNEO01BQ0E7TUFDQSxJQUFJQSxTQUFTLElBQUlyQixTQUFTLENBQUMxRSxLQUFLLEVBQUU7UUFDakMsSUFBSSxDQUFDNUMsS0FBSyxDQUFDckIsYUFBYSxDQUFDc0QsQ0FBQyxDQUFDa0MsTUFBTSxDQUFDQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQzNCLElBQUksQ0FBQ1IsQ0FBQyxDQUFDa0MsTUFBTSxDQUFDQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQ3hCLEtBQUssR0FBQytGLFNBQVM7UUFDcEcsSUFBSXZGLE9BQU8sR0FBRyxJQUFJLENBQUNwRCxLQUFLLENBQUNyQixhQUFhLENBQUNzRCxDQUFDLENBQUNrQyxNQUFNLENBQUNDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDM0IsSUFBSSxDQUFDUixDQUFDLENBQUNrQyxNQUFNLENBQUNDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDd0QsTUFBTTtRQUN6RyxJQUFJeEUsT0FBTyxFQUFFO1VBQ047VUFDQSxJQUFJRixHQUFHLEdBQUMsRUFBRTtVQUNWLElBQUliLFFBQVEsR0FBRyxJQUFJLENBQUNyQyxLQUFLLENBQUNyQixhQUFhO1VBQ3ZDLEtBQUssSUFBSTJELENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBR0QsUUFBUSxDQUFDRSxNQUFNLEVBQUVELENBQUMsRUFBRSxFQUFFO1lBQ3pDLElBQUlFLElBQUksR0FBR0gsUUFBUSxDQUFDQyxDQUFDLENBQUMsQ0FBQ0csSUFBSTtZQUMzQixLQUFLLElBQUlDLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBR0YsSUFBSSxDQUFDRCxNQUFNLEVBQUVHLENBQUMsRUFBRSxFQUFFO2NBQ3JDLElBQUlDLEVBQUUsR0FBR0gsSUFBSSxDQUFDRSxDQUFDLENBQUM7Y0FDaEIsSUFBR0MsRUFBRSxDQUFDRyxJQUFJLElBQUUsVUFBVSxFQUNyQixJQUFHSCxFQUFFLENBQUNDLEtBQUssSUFBRSxHQUFHLEVBQUVELEVBQUUsQ0FBQ0MsS0FBSyxHQUFDLEVBQUU7Y0FDOUIsSUFBR0QsRUFBRSxDQUFDRyxJQUFJLElBQUUsTUFBTSxJQUFJSCxFQUFFLENBQUNHLElBQUksSUFBRSxNQUFNLEVBQ3BDSSxHQUFHLENBQUNILElBQUksQ0FBQztnQkFBRVAsSUFBSSxFQUFFRyxFQUFFLENBQUNuQyxJQUFJO2dCQUFFcUgsR0FBRyxFQUFFbEYsRUFBRSxDQUFDTSxLQUFLLEdBQUVOLEVBQUUsQ0FBQ00sS0FBSyxHQUFFO2NBQUcsQ0FBQyxDQUFDLENBQUMsS0FDckQsSUFBR04sRUFBRSxDQUFDRyxJQUFJLElBQUUsS0FBSyxFQUMzQkksR0FBRyxDQUFDSCxJQUFJLENBQUM7Z0JBQUVQLElBQUksRUFBRUcsRUFBRSxDQUFDbkMsSUFBSTtnQkFBRXFILEdBQUcsRUFBRWxGLEVBQUUsQ0FBQ0MsS0FBSyxHQUFDLEdBQUcsR0FBQztjQUFHLENBQUMsQ0FBQyxDQUFDLEtBRWxETSxHQUFHLENBQUNILElBQUksQ0FBQztnQkFBRVAsSUFBSSxFQUFFRyxFQUFFLENBQUNuQyxJQUFJO2dCQUFFcUgsR0FBRyxFQUFFbEYsRUFBRSxDQUFDQyxLQUFLLEdBQUVELEVBQUUsQ0FBQ0MsS0FBSyxHQUFFO2NBQUUsQ0FBQyxDQUFDO1lBRW5EO1VBQ0Q7VUFDQSxJQUFJTyxJQUFJLEdBQUc7WUFDUEMsT0FBTyxFQUFFQSxPQUFPO1lBQ2hCQyxNQUFNLEVBQUUsR0FBRztZQUNYQyxTQUFTLEVBQUUsRUFBRTtZQUNiQyxNQUFNLEVBQUUsRUFBRTtZQUNWQyxNQUFNLEVBQUUsRUFBRTtZQUNWQyxTQUFTLEVBQUUsRUFBRTtZQUNiQyxLQUFLLEVBQUUsSUFBSSxDQUFDMUQsS0FBSyxDQUFDdEIsS0FBSyxDQUFDd0IsVUFBVSxDQUFDUyxFQUFFO1lBQ3JDZ0QsS0FBSyxFQUFFLEVBQUU7WUFDVG5CLElBQUksRUFBRVU7VUFDVixDQUFDO1VBQ0QsSUFBSSxDQUFDNEUscUJBQXFCLENBQUMzRSxJQUFJLENBQUM7UUFDcEM7TUFDSjtJQUVELENBQUM7SUFDRHlGLGlCQUFpQiw2QkFBQzFFLEtBQUssRUFBQztNQUN2QjtNQUNZLElBQUksQ0FBQ2xFLEtBQUssQ0FBQzZJLFlBQVksQ0FBQ3RELE1BQU0sQ0FBQ3JCLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ3REO0lBQ0QsQ0FBQztJQUNENEUsYUFBYSx5QkFBQzdHLENBQUMsRUFBRTtNQUNiO01BQ0EsYUFBWUEsQ0FBQyxDQUFDekQsSUFBSSxDQUFDdUssSUFBSSxDQUFDLEdBQUcsQ0FBQztNQUMvQixJQUFJLENBQUMvSSxLQUFLLENBQUNaLGdCQUFnQixDQUFDNkMsQ0FBQyxDQUFDa0MsTUFBTSxDQUFDQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQzNCLElBQUksQ0FBQ1IsQ0FBQyxDQUFDa0MsTUFBTSxDQUFDQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQ3hCLEtBQUssR0FBQ1gsQ0FBQyxDQUFDekQsSUFBSSxDQUFDdUssSUFBSSxDQUFDLEdBQUcsQ0FBQztJQUMvRyxDQUFDO0lBQ0RDLG1CQUFtQiwrQkFBQzlFLEtBQUssRUFBQ2dFLE1BQU0sRUFBQztNQUNoQyxJQUFJdEgsS0FBSyxHQUFHLElBQUk7TUFDaEIsSUFBSXFJLG1CQUFtQixHQUFHckksS0FBSyxDQUFDWixLQUFLLENBQUNyQixhQUFhLENBQUN1RixLQUFLLENBQUMsQ0FBQ3pCLElBQUksQ0FBQ3lGLE1BQU0sQ0FBQyxDQUFDZSxtQkFBbUI7TUFDM0YsSUFBSUMsZUFBZSxHQUFHdEksS0FBSyxDQUFDWixLQUFLLENBQUNyQixhQUFhLENBQUN1RixLQUFLLENBQUMsQ0FBQ3pCLElBQUksQ0FBQ3lGLE1BQU0sQ0FBQyxDQUFDZ0IsZUFBZTtNQUNuRixJQUFHLENBQUNELG1CQUFtQixFQUFDO1FBQ3ZCdEosR0FBRyxDQUFDUyxTQUFTLENBQUM7VUFBQzNCLEtBQUssRUFBQyxJQUFJO1VBQUM0QixPQUFPLEVBQUMsaUNBQWlDO1VBQUNDLFVBQVUsRUFBQyxLQUFLO1VBQUNDLFdBQVcsRUFBQztRQUFJLENBQUMsQ0FBQztRQUN2RztNQUNEO01BQ0EsSUFBRyxDQUFDMkksZUFBZSxFQUFDO1FBQ25CdkosR0FBRyxDQUFDUyxTQUFTLENBQUM7VUFBQzNCLEtBQUssRUFBQyxJQUFJO1VBQUM0QixPQUFPLEVBQUMsNkJBQTZCO1VBQUNDLFVBQVUsRUFBQyxLQUFLO1VBQUNDLFdBQVcsRUFBQztRQUFJLENBQUMsQ0FBQztRQUNuRztNQUNEO01BQ0EsSUFBSStHLFNBQVMsR0FBRyxJQUFJLENBQUN0SCxLQUFLLENBQUNyQixhQUFhLENBQUN1RixLQUFLLENBQUMsQ0FBQ3pCLElBQUksQ0FBQ3lGLE1BQU0sQ0FBQztNQUM1RCxJQUFJLENBQUNpQiw0QkFBNEIsQ0FBQ0YsbUJBQW1CLEVBQUUzQixTQUFTLEVBQUU0QixlQUFlLEVBQUVoRixLQUFLLEVBQUNnRSxNQUFNLENBQUM7SUFDakcsQ0FBQztJQUNEa0IsZ0JBQWdCLDRCQUFDbEYsS0FBSyxFQUFDZ0UsTUFBTSxFQUFDO01BQzdCLElBQUl4SixLQUFLLEdBQUM7UUFBQ3dGLEtBQUssRUFBQ0EsS0FBSztRQUFDZ0UsTUFBTSxFQUFDQTtNQUFNLENBQUM7TUFDckMsSUFBSXRILEtBQUssR0FBRyxJQUFJO01BQ2hCakIsR0FBRyxDQUFDMEosVUFBVSxDQUFDO1FBQ2RDLEdBQUcsRUFBQyxvQ0FBb0MsR0FBQ3hKLElBQUksQ0FBQ3lKLFNBQVMsQ0FBQzdLLEtBQUssQ0FBQztRQUM5RDhLLE1BQU0sRUFBQztVQUNOQyxNQUFNLGtCQUFDakwsSUFBSSxFQUFDRSxLQUFLLEVBQUM7WUFDakI7WUFDQSxhQUFZRixJQUFJO1lBQ2hCb0MsS0FBSyxDQUFDWixLQUFLLENBQUNyQixhQUFhLENBQUNELEtBQUssQ0FBQ3dGLEtBQUssQ0FBQyxDQUFDekIsSUFBSSxDQUFDL0QsS0FBSyxDQUFDd0osTUFBTSxDQUFDLENBQUN0RixLQUFLLEdBQUNwRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUNnQyxJQUFJO1lBQzVFSSxLQUFLLENBQUNaLEtBQUssQ0FBQ3JCLGFBQWEsQ0FBQ0QsS0FBSyxDQUFDd0YsS0FBSyxDQUFDLENBQUN6QixJQUFJLENBQUMvRCxLQUFLLENBQUN3SixNQUFNLENBQUMsQ0FBQ2pGLEtBQUssR0FBQ3pFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQ2tMLEtBQUssR0FBQyxHQUFHLEdBQUNsTCxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUNnQyxJQUFJO1lBRTlGLElBQUk0QyxPQUFPLEdBQUd4QyxLQUFLLENBQUNaLEtBQUssQ0FBQ3JCLGFBQWEsQ0FBQ0QsS0FBSyxDQUFDd0YsS0FBSyxDQUFDLENBQUN6QixJQUFJLENBQUMvRCxLQUFLLENBQUN3SixNQUFNLENBQUMsQ0FBQ04sTUFBTTtZQUM5RSxJQUFJeEUsT0FBTyxFQUFFO2NBQ1RBLE9BQU8sR0FBR0EsT0FBTyxDQUFDdUcsSUFBSSxFQUFFO2NBQ3hCLElBQUl2RyxPQUFPLEVBQUU7Z0JBQ1QsSUFBSUQsSUFBSSxHQUFHO2tCQUNQQyxPQUFPLEVBQUVBLE9BQU87a0JBQ2hCQyxNQUFNLEVBQUUsR0FBRztrQkFDWEMsU0FBUyxFQUFFLEVBQUU7a0JBQ2JDLE1BQU0sRUFBRSxFQUFFO2tCQUNWQyxNQUFNLEVBQUUsRUFBRTtrQkFDVkMsU0FBUyxFQUFFakYsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDa0wsS0FBSztrQkFDeEJoRyxLQUFLLEVBQUU5QyxLQUFLLENBQUNaLEtBQUssQ0FBQ3RCLEtBQUssQ0FBQ3dCLFVBQVUsQ0FBQ1MsRUFBRTtrQkFDdENnRCxLQUFLLEVBQUUsRUFBRTtrQkFDVG5CLElBQUksRUFBRTtnQkFDVixDQUFDOztnQkFFUDtnQkFDTTVCLEtBQUssQ0FBQ2tILHFCQUFxQixDQUFDM0UsSUFBSSxDQUFDO2NBQ3JDO1lBQ0o7VUFDRDtRQUNEO01BQ0QsQ0FBQyxDQUFDO0lBQ0gsQ0FBQztJQUNEeUcsZ0JBQWdCLDRCQUFDM0gsQ0FBQyxFQUFDO01BQ2xCLGFBQVlBLENBQUMsQ0FBQ2tDLE1BQU07TUFDcEJ4RSxHQUFHLENBQUNTLFNBQVMsQ0FBQztRQUFDM0IsS0FBSyxFQUFDLElBQUk7UUFBQzRCLE9BQU8sRUFBQyxVQUFVO1FBQUNDLFVBQVUsRUFBQyxLQUFLO1FBQUNDLFdBQVcsRUFBQztNQUFJLENBQUMsQ0FBQztNQUNoRjtNQUNBO0lBQ0QsQ0FBQztJQUNEc0osZ0JBQWdCLDRCQUFDM0YsS0FBSyxFQUFDZ0UsTUFBTSxFQUFDO01BQzdCLElBQUl4SixLQUFLLEdBQUM7UUFBQ3dGLEtBQUssRUFBQ0EsS0FBSztRQUFDZ0UsTUFBTSxFQUFDQTtNQUFNLENBQUM7TUFDckMsSUFBSXRILEtBQUssR0FBRyxJQUFJO01BQ2hCakIsR0FBRyxDQUFDMEosVUFBVSxDQUFDO1FBQ2RDLEdBQUcsRUFBQyxvQ0FBb0MsR0FBQ3hKLElBQUksQ0FBQ3lKLFNBQVMsQ0FBQzdLLEtBQUssQ0FBQztRQUM5RDhLLE1BQU0sRUFBQztVQUNOQyxNQUFNLGtCQUFDakwsSUFBSSxFQUFDRSxLQUFLLEVBQUM7WUFDakI7WUFDQTtZQUNBa0MsS0FBSyxDQUFDWixLQUFLLENBQUNyQixhQUFhLENBQUNELEtBQUssQ0FBQ3dGLEtBQUssQ0FBQyxDQUFDekIsSUFBSSxDQUFDL0QsS0FBSyxDQUFDd0osTUFBTSxDQUFDLENBQUN0RixLQUFLLEdBQUNwRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUNnQyxJQUFJO1lBQzVFSSxLQUFLLENBQUNaLEtBQUssQ0FBQ3JCLGFBQWEsQ0FBQ0QsS0FBSyxDQUFDd0YsS0FBSyxDQUFDLENBQUN6QixJQUFJLENBQUMvRCxLQUFLLENBQUN3SixNQUFNLENBQUMsQ0FBQ2pGLEtBQUssR0FBQ3pFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQ21DLEVBQUUsR0FBQyxHQUFHLEdBQUNuQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUNnQyxJQUFJO1lBRTNGLElBQUk0QyxPQUFPLEdBQUd4QyxLQUFLLENBQUNaLEtBQUssQ0FBQ3JCLGFBQWEsQ0FBQ0QsS0FBSyxDQUFDd0YsS0FBSyxDQUFDLENBQUN6QixJQUFJLENBQUMvRCxLQUFLLENBQUN3SixNQUFNLENBQUMsQ0FBQ04sTUFBTTtZQUM5RSxJQUFJeEUsT0FBTyxFQUFFO2NBQ1RBLE9BQU8sR0FBR0EsT0FBTyxDQUFDdUcsSUFBSSxFQUFFO2NBQ3hCLElBQUl2RyxPQUFPLEVBQUU7Z0JBQ1QsSUFBSUQsSUFBSSxHQUFHO2tCQUNQQyxPQUFPLEVBQUVBLE9BQU87a0JBQ2hCQyxNQUFNLEVBQUUsR0FBRztrQkFDWEMsU0FBUyxFQUFFOUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDbUMsRUFBRTtrQkFDckI0QyxNQUFNLEVBQUUsRUFBRTtrQkFDVkMsTUFBTSxFQUFFLEVBQUU7a0JBQ1ZDLFNBQVMsRUFBRSxFQUFFO2tCQUNiQyxLQUFLLEVBQUU5QyxLQUFLLENBQUNaLEtBQUssQ0FBQ3RCLEtBQUssQ0FBQ3dCLFVBQVUsQ0FBQ1MsRUFBRTtrQkFDdENnRCxLQUFLLEVBQUUsRUFBRTtrQkFDVG5CLElBQUksRUFBRTtnQkFDVixDQUFDOztnQkFFRDtnQkFDQTVCLEtBQUssQ0FBQ2tILHFCQUFxQixDQUFDM0UsSUFBSSxDQUFDO2NBQ3JDO1lBQ0o7VUFDRDtRQUNEO01BQ0QsQ0FBQyxDQUFDO0lBQ0gsQ0FBQztJQUNEMkcsSUFBSSxrQkFBRTtNQUNMLElBQUksSUFBSSxDQUFDOUosS0FBSyxDQUFDdEIsS0FBSyxDQUFDcUwsZUFBZTtRQUFFO1FBQ3JDLElBQUksQ0FBQ0MsNEJBQTRCLENBQUMsSUFBSSxDQUFDaEssS0FBSyxDQUFDdEIsS0FBSyxDQUFDcUwsZUFBZSxDQUFDcEosRUFBRSxDQUFDLENBQUMsS0FDbkUsSUFBSSxJQUFJLENBQUNYLEtBQUssQ0FBQ3RCLEtBQUssQ0FBQ3VMLGNBQWM7UUFBRTtRQUN6QyxJQUFJLENBQUNELDRCQUE0QixDQUFDLElBQUksQ0FBQ2hLLEtBQUssQ0FBQ3RCLEtBQUssQ0FBQ3VMLGNBQWMsQ0FBQ3RKLEVBQUUsQ0FBQyxDQUFDLEtBRXRFaEIsR0FBRyxDQUFDd0YsWUFBWSxDQUFDO1FBQUNDLEtBQUssRUFBQztNQUFFLENBQUMsQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFDRDhFLEdBQUcsaUJBQUU7TUFBQTtNQUNKdkssR0FBRyxDQUFDK0YsV0FBVyxDQUFDO1FBQ2ZqSCxLQUFLLEVBQUMsUUFBUTtRQUNkMEwsSUFBSSxFQUFDO01BQ04sQ0FBQyxDQUFDO01BQ0YsSUFBSWpILEdBQUcsR0FBQyxFQUFFO01BQ1YsSUFBSWIsUUFBUSxHQUFHLElBQUksQ0FBQ3JDLEtBQUssQ0FBQ3JCLGFBQWE7TUFDdkMsS0FBSyxJQUFJMkQsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHRCxRQUFRLENBQUNFLE1BQU0sRUFBRUQsQ0FBQyxFQUFFLEVBQUU7UUFDekMsSUFBSUUsSUFBSSxHQUFHSCxRQUFRLENBQUNDLENBQUMsQ0FBQyxDQUFDRyxJQUFJO1FBQzNCLEtBQUssSUFBSUMsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHRixJQUFJLENBQUNELE1BQU0sRUFBRUcsQ0FBQyxFQUFFLEVBQUU7VUFDckMsSUFBSUMsRUFBRSxHQUFHSCxJQUFJLENBQUNFLENBQUMsQ0FBQztVQUNoQixJQUFHQyxFQUFFLENBQUNDLEtBQUssSUFBRSxLQUFLLElBQUlELEVBQUUsQ0FBQ0MsS0FBSyxJQUFFLFNBQVMsRUFBRUQsRUFBRSxDQUFDQyxLQUFLLEdBQUMsRUFBRTtVQUN0RCxJQUFHRCxFQUFFLENBQUNHLElBQUksSUFBRSxVQUFVLEVBQ3JCLElBQUdILEVBQUUsQ0FBQ0MsS0FBSyxJQUFFLEdBQUcsRUFBRUQsRUFBRSxDQUFDQyxLQUFLLEdBQUMsRUFBRTtVQUN4QixJQUFHRCxFQUFFLENBQUNHLElBQUksSUFBRSxNQUFNLElBQUlILEVBQUUsQ0FBQ0csSUFBSSxJQUFFLE1BQU0sRUFDcENJLEdBQUcsQ0FBQ0gsSUFBSSxDQUFDO1lBQUVnQyxJQUFJLEVBQUVwQyxFQUFFLENBQUNuQyxJQUFJO1lBQUV3QyxLQUFLLEVBQUVMLEVBQUUsQ0FBQ00sS0FBSyxHQUFFTixFQUFFLENBQUNNLEtBQUssR0FBRTtVQUFHLENBQUMsQ0FBQyxDQUFDLEtBQ3ZELElBQUdOLEVBQUUsQ0FBQ0csSUFBSSxJQUFFLEtBQUssRUFDM0JJLEdBQUcsQ0FBQ0gsSUFBSSxDQUFDO1lBQUVnQyxJQUFJLEVBQUVwQyxFQUFFLENBQUNuQyxJQUFJO1lBQUV3QyxLQUFLLEVBQUVMLEVBQUUsQ0FBQ0MsS0FBSyxHQUFDLEdBQUcsR0FBQztVQUFHLENBQUMsQ0FBQyxDQUFDLEtBQzFDLElBQUdELEVBQUUsQ0FBQ0csSUFBSSxJQUFFLElBQUksSUFBSUgsRUFBRSxDQUFDRyxJQUFJLElBQUUsUUFBUSxJQUFJSCxFQUFFLENBQUNHLElBQUksSUFBRSxPQUFPLEVBQUM7WUFDcEUsSUFBR0gsRUFBRSxDQUFDeUgsTUFBTSxJQUFFLElBQUksRUFBQztjQUFFO2NBQ3BCLElBQUlDLE1BQU0sR0FBRSxFQUFFO2NBQ2QsS0FBSSxJQUFJakMsQ0FBQyxJQUFJekYsRUFBRSxDQUFDQyxLQUFLLEVBQUM7Z0JBQ3JCLElBQUd5SCxNQUFNLEVBQ1JBLE1BQU0sSUFBRSxHQUFHO2dCQUNaQSxNQUFNLElBQUUxSCxFQUFFLENBQUNDLEtBQUssQ0FBQ3dGLENBQUMsQ0FBQztjQUNwQjtjQUNBbEYsR0FBRyxDQUFDSCxJQUFJLENBQUM7Z0JBQUVnQyxJQUFJLEVBQUVwQyxFQUFFLENBQUNuQyxJQUFJO2dCQUFFd0MsS0FBSyxFQUFFcUg7Y0FBTSxDQUFDLENBQUM7WUFDMUMsQ0FBQyxNQUNBbkgsR0FBRyxDQUFDSCxJQUFJLENBQUM7Y0FBRWdDLElBQUksRUFBRXBDLEVBQUUsQ0FBQ25DLElBQUk7Y0FBRXdDLEtBQUssRUFBRUwsRUFBRSxDQUFDQztZQUFLLENBQUMsQ0FBQztVQUM3QyxDQUFDLE1BRUFNLEdBQUcsQ0FBQ0gsSUFBSSxDQUFDO1lBQUVnQyxJQUFJLEVBQUVwQyxFQUFFLENBQUNuQyxJQUFJO1lBQUV3QyxLQUFLLEVBQUVMLEVBQUUsQ0FBQ0MsS0FBSyxHQUFFRCxFQUFFLENBQUNDLEtBQUssR0FBRTtVQUFFLENBQUMsQ0FBQztVQUUxRCxJQUFJRCxFQUFFLENBQUMySCxRQUFRLElBQUksSUFBSSxJQUFJLENBQUMzSCxFQUFFLENBQUNDLEtBQUssRUFBRTtZQUN0QztZQUNDakQsR0FBRyxDQUFDZ0csV0FBVyxFQUFFO1lBQ2pCO1lBQ0FoRyxHQUFHLENBQUNTLFNBQVMsQ0FBQztjQUFDM0IsS0FBSyxFQUFDLElBQUk7Y0FBQzRCLE9BQU8sRUFBQ3NDLEVBQUUsQ0FBQ0UsUUFBUSxHQUFDLE9BQU87Y0FBQ3ZDLFVBQVUsRUFBQyxLQUFLO2NBQUNDLFdBQVcsRUFBQztZQUFJLENBQUMsQ0FBQztZQUN6RjtVQUNEO1FBQ0Q7TUFDRDtNQUNBLElBQUkwRSxVQUFVLEdBQUc7UUFDWixVQUFVLEVBQUUsTUFBTTtRQUFFO1FBQ3BCc0YsTUFBTSxFQUFFLElBQUksQ0FBQ3ZLLEtBQUssQ0FBQ3RCLEtBQUssQ0FBQ3dCLFVBQVUsQ0FBQ1MsRUFBRTtRQUFNO1FBQzVDLFFBQVEsRUFBRSxLQUFLO1FBQUk7UUFDbkI2SixXQUFXLEVBQUUsSUFBSTtRQUNqQkMsTUFBTSxFQUFFO1VBQ0pGLE1BQU0sRUFBRSxJQUFJLENBQUN2SyxLQUFLLENBQUN0QixLQUFLLENBQUN3QixVQUFVLENBQUNTO1FBQ3hDO01BQ0wsQ0FBQztNQUVELElBQUlGLFFBQVEsR0FBQztRQUNUQyxRQUFRLEVBQUUsSUFBSSxDQUFDVixLQUFLLENBQUN0QixLQUFLLENBQUN3QixVQUFVLENBQUNTLEVBQUU7UUFBRStKLFdBQVcsRUFBRSxFQUFFO1FBQUVDLFdBQVcsRUFBRSxFQUFFO1FBQzFFekgsR0FBRyxFQUFFcEQsSUFBSSxDQUFDeUosU0FBUyxDQUFDckcsR0FBRyxDQUFDO1FBQUUwSCxNQUFNLEVBQUU5SyxJQUFJLENBQUN5SixTQUFTLENBQUMsRUFBRSxDQUFDO1FBQUVzQixTQUFTLEVBQUUvSyxJQUFJLENBQUN5SixTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkZ1QixPQUFPLEVBQUVoTCxJQUFJLENBQUN5SixTQUFTLENBQUMsRUFBRSxDQUFDO1FBQUVySyxZQUFZLEVBQUVZLElBQUksQ0FBQ3lKLFNBQVMsQ0FBQyxFQUFFLENBQUM7UUFBRXdCLE9BQU8sRUFBRWpMLElBQUksQ0FBQ3lKLFNBQVMsQ0FBQ3RFLFVBQVUsQ0FBQztRQUNyRytGLHFCQUFxQixFQUFFO01BQ3hCLENBQUM7O01BRUQ7TUFDQSxhQUFZdkssUUFBUTtNQUNwQixJQUFJLENBQUNJLE1BQU0sQ0FBQ00sUUFBUSxDQUFDLGNBQWMsRUFBQ1YsUUFBUSxDQUFDLENBQUNXLElBQUksQ0FBQyxVQUFBQyxPQUFPLEVBQUU7UUFDM0QsYUFBWUEsT0FBTztRQUNuQjFCLEdBQUcsQ0FBQ2dHLFdBQVcsRUFBRTtRQUNqQixJQUFJdEUsT0FBTyxDQUFDQyxJQUFJLElBQUUsT0FBTyxFQUFFO1VBQzFCLElBQUlzRyxNQUFNLEdBQUc5SCxJQUFJLENBQUNDLEtBQUssQ0FBQ3NCLE9BQU8sQ0FBQzdDLElBQUksQ0FBQ3lNLE1BQU0sQ0FBQztVQUM1QyxJQUFHckQsTUFBTSxDQUFDc0QsR0FBRyxJQUFFLEdBQUcsRUFBQztZQUNsQixJQUFHdEQsTUFBTSxDQUFDdUQsV0FBVyxJQUFFLEdBQUcsRUFBQztjQUMxQnhMLEdBQUcsQ0FBQ3lMLFNBQVMsQ0FBQztnQkFBQzNNLEtBQUssRUFBQ21KLE1BQU0sQ0FBQ25CLE1BQU07Z0JBQUM0RSxJQUFJLEVBQUMsU0FBUztnQkFBQ0MsUUFBUSxFQUFDO2NBQUksQ0FBQyxDQUFDO1lBQ2xFO1lBQ0E7VUFDRDtVQUNBO1VBQ0EzTCxHQUFHLENBQUM0TCxVQUFVLENBQUM7WUFDZGpDLEdBQUcsRUFBQyw4QkFBOEIsR0FBQ3hKLElBQUksQ0FBQ3lKLFNBQVMsQ0FBQyxNQUFJLENBQUN2SixLQUFLLENBQUN0QixLQUFLLENBQUMsR0FBQyxhQUFhLEdBQUMsTUFBSSxDQUFDc0IsS0FBSyxDQUFDdkI7VUFDOUYsQ0FBQyxDQUFDO1VBQ0Y7UUFDRCxDQUFDLE1BQUk7VUFDSmtCLEdBQUcsQ0FBQ1MsU0FBUyxDQUFDO1lBQUMzQixLQUFLLEVBQUMsSUFBSTtZQUFDNEIsT0FBTyxFQUFDZ0IsT0FBTyxDQUFDRSxHQUFHO1lBQUNqQixVQUFVLEVBQUMsS0FBSztZQUFDQyxXQUFXLEVBQUM7VUFBSSxDQUFDLENBQUM7UUFDbEY7TUFDRCxDQUFDLENBQUMsQ0FBQ2lCLEtBQUssQ0FBQyxVQUFBQyxFQUFFLEVBQUU7UUFDWixhQUFZQSxFQUFFO1FBQ2Q5QixHQUFHLENBQUNnRyxXQUFXLEVBQUU7UUFDakJoRyxHQUFHLENBQUNTLFNBQVMsQ0FBQztVQUFDM0IsS0FBSyxFQUFDLElBQUk7VUFBQzRCLE9BQU8sRUFBQ29CLEVBQUUsQ0FBQ0MsTUFBTTtVQUFDcEIsVUFBVSxFQUFDLEtBQUs7VUFBQ0MsV0FBVyxFQUFDO1FBQUksQ0FBQyxDQUFDO01BQ2hGLENBQUMsQ0FBQztJQUNILENBQUM7SUFDRDBGLGVBQWUsNkJBQUU7TUFDaEIsSUFBSTVELFFBQVEsR0FBRyxJQUFJLENBQUNyQyxLQUFLLENBQUNwQixjQUFjLENBQUNzSCxRQUFRLENBQUNzRixVQUFVO01BQzVELElBQUlDLFdBQVcsR0FBRyxFQUFFO01BQ3BCLElBQUksSUFBSSxDQUFDekwsS0FBSyxDQUFDckIsYUFBYSxDQUFDNEQsTUFBTSxHQUFHLENBQUMsRUFBRTtRQUNyQyxLQUFLLElBQUlELENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBR0QsUUFBUSxDQUFDRSxNQUFNLEVBQUVELENBQUMsRUFBRSxFQUFFO1VBQ3RDLElBQUkrRSxJQUFJLEdBQUdoRixRQUFRLENBQUNDLENBQUMsQ0FBQyxDQUFDK0UsSUFBSTtVQUMzQixJQUFJdEMsSUFBSSxHQUFHMUMsUUFBUSxDQUFDQyxDQUFDLENBQUMsQ0FBQ29KLGNBQWM7VUFDckMsSUFBSUMsS0FBSyxHQUFHdEosUUFBUSxDQUFDQyxDQUFDLENBQUMsQ0FBQ3FKLEtBQUs7VUFDN0IsS0FBSyxJQUFJQyxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUcsSUFBSSxDQUFDNUwsS0FBSyxDQUFDckIsYUFBYSxDQUFDNEQsTUFBTSxFQUFFcUosQ0FBQyxFQUFFLEVBQUU7WUFDdEQsSUFBSUMsT0FBTyxHQUFHLElBQUksQ0FBQzdMLEtBQUssQ0FBQ3JCLGFBQWEsQ0FBQ2lOLENBQUMsQ0FBQztZQUN6QyxJQUFJN0csSUFBSSxJQUFJOEcsT0FBTyxDQUFDckwsSUFBSSxFQUFFO2NBQ3RCLElBQUlnQyxJQUFJLEdBQUcsRUFBRTtjQUNiLEtBQUssSUFBSUUsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHaUosS0FBSyxDQUFDcEosTUFBTSxFQUFFRyxDQUFDLEVBQUUsRUFBRTtnQkFDbkMsS0FBSyxJQUFJb0osQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHRCxPQUFPLENBQUNwSixJQUFJLENBQUNGLE1BQU0sRUFBRXVKLENBQUMsRUFBRSxFQUFFO2tCQUMxQyxJQUFJQyxFQUFFLEdBQUdGLE9BQU8sQ0FBQ3BKLElBQUksQ0FBQ3FKLENBQUMsQ0FBQztrQkFDeEIsSUFBSUgsS0FBSyxDQUFDakosQ0FBQyxDQUFDLENBQUNGLElBQUksSUFBSXVKLEVBQUUsQ0FBQ3ZMLElBQUksRUFBRTtvQkFDMUJ1TCxFQUFFLENBQUNuRSxNQUFNLEdBQUcrRCxLQUFLLENBQUNqSixDQUFDLENBQUMsQ0FBQ2tGLE1BQU07b0JBQzNCbUUsRUFBRSxDQUFDQyxJQUFJLEdBQUdMLEtBQUssQ0FBQ2pKLENBQUMsQ0FBQyxDQUFDc0osSUFBSTtvQkFDdkJELEVBQUUsQ0FBQ3pCLFFBQVEsR0FBR3FCLEtBQUssQ0FBQ2pKLENBQUMsQ0FBQyxDQUFDNEgsUUFBUTtvQkFDL0J5QixFQUFFLENBQUNFLFVBQVUsR0FBR04sS0FBSyxDQUFDakosQ0FBQyxDQUFDLENBQUN1SixVQUFVO29CQUNuQ0YsRUFBRSxDQUFDRyxVQUFVLEdBQUdQLEtBQUssQ0FBQ2pKLENBQUMsQ0FBQyxDQUFDd0osVUFBVTtvQkFDbkNILEVBQUUsQ0FBQ0ksY0FBYyxHQUFHUixLQUFLLENBQUNqSixDQUFDLENBQUMsQ0FBQ3lKLGNBQWM7b0JBQzNDSixFQUFFLENBQUM5QyxtQkFBbUIsR0FBRzBDLEtBQUssQ0FBQ2pKLENBQUMsQ0FBQyxDQUFDdUcsbUJBQW1CO29CQUNyRDhDLEVBQUUsQ0FBQzdDLGVBQWUsR0FBR3lDLEtBQUssQ0FBQ2pKLENBQUMsQ0FBQyxDQUFDd0csZUFBZTtvQkFDN0M2QyxFQUFFLENBQUNLLE1BQU0sR0FBR1QsS0FBSyxDQUFDakosQ0FBQyxDQUFDLENBQUMwSixNQUFNO29CQUMzQkwsRUFBRSxDQUFDM0IsTUFBTSxHQUFHdUIsS0FBSyxDQUFDakosQ0FBQyxDQUFDLENBQUMwSCxNQUFNLElBQUVpQyxTQUFTLEdBQUMsS0FBSyxHQUFDVixLQUFLLENBQUNqSixDQUFDLENBQUMsQ0FBQzBILE1BQU07b0JBQ2pGMkIsRUFBRSxDQUFDbkosS0FBSyxHQUFFLEVBQUU7b0JBQ1osSUFBR21KLEVBQUUsQ0FBQ3BFLFFBQVEsRUFBQztzQkFDZCxJQUFHb0UsRUFBRSxDQUFDM0IsTUFBTSxJQUFJLElBQUksRUFDbkIyQixFQUFFLENBQUNuSixLQUFLLEdBQUcsRUFBRSxDQUFDO3NCQUFBLEtBRWRtSixFQUFFLENBQUNuSixLQUFLLEdBQUcsS0FBSyxDQUFDO3NCQUNsQixJQUFJMEosWUFBWSxHQUFDLEVBQUU7c0JBQ25CLEtBQUssSUFBSTlELENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBR3VELEVBQUUsQ0FBQ3BFLFFBQVEsQ0FBQ3BGLE1BQU0sRUFBRWlHLENBQUMsRUFBRSxFQUFFO3dCQUM1Q3VELEVBQUUsQ0FBQ3BFLFFBQVEsQ0FBQ2EsQ0FBQyxDQUFDLENBQUMrRCxLQUFLLEdBQUNSLEVBQUUsQ0FBQ3BFLFFBQVEsQ0FBQ2EsQ0FBQyxDQUFDLENBQUNnRSxTQUFTO3dCQUM3Q1QsRUFBRSxDQUFDcEUsUUFBUSxDQUFDYSxDQUFDLENBQUMsQ0FBQ3hGLEtBQUssR0FBQytJLEVBQUUsQ0FBQ3BFLFFBQVEsQ0FBQ2EsQ0FBQyxDQUFDLENBQUNnRSxTQUFTO3dCQUM3Q1QsRUFBRSxDQUFDcEUsUUFBUSxDQUFDYSxDQUFDLENBQUMsQ0FBQ2hHLElBQUksR0FBQ3VKLEVBQUUsQ0FBQ3ZMLElBQUk7d0JBQzNCLElBQUd1TCxFQUFFLENBQUNwRSxRQUFRLENBQUNhLENBQUMsQ0FBQyxDQUFDaUUsZUFBZSxJQUFFLEdBQUcsRUFDckNWLEVBQUUsQ0FBQ25KLEtBQUssR0FBQ21KLEVBQUUsQ0FBQ3BFLFFBQVEsQ0FBQ2EsQ0FBQyxDQUFDLENBQUNnRSxTQUFTO3NCQUNuQztvQkFDRDtvQkFDQSxJQUFHVCxFQUFFLENBQUNqSixJQUFJLElBQUUsSUFBSSxJQUFJaUosRUFBRSxDQUFDakosSUFBSSxJQUFFLElBQUksRUFBQztzQkFDakMsSUFBSTRKLE9BQU8sR0FBRyxJQUFJQyxJQUFJLEVBQUU7c0JBQ3hCLElBQUlDLElBQUksR0FBRzt3QkFBQ0MsSUFBSSxFQUFFSCxPQUFPLENBQUNJLFdBQVcsRUFBRTt3QkFBQ0MsS0FBSyxFQUFFTCxPQUFPLENBQUNNLFFBQVEsRUFBRSxHQUFHLENBQUM7d0JBQUNDLEdBQUcsRUFBRVAsT0FBTyxDQUFDUSxPQUFPO3NCQUFFLENBQUM7c0JBQzdGbkIsRUFBRSxDQUFDbkosS0FBSyxHQUFHZ0ssSUFBSSxDQUFDQyxJQUFJLEdBQUcsR0FBRyxJQUFJRCxJQUFJLENBQUNHLEtBQUssSUFBSSxFQUFFLEdBQUdILElBQUksQ0FBQ0csS0FBSyxHQUFHLEdBQUcsR0FBR0gsSUFBSSxDQUFDRyxLQUFLLENBQUMsR0FBRyxHQUFHLElBQUlILElBQUksQ0FBQ0ssR0FBRyxJQUFJLEVBQUUsR0FBR0wsSUFBSSxDQUFDSyxHQUFHLEdBQUcsR0FBRyxHQUFHTCxJQUFJLENBQUNLLEdBQUcsQ0FBQztvQkFDckk7b0JBQ0EsSUFBR2xCLEVBQUUsQ0FBQ2pKLElBQUksSUFBRSxVQUFVLEVBQUM7c0JBQ3RCLElBQUlxSyxVQUFVLEdBQUMsRUFBRTtzQkFDakIsSUFBSUMsV0FBVyxHQUFHckIsRUFBRSxDQUFDc0IsTUFBTSxDQUFDQyxLQUFLLENBQUMsR0FBRyxDQUFDO3NCQUN0QyxLQUFJLElBQUlDLEVBQUUsSUFBSUgsV0FBVyxFQUFDO3dCQUN6QixJQUFJSSxNQUFNLEdBQUdKLFdBQVcsQ0FBQ0csRUFBRSxDQUFDLENBQUNELEtBQUssQ0FBQyxHQUFHLENBQUM7d0JBQ3ZDSCxVQUFVLENBQUNwSyxJQUFJLENBQUM7MEJBQUNpQyxFQUFFLEVBQUN3SSxNQUFNLENBQUMsQ0FBQyxDQUFDOzBCQUFDekksSUFBSSxFQUFDeUksTUFBTSxDQUFDLENBQUM7d0JBQUMsQ0FBQyxDQUFDO3NCQUMvQztzQkFDQXpCLEVBQUUsQ0FBQzBCLFVBQVUsR0FBR04sVUFBVTtzQkFDMUJwQixFQUFFLENBQUNuSixLQUFLLEdBQUcsR0FBRztvQkFDZjtvQkFDQSxJQUFHbUosRUFBRSxDQUFDakosSUFBSSxJQUFFLEtBQUssRUFDaEJpSixFQUFFLENBQUNuSixLQUFLLEdBQUcsS0FBSztvQkFDakIsSUFBR21KLEVBQUUsQ0FBQ2pKLElBQUksSUFBRSxLQUFLLEVBQ2hCaUosRUFBRSxDQUFDbkosS0FBSyxHQUFHLEtBQUs7b0JBRUlKLElBQUksQ0FBQ08sSUFBSSxDQUFDZ0osRUFBRSxDQUFDO2tCQUNqQjtnQkFDSjtjQUNKO2NBQ0FOLFdBQVcsQ0FBQzFJLElBQUksQ0FBQztnQkFDYjJLLE9BQU8sRUFBRTdCLE9BQU8sQ0FBQzZCLE9BQU87Z0JBQ3hCQyxNQUFNLEVBQUU5QixPQUFPLENBQUM4QixNQUFNO2dCQUN0QkMsWUFBWSxFQUFFL0IsT0FBTyxDQUFDK0IsWUFBWTtnQkFDbENwTixJQUFJLEVBQUVxTCxPQUFPLENBQUNyTCxJQUFJO2dCQUNsQnFOLEtBQUssRUFBRWhDLE9BQU8sQ0FBQ2dDLEtBQUs7Z0JBQ3BCdEcsSUFBSSxFQUFFRixJQUFJO2dCQUNWNUUsSUFBSSxFQUFFRCxJQUFJO2dCQUN6QnNMLGFBQWEsRUFBQyxJQUFJLENBQUM5TixLQUFLLENBQUNwQixjQUFjLENBQUNzSCxRQUFRLENBQUM0SCxhQUFhO2dCQUM5REMsYUFBYSxFQUFDLElBQUksQ0FBQy9OLEtBQUssQ0FBQ3BCLGNBQWMsQ0FBQ3NILFFBQVEsQ0FBQzZILGFBQWE7Z0JBQzlEQyxJQUFJLEVBQUMsSUFBSSxDQUFDaE8sS0FBSyxDQUFDcEIsY0FBYyxDQUFDc0gsUUFBUSxDQUFDOEgsSUFBSSxHQUFDLElBQUksQ0FBQ2hPLEtBQUssQ0FBQ3BCLGNBQWMsQ0FBQ3NILFFBQVEsQ0FBQzhILElBQUksR0FBQyxDQUFDLENBQUM7Z0JBQ3ZGQyxRQUFRLEVBQUMsSUFBSSxDQUFDak8sS0FBSyxDQUFDcEIsY0FBYyxDQUFDc0gsUUFBUSxDQUFDK0gsUUFBUSxHQUFDLElBQUksQ0FBQ2pPLEtBQUssQ0FBQ3BCLGNBQWMsQ0FBQ3NILFFBQVEsQ0FBQytILFFBQVEsR0FBQyxTQUFTO2dCQUMxR0MsVUFBVSxFQUFDLElBQUksQ0FBQ2xPLEtBQUssQ0FBQ3BCLGNBQWMsQ0FBQ3NILFFBQVEsQ0FBQ2dJLFVBQVUsR0FBQyxJQUFJLENBQUNsTyxLQUFLLENBQUNwQixjQUFjLENBQUNzSCxRQUFRLENBQUNnSSxVQUFVLEdBQUM7Y0FDNUYsQ0FBQyxDQUFDO1lBQ047VUFDSjtRQUNKO1FBQ0EsSUFBSXpDLFdBQVcsQ0FBQ2xKLE1BQU0sR0FBRyxDQUFDLEVBQUU7VUFDeEIsSUFBSSxDQUFDdkMsS0FBSyxDQUFDckIsYUFBYSxHQUFHOE0sV0FBVztRQUMxQztRQUNILElBQUl2SSxHQUFHLEdBQUMsRUFBRTtRQUNQLElBQUksSUFBSSxDQUFDbEQsS0FBSyxDQUFDcEIsY0FBYyxDQUFDc0gsUUFBUSxFQUFFO1VBQ25DLElBQUksSUFBSSxDQUFDbEcsS0FBSyxDQUFDcEIsY0FBYyxDQUFDc0gsUUFBUSxDQUFDc0YsVUFBVSxDQUFDakosTUFBTSxHQUFHLENBQUMsRUFBRTtZQUMzRCxJQUFJRixRQUFRLEdBQUcsSUFBSSxDQUFDckMsS0FBSyxDQUFDcEIsY0FBYyxDQUFDc0gsUUFBUSxDQUFDc0YsVUFBVTtZQUM1RDtZQUNBO1lBQ0EsS0FBSyxJQUFJbEosQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHRCxRQUFRLENBQUNFLE1BQU0sRUFBRUQsQ0FBQyxFQUFFLEVBQUU7Y0FDdEMsSUFBSUUsSUFBSSxHQUFHSCxRQUFRLENBQUNDLENBQUMsQ0FBQyxDQUFDcUosS0FBSztjQUM1QixLQUFLLElBQUlqSixDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUdGLElBQUksQ0FBQ0QsTUFBTSxFQUFFRyxDQUFDLEVBQUUsRUFBRTtnQkFDbEMsSUFBSUMsRUFBRSxHQUFHSCxJQUFJLENBQUNFLENBQUMsQ0FBQztnQkFDL0JRLEdBQUcsQ0FBQ0gsSUFBSSxDQUFDO2tCQUFFUCxJQUFJLEVBQUVHLEVBQUUsQ0FBQ0gsSUFBSTtrQkFBRVEsS0FBSyxFQUFFTCxFQUFFLENBQUNLLEtBQUssR0FBQ0wsRUFBRSxDQUFDSyxLQUFLLEdBQUM7Z0JBQUcsQ0FBQyxDQUFDO2NBQzdDO1lBQ0o7VUFDSjtRQUNQO1FBRUEsSUFBSW1MLFNBQVMsR0FBRyxJQUFJLENBQUNuTyxLQUFLLENBQUNwQixjQUFjLENBQUNzSCxRQUFRLENBQUNrSSxLQUFLO1FBQ3hELElBQUlELFNBQVMsRUFBRTtVQUNYLElBQUlBLFNBQVMsQ0FBQzVMLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDdEIsS0FBSyxJQUFJRCxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUc2TCxTQUFTLENBQUM1TCxNQUFNLEVBQUVELENBQUMsRUFBRSxFQUFFO2NBQ3ZDLElBQUk2TCxTQUFTLENBQUM3TCxDQUFDLENBQUMsQ0FBQytMLFFBQVEsSUFBSSxXQUFXLEVBQUU7Z0JBQ3RDLElBQUksQ0FBQ3JPLEtBQUssQ0FBQ2xCLGFBQWEsR0FBR3FQLFNBQVMsQ0FBQzdMLENBQUMsQ0FBQztjQUMzQyxDQUFDLE1BQU0sSUFBSTZMLFNBQVMsQ0FBQzdMLENBQUMsQ0FBQyxDQUFDK0wsUUFBUSxJQUFJLFNBQVMsRUFBRTtnQkFDM0MsSUFBSSxDQUFDck8sS0FBSyxDQUFDbkIsaUJBQWlCLEdBQUdzUCxTQUFTLENBQUM3TCxDQUFDLENBQUM7Y0FDL0MsQ0FBQyxNQUFNLElBQUk2TCxTQUFTLENBQUM3TCxDQUFDLENBQUMsQ0FBQytMLFFBQVEsSUFBSSx1QkFBdUIsRUFBRTtnQkFDekQsSUFBSSxDQUFDck8sS0FBSyxDQUFDakIseUJBQXlCLEdBQUdvUCxTQUFTLENBQUM3TCxDQUFDLENBQUMsQ0FBQ2dNLFFBQVE7Z0JBQzVELElBQUksQ0FBQ3RPLEtBQUssQ0FBQ2hCLG1CQUFtQixHQUFHbVAsU0FBUyxDQUFDN0wsQ0FBQyxDQUFDLENBQUNpTSxjQUFjO2NBQ2hFO1lBQ0o7VUFDUDtRQUNEO1FBQ0E7UUFDQSxJQUFJLElBQUksQ0FBQ3ZPLEtBQUssQ0FBQ25CLGlCQUFpQixFQUFFO1VBQzlCLElBQUl1RSxPQUFPLEdBQUcsSUFBSSxDQUFDcEQsS0FBSyxDQUFDbkIsaUJBQWlCLENBQUN5UCxRQUFRO1VBQ25ELElBQUluTCxJQUFJLEdBQUc7WUFDUEMsT0FBTyxFQUFFQSxPQUFPO1lBQ2hCQyxNQUFNLEVBQUUsR0FBRztZQUNYQyxTQUFTLEVBQUUsRUFBRTtZQUNiQyxNQUFNLEVBQUUsRUFBRTtZQUNWQyxNQUFNLEVBQUUsRUFBRTtZQUNWQyxTQUFTLEVBQUUsRUFBRTtZQUNiQyxLQUFLLEVBQUUsSUFBSSxDQUFDMUQsS0FBSyxDQUFDdEIsS0FBSyxDQUFDd0IsVUFBVSxDQUFDUyxFQUFFO1lBQ3JDZ0QsS0FBSyxFQUFFLEVBQUU7WUFDVG5CLElBQUksRUFBRVU7VUFDVixDQUFDO1VBQ0QsSUFBSSxDQUFDc0wseUJBQXlCLENBQUNyTCxJQUFJLENBQUM7UUFDeEM7UUFDQSxhQUFZLElBQUksQ0FBQ25ELEtBQUssQ0FBQ3BCLGNBQWM7UUFDckMsYUFBWSxJQUFJLENBQUNvQixLQUFLLENBQUNyQixhQUFhO01BRXJDLENBQUMsTUFBTTtRQUNOZ0IsR0FBRyxDQUFDUyxTQUFTLENBQUM7VUFBQzNCLEtBQUssRUFBQyxJQUFJO1VBQUM0QixPQUFPLEVBQUMsWUFBWTtVQUFDQyxVQUFVLEVBQUMsS0FBSztVQUFDQyxXQUFXLEVBQUM7UUFBSSxDQUFDLENBQUM7TUFDbkY7SUFDRCxDQUFDO0lBQ0Q4RixrQkFBa0IsZ0NBQUU7TUFDbkIsSUFBSWhFLFFBQVEsR0FBRyxJQUFJLENBQUNyQyxLQUFLLENBQUNWLGlCQUFpQixDQUFDNEcsUUFBUSxDQUFDc0YsVUFBVTtNQUMvRCxJQUFJQyxXQUFXLEdBQUcsRUFBRTtNQUNwQixJQUFJLElBQUksQ0FBQ3pMLEtBQUssQ0FBQ1osZ0JBQWdCLENBQUNtRCxNQUFNLEdBQUcsQ0FBQyxFQUFFO1FBQ3hDLEtBQUssSUFBSUQsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHRCxRQUFRLENBQUNFLE1BQU0sRUFBRUQsQ0FBQyxFQUFFLEVBQUU7VUFDdEMsSUFBSStFLElBQUksR0FBR2hGLFFBQVEsQ0FBQ0MsQ0FBQyxDQUFDLENBQUMrRSxJQUFJO1VBQzNCLElBQUl0QyxJQUFJLEdBQUcxQyxRQUFRLENBQUNDLENBQUMsQ0FBQyxDQUFDb0osY0FBYztVQUNyQyxJQUFJQyxLQUFLLEdBQUd0SixRQUFRLENBQUNDLENBQUMsQ0FBQyxDQUFDcUosS0FBSztVQUM3QixLQUFLLElBQUlDLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBRyxJQUFJLENBQUM1TCxLQUFLLENBQUNaLGdCQUFnQixDQUFDbUQsTUFBTSxFQUFFcUosQ0FBQyxFQUFFLEVBQUU7WUFDekQsSUFBSUMsT0FBTyxHQUFHLElBQUksQ0FBQzdMLEtBQUssQ0FBQ1osZ0JBQWdCLENBQUN3TSxDQUFDLENBQUM7WUFDNUMsSUFBSTdHLElBQUksSUFBSThHLE9BQU8sQ0FBQ3JMLElBQUksRUFBRTtjQUN0QixJQUFJZ0MsSUFBSSxHQUFHLEVBQUU7Y0FDYixLQUFLLElBQUlFLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBR2lKLEtBQUssQ0FBQ3BKLE1BQU0sRUFBRUcsQ0FBQyxFQUFFLEVBQUU7Z0JBQ25DLEtBQUssSUFBSW9KLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBR0QsT0FBTyxDQUFDcEosSUFBSSxDQUFDRixNQUFNLEVBQUV1SixDQUFDLEVBQUUsRUFBRTtrQkFDMUMsSUFBSUMsRUFBRSxHQUFHRixPQUFPLENBQUNwSixJQUFJLENBQUNxSixDQUFDLENBQUM7a0JBQ3hCLElBQUlILEtBQUssQ0FBQ2pKLENBQUMsQ0FBQyxDQUFDRixJQUFJLElBQUl1SixFQUFFLENBQUN2TCxJQUFJLEVBQUU7b0JBQzFCdUwsRUFBRSxDQUFDbkUsTUFBTSxHQUFHK0QsS0FBSyxDQUFDakosQ0FBQyxDQUFDLENBQUNrRixNQUFNO29CQUMzQm1FLEVBQUUsQ0FBQ0MsSUFBSSxHQUFHTCxLQUFLLENBQUNqSixDQUFDLENBQUMsQ0FBQ3NKLElBQUk7b0JBQ3ZCRCxFQUFFLENBQUN6QixRQUFRLEdBQUdxQixLQUFLLENBQUNqSixDQUFDLENBQUMsQ0FBQzRILFFBQVE7b0JBQy9CeUIsRUFBRSxDQUFDRSxVQUFVLEdBQUdOLEtBQUssQ0FBQ2pKLENBQUMsQ0FBQyxDQUFDdUosVUFBVTtvQkFDbkNGLEVBQUUsQ0FBQ0csVUFBVSxHQUFHUCxLQUFLLENBQUNqSixDQUFDLENBQUMsQ0FBQ3dKLFVBQVU7b0JBQ25DSCxFQUFFLENBQUNJLGNBQWMsR0FBR1IsS0FBSyxDQUFDakosQ0FBQyxDQUFDLENBQUN5SixjQUFjO29CQUMzQ0osRUFBRSxDQUFDOUMsbUJBQW1CLEdBQUcwQyxLQUFLLENBQUNqSixDQUFDLENBQUMsQ0FBQ3VHLG1CQUFtQjtvQkFDckQ4QyxFQUFFLENBQUM3QyxlQUFlLEdBQUd5QyxLQUFLLENBQUNqSixDQUFDLENBQUMsQ0FBQ3dHLGVBQWU7b0JBQzdDNkMsRUFBRSxDQUFDSyxNQUFNLEdBQUdULEtBQUssQ0FBQ2pKLENBQUMsQ0FBQyxDQUFDMEosTUFBTTtvQkFDM0JMLEVBQUUsQ0FBQzNCLE1BQU0sR0FBR3VCLEtBQUssQ0FBQ2pKLENBQUMsQ0FBQyxDQUFDMEgsTUFBTSxJQUFFaUMsU0FBUyxHQUFDLEtBQUssR0FBQ1YsS0FBSyxDQUFDakosQ0FBQyxDQUFDLENBQUMwSCxNQUFNO29CQUNqRjJCLEVBQUUsQ0FBQ25KLEtBQUssR0FBRSxFQUFFO29CQUNaLElBQUdtSixFQUFFLENBQUNwRSxRQUFRLEVBQUM7c0JBQ2QsSUFBR29FLEVBQUUsQ0FBQzNCLE1BQU0sSUFBSSxJQUFJLEVBQ25CMkIsRUFBRSxDQUFDbkosS0FBSyxHQUFHLEVBQUUsQ0FBQztzQkFBQSxLQUVkbUosRUFBRSxDQUFDbkosS0FBSyxHQUFHLEtBQUssQ0FBQztzQkFDbEIsSUFBSTBKLFlBQVksR0FBQyxFQUFFO3NCQUNuQixLQUFLLElBQUk5RCxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUd1RCxFQUFFLENBQUNwRSxRQUFRLENBQUNwRixNQUFNLEVBQUVpRyxDQUFDLEVBQUUsRUFBRTt3QkFDNUN1RCxFQUFFLENBQUNwRSxRQUFRLENBQUNhLENBQUMsQ0FBQyxDQUFDK0QsS0FBSyxHQUFDUixFQUFFLENBQUNwRSxRQUFRLENBQUNhLENBQUMsQ0FBQyxDQUFDZ0UsU0FBUzt3QkFDN0NULEVBQUUsQ0FBQ3BFLFFBQVEsQ0FBQ2EsQ0FBQyxDQUFDLENBQUN4RixLQUFLLEdBQUMrSSxFQUFFLENBQUNwRSxRQUFRLENBQUNhLENBQUMsQ0FBQyxDQUFDZ0UsU0FBUzt3QkFDN0NULEVBQUUsQ0FBQ3BFLFFBQVEsQ0FBQ2EsQ0FBQyxDQUFDLENBQUNoRyxJQUFJLEdBQUN1SixFQUFFLENBQUN2TCxJQUFJO3dCQUMzQixJQUFHdUwsRUFBRSxDQUFDcEUsUUFBUSxDQUFDYSxDQUFDLENBQUMsQ0FBQ2lFLGVBQWUsSUFBRSxHQUFHLEVBQ3JDVixFQUFFLENBQUNuSixLQUFLLEdBQUNtSixFQUFFLENBQUNwRSxRQUFRLENBQUNhLENBQUMsQ0FBQyxDQUFDZ0UsU0FBUztzQkFDbkM7b0JBQ0Q7b0JBQ0EsSUFBR1QsRUFBRSxDQUFDakosSUFBSSxJQUFFLElBQUksSUFBSWlKLEVBQUUsQ0FBQ2pKLElBQUksSUFBRSxJQUFJLEVBQUM7c0JBQ2pDLElBQUk0SixPQUFPLEdBQUcsSUFBSUMsSUFBSSxFQUFFO3NCQUN4QixJQUFJQyxJQUFJLEdBQUc7d0JBQUNDLElBQUksRUFBRUgsT0FBTyxDQUFDSSxXQUFXLEVBQUU7d0JBQUNDLEtBQUssRUFBRUwsT0FBTyxDQUFDTSxRQUFRLEVBQUUsR0FBRyxDQUFDO3dCQUFDQyxHQUFHLEVBQUVQLE9BQU8sQ0FBQ1EsT0FBTztzQkFBRSxDQUFDO3NCQUM3Rm5CLEVBQUUsQ0FBQ25KLEtBQUssR0FBR2dLLElBQUksQ0FBQ0MsSUFBSSxHQUFHLEdBQUcsSUFBSUQsSUFBSSxDQUFDRyxLQUFLLElBQUksRUFBRSxHQUFHSCxJQUFJLENBQUNHLEtBQUssR0FBRyxHQUFHLEdBQUdILElBQUksQ0FBQ0csS0FBSyxDQUFDLEdBQUcsR0FBRyxJQUFJSCxJQUFJLENBQUNLLEdBQUcsSUFBSSxFQUFFLEdBQUdMLElBQUksQ0FBQ0ssR0FBRyxHQUFHLEdBQUcsR0FBR0wsSUFBSSxDQUFDSyxHQUFHLENBQUM7b0JBQ3JJO29CQUNBLElBQUdsQixFQUFFLENBQUNqSixJQUFJLElBQUUsVUFBVSxFQUFDO3NCQUN0QixJQUFJcUssVUFBVSxHQUFDLEVBQUU7c0JBQ2pCLElBQUlDLFdBQVcsR0FBR3JCLEVBQUUsQ0FBQ3NCLE1BQU0sQ0FBQ0MsS0FBSyxDQUFDLEdBQUcsQ0FBQztzQkFDdEMsS0FBSSxJQUFJQyxFQUFFLElBQUlILFdBQVcsRUFBQzt3QkFDekIsSUFBSUksTUFBTSxHQUFHSixXQUFXLENBQUNHLEVBQUUsQ0FBQyxDQUFDRCxLQUFLLENBQUMsR0FBRyxDQUFDO3dCQUN2Q0gsVUFBVSxDQUFDcEssSUFBSSxDQUFDOzBCQUFDaUMsRUFBRSxFQUFDd0ksTUFBTSxDQUFDLENBQUMsQ0FBQzswQkFBQ3pJLElBQUksRUFBQ3lJLE1BQU0sQ0FBQyxDQUFDO3dCQUFDLENBQUMsQ0FBQztzQkFDL0M7c0JBQ0F6QixFQUFFLENBQUMwQixVQUFVLEdBQUdOLFVBQVU7c0JBQzFCcEIsRUFBRSxDQUFDbkosS0FBSyxHQUFHLEdBQUc7b0JBQ2Y7b0JBQ0EsSUFBR21KLEVBQUUsQ0FBQ2pKLElBQUksSUFBRSxLQUFLLEVBQ2hCaUosRUFBRSxDQUFDbkosS0FBSyxHQUFHLEtBQUs7b0JBQ2pCLElBQUdtSixFQUFFLENBQUNqSixJQUFJLElBQUUsS0FBSyxFQUNoQmlKLEVBQUUsQ0FBQ25KLEtBQUssR0FBRyxLQUFLO29CQUVJSixJQUFJLENBQUNPLElBQUksQ0FBQ2dKLEVBQUUsQ0FBQztrQkFDakI7Z0JBQ0o7Y0FDSjtjQUNBTixXQUFXLENBQUMxSSxJQUFJLENBQUM7Z0JBQ2IySyxPQUFPLEVBQUU3QixPQUFPLENBQUM2QixPQUFPO2dCQUN4QkMsTUFBTSxFQUFFOUIsT0FBTyxDQUFDOEIsTUFBTTtnQkFDdEJDLFlBQVksRUFBRS9CLE9BQU8sQ0FBQytCLFlBQVk7Z0JBQ2xDcE4sSUFBSSxFQUFFcUwsT0FBTyxDQUFDckwsSUFBSTtnQkFDbEJxTixLQUFLLEVBQUVoQyxPQUFPLENBQUNnQyxLQUFLO2dCQUNwQnRHLElBQUksRUFBRUYsSUFBSTtnQkFDVjVFLElBQUksRUFBRUQsSUFBSTtnQkFDekJzTCxhQUFhLEVBQUMsSUFBSSxDQUFDOU4sS0FBSyxDQUFDVixpQkFBaUIsQ0FBQzRHLFFBQVEsQ0FBQzRILGFBQWE7Z0JBQ2pFQyxhQUFhLEVBQUMsSUFBSSxDQUFDL04sS0FBSyxDQUFDVixpQkFBaUIsQ0FBQzRHLFFBQVEsQ0FBQzZILGFBQWE7Z0JBQ2pFQyxJQUFJLEVBQUMsSUFBSSxDQUFDaE8sS0FBSyxDQUFDVixpQkFBaUIsQ0FBQzRHLFFBQVEsQ0FBQzhILElBQUksR0FBQyxJQUFJLENBQUNoTyxLQUFLLENBQUNWLGlCQUFpQixDQUFDNEcsUUFBUSxDQUFDOEgsSUFBSSxHQUFDLENBQUMsQ0FBQztnQkFDN0ZDLFFBQVEsRUFBQyxJQUFJLENBQUNqTyxLQUFLLENBQUNWLGlCQUFpQixDQUFDNEcsUUFBUSxDQUFDK0gsUUFBUSxHQUFDLElBQUksQ0FBQ2pPLEtBQUssQ0FBQ1YsaUJBQWlCLENBQUM0RyxRQUFRLENBQUMrSCxRQUFRLEdBQUMsU0FBUztnQkFDaEhDLFVBQVUsRUFBQyxJQUFJLENBQUNsTyxLQUFLLENBQUNWLGlCQUFpQixDQUFDNEcsUUFBUSxDQUFDZ0ksVUFBVSxHQUFDLElBQUksQ0FBQ2xPLEtBQUssQ0FBQ1YsaUJBQWlCLENBQUM0RyxRQUFRLENBQUNnSSxVQUFVLEdBQUM7Y0FDbEcsQ0FBQyxDQUFDO1lBQ047VUFDSjtRQUNKO1FBQ0EsSUFBSXpDLFdBQVcsQ0FBQ2xKLE1BQU0sR0FBRyxDQUFDLEVBQUU7VUFDeEIsSUFBSSxDQUFDdkMsS0FBSyxDQUFDWixnQkFBZ0IsR0FBR3FNLFdBQVc7UUFDN0M7UUFDSCxJQUFJdkksR0FBRyxHQUFDLEVBQUU7UUFDUCxJQUFJLElBQUksQ0FBQ2xELEtBQUssQ0FBQ1YsaUJBQWlCLENBQUM0RyxRQUFRLEVBQUU7VUFDdEMsSUFBSSxJQUFJLENBQUNsRyxLQUFLLENBQUNWLGlCQUFpQixDQUFDNEcsUUFBUSxDQUFDc0YsVUFBVSxDQUFDakosTUFBTSxHQUFHLENBQUMsRUFBRTtZQUM5RCxJQUFJRixRQUFRLEdBQUcsSUFBSSxDQUFDckMsS0FBSyxDQUFDVixpQkFBaUIsQ0FBQzRHLFFBQVEsQ0FBQ3NGLFVBQVU7WUFDL0Q7WUFDQTtZQUNBLEtBQUssSUFBSWxKLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBR0QsUUFBUSxDQUFDRSxNQUFNLEVBQUVELENBQUMsRUFBRSxFQUFFO2NBQ3RDLElBQUlFLElBQUksR0FBR0gsUUFBUSxDQUFDQyxDQUFDLENBQUMsQ0FBQ3FKLEtBQUs7Y0FDNUIsS0FBSyxJQUFJakosQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHRixJQUFJLENBQUNELE1BQU0sRUFBRUcsQ0FBQyxFQUFFLEVBQUU7Z0JBQ2xDLElBQUlDLEVBQUUsR0FBR0gsSUFBSSxDQUFDRSxDQUFDLENBQUM7Z0JBQy9CUSxHQUFHLENBQUNILElBQUksQ0FBQztrQkFBRVAsSUFBSSxFQUFFRyxFQUFFLENBQUNILElBQUk7a0JBQUVRLEtBQUssRUFBRUwsRUFBRSxDQUFDSyxLQUFLLEdBQUNMLEVBQUUsQ0FBQ0ssS0FBSyxHQUFDO2dCQUFHLENBQUMsQ0FBQztjQUM3QztZQUNKO1VBQ0o7UUFDUDtRQUVBLElBQUltTCxTQUFTLEdBQUcsSUFBSSxDQUFDbk8sS0FBSyxDQUFDVixpQkFBaUIsQ0FBQzRHLFFBQVEsQ0FBQ2tJLEtBQUs7UUFDM0QsSUFBSUQsU0FBUyxFQUFFO1VBQ1gsSUFBSUEsU0FBUyxDQUFDNUwsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUN0QixLQUFLLElBQUlELENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBRzZMLFNBQVMsQ0FBQzVMLE1BQU0sRUFBRUQsQ0FBQyxFQUFFLEVBQUU7Y0FDdkMsSUFBSTZMLFNBQVMsQ0FBQzdMLENBQUMsQ0FBQyxDQUFDK0wsUUFBUSxJQUFJLFdBQVcsRUFBRTtnQkFDdEMsSUFBSSxDQUFDck8sS0FBSyxDQUFDbEIsYUFBYSxHQUFHcVAsU0FBUyxDQUFDN0wsQ0FBQyxDQUFDO2NBQzNDLENBQUMsTUFBTSxJQUFJNkwsU0FBUyxDQUFDN0wsQ0FBQyxDQUFDLENBQUMrTCxRQUFRLElBQUksU0FBUyxFQUFFO2dCQUMzQyxJQUFJLENBQUNyTyxLQUFLLENBQUNuQixpQkFBaUIsR0FBR3NQLFNBQVMsQ0FBQzdMLENBQUMsQ0FBQztjQUMvQyxDQUFDLE1BQU0sSUFBSTZMLFNBQVMsQ0FBQzdMLENBQUMsQ0FBQyxDQUFDK0wsUUFBUSxJQUFJLHVCQUF1QixFQUFFO2dCQUN6RCxJQUFJLENBQUNyTyxLQUFLLENBQUNqQix5QkFBeUIsR0FBR29QLFNBQVMsQ0FBQzdMLENBQUMsQ0FBQyxDQUFDZ00sUUFBUTtnQkFDNUQsSUFBSSxDQUFDdE8sS0FBSyxDQUFDaEIsbUJBQW1CLEdBQUdtUCxTQUFTLENBQUM3TCxDQUFDLENBQUMsQ0FBQ2lNLGNBQWM7Y0FDaEU7WUFDSjtVQUNQO1FBQ0Q7UUFDQTtRQUNBLElBQUksSUFBSSxDQUFDdk8sS0FBSyxDQUFDbkIsaUJBQWlCLEVBQUU7VUFDOUIsSUFBSXVFLE9BQU8sR0FBRyxJQUFJLENBQUNwRCxLQUFLLENBQUNuQixpQkFBaUIsQ0FBQ3lQLFFBQVE7VUFDbkQsSUFBSW5MLElBQUksR0FBRztZQUNQQyxPQUFPLEVBQUVBLE9BQU87WUFDaEJDLE1BQU0sRUFBRSxHQUFHO1lBQ1hDLFNBQVMsRUFBRSxFQUFFO1lBQ2JDLE1BQU0sRUFBRSxFQUFFO1lBQ1ZDLE1BQU0sRUFBRSxFQUFFO1lBQ1ZDLFNBQVMsRUFBRSxFQUFFO1lBQ2JDLEtBQUssRUFBRSxJQUFJLENBQUMxRCxLQUFLLENBQUN0QixLQUFLLENBQUNrRCxPQUFPLENBQUNqQixFQUFFO1lBQ2xDZ0QsS0FBSyxFQUFFLEVBQUU7WUFDVG5CLElBQUksRUFBRVU7VUFDVixDQUFDO1VBQ0QsSUFBSSxDQUFDdUwsOEJBQThCLENBQUN0TCxJQUFJLENBQUM7UUFDN0M7UUFDQSxhQUFZLElBQUksQ0FBQ25ELEtBQUssQ0FBQ1YsaUJBQWlCO1FBQ3hDLGFBQVksSUFBSSxDQUFDVSxLQUFLLENBQUNaLGdCQUFnQjtNQUV4QyxDQUFDLE1BQU07UUFDTk8sR0FBRyxDQUFDUyxTQUFTLENBQUM7VUFBQzNCLEtBQUssRUFBQyxJQUFJO1VBQUM0QixPQUFPLEVBQUMsWUFBWTtVQUFDQyxVQUFVLEVBQUMsS0FBSztVQUFDQyxXQUFXLEVBQUM7UUFBSSxDQUFDLENBQUM7TUFDbkY7SUFDRCxDQUFDO0lBQ0RpTyx5QkFBeUIscUNBQUNyTCxJQUFJLEVBQUM7TUFBQTtNQUM5QixJQUFJekUsS0FBSyxHQUFHO1FBQ1JnUSxTQUFTLEVBQUUsSUFBSSxDQUFDMU8sS0FBSyxDQUFDdEIsS0FBSyxDQUFDd0IsVUFBVSxDQUFDQyxVQUFVLENBQUNLLElBQUk7UUFDdERtTyxTQUFTLEVBQUUsSUFBSSxDQUFDM08sS0FBSyxDQUFDdEIsS0FBSyxDQUFDd0IsVUFBVSxDQUFDQyxVQUFVLENBQUNLLElBQUk7UUFDdERvTyxrQkFBa0IsRUFBRSxDQUFDO1FBQ3JCM0osVUFBVSxFQUFFO1VBQ1IsVUFBVSxFQUFFLE1BQU07VUFBRTtVQUNwQnNGLE1BQU0sRUFBRSxJQUFJLENBQUN2SyxLQUFLLENBQUN0QixLQUFLLENBQUN3QixVQUFVLENBQUNTLEVBQUU7VUFBTTtVQUM1QyxRQUFRLEVBQUUsS0FBSztVQUFJO1VBQ25CNkosV0FBVyxFQUFFLElBQUk7VUFDakJDLE1BQU0sRUFBRTtZQUNKRixNQUFNLEVBQUUsSUFBSSxDQUFDdkssS0FBSyxDQUFDdEIsS0FBSyxDQUFDd0IsVUFBVSxDQUFDUyxFQUFFLENBQUU7WUFDeEM7VUFDSjtRQUNKO01BQ0osQ0FBQzs7TUFDRCxJQUFJa08sY0FBYyxHQUFHLEVBQUU7TUFDdkIsSUFBSTVQLFdBQVcsR0FBRyxFQUFFO01BRXBCLElBQUl3QixRQUFRLEdBQUc7UUFDQzRDLE1BQU0sRUFBRUYsSUFBSSxDQUFDRSxNQUFNO1FBQUVELE9BQU8sRUFBRUQsSUFBSSxDQUFDQyxPQUFPO1FBQUVFLFNBQVMsRUFBRUgsSUFBSSxDQUFDRyxTQUFTO1FBQ3JFQyxNQUFNLEVBQUVKLElBQUksQ0FBQ0ksTUFBTTtRQUFFQyxNQUFNLEVBQUVMLElBQUksQ0FBQ0ssTUFBTTtRQUFFQyxTQUFTLEVBQUVOLElBQUksQ0FBQ00sU0FBUztRQUFFQyxLQUFLLEVBQUVQLElBQUksQ0FBQ08sS0FBSztRQUFFQyxLQUFLLEVBQUVSLElBQUksQ0FBQ1EsS0FBSztRQUN6R25CLElBQUksRUFBRTFDLElBQUksQ0FBQ3lKLFNBQVMsQ0FBQ3BHLElBQUksQ0FBQ1gsSUFBSSxDQUFDO1FBQUV1SSxPQUFPLEVBQUVqTCxJQUFJLENBQUN5SixTQUFTLENBQUM3SyxLQUFLLENBQUM7UUFBRW1RLGNBQWMsRUFBRUEsY0FBYztRQUFFNVAsV0FBVyxFQUFFQTtNQUNsSCxDQUFDO01BQ2IsYUFBWXdCLFFBQVE7TUFDcEIsSUFBSSxDQUFDSSxNQUFNLENBQUNNLFFBQVEsQ0FBQywyQkFBMkIsRUFBQ1YsUUFBUSxDQUFDLENBQUNXLElBQUksQ0FBQyxVQUFBQyxPQUFPLEVBQUU7UUFDeEUsYUFBWUEsT0FBTztRQUNuQixJQUFJQSxPQUFPLENBQUNDLElBQUksSUFBRSxPQUFPLEVBQUU7VUFDMUIsSUFBSTlDLElBQUksR0FBR3NCLElBQUksQ0FBQ0MsS0FBSyxDQUFDc0IsT0FBTyxDQUFDN0MsSUFBSSxDQUFDO1VBQ25DLElBQUlzUSxVQUFVLEdBQUd0USxJQUFJLENBQUNvSixNQUFNO1VBQzVCLElBQUlrSCxVQUFVLEVBQUU7WUFDWixLQUFLLElBQUlwTSxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUdvTSxVQUFVLENBQUN2TSxNQUFNLEVBQUVHLENBQUMsRUFBRSxFQUFFO2NBQ3hDLElBQUlrRixNQUFNLEdBQUdrSCxVQUFVLENBQUNwTSxDQUFDLENBQUM7Y0FDMUIsSUFBSXFNLFdBQVcsR0FBR25ILE1BQU0sQ0FBQ21ILFdBQVc7Y0FDcEMsSUFBSS9MLEtBQUssR0FBRzRFLE1BQU0sQ0FBQzVFLEtBQUs7Y0FDeEIsSUFBSStMLFdBQVcsSUFBSSxjQUFjLEVBQUU7Z0JBQy9CLElBQUkvTCxLQUFLLEVBQUU7a0JBQ1AsSUFBSTZFLEdBQUcsR0FBRzdFLEtBQUs7a0JBQ2YsSUFBSSxPQUFPQSxLQUFLLElBQUksUUFBUSxFQUFFO29CQUMxQjZFLEdBQUcsR0FBRy9ILElBQUksQ0FBQ0MsS0FBSyxDQUFDaUQsS0FBSyxDQUFDO2tCQUMzQjtrQkFDWixhQUFZNkUsR0FBRztrQkFDSCxLQUFLLElBQUl2RixDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUd1RixHQUFHLENBQUN0RixNQUFNLEVBQUVELENBQUMsRUFBRSxFQUFFO29CQUNoRCxLQUFLLElBQUkwTSxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUcsTUFBSSxDQUFDaFAsS0FBSyxDQUFDckIsYUFBYSxDQUFDNEQsTUFBTSxFQUFFeU0sQ0FBQyxFQUFFLEVBQUU7c0JBQ3pELEtBQUssSUFBSWxELENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBRyxNQUFJLENBQUM5TCxLQUFLLENBQUNyQixhQUFhLENBQUNxUSxDQUFDLENBQUMsQ0FBQ3ZNLElBQUksQ0FBQ0YsTUFBTSxFQUFFdUosQ0FBQyxFQUFFLEVBQUU7d0JBQ2pFLElBQUlDLEVBQUUsR0FBRyxNQUFJLENBQUMvTCxLQUFLLENBQUNyQixhQUFhLENBQUNxUSxDQUFDLENBQUMsQ0FBQ3ZNLElBQUksQ0FBQ3FKLENBQUMsQ0FBQzt3QkFDNUMsSUFBSWpFLEdBQUcsQ0FBQ3ZGLENBQUMsQ0FBQyxDQUFDRSxJQUFJLElBQUt1SixFQUFFLENBQUN2TCxJQUFJLEVBQUU7MEJBQzVCLElBQUd1TCxFQUFFLENBQUNqSixJQUFJLElBQUUsSUFBSSxJQUFJaUosRUFBRSxDQUFDakosSUFBSSxJQUFFLFFBQVEsSUFBSWlKLEVBQUUsQ0FBQ2pKLElBQUksSUFBRSxPQUFPLEVBQUM7NEJBQ3pELElBQUltTSxZQUFZLEdBQUMsRUFBRTs0QkFDbkIsS0FBSSxJQUFJekcsQ0FBQyxJQUFJWCxHQUFHLENBQUN2RixDQUFDLENBQUMsQ0FBQzRNLFdBQVcsRUFBQzs4QkFDL0IsSUFBSXJILEdBQUcsR0FBRUEsR0FBRyxDQUFDdkYsQ0FBQyxDQUFDLENBQUM0TSxXQUFXLENBQUMxRyxDQUFDLENBQUM7OEJBQzlCeUcsWUFBWSxDQUFDbE0sSUFBSSxDQUFDO2dDQUFDLFdBQVcsRUFBQzhFLEdBQUc7Z0NBQUMsTUFBTSxFQUFDQSxHQUFHO2dDQUFDLE9BQU8sRUFBQ0EsR0FBRztnQ0FBQyxPQUFPLEVBQUNBOzhCQUFHLENBQUMsQ0FBQzs0QkFFeEU7NEJBQ0FrRSxFQUFFLENBQUNwRSxRQUFRLEdBQUdzSCxZQUFZOzRCQUMxQjswQkFDRCxDQUFDLE1BQUk7NEJBQ0o7MEJBQUE7d0JBRUY7c0JBQ0Q7b0JBQ0Q7b0JBRWUsSUFBSTFNLE1BQU0sR0FBRyxDQUFDO29CQUNkLElBQUksQ0FBQyxNQUFJLENBQUN2QyxLQUFLLENBQUNkLFlBQVksQ0FBQ2lRLE1BQU0sQ0FBQyxVQUFVdkQsQ0FBQyxFQUFFO3NCQUM3QyxPQUFPL0QsR0FBRyxDQUFDdkYsQ0FBQyxDQUFDLENBQUNFLElBQUksSUFBSW9KLENBQUMsQ0FBQ3BKLElBQUk7b0JBQ2hDLENBQUMsQ0FBQyxDQUFDRCxNQUFNLEVBQUU7c0JBQ1BBLE1BQU0sR0FBRyxDQUFDO3NCQUNWLE1BQUksQ0FBQ3ZDLEtBQUssQ0FBQ2QsWUFBWSxDQUFDNkQsSUFBSSxDQUFDOEUsR0FBRyxDQUFDdkYsQ0FBQyxDQUFDLENBQUM7b0JBQ3hDO29CQUNBLElBQUlDLE1BQU0sSUFBSSxDQUFDLEVBQUU7c0JBQ2IsS0FBSyxJQUFJRyxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUcsTUFBSSxDQUFDMUMsS0FBSyxDQUFDZCxZQUFZLENBQUNxRCxNQUFNLEVBQUVHLENBQUMsRUFBRSxFQUFFO3dCQUNyRCxJQUFJLE1BQUksQ0FBQzFDLEtBQUssQ0FBQ2QsWUFBWSxDQUFDd0QsQ0FBQyxDQUFDLENBQUNGLElBQUksSUFBSXFGLEdBQUcsQ0FBQ3ZGLENBQUMsQ0FBQyxDQUFDRSxJQUFJLEVBQUU7MEJBQ2hELE1BQUksQ0FBQ3hDLEtBQUssQ0FBQ2QsWUFBWSxDQUFDd0QsQ0FBQyxDQUFDLENBQUNNLEtBQUssR0FBRzZFLEdBQUcsQ0FBQ3ZGLENBQUMsQ0FBQyxDQUFDVSxLQUFLO3dCQUNuRDtzQkFDSjtvQkFDSjtrQkFDSjtnQkFDSjtjQUNKO2NBQ0EsSUFBSStMLFdBQVcsSUFBSSxxQkFBcUIsRUFBRTtnQkFDL0NwUCxHQUFHLENBQUNTLFNBQVMsQ0FBQztrQkFBQzNCLEtBQUssRUFBQyxPQUFPO2tCQUFDNEIsT0FBTyxFQUFDLHVDQUF1QztrQkFBQ0MsVUFBVSxFQUFDLEtBQUs7a0JBQUNDLFdBQVcsRUFBQztnQkFBSSxDQUFDLENBQUM7Y0FDM0c7WUFDSjtVQUNKO1FBRUQsQ0FBQyxNQUFJO1VBQ0paLEdBQUcsQ0FBQ1MsU0FBUyxDQUFDO1lBQUMzQixLQUFLLEVBQUMsS0FBSztZQUFDNEIsT0FBTyxFQUFDZ0IsT0FBTyxDQUFDRSxHQUFHO1lBQUNqQixVQUFVLEVBQUMsS0FBSztZQUFDQyxXQUFXLEVBQUM7VUFBSSxDQUFDLENBQUM7UUFDbkY7TUFDRCxDQUFDLENBQUMsQ0FBQ2lCLEtBQUssQ0FBQyxVQUFBQyxFQUFFLEVBQUU7UUFDWjtRQUNBOUIsR0FBRyxDQUFDUyxTQUFTLENBQUM7VUFBQzNCLEtBQUssRUFBQyxPQUFPO1VBQUM0QixPQUFPLEVBQUNvQixFQUFFLENBQUNDLE1BQU07VUFBQ3BCLFVBQVUsRUFBQyxLQUFLO1VBQUNDLFdBQVcsRUFBQztRQUFJLENBQUMsQ0FBQztNQUNuRixDQUFDLENBQUM7SUFDSCxDQUFDO0lBQ0V1SCxxQkFBcUIsaUNBQUMzRSxJQUFJLEVBQUNtRSxTQUFTLEVBQUM7TUFDdkMsSUFBSTFHLEtBQUssR0FBRyxJQUFJO01BQ2IsSUFBSXFFLFVBQVUsR0FBRztRQUNiLFVBQVUsRUFBRSxNQUFNO1FBQUU7UUFDcEJzRixNQUFNLEVBQUUsSUFBSSxDQUFDdkssS0FBSyxDQUFDdEIsS0FBSyxDQUFDd0IsVUFBVSxDQUFDUyxFQUFFO1FBQU07UUFDNUMsUUFBUSxFQUFFLEtBQUs7UUFBSTtRQUNuQjZKLFdBQVcsRUFBRSxJQUFJO1FBQ2pCQyxNQUFNLEVBQUU7VUFDSkYsTUFBTSxFQUFFLElBQUksQ0FBQ3ZLLEtBQUssQ0FBQ3RCLEtBQUssQ0FBQ3dCLFVBQVUsQ0FBQ1MsRUFBRSxDQUFFO1VBQ3hDO1FBQ0o7TUFDSixDQUFDOztNQUNKc0UsVUFBVSxDQUFDbUssUUFBUSxHQUFHO1FBQ2xCckwsSUFBSSxFQUFFLE9BQU87UUFBQztRQUNkckQsUUFBUSxFQUFFLElBQUksQ0FBQ1YsS0FBSyxDQUFDdEIsS0FBSyxDQUFDd0IsVUFBVSxDQUFDUyxFQUFFLENBQUM7TUFDN0MsQ0FBQzs7TUFDRCxJQUFJMkcsU0FBUyxFQUFFO1FBQ1hyQyxVQUFVLENBQUNtSyxRQUFRLENBQUNDLFlBQVksR0FBRztVQUFDO1VBQ2hDdEssSUFBSSxFQUFFdUMsU0FBUyxDQUFDOUcsSUFBSTtVQUFDO1VBQ3JCOE8sSUFBSSxFQUFFaEksU0FBUyxDQUFDekUsUUFBUTtVQUFDO1VBQ3pCME0sVUFBVSxFQUFFakksU0FBUyxDQUFDa0ksU0FBUztVQUFDO1VBQ2hDekwsSUFBSSxFQUFFdUQsU0FBUyxDQUFDeEUsSUFBSTtVQUFDO1VBQ3JCMk0sUUFBUSxFQUFFbkksU0FBUyxDQUFDb0ksUUFBUTtVQUFDO1VBQzdCeEQsVUFBVSxFQUFFNUUsU0FBUyxDQUFDNEUsVUFBVTtVQUFDO1VBQ2pDQyxjQUFjLEVBQUU3RSxTQUFTLENBQUM2RSxjQUFjO1FBQzVDLENBQUM7TUFDTDs7TUFDRyxJQUFJMUwsUUFBUSxHQUFHO1FBQ1I0QyxNQUFNLEVBQUVGLElBQUksQ0FBQ0UsTUFBTTtRQUFFRCxPQUFPLEVBQUVELElBQUksQ0FBQ0MsT0FBTztRQUFFRSxTQUFTLEVBQUVILElBQUksQ0FBQ0csU0FBUyxDQUFDcU0sT0FBTyxDQUFDLEdBQUcsRUFBQyxFQUFFLENBQUMsQ0FBQ0EsT0FBTyxDQUFDLEdBQUcsRUFBQyxFQUFFLENBQUM7UUFDckdwTSxNQUFNLEVBQUVKLElBQUksQ0FBQ0ksTUFBTTtRQUFFQyxNQUFNLEVBQUVMLElBQUksQ0FBQ0ssTUFBTTtRQUFFQyxTQUFTLEVBQUVOLElBQUksQ0FBQ00sU0FBUztRQUFFQyxLQUFLLEVBQUVQLElBQUksQ0FBQ08sS0FBSztRQUFFQyxLQUFLLEVBQUVSLElBQUksQ0FBQ1EsS0FBSztRQUN6R25CLElBQUksRUFBRTFDLElBQUksQ0FBQ3lKLFNBQVMsQ0FBQ3BHLElBQUksQ0FBQ1gsSUFBSSxDQUFDO1FBQUV1SSxPQUFPLEVBQUVqTCxJQUFJLENBQUN5SixTQUFTLENBQUN0RSxVQUFVLENBQUM7UUFBRTRKLGNBQWMsRUFBRSxFQUFFO1FBQUU1UCxXQUFXLEVBQUVhLElBQUksQ0FBQ3lKLFNBQVMsQ0FBQyxJQUFJLENBQUN2SixLQUFLLENBQUNmLFdBQVc7TUFDaEosQ0FBQztNQUNKLGFBQVl3QixRQUFRO01BQ3BCLElBQUksQ0FBQ0ksTUFBTSxDQUFDTSxRQUFRLENBQUMsMkJBQTJCLEVBQUNWLFFBQVEsQ0FBQyxDQUFDVyxJQUFJLENBQUMsVUFBQUMsT0FBTyxFQUFFO1FBQ3hFLGFBQVlBLE9BQU87UUFDbkIsSUFBSUEsT0FBTyxDQUFDQyxJQUFJLElBQUUsT0FBTyxFQUFFO1VBQzdCLElBQUk5QyxJQUFJLEdBQUdzQixJQUFJLENBQUNDLEtBQUssQ0FBQ3NCLE9BQU8sQ0FBQzdDLElBQUksQ0FBQztVQUNoQyxJQUFJc1EsVUFBVSxHQUFHdFEsSUFBSSxDQUFDb0osTUFBTTtVQUU1QixJQUFJa0gsVUFBVSxFQUFFO1lBQ2xCLGFBQVlBLFVBQVU7WUFDaEIsS0FBSyxJQUFJeE0sQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHd00sVUFBVSxDQUFDdk0sTUFBTSxFQUFFRCxDQUFDLEVBQUUsRUFBRTtjQUN4QyxJQUFJc0YsTUFBTSxHQUFHa0gsVUFBVSxDQUFDeE0sQ0FBQyxDQUFDO2NBQzFCLElBQUlzRixNQUFNLENBQUNtSCxXQUFXLElBQUksY0FBYyxFQUFFO2dCQUN0QyxJQUFJdEksTUFBTSxHQUFHbUIsTUFBTSxDQUFDNUUsS0FBSztnQkFDekIsS0FBSyxJQUFJVixDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUdtRSxNQUFNLENBQUNsRSxNQUFNLEVBQUVELENBQUMsRUFBRSxFQUFFO2tCQUNsRCxJQUFJbUUsTUFBTSxDQUFDbkUsQ0FBQyxDQUFDLENBQUM0TSxXQUFXLEVBQUU7b0JBQzNCLEtBQUssSUFBSVUsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHaFAsS0FBSyxDQUFDWixLQUFLLENBQUNyQixhQUFhLENBQUM0RCxNQUFNLEVBQUVxTixDQUFDLEVBQUUsRUFBRTtzQkFDMUQsSUFBSXBOLElBQUksR0FBRzVCLEtBQUssQ0FBQ1osS0FBSyxDQUFDckIsYUFBYSxDQUFDaVIsQ0FBQyxDQUFDLENBQUNuTixJQUFJO3NCQUM1QyxLQUFLLElBQUlDLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBR0YsSUFBSSxDQUFDRCxNQUFNLEVBQUVHLENBQUMsRUFBRSxFQUFFO3dCQUNyQyxJQUFHRixJQUFJLENBQUNFLENBQUMsQ0FBQyxDQUFDbEMsSUFBSSxJQUFFaUcsTUFBTSxDQUFDbkUsQ0FBQyxDQUFDLENBQUNFLElBQUksRUFBQzswQkFDL0IsSUFBR0EsSUFBSSxDQUFDRSxDQUFDLENBQUMsQ0FBQ0ksSUFBSSxJQUFFLElBQUksSUFBSU4sSUFBSSxDQUFDRSxDQUFDLENBQUMsQ0FBQ0ksSUFBSSxJQUFFLFFBQVEsSUFBSU4sSUFBSSxDQUFDRSxDQUFDLENBQUMsQ0FBQ0ksSUFBSSxJQUFFLE9BQU8sRUFBQzs0QkFDeEUsSUFBSW1NLFlBQVksR0FBQyxFQUFFOzRCQUNuQixLQUFJLElBQUl6RyxDQUFDLElBQUkvQixNQUFNLENBQUNuRSxDQUFDLENBQUMsQ0FBQzRNLFdBQVcsRUFBQzs4QkFDbEMsSUFBSXJILEdBQUcsR0FBRXBCLE1BQU0sQ0FBQ25FLENBQUMsQ0FBQyxDQUFDNE0sV0FBVyxDQUFDMUcsQ0FBQyxDQUFDOzhCQUNqQ3lHLFlBQVksQ0FBQ2xNLElBQUksQ0FBQztnQ0FBQyxXQUFXLEVBQUM4RSxHQUFHO2dDQUFDLE1BQU0sRUFBQ0EsR0FBRztnQ0FBQyxPQUFPLEVBQUNBLEdBQUc7Z0NBQUMsT0FBTyxFQUFDQTs4QkFBRyxDQUFDLENBQUM7NEJBQ3hFOzRCQUNBckYsSUFBSSxDQUFDRSxDQUFDLENBQUMsQ0FBQ2lGLFFBQVEsR0FBR3NILFlBQVk7NEJBQy9COzBCQUNEO3dCQUNEO3NCQUNEO29CQUNEO2tCQUNjOztrQkFDQSxLQUFLLElBQUlXLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBR2hQLEtBQUssQ0FBQ1osS0FBSyxDQUFDckIsYUFBYSxDQUFDNEQsTUFBTSxFQUFFcU4sQ0FBQyxFQUFFLEVBQUU7b0JBQzFELElBQUlwTixJQUFJLEdBQUc1QixLQUFLLENBQUNaLEtBQUssQ0FBQ3JCLGFBQWEsQ0FBQ2lSLENBQUMsQ0FBQyxDQUFDbk4sSUFBSTtvQkFDNUMsS0FBSyxJQUFJQyxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUdGLElBQUksQ0FBQ0QsTUFBTSxFQUFFRyxDQUFDLEVBQUUsRUFBRTtzQkFDcEQsYUFBWUYsSUFBSSxDQUFDRSxDQUFDLENBQUMsQ0FBQ2xDLElBQUksR0FBQyxJQUFJLEdBQUNpRyxNQUFNLENBQUNuRSxDQUFDLENBQUMsQ0FBQ0UsSUFBSTtzQkFDN0IsSUFBR0EsSUFBSSxDQUFDRSxDQUFDLENBQUMsQ0FBQ2xDLElBQUksSUFBRWlHLE1BQU0sQ0FBQ25FLENBQUMsQ0FBQyxDQUFDRSxJQUFJLEVBQUM7d0JBQy9CQSxJQUFJLENBQUNFLENBQUMsQ0FBQyxDQUFDRSxLQUFLLEdBQUc2RCxNQUFNLENBQUNuRSxDQUFDLENBQUMsQ0FBQ1UsS0FBSztzQkFDaEM7b0JBQ0Q7a0JBQ0Q7a0JBQ2YsSUFBSVQsTUFBTSxHQUFHLENBQUM7a0JBQ0MsSUFBSSxDQUFDM0IsS0FBSyxDQUFDWixLQUFLLENBQUNkLFlBQVksQ0FBQ2lRLE1BQU0sQ0FBQyxVQUFVdkQsQ0FBQyxFQUFFO29CQUM5QyxPQUFPbkYsTUFBTSxDQUFDbkUsQ0FBQyxDQUFDLENBQUNFLElBQUksSUFBSW9KLENBQUMsQ0FBQ3BKLElBQUk7a0JBQ25DLENBQUMsQ0FBQyxDQUFDRCxNQUFNLEVBQUU7b0JBQ1BBLE1BQU0sR0FBRyxDQUFDO29CQUNWM0IsS0FBSyxDQUFDWixLQUFLLENBQUNkLFlBQVksQ0FBQzZELElBQUksQ0FBQzBELE1BQU0sQ0FBQ25FLENBQUMsQ0FBQyxDQUFDO2tCQUM1QztrQkFDQSxJQUFJQyxNQUFNLElBQUksQ0FBQyxFQUFFO29CQUNiLEtBQUssSUFBSUcsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHOUIsS0FBSyxDQUFDWixLQUFLLENBQUNkLFlBQVksQ0FBQ3FELE1BQU0sRUFBRUcsQ0FBQyxFQUFFLEVBQUU7c0JBQ3RELElBQUk5QixLQUFLLENBQUNaLEtBQUssQ0FBQ2QsWUFBWSxDQUFDd0QsQ0FBQyxDQUFDLENBQUNGLElBQUksSUFBSWlFLE1BQU0sQ0FBQ25FLENBQUMsQ0FBQyxDQUFDRSxJQUFJLEVBQUU7d0JBQ3BENUIsS0FBSyxDQUFDWixLQUFLLENBQUNkLFlBQVksQ0FBQ3dELENBQUMsQ0FBQyxDQUFDTSxLQUFLLEdBQUd5RCxNQUFNLENBQUNuRSxDQUFDLENBQUMsQ0FBQ1UsS0FBSztzQkFDdkQ7b0JBQ0o7a0JBQ0o7Z0JBQ0o7Y0FDSixDQUFDLE1BQU0sSUFBSXhFLElBQUksQ0FBQ29KLE1BQU0sQ0FBQ3RGLENBQUMsQ0FBQyxDQUFDeU0sV0FBVyxJQUFJLGlCQUFpQixFQUFFO2dCQUMzRG5PLEtBQUssQ0FBQ1osS0FBSyxDQUFDZixXQUFXLEdBQUdULElBQUksQ0FBQ29KLE1BQU0sQ0FBQ3RGLENBQUMsQ0FBQyxDQUFDVSxLQUFLLElBQUksRUFBRTtjQUN4RDtZQUNEO1VBQ0o7VUFFQSxJQUFJeEUsSUFBSSxDQUFDaUksTUFBTSxFQUFFO1lBQ2IsSUFBSUEsTUFBTSxHQUFHakksSUFBSSxDQUFDaUksTUFBTTtZQUN4QixLQUFLLElBQUluRSxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUdtRSxNQUFNLENBQUNsRSxNQUFNLEVBQUVELENBQUMsRUFBRSxFQUFFO2NBQ3BDLEtBQUssSUFBSXNOLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBR2hQLEtBQUssQ0FBQ1osS0FBSyxDQUFDckIsYUFBYSxDQUFDNEQsTUFBTSxFQUFFcU4sQ0FBQyxFQUFFLEVBQUU7Z0JBQzFELElBQUlwTixJQUFJLEdBQUc1QixLQUFLLENBQUNaLEtBQUssQ0FBQ3JCLGFBQWEsQ0FBQ2lSLENBQUMsQ0FBQyxDQUFDbk4sSUFBSTtnQkFDNUMsS0FBSyxJQUFJQyxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUdGLElBQUksQ0FBQ0QsTUFBTSxFQUFFRyxDQUFDLEVBQUUsRUFBRTtrQkFDckMsSUFBR0YsSUFBSSxDQUFDRSxDQUFDLENBQUMsQ0FBQ2xDLElBQUksSUFBRWlHLE1BQU0sQ0FBQ25FLENBQUMsQ0FBQyxDQUFDRSxJQUFJLEVBQUM7b0JBQy9CQSxJQUFJLENBQUNFLENBQUMsQ0FBQyxDQUFDRSxLQUFLLEdBQUc2RCxNQUFNLENBQUNuRSxDQUFDLENBQUMsQ0FBQ1UsS0FBSztrQkFDaEM7Z0JBQ0Q7Y0FDRDtjQUVULElBQUlULE1BQU0sR0FBRyxDQUFDO2NBQ0wsSUFBSSxDQUFDM0IsS0FBSyxDQUFDWixLQUFLLENBQUNkLFlBQVksQ0FBQ2lRLE1BQU0sQ0FBQyxVQUFVdkQsQ0FBQyxFQUFFO2dCQUM5QyxPQUFPbkYsTUFBTSxDQUFDbkUsQ0FBQyxDQUFDLENBQUNFLElBQUksSUFBSW9KLENBQUMsQ0FBQ3BKLElBQUk7Y0FDbkMsQ0FBQyxDQUFDLENBQUNELE1BQU0sRUFBRTtnQkFDUEEsTUFBTSxHQUFHLENBQUM7Z0JBQ1YzQixLQUFLLENBQUNaLEtBQUssQ0FBQ2QsWUFBWSxDQUFDNkQsSUFBSSxDQUFDMEQsTUFBTSxDQUFDbkUsQ0FBQyxDQUFDLENBQUM7Y0FDNUM7Y0FDQSxJQUFJQyxNQUFNLElBQUksQ0FBQyxFQUFFO2dCQUNiLEtBQUssSUFBSUcsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHOUIsS0FBSyxDQUFDWixLQUFLLENBQUNkLFlBQVksQ0FBQ3FELE1BQU0sRUFBRUcsQ0FBQyxFQUFFLEVBQUU7a0JBQ3RELElBQUk5QixLQUFLLENBQUNaLEtBQUssQ0FBQ2QsWUFBWSxDQUFDd0QsQ0FBQyxDQUFDLENBQUNGLElBQUksSUFBSWlFLE1BQU0sQ0FBQ25FLENBQUMsQ0FBQyxDQUFDRSxJQUFJLEVBQUU7b0JBQ3BENUIsS0FBSyxDQUFDWixLQUFLLENBQUNkLFlBQVksQ0FBQ3dELENBQUMsQ0FBQyxDQUFDTSxLQUFLLEdBQUd5RCxNQUFNLENBQUNuRSxDQUFDLENBQUMsQ0FBQ1UsS0FBSztrQkFDdkQ7Z0JBQ0o7Y0FDSjtZQUNKO1VBQ0o7UUFDRCxDQUFDLE1BQUk7VUFDSnJELEdBQUcsQ0FBQ1MsU0FBUyxDQUFDO1lBQUMzQixLQUFLLEVBQUMsS0FBSztZQUFDNEIsT0FBTyxFQUFDZ0IsT0FBTyxDQUFDRSxHQUFHO1lBQUNqQixVQUFVLEVBQUMsS0FBSztZQUFDQyxXQUFXLEVBQUM7VUFBSSxDQUFDLENBQUM7UUFDbkY7TUFDRCxDQUFDLENBQUMsQ0FBQ2lCLEtBQUssQ0FBQyxVQUFBQyxFQUFFLEVBQUU7UUFDWjtRQUNBOUIsR0FBRyxDQUFDUyxTQUFTLENBQUM7VUFBQzNCLEtBQUssRUFBQyxPQUFPO1VBQUM0QixPQUFPLEVBQUNvQixFQUFFLENBQUNDLE1BQU07VUFBQ3BCLFVBQVUsRUFBQyxLQUFLO1VBQUNDLFdBQVcsRUFBQztRQUFJLENBQUMsQ0FBQztNQUNuRixDQUFDLENBQUM7SUFDSCxDQUFDO0lBQ0pzUCx1QkFBdUIscUNBQUU7TUFBQTtNQUNyQixJQUFJNUssVUFBVSxHQUFHO1FBQ2hCLFVBQVUsRUFBRSxNQUFNO1FBQUU7UUFDcEJzRixNQUFNLEVBQUUsSUFBSSxDQUFDdkssS0FBSyxDQUFDdEIsS0FBSyxDQUFDd0IsVUFBVSxDQUFDUyxFQUFFO1FBQU07UUFDNUMsUUFBUSxFQUFFLEtBQUs7UUFBSTtRQUNuQjZKLFdBQVcsRUFBRSxJQUFJO1FBQ2pCQyxNQUFNLEVBQUU7VUFDSkYsTUFBTSxFQUFFLElBQUksQ0FBQ3ZLLEtBQUssQ0FBQ3RCLEtBQUssQ0FBQ3dCLFVBQVUsQ0FBQ1MsRUFBRSxDQUFFO1FBRTVDO01BQ0osQ0FBQzs7TUFFRCxJQUFJeUMsT0FBTyxHQUFHLElBQUksQ0FBQ3BELEtBQUssQ0FBQ2xCLGFBQWEsQ0FBQ3dQLFFBQVE7TUFDL0MsSUFBSXBMLEdBQUcsR0FBQyxFQUFFO01BQ1YsSUFBSWIsUUFBUSxHQUFHLElBQUksQ0FBQ3JDLEtBQUssQ0FBQ3JCLGFBQWE7TUFDdkMsS0FBSyxJQUFJMkQsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHRCxRQUFRLENBQUNFLE1BQU0sRUFBRUQsQ0FBQyxFQUFFLEVBQUU7UUFDekMsSUFBSUUsSUFBSSxHQUFHSCxRQUFRLENBQUNDLENBQUMsQ0FBQyxDQUFDRyxJQUFJO1FBQzNCLEtBQUssSUFBSUMsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHRixJQUFJLENBQUNELE1BQU0sRUFBRUcsQ0FBQyxFQUFFLEVBQUU7VUFDckMsSUFBSUMsRUFBRSxHQUFHSCxJQUFJLENBQUNFLENBQUMsQ0FBQztVQUNoQixJQUFHQyxFQUFFLENBQUNDLEtBQUssSUFBRSxLQUFLLElBQUlELEVBQUUsQ0FBQ0MsS0FBSyxJQUFFLFNBQVMsRUFBRUQsRUFBRSxDQUFDQyxLQUFLLEdBQUMsRUFBRTtVQUN0RCxJQUFHRCxFQUFFLENBQUNHLElBQUksSUFBRSxVQUFVLEVBQ3JCLElBQUdILEVBQUUsQ0FBQ0MsS0FBSyxJQUFFLEdBQUcsRUFBRUQsRUFBRSxDQUFDQyxLQUFLLEdBQUMsRUFBRTtVQUN4QixJQUFHRCxFQUFFLENBQUNHLElBQUksSUFBRSxNQUFNLElBQUlILEVBQUUsQ0FBQ0csSUFBSSxJQUFFLE1BQU0sRUFDcENJLEdBQUcsQ0FBQ0gsSUFBSSxDQUFDO1lBQUVQLElBQUksRUFBRUcsRUFBRSxDQUFDbkMsSUFBSTtZQUFFd0MsS0FBSyxFQUFFTCxFQUFFLENBQUNNLEtBQUssR0FBRU4sRUFBRSxDQUFDTSxLQUFLLEdBQUU7VUFBRyxDQUFDLENBQUMsQ0FBQyxLQUN2RCxJQUFHTixFQUFFLENBQUNHLElBQUksSUFBRSxLQUFLLEVBQzNCSSxHQUFHLENBQUNILElBQUksQ0FBQztZQUFFUCxJQUFJLEVBQUVHLEVBQUUsQ0FBQ25DLElBQUk7WUFBRXdDLEtBQUssRUFBRUwsRUFBRSxDQUFDQyxLQUFLLEdBQUMsR0FBRyxHQUFDO1VBQUcsQ0FBQyxDQUFDLENBQUMsS0FFcERNLEdBQUcsQ0FBQ0gsSUFBSSxDQUFDO1lBQUVQLElBQUksRUFBRUcsRUFBRSxDQUFDbkMsSUFBSTtZQUFFd0MsS0FBSyxFQUFFTCxFQUFFLENBQUNDO1VBQU0sQ0FBQyxDQUFDO1FBQzlDO01BQ0Q7TUFFRyxJQUFJLElBQUksQ0FBQzVDLEtBQUssQ0FBQ2QsWUFBWSxDQUFDcUQsTUFBTSxHQUFHLENBQUMsRUFBRTtRQUNwQyxLQUFLLElBQUlELENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBRyxJQUFJLENBQUN0QyxLQUFLLENBQUNkLFlBQVksQ0FBQ3FELE1BQU0sRUFBRUQsQ0FBQyxFQUFFLEVBQUU7VUFDckQsSUFBSSxDQUFDWSxHQUFHLENBQUNpTSxNQUFNLENBQUMsVUFBVXZELENBQUMsRUFBRTtZQUN6QixPQUFPLElBQUksQ0FBQzVMLEtBQUssQ0FBQ2QsWUFBWSxDQUFDb0QsQ0FBQyxDQUFDLENBQUNFLElBQUksSUFBSW9KLENBQUMsQ0FBQzdHLElBQUk7VUFDcEQsQ0FBQyxDQUFDLENBQUN4QyxNQUFNLEVBQUU7WUFDUEEsTUFBTSxHQUFHLENBQUM7WUFDVlcsR0FBRyxDQUFDSCxJQUFJLENBQUM7Y0FBRSxNQUFNLEVBQUUsSUFBSSxDQUFDL0MsS0FBSyxDQUFDZCxZQUFZLENBQUNvRCxDQUFDLENBQUMsQ0FBQ0UsSUFBSTtjQUFFLE9BQU8sRUFBRSxJQUFJLENBQUN4QyxLQUFLLENBQUNkLFlBQVksQ0FBQ29ELENBQUMsQ0FBQyxDQUFDVTtZQUFNLENBQUMsQ0FBQztVQUNwRztRQUNKO01BQ0o7TUFDQSxJQUFJRyxJQUFJLEdBQUc7UUFDUEMsT0FBTyxFQUFFQSxPQUFPO1FBQ2hCQyxNQUFNLEVBQUUsR0FBRztRQUNYQyxTQUFTLEVBQUUsRUFBRTtRQUNiQyxNQUFNLEVBQUUsRUFBRTtRQUNWQyxNQUFNLEVBQUUsRUFBRTtRQUNWQyxTQUFTLEVBQUUsRUFBRTtRQUNiQyxLQUFLLEVBQUUsSUFBSSxDQUFDMUQsS0FBSyxDQUFDdEIsS0FBSyxDQUFDd0IsVUFBVSxDQUFDUyxFQUFFO1FBQ3JDZ0QsS0FBSyxFQUFFLEVBQUU7UUFDVG5CLElBQUksRUFBRVU7TUFDVixDQUFDO01BQ0QsSUFBSXpDLFFBQVEsR0FBRztRQUNSNEMsTUFBTSxFQUFFRixJQUFJLENBQUNFLE1BQU07UUFBRUQsT0FBTyxFQUFFRCxJQUFJLENBQUNDLE9BQU87UUFBRUUsU0FBUyxFQUFFSCxJQUFJLENBQUNHLFNBQVM7UUFBQ0MsTUFBTSxFQUFFSixJQUFJLENBQUNJLE1BQU07UUFDbEdDLE1BQU0sRUFBRUwsSUFBSSxDQUFDSyxNQUFNO1FBQUVDLFNBQVMsRUFBRU4sSUFBSSxDQUFDTSxTQUFTO1FBQUVDLEtBQUssRUFBRVAsSUFBSSxDQUFDTyxLQUFLO1FBQUVDLEtBQUssRUFBRVIsSUFBSSxDQUFDUSxLQUFLO1FBQ3BGbkIsSUFBSSxFQUFFMUMsSUFBSSxDQUFDeUosU0FBUyxDQUFDcEcsSUFBSSxDQUFDWCxJQUFJLENBQUM7UUFBRXVJLE9BQU8sRUFBRWpMLElBQUksQ0FBQ3lKLFNBQVMsQ0FBQ3RFLFVBQVUsQ0FBQztRQUFFaEcsV0FBVyxFQUFFYSxJQUFJLENBQUN5SixTQUFTLENBQUMsSUFBSSxDQUFDdkosS0FBSyxDQUFDZixXQUFXO01BQ25ILENBQUM7TUFDSixhQUFZd0IsUUFBUTtNQUNwQixJQUFJLENBQUNJLE1BQU0sQ0FBQ00sUUFBUSxDQUFDLDJCQUEyQixFQUFDVixRQUFRLENBQUMsQ0FBQ1csSUFBSSxDQUFDLFVBQUFDLE9BQU8sRUFBRTtRQUN4RSxhQUFZQSxPQUFPO1FBQ25CLElBQUlBLE9BQU8sQ0FBQ0MsSUFBSSxJQUFFLE9BQU8sRUFBRTtVQUM3QixJQUFJOUMsSUFBSSxHQUFHc0IsSUFBSSxDQUFDQyxLQUFLLENBQUNzQixPQUFPLENBQUM3QyxJQUFJLENBQUM7VUFDaEMsSUFBSWlJLE1BQU0sR0FBR2pJLElBQUksQ0FBQ2lJLE1BQU07VUFDeEIsS0FBSyxJQUFJbkUsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHbUUsTUFBTSxDQUFDbEUsTUFBTSxFQUFFRCxDQUFDLEVBQUUsRUFBRTtZQUNwQztZQUNBLElBQUlDLE1BQU0sR0FBRyxDQUFDO1lBQ2QsSUFBSSxDQUFDLE1BQUksQ0FBQ3ZDLEtBQUssQ0FBQ2QsWUFBWSxDQUFDaVEsTUFBTSxDQUFDLFVBQVV2RCxDQUFDLEVBQUU7Y0FDN0MsT0FBT25GLE1BQU0sQ0FBQ25FLENBQUMsQ0FBQyxDQUFDRSxJQUFJLElBQUlvSixDQUFDLENBQUNwSixJQUFJO1lBQ25DLENBQUMsQ0FBQyxDQUFDRCxNQUFNLEVBQUU7Y0FDUEEsTUFBTSxHQUFHLENBQUM7Y0FDVixNQUFJLENBQUN2QyxLQUFLLENBQUNkLFlBQVksQ0FBQzZELElBQUksQ0FBQzBELE1BQU0sQ0FBQ25FLENBQUMsQ0FBQyxDQUFDO1lBQzNDO1lBQ0EsSUFBSUMsTUFBTSxJQUFJLENBQUMsRUFBRTtjQUNiLEtBQUssSUFBSUcsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHLE1BQUksQ0FBQzFDLEtBQUssQ0FBQ2QsWUFBWSxDQUFDcUQsTUFBTSxFQUFFRyxDQUFDLEVBQUUsRUFBRTtnQkFDckQsSUFBSSxNQUFJLENBQUMxQyxLQUFLLENBQUNkLFlBQVksQ0FBQ3dELENBQUMsQ0FBQyxDQUFDRixJQUFJLElBQUlpRSxNQUFNLENBQUNuRSxDQUFDLENBQUMsQ0FBQ0UsSUFBSSxFQUFFO2tCQUNuRCxNQUFJLENBQUN4QyxLQUFLLENBQUNkLFlBQVksQ0FBQ3dELENBQUMsQ0FBQyxDQUFDTSxLQUFLLEdBQUd5RCxNQUFNLENBQUNuRSxDQUFDLENBQUMsQ0FBQ1UsS0FBSztnQkFDdEQ7Y0FDSjtZQUNKO1VBQ0o7VUFFSCxNQUFJLENBQUNrSCxHQUFHLEVBQUU7UUFDUixDQUFDLE1BQUk7VUFDSnZLLEdBQUcsQ0FBQ1MsU0FBUyxDQUFDO1lBQUMzQixLQUFLLEVBQUMsS0FBSztZQUFDNEIsT0FBTyxFQUFDZ0IsT0FBTyxDQUFDRSxHQUFHO1lBQUNqQixVQUFVLEVBQUMsS0FBSztZQUFDQyxXQUFXLEVBQUM7VUFBSSxDQUFDLENBQUM7UUFDbkY7TUFDRCxDQUFDLENBQUMsQ0FBQ2lCLEtBQUssQ0FBQyxVQUFBQyxFQUFFLEVBQUU7UUFDWjtRQUNBOUIsR0FBRyxDQUFDUyxTQUFTLENBQUM7VUFBQzNCLEtBQUssRUFBQyxPQUFPO1VBQUM0QixPQUFPLEVBQUNvQixFQUFFLENBQUNDLE1BQU07VUFBQ3BCLFVBQVUsRUFBQyxLQUFLO1VBQUNDLFdBQVcsRUFBQztRQUFJLENBQUMsQ0FBQztNQUNuRixDQUFDLENBQUM7SUFDSCxDQUFDO0lBQ0Q0SSw0QkFBNEIsd0NBQUMvRixPQUFPLEVBQUNrRSxTQUFTLEVBQUM0QixlQUFlLEVBQUNoRixLQUFLLEVBQUNnRSxNQUFNLEVBQUM7TUFBQTtNQUM5RSxJQUFJakQsVUFBVSxHQUFHO1FBQ2IsVUFBVSxFQUFFLE1BQU07UUFBRTtRQUNwQnNGLE1BQU0sRUFBRSxJQUFJLENBQUN2SyxLQUFLLENBQUN0QixLQUFLLENBQUN3QixVQUFVLENBQUNTLEVBQUU7UUFBTTtRQUM1QyxRQUFRLEVBQUUsS0FBSztRQUFJO1FBQ25CNkosV0FBVyxFQUFFLElBQUk7UUFDakJDLE1BQU0sRUFBRTtVQUNKRixNQUFNLEVBQUUsSUFBSSxDQUFDdkssS0FBSyxDQUFDdEIsS0FBSyxDQUFDd0IsVUFBVSxDQUFDUyxFQUFFLENBQUU7VUFDeEM7UUFDSjtNQUNKLENBQUM7O01BQ0QsSUFBSXVDLEdBQUcsR0FBQyxFQUFFO01BQ1YsSUFBSWIsUUFBUSxHQUFHLElBQUksQ0FBQ3JDLEtBQUssQ0FBQ3JCLGFBQWE7TUFDdkMsS0FBSyxJQUFJMkQsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHRCxRQUFRLENBQUNFLE1BQU0sRUFBRUQsQ0FBQyxFQUFFLEVBQUU7UUFDekMsSUFBSUUsSUFBSSxHQUFHSCxRQUFRLENBQUNDLENBQUMsQ0FBQyxDQUFDRyxJQUFJO1FBQzNCLEtBQUssSUFBSUMsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHRixJQUFJLENBQUNELE1BQU0sRUFBRUcsQ0FBQyxFQUFFLEVBQUU7VUFDckMsSUFBSUMsRUFBRSxHQUFHSCxJQUFJLENBQUNFLENBQUMsQ0FBQztVQUNoQixJQUFHQyxFQUFFLENBQUNHLElBQUksSUFBRSxVQUFVLEVBQ3JCLElBQUdILEVBQUUsQ0FBQ0MsS0FBSyxJQUFFLEdBQUcsRUFBRUQsRUFBRSxDQUFDQyxLQUFLLEdBQUMsRUFBRTtVQUN4QixJQUFHRCxFQUFFLENBQUNHLElBQUksSUFBRSxNQUFNLElBQUlILEVBQUUsQ0FBQ0csSUFBSSxJQUFFLE1BQU0sRUFDcENJLEdBQUcsQ0FBQ0gsSUFBSSxDQUFDO1lBQUVQLElBQUksRUFBRUcsRUFBRSxDQUFDbkMsSUFBSTtZQUFFd0MsS0FBSyxFQUFFTCxFQUFFLENBQUNNLEtBQUssR0FBRU4sRUFBRSxDQUFDTSxLQUFLLEdBQUU7VUFBRyxDQUFDLENBQUMsQ0FBQyxLQUN2RCxJQUFHTixFQUFFLENBQUNHLElBQUksSUFBRSxLQUFLLEVBQzNCSSxHQUFHLENBQUNILElBQUksQ0FBQztZQUFFUCxJQUFJLEVBQUVHLEVBQUUsQ0FBQ25DLElBQUk7WUFBRXdDLEtBQUssRUFBRUwsRUFBRSxDQUFDQyxLQUFLLEdBQUMsR0FBRyxHQUFDO1VBQUcsQ0FBQyxDQUFDLENBQUMsS0FFcERNLEdBQUcsQ0FBQ0gsSUFBSSxDQUFDO1lBQUVQLElBQUksRUFBRUcsRUFBRSxDQUFDbkMsSUFBSTtZQUFFd0MsS0FBSyxFQUFFTCxFQUFFLENBQUNDO1VBQU0sQ0FBQyxDQUFDO1FBQzlDO01BQ0Q7TUFDQSxJQUFJLElBQUksQ0FBQzVDLEtBQUssQ0FBQ2QsWUFBWSxDQUFDcUQsTUFBTSxHQUFHLENBQUMsRUFBRTtRQUNwQyxLQUFLLElBQUlELENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBRyxJQUFJLENBQUN0QyxLQUFLLENBQUNkLFlBQVksQ0FBQ3FELE1BQU0sRUFBRUQsQ0FBQyxFQUFFLEVBQUU7VUFDckQsSUFBSSxDQUFDWSxHQUFHLENBQUNpTSxNQUFNLENBQUMsVUFBVXZELENBQUMsRUFBRTtZQUN6QixPQUFPLElBQUksQ0FBQzVMLEtBQUssQ0FBQ2QsWUFBWSxDQUFDb0QsQ0FBQyxDQUFDLENBQUNFLElBQUksSUFBSW9KLENBQUMsQ0FBQzdHLElBQUk7VUFDcEQsQ0FBQyxDQUFDLENBQUN4QyxNQUFNLEVBQUU7WUFDUEEsTUFBTSxHQUFHLENBQUM7WUFDVlcsR0FBRyxDQUFDSCxJQUFJLENBQUM7Y0FBRSxNQUFNLEVBQUUsSUFBSSxDQUFDL0MsS0FBSyxDQUFDZCxZQUFZLENBQUNvRCxDQUFDLENBQUMsQ0FBQ0UsSUFBSTtjQUFFLE9BQU8sRUFBRSxJQUFJLENBQUN4QyxLQUFLLENBQUNkLFlBQVksQ0FBQ29ELENBQUMsQ0FBQyxDQUFDVTtZQUFNLENBQUMsQ0FBQztVQUNwRztRQUNKO01BQ0o7TUFDQSxJQUFJK0gsT0FBTyxHQUFHOUYsVUFBVTtNQUN4QjhGLE9BQU8sQ0FBQ3FFLFFBQVEsR0FBRztRQUNmckwsSUFBSSxFQUFFLE9BQU87UUFBQztRQUNkckQsUUFBUSxFQUFFLElBQUksQ0FBQ1YsS0FBSyxDQUFDdEIsS0FBSyxDQUFDd0IsVUFBVSxDQUFDUyxFQUFFLENBQUM7TUFDN0MsQ0FBQzs7TUFDRCxJQUFJMkcsU0FBUyxFQUFFO1FBQ1h5RCxPQUFPLENBQUNxRSxRQUFRLENBQUNDLFlBQVksR0FBRztVQUFDO1VBQzdCdEssSUFBSSxFQUFFdUMsU0FBUyxDQUFDOUcsSUFBSTtVQUFDO1VBQ3JCOE8sSUFBSSxFQUFFaEksU0FBUyxDQUFDekUsUUFBUTtVQUFDO1VBQ3pCME0sVUFBVSxFQUFFakksU0FBUyxDQUFDa0ksU0FBUztVQUFDO1VBQ2hDekwsSUFBSSxFQUFFdUQsU0FBUyxDQUFDeEUsSUFBSTtVQUFDO1VBQ3JCMk0sUUFBUSxFQUFFbkksU0FBUyxDQUFDb0ksUUFBUTtVQUFDO1VBQzdCeEQsVUFBVSxFQUFFNUUsU0FBUyxDQUFDNEUsVUFBVTtVQUFDO1VBQ2pDQyxjQUFjLEVBQUU3RSxTQUFTLENBQUM2RSxjQUFjO1FBQzVDLENBQUM7TUFDTDs7TUFDQSxJQUFJMUwsUUFBUSxHQUFHO1FBQ2Q0QyxNQUFNLEVBQUcsR0FBRztRQUFFRCxPQUFPLEVBQUVBLE9BQU87UUFBRUUsU0FBUyxFQUFFLEVBQUU7UUFBQ0MsTUFBTSxFQUFFLEVBQUU7UUFBRUMsTUFBTSxFQUFFLEVBQUU7UUFBRUMsU0FBUyxFQUFFLEVBQUU7UUFDbkZDLEtBQUssRUFBRSxJQUFJLENBQUMxRCxLQUFLLENBQUN0QixLQUFLLENBQUN3QixVQUFVLENBQUNTLEVBQUU7UUFBRWdELEtBQUssRUFBRSxFQUFFO1FBQUNuQixJQUFJLEVBQUUxQyxJQUFJLENBQUN5SixTQUFTLENBQUNyRyxHQUFHLENBQUM7UUFDMUU2SCxPQUFPLEVBQUVqTCxJQUFJLENBQUN5SixTQUFTLENBQUN3QixPQUFPLENBQUM7UUFBRTlMLFdBQVcsRUFBRWEsSUFBSSxDQUFDeUosU0FBUyxDQUFDLElBQUksQ0FBQ3ZKLEtBQUssQ0FBQ2YsV0FBVztNQUNyRixDQUFDO01BQ0QsYUFBWXdCLFFBQVE7TUFDcEIsSUFBSSxDQUFDSSxNQUFNLENBQUNNLFFBQVEsQ0FBQywyQkFBMkIsRUFBQ1YsUUFBUSxDQUFDLENBQUNXLElBQUksQ0FBQyxVQUFBQyxPQUFPLEVBQUU7UUFDeEUsYUFBWUEsT0FBTztRQUNuQixJQUFJQSxPQUFPLENBQUNDLElBQUksSUFBRSxPQUFPLEVBQUU7VUFDMUIsSUFBSTlDLElBQUksR0FBR3NCLElBQUksQ0FBQ0MsS0FBSyxDQUFDc0IsT0FBTyxDQUFDN0MsSUFBSSxDQUFDO1VBQ25DLElBQUlBLElBQUksSUFBSSxFQUFFLEVBQUU7WUFFaEIsSUFBSXNSLE9BQU8sR0FBR3RSLElBQUksQ0FBQ29KLE1BQU07WUFDekIsYUFBWWtJLE9BQU87WUFDbkIsSUFBSUEsT0FBTyxFQUFFO2NBQ1QsS0FBSyxJQUFJeE4sQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHd04sT0FBTyxDQUFDdk4sTUFBTSxFQUFFRCxDQUFDLEVBQUUsRUFBRTtnQkFDckMsSUFBSXNGLE1BQU0sR0FBR2tJLE9BQU8sQ0FBQ3hOLENBQUMsQ0FBQztnQkFDdkIsSUFBSXVGLEdBQUcsR0FBR0QsTUFBTSxDQUFDNUUsS0FBSztnQkFDdEIsSUFBSWlDLFVBQVUsR0FBR25GLElBQUksQ0FBQ3lKLFNBQVMsQ0FBQ3RFLFVBQVUsQ0FBQztnQkFFM0MsSUFBSTJDLE1BQU0sQ0FBQ21ILFdBQVcsSUFBSSxZQUFZLEVBQUU7a0JBQ3JDLElBQUl2RyxDQUFDLEdBQUd1SCxNQUFNLENBQUM7b0JBQ1h0UixLQUFLLEVBQUUsNkNBQTZDLEdBQUcsSUFBSTtvQkFDM0Q0QixPQUFPLEVBQUV1SCxNQUFNLENBQUNtSCxXQUFXLEdBQUc7a0JBQ2xDLENBQUMsQ0FBQztrQkFDRnZHLENBQUMsQ0FBQ3hFLElBQUksRUFBRTtnQkFDWCxDQUFDLE1BQ0ksSUFBSTRELE1BQU0sQ0FBQ21ILFdBQVcsSUFBSSxxQkFBcUIsRUFBRTtrQkFDbEQsSUFBSWlCLEtBQUssR0FBR25JLEdBQUcsQ0FBQ21JLEtBQUs7a0JBQzlCO2tCQUNTLElBQUlwUCxLQUFLLEdBQUcsTUFBSTtrQkFDekIsSUFBSWxDLEtBQUssR0FBQztvQkFDVHdGLEtBQUssRUFBRUEsS0FBSztvQkFDWmdFLE1BQU0sRUFBQ0EsTUFBTTtvQkFDYmdCLGVBQWUsRUFBQ0EsZUFBZTtvQkFDL0JoRyxHQUFHLEVBQUNBLEdBQUc7b0JBQ1BvRSxTQUFTLEVBQUNBO2tCQUNYLENBQUM7a0JBQ0QzSCxHQUFHLENBQUMwSixVQUFVLENBQUM7b0JBQ0xDLEdBQUcsRUFBQyxvQ0FBb0MsR0FBQ3hKLElBQUksQ0FBQ3lKLFNBQVMsQ0FBQzdLLEtBQUssQ0FBQztvQkFDOUQ4SyxNQUFNLEVBQUM7c0JBQ05DLE1BQU0sa0JBQUNqTCxJQUFJLEVBQUNFLEtBQUssRUFBQzt3QkFDakI7d0JBQ0EsYUFBWUYsSUFBSTt3QkFDaEIsSUFBSXlSLGdCQUFnQixHQUFHdlIsS0FBSyxDQUFDd0ssZUFBZSxDQUFDUyxJQUFJLEVBQUU7d0JBQzVELElBQUl4RyxJQUFJLEdBQUc7MEJBQ1BDLE9BQU8sRUFBRTZNLGdCQUFnQjswQkFDekI1TSxNQUFNLEVBQUUsR0FBRzswQkFDWEMsU0FBUyxFQUFFLEVBQUU7MEJBQ2JDLE1BQU0sRUFBRSxFQUFFOzBCQUNWQyxNQUFNLEVBQUUsRUFBRTswQkFDVkMsU0FBUyxFQUFFLEVBQUU7MEJBQ2JDLEtBQUssRUFBRTlDLEtBQUssQ0FBQ1osS0FBSyxDQUFDdEIsS0FBSyxDQUFDd0IsVUFBVSxDQUFDUyxFQUFFOzBCQUN0Q2dELEtBQUssRUFBRSxFQUFFOzBCQUNUbkIsSUFBSSxFQUFFOUQsS0FBSyxDQUFDd0UsR0FBRzswQkFDZjJMLGNBQWMsRUFBRXJRO3dCQUNwQixDQUFDO3dCQUNEb0MsS0FBSyxDQUFDa0gscUJBQXFCLENBQUMzRSxJQUFJLEVBQUV6RSxLQUFLLENBQUM0SSxTQUFTLENBQUM7c0JBQzFDO29CQUNEO2tCQUNELENBQUMsQ0FBQztnQkFDTixDQUFDLE1BQ0ksSUFBSU0sTUFBTSxDQUFDbUgsV0FBVyxJQUFJLHFCQUFxQixFQUFFLENBRXRELENBQUMsTUFDSSxJQUFJbkgsTUFBTSxDQUFDbUgsV0FBVyxJQUFJLGlCQUFpQixFQUFFO2tCQUM5QyxJQUFJL0wsS0FBSyxHQUFHNEUsTUFBTSxDQUFDNUUsS0FBSztrQkFDeEIsSUFBSXdGLENBQUMsR0FBR3VILE1BQU0sQ0FBQztvQkFDWHRSLEtBQUssRUFBRSw2Q0FBNkMsR0FBRyxJQUFJO29CQUMzRDRCLE9BQU8sRUFBRXVILE1BQU0sQ0FBQ21ILFdBQVcsR0FBRztrQkFDbEMsQ0FBQyxDQUFDO2tCQUNGdkcsQ0FBQyxDQUFDeEUsSUFBSSxFQUFFO2dCQUNaLENBQUMsTUFDSSxJQUFJNEQsTUFBTSxDQUFDbUgsV0FBVyxJQUFJLHdCQUF3QixFQUFFO2tCQUNyRDtrQkFDQTtrQkFDQSxJQUFJbUIsTUFBTSxHQUFHLElBQUk7a0JBQ2pCLElBQUl0SSxNQUFNLENBQUM1RSxLQUFLLENBQUNtTixZQUFZLElBQUksTUFBTSxFQUNuQ0QsTUFBTSxHQUFHLEdBQUcsQ0FBQyxLQUNaLElBQUl0SSxNQUFNLENBQUM1RSxLQUFLLENBQUNtTixZQUFZLElBQUksUUFBUSxFQUMxQ0QsTUFBTSxHQUFHLEdBQUcsQ0FBQyxLQUNaLElBQUl0SSxNQUFNLENBQUM1RSxLQUFLLENBQUNtTixZQUFZLElBQUksTUFBTSxFQUN4Q0QsTUFBTSxHQUFHLEdBQUcsQ0FBQyxLQUNaLElBQUl0SSxNQUFNLENBQUM1RSxLQUFLLENBQUNtTixZQUFZLElBQUksTUFBTSxJQUFJdkksTUFBTSxDQUFDNUUsS0FBSyxDQUFDbU4sWUFBWSxJQUFJLE1BQU0sRUFDL0VELE1BQU0sR0FBRyxHQUFHLENBQUMsS0FDWixJQUFJdEksTUFBTSxDQUFDNUUsS0FBSyxDQUFDbU4sWUFBWSxJQUFJLE1BQU0sRUFDeENELE1BQU0sR0FBRyxHQUFHLENBQUMsS0FDWixJQUFJdEksTUFBTSxDQUFDNUUsS0FBSyxDQUFDbU4sWUFBWSxJQUFJLFFBQVEsRUFDdERELE1BQU0sR0FBRyxHQUFHO2tCQUViLElBQUl0UCxLQUFLLEdBQUcsTUFBSTtrQkFDaEIsSUFBSXdQLE1BQU0sR0FBQztvQkFDVmxNLEtBQUssRUFBRUEsS0FBSztvQkFDWmdFLE1BQU0sRUFBQ0EsTUFBTTtvQkFDYmdCLGVBQWUsRUFBQ0EsZUFBZTtvQkFDL0JoRyxHQUFHLEVBQUNBO2tCQUNMLENBQUM7a0JBQ0R2RCxHQUFHLENBQUMwSixVQUFVLENBQUM7b0JBQ2RDLEdBQUcsRUFBQywyQkFBMkIsR0FBQzRHLE1BQU0sR0FBQyxTQUFTLEdBQUNwUSxJQUFJLENBQUN5SixTQUFTLENBQUM2RyxNQUFNLENBQUM7b0JBQ3ZFNUcsTUFBTSxFQUFDO3NCQUNOQyxNQUFNLGtCQUFDakwsSUFBSSxFQUFDRSxLQUFLLEVBQUM7d0JBQ2pCa0MsS0FBSyxDQUFDWixLQUFLLENBQUNyQixhQUFhLENBQUNELEtBQUssQ0FBQ3dGLEtBQUssQ0FBQyxDQUFDekIsSUFBSSxDQUFDL0QsS0FBSyxDQUFDd0osTUFBTSxDQUFDLENBQUN0RixLQUFLLEdBQUNwRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUNnQyxJQUFJO3dCQUM1RUksS0FBSyxDQUFDWixLQUFLLENBQUNyQixhQUFhLENBQUNELEtBQUssQ0FBQ3dGLEtBQUssQ0FBQyxDQUFDekIsSUFBSSxDQUFDL0QsS0FBSyxDQUFDd0osTUFBTSxDQUFDLENBQUNqRixLQUFLLEdBQUN6RSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUNtQyxFQUFFLEdBQUMsR0FBRyxHQUFDbkMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDZ0MsSUFBSTt3QkFDbEYsSUFBSXlQLGdCQUFnQixHQUFHdlIsS0FBSyxDQUFDd0ssZUFBZSxDQUFDUyxJQUFJLEVBQUU7d0JBQzVELElBQUlzRyxnQkFBZ0IsRUFBRTswQkFDbEIsSUFBSTlNLElBQUksR0FBRzs0QkFDUEMsT0FBTyxFQUFFNk0sZ0JBQWdCOzRCQUN6QjVNLE1BQU0sRUFBRSxHQUFHOzRCQUNYQyxTQUFTLEVBQUU5RSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUNtQyxFQUFFOzRCQUNyQjRDLE1BQU0sRUFBRSxFQUFFOzRCQUNWQyxNQUFNLEVBQUUsRUFBRTs0QkFDVkMsU0FBUyxFQUFFLEVBQUU7NEJBQ2JDLEtBQUssRUFBRTlDLEtBQUssQ0FBQ1osS0FBSyxDQUFDdEIsS0FBSyxDQUFDd0IsVUFBVSxDQUFDUyxFQUFFOzRCQUN0Q2dELEtBQUssRUFBRSxFQUFFOzRCQUNUbkIsSUFBSSxFQUFFOUQsS0FBSyxDQUFDd0U7MEJBQ2hCLENBQUM7MEJBRUR0QyxLQUFLLENBQUNrSCxxQkFBcUIsQ0FBQzNFLElBQUksQ0FBQzt3QkFDckM7c0JBQ0Q7b0JBQ0Q7a0JBQ0QsQ0FBQyxDQUFDO2dCQUNHLENBQUMsTUFBTTtrQkFDSCxJQUFJcUYsQ0FBQyxHQUFHdUgsTUFBTSxDQUFDO29CQUNYdFIsS0FBSyxFQUFFLDZDQUE2QyxHQUFHLElBQUk7b0JBQzNENEIsT0FBTyxFQUFFdUgsTUFBTSxDQUFDbUgsV0FBVyxHQUFHO2tCQUNsQyxDQUFDLENBQUM7a0JBQ0Z2RyxDQUFDLENBQUN4RSxJQUFJLEVBQUU7Z0JBQ1o7Y0FDSjtZQUNKO1VBQ0EsQ0FBQyxNQUFJO1lBQ0pyRSxHQUFHLENBQUNTLFNBQVMsQ0FBQztjQUFDM0IsS0FBSyxFQUFDLE9BQU87Y0FBQzRCLE9BQU8sRUFBRSx1Q0FBdUMsR0FBRytDLE9BQU87Y0FBQzlDLFVBQVUsRUFBQyxLQUFLO2NBQUNDLFdBQVcsRUFBQztZQUFJLENBQUMsQ0FBQztVQUM1SDtRQUNELENBQUMsTUFBSTtVQUNKWixHQUFHLENBQUNTLFNBQVMsQ0FBQztZQUFDM0IsS0FBSyxFQUFDLEtBQUs7WUFBQzRCLE9BQU8sRUFBQ2dCLE9BQU8sQ0FBQ0UsR0FBRztZQUFDakIsVUFBVSxFQUFDLEtBQUs7WUFBQ0MsV0FBVyxFQUFDO1VBQUksQ0FBQyxDQUFDO1FBQ25GO01BQ0QsQ0FBQyxDQUFDLENBQUNpQixLQUFLLENBQUMsVUFBQUMsRUFBRSxFQUFFO1FBQ1o7UUFDQTlCLEdBQUcsQ0FBQ1MsU0FBUyxDQUFDO1VBQUMzQixLQUFLLEVBQUMsT0FBTztVQUFDNEIsT0FBTyxFQUFDb0IsRUFBRSxDQUFDQyxNQUFNO1VBQUNwQixVQUFVLEVBQUMsS0FBSztVQUFDQyxXQUFXLEVBQUM7UUFBSSxDQUFDLENBQUM7TUFDbkYsQ0FBQyxDQUFDO0lBQ0EsQ0FBQztJQUNEa08sOEJBQThCLDBDQUFDdEwsSUFBSSxFQUFDO01BQUE7TUFDbkMsSUFBSXpFLEtBQUssR0FBRztRQUNSZ1EsU0FBUyxFQUFFLElBQUksQ0FBQzFPLEtBQUssQ0FBQ3RCLEtBQUssQ0FBQ2tELE9BQU8sQ0FBQ3pCLFVBQVUsQ0FBQ0ssSUFBSTtRQUNuRG1PLFNBQVMsRUFBRSxJQUFJLENBQUMzTyxLQUFLLENBQUN0QixLQUFLLENBQUNrRCxPQUFPLENBQUN6QixVQUFVLENBQUNLLElBQUk7UUFDbkRvTyxrQkFBa0IsRUFBRSxDQUFDO1FBQ3JCM0osVUFBVSxFQUFFO1VBQ1IsVUFBVSxFQUFFLE1BQU07VUFBRTtVQUNwQnNGLE1BQU0sRUFBRSxJQUFJLENBQUN2SyxLQUFLLENBQUN0QixLQUFLLENBQUNrRCxPQUFPLENBQUNqQixFQUFFO1VBQU07VUFDekMsUUFBUSxFQUFFLEtBQUs7VUFBSTtVQUNuQjZKLFdBQVcsRUFBRSxJQUFJO1VBQ2pCQyxNQUFNLEVBQUU7WUFDSkYsTUFBTSxFQUFFLElBQUksQ0FBQ3ZLLEtBQUssQ0FBQ3RCLEtBQUssQ0FBQ2tELE9BQU8sQ0FBQ2pCLEVBQUUsQ0FBRTtZQUNyQztVQUNKO1FBQ0o7TUFDSixDQUFDOztNQUNELElBQUlrTyxjQUFjLEdBQUcsRUFBRTtNQUN2QixJQUFJNVAsV0FBVyxHQUFHLEVBQUU7TUFFcEIsSUFBSXdCLFFBQVEsR0FBRztRQUNSNEMsTUFBTSxFQUFFRixJQUFJLENBQUNFLE1BQU07UUFBRUQsT0FBTyxFQUFFRCxJQUFJLENBQUNDLE9BQU87UUFBRUUsU0FBUyxFQUFFSCxJQUFJLENBQUNHLFNBQVM7UUFDckVDLE1BQU0sRUFBRUosSUFBSSxDQUFDSSxNQUFNO1FBQUVDLE1BQU0sRUFBRUwsSUFBSSxDQUFDSyxNQUFNO1FBQUVDLFNBQVMsRUFBRU4sSUFBSSxDQUFDTSxTQUFTO1FBQUVDLEtBQUssRUFBRVAsSUFBSSxDQUFDTyxLQUFLO1FBQUVDLEtBQUssRUFBRVIsSUFBSSxDQUFDUSxLQUFLO1FBQ3pHbkIsSUFBSSxFQUFFMUMsSUFBSSxDQUFDeUosU0FBUyxDQUFDcEcsSUFBSSxDQUFDWCxJQUFJLENBQUM7UUFBRXVJLE9BQU8sRUFBRWpMLElBQUksQ0FBQ3lKLFNBQVMsQ0FBQzdLLEtBQUssQ0FBQztRQUFFbVEsY0FBYyxFQUFFQSxjQUFjO1FBQUU1UCxXQUFXLEVBQUVBO01BQ2xILENBQUM7TUFDSixhQUFZd0IsUUFBUTtNQUNwQixJQUFJLENBQUNJLE1BQU0sQ0FBQ00sUUFBUSxDQUFDLDJCQUEyQixFQUFDVixRQUFRLENBQUMsQ0FBQ1csSUFBSSxDQUFDLFVBQUFDLE9BQU8sRUFBRTtRQUN4RSxhQUFZQSxPQUFPO1FBQ25CLElBQUlBLE9BQU8sQ0FBQ0MsSUFBSSxJQUFFLE9BQU8sRUFBRTtVQUMxQixJQUFJOUMsSUFBSSxHQUFHc0IsSUFBSSxDQUFDQyxLQUFLLENBQUNzQixPQUFPLENBQUM3QyxJQUFJLENBQUM7VUFDbkMsSUFBSXNRLFVBQVUsR0FBR3RRLElBQUksQ0FBQ29KLE1BQU07VUFDNUIsSUFBSWtILFVBQVUsRUFBRTtZQUNaLEtBQUssSUFBSXBNLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBR29NLFVBQVUsQ0FBQ3ZNLE1BQU0sRUFBRUcsQ0FBQyxFQUFFLEVBQUU7Y0FDeEMsSUFBSWtGLE1BQU0sR0FBR2tILFVBQVUsQ0FBQ3BNLENBQUMsQ0FBQztjQUMxQixJQUFJcU0sV0FBVyxHQUFHbkgsTUFBTSxDQUFDbUgsV0FBVztjQUNwQyxJQUFJL0wsS0FBSyxHQUFHNEUsTUFBTSxDQUFDNUUsS0FBSztjQUN4QixJQUFJK0wsV0FBVyxJQUFJLGNBQWMsRUFBRTtnQkFDL0IsSUFBSS9MLEtBQUssRUFBRTtrQkFDUCxJQUFJNkUsR0FBRyxHQUFHN0UsS0FBSztrQkFDZixJQUFJLE9BQU9BLEtBQUssSUFBSSxRQUFRLEVBQUU7b0JBQzFCNkUsR0FBRyxHQUFHL0gsSUFBSSxDQUFDQyxLQUFLLENBQUNpRCxLQUFLLENBQUM7a0JBQzNCO2tCQUNaLGFBQVk2RSxHQUFHO2tCQUNILEtBQUssSUFBSXZGLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBR3VGLEdBQUcsQ0FBQ3RGLE1BQU0sRUFBRUQsQ0FBQyxFQUFFLEVBQUU7b0JBQ2hELEtBQUssSUFBSTBNLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBRyxNQUFJLENBQUNoUCxLQUFLLENBQUNaLGdCQUFnQixDQUFDbUQsTUFBTSxFQUFFeU0sQ0FBQyxFQUFFLEVBQUU7c0JBQzVELEtBQUssSUFBSWxELENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBRyxNQUFJLENBQUM5TCxLQUFLLENBQUNaLGdCQUFnQixDQUFDNFAsQ0FBQyxDQUFDLENBQUN2TSxJQUFJLENBQUNGLE1BQU0sRUFBRXVKLENBQUMsRUFBRSxFQUFFO3dCQUNwRSxJQUFJQyxFQUFFLEdBQUcsTUFBSSxDQUFDL0wsS0FBSyxDQUFDWixnQkFBZ0IsQ0FBQzRQLENBQUMsQ0FBQyxDQUFDdk0sSUFBSSxDQUFDcUosQ0FBQyxDQUFDO3dCQUMvQyxJQUFJakUsR0FBRyxDQUFDdkYsQ0FBQyxDQUFDLENBQUNFLElBQUksSUFBS3VKLEVBQUUsQ0FBQ3ZMLElBQUksRUFBRTswQkFDNUIsSUFBR3VMLEVBQUUsQ0FBQ2pKLElBQUksSUFBRSxJQUFJLElBQUlpSixFQUFFLENBQUNqSixJQUFJLElBQUUsUUFBUSxJQUFJaUosRUFBRSxDQUFDakosSUFBSSxJQUFFLE9BQU8sRUFBQzs0QkFDekQsSUFBSW1NLFlBQVksR0FBQyxFQUFFOzRCQUNuQixLQUFJLElBQUl6RyxDQUFDLElBQUlYLEdBQUcsQ0FBQ3ZGLENBQUMsQ0FBQyxDQUFDNE0sV0FBVyxFQUFDOzhCQUMvQixJQUFJckgsR0FBRyxHQUFFQSxHQUFHLENBQUN2RixDQUFDLENBQUMsQ0FBQzRNLFdBQVcsQ0FBQzFHLENBQUMsQ0FBQzs4QkFDOUJ5RyxZQUFZLENBQUNsTSxJQUFJLENBQUM7Z0NBQUMsV0FBVyxFQUFDOEUsR0FBRztnQ0FBQyxNQUFNLEVBQUNBLEdBQUc7Z0NBQUMsT0FBTyxFQUFDQSxHQUFHO2dDQUFDLE9BQU8sRUFBQ0E7OEJBQUcsQ0FBQyxDQUFDOzRCQUV4RTs0QkFDQWtFLEVBQUUsQ0FBQ3BFLFFBQVEsR0FBR3NILFlBQVk7NEJBQzFCOzBCQUNELENBQUMsTUFBSTs0QkFDSjswQkFBQTt3QkFFRjtzQkFDRDtvQkFDRDtvQkFFZSxJQUFJMU0sTUFBTSxHQUFHLENBQUM7b0JBQ2QsSUFBSSxDQUFDLE1BQUksQ0FBQ3ZDLEtBQUssQ0FBQ2QsWUFBWSxDQUFDaVEsTUFBTSxDQUFDLFVBQVV2RCxDQUFDLEVBQUU7c0JBQzdDLE9BQU8vRCxHQUFHLENBQUN2RixDQUFDLENBQUMsQ0FBQ0UsSUFBSSxJQUFJb0osQ0FBQyxDQUFDcEosSUFBSTtvQkFDaEMsQ0FBQyxDQUFDLENBQUNELE1BQU0sRUFBRTtzQkFDUEEsTUFBTSxHQUFHLENBQUM7c0JBQ1YsTUFBSSxDQUFDdkMsS0FBSyxDQUFDZCxZQUFZLENBQUM2RCxJQUFJLENBQUM4RSxHQUFHLENBQUN2RixDQUFDLENBQUMsQ0FBQztvQkFDeEM7b0JBQ0EsSUFBSUMsTUFBTSxJQUFJLENBQUMsRUFBRTtzQkFDYixLQUFLLElBQUlHLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBRyxNQUFJLENBQUMxQyxLQUFLLENBQUNkLFlBQVksQ0FBQ3FELE1BQU0sRUFBRUcsQ0FBQyxFQUFFLEVBQUU7d0JBQ3JELElBQUksTUFBSSxDQUFDMUMsS0FBSyxDQUFDZCxZQUFZLENBQUN3RCxDQUFDLENBQUMsQ0FBQ0YsSUFBSSxJQUFJcUYsR0FBRyxDQUFDdkYsQ0FBQyxDQUFDLENBQUNFLElBQUksRUFBRTswQkFDaEQsTUFBSSxDQUFDeEMsS0FBSyxDQUFDZCxZQUFZLENBQUN3RCxDQUFDLENBQUMsQ0FBQ00sS0FBSyxHQUFHNkUsR0FBRyxDQUFDdkYsQ0FBQyxDQUFDLENBQUNVLEtBQUs7d0JBQ25EO3NCQUNKO29CQUNKO2tCQUNKO2dCQUNKO2NBQ0o7Y0FDQSxJQUFJK0wsV0FBVyxJQUFJLHFCQUFxQixFQUFFO2dCQUMvQ3BQLEdBQUcsQ0FBQ1MsU0FBUyxDQUFDO2tCQUFDM0IsS0FBSyxFQUFDLE9BQU87a0JBQUM0QixPQUFPLEVBQUMsdUNBQXVDO2tCQUFDQyxVQUFVLEVBQUMsS0FBSztrQkFBQ0MsV0FBVyxFQUFDO2dCQUFJLENBQUMsQ0FBQztjQUMzRztZQUNKO1VBQ0o7UUFFRCxDQUFDLE1BQUk7VUFDSlosR0FBRyxDQUFDUyxTQUFTLENBQUM7WUFBQzNCLEtBQUssRUFBQyxLQUFLO1lBQUM0QixPQUFPLEVBQUNnQixPQUFPLENBQUNFLEdBQUc7WUFBQ2pCLFVBQVUsRUFBQyxLQUFLO1lBQUNDLFdBQVcsRUFBQztVQUFJLENBQUMsQ0FBQztRQUNuRjtNQUNELENBQUMsQ0FBQyxDQUFDaUIsS0FBSyxDQUFDLFVBQUFDLEVBQUUsRUFBRTtRQUNaO1FBQ0E5QixHQUFHLENBQUNTLFNBQVMsQ0FBQztVQUFDM0IsS0FBSyxFQUFDLE9BQU87VUFBQzRCLE9BQU8sRUFBQ29CLEVBQUUsQ0FBQ0MsTUFBTTtVQUFDcEIsVUFBVSxFQUFDLEtBQUs7VUFBQ0MsV0FBVyxFQUFDO1FBQUksQ0FBQyxDQUFDO01BQ25GLENBQUMsQ0FBQztJQUNILENBQUM7SUFDRHNELDBCQUEwQixzQ0FBQ1YsSUFBSSxFQUFDbUUsU0FBUyxFQUFDO01BQUE7TUFDekMsSUFBSTFHLEtBQUssR0FBRyxJQUFJO01BQ2hCLElBQUlxRSxVQUFVLEdBQUc7UUFDYixVQUFVLEVBQUUsTUFBTTtRQUFFO1FBQ3BCc0YsTUFBTSxFQUFFLE1BQU07UUFBQztRQUNmLFFBQVEsRUFBRSxLQUFLO1FBQUk7UUFDbkJDLFdBQVcsRUFBRSxJQUFJO1FBQ2pCQyxNQUFNLEVBQUU7VUFDSkYsTUFBTSxFQUFFLE1BQU07VUFBQztVQUN4Qi9ILElBQUksRUFBRVcsSUFBSSxDQUFDZixTQUFTLENBQUM7VUFDWjtRQUNKO01BQ0osQ0FBQzs7TUFDRDZDLFVBQVUsQ0FBQ21LLFFBQVEsR0FBRztRQUN4QnJMLElBQUksRUFBRSxPQUFPO1FBQUM7UUFDUnJELFFBQVEsRUFBRSxNQUFNLENBQUM7TUFDckIsQ0FBQzs7TUFDRCxJQUFJNEcsU0FBUyxFQUFFO1FBQ1hyQyxVQUFVLENBQUNtSyxRQUFRLENBQUNDLFlBQVksR0FBRztVQUFDO1VBQ2hDdEssSUFBSSxFQUFFdUMsU0FBUyxDQUFDOUcsSUFBSTtVQUFDO1VBQ3JCOE8sSUFBSSxFQUFFaEksU0FBUyxDQUFDekUsUUFBUTtVQUFDO1VBQ3pCME0sVUFBVSxFQUFFakksU0FBUyxDQUFDa0ksU0FBUztVQUFDO1VBQ2hDekwsSUFBSSxFQUFFdUQsU0FBUyxDQUFDeEUsSUFBSTtVQUFDO1VBQ3JCMk0sUUFBUSxFQUFFbkksU0FBUyxDQUFDb0ksUUFBUTtVQUFDO1VBQzdCeEQsVUFBVSxFQUFFNUUsU0FBUyxDQUFDNEUsVUFBVTtVQUFDO1VBQ2pDQyxjQUFjLEVBQUU3RSxTQUFTLENBQUM2RSxjQUFjO1FBQzVDLENBQUM7TUFDTDs7TUFFQSxJQUFJMUwsUUFBUSxHQUFHO1FBQ1I0QyxNQUFNLEVBQUVGLElBQUksQ0FBQ0UsTUFBTTtRQUFFRCxPQUFPLEVBQUVELElBQUksQ0FBQ0MsT0FBTztRQUFFRSxTQUFTLEVBQUVILElBQUksQ0FBQ0csU0FBUyxDQUFDcU0sT0FBTyxDQUFDLEdBQUcsRUFBQyxFQUFFLENBQUMsQ0FBQ0EsT0FBTyxDQUFDLEdBQUcsRUFBQyxFQUFFLENBQUM7UUFDckdwTSxNQUFNLEVBQUVKLElBQUksQ0FBQ0ksTUFBTTtRQUFFQyxNQUFNLEVBQUVMLElBQUksQ0FBQ0ssTUFBTTtRQUFFQyxTQUFTLEVBQUVOLElBQUksQ0FBQ00sU0FBUztRQUFFQyxLQUFLLEVBQUVQLElBQUksQ0FBQ08sS0FBSztRQUFFQyxLQUFLLEVBQUVSLElBQUksQ0FBQ1EsS0FBSztRQUN6R25CLElBQUksRUFBRTFDLElBQUksQ0FBQ3lKLFNBQVMsQ0FBQ3BHLElBQUksQ0FBQ1gsSUFBSSxDQUFDO1FBQUV1SSxPQUFPLEVBQUVqTCxJQUFJLENBQUN5SixTQUFTLENBQUN0RSxVQUFVLENBQUM7UUFBRTRKLGNBQWMsRUFBRS9PLElBQUksQ0FBQ3lKLFNBQVMsQ0FBQ3BHLElBQUksQ0FBQ1MsYUFBYSxDQUFDO1FBQUUzRSxXQUFXLEVBQUVhLElBQUksQ0FBQ3lKLFNBQVMsQ0FBQyxJQUFJLENBQUN2SixLQUFLLENBQUNmLFdBQVc7TUFDaEwsQ0FBQztNQUNKLGFBQVl3QixRQUFRO01BQ3BCLElBQUksQ0FBQ0ksTUFBTSxDQUFDTSxRQUFRLENBQUMsMkJBQTJCLEVBQUNWLFFBQVEsQ0FBQyxDQUFDVyxJQUFJLENBQUMsVUFBQUMsT0FBTyxFQUFFO1FBQ3hFLGFBQVlBLE9BQU87UUFDbkIsSUFBSUEsT0FBTyxDQUFDQyxJQUFJLElBQUUsT0FBTyxFQUFFO1VBQzFCLElBQUk5QyxJQUFJLEdBQUdzQixJQUFJLENBQUNDLEtBQUssQ0FBQ3NCLE9BQU8sQ0FBQzdDLElBQUksQ0FBQztVQUNuQyxJQUFJc1EsVUFBVSxHQUFHdFEsSUFBSSxDQUFDb0osTUFBTTtVQUU1QixJQUFJa0gsVUFBVSxFQUFFO1lBQ2YsYUFBWUEsVUFBVTtZQUNuQixLQUFLLElBQUl2QixFQUFFLEdBQUcsQ0FBQyxFQUFFQSxFQUFFLEdBQUd1QixVQUFVLENBQUN2TSxNQUFNLEVBQUVnTCxFQUFFLEVBQUUsRUFBRTtjQUMzQyxJQUFJM0YsTUFBTSxHQUFHa0gsVUFBVSxDQUFDdkIsRUFBRSxDQUFDO2NBQzNCLElBQUkzRixNQUFNLENBQUNtSCxXQUFXLElBQUksY0FBYyxFQUFFO2dCQUN0QyxJQUFJdEksTUFBTSxHQUFHbUIsTUFBTSxDQUFDNUUsS0FBSztnQkFDekIsS0FBSyxJQUFJVixDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUdtRSxNQUFNLENBQUNsRSxNQUFNLEVBQUVELENBQUMsRUFBRSxFQUFFO2tCQUNoRCxJQUFJbUUsTUFBTSxDQUFDbkUsQ0FBQyxDQUFDLENBQUM0TSxXQUFXLEVBQUU7b0JBQzFCLEtBQUssSUFBSXRELENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBR2hMLEtBQUssQ0FBQ1osS0FBSyxDQUFDWCxZQUFZLENBQUNrRCxNQUFNLEVBQUVxSixDQUFDLEVBQUUsRUFBRTtzQkFDekQsS0FBSyxJQUFJZ0UsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHaFAsS0FBSyxDQUFDWixLQUFLLENBQUNYLFlBQVksQ0FBQ3VNLENBQUMsQ0FBQyxDQUFDeE0sZ0JBQWdCLENBQUNtRCxNQUFNLEVBQUVxTixDQUFDLEVBQUUsRUFBRTt3QkFDN0UsSUFBSXBOLElBQUksR0FBRzVCLEtBQUssQ0FBQ1osS0FBSyxDQUFDWCxZQUFZLENBQUN1TSxDQUFDLENBQUMsQ0FBQ3hNLGdCQUFnQixDQUFDd1EsQ0FBQyxDQUFDLENBQUNuTixJQUFJO3dCQUNsRSxLQUFLLElBQUlDLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBR0YsSUFBSSxDQUFDRCxNQUFNLEVBQUVHLENBQUMsRUFBRSxFQUFFOzBCQUNyQyxJQUFHRixJQUFJLENBQUNFLENBQUMsQ0FBQyxDQUFDbEMsSUFBSSxJQUFFaUcsTUFBTSxDQUFDbkUsQ0FBQyxDQUFDLENBQUNFLElBQUksRUFBQzs0QkFDL0IsSUFBR0EsSUFBSSxDQUFDRSxDQUFDLENBQUMsQ0FBQ0ksSUFBSSxJQUFFLElBQUksSUFBSU4sSUFBSSxDQUFDRSxDQUFDLENBQUMsQ0FBQ0ksSUFBSSxJQUFFLFFBQVEsSUFBSU4sSUFBSSxDQUFDRSxDQUFDLENBQUMsQ0FBQ0ksSUFBSSxJQUFFLE9BQU8sRUFBQzs4QkFDeEUsSUFBSW1NLFlBQVksR0FBQyxFQUFFOzhCQUNuQixLQUFJLElBQUl6RyxDQUFDLElBQUkvQixNQUFNLENBQUNuRSxDQUFDLENBQUMsQ0FBQzRNLFdBQVcsRUFBQztnQ0FDbEMsSUFBSXJILEdBQUcsR0FBRXBCLE1BQU0sQ0FBQ25FLENBQUMsQ0FBQyxDQUFDNE0sV0FBVyxDQUFDMUcsQ0FBQyxDQUFDO2dDQUNqQ3lHLFlBQVksQ0FBQ2xNLElBQUksQ0FBQztrQ0FBQyxXQUFXLEVBQUM4RSxHQUFHO2tDQUFDLE1BQU0sRUFBQ0EsR0FBRztrQ0FBQyxPQUFPLEVBQUNBLEdBQUc7a0NBQUMsT0FBTyxFQUFDQTtnQ0FBRyxDQUFDLENBQUM7OEJBQ3hFOzhCQUNBckYsSUFBSSxDQUFDRSxDQUFDLENBQUMsQ0FBQ2lGLFFBQVEsR0FBR3NILFlBQVk7OEJBQy9COzRCQUNEOzBCQUNEO3dCQUNEO3NCQUNEO29CQUNFO2tCQUNXOztrQkFDQSxLQUFLLElBQUlyRCxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUdoTCxLQUFLLENBQUNaLEtBQUssQ0FBQ1gsWUFBWSxDQUFDa0QsTUFBTSxFQUFFcUosQ0FBQyxFQUFFLEVBQUU7b0JBQ3pELEtBQUssSUFBSWdFLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBR2hQLEtBQUssQ0FBQ1osS0FBSyxDQUFDWCxZQUFZLENBQUN1TSxDQUFDLENBQUMsQ0FBQ3hNLGdCQUFnQixDQUFDbUQsTUFBTSxFQUFFcU4sQ0FBQyxFQUFFLEVBQUU7c0JBQzdFLElBQUlwTixJQUFJLEdBQUc1QixLQUFLLENBQUNaLEtBQUssQ0FBQ1gsWUFBWSxDQUFDdU0sQ0FBQyxDQUFDLENBQUN4TSxnQkFBZ0IsQ0FBQ3dRLENBQUMsQ0FBQyxDQUFDbk4sSUFBSTtzQkFDL0QsS0FBSyxJQUFJQyxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUdGLElBQUksQ0FBQ0QsTUFBTSxFQUFFRyxDQUFDLEVBQUUsRUFBRTt3QkFDckMsYUFBWUYsSUFBSSxDQUFDRSxDQUFDLENBQUMsQ0FBQ2xDLElBQUksR0FBQyxJQUFJLEdBQUNpRyxNQUFNLENBQUNuRSxDQUFDLENBQUMsQ0FBQ0UsSUFBSTt3QkFDNUMsSUFBR0EsSUFBSSxDQUFDRSxDQUFDLENBQUMsQ0FBQ2xDLElBQUksSUFBRWlHLE1BQU0sQ0FBQ25FLENBQUMsQ0FBQyxDQUFDRSxJQUFJLEVBQUM7MEJBQy9CQSxJQUFJLENBQUNFLENBQUMsQ0FBQyxDQUFDRSxLQUFLLEdBQUc2RCxNQUFNLENBQUNuRSxDQUFDLENBQUMsQ0FBQ1UsS0FBSzt3QkFDaEM7c0JBQ0Q7b0JBQ0Q7a0JBQ0Q7a0JBQ1osSUFBSVQsTUFBTSxHQUFHLENBQUM7a0JBQ0YsSUFBSSxDQUFDM0IsS0FBSyxDQUFDWixLQUFLLENBQUNkLFlBQVksQ0FBQ2lRLE1BQU0sQ0FBQyxVQUFVdkQsQ0FBQyxFQUFFO29CQUM5QyxPQUFPbkYsTUFBTSxDQUFDbkUsQ0FBQyxDQUFDLENBQUNFLElBQUksSUFBSW9KLENBQUMsQ0FBQ3BKLElBQUk7a0JBQ25DLENBQUMsQ0FBQyxDQUFDRCxNQUFNLEVBQUU7b0JBQ1BBLE1BQU0sR0FBRyxDQUFDO29CQUNWM0IsS0FBSyxDQUFDWixLQUFLLENBQUNkLFlBQVksQ0FBQzZELElBQUksQ0FBQzBELE1BQU0sQ0FBQ25FLENBQUMsQ0FBQyxDQUFDO2tCQUM1QztrQkFDQSxJQUFJQyxNQUFNLElBQUksQ0FBQyxFQUFFO29CQUNiLEtBQUssSUFBSUcsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHOUIsS0FBSyxDQUFDWixLQUFLLENBQUNkLFlBQVksQ0FBQ3FELE1BQU0sRUFBRUcsQ0FBQyxFQUFFLEVBQUU7c0JBQ3RELElBQUk5QixLQUFLLENBQUNaLEtBQUssQ0FBQ2QsWUFBWSxDQUFDd0QsQ0FBQyxDQUFDLENBQUNGLElBQUksSUFBSWlFLE1BQU0sQ0FBQ25FLENBQUMsQ0FBQyxDQUFDRSxJQUFJLEVBQUU7d0JBQ3BENUIsS0FBSyxDQUFDWixLQUFLLENBQUNkLFlBQVksQ0FBQ3dELENBQUMsQ0FBQyxDQUFDTSxLQUFLLEdBQUd5RCxNQUFNLENBQUNuRSxDQUFDLENBQUMsQ0FBQ1UsS0FBSztzQkFDdkQ7b0JBQ0o7a0JBQ0o7Z0JBQ0o7Y0FDSixDQUFDLE1BQU0sSUFBSTRFLE1BQU0sQ0FBQ21ILFdBQVcsSUFBSSxpQkFBaUIsRUFBRTtnQkFDaERuTyxLQUFLLENBQUN5UCxTQUFTLEdBQUd6SSxNQUFNLENBQUM1RSxLQUFLLElBQUksRUFBRTtjQUN4QyxDQUFDLE1BQU0sSUFBSTRFLE1BQU0sQ0FBQ21ILFdBQVcsSUFBSSxpQkFBaUIsRUFBRTtnQkFBRztnQkFDL0QsSUFBSW5PLEtBQUssR0FBRyxPQUFJO2dCQUNQLElBQUdnSCxNQUFNLENBQUM1RSxLQUFLLENBQUNzTixhQUFhLElBQUksWUFBWSxFQUFDO2tCQUNwRDFQLEtBQUssQ0FBQ1osS0FBSyxDQUFDUixVQUFVLEdBQUVvSSxNQUFNLENBQUM1RSxLQUFLLENBQUN1TixNQUFNO2tCQUMzQyxJQUFHM0ksTUFBTSxDQUFDNUUsS0FBSyxDQUFDdU4sTUFBTSxDQUFDQyxZQUFZLElBQUksVUFBVTtvQkFBRTtvQkFDcEQ1UCxLQUFLLENBQUNaLEtBQUssQ0FBQ1QsU0FBUyxHQUFHLE9BQU8sQ0FBQyxLQUVoQ3FCLEtBQUssQ0FBQ1osS0FBSyxDQUFDVCxTQUFTLEdBQUcsUUFBUTtrQkFDL0I7a0JBQ0FxQixLQUFLLENBQUM4RCxLQUFLLENBQUNDLEtBQUssQ0FBQzBDLElBQUksQ0FBQ3pHLEtBQUssQ0FBQ1osS0FBSyxDQUFDVCxTQUFTLENBQUM7Z0JBQzdDO2NBQ0UsQ0FBQyxNQUFNLElBQUlxSSxNQUFNLENBQUNtSCxXQUFXLElBQUksa0JBQWtCLEVBQUU7Z0JBQUU7Z0JBQ2hELElBQUl0SSxNQUFNLEdBQUdtQixNQUFNLENBQUM1RSxLQUFLO2dCQUNyQyxJQUFJcEMsS0FBSyxHQUFHLE9BQUk7Z0JBQ2hCLElBQUk2UCxNQUFNLEdBQUczUSxJQUFJLENBQUNDLEtBQUssQ0FBQ0QsSUFBSSxDQUFDeUosU0FBUyxDQUFDLE9BQUksQ0FBQ3ZKLEtBQUssQ0FBQ1osZ0JBQWdCLENBQUMsQ0FBQztnQkFDcEUsSUFBSUQsV0FBVyxHQUFHeUIsS0FBSyxDQUFDWixLQUFLLENBQUNiLFdBQVc7Z0JBQ3pDLElBQUdnRSxJQUFJLENBQUNTLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQ3BCLElBQUksRUFBQztrQkFDN0IsSUFBR1csSUFBSSxDQUFDUyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUNwQixJQUFJLElBQUUsaUJBQWlCO29CQUFFO29CQUNqRHJELFdBQVcsR0FBRyxrQkFBa0IsR0FBQ29PLEVBQUU7Z0JBQ3JDO2dCQUNBM00sS0FBSyxDQUFDWixLQUFLLENBQUNYLFlBQVksQ0FBQzBELElBQUksQ0FBQztrQkFDN0I1RCxXQUFXLEVBQUNBLFdBQVc7a0JBQ3ZCcUksWUFBWSxFQUFDaUo7Z0JBQ2QsQ0FBQyxDQUFDO2dCQUNVLEtBQUssSUFBSW5PLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBR21FLE1BQU0sQ0FBQ2xFLE1BQU0sRUFBRUQsQ0FBQyxFQUFFLEVBQUU7a0JBQ25ELEtBQUssSUFBSXNKLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBR2hMLEtBQUssQ0FBQ1osS0FBSyxDQUFDWCxZQUFZLENBQUNrRCxNQUFNLEVBQUVxSixDQUFDLEVBQUUsRUFBRTtvQkFDekQsSUFBR2hMLEtBQUssQ0FBQ1osS0FBSyxDQUFDWCxZQUFZLENBQUN1TSxDQUFDLENBQUMsQ0FBQ3pNLFdBQVcsSUFBSUEsV0FBVyxFQUFDO3NCQUN6RCxJQUFHc0gsTUFBTSxDQUFDbkUsQ0FBQyxDQUFDLENBQUNFLElBQUksSUFBRSxNQUFNLEVBQ3hCNUIsS0FBSyxDQUFDWixLQUFLLENBQUNYLFlBQVksQ0FBQ3VNLENBQUMsQ0FBQyxDQUFDdEcsS0FBSyxHQUFDbUIsTUFBTSxDQUFDbkUsQ0FBQyxDQUFDLENBQUNVLEtBQUs7c0JBQ2xELElBQUkwTixhQUFhLEdBQUc5UCxLQUFLLENBQUNaLEtBQUssQ0FBQ1gsWUFBWSxDQUFDdU0sQ0FBQyxDQUFDLENBQUNwRSxZQUFZO3NCQUM1RCxLQUFLLElBQUlvSSxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUdjLGFBQWEsQ0FBQ25PLE1BQU0sRUFBRXFOLENBQUMsRUFBRSxFQUFFO3dCQUM5QyxJQUFJcE4sSUFBSSxHQUFHa08sYUFBYSxDQUFDZCxDQUFDLENBQUMsQ0FBQ25OLElBQUk7d0JBQ2hDLEtBQUssSUFBSUMsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHRixJQUFJLENBQUNELE1BQU0sRUFBRUcsQ0FBQyxFQUFFLEVBQUU7MEJBQ3JDOzBCQUNBLElBQUdGLElBQUksQ0FBQ0UsQ0FBQyxDQUFDLENBQUNsQyxJQUFJLElBQUVpRyxNQUFNLENBQUNuRSxDQUFDLENBQUMsQ0FBQ0UsSUFBSSxFQUFDOzRCQUMvQkEsSUFBSSxDQUFDRSxDQUFDLENBQUMsQ0FBQ0UsS0FBSyxHQUFHNkQsTUFBTSxDQUFDbkUsQ0FBQyxDQUFDLENBQUNVLEtBQUs7MEJBQ2hDO3dCQUNEO3NCQUNEOztzQkFFQTtvQkFDRDtrQkFDRDs7a0JBQ0EsSUFBSVQsTUFBTSxHQUFHLENBQUM7a0JBQ2QsSUFBSSxDQUFDM0IsS0FBSyxDQUFDWixLQUFLLENBQUNkLFlBQVksQ0FBQ2lRLE1BQU0sQ0FBQyxVQUFVdkQsQ0FBQyxFQUFFO29CQUM5QyxPQUFPbkYsTUFBTSxDQUFDbkUsQ0FBQyxDQUFDLENBQUNFLElBQUksSUFBSW9KLENBQUMsQ0FBQ3BKLElBQUk7a0JBQ25DLENBQUMsQ0FBQyxDQUFDRCxNQUFNLEVBQUU7b0JBQ1BBLE1BQU0sR0FBRyxDQUFDO29CQUNWM0IsS0FBSyxDQUFDWixLQUFLLENBQUNkLFlBQVksQ0FBQzZELElBQUksQ0FBQzBELE1BQU0sQ0FBQ25FLENBQUMsQ0FBQyxDQUFDO2tCQUM1QztrQkFDQSxJQUFJQyxNQUFNLElBQUksQ0FBQyxFQUFFO29CQUNiLEtBQUssSUFBSUcsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHOUIsS0FBSyxDQUFDWixLQUFLLENBQUNkLFlBQVksQ0FBQ3FELE1BQU0sRUFBRUcsQ0FBQyxFQUFFLEVBQUU7c0JBQ3RELElBQUk5QixLQUFLLENBQUNaLEtBQUssQ0FBQ2QsWUFBWSxDQUFDd0QsQ0FBQyxDQUFDLENBQUNGLElBQUksSUFBSWlFLE1BQU0sQ0FBQ25FLENBQUMsQ0FBQyxDQUFDRSxJQUFJLEVBQUU7d0JBQ3BENUIsS0FBSyxDQUFDWixLQUFLLENBQUNkLFlBQVksQ0FBQ3dELENBQUMsQ0FBQyxDQUFDTSxLQUFLLEdBQUd5RCxNQUFNLENBQUNuRSxDQUFDLENBQUMsQ0FBQ1UsS0FBSztzQkFDdkQ7b0JBQ0o7a0JBQ0o7Z0JBQ0Q7Y0FDUTtZQUVKO1VBQ0o7VUFFQSxJQUFJeEUsSUFBSSxDQUFDaUksTUFBTSxFQUFFO1lBQ25CLElBQUlnSyxNQUFNLEdBQUczUSxJQUFJLENBQUNDLEtBQUssQ0FBQ0QsSUFBSSxDQUFDeUosU0FBUyxDQUFDLE9BQUksQ0FBQ3ZKLEtBQUssQ0FBQ1osZ0JBQWdCLENBQUMsQ0FBQztZQUNwRSxJQUFJRCxXQUFXLEdBQUd5QixLQUFLLENBQUNaLEtBQUssQ0FBQ2IsV0FBVztZQUN6QyxJQUFHZ0UsSUFBSSxDQUFDUyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUNwQixJQUFJLElBQUUsaUJBQWlCLEVBQy9DckQsV0FBVyxHQUFHLGtCQUFrQixHQUFDb08sRUFBRTtZQUNwQzNNLEtBQUssQ0FBQ1osS0FBSyxDQUFDWCxZQUFZLENBQUMwRCxJQUFJLENBQUM7Y0FDN0I1RCxXQUFXLEVBQUNBLFdBQVc7Y0FDdkJxSSxZQUFZLEVBQUNpSjtZQUNkLENBQUMsQ0FBQztZQUNJLElBQUloSyxNQUFNLEdBQUdqSSxJQUFJLENBQUNpSSxNQUFNO1lBQ3hCLEtBQUssSUFBSW5FLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBR21FLE1BQU0sQ0FBQ2xFLE1BQU0sRUFBRUQsQ0FBQyxFQUFFLEVBQUU7Y0FDcEMsS0FBSyxJQUFJc0osQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHaEwsS0FBSyxDQUFDWixLQUFLLENBQUNYLFlBQVksQ0FBQ2tELE1BQU0sRUFBRXFKLENBQUMsRUFBRSxFQUFFO2dCQUNsRSxJQUFHaEwsS0FBSyxDQUFDWixLQUFLLENBQUNYLFlBQVksQ0FBQ3VNLENBQUMsQ0FBQyxDQUFDek0sV0FBVyxJQUFJQSxXQUFXLEVBQUM7a0JBQ3pELElBQUdzSCxNQUFNLENBQUNuRSxDQUFDLENBQUMsQ0FBQ0UsSUFBSSxJQUFFLE1BQU0sRUFDeEI1QixLQUFLLENBQUNaLEtBQUssQ0FBQ1gsWUFBWSxDQUFDdU0sQ0FBQyxDQUFDLENBQUN0RyxLQUFLLEdBQUNtQixNQUFNLENBQUNuRSxDQUFDLENBQUMsQ0FBQ1UsS0FBSztrQkFDbEQsSUFBSTBOLGFBQWEsR0FBRzlQLEtBQUssQ0FBQ1osS0FBSyxDQUFDWCxZQUFZLENBQUN1TSxDQUFDLENBQUMsQ0FBQ3BFLFlBQVk7a0JBQzVELEtBQUssSUFBSW9JLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBR2MsYUFBYSxDQUFDbk8sTUFBTSxFQUFFcU4sQ0FBQyxFQUFFLEVBQUU7b0JBQzlDLElBQUlwTixJQUFJLEdBQUdrTyxhQUFhLENBQUNkLENBQUMsQ0FBQyxDQUFDbk4sSUFBSTtvQkFDaEMsS0FBSyxJQUFJQyxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUdGLElBQUksQ0FBQ0QsTUFBTSxFQUFFRyxDQUFDLEVBQUUsRUFBRTtzQkFDckM7c0JBQ0EsSUFBR0YsSUFBSSxDQUFDRSxDQUFDLENBQUMsQ0FBQ2xDLElBQUksSUFBRWlHLE1BQU0sQ0FBQ25FLENBQUMsQ0FBQyxDQUFDRSxJQUFJLEVBQUM7d0JBQy9CQSxJQUFJLENBQUNFLENBQUMsQ0FBQyxDQUFDRSxLQUFLLEdBQUc2RCxNQUFNLENBQUNuRSxDQUFDLENBQUMsQ0FBQ1UsS0FBSztzQkFDaEM7b0JBQ0Q7a0JBQ0Q7Z0JBQ1E7Y0FDRDtjQUVOLElBQUlULE1BQU0sR0FBRyxDQUFDO2NBQ1IsSUFBSSxDQUFDM0IsS0FBSyxDQUFDWixLQUFLLENBQUNkLFlBQVksQ0FBQ2lRLE1BQU0sQ0FBQyxVQUFVdkQsQ0FBQyxFQUFFO2dCQUM5QyxPQUFPbkYsTUFBTSxDQUFDbkUsQ0FBQyxDQUFDLENBQUNFLElBQUksSUFBSW9KLENBQUMsQ0FBQ3BKLElBQUk7Y0FDbkMsQ0FBQyxDQUFDLENBQUNELE1BQU0sRUFBRTtnQkFDUEEsTUFBTSxHQUFHLENBQUM7Z0JBQ1YzQixLQUFLLENBQUNaLEtBQUssQ0FBQ2QsWUFBWSxDQUFDNkQsSUFBSSxDQUFDMEQsTUFBTSxDQUFDbkUsQ0FBQyxDQUFDLENBQUM7Y0FDNUM7Y0FDQSxJQUFJQyxNQUFNLElBQUksQ0FBQyxFQUFFO2dCQUNiLEtBQUssSUFBSUcsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHOUIsS0FBSyxDQUFDWixLQUFLLENBQUNkLFlBQVksQ0FBQ3FELE1BQU0sRUFBRUcsQ0FBQyxFQUFFLEVBQUU7a0JBQ3RELElBQUk5QixLQUFLLENBQUNaLEtBQUssQ0FBQ2QsWUFBWSxDQUFDd0QsQ0FBQyxDQUFDLENBQUNGLElBQUksSUFBSWlFLE1BQU0sQ0FBQ25FLENBQUMsQ0FBQyxDQUFDRSxJQUFJLEVBQUU7b0JBQ3BENUIsS0FBSyxDQUFDWixLQUFLLENBQUNkLFlBQVksQ0FBQ3dELENBQUMsQ0FBQyxDQUFDTSxLQUFLLEdBQUd5RCxNQUFNLENBQUNuRSxDQUFDLENBQUMsQ0FBQ1UsS0FBSztrQkFDdkQ7Z0JBQ0o7Y0FDSjtZQUNKO1VBQ0o7UUFDRCxDQUFDLE1BQUk7VUFDSnJELEdBQUcsQ0FBQ1MsU0FBUyxDQUFDO1lBQUMzQixLQUFLLEVBQUMsS0FBSztZQUFDNEIsT0FBTyxFQUFDZ0IsT0FBTyxDQUFDRSxHQUFHO1lBQUNqQixVQUFVLEVBQUMsS0FBSztZQUFDQyxXQUFXLEVBQUM7VUFBSSxDQUFDLENBQUM7UUFDbkY7TUFDRCxDQUFDLENBQUMsQ0FBQ2lCLEtBQUssQ0FBQyxVQUFBQyxFQUFFLEVBQUU7UUFDWjtRQUNBOUIsR0FBRyxDQUFDUyxTQUFTLENBQUM7VUFBQzNCLEtBQUssRUFBQyxPQUFPO1VBQUM0QixPQUFPLEVBQUNvQixFQUFFLENBQUNDLE1BQU07VUFBQ3BCLFVBQVUsRUFBQyxLQUFLO1VBQUNDLFdBQVcsRUFBQztRQUFJLENBQUMsQ0FBQztNQUNuRixDQUFDLENBQUM7SUFDSCxDQUFDO0lBQ0R5Siw0QkFBNEIsd0NBQUMyRyxPQUFPLEVBQUM7TUFDdkNoUixHQUFHLENBQUMrRixXQUFXLENBQUM7UUFDZmpILEtBQUssRUFBQyxRQUFRO1FBQ2QwTCxJQUFJLEVBQUM7TUFDTixDQUFDLENBQUM7TUFDRixJQUFJdkosS0FBSyxHQUFHLElBQUk7TUFDaEIsSUFBSXNDLEdBQUcsR0FBQyxFQUFFO01BQ1YsSUFBSWIsUUFBUSxHQUFHekIsS0FBSyxDQUFDWixLQUFLLENBQUNyQixhQUFhO01BQ3hDLEtBQUssSUFBSTJELENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBR0QsUUFBUSxDQUFDRSxNQUFNLEVBQUVELENBQUMsRUFBRSxFQUFFO1FBQ3pDLElBQUlFLElBQUksR0FBR0gsUUFBUSxDQUFDQyxDQUFDLENBQUMsQ0FBQ0csSUFBSTtRQUMzQixLQUFLLElBQUlDLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBR0YsSUFBSSxDQUFDRCxNQUFNLEVBQUVHLENBQUMsRUFBRSxFQUFFO1VBQ3JDLElBQUlDLEVBQUUsR0FBR0gsSUFBSSxDQUFDRSxDQUFDLENBQUM7VUFDaEIsSUFBR0MsRUFBRSxDQUFDQyxLQUFLLElBQUUsS0FBSyxJQUFJRCxFQUFFLENBQUNDLEtBQUssSUFBRSxTQUFTLEVBQUVELEVBQUUsQ0FBQ0MsS0FBSyxHQUFDLEVBQUU7VUFDdEQsSUFBR0QsRUFBRSxDQUFDRyxJQUFJLElBQUUsVUFBVSxFQUNyQixJQUFHSCxFQUFFLENBQUNDLEtBQUssSUFBRSxHQUFHLEVBQUVELEVBQUUsQ0FBQ0MsS0FBSyxHQUFDLEVBQUU7VUFDOUIsSUFBR0QsRUFBRSxDQUFDRyxJQUFJLElBQUUsTUFBTSxJQUFJSCxFQUFFLENBQUNHLElBQUksSUFBRSxNQUFNLEVBQ3BDSSxHQUFHLENBQUNILElBQUksQ0FBQztZQUFFUCxJQUFJLEVBQUVHLEVBQUUsQ0FBQ25DLElBQUk7WUFBRXdDLEtBQUssRUFBRUwsRUFBRSxDQUFDTSxLQUFLLEdBQUVOLEVBQUUsQ0FBQ00sS0FBSyxHQUFFO1VBQUcsQ0FBQyxDQUFDLENBQUMsS0FDdkQsSUFBR04sRUFBRSxDQUFDRyxJQUFJLElBQUUsS0FBSyxFQUNyQkksR0FBRyxDQUFDSCxJQUFJLENBQUM7WUFBRVAsSUFBSSxFQUFFRyxFQUFFLENBQUNuQyxJQUFJO1lBQUV3QyxLQUFLLEVBQUVMLEVBQUUsQ0FBQ0MsS0FBSyxHQUFDLEdBQUcsR0FBQztVQUFHLENBQUMsQ0FBQyxDQUFDLEtBQ2hELElBQUdELEVBQUUsQ0FBQ0csSUFBSSxJQUFFLElBQUksSUFBSUgsRUFBRSxDQUFDRyxJQUFJLElBQUUsUUFBUSxJQUFJSCxFQUFFLENBQUNHLElBQUksSUFBRSxPQUFPLEVBQUM7WUFDOUQsSUFBR0gsRUFBRSxDQUFDeUgsTUFBTSxJQUFFLElBQUksRUFBQztjQUFFO2NBQ3BCLElBQUlDLE1BQU0sR0FBRSxFQUFFO2NBQ2QsS0FBSSxJQUFJakMsQ0FBQyxJQUFJekYsRUFBRSxDQUFDQyxLQUFLLEVBQUM7Z0JBQ3JCLElBQUd5SCxNQUFNLEVBQ1JBLE1BQU0sSUFBRSxHQUFHO2dCQUNaQSxNQUFNLElBQUUxSCxFQUFFLENBQUNDLEtBQUssQ0FBQ3dGLENBQUMsQ0FBQztjQUNwQjtjQUNBbEYsR0FBRyxDQUFDSCxJQUFJLENBQUM7Z0JBQUVQLElBQUksRUFBRUcsRUFBRSxDQUFDbkMsSUFBSTtnQkFBRXdDLEtBQUssRUFBRXFIO2NBQU0sQ0FBQyxDQUFDO1lBQzFDLENBQUMsTUFDQW5ILEdBQUcsQ0FBQ0gsSUFBSSxDQUFDO2NBQUVQLElBQUksRUFBRUcsRUFBRSxDQUFDbkMsSUFBSTtjQUFFd0MsS0FBSyxFQUFFTCxFQUFFLENBQUNDO1lBQUssQ0FBQyxDQUFDO1VBQzdDLENBQUMsTUFFQU0sR0FBRyxDQUFDSCxJQUFJLENBQUM7WUFBRVAsSUFBSSxFQUFFRyxFQUFFLENBQUNuQyxJQUFJO1lBQUV3QyxLQUFLLEVBQUVMLEVBQUUsQ0FBQ0MsS0FBSyxHQUFFRCxFQUFFLENBQUNDLEtBQUssR0FBRTtVQUFFLENBQUMsQ0FBQztVQUUxRCxJQUFJRCxFQUFFLENBQUMySCxRQUFRLElBQUksSUFBSSxJQUFJLENBQUMzSCxFQUFFLENBQUNDLEtBQUssRUFBRTtZQUN0QztZQUNDakQsR0FBRyxDQUFDZ0csV0FBVyxFQUFFO1lBQ2pCO1lBQ0FoRyxHQUFHLENBQUNTLFNBQVMsQ0FBQztjQUFDM0IsS0FBSyxFQUFDLElBQUk7Y0FBQzRCLE9BQU8sRUFBQ3NDLEVBQUUsQ0FBQ0UsUUFBUSxHQUFDLE9BQU87Y0FBQ3ZDLFVBQVUsRUFBQyxLQUFLO2NBQUNDLFdBQVcsRUFBQztZQUFJLENBQUMsQ0FBQztZQUN6RjtVQUNEO1FBQ0Q7TUFDRDtNQUNBLElBQUlxUSxPQUFPLEdBQUMsRUFBRTtNQUNkLElBQUl2UixZQUFZLEdBQUd1QixLQUFLLENBQUNaLEtBQUssQ0FBQ1gsWUFBWTtNQUMzQyxLQUFLLElBQUl1TSxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUd2TSxZQUFZLENBQUNrRCxNQUFNLEVBQUVxSixDQUFDLEVBQUUsRUFBRTtRQUM3QyxJQUFJaUYsT0FBTyxHQUFDLEVBQUU7UUFDZCxLQUFLLElBQUl2TyxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUdqRCxZQUFZLENBQUN1TSxDQUFDLENBQUMsQ0FBQ3BFLFlBQVksQ0FBQ2pGLE1BQU0sRUFBRUQsQ0FBQyxFQUFFLEVBQUU7VUFDN0QsSUFBSUUsSUFBSSxHQUFHbkQsWUFBWSxDQUFDdU0sQ0FBQyxDQUFDLENBQUNwRSxZQUFZLENBQUNsRixDQUFDLENBQUMsQ0FBQ0csSUFBSTtVQUMvQyxLQUFLLElBQUlDLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBR0YsSUFBSSxDQUFDRCxNQUFNLEVBQUVHLENBQUMsRUFBRSxFQUFFO1lBQ3JDLElBQUlDLEVBQUUsR0FBR0gsSUFBSSxDQUFDRSxDQUFDLENBQUM7WUFDaEIsSUFBR0MsRUFBRSxDQUFDQyxLQUFLLElBQUUsS0FBSyxJQUFJRCxFQUFFLENBQUNDLEtBQUssSUFBRSxTQUFTLEVBQUVELEVBQUUsQ0FBQ0MsS0FBSyxHQUFDLEVBQUU7WUFDdEQsSUFBR0QsRUFBRSxDQUFDRyxJQUFJLElBQUUsVUFBVSxFQUNyQixJQUFHSCxFQUFFLENBQUNDLEtBQUssSUFBRSxHQUFHLEVBQUVELEVBQUUsQ0FBQ0MsS0FBSyxHQUFDLEVBQUU7WUFDOUIsSUFBR0QsRUFBRSxDQUFDRyxJQUFJLElBQUUsTUFBTSxJQUFJSCxFQUFFLENBQUNHLElBQUksSUFBRSxNQUFNLEVBQ3BDK04sT0FBTyxDQUFDOU4sSUFBSSxDQUFDO2NBQUVQLElBQUksRUFBRUcsRUFBRSxDQUFDbkMsSUFBSTtjQUFFd0MsS0FBSyxFQUFFTCxFQUFFLENBQUNNLEtBQUssR0FBRU4sRUFBRSxDQUFDTSxLQUFLLEdBQUU7WUFBRyxDQUFDLENBQUMsQ0FBQyxLQUMzRCxJQUFHTixFQUFFLENBQUNHLElBQUksSUFBRSxLQUFLLEVBQ3JCK04sT0FBTyxDQUFDOU4sSUFBSSxDQUFDO2NBQUVQLElBQUksRUFBRUcsRUFBRSxDQUFDbkMsSUFBSTtjQUFFd0MsS0FBSyxFQUFFTCxFQUFFLENBQUNDLEtBQUssR0FBQyxHQUFHLEdBQUM7WUFBRyxDQUFDLENBQUMsQ0FBQyxLQUNwRCxJQUFHRCxFQUFFLENBQUNHLElBQUksSUFBRSxJQUFJLElBQUlILEVBQUUsQ0FBQ0csSUFBSSxJQUFFLFFBQVEsSUFBSUgsRUFBRSxDQUFDRyxJQUFJLElBQUUsT0FBTyxFQUFDO2NBQzlELElBQUdILEVBQUUsQ0FBQ3lILE1BQU0sSUFBRSxJQUFJLEVBQUM7Z0JBQUU7Z0JBQ3BCLElBQUlDLE1BQU0sR0FBRSxFQUFFO2dCQUNkLEtBQUksSUFBSWpDLENBQUMsSUFBSXpGLEVBQUUsQ0FBQ0MsS0FBSyxFQUFDO2tCQUNyQixJQUFHeUgsTUFBTSxFQUNSQSxNQUFNLElBQUUsR0FBRztrQkFDWkEsTUFBTSxJQUFFMUgsRUFBRSxDQUFDQyxLQUFLLENBQUN3RixDQUFDLENBQUM7Z0JBQ3BCO2dCQUNBeUksT0FBTyxDQUFDOU4sSUFBSSxDQUFDO2tCQUFFUCxJQUFJLEVBQUVHLEVBQUUsQ0FBQ25DLElBQUk7a0JBQUV3QyxLQUFLLEVBQUVxSDtnQkFBTSxDQUFDLENBQUM7Y0FDOUMsQ0FBQyxNQUNBd0csT0FBTyxDQUFDOU4sSUFBSSxDQUFDO2dCQUFFUCxJQUFJLEVBQUVHLEVBQUUsQ0FBQ25DLElBQUk7Z0JBQUV3QyxLQUFLLEVBQUVMLEVBQUUsQ0FBQ0M7Y0FBSyxDQUFDLENBQUM7WUFDakQsQ0FBQyxNQUVBaU8sT0FBTyxDQUFDOU4sSUFBSSxDQUFDO2NBQUVQLElBQUksRUFBRUcsRUFBRSxDQUFDbkMsSUFBSTtjQUFFd0MsS0FBSyxFQUFFTCxFQUFFLENBQUNDLEtBQUssR0FBRUQsRUFBRSxDQUFDQyxLQUFLLEdBQUU7WUFBRSxDQUFDLENBQUM7WUFFOUQsSUFBSUQsRUFBRSxDQUFDMkgsUUFBUSxJQUFJLElBQUksSUFBSSxDQUFDM0gsRUFBRSxDQUFDQyxLQUFLLEVBQUU7Y0FDdEM7Y0FDQ2pELEdBQUcsQ0FBQ2dHLFdBQVcsRUFBRTtjQUNqQjtjQUNBaEcsR0FBRyxDQUFDUyxTQUFTLENBQUM7Z0JBQUMzQixLQUFLLEVBQUMsSUFBSTtnQkFBQzRCLE9BQU8sRUFBQ3NDLEVBQUUsQ0FBQ0UsUUFBUSxHQUFDLE9BQU87Z0JBQUN2QyxVQUFVLEVBQUMsS0FBSztnQkFBQ0MsV0FBVyxFQUFDO2NBQUksQ0FBQyxDQUFDO2NBQ3pGO1lBQ0Q7VUFDRDtRQUNEO1FBQ0FxUSxPQUFPLENBQUM3TixJQUFJLENBQUM7VUFDWitOLE1BQU0sRUFBQ3pSLFlBQVksQ0FBQ3VNLENBQUMsQ0FBQyxDQUFDek0sV0FBVztVQUNsQzRSLFNBQVMsRUFBQ0Y7UUFDWCxDQUFDLENBQUM7TUFDSDtNQUNBLElBQUlHLFFBQVEsR0FBQztRQUNaQyxVQUFVLEVBQUM7VUFDVkMsUUFBUSxFQUFDLE1BQU07VUFBQztVQUNoQkgsU0FBUyxFQUFDN047UUFDWCxDQUFDO1FBQ0RpTyxVQUFVLEVBQUN2USxLQUFLLENBQUNaLEtBQUssQ0FBQ2IsV0FBVztRQUFJO1FBQ3RDaVMsT0FBTyxFQUFDeFEsS0FBSyxDQUFDWixLQUFLLENBQUN0QixLQUFLLENBQUMyUyxhQUFhO1FBQUU7UUFDekNDLE9BQU8sRUFBQztVQUNQSixRQUFRLEVBQUMsTUFBTTtVQUFDO1VBQ2hCTixPQUFPLEVBQUNBO1FBQ1Q7TUFDRCxDQUFDO01BQ0Q7TUFDRyxJQUFJblEsUUFBUSxHQUFHO1FBQ1I0QyxNQUFNLEVBQUUsR0FBRztRQUFFRCxPQUFPLEVBQUV1TixPQUFPO1FBQUVyTixTQUFTLEVBQUUsRUFBRTtRQUFDQyxNQUFNLEVBQUUsRUFBRTtRQUFFQyxNQUFNLEVBQUUsRUFBRTtRQUFFQyxTQUFTLEVBQUUsRUFBRTtRQUMzRkMsS0FBSyxFQUFFLE1BQU07UUFBRUMsS0FBSyxFQUFFLEVBQUU7UUFBQ25CLElBQUksRUFBRTFDLElBQUksQ0FBQ3lKLFNBQVMsQ0FBQyxFQUFFLENBQUM7UUFBRXdCLE9BQU8sRUFBRWpMLElBQUksQ0FBQ3lKLFNBQVMsQ0FBQyxFQUFFLENBQUM7UUFDOUV0SyxXQUFXLEVBQUVhLElBQUksQ0FBQ3lKLFNBQVMsQ0FBQzNJLEtBQUssQ0FBQ1osS0FBSyxDQUFDZixXQUFXLENBQUM7UUFBQytSLFFBQVEsRUFBQ2xSLElBQUksQ0FBQ3lKLFNBQVMsQ0FBQ3lILFFBQVE7TUFDaEYsQ0FBQztNQUNQO01BQ0csYUFBWXZRLFFBQVE7TUFDcEIsSUFBSSxDQUFDSSxNQUFNLENBQUNNLFFBQVEsQ0FBQywyQkFBMkIsRUFBQ1YsUUFBUSxDQUFDLENBQUNXLElBQUksQ0FBQyxVQUFBQyxPQUFPLEVBQUU7UUFDeEUsYUFBWUEsT0FBTztRQUN0QjFCLEdBQUcsQ0FBQ2dHLFdBQVcsRUFBRTtRQUNkLElBQUl0RSxPQUFPLENBQUNDLElBQUksSUFBRSxPQUFPLEVBQUU7VUFDMUIsSUFBSTlDLElBQUksR0FBR3NCLElBQUksQ0FBQ0MsS0FBSyxDQUFDc0IsT0FBTyxDQUFDN0MsSUFBSSxDQUFDO1VBQ25DLElBQUlpSSxNQUFNLEdBQUdqSSxJQUFJLENBQUNpSSxNQUFNO1VBQ3hCLElBQUdrSyxPQUFPLElBQUkvUCxLQUFLLENBQUNaLEtBQUssQ0FBQ3RCLEtBQUssQ0FBQ3VMLGNBQWMsQ0FBQ3RKLEVBQUUsRUFDaERDLEtBQUssQ0FBQ29KLDRCQUE0QixDQUFDcEosS0FBSyxDQUFDWixLQUFLLENBQUN0QixLQUFLLENBQUN1TCxjQUFjLENBQUN0SixFQUFFLENBQUMsQ0FBQyxLQUN4RTtZQUNIO1lBQ0FoQixHQUFHLENBQUM0TCxVQUFVLENBQUM7Y0FDZGpDLEdBQUcsRUFBQyw4QkFBOEIsR0FBQ3hKLElBQUksQ0FBQ3lKLFNBQVMsQ0FBQzNJLEtBQUssQ0FBQ1osS0FBSyxDQUFDdEIsS0FBSyxDQUFDLEdBQUMsYUFBYSxHQUFDa0MsS0FBSyxDQUFDWixLQUFLLENBQUN2QjtZQUNoRyxDQUFDLENBQUM7VUFDSDtRQUNFLENBQUMsTUFBSTtVQUNKa0IsR0FBRyxDQUFDUyxTQUFTLENBQUM7WUFBQzNCLEtBQUssRUFBQyxLQUFLO1lBQUM0QixPQUFPLEVBQUNnQixPQUFPLENBQUNFLEdBQUc7WUFBQ2pCLFVBQVUsRUFBQyxLQUFLO1lBQUNDLFdBQVcsRUFBQztVQUFJLENBQUMsQ0FBQztRQUNuRjtNQUNELENBQUMsQ0FBQyxDQUFDaUIsS0FBSyxDQUFDLFVBQUFDLEVBQUUsRUFBRTtRQUNaO1FBQ0g5QixHQUFHLENBQUNnRyxXQUFXLEVBQUU7UUFDZGhHLEdBQUcsQ0FBQ1MsU0FBUyxDQUFDO1VBQUMzQixLQUFLLEVBQUMsT0FBTztVQUFDNEIsT0FBTyxFQUFDb0IsRUFBRSxDQUFDQyxNQUFNO1VBQUNwQixVQUFVLEVBQUMsS0FBSztVQUFDQyxXQUFXLEVBQUM7UUFBSSxDQUFDLENBQUM7TUFDbkYsQ0FBQyxDQUFDO0lBQ0g7RUFHSjtBQUNELENBQUM7QUFBQSwyQiIsImZpbGUiOiI5MC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cblx0aW1wb3J0IHBpY2tlckFkZHJlc3MgZnJvbSAnLi4vLi4vanMvcGlja2VyQWRkcmVzcy9waWNrZXJBZGRyZXNzLnZ1ZSdcblx0ZXhwb3J0IGRlZmF1bHQge1xuXHRcdGNvbXBvbmVudHM6IHtcbiAgICAgICAgICAgIHBpY2tlckFkZHJlc3NcbiAgICAgICAgfSxcblx0XHRkYXRhKCkge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0dGl0bGU6ICfmlrDlop4nLFxuXHRcdFx0XHRwYXJhbTp7fSxcblx0XHRcdFx0Y2xhc3NBdHRyTGlzdDpbXSxcblx0XHRcdFx0Y2xhc3NHcmlkU3R5bGU6W10sXG5cdFx0XHRcdGVkaXRfaW5pdGFsX2V2ZW50OlwiXCIsICAvL+W8ueeql+WIneWni+WMluS6i+S7tklEXG5cdFx0XHRcdGVkaXRfb2tfZXZlbnQ6XCJcIiwgICAgICAvL+W8ueeql+eCueWHu09LIOinpuWPkeS6i+S7tklEXG5cdFx0XHRcdGVkaXRfc2VsZWN0X2NvbXBvc2VfZXZlbnQ6XCJcIiwgIC8v6YCJ5oup57uE5oiQ5a+56LGh5pe26LCD55SoXG5cdFx0XHRcdGVkaXRfY29tcG9zZV9jbHNfaWQ6XCJcIixcblx0XHRcdFx0Z2xvYmFsX2F0dHI6W10sXG5cdFx0XHRcdHJlZmRhdGFzdG9yZTogW10sXHQgICAvL+W8leeUqOaVsOaNruWtmOWCqOWMui8vIHthdHRyOidHX1BSSl8nICsgYmluZGF0dHIgKyAnX0lEJywgdmFsdWU6aW5mby5pZH1cblx0XHRcdFx0c2NhbkNvZGVWYWw6XCJcIixcblx0XHRcdFx0c3ViQ2xhc3NBdHRyTGlzdDpbXSxcblx0XHRcdFx0c3ViUGFuZWxMaXN0OltdLFxuXHRcdFx0XHRzdWJDbGFzc0dyaWRTdHlsZTpbXSxcblx0XHRcdFx0cG9wdXBUeXBlOlwiY2VudGVyXCIsXG5cdFx0XHRcdGNoZWNrX2xpc3Q6e30sXG5cdFx0XHR9XG5cdFx0fSxcblx0XHRvbkxvYWQob3B0aW9ucykge1xuXHRcdFx0Ly8gY29uc29sZS5sb2cob3B0aW9ucyk7XG5cdFx0XHR1bmkuc2V0TmF2aWdhdGlvbkJhclRpdGxlKHsgdGl0bGU6IG9wdGlvbnMudGl0bGVuYW1lfSk7IC8v6K6+572u6aG26YOo5qCH6aKYIFxuXHRcdFx0dmFyIHBhcmFtID0gSlNPTi5wYXJzZShvcHRpb25zLnBhcmFtKTtcblx0XHRcdHRoaXMuJGRhdGEudGl0bGUgPSBwYXJhbS5BZGRfQnRuTmFtZT9wYXJhbS5BZGRfQnRuTmFtZTpvcHRpb25zLnRpdGxlbmFtZTsgLy/orr7nva7mjInpkq7mloflrZdcblx0XHRcdGNvbnNvbGUubG9nKHBhcmFtKTtcblx0XHRcdGlmKCFwYXJhbS5NYXN0ZXJfQ2xzLlZpZXdfU3R5bGUpe1xuXHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIuaPkOekulwiLGNvbnRlbnQ6XCLor6Xlip/og73ngrnmnKrphY3nva7nlYzpnaLnqpflj6PvvIzor7fph43mlrDphY3nva7vvIFcIixzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0aWYoIXBhcmFtLk1hc3Rlcl9DbHMuVmlld19TdHlsZS5OYW1lKXtcblx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLmj5DnpLpcIixjb250ZW50Olwi6K+l5Yqf6IO954K55pyq6YWN572u56qX5Y+j5qC35byP77yM6K+36YeN5paw6YWN572u77yBXCIsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdHRoaXMuJGRhdGEucGFyYW0gPSBwYXJhbTtcblx0XHRcdC8vIHZhciBlZGl0X2RsZyA9IHtcblx0XHRcdC8vICAgICBNb2RlbDogcGFyYW0uRWRpdERsZ01vZGUsXG5cdFx0XHQvLyAgICAgTmFtZTogcGFyYW0uTWFzdGVyX0Nscy5WaWV3X1N0eWxlLk5hbWVcblx0XHRcdC8vIH1cblx0XHRcdC8v5Li75pWw5o2u57G76I635Y+WXG5cdFx0XHR2YXIgZGF0YUluZm8gPSB7XG5cdFx0XHRcdGNsYXNzX2lkOiBwYXJhbS5NYXN0ZXJfQ2xzLklEXG5cdFx0XHR9O1xuXHRcdFx0dmFyICR0aGlzID0gdGhpcztcblx0XHRcdCR0aGlzLiRzdG9yZS5zdGF0ZS50aGlzYXJlYUZ1bmNJRCA9IHBhcmFtLk1hc3Rlcl9DbHMuSUQ7XG5cdFx0XHQvLyBjb25zb2xlLmxvZygkdGhpcy4kc3RvcmUuZ2V0dGVycy5nZXRjbGFzc0F0dHJMaXN0KTtcblx0XHRcdGlmKCR0aGlzLiRzdG9yZS5nZXR0ZXJzLmdldGNsYXNzQXR0ckxpc3Qpe1xuXHRcdFx0IFx0JHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdCA9ICR0aGlzLiRzdG9yZS5nZXR0ZXJzLmdldGNsYXNzQXR0ckxpc3QuZGF0YTtcblx0XHRcdFx0JHRoaXMuY2xhc3NHcmlkU3R5bGVJbmZvKHBhcmFtLk1hc3Rlcl9DbHMuSUQsJHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5WaWV3X1N0eWxlLk5hbWUsJ01hc3QnKTtcblx0XHRcdH1lbHNle1xuXHRcdFx0XHQkdGhpcy4kc3RvcmUuZGlzcGF0Y2goJ2NsYXNzQXR0ckxpc3QnLGRhdGFJbmZvKS50aGVuKHN1Y2Nlc3M9Pntcblx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhzdWNjZXNzKTtcblx0XHRcdFx0XHRpZiAoc3VjY2Vzcy5jb2RlPT0nMDAwMDAnKSB7XG5cdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0ID0gc3VjY2Vzcy5kYXRhO1xuXHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHQkdGhpcy5jbGFzc0dyaWRTdHlsZUluZm8ocGFyYW0uTWFzdGVyX0Nscy5JRCwkdGhpcy4kZGF0YS5wYXJhbS5NYXN0ZXJfQ2xzLlZpZXdfU3R5bGUuTmFtZSwnTWFzdCcpO1xuXHRcdFx0XHRcdH1lbHNle1xuXHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor68xXCIsY29udGVudDpzdWNjZXNzLm1zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pLmNhdGNoKGV4PT57XG5cdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coZXgpO1xuXHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vMS4xXCIsY29udGVudDpleC5lcnJNc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0XG5cdFx0XHQvL+S7juaVsOaNruexu+iOt+WPllxuXHRcdFx0dmFyIHN1YmRhdGFJbmZvID0ge1xuXHRcdFx0XHRjbGFzc19pZDogcGFyYW0uU3ViX0Nscy5JRFxuXHRcdFx0fTtcblx0XHRcdCR0aGlzLiRzdG9yZS5zdGF0ZS50aGlzYXJlYUZ1bmNTdWJJRCA9IHBhcmFtLlN1Yl9DbHMuSUQ7XG5cdFx0XHRpZigkdGhpcy4kc3RvcmUuZ2V0dGVycy5nZXRTdWJDbGFzc0F0dHJMaXN0KXtcblx0XHRcdCBcdCR0aGlzLiRkYXRhLnN1YkNsYXNzQXR0ckxpc3QgPSAkdGhpcy4kc3RvcmUuZ2V0dGVycy5nZXRTdWJDbGFzc0F0dHJMaXN0LmRhdGE7XG5cdFx0XHRcdFx0XHQkdGhpcy5jbGFzc0dyaWRTdHlsZUluZm8ocGFyYW0uU3ViX0Nscy5JRCwkdGhpcy4kZGF0YS5wYXJhbS5TdWJfQ2xzLlZpZXdfU3R5bGUuTmFtZSwnU3ViJyk7XG5cdFx0XHR9ZWxzZXtcblx0XHRcdFx0JHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdzdWJDbGFzc0F0dHJMaXN0JyxzdWJkYXRhSW5mbykudGhlbihzdWNjZXNzPT57XG5cdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coc3VjY2Vzcyk7XG5cdFx0XHRcdFx0aWYgKHN1Y2Nlc3MuY29kZT09JzAwMDAwJykge1xuXHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEuc3ViQ2xhc3NBdHRyTGlzdCA9IHN1Y2Nlc3MuZGF0YTtcblx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0JHRoaXMuY2xhc3NHcmlkU3R5bGVJbmZvKHBhcmFtLlN1Yl9DbHMuSUQsJHRoaXMuJGRhdGEucGFyYW0uU3ViX0Nscy5WaWV3X1N0eWxlLk5hbWUsJ1N1YicpO1xuXHRcdFx0XHRcdH1lbHNle1xuXHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor68xXzFcIixjb250ZW50OnN1Y2Nlc3MubXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSkuY2F0Y2goZXg9Pntcblx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhleCk7XG5cdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor68xXzEuMVwiLGNvbnRlbnQ6ZXguZXJyTXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdG1ldGhvZHM6IHtcblx0XHRcdHNjYW5fY2xhc3NBdHRyX2V4dEJ1dHRvbihlKXsgLy/pgInmi6nmjInpkq7liY1cblx0XHRcdFx0dmFyICR0aGlzID0gdGhpcztcblx0XHRcdFx0dmFyIEJlZm9yZV9TZWxlY3RfRXZlbnQgPSAkdGhpcy4kZGF0YS5wYXJhbS5TY2FuX0NvZGUuQmVmb3JlX1NlbGVjdF9FdmVudDtcblx0XHRcdFx0aWYoIUJlZm9yZV9TZWxlY3RfRXZlbnQpe1xuXHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi5o+Q56S6XCIsY29udGVudDpcIumAieaLqeWJjeS6i+S7tuS4uuepuu+8gVwiLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHQvLyBpZighQWZ0ZXJfU2VsZWN0X0V2ZW50KXtcblx0XHRcdFx0Ly8gXHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIuaPkOekulwiLGNvbnRlbnQ6XCLpgInmi6nlkI7kuovku7bkuLrnqbrvvIFcIixzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHRcdFx0Ly8gXHRyZXR1cm47XG5cdFx0XHRcdC8vIH1cblx0XHRcdFx0Ly8gdmFyIGRhdGFfYXR0ciA9IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtpbmRleF0uQXR0cltpaW5kZXhdO1xuXHRcdFx0XHQvLyB0aGlzLkRhdGFPYmpSdW5DdXN0b21FdmVudF9SZXR1cm4oQmVmb3JlX1NlbGVjdF9FdmVudCwgJycsIEFmdGVyX1NlbGVjdF9FdmVudCwgJycsICcnKTtcblx0XHRcdFx0dmFyIG1hc3RfYXR0cj1bXTtcblx0XHRcdFx0dmFyIGF0dHJsaXN0ID0gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0O1xuXHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJsaXN0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0dmFyIGF0dHIgPSBhdHRybGlzdFtpXS5BdHRyO1xuXHRcdFx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdFx0dmFyIGFyID0gYXR0cltqXTtcblx0XHRcdFx0XHRcdGlmKGFyLlZhbHVlPT0n6K+36YCJ5oupJyl7XG5cdFx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi5o+Q56S6XCIsY29udGVudDphci5EaXNwTmFtZStcIuacqumAieaLqeaVsOaNru+8gVwiLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpZihhci5UeXBlPT0n5byV55So5a+56LGhKOWkmuS4qiknKVxuXHRcdFx0XHRcdFx0XHRpZihhci5WYWx1ZT09J+ivtycpIGFyLlZhbHVlPScnO1xuXHRcdFx0XHRcdFx0aWYoYXIuVHlwZT09J+W8leeUqOS6uuWRmCcgfHwgYXIuVHlwZT09J+W8leeUqOmhueebricpXG5cdFx0XHRcdFx0XHRcdG1hc3RfYXR0ci5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsdWU6IGFyLlZhbElEID9hci5WYWxJRCA6JycgfSk7XG5cdFx0XHRcdFx0XHRlbHNlIGlmKGFyLlR5cGU9PSfluIPlsJTlgLwnKVxuXHRcdFx0XHRcdFx0XHRtYXN0X2F0dHIucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWx1ZT8nMSc6JzAnfSk7XG5cdFx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHRcdG1hc3RfYXR0ci5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsdWU6IGFyLlZhbHVlID9hci5WYWx1ZSA6Jyd9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0XG5cdFx0XHRcdHZhciByZXE9W107XG5cdFx0XHRcdHZhciBhdHRybGlzdCA9IHRoaXMuJGRhdGEuc3ViQ2xhc3NBdHRyTGlzdDtcblx0XHRcdFx0dmFyIG1zZz0nJztcblx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhdHRybGlzdC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdHZhciBhdHRyID0gYXR0cmxpc3RbaV0uQXR0cjtcblx0XHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IGF0dHIubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0XHRcdHZhciBhciA9IGF0dHJbal07XG5cdFx0XHRcdFx0XHRpZihhci5UeXBlPT0n5byV55So5a+56LGhKOWkmuS4qiknKVxuXHRcdFx0XHRcdFx0XHRpZihhci5WYWx1ZT09J+ivtycpIGFyLlZhbHVlPScnO1xuXHRcdFx0XHRcdFx0aWYoYXIuVHlwZT09J+W8leeUqOS6uuWRmCcgfHwgYXIuVHlwZT09J+W8leeUqOmhueebricpXG5cdFx0XHRcdFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsdWU6IGFyLlZhbElEID9hci5WYWxJRCA6JycgfSk7XG5cdFx0XHRcdFx0XHRlbHNlIGlmKGFyLlR5cGU9PSfluIPlsJTlgLwnKVxuXHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWx1ZT8nMSc6JzAnfSk7XG5cdFx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsdWU6IGFyLlZhbHVlID9hci5WYWx1ZSA6Jyd9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0XG5cdFx0XHRcdHZhciBpbmZvID0ge1xuXHRcdFx0XHQgICAgZXZlbnRpZDogQmVmb3JlX1NlbGVjdF9FdmVudC5JRCxcblx0XHRcdFx0ICAgIGVkdHlwZTogXCI3XCIsLy9cIjBcIixcblx0XHRcdFx0ICAgIHByb2plY3RpZDogJycsXG5cdFx0XHRcdCAgICByY2xzaWQ6ICcnLFxuXHRcdFx0XHQgICAgcm9iamlkOiAnJyxcblx0XHRcdFx0ICAgIHVzZXJsb2dpbjogJycsXG5cdFx0XHRcdCAgICBjbHNpZDogJ01CT1gnLC8vdGhpcy4kZGF0YS5wYXJhbS5TdWJfQ2xzLklELFxuXHRcdFx0XHQgICAgb2JqaWQ6IFwiXCIsXG5cdFx0XHRcdCAgICBhdHRyOiByZXEsXG5cdFx0XHRcdFx0bWFzdF9hdHRyOiBtYXN0X2F0dHIsXG5cdFx0XHRcdFx0aW5wdXRQYXJhbXRlcjogbWFzdF9hdHRyXG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gY29uc29sZS5sb2coaW5mbyk7XG5cdFx0XHRcdHRoaXMuc2Nhbl9EYXRhT2JqUnVuQ3VzdG9tRXZlbnQoaW5mbywgXCJcIik7XG5cdFx0XHR9LFxuXHRcdFx0cG9wdXBDaGFuZ2UoZSkge1xuXHRcdFx0XHRjb25zb2xlLmxvZygn5b2T5YmN5qih5byP77yaJyArIGUudHlwZSArICcs54q25oCB77yaJyArIGUuc2hvdyk7XG5cdFx0XHR9LFxuXHRcdFx0Y2hlY2tDaGFuZ2UoZSl7IC8v5by55qGGY2hlY2vpgInmi6lcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coZS50YXJnZXQuZGF0YXNldCk7XG5cdFx0XHRcdHZhciBpbmRleCA9IGUudGFyZ2V0LmRhdGFzZXQuaW5kZXg7XG5cdFx0XHRcdHZhciBpc2NoZWNrID0gZS50YXJnZXQuZGF0YXNldC5pc2NoZWNrO1xuXHRcdFx0XHR2YXIgZGF0YSA9IHRoaXMuJGRhdGEuY2hlY2tfbGlzdC5pdGVtcztcblx0XHRcdFx0Ly8gdGhpcy4kZGF0YS5jaGVja19saXN0Lml0ZW1zPVtdO1xuXHRcdFx0XHRpZih0aGlzLiRkYXRhLmNoZWNrX2xpc3QubXVsdGlwbGVfY2hvaWNlPT1cIjBcIil7IC8v5Yik5pat5pe25Y2V6YCJ6L+Y5piv5aSa6YCJXG5cdFx0XHRcdFx0Zm9yKHZhciBpIGluIGRhdGEpe1xuXHRcdFx0XHRcdFx0ZGF0YVtpXS5jaGVjaz1mYWxzZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0ZGF0YVtpbmRleF0uY2hlY2s9aXNjaGVjaz9mYWxzZTp0cnVlO1xuXHRcdFx0XHR0aGlzLiRkYXRhLmNoZWNrX2xpc3QuaXRlbXM9ZGF0YTtcblx0XHRcdFx0XG5cdFx0XHR9LFxuXHRcdFx0cG9wdXBfY2FuY2VsKGUpeyAvL+W8ueahhuWPlua2iFxuXHRcdFx0XHR0aGlzLiRyZWZzLnBvcHVwLmNsb3NlKCk7XG5cdFx0XHR9LFxuXHRcdFx0cG9wdXBfc2F2YShlKXsgLy/lvLnmoYbnoa7lrpog6YCJ5oup5oyJ6ZKu5ZCOXG5cdFx0XHRcdHZhciAkdGhpcyA9IHRoaXM7XG5cdFx0XHRcdHZhciBBZnRlcl9TZWxlY3RfRXZlbnQgPSAkdGhpcy4kZGF0YS5wYXJhbS5TY2FuX0NvZGUuQWZ0ZXJfU2VsZWN0X0V2ZW50O1xuXHRcdFx0XHRpZighQWZ0ZXJfU2VsZWN0X0V2ZW50KXtcblx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIuaPkOekulwiLGNvbnRlbnQ6XCLpgInmi6nlkI7kuovku7bkuLrnqbrvvIFcIixzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0dmFyIGl0ZW1zID0gJHRoaXMuJGRhdGEuY2hlY2tfbGlzdC5pdGVtcztcblx0XHRcdFx0dmFyIGRhdGE9W107XG5cdFx0XHRcdHZhciBuYW1lPVwiXCI7XG5cdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRpZihpdGVtc1tpXS5jaGVjaz09dHJ1ZSl7XG5cdFx0XHRcdFx0XHRpZihuYW1lKVxuXHRcdFx0XHRcdFx0XHRuYW1lKz0nOyc7XG5cdFx0XHRcdFx0XHRuYW1lKz1pdGVtc1tpXS5uYW1lO1xuXHRcdFx0XHRcdFx0ZGF0YS5wdXNoKHtpZDppdGVtc1tpXS5pZCxuYW1lOml0ZW1zW2ldLm5hbWV9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYoZGF0YS5sZW5ndGg9PTApe1xuXHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi5o+Q56S6XCIsY29udGVudDpcIuacqumAieaLqeaVsOaNru+8gVwiLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHR2YXIgbWFzdF9hdHRyPVtdO1xuXHRcdFx0XHR2YXIgYXR0cmxpc3QgPSB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3Q7XG5cdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmxpc3QubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHR2YXIgYXR0ciA9IGF0dHJsaXN0W2ldLkF0dHI7XG5cdFx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0XHR2YXIgYXIgPSBhdHRyW2pdO1xuXHRcdFx0XHRcdFx0aWYoYXIuVmFsdWU9PSfor7fpgInmi6knKXtcblx0XHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLmj5DnpLpcIixjb250ZW50OmFyLkRpc3BOYW1lK1wi5pyq6YCJ5oup5pWw5o2u77yBXCIsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmKGFyLlR5cGU9PSflvJXnlKjlr7nosaEo5aSa5LiqKScpXG5cdFx0XHRcdFx0XHRcdGlmKGFyLlZhbHVlPT0n6K+3JykgYXIuVmFsdWU9Jyc7XG5cdFx0XHRcdFx0XHRpZihhci5UeXBlPT0n5byV55So5Lq65ZGYJyB8fCBhci5UeXBlPT0n5byV55So6aG555uuJylcblx0XHRcdFx0XHRcdFx0bWFzdF9hdHRyLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsSUQgP2FyLlZhbElEIDonJyB9KTtcblx0XHRcdFx0XHRcdGVsc2UgaWYoYXIuVHlwZT09J+W4g+WwlOWAvCcpXG5cdFx0XHRcdFx0XHRcdG1hc3RfYXR0ci5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsdWU6IGFyLlZhbHVlPycxJzonMCd9KTtcblx0XHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdFx0bWFzdF9hdHRyLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsdWUgP2FyLlZhbHVlIDonJ30pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRcblx0XHRcdFx0JHRoaXMuJGRhdGEuc2NhbkNvZGVWYWw9bmFtZTtcblx0XHRcdFx0dmFyIGluZm8gPSB7XG5cdFx0XHRcdCAgICBldmVudGlkOiBBZnRlcl9TZWxlY3RfRXZlbnQuSUQsXG5cdFx0XHRcdCAgICBlZHR5cGU6IFwiN1wiLFxuXHRcdFx0XHQgICAgcHJvamVjdGlkOiAnJyxcblx0XHRcdFx0ICAgIHJjbHNpZDogJycsXG5cdFx0XHRcdCAgICByb2JqaWQ6ICcnLFxuXHRcdFx0XHRcdHVzZXJsb2dpbjogJycsXG5cdFx0XHRcdFx0Y2xzaWQ6ICdNQk9YJyxcblx0XHRcdFx0XHRvYmppZDogXCJcIixcblx0XHRcdFx0ICAgIGF0dHI6IG1hc3RfYXR0cixcblx0XHRcdFx0XHRpbnB1dFBhcmFtdGVyOiBkYXRhLFxuXHRcdFx0XHRcdGVudmlyb21lbnQ6ICcnXG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gY29uc29sZS5sb2coaW5mbyk7XG5cdFx0XHRcdHRoaXMuc2Nhbl9EYXRhT2JqUnVuQ3VzdG9tRXZlbnQoaW5mbywgXCJcIik7XG5cdFx0XHRcdHRoaXMuJHJlZnMucG9wdXAuY2xvc2UoKTtcblx0XHRcdH0sXG5cdFx0XHRcblx0XHRcdGNhbmNlbChlKXtcblx0XHRcdFx0dW5pLm5hdmlnYXRlQmFjayh7XG5cdFx0XHRcdFx0ZGVsdGE6MSAvL+i/lOWbnuWxguaVsO+8jDLliJnkuIrkuIrpobVcblx0XHRcdFx0fSk7XG5cdFx0XHR9LFxuXHRcdFx0cGFuZWxfZGVsKGluZGV4KXtcblx0XHRcdFx0dmFyICR0aGlzID0gdGhpcztcblx0XHRcdFx0aWYgKHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0W2luZGV4XS5zY2FuQ29kZVZhbCA9PSB0aGlzLiRkYXRhLnNjYW5Db2RlVmFsKSB7XG5cdFx0XHRcdFx0dGhpcy4kZGF0YS5zY2FuQ29kZVZhbD0nJztcblx0XHRcdFx0fVxuXHRcdFx0XHRpZighdGhpcy4kZGF0YS5zdWJQYW5lbExpc3RbaW5kZXhdLk9iaklEKVxuXHRcdFx0XHRcdHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0LnNwbGljZShpbmRleCwgMSk7XG5cdFx0XHRcdGVsc2V7XG5cdFx0XHRcdFx0dmFyIGRhdGFJbmZvID0ge1xuXHRcdFx0XHRcdFx0Y2xzSWQ6dGhpcy4kZGF0YS5wYXJhbS5TdWJfQ2xzLklELFxuXHRcdFx0XHRcdFx0b2JqSWQ6dGhpcy4kZGF0YS5zdWJQYW5lbExpc3RbaW5kZXhdLk9iaklEXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRjb25zb2xlLmxvZyhkYXRhSW5mbyk7XG5cdFx0XHRcdFx0Ly8gcmV0dXJuO1xuXHRcdFx0XHRcdHVuaS5zaG93TG9hZGluZyh7IHRpdGxlOlwi5Yqg6L295LitLi4uXCIgfSk7XG5cdFx0XHRcdFx0dGhpcy4kc3RvcmUuZGlzcGF0Y2goJ0RlbE9iaicsZGF0YUluZm8pLnRoZW4oc3VjY2Vzcz0+e1xuXHRcdFx0XHRcdFx0Y29uc29sZS5sb2coc3VjY2Vzcyk7XG5cdFx0XHRcdFx0XHR1bmkuaGlkZUxvYWRpbmcoKTtcblx0XHRcdFx0XHRcdGlmIChzdWNjZXNzLmNvZGU9PScwMDAwMCcpIHtcblx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0LnNwbGljZShpbmRleCwgMSk7XG5cdFx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi5o+Q56S6XCIsY29udGVudDpcIuWIoOmZpOaIkOWKn++8gVwiLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHRcdFx0fWVsc2V7XG5cdFx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vOVwiLGNvbnRlbnQ6c3VjY2Vzcy5tc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSkuY2F0Y2goZXg9Pntcblx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKGV4KTtcblx0XHRcdFx0XHRcdHVuaS5oaWRlTG9hZGluZygpO1xuXHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLmj5DnpLo5LjFcIixjb250ZW50OmV4LmVyck1zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdGFzeW5jIGNsYXNzR3JpZFN0eWxlSW5mbyhjbHNpZCxzdHlsZU5hbWUsY2xzVHlwZSl7XG5cdFx0XHRcdHZhciAkdGhpcyA9IHRoaXM7XG5cdFx0XHRcdHZhciBncmlkc3R5bGVJbmZvID0ge1xuXHRcdFx0XHRcdGNsYXNzX2lkOiBjbHNpZCxcblx0XHRcdFx0XHRuYW1lOiBzdHlsZU5hbWUsXG5cdFx0XHRcdFx0dHlwZTogJzInXG5cdFx0XHRcdH07XG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKCR0aGlzLiRzdG9yZS5nZXR0ZXJzLmdldGNsYXNzR3JpZFN0eWxlSW5mbyk7XG5cdFx0XHRcdC8v6I635Y+W5Li75pWw5o2u57G755WM6Z2i5qC35byPXG5cdFx0XHRcdGlmKGNsc1R5cGU9PSdNYXN0Jyl7XG5cdFx0XHRcdFx0JHRoaXMuJHN0b3JlLnN0YXRlLnRoaXNFZGl0TmFtZSA9IHN0eWxlTmFtZTtcblx0XHRcdFx0XHRpZigkdGhpcy4kc3RvcmUuZ2V0dGVycy5nZXRjbGFzc0dyaWRTdHlsZUluZm8pe1xuXHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEuY2xhc3NHcmlkU3R5bGUgPSAkdGhpcy4kc3RvcmUuZ2V0dGVycy5nZXRjbGFzc0dyaWRTdHlsZUluZm8uZGF0YTtcblx0XHRcdFx0XHRcdCR0aGlzLmNsYXNzX2F0dHJfaW5pdCgpO1xuXHRcdFx0XHRcdH1lbHNle1xuXHRcdFx0XHRcdFx0Ly9jb25zb2xlLmxvZyhncmlkc3R5bGVJbmZvKTtcblx0XHRcdFx0XHRcdCR0aGlzLiRzdG9yZS5kaXNwYXRjaCgnY2xhc3NHcmlkU3R5bGVJbmZvJyxncmlkc3R5bGVJbmZvKS50aGVuKHN1Y2Nlc3M9Pntcblx0XHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coc3VjY2Vzcyk7XG5cdFx0XHRcdFx0XHRcdGlmIChzdWNjZXNzLmNvZGU9PScwMDAwMCcpIHtcblx0XHRcdFx0XHRcdFx0XHRzdWNjZXNzLmRhdGEuU3R5bGVEZWYgPSBKU09OLnBhcnNlKHN1Y2Nlc3MuZGF0YS5TdHlsZURlZik7XG5cdFx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEuY2xhc3NHcmlkU3R5bGUgPSBzdWNjZXNzLmRhdGE7XG5cdFx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdFx0JHRoaXMuY2xhc3NfYXR0cl9pbml0KCk7XG5cdFx0XHRcdFx0XHRcdH1lbHNle1xuXHRcdFx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vMS4yXCIsY29udGVudDpzdWNjZXNzLm1zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSkuY2F0Y2goZXg9Pntcblx0XHRcdFx0XHRcdFx0Y29uc29sZS5sb2coZXgpO1xuXHRcdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzEuM1wiLGNvbnRlbnQ6ZXguZXJyTXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2UgaWYoY2xzVHlwZT09J1N1YicpeyAgLy/ojrflj5bku47mlbDmja7nsbvnlYzpnaLmoLflvI9cblx0XHRcdFx0XHQkdGhpcy4kc3RvcmUuc3RhdGUudGhpc0VkaXRTdWJOYW1lID0gc3R5bGVOYW1lO1xuXHRcdFx0XHRcdGlmKCR0aGlzLiRzdG9yZS5nZXR0ZXJzLmdldFN1YkNsYXNzR3JpZFN0eWxlSW5mbyl7XG5cdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5zdWJDbGFzc0dyaWRTdHlsZSA9ICR0aGlzLiRzdG9yZS5nZXR0ZXJzLmdldFN1YkNsYXNzR3JpZFN0eWxlSW5mby5kYXRhO1xuXHRcdFx0XHRcdFx0JHRoaXMuc3ViQ2xhc3NfYXR0cl9pbml0KCk7XG5cdFx0XHRcdFx0fWVsc2V7XG5cdFx0XHRcdFx0XHQvL2NvbnNvbGUubG9nKGdyaWRzdHlsZUluZm8pO1xuXHRcdFx0XHRcdFx0JHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdzdWJDbGFzc0dyaWRTdHlsZUluZm8nLGdyaWRzdHlsZUluZm8pLnRoZW4oc3VjY2Vzcz0+e1xuXHRcdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhzdWNjZXNzKTtcblx0XHRcdFx0XHRcdFx0aWYgKHN1Y2Nlc3MuY29kZT09JzAwMDAwJykge1xuXHRcdFx0XHRcdFx0XHRcdHN1Y2Nlc3MuZGF0YS5TdHlsZURlZiA9IEpTT04ucGFyc2Uoc3VjY2Vzcy5kYXRhLlN0eWxlRGVmKTtcblx0XHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5zdWJDbGFzc0dyaWRTdHlsZSA9IHN1Y2Nlc3MuZGF0YTtcblx0XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0XHQkdGhpcy5zdWJDbGFzc19hdHRyX2luaXQoKTtcblx0XHRcdFx0XHRcdFx0fWVsc2V7XG5cdFx0XHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor68xLjJcIixjb250ZW50OnN1Y2Nlc3MubXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9KS5jYXRjaChleD0+e1xuXHRcdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhleCk7XG5cdFx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vMS4zXCIsY29udGVudDpleC5lcnJNc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRvbnRhcChlKXsgLy/miavnoIHlip/og71cblx0XHRcdFx0Ly9jb25zb2xlLmxvZyhlLnRhcmdldClcblx0XHRcdFx0Z2V0QXBwKCkub25TY2FuKChyZXN1bHQpPT57XG5cdFx0XHRcdFx0Ly9jb25zb2xlLmxvZyhyZXN1bHQuZGVjb2RlZGF0YSk7XG5cdFx0XHRcdFx0dmFyIGlzVmFsID10aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV0uVmFsdWU7XG5cdFx0XHRcdFx0Ly8gaWYoIWlzVmFsKXtcblx0XHRcdFx0XHQvLyBcdHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2lpaW5kZXgnXV0uc3ViQ2xhc3NBdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZS50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dLlZhbHVlPXJlc3VsdC5kZWNvZGVkYXRhO1xuXHRcdFx0XHRcdC8vIFx0dmFyIGlzVmFsZCA9dGhpcy4kZGF0YS5zdWJQYW5lbExpc3RbZS50YXJnZXQuZGF0YXNldFsnaWlpbmRleCddXS5zdWJDbGFzc0F0dHJbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV0uVmFsdWU7XG5cdFx0XHRcdFx0Ly8gXHRyZXR1cm47XG5cdFx0XHRcdFx0Ly8gfVxuXHRcdFx0XHRcdC8v5Li75pWw5o2u57G75omr56CB5p+l6K+i5pWw5o2uXG5cdFx0XHRcdFx0aWYgKGlzVmFsIT1yZXN1bHQuZGVjb2RlZGF0YSkge1xuXHRcdFx0XHRcdFx0dGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZS50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dLlZhbHVlPXJlc3VsdC5kZWNvZGVkYXRhO1xuXHRcdFx0XHRcdFx0dW5pLmhpZGVLZXlib2FyZCgpO1xuXHRcdFx0XHRcdFx0Ly/lrZDmlbDmja7nsbvmiavnoIHljLrkuovku7bohJrmnKxcblx0XHRcdFx0XHRcdHZhciBldmVudGlkID0gdGhpcy4kZGF0YS5wYXJhbS5TY2FuX0NvZGUuSW5wdXRfQ2hhbmdlX0V2ZW50LklEO1xuXHRcdFx0XHRcdFx0aWYgKGV2ZW50aWQpIHtcblx0XHRcdFx0XHQgICAgICAgIHZhciByZXE9W107XG5cdFx0XHRcdFx0ICAgICAgICB2YXIgYXR0cmxpc3QgPSB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3Q7ICAvL+S4u+aVsOaNruexu+WxnuaAp1xuXHRcdFx0XHRcdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRybGlzdC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdCAgICAgICAgXHR2YXIgYXR0ciA9IGF0dHJsaXN0W2ldLkF0dHI7XG5cdFx0XHRcdFx0ICAgICAgICBcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdCAgICAgICAgXHRcdHZhciBhciA9IGF0dHJbal07XG5cdFx0XHRcdFx0ICAgICAgICBcdFx0aWYoYXIuVHlwZT09J+W8leeUqOWvueixoSjlpJrkuKopJylcblx0XHRcdFx0XHQgICAgICAgIFx0XHRcdGlmKGFyLlZhbHVlPT0n6K+3JykgYXIuVmFsdWU9Jyc7XG5cdFx0XHRcdFx0ICAgICAgICBcdFx0aWYoYXIuVHlwZT09J+W8leeUqOS6uuWRmCcgfHwgYXIuVHlwZT09J+W8leeUqOmhueebricpXG5cdFx0XHRcdFx0ICAgICAgICBcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWxJRCA/YXIuVmFsSUQgOicnIH0pO1xuXHRcdFx0XHRcdCAgICAgICAgXHRcdGVsc2UgaWYoYXIuVHlwZT09J+W4g+WwlOWAvCcpXG5cdFx0XHRcdFx0ICAgICAgICBcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWx1ZT8nMSc6JzAnfSk7XG5cdFx0XHRcdFx0ICAgICAgICBcdFx0ZWxzZVxuXHRcdFx0XHRcdCAgICAgICAgXHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsdWUgP2FyLlZhbHVlIDonJ30pO1xuXHRcdFx0XHRcdCAgICAgICAgXHR9XG5cdFx0XHRcdFx0ICAgICAgICB9XG5cdFx0XHRcdFx0ICAgICAgICB2YXIgaW5mbyA9IHtcblx0XHRcdFx0XHQgICAgICAgICAgICBldmVudGlkOiBldmVudGlkLFxuXHRcdFx0XHRcdCAgICAgICAgICAgIGVkdHlwZTogXCI3XCIsLy9cIjBcIixcblx0XHRcdFx0XHQgICAgICAgICAgICBwcm9qZWN0aWQ6ICcnLFxuXHRcdFx0XHRcdCAgICAgICAgICAgIHJjbHNpZDogJycsXG5cdFx0XHRcdFx0ICAgICAgICAgICAgcm9iamlkOiAnJyxcblx0XHRcdFx0XHQgICAgICAgICAgICB1c2VybG9naW46ICcnLFxuXHRcdFx0XHRcdCAgICAgICAgICAgIGNsc2lkOiAnTUJPWCcsLy90aGlzLiRkYXRhLnBhcmFtLlN1Yl9DbHMuSUQsXG5cdFx0XHRcdFx0ICAgICAgICAgICAgb2JqaWQ6IFwiXCIsXG5cdFx0XHRcdFx0ICAgICAgICAgICAgYXR0cjogcmVxLFxuXHRcdFx0XHRcdFx0XHRcdG1hc3RfYXR0cjogW10sXG5cdFx0XHRcdFx0XHRcdFx0aW5wdXRQYXJhbXRlcjpbeyBhdHRyOiAnbWFzdF9pbnB1dF8zMDM3JywgdmFsdWU6IHJlc3VsdC5kZWNvZGVkYXRhIH1dXG5cdFx0XHRcdFx0ICAgICAgICB9XG5cdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdCAgICAgICAgdGhpcy5zY2FuX0RhdGFPYmpSdW5DdXN0b21FdmVudChpbmZvLCBcIlwiKTtcblx0XHRcdFx0XHQgICAgfVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSlcblx0XHRcdH0sXG5cdFx0XHRzdWJvbnRhcChlKXsgLy/miavnoIHlip/og71cblx0XHRcdFx0Ly9jb25zb2xlLmxvZyhlLnRhcmdldClcblx0XHRcdFx0Z2V0QXBwKCkub25TY2FuKChyZXN1bHQpPT57XG5cdFx0XHRcdFx0Ly9jb25zb2xlLmxvZyhyZXN1bHQuZGVjb2RlZGF0YSk7XG5cdFx0XHRcdFx0dmFyIGlzVmFsID10aGlzLiRkYXRhLnN1YkNsYXNzQXR0ckxpc3RbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV0uVmFsdWU7XG5cdFx0XHRcdFx0Ly/kuLvmlbDmja7nsbvmiavnoIHmn6Xor6LmlbDmja5cblx0XHRcdFx0XHRpZiAoaXNWYWwhPXJlc3VsdC5kZWNvZGVkYXRhKSB7XG5cdFx0XHRcdFx0XHR0aGlzLiRkYXRhLnN1YkNsYXNzQXR0ckxpc3RbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV0uVmFsdWU9cmVzdWx0LmRlY29kZWRhdGE7XG5cdFx0XHRcdFx0XHR1bmkuaGlkZUtleWJvYXJkKCk7XG5cdFx0XHRcdFx0XHQvL+WtkOaVsOaNruexu+aJq+eggeWMuuS6i+S7tuiEmuacrFxuXHRcdFx0XHRcdFx0dmFyIGV2ZW50aWQgPSB0aGlzLiRkYXRhLnBhcmFtLlNjYW5fQ29kZS5JbnB1dF9DaGFuZ2VfRXZlbnQuSUQ7XG5cdFx0XHRcdFx0XHRpZiAoZXZlbnRpZCkge1xuXHRcdFx0XHRcdCAgICAgICAgdmFyIHJlcT1bXTtcblx0XHRcdFx0XHQgICAgICAgIHZhciBhdHRybGlzdCA9IHRoaXMuJGRhdGEuc3ViQ2xhc3NBdHRyTGlzdDsgIC8v5Li75pWw5o2u57G75bGe5oCnXG5cdFx0XHRcdFx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJsaXN0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0ICAgICAgICBcdHZhciBhdHRyID0gYXR0cmxpc3RbaV0uQXR0cjtcblx0XHRcdFx0XHQgICAgICAgIFx0Zm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0ICAgICAgICBcdFx0dmFyIGFyID0gYXR0cltqXTtcblx0XHRcdFx0XHQgICAgICAgIFx0XHRpZihhci5UeXBlPT0n5byV55So5a+56LGhKOWkmuS4qiknKVxuXHRcdFx0XHRcdCAgICAgICAgXHRcdFx0aWYoYXIuVmFsdWU9PSfor7cnKSBhci5WYWx1ZT0nJztcblx0XHRcdFx0XHQgICAgICAgIFx0XHRpZihhci5UeXBlPT0n5byV55So5Lq65ZGYJyB8fCBhci5UeXBlPT0n5byV55So6aG555uuJylcblx0XHRcdFx0XHQgICAgICAgIFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsdWU6IGFyLlZhbElEID9hci5WYWxJRCA6JycgfSk7XG5cdFx0XHRcdFx0ICAgICAgICBcdFx0ZWxzZSBpZihhci5UeXBlPT0n5biD5bCU5YC8Jylcblx0XHRcdFx0XHQgICAgICAgIFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsdWU6IGFyLlZhbHVlPycxJzonMCd9KTtcblx0XHRcdFx0XHQgICAgICAgIFx0XHRlbHNlXG5cdFx0XHRcdFx0ICAgICAgICBcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWx1ZSA/YXIuVmFsdWUgOicnfSk7XG5cdFx0XHRcdFx0ICAgICAgICBcdH1cblx0XHRcdFx0XHQgICAgICAgIH1cblx0XHRcdFx0XHQgICAgICAgIHZhciBpbmZvID0ge1xuXHRcdFx0XHRcdCAgICAgICAgICAgIGV2ZW50aWQ6IGV2ZW50aWQsXG5cdFx0XHRcdFx0ICAgICAgICAgICAgZWR0eXBlOiBcIjdcIiwvL1wiMFwiLFxuXHRcdFx0XHRcdCAgICAgICAgICAgIHByb2plY3RpZDogJycsXG5cdFx0XHRcdFx0ICAgICAgICAgICAgcmNsc2lkOiAnJyxcblx0XHRcdFx0XHQgICAgICAgICAgICByb2JqaWQ6ICcnLFxuXHRcdFx0XHRcdCAgICAgICAgICAgIHVzZXJsb2dpbjogJycsXG5cdFx0XHRcdFx0ICAgICAgICAgICAgY2xzaWQ6ICdNQk9YJywvL3RoaXMuJGRhdGEucGFyYW0uU3ViX0Nscy5JRCxcblx0XHRcdFx0XHQgICAgICAgICAgICBvYmppZDogXCJcIixcblx0XHRcdFx0XHQgICAgICAgICAgICBhdHRyOiByZXEsXG5cdFx0XHRcdFx0XHRcdFx0bWFzdF9hdHRyOiBbXSxcblx0XHRcdFx0XHRcdFx0XHRpbnB1dFBhcmFtdGVyOlt7IGF0dHI6ICdtYXN0X2lucHV0XzMwMzcnLCB2YWx1ZTogcmVzdWx0LmRlY29kZWRhdGEgfV1cblx0XHRcdFx0XHQgICAgICAgIH1cblx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0ICAgICAgICB0aGlzLnNjYW5fRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGluZm8sIFwiXCIpO1xuXHRcdFx0XHRcdCAgICB9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KVxuXHRcdFx0fSxcblx0XHRcdHNjYW5fb250YXAoZSl7IC8v5omr56CB5Yy65omr56CB5Yqf6IO9XG5cdFx0XHRcdC8vY29uc29sZS5sb2coZS50YXJnZXQpXG5cdFx0XHRcdGdldEFwcCgpLm9uU2NhbigocmVzdWx0KT0+e1xuXHRcdFx0XHRcdGNvbnNvbGUubG9nKHJlc3VsdC5kZWNvZGVkYXRhKTtcblx0XHRcdFx0XHR2YXIgaXNmbGFnPXRydWU7XG5cdFx0XHRcdFx0Zm9yKHZhciBpIGluIHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0KXtcblx0XHRcdFx0XHRcdGlmKHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0W2ldLnNjYW5Db2RlVmFsID09IHJlc3VsdC5kZWNvZGVkYXRhKSBcblx0XHRcdFx0XHRcdFx0aXNmbGFnPWZhbHNlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQvL+WtkOaVsOaNruexu+aJq+eggeafpeivouaVsOaNrlxuXHRcdFx0XHRcdGlmIChpc2ZsYWcpIHtcblx0XHRcdFx0XHRcdHVuaS5oaWRlS2V5Ym9hcmQoKTtcblx0XHRcdFx0XHRcdHRoaXMuJGRhdGEuc2NhbkNvZGVWYWw9cmVzdWx0LmRlY29kZWRhdGE7XG5cdFx0XHRcdFx0XHR2YXIgZXZlbnRpZCA9IHRoaXMuJGRhdGEucGFyYW0uU2Nhbl9Db2RlLklucHV0X0NoYW5nZV9FdmVudC5JRDtcblx0XHRcdFx0XHRcdGlmIChldmVudGlkKSB7XG5cdFx0XHRcdFx0ICAgICAgICB2YXIgbWFzdF9yZXE9W107XG5cdFx0XHRcdFx0XHRcdC8v5Li75pWw5o2u57G75bGe5oCnXG5cdFx0XHRcdFx0XHRcdHZhciBjbGFzc2F0dHJsaXN0ID0gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0OyAgXG5cdFx0XHRcdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgY2xhc3NhdHRybGlzdC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdFx0XHRcdHZhciBhdHRyID0gY2xhc3NhdHRybGlzdFtpXS5BdHRyO1xuXHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIGFyID0gYXR0cltqXTtcblx0XHRcdFx0XHRcdFx0XHRcdGlmKGFyLlR5cGU9PSflvJXnlKjlr7nosaEo5aSa5LiqKScpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGFyLlZhbHVlPT0n6K+3JykgYXIuVmFsdWU9Jyc7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZihhci5UeXBlPT0n5byV55So5Lq65ZGYJyB8fCBhci5UeXBlPT0n5byV55So6aG555uuJylcblx0XHRcdFx0XHRcdFx0XHRcdFx0bWFzdF9yZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWxJRCA/YXIuVmFsSUQgOicnIH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0ZWxzZSBpZihhci5UeXBlPT0n5biD5bCU5YC8Jylcblx0XHRcdFx0XHRcdFx0XHRcdFx0bWFzdF9yZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWx1ZT8nMSc6JzAnfSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG1hc3RfcmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsdWUgP2FyLlZhbHVlIDonJ30pO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdCAgICAgICAgdmFyIHJlcT1bXTtcblx0XHRcdFx0XHQgICAgICAgIC8v5a2Q5pWw5o2u57G75bGe5oCnXG5cdFx0XHRcdFx0XHRcdHZhciBhdHRybGlzdCA9IHRoaXMuJGRhdGEuc3ViQ2xhc3NBdHRyTGlzdDtcblx0XHRcdFx0XHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmxpc3QubGVuZ3RoOyBpKyspIHsgXG5cdFx0XHRcdFx0ICAgICAgICBcdHZhciBhdHRyID0gYXR0cmxpc3RbaV0uQXR0cjtcblx0XHRcdFx0XHQgICAgICAgIFx0Zm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0ICAgICAgICBcdFx0dmFyIGFyID0gYXR0cltqXTtcblx0XHRcdFx0XHQgICAgICAgIFx0XHRpZihhci5UeXBlPT0n5byV55So5a+56LGhKOWkmuS4qiknKVxuXHRcdFx0XHRcdCAgICAgICAgXHRcdFx0aWYoYXIuVmFsdWU9PSfor7cnKSBhci5WYWx1ZT0nJztcblx0XHRcdFx0XHQgICAgICAgIFx0XHRpZihhci5UeXBlPT0n5byV55So5Lq65ZGYJyB8fCBhci5UeXBlPT0n5byV55So6aG555uuJylcblx0XHRcdFx0XHQgICAgICAgIFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsdWU6IGFyLlZhbElEID9hci5WYWxJRCA6JycgfSk7XG5cdFx0XHRcdFx0ICAgICAgICBcdFx0ZWxzZSBpZihhci5UeXBlPT0n5biD5bCU5YC8Jylcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsdWU/JzEnOicwJ30pO1xuXHRcdFx0XHRcdCAgICAgICAgXHRcdGVsc2Vcblx0XHRcdFx0XHQgICAgICAgIFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsdWU6IGFyLlZhbHVlID9hci5WYWx1ZSA6Jyd9KTtcblx0XHRcdFx0XHQgICAgICAgIFx0fVxuXHRcdFx0XHRcdCAgICAgICAgfVxuXHRcdFx0XHRcdCAgICAgICAgdmFyIGluZm8gPSB7XG5cdFx0XHRcdFx0ICAgICAgICAgICAgZXZlbnRpZDogZXZlbnRpZCxcblx0XHRcdFx0XHQgICAgICAgICAgICBlZHR5cGU6ICc3JywvL1wiMFwiLFxuXHRcdFx0XHRcdCAgICAgICAgICAgIHByb2plY3RpZDogJycsXG5cdFx0XHRcdFx0ICAgICAgICAgICAgcmNsc2lkOiAnJyxcblx0XHRcdFx0XHQgICAgICAgICAgICByb2JqaWQ6ICcnLFxuXHRcdFx0XHRcdCAgICAgICAgICAgIHVzZXJsb2dpbjogJycsXG5cdFx0XHRcdFx0ICAgICAgICAgICAgY2xzaWQ6ICdNQk9YJywvL3RoaXMuJGRhdGEucGFyYW0uU3ViX0Nscy5JRCxcblx0XHRcdFx0XHQgICAgICAgICAgICBvYmppZDogXCJcIixcblx0XHRcdFx0XHQgICAgICAgICAgICBhdHRyOiByZXEsXG5cdFx0XHRcdFx0XHRcdFx0bWFzdF9hdHRyOiBtYXN0X3JlcSxcblx0XHRcdFx0XHRcdFx0XHRpbnB1dFBhcmFtdGVyOlt7IGF0dHI6ICdpbnB1dF8zMDM3JywgdmFsdWU6IHRoaXMuJGRhdGEuc2NhbkNvZGVWYWwgfV1cblx0XHRcdFx0XHQgICAgICAgIH1cblx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0ICAgICAgICB0aGlzLnNjYW5fRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGluZm8sIFwiXCIpO1xuXHRcdFx0XHRcdCAgICB9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KVxuXHRcdFx0fSxcblx0XHRcdHNjYW5fb25ldmVudChlKXtcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coZS50YXJnZXQpO1xuXHRcdFx0XHRpZihlLnRhcmdldC52YWx1ZSl7XG5cdFx0XHRcdFx0dmFyIGlzZmxhZz10cnVlO1xuXHRcdFx0XHRcdGZvcih2YXIgaSBpbiB0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdCl7XG5cdFx0XHRcdFx0XHRpZih0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdFtpXS5zY2FuQ29kZVZhbCA9PSBlLnRhcmdldC52YWx1ZSkgXG5cdFx0XHRcdFx0XHRcdGlzZmxhZz1mYWxzZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Ly/lrZDmlbDmja7nsbvmiavnoIHmn6Xor6LmlbDmja5cblx0XHRcdFx0XHRpZiAoaXNmbGFnKSB7XG5cdFx0XHRcdFx0XHR1bmkuaGlkZUtleWJvYXJkKCk7XG5cdFx0XHRcdFx0XHR0aGlzLiRkYXRhLnNjYW5Db2RlVmFsPWUudGFyZ2V0LnZhbHVlO1xuXHRcdFx0XHRcdFx0dmFyIGV2ZW50aWQgPSB0aGlzLiRkYXRhLnBhcmFtLlNjYW5fQ29kZS5JbnB1dF9DaGFuZ2VfRXZlbnQuSUQ7XG5cdFx0XHRcdFx0XHRpZiAoZXZlbnRpZCkge1xuXHRcdFx0XHRcdFx0XHR2YXIgbWFzdF9yZXE9W107XG5cdFx0XHRcdFx0XHRcdC8v5Li75pWw5o2u57G75bGe5oCnXG5cdFx0XHRcdFx0XHRcdHZhciBjbGFzc2F0dHJsaXN0ID0gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0OyAgXG5cdFx0XHRcdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgY2xhc3NhdHRybGlzdC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdFx0XHRcdHZhciBhdHRyID0gY2xhc3NhdHRybGlzdFtpXS5BdHRyO1xuXHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIGFyID0gYXR0cltqXTtcblx0XHRcdFx0XHRcdFx0XHRcdGlmKGFyLlR5cGU9PSflvJXnlKjlr7nosaEo5aSa5LiqKScpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGFyLlZhbHVlPT0n6K+3JykgYXIuVmFsdWU9Jyc7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZihhci5UeXBlPT0n5byV55So5Lq65ZGYJyB8fCBhci5UeXBlPT0n5byV55So6aG555uuJylcblx0XHRcdFx0XHRcdFx0XHRcdFx0bWFzdF9yZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWxJRCA/YXIuVmFsSUQgOicnIH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0ZWxzZSBpZihhci5UeXBlPT0n5biD5bCU5YC8Jylcblx0XHRcdFx0XHRcdFx0XHRcdFx0bWFzdF9yZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWx1ZT8nMSc6JzAnfSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG1hc3RfcmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsdWUgP2FyLlZhbHVlIDonJ30pO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR2YXIgcmVxPVtdO1xuXHRcdFx0XHRcdFx0XHQvL+WtkOaVsOaNruexu+WxnuaAp1xuXHRcdFx0XHRcdFx0XHR2YXIgYXR0cmxpc3QgPSB0aGlzLiRkYXRhLnN1YkNsYXNzQXR0ckxpc3Q7XG5cdFx0XHRcdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmxpc3QubGVuZ3RoOyBpKyspIHsgXG5cdFx0XHRcdFx0XHRcdFx0dmFyIGF0dHIgPSBhdHRybGlzdFtpXS5BdHRyO1xuXHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIGFyID0gYXR0cltqXTtcblx0XHRcdFx0XHRcdFx0XHRcdGlmKGFyLlR5cGU9PSflvJXnlKjlr7nosaEo5aSa5LiqKScpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGFyLlZhbHVlPT0n6K+3JykgYXIuVmFsdWU9Jyc7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZihhci5UeXBlPT0n5byV55So5Lq65ZGYJyB8fCBhci5UeXBlPT0n5byV55So6aG555uuJylcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsSUQgP2FyLlZhbElEIDonJyB9KTtcblx0XHRcdFx0XHRcdFx0XHRcdGVsc2UgaWYoYXIuVHlwZT09J+W4g+WwlOWAvCcpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsdWU6IGFyLlZhbHVlPycxJzonMCd9KTtcblx0XHRcdFx0XHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsdWUgP2FyLlZhbHVlIDonJ30pO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR2YXIgaW5mbyA9IHtcblx0XHRcdFx0XHRcdFx0XHRldmVudGlkOiBldmVudGlkLFxuXHRcdFx0XHRcdFx0XHRcdGVkdHlwZTogJzcnLC8vXCIwXCIsXG5cdFx0XHRcdFx0XHRcdFx0cHJvamVjdGlkOiAnJyxcblx0XHRcdFx0XHRcdFx0XHRyY2xzaWQ6ICcnLFxuXHRcdFx0XHRcdFx0XHRcdHJvYmppZDogJycsXG5cdFx0XHRcdFx0XHRcdFx0dXNlcmxvZ2luOiAnJyxcblx0XHRcdFx0XHRcdFx0XHRjbHNpZDogJ01CT1gnLC8vdGhpcy4kZGF0YS5wYXJhbS5TdWJfQ2xzLklELFxuXHRcdFx0XHRcdFx0XHRcdG9iamlkOiBcIlwiLFxuXHRcdFx0XHRcdFx0XHRcdGF0dHI6IHJlcSxcblx0XHRcdFx0XHRcdFx0XHRtYXN0X2F0dHI6IG1hc3RfcmVxLFxuXHRcdFx0XHRcdFx0XHRcdGlucHV0UGFyYW10ZXI6W3sgYXR0cjogJ2lucHV0XzMwMzcnLCB2YWx1ZTogdGhpcy4kZGF0YS5zY2FuQ29kZVZhbCB9XVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHR0aGlzLnNjYW5fRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGluZm8sIFwiXCIpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdG9uYXJyb3coaW5kZXgsb3Blbil7XG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKGluZGV4KyctLScrb3Blbik7XG5cdFx0XHRcdHZhciBkYXRhX2F0dHI9dGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZS50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dLk9wZW47XG5cdFx0XHRcdGlmKCFkYXRhX2F0dHIpe1xuXHRcdFx0XHRcdHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2lpaW5kZXgnXV0uc3ViQ2xhc3NBdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZS50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dLlZhbHVlPW9wZW49PXRydWU/ZmFsc2U6dHJ1ZTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2lpaW5kZXgnXV0uc3ViQ2xhc3NBdHRyW2luZGV4XS5PcGVuPW9wZW49PXRydWU/ZmFsc2U6dHJ1ZTtcblx0XHRcdH0sXG5cdFx0XHRvbmRhdGVUaW1lKGUpIHtcblx0XHRcdFx0Ly9jb25zb2xlLmxvZyhlLnRhcmdldClcblx0XHRcdFx0dmFyIGRhdGFfYXR0cj10aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV0uVmFsdWU7XG5cdFx0XHRcdGlmKCFkYXRhX2F0dHIpe1xuXHRcdFx0XHRcdHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2lpaW5kZXgnXV0uc3ViQ2xhc3NBdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZS50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dLlZhbHVlPWUudGFyZ2V0LnZhbHVlO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV0uVmFsdWU9ZS50YXJnZXQudmFsdWU7XG5cdFx0XHRcdFxuXHRcdFx0fSxcblx0XHRcdG9uY2hhbmdlKGUpIHtcblx0XHRcdFx0Y29uc29sZS5sb2coZS50YXJnZXQpO1xuXHRcdFx0XHR2YXIgdmFsdWU9dGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZS50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dLmRpY3RpdGVtW2UudGFyZ2V0LnZhbHVlXTtcblx0XHRcdFx0dmFyIGRhdGFfYXR0ciA9IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtlLnRhcmdldC5kYXRhc2V0WydpbmRleCddXS5BdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2lpbmRleCddXTtcblx0XHRcdFx0Y29uc29sZS5sb2coZGF0YV9hdHRyKTtcblx0XHRcdFx0aWYgKHZhbHVlLk5hbWUgIT0gZGF0YV9hdHRyLlZhbHVlKSB7XG5cdFx0XHRcdFx0dGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZS50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dLlZhbHVlPXZhbHVlLk5hbWU7XG5cdFx0XHRcdFx0Y29uc29sZS5sb2codGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZS50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dLlZhbHVlKTtcblx0XHRcdFx0XHR2YXIgZXZlbnRpZCA9IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtlLnRhcmdldC5kYXRhc2V0WydpbmRleCddXS5BdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2lpbmRleCddXS5hY3Rpb247XG5cdFx0XHRcdFx0aWYgKGV2ZW50aWQpIHtcblx0XHRcdFx0ICAgICAgICAvLyBzZWxmLmV2ZW50X25vX3N1YiA9IDE7XG5cdFx0XHRcdCAgICAgICAgdmFyIHJlcT1bXTtcblx0XHRcdFx0ICAgICAgICB2YXIgYXR0cmxpc3QgPSB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3Q7XG5cdFx0XHRcdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRybGlzdC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHQgICAgICAgIFx0dmFyIGF0dHIgPSBhdHRybGlzdFtpXS5BdHRyO1xuXHRcdFx0XHQgICAgICAgIFx0Zm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdCAgICAgICAgXHRcdHZhciBhciA9IGF0dHJbal07XG5cdFx0XHRcdCAgICAgICAgXHRcdGlmKGFyLlR5cGU9PSflvJXnlKjlr7nosaEo5aSa5LiqKScpXG5cdFx0XHRcdCAgICAgICAgXHRcdFx0aWYoYXIuVmFsdWU9PSfor7cnKSBhci5WYWx1ZT0nJztcblx0XHRcdFx0ICAgICAgICBcdFx0aWYoYXIuVHlwZT09J+W8leeUqOS6uuWRmCcgfHwgYXIuVHlwZT09J+W8leeUqOmhueebricpXG5cdFx0XHRcdCAgICAgICAgXHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWw6IGFyLlZhbElEID9hci5WYWxJRCA6JycgfSk7XG5cdFx0XHRcdCAgICAgICAgXHRcdGVsc2UgaWYoYXIuVHlwZT09J+W4g+WwlOWAvCcpXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbDogYXIuVmFsdWU/JzEnOicwJ30pO1xuXHRcdFx0XHQgICAgICAgIFx0XHRlbHNlXG5cdFx0XHRcdCAgICAgICAgXHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWw6IGFyLlZhbHVlID9hci5WYWx1ZSA6Jyd9KTtcblx0XHRcdFx0ICAgICAgICBcdH1cblx0XHRcdFx0ICAgICAgICB9XG5cdFx0XHRcdCAgICAgICAgdmFyIGluZm8gPSB7XG5cdFx0XHRcdCAgICAgICAgICAgIGV2ZW50aWQ6IGV2ZW50aWQsXG5cdFx0XHRcdCAgICAgICAgICAgIGVkdHlwZTogXCIwXCIsXG5cdFx0XHRcdCAgICAgICAgICAgIHByb2plY3RpZDogJycsXG5cdFx0XHRcdCAgICAgICAgICAgIHJjbHNpZDogJycsXG5cdFx0XHRcdCAgICAgICAgICAgIHJvYmppZDogJycsXG5cdFx0XHRcdCAgICAgICAgICAgIHVzZXJsb2dpbjogJycsXG5cdFx0XHRcdCAgICAgICAgICAgIGNsc2lkOiB0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuSUQsXG5cdFx0XHRcdCAgICAgICAgICAgIG9iamlkOiBcIlwiLFxuXHRcdFx0XHQgICAgICAgICAgICBhdHRyOiByZXEsXG5cdFx0XHRcdCAgICAgICAgfVxuXHRcdFx0XHQgICAgICAgIHRoaXMuRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGluZm8pO1xuXHRcdFx0XHQgICAgfVxuXHRcdFx0XHR9XG5cdFx0XHRcdFxuXHRcdFx0fSxcblx0XHRcdG9uY2hhbmdlMihpdGVtLHZhbHVlLGRlbHZhbHVlKSB7XG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKGl0ZW0pO1xuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyh2YWx1ZSk7XG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKGRlbHZhbHVlKTtcblx0XHRcdFx0aWYoaXRlbS5sZW5ndGg9PTApeyAvL+S4uuepuuaXtu+8jOa4heepuuWxnuaAp3ZhbHVlXG5cdFx0XHRcdFx0dmFyIGluZGV4ICxpaW5kZXgsZGluZGV4PTA7XG5cdFx0XHRcdFx0Zm9yKHZhciBpIGluIHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdCl7XG5cdFx0XHRcdFx0XHRmb3IodmFyIGogaW4gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2ldLkF0dHIpe1xuXHRcdFx0XHRcdFx0XHRpZihkZWx2YWx1ZVswXS5hdHRyID09IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtpXS5BdHRyW2pdLk5hbWUpe1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtpXS5BdHRyW2pdLlZhbHVlPVwiXCI7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0XHRcblx0XHRcdFx0Zm9yKHZhciB2IGluIGl0ZW0pe1xuXHRcdFx0XHRcdHZhciBpbmRleCAsaWluZGV4LGRpbmRleD0wO1xuXHRcdFx0XHRcdGZvcih2YXIgaSBpbiB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3Qpe1xuXHRcdFx0XHRcdFx0Zm9yKHZhciBqIGluIHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtpXS5BdHRyKXtcblx0XHRcdFx0XHRcdFx0aWYoaXRlbVt2XS5hdHRyID09IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtpXS5BdHRyW2pdLk5hbWUpe1xuXHRcdFx0XHRcdFx0XHRcdGluZGV4PWk7aWluZGV4PWo7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0dmFyIGl0ZW12YWx1ZSA9IGl0ZW1bdl07XG5cdFx0XHRcdFx0dmFyIGRhdGFfYXR0ciA9IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtpbmRleF0uQXR0cltpaW5kZXhdO1xuXHRcdFx0XHRcdFxuXHRcdFx0XHRcdGNvbnNvbGUubG9nKGRhdGFfYXR0cik7XG5cdFx0XHRcdFx0aWYgKGl0ZW12YWx1ZS5OYW1lICE9IGRhdGFfYXR0ci5WYWx1ZSkge1xuXHRcdFx0XHRcdFx0dGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2luZGV4XS5BdHRyW2lpbmRleF0uVmFsdWU9dmFsdWU7XG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZyh0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbaW5kZXhdLkF0dHJbaWluZGV4XS5WYWx1ZSk7XG5cdFx0XHRcdFx0XHR2YXIgZXZlbnRpZCA9IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtpbmRleF0uQXR0cltpaW5kZXhdLmFjdGlvbjtcblx0XHRcdFx0XHRcdGlmIChldmVudGlkKSB7XG5cdFx0XHRcdFx0ICAgICAgICAvLyBzZWxmLmV2ZW50X25vX3N1YiA9IDE7XG5cdFx0XHRcdFx0ICAgICAgICB2YXIgcmVxPVtdO1xuXHRcdFx0XHRcdCAgICAgICAgdmFyIGF0dHJsaXN0ID0gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0O1xuXHRcdFx0XHRcdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRybGlzdC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdCAgICAgICAgXHR2YXIgYXR0ciA9IGF0dHJsaXN0W2ldLkF0dHI7XG5cdFx0XHRcdFx0ICAgICAgICBcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdCAgICAgICAgXHRcdHZhciBhciA9IGF0dHJbal07XG5cdFx0XHRcdFx0ICAgICAgICBcdFx0aWYoYXIuVHlwZT09J+W8leeUqOWvueixoSjlpJrkuKopJylcblx0XHRcdFx0XHQgICAgICAgIFx0XHRcdGlmKGFyLlZhbHVlPT0n6K+3JykgYXIuVmFsdWU9Jyc7XG5cdFx0XHRcdFx0ICAgICAgICBcdFx0aWYoYXIuVHlwZT09J+W8leeUqOS6uuWRmCcgfHwgYXIuVHlwZT09J+W8leeUqOmhueebricpXG5cdFx0XHRcdFx0ICAgICAgICBcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbDogYXIuVmFsSUQgP2FyLlZhbElEIDonJyB9KTtcblx0XHRcdFx0XHQgICAgICAgIFx0XHRlbHNlIGlmKGFyLlR5cGU9PSfluIPlsJTlgLwnKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbDogYXIuVmFsdWU/JzEnOicwJ30pO1xuXHRcdFx0XHRcdCAgICAgICAgXHRcdGVsc2UgaWYoYXIuVHlwZT09J+Wtl+WFuCcgfHwgYXIuVHlwZT09J+Wtl+WFuC3lrZfnrKbkuLInIHx8IGFyLlR5cGU9PSflrZflhbgt5pW05pWwJylcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWw6IGl0ZW12YWx1ZS5OYW1lfSk7XG5cdFx0XHRcdFx0ICAgICAgICBcdFx0ZWxzZVxuXHRcdFx0XHRcdCAgICAgICAgXHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWw6IGFyLlZhbHVlID9hci5WYWx1ZSA6Jyd9KTtcblx0XHRcdFx0XHQgICAgICAgIFx0fVxuXHRcdFx0XHRcdCAgICAgICAgfVxuXHRcdFx0XHRcdCAgICAgICAgdmFyIGluZm8gPSB7XG5cdFx0XHRcdFx0ICAgICAgICAgICAgZXZlbnRpZDogZXZlbnRpZCxcblx0XHRcdFx0XHQgICAgICAgICAgICBlZHR5cGU6IFwiMFwiLFxuXHRcdFx0XHRcdCAgICAgICAgICAgIHByb2plY3RpZDogJycsXG5cdFx0XHRcdFx0ICAgICAgICAgICAgcmNsc2lkOiAnJyxcblx0XHRcdFx0XHQgICAgICAgICAgICByb2JqaWQ6ICcnLFxuXHRcdFx0XHRcdCAgICAgICAgICAgIHVzZXJsb2dpbjogJycsXG5cdFx0XHRcdFx0ICAgICAgICAgICAgY2xzaWQ6IHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5JRCxcblx0XHRcdFx0XHQgICAgICAgICAgICBvYmppZDogXCJcIixcblx0XHRcdFx0XHQgICAgICAgICAgICBhdHRyOiByZXEsXG5cdFx0XHRcdFx0ICAgICAgICB9XG5cdFx0XHRcdFx0ICAgICAgICB0aGlzLkRhdGFPYmpSdW5DdXN0b21FdmVudChpbmZvKTtcblx0XHRcdFx0XHQgICAgfVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRcblx0XHRcdFx0XG5cdFx0XHR9LFxuXHRcdFx0c3ViX29uY2hhbmdlKGUpIHtcblx0XHRcdFx0Y29uc29sZS5sb2coZS50YXJnZXQpO1xuXHRcdFx0XHR2YXIgdmFsdWU9dGhpcy4kZGF0YS5zdWJQYW5lbExpc3RbZS50YXJnZXQuZGF0YXNldFsnaWlpbmRleCddXS5zdWJDbGFzc0F0dHJbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV0uZGljdGl0ZW1bZS50YXJnZXQudmFsdWVdO1xuXHRcdFx0XHR2YXIgZGF0YV9hdHRyID0gdGhpcy4kZGF0YS5zdWJQYW5lbExpc3RbZS50YXJnZXQuZGF0YXNldFsnaWlpbmRleCddXS5zdWJDbGFzc0F0dHJbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV07XG5cdFx0XHRcdGNvbnNvbGUubG9nKGRhdGFfYXR0cik7XG5cdFx0XHRcdGlmICh2YWx1ZS5OYW1lICE9IGRhdGFfYXR0ci5WYWx1ZSkge1xuXHRcdFx0XHRcdHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2lpaW5kZXgnXV0uc3ViQ2xhc3NBdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZS50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dLlZhbHVlPXZhbHVlLk5hbWU7XG5cdFx0XHRcdFx0Y29uc29sZS5sb2codGhpcy4kZGF0YS5zdWJQYW5lbExpc3RbZS50YXJnZXQuZGF0YXNldFsnaWlpbmRleCddXS5zdWJDbGFzc0F0dHJbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV0uVmFsdWUpO1xuXHRcdFx0XHRcdHZhciBldmVudGlkID0gdGhpcy4kZGF0YS5zdWJQYW5lbExpc3RbZS50YXJnZXQuZGF0YXNldFsnaWlpbmRleCddXS5zdWJDbGFzc0F0dHJbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV0uYWN0aW9uO1xuXHRcdFx0XHRcdGlmIChldmVudGlkKSB7XG5cdFx0XHRcdCAgICAgICAgLy8gc2VsZi5ldmVudF9ub19zdWIgPSAxO1xuXHRcdFx0XHQgICAgICAgIHZhciByZXE9W107XG5cdFx0XHRcdCAgICAgICAgdmFyIGF0dHJsaXN0ID0gdGhpcy4kZGF0YS5zdWJQYW5lbExpc3RbZS50YXJnZXQuZGF0YXNldFsnaWlpbmRleCddXS5zdWJDbGFzc0F0dHI7XG5cdFx0XHRcdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRybGlzdC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHQgICAgICAgIFx0dmFyIGF0dHIgPSBhdHRybGlzdFtpXS5BdHRyO1xuXHRcdFx0XHQgICAgICAgIFx0Zm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdCAgICAgICAgXHRcdHZhciBhciA9IGF0dHJbal07XG5cdFx0XHRcdCAgICAgICAgXHRcdGlmKGFyLlR5cGU9PSflvJXnlKjlr7nosaEo5aSa5LiqKScpXG5cdFx0XHRcdCAgICAgICAgXHRcdFx0aWYoYXIuVmFsdWU9PSfor7cnKSBhci5WYWx1ZT0nJztcblx0XHRcdFx0ICAgICAgICBcdFx0aWYoYXIuVHlwZT09J+W8leeUqOS6uuWRmCcgfHwgYXIuVHlwZT09J+W8leeUqOmhueebricpXG5cdFx0XHRcdCAgICAgICAgXHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWw6IGFyLlZhbElEID9hci5WYWxJRCA6JycgfSk7XG5cdFx0XHRcdCAgICAgICAgXHRcdGVsc2UgaWYoYXIuVHlwZT09J+W4g+WwlOWAvCcpXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbDogYXIuVmFsdWU/JzEnOicwJ30pO1xuXHRcdFx0XHQgICAgICAgIFx0XHRlbHNlXG5cdFx0XHRcdCAgICAgICAgXHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWw6IGFyLlZhbHVlID9hci5WYWx1ZSA6Jyd9KTtcblx0XHRcdFx0ICAgICAgICBcdH1cblx0XHRcdFx0ICAgICAgICB9XG5cdFx0XHRcdCAgICAgICAgdmFyIGluZm8gPSB7XG5cdFx0XHRcdCAgICAgICAgICAgIGV2ZW50aWQ6IGV2ZW50aWQsXG5cdFx0XHRcdCAgICAgICAgICAgIGVkdHlwZTogXCIwXCIsXG5cdFx0XHRcdCAgICAgICAgICAgIHByb2plY3RpZDogJycsXG5cdFx0XHRcdCAgICAgICAgICAgIHJjbHNpZDogJycsXG5cdFx0XHRcdCAgICAgICAgICAgIHJvYmppZDogJycsXG5cdFx0XHRcdCAgICAgICAgICAgIHVzZXJsb2dpbjogJycsXG5cdFx0XHRcdCAgICAgICAgICAgIGNsc2lkOiB0aGlzLiRkYXRhLnBhcmFtLlN1Yl9DbHMuSUQsXG5cdFx0XHRcdCAgICAgICAgICAgIG9iamlkOiBcIlwiLFxuXHRcdFx0XHQgICAgICAgICAgICBhdHRyOiByZXEsXG5cdFx0XHRcdCAgICAgICAgfVxuXHRcdFx0XHQgICAgICAgIHRoaXMuRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGluZm8pO1xuXHRcdFx0XHQgICAgfVxuXHRcdFx0XHR9XG5cdFx0XHRcdFxuXHRcdFx0fSxcblx0XHRcdHN1Yl9vbmNoYW5nZTIoaXRlbSx2YWx1ZSxkZWx2YWx1ZSkge1xuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhpdGVtKTtcblx0XHRcdFx0Ly8gY29uc29sZS5sb2codmFsdWUpO1xuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhkZWx2YWx1ZSk7XG5cdFx0XHRcdHZhciBzdWJDbGFzc0F0dHIgPSB0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdFtlLnRhcmdldC5kYXRhc2V0WydpaWluZGV4J11dLnN1YkNsYXNzQXR0cjtcblx0XHRcdFx0aWYoaXRlbS5sZW5ndGg9PTApeyAvL+S4uuepuuaXtu+8jOa4heepuuWxnuaAp3ZhbHVlXG5cdFx0XHRcdFx0dmFyIGluZGV4ICxpaW5kZXgsZGluZGV4PTA7XG5cdFx0XHRcdFx0Zm9yKHZhciBpIGluIHN1YkNsYXNzQXR0cil7XG5cdFx0XHRcdFx0XHRmb3IodmFyIGogaW4gc3ViQ2xhc3NBdHRyW2ldLkF0dHIpe1xuXHRcdFx0XHRcdFx0XHRmb3IodmFyIGQgaW4gc3ViQ2xhc3NBdHRyW2ldLkF0dHJbal0uZGljdGl0ZW0pe1xuXHRcdFx0XHRcdFx0XHRcdGlmKGRlbHZhbHVlWzBdLk5hbWUgPT0gc3ViQ2xhc3NBdHRyW2ldLkF0dHJbal0uZGljdGl0ZW1bZF0uTmFtZSl7XG5cdFx0XHRcdFx0XHRcdFx0XHRzdWJDbGFzc0F0dHJbaV0uQXR0cltqXS5WYWx1ZT1cIlwiO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRcdFxuXHRcdFx0XHRmb3IodmFyIHYgaW4gaXRlbSl7XG5cdFx0XHRcdFx0dmFyIGluZGV4ICxpaW5kZXgsZGluZGV4PTA7XG5cdFx0XHRcdFx0Zm9yKHZhciBpIGluIHN1YkNsYXNzQXR0cil7XG5cdFx0XHRcdFx0XHRmb3IodmFyIGogaW4gc3ViQ2xhc3NBdHRyW2ldLkF0dHIpe1xuXHRcdFx0XHRcdFx0XHRmb3IodmFyIGQgaW4gc3ViQ2xhc3NBdHRyW2ldLkF0dHJbal0uZGljdGl0ZW0pe1xuXHRcdFx0XHRcdFx0XHRcdGlmKGl0ZW1bdl0uTmFtZSA9PSBzdWJDbGFzc0F0dHJbaV0uQXR0cltqXS5kaWN0aXRlbVtkXS5OYW1lKXtcblx0XHRcdFx0XHRcdFx0XHRcdGluZGV4PWk7aWluZGV4PWo7ZGluZGV4PWQ7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHZhciBpdGVtdmFsdWUgPSBpdGVtW3ZdO1xuXHRcdFx0XHRcdHZhciBkYXRhX2F0dHIgPSBzdWJDbGFzc0F0dHJbaW5kZXhdLkF0dHJbaWluZGV4XTtcblx0XHRcdFx0XHRcblx0XHRcdFx0XHRjb25zb2xlLmxvZyhkYXRhX2F0dHIpO1xuXHRcdFx0XHRcdGlmIChpdGVtdmFsdWUuTmFtZSAhPSBkYXRhX2F0dHIuVmFsdWUpIHtcblx0XHRcdFx0XHRcdHN1YkNsYXNzQXR0cltpbmRleF0uQXR0cltpaW5kZXhdLlZhbHVlPXZhbHVlO1xuXHRcdFx0XHRcdFx0Y29uc29sZS5sb2coc3ViQ2xhc3NBdHRyW2luZGV4XS5BdHRyW2lpbmRleF0uVmFsdWUpO1xuXHRcdFx0XHRcdFx0dmFyIGV2ZW50aWQgPSBzdWJDbGFzc0F0dHJbaW5kZXhdLkF0dHJbaWluZGV4XS5hY3Rpb247XG5cdFx0XHRcdFx0XHRpZiAoZXZlbnRpZCkge1xuXHRcdFx0XHRcdCAgICAgICAgLy8gc2VsZi5ldmVudF9ub19zdWIgPSAxO1xuXHRcdFx0XHRcdCAgICAgICAgdmFyIHJlcT1bXTtcblx0XHRcdFx0XHQgICAgICAgIHZhciBhdHRybGlzdCA9IHN1YkNsYXNzQXR0cjtcblx0XHRcdFx0XHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmxpc3QubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHQgICAgICAgIFx0dmFyIGF0dHIgPSBhdHRybGlzdFtpXS5BdHRyO1xuXHRcdFx0XHRcdCAgICAgICAgXHRmb3IgKHZhciBqID0gMDsgaiA8IGF0dHIubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0XHQgICAgICAgIFx0XHR2YXIgYXIgPSBhdHRyW2pdO1xuXHRcdFx0XHRcdCAgICAgICAgXHRcdGlmKGFyLlR5cGU9PSflvJXnlKjlr7nosaEo5aSa5LiqKScpXG5cdFx0XHRcdFx0ICAgICAgICBcdFx0XHRpZihhci5WYWx1ZT09J+ivtycpIGFyLlZhbHVlPScnO1xuXHRcdFx0XHRcdCAgICAgICAgXHRcdGlmKGFyLlR5cGU9PSflvJXnlKjkurrlkZgnIHx8IGFyLlR5cGU9PSflvJXnlKjpobnnm64nKVxuXHRcdFx0XHRcdCAgICAgICAgXHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWw6IGFyLlZhbElEID9hci5WYWxJRCA6JycgfSk7XG5cdFx0XHRcdFx0ICAgICAgICBcdFx0ZWxzZSBpZihhci5UeXBlPT0n5biD5bCU5YC8Jylcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWw6IGFyLlZhbHVlPycxJzonMCd9KTtcblx0XHRcdFx0XHQgICAgICAgIFx0XHRlbHNlIGlmKGFyLlR5cGU9PSflrZflhbgnIHx8IGFyLlR5cGU9PSflrZflhbgt5a2X56ym5LiyJyB8fCBhci5UeXBlPT0n5a2X5YW4LeaVtOaVsCcpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsOiBpdGVtdmFsdWUuTmFtZX0pO1xuXHRcdFx0XHRcdCAgICAgICAgXHRcdGVsc2Vcblx0XHRcdFx0XHQgICAgICAgIFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsOiBhci5WYWx1ZSA/YXIuVmFsdWUgOicnfSk7XG5cdFx0XHRcdFx0ICAgICAgICBcdH1cblx0XHRcdFx0XHQgICAgICAgIH1cblx0XHRcdFx0XHQgICAgICAgIHZhciBpbmZvID0ge1xuXHRcdFx0XHRcdCAgICAgICAgICAgIGV2ZW50aWQ6IGV2ZW50aWQsXG5cdFx0XHRcdFx0ICAgICAgICAgICAgZWR0eXBlOiBcIjBcIixcblx0XHRcdFx0XHQgICAgICAgICAgICBwcm9qZWN0aWQ6ICcnLFxuXHRcdFx0XHRcdCAgICAgICAgICAgIHJjbHNpZDogJycsXG5cdFx0XHRcdFx0ICAgICAgICAgICAgcm9iamlkOiAnJyxcblx0XHRcdFx0XHQgICAgICAgICAgICB1c2VybG9naW46ICcnLFxuXHRcdFx0XHRcdCAgICAgICAgICAgIGNsc2lkOiB0aGlzLiRkYXRhLnBhcmFtLlN1Yl9DbHMuSUQsXG5cdFx0XHRcdFx0ICAgICAgICAgICAgb2JqaWQ6IFwiXCIsXG5cdFx0XHRcdFx0ICAgICAgICAgICAgYXR0cjogcmVxLFxuXHRcdFx0XHRcdCAgICAgICAgfVxuXHRcdFx0XHRcdCAgICAgICAgdGhpcy5EYXRhT2JqUnVuQ3VzdG9tRXZlbnQoaW5mbyk7XG5cdFx0XHRcdFx0ICAgIH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0XG5cdFx0XHRcdFxuXHRcdFx0fSxcblx0XHRcdG9uZXZlbnQoZSl7XG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKGUudGFyZ2V0KTtcblx0XHRcdFx0dmFyIGRhdGFfYXR0ciA9IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtlLnRhcmdldC5kYXRhc2V0WydpbmRleCddXS5BdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2lpbmRleCddXTtcblx0XHRcdFx0aWYoIWRhdGFfYXR0cil7XG5cdFx0XHRcdFx0dGhpcy4kZGF0YS5zdWJQYW5lbExpc3RbZS50YXJnZXQuZGF0YXNldFsnaWlpbmRleCddXS5zdWJDbGFzc0F0dHJbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV0uVmFsdWU9ZS50YXJnZXQudmFsdWU7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKGRhdGFfYXR0cik7XG5cdFx0XHRcdGlmIChlLnRhcmdldC52YWx1ZSAhPSBkYXRhX2F0dHIuVmFsdWUpIHtcblx0XHRcdFx0XHR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV0uVmFsdWU9ZS50YXJnZXQudmFsdWU7XG5cdFx0XHRcdFx0Ly8gdmFyIGV2ZW50aWQgPSB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV0uYWN0aW9uO1xuXHRcdFx0XHRcdC8v5a2Q5pWw5o2u57G75omr56CB5Yy65LqL5Lu26ISa5pysXG5cdFx0XHRcdFx0dmFyIGV2ZW50aWQgPSB0aGlzLiRkYXRhLnBhcmFtLlNjYW5fQ29kZS5JbnB1dF9DaGFuZ2VfRXZlbnQuSUQ7XG5cdFx0XHRcdFx0aWYgKGV2ZW50aWQpIHtcblx0XHRcdFx0ICAgICAgICAvLyBzZWxmLmV2ZW50X25vX3N1YiA9IDE7XG5cdFx0XHRcdCAgICAgICAgdmFyIHJlcT1bXTtcblx0XHRcdFx0ICAgICAgICB2YXIgYXR0cmxpc3QgPSB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3Q7ICAvL+S4u+aVsOaNruexu+WxnuaAp1xuXHRcdFx0XHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmxpc3QubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0ICAgICAgICBcdHZhciBhdHRyID0gYXR0cmxpc3RbaV0uQXR0cjtcblx0XHRcdFx0ICAgICAgICBcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xuXHRcdFx0XHQgICAgICAgIFx0XHR2YXIgYXIgPSBhdHRyW2pdO1xuXHRcdFx0XHQgICAgICAgIFx0XHRpZihhci5UeXBlPT0n5byV55So5a+56LGhKOWkmuS4qiknKVxuXHRcdFx0XHQgICAgICAgIFx0XHRcdGlmKGFyLlZhbHVlPT0n6K+3JykgYXIuVmFsdWU9Jyc7XG5cdFx0XHRcdCAgICAgICAgXHRcdGlmKGFyLlR5cGU9PSflvJXnlKjkurrlkZgnIHx8IGFyLlR5cGU9PSflvJXnlKjpobnnm64nKVxuXHRcdFx0XHQgICAgICAgIFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsdWU6IGFyLlZhbElEID9hci5WYWxJRCA6JycgfSk7XG5cdFx0XHRcdCAgICAgICAgXHRcdGVsc2UgaWYoYXIuVHlwZT09J+W4g+WwlOWAvCcpXG5cdFx0XHRcdCAgICAgICAgXHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsdWU/JzEnOicwJ30pO1xuXHRcdFx0XHQgICAgICAgIFx0XHRlbHNlXG5cdFx0XHRcdCAgICAgICAgXHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsdWUgP2FyLlZhbHVlIDonJ30pO1xuXHRcdFx0XHQgICAgICAgIFx0fVxuXHRcdFx0XHQgICAgICAgIH1cblx0XHRcdFx0ICAgICAgICB2YXIgaW5mbyA9IHtcblx0XHRcdFx0ICAgICAgICAgICAgZXZlbnRpZDogZXZlbnRpZCxcblx0XHRcdFx0ICAgICAgICAgICAgZWR0eXBlOiBcIjdcIiwvL1wiMFwiLFxuXHRcdFx0XHQgICAgICAgICAgICBwcm9qZWN0aWQ6ICcnLFxuXHRcdFx0XHQgICAgICAgICAgICByY2xzaWQ6ICcnLFxuXHRcdFx0XHQgICAgICAgICAgICByb2JqaWQ6ICcnLFxuXHRcdFx0XHQgICAgICAgICAgICB1c2VybG9naW46ICcnLFxuXHRcdFx0XHQgICAgICAgICAgICBjbHNpZDogJ01CT1gnLC8vdGhpcy4kZGF0YS5wYXJhbS5TdWJfQ2xzLklELFxuXHRcdFx0XHQgICAgICAgICAgICBvYmppZDogXCJcIixcblx0XHRcdFx0ICAgICAgICAgICAgYXR0cjogcmVxLFxuXHRcdFx0XHQgICAgICAgIFx0bWFzdF9hdHRyOiBbXSxcblx0XHRcdFx0ICAgICAgICBcdGlucHV0UGFyYW10ZXI6W3sgYXR0cjogJ21hc3RfaW5wdXRfMzAzNycsIHZhbHVlOiBlLnRhcmdldC52YWx1ZSB9XVxuXHRcdFx0XHQgICAgICAgIH1cblx0XHRcdFx0ICAgICAgICBcblx0XHRcdFx0ICAgICAgICB0aGlzLnNjYW5fRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGluZm8sIFwiXCIpO1xuXHRcdFx0XHQgICAgfVxuXHRcdFx0XHR9XG5cdFx0XHRcdFxuXHRcdFx0fSxcblx0XHRcdG9uY2hlY2soZSkge1xuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhlLnRhcmdldCk7XG5cdFx0XHRcdHZhciBpc2NoZWNrZWQgPSBlLnRhcmdldC5kYXRhc2V0LmlzY2hlY2s/ZmFsc2U6dHJ1ZTtcblx0XHRcdFx0dmFyIGRhdGFfYXR0ciA9IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtlLnRhcmdldC5kYXRhc2V0WydpbmRleCddXS5BdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2lpbmRleCddXTtcblx0XHRcdFx0aWYoIWRhdGFfYXR0cil7XG5cdFx0XHRcdFx0dGhpcy4kZGF0YS5zdWJQYW5lbExpc3RbZS50YXJnZXQuZGF0YXNldFsnaWlpbmRleCddXS5zdWJDbGFzc0F0dHJbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV0uVmFsdWU9aXNjaGVja2VkO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhkYXRhX2F0dHIpO1xuXHRcdFx0XHRpZiAoaXNjaGVja2VkICE9IGRhdGFfYXR0ci5WYWx1ZSkge1xuXHRcdFx0XHRcdHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtlLnRhcmdldC5kYXRhc2V0WydpbmRleCddXS5BdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2lpbmRleCddXS5WYWx1ZT1pc2NoZWNrZWQ7XG5cdFx0XHRcdFx0dmFyIGV2ZW50aWQgPSB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV0uYWN0aW9uO1xuXHRcdFx0XHRcdGlmIChldmVudGlkKSB7XG5cdFx0XHRcdCAgICAgICAgLy8gc2VsZi5ldmVudF9ub19zdWIgPSAxO1xuXHRcdFx0XHQgICAgICAgIHZhciByZXE9W107XG5cdFx0XHRcdCAgICAgICAgdmFyIGF0dHJsaXN0ID0gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0O1xuXHRcdFx0XHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmxpc3QubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0ICAgICAgICBcdHZhciBhdHRyID0gYXR0cmxpc3RbaV0uQXR0cjtcblx0XHRcdFx0ICAgICAgICBcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xuXHRcdFx0XHQgICAgICAgIFx0XHR2YXIgYXIgPSBhdHRyW2pdO1xuXHRcdFx0XHQgICAgICAgIFx0XHRpZihhci5UeXBlPT0n5byV55So5a+56LGhKOWkmuS4qiknKVxuXHRcdFx0XHQgICAgICAgIFx0XHRcdGlmKGFyLlZhbHVlPT0n6K+3JykgYXIuVmFsdWU9Jyc7XG5cdFx0XHRcdCAgICAgICAgXHRcdGlmKGFyLlR5cGU9PSflvJXnlKjkurrlkZgnIHx8IGFyLlR5cGU9PSflvJXnlKjpobnnm64nKVxuXHRcdFx0XHQgICAgICAgIFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsOiBhci5WYWxJRCA/YXIuVmFsSUQgOicnIH0pO1xuXHRcdFx0XHQgICAgICAgIFx0XHRlbHNlIGlmKGFyLlR5cGU9PSfluIPlsJTlgLwnKVxuXHRcdFx0XHRcdFx0XHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWw6IGFyLlZhbHVlPycxJzonMCd9KTtcblx0XHRcdFx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbDogYXIuVmFsdWUgP2FyLlZhbHVlIDonJ30pO1xuXHRcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHQgICAgICAgIFx0fVxuXHRcdFx0XHQgICAgICAgIH1cblx0XHRcdFx0ICAgICAgICB2YXIgaW5mbyA9IHtcblx0XHRcdFx0ICAgICAgICAgICAgZXZlbnRpZDogZXZlbnRpZCxcblx0XHRcdFx0ICAgICAgICAgICAgZWR0eXBlOiBcIjBcIixcblx0XHRcdFx0ICAgICAgICAgICAgcHJvamVjdGlkOiAnJyxcblx0XHRcdFx0ICAgICAgICAgICAgcmNsc2lkOiAnJyxcblx0XHRcdFx0ICAgICAgICAgICAgcm9iamlkOiAnJyxcblx0XHRcdFx0ICAgICAgICAgICAgdXNlcmxvZ2luOiAnJyxcblx0XHRcdFx0ICAgICAgICAgICAgY2xzaWQ6IHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5JRCxcblx0XHRcdFx0ICAgICAgICAgICAgb2JqaWQ6IFwiXCIsXG5cdFx0XHRcdCAgICAgICAgICAgIGF0dHI6IHJlcSxcblx0XHRcdFx0ICAgICAgICB9XG5cdFx0XHRcdCAgICAgICAgdGhpcy5EYXRhT2JqUnVuQ3VzdG9tRXZlbnQoaW5mbyk7XG5cdFx0XHRcdCAgICB9XG5cdFx0XHRcdH1cblx0XHRcdFx0XG5cdFx0XHR9LFxuXHRcdFx0aW5wdXRWYWxMaXN0SXNEZWwoaW5kZXgpe1xuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhpbmRleCk7XG4gICAgICAgICAgICAgICAgdGhpcy4kZGF0YS5pbnB1dFZhbExpc3Quc3BsaWNlKGluZGV4LCAxKTsgLy/liKDpmaR0YWJQYWdlanNvbueahOWGheWuuVxuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyh0aGlzLiRkYXRhLmlucHV0VmFsTGlzdCk7XG5cdFx0XHR9LFxuXHRcdFx0YWRkcmVzc2NoYW5nZShlKSB7XG5cdFx0XHQgICAgLy8gY29uc29sZS5sb2coZS50YXJnZXQpO1xuXHRcdFx0ICAgIGNvbnNvbGUubG9nKGUuZGF0YS5qb2luKCc7JykpXG5cdFx0XHRcdHRoaXMuJGRhdGEuc3ViQ2xhc3NBdHRyTGlzdFtlLnRhcmdldC5kYXRhc2V0WydpbmRleCddXS5BdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2lpbmRleCddXS5WYWx1ZT1lLmRhdGEuam9pbignOycpO1xuXHRcdFx0fSxcblx0XHRcdGNsYXNzQXR0cl9leHRCdXR0b24oaW5kZXgsaWluZGV4KXtcblx0XHRcdFx0dmFyICR0aGlzID0gdGhpcztcblx0XHRcdFx0dmFyIGJlZm9yZV9jbGlja19idXR0b24gPSAkdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2luZGV4XS5BdHRyW2lpbmRleF0uYmVmb3JlX2NsaWNrX2J1dHRvbjtcblx0XHRcdFx0dmFyIGJ1dHRvbl9jYWxsYmFjayA9ICR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbaW5kZXhdLkF0dHJbaWluZGV4XS5idXR0b25fY2FsbGJhY2s7XG5cdFx0XHRcdGlmKCFiZWZvcmVfY2xpY2tfYnV0dG9uKXtcblx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIuaPkOekulwiLGNvbnRlbnQ6XCJiZWZvcmVfY2xpY2tfYnV0dG9uLWV2ZW50X2lk5Li656m677yBXCIsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmKCFidXR0b25fY2FsbGJhY2spe1xuXHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi5o+Q56S6XCIsY29udGVudDpcImJ1dHRvbl9jYWxsYmFjay1ldmVudF9pZOS4uuepuu+8gVwiLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHR2YXIgZGF0YV9hdHRyID0gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2luZGV4XS5BdHRyW2lpbmRleF07XG5cdFx0XHRcdHRoaXMuRGF0YU9ialJ1bkN1c3RvbUV2ZW50X1JldHVybihiZWZvcmVfY2xpY2tfYnV0dG9uLCBkYXRhX2F0dHIsIGJ1dHRvbl9jYWxsYmFjaywgaW5kZXgsaWluZGV4KTtcblx0XHRcdH0sXG5cdFx0XHRjbGFzc0F0dHJfQWRkUGVyKGluZGV4LGlpbmRleCl7XG5cdFx0XHRcdHZhciBwYXJhbT17aW5kZXg6aW5kZXgsaWluZGV4OmlpbmRleH07XG5cdFx0XHRcdHZhciAkdGhpcyA9IHRoaXM7XG5cdFx0XHRcdHVuaS5uYXZpZ2F0ZVRvKHtcblx0XHRcdFx0XHR1cmw6Jy4uL3NlbHBzbi9pbmRleD9tdWxpdD1mYWxzZSZwYXJhbT0nK0pTT04uc3RyaW5naWZ5KHBhcmFtKSxcblx0XHRcdFx0XHRldmVudHM6e1xuXHRcdFx0XHRcdFx0QWRkUGVyKGRhdGEscGFyYW0peyBcblx0XHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2cocGFyYW0pO1xuXHRcdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhkYXRhKTtcblx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtwYXJhbS5pbmRleF0uQXR0cltwYXJhbS5paW5kZXhdLlZhbHVlPWRhdGFbMF0uTmFtZTtcblx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtwYXJhbS5pbmRleF0uQXR0cltwYXJhbS5paW5kZXhdLlZhbElEPWRhdGFbMF0uTG9naW4rJzsnK2RhdGFbMF0uTmFtZTtcblx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdHZhciBldmVudGlkID0gJHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtwYXJhbS5pbmRleF0uQXR0cltwYXJhbS5paW5kZXhdLmFjdGlvbjtcblx0XHRcdFx0XHRcdFx0aWYgKGV2ZW50aWQpIHtcblx0XHRcdFx0XHRcdFx0ICAgIGV2ZW50aWQgPSBldmVudGlkLnRyaW0oKTtcblx0XHRcdFx0XHRcdFx0ICAgIGlmIChldmVudGlkKSB7XG5cdFx0XHRcdFx0XHRcdCAgICAgICAgdmFyIGluZm8gPSB7XG5cdFx0XHRcdFx0XHRcdCAgICAgICAgICAgIGV2ZW50aWQ6IGV2ZW50aWQsXG5cdFx0XHRcdFx0XHRcdCAgICAgICAgICAgIGVkdHlwZTogXCI0XCIsXG5cdFx0XHRcdFx0XHRcdCAgICAgICAgICAgIHByb2plY3RpZDogXCJcIixcblx0XHRcdFx0XHRcdFx0ICAgICAgICAgICAgcmNsc2lkOiBcIlwiLFxuXHRcdFx0XHRcdFx0XHQgICAgICAgICAgICByb2JqaWQ6IFwiXCIsXG5cdFx0XHRcdFx0XHRcdCAgICAgICAgICAgIHVzZXJsb2dpbjogZGF0YVswXS5Mb2dpbixcblx0XHRcdFx0XHRcdFx0ICAgICAgICAgICAgY2xzaWQ6ICR0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuSUQsXG5cdFx0XHRcdFx0XHRcdCAgICAgICAgICAgIG9iamlkOiBcIlwiLFxuXHRcdFx0XHRcdFx0XHQgICAgICAgICAgICBhdHRyOiBbXSxcblx0XHRcdFx0XHRcdFx0ICAgICAgICB9XG5cdFx0XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0XHRcdC8vIHZhciBkYXRhX2F0dHIgPSAkdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W3BhcmFtLmluZGV4XS5BdHRyW3BhcmFtLmlpbmRleF07XG5cdFx0XHRcdFx0XHRcdCAgICAgICAgJHRoaXMuRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGluZm8pO1xuXHRcdFx0XHRcdFx0XHQgICAgfVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH0sXG5cdFx0XHRjbGFzc0F0dHJfQWRkUmVmKGUpe1xuXHRcdFx0XHRjb25zb2xlLmxvZyhlLnRhcmdldCk7XG5cdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi5o+Q56S6XCIsY29udGVudDpcIuatpOWKn+iDvei/mOacquWunueOsO+8gVwiLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHQvLyB2YXIgdmFsdWU9dGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZS50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dLlJlbENsc1tlLnRhcmdldC52YWx1ZV07XG5cdFx0XHRcdC8vIHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtlLnRhcmdldC5kYXRhc2V0WydpbmRleCddXS5BdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2lpbmRleCddXS5WYWx1ZT12YWx1ZTtcblx0XHRcdH0sXG5cdFx0XHRjbGFzc0F0dHJfQWRkUHJqKGluZGV4LGlpbmRleCl7XG5cdFx0XHRcdHZhciBwYXJhbT17aW5kZXg6aW5kZXgsaWluZGV4OmlpbmRleH07XG5cdFx0XHRcdHZhciAkdGhpcyA9IHRoaXM7XG5cdFx0XHRcdHVuaS5uYXZpZ2F0ZVRvKHtcblx0XHRcdFx0XHR1cmw6Jy4uL3NlbFByai9pbmRleD9yZWxhdGlvbj0tMSZwYXJhbT0nK0pTT04uc3RyaW5naWZ5KHBhcmFtKSxcblx0XHRcdFx0XHRldmVudHM6e1xuXHRcdFx0XHRcdFx0QWRkUGVyKGRhdGEscGFyYW0peyBcblx0XHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2cocGFyYW0pO1xuXHRcdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhkYXRhKTtcblx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtwYXJhbS5pbmRleF0uQXR0cltwYXJhbS5paW5kZXhdLlZhbHVlPWRhdGFbMF0uTmFtZTtcblx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtwYXJhbS5pbmRleF0uQXR0cltwYXJhbS5paW5kZXhdLlZhbElEPWRhdGFbMF0uSUQrJzsnK2RhdGFbMF0uTmFtZTtcblx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdHZhciBldmVudGlkID0gJHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtwYXJhbS5pbmRleF0uQXR0cltwYXJhbS5paW5kZXhdLmFjdGlvbjtcblx0XHRcdFx0XHRcdFx0aWYgKGV2ZW50aWQpIHtcblx0XHRcdFx0XHRcdFx0ICAgIGV2ZW50aWQgPSBldmVudGlkLnRyaW0oKTtcblx0XHRcdFx0XHRcdFx0ICAgIGlmIChldmVudGlkKSB7XG5cdFx0XHRcdFx0XHRcdCAgICAgICAgdmFyIGluZm8gPSB7XG5cdFx0XHRcdFx0XHRcdCAgICAgICAgICAgIGV2ZW50aWQ6IGV2ZW50aWQsXG5cdFx0XHRcdFx0XHRcdCAgICAgICAgICAgIGVkdHlwZTogXCIyXCIsXG5cdFx0XHRcdFx0XHRcdCAgICAgICAgICAgIHByb2plY3RpZDogZGF0YVswXS5JRCxcblx0XHRcdFx0XHRcdFx0ICAgICAgICAgICAgcmNsc2lkOiBcIlwiLFxuXHRcdFx0XHRcdFx0XHQgICAgICAgICAgICByb2JqaWQ6IFwiXCIsXG5cdFx0XHRcdFx0XHRcdCAgICAgICAgICAgIHVzZXJsb2dpbjogXCJcIixcblx0XHRcdFx0XHRcdFx0ICAgICAgICAgICAgY2xzaWQ6ICR0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuSUQsXG5cdFx0XHRcdFx0XHRcdCAgICAgICAgICAgIG9iamlkOiBcIlwiLFxuXHRcdFx0XHRcdFx0XHQgICAgICAgICAgICBhdHRyOiBbXSxcblx0XHRcdFx0XHRcdFx0ICAgICAgICB9XG5cdFx0XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0ICAgICAgICAvLyB2YXIgZGF0YV9hdHRyID0gJHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtwYXJhbS5pbmRleF0uQXR0cltwYXJhbS5paW5kZXhdO1xuXHRcdFx0XHRcdFx0XHQgICAgICAgICR0aGlzLkRhdGFPYmpSdW5DdXN0b21FdmVudChpbmZvKTtcblx0XHRcdFx0XHRcdFx0ICAgIH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9LFxuXHRcdFx0c2F2YSgpe1xuXHRcdFx0XHRpZiAodGhpcy4kZGF0YS5wYXJhbS5CZWZvcmVfT0tfRXZlbnQpIC8v5Yik5pat5Yqf6IO954K55Y+C5pWw5piv5ZCm5pyJ56Gu5a6a5YmN6ISa5pysXG5cdFx0XHRcdFx0dGhpcy5zY2FuX09LRGF0YU9ialJ1bkN1c3RvbUV2ZW50KHRoaXMuJGRhdGEucGFyYW0uQmVmb3JlX09LX0V2ZW50LklEKTtcblx0XHRcdFx0ZWxzZSBpZiAodGhpcy4kZGF0YS5wYXJhbS5BZnRlcl9PS19FdmVudCkgLy/liKTmlq3lip/og73ngrnlj4LmlbDmmK/lkKbmnInnoa7lrprlkI7ohJrmnKxcblx0XHRcdFx0XHR0aGlzLnNjYW5fT0tEYXRhT2JqUnVuQ3VzdG9tRXZlbnQodGhpcy4kZGF0YS5wYXJhbS5BZnRlcl9PS19FdmVudC5JRCk7XG5cdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHR1bmkubmF2aWdhdGVCYWNrKHtkZWx0YToxIH0pOy8v6L+U5Zue5bGC5pWw77yMMuWImeS4iuS4iumhtVxuXHRcdFx0fSxcblx0XHRcdGFkZCgpe1xuXHRcdFx0XHR1bmkuc2hvd0xvYWRpbmcoe1xuXHRcdFx0XHRcdHRpdGxlOlwi5Yqg6L295LitLi4uXCIsXG5cdFx0XHRcdFx0bWFzazp0cnVlXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHR2YXIgcmVxPVtdO1xuXHRcdFx0XHR2YXIgYXR0cmxpc3QgPSB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3Q7XG5cdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmxpc3QubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHR2YXIgYXR0ciA9IGF0dHJsaXN0W2ldLkF0dHI7XG5cdFx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0XHR2YXIgYXIgPSBhdHRyW2pdO1xuXHRcdFx0XHRcdFx0aWYoYXIuVmFsdWU9PSfor7fpgInmi6knIHx8IGFyLlZhbHVlPT0n4oCU4oCU6K+36YCJ5oup4oCU4oCUJykgYXIuVmFsdWU9Jyc7XG5cdFx0XHRcdFx0XHRpZihhci5UeXBlPT0n5byV55So5a+56LGhKOWkmuS4qiknKVxuXHRcdFx0XHRcdFx0XHRpZihhci5WYWx1ZT09J+ivtycpIGFyLlZhbHVlPScnO1xuXHRcdFx0XHQgICAgICAgIGlmKGFyLlR5cGU9PSflvJXnlKjkurrlkZgnIHx8IGFyLlR5cGU9PSflvJXnlKjpobnnm64nKVxuXHRcdFx0XHQgICAgICAgIFx0cmVxLnB1c2goeyBuYW1lOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsSUQgP2FyLlZhbElEIDonJyB9KTtcblx0XHRcdFx0ICAgICAgICBlbHNlIGlmKGFyLlR5cGU9PSfluIPlsJTlgLwnKVxuXHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7IG5hbWU6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWx1ZT8nMSc6JzAnfSk7XG5cdFx0XHRcdCAgICAgICAgZWxzZSBpZihhci5UeXBlPT0n5a2X5YW4JyB8fCBhci5UeXBlPT0n5a2X5YW4LeWtl+espuS4sicgfHwgYXIuVHlwZT09J+Wtl+WFuC3mlbTmlbAnKXtcblx0XHRcdFx0XHRcdFx0aWYoYXIuc2VsZWN0PT10cnVlKXsgLy/liKTmlq3kuIvmi4nmmK/lkKblpJrpgIlcblx0XHRcdFx0XHRcdFx0XHR2YXIgdmFsU3RyID1cIlwiO1xuXHRcdFx0XHRcdFx0XHRcdGZvcih2YXIgdiBpbiBhci5WYWx1ZSl7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZih2YWxTdHIpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhbFN0cis9XCI7XCI7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YWxTdHIrPWFyLlZhbHVlW3ZdO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7IG5hbWU6IGFyLk5hbWUsIHZhbHVlOiB2YWxTdHJ9KTtcblx0XHRcdFx0XHRcdFx0fWVsc2Vcblx0XHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7IG5hbWU6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWx1ZX0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7IG5hbWU6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWx1ZSA/YXIuVmFsdWUgOicnfSk7XG5cdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0aWYgKGFyLm5vdGVtcHR5ID09IHRydWUgJiYgIWFyLlZhbHVlKSB7XG5cdFx0XHRcdFx0XHQvLyBpZihhci5Ob3RFbXB0eT09JzEnKXtcblx0XHRcdFx0XHRcdFx0dW5pLmhpZGVMb2FkaW5nKCk7XG5cdFx0XHRcdFx0XHRcdC8vIHVuaS5zaG93VG9hc3Qoe3RpdGxlOmFyLkRpc3BOYW1lKyfkuI3og73kuLrnqbrvvIEnLGljb246XCJzdWNjZXNzXCIsZHVyYXRpb246MzAwMH0pO1xuXHRcdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIuaPkOekulwiLGNvbnRlbnQ6YXIuRGlzcE5hbWUrJ+S4jeiDveS4uuepuu+8gScsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0dmFyIGVudmlyb21lbnQgPSB7XG5cdFx0XHRcdCAgICAgJ2Z1bmN0aW9uJzogJzMwMDAnLCAvLyDlip/og73ngrnnvJblj7dcblx0XHRcdFx0ICAgICBjbHNfaWQ6IHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5JRCwgICAgIC8vIOWKn+iDveeCueS4u+aVsOaNruexu+agh+ivhlxuXHRcdFx0XHQgICAgICdidXR0b24nOiAndG9wJywgICAvLyB0b3AvYm90dG9tXG5cdFx0XHRcdCAgICAgYnV0dG9uX25hbWU6ICfmlrDlop4nLFxuXHRcdFx0XHQgICAgIG1hc3Rlcjoge1xuXHRcdFx0XHQgICAgICAgICBjbHNfaWQ6IHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5JRCwgXG5cdFx0XHRcdCAgICAgfVxuXHRcdFx0XHR9O1xuXHRcdFx0XHQgXG5cdFx0XHRcdHZhciBkYXRhSW5mbz17XG5cdFx0XHRcdCAgICBjbGFzc19pZDogdGhpcy4kZGF0YS5wYXJhbS5NYXN0ZXJfQ2xzLklELCBkYXRhX29ial9pZDogJycsIG1hc3RlcmNsc2lkOiAnJyxcblx0XHRcdFx0ICAgIHJlcTogSlNPTi5zdHJpbmdpZnkocmVxKSwgdXBmaWxlOiBKU09OLnN0cmluZ2lmeShbXSksIHBvc3RfZGF0YTogSlNPTi5zdHJpbmdpZnkoe30pLFxuXHRcdFx0XHQgICAgY29tcG9zZTogSlNPTi5zdHJpbmdpZnkoW10pLCByZWZkYXRhc3RvcmU6IEpTT04uc3RyaW5naWZ5KFtdKSwgZXh0aW5mbzogSlNPTi5zdHJpbmdpZnkoZW52aXJvbWVudCksIFxuXHRcdFx0XHRcdG5vdF90cmlnZ2VyX3N5c19ldmVudDogJydcblx0XHRcdFx0fTtcblx0XHRcdFx0XG5cdFx0XHRcdC8vIHJldHVyblxuXHRcdFx0XHRjb25zb2xlLmxvZyhkYXRhSW5mbyk7XG5cdFx0XHRcdHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdhZGRjbGFzc2F0dHInLGRhdGFJbmZvKS50aGVuKHN1Y2Nlc3M9Pntcblx0XHRcdFx0XHRjb25zb2xlLmxvZyhzdWNjZXNzKTtcblx0XHRcdFx0XHR1bmkuaGlkZUxvYWRpbmcoKTtcblx0XHRcdFx0XHRpZiAoc3VjY2Vzcy5jb2RlPT0nMDAwMDAnKSB7XG5cdFx0XHRcdFx0XHR2YXIgYWN0aW9uID0gSlNPTi5wYXJzZShzdWNjZXNzLmRhdGEuQWN0aW9uKTtcblx0XHRcdFx0XHRcdGlmKGFjdGlvbi5yZXQ9PScwJyl7XG5cdFx0XHRcdFx0XHRcdGlmKGFjdGlvbi5yZXN1bHRfdHlwZT09JzAnKXtcblx0XHRcdFx0XHRcdFx0XHR1bmkuc2hvd1RvYXN0KHt0aXRsZTphY3Rpb24ucmVzdWx0LGljb246XCJzdWNjZXNzXCIsZHVyYXRpb246MzAwMH0pO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdC8vIFwie1wicmV0XCI6MCwgXCJyZXN1bHRfdHlwZVwiOjAsIFwicmVzdWx0XCI6XCLliJvlu7rmiJDlip8xMjMxMjMxMjNcIixcImluZm9cIjpcIlwifVwiXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHQvL+WIt+aWsFxuXHRcdFx0XHRcdFx0dW5pLnJlZGlyZWN0VG8oe1xuXHRcdFx0XHRcdFx0XHR1cmw6Jy4uL21vZGFsL21zX2NsYXNzQXR0cj9wYXJhbT0nK0pTT04uc3RyaW5naWZ5KHRoaXMuJGRhdGEucGFyYW0pK1wiJnRpdGxlbmFtZT1cIit0aGlzLiRkYXRhLnRpdGxlXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdC8vIHRoaXMuY2xhc3NfYXR0cl9pbml0KCk7XG5cdFx0XHRcdFx0fWVsc2V7XG5cdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivr1wiLGNvbnRlbnQ6c3VjY2Vzcy5tc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KS5jYXRjaChleD0+e1xuXHRcdFx0XHRcdGNvbnNvbGUubG9nKGV4KTtcblx0XHRcdFx0XHR1bmkuaGlkZUxvYWRpbmcoKTtcblx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIuaPkOekulwiLGNvbnRlbnQ6ZXguZXJyTXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0sXG5cdFx0XHRjbGFzc19hdHRyX2luaXQoKXtcblx0XHRcdFx0dmFyIGF0dHJsaXN0ID0gdGhpcy4kZGF0YS5jbGFzc0dyaWRTdHlsZS5TdHlsZURlZi5zaG93X3N0eWxlXG5cdFx0XHRcdHZhciBuZXdhdHRybGlzdCA9IFtdO1xuXHRcdFx0XHRpZiAodGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0Lmxlbmd0aCA+IDApIHtcblx0XHRcdFx0ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmxpc3QubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0ICAgICAgICB2YXIgb3BlbiA9IGF0dHJsaXN0W2ldLm9wZW47XG5cdFx0XHRcdCAgICAgICAgdmFyIG5hbWUgPSBhdHRybGlzdFtpXS5hdHRyZ3JvdXBfbmFtZTtcblx0XHRcdFx0ICAgICAgICB2YXIgYXR0cnMgPSBhdHRybGlzdFtpXS5hdHRycztcblx0XHRcdFx0ICAgICAgICBmb3IgKHZhciBzID0gMDsgcyA8IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdC5sZW5ndGg7IHMrKykge1xuXHRcdFx0XHQgICAgICAgICAgICB2YXIgY2xzYXR0ciA9IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtzXTtcblx0XHRcdFx0ICAgICAgICAgICAgaWYgKG5hbWUgPT0gY2xzYXR0ci5OYW1lKSB7XG5cdFx0XHRcdCAgICAgICAgICAgICAgICB2YXIgYXR0ciA9IFtdO1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBhdHRycy5sZW5ndGg7IGorKykge1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGwgPSAwOyBsIDwgY2xzYXR0ci5BdHRyLmxlbmd0aDsgbCsrKSB7XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYSA9IGNsc2F0dHIuQXR0cltsXTtcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGF0dHJzW2pdLmF0dHIgPT0gY2EuTmFtZSkge1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2EuYWN0aW9uID0gYXR0cnNbal0uYWN0aW9uO1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2EuZWRpdCA9IGF0dHJzW2pdLmVkaXQ7XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYS5ub3RlbXB0eSA9IGF0dHJzW2pdLm5vdGVtcHR5O1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2EuZXh0X2J1dHRvbiA9IGF0dHJzW2pdLmV4dF9idXR0b247XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYS5idXR0b25faW1nID0gYXR0cnNbal0uYnV0dG9uX2ltZztcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhLmJ1dHRvbl90b29sdGlwID0gYXR0cnNbal0uYnV0dG9uX3Rvb2x0aXA7XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYS5iZWZvcmVfY2xpY2tfYnV0dG9uID0gYXR0cnNbal0uYmVmb3JlX2NsaWNrX2J1dHRvbjtcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhLmJ1dHRvbl9jYWxsYmFjayA9IGF0dHJzW2pdLmJ1dHRvbl9jYWxsYmFjaztcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhLmhpZGRlbiA9IGF0dHJzW2pdLmhpZGRlbjtcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhLnNlbGVjdCA9IGF0dHJzW2pdLnNlbGVjdD09dW5kZWZpbmVkP2ZhbHNlOmF0dHJzW2pdLnNlbGVjdDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5WYWx1ZSA9XCJcIjtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihjYS5kaWN0aXRlbSl7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihjYS5zZWxlY3QgPT0gdHJ1ZSlcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2EuVmFsdWUgPSBbXTsvL2NhLmRpY3RpdGVtWzBdLkNOX1NfTkFNRTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGVsc2UgXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhLlZhbHVlID0gJ+ivt+mAieaLqSc7Ly9jYS5kaWN0aXRlbVswXS5DTl9TX05BTUU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgZGljdGl0ZW1saXN0PVtdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgZCA9IDA7IGQgPCBjYS5kaWN0aXRlbS5sZW5ndGg7IGQrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5kaWN0aXRlbVtkXS5sYWJlbD1jYS5kaWN0aXRlbVtkXS5DTl9TX05BTUU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhLmRpY3RpdGVtW2RdLnZhbHVlPWNhLmRpY3RpdGVtW2RdLkNOX1NfTkFNRTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2EuZGljdGl0ZW1bZF0uYXR0cj1jYS5OYW1lO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihjYS5kaWN0aXRlbVtkXS5DTl9DX0lTX0RFRkFVTFQ9PScxJylcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5WYWx1ZT1jYS5kaWN0aXRlbVtkXS5DTl9TX05BTUU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGNhLlR5cGU9PSfml6XmnJ8nIHx8IGNhLlR5cGU9PSfml7bpl7QnKXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBub3dEYXRlID0gbmV3IERhdGUoKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBkYXRlID0ge3llYXI6IG5vd0RhdGUuZ2V0RnVsbFllYXIoKSxtb250aDogbm93RGF0ZS5nZXRNb250aCgpICsgMSxkYXk6IG5vd0RhdGUuZ2V0RGF0ZSgpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2EuVmFsdWUgPSBkYXRlLnllYXIgKyAnLScgKyAoZGF0ZS5tb250aCA+PSAxMCA/IGRhdGUubW9udGggOiAnMCcgKyBkYXRlLm1vbnRoKSArICctJyArIChkYXRlLmRheSA+PSAxMCA/IGRhdGUuZGF5IDogJzAnICsgZGF0ZS5kYXkpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihjYS5UeXBlPT0n5byV55So5a+56LGhKOWkmuS4qiknKXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciByZWxDbHNMaXN0PVtdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGF0dHJfcmVzY2xzID0gY2EuUmVsQ2xzLnNwbGl0KCcsJyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IodmFyIGlpIGluIGF0dHJfcmVzY2xzKXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIHJlc2NscyA9IGF0dHJfcmVzY2xzW2lpXS5zcGxpdCgnfCcpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZWxDbHNMaXN0LnB1c2goe2lkOnJlc2Nsc1swXSxuYW1lOnJlc2Nsc1sxXX0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2EuUmVsQ2xzTGlzdCA9IHJlbENsc0xpc3Q7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5WYWx1ZSA9ICfor7cnO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihjYS5UeXBlPT0n55yB5biC5Yy6Jylcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhLlZhbHVlID0gJ+ivt+mAieaLqSc7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoY2EuVHlwZT09J+W4g+WwlOWAvCcpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5WYWx1ZSA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyLnB1c2goY2EpO1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICB9XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgfVxuXHRcdFx0XHQgICAgICAgICAgICAgICAgfVxuXHRcdFx0XHQgICAgICAgICAgICAgICAgbmV3YXR0cmxpc3QucHVzaCh7XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgQmtDb2xvcjogY2xzYXR0ci5Ca0NvbG9yLFxuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgIEhhc0FjZTogY2xzYXR0ci5IYXNBY2UsXG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgSW1nRm9udFN0eWxlOiBjbHNhdHRyLkltZ0ZvbnRTdHlsZSxcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICBOYW1lOiBjbHNhdHRyLk5hbWUsXG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgT3JkZXI6IGNsc2F0dHIuT3JkZXIsXG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgT3Blbjogb3Blbixcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICBBdHRyOiBhdHRyLFxuXHRcdFx0XHRcdFx0XHRcdFx0Y29udHJvbF9zdHlsZTp0aGlzLiRkYXRhLmNsYXNzR3JpZFN0eWxlLlN0eWxlRGVmLmNvbnRyb2xfc3R5bGUsXG5cdFx0XHRcdFx0XHRcdFx0XHR0aXRsZV9wX3dkaXRoOnRoaXMuJGRhdGEuY2xhc3NHcmlkU3R5bGUuU3R5bGVEZWYudGl0bGVfcF93ZGl0aCxcblx0XHRcdFx0XHRcdFx0XHRcdEZvbnQ6dGhpcy4kZGF0YS5jbGFzc0dyaWRTdHlsZS5TdHlsZURlZi5Gb250P3RoaXMuJGRhdGEuY2xhc3NHcmlkU3R5bGUuU3R5bGVEZWYuRm9udDp7fSxcblx0XHRcdFx0XHRcdFx0XHRcdEJrX0NvbG9yOnRoaXMuJGRhdGEuY2xhc3NHcmlkU3R5bGUuU3R5bGVEZWYuQmtfQ29sb3I/dGhpcy4kZGF0YS5jbGFzc0dyaWRTdHlsZS5TdHlsZURlZi5Ca19Db2xvcjonI0ZGRkZGRicsXG5cdFx0XHRcdFx0XHRcdFx0XHRUZXh0X0NvbG9yOnRoaXMuJGRhdGEuY2xhc3NHcmlkU3R5bGUuU3R5bGVEZWYuVGV4dF9Db2xvcj90aGlzLiRkYXRhLmNsYXNzR3JpZFN0eWxlLlN0eWxlRGVmLlRleHRfQ29sb3I6JyMwMDAwMDAnXG5cdFx0XHRcdCAgICAgICAgICAgICAgICB9KVxuXHRcdFx0XHQgICAgICAgICAgICB9XG5cdFx0XHRcdCAgICAgICAgfVxuXHRcdFx0XHQgICAgfVxuXHRcdFx0XHQgICAgaWYgKG5ld2F0dHJsaXN0Lmxlbmd0aCA+IDApIHtcblx0XHRcdFx0ICAgICAgICB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3QgPSBuZXdhdHRybGlzdDtcblx0XHRcdFx0ICAgIH1cblx0XHRcdFx0XHR2YXIgcmVxPVtdO1xuXHRcdFx0XHQgICAgaWYgKHRoaXMuJGRhdGEuY2xhc3NHcmlkU3R5bGUuU3R5bGVEZWYpIHtcblx0XHRcdFx0ICAgICAgICAgaWYgKHRoaXMuJGRhdGEuY2xhc3NHcmlkU3R5bGUuU3R5bGVEZWYuc2hvd19zdHlsZS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdCAgICAgICAgICAgIHZhciBhdHRybGlzdCA9IHRoaXMuJGRhdGEuY2xhc3NHcmlkU3R5bGUuU3R5bGVEZWYuc2hvd19zdHlsZVxuXHRcdFx0XHQgICAgICAgICAgICAvLyAkZWwuZmluZCgnLmF0dHJfZmllbGQnKS5wcm9wKCdyZWFkb25seScsIHRydWUpO1xuXHRcdFx0XHQgICAgICAgICAgICAvLyAkZWwuZmluZCgnLmF0dHJfZmllbGQnKS5wcm9wKCdkaXNhYmxlZCcsIHRydWUpO1xuXHRcdFx0XHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJsaXN0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdCAgICAgICAgICAgICAgICB2YXIgYXR0ciA9IGF0dHJsaXN0W2ldLmF0dHJzXG5cdFx0XHRcdCAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGF0dHIubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICB2YXIgYXIgPSBhdHRyW2pdO1xuXHRcdFx0XHRcdFx0XHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5hdHRyLCB2YWx1ZTogYXIudmFsdWU/YXIudmFsdWU6JycgfSk7XG5cdFx0XHRcdCAgICAgICAgICAgICAgICB9XG5cdFx0XHRcdCAgICAgICAgICAgIH1cblx0XHRcdFx0ICAgICAgICB9XG5cdFx0XHRcdFx0fVx0XG5cdFx0XHRcdFx0XG5cdFx0XHRcdFx0dmFyIGV2ZW50bGlzdCA9IHRoaXMuJGRhdGEuY2xhc3NHcmlkU3R5bGUuU3R5bGVEZWYuZXZlbnQ7XG5cdFx0XHRcdFx0aWYgKGV2ZW50bGlzdCkge1xuXHRcdFx0XHRcdCAgICBpZiAoZXZlbnRsaXN0Lmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXZlbnRsaXN0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0ICAgICAgICAgICAgaWYgKGV2ZW50bGlzdFtpXS5ldmVudF9pZCA9PSAnYmVmb3JlX29rJykge1xuXHRcdFx0XHRcdCAgICAgICAgICAgICAgICB0aGlzLiRkYXRhLmVkaXRfb2tfZXZlbnQgPSBldmVudGxpc3RbaV07XG5cdFx0XHRcdFx0ICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudGxpc3RbaV0uZXZlbnRfaWQgPT0gJ2luaXRpYWwnKSB7XG5cdFx0XHRcdFx0ICAgICAgICAgICAgICAgIHRoaXMuJGRhdGEuZWRpdF9pbml0YWxfZXZlbnQgPSBldmVudGxpc3RbaV07XG5cdFx0XHRcdFx0ICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudGxpc3RbaV0uZXZlbnRfaWQgPT0gJ2JlZm9yZV9zZWxlY3RfY29tcG9zZScpIHtcblx0XHRcdFx0XHQgICAgICAgICAgICAgICAgdGhpcy4kZGF0YS5lZGl0X3NlbGVjdF9jb21wb3NlX2V2ZW50ID0gZXZlbnRsaXN0W2ldLnNjcmlwX2lkO1xuXHRcdFx0XHRcdCAgICAgICAgICAgICAgICB0aGlzLiRkYXRhLmVkaXRfY29tcG9zZV9jbHNfaWQgPSBldmVudGxpc3RbaV0uY29tcG9zZV9jbHNfaWQ7XG5cdFx0XHRcdFx0ICAgICAgICAgICAgfVxuXHRcdFx0XHRcdCAgICAgICAgfVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhyZXEpO1xuXHRcdFx0XHRcdGlmICh0aGlzLiRkYXRhLmVkaXRfaW5pdGFsX2V2ZW50KSB7XG5cdFx0XHRcdFx0ICAgIHZhciBldmVudGlkID0gdGhpcy4kZGF0YS5lZGl0X2luaXRhbF9ldmVudC5zY3JpcF9pZDtcblx0XHRcdFx0XHQgICAgdmFyIGluZm8gPSB7XG5cdFx0XHRcdFx0ICAgICAgICBldmVudGlkOiBldmVudGlkLFxuXHRcdFx0XHRcdCAgICAgICAgZWR0eXBlOiBcIjBcIixcblx0XHRcdFx0XHQgICAgICAgIHByb2plY3RpZDogJycsXG5cdFx0XHRcdFx0ICAgICAgICByY2xzaWQ6ICcnLFxuXHRcdFx0XHRcdCAgICAgICAgcm9iamlkOiAnJyxcblx0XHRcdFx0XHQgICAgICAgIHVzZXJsb2dpbjogJycsXG5cdFx0XHRcdFx0ICAgICAgICBjbHNpZDogdGhpcy4kZGF0YS5wYXJhbS5NYXN0ZXJfQ2xzLklELFxuXHRcdFx0XHRcdCAgICAgICAgb2JqaWQ6IFwiXCIsXG5cdFx0XHRcdFx0ICAgICAgICBhdHRyOiByZXEsXG5cdFx0XHRcdFx0ICAgIH1cblx0XHRcdFx0XHQgICAgdGhpcy5pbmlfRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGluZm8pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjb25zb2xlLmxvZyh0aGlzLiRkYXRhLmNsYXNzR3JpZFN0eWxlKTtcblx0XHRcdFx0XHRjb25zb2xlLmxvZyh0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3QpO1xuXHRcdFx0XHRcdFxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi5o+Q56S6XCIsY29udGVudDpcIuacquaJvuWIsOWPr+aYvuekuueahOeahOWxnuaAp1wiLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0c3ViQ2xhc3NfYXR0cl9pbml0KCl7XG5cdFx0XHRcdHZhciBhdHRybGlzdCA9IHRoaXMuJGRhdGEuc3ViQ2xhc3NHcmlkU3R5bGUuU3R5bGVEZWYuc2hvd19zdHlsZVxuXHRcdFx0XHR2YXIgbmV3YXR0cmxpc3QgPSBbXTtcblx0XHRcdFx0aWYgKHRoaXMuJGRhdGEuc3ViQ2xhc3NBdHRyTGlzdC5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdCAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJsaXN0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdCAgICAgICAgdmFyIG9wZW4gPSBhdHRybGlzdFtpXS5vcGVuO1xuXHRcdFx0XHQgICAgICAgIHZhciBuYW1lID0gYXR0cmxpc3RbaV0uYXR0cmdyb3VwX25hbWU7XG5cdFx0XHRcdCAgICAgICAgdmFyIGF0dHJzID0gYXR0cmxpc3RbaV0uYXR0cnM7XG5cdFx0XHRcdCAgICAgICAgZm9yICh2YXIgcyA9IDA7IHMgPCB0aGlzLiRkYXRhLnN1YkNsYXNzQXR0ckxpc3QubGVuZ3RoOyBzKyspIHtcblx0XHRcdFx0ICAgICAgICAgICAgdmFyIGNsc2F0dHIgPSB0aGlzLiRkYXRhLnN1YkNsYXNzQXR0ckxpc3Rbc107XG5cdFx0XHRcdCAgICAgICAgICAgIGlmIChuYW1lID09IGNsc2F0dHIuTmFtZSkge1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgdmFyIGF0dHIgPSBbXTtcblx0XHRcdFx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgYXR0cnMubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBsID0gMDsgbCA8IGNsc2F0dHIuQXR0ci5sZW5ndGg7IGwrKykge1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2EgPSBjbHNhdHRyLkF0dHJbbF07XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhdHRyc1tqXS5hdHRyID09IGNhLk5hbWUpIHtcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhLmFjdGlvbiA9IGF0dHJzW2pdLmFjdGlvbjtcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhLmVkaXQgPSBhdHRyc1tqXS5lZGl0O1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Eubm90ZW1wdHkgPSBhdHRyc1tqXS5ub3RlbXB0eTtcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhLmV4dF9idXR0b24gPSBhdHRyc1tqXS5leHRfYnV0dG9uO1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2EuYnV0dG9uX2ltZyA9IGF0dHJzW2pdLmJ1dHRvbl9pbWc7XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYS5idXR0b25fdG9vbHRpcCA9IGF0dHJzW2pdLmJ1dHRvbl90b29sdGlwO1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2EuYmVmb3JlX2NsaWNrX2J1dHRvbiA9IGF0dHJzW2pdLmJlZm9yZV9jbGlja19idXR0b247XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYS5idXR0b25fY2FsbGJhY2sgPSBhdHRyc1tqXS5idXR0b25fY2FsbGJhY2s7XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYS5oaWRkZW4gPSBhdHRyc1tqXS5oaWRkZW47XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYS5zZWxlY3QgPSBhdHRyc1tqXS5zZWxlY3Q9PXVuZGVmaW5lZD9mYWxzZTphdHRyc1tqXS5zZWxlY3Q7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2EuVmFsdWUgPVwiXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoY2EuZGljdGl0ZW0pe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoY2Euc2VsZWN0ID09IHRydWUpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhLlZhbHVlID0gW107Ly9jYS5kaWN0aXRlbVswXS5DTl9TX05BTUU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlbHNlIFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5WYWx1ZSA9ICfor7fpgInmi6knOy8vY2EuZGljdGl0ZW1bMF0uQ05fU19OQU1FO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGRpY3RpdGVtbGlzdD1bXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGQgPSAwOyBkIDwgY2EuZGljdGl0ZW0ubGVuZ3RoOyBkKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2EuZGljdGl0ZW1bZF0ubGFiZWw9Y2EuZGljdGl0ZW1bZF0uQ05fU19OQU1FO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5kaWN0aXRlbVtkXS52YWx1ZT1jYS5kaWN0aXRlbVtkXS5DTl9TX05BTUU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhLmRpY3RpdGVtW2RdLmF0dHI9Y2EuTmFtZTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoY2EuZGljdGl0ZW1bZF0uQ05fQ19JU19ERUZBVUxUPT0nMScpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2EuVmFsdWU9Y2EuZGljdGl0ZW1bZF0uQ05fU19OQU1FO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihjYS5UeXBlPT0n5pel5pyfJyB8fCBjYS5UeXBlPT0n5pe26Ze0Jyl7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgbm93RGF0ZSA9IG5ldyBEYXRlKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgZGF0ZSA9IHt5ZWFyOiBub3dEYXRlLmdldEZ1bGxZZWFyKCksbW9udGg6IG5vd0RhdGUuZ2V0TW9udGgoKSArIDEsZGF5OiBub3dEYXRlLmdldERhdGUoKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhLlZhbHVlID0gZGF0ZS55ZWFyICsgJy0nICsgKGRhdGUubW9udGggPj0gMTAgPyBkYXRlLm1vbnRoIDogJzAnICsgZGF0ZS5tb250aCkgKyAnLScgKyAoZGF0ZS5kYXkgPj0gMTAgPyBkYXRlLmRheSA6ICcwJyArIGRhdGUuZGF5KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoY2EuVHlwZT09J+W8leeUqOWvueixoSjlpJrkuKopJyl7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgcmVsQ2xzTGlzdD1bXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBhdHRyX3Jlc2NscyA9IGNhLlJlbENscy5zcGxpdCgnLCcpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yKHZhciBpaSBpbiBhdHRyX3Jlc2Nscyl7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciByZXNjbHMgPSBhdHRyX3Jlc2Nsc1tpaV0uc3BsaXQoJ3wnKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVsQ2xzTGlzdC5wdXNoKHtpZDpyZXNjbHNbMF0sbmFtZTpyZXNjbHNbMV19KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhLlJlbENsc0xpc3QgPSByZWxDbHNMaXN0O1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2EuVmFsdWUgPSAn6K+3Jztcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoY2EuVHlwZT09J+ecgeW4guWMuicpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5WYWx1ZSA9ICfor7fpgInmi6knO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGNhLlR5cGU9PSfluIPlsJTlgLwnKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2EuVmFsdWUgPSBmYWxzZTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0ci5wdXNoKGNhKTtcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgfVxuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgIH1cblx0XHRcdFx0ICAgICAgICAgICAgICAgIH1cblx0XHRcdFx0ICAgICAgICAgICAgICAgIG5ld2F0dHJsaXN0LnB1c2goe1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgIEJrQ29sb3I6IGNsc2F0dHIuQmtDb2xvcixcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICBIYXNBY2U6IGNsc2F0dHIuSGFzQWNlLFxuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgIEltZ0ZvbnRTdHlsZTogY2xzYXR0ci5JbWdGb250U3R5bGUsXG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgTmFtZTogY2xzYXR0ci5OYW1lLFxuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgIE9yZGVyOiBjbHNhdHRyLk9yZGVyLFxuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgIE9wZW46IG9wZW4sXG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgQXR0cjogYXR0cixcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnRyb2xfc3R5bGU6dGhpcy4kZGF0YS5zdWJDbGFzc0dyaWRTdHlsZS5TdHlsZURlZi5jb250cm9sX3N0eWxlLFxuXHRcdFx0XHRcdFx0XHRcdFx0dGl0bGVfcF93ZGl0aDp0aGlzLiRkYXRhLnN1YkNsYXNzR3JpZFN0eWxlLlN0eWxlRGVmLnRpdGxlX3Bfd2RpdGgsXG5cdFx0XHRcdFx0XHRcdFx0XHRGb250OnRoaXMuJGRhdGEuc3ViQ2xhc3NHcmlkU3R5bGUuU3R5bGVEZWYuRm9udD90aGlzLiRkYXRhLnN1YkNsYXNzR3JpZFN0eWxlLlN0eWxlRGVmLkZvbnQ6e30sXG5cdFx0XHRcdFx0XHRcdFx0XHRCa19Db2xvcjp0aGlzLiRkYXRhLnN1YkNsYXNzR3JpZFN0eWxlLlN0eWxlRGVmLkJrX0NvbG9yP3RoaXMuJGRhdGEuc3ViQ2xhc3NHcmlkU3R5bGUuU3R5bGVEZWYuQmtfQ29sb3I6JyNGRkZGRkYnLFxuXHRcdFx0XHRcdFx0XHRcdFx0VGV4dF9Db2xvcjp0aGlzLiRkYXRhLnN1YkNsYXNzR3JpZFN0eWxlLlN0eWxlRGVmLlRleHRfQ29sb3I/dGhpcy4kZGF0YS5zdWJDbGFzc0dyaWRTdHlsZS5TdHlsZURlZi5UZXh0X0NvbG9yOicjMDAwMDAwJ1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgfSlcblx0XHRcdFx0ICAgICAgICAgICAgfVxuXHRcdFx0XHQgICAgICAgIH1cblx0XHRcdFx0ICAgIH1cblx0XHRcdFx0ICAgIGlmIChuZXdhdHRybGlzdC5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdCAgICAgICAgdGhpcy4kZGF0YS5zdWJDbGFzc0F0dHJMaXN0ID0gbmV3YXR0cmxpc3Q7XG5cdFx0XHRcdCAgICB9XG5cdFx0XHRcdFx0dmFyIHJlcT1bXTtcblx0XHRcdFx0ICAgIGlmICh0aGlzLiRkYXRhLnN1YkNsYXNzR3JpZFN0eWxlLlN0eWxlRGVmKSB7XG5cdFx0XHRcdCAgICAgICAgIGlmICh0aGlzLiRkYXRhLnN1YkNsYXNzR3JpZFN0eWxlLlN0eWxlRGVmLnNob3dfc3R5bGUubGVuZ3RoID4gMCkge1xuXHRcdFx0XHQgICAgICAgICAgICB2YXIgYXR0cmxpc3QgPSB0aGlzLiRkYXRhLnN1YkNsYXNzR3JpZFN0eWxlLlN0eWxlRGVmLnNob3dfc3R5bGVcblx0XHRcdFx0ICAgICAgICAgICAgLy8gJGVsLmZpbmQoJy5hdHRyX2ZpZWxkJykucHJvcCgncmVhZG9ubHknLCB0cnVlKTtcblx0XHRcdFx0ICAgICAgICAgICAgLy8gJGVsLmZpbmQoJy5hdHRyX2ZpZWxkJykucHJvcCgnZGlzYWJsZWQnLCB0cnVlKTtcblx0XHRcdFx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRybGlzdC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgdmFyIGF0dHIgPSBhdHRybGlzdFtpXS5hdHRyc1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgdmFyIGFyID0gYXR0cltqXTtcblx0XHRcdFx0XHRcdFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuYXR0ciwgdmFsdWU6IGFyLnZhbHVlP2FyLnZhbHVlOicnIH0pO1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgfVxuXHRcdFx0XHQgICAgICAgICAgICB9XG5cdFx0XHRcdCAgICAgICAgfVxuXHRcdFx0XHRcdH1cdFxuXHRcdFx0XHRcdFxuXHRcdFx0XHRcdHZhciBldmVudGxpc3QgPSB0aGlzLiRkYXRhLnN1YkNsYXNzR3JpZFN0eWxlLlN0eWxlRGVmLmV2ZW50O1xuXHRcdFx0XHRcdGlmIChldmVudGxpc3QpIHtcblx0XHRcdFx0XHQgICAgaWYgKGV2ZW50bGlzdC5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV2ZW50bGlzdC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdCAgICAgICAgICAgIGlmIChldmVudGxpc3RbaV0uZXZlbnRfaWQgPT0gJ2JlZm9yZV9vaycpIHtcblx0XHRcdFx0XHQgICAgICAgICAgICAgICAgdGhpcy4kZGF0YS5lZGl0X29rX2V2ZW50ID0gZXZlbnRsaXN0W2ldO1xuXHRcdFx0XHRcdCAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnRsaXN0W2ldLmV2ZW50X2lkID09ICdpbml0aWFsJykge1xuXHRcdFx0XHRcdCAgICAgICAgICAgICAgICB0aGlzLiRkYXRhLmVkaXRfaW5pdGFsX2V2ZW50ID0gZXZlbnRsaXN0W2ldO1xuXHRcdFx0XHRcdCAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnRsaXN0W2ldLmV2ZW50X2lkID09ICdiZWZvcmVfc2VsZWN0X2NvbXBvc2UnKSB7XG5cdFx0XHRcdFx0ICAgICAgICAgICAgICAgIHRoaXMuJGRhdGEuZWRpdF9zZWxlY3RfY29tcG9zZV9ldmVudCA9IGV2ZW50bGlzdFtpXS5zY3JpcF9pZDtcblx0XHRcdFx0XHQgICAgICAgICAgICAgICAgdGhpcy4kZGF0YS5lZGl0X2NvbXBvc2VfY2xzX2lkID0gZXZlbnRsaXN0W2ldLmNvbXBvc2VfY2xzX2lkO1xuXHRcdFx0XHRcdCAgICAgICAgICAgIH1cblx0XHRcdFx0XHQgICAgICAgIH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Ly8gY29uc29sZS5sb2cocmVxKTtcblx0XHRcdFx0XHRpZiAodGhpcy4kZGF0YS5lZGl0X2luaXRhbF9ldmVudCkge1xuXHRcdFx0XHRcdCAgICB2YXIgZXZlbnRpZCA9IHRoaXMuJGRhdGEuZWRpdF9pbml0YWxfZXZlbnQuc2NyaXBfaWQ7XG5cdFx0XHRcdFx0ICAgIHZhciBpbmZvID0ge1xuXHRcdFx0XHRcdCAgICAgICAgZXZlbnRpZDogZXZlbnRpZCxcblx0XHRcdFx0XHQgICAgICAgIGVkdHlwZTogXCIwXCIsXG5cdFx0XHRcdFx0ICAgICAgICBwcm9qZWN0aWQ6ICcnLFxuXHRcdFx0XHRcdCAgICAgICAgcmNsc2lkOiAnJyxcblx0XHRcdFx0XHQgICAgICAgIHJvYmppZDogJycsXG5cdFx0XHRcdFx0ICAgICAgICB1c2VybG9naW46ICcnLFxuXHRcdFx0XHRcdCAgICAgICAgY2xzaWQ6IHRoaXMuJGRhdGEucGFyYW0uU3ViX0Nscy5JRCxcblx0XHRcdFx0XHQgICAgICAgIG9iamlkOiBcIlwiLFxuXHRcdFx0XHRcdCAgICAgICAgYXR0cjogcmVxLFxuXHRcdFx0XHRcdCAgICB9XG5cdFx0XHRcdFx0ICAgIHRoaXMuc2Nhbl9pbmlfRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGluZm8pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjb25zb2xlLmxvZyh0aGlzLiRkYXRhLnN1YkNsYXNzR3JpZFN0eWxlKTtcblx0XHRcdFx0XHRjb25zb2xlLmxvZyh0aGlzLiRkYXRhLnN1YkNsYXNzQXR0ckxpc3QpO1xuXHRcdFx0XHRcdFxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi5o+Q56S6XCIsY29udGVudDpcIuacquaJvuWIsOWPr+aYvuekuueahOeahOWxnuaAp1wiLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0aW5pX0RhdGFPYmpSdW5DdXN0b21FdmVudChpbmZvKXtcblx0XHRcdFx0dmFyIHBhcmFtID0ge1xuXHRcdFx0XHQgICAgRWRpdFN0eWxlOiB0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuVmlld19TdHlsZS5OYW1lLFxuXHRcdFx0XHQgICAgVmlld1N0eWxlOiB0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuVmlld19TdHlsZS5OYW1lLFxuXHRcdFx0XHQgICAgTm90VHJpZ2dlclN5c0V2ZW50OiAwLFxuXHRcdFx0XHQgICAgZW52aXJvbWVudDoge1xuXHRcdFx0XHQgICAgICAgICdmdW5jdGlvbic6ICczMDAwJywgLy8g5Yqf6IO954K557yW5Y+3XG5cdFx0XHRcdCAgICAgICAgY2xzX2lkOiB0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuSUQsICAgICAvLyDlip/og73ngrnkuLvmlbDmja7nsbvmoIfor4Zcblx0XHRcdFx0ICAgICAgICAnYnV0dG9uJzogJ3RvcCcsICAgLy8gdG9wL2JvdHRvbVxuXHRcdFx0XHQgICAgICAgIGJ1dHRvbl9uYW1lOiAn5paw5aKeJyxcblx0XHRcdFx0ICAgICAgICBtYXN0ZXI6IHtcblx0XHRcdFx0ICAgICAgICAgICAgY2xzX2lkOiB0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuSUQsIC8vIGJ1dHRvbj1ib3R0b23ml7YgbWFzdGVy55qEY2xzX2lkXG5cdFx0XHRcdCAgICAgICAgICAgIC8vb2JqX2lkOiAnJyAgLy8gYnV0dG9uPWJvdHRvbeaXtiBtYXN0ZXLnmoRvYmpfaWRcblx0XHRcdFx0ICAgICAgICB9XG5cdFx0XHRcdCAgICB9XG5cdFx0XHRcdH1cblx0XHRcdFx0dmFyIGlucHV0cGFyYW1ldGVyID0gJyc7XG5cdFx0XHRcdHZhciBnbG9iYWxfYXR0ciA9ICcnO1xuXHRcdFx0XHRcblx0XHRcdFx0dmFyIGRhdGFJbmZvID0ge1xuICAgICAgICAgICAgICAgICAgICBlZHR5cGU6IGluZm8uZWR0eXBlLCBldmVudGlkOiBpbmZvLmV2ZW50aWQsIHByb2plY3RpZDogaW5mby5wcm9qZWN0aWQsXG4gICAgICAgICAgICAgICAgICAgIHJjbHNpZDogaW5mby5yY2xzaWQsIHJvYmppZDogaW5mby5yb2JqaWQsIHVzZXJsb2dpbjogaW5mby51c2VybG9naW4sIGNsc2lkOiBpbmZvLmNsc2lkLCBvYmppZDogaW5mby5vYmppZCxcbiAgICAgICAgICAgICAgICAgICAgYXR0cjogSlNPTi5zdHJpbmdpZnkoaW5mby5hdHRyKSwgZXh0aW5mbzogSlNPTi5zdHJpbmdpZnkocGFyYW0pLCBpbnB1dHBhcmFtZXRlcjogaW5wdXRwYXJhbWV0ZXIsIGdsb2JhbF9hdHRyOiBnbG9iYWxfYXR0clxuICAgICAgICAgICAgICAgIH1cblx0XHRcdFx0Y29uc29sZS5sb2coZGF0YUluZm8pO1xuXHRcdFx0XHR0aGlzLiRzdG9yZS5kaXNwYXRjaCgnRGF0YU9ialJ1bkN1c3RvbUV2ZW50SW5mbycsZGF0YUluZm8pLnRoZW4oc3VjY2Vzcz0+e1xuXHRcdFx0XHRcdGNvbnNvbGUubG9nKHN1Y2Nlc3MpO1xuXHRcdFx0XHRcdGlmIChzdWNjZXNzLmNvZGU9PScwMDAwMCcpIHtcblx0XHRcdFx0XHRcdHZhciBkYXRhID0gSlNPTi5wYXJzZShzdWNjZXNzLmRhdGEpO1xuXHRcdFx0XHRcdFx0dmFyIGFjdGlvbmxpc3QgPSBkYXRhLmFjdGlvbjtcblx0XHRcdFx0XHRcdGlmIChhY3Rpb25saXN0KSB7XG5cdFx0XHRcdFx0XHQgICAgZm9yICh2YXIgaiA9IDA7IGogPCBhY3Rpb25saXN0Lmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0XHQgICAgICAgIHZhciBhY3Rpb24gPSBhY3Rpb25saXN0W2pdXG5cdFx0XHRcdFx0XHQgICAgICAgIHZhciBhY3Rpb25fdHlwZSA9IGFjdGlvbi5hY3Rpb25fdHlwZTtcblx0XHRcdFx0XHRcdCAgICAgICAgdmFyIHZhbHVlID0gYWN0aW9uLnZhbHVlO1xuXHRcdFx0XHRcdFx0ICAgICAgICBpZiAoYWN0aW9uX3R5cGUgPT0gJ3NldF9kbGdfYXR0cicpIHtcblx0XHRcdFx0XHRcdCAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgICAgIHZhciB2YWwgPSB2YWx1ZTtcblx0XHRcdFx0XHRcdCAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09ICdzdHJpbmcnKSB7XG5cdFx0XHRcdFx0XHQgICAgICAgICAgICAgICAgICAgIHZhbCA9IEpTT04ucGFyc2UodmFsdWUpO1xuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgICAgIH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc29sZS5sb2codmFsKTtcblx0XHRcdFx0XHRcdCAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGEgPSAwOyBhIDwgdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0Lmxlbmd0aDsgYSsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBsID0gMDsgbCA8IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFthXS5BdHRyLmxlbmd0aDsgbCsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBjYSA9IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFthXS5BdHRyW2xdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAodmFsW2ldLmF0dHIgID09IGNhLk5hbWUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihjYS5UeXBlPT0n5a2X5YW4JyB8fCBjYS5UeXBlPT0n5a2X5YW4LeWtl+espuS4sicgfHwgY2EuVHlwZT09J+Wtl+WFuC3mlbTmlbAnKXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBkaWN0SXRlbUxpc3Q9W107XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IodmFyIGQgaW4gdmFsW2ldLmNob2ljZV9saXN0KXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIHZhbCA9dmFsW2ldLmNob2ljZV9saXN0W2RdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkaWN0SXRlbUxpc3QucHVzaCh7XCJDTl9TX05BTUVcIjp2YWwsXCJOYW1lXCI6dmFsLFwibGFiZWxcIjp2YWwsXCJ2YWx1ZVwiOnZhbH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhLmRpY3RpdGVtID0gZGljdEl0ZW1MaXN0O1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gYXR0cltqXS5kaWN0aXRlbSA9IHZhbFtpXS5jaG9pY2VfbGlzdDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9ZWxzZXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGNhLnZhbHVlID0gdmFsW2ldLnZhbHVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgdmFyIGxlbmd0aCA9IDA7XG5cdFx0XHRcdFx0XHQgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUuZmlsdGVyKGZ1bmN0aW9uIChzKSB7XG5cdFx0XHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsW2ldLmF0dHIgPT0gcy5hdHRyXG5cdFx0XHRcdFx0XHQgICAgICAgICAgICAgICAgICAgIH0pLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID0gMTtcblx0XHRcdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLnB1c2godmFsW2ldKTtcblx0XHRcdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgfVxuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICBpZiAobGVuZ3RoID09IDApIHtcblx0XHRcdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy4kZGF0YS5yZWZkYXRhc3RvcmVbal0uYXR0ciA9PSB2YWxbaV0uYXR0cikge1xuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZVtqXS52YWx1ZSA9IHZhbFtpXS52YWx1ZTtcblx0XHRcdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cdFx0XHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICB9XG5cdFx0XHRcdFx0XHQgICAgICAgICAgICAgICAgICAgIH1cblx0XHRcdFx0XHRcdCAgICAgICAgICAgICAgICB9XG5cdFx0XHRcdFx0XHQgICAgICAgICAgICB9XG5cdFx0XHRcdFx0XHQgICAgICAgIH1cblx0XHRcdFx0XHRcdCAgICAgICAgaWYgKGFjdGlvbl90eXBlID09ICdvcGVuX3NlbGVjdF91c2VyZGxnJykge1xuXHRcdFx0XHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor68yLjJcIixjb250ZW50Olwib3Blbl9zZWxlY3RfdXNlcmRsZ+i/meS4qmFjdGlvbl90eXBl6L+Y5pyq5aSE55CG77yBXCIsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdFx0XHQgICAgICAgIH1cblx0XHRcdFx0XHRcdCAgICB9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcblx0XHRcdFx0XHR9ZWxzZXtcblx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vMlwiLGNvbnRlbnQ6c3VjY2Vzcy5tc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KS5jYXRjaChleD0+e1xuXHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKGV4KTtcblx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzIuMVwiLGNvbnRlbnQ6ZXguZXJyTXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0sXG5cdFx0ICAgIERhdGFPYmpSdW5DdXN0b21FdmVudChpbmZvLGRhdGFfYXR0cil7XG5cdFx0XHRcdHZhciAkdGhpcyA9IHRoaXM7XG5cdFx0ICAgIFx0dmFyIGVudmlyb21lbnQgPSB7XG5cdFx0ICAgIFx0ICAgICdmdW5jdGlvbic6ICczMDAwJywgLy8g5Yqf6IO954K557yW5Y+3XG5cdFx0ICAgIFx0ICAgIGNsc19pZDogdGhpcy4kZGF0YS5wYXJhbS5NYXN0ZXJfQ2xzLklELCAgICAgLy8g5Yqf6IO954K55Li75pWw5o2u57G75qCH6K+GXG5cdFx0ICAgIFx0ICAgICdidXR0b24nOiAndG9wJywgICAvLyB0b3AvYm90dG9tXG5cdFx0ICAgIFx0ICAgIGJ1dHRvbl9uYW1lOiAn5paw5aKeJyxcblx0XHQgICAgXHQgICAgbWFzdGVyOiB7XG5cdFx0ICAgIFx0ICAgICAgICBjbHNfaWQ6IHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5JRCwgLy8gYnV0dG9uPWJvdHRvbeaXtiBtYXN0ZXLnmoRjbHNfaWRcblx0XHQgICAgXHQgICAgICAgIC8vb2JqX2lkOiAnJyAgLy8gYnV0dG9uPWJvdHRvbeaXtiBtYXN0ZXLnmoRvYmpfaWRcblx0XHQgICAgXHQgICAgfVxuXHRcdCAgICBcdH07XG5cdFx0XHRcdGVudmlyb21lbnQuZWRpdF9kbGcgPSB7XG5cdFx0XHRcdCAgICB0eXBlOiAnc21hbGwnLC8v5bCP56qX5Y+jXG5cdFx0XHRcdCAgICBjbGFzc19pZDogdGhpcy4kZGF0YS5wYXJhbS5NYXN0ZXJfQ2xzLklELC8v5b2T5YmN5pWw5o2u57G7aWRcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoZGF0YV9hdHRyKSB7XG5cdFx0XHRcdCAgICBlbnZpcm9tZW50LmVkaXRfZGxnLmZvcm1fY29udHJvbCA9IHsvL+aJgOWxnueahOihqOWNleaOp+S7tlxuXHRcdFx0XHQgICAgICAgIG5hbWU6IGRhdGFfYXR0ci5OYW1lLC8v5a2X5q615bGe5oCnXG5cdFx0XHRcdCAgICAgICAgdGV4dDogZGF0YV9hdHRyLkRpc3BOYW1lLC8v5pi+56S65paH5pysXG5cdFx0XHRcdCAgICAgICAgZ3JvdXBfbmFtZTogZGF0YV9hdHRyLkdyb3VwTmFtZSwvL+WxnuaAp+e7hFxuXHRcdFx0XHQgICAgICAgIHR5cGU6IGRhdGFfYXR0ci5UeXBlLC8v5a2X5q6157G75Z6LXG5cdFx0XHRcdCAgICAgICAgcmVhZG9ubHk6IGRhdGFfYXR0ci5SZWFkT25seSwvL+aYr+WQpuWPquivu1xuXHRcdFx0XHQgICAgICAgIGJ1dHRvbl9pbWc6IGRhdGFfYXR0ci5idXR0b25faW1nLC8v5byV55So5oyJ6ZKu55qE5Zu+5qCHXG5cdFx0XHRcdCAgICAgICAgYnV0dG9uX3Rvb2x0aXA6IGRhdGFfYXR0ci5idXR0b25fdG9vbHRpcC8v5byV55So5oyJ6ZKu55qEdG9vbHRpcFxuXHRcdFx0XHQgICAgfVxuXHRcdFx0XHR9XG5cdFx0ICAgIFx0dmFyIGRhdGFJbmZvID0ge1xuXHRcdCAgICAgICAgICAgIGVkdHlwZTogaW5mby5lZHR5cGUsIGV2ZW50aWQ6IGluZm8uZXZlbnRpZCwgcHJvamVjdGlkOiBpbmZvLnByb2plY3RpZC5yZXBsYWNlKCd7JywnJykucmVwbGFjZSgnfScsJycpLFxuXHRcdCAgICAgICAgICAgIHJjbHNpZDogaW5mby5yY2xzaWQsIHJvYmppZDogaW5mby5yb2JqaWQsIHVzZXJsb2dpbjogaW5mby51c2VybG9naW4sIGNsc2lkOiBpbmZvLmNsc2lkLCBvYmppZDogaW5mby5vYmppZCxcblx0XHQgICAgICAgICAgICBhdHRyOiBKU09OLnN0cmluZ2lmeShpbmZvLmF0dHIpLCBleHRpbmZvOiBKU09OLnN0cmluZ2lmeShlbnZpcm9tZW50KSwgaW5wdXRwYXJhbWV0ZXI6ICcnLCBnbG9iYWxfYXR0cjogSlNPTi5zdHJpbmdpZnkodGhpcy4kZGF0YS5nbG9iYWxfYXR0cilcblx0XHQgICAgICAgIH1cblx0XHQgICAgXHRjb25zb2xlLmxvZyhkYXRhSW5mbyk7XG5cdFx0ICAgIFx0dGhpcy4kc3RvcmUuZGlzcGF0Y2goJ0RhdGFPYmpSdW5DdXN0b21FdmVudEluZm8nLGRhdGFJbmZvKS50aGVuKHN1Y2Nlc3M9Pntcblx0XHQgICAgXHRcdGNvbnNvbGUubG9nKHN1Y2Nlc3MpO1xuXHRcdCAgICBcdFx0aWYgKHN1Y2Nlc3MuY29kZT09JzAwMDAwJykge1xuXHRcdFx0XHRcdFx0dmFyIGRhdGEgPSBKU09OLnBhcnNlKHN1Y2Nlc3MuZGF0YSk7XG5cdFx0ICAgIFx0XHRcdHZhciBhY3Rpb25saXN0ID0gZGF0YS5hY3Rpb247XG5cdFx0XHRcdFx0XHRcdFx0XHRcblx0XHQgICAgXHRcdFx0aWYgKGFjdGlvbmxpc3QpIHtcblx0XHRcdFx0XHRcdFx0Y29uc29sZS5sb2coYWN0aW9ubGlzdCk7XG5cdFx0ICAgIFx0XHRcdCAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFjdGlvbmxpc3QubGVuZ3RoOyBpKyspIHtcblx0XHQgICAgXHRcdFx0ICAgICAgICB2YXIgYWN0aW9uID0gYWN0aW9ubGlzdFtpXTtcblx0XHQgICAgXHRcdFx0ICAgICAgICBpZiAoYWN0aW9uLmFjdGlvbl90eXBlID09ICdzZXRfZGxnX2F0dHInKSB7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgIHZhciByZXN1bHQgPSBhY3Rpb24udmFsdWU7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdWx0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKHJlc3VsdFtpXS5jaG9pY2VfbGlzdCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGMgPSAwOyBjIDwgJHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdC5sZW5ndGg7IGMrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGF0dHIgPSAkdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2NdLkF0dHI7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IGF0dHIubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoYXR0cltqXS5OYW1lPT1yZXN1bHRbaV0uYXR0cil7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoYXR0cltqXS5UeXBlPT0n5a2X5YW4JyB8fCBhdHRyW2pdLlR5cGU9PSflrZflhbgt5a2X56ym5LiyJyB8fCBhdHRyW2pdLlR5cGU9PSflrZflhbgt5pW05pWwJyl7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgZGljdEl0ZW1MaXN0PVtdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yKHZhciBkIGluIHJlc3VsdFtpXS5jaG9pY2VfbGlzdCl7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciB2YWwgPXJlc3VsdFtpXS5jaG9pY2VfbGlzdFtkXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGljdEl0ZW1MaXN0LnB1c2goe1wiQ05fU19OQU1FXCI6dmFsLFwiTmFtZVwiOnZhbCxcImxhYmVsXCI6dmFsLFwidmFsdWVcIjp2YWx9KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGF0dHJbal0uZGljdGl0ZW0gPSBkaWN0SXRlbUxpc3Q7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBhdHRyW2pdLmRpY3RpdGVtID0gcmVzdWx0W2ldLmNob2ljZV9saXN0O1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgIH1cblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGMgPSAwOyBjIDwgJHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdC5sZW5ndGg7IGMrKykge1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgXHR2YXIgYXR0ciA9ICR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbY10uQXR0cjtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgIFx0Zm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhhdHRyW2pdLk5hbWUrJz09JytyZXN1bHRbaV0uYXR0cik7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICBcdFx0aWYoYXR0cltqXS5OYW1lPT1yZXN1bHRbaV0uYXR0cil7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICBcdFx0XHRhdHRyW2pdLlZhbHVlID0gcmVzdWx0W2ldLnZhbHVlO1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgXHRcdH1cblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgIFx0fVxuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgbGVuZ3RoID0gMDtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgIGlmICghJHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLmZpbHRlcihmdW5jdGlvbiAocykge1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRbaV0uYXR0ciA9PSBzLmF0dHJcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgIH0pLmxlbmd0aCkge1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9IDE7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICAgICAgJHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLnB1c2gocmVzdWx0W2ldKTtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgIH1cblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgIGlmIChsZW5ndGggPT0gMCkge1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgJHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLmxlbmd0aDsgaisrKSB7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmVbal0uYXR0ciA9PSByZXN1bHRbaV0uYXR0cikge1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlW2pdLnZhbHVlID0gcmVzdWx0W2ldLnZhbHVlO1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICB9XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICAgICAgfVxuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgfVxuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICB9XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgfSBlbHNlIGlmIChkYXRhLmFjdGlvbltpXS5hY3Rpb25fdHlwZSA9PSAnc2V0X2dsb2JhbF9hdHRyJykge1xuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgJHRoaXMuJGRhdGEuZ2xvYmFsX2F0dHIgPSBkYXRhLmFjdGlvbltpXS52YWx1ZSB8fCBbXTtcblx0XHRcdFx0XHRcdCAgICAgICAgfVxuXHRcdCAgICBcdFx0XHQgICAgfVxuXHRcdCAgICBcdFx0XHR9XG5cdFx0ICAgIFx0XHRcdFxuXHRcdCAgICBcdFx0XHRpZiAoZGF0YS5yZXN1bHQpIHtcblx0XHQgICAgXHRcdFx0ICAgIHZhciByZXN1bHQgPSBkYXRhLnJlc3VsdDtcblx0XHQgICAgXHRcdFx0ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdWx0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgZm9yICh2YXIgYyA9IDA7IGMgPCAkdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0Lmxlbmd0aDsgYysrKSB7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgXHR2YXIgYXR0ciA9ICR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbY10uQXR0cjtcblx0XHQgICAgXHRcdFx0ICAgICAgICBcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xuXHRcdCAgICBcdFx0XHQgICAgICAgIFx0XHRpZihhdHRyW2pdLk5hbWU9PXJlc3VsdFtpXS5hdHRyKXtcblx0XHQgICAgXHRcdFx0ICAgICAgICBcdFx0XHRhdHRyW2pdLlZhbHVlID0gcmVzdWx0W2ldLnZhbHVlO1xuXHRcdCAgICBcdFx0XHQgICAgICAgIFx0XHR9XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgXHR9XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgfVxuXHRcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHRcdHZhciBsZW5ndGggPSAwO1xuXHRcdCAgICBcdFx0XHQgICAgICAgIGlmICghJHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLmZpbHRlcihmdW5jdGlvbiAocykge1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICByZXR1cm4gcmVzdWx0W2ldLmF0dHIgPT0gcy5hdHRyXG5cdFx0ICAgIFx0XHRcdCAgICAgICAgfSkubGVuZ3RoKSB7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgIGxlbmd0aCA9IDE7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5wdXNoKHJlc3VsdFtpXSk7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgfVxuXHRcdCAgICBcdFx0XHQgICAgICAgIGlmIChsZW5ndGggPT0gMCkge1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8ICR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5sZW5ndGg7IGorKykge1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgaWYgKCR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZVtqXS5hdHRyID09IHJlc3VsdFtpXS5hdHRyKSB7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICAgICAgJHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlW2pdLnZhbHVlID0gcmVzdWx0W2ldLnZhbHVlO1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgfVxuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICB9XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgfVxuXHRcdCAgICBcdFx0XHQgICAgfVxuXHRcdCAgICBcdFx0XHR9XG5cdFx0ICAgIFx0XHR9ZWxzZXtcblx0XHQgICAgXHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor68zXCIsY29udGVudDpzdWNjZXNzLm1zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHQgICAgXHRcdH1cblx0XHQgICAgXHR9KS5jYXRjaChleD0+e1xuXHRcdCAgICBcdFx0Ly8gY29uc29sZS5sb2coZXgpO1xuXHRcdCAgICBcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor68zLjFcIixjb250ZW50OmV4LmVyck1zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHQgICAgXHR9KTtcblx0XHQgICAgfSxcblx0XHRcdE9LRGF0YU9ialJ1bkN1c3RvbUV2ZW50KCl7XG5cdFx0ICAgIFx0dmFyIGVudmlyb21lbnQgPSB7XG5cdFx0XHRcdCAgICAnZnVuY3Rpb24nOiAnMzAwMCcsIC8vIOWKn+iDveeCuee8luWPt1xuXHRcdFx0XHQgICAgY2xzX2lkOiB0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuSUQsICAgICAvLyDlip/og73ngrnkuLvmlbDmja7nsbvmoIfor4Zcblx0XHRcdFx0ICAgICdidXR0b24nOiAndG9wJywgICAvLyB0b3AvYm90dG9tXG5cdFx0XHRcdCAgICBidXR0b25fbmFtZTogJ+aWsOWinicsXG5cdFx0XHRcdCAgICBtYXN0ZXI6IHtcblx0XHRcdFx0ICAgICAgICBjbHNfaWQ6IHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5JRCwgLy8gYnV0dG9uPWJvdHRvbeaXtiBtYXN0ZXLnmoRjbHNfaWRcblx0XHRcdFx0ICAgICAgICBcblx0XHRcdFx0ICAgIH1cblx0XHRcdFx0fTtcblx0XHQgICAgXHRcblx0XHRcdFx0dmFyIGV2ZW50aWQgPSB0aGlzLiRkYXRhLmVkaXRfb2tfZXZlbnQuc2NyaXBfaWQ7XG5cdFx0XHRcdHZhciByZXE9W107XG5cdFx0XHRcdHZhciBhdHRybGlzdCA9IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdDtcblx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhdHRybGlzdC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdHZhciBhdHRyID0gYXR0cmxpc3RbaV0uQXR0cjtcblx0XHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IGF0dHIubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0XHRcdHZhciBhciA9IGF0dHJbal07XG5cdFx0XHRcdFx0XHRpZihhci5WYWx1ZT09J+ivt+mAieaLqScgfHwgYXIuVmFsdWU9PSfigJTigJTor7fpgInmi6nigJTigJQnKSBhci5WYWx1ZT0nJztcblx0XHRcdFx0XHRcdGlmKGFyLlR5cGU9PSflvJXnlKjlr7nosaEo5aSa5LiqKScpXG5cdFx0XHRcdFx0XHRcdGlmKGFyLlZhbHVlPT0n6K+3JykgYXIuVmFsdWU9Jyc7XG5cdFx0XHRcdCAgICAgICAgaWYoYXIuVHlwZT09J+W8leeUqOS6uuWRmCcgfHwgYXIuVHlwZT09J+W8leeUqOmhueebricpXG5cdFx0XHRcdCAgICAgICAgXHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWxJRCA/YXIuVmFsSUQgOicnIH0pO1xuXHRcdFx0XHQgICAgICAgIGVsc2UgaWYoYXIuVHlwZT09J+W4g+WwlOWAvCcpXG5cdFx0XHRcdFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsdWU6IGFyLlZhbHVlPycxJzonMCd9KTtcblx0XHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsdWUgfSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdFxuXHRcdCAgICBcdGlmICh0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5sZW5ndGggPiAwKSB7XG5cdFx0ICAgIFx0ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUubGVuZ3RoOyBpKyspIHtcblx0XHQgICAgXHQgICAgICAgIGlmICghcmVxLmZpbHRlcihmdW5jdGlvbiAocykge1xuXHRcdCAgICBcdCAgICAgICAgICAgIHJldHVybiB0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZVtpXS5hdHRyID09IHMubmFtZVxuXHRcdCAgICBcdCAgICAgICAgfSkubGVuZ3RoKSB7XG5cdFx0ICAgIFx0ICAgICAgICAgICAgbGVuZ3RoID0gMTtcblx0XHQgICAgXHQgICAgICAgICAgICByZXEucHVzaCh7ICdhdHRyJzogdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmVbaV0uYXR0ciwgJ3ZhbHVlJzogdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmVbaV0udmFsdWUgfSk7XG5cdFx0ICAgIFx0ICAgICAgICB9XG5cdFx0ICAgIFx0ICAgIH1cblx0XHQgICAgXHR9XG5cdFx0ICAgIFx0dmFyIGluZm8gPSB7XG5cdFx0ICAgIFx0ICAgIGV2ZW50aWQ6IGV2ZW50aWQsXG5cdFx0ICAgIFx0ICAgIGVkdHlwZTogXCIwXCIsXG5cdFx0ICAgIFx0ICAgIHByb2plY3RpZDogJycsXG5cdFx0ICAgIFx0ICAgIHJjbHNpZDogJycsXG5cdFx0ICAgIFx0ICAgIHJvYmppZDogJycsXG5cdFx0ICAgIFx0ICAgIHVzZXJsb2dpbjogJycsXG5cdFx0ICAgIFx0ICAgIGNsc2lkOiB0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuSUQsXG5cdFx0ICAgIFx0ICAgIG9iamlkOiBcIlwiLFxuXHRcdCAgICBcdCAgICBhdHRyOiByZXEsXG5cdFx0ICAgIFx0fVxuXHRcdCAgICBcdHZhciBkYXRhSW5mbyA9IHtcblx0XHQgICAgICAgICAgICBlZHR5cGU6IGluZm8uZWR0eXBlLCBldmVudGlkOiBpbmZvLmV2ZW50aWQsIHByb2plY3RpZDogaW5mby5wcm9qZWN0aWQscmNsc2lkOiBpbmZvLnJjbHNpZCwgXG5cdFx0XHRcdFx0cm9iamlkOiBpbmZvLnJvYmppZCwgdXNlcmxvZ2luOiBpbmZvLnVzZXJsb2dpbiwgY2xzaWQ6IGluZm8uY2xzaWQsIG9iamlkOiBpbmZvLm9iamlkLFxuXHRcdFx0XHRcdGF0dHI6IEpTT04uc3RyaW5naWZ5KGluZm8uYXR0ciksIGV4dGluZm86IEpTT04uc3RyaW5naWZ5KGVudmlyb21lbnQpLCBnbG9iYWxfYXR0cjogSlNPTi5zdHJpbmdpZnkodGhpcy4kZGF0YS5nbG9iYWxfYXR0cilcblx0XHQgICAgICAgIH1cblx0XHQgICAgXHRjb25zb2xlLmxvZyhkYXRhSW5mbyk7XG5cdFx0ICAgIFx0dGhpcy4kc3RvcmUuZGlzcGF0Y2goJ0RhdGFPYmpSdW5DdXN0b21FdmVudEluZm8nLGRhdGFJbmZvKS50aGVuKHN1Y2Nlc3M9Pntcblx0XHQgICAgXHRcdGNvbnNvbGUubG9nKHN1Y2Nlc3MpO1xuXHRcdCAgICBcdFx0aWYgKHN1Y2Nlc3MuY29kZT09JzAwMDAwJykge1xuXHRcdFx0XHRcdFx0dmFyIGRhdGEgPSBKU09OLnBhcnNlKHN1Y2Nlc3MuZGF0YSk7XHRcdFxuXHRcdCAgICBcdFx0XHR2YXIgcmVzdWx0ID0gZGF0YS5yZXN1bHQ7XG5cdFx0ICAgIFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdWx0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0ICAgIFx0XHRcdCAgICAvLyBzZWxmLmNsYXNzX2F0dHJfZWxlLmZpbmQoJy5hdHRyX2ZpZWxkW2RhdGEtZmllbGQ9XCInICsgcmVzdWx0W2ldLmF0dHIgKyAnXCJdJykudmFsKHJlc3VsdFtpXS52YWx1ZSkuZGF0YSgndmFsJywgcmVzdWx0W2ldLnZhbHVlKTtcblx0XHQgICAgXHRcdFx0ICAgIHZhciBsZW5ndGggPSAwO1xuXHRcdCAgICBcdFx0XHQgICAgaWYgKCF0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5maWx0ZXIoZnVuY3Rpb24gKHMpIHtcblx0XHQgICAgXHRcdFx0ICAgICAgICByZXR1cm4gcmVzdWx0W2ldLmF0dHIgPT0gcy5hdHRyXG5cdFx0ICAgIFx0XHRcdCAgICB9KS5sZW5ndGgpIHtcblx0XHQgICAgXHRcdFx0ICAgICAgICBsZW5ndGggPSAxO1xuXHRcdCAgICBcdFx0XHQgICAgICAgIHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLnB1c2gocmVzdWx0W2ldKTtcblx0XHQgICAgXHRcdFx0ICAgIH1cblx0XHQgICAgXHRcdFx0ICAgIGlmIChsZW5ndGggPT0gMCkge1xuXHRcdCAgICBcdFx0XHQgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUubGVuZ3RoOyBqKyspIHtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgaWYgKHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlW2pdLmF0dHIgPT0gcmVzdWx0W2ldLmF0dHIpIHtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgIHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlW2pdLnZhbHVlID0gcmVzdWx0W2ldLnZhbHVlO1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICB9XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgfVxuXHRcdCAgICBcdFx0XHQgICAgfVxuXHRcdCAgICBcdFx0XHR9XG5cdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdHRoaXMuYWRkKCk7XG5cdFx0ICAgIFx0XHR9ZWxzZXtcblx0XHQgICAgXHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor680XCIsY29udGVudDpzdWNjZXNzLm1zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHQgICAgXHRcdH1cblx0XHQgICAgXHR9KS5jYXRjaChleD0+e1xuXHRcdCAgICBcdFx0Ly8gY29uc29sZS5sb2coZXgpO1xuXHRcdCAgICBcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor680LjFcIixjb250ZW50OmV4LmVyck1zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHQgICAgXHR9KTtcblx0XHQgICAgfSxcblx0XHQgICAgRGF0YU9ialJ1bkN1c3RvbUV2ZW50X1JldHVybihldmVudGlkLGRhdGFfYXR0cixidXR0b25fY2FsbGJhY2ssaW5kZXgsaWluZGV4KXtcblx0XHRcdFx0dmFyIGVudmlyb21lbnQgPSB7XG5cdFx0XHRcdCAgICAnZnVuY3Rpb24nOiAnMzAwMCcsIC8vIOWKn+iDveeCuee8luWPt1xuXHRcdFx0XHQgICAgY2xzX2lkOiB0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuSUQsICAgICAvLyDlip/og73ngrnkuLvmlbDmja7nsbvmoIfor4Zcblx0XHRcdFx0ICAgICdidXR0b24nOiAndG9wJywgICAvLyB0b3AvYm90dG9tXG5cdFx0XHRcdCAgICBidXR0b25fbmFtZTogJ+aWsOWinicsXG5cdFx0XHRcdCAgICBtYXN0ZXI6IHtcblx0XHRcdFx0ICAgICAgICBjbHNfaWQ6IHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5JRCwgLy8gYnV0dG9uPWJvdHRvbeaXtiBtYXN0ZXLnmoRjbHNfaWRcblx0XHRcdFx0ICAgICAgICAvL29ial9pZDogJycgIC8vIGJ1dHRvbj1ib3R0b23ml7YgbWFzdGVy55qEb2JqX2lkXG5cdFx0XHRcdCAgICB9XG5cdFx0XHRcdH07XG5cdFx0XHRcdHZhciByZXE9W107XG5cdFx0XHRcdHZhciBhdHRybGlzdCA9IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdDtcblx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhdHRybGlzdC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdHZhciBhdHRyID0gYXR0cmxpc3RbaV0uQXR0cjtcblx0XHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IGF0dHIubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0XHRcdHZhciBhciA9IGF0dHJbal07XG5cdFx0XHRcdFx0XHRpZihhci5UeXBlPT0n5byV55So5a+56LGhKOWkmuS4qiknKVxuXHRcdFx0XHRcdFx0XHRpZihhci5WYWx1ZT09J+ivtycpIGFyLlZhbHVlPScnO1xuXHRcdFx0XHQgICAgICAgIGlmKGFyLlR5cGU9PSflvJXnlKjkurrlkZgnIHx8IGFyLlR5cGU9PSflvJXnlKjpobnnm64nKVxuXHRcdFx0XHQgICAgICAgIFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsSUQgP2FyLlZhbElEIDonJyB9KTtcblx0XHRcdFx0ICAgICAgICBlbHNlIGlmKGFyLlR5cGU9PSfluIPlsJTlgLwnKVxuXHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWx1ZT8nMSc6JzAnfSk7XG5cdFx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsdWU6IGFyLlZhbHVlIH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAodGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUubGVuZ3RoID4gMCkge1xuXHRcdFx0XHQgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHQgICAgICAgIGlmICghcmVxLmZpbHRlcihmdW5jdGlvbiAocykge1xuXHRcdFx0XHQgICAgICAgICAgICByZXR1cm4gdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmVbaV0uYXR0ciA9PSBzLm5hbWVcblx0XHRcdFx0ICAgICAgICB9KS5sZW5ndGgpIHtcblx0XHRcdFx0ICAgICAgICAgICAgbGVuZ3RoID0gMTtcblx0XHRcdFx0ICAgICAgICAgICAgcmVxLnB1c2goeyAnYXR0cic6IHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlW2ldLmF0dHIsICd2YWx1ZSc6IHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlW2ldLnZhbHVlIH0pO1xuXHRcdFx0XHQgICAgICAgIH1cblx0XHRcdFx0ICAgIH1cblx0XHRcdFx0fVxuXHRcdFx0XHR2YXIgZXh0aW5mbyA9IGVudmlyb21lbnQ7XG5cdFx0XHRcdGV4dGluZm8uZWRpdF9kbGcgPSB7XG5cdFx0XHRcdCAgICB0eXBlOiAnc21hbGwnLC8v5bCP56qX5Y+jXG5cdFx0XHRcdCAgICBjbGFzc19pZDogdGhpcy4kZGF0YS5wYXJhbS5NYXN0ZXJfQ2xzLklELC8v5b2T5YmN5pWw5o2u57G7aWRcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoZGF0YV9hdHRyKSB7XG5cdFx0XHRcdCAgICBleHRpbmZvLmVkaXRfZGxnLmZvcm1fY29udHJvbCA9IHsvL+aJgOWxnueahOihqOWNleaOp+S7tlxuXHRcdFx0XHQgICAgICAgIG5hbWU6IGRhdGFfYXR0ci5OYW1lLC8v5a2X5q615bGe5oCnXG5cdFx0XHRcdCAgICAgICAgdGV4dDogZGF0YV9hdHRyLkRpc3BOYW1lLC8v5pi+56S65paH5pysXG5cdFx0XHRcdCAgICAgICAgZ3JvdXBfbmFtZTogZGF0YV9hdHRyLkdyb3VwTmFtZSwvL+WxnuaAp+e7hFxuXHRcdFx0XHQgICAgICAgIHR5cGU6IGRhdGFfYXR0ci5UeXBlLC8v5a2X5q6157G75Z6LXG5cdFx0XHRcdCAgICAgICAgcmVhZG9ubHk6IGRhdGFfYXR0ci5SZWFkT25seSwvL+aYr+WQpuWPquivu1xuXHRcdFx0XHQgICAgICAgIGJ1dHRvbl9pbWc6IGRhdGFfYXR0ci5idXR0b25faW1nLC8v5byV55So5oyJ6ZKu55qE5Zu+5qCHXG5cdFx0XHRcdCAgICAgICAgYnV0dG9uX3Rvb2x0aXA6IGRhdGFfYXR0ci5idXR0b25fdG9vbHRpcC8v5byV55So5oyJ6ZKu55qEdG9vbHRpcFxuXHRcdFx0XHQgICAgfVxuXHRcdFx0XHR9XG5cdFx0XHRcdHZhciBkYXRhSW5mbyA9IHtcblx0XHRcdFx0XHRlZHR5cGU6ICBcIjBcIiwgZXZlbnRpZDogZXZlbnRpZCwgcHJvamVjdGlkOiAnJyxyY2xzaWQ6ICcnLCByb2JqaWQ6ICcnLCB1c2VybG9naW46ICcnLCBcblx0XHRcdFx0XHRjbHNpZDogdGhpcy4kZGF0YS5wYXJhbS5NYXN0ZXJfQ2xzLklELCBvYmppZDogJycsYXR0cjogSlNPTi5zdHJpbmdpZnkocmVxKSwgXG5cdFx0XHRcdFx0ZXh0aW5mbzogSlNPTi5zdHJpbmdpZnkoZXh0aW5mbyksIGdsb2JhbF9hdHRyOiBKU09OLnN0cmluZ2lmeSh0aGlzLiRkYXRhLmdsb2JhbF9hdHRyKVxuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnNvbGUubG9nKGRhdGFJbmZvKTtcblx0XHRcdFx0dGhpcy4kc3RvcmUuZGlzcGF0Y2goJ0RhdGFPYmpSdW5DdXN0b21FdmVudEluZm8nLGRhdGFJbmZvKS50aGVuKHN1Y2Nlc3M9Pntcblx0XHRcdFx0XHRjb25zb2xlLmxvZyhzdWNjZXNzKTtcblx0XHRcdFx0XHRpZiAoc3VjY2Vzcy5jb2RlPT0nMDAwMDAnKSB7XG5cdFx0XHRcdFx0XHR2YXIgZGF0YSA9IEpTT04ucGFyc2Uoc3VjY2Vzcy5kYXRhKTtcblx0XHRcdFx0XHRcdGlmIChkYXRhICE9IFwiXCIpIHtcblx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdHZhciBhY3Rpb25zID0gZGF0YS5hY3Rpb247XG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhhY3Rpb25zKTtcblx0XHRcdFx0XHRcdGlmIChhY3Rpb25zKSB7XG5cdFx0XHRcdFx0XHQgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHQgICAgICAgIHZhciBhY3Rpb24gPSBhY3Rpb25zW2ldO1xuXHRcdFx0XHRcdFx0ICAgICAgICB2YXIgdmFsID0gYWN0aW9uLnZhbHVlO1xuXHRcdFx0XHRcdFx0ICAgICAgICB2YXIgZW52aXJvbWVudCA9IEpTT04uc3RyaW5naWZ5KGVudmlyb21lbnQpO1xuXHRcdFx0XHRcdFx0ICAgICAgICBcblx0XHRcdFx0XHRcdCAgICAgICAgaWYgKGFjdGlvbi5hY3Rpb25fdHlwZSA9PSAnb3Blbl9wYW5lbCcpIHtcblx0XHRcdFx0XHRcdCAgICAgICAgICAgdmFyIGQgPSBkaWFsb2coe1xuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgICAgdGl0bGU6ICc8aSBjbGFzcz1cImFjZS1pY29uIGZhIGZhLWluZm8tY2lyY2xlXCI+PC9pPiAnICsgJ+aPkOekuicsXG5cdFx0XHRcdFx0XHQgICAgICAgICAgICAgICBjb250ZW50OiBhY3Rpb24uYWN0aW9uX3R5cGUgKyAn5q2kYWN0aW9u5bCa5pyq5aSE55CG77yBJ1xuXHRcdFx0XHRcdFx0ICAgICAgICAgICB9KTtcblx0XHRcdFx0XHRcdCAgICAgICAgICAgZC5zaG93KCk7XG5cdFx0XHRcdFx0XHQgICAgICAgIH1cblx0XHRcdFx0XHRcdCAgICAgICAgZWxzZSBpZiAoYWN0aW9uLmFjdGlvbl90eXBlID09ICdvcGVuX3NlbGVjdF91c2VyZGxnJykge1xuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgdmFyIHN0eWxlID0gdmFsLnN0eWxlO1xuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gc3R5bGUgPT0gJ3VzZXInID8gJ+mAieaLqeS6uuWRmCcgOiBzdHlsZSA9PSAnZGVwYXJ0bWVudCcgPyAn6YCJ5oup6YOo6ZeoJyA6IHN0eWxlID09ICdyb2xlJyA/ICfpgInmi6nop5LoibInIDogJydcblx0XHRcdFx0XHRcdCAgICAgICAgICAgIHZhciAkdGhpcyA9IHRoaXM7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgcGFyYW09e1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpbmRleDogaW5kZXgsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlpbmRleDppaW5kZXgsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGJ1dHRvbl9jYWxsYmFjazpidXR0b25fY2FsbGJhY2ssXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJlcTpyZXEsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGRhdGFfYXR0cjpkYXRhX2F0dHJcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdHVuaS5uYXZpZ2F0ZVRvKHtcblx0XHRcdFx0XHRcdCAgICAgICAgICAgIFx0dXJsOicuLi9zZWxwc24vaW5kZXg/bXVsaXQ9ZmFsc2UmcGFyYW09JytKU09OLnN0cmluZ2lmeShwYXJhbSksXG5cdFx0XHRcdFx0XHQgICAgICAgICAgICBcdGV2ZW50czp7XG5cdFx0XHRcdFx0XHQgICAgICAgICAgICBcdFx0QWRkUGVyKGRhdGEscGFyYW0peyBcblx0XHRcdFx0XHRcdCAgICAgICAgICAgIFx0XHRcdC8vIGNvbnNvbGUubG9nKHBhcmFtKTtcblx0XHRcdFx0XHRcdCAgICAgICAgICAgIFx0XHRcdGNvbnNvbGUubG9nKGRhdGEpO1xuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgXHRcdFx0dmFyIGNhbGxiYWNrX2V2ZW50aWQgPSBwYXJhbS5idXR0b25fY2FsbGJhY2sudHJpbSgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGluZm8gPSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgICAgZXZlbnRpZDogY2FsbGJhY2tfZXZlbnRpZCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgICBlZHR5cGU6IFwiMFwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgIHByb2plY3RpZDogJycsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgICAgcmNsc2lkOiAnJyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgICByb2JqaWQ6ICcnLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgIHVzZXJsb2dpbjogJycsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgICAgY2xzaWQ6ICR0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuSUQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgICAgb2JqaWQ6IFwiXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgICAgYXR0cjogcGFyYW0ucmVxLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgIGlucHV0cGFyYW1ldGVyOiBkYXRhXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy5EYXRhT2JqUnVuQ3VzdG9tRXZlbnQoaW5mbywgcGFyYW0uZGF0YV9hdHRyKTtcblx0XHRcdFx0XHRcdCAgICAgICAgICAgIFx0XHR9XG5cdFx0XHRcdFx0XHQgICAgICAgICAgICBcdH1cblx0XHRcdFx0XHRcdCAgICAgICAgICAgIH0pO1x0XG5cdFx0XHRcdFx0XHQgICAgICAgIH1cblx0XHRcdFx0XHRcdCAgICAgICAgZWxzZSBpZiAoYWN0aW9uLmFjdGlvbl90eXBlID09ICdvcGVuX2RhdGFfcXVlcnlfZGxnJykge1xuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgXG5cdFx0XHRcdFx0XHQgICAgICAgIH1cblx0XHRcdFx0XHRcdCAgICAgICAgZWxzZSBpZiAoYWN0aW9uLmFjdGlvbl90eXBlID09ICdvcGVuX2NvbW1vbl9kbGcnKSB7XG5cdFx0XHRcdFx0XHQgICAgICAgICAgICB2YXIgdmFsdWUgPSBhY3Rpb24udmFsdWU7XG5cdFx0XHRcdFx0XHQgICAgICAgICAgICB2YXIgZCA9IGRpYWxvZyh7XG5cdFx0XHRcdFx0XHQgICAgICAgICAgICAgICAgdGl0bGU6ICc8aSBjbGFzcz1cImFjZS1pY29uIGZhIGZhLWluZm8tY2lyY2xlXCI+PC9pPiAnICsgJ+aPkOekuicsXG5cdFx0XHRcdFx0XHQgICAgICAgICAgICAgICAgY29udGVudDogYWN0aW9uLmFjdGlvbl90eXBlICsgJ+atpGFjdGlvbuWwmuacquWkhOeQhu+8gSdcblx0XHRcdFx0XHRcdCAgICAgICAgICAgIH0pO1xuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgZC5zaG93KCk7XG5cdFx0XHRcdFx0XHQgICAgICAgIH1cblx0XHRcdFx0XHRcdCAgICAgICAgZWxzZSBpZiAoYWN0aW9uLmFjdGlvbl90eXBlID09ICdvcGVuX3Byb2plY3RfcXVlcnlfZGxnJykge1xuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhhY3Rpb24udmFsdWUuc2VsZWN0X3JhbmdlKTtcblx0XHRcdFx0XHRcdCAgICAgICAgICAgIC8vY29uc29sZS5sb2coYWN0aW9uLnZhbHVlLm11bGl0X3NlbGVjdCk7XG5cdFx0XHRcdFx0XHQgICAgICAgICAgICB2YXIgcHJpUmVsID0gJy0xJztcblx0XHRcdFx0XHRcdCAgICAgICAgICAgIGlmIChhY3Rpb24udmFsdWUuc2VsZWN0X3JhbmdlID09ICflhajpg6jnm7jlhbMnKVxuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgICAgIHByaVJlbCA9ICcwJztcblx0XHRcdFx0XHRcdCAgICAgICAgICAgIGVsc2UgaWYgKGFjdGlvbi52YWx1ZS5zZWxlY3RfcmFuZ2UgPT0gJ+aIkei0n+i0o+eahOmhueebricpXG5cdFx0XHRcdFx0XHQgICAgICAgICAgICAgICAgcHJpUmVsID0gJzEnO1xuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgZWxzZSBpZiAoYWN0aW9uLnZhbHVlLnNlbGVjdF9yYW5nZSA9PSAn5oiR5Yib5bu655qEJylcblx0XHRcdFx0XHRcdCAgICAgICAgICAgICAgICBwcmlSZWwgPSAnMic7XG5cdFx0XHRcdFx0XHQgICAgICAgICAgICBlbHNlIGlmIChhY3Rpb24udmFsdWUuc2VsZWN0X3JhbmdlID09ICfmiJHlj4LkuI7nmoQnIHx8IGFjdGlvbi52YWx1ZS5zZWxlY3RfcmFuZ2UgPT0gJ+aIkeWPguWKoOeahCcpXG5cdFx0XHRcdFx0XHQgICAgICAgICAgICAgICAgcHJpUmVsID0gJzMnO1xuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgZWxzZSBpZiAoYWN0aW9uLnZhbHVlLnNlbGVjdF9yYW5nZSA9PSAn5oiR5YWz5rOo55qEJylcblx0XHRcdFx0XHRcdCAgICAgICAgICAgICAgICBwcmlSZWwgPSAnNCc7XG5cdFx0XHRcdFx0XHQgICAgICAgICAgICBlbHNlIGlmIChhY3Rpb24udmFsdWUuc2VsZWN0X3JhbmdlID09ICfmiJHkuIvlsZ7nmoTpobnnm64nKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRwcmlSZWwgPSAnNSc7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHRcdFx0dmFyICR0aGlzID0gdGhpcztcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBwYXJhbV89e1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpbmRleDogaW5kZXgsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlpbmRleDppaW5kZXgsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGJ1dHRvbl9jYWxsYmFjazpidXR0b25fY2FsbGJhY2ssXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJlcTpyZXFcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdHVuaS5uYXZpZ2F0ZVRvKHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dXJsOicuLi9zZWxQcmovaW5kZXg/cmVsYXRpb249JytwcmlSZWwrJyZwYXJhbT0nK0pTT04uc3RyaW5naWZ5KHBhcmFtXyksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGV2ZW50czp7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0QWRkUGVyKGRhdGEscGFyYW0peyBcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbcGFyYW0uaW5kZXhdLkF0dHJbcGFyYW0uaWluZGV4XS5WYWx1ZT1kYXRhWzBdLk5hbWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W3BhcmFtLmluZGV4XS5BdHRyW3BhcmFtLmlpbmRleF0uVmFsSUQ9ZGF0YVswXS5JRCsnOycrZGF0YVswXS5OYW1lO1xuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgXHRcdFx0dmFyIGNhbGxiYWNrX2V2ZW50aWQgPSBwYXJhbS5idXR0b25fY2FsbGJhY2sudHJpbSgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGNhbGxiYWNrX2V2ZW50aWQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgICB2YXIgaW5mbyA9IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgICAgICAgZXZlbnRpZDogY2FsbGJhY2tfZXZlbnRpZCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgICAgICAgZWR0eXBlOiBcIjJcIixcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgICAgICAgcHJvamVjdGlkOiBkYXRhWzBdLklELFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgICAgICByY2xzaWQ6IFwiXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgICAgICAgIHJvYmppZDogXCJcIixcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgICAgICAgdXNlcmxvZ2luOiBcIlwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgICAgICBjbHNpZDogJHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5JRCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgICAgICAgb2JqaWQ6IFwiXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgICAgICAgIGF0dHI6IHBhcmFtLnJlcSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgICB9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgICR0aGlzLkRhdGFPYmpSdW5DdXN0b21FdmVudChpbmZvKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0ICAgICAgICB9IGVsc2Uge1xuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgdmFyIGQgPSBkaWFsb2coe1xuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgICAgIHRpdGxlOiAnPGkgY2xhc3M9XCJhY2UtaWNvbiBmYSBmYS1pbmZvLWNpcmNsZVwiPjwvaT4gJyArICfmj5DnpLonLFxuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgICAgIGNvbnRlbnQ6IGFjdGlvbi5hY3Rpb25fdHlwZSArICfmraRhY3Rpb27lsJrmnKrlpITnkIbvvIEnXG5cdFx0XHRcdFx0XHQgICAgICAgICAgICB9KTtcblx0XHRcdFx0XHRcdCAgICAgICAgICAgIGQuc2hvdygpO1xuXHRcdFx0XHRcdFx0ICAgICAgICB9XG5cdFx0XHRcdFx0XHQgICAgfVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fWVsc2V7XG5cdFx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi5o+Q56S6NS4yXCIsY29udGVudDogJ+iwg+eUqCBiZWZvcmVfY2xpY2tfYnV0dG9uIOiEmuacrOi/lOWbnuepuu+8jGV2ZW50X2lkJyArIGV2ZW50aWQsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fWVsc2V7XG5cdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzVcIixjb250ZW50OnN1Y2Nlc3MubXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSkuY2F0Y2goZXg9Pntcblx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhleCk7XG5cdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLmj5DnpLo1LjFcIixjb250ZW50OmV4LmVyck1zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHRcdFx0fSk7XG5cdFx0ICAgIH0sXG5cdFx0ICAgIHNjYW5faW5pX0RhdGFPYmpSdW5DdXN0b21FdmVudChpbmZvKXtcblx0XHQgICAgXHR2YXIgcGFyYW0gPSB7XG5cdFx0ICAgIFx0ICAgIEVkaXRTdHlsZTogdGhpcy4kZGF0YS5wYXJhbS5TdWJfQ2xzLlZpZXdfU3R5bGUuTmFtZSxcblx0XHQgICAgXHQgICAgVmlld1N0eWxlOiB0aGlzLiRkYXRhLnBhcmFtLlN1Yl9DbHMuVmlld19TdHlsZS5OYW1lLFxuXHRcdCAgICBcdCAgICBOb3RUcmlnZ2VyU3lzRXZlbnQ6IDAsXG5cdFx0ICAgIFx0ICAgIGVudmlyb21lbnQ6IHtcblx0XHQgICAgXHQgICAgICAgICdmdW5jdGlvbic6ICczMDAwJywgLy8g5Yqf6IO954K557yW5Y+3XG5cdFx0ICAgIFx0ICAgICAgICBjbHNfaWQ6IHRoaXMuJGRhdGEucGFyYW0uU3ViX0Nscy5JRCwgICAgIC8vIOWKn+iDveeCueS4u+aVsOaNruexu+agh+ivhlxuXHRcdCAgICBcdCAgICAgICAgJ2J1dHRvbic6ICd0b3AnLCAgIC8vIHRvcC9ib3R0b21cblx0XHQgICAgXHQgICAgICAgIGJ1dHRvbl9uYW1lOiAn5paw5aKeJyxcblx0XHQgICAgXHQgICAgICAgIG1hc3Rlcjoge1xuXHRcdCAgICBcdCAgICAgICAgICAgIGNsc19pZDogdGhpcy4kZGF0YS5wYXJhbS5TdWJfQ2xzLklELCAvLyBidXR0b249Ym90dG9t5pe2IG1hc3RlcueahGNsc19pZFxuXHRcdCAgICBcdCAgICAgICAgICAgIC8vb2JqX2lkOiAnJyAgLy8gYnV0dG9uPWJvdHRvbeaXtiBtYXN0ZXLnmoRvYmpfaWRcblx0XHQgICAgXHQgICAgICAgIH1cblx0XHQgICAgXHQgICAgfVxuXHRcdCAgICBcdH1cblx0XHQgICAgXHR2YXIgaW5wdXRwYXJhbWV0ZXIgPSAnJztcblx0XHQgICAgXHR2YXIgZ2xvYmFsX2F0dHIgPSAnJztcblx0XHQgICAgXHRcblx0XHQgICAgXHR2YXIgZGF0YUluZm8gPSB7XG5cdFx0ICAgICAgICAgICAgZWR0eXBlOiBpbmZvLmVkdHlwZSwgZXZlbnRpZDogaW5mby5ldmVudGlkLCBwcm9qZWN0aWQ6IGluZm8ucHJvamVjdGlkLFxuXHRcdCAgICAgICAgICAgIHJjbHNpZDogaW5mby5yY2xzaWQsIHJvYmppZDogaW5mby5yb2JqaWQsIHVzZXJsb2dpbjogaW5mby51c2VybG9naW4sIGNsc2lkOiBpbmZvLmNsc2lkLCBvYmppZDogaW5mby5vYmppZCxcblx0XHQgICAgICAgICAgICBhdHRyOiBKU09OLnN0cmluZ2lmeShpbmZvLmF0dHIpLCBleHRpbmZvOiBKU09OLnN0cmluZ2lmeShwYXJhbSksIGlucHV0cGFyYW1ldGVyOiBpbnB1dHBhcmFtZXRlciwgZ2xvYmFsX2F0dHI6IGdsb2JhbF9hdHRyXG5cdFx0ICAgICAgICB9XG5cdFx0ICAgIFx0Y29uc29sZS5sb2coZGF0YUluZm8pO1xuXHRcdCAgICBcdHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdEYXRhT2JqUnVuQ3VzdG9tRXZlbnRJbmZvJyxkYXRhSW5mbykudGhlbihzdWNjZXNzPT57XG5cdFx0ICAgIFx0XHRjb25zb2xlLmxvZyhzdWNjZXNzKTtcblx0XHQgICAgXHRcdGlmIChzdWNjZXNzLmNvZGU9PScwMDAwMCcpIHtcblx0XHQgICAgXHRcdFx0dmFyIGRhdGEgPSBKU09OLnBhcnNlKHN1Y2Nlc3MuZGF0YSk7XG5cdFx0ICAgIFx0XHRcdHZhciBhY3Rpb25saXN0ID0gZGF0YS5hY3Rpb247XG5cdFx0ICAgIFx0XHRcdGlmIChhY3Rpb25saXN0KSB7XG5cdFx0ICAgIFx0XHRcdCAgICBmb3IgKHZhciBqID0gMDsgaiA8IGFjdGlvbmxpc3QubGVuZ3RoOyBqKyspIHtcblx0XHQgICAgXHRcdFx0ICAgICAgICB2YXIgYWN0aW9uID0gYWN0aW9ubGlzdFtqXVxuXHRcdCAgICBcdFx0XHQgICAgICAgIHZhciBhY3Rpb25fdHlwZSA9IGFjdGlvbi5hY3Rpb25fdHlwZTtcblx0XHQgICAgXHRcdFx0ICAgICAgICB2YXIgdmFsdWUgPSBhY3Rpb24udmFsdWU7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgaWYgKGFjdGlvbl90eXBlID09ICdzZXRfZGxnX2F0dHInKSB7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgdmFyIHZhbCA9IHZhbHVlO1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJykge1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgICAgIHZhbCA9IEpTT04ucGFyc2UodmFsdWUpO1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgfVxuXHRcdCAgICBcdFx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKHZhbCk7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbC5sZW5ndGg7IGkrKykge1xuXHRcdCAgICBcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgYSA9IDA7IGEgPCB0aGlzLiRkYXRhLnN1YkNsYXNzQXR0ckxpc3QubGVuZ3RoOyBhKyspIHtcblx0XHQgICAgXHRcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgbCA9IDA7IGwgPCB0aGlzLiRkYXRhLnN1YkNsYXNzQXR0ckxpc3RbYV0uQXR0ci5sZW5ndGg7IGwrKykge1xuXHRcdCAgICBcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBjYSA9IHRoaXMuJGRhdGEuc3ViQ2xhc3NBdHRyTGlzdFthXS5BdHRyW2xdO1xuXHRcdCAgICBcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICh2YWxbaV0uYXR0ciAgPT0gY2EuTmFtZSkge1xuXHRcdCAgICBcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoY2EuVHlwZT09J+Wtl+WFuCcgfHwgY2EuVHlwZT09J+Wtl+WFuC3lrZfnrKbkuLInIHx8IGNhLlR5cGU9PSflrZflhbgt5pW05pWwJyl7XG5cdFx0ICAgIFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBkaWN0SXRlbUxpc3Q9W107XG5cdFx0ICAgIFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvcih2YXIgZCBpbiB2YWxbaV0uY2hvaWNlX2xpc3Qpe1xuXHRcdCAgICBcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciB2YWwgPXZhbFtpXS5jaG9pY2VfbGlzdFtkXTtcblx0XHQgICAgXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkaWN0SXRlbUxpc3QucHVzaCh7XCJDTl9TX05BTUVcIjp2YWwsXCJOYW1lXCI6dmFsLFwibGFiZWxcIjp2YWwsXCJ2YWx1ZVwiOnZhbH0pO1xuXHRcdCAgICBcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFxuXHRcdCAgICBcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0ICAgIFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhLmRpY3RpdGVtID0gZGljdEl0ZW1MaXN0O1xuXHRcdCAgICBcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBhdHRyW2pdLmRpY3RpdGVtID0gdmFsW2ldLmNob2ljZV9saXN0O1xuXHRcdCAgICBcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fWVsc2V7XG5cdFx0ICAgIFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGNhLnZhbHVlID0gdmFsW2ldLnZhbHVlO1xuXHRcdCAgICBcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdCAgICBcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHQgICAgXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdCAgICBcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdCAgICBcdFx0XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICAgICAgdmFyIGxlbmd0aCA9IDA7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5maWx0ZXIoZnVuY3Rpb24gKHMpIHtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbFtpXS5hdHRyID09IHMuYXR0clxuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgICAgIH0pLmxlbmd0aCkge1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGggPSAxO1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5wdXNoKHZhbFtpXSk7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICAgICAgfVxuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgICAgIGlmIChsZW5ndGggPT0gMCkge1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLmxlbmd0aDsgaisrKSB7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy4kZGF0YS5yZWZkYXRhc3RvcmVbal0uYXR0ciA9PSB2YWxbaV0uYXR0cikge1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlW2pdLnZhbHVlID0gdmFsW2ldLnZhbHVlO1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICB9XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICAgICAgfVxuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgfVxuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICB9XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgfVxuXHRcdCAgICBcdFx0XHQgICAgICAgIGlmIChhY3Rpb25fdHlwZSA9PSAnb3Blbl9zZWxlY3RfdXNlcmRsZycpIHtcblx0XHQgICAgXHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor682LjJcIixjb250ZW50Olwib3Blbl9zZWxlY3RfdXNlcmRsZ+i/meS4qmFjdGlvbl90eXBl6L+Y5pyq5aSE55CG77yBXCIsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgfVxuXHRcdCAgICBcdFx0XHQgICAgfVxuXHRcdCAgICBcdFx0XHR9XG5cdFx0ICAgIFx0XHRcdFxuXHRcdCAgICBcdFx0fWVsc2V7XG5cdFx0ICAgIFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vNlwiLGNvbnRlbnQ6c3VjY2Vzcy5tc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0ICAgIFx0XHR9XG5cdFx0ICAgIFx0fSkuY2F0Y2goZXg9Pntcblx0XHQgICAgXHRcdC8vIGNvbnNvbGUubG9nKGV4KTtcblx0XHQgICAgXHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vNi4xXCIsY29udGVudDpleC5lcnJNc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0ICAgIFx0fSk7XG5cdFx0ICAgIH0sXG5cdFx0ICAgIHNjYW5fRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGluZm8sZGF0YV9hdHRyKXtcblx0XHQgICAgXHR2YXIgJHRoaXMgPSB0aGlzO1xuXHRcdCAgICBcdHZhciBlbnZpcm9tZW50ID0ge1xuXHRcdCAgICBcdCAgICAnZnVuY3Rpb24nOiAnMzAwMCcsIC8vIOWKn+iDveeCuee8luWPt1xuXHRcdCAgICBcdCAgICBjbHNfaWQ6ICdNQk9YJywvL3RoaXMuJGRhdGEucGFyYW0uU3ViX0Nscy5JRCwgICAgIC8vIOWKn+iDveeCueS7juaVsOaNruexu+agh+ivhlxuXHRcdCAgICBcdCAgICAnYnV0dG9uJzogJ3RvcCcsICAgLy8gdG9wL2JvdHRvbVxuXHRcdCAgICBcdCAgICBidXR0b25fbmFtZTogJ+aWsOWinicsXG5cdFx0ICAgIFx0ICAgIG1hc3Rlcjoge1xuXHRcdCAgICBcdCAgICAgICAgY2xzX2lkOiAnTUJPWCcsLy90aGlzLiRkYXRhLnBhcmFtLlN1Yl9DbHMuSUQsIC8vIGJ1dHRvbj1ib3R0b23ml7YgbWFzdGVy55qEY2xzX2lkXG5cdFx0XHRcdFx0XHRhdHRyOiBpbmZvLm1hc3RfYXR0ciAvL+S4u+aVsOaNruexu+WxnuaAp1xuXHRcdCAgICBcdCAgICAgICAgLy9vYmpfaWQ6ICcnICAvLyBidXR0b249Ym90dG9t5pe2IG1hc3RlcueahG9ial9pZFxuXHRcdCAgICBcdCAgICB9XG5cdFx0ICAgIFx0fTtcblx0XHQgICAgXHRlbnZpcm9tZW50LmVkaXRfZGxnID0ge1xuXHRcdFx0XHRcdHR5cGU6ICdzbWFsbCcsLy/lsI/nqpflj6Ncblx0XHQgICAgXHQgICAgY2xhc3NfaWQ6ICdNQk9YJywvL3RoaXMuJGRhdGEucGFyYW0uU3ViX0Nscy5JRCwvL+W9k+WJjeaVsOaNruexu2lkXG5cdFx0ICAgIFx0fVxuXHRcdCAgICBcdGlmIChkYXRhX2F0dHIpIHtcblx0XHQgICAgXHQgICAgZW52aXJvbWVudC5lZGl0X2RsZy5mb3JtX2NvbnRyb2wgPSB7Ly/miYDlsZ7nmoTooajljZXmjqfku7Zcblx0XHQgICAgXHQgICAgICAgIG5hbWU6IGRhdGFfYXR0ci5OYW1lLC8v5a2X5q615bGe5oCnXG5cdFx0ICAgIFx0ICAgICAgICB0ZXh0OiBkYXRhX2F0dHIuRGlzcE5hbWUsLy/mmL7npLrmlofmnKxcblx0XHQgICAgXHQgICAgICAgIGdyb3VwX25hbWU6IGRhdGFfYXR0ci5Hcm91cE5hbWUsLy/lsZ7mgKfnu4Rcblx0XHQgICAgXHQgICAgICAgIHR5cGU6IGRhdGFfYXR0ci5UeXBlLC8v5a2X5q6157G75Z6LXG5cdFx0ICAgIFx0ICAgICAgICByZWFkb25seTogZGF0YV9hdHRyLlJlYWRPbmx5LC8v5piv5ZCm5Y+q6K+7XG5cdFx0ICAgIFx0ICAgICAgICBidXR0b25faW1nOiBkYXRhX2F0dHIuYnV0dG9uX2ltZywvL+W8leeUqOaMiemSrueahOWbvuagh1xuXHRcdCAgICBcdCAgICAgICAgYnV0dG9uX3Rvb2x0aXA6IGRhdGFfYXR0ci5idXR0b25fdG9vbHRpcC8v5byV55So5oyJ6ZKu55qEdG9vbHRpcFxuXHRcdCAgICBcdCAgICB9XG5cdFx0ICAgIFx0fVxuXHRcdCAgICBcdFxuXHRcdCAgICBcdHZhciBkYXRhSW5mbyA9IHtcblx0XHQgICAgICAgICAgICBlZHR5cGU6IGluZm8uZWR0eXBlLCBldmVudGlkOiBpbmZvLmV2ZW50aWQsIHByb2plY3RpZDogaW5mby5wcm9qZWN0aWQucmVwbGFjZSgneycsJycpLnJlcGxhY2UoJ30nLCcnKSxcblx0XHQgICAgICAgICAgICByY2xzaWQ6IGluZm8ucmNsc2lkLCByb2JqaWQ6IGluZm8ucm9iamlkLCB1c2VybG9naW46IGluZm8udXNlcmxvZ2luLCBjbHNpZDogaW5mby5jbHNpZCwgb2JqaWQ6IGluZm8ub2JqaWQsXG5cdFx0ICAgICAgICAgICAgYXR0cjogSlNPTi5zdHJpbmdpZnkoaW5mby5hdHRyKSwgZXh0aW5mbzogSlNPTi5zdHJpbmdpZnkoZW52aXJvbWVudCksIGlucHV0cGFyYW1ldGVyOiBKU09OLnN0cmluZ2lmeShpbmZvLmlucHV0UGFyYW10ZXIpLCBnbG9iYWxfYXR0cjogSlNPTi5zdHJpbmdpZnkodGhpcy4kZGF0YS5nbG9iYWxfYXR0cilcblx0XHQgICAgICAgIH1cblx0XHQgICAgXHRjb25zb2xlLmxvZyhkYXRhSW5mbyk7XG5cdFx0ICAgIFx0dGhpcy4kc3RvcmUuZGlzcGF0Y2goJ0RhdGFPYmpSdW5DdXN0b21FdmVudEluZm8nLGRhdGFJbmZvKS50aGVuKHN1Y2Nlc3M9Pntcblx0XHQgICAgXHRcdGNvbnNvbGUubG9nKHN1Y2Nlc3MpO1xuXHRcdCAgICBcdFx0aWYgKHN1Y2Nlc3MuY29kZT09JzAwMDAwJykge1xuXHRcdCAgICBcdFx0XHR2YXIgZGF0YSA9IEpTT04ucGFyc2Uoc3VjY2Vzcy5kYXRhKTtcblx0XHQgICAgXHRcdFx0dmFyIGFjdGlvbmxpc3QgPSBkYXRhLmFjdGlvbjtcblx0XHQgICAgXHRcdFx0XG5cdFx0ICAgIFx0XHRcdGlmIChhY3Rpb25saXN0KSB7XG5cdFx0ICAgIFx0XHRcdFx0Y29uc29sZS5sb2coYWN0aW9ubGlzdCk7XG5cdFx0ICAgIFx0XHRcdCAgICBmb3IgKHZhciBpaSA9IDA7IGlpIDwgYWN0aW9ubGlzdC5sZW5ndGg7IGlpKyspIHtcblx0XHQgICAgXHRcdFx0ICAgICAgICB2YXIgYWN0aW9uID0gYWN0aW9ubGlzdFtpaV07XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgaWYgKGFjdGlvbi5hY3Rpb25fdHlwZSA9PSAnc2V0X2RsZ19hdHRyJykge1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICB2YXIgcmVzdWx0ID0gYWN0aW9uLnZhbHVlO1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdC5sZW5ndGg7IGkrKykge1xuXHRcdCAgICBcdFx0XHRcdFx0XHRcdGlmIChyZXN1bHRbaV0uY2hvaWNlX2xpc3QpIHtcblx0XHQgICAgXHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIHMgPSAwOyBzIDwgJHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0Lmxlbmd0aDsgcysrKSB7XG5cdFx0ICAgIFx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGMgPSAwOyBjIDwgJHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0W3NdLnN1YkNsYXNzQXR0ckxpc3QubGVuZ3RoOyBjKyspIHtcblx0XHQgICAgXHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgYXR0ciA9ICR0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdFtzXS5zdWJDbGFzc0F0dHJMaXN0W2NdLkF0dHI7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGF0dHJbal0uTmFtZT09cmVzdWx0W2ldLmF0dHIpe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoYXR0cltqXS5UeXBlPT0n5a2X5YW4JyB8fCBhdHRyW2pdLlR5cGU9PSflrZflhbgt5a2X56ym5LiyJyB8fCBhdHRyW2pdLlR5cGU9PSflrZflhbgt5pW05pWwJyl7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBkaWN0SXRlbUxpc3Q9W107XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvcih2YXIgZCBpbiByZXN1bHRbaV0uY2hvaWNlX2xpc3Qpe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciB2YWwgPXJlc3VsdFtpXS5jaG9pY2VfbGlzdFtkXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkaWN0SXRlbUxpc3QucHVzaCh7XCJDTl9TX05BTUVcIjp2YWwsXCJOYW1lXCI6dmFsLFwibGFiZWxcIjp2YWwsXCJ2YWx1ZVwiOnZhbH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGF0dHJbal0uZGljdGl0ZW0gPSBkaWN0SXRlbUxpc3Q7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGF0dHJbal0uZGljdGl0ZW0gPSByZXN1bHRbaV0uY2hvaWNlX2xpc3Q7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0ICAgIFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICB9XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICBmb3IgKHZhciBzID0gMDsgcyA8ICR0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdC5sZW5ndGg7IHMrKykge1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgXHRmb3IgKHZhciBjID0gMDsgYyA8ICR0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdFtzXS5zdWJDbGFzc0F0dHJMaXN0Lmxlbmd0aDsgYysrKSB7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICBcdFx0dmFyIGF0dHIgPSAkdGhpcy4kZGF0YS5zdWJQYW5lbExpc3Rbc10uc3ViQ2xhc3NBdHRyTGlzdFtjXS5BdHRyO1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgXHRcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgXHRcdFx0Y29uc29sZS5sb2coYXR0cltqXS5OYW1lKyc9PScrcmVzdWx0W2ldLmF0dHIpO1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgXHRcdFx0aWYoYXR0cltqXS5OYW1lPT1yZXN1bHRbaV0uYXR0cil7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICBcdFx0XHRcdGF0dHJbal0uVmFsdWUgPSByZXN1bHRbaV0udmFsdWU7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICBcdFx0XHR9XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICBcdFx0fVxuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgXHR9XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICB9XG5cdFx0ICAgIFx0XHRcdFx0XHRcdFx0dmFyIGxlbmd0aCA9IDA7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICBpZiAoISR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5maWx0ZXIoZnVuY3Rpb24gKHMpIHtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0W2ldLmF0dHIgPT0gcy5hdHRyXG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICB9KS5sZW5ndGgpIHtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgICAgICBsZW5ndGggPSAxO1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgICAgICR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5wdXNoKHJlc3VsdFtpXSk7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICB9XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICBpZiAobGVuZ3RoID09IDApIHtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8ICR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5sZW5ndGg7IGorKykge1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlW2pdLmF0dHIgPT0gcmVzdWx0W2ldLmF0dHIpIHtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZVtqXS52YWx1ZSA9IHJlc3VsdFtpXS52YWx1ZTtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgfVxuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgICAgIH1cblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgIH1cblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgfVxuXHRcdCAgICBcdFx0XHQgICAgICAgIH0gZWxzZSBpZiAoYWN0aW9uLmFjdGlvbl90eXBlID09ICdzZXRfZ2xvYmFsX2F0dHInKSB7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICR0aGlzLiRhY3Rpb250ciA9IGFjdGlvbi52YWx1ZSB8fCBbXTtcblx0XHQgICAgXHRcdFx0ICAgICAgICB9IGVsc2UgaWYgKGFjdGlvbi5hY3Rpb25fdHlwZSA9PSAnb3Blbl9jb21tb25fZGxnJykgeyAgLy/miZPlvIDkvqfmu5HlvLnmoYZcblx0XHRcdFx0XHRcdFx0XHRcdHZhciAkdGhpcyA9IHRoaXM7XG5cdFx0XHRcdFx0XHQgICAgICAgICAgICBpZihhY3Rpb24udmFsdWUuY29tbW9uX2RsZ19pZCA9PSAnY2hlY2tfbGlzdCcpe1xuXHRcdFx0XHRcdFx0XHRcdFx0ICAgJHRoaXMuJGRhdGEuY2hlY2tfbGlzdD0gYWN0aW9uLnZhbHVlLmNvbmZpZztcblx0XHRcdFx0XHRcdFx0XHRcdCAgIGlmKGFjdGlvbi52YWx1ZS5jb25maWcuYXBwZWFyX3N0eWxlID09ICdzaWRlc2xpcCcpIC8v5Yik5pat5piv5ZCm5piv5L6n5ruRXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEucG9wdXBUeXBlID0gJ3JpZ2h0Jztcblx0XHRcdFx0XHRcdFx0XHRcdCAgIGVsc2Vcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5wb3B1cFR5cGUgPSAnY2VudGVyJ1xuXHRcdFx0XHRcdFx0XHRcdFx0ICAgLy8gb3BlbiDmlrnms5XkvKDlhaXlj4LmlbAg562J5ZCM5ZyoIHVuaS1wb3B1cCDnu4Tku7bkuIrnu5HlrpogdHlwZeWxnuaAp1xuXHRcdFx0XHRcdFx0XHRcdFx0ICAgJHRoaXMuJHJlZnMucG9wdXAub3BlbigkdGhpcy4kZGF0YS5wb3B1cFR5cGUpO1xuXHRcdFx0XHRcdFx0XHRcdCAgICB9XG5cdFx0XHRcdFx0XHQgICAgICAgIH0gZWxzZSBpZiAoYWN0aW9uLmFjdGlvbl90eXBlID09ICdhZGRfc3ViY2xzX3BhbmVsJykgeyAvL+S4u+S7juaVsOaNruexu+aJq+eggeafpeivouaVsOaNrlxuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICB2YXIgcmVzdWx0ID0gYWN0aW9uLnZhbHVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyICR0aGlzID0gdGhpcztcblx0XHRcdFx0XHRcdFx0XHRcdGxldCBsaXN0XzEgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuJGRhdGEuc3ViQ2xhc3NBdHRyTGlzdCkpO1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIHNjYW5Db2RlVmFsID0gJHRoaXMuJGRhdGEuc2NhbkNvZGVWYWw7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZihpbmZvLmlucHV0UGFyYW10ZXJbMF0uYXR0cil7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGluZm8uaW5wdXRQYXJhbXRlclswXS5hdHRyPT1cIm1hc3RfaW5wdXRfMzAzN1wiKSAvL+WIpOaWreaYr+S4u+aVsOaNruexu+aJq+eggeafpeivouaVsOaNrlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHNjYW5Db2RlVmFsID0gXCJtYXN0X2lucHV0XzMwMzctXCIraWk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5zdWJQYW5lbExpc3QucHVzaCh7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHNjYW5Db2RlVmFsOnNjYW5Db2RlVmFsLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRzdWJDbGFzc0F0dHI6bGlzdF8xXG5cdFx0XHRcdFx0XHRcdFx0XHR9KTsgXG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdWx0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIHMgPSAwOyBzIDwgJHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0Lmxlbmd0aDsgcysrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoJHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0W3NdLnNjYW5Db2RlVmFsID09IHNjYW5Db2RlVmFsKXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKHJlc3VsdFtpXS5hdHRyPT1cIlNfSURcIilcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0W3NdLk9iaklEPXJlc3VsdFtpXS52YWx1ZTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBfc3ViQ2xhc3NBdHRyID0gJHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0W3NdLnN1YkNsYXNzQXR0cjtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGMgPSAwOyBjIDwgX3N1YkNsYXNzQXR0ci5sZW5ndGg7IGMrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgYXR0ciA9IF9zdWJDbGFzc0F0dHJbY10uQXR0cjtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coYXR0cltqXS5OYW1lKyc9PScrcmVzdWx0W2ldLmF0dHIpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGF0dHJbal0uTmFtZT09cmVzdWx0W2ldLmF0dHIpe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXR0cltqXS5WYWx1ZSA9IHJlc3VsdFtpXS52YWx1ZTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gJHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0W3NdLnN1YkNsYXNzQXR0cj1saXN0XzE7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBsZW5ndGggPSAwO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoISR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5maWx0ZXIoZnVuY3Rpb24gKHMpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgIHJldHVybiByZXN1bHRbaV0uYXR0ciA9PSBzLmF0dHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fSkubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgICBsZW5ndGggPSAxO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHQgICAgJHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLnB1c2gocmVzdWx0W2ldKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAobGVuZ3RoID09IDApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgIGZvciAodmFyIGogPSAwOyBqIDwgJHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgICAgICAgaWYgKCR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZVtqXS5hdHRyID09IHJlc3VsdFtpXS5hdHRyKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgICAgICAgICAgICR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZVtqXS52YWx1ZSA9IHJlc3VsdFtpXS52YWx1ZTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgICAgICB9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgICB9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHQgICAgXHRcdFx0ICAgICAgICB9XG5cdFx0XHRcdFx0XHRcdFx0XG5cdFx0ICAgIFx0XHRcdCAgICB9XG5cdFx0ICAgIFx0XHRcdH1cblx0XHQgICAgXHRcdFx0XG5cdFx0ICAgIFx0XHRcdGlmIChkYXRhLnJlc3VsdCkge1xuXHRcdFx0XHRcdFx0XHRsZXQgbGlzdF8xID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLiRkYXRhLnN1YkNsYXNzQXR0ckxpc3QpKTtcblx0XHRcdFx0XHRcdFx0dmFyIHNjYW5Db2RlVmFsID0gJHRoaXMuJGRhdGEuc2NhbkNvZGVWYWw7XG5cdFx0XHRcdFx0XHRcdGlmKGluZm8uaW5wdXRQYXJhbXRlclswXS5hdHRyPT1cIm1hc3RfaW5wdXRfMzAzN1wiKVxuXHRcdFx0XHRcdFx0XHRcdHNjYW5Db2RlVmFsID0gXCJtYXN0X2lucHV0XzMwMzctXCIraWk7XG5cdFx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdC5wdXNoKHtcblx0XHRcdFx0XHRcdFx0XHRzY2FuQ29kZVZhbDpzY2FuQ29kZVZhbCxcblx0XHRcdFx0XHRcdFx0XHRzdWJDbGFzc0F0dHI6bGlzdF8xXG5cdFx0XHRcdFx0XHRcdH0pOyBcblx0XHQgICAgXHRcdFx0ICAgIHZhciByZXN1bHQgPSBkYXRhLnJlc3VsdDtcblx0XHQgICAgXHRcdFx0ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdWx0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgZm9yICh2YXIgcyA9IDA7IHMgPCAkdGhpcy4kZGF0YS5zdWJQYW5lbExpc3QubGVuZ3RoOyBzKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmKCR0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdFtzXS5zY2FuQ29kZVZhbCA9PSBzY2FuQ29kZVZhbCl7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmKHJlc3VsdFtpXS5hdHRyPT1cIlNfSURcIilcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5zdWJQYW5lbExpc3Rbc10uT2JqSUQ9cmVzdWx0W2ldLnZhbHVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgX3N1YkNsYXNzQXR0ciA9ICR0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdFtzXS5zdWJDbGFzc0F0dHI7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGMgPSAwOyBjIDwgX3N1YkNsYXNzQXR0ci5sZW5ndGg7IGMrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBhdHRyID0gX3N1YkNsYXNzQXR0cltjXS5BdHRyO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coYXR0cltqXS5OYW1lKyc9PScrcmVzdWx0W2ldLmF0dHIpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoYXR0cltqXS5OYW1lPT1yZXN1bHRbaV0uYXR0cil7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGF0dHJbal0uVmFsdWUgPSByZXN1bHRbaV0udmFsdWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgXHR9XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgfVxuXHRcdCAgICBcdFx0XHRcdFx0XG5cdFx0ICAgIFx0XHRcdFx0XHR2YXIgbGVuZ3RoID0gMDtcblx0XHQgICAgXHRcdFx0ICAgICAgICBpZiAoISR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5maWx0ZXIoZnVuY3Rpb24gKHMpIHtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFtpXS5hdHRyID09IHMuYXR0clxuXHRcdCAgICBcdFx0XHQgICAgICAgIH0pLmxlbmd0aCkge1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICBsZW5ndGggPSAxO1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUucHVzaChyZXN1bHRbaV0pO1xuXHRcdCAgICBcdFx0XHQgICAgICAgIH1cblx0XHQgICAgXHRcdFx0ICAgICAgICBpZiAobGVuZ3RoID09IDApIHtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCAkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUubGVuZ3RoOyBqKyspIHtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgIGlmICgkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmVbal0uYXR0ciA9PSByZXN1bHRbaV0uYXR0cikge1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgICAgICR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZVtqXS52YWx1ZSA9IHJlc3VsdFtpXS52YWx1ZTtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgIH1cblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgfVxuXHRcdCAgICBcdFx0XHQgICAgICAgIH1cblx0XHQgICAgXHRcdFx0ICAgIH1cblx0XHQgICAgXHRcdFx0fVxuXHRcdCAgICBcdFx0fWVsc2V7XG5cdFx0ICAgIFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vN1wiLGNvbnRlbnQ6c3VjY2Vzcy5tc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0ICAgIFx0XHR9XG5cdFx0ICAgIFx0fSkuY2F0Y2goZXg9Pntcblx0XHQgICAgXHRcdC8vIGNvbnNvbGUubG9nKGV4KTtcblx0XHQgICAgXHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vNy4xXCIsY29udGVudDpleC5lcnJNc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0ICAgIFx0fSk7XG5cdFx0ICAgIH0sXG5cdFx0ICAgIHNjYW5fT0tEYXRhT2JqUnVuQ3VzdG9tRXZlbnQoZXZlbnRJRCl7XG5cdFx0XHRcdHVuaS5zaG93TG9hZGluZyh7XG5cdFx0XHRcdFx0dGl0bGU6XCLliqDovb3kuK0uLi5cIixcblx0XHRcdFx0XHRtYXNrOnRydWVcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHZhciAkdGhpcyA9IHRoaXM7XG5cdFx0XHRcdHZhciByZXE9W107XG5cdFx0XHRcdHZhciBhdHRybGlzdCA9ICR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3Q7XG5cdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmxpc3QubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHR2YXIgYXR0ciA9IGF0dHJsaXN0W2ldLkF0dHI7XG5cdFx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0XHR2YXIgYXIgPSBhdHRyW2pdO1xuXHRcdFx0XHRcdFx0aWYoYXIuVmFsdWU9PSfor7fpgInmi6knIHx8IGFyLlZhbHVlPT0n4oCU4oCU6K+36YCJ5oup4oCU4oCUJykgYXIuVmFsdWU9Jyc7XG5cdFx0XHRcdFx0XHRpZihhci5UeXBlPT0n5byV55So5a+56LGhKOWkmuS4qiknKVxuXHRcdFx0XHRcdFx0XHRpZihhci5WYWx1ZT09J+ivtycpIGFyLlZhbHVlPScnO1xuXHRcdFx0XHRcdFx0aWYoYXIuVHlwZT09J+W8leeUqOS6uuWRmCcgfHwgYXIuVHlwZT09J+W8leeUqOmhueebricpXG5cdFx0XHRcdFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsdWU6IGFyLlZhbElEID9hci5WYWxJRCA6JycgfSk7XG5cdFx0XHRcdFx0XHRlbHNlIGlmKGFyLlR5cGU9PSfluIPlsJTlgLwnKVxuXHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWx1ZT8nMSc6JzAnfSk7XG5cdFx0XHRcdFx0XHRlbHNlIGlmKGFyLlR5cGU9PSflrZflhbgnIHx8IGFyLlR5cGU9PSflrZflhbgt5a2X56ym5LiyJyB8fCBhci5UeXBlPT0n5a2X5YW4LeaVtOaVsCcpe1xuXHRcdFx0XHRcdFx0XHRpZihhci5zZWxlY3Q9PXRydWUpeyAvL+WIpOaWreS4i+aLieaYr+WQpuWkmumAiVxuXHRcdFx0XHRcdFx0XHRcdHZhciB2YWxTdHIgPVwiXCI7XG5cdFx0XHRcdFx0XHRcdFx0Zm9yKHZhciB2IGluIGFyLlZhbHVlKXtcblx0XHRcdFx0XHRcdFx0XHRcdGlmKHZhbFN0cilcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsU3RyKz1cIjtcIjtcblx0XHRcdFx0XHRcdFx0XHRcdHZhbFN0cis9YXIuVmFsdWVbdl07XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsdWU6IHZhbFN0cn0pO1xuXHRcdFx0XHRcdFx0XHR9ZWxzZVxuXHRcdFx0XHRcdFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsdWU6IGFyLlZhbHVlfSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsdWU6IGFyLlZhbHVlID9hci5WYWx1ZSA6Jyd9KTtcblx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRpZiAoYXIubm90ZW1wdHkgPT0gdHJ1ZSAmJiAhYXIuVmFsdWUpIHtcblx0XHRcdFx0XHRcdC8vIGlmKGFyLk5vdEVtcHR5PT0nMScpe1xuXHRcdFx0XHRcdFx0XHR1bmkuaGlkZUxvYWRpbmcoKTtcblx0XHRcdFx0XHRcdFx0Ly8gdW5pLnNob3dUb2FzdCh7dGl0bGU6YXIuRGlzcE5hbWUrJ+S4jeiDveS4uuepuu+8gScsaWNvbjpcInN1Y2Nlc3NcIixkdXJhdGlvbjozMDAwfSk7XG5cdFx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi5o+Q56S6XCIsY29udGVudDphci5EaXNwTmFtZSsn5LiN6IO95Li656m677yBJyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHR2YXIgb2JqZWN0cz1bXTtcblx0XHRcdFx0dmFyIHN1YlBhbmVsTGlzdCA9ICR0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdDtcblx0XHRcdFx0Zm9yICh2YXIgcyA9IDA7IHMgPCBzdWJQYW5lbExpc3QubGVuZ3RoOyBzKyspIHtcblx0XHRcdFx0XHR2YXIgc3ViX3JlcT1bXTtcblx0XHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHN1YlBhbmVsTGlzdFtzXS5zdWJDbGFzc0F0dHIubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRcdHZhciBhdHRyID0gc3ViUGFuZWxMaXN0W3NdLnN1YkNsYXNzQXR0cltpXS5BdHRyO1xuXHRcdFx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0XHRcdHZhciBhciA9IGF0dHJbal07XG5cdFx0XHRcdFx0XHRcdGlmKGFyLlZhbHVlPT0n6K+36YCJ5oupJyB8fCBhci5WYWx1ZT09J+KAlOKAlOivt+mAieaLqeKAlOKAlCcpIGFyLlZhbHVlPScnO1xuXHRcdFx0XHRcdFx0XHRpZihhci5UeXBlPT0n5byV55So5a+56LGhKOWkmuS4qiknKVxuXHRcdFx0XHRcdFx0XHRcdGlmKGFyLlZhbHVlPT0n6K+3JykgYXIuVmFsdWU9Jyc7XG5cdFx0XHRcdFx0XHRcdGlmKGFyLlR5cGU9PSflvJXnlKjkurrlkZgnIHx8IGFyLlR5cGU9PSflvJXnlKjpobnnm64nKVxuXHRcdFx0XHRcdFx0XHRcdHN1Yl9yZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWxJRCA/YXIuVmFsSUQgOicnIH0pO1xuXHRcdFx0XHRcdFx0XHRlbHNlIGlmKGFyLlR5cGU9PSfluIPlsJTlgLwnKVxuXHRcdFx0XHRcdFx0XHRcdHN1Yl9yZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWx1ZT8nMSc6JzAnfSk7XG5cdFx0XHRcdFx0XHRcdGVsc2UgaWYoYXIuVHlwZT09J+Wtl+WFuCcgfHwgYXIuVHlwZT09J+Wtl+WFuC3lrZfnrKbkuLInIHx8IGFyLlR5cGU9PSflrZflhbgt5pW05pWwJyl7XG5cdFx0XHRcdFx0XHRcdFx0aWYoYXIuc2VsZWN0PT10cnVlKXsgLy/liKTmlq3kuIvmi4nmmK/lkKblpJrpgIlcblx0XHRcdFx0XHRcdFx0XHRcdHZhciB2YWxTdHIgPVwiXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHRmb3IodmFyIHYgaW4gYXIuVmFsdWUpe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZih2YWxTdHIpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsU3RyKz1cIjtcIjtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsU3RyKz1hci5WYWx1ZVt2XTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdHN1Yl9yZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiB2YWxTdHJ9KTtcblx0XHRcdFx0XHRcdFx0XHR9ZWxzZVxuXHRcdFx0XHRcdFx0XHRcdFx0c3ViX3JlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsdWU6IGFyLlZhbHVlfSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdFx0XHRcdHN1Yl9yZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWx1ZSA/YXIuVmFsdWUgOicnfSk7XG5cdFx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdGlmIChhci5ub3RlbXB0eSA9PSB0cnVlICYmICFhci5WYWx1ZSkge1xuXHRcdFx0XHRcdFx0XHQvLyBpZihhci5Ob3RFbXB0eT09JzEnKXtcblx0XHRcdFx0XHRcdFx0XHR1bmkuaGlkZUxvYWRpbmcoKTtcblx0XHRcdFx0XHRcdFx0XHQvLyB1bmkuc2hvd1RvYXN0KHt0aXRsZTphci5EaXNwTmFtZSsn5LiN6IO95Li656m677yBJyxpY29uOlwic3VjY2Vzc1wiLGR1cmF0aW9uOjMwMDB9KTtcblx0XHRcdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIuaPkOekulwiLGNvbnRlbnQ6YXIuRGlzcE5hbWUrJ+S4jeiDveS4uuepuu+8gScsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdG9iamVjdHMucHVzaCh7XG5cdFx0XHRcdFx0XHRvYmpfaWQ6c3ViUGFuZWxMaXN0W3NdLnNjYW5Db2RlVmFsLFxuXHRcdFx0XHRcdFx0b2JqX2F0dHJzOnN1Yl9yZXFcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0XHR2YXIgZGF0YUpzb249e1xuXHRcdFx0XHRcdG1hc3Rlcl9jbHM6e1xuXHRcdFx0XHRcdFx0Y2xzX25hbWU6J01CT1gnLC8vJHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5OYW1lLFxuXHRcdFx0XHRcdFx0b2JqX2F0dHJzOnJlcVxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0aW5wdXRfMzAzNzokdGhpcy4kZGF0YS5zY2FuQ29kZVZhbCwgICAvL+aJq+eggeWGheWuuVxuXHRcdFx0XHRcdG9wX3R5cGU6JHRoaXMuJGRhdGEucGFyYW0uT3BlcmF0aW9uVHlwZSwgLy/kvZzkuJrnsbvlnovlrprkuYlcblx0XHRcdFx0XHRzdWJfY2xzOntcblx0XHRcdFx0XHRcdGNsc19uYW1lOidNQk9YJywvLyR0aGlzLiRkYXRhLnBhcmFtLlN1Yl9DbHMuTmFtZSxcblx0XHRcdFx0XHRcdG9iamVjdHM6b2JqZWN0c1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTtcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoZGF0YUpzb24pKTtcblx0XHQgICAgXHR2YXIgZGF0YUluZm8gPSB7XG5cdFx0ICAgICAgICAgICAgZWR0eXBlOiBcIjdcIiwgZXZlbnRpZDogZXZlbnRJRCwgcHJvamVjdGlkOiAnJyxyY2xzaWQ6ICcnLCByb2JqaWQ6ICcnLCB1c2VybG9naW46ICcnLCBcblx0XHRcdFx0XHRjbHNpZDogJ01CT1gnLCBvYmppZDogJycsYXR0cjogSlNPTi5zdHJpbmdpZnkoW10pLCBleHRpbmZvOiBKU09OLnN0cmluZ2lmeShbXSksIFxuXHRcdFx0XHRcdGdsb2JhbF9hdHRyOiBKU09OLnN0cmluZ2lmeSgkdGhpcy4kZGF0YS5nbG9iYWxfYXR0ciksZGF0YUpzb246SlNPTi5zdHJpbmdpZnkoZGF0YUpzb24pXG5cdFx0ICAgICAgICB9XG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KGRhdGFJbmZvKSk7XG5cdFx0ICAgIFx0Y29uc29sZS5sb2coZGF0YUluZm8pO1xuXHRcdCAgICBcdHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdEYXRhT2JqUnVuQ3VzdG9tRXZlbnRJbmZvJyxkYXRhSW5mbykudGhlbihzdWNjZXNzPT57XG5cdFx0ICAgIFx0XHRjb25zb2xlLmxvZyhzdWNjZXNzKTtcblx0XHRcdFx0XHR1bmkuaGlkZUxvYWRpbmcoKTtcblx0XHQgICAgXHRcdGlmIChzdWNjZXNzLmNvZGU9PScwMDAwMCcpIHtcblx0XHQgICAgXHRcdFx0dmFyIGRhdGEgPSBKU09OLnBhcnNlKHN1Y2Nlc3MuZGF0YSk7XHRcdFxuXHRcdCAgICBcdFx0XHR2YXIgcmVzdWx0ID0gZGF0YS5yZXN1bHQ7XG5cdFx0ICAgIFx0XHRcdGlmKGV2ZW50SUQgIT0gJHRoaXMuJGRhdGEucGFyYW0uQWZ0ZXJfT0tfRXZlbnQuSUQpXG5cdFx0ICAgIFx0XHRcdFx0JHRoaXMuc2Nhbl9PS0RhdGFPYmpSdW5DdXN0b21FdmVudCgkdGhpcy4kZGF0YS5wYXJhbS5BZnRlcl9PS19FdmVudC5JRCk7XG5cdFx0XHRcdFx0XHRlbHNle1xuXHRcdFx0XHRcdFx0XHQvL+WIt+aWsFxuXHRcdFx0XHRcdFx0XHR1bmkucmVkaXJlY3RUbyh7XG5cdFx0XHRcdFx0XHRcdFx0dXJsOicuLi9tb2RhbC9tc19jbGFzc0F0dHI/cGFyYW09JytKU09OLnN0cmluZ2lmeSgkdGhpcy4kZGF0YS5wYXJhbSkrXCImdGl0bGVuYW1lPVwiKyR0aGlzLiRkYXRhLnRpdGxlXG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdCAgICBcdFx0fWVsc2V7XG5cdFx0ICAgIFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vOFwiLGNvbnRlbnQ6c3VjY2Vzcy5tc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0ICAgIFx0XHR9XG5cdFx0ICAgIFx0fSkuY2F0Y2goZXg9Pntcblx0XHQgICAgXHRcdC8vIGNvbnNvbGUubG9nKGV4KTtcblx0XHRcdFx0XHR1bmkuaGlkZUxvYWRpbmcoKTtcblx0XHQgICAgXHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vOC4xXCIsY29udGVudDpleC5lcnJNc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0ICAgIFx0fSk7XG5cdFx0ICAgIH0sXG5cdFx0ICAgIFxuXHRcdFx0XG5cdFx0fVxuXHR9XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///90\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 _pickerAddress = _interopRequireDefault(__webpack_require__(/*! ../../js/pickerAddress/pickerAddress.vue */ 80));\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\nvar _default = {\n  components: {\n    pickerAddress: _pickerAddress.default\n  },\n  data: function data() {\n    return {\n      title: '新增',\n      param: {},\n      classAttrList: [],\n      classGridStyle: [],\n      edit_inital_event: \"\",\n      //弹窗初始化事件ID\n      edit_ok_event: \"\",\n      //弹窗点击OK 触发事件ID\n      edit_select_compose_event: \"\",\n      //选择组成对象时调用\n      edit_compose_cls_id: \"\",\n      global_attr: [],\n      refdatastore: [],\n      //引用数据存储区// {attr:'G_PRJ_' + bindattr + '_ID', value:info.id}\n      scanCodeVal: \"\",\n      subClassAttrList: [],\n      subPanelList: [],\n      subClassGridStyle: [],\n      popupType: \"center\",\n      check_list: {}\n    };\n  },\n  onLoad: function onLoad(options) {\n    // console.log(options);\n    uni.setNavigationBarTitle({\n      title: options.titlename\n    }); //设置顶部标题 \n    var param = JSON.parse(options.param);\n    this.$data.title = param.Add_BtnName ? param.Add_BtnName : options.titlename; //设置按钮文字\n    __f__(\"log\", param, \" at pages/modal/ms_classAttr.vue:1012\");\n    if (!param.Master_Cls.View_Style) {\n      uni.showModal({\n        title: \"提示\",\n        content: \"该功能点未配置界面窗口,请重新配置!\",\n        showCancel: false,\n        confirmText: \"取消\"\n      });\n      return;\n    }\n    if (!param.Master_Cls.View_Style.Name) {\n      uni.showModal({\n        title: \"提示\",\n        content: \"该功能点未配置窗口样式,请重新配置!\",\n        showCancel: false,\n        confirmText: \"取消\"\n      });\n      return;\n    }\n    this.$data.param = param;\n    // var edit_dlg = {\n    //     Model: param.EditDlgMode,\n    //     Name: param.Master_Cls.View_Style.Name\n    // }\n    //主数据类获取\n    var dataInfo = {\n      class_id: param.Master_Cls.ID\n    };\n    var $this = this;\n    $this.$store.state.thisareaFuncID = param.Master_Cls.ID;\n    // console.log($this.$store.getters.getclassAttrList);\n    if ($this.$store.getters.getclassAttrList) {\n      $this.$data.classAttrList = $this.$store.getters.getclassAttrList.data;\n      $this.classGridStyleInfo(param.Master_Cls.ID, $this.$data.param.Master_Cls.View_Style.Name, 'Mast');\n    } else {\n      $this.$store.dispatch('classAttrList', dataInfo).then(function (success) {\n        // console.log(success);\n        if (success.code == '00000') {\n          $this.$data.classAttrList = success.data;\n          $this.classGridStyleInfo(param.Master_Cls.ID, $this.$data.param.Master_Cls.View_Style.Name, 'Mast');\n        } else {\n          uni.showModal({\n            title: \"错误1\",\n            content: success.msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        // console.log(ex);\n        uni.showModal({\n          title: \"错误1.1\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\n    }\n\n    //从数据类获取\n    var subdataInfo = {\n      class_id: param.Sub_Cls.ID\n    };\n    $this.$store.state.thisareaFuncSubID = param.Sub_Cls.ID;\n    if ($this.$store.getters.getSubClassAttrList) {\n      $this.$data.subClassAttrList = $this.$store.getters.getSubClassAttrList.data;\n      $this.classGridStyleInfo(param.Sub_Cls.ID, $this.$data.param.Sub_Cls.View_Style.Name, 'Sub');\n    } else {\n      $this.$store.dispatch('subClassAttrList', subdataInfo).then(function (success) {\n        // console.log(success);\n        if (success.code == '00000') {\n          $this.$data.subClassAttrList = success.data;\n          $this.classGridStyleInfo(param.Sub_Cls.ID, $this.$data.param.Sub_Cls.View_Style.Name, 'Sub');\n        } else {\n          uni.showModal({\n            title: \"错误1_1\",\n            content: success.msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        // console.log(ex);\n        uni.showModal({\n          title: \"错误1_1.1\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\n    }\n  },\n  methods: {\n    scan_classAttr_extButton: function scan_classAttr_extButton(e) {\n      //选择按钮前\n      var $this = this;\n      var Before_Select_Event = $this.$data.param.Scan_Code.Before_Select_Event;\n      if (!Before_Select_Event) {\n        uni.showModal({\n          title: \"提示\",\n          content: \"选择前事件为空!\",\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n        return;\n      }\n      var mast_attr = [];\n      var attrlist = this.$data.classAttrList;\n      for (var i = 0; i < attrlist.length; i++) {\n        var attr = attrlist[i].Attr;\n        for (var j = 0; j < attr.length; j++) {\n          var ar = attr[j];\n          if (ar.Value == '请选择') {\n            uni.showModal({\n              title: \"提示\",\n              content: ar.DispName + \"未选择数据!\",\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n            return;\n          }\n          if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n          if (ar.Type == '引用人员' || ar.Type == '引用项目') mast_attr.push({\n            attr: ar.Name,\n            value: ar.ValID ? ar.ValID : ''\n          });else if (ar.Type == '布尔值') mast_attr.push({\n            attr: ar.Name,\n            value: ar.Value ? '1' : '0'\n          });else mast_attr.push({\n            attr: ar.Name,\n            value: ar.Value ? ar.Value : ''\n          });\n        }\n      }\n      var objects = [];\n      var subPanelList = $this.$data.subPanelList;\n      for (var s = 0; s < subPanelList.length; s++) {\n        var sub_req = [];\n        for (var i = 0; i < subPanelList[s].subClassAttr.length; i++) {\n          var attr = subPanelList[s].subClassAttr[i].Attr;\n          for (var j = 0; j < attr.length; j++) {\n            var ar = attr[j];\n            if (ar.Value == '请选择' || ar.Value == '——请选择——') ar.Value = '';\n            if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n            if (ar.Type == '引用人员' || ar.Type == '引用项目') sub_req.push({\n              attr: ar.Name,\n              value: ar.ValID ? ar.ValID : ''\n            });else if (ar.Type == '布尔值') sub_req.push({\n              attr: ar.Name,\n              value: ar.Value ? '1' : '0'\n            });else if (ar.Type == '字典' || ar.Type == '字典-字符串' || ar.Type == '字典-整数') {\n              if (ar.select == true) {\n                //判断下拉是否多选\n                var valStr = \"\";\n                for (var v in ar.Value) {\n                  if (valStr) valStr += \";\";\n                  valStr += ar.Value[v];\n                }\n                sub_req.push({\n                  attr: ar.Name,\n                  value: valStr\n                });\n              } else sub_req.push({\n                attr: ar.Name,\n                value: ar.Value\n              });\n            } else sub_req.push({\n              attr: ar.Name,\n              value: ar.Value ? ar.Value : ''\n            });\n            if (ar.notempty == true && !ar.Value) {\n              // if(ar.NotEmpty=='1'){\n              uni.hideLoading();\n              // uni.showToast({title:ar.DispName+'不能为空!',icon:\"success\",duration:3000});\n              uni.showModal({\n                title: \"提示\",\n                content: ar.DispName + '不能为空!',\n                showCancel: false,\n                confirmText: \"取消\"\n              });\n              return;\n            }\n          }\n        }\n        objects.push({\n          obj_id: subPanelList[s].scanCodeVal,\n          obj_attrs: sub_req\n        });\n      }\n      var enviroment = {\n        'function': '3000',\n        // 功能点编号\n        cls_id: 'MBOX',\n        //this.$data.param.Sub_Cls.ID,     // 功能点从数据类标识\n        'button': 'top',\n        // top/bottom\n        button_name: '新增',\n        edit_dlg: {\n          type: 'small',\n          //小窗口\n          class_id: 'MBOX' //this.$data.param.Sub_Cls.ID,//当前数据类id\n        },\n\n        master_cls: {\n          cls_name: 'MBOX',\n          //$this.$data.param.Master_Cls.Name,\n          obj_attrs: req\n        },\n        sub_cls: {\n          cls_name: 'MBOX',\n          //$this.$data.param.Sub_Cls.Name,\n          objects: objects\n        }\n      };\n      var req = [];\n      // var subPanelList = $this.$data.subPanelList;\n      // for (var s = 0; s < subPanelList.length; s++) {\n      // \tvar json = {};\n      // \tfor (var i = 0; i < subPanelList[s].subClassAttr.length; i++) {\n      // \t\tvar attr = subPanelList[s].subClassAttr[i].Attr;\n      // \t\tfor (var j = 0; j < attr.length; j++) {\n      // \t\t\tvar ar = attr[j];\n      // \t\t\tjson[ar.Name] = ar.Value;\n      // \t\t}\n      // \t}\n      // \treq.push(json);\n      // }\n\n      var info = {\n        eventid: Before_Select_Event.ID,\n        edtype: \"7\",\n        //\"0\",\n        projectid: '',\n        rclsid: '',\n        robjid: '',\n        userlogin: '',\n        clsid: 'MBOX',\n        //this.$data.param.Sub_Cls.ID,\n        objid: \"\",\n        attr: [],\n        global_attr: req,\n        mast_attr: mast_attr,\n        inputParamter: mast_attr,\n        enviroment: enviroment\n      };\n      // console.log(info);\n      this.scan_DataObjRunCustomEvent(info, \"\");\n    },\n    popupChange: function popupChange(e) {\n      __f__(\"log\", '当前模式:' + e.type + ',状态:' + e.show, \" at pages/modal/ms_classAttr.vue:1271\");\n    },\n    checkChange: function checkChange(e) {\n      //弹框check选择\n      // console.log(e.target.dataset);\n      var index = e.target.dataset.index;\n      var ischeck = e.target.dataset.ischeck;\n      var data = this.$data.check_list.items;\n      // this.$data.check_list.items=[];\n      if (this.$data.check_list.multiple_choice == \"0\") {\n        //判断时单选还是多选\n        for (var i in data) {\n          data[i].check = false;\n        }\n      }\n      data[index].check = ischeck ? false : true;\n      this.$data.check_list.items = data;\n    },\n    popup_cancel: function popup_cancel(e) {\n      //弹框取消\n      this.$refs.popup.close();\n    },\n    popup_sava: function popup_sava(e) {\n      //弹框确定 选择按钮后\n      var $this = this;\n      var After_Select_Event = $this.$data.param.Scan_Code.After_Select_Event;\n      if (!After_Select_Event) {\n        uni.showModal({\n          title: \"提示\",\n          content: \"选择后事件为空!\",\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n        return;\n      }\n      var items = $this.$data.check_list.items;\n      var data = [];\n      var name = \"\";\n      for (var i = 0; i < items.length; i++) {\n        if (items[i].check == true) {\n          if (name) name += ';';\n          name += items[i].name;\n          data.push({\n            id: items[i].id,\n            name: items[i].name\n          });\n        }\n      }\n      if (data.length == 0) {\n        uni.showModal({\n          title: \"提示\",\n          content: \"未选择数据!\",\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n        return;\n      }\n      var mast_attr = [];\n      var attrlist = this.$data.classAttrList;\n      for (var i = 0; i < attrlist.length; i++) {\n        var attr = attrlist[i].Attr;\n        for (var j = 0; j < attr.length; j++) {\n          var ar = attr[j];\n          if (ar.Value == '请选择') {\n            uni.showModal({\n              title: \"提示\",\n              content: ar.DispName + \"未选择数据!\",\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n            return;\n          }\n          if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n          if (ar.Type == '引用人员' || ar.Type == '引用项目') mast_attr.push({\n            attr: ar.Name,\n            value: ar.ValID ? ar.ValID : ''\n          });else if (ar.Type == '布尔值') mast_attr.push({\n            attr: ar.Name,\n            value: ar.Value ? '1' : '0'\n          });else mast_attr.push({\n            attr: ar.Name,\n            value: ar.Value ? ar.Value : ''\n          });\n        }\n      }\n      $this.$data.scanCodeVal = name;\n      var info = {\n        eventid: After_Select_Event.ID,\n        edtype: \"7\",\n        projectid: '',\n        rclsid: '',\n        robjid: '',\n        userlogin: '',\n        clsid: 'MBOX',\n        objid: \"\",\n        attr: [{\n          attr: 'mast_input_3037',\n          value: name\n        }],\n        global_attr: mast_attr,\n        inputParamter: data\n      };\n      // console.log(info);\n      this.scan_DataObjRunCustomEvent(info, \"\");\n      this.$refs.popup.close();\n    },\n    cancel: function cancel(e) {\n      uni.navigateBack({\n        delta: 1 //返回层数,2则上上页\n      });\n    },\n    panel_del: function panel_del(index) {\n      var $this = this;\n      if (this.$data.subPanelList[index].scanCodeVal == this.$data.scanCodeVal) {\n        this.$data.scanCodeVal = '';\n      }\n      if (!this.$data.subPanelList[index].ObjID) this.$data.subPanelList.splice(index, 1);else {\n        var dataInfo = {\n          clsId: this.$data.param.Sub_Cls.ID,\n          objId: this.$data.subPanelList[index].ObjID\n        };\n        __f__(\"log\", dataInfo, \" at pages/modal/ms_classAttr.vue:1373\");\n        // return;\n        uni.showLoading({\n          title: \"加载中...\"\n        });\n        this.$store.dispatch('DelObj', dataInfo).then(function (success) {\n          __f__(\"log\", success, \" at pages/modal/ms_classAttr.vue:1379\");\n          uni.hideLoading();\n          if (success.code == '00000') {\n            $this.$data.subPanelList.splice(index, 1);\n            uni.showModal({\n              title: \"提示\",\n              content: \"删除成功!\",\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n          } else {\n            uni.showModal({\n              title: \"错误9\",\n              content: success.msg,\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n          }\n        }).catch(function (ex) {\n          __f__(\"log\", ex, \" at pages/modal/ms_classAttr.vue:1398\");\n          uni.hideLoading();\n          uni.showModal({\n            title: \"提示9.1\",\n            content: ex.errMsg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        });\n      }\n    },\n    classGridStyleInfo: function classGridStyleInfo(clsid, styleName, clsType) {\n      var _this = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {\n        var $this, gridstyleInfo;\n        return _regenerator.default.wrap(function _callee$(_context) {\n          while (1) {\n            switch (_context.prev = _context.next) {\n              case 0:\n                $this = _this;\n                gridstyleInfo = {\n                  class_id: clsid,\n                  name: styleName,\n                  type: '2'\n                }; // console.log($this.$store.getters.getclassGridStyleInfo);\n                //获取主数据类界面样式\n                if (clsType == 'Mast') {\n                  $this.$store.state.thisEditName = styleName;\n                  if ($this.$store.getters.getclassGridStyleInfo) {\n                    $this.$data.classGridStyle = $this.$store.getters.getclassGridStyleInfo.data;\n                    $this.class_attr_init();\n                  } else {\n                    //console.log(gridstyleInfo);\n                    $this.$store.dispatch('classGridStyleInfo', gridstyleInfo).then(function (success) {\n                      // console.log(success);\n                      if (success.code == '00000') {\n                        success.data.StyleDef = JSON.parse(success.data.StyleDef);\n                        $this.$data.classGridStyle = success.data;\n                        $this.class_attr_init();\n                      } else {\n                        uni.showModal({\n                          title: \"错误1.2\",\n                          content: success.msg,\n                          showCancel: false,\n                          confirmText: \"取消\"\n                        });\n                      }\n                    }).catch(function (ex) {\n                      __f__(\"log\", ex, \" at pages/modal/ms_classAttr.vue:1441\");\n                      uni.showModal({\n                        title: \"错误1.3\",\n                        content: ex.errMsg,\n                        showCancel: false,\n                        confirmText: \"取消\"\n                      });\n                    });\n                  }\n                } else if (clsType == 'Sub') {\n                  //获取从数据类界面样式\n                  $this.$store.state.thisEditSubName = styleName;\n                  if ($this.$store.getters.getSubClassGridStyleInfo) {\n                    $this.$data.subClassGridStyle = $this.$store.getters.getSubClassGridStyleInfo.data;\n                    $this.subClass_attr_init();\n                  } else {\n                    //console.log(gridstyleInfo);\n                    $this.$store.dispatch('subClassGridStyleInfo', gridstyleInfo).then(function (success) {\n                      // console.log(success);\n                      if (success.code == '00000') {\n                        success.data.StyleDef = JSON.parse(success.data.StyleDef);\n                        $this.$data.subClassGridStyle = success.data;\n                        $this.subClass_attr_init();\n                      } else {\n                        uni.showModal({\n                          title: \"错误1.2\",\n                          content: success.msg,\n                          showCancel: false,\n                          confirmText: \"取消\"\n                        });\n                      }\n                    }).catch(function (ex) {\n                      __f__(\"log\", ex, \" at pages/modal/ms_classAttr.vue:1473\");\n                      uni.showModal({\n                        title: \"错误1.3\",\n                        content: ex.errMsg,\n                        showCancel: false,\n                        confirmText: \"取消\"\n                      });\n                    });\n                  }\n                }\n              case 3:\n              case \"end\":\n                return _context.stop();\n            }\n          }\n        }, _callee);\n      }))();\n    },\n    ontap: function ontap(e) {\n      var _this2 = this;\n      //扫码功能\n      //console.log(e.target)\n      getApp().onScan(function (result) {\n        //console.log(result.decodedata);\n        var isVal = _this2.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value;\n        // if(!isVal){\n        // \tthis.$data.subPanelList[e.target.dataset['iiindex']].subClassAttr[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value=result.decodedata;\n        // \tvar isVald =this.$data.subPanelList[e.target.dataset['iiindex']].subClassAttr[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value;\n        // \treturn;\n        // }\n        //主数据类扫码查询数据\n        if (isVal != result.decodedata) {\n          _this2.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value = result.decodedata;\n          uni.hideKeyboard();\n          //子数据类扫码区事件脚本\n          var eventid = _this2.$data.param.Scan_Code.Input_Change_Event.ID;\n          if (eventid) {\n            var req = [];\n            var attrlist = _this2.$data.classAttrList; //主数据类属性\n            for (var i = 0; i < attrlist.length; i++) {\n              var attr = attrlist[i].Attr;\n              for (var j = 0; j < attr.length; j++) {\n                var ar = attr[j];\n                if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n                if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n                  attr: ar.Name,\n                  value: ar.ValID ? ar.ValID : ''\n                });else if (ar.Type == '布尔值') req.push({\n                  attr: ar.Name,\n                  value: ar.Value ? '1' : '0'\n                });else req.push({\n                  attr: ar.Name,\n                  value: ar.Value ? ar.Value : ''\n                });\n              }\n            }\n            var info = {\n              eventid: eventid,\n              edtype: \"7\",\n              //\"0\",\n              projectid: '',\n              rclsid: '',\n              robjid: '',\n              userlogin: '',\n              clsid: 'MBOX',\n              //this.$data.param.Sub_Cls.ID,\n              objid: \"\",\n              attr: req,\n              mast_attr: [],\n              inputParamter: [{\n                attr: 'mast_input_3037',\n                value: result.decodedata\n              }]\n            };\n            _this2.scan_DataObjRunCustomEvent(info, \"\");\n          }\n        }\n      });\n    },\n    subontap: function subontap(e) {\n      var _this3 = this;\n      //扫码功能\n      //console.log(e.target)\n      getApp().onScan(function (result) {\n        //console.log(result.decodedata);\n        var isVal = _this3.$data.subClassAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value;\n        //主数据类扫码查询数据\n        if (isVal != result.decodedata) {\n          _this3.$data.subClassAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value = result.decodedata;\n          uni.hideKeyboard();\n          //子数据类扫码区事件脚本\n          var eventid = _this3.$data.param.Scan_Code.Input_Change_Event.ID;\n          if (eventid) {\n            var req = [];\n            var attrlist = _this3.$data.subClassAttrList; //主数据类属性\n            for (var i = 0; i < attrlist.length; i++) {\n              var attr = attrlist[i].Attr;\n              for (var j = 0; j < attr.length; j++) {\n                var ar = attr[j];\n                if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n                if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n                  attr: ar.Name,\n                  value: ar.ValID ? ar.ValID : ''\n                });else if (ar.Type == '布尔值') req.push({\n                  attr: ar.Name,\n                  value: ar.Value ? '1' : '0'\n                });else req.push({\n                  attr: ar.Name,\n                  value: ar.Value ? ar.Value : ''\n                });\n              }\n            }\n            var info = {\n              eventid: eventid,\n              edtype: \"7\",\n              //\"0\",\n              projectid: '',\n              rclsid: '',\n              robjid: '',\n              userlogin: '',\n              clsid: 'MBOX',\n              //this.$data.param.Sub_Cls.ID,\n              objid: \"\",\n              attr: req,\n              mast_attr: [],\n              inputParamter: [{\n                attr: 'mast_input_3037',\n                value: result.decodedata\n              }]\n            };\n            _this3.scan_DataObjRunCustomEvent(info, \"\");\n          }\n        }\n      });\n    },\n    scan_ontap: function scan_ontap(e) {\n      var _this4 = this;\n      //扫码区扫码功能\n      //console.log(e.target)\n      getApp().onScan(function (result) {\n        __f__(\"log\", result.decodedata, \" at pages/modal/ms_classAttr.vue:1614\");\n        var isflag = true;\n        for (var i in _this4.$data.subPanelList) {\n          if (_this4.$data.subPanelList[i].scanCodeVal == result.decodedata) isflag = false;\n        }\n        //子数据类扫码查询数据\n        if (isflag) {\n          uni.hideKeyboard();\n          _this4.$data.scanCodeVal = result.decodedata;\n          var eventid = _this4.$data.param.Scan_Code.Input_Change_Event.ID;\n          if (eventid) {\n            var mast_req = [];\n            //主数据类属性\n            var classattrlist = _this4.$data.classAttrList;\n            for (var i = 0; i < classattrlist.length; i++) {\n              var attr = classattrlist[i].Attr;\n              for (var j = 0; j < attr.length; j++) {\n                var ar = attr[j];\n                if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n                if (ar.Type == '引用人员' || ar.Type == '引用项目') mast_req.push({\n                  attr: ar.Name,\n                  value: ar.ValID ? ar.ValID : ''\n                });else if (ar.Type == '布尔值') mast_req.push({\n                  attr: ar.Name,\n                  value: ar.Value ? '1' : '0'\n                });else mast_req.push({\n                  attr: ar.Name,\n                  value: ar.Value ? ar.Value : ''\n                });\n              }\n            }\n            var req = [];\n            //子数据类属性\n            var attrlist = _this4.$data.subClassAttrList;\n            for (var i = 0; i < attrlist.length; i++) {\n              var attr = attrlist[i].Attr;\n              for (var j = 0; j < attr.length; j++) {\n                var ar = attr[j];\n                if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n                if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n                  attr: ar.Name,\n                  value: ar.ValID ? ar.ValID : ''\n                });else if (ar.Type == '布尔值') req.push({\n                  attr: ar.Name,\n                  value: ar.Value ? '1' : '0'\n                });else req.push({\n                  attr: ar.Name,\n                  value: ar.Value ? ar.Value : ''\n                });\n              }\n            }\n            var info = {\n              eventid: eventid,\n              edtype: '7',\n              //\"0\",\n              projectid: '',\n              rclsid: '',\n              robjid: '',\n              userlogin: '',\n              clsid: 'MBOX',\n              //this.$data.param.Sub_Cls.ID,\n              objid: \"\",\n              attr: req,\n              mast_attr: mast_req,\n              inputParamter: [{\n                attr: 'input_3037',\n                value: _this4.$data.scanCodeVal\n              }]\n            };\n            _this4.scan_DataObjRunCustomEvent(info, \"\");\n          }\n        }\n      });\n    },\n    scan_onevent: function scan_onevent(e) {\n      // console.log(e.target);\n      if (e.target.value) {\n        var isflag = true;\n        for (var i in this.$data.subPanelList) {\n          if (this.$data.subPanelList[i].scanCodeVal == e.target.value) isflag = false;\n        }\n        //子数据类扫码查询数据\n        if (isflag) {\n          uni.hideKeyboard();\n          this.$data.scanCodeVal = e.target.value;\n          var eventid = this.$data.param.Scan_Code.Input_Change_Event.ID;\n          if (eventid) {\n            var mast_req = [];\n            //主数据类属性\n            var classattrlist = this.$data.classAttrList;\n            for (var i = 0; i < classattrlist.length; i++) {\n              var attr = classattrlist[i].Attr;\n              for (var j = 0; j < attr.length; j++) {\n                var ar = attr[j];\n                if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n                if (ar.Type == '引用人员' || ar.Type == '引用项目') mast_req.push({\n                  attr: ar.Name,\n                  value: ar.ValID ? ar.ValID : ''\n                });else if (ar.Type == '布尔值') mast_req.push({\n                  attr: ar.Name,\n                  value: ar.Value ? '1' : '0'\n                });else mast_req.push({\n                  attr: ar.Name,\n                  value: ar.Value ? ar.Value : ''\n                });\n              }\n            }\n            var req = [];\n            //子数据类属性\n            var attrlist = this.$data.subClassAttrList;\n            for (var i = 0; i < attrlist.length; i++) {\n              var attr = attrlist[i].Attr;\n              for (var j = 0; j < attr.length; j++) {\n                var ar = attr[j];\n                if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n                if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n                  attr: ar.Name,\n                  value: ar.ValID ? ar.ValID : ''\n                });else if (ar.Type == '布尔值') req.push({\n                  attr: ar.Name,\n                  value: ar.Value ? '1' : '0'\n                });else req.push({\n                  attr: ar.Name,\n                  value: ar.Value ? ar.Value : ''\n                });\n              }\n            }\n            var info = {\n              eventid: eventid,\n              edtype: '7',\n              //\"0\",\n              projectid: '',\n              rclsid: '',\n              robjid: '',\n              userlogin: '',\n              clsid: 'MBOX',\n              //this.$data.param.Sub_Cls.ID,\n              objid: \"\",\n              attr: req,\n              mast_attr: mast_req,\n              inputParamter: [{\n                attr: 'input_3037',\n                value: this.$data.scanCodeVal\n              }]\n            };\n            this.scan_DataObjRunCustomEvent(info, \"\");\n          }\n        }\n      }\n    },\n    onarrow: function onarrow(index, open) {\n      // console.log(index+'--'+open);\n      var data_attr = this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Open;\n      if (!data_attr) {\n        this.$data.subPanelList[e.target.dataset['iiindex']].subClassAttr[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value = open == true ? false : true;\n        return;\n      }\n      this.$data.classAttrList[e.target.dataset['iiindex']].subClassAttr[index].Open = open == true ? false : true;\n    },\n    ondateTime: function ondateTime(e) {\n      //console.log(e.target)\n      var data_attr = this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value;\n      if (!data_attr) {\n        this.$data.subPanelList[e.target.dataset['iiindex']].subClassAttr[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value = e.target.value;\n        return;\n      }\n      this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value = e.target.value;\n    },\n    onchange: function onchange(e) {\n      __f__(\"log\", e.target, \" at pages/modal/ms_classAttr.vue:1812\");\n      var value = this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].dictitem[e.target.value];\n      var data_attr = this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']];\n      __f__(\"log\", data_attr, \" at pages/modal/ms_classAttr.vue:1816\");\n      if (value.Name != data_attr.Value) {\n        this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value = value.Name;\n        __f__(\"log\", this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value, \" at pages/modal/ms_classAttr.vue:1820\");\n        var eventid = this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].action;\n        if (eventid) {\n          // self.event_no_sub = 1;\n          var req = [];\n          var attrlist = this.$data.classAttrList;\n          for (var i = 0; i < attrlist.length; i++) {\n            var attr = attrlist[i].Attr;\n            for (var j = 0; j < attr.length; j++) {\n              var ar = attr[j];\n              if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n              if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n                attr: ar.Name,\n                val: ar.ValID ? ar.ValID : ''\n              });else if (ar.Type == '布尔值') req.push({\n                attr: ar.Name,\n                val: ar.Value ? '1' : '0'\n              });else req.push({\n                attr: ar.Name,\n                val: ar.Value ? ar.Value : ''\n              });\n            }\n          }\n          var info = {\n            eventid: eventid,\n            edtype: \"0\",\n            projectid: '',\n            rclsid: '',\n            robjid: '',\n            userlogin: '',\n            clsid: this.$data.param.Master_Cls.ID,\n            objid: \"\",\n            attr: req\n          };\n          this.DataObjRunCustomEvent(info);\n        }\n      }\n    },\n    onchange2: function onchange2(item, value, delvalue) {\n      // console.log(item);\n      // console.log(value);\n      // console.log(delvalue);\n      if (item.length == 0) {\n        //为空时,清空属性value\n        var index,\n          iindex,\n          dindex = 0;\n        for (var i in this.$data.classAttrList) {\n          for (var j in this.$data.classAttrList[i].Attr) {\n            if (delvalue[0].attr == this.$data.classAttrList[i].Attr[j].Name) {\n              this.$data.classAttrList[i].Attr[j].Value = \"\";\n            }\n          }\n        }\n      }\n      for (var v in item) {\n        var index,\n          iindex,\n          dindex = 0;\n        for (var i in this.$data.classAttrList) {\n          for (var j in this.$data.classAttrList[i].Attr) {\n            if (item[v].attr == this.$data.classAttrList[i].Attr[j].Name) {\n              index = i;\n              iindex = j;\n            }\n          }\n        }\n        var itemvalue = item[v];\n        var data_attr = this.$data.classAttrList[index].Attr[iindex];\n        __f__(\"log\", data_attr, \" at pages/modal/ms_classAttr.vue:1895\");\n        if (itemvalue.Name != data_attr.Value) {\n          this.$data.classAttrList[index].Attr[iindex].Value = value;\n          __f__(\"log\", this.$data.classAttrList[index].Attr[iindex].Value, \" at pages/modal/ms_classAttr.vue:1898\");\n          var eventid = this.$data.classAttrList[index].Attr[iindex].action;\n          if (eventid) {\n            // self.event_no_sub = 1;\n            var req = [];\n            var attrlist = this.$data.classAttrList;\n            for (var i = 0; i < attrlist.length; i++) {\n              var attr = attrlist[i].Attr;\n              for (var j = 0; j < attr.length; j++) {\n                var ar = attr[j];\n                if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n                if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n                  attr: ar.Name,\n                  val: ar.ValID ? ar.ValID : ''\n                });else if (ar.Type == '布尔值') req.push({\n                  attr: ar.Name,\n                  val: ar.Value ? '1' : '0'\n                });else if (ar.Type == '字典' || ar.Type == '字典-字符串' || ar.Type == '字典-整数') req.push({\n                  attr: ar.Name,\n                  val: itemvalue.Name\n                });else req.push({\n                  attr: ar.Name,\n                  val: ar.Value ? ar.Value : ''\n                });\n              }\n            }\n            var info = {\n              eventid: eventid,\n              edtype: \"0\",\n              projectid: '',\n              rclsid: '',\n              robjid: '',\n              userlogin: '',\n              clsid: this.$data.param.Master_Cls.ID,\n              objid: \"\",\n              attr: req\n            };\n            this.DataObjRunCustomEvent(info);\n          }\n        }\n      }\n    },\n    sub_onchange: function sub_onchange(e) {\n      __f__(\"log\", e.target, \" at pages/modal/ms_classAttr.vue:1951\");\n      var value = this.$data.subPanelList[e.target.dataset['iiindex']].subClassAttr[e.target.dataset['index']].Attr[e.target.dataset['iindex']].dictitem[e.target.value];\n      var data_attr = this.$data.subPanelList[e.target.dataset['iiindex']].subClassAttr[e.target.dataset['index']].Attr[e.target.dataset['iindex']];\n      __f__(\"log\", data_attr, \" at pages/modal/ms_classAttr.vue:1956\");\n      if (value.Name != data_attr.Value) {\n        this.$data.subPanelList[e.target.dataset['iiindex']].subClassAttr[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value = value.Name;\n        __f__(\"log\", this.$data.subPanelList[e.target.dataset['iiindex']].subClassAttr[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value, \" at pages/modal/ms_classAttr.vue:1960\");\n        var eventid = this.$data.subPanelList[e.target.dataset['iiindex']].subClassAttr[e.target.dataset['index']].Attr[e.target.dataset['iindex']].action;\n        if (eventid) {\n          // self.event_no_sub = 1;\n          var req = [];\n          var attrlist = this.$data.subPanelList[e.target.dataset['iiindex']].subClassAttr;\n          for (var i = 0; i < attrlist.length; i++) {\n            var attr = attrlist[i].Attr;\n            for (var j = 0; j < attr.length; j++) {\n              var ar = attr[j];\n              if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n              if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n                attr: ar.Name,\n                val: ar.ValID ? ar.ValID : ''\n              });else if (ar.Type == '布尔值') req.push({\n                attr: ar.Name,\n                val: ar.Value ? '1' : '0'\n              });else req.push({\n                attr: ar.Name,\n                val: ar.Value ? ar.Value : ''\n              });\n            }\n          }\n          var info = {\n            eventid: eventid,\n            edtype: \"0\",\n            projectid: '',\n            rclsid: '',\n            robjid: '',\n            userlogin: '',\n            clsid: this.$data.param.Sub_Cls.ID,\n            objid: \"\",\n            attr: req\n          };\n          this.DataObjRunCustomEvent(info);\n        }\n      }\n    },\n    sub_onchange2: function sub_onchange2(item, value, delvalue) {\n      // console.log(item);\n      // console.log(value);\n      // console.log(delvalue);\n      var subClassAttr = this.$data.subPanelList[e.target.dataset['iiindex']].subClassAttr;\n      if (item.length == 0) {\n        //为空时,清空属性value\n        var index,\n          iindex,\n          dindex = 0;\n        for (var i in subClassAttr) {\n          for (var j in subClassAttr[i].Attr) {\n            for (var d in subClassAttr[i].Attr[j].dictitem) {\n              if (delvalue[0].Name == subClassAttr[i].Attr[j].dictitem[d].Name) {\n                subClassAttr[i].Attr[j].Value = \"\";\n              }\n            }\n          }\n        }\n      }\n      for (var v in item) {\n        var index,\n          iindex,\n          dindex = 0;\n        for (var i in subClassAttr) {\n          for (var j in subClassAttr[i].Attr) {\n            for (var d in subClassAttr[i].Attr[j].dictitem) {\n              if (item[v].Name == subClassAttr[i].Attr[j].dictitem[d].Name) {\n                index = i;\n                iindex = j;\n                dindex = d;\n              }\n            }\n          }\n        }\n        var itemvalue = item[v];\n        var data_attr = subClassAttr[index].Attr[iindex];\n        __f__(\"log\", data_attr, \" at pages/modal/ms_classAttr.vue:2041\");\n        if (itemvalue.Name != data_attr.Value) {\n          subClassAttr[index].Attr[iindex].Value = value;\n          __f__(\"log\", subClassAttr[index].Attr[iindex].Value, \" at pages/modal/ms_classAttr.vue:2044\");\n          var eventid = subClassAttr[index].Attr[iindex].action;\n          if (eventid) {\n            // self.event_no_sub = 1;\n            var req = [];\n            var attrlist = subClassAttr;\n            for (var i = 0; i < attrlist.length; i++) {\n              var attr = attrlist[i].Attr;\n              for (var j = 0; j < attr.length; j++) {\n                var ar = attr[j];\n                if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n                if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n                  attr: ar.Name,\n                  val: ar.ValID ? ar.ValID : ''\n                });else if (ar.Type == '布尔值') req.push({\n                  attr: ar.Name,\n                  val: ar.Value ? '1' : '0'\n                });else if (ar.Type == '字典' || ar.Type == '字典-字符串' || ar.Type == '字典-整数') req.push({\n                  attr: ar.Name,\n                  val: itemvalue.Name\n                });else req.push({\n                  attr: ar.Name,\n                  val: ar.Value ? ar.Value : ''\n                });\n              }\n            }\n            var info = {\n              eventid: eventid,\n              edtype: \"0\",\n              projectid: '',\n              rclsid: '',\n              robjid: '',\n              userlogin: '',\n              clsid: this.$data.param.Sub_Cls.ID,\n              objid: \"\",\n              attr: req\n            };\n            this.DataObjRunCustomEvent(info);\n          }\n        }\n      }\n    },\n    onevent: function onevent(e) {\n      // console.log(e.target);\n      var data_attr = this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']];\n      if (!data_attr) {\n        this.$data.subPanelList[e.target.dataset['iiindex']].subClassAttr[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value = e.target.value;\n        return;\n      }\n      // console.log(data_attr);\n      if (e.target.value != data_attr.Value) {\n        this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value = e.target.value;\n        // var eventid = this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].action;\n        //子数据类扫码区事件脚本\n        var eventid = this.$data.param.Scan_Code.Input_Change_Event.ID;\n        if (eventid) {\n          // self.event_no_sub = 1;\n          var req = [];\n          var attrlist = this.$data.classAttrList; //主数据类属性\n          for (var i = 0; i < attrlist.length; i++) {\n            var attr = attrlist[i].Attr;\n            for (var j = 0; j < attr.length; j++) {\n              var ar = attr[j];\n              if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n              if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n                attr: ar.Name,\n                value: ar.ValID ? ar.ValID : ''\n              });else if (ar.Type == '布尔值') req.push({\n                attr: ar.Name,\n                value: ar.Value ? '1' : '0'\n              });else req.push({\n                attr: ar.Name,\n                value: ar.Value ? ar.Value : ''\n              });\n            }\n          }\n          var info = {\n            eventid: eventid,\n            edtype: \"7\",\n            //\"0\",\n            projectid: '',\n            rclsid: '',\n            robjid: '',\n            userlogin: '',\n            clsid: 'MBOX',\n            //this.$data.param.Sub_Cls.ID,\n            objid: \"\",\n            attr: req,\n            mast_attr: [],\n            inputParamter: [{\n              attr: 'mast_input_3037',\n              value: e.target.value\n            }]\n          };\n          this.scan_DataObjRunCustomEvent(info, \"\");\n        }\n      }\n    },\n    oncheck: function oncheck(e) {\n      // console.log(e.target);\n      var ischecked = e.target.dataset.ischeck ? false : true;\n      var data_attr = this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']];\n      if (!data_attr) {\n        this.$data.subPanelList[e.target.dataset['iiindex']].subClassAttr[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value = ischecked;\n        return;\n      }\n      // console.log(data_attr);\n      if (ischecked != data_attr.Value) {\n        this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value = ischecked;\n        var eventid = this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].action;\n        if (eventid) {\n          // self.event_no_sub = 1;\n          var req = [];\n          var attrlist = this.$data.classAttrList;\n          for (var i = 0; i < attrlist.length; i++) {\n            var attr = attrlist[i].Attr;\n            for (var j = 0; j < attr.length; j++) {\n              var ar = attr[j];\n              if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n              if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n                attr: ar.Name,\n                val: ar.ValID ? ar.ValID : ''\n              });else if (ar.Type == '布尔值') req.push({\n                attr: ar.Name,\n                val: ar.Value ? '1' : '0'\n              });else req.push({\n                attr: ar.Name,\n                val: ar.Value ? ar.Value : ''\n              });\n            }\n          }\n          var info = {\n            eventid: eventid,\n            edtype: \"0\",\n            projectid: '',\n            rclsid: '',\n            robjid: '',\n            userlogin: '',\n            clsid: this.$data.param.Master_Cls.ID,\n            objid: \"\",\n            attr: req\n          };\n          this.DataObjRunCustomEvent(info);\n        }\n      }\n    },\n    inputValListIsDel: function inputValListIsDel(index) {\n      // console.log(index);\n      this.$data.inputValList.splice(index, 1); //删除tabPagejson的内容\n      // console.log(this.$data.inputValList);\n    },\n    addresschange: function addresschange(e) {\n      // console.log(e.target);\n      __f__(\"log\", e.data.join(';'), \" at pages/modal/ms_classAttr.vue:2225\");\n      this.$data.subClassAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value = e.data.join(';');\n    },\n    classAttr_extButton: function classAttr_extButton(index, iindex) {\n      var $this = this;\n      var before_click_button = $this.$data.classAttrList[index].Attr[iindex].before_click_button;\n      var button_callback = $this.$data.classAttrList[index].Attr[iindex].button_callback;\n      if (!before_click_button) {\n        uni.showModal({\n          title: \"提示\",\n          content: \"before_click_button-event_id为空!\",\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n        return;\n      }\n      if (!button_callback) {\n        uni.showModal({\n          title: \"提示\",\n          content: \"button_callback-event_id为空!\",\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n        return;\n      }\n      var data_attr = this.$data.classAttrList[index].Attr[iindex];\n      this.DataObjRunCustomEvent_Return(before_click_button, data_attr, button_callback, index, iindex);\n    },\n    classAttr_AddPer: function classAttr_AddPer(index, iindex) {\n      var param = {\n        index: index,\n        iindex: iindex\n      };\n      var $this = this;\n      uni.navigateTo({\n        url: '../selpsn/index?mulit=false&param=' + JSON.stringify(param),\n        events: {\n          AddPer: function AddPer(data, param) {\n            // console.log(param);\n            __f__(\"log\", data, \" at pages/modal/ms_classAttr.vue:2265\");\n            $this.$data.classAttrList[param.index].Attr[param.iindex].Value = data[0].Name;\n            $this.$data.classAttrList[param.index].Attr[param.iindex].ValID = data[0].Login + ';' + data[0].Name;\n            var eventid = $this.$data.classAttrList[param.index].Attr[param.iindex].action;\n            if (eventid) {\n              eventid = eventid.trim();\n              if (eventid) {\n                var info = {\n                  eventid: eventid,\n                  edtype: \"4\",\n                  projectid: \"\",\n                  rclsid: \"\",\n                  robjid: \"\",\n                  userlogin: data[0].Login,\n                  clsid: $this.$data.param.Master_Cls.ID,\n                  objid: \"\",\n                  attr: []\n                };\n\n                // var data_attr = $this.$data.classAttrList[param.index].Attr[param.iindex];\n                $this.DataObjRunCustomEvent(info);\n              }\n            }\n          }\n        }\n      });\n    },\n    classAttr_AddRef: function classAttr_AddRef(e) {\n      __f__(\"log\", e.target, \" at pages/modal/ms_classAttr.vue:2295\");\n      uni.showModal({\n        title: \"提示\",\n        content: \"此功能还未实现!\",\n        showCancel: false,\n        confirmText: \"取消\"\n      });\n      // var value=this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].RelCls[e.target.value];\n      // this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value=value;\n    },\n    classAttr_AddPrj: function classAttr_AddPrj(index, iindex) {\n      var param = {\n        index: index,\n        iindex: iindex\n      };\n      var $this = this;\n      uni.navigateTo({\n        url: '../selPrj/index?relation=-1&param=' + JSON.stringify(param),\n        events: {\n          AddPer: function AddPer(data, param) {\n            // console.log(param);\n            // console.log(data);\n            $this.$data.classAttrList[param.index].Attr[param.iindex].Value = data[0].Name;\n            $this.$data.classAttrList[param.index].Attr[param.iindex].ValID = data[0].ID + ';' + data[0].Name;\n            var eventid = $this.$data.classAttrList[param.index].Attr[param.iindex].action;\n            if (eventid) {\n              eventid = eventid.trim();\n              if (eventid) {\n                var info = {\n                  eventid: eventid,\n                  edtype: \"2\",\n                  projectid: data[0].ID,\n                  rclsid: \"\",\n                  robjid: \"\",\n                  userlogin: \"\",\n                  clsid: $this.$data.param.Master_Cls.ID,\n                  objid: \"\",\n                  attr: []\n                };\n\n                // var data_attr = $this.$data.classAttrList[param.index].Attr[param.iindex];\n                $this.DataObjRunCustomEvent(info);\n              }\n            }\n          }\n        }\n      });\n    },\n    sava: function sava() {\n      if (this.$data.param.Before_OK_Event)\n        //判断功能点参数是否有确定前脚本\n        this.scan_OKDataObjRunCustomEvent(this.$data.param.Before_OK_Event.ID);else if (this.$data.param.After_OK_Event)\n        //判断功能点参数是否有确定后脚本\n        this.scan_OKDataObjRunCustomEvent(this.$data.param.After_OK_Event.ID);else uni.navigateBack({\n        delta: 1\n      }); //返回层数,2则上上页\n    },\n    add: function add() {\n      var _this5 = this;\n      uni.showLoading({\n        title: \"加载中...\",\n        mask: true\n      });\n      var req = [];\n      var attrlist = this.$data.classAttrList;\n      for (var i = 0; i < attrlist.length; i++) {\n        var attr = attrlist[i].Attr;\n        for (var j = 0; j < attr.length; j++) {\n          var ar = attr[j];\n          if (ar.Value == '请选择' || ar.Value == '——请选择——') ar.Value = '';\n          if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n          if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n            name: ar.Name,\n            value: ar.ValID ? ar.ValID : ''\n          });else if (ar.Type == '布尔值') req.push({\n            name: ar.Name,\n            value: ar.Value ? '1' : '0'\n          });else if (ar.Type == '字典' || ar.Type == '字典-字符串' || ar.Type == '字典-整数') {\n            if (ar.select == true) {\n              //判断下拉是否多选\n              var valStr = \"\";\n              for (var v in ar.Value) {\n                if (valStr) valStr += \";\";\n                valStr += ar.Value[v];\n              }\n              req.push({\n                name: ar.Name,\n                value: valStr\n              });\n            } else req.push({\n              name: ar.Name,\n              value: ar.Value\n            });\n          } else req.push({\n            name: ar.Name,\n            value: ar.Value ? ar.Value : ''\n          });\n          if (ar.notempty == true && !ar.Value) {\n            // if(ar.NotEmpty=='1'){\n            uni.hideLoading();\n            // uni.showToast({title:ar.DispName+'不能为空!',icon:\"success\",duration:3000});\n            uni.showModal({\n              title: \"提示\",\n              content: ar.DispName + '不能为空!',\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n            return;\n          }\n        }\n      }\n      var enviroment = {\n        'function': '3000',\n        // 功能点编号\n        cls_id: this.$data.param.Master_Cls.ID,\n        // 功能点主数据类标识\n        'button': 'top',\n        // top/bottom\n        button_name: '新增',\n        master: {\n          cls_id: this.$data.param.Master_Cls.ID\n        }\n      };\n      var dataInfo = {\n        class_id: this.$data.param.Master_Cls.ID,\n        data_obj_id: '',\n        masterclsid: '',\n        req: JSON.stringify(req),\n        upfile: JSON.stringify([]),\n        post_data: JSON.stringify({}),\n        compose: JSON.stringify([]),\n        refdatastore: JSON.stringify([]),\n        extinfo: JSON.stringify(enviroment),\n        not_trigger_sys_event: ''\n      };\n\n      // return\n      __f__(\"log\", dataInfo, \" at pages/modal/ms_classAttr.vue:2440\");\n      this.$store.dispatch('addclassattr', dataInfo).then(function (success) {\n        __f__(\"log\", success, \" at pages/modal/ms_classAttr.vue:2442\");\n        uni.hideLoading();\n        if (success.code == '00000') {\n          var action = JSON.parse(success.data.Action);\n          if (action.ret == '0') {\n            if (action.result_type == '0') {\n              uni.showToast({\n                title: action.result,\n                icon: \"success\",\n                duration: 3000\n              });\n            }\n            // \"{\"ret\":0, \"result_type\":0, \"result\":\"创建成功123123123\",\"info\":\"\"}\"\n          }\n          //刷新\n          uni.redirectTo({\n            url: '../modal/ms_classAttr?param=' + JSON.stringify(_this5.$data.param) + \"&titlename=\" + _this5.$data.title\n          });\n          // this.class_attr_init();\n        } else {\n          uni.showModal({\n            title: \"错误\",\n            content: success.msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        __f__(\"log\", ex, \" at pages/modal/ms_classAttr.vue:2471\");\n        uni.hideLoading();\n        uni.showModal({\n          title: \"提示\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\n    },\n    class_attr_init: function class_attr_init() {\n      var attrlist = this.$data.classGridStyle.StyleDef.show_style;\n      var newattrlist = [];\n      if (this.$data.classAttrList.length > 0) {\n        for (var i = 0; i < attrlist.length; i++) {\n          var open = attrlist[i].open;\n          var name = attrlist[i].attrgroup_name;\n          var attrs = attrlist[i].attrs;\n          for (var s = 0; s < this.$data.classAttrList.length; s++) {\n            var clsattr = this.$data.classAttrList[s];\n            if (name == clsattr.Name) {\n              var attr = [];\n              for (var j = 0; j < attrs.length; j++) {\n                for (var l = 0; l < clsattr.Attr.length; l++) {\n                  var ca = clsattr.Attr[l];\n                  if (attrs[j].attr == ca.Name) {\n                    ca.action = attrs[j].action;\n                    ca.edit = attrs[j].edit;\n                    ca.notempty = attrs[j].notempty;\n                    ca.ext_button = attrs[j].ext_button;\n                    ca.button_img = attrs[j].button_img;\n                    ca.button_tooltip = attrs[j].button_tooltip;\n                    ca.before_click_button = attrs[j].before_click_button;\n                    ca.button_callback = attrs[j].button_callback;\n                    ca.hidden = attrs[j].hidden;\n                    ca.select = attrs[j].select == undefined ? false : attrs[j].select;\n                    ca.Value = \"\";\n                    if (ca.dictitem) {\n                      if (ca.select == true) ca.Value = []; //ca.dictitem[0].CN_S_NAME;\n                      else ca.Value = '请选择'; //ca.dictitem[0].CN_S_NAME;\n                      var dictitemlist = [];\n                      for (var d = 0; d < ca.dictitem.length; d++) {\n                        ca.dictitem[d].label = ca.dictitem[d].CN_S_NAME;\n                        ca.dictitem[d].value = ca.dictitem[d].CN_S_NAME;\n                        ca.dictitem[d].attr = ca.Name;\n                        if (ca.dictitem[d].CN_C_IS_DEFAULT == '1') ca.Value = ca.dictitem[d].CN_S_NAME;\n                      }\n                    }\n                    if (ca.Type == '日期' || ca.Type == '时间') {\n                      var nowDate = new Date();\n                      var date = {\n                        year: nowDate.getFullYear(),\n                        month: nowDate.getMonth() + 1,\n                        day: nowDate.getDate()\n                      };\n                      ca.Value = date.year + '-' + (date.month >= 10 ? date.month : '0' + date.month) + '-' + (date.day >= 10 ? date.day : '0' + date.day);\n                    }\n                    if (ca.Type == '引用对象(多个)') {\n                      var relClsList = [];\n                      var attr_rescls = ca.RelCls.split(',');\n                      for (var ii in attr_rescls) {\n                        var rescls = attr_rescls[ii].split('|');\n                        relClsList.push({\n                          id: rescls[0],\n                          name: rescls[1]\n                        });\n                      }\n                      ca.RelClsList = relClsList;\n                      ca.Value = '请';\n                    }\n                    if (ca.Type == '省市区') ca.Value = '请选择';\n                    if (ca.Type == '布尔值') ca.Value = false;\n                    attr.push(ca);\n                  }\n                }\n              }\n              newattrlist.push({\n                BkColor: clsattr.BkColor,\n                HasAce: clsattr.HasAce,\n                ImgFontStyle: clsattr.ImgFontStyle,\n                Name: clsattr.Name,\n                Order: clsattr.Order,\n                Open: open,\n                Attr: attr,\n                control_style: this.$data.classGridStyle.StyleDef.control_style,\n                title_p_wdith: this.$data.classGridStyle.StyleDef.title_p_wdith,\n                Font: this.$data.classGridStyle.StyleDef.Font ? this.$data.classGridStyle.StyleDef.Font : {},\n                Bk_Color: this.$data.classGridStyle.StyleDef.Bk_Color ? this.$data.classGridStyle.StyleDef.Bk_Color : '#FFFFFF',\n                Text_Color: this.$data.classGridStyle.StyleDef.Text_Color ? this.$data.classGridStyle.StyleDef.Text_Color : '#000000'\n              });\n            }\n          }\n        }\n        if (newattrlist.length > 0) {\n          this.$data.classAttrList = newattrlist;\n        }\n        var req = [];\n        if (this.$data.classGridStyle.StyleDef) {\n          if (this.$data.classGridStyle.StyleDef.show_style.length > 0) {\n            var attrlist = this.$data.classGridStyle.StyleDef.show_style;\n            // $el.find('.attr_field').prop('readonly', true);\n            // $el.find('.attr_field').prop('disabled', true);\n            for (var i = 0; i < attrlist.length; i++) {\n              var attr = attrlist[i].attrs;\n              for (var j = 0; j < attr.length; j++) {\n                var ar = attr[j];\n                req.push({\n                  attr: ar.attr,\n                  value: ar.value ? ar.value : ''\n                });\n              }\n            }\n          }\n        }\n        var eventlist = this.$data.classGridStyle.StyleDef.event;\n        if (eventlist) {\n          if (eventlist.length > 0) {\n            for (var i = 0; i < eventlist.length; i++) {\n              if (eventlist[i].event_id == 'before_ok') {\n                this.$data.edit_ok_event = eventlist[i];\n              } else if (eventlist[i].event_id == 'initial') {\n                this.$data.edit_inital_event = eventlist[i];\n              } else if (eventlist[i].event_id == 'before_select_compose') {\n                this.$data.edit_select_compose_event = eventlist[i].scrip_id;\n                this.$data.edit_compose_cls_id = eventlist[i].compose_cls_id;\n              }\n            }\n          }\n        }\n        // console.log(req);\n        if (this.$data.edit_inital_event) {\n          var eventid = this.$data.edit_inital_event.scrip_id;\n          var info = {\n            eventid: eventid,\n            edtype: \"0\",\n            projectid: '',\n            rclsid: '',\n            robjid: '',\n            userlogin: '',\n            clsid: this.$data.param.Master_Cls.ID,\n            objid: \"\",\n            attr: req\n          };\n          this.ini_DataObjRunCustomEvent(info);\n        }\n        __f__(\"log\", this.$data.classGridStyle, \" at pages/modal/ms_classAttr.vue:2627\");\n        __f__(\"log\", this.$data.classAttrList, \" at pages/modal/ms_classAttr.vue:2628\");\n      } else {\n        uni.showModal({\n          title: \"提示\",\n          content: \"未找到可显示的的属性\",\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      }\n    },\n    subClass_attr_init: function subClass_attr_init() {\n      var attrlist = this.$data.subClassGridStyle.StyleDef.show_style;\n      var newattrlist = [];\n      if (this.$data.subClassAttrList.length > 0) {\n        for (var i = 0; i < attrlist.length; i++) {\n          var open = attrlist[i].open;\n          var name = attrlist[i].attrgroup_name;\n          var attrs = attrlist[i].attrs;\n          for (var s = 0; s < this.$data.subClassAttrList.length; s++) {\n            var clsattr = this.$data.subClassAttrList[s];\n            if (name == clsattr.Name) {\n              var attr = [];\n              for (var j = 0; j < attrs.length; j++) {\n                for (var l = 0; l < clsattr.Attr.length; l++) {\n                  var ca = clsattr.Attr[l];\n                  if (attrs[j].attr == ca.Name) {\n                    ca.action = attrs[j].action;\n                    ca.edit = attrs[j].edit;\n                    ca.notempty = attrs[j].notempty;\n                    ca.ext_button = attrs[j].ext_button;\n                    ca.button_img = attrs[j].button_img;\n                    ca.button_tooltip = attrs[j].button_tooltip;\n                    ca.before_click_button = attrs[j].before_click_button;\n                    ca.button_callback = attrs[j].button_callback;\n                    ca.hidden = attrs[j].hidden;\n                    ca.select = attrs[j].select == undefined ? false : attrs[j].select;\n                    ca.Value = \"\";\n                    if (ca.dictitem) {\n                      if (ca.select == true) ca.Value = []; //ca.dictitem[0].CN_S_NAME;\n                      else ca.Value = '请选择'; //ca.dictitem[0].CN_S_NAME;\n                      var dictitemlist = [];\n                      for (var d = 0; d < ca.dictitem.length; d++) {\n                        ca.dictitem[d].label = ca.dictitem[d].CN_S_NAME;\n                        ca.dictitem[d].value = ca.dictitem[d].CN_S_NAME;\n                        ca.dictitem[d].attr = ca.Name;\n                        if (ca.dictitem[d].CN_C_IS_DEFAULT == '1') ca.Value = ca.dictitem[d].CN_S_NAME;\n                      }\n                    }\n                    if (ca.Type == '日期' || ca.Type == '时间') {\n                      var nowDate = new Date();\n                      var date = {\n                        year: nowDate.getFullYear(),\n                        month: nowDate.getMonth() + 1,\n                        day: nowDate.getDate()\n                      };\n                      ca.Value = date.year + '-' + (date.month >= 10 ? date.month : '0' + date.month) + '-' + (date.day >= 10 ? date.day : '0' + date.day);\n                    }\n                    if (ca.Type == '引用对象(多个)') {\n                      var relClsList = [];\n                      var attr_rescls = ca.RelCls.split(',');\n                      for (var ii in attr_rescls) {\n                        var rescls = attr_rescls[ii].split('|');\n                        relClsList.push({\n                          id: rescls[0],\n                          name: rescls[1]\n                        });\n                      }\n                      ca.RelClsList = relClsList;\n                      ca.Value = '请';\n                    }\n                    if (ca.Type == '省市区') ca.Value = '请选择';\n                    if (ca.Type == '布尔值') ca.Value = false;\n                    attr.push(ca);\n                  }\n                }\n              }\n              newattrlist.push({\n                BkColor: clsattr.BkColor,\n                HasAce: clsattr.HasAce,\n                ImgFontStyle: clsattr.ImgFontStyle,\n                Name: clsattr.Name,\n                Order: clsattr.Order,\n                Open: open,\n                Attr: attr,\n                control_style: this.$data.subClassGridStyle.StyleDef.control_style,\n                title_p_wdith: this.$data.subClassGridStyle.StyleDef.title_p_wdith,\n                Font: this.$data.subClassGridStyle.StyleDef.Font ? this.$data.subClassGridStyle.StyleDef.Font : {},\n                Bk_Color: this.$data.subClassGridStyle.StyleDef.Bk_Color ? this.$data.subClassGridStyle.StyleDef.Bk_Color : '#FFFFFF',\n                Text_Color: this.$data.subClassGridStyle.StyleDef.Text_Color ? this.$data.subClassGridStyle.StyleDef.Text_Color : '#000000'\n              });\n            }\n          }\n        }\n        if (newattrlist.length > 0) {\n          this.$data.subClassAttrList = newattrlist;\n        }\n        var req = [];\n        if (this.$data.subClassGridStyle.StyleDef) {\n          if (this.$data.subClassGridStyle.StyleDef.show_style.length > 0) {\n            var attrlist = this.$data.subClassGridStyle.StyleDef.show_style;\n            // $el.find('.attr_field').prop('readonly', true);\n            // $el.find('.attr_field').prop('disabled', true);\n            for (var i = 0; i < attrlist.length; i++) {\n              var attr = attrlist[i].attrs;\n              for (var j = 0; j < attr.length; j++) {\n                var ar = attr[j];\n                req.push({\n                  attr: ar.attr,\n                  value: ar.value ? ar.value : ''\n                });\n              }\n            }\n          }\n        }\n        var eventlist = this.$data.subClassGridStyle.StyleDef.event;\n        if (eventlist) {\n          if (eventlist.length > 0) {\n            for (var i = 0; i < eventlist.length; i++) {\n              if (eventlist[i].event_id == 'before_ok') {\n                this.$data.edit_ok_event = eventlist[i];\n              } else if (eventlist[i].event_id == 'initial') {\n                this.$data.edit_inital_event = eventlist[i];\n              } else if (eventlist[i].event_id == 'before_select_compose') {\n                this.$data.edit_select_compose_event = eventlist[i].scrip_id;\n                this.$data.edit_compose_cls_id = eventlist[i].compose_cls_id;\n              }\n            }\n          }\n        }\n        // console.log(req);\n        if (this.$data.edit_inital_event) {\n          var eventid = this.$data.edit_inital_event.scrip_id;\n          var info = {\n            eventid: eventid,\n            edtype: \"0\",\n            projectid: '',\n            rclsid: '',\n            robjid: '',\n            userlogin: '',\n            clsid: this.$data.param.Sub_Cls.ID,\n            objid: \"\",\n            attr: req\n          };\n          this.scan_ini_DataObjRunCustomEvent(info);\n        }\n        __f__(\"log\", this.$data.subClassGridStyle, \" at pages/modal/ms_classAttr.vue:2785\");\n        __f__(\"log\", this.$data.subClassAttrList, \" at pages/modal/ms_classAttr.vue:2786\");\n      } else {\n        uni.showModal({\n          title: \"提示\",\n          content: \"未找到可显示的的属性\",\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      }\n    },\n    ini_DataObjRunCustomEvent: function ini_DataObjRunCustomEvent(info) {\n      var _this6 = this;\n      var param = {\n        EditStyle: this.$data.param.Master_Cls.View_Style.Name,\n        ViewStyle: this.$data.param.Master_Cls.View_Style.Name,\n        NotTriggerSysEvent: 0,\n        enviroment: {\n          'function': '3000',\n          // 功能点编号\n          cls_id: this.$data.param.Master_Cls.ID,\n          // 功能点主数据类标识\n          'button': 'top',\n          // top/bottom\n          button_name: '新增',\n          master: {\n            cls_id: this.$data.param.Master_Cls.ID // button=bottom时 master的cls_id\n            //obj_id: ''  // button=bottom时 master的obj_id\n          }\n        }\n      };\n\n      var inputparameter = '';\n      var global_attr = '';\n      var dataInfo = {\n        edtype: info.edtype,\n        eventid: info.eventid,\n        projectid: info.projectid,\n        rclsid: info.rclsid,\n        robjid: info.robjid,\n        userlogin: info.userlogin,\n        clsid: info.clsid,\n        objid: info.objid,\n        attr: JSON.stringify(info.attr),\n        extinfo: JSON.stringify(param),\n        inputparameter: inputparameter,\n        global_attr: global_attr\n      };\n      __f__(\"log\", dataInfo, \" at pages/modal/ms_classAttr.vue:2830\");\n      this.$store.dispatch('DataObjRunCustomEventInfo', dataInfo).then(function (success) {\n        __f__(\"log\", success, \" at pages/modal/ms_classAttr.vue:2832\");\n        if (success.code == '00000') {\n          var data = JSON.parse(success.data);\n          var actionlist = data.action;\n          if (actionlist) {\n            for (var j = 0; j < actionlist.length; j++) {\n              var action = actionlist[j];\n              var action_type = action.action_type;\n              var value = action.value;\n              if (action_type == 'set_dlg_attr') {\n                if (value) {\n                  var val = value;\n                  if (typeof value == 'string') {\n                    val = JSON.parse(value);\n                  }\n                  __f__(\"log\", val, \" at pages/modal/ms_classAttr.vue:2847\");\n                  for (var i = 0; i < val.length; i++) {\n                    for (var a = 0; a < _this6.$data.classAttrList.length; a++) {\n                      for (var l = 0; l < _this6.$data.classAttrList[a].Attr.length; l++) {\n                        var ca = _this6.$data.classAttrList[a].Attr[l];\n                        if (val[i].attr == ca.Name) {\n                          if (ca.Type == '字典' || ca.Type == '字典-字符串' || ca.Type == '字典-整数') {\n                            var dictItemList = [];\n                            for (var d in val[i].choice_list) {\n                              var val = val[i].choice_list[d];\n                              dictItemList.push({\n                                \"CN_S_NAME\": val,\n                                \"Name\": val,\n                                \"label\": val,\n                                \"value\": val\n                              });\n                            }\n                            ca.dictitem = dictItemList;\n                            // attr[j].dictitem = val[i].choice_list;\n                          } else {\n                            // ca.value = val[i].value;\n                          }\n                        }\n                      }\n                    }\n                    var length = 0;\n                    if (!_this6.$data.refdatastore.filter(function (s) {\n                      return val[i].attr == s.attr;\n                    }).length) {\n                      length = 1;\n                      _this6.$data.refdatastore.push(val[i]);\n                    }\n                    if (length == 0) {\n                      for (var j = 0; j < _this6.$data.refdatastore.length; j++) {\n                        if (_this6.$data.refdatastore[j].attr == val[i].attr) {\n                          _this6.$data.refdatastore[j].value = val[i].value;\n                        }\n                      }\n                    }\n                  }\n                }\n              }\n              if (action_type == 'open_select_userdlg') {\n                uni.showModal({\n                  title: \"错误2.2\",\n                  content: \"open_select_userdlg这个action_type还未处理!\",\n                  showCancel: false,\n                  confirmText: \"取消\"\n                });\n              }\n            }\n          }\n        } else {\n          uni.showModal({\n            title: \"错误2\",\n            content: success.msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        // console.log(ex);\n        uni.showModal({\n          title: \"错误2.1\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\n    },\n    DataObjRunCustomEvent: function DataObjRunCustomEvent(info, data_attr) {\n      var $this = this;\n      var enviroment = {\n        'function': '3000',\n        // 功能点编号\n        cls_id: this.$data.param.Master_Cls.ID,\n        // 功能点主数据类标识\n        'button': 'top',\n        // top/bottom\n        button_name: '新增',\n        master: {\n          cls_id: this.$data.param.Master_Cls.ID // button=bottom时 master的cls_id\n          //obj_id: ''  // button=bottom时 master的obj_id\n        }\n      };\n\n      enviroment.edit_dlg = {\n        type: 'small',\n        //小窗口\n        class_id: this.$data.param.Master_Cls.ID //当前数据类id\n      };\n\n      if (data_attr) {\n        enviroment.edit_dlg.form_control = {\n          //所属的表单控件\n          name: data_attr.Name,\n          //字段属性\n          text: data_attr.DispName,\n          //显示文本\n          group_name: data_attr.GroupName,\n          //属性组\n          type: data_attr.Type,\n          //字段类型\n          readonly: data_attr.ReadOnly,\n          //是否只读\n          button_img: data_attr.button_img,\n          //引用按钮的图标\n          button_tooltip: data_attr.button_tooltip //引用按钮的tooltip\n        };\n      }\n\n      var dataInfo = {\n        edtype: info.edtype,\n        eventid: info.eventid,\n        projectid: info.projectid.replace('{', '').replace('}', ''),\n        rclsid: info.rclsid,\n        robjid: info.robjid,\n        userlogin: info.userlogin,\n        clsid: info.clsid,\n        objid: info.objid,\n        attr: JSON.stringify(info.attr),\n        extinfo: JSON.stringify(enviroment),\n        inputparameter: '',\n        global_attr: JSON.stringify(this.$data.global_attr)\n      };\n      __f__(\"log\", dataInfo, \" at pages/modal/ms_classAttr.vue:2962\");\n      this.$store.dispatch('DataObjRunCustomEventInfo', dataInfo).then(function (success) {\n        __f__(\"log\", success, \" at pages/modal/ms_classAttr.vue:2964\");\n        if (success.code == '00000') {\n          var data = JSON.parse(success.data);\n          var actionlist = data.action;\n          if (actionlist) {\n            __f__(\"log\", actionlist, \" at pages/modal/ms_classAttr.vue:2970\");\n            for (var i = 0; i < actionlist.length; i++) {\n              var action = actionlist[i];\n              if (action.action_type == 'set_dlg_attr') {\n                var result = action.value;\n                for (var i = 0; i < result.length; i++) {\n                  if (result[i].choice_list) {\n                    for (var c = 0; c < $this.$data.classAttrList.length; c++) {\n                      var attr = $this.$data.classAttrList[c].Attr;\n                      for (var j = 0; j < attr.length; j++) {\n                        if (attr[j].Name == result[i].attr) {\n                          if (attr[j].Type == '字典' || attr[j].Type == '字典-字符串' || attr[j].Type == '字典-整数') {\n                            var dictItemList = [];\n                            for (var d in result[i].choice_list) {\n                              var val = result[i].choice_list[d];\n                              dictItemList.push({\n                                \"CN_S_NAME\": val,\n                                \"Name\": val,\n                                \"label\": val,\n                                \"value\": val\n                              });\n                            }\n                            attr[j].dictitem = dictItemList;\n                            // attr[j].dictitem = result[i].choice_list;\n                          }\n                        }\n                      }\n                    }\n                  }\n\n                  for (var c = 0; c < $this.$data.classAttrList.length; c++) {\n                    var attr = $this.$data.classAttrList[c].Attr;\n                    for (var j = 0; j < attr.length; j++) {\n                      __f__(\"log\", attr[j].Name + '==' + result[i].attr, \" at pages/modal/ms_classAttr.vue:3003\");\n                      if (attr[j].Name == result[i].attr) {\n                        attr[j].Value = result[i].value;\n                      }\n                    }\n                  }\n                  var length = 0;\n                  if (!$this.$data.refdatastore.filter(function (s) {\n                    return result[i].attr == s.attr;\n                  }).length) {\n                    length = 1;\n                    $this.$data.refdatastore.push(result[i]);\n                  }\n                  if (length == 0) {\n                    for (var j = 0; j < $this.$data.refdatastore.length; j++) {\n                      if ($this.$data.refdatastore[j].attr == result[i].attr) {\n                        $this.$data.refdatastore[j].value = result[i].value;\n                      }\n                    }\n                  }\n                }\n              } else if (data.action[i].action_type == 'set_global_attr') {\n                $this.$data.global_attr = data.action[i].value || [];\n              }\n            }\n          }\n          if (data.result) {\n            var result = data.result;\n            for (var i = 0; i < result.length; i++) {\n              for (var c = 0; c < $this.$data.classAttrList.length; c++) {\n                var attr = $this.$data.classAttrList[c].Attr;\n                for (var j = 0; j < attr.length; j++) {\n                  if (attr[j].Name == result[i].attr) {\n                    attr[j].Value = result[i].value;\n                  }\n                }\n              }\n              var length = 0;\n              if (!$this.$data.refdatastore.filter(function (s) {\n                return result[i].attr == s.attr;\n              }).length) {\n                length = 1;\n                $this.$data.refdatastore.push(result[i]);\n              }\n              if (length == 0) {\n                for (var j = 0; j < $this.$data.refdatastore.length; j++) {\n                  if ($this.$data.refdatastore[j].attr == result[i].attr) {\n                    $this.$data.refdatastore[j].value = result[i].value;\n                  }\n                }\n              }\n            }\n          }\n        } else {\n          uni.showModal({\n            title: \"错误3\",\n            content: success.msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        // console.log(ex);\n        uni.showModal({\n          title: \"错误3.1\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\n    },\n    OKDataObjRunCustomEvent: function OKDataObjRunCustomEvent() {\n      var _this7 = this;\n      var enviroment = {\n        'function': '3000',\n        // 功能点编号\n        cls_id: this.$data.param.Master_Cls.ID,\n        // 功能点主数据类标识\n        'button': 'top',\n        // top/bottom\n        button_name: '新增',\n        master: {\n          cls_id: this.$data.param.Master_Cls.ID // button=bottom时 master的cls_id\n        }\n      };\n\n      var eventid = this.$data.edit_ok_event.scrip_id;\n      var req = [];\n      var attrlist = this.$data.classAttrList;\n      for (var i = 0; i < attrlist.length; i++) {\n        var attr = attrlist[i].Attr;\n        for (var j = 0; j < attr.length; j++) {\n          var ar = attr[j];\n          if (ar.Value == '请选择' || ar.Value == '——请选择——') ar.Value = '';\n          if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n          if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n            attr: ar.Name,\n            value: ar.ValID ? ar.ValID : ''\n          });else if (ar.Type == '布尔值') req.push({\n            attr: ar.Name,\n            value: ar.Value ? '1' : '0'\n          });else req.push({\n            attr: ar.Name,\n            value: ar.Value\n          });\n        }\n      }\n      if (this.$data.refdatastore.length > 0) {\n        for (var i = 0; i < this.$data.refdatastore.length; i++) {\n          if (!req.filter(function (s) {\n            return this.$data.refdatastore[i].attr == s.name;\n          }).length) {\n            length = 1;\n            req.push({\n              'attr': this.$data.refdatastore[i].attr,\n              'value': this.$data.refdatastore[i].value\n            });\n          }\n        }\n      }\n      var info = {\n        eventid: eventid,\n        edtype: \"0\",\n        projectid: '',\n        rclsid: '',\n        robjid: '',\n        userlogin: '',\n        clsid: this.$data.param.Master_Cls.ID,\n        objid: \"\",\n        attr: req\n      };\n      var dataInfo = {\n        edtype: info.edtype,\n        eventid: info.eventid,\n        projectid: info.projectid,\n        rclsid: info.rclsid,\n        robjid: info.robjid,\n        userlogin: info.userlogin,\n        clsid: info.clsid,\n        objid: info.objid,\n        attr: JSON.stringify(info.attr),\n        extinfo: JSON.stringify(enviroment),\n        global_attr: JSON.stringify(this.$data.global_attr)\n      };\n      __f__(\"log\", dataInfo, \" at pages/modal/ms_classAttr.vue:3153\");\n      this.$store.dispatch('DataObjRunCustomEventInfo', dataInfo).then(function (success) {\n        __f__(\"log\", success, \" at pages/modal/ms_classAttr.vue:3155\");\n        if (success.code == '00000') {\n          var data = JSON.parse(success.data);\n          var result = data.result;\n          for (var i = 0; i < result.length; i++) {\n            // self.class_attr_ele.find('.attr_field[data-field=\"' + result[i].attr + '\"]').val(result[i].value).data('val', result[i].value);\n            var length = 0;\n            if (!_this7.$data.refdatastore.filter(function (s) {\n              return result[i].attr == s.attr;\n            }).length) {\n              length = 1;\n              _this7.$data.refdatastore.push(result[i]);\n            }\n            if (length == 0) {\n              for (var j = 0; j < _this7.$data.refdatastore.length; j++) {\n                if (_this7.$data.refdatastore[j].attr == result[i].attr) {\n                  _this7.$data.refdatastore[j].value = result[i].value;\n                }\n              }\n            }\n          }\n          _this7.add();\n        } else {\n          uni.showModal({\n            title: \"错误4\",\n            content: success.msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        // console.log(ex);\n        uni.showModal({\n          title: \"错误4.1\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\n    },\n    DataObjRunCustomEvent_Return: function DataObjRunCustomEvent_Return(eventid, data_attr, button_callback, index, iindex) {\n      var _this8 = this;\n      var enviroment = {\n        'function': '3000',\n        // 功能点编号\n        cls_id: this.$data.param.Master_Cls.ID,\n        // 功能点主数据类标识\n        'button': 'top',\n        // top/bottom\n        button_name: '新增',\n        master: {\n          cls_id: this.$data.param.Master_Cls.ID // button=bottom时 master的cls_id\n          //obj_id: ''  // button=bottom时 master的obj_id\n        }\n      };\n\n      var req = [];\n      var attrlist = this.$data.classAttrList;\n      for (var i = 0; i < attrlist.length; i++) {\n        var attr = attrlist[i].Attr;\n        for (var j = 0; j < attr.length; j++) {\n          var ar = attr[j];\n          if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n          if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n            attr: ar.Name,\n            value: ar.ValID ? ar.ValID : ''\n          });else if (ar.Type == '布尔值') req.push({\n            attr: ar.Name,\n            value: ar.Value ? '1' : '0'\n          });else req.push({\n            attr: ar.Name,\n            value: ar.Value\n          });\n        }\n      }\n      if (this.$data.refdatastore.length > 0) {\n        for (var i = 0; i < this.$data.refdatastore.length; i++) {\n          if (!req.filter(function (s) {\n            return this.$data.refdatastore[i].attr == s.name;\n          }).length) {\n            length = 1;\n            req.push({\n              'attr': this.$data.refdatastore[i].attr,\n              'value': this.$data.refdatastore[i].value\n            });\n          }\n        }\n      }\n      var extinfo = enviroment;\n      extinfo.edit_dlg = {\n        type: 'small',\n        //小窗口\n        class_id: this.$data.param.Master_Cls.ID //当前数据类id\n      };\n\n      if (data_attr) {\n        extinfo.edit_dlg.form_control = {\n          //所属的表单控件\n          name: data_attr.Name,\n          //字段属性\n          text: data_attr.DispName,\n          //显示文本\n          group_name: data_attr.GroupName,\n          //属性组\n          type: data_attr.Type,\n          //字段类型\n          readonly: data_attr.ReadOnly,\n          //是否只读\n          button_img: data_attr.button_img,\n          //引用按钮的图标\n          button_tooltip: data_attr.button_tooltip //引用按钮的tooltip\n        };\n      }\n\n      var dataInfo = {\n        edtype: \"0\",\n        eventid: eventid,\n        projectid: '',\n        rclsid: '',\n        robjid: '',\n        userlogin: '',\n        clsid: this.$data.param.Master_Cls.ID,\n        objid: '',\n        attr: JSON.stringify(req),\n        extinfo: JSON.stringify(extinfo),\n        global_attr: JSON.stringify(this.$data.global_attr)\n      };\n      __f__(\"log\", dataInfo, \" at pages/modal/ms_classAttr.vue:3274\");\n      this.$store.dispatch('DataObjRunCustomEventInfo', dataInfo).then(function (success) {\n        __f__(\"log\", success, \" at pages/modal/ms_classAttr.vue:3276\");\n        if (success.code == '00000') {\n          var data = JSON.parse(success.data);\n          if (data != \"\") {\n            var actions = data.action;\n            __f__(\"log\", actions, \" at pages/modal/ms_classAttr.vue:3282\");\n            if (actions) {\n              for (var i = 0; i < actions.length; i++) {\n                var action = actions[i];\n                var val = action.value;\n                var enviroment = JSON.stringify(enviroment);\n                if (action.action_type == 'open_panel') {\n                  var d = dialog({\n                    title: '<i class=\"ace-icon fa fa-info-circle\"></i> ' + '提示',\n                    content: action.action_type + '此action尚未处理!'\n                  });\n                  d.show();\n                } else if (action.action_type == 'open_select_userdlg') {\n                  var style = val.style;\n                  // style == 'user' ? '选择人员' : style == 'department' ? '选择部门' : style == 'role' ? '选择角色' : ''\n                  var $this = _this8;\n                  var param = {\n                    index: index,\n                    iindex: iindex,\n                    button_callback: button_callback,\n                    req: req,\n                    data_attr: data_attr\n                  };\n                  uni.navigateTo({\n                    url: '../selpsn/index?mulit=false&param=' + JSON.stringify(param),\n                    events: {\n                      AddPer: function AddPer(data, param) {\n                        // console.log(param);\n                        __f__(\"log\", data, \" at pages/modal/ms_classAttr.vue:3312\");\n                        var callback_eventid = param.button_callback.trim();\n                        var info = {\n                          eventid: callback_eventid,\n                          edtype: \"0\",\n                          projectid: '',\n                          rclsid: '',\n                          robjid: '',\n                          userlogin: '',\n                          clsid: $this.$data.param.Master_Cls.ID,\n                          objid: \"\",\n                          attr: param.req,\n                          inputparameter: data\n                        };\n                        $this.DataObjRunCustomEvent(info, param.data_attr);\n                      }\n                    }\n                  });\n                } else if (action.action_type == 'open_data_query_dlg') {} else if (action.action_type == 'open_common_dlg') {\n                  var value = action.value;\n                  var d = dialog({\n                    title: '<i class=\"ace-icon fa fa-info-circle\"></i> ' + '提示',\n                    content: action.action_type + '此action尚未处理!'\n                  });\n                  d.show();\n                } else if (action.action_type == 'open_project_query_dlg') {\n                  //console.log(action.value.select_range);\n                  //console.log(action.value.mulit_select);\n                  var priRel = '-1';\n                  if (action.value.select_range == '全部相关') priRel = '0';else if (action.value.select_range == '我负责的项目') priRel = '1';else if (action.value.select_range == '我创建的') priRel = '2';else if (action.value.select_range == '我参与的' || action.value.select_range == '我参加的') priRel = '3';else if (action.value.select_range == '我关注的') priRel = '4';else if (action.value.select_range == '我下属的项目') priRel = '5';\n                  var $this = _this8;\n                  var param_ = {\n                    index: index,\n                    iindex: iindex,\n                    button_callback: button_callback,\n                    req: req\n                  };\n                  uni.navigateTo({\n                    url: '../selPrj/index?relation=' + priRel + '&param=' + JSON.stringify(param_),\n                    events: {\n                      AddPer: function AddPer(data, param) {\n                        $this.$data.classAttrList[param.index].Attr[param.iindex].Value = data[0].Name;\n                        $this.$data.classAttrList[param.index].Attr[param.iindex].ValID = data[0].ID + ';' + data[0].Name;\n                        var callback_eventid = param.button_callback.trim();\n                        if (callback_eventid) {\n                          var info = {\n                            eventid: callback_eventid,\n                            edtype: \"2\",\n                            projectid: data[0].ID,\n                            rclsid: \"\",\n                            robjid: \"\",\n                            userlogin: \"\",\n                            clsid: $this.$data.param.Master_Cls.ID,\n                            objid: \"\",\n                            attr: param.req\n                          };\n                          $this.DataObjRunCustomEvent(info);\n                        }\n                      }\n                    }\n                  });\n                } else {\n                  var d = dialog({\n                    title: '<i class=\"ace-icon fa fa-info-circle\"></i> ' + '提示',\n                    content: action.action_type + '此action尚未处理!'\n                  });\n                  d.show();\n                }\n              }\n            }\n          } else {\n            uni.showModal({\n              title: \"提示5.2\",\n              content: '调用 before_click_button 脚本返回空,event_id' + eventid,\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n          }\n        } else {\n          uni.showModal({\n            title: \"错误5\",\n            content: success.msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        // console.log(ex);\n        uni.showModal({\n          title: \"提示5.1\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\n    },\n    scan_ini_DataObjRunCustomEvent: function scan_ini_DataObjRunCustomEvent(info) {\n      var _this9 = this;\n      var param = {\n        EditStyle: this.$data.param.Sub_Cls.View_Style.Name,\n        ViewStyle: this.$data.param.Sub_Cls.View_Style.Name,\n        NotTriggerSysEvent: 0,\n        enviroment: {\n          'function': '3000',\n          // 功能点编号\n          cls_id: this.$data.param.Sub_Cls.ID,\n          // 功能点主数据类标识\n          'button': 'top',\n          // top/bottom\n          button_name: '新增',\n          master: {\n            cls_id: this.$data.param.Sub_Cls.ID // button=bottom时 master的cls_id\n            //obj_id: ''  // button=bottom时 master的obj_id\n          }\n        }\n      };\n\n      var inputparameter = '';\n      var global_attr = '';\n      var dataInfo = {\n        edtype: info.edtype,\n        eventid: info.eventid,\n        projectid: info.projectid,\n        rclsid: info.rclsid,\n        robjid: info.robjid,\n        userlogin: info.userlogin,\n        clsid: info.clsid,\n        objid: info.objid,\n        attr: JSON.stringify(info.attr),\n        extinfo: JSON.stringify(param),\n        inputparameter: inputparameter,\n        global_attr: global_attr\n      };\n      __f__(\"log\", dataInfo, \" at pages/modal/ms_classAttr.vue:3461\");\n      this.$store.dispatch('DataObjRunCustomEventInfo', dataInfo).then(function (success) {\n        __f__(\"log\", success, \" at pages/modal/ms_classAttr.vue:3463\");\n        if (success.code == '00000') {\n          var data = JSON.parse(success.data);\n          var actionlist = data.action;\n          if (actionlist) {\n            for (var j = 0; j < actionlist.length; j++) {\n              var action = actionlist[j];\n              var action_type = action.action_type;\n              var value = action.value;\n              if (action_type == 'set_dlg_attr') {\n                if (value) {\n                  var val = value;\n                  if (typeof value == 'string') {\n                    val = JSON.parse(value);\n                  }\n                  __f__(\"log\", val, \" at pages/modal/ms_classAttr.vue:3478\");\n                  for (var i = 0; i < val.length; i++) {\n                    for (var a = 0; a < _this9.$data.subClassAttrList.length; a++) {\n                      for (var l = 0; l < _this9.$data.subClassAttrList[a].Attr.length; l++) {\n                        var ca = _this9.$data.subClassAttrList[a].Attr[l];\n                        if (val[i].attr == ca.Name) {\n                          if (ca.Type == '字典' || ca.Type == '字典-字符串' || ca.Type == '字典-整数') {\n                            var dictItemList = [];\n                            for (var d in val[i].choice_list) {\n                              var val = val[i].choice_list[d];\n                              dictItemList.push({\n                                \"CN_S_NAME\": val,\n                                \"Name\": val,\n                                \"label\": val,\n                                \"value\": val\n                              });\n                            }\n                            ca.dictitem = dictItemList;\n                            // attr[j].dictitem = val[i].choice_list;\n                          } else {\n                            // ca.value = val[i].value;\n                          }\n                        }\n                      }\n                    }\n                    var length = 0;\n                    if (!_this9.$data.refdatastore.filter(function (s) {\n                      return val[i].attr == s.attr;\n                    }).length) {\n                      length = 1;\n                      _this9.$data.refdatastore.push(val[i]);\n                    }\n                    if (length == 0) {\n                      for (var j = 0; j < _this9.$data.refdatastore.length; j++) {\n                        if (_this9.$data.refdatastore[j].attr == val[i].attr) {\n                          _this9.$data.refdatastore[j].value = val[i].value;\n                        }\n                      }\n                    }\n                  }\n                }\n              }\n              if (action_type == 'open_select_userdlg') {\n                uni.showModal({\n                  title: \"错误6.2\",\n                  content: \"open_select_userdlg这个action_type还未处理!\",\n                  showCancel: false,\n                  confirmText: \"取消\"\n                });\n              }\n            }\n          }\n        } else {\n          uni.showModal({\n            title: \"错误6\",\n            content: success.msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        // console.log(ex);\n        uni.showModal({\n          title: \"错误6.1\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\n    },\n    scan_DataObjRunCustomEvent: function scan_DataObjRunCustomEvent(info, data_attr) {\n      var _this10 = this;\n      var $this = this;\n      var enviroment = {};\n      if (info.enviroment) {\n        enviroment = info.enviroment;\n      } else {\n        enviroment = {\n          'function': '3000',\n          // 功能点编号\n          cls_id: 'MBOX',\n          //this.$data.param.Sub_Cls.ID,     // 功能点从数据类标识\n          'button': 'top',\n          // top/bottom\n          button_name: '新增',\n          edit_dlg: {\n            type: 'small',\n            //小窗口\n            class_id: 'MBOX' //this.$data.param.Sub_Cls.ID,//当前数据类id\n          }\n        };\n      }\n\n      var global_attr = this.$data.global_attr;\n      if (info.global_attr) {\n        global_attr = info.global_attr;\n      }\n      var dataInfo = {\n        edtype: info.edtype,\n        eventid: info.eventid,\n        projectid: info.projectid.replace('{', '').replace('}', ''),\n        rclsid: info.rclsid,\n        robjid: info.robjid,\n        userlogin: info.userlogin,\n        clsid: info.clsid,\n        objid: info.objid,\n        attr: JSON.stringify(info.attr),\n        extinfo: JSON.stringify(enviroment),\n        inputparameter: JSON.stringify(info.inputParamter),\n        global_attr: JSON.stringify(global_attr)\n      };\n      __f__(\"log\", dataInfo, \" at pages/modal/ms_classAttr.vue:3589\");\n      this.$store.dispatch('DataObjRunCustomEventInfo', dataInfo).then(function (success) {\n        __f__(\"log\", success, \" at pages/modal/ms_classAttr.vue:3591\");\n        if (success.code == '00000') {\n          var data = JSON.parse(success.data);\n          var actionlist = data.action;\n          if (actionlist) {\n            __f__(\"log\", actionlist, \" at pages/modal/ms_classAttr.vue:3597\");\n            for (var ii = 0; ii < actionlist.length; ii++) {\n              var action = actionlist[ii];\n              if (action.action_type == 'set_dlg_attr') {\n                var result = action.value;\n                for (var i = 0; i < result.length; i++) {\n                  if (result[i].choice_list) {\n                    for (var s = 0; s < $this.$data.subPanelList.length; s++) {\n                      for (var c = 0; c < $this.$data.subPanelList[s].subClassAttrList.length; c++) {\n                        var attr = $this.$data.subPanelList[s].subClassAttrList[c].Attr;\n                        for (var j = 0; j < attr.length; j++) {\n                          if (attr[j].Name == result[i].attr) {\n                            if (attr[j].Type == '字典' || attr[j].Type == '字典-字符串' || attr[j].Type == '字典-整数') {\n                              var dictItemList = [];\n                              for (var d in result[i].choice_list) {\n                                var val = result[i].choice_list[d];\n                                dictItemList.push({\n                                  \"CN_S_NAME\": val,\n                                  \"Name\": val,\n                                  \"label\": val,\n                                  \"value\": val\n                                });\n                              }\n                              attr[j].dictitem = dictItemList;\n                              // attr[j].dictitem = result[i].choice_list;\n                            }\n                          }\n                        }\n                      }\n                    }\n                  }\n\n                  for (var s = 0; s < $this.$data.subPanelList.length; s++) {\n                    for (var c = 0; c < $this.$data.subPanelList[s].subClassAttrList.length; c++) {\n                      var attr = $this.$data.subPanelList[s].subClassAttrList[c].Attr;\n                      for (var j = 0; j < attr.length; j++) {\n                        __f__(\"log\", attr[j].Name + '==' + result[i].attr, \" at pages/modal/ms_classAttr.vue:3636\");\n                        if (attr[j].Name == result[i].attr) {\n                          attr[j].Value = result[i].value;\n                        }\n                      }\n                    }\n                  }\n                  var length = 0;\n                  if (!$this.$data.refdatastore.filter(function (s) {\n                    return result[i].attr == s.attr;\n                  }).length) {\n                    length = 1;\n                    $this.$data.refdatastore.push(result[i]);\n                  }\n                  if (length == 0) {\n                    for (var j = 0; j < $this.$data.refdatastore.length; j++) {\n                      if ($this.$data.refdatastore[j].attr == result[i].attr) {\n                        $this.$data.refdatastore[j].value = result[i].value;\n                      }\n                    }\n                  }\n                }\n              } else if (action.action_type == 'set_global_attr') {\n                $this.$actiontr = action.value || [];\n              } else if (action.action_type == 'open_common_dlg') {\n                //打开侧滑弹框\n                var $this = _this10;\n                if (action.value.common_dlg_id == 'check_list') {\n                  $this.$data.check_list = action.value.config;\n                  if (action.value.config.appear_style == 'sideslip')\n                    //判断是否是侧滑\n                    $this.$data.popupType = 'right';else $this.$data.popupType = 'center';\n                  // open 方法传入参数 等同在 uni-popup 组件上绑定 type属性\n                  $this.$refs.popup.open($this.$data.popupType);\n                }\n              } else if (action.action_type == 'add_subcls_panel') {\n                //主从数据类扫码查询数据\n                var result = action.value;\n                var $this = _this10;\n                var list_1 = JSON.parse(JSON.stringify(_this10.$data.subClassAttrList));\n                var scanCodeVal = $this.$data.scanCodeVal;\n                var rand = '';\n                for (var i = 0; i < 5; i++) {\n                  //生成5位随机数\n                  rand += Math.floor(Math.random() * 10);\n                }\n                if (info.inputParamter[0].attr) {\n                  if (info.inputParamter[0].attr == \"mast_input_3037\")\n                    //判断是主数据类扫码查询数据\n                    scanCodeVal = \"mast_input_3037-\" + rand;\n                }\n                if (info.attr[0].attr) {\n                  if (info.attr[0].attr == \"mast_input_3037\")\n                    //判断是主数据类扫码查询数据\n                    scanCodeVal = \"mast_input_3037-\" + rand;\n                }\n                $this.$data.subPanelList.push({\n                  scanCodeVal: scanCodeVal,\n                  subClassAttr: list_1\n                });\n                for (var i = 0; i < result.length; i++) {\n                  for (var s = 0; s < $this.$data.subPanelList.length; s++) {\n                    if ($this.$data.subPanelList[s].scanCodeVal == scanCodeVal) {\n                      if (result[i].attr == \"S_ID\") $this.$data.subPanelList[s].ObjID = result[i].value;\n                      var _subClassAttr = $this.$data.subPanelList[s].subClassAttr;\n                      for (var c = 0; c < _subClassAttr.length; c++) {\n                        var attr = _subClassAttr[c].Attr;\n                        for (var j = 0; j < attr.length; j++) {\n                          // console.log(attr[j].Name+'=='+result[i].attr);\n                          if (attr[j].Name == result[i].attr) {\n                            attr[j].Value = result[i].value;\n                          }\n                        }\n                      }\n\n                      // $this.$data.subPanelList[s].subClassAttr=list_1;\n                    }\n                  }\n\n                  var length = 0;\n                  if (!$this.$data.refdatastore.filter(function (s) {\n                    return result[i].attr == s.attr;\n                  }).length) {\n                    length = 1;\n                    $this.$data.refdatastore.push(result[i]);\n                  }\n                  if (length == 0) {\n                    for (var j = 0; j < $this.$data.refdatastore.length; j++) {\n                      if ($this.$data.refdatastore[j].attr == result[i].attr) {\n                        $this.$data.refdatastore[j].value = result[i].value;\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          }\n          if (data.result) {\n            var _list_ = JSON.parse(JSON.stringify(_this10.$data.subClassAttrList));\n            var scanCodeVal = $this.$data.scanCodeVal;\n            if (info.inputParamter[0].attr == \"mast_input_3037\") scanCodeVal = \"mast_input_3037-\" + ii;\n            $this.$data.subPanelList.push({\n              scanCodeVal: scanCodeVal,\n              subClassAttr: _list_\n            });\n            var result = data.result;\n            for (var i = 0; i < result.length; i++) {\n              for (var s = 0; s < $this.$data.subPanelList.length; s++) {\n                if ($this.$data.subPanelList[s].scanCodeVal == scanCodeVal) {\n                  if (result[i].attr == \"S_ID\") $this.$data.subPanelList[s].ObjID = result[i].value;\n                  var _subClassAttr = $this.$data.subPanelList[s].subClassAttr;\n                  for (var c = 0; c < _subClassAttr.length; c++) {\n                    var attr = _subClassAttr[c].Attr;\n                    for (var j = 0; j < attr.length; j++) {\n                      // console.log(attr[j].Name+'=='+result[i].attr);\n                      if (attr[j].Name == result[i].attr) {\n                        attr[j].Value = result[i].value;\n                      }\n                    }\n                  }\n                }\n              }\n              var length = 0;\n              if (!$this.$data.refdatastore.filter(function (s) {\n                return result[i].attr == s.attr;\n              }).length) {\n                length = 1;\n                $this.$data.refdatastore.push(result[i]);\n              }\n              if (length == 0) {\n                for (var j = 0; j < $this.$data.refdatastore.length; j++) {\n                  if ($this.$data.refdatastore[j].attr == result[i].attr) {\n                    $this.$data.refdatastore[j].value = result[i].value;\n                  }\n                }\n              }\n            }\n          }\n        } else {\n          uni.showModal({\n            title: \"错误7\",\n            content: success.msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        // console.log(ex);\n        uni.showModal({\n          title: \"错误7.1\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\n    },\n    scan_OKDataObjRunCustomEvent: function scan_OKDataObjRunCustomEvent(eventID) {\n      uni.showLoading({\n        title: \"加载中...\",\n        mask: true\n      });\n      var $this = this;\n      var req = [];\n      var attrlist = $this.$data.classAttrList;\n      for (var i = 0; i < attrlist.length; i++) {\n        var attr = attrlist[i].Attr;\n        for (var j = 0; j < attr.length; j++) {\n          var ar = attr[j];\n          if (ar.Value == '请选择' || ar.Value == '——请选择——') ar.Value = '';\n          if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n          if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n            attr: ar.Name,\n            value: ar.ValID ? ar.ValID : ''\n          });else if (ar.Type == '布尔值') req.push({\n            attr: ar.Name,\n            value: ar.Value ? '1' : '0'\n          });else if (ar.Type == '字典' || ar.Type == '字典-字符串' || ar.Type == '字典-整数') {\n            if (ar.select == true) {\n              //判断下拉是否多选\n              var valStr = \"\";\n              for (var v in ar.Value) {\n                if (valStr) valStr += \";\";\n                valStr += ar.Value[v];\n              }\n              req.push({\n                attr: ar.Name,\n                value: valStr\n              });\n            } else req.push({\n              attr: ar.Name,\n              value: ar.Value\n            });\n          } else req.push({\n            attr: ar.Name,\n            value: ar.Value ? ar.Value : ''\n          });\n          if (ar.notempty == true && !ar.Value) {\n            // if(ar.NotEmpty=='1'){\n            uni.hideLoading();\n            // uni.showToast({title:ar.DispName+'不能为空!',icon:\"success\",duration:3000});\n            uni.showModal({\n              title: \"提示\",\n              content: ar.DispName + '不能为空!',\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n            return;\n          }\n        }\n      }\n      var objects = [];\n      var subPanelList = $this.$data.subPanelList;\n      for (var s = 0; s < subPanelList.length; s++) {\n        var sub_req = [];\n        for (var i = 0; i < subPanelList[s].subClassAttr.length; i++) {\n          var attr = subPanelList[s].subClassAttr[i].Attr;\n          for (var j = 0; j < attr.length; j++) {\n            var ar = attr[j];\n            if (ar.Value == '请选择' || ar.Value == '——请选择——') ar.Value = '';\n            if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n            if (ar.Type == '引用人员' || ar.Type == '引用项目') sub_req.push({\n              attr: ar.Name,\n              value: ar.ValID ? ar.ValID : ''\n            });else if (ar.Type == '布尔值') sub_req.push({\n              attr: ar.Name,\n              value: ar.Value ? '1' : '0'\n            });else if (ar.Type == '字典' || ar.Type == '字典-字符串' || ar.Type == '字典-整数') {\n              if (ar.select == true) {\n                //判断下拉是否多选\n                var valStr = \"\";\n                for (var v in ar.Value) {\n                  if (valStr) valStr += \";\";\n                  valStr += ar.Value[v];\n                }\n                sub_req.push({\n                  attr: ar.Name,\n                  value: valStr\n                });\n              } else sub_req.push({\n                attr: ar.Name,\n                value: ar.Value\n              });\n            } else sub_req.push({\n              attr: ar.Name,\n              value: ar.Value ? ar.Value : ''\n            });\n            if (ar.notempty == true && !ar.Value) {\n              // if(ar.NotEmpty=='1'){\n              uni.hideLoading();\n              // uni.showToast({title:ar.DispName+'不能为空!',icon:\"success\",duration:3000});\n              uni.showModal({\n                title: \"提示\",\n                content: ar.DispName + '不能为空!',\n                showCancel: false,\n                confirmText: \"取消\"\n              });\n              return;\n            }\n          }\n        }\n        objects.push({\n          obj_id: subPanelList[s].scanCodeVal,\n          obj_attrs: sub_req\n        });\n      }\n      var dataJson = {\n        master_cls: {\n          cls_name: 'MBOX',\n          //$this.$data.param.Master_Cls.Name,\n          obj_attrs: req\n        },\n        input_3037: $this.$data.scanCodeVal,\n        //扫码内容\n        op_type: $this.$data.param.OperationType,\n        //作业类型定义\n        sub_cls: {\n          cls_name: 'MBOX',\n          //$this.$data.param.Sub_Cls.Name,\n          objects: objects\n        }\n      };\n      // console.log(JSON.stringify(dataJson));\n      var dataInfo = {\n        edtype: \"7\",\n        eventid: eventID,\n        projectid: '',\n        rclsid: '',\n        robjid: '',\n        userlogin: '',\n        clsid: 'MBOX',\n        objid: '',\n        attr: JSON.stringify([]),\n        extinfo: JSON.stringify([]),\n        global_attr: JSON.stringify($this.$data.global_attr),\n        dataJson: JSON.stringify(dataJson)\n      };\n      // console.log(JSON.stringify(dataInfo));\n      __f__(\"log\", dataInfo, \" at pages/modal/ms_classAttr.vue:3933\");\n      this.$store.dispatch('DataObjRunCustomEventInfo', dataInfo).then(function (success) {\n        __f__(\"log\", success, \" at pages/modal/ms_classAttr.vue:3935\");\n        uni.hideLoading();\n        if (success.code == '00000') {\n          var data = JSON.parse(success.data);\n          var result = data.result;\n          if (eventID != $this.$data.param.After_OK_Event.ID) $this.scan_OKDataObjRunCustomEvent($this.$data.param.After_OK_Event.ID);else {\n            //刷新\n            uni.redirectTo({\n              url: '../modal/ms_classAttr?param=' + JSON.stringify($this.$data.param) + \"&titlename=\" + $this.$data.title\n            });\n          }\n        } else {\n          uni.showModal({\n            title: \"错误8\",\n            content: success.msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        // console.log(ex);\n        uni.hideLoading();\n        uni.showModal({\n          title: \"错误8.1\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vcGFnZXMvbW9kYWwvbXNfY2xhc3NBdHRyLnZ1ZSJdLCJuYW1lcyI6WyJjb21wb25lbnRzIiwicGlja2VyQWRkcmVzcyIsImRhdGEiLCJ0aXRsZSIsInBhcmFtIiwiY2xhc3NBdHRyTGlzdCIsImNsYXNzR3JpZFN0eWxlIiwiZWRpdF9pbml0YWxfZXZlbnQiLCJlZGl0X29rX2V2ZW50IiwiZWRpdF9zZWxlY3RfY29tcG9zZV9ldmVudCIsImVkaXRfY29tcG9zZV9jbHNfaWQiLCJnbG9iYWxfYXR0ciIsInJlZmRhdGFzdG9yZSIsInNjYW5Db2RlVmFsIiwic3ViQ2xhc3NBdHRyTGlzdCIsInN1YlBhbmVsTGlzdCIsInN1YkNsYXNzR3JpZFN0eWxlIiwicG9wdXBUeXBlIiwiY2hlY2tfbGlzdCIsIm9uTG9hZCIsIm9wdGlvbnMiLCJ1bmkiLCJzZXROYXZpZ2F0aW9uQmFyVGl0bGUiLCJ0aXRsZW5hbWUiLCJKU09OIiwicGFyc2UiLCIkZGF0YSIsIkFkZF9CdG5OYW1lIiwiTWFzdGVyX0NscyIsIlZpZXdfU3R5bGUiLCJzaG93TW9kYWwiLCJjb250ZW50Iiwic2hvd0NhbmNlbCIsImNvbmZpcm1UZXh0IiwiTmFtZSIsImRhdGFJbmZvIiwiY2xhc3NfaWQiLCJJRCIsIiR0aGlzIiwiJHN0b3JlIiwic3RhdGUiLCJ0aGlzYXJlYUZ1bmNJRCIsImdldHRlcnMiLCJnZXRjbGFzc0F0dHJMaXN0IiwiY2xhc3NHcmlkU3R5bGVJbmZvIiwiZGlzcGF0Y2giLCJ0aGVuIiwic3VjY2VzcyIsImNvZGUiLCJtc2ciLCJjYXRjaCIsImV4IiwiZXJyTXNnIiwic3ViZGF0YUluZm8iLCJTdWJfQ2xzIiwidGhpc2FyZWFGdW5jU3ViSUQiLCJnZXRTdWJDbGFzc0F0dHJMaXN0IiwibWV0aG9kcyIsInNjYW5fY2xhc3NBdHRyX2V4dEJ1dHRvbiIsImUiLCJCZWZvcmVfU2VsZWN0X0V2ZW50IiwiU2Nhbl9Db2RlIiwibWFzdF9hdHRyIiwiYXR0cmxpc3QiLCJpIiwibGVuZ3RoIiwiYXR0ciIsIkF0dHIiLCJqIiwiYXIiLCJWYWx1ZSIsIkRpc3BOYW1lIiwiVHlwZSIsInB1c2giLCJ2YWx1ZSIsIlZhbElEIiwib2JqZWN0cyIsInMiLCJzdWJfcmVxIiwic3ViQ2xhc3NBdHRyIiwic2VsZWN0IiwidmFsU3RyIiwidiIsIm5vdGVtcHR5IiwiaGlkZUxvYWRpbmciLCJvYmpfaWQiLCJvYmpfYXR0cnMiLCJlbnZpcm9tZW50IiwiY2xzX2lkIiwiYnV0dG9uX25hbWUiLCJlZGl0X2RsZyIsInR5cGUiLCJtYXN0ZXJfY2xzIiwiY2xzX25hbWUiLCJyZXEiLCJzdWJfY2xzIiwiaW5mbyIsImV2ZW50aWQiLCJlZHR5cGUiLCJwcm9qZWN0aWQiLCJyY2xzaWQiLCJyb2JqaWQiLCJ1c2VybG9naW4iLCJjbHNpZCIsIm9iamlkIiwiaW5wdXRQYXJhbXRlciIsInNjYW5fRGF0YU9ialJ1bkN1c3RvbUV2ZW50IiwicG9wdXBDaGFuZ2UiLCJzaG93IiwiY2hlY2tDaGFuZ2UiLCJpbmRleCIsInRhcmdldCIsImRhdGFzZXQiLCJpc2NoZWNrIiwiaXRlbXMiLCJtdWx0aXBsZV9jaG9pY2UiLCJjaGVjayIsInBvcHVwX2NhbmNlbCIsIiRyZWZzIiwicG9wdXAiLCJjbG9zZSIsInBvcHVwX3NhdmEiLCJBZnRlcl9TZWxlY3RfRXZlbnQiLCJuYW1lIiwiaWQiLCJjYW5jZWwiLCJuYXZpZ2F0ZUJhY2siLCJkZWx0YSIsInBhbmVsX2RlbCIsIk9iaklEIiwic3BsaWNlIiwiY2xzSWQiLCJvYmpJZCIsInNob3dMb2FkaW5nIiwic3R5bGVOYW1lIiwiY2xzVHlwZSIsImdyaWRzdHlsZUluZm8iLCJ0aGlzRWRpdE5hbWUiLCJnZXRjbGFzc0dyaWRTdHlsZUluZm8iLCJjbGFzc19hdHRyX2luaXQiLCJTdHlsZURlZiIsInRoaXNFZGl0U3ViTmFtZSIsImdldFN1YkNsYXNzR3JpZFN0eWxlSW5mbyIsInN1YkNsYXNzX2F0dHJfaW5pdCIsIm9udGFwIiwiZ2V0QXBwIiwib25TY2FuIiwicmVzdWx0IiwiaXNWYWwiLCJkZWNvZGVkYXRhIiwiaGlkZUtleWJvYXJkIiwiSW5wdXRfQ2hhbmdlX0V2ZW50Iiwic3Vib250YXAiLCJzY2FuX29udGFwIiwiaXNmbGFnIiwibWFzdF9yZXEiLCJjbGFzc2F0dHJsaXN0Iiwic2Nhbl9vbmV2ZW50Iiwib25hcnJvdyIsIm9wZW4iLCJkYXRhX2F0dHIiLCJPcGVuIiwib25kYXRlVGltZSIsIm9uY2hhbmdlIiwiZGljdGl0ZW0iLCJhY3Rpb24iLCJ2YWwiLCJEYXRhT2JqUnVuQ3VzdG9tRXZlbnQiLCJvbmNoYW5nZTIiLCJpdGVtIiwiZGVsdmFsdWUiLCJpaW5kZXgiLCJkaW5kZXgiLCJpdGVtdmFsdWUiLCJzdWJfb25jaGFuZ2UiLCJzdWJfb25jaGFuZ2UyIiwiZCIsIm9uZXZlbnQiLCJvbmNoZWNrIiwiaXNjaGVja2VkIiwiaW5wdXRWYWxMaXN0SXNEZWwiLCJpbnB1dFZhbExpc3QiLCJhZGRyZXNzY2hhbmdlIiwiam9pbiIsImNsYXNzQXR0cl9leHRCdXR0b24iLCJiZWZvcmVfY2xpY2tfYnV0dG9uIiwiYnV0dG9uX2NhbGxiYWNrIiwiRGF0YU9ialJ1bkN1c3RvbUV2ZW50X1JldHVybiIsImNsYXNzQXR0cl9BZGRQZXIiLCJuYXZpZ2F0ZVRvIiwidXJsIiwic3RyaW5naWZ5IiwiZXZlbnRzIiwiQWRkUGVyIiwiTG9naW4iLCJ0cmltIiwiY2xhc3NBdHRyX0FkZFJlZiIsImNsYXNzQXR0cl9BZGRQcmoiLCJzYXZhIiwiQmVmb3JlX09LX0V2ZW50Iiwic2Nhbl9PS0RhdGFPYmpSdW5DdXN0b21FdmVudCIsIkFmdGVyX09LX0V2ZW50IiwiYWRkIiwibWFzayIsIm1hc3RlciIsImRhdGFfb2JqX2lkIiwibWFzdGVyY2xzaWQiLCJ1cGZpbGUiLCJwb3N0X2RhdGEiLCJjb21wb3NlIiwiZXh0aW5mbyIsIm5vdF90cmlnZ2VyX3N5c19ldmVudCIsIkFjdGlvbiIsInJldCIsInJlc3VsdF90eXBlIiwic2hvd1RvYXN0IiwiaWNvbiIsImR1cmF0aW9uIiwicmVkaXJlY3RUbyIsInNob3dfc3R5bGUiLCJuZXdhdHRybGlzdCIsImF0dHJncm91cF9uYW1lIiwiYXR0cnMiLCJjbHNhdHRyIiwibCIsImNhIiwiZWRpdCIsImV4dF9idXR0b24iLCJidXR0b25faW1nIiwiYnV0dG9uX3Rvb2x0aXAiLCJoaWRkZW4iLCJ1bmRlZmluZWQiLCJkaWN0aXRlbWxpc3QiLCJsYWJlbCIsIkNOX1NfTkFNRSIsIkNOX0NfSVNfREVGQVVMVCIsIm5vd0RhdGUiLCJEYXRlIiwiZGF0ZSIsInllYXIiLCJnZXRGdWxsWWVhciIsIm1vbnRoIiwiZ2V0TW9udGgiLCJkYXkiLCJnZXREYXRlIiwicmVsQ2xzTGlzdCIsImF0dHJfcmVzY2xzIiwiUmVsQ2xzIiwic3BsaXQiLCJpaSIsInJlc2NscyIsIlJlbENsc0xpc3QiLCJCa0NvbG9yIiwiSGFzQWNlIiwiSW1nRm9udFN0eWxlIiwiT3JkZXIiLCJjb250cm9sX3N0eWxlIiwidGl0bGVfcF93ZGl0aCIsIkZvbnQiLCJCa19Db2xvciIsIlRleHRfQ29sb3IiLCJldmVudGxpc3QiLCJldmVudCIsImV2ZW50X2lkIiwic2NyaXBfaWQiLCJjb21wb3NlX2Nsc19pZCIsImluaV9EYXRhT2JqUnVuQ3VzdG9tRXZlbnQiLCJzY2FuX2luaV9EYXRhT2JqUnVuQ3VzdG9tRXZlbnQiLCJFZGl0U3R5bGUiLCJWaWV3U3R5bGUiLCJOb3RUcmlnZ2VyU3lzRXZlbnQiLCJpbnB1dHBhcmFtZXRlciIsImFjdGlvbmxpc3QiLCJhY3Rpb25fdHlwZSIsImEiLCJkaWN0SXRlbUxpc3QiLCJjaG9pY2VfbGlzdCIsImZpbHRlciIsImZvcm1fY29udHJvbCIsInRleHQiLCJncm91cF9uYW1lIiwiR3JvdXBOYW1lIiwicmVhZG9ubHkiLCJSZWFkT25seSIsInJlcGxhY2UiLCJjIiwiT0tEYXRhT2JqUnVuQ3VzdG9tRXZlbnQiLCJhY3Rpb25zIiwiZGlhbG9nIiwic3R5bGUiLCJjYWxsYmFja19ldmVudGlkIiwicHJpUmVsIiwic2VsZWN0X3JhbmdlIiwicGFyYW1fIiwiJGFjdGlvbnRyIiwiY29tbW9uX2RsZ19pZCIsImNvbmZpZyIsImFwcGVhcl9zdHlsZSIsImxpc3RfMSIsInJhbmQiLCJNYXRoIiwiZmxvb3IiLCJyYW5kb20iLCJfc3ViQ2xhc3NBdHRyIiwiZXZlbnRJRCIsImRhdGFKc29uIiwiaW5wdXRfMzAzNyIsIm9wX3R5cGUiLCJPcGVyYXRpb25UeXBlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFtOUJBO0FBbjlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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bi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cbmltcG9ydCBwaWNrZXJBZGRyZXNzIGZyb20gJy4uLy4uL2pzL3BpY2tlckFkZHJlc3MvcGlja2VyQWRkcmVzcy52dWUnXG5leHBvcnQgZGVmYXVsdCB7XG5cdGNvbXBvbmVudHM6IHtcblx0XHRwaWNrZXJBZGRyZXNzXG5cdH0sXG5cdGRhdGEoKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHRpdGxlOiAn5paw5aKeJyxcblx0XHRcdHBhcmFtOiB7fSxcblx0XHRcdGNsYXNzQXR0ckxpc3Q6IFtdLFxuXHRcdFx0Y2xhc3NHcmlkU3R5bGU6IFtdLFxuXHRcdFx0ZWRpdF9pbml0YWxfZXZlbnQ6IFwiXCIsIC8v5by556qX5Yid5aeL5YyW5LqL5Lu2SURcblx0XHRcdGVkaXRfb2tfZXZlbnQ6IFwiXCIsIC8v5by556qX54K55Ye7T0sg6Kem5Y+R5LqL5Lu2SURcblx0XHRcdGVkaXRfc2VsZWN0X2NvbXBvc2VfZXZlbnQ6IFwiXCIsIC8v6YCJ5oup57uE5oiQ5a+56LGh5pe26LCD55SoXG5cdFx0XHRlZGl0X2NvbXBvc2VfY2xzX2lkOiBcIlwiLFxuXHRcdFx0Z2xvYmFsX2F0dHI6IFtdLFxuXHRcdFx0cmVmZGF0YXN0b3JlOiBbXSwgLy/lvJXnlKjmlbDmja7lrZjlgqjljLovLyB7YXR0cjonR19QUkpfJyArIGJpbmRhdHRyICsgJ19JRCcsIHZhbHVlOmluZm8uaWR9XG5cdFx0XHRzY2FuQ29kZVZhbDogXCJcIixcblx0XHRcdHN1YkNsYXNzQXR0ckxpc3Q6IFtdLFxuXHRcdFx0c3ViUGFuZWxMaXN0OiBbXSxcblx0XHRcdHN1YkNsYXNzR3JpZFN0eWxlOiBbXSxcblx0XHRcdHBvcHVwVHlwZTogXCJjZW50ZXJcIixcblx0XHRcdGNoZWNrX2xpc3Q6IHt9LFxuXHRcdH1cblx0fSxcblx0b25Mb2FkKG9wdGlvbnMpIHtcblx0XHQvLyBjb25zb2xlLmxvZyhvcHRpb25zKTtcblx0XHR1bmkuc2V0TmF2aWdhdGlvbkJhclRpdGxlKHtcblx0XHRcdHRpdGxlOiBvcHRpb25zLnRpdGxlbmFtZVxuXHRcdH0pOyAvL+iuvue9rumhtumDqOagh+mimCBcblx0XHR2YXIgcGFyYW0gPSBKU09OLnBhcnNlKG9wdGlvbnMucGFyYW0pO1xuXHRcdHRoaXMuJGRhdGEudGl0bGUgPSBwYXJhbS5BZGRfQnRuTmFtZSA/IHBhcmFtLkFkZF9CdG5OYW1lIDogb3B0aW9ucy50aXRsZW5hbWU7IC8v6K6+572u5oyJ6ZKu5paH5a2XXG5cdFx0Y29uc29sZS5sb2cocGFyYW0pO1xuXHRcdGlmICghcGFyYW0uTWFzdGVyX0Nscy5WaWV3X1N0eWxlKSB7XG5cdFx0XHR1bmkuc2hvd01vZGFsKHtcblx0XHRcdFx0dGl0bGU6IFwi5o+Q56S6XCIsXG5cdFx0XHRcdGNvbnRlbnQ6IFwi6K+l5Yqf6IO954K55pyq6YWN572u55WM6Z2i56qX5Y+j77yM6K+36YeN5paw6YWN572u77yBXCIsXG5cdFx0XHRcdHNob3dDYW5jZWw6IGZhbHNlLFxuXHRcdFx0XHRjb25maXJtVGV4dDogXCLlj5bmtohcIlxuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGlmICghcGFyYW0uTWFzdGVyX0Nscy5WaWV3X1N0eWxlLk5hbWUpIHtcblx0XHRcdHVuaS5zaG93TW9kYWwoe1xuXHRcdFx0XHR0aXRsZTogXCLmj5DnpLpcIixcblx0XHRcdFx0Y29udGVudDogXCLor6Xlip/og73ngrnmnKrphY3nva7nqpflj6PmoLflvI/vvIzor7fph43mlrDphY3nva7vvIFcIixcblx0XHRcdFx0c2hvd0NhbmNlbDogZmFsc2UsXG5cdFx0XHRcdGNvbmZpcm1UZXh0OiBcIuWPlua2iFwiXG5cdFx0XHR9KTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0dGhpcy4kZGF0YS5wYXJhbSA9IHBhcmFtO1xuXHRcdC8vIHZhciBlZGl0X2RsZyA9IHtcblx0XHQvLyAgICAgTW9kZWw6IHBhcmFtLkVkaXREbGdNb2RlLFxuXHRcdC8vICAgICBOYW1lOiBwYXJhbS5NYXN0ZXJfQ2xzLlZpZXdfU3R5bGUuTmFtZVxuXHRcdC8vIH1cblx0XHQvL+S4u+aVsOaNruexu+iOt+WPllxuXHRcdHZhciBkYXRhSW5mbyA9IHtcblx0XHRcdGNsYXNzX2lkOiBwYXJhbS5NYXN0ZXJfQ2xzLklEXG5cdFx0fTtcblx0XHR2YXIgJHRoaXMgPSB0aGlzO1xuXHRcdCR0aGlzLiRzdG9yZS5zdGF0ZS50aGlzYXJlYUZ1bmNJRCA9IHBhcmFtLk1hc3Rlcl9DbHMuSUQ7XG5cdFx0Ly8gY29uc29sZS5sb2coJHRoaXMuJHN0b3JlLmdldHRlcnMuZ2V0Y2xhc3NBdHRyTGlzdCk7XG5cdFx0aWYgKCR0aGlzLiRzdG9yZS5nZXR0ZXJzLmdldGNsYXNzQXR0ckxpc3QpIHtcblx0XHRcdCR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3QgPSAkdGhpcy4kc3RvcmUuZ2V0dGVycy5nZXRjbGFzc0F0dHJMaXN0LmRhdGE7XG5cdFx0XHQkdGhpcy5jbGFzc0dyaWRTdHlsZUluZm8ocGFyYW0uTWFzdGVyX0Nscy5JRCwgJHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5WaWV3X1N0eWxlLk5hbWUsICdNYXN0Jyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdCR0aGlzLiRzdG9yZS5kaXNwYXRjaCgnY2xhc3NBdHRyTGlzdCcsIGRhdGFJbmZvKS50aGVuKHN1Y2Nlc3MgPT4ge1xuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhzdWNjZXNzKTtcblx0XHRcdFx0aWYgKHN1Y2Nlc3MuY29kZSA9PSAnMDAwMDAnKSB7XG5cdFx0XHRcdFx0JHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdCA9IHN1Y2Nlc3MuZGF0YTtcblxuXHRcdFx0XHRcdCR0aGlzLmNsYXNzR3JpZFN0eWxlSW5mbyhwYXJhbS5NYXN0ZXJfQ2xzLklELCAkdGhpcy4kZGF0YS5wYXJhbS5NYXN0ZXJfQ2xzLlZpZXdfU3R5bGUuTmFtZSxcblx0XHRcdFx0XHRcdCdNYXN0Jyk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7XG5cdFx0XHRcdFx0XHR0aXRsZTogXCLplJnor68xXCIsXG5cdFx0XHRcdFx0XHRjb250ZW50OiBzdWNjZXNzLm1zZyxcblx0XHRcdFx0XHRcdHNob3dDYW5jZWw6IGZhbHNlLFxuXHRcdFx0XHRcdFx0Y29uZmlybVRleHQ6IFwi5Y+W5raIXCJcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSkuY2F0Y2goZXggPT4ge1xuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhleCk7XG5cdFx0XHRcdHVuaS5zaG93TW9kYWwoe1xuXHRcdFx0XHRcdHRpdGxlOiBcIumUmeivrzEuMVwiLFxuXHRcdFx0XHRcdGNvbnRlbnQ6IGV4LmVyck1zZyxcblx0XHRcdFx0XHRzaG93Q2FuY2VsOiBmYWxzZSxcblx0XHRcdFx0XHRjb25maXJtVGV4dDogXCLlj5bmtohcIlxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdC8v5LuO5pWw5o2u57G76I635Y+WXG5cdFx0dmFyIHN1YmRhdGFJbmZvID0ge1xuXHRcdFx0Y2xhc3NfaWQ6IHBhcmFtLlN1Yl9DbHMuSURcblx0XHR9O1xuXHRcdCR0aGlzLiRzdG9yZS5zdGF0ZS50aGlzYXJlYUZ1bmNTdWJJRCA9IHBhcmFtLlN1Yl9DbHMuSUQ7XG5cdFx0aWYgKCR0aGlzLiRzdG9yZS5nZXR0ZXJzLmdldFN1YkNsYXNzQXR0ckxpc3QpIHtcblx0XHRcdCR0aGlzLiRkYXRhLnN1YkNsYXNzQXR0ckxpc3QgPSAkdGhpcy4kc3RvcmUuZ2V0dGVycy5nZXRTdWJDbGFzc0F0dHJMaXN0LmRhdGE7XG5cdFx0XHQkdGhpcy5jbGFzc0dyaWRTdHlsZUluZm8ocGFyYW0uU3ViX0Nscy5JRCwgJHRoaXMuJGRhdGEucGFyYW0uU3ViX0Nscy5WaWV3X1N0eWxlLk5hbWUsICdTdWInKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0JHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdzdWJDbGFzc0F0dHJMaXN0Jywgc3ViZGF0YUluZm8pLnRoZW4oc3VjY2VzcyA9PiB7XG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKHN1Y2Nlc3MpO1xuXHRcdFx0XHRpZiAoc3VjY2Vzcy5jb2RlID09ICcwMDAwMCcpIHtcblx0XHRcdFx0XHQkdGhpcy4kZGF0YS5zdWJDbGFzc0F0dHJMaXN0ID0gc3VjY2Vzcy5kYXRhO1xuXG5cdFx0XHRcdFx0JHRoaXMuY2xhc3NHcmlkU3R5bGVJbmZvKHBhcmFtLlN1Yl9DbHMuSUQsICR0aGlzLiRkYXRhLnBhcmFtLlN1Yl9DbHMuVmlld19TdHlsZS5OYW1lLFxuXHRcdFx0XHRcdFx0J1N1YicpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe1xuXHRcdFx0XHRcdFx0dGl0bGU6IFwi6ZSZ6K+vMV8xXCIsXG5cdFx0XHRcdFx0XHRjb250ZW50OiBzdWNjZXNzLm1zZyxcblx0XHRcdFx0XHRcdHNob3dDYW5jZWw6IGZhbHNlLFxuXHRcdFx0XHRcdFx0Y29uZmlybVRleHQ6IFwi5Y+W5raIXCJcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSkuY2F0Y2goZXggPT4ge1xuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhleCk7XG5cdFx0XHRcdHVuaS5zaG93TW9kYWwoe1xuXHRcdFx0XHRcdHRpdGxlOiBcIumUmeivrzFfMS4xXCIsXG5cdFx0XHRcdFx0Y29udGVudDogZXguZXJyTXNnLFxuXHRcdFx0XHRcdHNob3dDYW5jZWw6IGZhbHNlLFxuXHRcdFx0XHRcdGNvbmZpcm1UZXh0OiBcIuWPlua2iFwiXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9LFxuXHRtZXRob2RzOiB7XG5cdFx0c2Nhbl9jbGFzc0F0dHJfZXh0QnV0dG9uKGUpIHsgLy/pgInmi6nmjInpkq7liY1cblx0XHRcdHZhciAkdGhpcyA9IHRoaXM7XG5cdFx0XHR2YXIgQmVmb3JlX1NlbGVjdF9FdmVudCA9ICR0aGlzLiRkYXRhLnBhcmFtLlNjYW5fQ29kZS5CZWZvcmVfU2VsZWN0X0V2ZW50O1xuXHRcdFx0aWYgKCFCZWZvcmVfU2VsZWN0X0V2ZW50KSB7XG5cdFx0XHRcdHVuaS5zaG93TW9kYWwoe1xuXHRcdFx0XHRcdHRpdGxlOiBcIuaPkOekulwiLFxuXHRcdFx0XHRcdGNvbnRlbnQ6IFwi6YCJ5oup5YmN5LqL5Lu25Li656m677yBXCIsXG5cdFx0XHRcdFx0c2hvd0NhbmNlbDogZmFsc2UsXG5cdFx0XHRcdFx0Y29uZmlybVRleHQ6IFwi5Y+W5raIXCJcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdHZhciBtYXN0X2F0dHIgPSBbXTtcblx0XHRcdHZhciBhdHRybGlzdCA9IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdDtcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmxpc3QubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0dmFyIGF0dHIgPSBhdHRybGlzdFtpXS5BdHRyO1xuXHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IGF0dHIubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0XHR2YXIgYXIgPSBhdHRyW2pdO1xuXHRcdFx0XHRcdGlmIChhci5WYWx1ZSA9PSAn6K+36YCJ5oupJykge1xuXHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7XG5cdFx0XHRcdFx0XHRcdHRpdGxlOiBcIuaPkOekulwiLFxuXHRcdFx0XHRcdFx0XHRjb250ZW50OiBhci5EaXNwTmFtZSArIFwi5pyq6YCJ5oup5pWw5o2u77yBXCIsXG5cdFx0XHRcdFx0XHRcdHNob3dDYW5jZWw6IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRjb25maXJtVGV4dDogXCLlj5bmtohcIlxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmIChhci5UeXBlID09ICflvJXnlKjlr7nosaEo5aSa5LiqKScpXG5cdFx0XHRcdFx0XHRpZiAoYXIuVmFsdWUgPT0gJ+ivtycpIGFyLlZhbHVlID0gJyc7XG5cdFx0XHRcdFx0aWYgKGFyLlR5cGUgPT0gJ+W8leeUqOS6uuWRmCcgfHwgYXIuVHlwZSA9PSAn5byV55So6aG555uuJylcblx0XHRcdFx0XHRcdG1hc3RfYXR0ci5wdXNoKHtcblx0XHRcdFx0XHRcdFx0YXR0cjogYXIuTmFtZSxcblx0XHRcdFx0XHRcdFx0dmFsdWU6IGFyLlZhbElEID8gYXIuVmFsSUQgOiAnJ1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0ZWxzZSBpZiAoYXIuVHlwZSA9PSAn5biD5bCU5YC8Jylcblx0XHRcdFx0XHRcdG1hc3RfYXR0ci5wdXNoKHtcblx0XHRcdFx0XHRcdFx0YXR0cjogYXIuTmFtZSxcblx0XHRcdFx0XHRcdFx0dmFsdWU6IGFyLlZhbHVlID8gJzEnIDogJzAnXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHRtYXN0X2F0dHIucHVzaCh7XG5cdFx0XHRcdFx0XHRcdGF0dHI6IGFyLk5hbWUsXG5cdFx0XHRcdFx0XHRcdHZhbHVlOiBhci5WYWx1ZSA/IGFyLlZhbHVlIDogJydcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRcblx0XHRcdHZhciBvYmplY3RzID0gW107XG5cdFx0XHR2YXIgc3ViUGFuZWxMaXN0ID0gJHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0O1xuXHRcdFx0Zm9yICh2YXIgcyA9IDA7IHMgPCBzdWJQYW5lbExpc3QubGVuZ3RoOyBzKyspIHtcblx0XHRcdFx0dmFyIHN1Yl9yZXEgPSBbXTtcblx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBzdWJQYW5lbExpc3Rbc10uc3ViQ2xhc3NBdHRyLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0dmFyIGF0dHIgPSBzdWJQYW5lbExpc3Rbc10uc3ViQ2xhc3NBdHRyW2ldLkF0dHI7XG5cdFx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0XHR2YXIgYXIgPSBhdHRyW2pdO1xuXHRcdFx0XHRcdFx0aWYgKGFyLlZhbHVlID09ICfor7fpgInmi6knIHx8IGFyLlZhbHVlID09ICfigJTigJTor7fpgInmi6nigJTigJQnKSBhci5WYWx1ZSA9ICcnO1xuXHRcdFx0XHRcdFx0aWYgKGFyLlR5cGUgPT0gJ+W8leeUqOWvueixoSjlpJrkuKopJylcblx0XHRcdFx0XHRcdFx0aWYgKGFyLlZhbHVlID09ICfor7cnKSBhci5WYWx1ZSA9ICcnO1xuXHRcdFx0XHRcdFx0aWYgKGFyLlR5cGUgPT0gJ+W8leeUqOS6uuWRmCcgfHwgYXIuVHlwZSA9PSAn5byV55So6aG555uuJylcblx0XHRcdFx0XHRcdFx0c3ViX3JlcS5wdXNoKHtcblx0XHRcdFx0XHRcdFx0XHRhdHRyOiBhci5OYW1lLFxuXHRcdFx0XHRcdFx0XHRcdHZhbHVlOiBhci5WYWxJRCA/IGFyLlZhbElEIDogJydcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRlbHNlIGlmIChhci5UeXBlID09ICfluIPlsJTlgLwnKVxuXHRcdFx0XHRcdFx0XHRzdWJfcmVxLnB1c2goe1xuXHRcdFx0XHRcdFx0XHRcdGF0dHI6IGFyLk5hbWUsXG5cdFx0XHRcdFx0XHRcdFx0dmFsdWU6IGFyLlZhbHVlID8gJzEnIDogJzAnXG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0ZWxzZSBpZiAoYXIuVHlwZSA9PSAn5a2X5YW4JyB8fCBhci5UeXBlID09ICflrZflhbgt5a2X56ym5LiyJyB8fCBhci5UeXBlID09ICflrZflhbgt5pW05pWwJykge1xuXHRcdFx0XHRcdFx0XHRpZiAoYXIuc2VsZWN0ID09IHRydWUpIHsgLy/liKTmlq3kuIvmi4nmmK/lkKblpJrpgIlcblx0XHRcdFx0XHRcdFx0XHR2YXIgdmFsU3RyID0gXCJcIjtcblx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciB2IGluIGFyLlZhbHVlKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAodmFsU3RyKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YWxTdHIgKz0gXCI7XCI7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YWxTdHIgKz0gYXIuVmFsdWVbdl07XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdHN1Yl9yZXEucHVzaCh7XG5cdFx0XHRcdFx0XHRcdFx0XHRhdHRyOiBhci5OYW1lLFxuXHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU6IHZhbFN0clxuXHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Vcblx0XHRcdFx0XHRcdFx0XHRzdWJfcmVxLnB1c2goe1xuXHRcdFx0XHRcdFx0XHRcdFx0YXR0cjogYXIuTmFtZSxcblx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlOiBhci5WYWx1ZVxuXHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fSBlbHNlXG5cdFx0XHRcdFx0XHRcdHN1Yl9yZXEucHVzaCh7XG5cdFx0XHRcdFx0XHRcdFx0YXR0cjogYXIuTmFtZSxcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogYXIuVmFsdWUgPyBhci5WYWx1ZSA6ICcnXG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XG5cdFx0XHRcdFx0XHRpZiAoYXIubm90ZW1wdHkgPT0gdHJ1ZSAmJiAhYXIuVmFsdWUpIHtcblx0XHRcdFx0XHRcdFx0Ly8gaWYoYXIuTm90RW1wdHk9PScxJyl7XG5cdFx0XHRcdFx0XHRcdHVuaS5oaWRlTG9hZGluZygpO1xuXHRcdFx0XHRcdFx0XHQvLyB1bmkuc2hvd1RvYXN0KHt0aXRsZTphci5EaXNwTmFtZSsn5LiN6IO95Li656m677yBJyxpY29uOlwic3VjY2Vzc1wiLGR1cmF0aW9uOjMwMDB9KTtcblx0XHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7XG5cdFx0XHRcdFx0XHRcdFx0dGl0bGU6IFwi5o+Q56S6XCIsXG5cdFx0XHRcdFx0XHRcdFx0Y29udGVudDogYXIuRGlzcE5hbWUgKyAn5LiN6IO95Li656m677yBJyxcblx0XHRcdFx0XHRcdFx0XHRzaG93Q2FuY2VsOiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0XHRjb25maXJtVGV4dDogXCLlj5bmtohcIlxuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRvYmplY3RzLnB1c2goe1xuXHRcdFx0XHRcdG9ial9pZDogc3ViUGFuZWxMaXN0W3NdLnNjYW5Db2RlVmFsLFxuXHRcdFx0XHRcdG9ial9hdHRyczogc3ViX3JlcVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdHZhciBlbnZpcm9tZW50ID0ge1xuXHRcdFx0XHQnZnVuY3Rpb24nOiAnMzAwMCcsIC8vIOWKn+iDveeCuee8luWPt1xuXHRcdFx0XHRjbHNfaWQ6ICdNQk9YJywgLy90aGlzLiRkYXRhLnBhcmFtLlN1Yl9DbHMuSUQsICAgICAvLyDlip/og73ngrnku47mlbDmja7nsbvmoIfor4Zcblx0XHRcdFx0J2J1dHRvbic6ICd0b3AnLCAvLyB0b3AvYm90dG9tXG5cdFx0XHRcdGJ1dHRvbl9uYW1lOiAn5paw5aKeJyxcblx0XHRcdFx0ZWRpdF9kbGc6IHtcblx0XHRcdFx0XHR0eXBlOiAnc21hbGwnLCAvL+Wwj+eql+WPo1xuXHRcdFx0XHRcdGNsYXNzX2lkOiAnTUJPWCcsIC8vdGhpcy4kZGF0YS5wYXJhbS5TdWJfQ2xzLklELC8v5b2T5YmN5pWw5o2u57G7aWRcblx0XHRcdFx0fSxcblx0XHRcdFx0bWFzdGVyX2Nsczoge1xuXHRcdFx0XHRcdGNsc19uYW1lOiAnTUJPWCcsIC8vJHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5OYW1lLFxuXHRcdFx0XHRcdG9ial9hdHRyczogcmVxXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHN1Yl9jbHM6IHtcblx0XHRcdFx0XHRjbHNfbmFtZTogJ01CT1gnLCAvLyR0aGlzLiRkYXRhLnBhcmFtLlN1Yl9DbHMuTmFtZSxcblx0XHRcdFx0XHRvYmplY3RzOiBvYmplY3RzXG5cdFx0XHRcdH1cblx0XHRcdFx0XG5cdFx0XHR9O1xuXHRcdFx0dmFyIHJlcSA9IFtdO1xuXHRcdFx0Ly8gdmFyIHN1YlBhbmVsTGlzdCA9ICR0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdDtcblx0XHRcdC8vIGZvciAodmFyIHMgPSAwOyBzIDwgc3ViUGFuZWxMaXN0Lmxlbmd0aDsgcysrKSB7XG5cdFx0XHQvLyBcdHZhciBqc29uID0ge307XG5cdFx0XHQvLyBcdGZvciAodmFyIGkgPSAwOyBpIDwgc3ViUGFuZWxMaXN0W3NdLnN1YkNsYXNzQXR0ci5sZW5ndGg7IGkrKykge1xuXHRcdFx0Ly8gXHRcdHZhciBhdHRyID0gc3ViUGFuZWxMaXN0W3NdLnN1YkNsYXNzQXR0cltpXS5BdHRyO1xuXHRcdFx0Ly8gXHRcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xuXHRcdFx0Ly8gXHRcdFx0dmFyIGFyID0gYXR0cltqXTtcblx0XHRcdC8vIFx0XHRcdGpzb25bYXIuTmFtZV0gPSBhci5WYWx1ZTtcblx0XHRcdC8vIFx0XHR9XG5cdFx0XHQvLyBcdH1cblx0XHRcdC8vIFx0cmVxLnB1c2goanNvbik7XG5cdFx0XHQvLyB9XG5cblx0XHRcdHZhciBpbmZvID0ge1xuXHRcdFx0XHRldmVudGlkOiBCZWZvcmVfU2VsZWN0X0V2ZW50LklELFxuXHRcdFx0XHRlZHR5cGU6IFwiN1wiLCAvL1wiMFwiLFxuXHRcdFx0XHRwcm9qZWN0aWQ6ICcnLFxuXHRcdFx0XHRyY2xzaWQ6ICcnLFxuXHRcdFx0XHRyb2JqaWQ6ICcnLFxuXHRcdFx0XHR1c2VybG9naW46ICcnLFxuXHRcdFx0XHRjbHNpZDogJ01CT1gnLCAvL3RoaXMuJGRhdGEucGFyYW0uU3ViX0Nscy5JRCxcblx0XHRcdFx0b2JqaWQ6IFwiXCIsXG5cdFx0XHRcdGF0dHI6IFtdLFxuXHRcdFx0XHRnbG9iYWxfYXR0cjogcmVxLFxuXHRcdFx0XHRtYXN0X2F0dHI6IG1hc3RfYXR0cixcblx0XHRcdFx0aW5wdXRQYXJhbXRlcjogbWFzdF9hdHRyLFxuXHRcdFx0XHRlbnZpcm9tZW50OiBlbnZpcm9tZW50XG5cdFx0XHR9XG5cdFx0XHQvLyBjb25zb2xlLmxvZyhpbmZvKTtcblx0XHRcdHRoaXMuc2Nhbl9EYXRhT2JqUnVuQ3VzdG9tRXZlbnQoaW5mbywgXCJcIik7XG5cdFx0fSxcblx0XHRwb3B1cENoYW5nZShlKSB7XG5cdFx0XHRjb25zb2xlLmxvZygn5b2T5YmN5qih5byP77yaJyArIGUudHlwZSArICcs54q25oCB77yaJyArIGUuc2hvdyk7XG5cdFx0fSxcblx0XHRjaGVja0NoYW5nZShlKSB7IC8v5by55qGGY2hlY2vpgInmi6lcblx0XHRcdC8vIGNvbnNvbGUubG9nKGUudGFyZ2V0LmRhdGFzZXQpO1xuXHRcdFx0dmFyIGluZGV4ID0gZS50YXJnZXQuZGF0YXNldC5pbmRleDtcblx0XHRcdHZhciBpc2NoZWNrID0gZS50YXJnZXQuZGF0YXNldC5pc2NoZWNrO1xuXHRcdFx0dmFyIGRhdGEgPSB0aGlzLiRkYXRhLmNoZWNrX2xpc3QuaXRlbXM7XG5cdFx0XHQvLyB0aGlzLiRkYXRhLmNoZWNrX2xpc3QuaXRlbXM9W107XG5cdFx0XHRpZiAodGhpcy4kZGF0YS5jaGVja19saXN0Lm11bHRpcGxlX2Nob2ljZSA9PSBcIjBcIikgeyAvL+WIpOaWreaXtuWNlemAiei/mOaYr+WkmumAiVxuXHRcdFx0XHRmb3IgKHZhciBpIGluIGRhdGEpIHtcblx0XHRcdFx0XHRkYXRhW2ldLmNoZWNrID0gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGRhdGFbaW5kZXhdLmNoZWNrID0gaXNjaGVjayA/IGZhbHNlIDogdHJ1ZTtcblx0XHRcdHRoaXMuJGRhdGEuY2hlY2tfbGlzdC5pdGVtcyA9IGRhdGE7XG5cblx0XHR9LFxuXHRcdHBvcHVwX2NhbmNlbChlKSB7IC8v5by55qGG5Y+W5raIXG5cdFx0XHR0aGlzLiRyZWZzLnBvcHVwLmNsb3NlKCk7XG5cdFx0fSxcblx0XHRwb3B1cF9zYXZhKGUpIHsgLy/lvLnmoYbnoa7lrpog6YCJ5oup5oyJ6ZKu5ZCOXG5cdFx0XHR2YXIgJHRoaXMgPSB0aGlzO1xuXHRcdFx0dmFyIEFmdGVyX1NlbGVjdF9FdmVudCA9ICR0aGlzLiRkYXRhLnBhcmFtLlNjYW5fQ29kZS5BZnRlcl9TZWxlY3RfRXZlbnQ7XG5cdFx0XHRpZiAoIUFmdGVyX1NlbGVjdF9FdmVudCkge1xuXHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTogXCLmj5DnpLpcIixjb250ZW50OiBcIumAieaLqeWQjuS6i+S7tuS4uuepuu+8gVwiLHNob3dDYW5jZWw6IGZhbHNlLGNvbmZpcm1UZXh0OiBcIuWPlua2iFwifSk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdHZhciBpdGVtcyA9ICR0aGlzLiRkYXRhLmNoZWNrX2xpc3QuaXRlbXM7XG5cdFx0XHR2YXIgZGF0YSA9IFtdO1xuXHRcdFx0dmFyIG5hbWUgPSBcIlwiO1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZiAoaXRlbXNbaV0uY2hlY2sgPT0gdHJ1ZSkge1xuXHRcdFx0XHRcdGlmIChuYW1lKVxuXHRcdFx0XHRcdFx0bmFtZSArPSAnOyc7XG5cdFx0XHRcdFx0bmFtZSArPSBpdGVtc1tpXS5uYW1lO1xuXHRcdFx0XHRcdGRhdGEucHVzaCh7XG5cdFx0XHRcdFx0XHRpZDogaXRlbXNbaV0uaWQsXG5cdFx0XHRcdFx0XHRuYW1lOiBpdGVtc1tpXS5uYW1lXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChkYXRhLmxlbmd0aCA9PSAwKSB7XG5cdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOiBcIuaPkOekulwiLGNvbnRlbnQ6IFwi5pyq6YCJ5oup5pWw5o2u77yBXCIsc2hvd0NhbmNlbDogZmFsc2UsY29uZmlybVRleHQ6IFwi5Y+W5raIXCJ9KTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0dmFyIG1hc3RfYXR0ciA9IFtdO1xuXHRcdFx0dmFyIGF0dHJsaXN0ID0gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0O1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhdHRybGlzdC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHR2YXIgYXR0ciA9IGF0dHJsaXN0W2ldLkF0dHI7XG5cdFx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdHZhciBhciA9IGF0dHJbal07XG5cdFx0XHRcdFx0aWYgKGFyLlZhbHVlID09ICfor7fpgInmi6knKSB7XG5cdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTogXCLmj5DnpLpcIixjb250ZW50OiBhci5EaXNwTmFtZSArIFwi5pyq6YCJ5oup5pWw5o2u77yBXCIsc2hvd0NhbmNlbDogZmFsc2UsY29uZmlybVRleHQ6IFwi5Y+W5raIXCJ9KTtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKGFyLlR5cGUgPT0gJ+W8leeUqOWvueixoSjlpJrkuKopJylcblx0XHRcdFx0XHRcdGlmIChhci5WYWx1ZSA9PSAn6K+3JykgYXIuVmFsdWUgPSAnJztcblx0XHRcdFx0XHRpZiAoYXIuVHlwZSA9PSAn5byV55So5Lq65ZGYJyB8fCBhci5UeXBlID09ICflvJXnlKjpobnnm64nKVxuXHRcdFx0XHRcdFx0bWFzdF9hdHRyLnB1c2goe2F0dHI6IGFyLk5hbWUsdmFsdWU6IGFyLlZhbElEID8gYXIuVmFsSUQgOiAnJ30pO1xuXHRcdFx0XHRcdGVsc2UgaWYgKGFyLlR5cGUgPT0gJ+W4g+WwlOWAvCcpXG5cdFx0XHRcdFx0XHRtYXN0X2F0dHIucHVzaCh7YXR0cjogYXIuTmFtZSx2YWx1ZTogYXIuVmFsdWUgPyAnMScgOiAnMCd9KTtcblx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHRtYXN0X2F0dHIucHVzaCh7YXR0cjogYXIuTmFtZSx2YWx1ZTogYXIuVmFsdWUgPyBhci5WYWx1ZSA6ICcnfSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdFxuXHRcdFx0JHRoaXMuJGRhdGEuc2NhbkNvZGVWYWwgPSBuYW1lO1xuXHRcdFx0dmFyIGluZm8gPSB7XG5cdFx0XHRcdGV2ZW50aWQ6IEFmdGVyX1NlbGVjdF9FdmVudC5JRCxcblx0XHRcdFx0ZWR0eXBlOiBcIjdcIixcblx0XHRcdFx0cHJvamVjdGlkOiAnJyxcblx0XHRcdFx0cmNsc2lkOiAnJyxcblx0XHRcdFx0cm9iamlkOiAnJyxcblx0XHRcdFx0dXNlcmxvZ2luOiAnJyxcblx0XHRcdFx0Y2xzaWQ6ICdNQk9YJyxcblx0XHRcdFx0b2JqaWQ6IFwiXCIsXG5cdFx0XHRcdGF0dHI6IFt7YXR0cjogJ21hc3RfaW5wdXRfMzAzNycsdmFsdWU6IG5hbWV9XSxcblx0XHRcdFx0Z2xvYmFsX2F0dHI6IG1hc3RfYXR0cixcblx0XHRcdFx0aW5wdXRQYXJhbXRlcjogZGF0YVxuXHRcdFx0fVxuXHRcdFx0Ly8gY29uc29sZS5sb2coaW5mbyk7XG5cdFx0XHR0aGlzLnNjYW5fRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGluZm8sIFwiXCIpO1xuXHRcdFx0dGhpcy4kcmVmcy5wb3B1cC5jbG9zZSgpO1xuXHRcdH0sXG5cblx0XHRjYW5jZWwoZSkge1xuXHRcdFx0dW5pLm5hdmlnYXRlQmFjayh7XG5cdFx0XHRcdGRlbHRhOiAxIC8v6L+U5Zue5bGC5pWw77yMMuWImeS4iuS4iumhtVxuXHRcdFx0fSk7XG5cdFx0fSxcblx0XHRwYW5lbF9kZWwoaW5kZXgpIHtcblx0XHRcdHZhciAkdGhpcyA9IHRoaXM7XG5cdFx0XHRpZiAodGhpcy4kZGF0YS5zdWJQYW5lbExpc3RbaW5kZXhdLnNjYW5Db2RlVmFsID09IHRoaXMuJGRhdGEuc2NhbkNvZGVWYWwpIHtcblx0XHRcdFx0dGhpcy4kZGF0YS5zY2FuQ29kZVZhbCA9ICcnO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCF0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdFtpbmRleF0uT2JqSUQpXG5cdFx0XHRcdHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0LnNwbGljZShpbmRleCwgMSk7XG5cdFx0XHRlbHNlIHtcblx0XHRcdFx0dmFyIGRhdGFJbmZvID0ge1xuXHRcdFx0XHRcdGNsc0lkOiB0aGlzLiRkYXRhLnBhcmFtLlN1Yl9DbHMuSUQsXG5cdFx0XHRcdFx0b2JqSWQ6IHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0W2luZGV4XS5PYmpJRFxuXHRcdFx0XHR9O1xuXHRcdFx0XHRjb25zb2xlLmxvZyhkYXRhSW5mbyk7XG5cdFx0XHRcdC8vIHJldHVybjtcblx0XHRcdFx0dW5pLnNob3dMb2FkaW5nKHtcblx0XHRcdFx0XHR0aXRsZTogXCLliqDovb3kuK0uLi5cIlxuXHRcdFx0XHR9KTtcblx0XHRcdFx0dGhpcy4kc3RvcmUuZGlzcGF0Y2goJ0RlbE9iaicsIGRhdGFJbmZvKS50aGVuKHN1Y2Nlc3MgPT4ge1xuXHRcdFx0XHRcdGNvbnNvbGUubG9nKHN1Y2Nlc3MpO1xuXHRcdFx0XHRcdHVuaS5oaWRlTG9hZGluZygpO1xuXHRcdFx0XHRcdGlmIChzdWNjZXNzLmNvZGUgPT0gJzAwMDAwJykge1xuXHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0LnNwbGljZShpbmRleCwgMSk7XG5cdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHtcblx0XHRcdFx0XHRcdFx0dGl0bGU6IFwi5o+Q56S6XCIsXG5cdFx0XHRcdFx0XHRcdGNvbnRlbnQ6IFwi5Yig6Zmk5oiQ5Yqf77yBXCIsXG5cdFx0XHRcdFx0XHRcdHNob3dDYW5jZWw6IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRjb25maXJtVGV4dDogXCLlj5bmtohcIlxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe1xuXHRcdFx0XHRcdFx0XHR0aXRsZTogXCLplJnor685XCIsXG5cdFx0XHRcdFx0XHRcdGNvbnRlbnQ6IHN1Y2Nlc3MubXNnLFxuXHRcdFx0XHRcdFx0XHRzaG93Q2FuY2VsOiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0Y29uZmlybVRleHQ6IFwi5Y+W5raIXCJcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSkuY2F0Y2goZXggPT4ge1xuXHRcdFx0XHRcdGNvbnNvbGUubG9nKGV4KTtcblx0XHRcdFx0XHR1bmkuaGlkZUxvYWRpbmcoKTtcblx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHtcblx0XHRcdFx0XHRcdHRpdGxlOiBcIuaPkOekujkuMVwiLFxuXHRcdFx0XHRcdFx0Y29udGVudDogZXguZXJyTXNnLFxuXHRcdFx0XHRcdFx0c2hvd0NhbmNlbDogZmFsc2UsXG5cdFx0XHRcdFx0XHRjb25maXJtVGV4dDogXCLlj5bmtohcIlxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdGFzeW5jIGNsYXNzR3JpZFN0eWxlSW5mbyhjbHNpZCwgc3R5bGVOYW1lLCBjbHNUeXBlKSB7XG5cdFx0XHR2YXIgJHRoaXMgPSB0aGlzO1xuXHRcdFx0dmFyIGdyaWRzdHlsZUluZm8gPSB7XG5cdFx0XHRcdGNsYXNzX2lkOiBjbHNpZCxcblx0XHRcdFx0bmFtZTogc3R5bGVOYW1lLFxuXHRcdFx0XHR0eXBlOiAnMidcblx0XHRcdH07XG5cdFx0XHQvLyBjb25zb2xlLmxvZygkdGhpcy4kc3RvcmUuZ2V0dGVycy5nZXRjbGFzc0dyaWRTdHlsZUluZm8pO1xuXHRcdFx0Ly/ojrflj5bkuLvmlbDmja7nsbvnlYzpnaLmoLflvI9cblx0XHRcdGlmIChjbHNUeXBlID09ICdNYXN0Jykge1xuXHRcdFx0XHQkdGhpcy4kc3RvcmUuc3RhdGUudGhpc0VkaXROYW1lID0gc3R5bGVOYW1lO1xuXHRcdFx0XHRpZiAoJHRoaXMuJHN0b3JlLmdldHRlcnMuZ2V0Y2xhc3NHcmlkU3R5bGVJbmZvKSB7XG5cdFx0XHRcdFx0JHRoaXMuJGRhdGEuY2xhc3NHcmlkU3R5bGUgPSAkdGhpcy4kc3RvcmUuZ2V0dGVycy5nZXRjbGFzc0dyaWRTdHlsZUluZm8uZGF0YTtcblx0XHRcdFx0XHQkdGhpcy5jbGFzc19hdHRyX2luaXQoKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvL2NvbnNvbGUubG9nKGdyaWRzdHlsZUluZm8pO1xuXHRcdFx0XHRcdCR0aGlzLiRzdG9yZS5kaXNwYXRjaCgnY2xhc3NHcmlkU3R5bGVJbmZvJywgZ3JpZHN0eWxlSW5mbykudGhlbihzdWNjZXNzID0+IHtcblx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKHN1Y2Nlc3MpO1xuXHRcdFx0XHRcdFx0aWYgKHN1Y2Nlc3MuY29kZSA9PSAnMDAwMDAnKSB7XG5cdFx0XHRcdFx0XHRcdHN1Y2Nlc3MuZGF0YS5TdHlsZURlZiA9IEpTT04ucGFyc2Uoc3VjY2Vzcy5kYXRhLlN0eWxlRGVmKTtcblx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEuY2xhc3NHcmlkU3R5bGUgPSBzdWNjZXNzLmRhdGE7XG5cblx0XHRcdFx0XHRcdFx0JHRoaXMuY2xhc3NfYXR0cl9pbml0KCk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHtcblx0XHRcdFx0XHRcdFx0XHR0aXRsZTogXCLplJnor68xLjJcIixcblx0XHRcdFx0XHRcdFx0XHRjb250ZW50OiBzdWNjZXNzLm1zZyxcblx0XHRcdFx0XHRcdFx0XHRzaG93Q2FuY2VsOiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0XHRjb25maXJtVGV4dDogXCLlj5bmtohcIlxuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KS5jYXRjaChleCA9PiB7XG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhleCk7XG5cdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHtcblx0XHRcdFx0XHRcdFx0dGl0bGU6IFwi6ZSZ6K+vMS4zXCIsXG5cdFx0XHRcdFx0XHRcdGNvbnRlbnQ6IGV4LmVyck1zZyxcblx0XHRcdFx0XHRcdFx0c2hvd0NhbmNlbDogZmFsc2UsXG5cdFx0XHRcdFx0XHRcdGNvbmZpcm1UZXh0OiBcIuWPlua2iFwiXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChjbHNUeXBlID09ICdTdWInKSB7IC8v6I635Y+W5LuO5pWw5o2u57G755WM6Z2i5qC35byPXG5cdFx0XHRcdCR0aGlzLiRzdG9yZS5zdGF0ZS50aGlzRWRpdFN1Yk5hbWUgPSBzdHlsZU5hbWU7XG5cdFx0XHRcdGlmICgkdGhpcy4kc3RvcmUuZ2V0dGVycy5nZXRTdWJDbGFzc0dyaWRTdHlsZUluZm8pIHtcblx0XHRcdFx0XHQkdGhpcy4kZGF0YS5zdWJDbGFzc0dyaWRTdHlsZSA9ICR0aGlzLiRzdG9yZS5nZXR0ZXJzLmdldFN1YkNsYXNzR3JpZFN0eWxlSW5mby5kYXRhO1xuXHRcdFx0XHRcdCR0aGlzLnN1YkNsYXNzX2F0dHJfaW5pdCgpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vY29uc29sZS5sb2coZ3JpZHN0eWxlSW5mbyk7XG5cdFx0XHRcdFx0JHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdzdWJDbGFzc0dyaWRTdHlsZUluZm8nLCBncmlkc3R5bGVJbmZvKS50aGVuKHN1Y2Nlc3MgPT4ge1xuXHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coc3VjY2Vzcyk7XG5cdFx0XHRcdFx0XHRpZiAoc3VjY2Vzcy5jb2RlID09ICcwMDAwMCcpIHtcblx0XHRcdFx0XHRcdFx0c3VjY2Vzcy5kYXRhLlN0eWxlRGVmID0gSlNPTi5wYXJzZShzdWNjZXNzLmRhdGEuU3R5bGVEZWYpO1xuXHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5zdWJDbGFzc0dyaWRTdHlsZSA9IHN1Y2Nlc3MuZGF0YTtcblxuXHRcdFx0XHRcdFx0XHQkdGhpcy5zdWJDbGFzc19hdHRyX2luaXQoKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe1xuXHRcdFx0XHRcdFx0XHRcdHRpdGxlOiBcIumUmeivrzEuMlwiLFxuXHRcdFx0XHRcdFx0XHRcdGNvbnRlbnQ6IHN1Y2Nlc3MubXNnLFxuXHRcdFx0XHRcdFx0XHRcdHNob3dDYW5jZWw6IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRcdGNvbmZpcm1UZXh0OiBcIuWPlua2iFwiXG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pLmNhdGNoKGV4ID0+IHtcblx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKGV4KTtcblx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe1xuXHRcdFx0XHRcdFx0XHR0aXRsZTogXCLplJnor68xLjNcIixcblx0XHRcdFx0XHRcdFx0Y29udGVudDogZXguZXJyTXNnLFxuXHRcdFx0XHRcdFx0XHRzaG93Q2FuY2VsOiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0Y29uZmlybVRleHQ6IFwi5Y+W5raIXCJcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRvbnRhcChlKSB7IC8v5omr56CB5Yqf6IO9XG5cdFx0XHQvL2NvbnNvbGUubG9nKGUudGFyZ2V0KVxuXHRcdFx0Z2V0QXBwKCkub25TY2FuKChyZXN1bHQpID0+IHtcblx0XHRcdFx0Ly9jb25zb2xlLmxvZyhyZXN1bHQuZGVjb2RlZGF0YSk7XG5cdFx0XHRcdHZhciBpc1ZhbCA9IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtlLnRhcmdldC5kYXRhc2V0WydpbmRleCddXS5BdHRyW2UudGFyZ2V0LmRhdGFzZXRbXG5cdFx0XHRcdFx0J2lpbmRleCddXS5WYWx1ZTtcblx0XHRcdFx0Ly8gaWYoIWlzVmFsKXtcblx0XHRcdFx0Ly8gXHR0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdFtlLnRhcmdldC5kYXRhc2V0WydpaWluZGV4J11dLnN1YkNsYXNzQXR0cltlLnRhcmdldC5kYXRhc2V0WydpbmRleCddXS5BdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2lpbmRleCddXS5WYWx1ZT1yZXN1bHQuZGVjb2RlZGF0YTtcblx0XHRcdFx0Ly8gXHR2YXIgaXNWYWxkID10aGlzLiRkYXRhLnN1YlBhbmVsTGlzdFtlLnRhcmdldC5kYXRhc2V0WydpaWluZGV4J11dLnN1YkNsYXNzQXR0cltlLnRhcmdldC5kYXRhc2V0WydpbmRleCddXS5BdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2lpbmRleCddXS5WYWx1ZTtcblx0XHRcdFx0Ly8gXHRyZXR1cm47XG5cdFx0XHRcdC8vIH1cblx0XHRcdFx0Ly/kuLvmlbDmja7nsbvmiavnoIHmn6Xor6LmlbDmja5cblx0XHRcdFx0aWYgKGlzVmFsICE9IHJlc3VsdC5kZWNvZGVkYXRhKSB7XG5cdFx0XHRcdFx0dGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZS50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dXG5cdFx0XHRcdFx0XHQuVmFsdWUgPSByZXN1bHQuZGVjb2RlZGF0YTtcblx0XHRcdFx0XHR1bmkuaGlkZUtleWJvYXJkKCk7XG5cdFx0XHRcdFx0Ly/lrZDmlbDmja7nsbvmiavnoIHljLrkuovku7bohJrmnKxcblx0XHRcdFx0XHR2YXIgZXZlbnRpZCA9IHRoaXMuJGRhdGEucGFyYW0uU2Nhbl9Db2RlLklucHV0X0NoYW5nZV9FdmVudC5JRDtcblx0XHRcdFx0XHRpZiAoZXZlbnRpZCkge1xuXHRcdFx0XHRcdFx0dmFyIHJlcSA9IFtdO1xuXHRcdFx0XHRcdFx0dmFyIGF0dHJsaXN0ID0gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0OyAvL+S4u+aVsOaNruexu+WxnuaAp1xuXHRcdFx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhdHRybGlzdC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdFx0XHR2YXIgYXR0ciA9IGF0dHJsaXN0W2ldLkF0dHI7XG5cdFx0XHRcdFx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdFx0XHRcdHZhciBhciA9IGF0dHJbal07XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGFyLlR5cGUgPT0gJ+W8leeUqOWvueixoSjlpJrkuKopJylcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChhci5WYWx1ZSA9PSAn6K+3JykgYXIuVmFsdWUgPSAnJztcblx0XHRcdFx0XHRcdFx0XHRpZiAoYXIuVHlwZSA9PSAn5byV55So5Lq65ZGYJyB8fCBhci5UeXBlID09ICflvJXnlKjpobnnm64nKVxuXHRcdFx0XHRcdFx0XHRcdFx0cmVxLnB1c2goe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRhdHRyOiBhci5OYW1lLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogYXIuVmFsSUQgPyBhci5WYWxJRCA6ICcnXG5cdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHRlbHNlIGlmIChhci5UeXBlID09ICfluIPlsJTlgLwnKVxuXHRcdFx0XHRcdFx0XHRcdFx0cmVxLnB1c2goe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRhdHRyOiBhci5OYW1lLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogYXIuVmFsdWUgPyAnMScgOiAnMCdcblx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdFx0XHRcdHJlcS5wdXNoKHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0YXR0cjogYXIuTmFtZSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU6IGFyLlZhbHVlID8gYXIuVmFsdWUgOiAnJ1xuXHRcdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHZhciBpbmZvID0ge1xuXHRcdFx0XHRcdFx0XHRldmVudGlkOiBldmVudGlkLFxuXHRcdFx0XHRcdFx0XHRlZHR5cGU6IFwiN1wiLCAvL1wiMFwiLFxuXHRcdFx0XHRcdFx0XHRwcm9qZWN0aWQ6ICcnLFxuXHRcdFx0XHRcdFx0XHRyY2xzaWQ6ICcnLFxuXHRcdFx0XHRcdFx0XHRyb2JqaWQ6ICcnLFxuXHRcdFx0XHRcdFx0XHR1c2VybG9naW46ICcnLFxuXHRcdFx0XHRcdFx0XHRjbHNpZDogJ01CT1gnLCAvL3RoaXMuJGRhdGEucGFyYW0uU3ViX0Nscy5JRCxcblx0XHRcdFx0XHRcdFx0b2JqaWQ6IFwiXCIsXG5cdFx0XHRcdFx0XHRcdGF0dHI6IHJlcSxcblx0XHRcdFx0XHRcdFx0bWFzdF9hdHRyOiBbXSxcblx0XHRcdFx0XHRcdFx0aW5wdXRQYXJhbXRlcjogW3tcblx0XHRcdFx0XHRcdFx0XHRhdHRyOiAnbWFzdF9pbnB1dF8zMDM3Jyxcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogcmVzdWx0LmRlY29kZWRhdGFcblx0XHRcdFx0XHRcdFx0fV1cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0dGhpcy5zY2FuX0RhdGFPYmpSdW5DdXN0b21FdmVudChpbmZvLCBcIlwiKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pXG5cdFx0fSxcblx0XHRzdWJvbnRhcChlKSB7IC8v5omr56CB5Yqf6IO9XG5cdFx0XHQvL2NvbnNvbGUubG9nKGUudGFyZ2V0KVxuXHRcdFx0Z2V0QXBwKCkub25TY2FuKChyZXN1bHQpID0+IHtcblx0XHRcdFx0Ly9jb25zb2xlLmxvZyhyZXN1bHQuZGVjb2RlZGF0YSk7XG5cdFx0XHRcdHZhciBpc1ZhbCA9IHRoaXMuJGRhdGEuc3ViQ2xhc3NBdHRyTGlzdFtlLnRhcmdldC5kYXRhc2V0WydpbmRleCddXS5BdHRyW2UudGFyZ2V0LmRhdGFzZXRbXG5cdFx0XHRcdFx0J2lpbmRleCddXS5WYWx1ZTtcblx0XHRcdFx0Ly/kuLvmlbDmja7nsbvmiavnoIHmn6Xor6LmlbDmja5cblx0XHRcdFx0aWYgKGlzVmFsICE9IHJlc3VsdC5kZWNvZGVkYXRhKSB7XG5cdFx0XHRcdFx0dGhpcy4kZGF0YS5zdWJDbGFzc0F0dHJMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZS50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dXG5cdFx0XHRcdFx0XHQuVmFsdWUgPSByZXN1bHQuZGVjb2RlZGF0YTtcblx0XHRcdFx0XHR1bmkuaGlkZUtleWJvYXJkKCk7XG5cdFx0XHRcdFx0Ly/lrZDmlbDmja7nsbvmiavnoIHljLrkuovku7bohJrmnKxcblx0XHRcdFx0XHR2YXIgZXZlbnRpZCA9IHRoaXMuJGRhdGEucGFyYW0uU2Nhbl9Db2RlLklucHV0X0NoYW5nZV9FdmVudC5JRDtcblx0XHRcdFx0XHRpZiAoZXZlbnRpZCkge1xuXHRcdFx0XHRcdFx0dmFyIHJlcSA9IFtdO1xuXHRcdFx0XHRcdFx0dmFyIGF0dHJsaXN0ID0gdGhpcy4kZGF0YS5zdWJDbGFzc0F0dHJMaXN0OyAvL+S4u+aVsOaNruexu+WxnuaAp1xuXHRcdFx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhdHRybGlzdC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdFx0XHR2YXIgYXR0ciA9IGF0dHJsaXN0W2ldLkF0dHI7XG5cdFx0XHRcdFx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdFx0XHRcdHZhciBhciA9IGF0dHJbal07XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGFyLlR5cGUgPT0gJ+W8leeUqOWvueixoSjlpJrkuKopJylcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChhci5WYWx1ZSA9PSAn6K+3JykgYXIuVmFsdWUgPSAnJztcblx0XHRcdFx0XHRcdFx0XHRpZiAoYXIuVHlwZSA9PSAn5byV55So5Lq65ZGYJyB8fCBhci5UeXBlID09ICflvJXnlKjpobnnm64nKVxuXHRcdFx0XHRcdFx0XHRcdFx0cmVxLnB1c2goe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRhdHRyOiBhci5OYW1lLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogYXIuVmFsSUQgPyBhci5WYWxJRCA6ICcnXG5cdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHRlbHNlIGlmIChhci5UeXBlID09ICfluIPlsJTlgLwnKVxuXHRcdFx0XHRcdFx0XHRcdFx0cmVxLnB1c2goe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRhdHRyOiBhci5OYW1lLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogYXIuVmFsdWUgPyAnMScgOiAnMCdcblx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdFx0XHRcdHJlcS5wdXNoKHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0YXR0cjogYXIuTmFtZSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU6IGFyLlZhbHVlID8gYXIuVmFsdWUgOiAnJ1xuXHRcdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHZhciBpbmZvID0ge1xuXHRcdFx0XHRcdFx0XHRldmVudGlkOiBldmVudGlkLFxuXHRcdFx0XHRcdFx0XHRlZHR5cGU6IFwiN1wiLCAvL1wiMFwiLFxuXHRcdFx0XHRcdFx0XHRwcm9qZWN0aWQ6ICcnLFxuXHRcdFx0XHRcdFx0XHRyY2xzaWQ6ICcnLFxuXHRcdFx0XHRcdFx0XHRyb2JqaWQ6ICcnLFxuXHRcdFx0XHRcdFx0XHR1c2VybG9naW46ICcnLFxuXHRcdFx0XHRcdFx0XHRjbHNpZDogJ01CT1gnLCAvL3RoaXMuJGRhdGEucGFyYW0uU3ViX0Nscy5JRCxcblx0XHRcdFx0XHRcdFx0b2JqaWQ6IFwiXCIsXG5cdFx0XHRcdFx0XHRcdGF0dHI6IHJlcSxcblx0XHRcdFx0XHRcdFx0bWFzdF9hdHRyOiBbXSxcblx0XHRcdFx0XHRcdFx0aW5wdXRQYXJhbXRlcjogW3tcblx0XHRcdFx0XHRcdFx0XHRhdHRyOiAnbWFzdF9pbnB1dF8zMDM3Jyxcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogcmVzdWx0LmRlY29kZWRhdGFcblx0XHRcdFx0XHRcdFx0fV1cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0dGhpcy5zY2FuX0RhdGFPYmpSdW5DdXN0b21FdmVudChpbmZvLCBcIlwiKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pXG5cdFx0fSxcblx0XHRzY2FuX29udGFwKGUpIHsgLy/miavnoIHljLrmiavnoIHlip/og71cblx0XHRcdC8vY29uc29sZS5sb2coZS50YXJnZXQpXG5cdFx0XHRnZXRBcHAoKS5vblNjYW4oKHJlc3VsdCkgPT4ge1xuXHRcdFx0XHRjb25zb2xlLmxvZyhyZXN1bHQuZGVjb2RlZGF0YSk7XG5cdFx0XHRcdHZhciBpc2ZsYWcgPSB0cnVlO1xuXHRcdFx0XHRmb3IgKHZhciBpIGluIHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0KSB7XG5cdFx0XHRcdFx0aWYgKHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0W2ldLnNjYW5Db2RlVmFsID09IHJlc3VsdC5kZWNvZGVkYXRhKVxuXHRcdFx0XHRcdFx0aXNmbGFnID0gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly/lrZDmlbDmja7nsbvmiavnoIHmn6Xor6LmlbDmja5cblx0XHRcdFx0aWYgKGlzZmxhZykge1xuXHRcdFx0XHRcdHVuaS5oaWRlS2V5Ym9hcmQoKTtcblx0XHRcdFx0XHR0aGlzLiRkYXRhLnNjYW5Db2RlVmFsID0gcmVzdWx0LmRlY29kZWRhdGE7XG5cdFx0XHRcdFx0dmFyIGV2ZW50aWQgPSB0aGlzLiRkYXRhLnBhcmFtLlNjYW5fQ29kZS5JbnB1dF9DaGFuZ2VfRXZlbnQuSUQ7XG5cdFx0XHRcdFx0aWYgKGV2ZW50aWQpIHtcblx0XHRcdFx0XHRcdHZhciBtYXN0X3JlcSA9IFtdO1xuXHRcdFx0XHRcdFx0Ly/kuLvmlbDmja7nsbvlsZ7mgKdcblx0XHRcdFx0XHRcdHZhciBjbGFzc2F0dHJsaXN0ID0gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0O1xuXHRcdFx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBjbGFzc2F0dHJsaXN0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRcdHZhciBhdHRyID0gY2xhc3NhdHRybGlzdFtpXS5BdHRyO1xuXHRcdFx0XHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IGF0dHIubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgYXIgPSBhdHRyW2pdO1xuXHRcdFx0XHRcdFx0XHRcdGlmIChhci5UeXBlID09ICflvJXnlKjlr7nosaEo5aSa5LiqKScpXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoYXIuVmFsdWUgPT0gJ+ivtycpIGFyLlZhbHVlID0gJyc7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGFyLlR5cGUgPT0gJ+W8leeUqOS6uuWRmCcgfHwgYXIuVHlwZSA9PSAn5byV55So6aG555uuJylcblx0XHRcdFx0XHRcdFx0XHRcdG1hc3RfcmVxLnB1c2goe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRhdHRyOiBhci5OYW1lLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogYXIuVmFsSUQgPyBhci5WYWxJRCA6ICcnXG5cdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHRlbHNlIGlmIChhci5UeXBlID09ICfluIPlsJTlgLwnKVxuXHRcdFx0XHRcdFx0XHRcdFx0bWFzdF9yZXEucHVzaCh7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGF0dHI6IGFyLk5hbWUsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlOiBhci5WYWx1ZSA/ICcxJyA6ICcwJ1xuXHRcdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdFx0XHRcdFx0bWFzdF9yZXEucHVzaCh7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGF0dHI6IGFyLk5hbWUsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlOiBhci5WYWx1ZSA/IGFyLlZhbHVlIDogJydcblx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR2YXIgcmVxID0gW107XG5cdFx0XHRcdFx0XHQvL+WtkOaVsOaNruexu+WxnuaAp1xuXHRcdFx0XHRcdFx0dmFyIGF0dHJsaXN0ID0gdGhpcy4kZGF0YS5zdWJDbGFzc0F0dHJMaXN0O1xuXHRcdFx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhdHRybGlzdC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdFx0XHR2YXIgYXR0ciA9IGF0dHJsaXN0W2ldLkF0dHI7XG5cdFx0XHRcdFx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdFx0XHRcdHZhciBhciA9IGF0dHJbal07XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGFyLlR5cGUgPT0gJ+W8leeUqOWvueixoSjlpJrkuKopJylcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChhci5WYWx1ZSA9PSAn6K+3JykgYXIuVmFsdWUgPSAnJztcblx0XHRcdFx0XHRcdFx0XHRpZiAoYXIuVHlwZSA9PSAn5byV55So5Lq65ZGYJyB8fCBhci5UeXBlID09ICflvJXnlKjpobnnm64nKVxuXHRcdFx0XHRcdFx0XHRcdFx0cmVxLnB1c2goe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRhdHRyOiBhci5OYW1lLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogYXIuVmFsSUQgPyBhci5WYWxJRCA6ICcnXG5cdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHRlbHNlIGlmIChhci5UeXBlID09ICfluIPlsJTlgLwnKVxuXHRcdFx0XHRcdFx0XHRcdFx0cmVxLnB1c2goe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRhdHRyOiBhci5OYW1lLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogYXIuVmFsdWUgPyAnMScgOiAnMCdcblx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdFx0XHRcdHJlcS5wdXNoKHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0YXR0cjogYXIuTmFtZSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU6IGFyLlZhbHVlID8gYXIuVmFsdWUgOiAnJ1xuXHRcdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHZhciBpbmZvID0ge1xuXHRcdFx0XHRcdFx0XHRldmVudGlkOiBldmVudGlkLFxuXHRcdFx0XHRcdFx0XHRlZHR5cGU6ICc3JywgLy9cIjBcIixcblx0XHRcdFx0XHRcdFx0cHJvamVjdGlkOiAnJyxcblx0XHRcdFx0XHRcdFx0cmNsc2lkOiAnJyxcblx0XHRcdFx0XHRcdFx0cm9iamlkOiAnJyxcblx0XHRcdFx0XHRcdFx0dXNlcmxvZ2luOiAnJyxcblx0XHRcdFx0XHRcdFx0Y2xzaWQ6ICdNQk9YJywgLy90aGlzLiRkYXRhLnBhcmFtLlN1Yl9DbHMuSUQsXG5cdFx0XHRcdFx0XHRcdG9iamlkOiBcIlwiLFxuXHRcdFx0XHRcdFx0XHRhdHRyOiByZXEsXG5cdFx0XHRcdFx0XHRcdG1hc3RfYXR0cjogbWFzdF9yZXEsXG5cdFx0XHRcdFx0XHRcdGlucHV0UGFyYW10ZXI6IFt7XG5cdFx0XHRcdFx0XHRcdFx0YXR0cjogJ2lucHV0XzMwMzcnLFxuXHRcdFx0XHRcdFx0XHRcdHZhbHVlOiB0aGlzLiRkYXRhLnNjYW5Db2RlVmFsXG5cdFx0XHRcdFx0XHRcdH1dXG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdHRoaXMuc2Nhbl9EYXRhT2JqUnVuQ3VzdG9tRXZlbnQoaW5mbywgXCJcIik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdH0sXG5cdFx0c2Nhbl9vbmV2ZW50KGUpIHtcblx0XHRcdC8vIGNvbnNvbGUubG9nKGUudGFyZ2V0KTtcblx0XHRcdGlmIChlLnRhcmdldC52YWx1ZSkge1xuXHRcdFx0XHR2YXIgaXNmbGFnID0gdHJ1ZTtcblx0XHRcdFx0Zm9yICh2YXIgaSBpbiB0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdCkge1xuXHRcdFx0XHRcdGlmICh0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdFtpXS5zY2FuQ29kZVZhbCA9PSBlLnRhcmdldC52YWx1ZSlcblx0XHRcdFx0XHRcdGlzZmxhZyA9IGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8v5a2Q5pWw5o2u57G75omr56CB5p+l6K+i5pWw5o2uXG5cdFx0XHRcdGlmIChpc2ZsYWcpIHtcblx0XHRcdFx0XHR1bmkuaGlkZUtleWJvYXJkKCk7XG5cdFx0XHRcdFx0dGhpcy4kZGF0YS5zY2FuQ29kZVZhbCA9IGUudGFyZ2V0LnZhbHVlO1xuXHRcdFx0XHRcdHZhciBldmVudGlkID0gdGhpcy4kZGF0YS5wYXJhbS5TY2FuX0NvZGUuSW5wdXRfQ2hhbmdlX0V2ZW50LklEO1xuXHRcdFx0XHRcdGlmIChldmVudGlkKSB7XG5cdFx0XHRcdFx0XHR2YXIgbWFzdF9yZXEgPSBbXTtcblx0XHRcdFx0XHRcdC8v5Li75pWw5o2u57G75bGe5oCnXG5cdFx0XHRcdFx0XHR2YXIgY2xhc3NhdHRybGlzdCA9IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdDtcblx0XHRcdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgY2xhc3NhdHRybGlzdC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdFx0XHR2YXIgYXR0ciA9IGNsYXNzYXR0cmxpc3RbaV0uQXR0cjtcblx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIGFyID0gYXR0cltqXTtcblx0XHRcdFx0XHRcdFx0XHRpZiAoYXIuVHlwZSA9PSAn5byV55So5a+56LGhKOWkmuS4qiknKVxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKGFyLlZhbHVlID09ICfor7cnKSBhci5WYWx1ZSA9ICcnO1xuXHRcdFx0XHRcdFx0XHRcdGlmIChhci5UeXBlID09ICflvJXnlKjkurrlkZgnIHx8IGFyLlR5cGUgPT0gJ+W8leeUqOmhueebricpXG5cdFx0XHRcdFx0XHRcdFx0XHRtYXN0X3JlcS5wdXNoKHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0YXR0cjogYXIuTmFtZSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU6IGFyLlZhbElEID8gYXIuVmFsSUQgOiAnJ1xuXHRcdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0ZWxzZSBpZiAoYXIuVHlwZSA9PSAn5biD5bCU5YC8Jylcblx0XHRcdFx0XHRcdFx0XHRcdG1hc3RfcmVxLnB1c2goe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRhdHRyOiBhci5OYW1lLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogYXIuVmFsdWUgPyAnMScgOiAnMCdcblx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdFx0XHRcdG1hc3RfcmVxLnB1c2goe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRhdHRyOiBhci5OYW1lLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogYXIuVmFsdWUgPyBhci5WYWx1ZSA6ICcnXG5cdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0dmFyIHJlcSA9IFtdO1xuXHRcdFx0XHRcdFx0Ly/lrZDmlbDmja7nsbvlsZ7mgKdcblx0XHRcdFx0XHRcdHZhciBhdHRybGlzdCA9IHRoaXMuJGRhdGEuc3ViQ2xhc3NBdHRyTGlzdDtcblx0XHRcdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmxpc3QubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRcdFx0dmFyIGF0dHIgPSBhdHRybGlzdFtpXS5BdHRyO1xuXHRcdFx0XHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IGF0dHIubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgYXIgPSBhdHRyW2pdO1xuXHRcdFx0XHRcdFx0XHRcdGlmIChhci5UeXBlID09ICflvJXnlKjlr7nosaEo5aSa5LiqKScpXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoYXIuVmFsdWUgPT0gJ+ivtycpIGFyLlZhbHVlID0gJyc7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGFyLlR5cGUgPT0gJ+W8leeUqOS6uuWRmCcgfHwgYXIuVHlwZSA9PSAn5byV55So6aG555uuJylcblx0XHRcdFx0XHRcdFx0XHRcdHJlcS5wdXNoKHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0YXR0cjogYXIuTmFtZSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU6IGFyLlZhbElEID8gYXIuVmFsSUQgOiAnJ1xuXHRcdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0ZWxzZSBpZiAoYXIuVHlwZSA9PSAn5biD5bCU5YC8Jylcblx0XHRcdFx0XHRcdFx0XHRcdHJlcS5wdXNoKHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0YXR0cjogYXIuTmFtZSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU6IGFyLlZhbHVlID8gJzEnIDogJzAnXG5cdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGF0dHI6IGFyLk5hbWUsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlOiBhci5WYWx1ZSA/IGFyLlZhbHVlIDogJydcblx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR2YXIgaW5mbyA9IHtcblx0XHRcdFx0XHRcdFx0ZXZlbnRpZDogZXZlbnRpZCxcblx0XHRcdFx0XHRcdFx0ZWR0eXBlOiAnNycsIC8vXCIwXCIsXG5cdFx0XHRcdFx0XHRcdHByb2plY3RpZDogJycsXG5cdFx0XHRcdFx0XHRcdHJjbHNpZDogJycsXG5cdFx0XHRcdFx0XHRcdHJvYmppZDogJycsXG5cdFx0XHRcdFx0XHRcdHVzZXJsb2dpbjogJycsXG5cdFx0XHRcdFx0XHRcdGNsc2lkOiAnTUJPWCcsIC8vdGhpcy4kZGF0YS5wYXJhbS5TdWJfQ2xzLklELFxuXHRcdFx0XHRcdFx0XHRvYmppZDogXCJcIixcblx0XHRcdFx0XHRcdFx0YXR0cjogcmVxLFxuXHRcdFx0XHRcdFx0XHRtYXN0X2F0dHI6IG1hc3RfcmVxLFxuXHRcdFx0XHRcdFx0XHRpbnB1dFBhcmFtdGVyOiBbe1xuXHRcdFx0XHRcdFx0XHRcdGF0dHI6ICdpbnB1dF8zMDM3Jyxcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogdGhpcy4kZGF0YS5zY2FuQ29kZVZhbFxuXHRcdFx0XHRcdFx0XHR9XVxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHR0aGlzLnNjYW5fRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGluZm8sIFwiXCIpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0b25hcnJvdyhpbmRleCwgb3Blbikge1xuXHRcdFx0Ly8gY29uc29sZS5sb2coaW5kZXgrJy0tJytvcGVuKTtcblx0XHRcdHZhciBkYXRhX2F0dHIgPSB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV0uT3Blbjtcblx0XHRcdGlmICghZGF0YV9hdHRyKSB7XG5cdFx0XHRcdHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2lpaW5kZXgnXV0uc3ViQ2xhc3NBdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZVxuXHRcdFx0XHRcdC50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dLlZhbHVlID0gb3BlbiA9PSB0cnVlID8gZmFsc2UgOiB0cnVlO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbZS50YXJnZXQuZGF0YXNldFsnaWlpbmRleCddXS5zdWJDbGFzc0F0dHJbaW5kZXhdLk9wZW4gPSBvcGVuID09IHRydWUgPyBmYWxzZSA6XG5cdFx0XHRcdHRydWU7XG5cdFx0fSxcblx0XHRvbmRhdGVUaW1lKGUpIHtcblx0XHRcdC8vY29uc29sZS5sb2coZS50YXJnZXQpXG5cdFx0XHR2YXIgZGF0YV9hdHRyID0gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZS50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dLlZhbHVlO1xuXHRcdFx0aWYgKCFkYXRhX2F0dHIpIHtcblx0XHRcdFx0dGhpcy4kZGF0YS5zdWJQYW5lbExpc3RbZS50YXJnZXQuZGF0YXNldFsnaWlpbmRleCddXS5zdWJDbGFzc0F0dHJbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlXG5cdFx0XHRcdFx0LnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV0uVmFsdWUgPSBlLnRhcmdldC52YWx1ZTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZS50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dLlZhbHVlID0gZS50YXJnZXRcblx0XHRcdC52YWx1ZTtcblxuXHRcdH0sXG5cdFx0b25jaGFuZ2UoZSkge1xuXHRcdFx0Y29uc29sZS5sb2coZS50YXJnZXQpO1xuXHRcdFx0dmFyIHZhbHVlID0gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZS50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dLmRpY3RpdGVtW2Vcblx0XHRcdFx0LnRhcmdldC52YWx1ZV07XG5cdFx0XHR2YXIgZGF0YV9hdHRyID0gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZS50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dO1xuXHRcdFx0Y29uc29sZS5sb2coZGF0YV9hdHRyKTtcblx0XHRcdGlmICh2YWx1ZS5OYW1lICE9IGRhdGFfYXR0ci5WYWx1ZSkge1xuXHRcdFx0XHR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV0uVmFsdWUgPSB2YWx1ZVxuXHRcdFx0XHQuTmFtZTtcblx0XHRcdFx0Y29uc29sZS5sb2codGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZS50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dXG5cdFx0XHRcdC5WYWx1ZSk7XG5cdFx0XHRcdHZhciBldmVudGlkID0gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZS50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dXG5cdFx0XHRcdFx0LmFjdGlvbjtcblx0XHRcdFx0aWYgKGV2ZW50aWQpIHtcblx0XHRcdFx0XHQvLyBzZWxmLmV2ZW50X25vX3N1YiA9IDE7XG5cdFx0XHRcdFx0dmFyIHJlcSA9IFtdO1xuXHRcdFx0XHRcdHZhciBhdHRybGlzdCA9IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdDtcblx0XHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJsaXN0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHR2YXIgYXR0ciA9IGF0dHJsaXN0W2ldLkF0dHI7XG5cdFx0XHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IGF0dHIubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0XHRcdFx0dmFyIGFyID0gYXR0cltqXTtcblx0XHRcdFx0XHRcdFx0aWYgKGFyLlR5cGUgPT0gJ+W8leeUqOWvueixoSjlpJrkuKopJylcblx0XHRcdFx0XHRcdFx0XHRpZiAoYXIuVmFsdWUgPT0gJ+ivtycpIGFyLlZhbHVlID0gJyc7XG5cdFx0XHRcdFx0XHRcdGlmIChhci5UeXBlID09ICflvJXnlKjkurrlkZgnIHx8IGFyLlR5cGUgPT0gJ+W8leeUqOmhueebricpXG5cdFx0XHRcdFx0XHRcdFx0cmVxLnB1c2goe1xuXHRcdFx0XHRcdFx0XHRcdFx0YXR0cjogYXIuTmFtZSxcblx0XHRcdFx0XHRcdFx0XHRcdHZhbDogYXIuVmFsSUQgPyBhci5WYWxJRCA6ICcnXG5cdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdGVsc2UgaWYgKGFyLlR5cGUgPT0gJ+W4g+WwlOWAvCcpXG5cdFx0XHRcdFx0XHRcdFx0cmVxLnB1c2goe1xuXHRcdFx0XHRcdFx0XHRcdFx0YXR0cjogYXIuTmFtZSxcblx0XHRcdFx0XHRcdFx0XHRcdHZhbDogYXIuVmFsdWUgPyAnMScgOiAnMCdcblx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdFx0XHRcdHJlcS5wdXNoKHtcblx0XHRcdFx0XHRcdFx0XHRcdGF0dHI6IGFyLk5hbWUsXG5cdFx0XHRcdFx0XHRcdFx0XHR2YWw6IGFyLlZhbHVlID8gYXIuVmFsdWUgOiAnJ1xuXHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR2YXIgaW5mbyA9IHtcblx0XHRcdFx0XHRcdGV2ZW50aWQ6IGV2ZW50aWQsXG5cdFx0XHRcdFx0XHRlZHR5cGU6IFwiMFwiLFxuXHRcdFx0XHRcdFx0cHJvamVjdGlkOiAnJyxcblx0XHRcdFx0XHRcdHJjbHNpZDogJycsXG5cdFx0XHRcdFx0XHRyb2JqaWQ6ICcnLFxuXHRcdFx0XHRcdFx0dXNlcmxvZ2luOiAnJyxcblx0XHRcdFx0XHRcdGNsc2lkOiB0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuSUQsXG5cdFx0XHRcdFx0XHRvYmppZDogXCJcIixcblx0XHRcdFx0XHRcdGF0dHI6IHJlcSxcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0dGhpcy5EYXRhT2JqUnVuQ3VzdG9tRXZlbnQoaW5mbyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdH0sXG5cdFx0b25jaGFuZ2UyKGl0ZW0sIHZhbHVlLCBkZWx2YWx1ZSkge1xuXHRcdFx0Ly8gY29uc29sZS5sb2coaXRlbSk7XG5cdFx0XHQvLyBjb25zb2xlLmxvZyh2YWx1ZSk7XG5cdFx0XHQvLyBjb25zb2xlLmxvZyhkZWx2YWx1ZSk7XG5cdFx0XHRpZiAoaXRlbS5sZW5ndGggPT0gMCkgeyAvL+S4uuepuuaXtu+8jOa4heepuuWxnuaAp3ZhbHVlXG5cdFx0XHRcdHZhciBpbmRleCwgaWluZGV4LCBkaW5kZXggPSAwO1xuXHRcdFx0XHRmb3IgKHZhciBpIGluIHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdCkge1xuXHRcdFx0XHRcdGZvciAodmFyIGogaW4gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2ldLkF0dHIpIHtcblx0XHRcdFx0XHRcdGlmIChkZWx2YWx1ZVswXS5hdHRyID09IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtpXS5BdHRyW2pdLk5hbWUpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2ldLkF0dHJbal0uVmFsdWUgPSBcIlwiO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRmb3IgKHZhciB2IGluIGl0ZW0pIHtcblx0XHRcdFx0dmFyIGluZGV4LCBpaW5kZXgsIGRpbmRleCA9IDA7XG5cdFx0XHRcdGZvciAodmFyIGkgaW4gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0KSB7XG5cdFx0XHRcdFx0Zm9yICh2YXIgaiBpbiB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbaV0uQXR0cikge1xuXHRcdFx0XHRcdFx0aWYgKGl0ZW1bdl0uYXR0ciA9PSB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbaV0uQXR0cltqXS5OYW1lKSB7XG5cdFx0XHRcdFx0XHRcdGluZGV4ID0gaTtcblx0XHRcdFx0XHRcdFx0aWluZGV4ID0gajtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0dmFyIGl0ZW12YWx1ZSA9IGl0ZW1bdl07XG5cdFx0XHRcdHZhciBkYXRhX2F0dHIgPSB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbaW5kZXhdLkF0dHJbaWluZGV4XTtcblxuXHRcdFx0XHRjb25zb2xlLmxvZyhkYXRhX2F0dHIpO1xuXHRcdFx0XHRpZiAoaXRlbXZhbHVlLk5hbWUgIT0gZGF0YV9hdHRyLlZhbHVlKSB7XG5cdFx0XHRcdFx0dGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2luZGV4XS5BdHRyW2lpbmRleF0uVmFsdWUgPSB2YWx1ZTtcblx0XHRcdFx0XHRjb25zb2xlLmxvZyh0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbaW5kZXhdLkF0dHJbaWluZGV4XS5WYWx1ZSk7XG5cdFx0XHRcdFx0dmFyIGV2ZW50aWQgPSB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbaW5kZXhdLkF0dHJbaWluZGV4XS5hY3Rpb247XG5cdFx0XHRcdFx0aWYgKGV2ZW50aWQpIHtcblx0XHRcdFx0XHRcdC8vIHNlbGYuZXZlbnRfbm9fc3ViID0gMTtcblx0XHRcdFx0XHRcdHZhciByZXEgPSBbXTtcblx0XHRcdFx0XHRcdHZhciBhdHRybGlzdCA9IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdDtcblx0XHRcdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmxpc3QubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRcdFx0dmFyIGF0dHIgPSBhdHRybGlzdFtpXS5BdHRyO1xuXHRcdFx0XHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IGF0dHIubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgYXIgPSBhdHRyW2pdO1xuXHRcdFx0XHRcdFx0XHRcdGlmIChhci5UeXBlID09ICflvJXnlKjlr7nosaEo5aSa5LiqKScpXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoYXIuVmFsdWUgPT0gJ+ivtycpIGFyLlZhbHVlID0gJyc7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGFyLlR5cGUgPT0gJ+W8leeUqOS6uuWRmCcgfHwgYXIuVHlwZSA9PSAn5byV55So6aG555uuJylcblx0XHRcdFx0XHRcdFx0XHRcdHJlcS5wdXNoKHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0YXR0cjogYXIuTmFtZSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsOiBhci5WYWxJRCA/IGFyLlZhbElEIDogJydcblx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdGVsc2UgaWYgKGFyLlR5cGUgPT0gJ+W4g+WwlOWAvCcpXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGF0dHI6IGFyLk5hbWUsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhbDogYXIuVmFsdWUgPyAnMScgOiAnMCdcblx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdGVsc2UgaWYgKGFyLlR5cGUgPT0gJ+Wtl+WFuCcgfHwgYXIuVHlwZSA9PSAn5a2X5YW4LeWtl+espuS4sicgfHwgYXIuVHlwZSA9PSAn5a2X5YW4LeaVtOaVsCcpXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGF0dHI6IGFyLk5hbWUsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhbDogaXRlbXZhbHVlLk5hbWVcblx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdFx0XHRcdHJlcS5wdXNoKHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0YXR0cjogYXIuTmFtZSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsOiBhci5WYWx1ZSA/IGFyLlZhbHVlIDogJydcblx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR2YXIgaW5mbyA9IHtcblx0XHRcdFx0XHRcdFx0ZXZlbnRpZDogZXZlbnRpZCxcblx0XHRcdFx0XHRcdFx0ZWR0eXBlOiBcIjBcIixcblx0XHRcdFx0XHRcdFx0cHJvamVjdGlkOiAnJyxcblx0XHRcdFx0XHRcdFx0cmNsc2lkOiAnJyxcblx0XHRcdFx0XHRcdFx0cm9iamlkOiAnJyxcblx0XHRcdFx0XHRcdFx0dXNlcmxvZ2luOiAnJyxcblx0XHRcdFx0XHRcdFx0Y2xzaWQ6IHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5JRCxcblx0XHRcdFx0XHRcdFx0b2JqaWQ6IFwiXCIsXG5cdFx0XHRcdFx0XHRcdGF0dHI6IHJlcSxcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHRoaXMuRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGluZm8pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cblx0XHR9LFxuXHRcdHN1Yl9vbmNoYW5nZShlKSB7XG5cdFx0XHRjb25zb2xlLmxvZyhlLnRhcmdldCk7XG5cdFx0XHR2YXIgdmFsdWUgPSB0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdFtlLnRhcmdldC5kYXRhc2V0WydpaWluZGV4J11dLnN1YkNsYXNzQXR0cltlLnRhcmdldC5kYXRhc2V0WydpbmRleCddXVxuXHRcdFx0XHQuQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV0uZGljdGl0ZW1bZS50YXJnZXQudmFsdWVdO1xuXHRcdFx0dmFyIGRhdGFfYXR0ciA9IHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2lpaW5kZXgnXV0uc3ViQ2xhc3NBdHRyW2UudGFyZ2V0LmRhdGFzZXRbXG5cdFx0XHRcdCdpbmRleCddXS5BdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2lpbmRleCddXTtcblx0XHRcdGNvbnNvbGUubG9nKGRhdGFfYXR0cik7XG5cdFx0XHRpZiAodmFsdWUuTmFtZSAhPSBkYXRhX2F0dHIuVmFsdWUpIHtcblx0XHRcdFx0dGhpcy4kZGF0YS5zdWJQYW5lbExpc3RbZS50YXJnZXQuZGF0YXNldFsnaWlpbmRleCddXS5zdWJDbGFzc0F0dHJbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlXG5cdFx0XHRcdFx0LnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV0uVmFsdWUgPSB2YWx1ZS5OYW1lO1xuXHRcdFx0XHRjb25zb2xlLmxvZyh0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdFtlLnRhcmdldC5kYXRhc2V0WydpaWluZGV4J11dLnN1YkNsYXNzQXR0cltlLnRhcmdldC5kYXRhc2V0W1xuXHRcdFx0XHRcdCdpbmRleCddXS5BdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2lpbmRleCddXS5WYWx1ZSk7XG5cdFx0XHRcdHZhciBldmVudGlkID0gdGhpcy4kZGF0YS5zdWJQYW5lbExpc3RbZS50YXJnZXQuZGF0YXNldFsnaWlpbmRleCddXS5zdWJDbGFzc0F0dHJbZS50YXJnZXQuZGF0YXNldFtcblx0XHRcdFx0XHQnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV0uYWN0aW9uO1xuXHRcdFx0XHRpZiAoZXZlbnRpZCkge1xuXHRcdFx0XHRcdC8vIHNlbGYuZXZlbnRfbm9fc3ViID0gMTtcblx0XHRcdFx0XHR2YXIgcmVxID0gW107XG5cdFx0XHRcdFx0dmFyIGF0dHJsaXN0ID0gdGhpcy4kZGF0YS5zdWJQYW5lbExpc3RbZS50YXJnZXQuZGF0YXNldFsnaWlpbmRleCddXS5zdWJDbGFzc0F0dHI7XG5cdFx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhdHRybGlzdC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdFx0dmFyIGF0dHIgPSBhdHRybGlzdFtpXS5BdHRyO1xuXHRcdFx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0XHRcdHZhciBhciA9IGF0dHJbal07XG5cdFx0XHRcdFx0XHRcdGlmIChhci5UeXBlID09ICflvJXnlKjlr7nosaEo5aSa5LiqKScpXG5cdFx0XHRcdFx0XHRcdFx0aWYgKGFyLlZhbHVlID09ICfor7cnKSBhci5WYWx1ZSA9ICcnO1xuXHRcdFx0XHRcdFx0XHRpZiAoYXIuVHlwZSA9PSAn5byV55So5Lq65ZGYJyB8fCBhci5UeXBlID09ICflvJXnlKjpobnnm64nKVxuXHRcdFx0XHRcdFx0XHRcdHJlcS5wdXNoKHtcblx0XHRcdFx0XHRcdFx0XHRcdGF0dHI6IGFyLk5hbWUsXG5cdFx0XHRcdFx0XHRcdFx0XHR2YWw6IGFyLlZhbElEID8gYXIuVmFsSUQgOiAnJ1xuXHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRlbHNlIGlmIChhci5UeXBlID09ICfluIPlsJTlgLwnKVxuXHRcdFx0XHRcdFx0XHRcdHJlcS5wdXNoKHtcblx0XHRcdFx0XHRcdFx0XHRcdGF0dHI6IGFyLk5hbWUsXG5cdFx0XHRcdFx0XHRcdFx0XHR2YWw6IGFyLlZhbHVlID8gJzEnIDogJzAnXG5cdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7XG5cdFx0XHRcdFx0XHRcdFx0XHRhdHRyOiBhci5OYW1lLFxuXHRcdFx0XHRcdFx0XHRcdFx0dmFsOiBhci5WYWx1ZSA/IGFyLlZhbHVlIDogJydcblx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0dmFyIGluZm8gPSB7XG5cdFx0XHRcdFx0XHRldmVudGlkOiBldmVudGlkLFxuXHRcdFx0XHRcdFx0ZWR0eXBlOiBcIjBcIixcblx0XHRcdFx0XHRcdHByb2plY3RpZDogJycsXG5cdFx0XHRcdFx0XHRyY2xzaWQ6ICcnLFxuXHRcdFx0XHRcdFx0cm9iamlkOiAnJyxcblx0XHRcdFx0XHRcdHVzZXJsb2dpbjogJycsXG5cdFx0XHRcdFx0XHRjbHNpZDogdGhpcy4kZGF0YS5wYXJhbS5TdWJfQ2xzLklELFxuXHRcdFx0XHRcdFx0b2JqaWQ6IFwiXCIsXG5cdFx0XHRcdFx0XHRhdHRyOiByZXEsXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHRoaXMuRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGluZm8pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHR9LFxuXHRcdHN1Yl9vbmNoYW5nZTIoaXRlbSwgdmFsdWUsIGRlbHZhbHVlKSB7XG5cdFx0XHQvLyBjb25zb2xlLmxvZyhpdGVtKTtcblx0XHRcdC8vIGNvbnNvbGUubG9nKHZhbHVlKTtcblx0XHRcdC8vIGNvbnNvbGUubG9nKGRlbHZhbHVlKTtcblx0XHRcdHZhciBzdWJDbGFzc0F0dHIgPSB0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdFtlLnRhcmdldC5kYXRhc2V0WydpaWluZGV4J11dLnN1YkNsYXNzQXR0cjtcblx0XHRcdGlmIChpdGVtLmxlbmd0aCA9PSAwKSB7IC8v5Li656m65pe277yM5riF56m65bGe5oCndmFsdWVcblx0XHRcdFx0dmFyIGluZGV4LCBpaW5kZXgsIGRpbmRleCA9IDA7XG5cdFx0XHRcdGZvciAodmFyIGkgaW4gc3ViQ2xhc3NBdHRyKSB7XG5cdFx0XHRcdFx0Zm9yICh2YXIgaiBpbiBzdWJDbGFzc0F0dHJbaV0uQXR0cikge1xuXHRcdFx0XHRcdFx0Zm9yICh2YXIgZCBpbiBzdWJDbGFzc0F0dHJbaV0uQXR0cltqXS5kaWN0aXRlbSkge1xuXHRcdFx0XHRcdFx0XHRpZiAoZGVsdmFsdWVbMF0uTmFtZSA9PSBzdWJDbGFzc0F0dHJbaV0uQXR0cltqXS5kaWN0aXRlbVtkXS5OYW1lKSB7XG5cdFx0XHRcdFx0XHRcdFx0c3ViQ2xhc3NBdHRyW2ldLkF0dHJbal0uVmFsdWUgPSBcIlwiO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGZvciAodmFyIHYgaW4gaXRlbSkge1xuXHRcdFx0XHR2YXIgaW5kZXgsIGlpbmRleCwgZGluZGV4ID0gMDtcblx0XHRcdFx0Zm9yICh2YXIgaSBpbiBzdWJDbGFzc0F0dHIpIHtcblx0XHRcdFx0XHRmb3IgKHZhciBqIGluIHN1YkNsYXNzQXR0cltpXS5BdHRyKSB7XG5cdFx0XHRcdFx0XHRmb3IgKHZhciBkIGluIHN1YkNsYXNzQXR0cltpXS5BdHRyW2pdLmRpY3RpdGVtKSB7XG5cdFx0XHRcdFx0XHRcdGlmIChpdGVtW3ZdLk5hbWUgPT0gc3ViQ2xhc3NBdHRyW2ldLkF0dHJbal0uZGljdGl0ZW1bZF0uTmFtZSkge1xuXHRcdFx0XHRcdFx0XHRcdGluZGV4ID0gaTtcblx0XHRcdFx0XHRcdFx0XHRpaW5kZXggPSBqO1xuXHRcdFx0XHRcdFx0XHRcdGRpbmRleCA9IGQ7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0dmFyIGl0ZW12YWx1ZSA9IGl0ZW1bdl07XG5cdFx0XHRcdHZhciBkYXRhX2F0dHIgPSBzdWJDbGFzc0F0dHJbaW5kZXhdLkF0dHJbaWluZGV4XTtcblxuXHRcdFx0XHRjb25zb2xlLmxvZyhkYXRhX2F0dHIpO1xuXHRcdFx0XHRpZiAoaXRlbXZhbHVlLk5hbWUgIT0gZGF0YV9hdHRyLlZhbHVlKSB7XG5cdFx0XHRcdFx0c3ViQ2xhc3NBdHRyW2luZGV4XS5BdHRyW2lpbmRleF0uVmFsdWUgPSB2YWx1ZTtcblx0XHRcdFx0XHRjb25zb2xlLmxvZyhzdWJDbGFzc0F0dHJbaW5kZXhdLkF0dHJbaWluZGV4XS5WYWx1ZSk7XG5cdFx0XHRcdFx0dmFyIGV2ZW50aWQgPSBzdWJDbGFzc0F0dHJbaW5kZXhdLkF0dHJbaWluZGV4XS5hY3Rpb247XG5cdFx0XHRcdFx0aWYgKGV2ZW50aWQpIHtcblx0XHRcdFx0XHRcdC8vIHNlbGYuZXZlbnRfbm9fc3ViID0gMTtcblx0XHRcdFx0XHRcdHZhciByZXEgPSBbXTtcblx0XHRcdFx0XHRcdHZhciBhdHRybGlzdCA9IHN1YkNsYXNzQXR0cjtcblx0XHRcdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmxpc3QubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRcdFx0dmFyIGF0dHIgPSBhdHRybGlzdFtpXS5BdHRyO1xuXHRcdFx0XHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IGF0dHIubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgYXIgPSBhdHRyW2pdO1xuXHRcdFx0XHRcdFx0XHRcdGlmIChhci5UeXBlID09ICflvJXnlKjlr7nosaEo5aSa5LiqKScpXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoYXIuVmFsdWUgPT0gJ+ivtycpIGFyLlZhbHVlID0gJyc7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGFyLlR5cGUgPT0gJ+W8leeUqOS6uuWRmCcgfHwgYXIuVHlwZSA9PSAn5byV55So6aG555uuJylcblx0XHRcdFx0XHRcdFx0XHRcdHJlcS5wdXNoKHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0YXR0cjogYXIuTmFtZSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsOiBhci5WYWxJRCA/IGFyLlZhbElEIDogJydcblx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdGVsc2UgaWYgKGFyLlR5cGUgPT0gJ+W4g+WwlOWAvCcpXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGF0dHI6IGFyLk5hbWUsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhbDogYXIuVmFsdWUgPyAnMScgOiAnMCdcblx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdGVsc2UgaWYgKGFyLlR5cGUgPT0gJ+Wtl+WFuCcgfHwgYXIuVHlwZSA9PSAn5a2X5YW4LeWtl+espuS4sicgfHwgYXIuVHlwZSA9PSAn5a2X5YW4LeaVtOaVsCcpXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGF0dHI6IGFyLk5hbWUsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhbDogaXRlbXZhbHVlLk5hbWVcblx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdFx0XHRcdHJlcS5wdXNoKHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0YXR0cjogYXIuTmFtZSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsOiBhci5WYWx1ZSA/IGFyLlZhbHVlIDogJydcblx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR2YXIgaW5mbyA9IHtcblx0XHRcdFx0XHRcdFx0ZXZlbnRpZDogZXZlbnRpZCxcblx0XHRcdFx0XHRcdFx0ZWR0eXBlOiBcIjBcIixcblx0XHRcdFx0XHRcdFx0cHJvamVjdGlkOiAnJyxcblx0XHRcdFx0XHRcdFx0cmNsc2lkOiAnJyxcblx0XHRcdFx0XHRcdFx0cm9iamlkOiAnJyxcblx0XHRcdFx0XHRcdFx0dXNlcmxvZ2luOiAnJyxcblx0XHRcdFx0XHRcdFx0Y2xzaWQ6IHRoaXMuJGRhdGEucGFyYW0uU3ViX0Nscy5JRCxcblx0XHRcdFx0XHRcdFx0b2JqaWQ6IFwiXCIsXG5cdFx0XHRcdFx0XHRcdGF0dHI6IHJlcSxcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHRoaXMuRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGluZm8pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cblx0XHR9LFxuXHRcdG9uZXZlbnQoZSkge1xuXHRcdFx0Ly8gY29uc29sZS5sb2coZS50YXJnZXQpO1xuXHRcdFx0dmFyIGRhdGFfYXR0ciA9IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtlLnRhcmdldC5kYXRhc2V0WydpbmRleCddXS5BdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2lpbmRleCddXTtcblx0XHRcdGlmICghZGF0YV9hdHRyKSB7XG5cdFx0XHRcdHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2lpaW5kZXgnXV0uc3ViQ2xhc3NBdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZVxuXHRcdFx0XHRcdC50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dLlZhbHVlID0gZS50YXJnZXQudmFsdWU7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdC8vIGNvbnNvbGUubG9nKGRhdGFfYXR0cik7XG5cdFx0XHRpZiAoZS50YXJnZXQudmFsdWUgIT0gZGF0YV9hdHRyLlZhbHVlKSB7XG5cdFx0XHRcdHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtlLnRhcmdldC5kYXRhc2V0WydpbmRleCddXS5BdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2lpbmRleCddXS5WYWx1ZSA9IGUudGFyZ2V0XG5cdFx0XHRcdFx0LnZhbHVlO1xuXHRcdFx0XHQvLyB2YXIgZXZlbnRpZCA9IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtlLnRhcmdldC5kYXRhc2V0WydpbmRleCddXS5BdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2lpbmRleCddXS5hY3Rpb247XG5cdFx0XHRcdC8v5a2Q5pWw5o2u57G75omr56CB5Yy65LqL5Lu26ISa5pysXG5cdFx0XHRcdHZhciBldmVudGlkID0gdGhpcy4kZGF0YS5wYXJhbS5TY2FuX0NvZGUuSW5wdXRfQ2hhbmdlX0V2ZW50LklEO1xuXHRcdFx0XHRpZiAoZXZlbnRpZCkge1xuXHRcdFx0XHRcdC8vIHNlbGYuZXZlbnRfbm9fc3ViID0gMTtcblx0XHRcdFx0XHR2YXIgcmVxID0gW107XG5cdFx0XHRcdFx0dmFyIGF0dHJsaXN0ID0gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0OyAvL+S4u+aVsOaNruexu+WxnuaAp1xuXHRcdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmxpc3QubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRcdHZhciBhdHRyID0gYXR0cmxpc3RbaV0uQXR0cjtcblx0XHRcdFx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdFx0XHR2YXIgYXIgPSBhdHRyW2pdO1xuXHRcdFx0XHRcdFx0XHRpZiAoYXIuVHlwZSA9PSAn5byV55So5a+56LGhKOWkmuS4qiknKVxuXHRcdFx0XHRcdFx0XHRcdGlmIChhci5WYWx1ZSA9PSAn6K+3JykgYXIuVmFsdWUgPSAnJztcblx0XHRcdFx0XHRcdFx0aWYgKGFyLlR5cGUgPT0gJ+W8leeUqOS6uuWRmCcgfHwgYXIuVHlwZSA9PSAn5byV55So6aG555uuJylcblx0XHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7XG5cdFx0XHRcdFx0XHRcdFx0XHRhdHRyOiBhci5OYW1lLFxuXHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU6IGFyLlZhbElEID8gYXIuVmFsSUQgOiAnJ1xuXHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRlbHNlIGlmIChhci5UeXBlID09ICfluIPlsJTlgLwnKVxuXHRcdFx0XHRcdFx0XHRcdHJlcS5wdXNoKHtcblx0XHRcdFx0XHRcdFx0XHRcdGF0dHI6IGFyLk5hbWUsXG5cdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogYXIuVmFsdWUgPyAnMScgOiAnMCdcblx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdFx0XHRcdHJlcS5wdXNoKHtcblx0XHRcdFx0XHRcdFx0XHRcdGF0dHI6IGFyLk5hbWUsXG5cdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogYXIuVmFsdWUgPyBhci5WYWx1ZSA6ICcnXG5cdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHZhciBpbmZvID0ge1xuXHRcdFx0XHRcdFx0ZXZlbnRpZDogZXZlbnRpZCxcblx0XHRcdFx0XHRcdGVkdHlwZTogXCI3XCIsIC8vXCIwXCIsXG5cdFx0XHRcdFx0XHRwcm9qZWN0aWQ6ICcnLFxuXHRcdFx0XHRcdFx0cmNsc2lkOiAnJyxcblx0XHRcdFx0XHRcdHJvYmppZDogJycsXG5cdFx0XHRcdFx0XHR1c2VybG9naW46ICcnLFxuXHRcdFx0XHRcdFx0Y2xzaWQ6ICdNQk9YJywgLy90aGlzLiRkYXRhLnBhcmFtLlN1Yl9DbHMuSUQsXG5cdFx0XHRcdFx0XHRvYmppZDogXCJcIixcblx0XHRcdFx0XHRcdGF0dHI6IHJlcSxcblx0XHRcdFx0XHRcdG1hc3RfYXR0cjogW10sXG5cdFx0XHRcdFx0XHRpbnB1dFBhcmFtdGVyOiBbe1xuXHRcdFx0XHRcdFx0XHRhdHRyOiAnbWFzdF9pbnB1dF8zMDM3Jyxcblx0XHRcdFx0XHRcdFx0dmFsdWU6IGUudGFyZ2V0LnZhbHVlXG5cdFx0XHRcdFx0XHR9XVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHRoaXMuc2Nhbl9EYXRhT2JqUnVuQ3VzdG9tRXZlbnQoaW5mbywgXCJcIik7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdH0sXG5cdFx0b25jaGVjayhlKSB7XG5cdFx0XHQvLyBjb25zb2xlLmxvZyhlLnRhcmdldCk7XG5cdFx0XHR2YXIgaXNjaGVja2VkID0gZS50YXJnZXQuZGF0YXNldC5pc2NoZWNrID8gZmFsc2UgOiB0cnVlO1xuXHRcdFx0dmFyIGRhdGFfYXR0ciA9IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtlLnRhcmdldC5kYXRhc2V0WydpbmRleCddXS5BdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2lpbmRleCddXTtcblx0XHRcdGlmICghZGF0YV9hdHRyKSB7XG5cdFx0XHRcdHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2lpaW5kZXgnXV0uc3ViQ2xhc3NBdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZVxuXHRcdFx0XHRcdC50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dLlZhbHVlID0gaXNjaGVja2VkO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHQvLyBjb25zb2xlLmxvZyhkYXRhX2F0dHIpO1xuXHRcdFx0aWYgKGlzY2hlY2tlZCAhPSBkYXRhX2F0dHIuVmFsdWUpIHtcblx0XHRcdFx0dGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZS50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dLlZhbHVlID0gaXNjaGVja2VkO1xuXHRcdFx0XHR2YXIgZXZlbnRpZCA9IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtlLnRhcmdldC5kYXRhc2V0WydpbmRleCddXS5BdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2lpbmRleCddXVxuXHRcdFx0XHRcdC5hY3Rpb247XG5cdFx0XHRcdGlmIChldmVudGlkKSB7XG5cdFx0XHRcdFx0Ly8gc2VsZi5ldmVudF9ub19zdWIgPSAxO1xuXHRcdFx0XHRcdHZhciByZXEgPSBbXTtcblx0XHRcdFx0XHR2YXIgYXR0cmxpc3QgPSB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3Q7XG5cdFx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhdHRybGlzdC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdFx0dmFyIGF0dHIgPSBhdHRybGlzdFtpXS5BdHRyO1xuXHRcdFx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0XHRcdHZhciBhciA9IGF0dHJbal07XG5cdFx0XHRcdFx0XHRcdGlmIChhci5UeXBlID09ICflvJXnlKjlr7nosaEo5aSa5LiqKScpXG5cdFx0XHRcdFx0XHRcdFx0aWYgKGFyLlZhbHVlID09ICfor7cnKSBhci5WYWx1ZSA9ICcnO1xuXHRcdFx0XHRcdFx0XHRpZiAoYXIuVHlwZSA9PSAn5byV55So5Lq65ZGYJyB8fCBhci5UeXBlID09ICflvJXnlKjpobnnm64nKVxuXHRcdFx0XHRcdFx0XHRcdHJlcS5wdXNoKHtcblx0XHRcdFx0XHRcdFx0XHRcdGF0dHI6IGFyLk5hbWUsXG5cdFx0XHRcdFx0XHRcdFx0XHR2YWw6IGFyLlZhbElEID8gYXIuVmFsSUQgOiAnJ1xuXHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRlbHNlIGlmIChhci5UeXBlID09ICfluIPlsJTlgLwnKVxuXHRcdFx0XHRcdFx0XHRcdHJlcS5wdXNoKHtcblx0XHRcdFx0XHRcdFx0XHRcdGF0dHI6IGFyLk5hbWUsXG5cdFx0XHRcdFx0XHRcdFx0XHR2YWw6IGFyLlZhbHVlID8gJzEnIDogJzAnXG5cdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7XG5cdFx0XHRcdFx0XHRcdFx0XHRhdHRyOiBhci5OYW1lLFxuXHRcdFx0XHRcdFx0XHRcdFx0dmFsOiBhci5WYWx1ZSA/IGFyLlZhbHVlIDogJydcblx0XHRcdFx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR2YXIgaW5mbyA9IHtcblx0XHRcdFx0XHRcdGV2ZW50aWQ6IGV2ZW50aWQsXG5cdFx0XHRcdFx0XHRlZHR5cGU6IFwiMFwiLFxuXHRcdFx0XHRcdFx0cHJvamVjdGlkOiAnJyxcblx0XHRcdFx0XHRcdHJjbHNpZDogJycsXG5cdFx0XHRcdFx0XHRyb2JqaWQ6ICcnLFxuXHRcdFx0XHRcdFx0dXNlcmxvZ2luOiAnJyxcblx0XHRcdFx0XHRcdGNsc2lkOiB0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuSUQsXG5cdFx0XHRcdFx0XHRvYmppZDogXCJcIixcblx0XHRcdFx0XHRcdGF0dHI6IHJlcSxcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0dGhpcy5EYXRhT2JqUnVuQ3VzdG9tRXZlbnQoaW5mbyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdH0sXG5cdFx0aW5wdXRWYWxMaXN0SXNEZWwoaW5kZXgpIHtcblx0XHRcdC8vIGNvbnNvbGUubG9nKGluZGV4KTtcblx0XHRcdHRoaXMuJGRhdGEuaW5wdXRWYWxMaXN0LnNwbGljZShpbmRleCwgMSk7IC8v5Yig6ZmkdGFiUGFnZWpzb27nmoTlhoXlrrlcblx0XHRcdC8vIGNvbnNvbGUubG9nKHRoaXMuJGRhdGEuaW5wdXRWYWxMaXN0KTtcblx0XHR9LFxuXHRcdGFkZHJlc3NjaGFuZ2UoZSkge1xuXHRcdFx0Ly8gY29uc29sZS5sb2coZS50YXJnZXQpO1xuXHRcdFx0Y29uc29sZS5sb2coZS5kYXRhLmpvaW4oJzsnKSlcblx0XHRcdHRoaXMuJGRhdGEuc3ViQ2xhc3NBdHRyTGlzdFtlLnRhcmdldC5kYXRhc2V0WydpbmRleCddXS5BdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2lpbmRleCddXS5WYWx1ZSA9IGUuZGF0YVxuXHRcdFx0XHQuam9pbignOycpO1xuXHRcdH0sXG5cdFx0Y2xhc3NBdHRyX2V4dEJ1dHRvbihpbmRleCwgaWluZGV4KSB7XG5cdFx0XHR2YXIgJHRoaXMgPSB0aGlzO1xuXHRcdFx0dmFyIGJlZm9yZV9jbGlja19idXR0b24gPSAkdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2luZGV4XS5BdHRyW2lpbmRleF0uYmVmb3JlX2NsaWNrX2J1dHRvbjtcblx0XHRcdHZhciBidXR0b25fY2FsbGJhY2sgPSAkdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2luZGV4XS5BdHRyW2lpbmRleF0uYnV0dG9uX2NhbGxiYWNrO1xuXHRcdFx0aWYgKCFiZWZvcmVfY2xpY2tfYnV0dG9uKSB7XG5cdFx0XHRcdHVuaS5zaG93TW9kYWwoe1xuXHRcdFx0XHRcdHRpdGxlOiBcIuaPkOekulwiLFxuXHRcdFx0XHRcdGNvbnRlbnQ6IFwiYmVmb3JlX2NsaWNrX2J1dHRvbi1ldmVudF9pZOS4uuepuu+8gVwiLFxuXHRcdFx0XHRcdHNob3dDYW5jZWw6IGZhbHNlLFxuXHRcdFx0XHRcdGNvbmZpcm1UZXh0OiBcIuWPlua2iFwiXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRpZiAoIWJ1dHRvbl9jYWxsYmFjaykge1xuXHRcdFx0XHR1bmkuc2hvd01vZGFsKHtcblx0XHRcdFx0XHR0aXRsZTogXCLmj5DnpLpcIixcblx0XHRcdFx0XHRjb250ZW50OiBcImJ1dHRvbl9jYWxsYmFjay1ldmVudF9pZOS4uuepuu+8gVwiLFxuXHRcdFx0XHRcdHNob3dDYW5jZWw6IGZhbHNlLFxuXHRcdFx0XHRcdGNvbmZpcm1UZXh0OiBcIuWPlua2iFwiXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHR2YXIgZGF0YV9hdHRyID0gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2luZGV4XS5BdHRyW2lpbmRleF07XG5cdFx0XHR0aGlzLkRhdGFPYmpSdW5DdXN0b21FdmVudF9SZXR1cm4oYmVmb3JlX2NsaWNrX2J1dHRvbiwgZGF0YV9hdHRyLCBidXR0b25fY2FsbGJhY2ssIGluZGV4LCBpaW5kZXgpO1xuXHRcdH0sXG5cdFx0Y2xhc3NBdHRyX0FkZFBlcihpbmRleCwgaWluZGV4KSB7XG5cdFx0XHR2YXIgcGFyYW0gPSB7XG5cdFx0XHRcdGluZGV4OiBpbmRleCxcblx0XHRcdFx0aWluZGV4OiBpaW5kZXhcblx0XHRcdH07XG5cdFx0XHR2YXIgJHRoaXMgPSB0aGlzO1xuXHRcdFx0dW5pLm5hdmlnYXRlVG8oe1xuXHRcdFx0XHR1cmw6ICcuLi9zZWxwc24vaW5kZXg/bXVsaXQ9ZmFsc2UmcGFyYW09JyArIEpTT04uc3RyaW5naWZ5KHBhcmFtKSxcblx0XHRcdFx0ZXZlbnRzOiB7XG5cdFx0XHRcdFx0QWRkUGVyKGRhdGEsIHBhcmFtKSB7XG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhwYXJhbSk7XG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhkYXRhKTtcblx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbcGFyYW0uaW5kZXhdLkF0dHJbcGFyYW0uaWluZGV4XS5WYWx1ZSA9IGRhdGFbMF0uTmFtZTtcblx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbcGFyYW0uaW5kZXhdLkF0dHJbcGFyYW0uaWluZGV4XS5WYWxJRCA9IGRhdGFbMF0uTG9naW4gKyAnOycgK1xuXHRcdFx0XHRcdFx0XHRkYXRhWzBdLk5hbWU7XG5cblx0XHRcdFx0XHRcdHZhciBldmVudGlkID0gJHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtwYXJhbS5pbmRleF0uQXR0cltwYXJhbS5paW5kZXhdLmFjdGlvbjtcblx0XHRcdFx0XHRcdGlmIChldmVudGlkKSB7XG5cdFx0XHRcdFx0XHRcdGV2ZW50aWQgPSBldmVudGlkLnRyaW0oKTtcblx0XHRcdFx0XHRcdFx0aWYgKGV2ZW50aWQpIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgaW5mbyA9IHtcblx0XHRcdFx0XHRcdFx0XHRcdGV2ZW50aWQ6IGV2ZW50aWQsXG5cdFx0XHRcdFx0XHRcdFx0XHRlZHR5cGU6IFwiNFwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0cHJvamVjdGlkOiBcIlwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0cmNsc2lkOiBcIlwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0cm9iamlkOiBcIlwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0dXNlcmxvZ2luOiBkYXRhWzBdLkxvZ2luLFxuXHRcdFx0XHRcdFx0XHRcdFx0Y2xzaWQ6ICR0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuSUQsXG5cdFx0XHRcdFx0XHRcdFx0XHRvYmppZDogXCJcIixcblx0XHRcdFx0XHRcdFx0XHRcdGF0dHI6IFtdLFxuXHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdC8vIHZhciBkYXRhX2F0dHIgPSAkdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W3BhcmFtLmluZGV4XS5BdHRyW3BhcmFtLmlpbmRleF07XG5cdFx0XHRcdFx0XHRcdFx0JHRoaXMuRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGluZm8pO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9LFxuXHRcdGNsYXNzQXR0cl9BZGRSZWYoZSkge1xuXHRcdFx0Y29uc29sZS5sb2coZS50YXJnZXQpO1xuXHRcdFx0dW5pLnNob3dNb2RhbCh7XG5cdFx0XHRcdHRpdGxlOiBcIuaPkOekulwiLFxuXHRcdFx0XHRjb250ZW50OiBcIuatpOWKn+iDvei/mOacquWunueOsO+8gVwiLFxuXHRcdFx0XHRzaG93Q2FuY2VsOiBmYWxzZSxcblx0XHRcdFx0Y29uZmlybVRleHQ6IFwi5Y+W5raIXCJcblx0XHRcdH0pO1xuXHRcdFx0Ly8gdmFyIHZhbHVlPXRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtlLnRhcmdldC5kYXRhc2V0WydpbmRleCddXS5BdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2lpbmRleCddXS5SZWxDbHNbZS50YXJnZXQudmFsdWVdO1xuXHRcdFx0Ly8gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZS50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dLlZhbHVlPXZhbHVlO1xuXHRcdH0sXG5cdFx0Y2xhc3NBdHRyX0FkZFByaihpbmRleCwgaWluZGV4KSB7XG5cdFx0XHR2YXIgcGFyYW0gPSB7XG5cdFx0XHRcdGluZGV4OiBpbmRleCxcblx0XHRcdFx0aWluZGV4OiBpaW5kZXhcblx0XHRcdH07XG5cdFx0XHR2YXIgJHRoaXMgPSB0aGlzO1xuXHRcdFx0dW5pLm5hdmlnYXRlVG8oe1xuXHRcdFx0XHR1cmw6ICcuLi9zZWxQcmovaW5kZXg/cmVsYXRpb249LTEmcGFyYW09JyArIEpTT04uc3RyaW5naWZ5KHBhcmFtKSxcblx0XHRcdFx0ZXZlbnRzOiB7XG5cdFx0XHRcdFx0QWRkUGVyKGRhdGEsIHBhcmFtKSB7XG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhwYXJhbSk7XG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhkYXRhKTtcblx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbcGFyYW0uaW5kZXhdLkF0dHJbcGFyYW0uaWluZGV4XS5WYWx1ZSA9IGRhdGFbMF0uTmFtZTtcblx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbcGFyYW0uaW5kZXhdLkF0dHJbcGFyYW0uaWluZGV4XS5WYWxJRCA9IGRhdGFbMF0uSUQgKyAnOycgK1xuXHRcdFx0XHRcdFx0XHRkYXRhWzBdLk5hbWU7XG5cblx0XHRcdFx0XHRcdHZhciBldmVudGlkID0gJHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtwYXJhbS5pbmRleF0uQXR0cltwYXJhbS5paW5kZXhdLmFjdGlvbjtcblx0XHRcdFx0XHRcdGlmIChldmVudGlkKSB7XG5cdFx0XHRcdFx0XHRcdGV2ZW50aWQgPSBldmVudGlkLnRyaW0oKTtcblx0XHRcdFx0XHRcdFx0aWYgKGV2ZW50aWQpIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgaW5mbyA9IHtcblx0XHRcdFx0XHRcdFx0XHRcdGV2ZW50aWQ6IGV2ZW50aWQsXG5cdFx0XHRcdFx0XHRcdFx0XHRlZHR5cGU6IFwiMlwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0cHJvamVjdGlkOiBkYXRhWzBdLklELFxuXHRcdFx0XHRcdFx0XHRcdFx0cmNsc2lkOiBcIlwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0cm9iamlkOiBcIlwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0dXNlcmxvZ2luOiBcIlwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0Y2xzaWQ6ICR0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuSUQsXG5cdFx0XHRcdFx0XHRcdFx0XHRvYmppZDogXCJcIixcblx0XHRcdFx0XHRcdFx0XHRcdGF0dHI6IFtdLFxuXHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdC8vIHZhciBkYXRhX2F0dHIgPSAkdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W3BhcmFtLmluZGV4XS5BdHRyW3BhcmFtLmlpbmRleF07XG5cdFx0XHRcdFx0XHRcdFx0JHRoaXMuRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGluZm8pO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9LFxuXHRcdHNhdmEoKSB7XG5cdFx0XHRpZiAodGhpcy4kZGF0YS5wYXJhbS5CZWZvcmVfT0tfRXZlbnQpIC8v5Yik5pat5Yqf6IO954K55Y+C5pWw5piv5ZCm5pyJ56Gu5a6a5YmN6ISa5pysXG5cdFx0XHRcdHRoaXMuc2Nhbl9PS0RhdGFPYmpSdW5DdXN0b21FdmVudCh0aGlzLiRkYXRhLnBhcmFtLkJlZm9yZV9PS19FdmVudC5JRCk7XG5cdFx0XHRlbHNlIGlmICh0aGlzLiRkYXRhLnBhcmFtLkFmdGVyX09LX0V2ZW50KSAvL+WIpOaWreWKn+iDveeCueWPguaVsOaYr+WQpuacieehruWumuWQjuiEmuacrFxuXHRcdFx0XHR0aGlzLnNjYW5fT0tEYXRhT2JqUnVuQ3VzdG9tRXZlbnQodGhpcy4kZGF0YS5wYXJhbS5BZnRlcl9PS19FdmVudC5JRCk7XG5cdFx0XHRlbHNlXG5cdFx0XHRcdHVuaS5uYXZpZ2F0ZUJhY2soe1xuXHRcdFx0XHRcdGRlbHRhOiAxXG5cdFx0XHRcdH0pOyAvL+i/lOWbnuWxguaVsO+8jDLliJnkuIrkuIrpobVcblx0XHR9LFxuXHRcdGFkZCgpIHtcblx0XHRcdHVuaS5zaG93TG9hZGluZyh7XG5cdFx0XHRcdHRpdGxlOiBcIuWKoOi9veS4rS4uLlwiLFxuXHRcdFx0XHRtYXNrOiB0cnVlXG5cdFx0XHR9KTtcblx0XHRcdHZhciByZXEgPSBbXTtcblx0XHRcdHZhciBhdHRybGlzdCA9IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdDtcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmxpc3QubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0dmFyIGF0dHIgPSBhdHRybGlzdFtpXS5BdHRyO1xuXHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IGF0dHIubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0XHR2YXIgYXIgPSBhdHRyW2pdO1xuXHRcdFx0XHRcdGlmIChhci5WYWx1ZSA9PSAn6K+36YCJ5oupJyB8fCBhci5WYWx1ZSA9PSAn4oCU4oCU6K+36YCJ5oup4oCU4oCUJykgYXIuVmFsdWUgPSAnJztcblx0XHRcdFx0XHRpZiAoYXIuVHlwZSA9PSAn5byV55So5a+56LGhKOWkmuS4qiknKVxuXHRcdFx0XHRcdFx0aWYgKGFyLlZhbHVlID09ICfor7cnKSBhci5WYWx1ZSA9ICcnO1xuXHRcdFx0XHRcdGlmIChhci5UeXBlID09ICflvJXnlKjkurrlkZgnIHx8IGFyLlR5cGUgPT0gJ+W8leeUqOmhueebricpXG5cdFx0XHRcdFx0XHRyZXEucHVzaCh7XG5cdFx0XHRcdFx0XHRcdG5hbWU6IGFyLk5hbWUsXG5cdFx0XHRcdFx0XHRcdHZhbHVlOiBhci5WYWxJRCA/IGFyLlZhbElEIDogJydcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdGVsc2UgaWYgKGFyLlR5cGUgPT0gJ+W4g+WwlOWAvCcpXG5cdFx0XHRcdFx0XHRyZXEucHVzaCh7XG5cdFx0XHRcdFx0XHRcdG5hbWU6IGFyLk5hbWUsXG5cdFx0XHRcdFx0XHRcdHZhbHVlOiBhci5WYWx1ZSA/ICcxJyA6ICcwJ1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0ZWxzZSBpZiAoYXIuVHlwZSA9PSAn5a2X5YW4JyB8fCBhci5UeXBlID09ICflrZflhbgt5a2X56ym5LiyJyB8fCBhci5UeXBlID09ICflrZflhbgt5pW05pWwJykge1xuXHRcdFx0XHRcdFx0aWYgKGFyLnNlbGVjdCA9PSB0cnVlKSB7IC8v5Yik5pat5LiL5ouJ5piv5ZCm5aSa6YCJXG5cdFx0XHRcdFx0XHRcdHZhciB2YWxTdHIgPSBcIlwiO1xuXHRcdFx0XHRcdFx0XHRmb3IgKHZhciB2IGluIGFyLlZhbHVlKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKHZhbFN0cilcblx0XHRcdFx0XHRcdFx0XHRcdHZhbFN0ciArPSBcIjtcIjtcblx0XHRcdFx0XHRcdFx0XHR2YWxTdHIgKz0gYXIuVmFsdWVbdl07XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0cmVxLnB1c2goe1xuXHRcdFx0XHRcdFx0XHRcdG5hbWU6IGFyLk5hbWUsXG5cdFx0XHRcdFx0XHRcdFx0dmFsdWU6IHZhbFN0clxuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH0gZWxzZVxuXHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7XG5cdFx0XHRcdFx0XHRcdFx0bmFtZTogYXIuTmFtZSxcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogYXIuVmFsdWVcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fSBlbHNlXG5cdFx0XHRcdFx0XHRyZXEucHVzaCh7XG5cdFx0XHRcdFx0XHRcdG5hbWU6IGFyLk5hbWUsXG5cdFx0XHRcdFx0XHRcdHZhbHVlOiBhci5WYWx1ZSA/IGFyLlZhbHVlIDogJydcblx0XHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0aWYgKGFyLm5vdGVtcHR5ID09IHRydWUgJiYgIWFyLlZhbHVlKSB7XG5cdFx0XHRcdFx0XHQvLyBpZihhci5Ob3RFbXB0eT09JzEnKXtcblx0XHRcdFx0XHRcdHVuaS5oaWRlTG9hZGluZygpO1xuXHRcdFx0XHRcdFx0Ly8gdW5pLnNob3dUb2FzdCh7dGl0bGU6YXIuRGlzcE5hbWUrJ+S4jeiDveS4uuepuu+8gScsaWNvbjpcInN1Y2Nlc3NcIixkdXJhdGlvbjozMDAwfSk7XG5cdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHtcblx0XHRcdFx0XHRcdFx0dGl0bGU6IFwi5o+Q56S6XCIsXG5cdFx0XHRcdFx0XHRcdGNvbnRlbnQ6IGFyLkRpc3BOYW1lICsgJ+S4jeiDveS4uuepuu+8gScsXG5cdFx0XHRcdFx0XHRcdHNob3dDYW5jZWw6IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRjb25maXJtVGV4dDogXCLlj5bmtohcIlxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHR2YXIgZW52aXJvbWVudCA9IHtcblx0XHRcdFx0J2Z1bmN0aW9uJzogJzMwMDAnLCAvLyDlip/og73ngrnnvJblj7dcblx0XHRcdFx0Y2xzX2lkOiB0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuSUQsIC8vIOWKn+iDveeCueS4u+aVsOaNruexu+agh+ivhlxuXHRcdFx0XHQnYnV0dG9uJzogJ3RvcCcsIC8vIHRvcC9ib3R0b21cblx0XHRcdFx0YnV0dG9uX25hbWU6ICfmlrDlop4nLFxuXHRcdFx0XHRtYXN0ZXI6IHtcblx0XHRcdFx0XHRjbHNfaWQ6IHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5JRCxcblx0XHRcdFx0fVxuXHRcdFx0fTtcblxuXHRcdFx0dmFyIGRhdGFJbmZvID0ge1xuXHRcdFx0XHRjbGFzc19pZDogdGhpcy4kZGF0YS5wYXJhbS5NYXN0ZXJfQ2xzLklELFxuXHRcdFx0XHRkYXRhX29ial9pZDogJycsXG5cdFx0XHRcdG1hc3RlcmNsc2lkOiAnJyxcblx0XHRcdFx0cmVxOiBKU09OLnN0cmluZ2lmeShyZXEpLFxuXHRcdFx0XHR1cGZpbGU6IEpTT04uc3RyaW5naWZ5KFtdKSxcblx0XHRcdFx0cG9zdF9kYXRhOiBKU09OLnN0cmluZ2lmeSh7fSksXG5cdFx0XHRcdGNvbXBvc2U6IEpTT04uc3RyaW5naWZ5KFtdKSxcblx0XHRcdFx0cmVmZGF0YXN0b3JlOiBKU09OLnN0cmluZ2lmeShbXSksXG5cdFx0XHRcdGV4dGluZm86IEpTT04uc3RyaW5naWZ5KGVudmlyb21lbnQpLFxuXHRcdFx0XHRub3RfdHJpZ2dlcl9zeXNfZXZlbnQ6ICcnXG5cdFx0XHR9O1xuXG5cdFx0XHQvLyByZXR1cm5cblx0XHRcdGNvbnNvbGUubG9nKGRhdGFJbmZvKTtcblx0XHRcdHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdhZGRjbGFzc2F0dHInLCBkYXRhSW5mbykudGhlbihzdWNjZXNzID0+IHtcblx0XHRcdFx0Y29uc29sZS5sb2coc3VjY2Vzcyk7XG5cdFx0XHRcdHVuaS5oaWRlTG9hZGluZygpO1xuXHRcdFx0XHRpZiAoc3VjY2Vzcy5jb2RlID09ICcwMDAwMCcpIHtcblx0XHRcdFx0XHR2YXIgYWN0aW9uID0gSlNPTi5wYXJzZShzdWNjZXNzLmRhdGEuQWN0aW9uKTtcblx0XHRcdFx0XHRpZiAoYWN0aW9uLnJldCA9PSAnMCcpIHtcblx0XHRcdFx0XHRcdGlmIChhY3Rpb24ucmVzdWx0X3R5cGUgPT0gJzAnKSB7XG5cdFx0XHRcdFx0XHRcdHVuaS5zaG93VG9hc3Qoe1xuXHRcdFx0XHRcdFx0XHRcdHRpdGxlOiBhY3Rpb24ucmVzdWx0LFxuXHRcdFx0XHRcdFx0XHRcdGljb246IFwic3VjY2Vzc1wiLFxuXHRcdFx0XHRcdFx0XHRcdGR1cmF0aW9uOiAzMDAwXG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0Ly8gXCJ7XCJyZXRcIjowLCBcInJlc3VsdF90eXBlXCI6MCwgXCJyZXN1bHRcIjpcIuWIm+W7uuaIkOWKnzEyMzEyMzEyM1wiLFwiaW5mb1wiOlwiXCJ9XCJcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Ly/liLfmlrBcblx0XHRcdFx0XHR1bmkucmVkaXJlY3RUbyh7XG5cdFx0XHRcdFx0XHR1cmw6ICcuLi9tb2RhbC9tc19jbGFzc0F0dHI/cGFyYW09JyArIEpTT04uc3RyaW5naWZ5KHRoaXMuJGRhdGEucGFyYW0pICtcblx0XHRcdFx0XHRcdFx0XCImdGl0bGVuYW1lPVwiICsgdGhpcy4kZGF0YS50aXRsZVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdC8vIHRoaXMuY2xhc3NfYXR0cl9pbml0KCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7XG5cdFx0XHRcdFx0XHR0aXRsZTogXCLplJnor69cIixcblx0XHRcdFx0XHRcdGNvbnRlbnQ6IHN1Y2Nlc3MubXNnLFxuXHRcdFx0XHRcdFx0c2hvd0NhbmNlbDogZmFsc2UsXG5cdFx0XHRcdFx0XHRjb25maXJtVGV4dDogXCLlj5bmtohcIlxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KS5jYXRjaChleCA9PiB7XG5cdFx0XHRcdGNvbnNvbGUubG9nKGV4KTtcblx0XHRcdFx0dW5pLmhpZGVMb2FkaW5nKCk7XG5cdFx0XHRcdHVuaS5zaG93TW9kYWwoe1xuXHRcdFx0XHRcdHRpdGxlOiBcIuaPkOekulwiLFxuXHRcdFx0XHRcdGNvbnRlbnQ6IGV4LmVyck1zZyxcblx0XHRcdFx0XHRzaG93Q2FuY2VsOiBmYWxzZSxcblx0XHRcdFx0XHRjb25maXJtVGV4dDogXCLlj5bmtohcIlxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdH0sXG5cdFx0Y2xhc3NfYXR0cl9pbml0KCkge1xuXHRcdFx0dmFyIGF0dHJsaXN0ID0gdGhpcy4kZGF0YS5jbGFzc0dyaWRTdHlsZS5TdHlsZURlZi5zaG93X3N0eWxlXG5cdFx0XHR2YXIgbmV3YXR0cmxpc3QgPSBbXTtcblx0XHRcdGlmICh0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3QubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJsaXN0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0dmFyIG9wZW4gPSBhdHRybGlzdFtpXS5vcGVuO1xuXHRcdFx0XHRcdHZhciBuYW1lID0gYXR0cmxpc3RbaV0uYXR0cmdyb3VwX25hbWU7XG5cdFx0XHRcdFx0dmFyIGF0dHJzID0gYXR0cmxpc3RbaV0uYXR0cnM7XG5cdFx0XHRcdFx0Zm9yICh2YXIgcyA9IDA7IHMgPCB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3QubGVuZ3RoOyBzKyspIHtcblx0XHRcdFx0XHRcdHZhciBjbHNhdHRyID0gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W3NdO1xuXHRcdFx0XHRcdFx0aWYgKG5hbWUgPT0gY2xzYXR0ci5OYW1lKSB7XG5cdFx0XHRcdFx0XHRcdHZhciBhdHRyID0gW107XG5cdFx0XHRcdFx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0cnMubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBsID0gMDsgbCA8IGNsc2F0dHIuQXR0ci5sZW5ndGg7IGwrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIGNhID0gY2xzYXR0ci5BdHRyW2xdO1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKGF0dHJzW2pdLmF0dHIgPT0gY2EuTmFtZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5hY3Rpb24gPSBhdHRyc1tqXS5hY3Rpb247XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNhLmVkaXQgPSBhdHRyc1tqXS5lZGl0O1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5ub3RlbXB0eSA9IGF0dHJzW2pdLm5vdGVtcHR5O1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5leHRfYnV0dG9uID0gYXR0cnNbal0uZXh0X2J1dHRvbjtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2EuYnV0dG9uX2ltZyA9IGF0dHJzW2pdLmJ1dHRvbl9pbWc7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNhLmJ1dHRvbl90b29sdGlwID0gYXR0cnNbal0uYnV0dG9uX3Rvb2x0aXA7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNhLmJlZm9yZV9jbGlja19idXR0b24gPSBhdHRyc1tqXS5iZWZvcmVfY2xpY2tfYnV0dG9uO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5idXR0b25fY2FsbGJhY2sgPSBhdHRyc1tqXS5idXR0b25fY2FsbGJhY2s7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNhLmhpZGRlbiA9IGF0dHJzW2pdLmhpZGRlbjtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2Euc2VsZWN0ID0gYXR0cnNbal0uc2VsZWN0ID09IHVuZGVmaW5lZCA/IGZhbHNlIDogYXR0cnNbal0uc2VsZWN0O1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5WYWx1ZSA9IFwiXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChjYS5kaWN0aXRlbSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChjYS5zZWxlY3QgPT0gdHJ1ZSlcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhLlZhbHVlID0gW107IC8vY2EuZGljdGl0ZW1bMF0uQ05fU19OQU1FO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhLlZhbHVlID0gJ+ivt+mAieaLqSc7IC8vY2EuZGljdGl0ZW1bMF0uQ05fU19OQU1FO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBkaWN0aXRlbWxpc3QgPSBbXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBkID0gMDsgZCA8IGNhLmRpY3RpdGVtLmxlbmd0aDsgZCsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5kaWN0aXRlbVtkXS5sYWJlbCA9IGNhLmRpY3RpdGVtW2RdLkNOX1NfTkFNRTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhLmRpY3RpdGVtW2RdLnZhbHVlID0gY2EuZGljdGl0ZW1bZF0uQ05fU19OQU1FO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2EuZGljdGl0ZW1bZF0uYXR0ciA9IGNhLk5hbWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoY2EuZGljdGl0ZW1bZF0uQ05fQ19JU19ERUZBVUxUID09ICcxJylcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2EuVmFsdWUgPSBjYS5kaWN0aXRlbVtkXS5DTl9TX05BTUU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChjYS5UeXBlID09ICfml6XmnJ8nIHx8IGNhLlR5cGUgPT0gJ+aXtumXtCcpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgbm93RGF0ZSA9IG5ldyBEYXRlKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGRhdGUgPSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR5ZWFyOiBub3dEYXRlLmdldEZ1bGxZZWFyKCksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtb250aDogbm93RGF0ZS5nZXRNb250aCgpICsgMSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRheTogbm93RGF0ZS5nZXREYXRlKClcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2EuVmFsdWUgPSBkYXRlLnllYXIgKyAnLScgKyAoZGF0ZS5tb250aCA+PSAxMCA/IGRhdGUubW9udGggOiAnMCcgKyBkYXRlXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQubW9udGgpICsgJy0nICsgKGRhdGUuZGF5ID49IDEwID8gZGF0ZS5kYXkgOiAnMCcgKyBkYXRlLmRheSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGNhLlR5cGUgPT0gJ+W8leeUqOWvueixoSjlpJrkuKopJykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciByZWxDbHNMaXN0ID0gW107XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGF0dHJfcmVzY2xzID0gY2EuUmVsQ2xzLnNwbGl0KCcsJyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgaWkgaW4gYXR0cl9yZXNjbHMpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciByZXNjbHMgPSBhdHRyX3Jlc2Nsc1tpaV0uc3BsaXQoJ3wnKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlbENsc0xpc3QucHVzaCh7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlkOiByZXNjbHNbMF0sXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG5hbWU6IHJlc2Nsc1sxXVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhLlJlbENsc0xpc3QgPSByZWxDbHNMaXN0O1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhLlZhbHVlID0gJ+ivtyc7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGNhLlR5cGUgPT0gJ+ecgeW4guWMuicpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2EuVmFsdWUgPSAn6K+36YCJ5oupJztcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGNhLlR5cGUgPT0gJ+W4g+WwlOWAvCcpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2EuVmFsdWUgPSBmYWxzZTtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRhdHRyLnB1c2goY2EpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRuZXdhdHRybGlzdC5wdXNoKHtcblx0XHRcdFx0XHRcdFx0XHRCa0NvbG9yOiBjbHNhdHRyLkJrQ29sb3IsXG5cdFx0XHRcdFx0XHRcdFx0SGFzQWNlOiBjbHNhdHRyLkhhc0FjZSxcblx0XHRcdFx0XHRcdFx0XHRJbWdGb250U3R5bGU6IGNsc2F0dHIuSW1nRm9udFN0eWxlLFxuXHRcdFx0XHRcdFx0XHRcdE5hbWU6IGNsc2F0dHIuTmFtZSxcblx0XHRcdFx0XHRcdFx0XHRPcmRlcjogY2xzYXR0ci5PcmRlcixcblx0XHRcdFx0XHRcdFx0XHRPcGVuOiBvcGVuLFxuXHRcdFx0XHRcdFx0XHRcdEF0dHI6IGF0dHIsXG5cdFx0XHRcdFx0XHRcdFx0Y29udHJvbF9zdHlsZTogdGhpcy4kZGF0YS5jbGFzc0dyaWRTdHlsZS5TdHlsZURlZi5jb250cm9sX3N0eWxlLFxuXHRcdFx0XHRcdFx0XHRcdHRpdGxlX3Bfd2RpdGg6IHRoaXMuJGRhdGEuY2xhc3NHcmlkU3R5bGUuU3R5bGVEZWYudGl0bGVfcF93ZGl0aCxcblx0XHRcdFx0XHRcdFx0XHRGb250OiB0aGlzLiRkYXRhLmNsYXNzR3JpZFN0eWxlLlN0eWxlRGVmLkZvbnQgPyB0aGlzLiRkYXRhLmNsYXNzR3JpZFN0eWxlXG5cdFx0XHRcdFx0XHRcdFx0XHQuU3R5bGVEZWYuRm9udCA6IHt9LFxuXHRcdFx0XHRcdFx0XHRcdEJrX0NvbG9yOiB0aGlzLiRkYXRhLmNsYXNzR3JpZFN0eWxlLlN0eWxlRGVmLkJrX0NvbG9yID8gdGhpcy4kZGF0YVxuXHRcdFx0XHRcdFx0XHRcdFx0LmNsYXNzR3JpZFN0eWxlLlN0eWxlRGVmLkJrX0NvbG9yIDogJyNGRkZGRkYnLFxuXHRcdFx0XHRcdFx0XHRcdFRleHRfQ29sb3I6IHRoaXMuJGRhdGEuY2xhc3NHcmlkU3R5bGUuU3R5bGVEZWYuVGV4dF9Db2xvciA/IHRoaXMuJGRhdGFcblx0XHRcdFx0XHRcdFx0XHRcdC5jbGFzc0dyaWRTdHlsZS5TdHlsZURlZi5UZXh0X0NvbG9yIDogJyMwMDAwMDAnXG5cdFx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChuZXdhdHRybGlzdC5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0dGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0ID0gbmV3YXR0cmxpc3Q7XG5cdFx0XHRcdH1cblx0XHRcdFx0dmFyIHJlcSA9IFtdO1xuXHRcdFx0XHRpZiAodGhpcy4kZGF0YS5jbGFzc0dyaWRTdHlsZS5TdHlsZURlZikge1xuXHRcdFx0XHRcdGlmICh0aGlzLiRkYXRhLmNsYXNzR3JpZFN0eWxlLlN0eWxlRGVmLnNob3dfc3R5bGUubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0dmFyIGF0dHJsaXN0ID0gdGhpcy4kZGF0YS5jbGFzc0dyaWRTdHlsZS5TdHlsZURlZi5zaG93X3N0eWxlXG5cdFx0XHRcdFx0XHQvLyAkZWwuZmluZCgnLmF0dHJfZmllbGQnKS5wcm9wKCdyZWFkb25seScsIHRydWUpO1xuXHRcdFx0XHRcdFx0Ly8gJGVsLmZpbmQoJy5hdHRyX2ZpZWxkJykucHJvcCgnZGlzYWJsZWQnLCB0cnVlKTtcblx0XHRcdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmxpc3QubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRcdFx0dmFyIGF0dHIgPSBhdHRybGlzdFtpXS5hdHRyc1xuXHRcdFx0XHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IGF0dHIubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgYXIgPSBhdHRyW2pdO1xuXHRcdFx0XHRcdFx0XHRcdHJlcS5wdXNoKHtcblx0XHRcdFx0XHRcdFx0XHRcdGF0dHI6IGFyLmF0dHIsXG5cdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogYXIudmFsdWUgPyBhci52YWx1ZSA6ICcnXG5cdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR2YXIgZXZlbnRsaXN0ID0gdGhpcy4kZGF0YS5jbGFzc0dyaWRTdHlsZS5TdHlsZURlZi5ldmVudDtcblx0XHRcdFx0aWYgKGV2ZW50bGlzdCkge1xuXHRcdFx0XHRcdGlmIChldmVudGxpc3QubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBldmVudGxpc3QubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRcdFx0aWYgKGV2ZW50bGlzdFtpXS5ldmVudF9pZCA9PSAnYmVmb3JlX29rJykge1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMuJGRhdGEuZWRpdF9va19ldmVudCA9IGV2ZW50bGlzdFtpXTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmIChldmVudGxpc3RbaV0uZXZlbnRfaWQgPT0gJ2luaXRpYWwnKSB7XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy4kZGF0YS5lZGl0X2luaXRhbF9ldmVudCA9IGV2ZW50bGlzdFtpXTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmIChldmVudGxpc3RbaV0uZXZlbnRfaWQgPT0gJ2JlZm9yZV9zZWxlY3RfY29tcG9zZScpIHtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLiRkYXRhLmVkaXRfc2VsZWN0X2NvbXBvc2VfZXZlbnQgPSBldmVudGxpc3RbaV0uc2NyaXBfaWQ7XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy4kZGF0YS5lZGl0X2NvbXBvc2VfY2xzX2lkID0gZXZlbnRsaXN0W2ldLmNvbXBvc2VfY2xzX2lkO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKHJlcSk7XG5cdFx0XHRcdGlmICh0aGlzLiRkYXRhLmVkaXRfaW5pdGFsX2V2ZW50KSB7XG5cdFx0XHRcdFx0dmFyIGV2ZW50aWQgPSB0aGlzLiRkYXRhLmVkaXRfaW5pdGFsX2V2ZW50LnNjcmlwX2lkO1xuXHRcdFx0XHRcdHZhciBpbmZvID0ge1xuXHRcdFx0XHRcdFx0ZXZlbnRpZDogZXZlbnRpZCxcblx0XHRcdFx0XHRcdGVkdHlwZTogXCIwXCIsXG5cdFx0XHRcdFx0XHRwcm9qZWN0aWQ6ICcnLFxuXHRcdFx0XHRcdFx0cmNsc2lkOiAnJyxcblx0XHRcdFx0XHRcdHJvYmppZDogJycsXG5cdFx0XHRcdFx0XHR1c2VybG9naW46ICcnLFxuXHRcdFx0XHRcdFx0Y2xzaWQ6IHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5JRCxcblx0XHRcdFx0XHRcdG9iamlkOiBcIlwiLFxuXHRcdFx0XHRcdFx0YXR0cjogcmVxLFxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR0aGlzLmluaV9EYXRhT2JqUnVuQ3VzdG9tRXZlbnQoaW5mbyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc29sZS5sb2codGhpcy4kZGF0YS5jbGFzc0dyaWRTdHlsZSk7XG5cdFx0XHRcdGNvbnNvbGUubG9nKHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdCk7XG5cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHVuaS5zaG93TW9kYWwoe1xuXHRcdFx0XHRcdHRpdGxlOiBcIuaPkOekulwiLFxuXHRcdFx0XHRcdGNvbnRlbnQ6IFwi5pyq5om+5Yiw5Y+v5pi+56S655qE55qE5bGe5oCnXCIsXG5cdFx0XHRcdFx0c2hvd0NhbmNlbDogZmFsc2UsXG5cdFx0XHRcdFx0Y29uZmlybVRleHQ6IFwi5Y+W5raIXCJcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRzdWJDbGFzc19hdHRyX2luaXQoKSB7XG5cdFx0XHR2YXIgYXR0cmxpc3QgPSB0aGlzLiRkYXRhLnN1YkNsYXNzR3JpZFN0eWxlLlN0eWxlRGVmLnNob3dfc3R5bGVcblx0XHRcdHZhciBuZXdhdHRybGlzdCA9IFtdO1xuXHRcdFx0aWYgKHRoaXMuJGRhdGEuc3ViQ2xhc3NBdHRyTGlzdC5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmxpc3QubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHR2YXIgb3BlbiA9IGF0dHJsaXN0W2ldLm9wZW47XG5cdFx0XHRcdFx0dmFyIG5hbWUgPSBhdHRybGlzdFtpXS5hdHRyZ3JvdXBfbmFtZTtcblx0XHRcdFx0XHR2YXIgYXR0cnMgPSBhdHRybGlzdFtpXS5hdHRycztcblx0XHRcdFx0XHRmb3IgKHZhciBzID0gMDsgcyA8IHRoaXMuJGRhdGEuc3ViQ2xhc3NBdHRyTGlzdC5sZW5ndGg7IHMrKykge1xuXHRcdFx0XHRcdFx0dmFyIGNsc2F0dHIgPSB0aGlzLiRkYXRhLnN1YkNsYXNzQXR0ckxpc3Rbc107XG5cdFx0XHRcdFx0XHRpZiAobmFtZSA9PSBjbHNhdHRyLk5hbWUpIHtcblx0XHRcdFx0XHRcdFx0dmFyIGF0dHIgPSBbXTtcblx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBhdHRycy5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGwgPSAwOyBsIDwgY2xzYXR0ci5BdHRyLmxlbmd0aDsgbCsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgY2EgPSBjbHNhdHRyLkF0dHJbbF07XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoYXR0cnNbal0uYXR0ciA9PSBjYS5OYW1lKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNhLmFjdGlvbiA9IGF0dHJzW2pdLmFjdGlvbjtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2EuZWRpdCA9IGF0dHJzW2pdLmVkaXQ7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNhLm5vdGVtcHR5ID0gYXR0cnNbal0ubm90ZW1wdHk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNhLmV4dF9idXR0b24gPSBhdHRyc1tqXS5leHRfYnV0dG9uO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5idXR0b25faW1nID0gYXR0cnNbal0uYnV0dG9uX2ltZztcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2EuYnV0dG9uX3Rvb2x0aXAgPSBhdHRyc1tqXS5idXR0b25fdG9vbHRpcDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2EuYmVmb3JlX2NsaWNrX2J1dHRvbiA9IGF0dHJzW2pdLmJlZm9yZV9jbGlja19idXR0b247XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNhLmJ1dHRvbl9jYWxsYmFjayA9IGF0dHJzW2pdLmJ1dHRvbl9jYWxsYmFjaztcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2EuaGlkZGVuID0gYXR0cnNbal0uaGlkZGVuO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5zZWxlY3QgPSBhdHRyc1tqXS5zZWxlY3QgPT0gdW5kZWZpbmVkID8gZmFsc2UgOiBhdHRyc1tqXS5zZWxlY3Q7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNhLlZhbHVlID0gXCJcIjtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGNhLmRpY3RpdGVtKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGNhLnNlbGVjdCA9PSB0cnVlKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2EuVmFsdWUgPSBbXTsgLy9jYS5kaWN0aXRlbVswXS5DTl9TX05BTUU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2EuVmFsdWUgPSAn6K+36YCJ5oupJzsgLy9jYS5kaWN0aXRlbVswXS5DTl9TX05BTUU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGRpY3RpdGVtbGlzdCA9IFtdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGQgPSAwOyBkIDwgY2EuZGljdGl0ZW0ubGVuZ3RoOyBkKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhLmRpY3RpdGVtW2RdLmxhYmVsID0gY2EuZGljdGl0ZW1bZF0uQ05fU19OQU1FO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2EuZGljdGl0ZW1bZF0udmFsdWUgPSBjYS5kaWN0aXRlbVtkXS5DTl9TX05BTUU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5kaWN0aXRlbVtkXS5hdHRyID0gY2EuTmFtZTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChjYS5kaWN0aXRlbVtkXS5DTl9DX0lTX0RFRkFVTFQgPT0gJzEnKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5WYWx1ZSA9IGNhLmRpY3RpdGVtW2RdLkNOX1NfTkFNRTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGNhLlR5cGUgPT0gJ+aXpeacnycgfHwgY2EuVHlwZSA9PSAn5pe26Ze0Jykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBub3dEYXRlID0gbmV3IERhdGUoKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgZGF0ZSA9IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHllYXI6IG5vd0RhdGUuZ2V0RnVsbFllYXIoKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG1vbnRoOiBub3dEYXRlLmdldE1vbnRoKCkgKyAxLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF5OiBub3dEYXRlLmdldERhdGUoKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5WYWx1ZSA9IGRhdGUueWVhciArICctJyArIChkYXRlLm1vbnRoID49IDEwID8gZGF0ZS5tb250aCA6ICcwJyArIGRhdGVcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC5tb250aCkgKyAnLScgKyAoZGF0ZS5kYXkgPj0gMTAgPyBkYXRlLmRheSA6ICcwJyArIGRhdGUuZGF5KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoY2EuVHlwZSA9PSAn5byV55So5a+56LGhKOWkmuS4qiknKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIHJlbENsc0xpc3QgPSBbXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgYXR0cl9yZXNjbHMgPSBjYS5SZWxDbHMuc3BsaXQoJywnKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBpaSBpbiBhdHRyX3Jlc2Nscykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIHJlc2NscyA9IGF0dHJfcmVzY2xzW2lpXS5zcGxpdCgnfCcpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVsQ2xzTGlzdC5wdXNoKHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ6IHJlc2Nsc1swXSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0bmFtZTogcmVzY2xzWzFdXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2EuUmVsQ2xzTGlzdCA9IHJlbENsc0xpc3Q7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2EuVmFsdWUgPSAn6K+3Jztcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoY2EuVHlwZSA9PSAn55yB5biC5Yy6Jylcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5WYWx1ZSA9ICfor7fpgInmi6knO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoY2EuVHlwZSA9PSAn5biD5bCU5YC8Jylcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5WYWx1ZSA9IGZhbHNlO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGF0dHIucHVzaChjYSk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdG5ld2F0dHJsaXN0LnB1c2goe1xuXHRcdFx0XHRcdFx0XHRcdEJrQ29sb3I6IGNsc2F0dHIuQmtDb2xvcixcblx0XHRcdFx0XHRcdFx0XHRIYXNBY2U6IGNsc2F0dHIuSGFzQWNlLFxuXHRcdFx0XHRcdFx0XHRcdEltZ0ZvbnRTdHlsZTogY2xzYXR0ci5JbWdGb250U3R5bGUsXG5cdFx0XHRcdFx0XHRcdFx0TmFtZTogY2xzYXR0ci5OYW1lLFxuXHRcdFx0XHRcdFx0XHRcdE9yZGVyOiBjbHNhdHRyLk9yZGVyLFxuXHRcdFx0XHRcdFx0XHRcdE9wZW46IG9wZW4sXG5cdFx0XHRcdFx0XHRcdFx0QXR0cjogYXR0cixcblx0XHRcdFx0XHRcdFx0XHRjb250cm9sX3N0eWxlOiB0aGlzLiRkYXRhLnN1YkNsYXNzR3JpZFN0eWxlLlN0eWxlRGVmLmNvbnRyb2xfc3R5bGUsXG5cdFx0XHRcdFx0XHRcdFx0dGl0bGVfcF93ZGl0aDogdGhpcy4kZGF0YS5zdWJDbGFzc0dyaWRTdHlsZS5TdHlsZURlZi50aXRsZV9wX3dkaXRoLFxuXHRcdFx0XHRcdFx0XHRcdEZvbnQ6IHRoaXMuJGRhdGEuc3ViQ2xhc3NHcmlkU3R5bGUuU3R5bGVEZWYuRm9udCA/IHRoaXMuJGRhdGEuc3ViQ2xhc3NHcmlkU3R5bGVcblx0XHRcdFx0XHRcdFx0XHRcdC5TdHlsZURlZi5Gb250IDoge30sXG5cdFx0XHRcdFx0XHRcdFx0QmtfQ29sb3I6IHRoaXMuJGRhdGEuc3ViQ2xhc3NHcmlkU3R5bGUuU3R5bGVEZWYuQmtfQ29sb3IgPyB0aGlzLiRkYXRhXG5cdFx0XHRcdFx0XHRcdFx0XHQuc3ViQ2xhc3NHcmlkU3R5bGUuU3R5bGVEZWYuQmtfQ29sb3IgOiAnI0ZGRkZGRicsXG5cdFx0XHRcdFx0XHRcdFx0VGV4dF9Db2xvcjogdGhpcy4kZGF0YS5zdWJDbGFzc0dyaWRTdHlsZS5TdHlsZURlZi5UZXh0X0NvbG9yID8gdGhpcy4kZGF0YVxuXHRcdFx0XHRcdFx0XHRcdFx0LnN1YkNsYXNzR3JpZFN0eWxlLlN0eWxlRGVmLlRleHRfQ29sb3IgOiAnIzAwMDAwMCdcblx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKG5ld2F0dHJsaXN0Lmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHR0aGlzLiRkYXRhLnN1YkNsYXNzQXR0ckxpc3QgPSBuZXdhdHRybGlzdDtcblx0XHRcdFx0fVxuXHRcdFx0XHR2YXIgcmVxID0gW107XG5cdFx0XHRcdGlmICh0aGlzLiRkYXRhLnN1YkNsYXNzR3JpZFN0eWxlLlN0eWxlRGVmKSB7XG5cdFx0XHRcdFx0aWYgKHRoaXMuJGRhdGEuc3ViQ2xhc3NHcmlkU3R5bGUuU3R5bGVEZWYuc2hvd19zdHlsZS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0XHR2YXIgYXR0cmxpc3QgPSB0aGlzLiRkYXRhLnN1YkNsYXNzR3JpZFN0eWxlLlN0eWxlRGVmLnNob3dfc3R5bGVcblx0XHRcdFx0XHRcdC8vICRlbC5maW5kKCcuYXR0cl9maWVsZCcpLnByb3AoJ3JlYWRvbmx5JywgdHJ1ZSk7XG5cdFx0XHRcdFx0XHQvLyAkZWwuZmluZCgnLmF0dHJfZmllbGQnKS5wcm9wKCdkaXNhYmxlZCcsIHRydWUpO1xuXHRcdFx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhdHRybGlzdC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdFx0XHR2YXIgYXR0ciA9IGF0dHJsaXN0W2ldLmF0dHJzXG5cdFx0XHRcdFx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdFx0XHRcdHZhciBhciA9IGF0dHJbal07XG5cdFx0XHRcdFx0XHRcdFx0cmVxLnB1c2goe1xuXHRcdFx0XHRcdFx0XHRcdFx0YXR0cjogYXIuYXR0cixcblx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlOiBhci52YWx1ZSA/IGFyLnZhbHVlIDogJydcblx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHZhciBldmVudGxpc3QgPSB0aGlzLiRkYXRhLnN1YkNsYXNzR3JpZFN0eWxlLlN0eWxlRGVmLmV2ZW50O1xuXHRcdFx0XHRpZiAoZXZlbnRsaXN0KSB7XG5cdFx0XHRcdFx0aWYgKGV2ZW50bGlzdC5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGV2ZW50bGlzdC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdFx0XHRpZiAoZXZlbnRsaXN0W2ldLmV2ZW50X2lkID09ICdiZWZvcmVfb2snKSB7XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy4kZGF0YS5lZGl0X29rX2V2ZW50ID0gZXZlbnRsaXN0W2ldO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGV2ZW50bGlzdFtpXS5ldmVudF9pZCA9PSAnaW5pdGlhbCcpIHtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLiRkYXRhLmVkaXRfaW5pdGFsX2V2ZW50ID0gZXZlbnRsaXN0W2ldO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGV2ZW50bGlzdFtpXS5ldmVudF9pZCA9PSAnYmVmb3JlX3NlbGVjdF9jb21wb3NlJykge1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMuJGRhdGEuZWRpdF9zZWxlY3RfY29tcG9zZV9ldmVudCA9IGV2ZW50bGlzdFtpXS5zY3JpcF9pZDtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLiRkYXRhLmVkaXRfY29tcG9zZV9jbHNfaWQgPSBldmVudGxpc3RbaV0uY29tcG9zZV9jbHNfaWQ7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gY29uc29sZS5sb2cocmVxKTtcblx0XHRcdFx0aWYgKHRoaXMuJGRhdGEuZWRpdF9pbml0YWxfZXZlbnQpIHtcblx0XHRcdFx0XHR2YXIgZXZlbnRpZCA9IHRoaXMuJGRhdGEuZWRpdF9pbml0YWxfZXZlbnQuc2NyaXBfaWQ7XG5cdFx0XHRcdFx0dmFyIGluZm8gPSB7XG5cdFx0XHRcdFx0XHRldmVudGlkOiBldmVudGlkLFxuXHRcdFx0XHRcdFx0ZWR0eXBlOiBcIjBcIixcblx0XHRcdFx0XHRcdHByb2plY3RpZDogJycsXG5cdFx0XHRcdFx0XHRyY2xzaWQ6ICcnLFxuXHRcdFx0XHRcdFx0cm9iamlkOiAnJyxcblx0XHRcdFx0XHRcdHVzZXJsb2dpbjogJycsXG5cdFx0XHRcdFx0XHRjbHNpZDogdGhpcy4kZGF0YS5wYXJhbS5TdWJfQ2xzLklELFxuXHRcdFx0XHRcdFx0b2JqaWQ6IFwiXCIsXG5cdFx0XHRcdFx0XHRhdHRyOiByZXEsXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHRoaXMuc2Nhbl9pbmlfRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGluZm8pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnNvbGUubG9nKHRoaXMuJGRhdGEuc3ViQ2xhc3NHcmlkU3R5bGUpO1xuXHRcdFx0XHRjb25zb2xlLmxvZyh0aGlzLiRkYXRhLnN1YkNsYXNzQXR0ckxpc3QpO1xuXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR1bmkuc2hvd01vZGFsKHtcblx0XHRcdFx0XHR0aXRsZTogXCLmj5DnpLpcIixcblx0XHRcdFx0XHRjb250ZW50OiBcIuacquaJvuWIsOWPr+aYvuekuueahOeahOWxnuaAp1wiLFxuXHRcdFx0XHRcdHNob3dDYW5jZWw6IGZhbHNlLFxuXHRcdFx0XHRcdGNvbmZpcm1UZXh0OiBcIuWPlua2iFwiXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0aW5pX0RhdGFPYmpSdW5DdXN0b21FdmVudChpbmZvKSB7XG5cdFx0XHR2YXIgcGFyYW0gPSB7XG5cdFx0XHRcdEVkaXRTdHlsZTogdGhpcy4kZGF0YS5wYXJhbS5NYXN0ZXJfQ2xzLlZpZXdfU3R5bGUuTmFtZSxcblx0XHRcdFx0Vmlld1N0eWxlOiB0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuVmlld19TdHlsZS5OYW1lLFxuXHRcdFx0XHROb3RUcmlnZ2VyU3lzRXZlbnQ6IDAsXG5cdFx0XHRcdGVudmlyb21lbnQ6IHtcblx0XHRcdFx0XHQnZnVuY3Rpb24nOiAnMzAwMCcsIC8vIOWKn+iDveeCuee8luWPt1xuXHRcdFx0XHRcdGNsc19pZDogdGhpcy4kZGF0YS5wYXJhbS5NYXN0ZXJfQ2xzLklELCAvLyDlip/og73ngrnkuLvmlbDmja7nsbvmoIfor4Zcblx0XHRcdFx0XHQnYnV0dG9uJzogJ3RvcCcsIC8vIHRvcC9ib3R0b21cblx0XHRcdFx0XHRidXR0b25fbmFtZTogJ+aWsOWinicsXG5cdFx0XHRcdFx0bWFzdGVyOiB7XG5cdFx0XHRcdFx0XHRjbHNfaWQ6IHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5JRCwgLy8gYnV0dG9uPWJvdHRvbeaXtiBtYXN0ZXLnmoRjbHNfaWRcblx0XHRcdFx0XHRcdC8vb2JqX2lkOiAnJyAgLy8gYnV0dG9uPWJvdHRvbeaXtiBtYXN0ZXLnmoRvYmpfaWRcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHZhciBpbnB1dHBhcmFtZXRlciA9ICcnO1xuXHRcdFx0dmFyIGdsb2JhbF9hdHRyID0gJyc7XG5cblx0XHRcdHZhciBkYXRhSW5mbyA9IHtcblx0XHRcdFx0ZWR0eXBlOiBpbmZvLmVkdHlwZSxcblx0XHRcdFx0ZXZlbnRpZDogaW5mby5ldmVudGlkLFxuXHRcdFx0XHRwcm9qZWN0aWQ6IGluZm8ucHJvamVjdGlkLFxuXHRcdFx0XHRyY2xzaWQ6IGluZm8ucmNsc2lkLFxuXHRcdFx0XHRyb2JqaWQ6IGluZm8ucm9iamlkLFxuXHRcdFx0XHR1c2VybG9naW46IGluZm8udXNlcmxvZ2luLFxuXHRcdFx0XHRjbHNpZDogaW5mby5jbHNpZCxcblx0XHRcdFx0b2JqaWQ6IGluZm8ub2JqaWQsXG5cdFx0XHRcdGF0dHI6IEpTT04uc3RyaW5naWZ5KGluZm8uYXR0ciksXG5cdFx0XHRcdGV4dGluZm86IEpTT04uc3RyaW5naWZ5KHBhcmFtKSxcblx0XHRcdFx0aW5wdXRwYXJhbWV0ZXI6IGlucHV0cGFyYW1ldGVyLFxuXHRcdFx0XHRnbG9iYWxfYXR0cjogZ2xvYmFsX2F0dHJcblx0XHRcdH1cblx0XHRcdGNvbnNvbGUubG9nKGRhdGFJbmZvKTtcblx0XHRcdHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdEYXRhT2JqUnVuQ3VzdG9tRXZlbnRJbmZvJywgZGF0YUluZm8pLnRoZW4oc3VjY2VzcyA9PiB7XG5cdFx0XHRcdGNvbnNvbGUubG9nKHN1Y2Nlc3MpO1xuXHRcdFx0XHRpZiAoc3VjY2Vzcy5jb2RlID09ICcwMDAwMCcpIHtcblx0XHRcdFx0XHR2YXIgZGF0YSA9IEpTT04ucGFyc2Uoc3VjY2Vzcy5kYXRhKTtcblx0XHRcdFx0XHR2YXIgYWN0aW9ubGlzdCA9IGRhdGEuYWN0aW9uO1xuXHRcdFx0XHRcdGlmIChhY3Rpb25saXN0KSB7XG5cdFx0XHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IGFjdGlvbmxpc3QubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0XHRcdFx0dmFyIGFjdGlvbiA9IGFjdGlvbmxpc3Rbal1cblx0XHRcdFx0XHRcdFx0dmFyIGFjdGlvbl90eXBlID0gYWN0aW9uLmFjdGlvbl90eXBlO1xuXHRcdFx0XHRcdFx0XHR2YXIgdmFsdWUgPSBhY3Rpb24udmFsdWU7XG5cdFx0XHRcdFx0XHRcdGlmIChhY3Rpb25fdHlwZSA9PSAnc2V0X2RsZ19hdHRyJykge1xuXHRcdFx0XHRcdFx0XHRcdGlmICh2YWx1ZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIHZhbCA9IHZhbHVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YWwgPSBKU09OLnBhcnNlKHZhbHVlKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKHZhbCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHZhbC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBhID0gMDsgYSA8IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdC5sZW5ndGg7IGErKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGwgPSAwOyBsIDwgdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2FdLkF0dHIubGVuZ3RoOyBsKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBjYSA9IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFthXS5BdHRyW2xdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKHZhbFtpXS5hdHRyID09IGNhLk5hbWUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGNhLlR5cGUgPT0gJ+Wtl+WFuCcgfHwgY2EuVHlwZSA9PSAn5a2X5YW4LeWtl+espuS4sicgfHwgY2EuVHlwZSA9PVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCflrZflhbgt5pW05pWwJykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBkaWN0SXRlbUxpc3QgPSBbXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBkIGluIHZhbFtpXS5jaG9pY2VfbGlzdCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIHZhbCA9IHZhbFtpXS5jaG9pY2VfbGlzdFtkXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRpY3RJdGVtTGlzdC5wdXNoKHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XCJDTl9TX05BTUVcIjogdmFsLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcIk5hbWVcIjogdmFsLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcImxhYmVsXCI6IHZhbCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XCJ2YWx1ZVwiOiB2YWxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhLmRpY3RpdGVtID0gZGljdEl0ZW1MaXN0O1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGF0dHJbal0uZGljdGl0ZW0gPSB2YWxbaV0uY2hvaWNlX2xpc3Q7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gY2EudmFsdWUgPSB2YWxbaV0udmFsdWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgbGVuZ3RoID0gMDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCF0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5maWx0ZXIoZnVuY3Rpb24ocykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHZhbFtpXS5hdHRyID09IHMuYXR0clxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0pLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGxlbmd0aCA9IDE7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUucHVzaCh2YWxbaV0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChsZW5ndGggPT0gMCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICh0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZVtqXS5hdHRyID09IHZhbFtpXS5hdHRyKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlW2pdLnZhbHVlID0gdmFsW2ldLnZhbHVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRpZiAoYWN0aW9uX3R5cGUgPT0gJ29wZW5fc2VsZWN0X3VzZXJkbGcnKSB7XG5cdFx0XHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7XG5cdFx0XHRcdFx0XHRcdFx0XHR0aXRsZTogXCLplJnor68yLjJcIixcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnRlbnQ6IFwib3Blbl9zZWxlY3RfdXNlcmRsZ+i/meS4qmFjdGlvbl90eXBl6L+Y5pyq5aSE55CG77yBXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRzaG93Q2FuY2VsOiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0XHRcdGNvbmZpcm1UZXh0OiBcIuWPlua2iFwiXG5cdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHtcblx0XHRcdFx0XHRcdHRpdGxlOiBcIumUmeivrzJcIixcblx0XHRcdFx0XHRcdGNvbnRlbnQ6IHN1Y2Nlc3MubXNnLFxuXHRcdFx0XHRcdFx0c2hvd0NhbmNlbDogZmFsc2UsXG5cdFx0XHRcdFx0XHRjb25maXJtVGV4dDogXCLlj5bmtohcIlxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KS5jYXRjaChleCA9PiB7XG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKGV4KTtcblx0XHRcdFx0dW5pLnNob3dNb2RhbCh7XG5cdFx0XHRcdFx0dGl0bGU6IFwi6ZSZ6K+vMi4xXCIsXG5cdFx0XHRcdFx0Y29udGVudDogZXguZXJyTXNnLFxuXHRcdFx0XHRcdHNob3dDYW5jZWw6IGZhbHNlLFxuXHRcdFx0XHRcdGNvbmZpcm1UZXh0OiBcIuWPlua2iFwiXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0fSxcblx0XHREYXRhT2JqUnVuQ3VzdG9tRXZlbnQoaW5mbywgZGF0YV9hdHRyKSB7XG5cdFx0XHR2YXIgJHRoaXMgPSB0aGlzO1xuXHRcdFx0dmFyIGVudmlyb21lbnQgPSB7XG5cdFx0XHRcdCdmdW5jdGlvbic6ICczMDAwJywgLy8g5Yqf6IO954K557yW5Y+3XG5cdFx0XHRcdGNsc19pZDogdGhpcy4kZGF0YS5wYXJhbS5NYXN0ZXJfQ2xzLklELCAvLyDlip/og73ngrnkuLvmlbDmja7nsbvmoIfor4Zcblx0XHRcdFx0J2J1dHRvbic6ICd0b3AnLCAvLyB0b3AvYm90dG9tXG5cdFx0XHRcdGJ1dHRvbl9uYW1lOiAn5paw5aKeJyxcblx0XHRcdFx0bWFzdGVyOiB7XG5cdFx0XHRcdFx0Y2xzX2lkOiB0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuSUQsIC8vIGJ1dHRvbj1ib3R0b23ml7YgbWFzdGVy55qEY2xzX2lkXG5cdFx0XHRcdFx0Ly9vYmpfaWQ6ICcnICAvLyBidXR0b249Ym90dG9t5pe2IG1hc3RlcueahG9ial9pZFxuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0ZW52aXJvbWVudC5lZGl0X2RsZyA9IHtcblx0XHRcdFx0dHlwZTogJ3NtYWxsJywgLy/lsI/nqpflj6Ncblx0XHRcdFx0Y2xhc3NfaWQ6IHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5JRCwgLy/lvZPliY3mlbDmja7nsbtpZFxuXHRcdFx0fVxuXHRcdFx0aWYgKGRhdGFfYXR0cikge1xuXHRcdFx0XHRlbnZpcm9tZW50LmVkaXRfZGxnLmZvcm1fY29udHJvbCA9IHsgLy/miYDlsZ7nmoTooajljZXmjqfku7Zcblx0XHRcdFx0XHRuYW1lOiBkYXRhX2F0dHIuTmFtZSwgLy/lrZfmrrXlsZ7mgKdcblx0XHRcdFx0XHR0ZXh0OiBkYXRhX2F0dHIuRGlzcE5hbWUsIC8v5pi+56S65paH5pysXG5cdFx0XHRcdFx0Z3JvdXBfbmFtZTogZGF0YV9hdHRyLkdyb3VwTmFtZSwgLy/lsZ7mgKfnu4Rcblx0XHRcdFx0XHR0eXBlOiBkYXRhX2F0dHIuVHlwZSwgLy/lrZfmrrXnsbvlnotcblx0XHRcdFx0XHRyZWFkb25seTogZGF0YV9hdHRyLlJlYWRPbmx5LCAvL+aYr+WQpuWPquivu1xuXHRcdFx0XHRcdGJ1dHRvbl9pbWc6IGRhdGFfYXR0ci5idXR0b25faW1nLCAvL+W8leeUqOaMiemSrueahOWbvuagh1xuXHRcdFx0XHRcdGJ1dHRvbl90b29sdGlwOiBkYXRhX2F0dHIuYnV0dG9uX3Rvb2x0aXAgLy/lvJXnlKjmjInpkq7nmoR0b29sdGlwXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHZhciBkYXRhSW5mbyA9IHtcblx0XHRcdFx0ZWR0eXBlOiBpbmZvLmVkdHlwZSxcblx0XHRcdFx0ZXZlbnRpZDogaW5mby5ldmVudGlkLFxuXHRcdFx0XHRwcm9qZWN0aWQ6IGluZm8ucHJvamVjdGlkLnJlcGxhY2UoJ3snLCAnJykucmVwbGFjZSgnfScsICcnKSxcblx0XHRcdFx0cmNsc2lkOiBpbmZvLnJjbHNpZCxcblx0XHRcdFx0cm9iamlkOiBpbmZvLnJvYmppZCxcblx0XHRcdFx0dXNlcmxvZ2luOiBpbmZvLnVzZXJsb2dpbixcblx0XHRcdFx0Y2xzaWQ6IGluZm8uY2xzaWQsXG5cdFx0XHRcdG9iamlkOiBpbmZvLm9iamlkLFxuXHRcdFx0XHRhdHRyOiBKU09OLnN0cmluZ2lmeShpbmZvLmF0dHIpLFxuXHRcdFx0XHRleHRpbmZvOiBKU09OLnN0cmluZ2lmeShlbnZpcm9tZW50KSxcblx0XHRcdFx0aW5wdXRwYXJhbWV0ZXI6ICcnLFxuXHRcdFx0XHRnbG9iYWxfYXR0cjogSlNPTi5zdHJpbmdpZnkodGhpcy4kZGF0YS5nbG9iYWxfYXR0cilcblx0XHRcdH1cblx0XHRcdGNvbnNvbGUubG9nKGRhdGFJbmZvKTtcblx0XHRcdHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdEYXRhT2JqUnVuQ3VzdG9tRXZlbnRJbmZvJywgZGF0YUluZm8pLnRoZW4oc3VjY2VzcyA9PiB7XG5cdFx0XHRcdGNvbnNvbGUubG9nKHN1Y2Nlc3MpO1xuXHRcdFx0XHRpZiAoc3VjY2Vzcy5jb2RlID09ICcwMDAwMCcpIHtcblx0XHRcdFx0XHR2YXIgZGF0YSA9IEpTT04ucGFyc2Uoc3VjY2Vzcy5kYXRhKTtcblx0XHRcdFx0XHR2YXIgYWN0aW9ubGlzdCA9IGRhdGEuYWN0aW9uO1xuXG5cdFx0XHRcdFx0aWYgKGFjdGlvbmxpc3QpIHtcblx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKGFjdGlvbmxpc3QpO1xuXHRcdFx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhY3Rpb25saXN0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRcdHZhciBhY3Rpb24gPSBhY3Rpb25saXN0W2ldO1xuXHRcdFx0XHRcdFx0XHRpZiAoYWN0aW9uLmFjdGlvbl90eXBlID09ICdzZXRfZGxnX2F0dHInKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIHJlc3VsdCA9IGFjdGlvbi52YWx1ZTtcblx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKHJlc3VsdFtpXS5jaG9pY2VfbGlzdCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBjID0gMDsgYyA8ICR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3QubGVuZ3RoOyBjKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgYXR0ciA9ICR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbY10uQXR0cjtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IGF0dHIubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChhdHRyW2pdLk5hbWUgPT0gcmVzdWx0W2ldLmF0dHIpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGF0dHJbal0uVHlwZSA9PSAn5a2X5YW4JyB8fCBhdHRyW2pdLlR5cGUgPT0gJ+Wtl+WFuC3lrZfnrKbkuLInIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXR0cltqXS5UeXBlID09ICflrZflhbgt5pW05pWwJykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBkaWN0SXRlbUxpc3QgPSBbXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBkIGluIHJlc3VsdFtpXS5jaG9pY2VfbGlzdCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIHZhbCA9IHJlc3VsdFtpXS5jaG9pY2VfbGlzdFtkXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRpY3RJdGVtTGlzdC5wdXNoKHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XCJDTl9TX05BTUVcIjogdmFsLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcIk5hbWVcIjogdmFsLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcImxhYmVsXCI6IHZhbCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XCJ2YWx1ZVwiOiB2YWxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhdHRyW2pdLmRpY3RpdGVtID0gZGljdEl0ZW1MaXN0O1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGF0dHJbal0uZGljdGl0ZW0gPSByZXN1bHRbaV0uY2hvaWNlX2xpc3Q7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGMgPSAwOyBjIDwgJHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdC5sZW5ndGg7IGMrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgYXR0ciA9ICR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbY10uQXR0cjtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc29sZS5sb2coYXR0cltqXS5OYW1lICsgJz09JyArIHJlc3VsdFtpXS5hdHRyKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoYXR0cltqXS5OYW1lID09IHJlc3VsdFtpXS5hdHRyKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhdHRyW2pdLlZhbHVlID0gcmVzdWx0W2ldLnZhbHVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIGxlbmd0aCA9IDA7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoISR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5maWx0ZXIoZnVuY3Rpb24ocykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiByZXN1bHRbaV0uYXR0ciA9PSBzLmF0dHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fSkubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGxlbmd0aCA9IDE7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5wdXNoKHJlc3VsdFtpXSk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAobGVuZ3RoID09IDApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCAkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoJHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlW2pdLmF0dHIgPT0gcmVzdWx0W2ldLmF0dHIpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZVtqXS52YWx1ZSA9IHJlc3VsdFtpXS52YWx1ZTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoZGF0YS5hY3Rpb25baV0uYWN0aW9uX3R5cGUgPT0gJ3NldF9nbG9iYWxfYXR0cicpIHtcblx0XHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5nbG9iYWxfYXR0ciA9IGRhdGEuYWN0aW9uW2ldLnZhbHVlIHx8IFtdO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKGRhdGEucmVzdWx0KSB7XG5cdFx0XHRcdFx0XHR2YXIgcmVzdWx0ID0gZGF0YS5yZXN1bHQ7XG5cdFx0XHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdFx0XHRmb3IgKHZhciBjID0gMDsgYyA8ICR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3QubGVuZ3RoOyBjKyspIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgYXR0ciA9ICR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbY10uQXR0cjtcblx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IGF0dHIubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChhdHRyW2pdLk5hbWUgPT0gcmVzdWx0W2ldLmF0dHIpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0YXR0cltqXS5WYWx1ZSA9IHJlc3VsdFtpXS52YWx1ZTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHR2YXIgbGVuZ3RoID0gMDtcblx0XHRcdFx0XHRcdFx0aWYgKCEkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUuZmlsdGVyKGZ1bmN0aW9uKHMpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiByZXN1bHRbaV0uYXR0ciA9PSBzLmF0dHJcblx0XHRcdFx0XHRcdFx0XHR9KS5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdFx0XHRsZW5ndGggPSAxO1xuXHRcdFx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5wdXNoKHJlc3VsdFtpXSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0aWYgKGxlbmd0aCA9PSAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCAkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmICgkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmVbal0uYXR0ciA9PSByZXN1bHRbaV0uYXR0cikge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmVbal0udmFsdWUgPSByZXN1bHRbaV0udmFsdWU7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe1xuXHRcdFx0XHRcdFx0dGl0bGU6IFwi6ZSZ6K+vM1wiLFxuXHRcdFx0XHRcdFx0Y29udGVudDogc3VjY2Vzcy5tc2csXG5cdFx0XHRcdFx0XHRzaG93Q2FuY2VsOiBmYWxzZSxcblx0XHRcdFx0XHRcdGNvbmZpcm1UZXh0OiBcIuWPlua2iFwiXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pLmNhdGNoKGV4ID0+IHtcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coZXgpO1xuXHRcdFx0XHR1bmkuc2hvd01vZGFsKHtcblx0XHRcdFx0XHR0aXRsZTogXCLplJnor68zLjFcIixcblx0XHRcdFx0XHRjb250ZW50OiBleC5lcnJNc2csXG5cdFx0XHRcdFx0c2hvd0NhbmNlbDogZmFsc2UsXG5cdFx0XHRcdFx0Y29uZmlybVRleHQ6IFwi5Y+W5raIXCJcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0XHR9LFxuXHRcdE9LRGF0YU9ialJ1bkN1c3RvbUV2ZW50KCkge1xuXHRcdFx0dmFyIGVudmlyb21lbnQgPSB7XG5cdFx0XHRcdCdmdW5jdGlvbic6ICczMDAwJywgLy8g5Yqf6IO954K557yW5Y+3XG5cdFx0XHRcdGNsc19pZDogdGhpcy4kZGF0YS5wYXJhbS5NYXN0ZXJfQ2xzLklELCAvLyDlip/og73ngrnkuLvmlbDmja7nsbvmoIfor4Zcblx0XHRcdFx0J2J1dHRvbic6ICd0b3AnLCAvLyB0b3AvYm90dG9tXG5cdFx0XHRcdGJ1dHRvbl9uYW1lOiAn5paw5aKeJyxcblx0XHRcdFx0bWFzdGVyOiB7XG5cdFx0XHRcdFx0Y2xzX2lkOiB0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuSUQsIC8vIGJ1dHRvbj1ib3R0b23ml7YgbWFzdGVy55qEY2xzX2lkXG5cblx0XHRcdFx0fVxuXHRcdFx0fTtcblxuXHRcdFx0dmFyIGV2ZW50aWQgPSB0aGlzLiRkYXRhLmVkaXRfb2tfZXZlbnQuc2NyaXBfaWQ7XG5cdFx0XHR2YXIgcmVxID0gW107XG5cdFx0XHR2YXIgYXR0cmxpc3QgPSB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3Q7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJsaXN0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdHZhciBhdHRyID0gYXR0cmxpc3RbaV0uQXR0cjtcblx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0dmFyIGFyID0gYXR0cltqXTtcblx0XHRcdFx0XHRpZiAoYXIuVmFsdWUgPT0gJ+ivt+mAieaLqScgfHwgYXIuVmFsdWUgPT0gJ+KAlOKAlOivt+mAieaLqeKAlOKAlCcpIGFyLlZhbHVlID0gJyc7XG5cdFx0XHRcdFx0aWYgKGFyLlR5cGUgPT0gJ+W8leeUqOWvueixoSjlpJrkuKopJylcblx0XHRcdFx0XHRcdGlmIChhci5WYWx1ZSA9PSAn6K+3JykgYXIuVmFsdWUgPSAnJztcblx0XHRcdFx0XHRpZiAoYXIuVHlwZSA9PSAn5byV55So5Lq65ZGYJyB8fCBhci5UeXBlID09ICflvJXnlKjpobnnm64nKVxuXHRcdFx0XHRcdFx0cmVxLnB1c2goe1xuXHRcdFx0XHRcdFx0XHRhdHRyOiBhci5OYW1lLFxuXHRcdFx0XHRcdFx0XHR2YWx1ZTogYXIuVmFsSUQgPyBhci5WYWxJRCA6ICcnXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRlbHNlIGlmIChhci5UeXBlID09ICfluIPlsJTlgLwnKVxuXHRcdFx0XHRcdFx0cmVxLnB1c2goe1xuXHRcdFx0XHRcdFx0XHRhdHRyOiBhci5OYW1lLFxuXHRcdFx0XHRcdFx0XHR2YWx1ZTogYXIuVmFsdWUgPyAnMScgOiAnMCdcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdHJlcS5wdXNoKHtcblx0XHRcdFx0XHRcdFx0YXR0cjogYXIuTmFtZSxcblx0XHRcdFx0XHRcdFx0dmFsdWU6IGFyLlZhbHVlXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAodGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0aWYgKCFyZXEuZmlsdGVyKGZ1bmN0aW9uKHMpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlW2ldLmF0dHIgPT0gcy5uYW1lXG5cdFx0XHRcdFx0XHR9KS5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdGxlbmd0aCA9IDE7XG5cdFx0XHRcdFx0XHRyZXEucHVzaCh7XG5cdFx0XHRcdFx0XHRcdCdhdHRyJzogdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmVbaV0uYXR0cixcblx0XHRcdFx0XHRcdFx0J3ZhbHVlJzogdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmVbaV0udmFsdWVcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0dmFyIGluZm8gPSB7XG5cdFx0XHRcdGV2ZW50aWQ6IGV2ZW50aWQsXG5cdFx0XHRcdGVkdHlwZTogXCIwXCIsXG5cdFx0XHRcdHByb2plY3RpZDogJycsXG5cdFx0XHRcdHJjbHNpZDogJycsXG5cdFx0XHRcdHJvYmppZDogJycsXG5cdFx0XHRcdHVzZXJsb2dpbjogJycsXG5cdFx0XHRcdGNsc2lkOiB0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuSUQsXG5cdFx0XHRcdG9iamlkOiBcIlwiLFxuXHRcdFx0XHRhdHRyOiByZXEsXG5cdFx0XHR9XG5cdFx0XHR2YXIgZGF0YUluZm8gPSB7XG5cdFx0XHRcdGVkdHlwZTogaW5mby5lZHR5cGUsXG5cdFx0XHRcdGV2ZW50aWQ6IGluZm8uZXZlbnRpZCxcblx0XHRcdFx0cHJvamVjdGlkOiBpbmZvLnByb2plY3RpZCxcblx0XHRcdFx0cmNsc2lkOiBpbmZvLnJjbHNpZCxcblx0XHRcdFx0cm9iamlkOiBpbmZvLnJvYmppZCxcblx0XHRcdFx0dXNlcmxvZ2luOiBpbmZvLnVzZXJsb2dpbixcblx0XHRcdFx0Y2xzaWQ6IGluZm8uY2xzaWQsXG5cdFx0XHRcdG9iamlkOiBpbmZvLm9iamlkLFxuXHRcdFx0XHRhdHRyOiBKU09OLnN0cmluZ2lmeShpbmZvLmF0dHIpLFxuXHRcdFx0XHRleHRpbmZvOiBKU09OLnN0cmluZ2lmeShlbnZpcm9tZW50KSxcblx0XHRcdFx0Z2xvYmFsX2F0dHI6IEpTT04uc3RyaW5naWZ5KHRoaXMuJGRhdGEuZ2xvYmFsX2F0dHIpXG5cdFx0XHR9XG5cdFx0XHRjb25zb2xlLmxvZyhkYXRhSW5mbyk7XG5cdFx0XHR0aGlzLiRzdG9yZS5kaXNwYXRjaCgnRGF0YU9ialJ1bkN1c3RvbUV2ZW50SW5mbycsIGRhdGFJbmZvKS50aGVuKHN1Y2Nlc3MgPT4ge1xuXHRcdFx0XHRjb25zb2xlLmxvZyhzdWNjZXNzKTtcblx0XHRcdFx0aWYgKHN1Y2Nlc3MuY29kZSA9PSAnMDAwMDAnKSB7XG5cdFx0XHRcdFx0dmFyIGRhdGEgPSBKU09OLnBhcnNlKHN1Y2Nlc3MuZGF0YSk7XG5cdFx0XHRcdFx0dmFyIHJlc3VsdCA9IGRhdGEucmVzdWx0O1xuXHRcdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdWx0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHQvLyBzZWxmLmNsYXNzX2F0dHJfZWxlLmZpbmQoJy5hdHRyX2ZpZWxkW2RhdGEtZmllbGQ9XCInICsgcmVzdWx0W2ldLmF0dHIgKyAnXCJdJykudmFsKHJlc3VsdFtpXS52YWx1ZSkuZGF0YSgndmFsJywgcmVzdWx0W2ldLnZhbHVlKTtcblx0XHRcdFx0XHRcdHZhciBsZW5ndGggPSAwO1xuXHRcdFx0XHRcdFx0aWYgKCF0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5maWx0ZXIoZnVuY3Rpb24ocykge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiByZXN1bHRbaV0uYXR0ciA9PSBzLmF0dHJcblx0XHRcdFx0XHRcdFx0fSkubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRcdGxlbmd0aCA9IDE7XG5cdFx0XHRcdFx0XHRcdHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLnB1c2gocmVzdWx0W2ldKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmIChsZW5ndGggPT0gMCkge1xuXHRcdFx0XHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlW2pdLmF0dHIgPT0gcmVzdWx0W2ldLmF0dHIpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlW2pdLnZhbHVlID0gcmVzdWx0W2ldLnZhbHVlO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHRoaXMuYWRkKCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7XG5cdFx0XHRcdFx0XHR0aXRsZTogXCLplJnor680XCIsXG5cdFx0XHRcdFx0XHRjb250ZW50OiBzdWNjZXNzLm1zZyxcblx0XHRcdFx0XHRcdHNob3dDYW5jZWw6IGZhbHNlLFxuXHRcdFx0XHRcdFx0Y29uZmlybVRleHQ6IFwi5Y+W5raIXCJcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSkuY2F0Y2goZXggPT4ge1xuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhleCk7XG5cdFx0XHRcdHVuaS5zaG93TW9kYWwoe1xuXHRcdFx0XHRcdHRpdGxlOiBcIumUmeivrzQuMVwiLFxuXHRcdFx0XHRcdGNvbnRlbnQ6IGV4LmVyck1zZyxcblx0XHRcdFx0XHRzaG93Q2FuY2VsOiBmYWxzZSxcblx0XHRcdFx0XHRjb25maXJtVGV4dDogXCLlj5bmtohcIlxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdH0sXG5cdFx0RGF0YU9ialJ1bkN1c3RvbUV2ZW50X1JldHVybihldmVudGlkLCBkYXRhX2F0dHIsIGJ1dHRvbl9jYWxsYmFjaywgaW5kZXgsIGlpbmRleCkge1xuXHRcdFx0dmFyIGVudmlyb21lbnQgPSB7XG5cdFx0XHRcdCdmdW5jdGlvbic6ICczMDAwJywgLy8g5Yqf6IO954K557yW5Y+3XG5cdFx0XHRcdGNsc19pZDogdGhpcy4kZGF0YS5wYXJhbS5NYXN0ZXJfQ2xzLklELCAvLyDlip/og73ngrnkuLvmlbDmja7nsbvmoIfor4Zcblx0XHRcdFx0J2J1dHRvbic6ICd0b3AnLCAvLyB0b3AvYm90dG9tXG5cdFx0XHRcdGJ1dHRvbl9uYW1lOiAn5paw5aKeJyxcblx0XHRcdFx0bWFzdGVyOiB7XG5cdFx0XHRcdFx0Y2xzX2lkOiB0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuSUQsIC8vIGJ1dHRvbj1ib3R0b23ml7YgbWFzdGVy55qEY2xzX2lkXG5cdFx0XHRcdFx0Ly9vYmpfaWQ6ICcnICAvLyBidXR0b249Ym90dG9t5pe2IG1hc3RlcueahG9ial9pZFxuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0dmFyIHJlcSA9IFtdO1xuXHRcdFx0dmFyIGF0dHJsaXN0ID0gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0O1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhdHRybGlzdC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHR2YXIgYXR0ciA9IGF0dHJsaXN0W2ldLkF0dHI7XG5cdFx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdHZhciBhciA9IGF0dHJbal07XG5cdFx0XHRcdFx0aWYgKGFyLlR5cGUgPT0gJ+W8leeUqOWvueixoSjlpJrkuKopJylcblx0XHRcdFx0XHRcdGlmIChhci5WYWx1ZSA9PSAn6K+3JykgYXIuVmFsdWUgPSAnJztcblx0XHRcdFx0XHRpZiAoYXIuVHlwZSA9PSAn5byV55So5Lq65ZGYJyB8fCBhci5UeXBlID09ICflvJXnlKjpobnnm64nKVxuXHRcdFx0XHRcdFx0cmVxLnB1c2goe1xuXHRcdFx0XHRcdFx0XHRhdHRyOiBhci5OYW1lLFxuXHRcdFx0XHRcdFx0XHR2YWx1ZTogYXIuVmFsSUQgPyBhci5WYWxJRCA6ICcnXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRlbHNlIGlmIChhci5UeXBlID09ICfluIPlsJTlgLwnKVxuXHRcdFx0XHRcdFx0cmVxLnB1c2goe1xuXHRcdFx0XHRcdFx0XHRhdHRyOiBhci5OYW1lLFxuXHRcdFx0XHRcdFx0XHR2YWx1ZTogYXIuVmFsdWUgPyAnMScgOiAnMCdcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdHJlcS5wdXNoKHtcblx0XHRcdFx0XHRcdFx0YXR0cjogYXIuTmFtZSxcblx0XHRcdFx0XHRcdFx0dmFsdWU6IGFyLlZhbHVlXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdGlmICghcmVxLmZpbHRlcihmdW5jdGlvbihzKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZVtpXS5hdHRyID09IHMubmFtZVxuXHRcdFx0XHRcdFx0fSkubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRsZW5ndGggPSAxO1xuXHRcdFx0XHRcdFx0cmVxLnB1c2goe1xuXHRcdFx0XHRcdFx0XHQnYXR0cic6IHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlW2ldLmF0dHIsXG5cdFx0XHRcdFx0XHRcdCd2YWx1ZSc6IHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlW2ldLnZhbHVlXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHZhciBleHRpbmZvID0gZW52aXJvbWVudDtcblx0XHRcdGV4dGluZm8uZWRpdF9kbGcgPSB7XG5cdFx0XHRcdHR5cGU6ICdzbWFsbCcsIC8v5bCP56qX5Y+jXG5cdFx0XHRcdGNsYXNzX2lkOiB0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuSUQsIC8v5b2T5YmN5pWw5o2u57G7aWRcblx0XHRcdH1cblx0XHRcdGlmIChkYXRhX2F0dHIpIHtcblx0XHRcdFx0ZXh0aW5mby5lZGl0X2RsZy5mb3JtX2NvbnRyb2wgPSB7IC8v5omA5bGe55qE6KGo5Y2V5o6n5Lu2XG5cdFx0XHRcdFx0bmFtZTogZGF0YV9hdHRyLk5hbWUsIC8v5a2X5q615bGe5oCnXG5cdFx0XHRcdFx0dGV4dDogZGF0YV9hdHRyLkRpc3BOYW1lLCAvL+aYvuekuuaWh+acrFxuXHRcdFx0XHRcdGdyb3VwX25hbWU6IGRhdGFfYXR0ci5Hcm91cE5hbWUsIC8v5bGe5oCn57uEXG5cdFx0XHRcdFx0dHlwZTogZGF0YV9hdHRyLlR5cGUsIC8v5a2X5q6157G75Z6LXG5cdFx0XHRcdFx0cmVhZG9ubHk6IGRhdGFfYXR0ci5SZWFkT25seSwgLy/mmK/lkKblj6ror7tcblx0XHRcdFx0XHRidXR0b25faW1nOiBkYXRhX2F0dHIuYnV0dG9uX2ltZywgLy/lvJXnlKjmjInpkq7nmoTlm77moIdcblx0XHRcdFx0XHRidXR0b25fdG9vbHRpcDogZGF0YV9hdHRyLmJ1dHRvbl90b29sdGlwIC8v5byV55So5oyJ6ZKu55qEdG9vbHRpcFxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHR2YXIgZGF0YUluZm8gPSB7XG5cdFx0XHRcdGVkdHlwZTogXCIwXCIsXG5cdFx0XHRcdGV2ZW50aWQ6IGV2ZW50aWQsXG5cdFx0XHRcdHByb2plY3RpZDogJycsXG5cdFx0XHRcdHJjbHNpZDogJycsXG5cdFx0XHRcdHJvYmppZDogJycsXG5cdFx0XHRcdHVzZXJsb2dpbjogJycsXG5cdFx0XHRcdGNsc2lkOiB0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuSUQsXG5cdFx0XHRcdG9iamlkOiAnJyxcblx0XHRcdFx0YXR0cjogSlNPTi5zdHJpbmdpZnkocmVxKSxcblx0XHRcdFx0ZXh0aW5mbzogSlNPTi5zdHJpbmdpZnkoZXh0aW5mbyksXG5cdFx0XHRcdGdsb2JhbF9hdHRyOiBKU09OLnN0cmluZ2lmeSh0aGlzLiRkYXRhLmdsb2JhbF9hdHRyKVxuXHRcdFx0fVxuXHRcdFx0Y29uc29sZS5sb2coZGF0YUluZm8pO1xuXHRcdFx0dGhpcy4kc3RvcmUuZGlzcGF0Y2goJ0RhdGFPYmpSdW5DdXN0b21FdmVudEluZm8nLCBkYXRhSW5mbykudGhlbihzdWNjZXNzID0+IHtcblx0XHRcdFx0Y29uc29sZS5sb2coc3VjY2Vzcyk7XG5cdFx0XHRcdGlmIChzdWNjZXNzLmNvZGUgPT0gJzAwMDAwJykge1xuXHRcdFx0XHRcdHZhciBkYXRhID0gSlNPTi5wYXJzZShzdWNjZXNzLmRhdGEpO1xuXHRcdFx0XHRcdGlmIChkYXRhICE9IFwiXCIpIHtcblxuXHRcdFx0XHRcdFx0dmFyIGFjdGlvbnMgPSBkYXRhLmFjdGlvbjtcblx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKGFjdGlvbnMpO1xuXHRcdFx0XHRcdFx0aWYgKGFjdGlvbnMpIHtcblx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIGFjdGlvbiA9IGFjdGlvbnNbaV07XG5cdFx0XHRcdFx0XHRcdFx0dmFyIHZhbCA9IGFjdGlvbi52YWx1ZTtcblx0XHRcdFx0XHRcdFx0XHR2YXIgZW52aXJvbWVudCA9IEpTT04uc3RyaW5naWZ5KGVudmlyb21lbnQpO1xuXG5cdFx0XHRcdFx0XHRcdFx0aWYgKGFjdGlvbi5hY3Rpb25fdHlwZSA9PSAnb3Blbl9wYW5lbCcpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBkID0gZGlhbG9nKHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGl0bGU6ICc8aSBjbGFzcz1cImFjZS1pY29uIGZhIGZhLWluZm8tY2lyY2xlXCI+PC9pPiAnICsgJ+aPkOekuicsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnRlbnQ6IGFjdGlvbi5hY3Rpb25fdHlwZSArICfmraRhY3Rpb27lsJrmnKrlpITnkIbvvIEnXG5cdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHRcdGQuc2hvdygpO1xuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoYWN0aW9uLmFjdGlvbl90eXBlID09ICdvcGVuX3NlbGVjdF91c2VyZGxnJykge1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIHN0eWxlID0gdmFsLnN0eWxlO1xuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gc3R5bGUgPT0gJ3VzZXInID8gJ+mAieaLqeS6uuWRmCcgOiBzdHlsZSA9PSAnZGVwYXJ0bWVudCcgPyAn6YCJ5oup6YOo6ZeoJyA6IHN0eWxlID09ICdyb2xlJyA/ICfpgInmi6nop5LoibInIDogJydcblx0XHRcdFx0XHRcdFx0XHRcdHZhciAkdGhpcyA9IHRoaXM7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgcGFyYW0gPSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGluZGV4OiBpbmRleCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWluZGV4OiBpaW5kZXgsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGJ1dHRvbl9jYWxsYmFjazogYnV0dG9uX2NhbGxiYWNrLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXE6IHJlcSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF0YV9hdHRyOiBkYXRhX2F0dHJcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdHVuaS5uYXZpZ2F0ZVRvKHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dXJsOiAnLi4vc2VscHNuL2luZGV4P211bGl0PWZhbHNlJnBhcmFtPScgKyBKU09OLnN0cmluZ2lmeShcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRwYXJhbSksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGV2ZW50czoge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdEFkZFBlcihkYXRhLCBwYXJhbSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2cocGFyYW0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc29sZS5sb2coZGF0YSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgY2FsbGJhY2tfZXZlbnRpZCA9IHBhcmFtLmJ1dHRvbl9jYWxsYmFjay50cmltKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgaW5mbyA9IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZXZlbnRpZDogY2FsbGJhY2tfZXZlbnRpZCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZWR0eXBlOiBcIjBcIixcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cHJvamVjdGlkOiAnJyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmNsc2lkOiAnJyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cm9iamlkOiAnJyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dXNlcmxvZ2luOiAnJyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xzaWQ6ICR0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuSUQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9iamlkOiBcIlwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhdHRyOiBwYXJhbS5yZXEsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlucHV0cGFyYW1ldGVyOiBkYXRhXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy5EYXRhT2JqUnVuQ3VzdG9tRXZlbnQoaW5mbywgcGFyYW0uZGF0YV9hdHRyKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoYWN0aW9uLmFjdGlvbl90eXBlID09ICdvcGVuX2RhdGFfcXVlcnlfZGxnJykge1xuXG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmIChhY3Rpb24uYWN0aW9uX3R5cGUgPT0gJ29wZW5fY29tbW9uX2RsZycpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciB2YWx1ZSA9IGFjdGlvbi52YWx1ZTtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBkID0gZGlhbG9nKHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGl0bGU6ICc8aSBjbGFzcz1cImFjZS1pY29uIGZhIGZhLWluZm8tY2lyY2xlXCI+PC9pPiAnICsgJ+aPkOekuicsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnRlbnQ6IGFjdGlvbi5hY3Rpb25fdHlwZSArICfmraRhY3Rpb27lsJrmnKrlpITnkIbvvIEnXG5cdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHRcdGQuc2hvdygpO1xuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoYWN0aW9uLmFjdGlvbl90eXBlID09ICdvcGVuX3Byb2plY3RfcXVlcnlfZGxnJykge1xuXHRcdFx0XHRcdFx0XHRcdFx0Ly9jb25zb2xlLmxvZyhhY3Rpb24udmFsdWUuc2VsZWN0X3JhbmdlKTtcblx0XHRcdFx0XHRcdFx0XHRcdC8vY29uc29sZS5sb2coYWN0aW9uLnZhbHVlLm11bGl0X3NlbGVjdCk7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgcHJpUmVsID0gJy0xJztcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChhY3Rpb24udmFsdWUuc2VsZWN0X3JhbmdlID09ICflhajpg6jnm7jlhbMnKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRwcmlSZWwgPSAnMCc7XG5cdFx0XHRcdFx0XHRcdFx0XHRlbHNlIGlmIChhY3Rpb24udmFsdWUuc2VsZWN0X3JhbmdlID09ICfmiJHotJ/otKPnmoTpobnnm64nKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRwcmlSZWwgPSAnMSc7XG5cdFx0XHRcdFx0XHRcdFx0XHRlbHNlIGlmIChhY3Rpb24udmFsdWUuc2VsZWN0X3JhbmdlID09ICfmiJHliJvlu7rnmoQnKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRwcmlSZWwgPSAnMic7XG5cdFx0XHRcdFx0XHRcdFx0XHRlbHNlIGlmIChhY3Rpb24udmFsdWUuc2VsZWN0X3JhbmdlID09ICfmiJHlj4LkuI7nmoQnIHx8IGFjdGlvbi52YWx1ZVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQuc2VsZWN0X3JhbmdlID09ICfmiJHlj4LliqDnmoQnKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRwcmlSZWwgPSAnMyc7XG5cdFx0XHRcdFx0XHRcdFx0XHRlbHNlIGlmIChhY3Rpb24udmFsdWUuc2VsZWN0X3JhbmdlID09ICfmiJHlhbPms6jnmoQnKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRwcmlSZWwgPSAnNCc7XG5cdFx0XHRcdFx0XHRcdFx0XHRlbHNlIGlmIChhY3Rpb24udmFsdWUuc2VsZWN0X3JhbmdlID09ICfmiJHkuIvlsZ7nmoTpobnnm64nKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRwcmlSZWwgPSAnNSc7XG5cblx0XHRcdFx0XHRcdFx0XHRcdHZhciAkdGhpcyA9IHRoaXM7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgcGFyYW1fID0ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpbmRleDogaW5kZXgsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlpbmRleDogaWluZGV4LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRidXR0b25fY2FsbGJhY2s6IGJ1dHRvbl9jYWxsYmFjayxcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmVxOiByZXFcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdHVuaS5uYXZpZ2F0ZVRvKHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dXJsOiAnLi4vc2VsUHJqL2luZGV4P3JlbGF0aW9uPScgKyBwcmlSZWwgKyAnJnBhcmFtPScgKyBKU09OXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0LnN0cmluZ2lmeShwYXJhbV8pLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRldmVudHM6IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRBZGRQZXIoZGF0YSwgcGFyYW0pIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbcGFyYW0uaW5kZXhdLkF0dHJbcGFyYW1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0LmlpbmRleF0uVmFsdWUgPSBkYXRhWzBdLk5hbWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W3BhcmFtLmluZGV4XS5BdHRyW3BhcmFtXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0LmlpbmRleF0uVmFsSUQgPSBkYXRhWzBdLklEICsgJzsnICsgZGF0YVswXVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQuTmFtZTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBjYWxsYmFja19ldmVudGlkID0gcGFyYW0uYnV0dG9uX2NhbGxiYWNrLnRyaW0oKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChjYWxsYmFja19ldmVudGlkKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBpbmZvID0ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGV2ZW50aWQ6IGNhbGxiYWNrX2V2ZW50aWQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZWR0eXBlOiBcIjJcIixcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRwcm9qZWN0aWQ6IGRhdGFbMF0uSUQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmNsc2lkOiBcIlwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJvYmppZDogXCJcIixcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR1c2VybG9naW46IFwiXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xzaWQ6ICR0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuSUQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0b2JqaWQ6IFwiXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXR0cjogcGFyYW0ucmVxLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMuRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGluZm8pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBkID0gZGlhbG9nKHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGl0bGU6ICc8aSBjbGFzcz1cImFjZS1pY29uIGZhIGZhLWluZm8tY2lyY2xlXCI+PC9pPiAnICsgJ+aPkOekuicsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnRlbnQ6IGFjdGlvbi5hY3Rpb25fdHlwZSArICfmraRhY3Rpb27lsJrmnKrlpITnkIbvvIEnXG5cdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHRcdGQuc2hvdygpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHtcblx0XHRcdFx0XHRcdFx0dGl0bGU6IFwi5o+Q56S6NS4yXCIsXG5cdFx0XHRcdFx0XHRcdGNvbnRlbnQ6ICfosIPnlKggYmVmb3JlX2NsaWNrX2J1dHRvbiDohJrmnKzov5Tlm57nqbrvvIxldmVudF9pZCcgKyBldmVudGlkLFxuXHRcdFx0XHRcdFx0XHRzaG93Q2FuY2VsOiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0Y29uZmlybVRleHQ6IFwi5Y+W5raIXCJcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHtcblx0XHRcdFx0XHRcdHRpdGxlOiBcIumUmeivrzVcIixcblx0XHRcdFx0XHRcdGNvbnRlbnQ6IHN1Y2Nlc3MubXNnLFxuXHRcdFx0XHRcdFx0c2hvd0NhbmNlbDogZmFsc2UsXG5cdFx0XHRcdFx0XHRjb25maXJtVGV4dDogXCLlj5bmtohcIlxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KS5jYXRjaChleCA9PiB7XG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKGV4KTtcblx0XHRcdFx0dW5pLnNob3dNb2RhbCh7XG5cdFx0XHRcdFx0dGl0bGU6IFwi5o+Q56S6NS4xXCIsXG5cdFx0XHRcdFx0Y29udGVudDogZXguZXJyTXNnLFxuXHRcdFx0XHRcdHNob3dDYW5jZWw6IGZhbHNlLFxuXHRcdFx0XHRcdGNvbmZpcm1UZXh0OiBcIuWPlua2iFwiXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0fSxcblx0XHRzY2FuX2luaV9EYXRhT2JqUnVuQ3VzdG9tRXZlbnQoaW5mbykge1xuXHRcdFx0dmFyIHBhcmFtID0ge1xuXHRcdFx0XHRFZGl0U3R5bGU6IHRoaXMuJGRhdGEucGFyYW0uU3ViX0Nscy5WaWV3X1N0eWxlLk5hbWUsXG5cdFx0XHRcdFZpZXdTdHlsZTogdGhpcy4kZGF0YS5wYXJhbS5TdWJfQ2xzLlZpZXdfU3R5bGUuTmFtZSxcblx0XHRcdFx0Tm90VHJpZ2dlclN5c0V2ZW50OiAwLFxuXHRcdFx0XHRlbnZpcm9tZW50OiB7XG5cdFx0XHRcdFx0J2Z1bmN0aW9uJzogJzMwMDAnLCAvLyDlip/og73ngrnnvJblj7dcblx0XHRcdFx0XHRjbHNfaWQ6IHRoaXMuJGRhdGEucGFyYW0uU3ViX0Nscy5JRCwgLy8g5Yqf6IO954K55Li75pWw5o2u57G75qCH6K+GXG5cdFx0XHRcdFx0J2J1dHRvbic6ICd0b3AnLCAvLyB0b3AvYm90dG9tXG5cdFx0XHRcdFx0YnV0dG9uX25hbWU6ICfmlrDlop4nLFxuXHRcdFx0XHRcdG1hc3Rlcjoge1xuXHRcdFx0XHRcdFx0Y2xzX2lkOiB0aGlzLiRkYXRhLnBhcmFtLlN1Yl9DbHMuSUQsIC8vIGJ1dHRvbj1ib3R0b23ml7YgbWFzdGVy55qEY2xzX2lkXG5cdFx0XHRcdFx0XHQvL29ial9pZDogJycgIC8vIGJ1dHRvbj1ib3R0b23ml7YgbWFzdGVy55qEb2JqX2lkXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHR2YXIgaW5wdXRwYXJhbWV0ZXIgPSAnJztcblx0XHRcdHZhciBnbG9iYWxfYXR0ciA9ICcnO1xuXG5cdFx0XHR2YXIgZGF0YUluZm8gPSB7XG5cdFx0XHRcdGVkdHlwZTogaW5mby5lZHR5cGUsXG5cdFx0XHRcdGV2ZW50aWQ6IGluZm8uZXZlbnRpZCxcblx0XHRcdFx0cHJvamVjdGlkOiBpbmZvLnByb2plY3RpZCxcblx0XHRcdFx0cmNsc2lkOiBpbmZvLnJjbHNpZCxcblx0XHRcdFx0cm9iamlkOiBpbmZvLnJvYmppZCxcblx0XHRcdFx0dXNlcmxvZ2luOiBpbmZvLnVzZXJsb2dpbixcblx0XHRcdFx0Y2xzaWQ6IGluZm8uY2xzaWQsXG5cdFx0XHRcdG9iamlkOiBpbmZvLm9iamlkLFxuXHRcdFx0XHRhdHRyOiBKU09OLnN0cmluZ2lmeShpbmZvLmF0dHIpLFxuXHRcdFx0XHRleHRpbmZvOiBKU09OLnN0cmluZ2lmeShwYXJhbSksXG5cdFx0XHRcdGlucHV0cGFyYW1ldGVyOiBpbnB1dHBhcmFtZXRlcixcblx0XHRcdFx0Z2xvYmFsX2F0dHI6IGdsb2JhbF9hdHRyXG5cdFx0XHR9XG5cdFx0XHRjb25zb2xlLmxvZyhkYXRhSW5mbyk7XG5cdFx0XHR0aGlzLiRzdG9yZS5kaXNwYXRjaCgnRGF0YU9ialJ1bkN1c3RvbUV2ZW50SW5mbycsIGRhdGFJbmZvKS50aGVuKHN1Y2Nlc3MgPT4ge1xuXHRcdFx0XHRjb25zb2xlLmxvZyhzdWNjZXNzKTtcblx0XHRcdFx0aWYgKHN1Y2Nlc3MuY29kZSA9PSAnMDAwMDAnKSB7XG5cdFx0XHRcdFx0dmFyIGRhdGEgPSBKU09OLnBhcnNlKHN1Y2Nlc3MuZGF0YSk7XG5cdFx0XHRcdFx0dmFyIGFjdGlvbmxpc3QgPSBkYXRhLmFjdGlvbjtcblx0XHRcdFx0XHRpZiAoYWN0aW9ubGlzdCkge1xuXHRcdFx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBhY3Rpb25saXN0Lmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0XHRcdHZhciBhY3Rpb24gPSBhY3Rpb25saXN0W2pdXG5cdFx0XHRcdFx0XHRcdHZhciBhY3Rpb25fdHlwZSA9IGFjdGlvbi5hY3Rpb25fdHlwZTtcblx0XHRcdFx0XHRcdFx0dmFyIHZhbHVlID0gYWN0aW9uLnZhbHVlO1xuXHRcdFx0XHRcdFx0XHRpZiAoYWN0aW9uX3R5cGUgPT0gJ3NldF9kbGdfYXR0cicpIHtcblx0XHRcdFx0XHRcdFx0XHRpZiAodmFsdWUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciB2YWwgPSB2YWx1ZTtcblx0XHRcdFx0XHRcdFx0XHRcdGlmICh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsID0gSlNPTi5wYXJzZSh2YWx1ZSk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zb2xlLmxvZyh2YWwpO1xuXHRcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCB2YWwubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgYSA9IDA7IGEgPCB0aGlzLiRkYXRhLnN1YkNsYXNzQXR0ckxpc3QubGVuZ3RoOyBhKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBsID0gMDsgbCA8IHRoaXMuJGRhdGEuc3ViQ2xhc3NBdHRyTGlzdFthXS5BdHRyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQubGVuZ3RoOyBsKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBjYSA9IHRoaXMuJGRhdGEuc3ViQ2xhc3NBdHRyTGlzdFthXS5BdHRyW2xdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKHZhbFtpXS5hdHRyID09IGNhLk5hbWUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGNhLlR5cGUgPT0gJ+Wtl+WFuCcgfHwgY2EuVHlwZSA9PSAn5a2X5YW4LeWtl+espuS4sicgfHwgY2EuVHlwZSA9PVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCflrZflhbgt5pW05pWwJykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBkaWN0SXRlbUxpc3QgPSBbXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBkIGluIHZhbFtpXS5jaG9pY2VfbGlzdCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIHZhbCA9IHZhbFtpXS5jaG9pY2VfbGlzdFtkXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRpY3RJdGVtTGlzdC5wdXNoKHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XCJDTl9TX05BTUVcIjogdmFsLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcIk5hbWVcIjogdmFsLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcImxhYmVsXCI6IHZhbCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XCJ2YWx1ZVwiOiB2YWxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhLmRpY3RpdGVtID0gZGljdEl0ZW1MaXN0O1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGF0dHJbal0uZGljdGl0ZW0gPSB2YWxbaV0uY2hvaWNlX2xpc3Q7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gY2EudmFsdWUgPSB2YWxbaV0udmFsdWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgbGVuZ3RoID0gMDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCF0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5maWx0ZXIoZnVuY3Rpb24ocykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHZhbFtpXS5hdHRyID09IHMuYXR0clxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0pLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGxlbmd0aCA9IDE7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUucHVzaCh2YWxbaV0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChsZW5ndGggPT0gMCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICh0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZVtqXS5hdHRyID09IHZhbFtpXS5hdHRyKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlW2pdLnZhbHVlID0gdmFsW2ldLnZhbHVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRpZiAoYWN0aW9uX3R5cGUgPT0gJ29wZW5fc2VsZWN0X3VzZXJkbGcnKSB7XG5cdFx0XHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7XG5cdFx0XHRcdFx0XHRcdFx0XHR0aXRsZTogXCLplJnor682LjJcIixcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnRlbnQ6IFwib3Blbl9zZWxlY3RfdXNlcmRsZ+i/meS4qmFjdGlvbl90eXBl6L+Y5pyq5aSE55CG77yBXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRzaG93Q2FuY2VsOiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0XHRcdGNvbmZpcm1UZXh0OiBcIuWPlua2iFwiXG5cdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHtcblx0XHRcdFx0XHRcdHRpdGxlOiBcIumUmeivrzZcIixcblx0XHRcdFx0XHRcdGNvbnRlbnQ6IHN1Y2Nlc3MubXNnLFxuXHRcdFx0XHRcdFx0c2hvd0NhbmNlbDogZmFsc2UsXG5cdFx0XHRcdFx0XHRjb25maXJtVGV4dDogXCLlj5bmtohcIlxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KS5jYXRjaChleCA9PiB7XG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKGV4KTtcblx0XHRcdFx0dW5pLnNob3dNb2RhbCh7XG5cdFx0XHRcdFx0dGl0bGU6IFwi6ZSZ6K+vNi4xXCIsXG5cdFx0XHRcdFx0Y29udGVudDogZXguZXJyTXNnLFxuXHRcdFx0XHRcdHNob3dDYW5jZWw6IGZhbHNlLFxuXHRcdFx0XHRcdGNvbmZpcm1UZXh0OiBcIuWPlua2iFwiXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0fSxcblx0XHRzY2FuX0RhdGFPYmpSdW5DdXN0b21FdmVudChpbmZvLCBkYXRhX2F0dHIpIHtcblx0XHRcdHZhciAkdGhpcyA9IHRoaXM7XG5cdFx0XHR2YXIgZW52aXJvbWVudCA9IHt9O1xuXHRcdFx0aWYoaW5mby5lbnZpcm9tZW50KXtcblx0XHRcdFx0ZW52aXJvbWVudCA9IGluZm8uZW52aXJvbWVudDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGVudmlyb21lbnQgPSB7XG5cdFx0XHRcdFx0J2Z1bmN0aW9uJzogJzMwMDAnLCAvLyDlip/og73ngrnnvJblj7dcblx0XHRcdFx0XHRjbHNfaWQ6ICdNQk9YJywgLy90aGlzLiRkYXRhLnBhcmFtLlN1Yl9DbHMuSUQsICAgICAvLyDlip/og73ngrnku47mlbDmja7nsbvmoIfor4Zcblx0XHRcdFx0XHQnYnV0dG9uJzogJ3RvcCcsIC8vIHRvcC9ib3R0b21cblx0XHRcdFx0XHRidXR0b25fbmFtZTogJ+aWsOWinicsXG5cdFx0XHRcdFx0ZWRpdF9kbGc6IHtcblx0XHRcdFx0XHRcdHR5cGU6ICdzbWFsbCcsIC8v5bCP56qX5Y+jXG5cdFx0XHRcdFx0XHRjbGFzc19pZDogJ01CT1gnLCAvL3RoaXMuJGRhdGEucGFyYW0uU3ViX0Nscy5JRCwvL+W9k+WJjeaVsOaNruexu2lkXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0fTtcblx0XHRcdFx0XG5cdFx0XHR9XG5cdFx0XHR2YXIgZ2xvYmFsX2F0dHIgPSB0aGlzLiRkYXRhLmdsb2JhbF9hdHRyO1xuXHRcdFx0aWYgKGluZm8uZ2xvYmFsX2F0dHIpIHtcblx0XHRcdFx0Z2xvYmFsX2F0dHIgPSBpbmZvLmdsb2JhbF9hdHRyO1xuXHRcdFx0fVxuXHRcdFx0dmFyIGRhdGFJbmZvID0ge1xuXHRcdFx0XHRlZHR5cGU6IGluZm8uZWR0eXBlLFxuXHRcdFx0XHRldmVudGlkOiBpbmZvLmV2ZW50aWQsXG5cdFx0XHRcdHByb2plY3RpZDogaW5mby5wcm9qZWN0aWQucmVwbGFjZSgneycsICcnKS5yZXBsYWNlKCd9JywgJycpLFxuXHRcdFx0XHRyY2xzaWQ6IGluZm8ucmNsc2lkLFxuXHRcdFx0XHRyb2JqaWQ6IGluZm8ucm9iamlkLFxuXHRcdFx0XHR1c2VybG9naW46IGluZm8udXNlcmxvZ2luLFxuXHRcdFx0XHRjbHNpZDogaW5mby5jbHNpZCxcblx0XHRcdFx0b2JqaWQ6IGluZm8ub2JqaWQsXG5cdFx0XHRcdGF0dHI6IEpTT04uc3RyaW5naWZ5KGluZm8uYXR0ciksXG5cdFx0XHRcdGV4dGluZm86IEpTT04uc3RyaW5naWZ5KGVudmlyb21lbnQpLFxuXHRcdFx0XHRpbnB1dHBhcmFtZXRlcjogSlNPTi5zdHJpbmdpZnkoaW5mby5pbnB1dFBhcmFtdGVyKSxcblx0XHRcdFx0Z2xvYmFsX2F0dHI6IEpTT04uc3RyaW5naWZ5KGdsb2JhbF9hdHRyKVxuXHRcdFx0fVxuXHRcdFx0Y29uc29sZS5sb2coZGF0YUluZm8pO1xuXHRcdFx0dGhpcy4kc3RvcmUuZGlzcGF0Y2goJ0RhdGFPYmpSdW5DdXN0b21FdmVudEluZm8nLCBkYXRhSW5mbykudGhlbihzdWNjZXNzID0+IHtcblx0XHRcdFx0Y29uc29sZS5sb2coc3VjY2Vzcyk7XG5cdFx0XHRcdGlmIChzdWNjZXNzLmNvZGUgPT0gJzAwMDAwJykge1xuXHRcdFx0XHRcdHZhciBkYXRhID0gSlNPTi5wYXJzZShzdWNjZXNzLmRhdGEpO1xuXHRcdFx0XHRcdHZhciBhY3Rpb25saXN0ID0gZGF0YS5hY3Rpb247XG5cblx0XHRcdFx0XHRpZiAoYWN0aW9ubGlzdCkge1xuXHRcdFx0XHRcdFx0Y29uc29sZS5sb2coYWN0aW9ubGlzdCk7XG5cdFx0XHRcdFx0XHRmb3IgKHZhciBpaSA9IDA7IGlpIDwgYWN0aW9ubGlzdC5sZW5ndGg7IGlpKyspIHtcblx0XHRcdFx0XHRcdFx0dmFyIGFjdGlvbiA9IGFjdGlvbmxpc3RbaWldO1xuXHRcdFx0XHRcdFx0XHRpZiAoYWN0aW9uLmFjdGlvbl90eXBlID09ICdzZXRfZGxnX2F0dHInKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIHJlc3VsdCA9IGFjdGlvbi52YWx1ZTtcblx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKHJlc3VsdFtpXS5jaG9pY2VfbGlzdCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBzID0gMDsgcyA8ICR0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdC5sZW5ndGg7IHMrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGMgPSAwOyBjIDwgJHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0W3NdLnN1YkNsYXNzQXR0ckxpc3Rcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC5sZW5ndGg7IGMrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGF0dHIgPSAkdGhpcy4kZGF0YS5zdWJQYW5lbExpc3Rbc10uc3ViQ2xhc3NBdHRyTGlzdFtjXVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0LkF0dHI7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IGF0dHIubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGF0dHJbal0uTmFtZSA9PSByZXN1bHRbaV0uYXR0cikge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChhdHRyW2pdLlR5cGUgPT0gJ+Wtl+WFuCcgfHwgYXR0cltqXS5UeXBlID09ICflrZflhbgt5a2X56ym5LiyJyB8fFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXR0cltqXS5UeXBlID09ICflrZflhbgt5pW05pWwJykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGRpY3RJdGVtTGlzdCA9IFtdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgZCBpbiByZXN1bHRbaV0uY2hvaWNlX2xpc3QpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIHZhbCA9IHJlc3VsdFtpXS5jaG9pY2VfbGlzdFtkXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGljdEl0ZW1MaXN0LnB1c2goe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFwiQ05fU19OQU1FXCI6IHZhbCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcIk5hbWVcIjogdmFsLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFwibGFiZWxcIjogdmFsLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFwidmFsdWVcIjogdmFsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXR0cltqXS5kaWN0aXRlbSA9IGRpY3RJdGVtTGlzdDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGF0dHJbal0uZGljdGl0ZW0gPSByZXN1bHRbaV0uY2hvaWNlX2xpc3Q7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBzID0gMDsgcyA8ICR0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdC5sZW5ndGg7IHMrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBjID0gMDsgYyA8ICR0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdFtzXS5zdWJDbGFzc0F0dHJMaXN0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Lmxlbmd0aDsgYysrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGF0dHIgPSAkdGhpcy4kZGF0YS5zdWJQYW5lbExpc3Rbc10uc3ViQ2xhc3NBdHRyTGlzdFtjXS5BdHRyO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc29sZS5sb2coYXR0cltqXS5OYW1lICsgJz09JyArIHJlc3VsdFtpXS5hdHRyKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChhdHRyW2pdLk5hbWUgPT0gcmVzdWx0W2ldLmF0dHIpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXR0cltqXS5WYWx1ZSA9IHJlc3VsdFtpXS52YWx1ZTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdHZhciBsZW5ndGggPSAwO1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCEkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUuZmlsdGVyKGZ1bmN0aW9uKHMpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0W2ldLmF0dHIgPT0gcy5hdHRyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0pLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRsZW5ndGggPSAxO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUucHVzaChyZXN1bHRbaV0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKGxlbmd0aCA9PSAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgJHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZVtqXS5hdHRyID09IHJlc3VsdFtpXS5hdHRyKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmVbal0udmFsdWUgPSByZXN1bHRbaV0udmFsdWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGFjdGlvbi5hY3Rpb25fdHlwZSA9PSAnc2V0X2dsb2JhbF9hdHRyJykge1xuXHRcdFx0XHRcdFx0XHRcdCR0aGlzLiRhY3Rpb250ciA9IGFjdGlvbi52YWx1ZSB8fCBbXTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmIChhY3Rpb24uYWN0aW9uX3R5cGUgPT0gJ29wZW5fY29tbW9uX2RsZycpIHsgLy/miZPlvIDkvqfmu5HlvLnmoYZcblx0XHRcdFx0XHRcdFx0XHR2YXIgJHRoaXMgPSB0aGlzO1xuXHRcdFx0XHRcdFx0XHRcdGlmIChhY3Rpb24udmFsdWUuY29tbW9uX2RsZ19pZCA9PSAnY2hlY2tfbGlzdCcpIHtcblx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLmNoZWNrX2xpc3QgPSBhY3Rpb24udmFsdWUuY29uZmlnO1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKGFjdGlvbi52YWx1ZS5jb25maWcuYXBwZWFyX3N0eWxlID09ICdzaWRlc2xpcCcpIC8v5Yik5pat5piv5ZCm5piv5L6n5ruRXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLnBvcHVwVHlwZSA9ICdyaWdodCc7XG5cdFx0XHRcdFx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLnBvcHVwVHlwZSA9ICdjZW50ZXInXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBvcGVuIOaWueazleS8oOWFpeWPguaVsCDnrYnlkIzlnKggdW5pLXBvcHVwIOe7hOS7tuS4iue7keWumiB0eXBl5bGe5oCnXG5cdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy4kcmVmcy5wb3B1cC5vcGVuKCR0aGlzLiRkYXRhLnBvcHVwVHlwZSk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGFjdGlvbi5hY3Rpb25fdHlwZSA9PSAnYWRkX3N1YmNsc19wYW5lbCcpIHsgLy/kuLvku47mlbDmja7nsbvmiavnoIHmn6Xor6LmlbDmja5cblx0XHRcdFx0XHRcdFx0XHR2YXIgcmVzdWx0ID0gYWN0aW9uLnZhbHVlO1xuXHRcdFx0XHRcdFx0XHRcdHZhciAkdGhpcyA9IHRoaXM7XG5cdFx0XHRcdFx0XHRcdFx0bGV0IGxpc3RfMSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy4kZGF0YS5zdWJDbGFzc0F0dHJMaXN0KSk7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIHNjYW5Db2RlVmFsID0gJHRoaXMuJGRhdGEuc2NhbkNvZGVWYWw7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIHJhbmQgPSAnJztcblx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IDU7IGkrKykgeyAvL+eUn+aIkDXkvY3pmo/mnLrmlbBcblx0XHRcdFx0XHRcdFx0XHRcdHJhbmQgKz0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTApO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRpZiAoaW5mby5pbnB1dFBhcmFtdGVyWzBdLmF0dHIpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChpbmZvLmlucHV0UGFyYW10ZXJbMF0uYXR0ciA9PSBcIm1hc3RfaW5wdXRfMzAzN1wiKSAvL+WIpOaWreaYr+S4u+aVsOaNruexu+aJq+eggeafpeivouaVsOaNrlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRzY2FuQ29kZVZhbCA9IFwibWFzdF9pbnB1dF8zMDM3LVwiICsgcmFuZDtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGluZm8uYXR0clswXS5hdHRyKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoaW5mby5hdHRyWzBdLmF0dHIgPT0gXCJtYXN0X2lucHV0XzMwMzdcIikgLy/liKTmlq3mmK/kuLvmlbDmja7nsbvmiavnoIHmn6Xor6LmlbDmja5cblx0XHRcdFx0XHRcdFx0XHRcdFx0c2NhbkNvZGVWYWwgPSBcIm1hc3RfaW5wdXRfMzAzNy1cIiArIHJhbmQ7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdC5wdXNoKHtcblx0XHRcdFx0XHRcdFx0XHRcdHNjYW5Db2RlVmFsOiBzY2FuQ29kZVZhbCxcblx0XHRcdFx0XHRcdFx0XHRcdHN1YkNsYXNzQXR0cjogbGlzdF8xXG5cdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCByZXN1bHQubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIHMgPSAwOyBzIDwgJHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0Lmxlbmd0aDsgcysrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmICgkdGhpcy4kZGF0YS5zdWJQYW5lbExpc3Rbc10uc2NhbkNvZGVWYWwgPT0gc2NhbkNvZGVWYWwpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAocmVzdWx0W2ldLmF0dHIgPT0gXCJTX0lEXCIpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5zdWJQYW5lbExpc3Rbc10uT2JqSUQgPSByZXN1bHRbaV0udmFsdWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIF9zdWJDbGFzc0F0dHIgPSAkdGhpcy4kZGF0YS5zdWJQYW5lbExpc3Rbc10uc3ViQ2xhc3NBdHRyO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGMgPSAwOyBjIDwgX3N1YkNsYXNzQXR0ci5sZW5ndGg7IGMrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGF0dHIgPSBfc3ViQ2xhc3NBdHRyW2NdLkF0dHI7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IGF0dHIubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coYXR0cltqXS5OYW1lKyc9PScrcmVzdWx0W2ldLmF0dHIpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoYXR0cltqXS5OYW1lID09IHJlc3VsdFtpXS5hdHRyKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXR0cltqXS5WYWx1ZSA9IHJlc3VsdFtpXS52YWx1ZTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vICR0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdFtzXS5zdWJDbGFzc0F0dHI9bGlzdF8xO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgbGVuZ3RoID0gMDtcblx0XHRcdFx0XHRcdFx0XHRcdGlmICghJHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLmZpbHRlcihmdW5jdGlvbihzKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdFtpXS5hdHRyID09IHMuYXR0clxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9KS5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0bGVuZ3RoID0gMTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLnB1c2gocmVzdWx0W2ldKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdGlmIChsZW5ndGggPT0gMCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8ICR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICgkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmVbal0uYXR0ciA9PSByZXN1bHRbaV0uYXR0cikge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlW2pdLnZhbHVlID0gcmVzdWx0W2ldLnZhbHVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKGRhdGEucmVzdWx0KSB7XG5cdFx0XHRcdFx0XHRsZXQgbGlzdF8xID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLiRkYXRhLnN1YkNsYXNzQXR0ckxpc3QpKTtcblx0XHRcdFx0XHRcdHZhciBzY2FuQ29kZVZhbCA9ICR0aGlzLiRkYXRhLnNjYW5Db2RlVmFsO1xuXHRcdFx0XHRcdFx0aWYgKGluZm8uaW5wdXRQYXJhbXRlclswXS5hdHRyID09IFwibWFzdF9pbnB1dF8zMDM3XCIpXG5cdFx0XHRcdFx0XHRcdHNjYW5Db2RlVmFsID0gXCJtYXN0X2lucHV0XzMwMzctXCIgKyBpaTtcblx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdC5wdXNoKHtcblx0XHRcdFx0XHRcdFx0c2NhbkNvZGVWYWw6IHNjYW5Db2RlVmFsLFxuXHRcdFx0XHRcdFx0XHRzdWJDbGFzc0F0dHI6IGxpc3RfMVxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR2YXIgcmVzdWx0ID0gZGF0YS5yZXN1bHQ7XG5cdFx0XHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdFx0XHRmb3IgKHZhciBzID0gMDsgcyA8ICR0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdC5sZW5ndGg7IHMrKykge1xuXHRcdFx0XHRcdFx0XHRcdGlmICgkdGhpcy4kZGF0YS5zdWJQYW5lbExpc3Rbc10uc2NhbkNvZGVWYWwgPT0gc2NhbkNvZGVWYWwpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChyZXN1bHRbaV0uYXR0ciA9PSBcIlNfSURcIilcblx0XHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0W3NdLk9iaklEID0gcmVzdWx0W2ldLnZhbHVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIF9zdWJDbGFzc0F0dHIgPSAkdGhpcy4kZGF0YS5zdWJQYW5lbExpc3Rbc10uc3ViQ2xhc3NBdHRyO1xuXHRcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgYyA9IDA7IGMgPCBfc3ViQ2xhc3NBdHRyLmxlbmd0aDsgYysrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBhdHRyID0gX3N1YkNsYXNzQXR0cltjXS5BdHRyO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IGF0dHIubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhhdHRyW2pdLk5hbWUrJz09JytyZXN1bHRbaV0uYXR0cik7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGF0dHJbal0uTmFtZSA9PSByZXN1bHRbaV0uYXR0cikge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXR0cltqXS5WYWx1ZSA9IHJlc3VsdFtpXS52YWx1ZTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHR2YXIgbGVuZ3RoID0gMDtcblx0XHRcdFx0XHRcdFx0aWYgKCEkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUuZmlsdGVyKGZ1bmN0aW9uKHMpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiByZXN1bHRbaV0uYXR0ciA9PSBzLmF0dHJcblx0XHRcdFx0XHRcdFx0XHR9KS5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdFx0XHRsZW5ndGggPSAxO1xuXHRcdFx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5wdXNoKHJlc3VsdFtpXSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0aWYgKGxlbmd0aCA9PSAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCAkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmICgkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmVbal0uYXR0ciA9PSByZXN1bHRbaV0uYXR0cikge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmVbal0udmFsdWUgPSByZXN1bHRbaV0udmFsdWU7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOiBcIumUmeivrzdcIixjb250ZW50OiBzdWNjZXNzLm1zZyxzaG93Q2FuY2VsOiBmYWxzZSxjb25maXJtVGV4dDogXCLlj5bmtohcIn0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KS5jYXRjaChleCA9PiB7XG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKGV4KTtcblx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6IFwi6ZSZ6K+vNy4xXCIsY29udGVudDogZXguZXJyTXNnLHNob3dDYW5jZWw6IGZhbHNlLGNvbmZpcm1UZXh0OiBcIuWPlua2iFwifSk7XG5cdFx0XHR9KTtcblx0XHR9LFxuXHRcdHNjYW5fT0tEYXRhT2JqUnVuQ3VzdG9tRXZlbnQoZXZlbnRJRCkge1xuXHRcdFx0dW5pLnNob3dMb2FkaW5nKHt0aXRsZTogXCLliqDovb3kuK0uLi5cIixtYXNrOiB0cnVlfSk7XG5cdFx0XHR2YXIgJHRoaXMgPSB0aGlzO1xuXHRcdFx0dmFyIHJlcSA9IFtdO1xuXHRcdFx0dmFyIGF0dHJsaXN0ID0gJHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdDtcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmxpc3QubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0dmFyIGF0dHIgPSBhdHRybGlzdFtpXS5BdHRyO1xuXHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IGF0dHIubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0XHR2YXIgYXIgPSBhdHRyW2pdO1xuXHRcdFx0XHRcdGlmIChhci5WYWx1ZSA9PSAn6K+36YCJ5oupJyB8fCBhci5WYWx1ZSA9PSAn4oCU4oCU6K+36YCJ5oup4oCU4oCUJykgYXIuVmFsdWUgPSAnJztcblx0XHRcdFx0XHRpZiAoYXIuVHlwZSA9PSAn5byV55So5a+56LGhKOWkmuS4qiknKVxuXHRcdFx0XHRcdFx0aWYgKGFyLlZhbHVlID09ICfor7cnKSBhci5WYWx1ZSA9ICcnO1xuXHRcdFx0XHRcdGlmIChhci5UeXBlID09ICflvJXnlKjkurrlkZgnIHx8IGFyLlR5cGUgPT0gJ+W8leeUqOmhueebricpXG5cdFx0XHRcdFx0XHRyZXEucHVzaCh7XG5cdFx0XHRcdFx0XHRcdGF0dHI6IGFyLk5hbWUsXG5cdFx0XHRcdFx0XHRcdHZhbHVlOiBhci5WYWxJRCA/IGFyLlZhbElEIDogJydcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdGVsc2UgaWYgKGFyLlR5cGUgPT0gJ+W4g+WwlOWAvCcpXG5cdFx0XHRcdFx0XHRyZXEucHVzaCh7XG5cdFx0XHRcdFx0XHRcdGF0dHI6IGFyLk5hbWUsXG5cdFx0XHRcdFx0XHRcdHZhbHVlOiBhci5WYWx1ZSA/ICcxJyA6ICcwJ1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0ZWxzZSBpZiAoYXIuVHlwZSA9PSAn5a2X5YW4JyB8fCBhci5UeXBlID09ICflrZflhbgt5a2X56ym5LiyJyB8fCBhci5UeXBlID09ICflrZflhbgt5pW05pWwJykge1xuXHRcdFx0XHRcdFx0aWYgKGFyLnNlbGVjdCA9PSB0cnVlKSB7IC8v5Yik5pat5LiL5ouJ5piv5ZCm5aSa6YCJXG5cdFx0XHRcdFx0XHRcdHZhciB2YWxTdHIgPSBcIlwiO1xuXHRcdFx0XHRcdFx0XHRmb3IgKHZhciB2IGluIGFyLlZhbHVlKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKHZhbFN0cilcblx0XHRcdFx0XHRcdFx0XHRcdHZhbFN0ciArPSBcIjtcIjtcblx0XHRcdFx0XHRcdFx0XHR2YWxTdHIgKz0gYXIuVmFsdWVbdl07XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0cmVxLnB1c2goe1xuXHRcdFx0XHRcdFx0XHRcdGF0dHI6IGFyLk5hbWUsXG5cdFx0XHRcdFx0XHRcdFx0dmFsdWU6IHZhbFN0clxuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH0gZWxzZVxuXHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7XG5cdFx0XHRcdFx0XHRcdFx0YXR0cjogYXIuTmFtZSxcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogYXIuVmFsdWVcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fSBlbHNlXG5cdFx0XHRcdFx0XHRyZXEucHVzaCh7XG5cdFx0XHRcdFx0XHRcdGF0dHI6IGFyLk5hbWUsXG5cdFx0XHRcdFx0XHRcdHZhbHVlOiBhci5WYWx1ZSA/IGFyLlZhbHVlIDogJydcblx0XHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0aWYgKGFyLm5vdGVtcHR5ID09IHRydWUgJiYgIWFyLlZhbHVlKSB7XG5cdFx0XHRcdFx0XHQvLyBpZihhci5Ob3RFbXB0eT09JzEnKXtcblx0XHRcdFx0XHRcdHVuaS5oaWRlTG9hZGluZygpO1xuXHRcdFx0XHRcdFx0Ly8gdW5pLnNob3dUb2FzdCh7dGl0bGU6YXIuRGlzcE5hbWUrJ+S4jeiDveS4uuepuu+8gScsaWNvbjpcInN1Y2Nlc3NcIixkdXJhdGlvbjozMDAwfSk7XG5cdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHtcblx0XHRcdFx0XHRcdFx0dGl0bGU6IFwi5o+Q56S6XCIsXG5cdFx0XHRcdFx0XHRcdGNvbnRlbnQ6IGFyLkRpc3BOYW1lICsgJ+S4jeiDveS4uuepuu+8gScsXG5cdFx0XHRcdFx0XHRcdHNob3dDYW5jZWw6IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRjb25maXJtVGV4dDogXCLlj5bmtohcIlxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHR2YXIgb2JqZWN0cyA9IFtdO1xuXHRcdFx0dmFyIHN1YlBhbmVsTGlzdCA9ICR0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdDtcblx0XHRcdGZvciAodmFyIHMgPSAwOyBzIDwgc3ViUGFuZWxMaXN0Lmxlbmd0aDsgcysrKSB7XG5cdFx0XHRcdHZhciBzdWJfcmVxID0gW107XG5cdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgc3ViUGFuZWxMaXN0W3NdLnN1YkNsYXNzQXR0ci5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdHZhciBhdHRyID0gc3ViUGFuZWxMaXN0W3NdLnN1YkNsYXNzQXR0cltpXS5BdHRyO1xuXHRcdFx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdFx0dmFyIGFyID0gYXR0cltqXTtcblx0XHRcdFx0XHRcdGlmIChhci5WYWx1ZSA9PSAn6K+36YCJ5oupJyB8fCBhci5WYWx1ZSA9PSAn4oCU4oCU6K+36YCJ5oup4oCU4oCUJykgYXIuVmFsdWUgPSAnJztcblx0XHRcdFx0XHRcdGlmIChhci5UeXBlID09ICflvJXnlKjlr7nosaEo5aSa5LiqKScpXG5cdFx0XHRcdFx0XHRcdGlmIChhci5WYWx1ZSA9PSAn6K+3JykgYXIuVmFsdWUgPSAnJztcblx0XHRcdFx0XHRcdGlmIChhci5UeXBlID09ICflvJXnlKjkurrlkZgnIHx8IGFyLlR5cGUgPT0gJ+W8leeUqOmhueebricpXG5cdFx0XHRcdFx0XHRcdHN1Yl9yZXEucHVzaCh7XG5cdFx0XHRcdFx0XHRcdFx0YXR0cjogYXIuTmFtZSxcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogYXIuVmFsSUQgPyBhci5WYWxJRCA6ICcnXG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0ZWxzZSBpZiAoYXIuVHlwZSA9PSAn5biD5bCU5YC8Jylcblx0XHRcdFx0XHRcdFx0c3ViX3JlcS5wdXNoKHtcblx0XHRcdFx0XHRcdFx0XHRhdHRyOiBhci5OYW1lLFxuXHRcdFx0XHRcdFx0XHRcdHZhbHVlOiBhci5WYWx1ZSA/ICcxJyA6ICcwJ1xuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdGVsc2UgaWYgKGFyLlR5cGUgPT0gJ+Wtl+WFuCcgfHwgYXIuVHlwZSA9PSAn5a2X5YW4LeWtl+espuS4sicgfHwgYXIuVHlwZSA9PSAn5a2X5YW4LeaVtOaVsCcpIHtcblx0XHRcdFx0XHRcdFx0aWYgKGFyLnNlbGVjdCA9PSB0cnVlKSB7IC8v5Yik5pat5LiL5ouJ5piv5ZCm5aSa6YCJXG5cdFx0XHRcdFx0XHRcdFx0dmFyIHZhbFN0ciA9IFwiXCI7XG5cdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgdiBpbiBhci5WYWx1ZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKHZhbFN0cilcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsU3RyICs9IFwiO1wiO1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFsU3RyICs9IGFyLlZhbHVlW3ZdO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRzdWJfcmVxLnB1c2goe1xuXHRcdFx0XHRcdFx0XHRcdFx0YXR0cjogYXIuTmFtZSxcblx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlOiB2YWxTdHJcblx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlXG5cdFx0XHRcdFx0XHRcdFx0c3ViX3JlcS5wdXNoKHtcblx0XHRcdFx0XHRcdFx0XHRcdGF0dHI6IGFyLk5hbWUsXG5cdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogYXIuVmFsdWVcblx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH0gZWxzZVxuXHRcdFx0XHRcdFx0XHRzdWJfcmVxLnB1c2goe1xuXHRcdFx0XHRcdFx0XHRcdGF0dHI6IGFyLk5hbWUsXG5cdFx0XHRcdFx0XHRcdFx0dmFsdWU6IGFyLlZhbHVlID8gYXIuVmFsdWUgOiAnJ1xuXHRcdFx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdFx0aWYgKGFyLm5vdGVtcHR5ID09IHRydWUgJiYgIWFyLlZhbHVlKSB7XG5cdFx0XHRcdFx0XHRcdC8vIGlmKGFyLk5vdEVtcHR5PT0nMScpe1xuXHRcdFx0XHRcdFx0XHR1bmkuaGlkZUxvYWRpbmcoKTtcblx0XHRcdFx0XHRcdFx0Ly8gdW5pLnNob3dUb2FzdCh7dGl0bGU6YXIuRGlzcE5hbWUrJ+S4jeiDveS4uuepuu+8gScsaWNvbjpcInN1Y2Nlc3NcIixkdXJhdGlvbjozMDAwfSk7XG5cdFx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe1xuXHRcdFx0XHRcdFx0XHRcdHRpdGxlOiBcIuaPkOekulwiLFxuXHRcdFx0XHRcdFx0XHRcdGNvbnRlbnQ6IGFyLkRpc3BOYW1lICsgJ+S4jeiDveS4uuepuu+8gScsXG5cdFx0XHRcdFx0XHRcdFx0c2hvd0NhbmNlbDogZmFsc2UsXG5cdFx0XHRcdFx0XHRcdFx0Y29uZmlybVRleHQ6IFwi5Y+W5raIXCJcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0b2JqZWN0cy5wdXNoKHtcblx0XHRcdFx0XHRvYmpfaWQ6IHN1YlBhbmVsTGlzdFtzXS5zY2FuQ29kZVZhbCxcblx0XHRcdFx0XHRvYmpfYXR0cnM6IHN1Yl9yZXFcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHR2YXIgZGF0YUpzb24gPSB7XG5cdFx0XHRcdG1hc3Rlcl9jbHM6IHtcblx0XHRcdFx0XHRjbHNfbmFtZTogJ01CT1gnLCAvLyR0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuTmFtZSxcblx0XHRcdFx0XHRvYmpfYXR0cnM6IHJlcVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRpbnB1dF8zMDM3OiAkdGhpcy4kZGF0YS5zY2FuQ29kZVZhbCwgLy/miavnoIHlhoXlrrlcblx0XHRcdFx0b3BfdHlwZTogJHRoaXMuJGRhdGEucGFyYW0uT3BlcmF0aW9uVHlwZSwgLy/kvZzkuJrnsbvlnovlrprkuYlcblx0XHRcdFx0c3ViX2Nsczoge1xuXHRcdFx0XHRcdGNsc19uYW1lOiAnTUJPWCcsIC8vJHRoaXMuJGRhdGEucGFyYW0uU3ViX0Nscy5OYW1lLFxuXHRcdFx0XHRcdG9iamVjdHM6IG9iamVjdHNcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHRcdC8vIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KGRhdGFKc29uKSk7XG5cdFx0XHR2YXIgZGF0YUluZm8gPSB7XG5cdFx0XHRcdGVkdHlwZTogXCI3XCIsXG5cdFx0XHRcdGV2ZW50aWQ6IGV2ZW50SUQsXG5cdFx0XHRcdHByb2plY3RpZDogJycsXG5cdFx0XHRcdHJjbHNpZDogJycsXG5cdFx0XHRcdHJvYmppZDogJycsXG5cdFx0XHRcdHVzZXJsb2dpbjogJycsXG5cdFx0XHRcdGNsc2lkOiAnTUJPWCcsXG5cdFx0XHRcdG9iamlkOiAnJyxcblx0XHRcdFx0YXR0cjogSlNPTi5zdHJpbmdpZnkoW10pLFxuXHRcdFx0XHRleHRpbmZvOiBKU09OLnN0cmluZ2lmeShbXSksXG5cdFx0XHRcdGdsb2JhbF9hdHRyOiBKU09OLnN0cmluZ2lmeSgkdGhpcy4kZGF0YS5nbG9iYWxfYXR0ciksXG5cdFx0XHRcdGRhdGFKc29uOiBKU09OLnN0cmluZ2lmeShkYXRhSnNvbilcblx0XHRcdH1cblx0XHRcdC8vIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KGRhdGFJbmZvKSk7XG5cdFx0XHRjb25zb2xlLmxvZyhkYXRhSW5mbyk7XG5cdFx0XHR0aGlzLiRzdG9yZS5kaXNwYXRjaCgnRGF0YU9ialJ1bkN1c3RvbUV2ZW50SW5mbycsIGRhdGFJbmZvKS50aGVuKHN1Y2Nlc3MgPT4ge1xuXHRcdFx0XHRjb25zb2xlLmxvZyhzdWNjZXNzKTtcblx0XHRcdFx0dW5pLmhpZGVMb2FkaW5nKCk7XG5cdFx0XHRcdGlmIChzdWNjZXNzLmNvZGUgPT0gJzAwMDAwJykge1xuXHRcdFx0XHRcdHZhciBkYXRhID0gSlNPTi5wYXJzZShzdWNjZXNzLmRhdGEpO1xuXHRcdFx0XHRcdHZhciByZXN1bHQgPSBkYXRhLnJlc3VsdDtcblx0XHRcdFx0XHRpZiAoZXZlbnRJRCAhPSAkdGhpcy4kZGF0YS5wYXJhbS5BZnRlcl9PS19FdmVudC5JRClcblx0XHRcdFx0XHRcdCR0aGlzLnNjYW5fT0tEYXRhT2JqUnVuQ3VzdG9tRXZlbnQoJHRoaXMuJGRhdGEucGFyYW0uQWZ0ZXJfT0tfRXZlbnQuSUQpO1xuXHRcdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdFx0Ly/liLfmlrBcblx0XHRcdFx0XHRcdHVuaS5yZWRpcmVjdFRvKHtcblx0XHRcdFx0XHRcdFx0dXJsOiAnLi4vbW9kYWwvbXNfY2xhc3NBdHRyP3BhcmFtPScgKyBKU09OLnN0cmluZ2lmeSgkdGhpcy4kZGF0YS5wYXJhbSkgK1xuXHRcdFx0XHRcdFx0XHRcdFwiJnRpdGxlbmFtZT1cIiArICR0aGlzLiRkYXRhLnRpdGxlXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7XG5cdFx0XHRcdFx0XHR0aXRsZTogXCLplJnor684XCIsXG5cdFx0XHRcdFx0XHRjb250ZW50OiBzdWNjZXNzLm1zZyxcblx0XHRcdFx0XHRcdHNob3dDYW5jZWw6IGZhbHNlLFxuXHRcdFx0XHRcdFx0Y29uZmlybVRleHQ6IFwi5Y+W5raIXCJcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSkuY2F0Y2goZXggPT4ge1xuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhleCk7XG5cdFx0XHRcdHVuaS5oaWRlTG9hZGluZygpO1xuXHRcdFx0XHR1bmkuc2hvd01vZGFsKHtcblx0XHRcdFx0XHR0aXRsZTogXCLplJnor684LjFcIixcblx0XHRcdFx0XHRjb250ZW50OiBleC5lcnJNc2csXG5cdFx0XHRcdFx0c2hvd0NhbmNlbDogZmFsc2UsXG5cdFx0XHRcdFx0Y29uZmlybVRleHQ6IFwi5Y+W5raIXCJcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0XHR9LFxuXG5cblx0fVxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///90\n");
/***/ }),
/* 91 */
@@ -21605,7 +21605,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 */ 65));\nvar _pickerAddress = _interopRequireDefault(__webpack_require__(/*! ../../js/pickerAddress/pickerAddress.vue */ 80));\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\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  components: {\n    pickerAddress: _pickerAddress.default\n  },\n  data: function data() {\n    return {\n      title: '新增',\n      param: {},\n      classAttrList: [],\n      classGridStyle: [],\n      edit_inital_event: \"\",\n      //弹窗初始化事件ID\n      edit_ok_event: \"\",\n      //弹窗点击OK 触发事件ID\n      edit_select_compose_event: \"\",\n      //选择组成对象时调用\n      edit_compose_cls_id: \"\",\n      global_attr: [],\n      refdatastore: [],\n      //引用数据存储区// {attr:'G_PRJ_' + bindattr + '_ID', value:info.id}\n      inputValList: [{\n        Name: \"test\"\n      }, {\n        Name: \"test2\"\n      }, {\n        Name: \"test3\"\n      }, {\n        Name: \"test4\"\n      }, {\n        Name: \"test5\"\n      }, {\n        Name: \"test6\"\n      }, {\n        Name: \"test7\"\n      }],\n      popupType: \"center\",\n      check_list: {},\n      popupParam: {}\n    };\n  },\n  onLoad: function onLoad(options) {\n    // console.log(options);\n    uni.setNavigationBarTitle({\n      title: options.titlename\n    }); //设置顶部标题 \n    var param = JSON.parse(options.param);\n    this.$data.title = param.Add_BtnName ? param.Add_BtnName : options.titlename; //设置按钮文字\n    // console.log(param);\n    if (!param.EditDlgMode) {\n      uni.showModal({\n        title: \"提示\",\n        content: \"该功能点未配置编辑窗口,请重新配置!\",\n        showCancel: false,\n        confirmText: \"取消\"\n      });\n      return;\n    }\n    if (!param.Edit_dlg.Name) {\n      uni.showModal({\n        title: \"提示\",\n        content: \"该功能点未配置窗口样式,请重新配置!\",\n        showCancel: false,\n        confirmText: \"取消\"\n      });\n      return;\n    }\n    this.$data.param = param;\n    var edit_dlg = {\n      Model: param.EditDlgMode,\n      Name: param.Edit_dlg.Name\n    };\n    var dataInfo = {\n      class_id: param.clsid,\n      class_name: '',\n      group_name: ''\n    };\n    var $this = this;\n    $this.$store.state.thisareaFuncID = param.clsid;\n    // console.log($this.$store.getters.getclassAttrList);\n    //获取\n    if ($this.$store.getters.getclassAttrList) {\n      $this.$data.classAttrList = $this.$store.getters.getclassAttrList;\n      $this.classGridStyleInfo();\n    } else $this.$store.dispatch('classAttrGetList', dataInfo).then(function (success) {\n      // console.log(success);\n      if (success.err_code == 0) {\n        $this.$data.classAttrList = success.result;\n        success.result.forEach( /*#__PURE__*/function () {\n          var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(group, index) {\n            return _regenerator.default.wrap(function _callee2$(_context2) {\n              while (1) {\n                switch (_context2.prev = _context2.next) {\n                  case 0:\n                    group.attr_list.forEach( /*#__PURE__*/function () {\n                      var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(attr, key) {\n                        return _regenerator.default.wrap(function _callee$(_context) {\n                          while (1) {\n                            switch (_context.prev = _context.next) {\n                              case 0:\n                                if (!(attr.type == \"字典-字符串\" || attr.type == \"字典-整数\")) {\n                                  _context.next = 3;\n                                  break;\n                                }\n                                _context.next = 3;\n                                return $this.DictItemGetList(attr, key, index);\n                              case 3:\n                              case \"end\":\n                                return _context.stop();\n                            }\n                          }\n                        }, _callee);\n                      }));\n                      return function (_x3, _x4) {\n                        return _ref2.apply(this, arguments);\n                      };\n                    }());\n                  case 1:\n                  case \"end\":\n                    return _context2.stop();\n                }\n              }\n            }, _callee2);\n          }));\n          return function (_x, _x2) {\n            return _ref.apply(this, arguments);\n          };\n        }());\n        setTimeout(function () {\n          $this.classGridStyleInfo();\n        }, 500);\n      } else {\n        uni.showModal({\n          title: \"错误1\",\n          content: success.err_msg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      }\n    }).catch(function (ex) {\n      // console.log(ex);\n      uni.showModal({\n        title: \"错误1.1\",\n        content: ex.errMsg,\n        showCancel: false,\n        confirmText: \"取消\"\n      });\n    });\n  },\n  methods: {\n    DictItemGetList: function DictItemGetList(attr, key, index) {\n      var _this = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4() {\n        var $this, dataInfo;\n        return _regenerator.default.wrap(function _callee4$(_context4) {\n          while (1) {\n            switch (_context4.prev = _context4.next) {\n              case 0:\n                //Mobox3得到字典项列表\n                _this.data = [];\n                $this = _this;\n                dataInfo = {\n                  dict_id: attr.dict_id,\n                  dict_name: attr.dict_name\n                }; // console.log(dataInfo);\n                _this.$store.dispatch('DictItemGetList', dataInfo).then( /*#__PURE__*/function () {\n                  var _ref3 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3(success) {\n                    return _regenerator.default.wrap(function _callee3$(_context3) {\n                      while (1) {\n                        switch (_context3.prev = _context3.next) {\n                          case 0:\n                            // console.log(success);\n                            if (success.err_code == 0) {\n                              $this.$data.classAttrList[index].attr_list[key].dictitem = success.result;\n                              _this.$store.commit(\"classAttrList\", $this.$data.classAttrList);\n                            } else {\n                              uni.showModal({\n                                title: \"错误1.2\",\n                                content: success.err_msg,\n                                showCancel: false,\n                                confirmText: \"取消\"\n                              });\n                            }\n                          case 1:\n                          case \"end\":\n                            return _context3.stop();\n                        }\n                      }\n                    }, _callee3);\n                  }));\n                  return function (_x5) {\n                    return _ref3.apply(this, arguments);\n                  };\n                }()).catch(function (ex) {\n                  // console.log(ex);\n                  uni.showModal({\n                    title: \"错误1.3\",\n                    content: ex.errMsg,\n                    showCancel: false,\n                    confirmText: \"取消\"\n                  });\n                });\n              case 4:\n              case \"end\":\n                return _context4.stop();\n            }\n          }\n        }, _callee4);\n      }))();\n    },\n    classGridStyleInfo: function classGridStyleInfo() {\n      var _this2 = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee6() {\n        var $this, gridstyleInfo;\n        return _regenerator.default.wrap(function _callee6$(_context6) {\n          while (1) {\n            switch (_context6.prev = _context6.next) {\n              case 0:\n                $this = _this2;\n                gridstyleInfo = {\n                  class_id: $this.$data.param.clsid,\n                  ui_style_type: 2,\n                  ui_style_name: $this.$data.param.Edit_dlg.Name\n                };\n                $this.$store.state.thisEditName = $this.$data.param.Edit_dlg.Name;\n                // console.log($this.$store.getters.getclassGridStyleInfo);\n                //获取\n                if ($this.$store.getters.getclassGridStyleInfo) {\n                  $this.$data.classGridStyle = $this.$store.getters.getclassGridStyleInfo;\n                  $this.viewParam();\n                } else {\n                  // console.log(gridstyleInfo);\n                  $this.$store.dispatch('UIStyleGetInfo', gridstyleInfo).then( /*#__PURE__*/function () {\n                    var _ref4 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee5(success) {\n                      var styledef;\n                      return _regenerator.default.wrap(function _callee5$(_context5) {\n                        while (1) {\n                          switch (_context5.prev = _context5.next) {\n                            case 0:\n                              // console.log(success);\n                              if (success.err_code == 0) {\n                                styledef = _base.default.decode(success.result.style_def);\n                                success.result.style_def = JSON.parse(styledef);\n                                $this.$data.classGridStyle = success.result;\n                                // console.log($this.$data.classGridStyle);\n\n                                $this.viewParam();\n                              } else {\n                                uni.showModal({\n                                  title: \"错误1.4\",\n                                  content: success.err_msg,\n                                  showCancel: false,\n                                  confirmText: \"取消\"\n                                });\n                              }\n                            case 1:\n                            case \"end\":\n                              return _context5.stop();\n                          }\n                        }\n                      }, _callee5);\n                    }));\n                    return function (_x6) {\n                      return _ref4.apply(this, arguments);\n                    };\n                  }()).catch(function (ex) {\n                    __f__(\"log\", ex, \" at pages/modal/3018.vue:652\");\n                    uni.showModal({\n                      title: \"错误1.5\",\n                      content: ex.errMsg,\n                      showCancel: false,\n                      confirmText: \"取消\"\n                    });\n                  });\n                }\n              case 4:\n              case \"end\":\n                return _context6.stop();\n            }\n          }\n        }, _callee6);\n      }))();\n    },\n    viewParam: function viewParam() {\n      //将mobox3小写参数转换为mobox2大写参数\n      var class_gridStyle = {\n        ID: this.$data.classGridStyle.id,\n        Name: this.$data.classGridStyle.name,\n        Type: this.$data.classGridStyle.type,\n        IsDefault: this.$data.classGridStyle.is_defaul,\n        StyleDef: this.$data.classGridStyle.style_def\n      };\n      this.$data.classGridStyle = class_gridStyle;\n      var class_attrList = [];\n      this.$data.classAttrList.forEach(function (data) {\n        var attrs = [];\n        if (data.attr_list) {\n          data.attr_list.forEach(function (attr) {\n            var dictitems = [];\n            if (attr.dictitem) {\n              attr.dictitem.forEach(function (dict) {\n                dictitems.push({\n                  ID: dict.id,\n                  Name: dict.name,\n                  Note: dict.note,\n                  Order: dict.order,\n                  ImgUrl: null,\n                  Code: dict.code,\n                  HasSub: null,\n                  ParentID: null,\n                  ParentName: null,\n                  Lvl: dict.lvl,\n                  IsDefault: dict.is_default,\n                  Value: dict.value,\n                  CN_G_ID: dict.id,\n                  CN_G_DICT_ID: null,\n                  CN_S_NAME: dict.name,\n                  CN_S_NOTE: dict.note,\n                  CN_N_ORDER: dict.order,\n                  CN_S_IMG_URL: null,\n                  CN_S_CODE: dict.code,\n                  CN_C_HAS_SUB: null,\n                  CN_G_PARENT_ITEM_ID: null,\n                  CN_G_PARENT_ITEM_NAME: null,\n                  CN_N_LVL: dict.lvl,\n                  CN_C_IS_DEFAULT: dict.is_default,\n                  CN_S_VALUE: dict.value\n                });\n              });\n            }\n            attrs.push({\n              ID: attr.id,\n              Name: attr.name,\n              Type: attr.type,\n              Size: attr.size,\n              NotEmpty: attr.not_empty,\n              DefValue: attr.def_value,\n              Order: attr.order,\n              DictName: attr.dict_name,\n              DictID: attr.dict_id,\n              CodeDefName: attr.code_def_name,\n              CodeDefID: attr.code_def_id,\n              RelClsID: null,\n              RelCls: attr.ref_cls,\n              Width: attr.width,\n              Height: attr.height,\n              CtrlStyle: attr.ctrl_style,\n              HasAce: attr.has_ace,\n              CanShow: attr.can_show,\n              CanQuery: attr.can_query,\n              ReadOnly: attr.read_only,\n              IsKey: attr.is_key,\n              IsFixed: attr.is_fixed,\n              DispName: attr.disp_name,\n              LuaAttr: attr.lua_attr,\n              Desc: attr.desc,\n              ActionDef: attr.action_def ? _base.default.decode(attr.action_def) : '',\n              Multilingual: attr.multilingual,\n              RefCondition: attr.ref_condition,\n              GroupName: data.group,\n              Value: null,\n              dictitem: dictitems\n            });\n          });\n        }\n        class_attrList.push({\n          Name: data.group,\n          Order: data.order,\n          HasAce: data.has_ace,\n          BkColor: data.bk_color,\n          ImgFontStyle: data.img_font_style,\n          Attr: attrs\n        });\n      });\n      this.$data.classAttrList = class_attrList;\n      // console.log(this.$data.classGridStyle);\n      // console.log(this.$data.classAttrList);\n      this.class_attr_init();\n    },\n    class_attr_init: function class_attr_init() {\n      var attrlist = this.$data.classGridStyle.StyleDef.show_style;\n      var newattrlist = [];\n      if (this.$data.classAttrList.length > 0) {\n        for (var i = 0; i < attrlist.length; i++) {\n          var open = attrlist[i].open;\n          var name = attrlist[i].attrgroup_name;\n          var attrs = attrlist[i].attrs;\n          for (var s = 0; s < this.$data.classAttrList.length; s++) {\n            var clsattr = this.$data.classAttrList[s];\n            if (name == clsattr.Name) {\n              var attr = [];\n              for (var j = 0; j < attrs.length; j++) {\n                for (var l = 0; l < clsattr.Attr.length; l++) {\n                  var ca = clsattr.Attr[l];\n                  if (attrs[j].attr == ca.Name) {\n                    ca.action = attrs[j].action;\n                    ca.edit = attrs[j].edit;\n                    ca.notempty = attrs[j].notempty;\n                    ca.ext_button = attrs[j].ext_button;\n                    ca.button_img = attrs[j].button_img;\n                    ca.button_tooltip = attrs[j].button_tooltip;\n                    ca.before_click_button = attrs[j].before_click_button;\n                    ca.button_callback = attrs[j].button_callback;\n                    ca.hidden = attrs[j].hidden;\n                    ca.select = attrs[j].select == undefined ? false : attrs[j].select;\n                    ca.Value = \"\";\n                    if (ca.dictitem.length > 0) {\n                      if (ca.select == true) ca.Value = []; //ca.dictitem[0].CN_S_NAME;\n                      else ca.Value = '请选择'; //ca.dictitem[0].CN_S_NAME;\n                      var dictitemlist = [];\n                      for (var d = 0; d < ca.dictitem.length; d++) {\n                        ca.dictitem[d].label = ca.dictitem[d].CN_S_NAME;\n                        ca.dictitem[d].value = ca.dictitem[d].CN_S_NAME;\n                        ca.dictitem[d].attr = ca.Name;\n                        if (ca.dictitem[d].CN_C_IS_DEFAULT == '1') ca.Value = ca.dictitem[d].CN_S_NAME;\n                      }\n                    }\n                    if (ca.Type == '日期' || ca.Type == '时间') {\n                      var nowDate = new Date();\n                      var date = {\n                        year: nowDate.getFullYear(),\n                        month: nowDate.getMonth() + 1,\n                        day: nowDate.getDate()\n                      };\n                      ca.Value = date.year + '-' + (date.month >= 10 ? date.month : '0' + date.month) + '-' + (date.day >= 10 ? date.day : '0' + date.day);\n                    }\n                    if (ca.Type == '引用对象(多个)') {\n                      ca.RelClsList = ca.RelCls;\n                      ca.Value = '请';\n                    }\n                    if (ca.Type == '省市区') ca.Value = '请选择';\n                    if (ca.Type == '布尔值') ca.Value = false;\n                    attr.push(ca);\n                  }\n                }\n              }\n              newattrlist.push({\n                BkColor: clsattr.BkColor,\n                HasAce: clsattr.HasAce,\n                ImgFontStyle: clsattr.ImgFontStyle,\n                Name: clsattr.Name,\n                Order: clsattr.Order,\n                Open: open,\n                Attr: attr,\n                control_style: this.$data.classGridStyle.StyleDef.control_style,\n                title_p_wdith: this.$data.classGridStyle.StyleDef.title_p_wdith\n              });\n            }\n          }\n        }\n        if (newattrlist.length > 0) {\n          this.$data.classAttrList = newattrlist;\n        }\n        var req = [];\n        if (this.$data.classGridStyle.StyleDef) {\n          if (this.$data.classGridStyle.StyleDef.show_style.length > 0) {\n            var attrlist = this.$data.classGridStyle.StyleDef.show_style;\n            // $el.find('.attr_field').prop('readonly', true);\n            // $el.find('.attr_field').prop('disabled', true);\n            for (var i = 0; i < attrlist.length; i++) {\n              var attr = attrlist[i].attrs;\n              for (var j = 0; j < attr.length; j++) {\n                var ar = attr[j];\n                req.push({\n                  attr: ar.attr,\n                  val: ar.value ? ar.value : ''\n                });\n              }\n            }\n          }\n        }\n        var eventlist = this.$data.classGridStyle.StyleDef.event;\n        // console.log(eventlist);\n        if (eventlist) {\n          if (eventlist.length > 0) {\n            for (var i = 0; i < eventlist.length; i++) {\n              if (eventlist[i].event_id == 'before_ok') {\n                this.$data.edit_ok_event = eventlist[i];\n              } else if (eventlist[i].event_id == 'initial') {\n                this.$data.edit_inital_event = eventlist[i];\n              } else if (eventlist[i].event_id == 'before_select_compose') {\n                this.$data.edit_select_compose_event = eventlist[i].scrip_id;\n                this.$data.edit_compose_cls_id = eventlist[i].compose_cls_id;\n              }\n            }\n          }\n        }\n        // console.log(req);\n        if (this.$data.edit_inital_event) {\n          var eventid = this.$data.edit_inital_event.scrip_id;\n          var info = {\n            eventid: eventid,\n            edtype: \"0\",\n            projectid: '',\n            rclsid: '',\n            robjid: '',\n            userlogin: '',\n            clsid: this.$data.param.clsid,\n            objid: \"\",\n            attr: req\n          };\n          this.ini_DataObjRunCustomEvent(info);\n        }\n        __f__(\"log\", this.$data.classGridStyle, \" at pages/modal/3018.vue:876\");\n        __f__(\"log\", this.$data.classAttrList, \" at pages/modal/3018.vue:877\");\n      } else {\n        uni.showModal({\n          title: \"提示\",\n          content: \"未找到可显示的的属性\",\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      }\n    },\n    classAttr_extButton: function classAttr_extButton(index, iindex) {\n      //弹框层显示 type:top bottom center left right\n      var $this = this;\n      $this.$data.popupType = 'right';\n      // open 方法传入参数 等同在 uni-popup 组件上绑定 type属性\n      $this.$refs.popup.open($this.popupType);\n      var data_attr = $this.$data.classAttrList[index].Attr[iindex];\n      // var value = action.value;\n      // var action ={\"action_type\":\"open_common_dlg\",\"value\":{\"common_dlg_id\":\"check_list\",\"config\":{\"title\":\"生产工单\",\"appear_style\":\"sideslip\",\"width\":250,\"multiple_choice\":\"1\",\"items\":[{\"id\":\"133D50D7-D798-4D2E-A15F-308365092DF5\",\"name\":\"5100691673\", \"check\":false},{\"id\":\"22992021-7D3B-4959-86B7-EF184B596AC6\",\"name\":\"5100691674\", \"check\":false},{\"id\":\"48FBBE8E-594D-45D5-8C24-385C661C4A1C\",\"name\":\"5100691675\", \"check\":false},{\"id\":\"4E429C60-325A-42ED-BEA3-B3397C07CCA1\",\"name\":\"5100691668\", \"check\":false}]}}}\n      // if (action.action_type == 'open_common_dlg') {\n      // \tvar value = action.value;\n      // \tif(value.common_dlg_id == 'check_list'){\n      // \t   $this.$data.check_list= value.config;\n      // \t}\n      // }\n      // var popupParam={\n      // \tindex: index,\n      // \tiindex: iindex,\n      // \tbutton_callback:\"\",\n      // \treq:\"\",\n      // \tdata_attr:data_attr\n      // }\n      // $this.$data.popupParam= popupParam;\n      // return;\n      var before_click_button = $this.$data.classAttrList[index].Attr[iindex].before_click_button;\n      var button_callback = $this.$data.classAttrList[index].Attr[iindex].button_callback;\n      if (!before_click_button) {\n        uni.showModal({\n          title: \"提示\",\n          content: \"before_click_button-event_id为空!\",\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n        return;\n      }\n      if (!button_callback) {\n        uni.showModal({\n          title: \"提示\",\n          content: \"button_callback-event_id为空!\",\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n        return;\n      }\n      this.DataObjRunCustomEvent_Return(before_click_button, data_attr, button_callback, index, iindex);\n    },\n    popupChange: function popupChange(e) {\n      __f__(\"log\", '当前模式:' + e.type + ',状态:' + e.show, \" at pages/modal/3018.vue:920\");\n    },\n    checkChange: function checkChange(e) {\n      //弹框check选择\n      // console.log(e.target.dataset);\n      var index = e.target.dataset.index;\n      var ischeck = e.target.dataset.ischeck;\n      var data = this.$data.check_list.items;\n      // this.$data.check_list.items=[];\n      if (this.$data.check_list.multiple_choice == \"0\") {\n        //判断时单选还是多选\n        for (var i in data) {\n          data[i].check = false;\n        }\n      }\n      data[index].check = ischeck ? false : true;\n      this.$data.check_list.items = data;\n    },\n    popup_cancel: function popup_cancel(e) {\n      //弹框取消\n      this.$refs.popup.close();\n    },\n    popup_sava: function popup_sava(e) {\n      //弹框确定\n      var $this = this;\n      var items = $this.$data.check_list.items;\n      var data = [];\n      var name = \"\";\n      for (var i = 0; i < items.length; i++) {\n        if (items[i].check == true) {\n          if (name) name += ';';\n          name += items[i].name;\n          data.push({\n            id: items[i].id,\n            name: items[i].name\n          });\n        }\n      }\n      if (!$this.$data.popupParam) {\n        uni.showModal({\n          title: \"提示\",\n          content: \"popupParam为空!\",\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n        return;\n      }\n      $this.$data.classAttrList[$this.$data.popupParam.index].Attr[$this.$data.popupParam.iindex].Value = name;\n      __f__(\"log\", data, \" at pages/modal/3018.vue:958\");\n      var callback_eventid = $this.$data.popupParam.button_callback.trim();\n      var info = {\n        eventid: callback_eventid,\n        edtype: \"0\",\n        projectid: '',\n        rclsid: '',\n        robjid: '',\n        userlogin: '',\n        clsid: $this.$data.param.clsid,\n        objid: \"\",\n        attr: $this.$data.popupParam.req,\n        dataJson: data\n      };\n      $this.DataObjRunCustomEvent(info, $this.$data.popupParam.data_attr);\n      this.$refs.popup.close();\n    },\n    cancel: function cancel(e) {\n      uni.navigateBack({\n        delta: 1 //返回层数,2则上上页\n      });\n    },\n    ontap: function ontap(e) {\n      var _this3 = this;\n      //扫码功能\n      var $ele = e;\n      //console.log(e.target)\n      getApp().onScan(function (result) {\n        //console.log(result.decodedata);\n        _this3.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value = result.decodedata;\n        uni.hideKeyboard();\n        _this3.onevent($ele, result.decodedata);\n      });\n    },\n    onarrow: function onarrow(index, open) {\n      // console.log(index+'--'+open);\n      this.$data.classAttrList[index].Open = open == true ? false : true;\n    },\n    ondateTime: function ondateTime(e) {\n      //console.log(e.target)\n      this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value = e.target.value;\n    },\n    onchange: function onchange(e) {\n      // console.log(e.target);\n      var value = this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].dictitem[e.target.value];\n      var data_attr = this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']];\n      // console.log(data_attr);\n      if (value.Name != data_attr.Value) {\n        this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value = value.Name;\n        // console.log(this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value);\n        var eventid = this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].action;\n        if (eventid) {\n          // self.event_no_sub = 1;\n          var req = [];\n          var attrlist = this.$data.classAttrList;\n          for (var i = 0; i < attrlist.length; i++) {\n            var attr = attrlist[i].Attr;\n            for (var j = 0; j < attr.length; j++) {\n              var ar = attr[j];\n              if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n              if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n                attr: ar.Name,\n                val: ar.ValID ? ar.ValID : ''\n              });else if (ar.Type == '布尔值') req.push({\n                attr: ar.Name,\n                val: ar.Value ? '1' : '0'\n              });else req.push({\n                attr: ar.Name,\n                val: ar.Value ? ar.Value : ''\n              });\n            }\n          }\n          var info = {\n            eventid: eventid,\n            edtype: \"0\",\n            projectid: '',\n            rclsid: '',\n            robjid: '',\n            userlogin: '',\n            clsid: this.$data.param.clsid,\n            objid: \"\",\n            attr: req,\n            dataJson: []\n          };\n          this.DataObjRunCustomEvent(info);\n        }\n      }\n    },\n    onchange2: function onchange2(item, value, delvalue) {\n      // console.log(item);\n      // console.log(value);\n      // console.log(delvalue);\n      //为空时,清空属性value\n      if (item.length == 0) {\n        var index,\n          iindex,\n          dindex = 0;\n        for (var i in this.$data.classAttrList) {\n          for (var j in this.$data.classAttrList[i].Attr) {\n            if (delvalue[0].attr == this.$data.classAttrList[i].Attr[j].Name) {\n              this.$data.classAttrList[i].Attr[j].Value = \"\";\n            }\n          }\n        }\n      }\n      for (var v in item) {\n        var index,\n          iindex,\n          dindex = 0;\n        for (var i in this.$data.classAttrList) {\n          for (var j in this.$data.classAttrList[i].Attr) {\n            if (item[v].attr == this.$data.classAttrList[i].Attr[j].Name) {\n              index = i;\n              iindex = j;\n            }\n          }\n        }\n        var itemvalue = item[v];\n        var data_attr = this.$data.classAttrList[index].Attr[iindex];\n\n        // console.log(data_attr);\n        if (itemvalue.Name != data_attr.Value) {\n          this.$data.classAttrList[index].Attr[iindex].Value = value;\n          // console.log(this.$data.classAttrList[index].Attr[iindex].Value);\n          var eventid = this.$data.classAttrList[index].Attr[iindex].action;\n          if (eventid) {\n            // self.event_no_sub = 1;\n            var req = [];\n            var attrlist = this.$data.classAttrList;\n            for (var i = 0; i < attrlist.length; i++) {\n              var attr = attrlist[i].Attr;\n              for (var j = 0; j < attr.length; j++) {\n                var ar = attr[j];\n                if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n                if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n                  attr: ar.Name,\n                  val: ar.ValID ? ar.ValID : ''\n                });else if (ar.Type == '布尔值') req.push({\n                  attr: ar.Name,\n                  val: ar.Value ? '1' : '0'\n                });else if (ar.Type == '字典' || ar.Type == '字典-字符串' || ar.Type == '字典-整数') req.push({\n                  attr: ar.Name,\n                  val: itemvalue.Name\n                });else req.push({\n                  attr: ar.Name,\n                  val: ar.Value ? ar.Value : ''\n                });\n              }\n            }\n            var info = {\n              eventid: eventid,\n              edtype: \"0\",\n              projectid: '',\n              rclsid: '',\n              robjid: '',\n              userlogin: '',\n              clsid: this.$data.param.clsid,\n              objid: \"\",\n              attr: req,\n              dataJson: []\n            };\n            this.DataObjRunCustomEvent(info);\n          }\n        }\n      }\n    },\n    onevent: function onevent(e, decodedata) {\n      // console.log(e.target);\n      var data_attr = this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']];\n      // console.log(decodedata);\n      if (e.target.value != data_attr.Value) {\n        this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value = decodedata ? decodedata : e.target.value;\n        var eventid = this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].action;\n        if (eventid) {\n          // self.event_no_sub = 1;\n          var req = [];\n          var attrlist = this.$data.classAttrList;\n          for (var i = 0; i < attrlist.length; i++) {\n            var attr = attrlist[i].Attr;\n            for (var j = 0; j < attr.length; j++) {\n              var ar = attr[j];\n              if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n              if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n                attr: ar.Name,\n                val: ar.ValID ? ar.ValID : ''\n              });else if (ar.Type == '布尔值') req.push({\n                attr: ar.Name,\n                val: ar.Value ? '1' : '0'\n              });else req.push({\n                attr: ar.Name,\n                val: ar.Value ? ar.Value : ''\n              });\n            }\n          }\n          var info = {\n            eventid: eventid,\n            edtype: \"0\",\n            projectid: '',\n            rclsid: '',\n            robjid: '',\n            userlogin: '',\n            clsid: this.$data.param.clsid,\n            objid: \"\",\n            attr: req,\n            dataJson: []\n          };\n          this.DataObjRunCustomEvent(info, data_attr);\n        }\n      }\n    },\n    oncheck: function oncheck(e) {\n      // console.log(e.target);\n      var ischecked = e.target.dataset.ischeck ? false : true;\n      var data_attr = this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']];\n      // console.log(data_attr);\n      if (ischecked != data_attr.Value) {\n        this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value = ischecked;\n        var eventid = this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].action;\n        if (eventid) {\n          // self.event_no_sub = 1;\n          var req = [];\n          var attrlist = this.$data.classAttrList;\n          for (var i = 0; i < attrlist.length; i++) {\n            var attr = attrlist[i].Attr;\n            for (var j = 0; j < attr.length; j++) {\n              var ar = attr[j];\n              if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n              if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n                attr: ar.Name,\n                val: ar.ValID ? ar.ValID : ''\n              });else if (ar.Type == '布尔值') req.push({\n                attr: ar.Name,\n                val: ar.Value ? '1' : '0'\n              });else req.push({\n                attr: ar.Name,\n                val: ar.Value ? ar.Value : ''\n              });\n            }\n          }\n          var info = {\n            eventid: eventid,\n            edtype: \"0\",\n            projectid: '',\n            rclsid: '',\n            robjid: '',\n            userlogin: '',\n            clsid: this.$data.param.clsid,\n            objid: \"\",\n            attr: req,\n            dataJson: []\n          };\n          this.DataObjRunCustomEvent(info);\n        }\n      }\n    },\n    inputValListIsDel: function inputValListIsDel(index) {\n      // console.log(index);\n      this.$data.inputValList.splice(index, 1); //删除tabPagejson的内容\n      // console.log(this.$data.inputValList);\n    },\n    addresschange: function addresschange(e) {\n      // console.log(e.target);\n      __f__(\"log\", e.data.join(';'), \" at pages/modal/3018.vue:1207\");\n      this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value = e.data.join(';');\n    },\n    classAttr_AddPer: function classAttr_AddPer(index, iindex) {\n      var param = {\n        index: index,\n        iindex: iindex\n      };\n      var $this = this;\n      uni.navigateTo({\n        url: '../selpsn/index?mulit=false&param=' + JSON.stringify(param),\n        events: {\n          AddPer: function AddPer(data, param) {\n            // console.log(param);\n            __f__(\"log\", data, \" at pages/modal/3018.vue:1218\");\n            $this.$data.classAttrList[param.index].Attr[param.iindex].Value = data[0].Name;\n            $this.$data.classAttrList[param.index].Attr[param.iindex].ValID = data[0].Login + ';' + data[0].Name;\n            var eventid = $this.$data.classAttrList[param.index].Attr[param.iindex].action;\n            if (eventid) {\n              eventid = eventid.trim();\n              if (eventid) {\n                var info = {\n                  eventid: eventid,\n                  edtype: \"4\",\n                  projectid: \"\",\n                  rclsid: \"\",\n                  robjid: \"\",\n                  userlogin: data[0].Login,\n                  clsid: $this.$data.param.clsid,\n                  objid: \"\",\n                  attr: [],\n                  dataJson: []\n                };\n\n                // var data_attr = $this.$data.classAttrList[param.index].Attr[param.iindex];\n                $this.DataObjRunCustomEvent(info);\n              }\n            }\n          }\n        }\n      });\n    },\n    classAttr_AddRef: function classAttr_AddRef(e) {\n      __f__(\"log\", e.target, \" at pages/modal/3018.vue:1248\");\n      uni.showModal({\n        title: \"提示\",\n        content: \"此功能还未实现!\",\n        showCancel: false,\n        confirmText: \"取消\"\n      });\n      // var value=this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].RelCls[e.target.value];\n      // this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value=value;\n    },\n    classAttr_AddPrj: function classAttr_AddPrj(index, iindex) {\n      var param = {\n        index: index,\n        iindex: iindex\n      };\n      var $this = this;\n      uni.navigateTo({\n        url: '../selPrj/index?relation=-1&param=' + JSON.stringify(param),\n        events: {\n          AddPer: function AddPer(data, param) {\n            // console.log(param);\n            // console.log(data);\n            $this.$data.classAttrList[param.index].Attr[param.iindex].Value = data[0].Name;\n            $this.$data.classAttrList[param.index].Attr[param.iindex].ValID = data[0].ID + ';' + data[0].Name;\n            var eventid = $this.$data.classAttrList[param.index].Attr[param.iindex].action;\n            if (eventid) {\n              eventid = eventid.trim();\n              if (eventid) {\n                var info = {\n                  eventid: eventid,\n                  edtype: \"2\",\n                  projectid: data[0].ID,\n                  rclsid: \"\",\n                  robjid: \"\",\n                  userlogin: \"\",\n                  clsid: $this.$data.param.clsid,\n                  objid: \"\",\n                  attr: [],\n                  dataJson: []\n                };\n\n                // var data_attr = $this.$data.classAttrList[param.index].Attr[param.iindex];\n                $this.DataObjRunCustomEvent(info);\n              }\n            }\n          }\n        }\n      });\n    },\n    //确定\n    sava: function sava() {\n      if (this.$data.edit_ok_event) this.OKDataObjRunCustomEvent();else this.add();\n    },\n    add: function add() {\n      var _this4 = this;\n      uni.showLoading({\n        title: \"加载中...\",\n        mask: true\n      });\n      var req = [];\n      var attrlist = this.$data.classAttrList;\n      for (var i = 0; i < attrlist.length; i++) {\n        var attr = attrlist[i].Attr;\n        for (var j = 0; j < attr.length; j++) {\n          var ar = attr[j];\n          if (ar.Value == '请选择' || ar.Value == '——请选择——') ar.Value = '';\n          if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n          if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n            name: ar.Name,\n            value: ar.ValID ? ar.ValID : ''\n          });else if (ar.Type == '布尔值') req.push({\n            name: ar.Name,\n            value: ar.Value ? '1' : '0'\n          });else if (ar.Type == '字典' || ar.Type == '字典-字符串' || ar.Type == '字典-整数') {\n            if (ar.select == true) {\n              //判断下拉是否多选\n              var valStr = \"\";\n              for (var v in ar.Value) {\n                if (valStr) valStr += \";\";\n                valStr += ar.Value[v];\n              }\n              req.push({\n                name: ar.Name,\n                value: valStr\n              });\n            } else req.push({\n              name: ar.Name,\n              value: ar.Value\n            });\n          } else req.push({\n            name: ar.Name,\n            value: ar.Value ? ar.Value : ''\n          });\n          if (ar.notempty == true && !ar.Value) {\n            // if(ar.NotEmpty=='1'){\n            uni.hideLoading();\n            // uni.showToast({title:ar.DispName+'不能为空!',icon:\"success\",duration:3000});\n            uni.showModal({\n              title: \"提示\",\n              content: ar.DispName + '不能为空!',\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n            return;\n          }\n        }\n      }\n      var enviroment = {\n        'function': '3000',\n        // 功能点编号\n        cls_id: this.$data.param.clsid,\n        // 功能点主数据类标识\n        'button': 'top',\n        // top/bottom\n        button_name: '新增',\n        master: {\n          cls_id: this.$data.param.clsid\n        }\n      };\n      enviroment = _base.default.encode(JSON.stringify(enviroment)); //将字符串转换为base64编码\n      var obj_attr = {};\n      req.forEach(function (item) {\n        obj_attr[item.name] = item.value;\n      });\n      // console.log(obj_attr);\n      // var dataInfo={\n      //     class_id: this.$data.param.clsid, data_obj_id: '', masterclsid: '',\n      //     req: JSON.stringify(req), upfile: JSON.stringify([]), post_data: JSON.stringify({}),\n      //     compose: JSON.stringify([]), refdatastore: JSON.stringify([]), extinfo: JSON.stringify(enviroment), \n      // \tnot_trigger_sys_event: ''\n      // };\n      var dataInfo = {\n        class_id: this.$data.param.clsid,\n        class_name: '',\n        master_cls_id: '',\n        master_obj_id: '',\n        creator: '',\n        creator_name: '',\n        not_trigger_event: '',\n        update_exist: '',\n        post_process: '',\n        ext_info: enviroment,\n        obj_attr: obj_attr\n      };\n      __f__(\"log\", dataInfo, \" at pages/modal/3018.vue:1374\");\n      // return\n      this.$store.dispatch('createDataObj', dataInfo).then(function (success) {\n        __f__(\"log\", success, \" at pages/modal/3018.vue:1377\");\n        uni.hideLoading();\n        if (success.err_code == 0) {\n          var result = success.result;\n          // if(result.result_type == 0){}\n          if (success.result.action) {\n            var action = JSON.parse(success.result.action);\n            __f__(\"log\", action, \" at pages/modal/3018.vue:1384\");\n            if (action.ret == '0') {\n              if (action.ret != 0) {\n                uni.showModal({\n                  title: \"提示\",\n                  content: '执行脚本失败,' + action.result,\n                  showCancel: false,\n                  confirmText: \"取消\"\n                });\n                return;\n              }\n              if (action.info) {\n                uni.showModal({\n                  title: \"提示\",\n                  content: '执行脚本失败,' + action.info,\n                  showCancel: false,\n                  confirmText: \"取消\"\n                });\n                return;\n              }\n              if (action.result_type == '0') {\n                uni.showToast({\n                  title: action.result,\n                  icon: \"success\",\n                  duration: 3000\n                });\n              }\n\n              // \"{\"ret\":0, \"result_type\":0, \"result\":\"创建成功123123123\",\"info\":\"\"}\"\n            }\n          } else uni.showToast({\n            title: \"创建成功!\",\n            icon: \"success\",\n            duration: 3000\n          });\n          //刷新\n          uni.redirectTo({\n            url: '../modal/3018?param=' + JSON.stringify(_this4.$data.param) + \"&titlename=\" + _this4.$data.title\n          });\n          // this.class_attr_init();\n        } else {\n          uni.showModal({\n            title: \"错误\",\n            content: success.err_msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        __f__(\"log\", ex, \" at pages/modal/3018.vue:1411\");\n        uni.hideLoading();\n        uni.showModal({\n          title: \"提示\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\n    },\n    ini_DataObjRunCustomEvent: function ini_DataObjRunCustomEvent(info) {\n      var _this5 = this;\n      var param = {\n        EditStyle: this.$data.param.Edit_dlg.Name,\n        ViewStyle: this.$data.param.Edit_dlg.Name,\n        NotTriggerSysEvent: 0,\n        enviroment: {\n          'function': '3000',\n          // 功能点编号\n          cls_id: this.$data.param.clsid,\n          // 功能点主数据类标识\n          'button': 'top',\n          // top/bottom\n          button_name: '新增',\n          master: {\n            cls_id: this.$data.param.clsid // button=bottom时 master的cls_id\n            //obj_id: ''  // button=bottom时 master的obj_id\n          }\n        }\n      };\n\n      var inputparameter = '';\n      var global_attr = '';\n      param.enviroment = _base.default.encode(JSON.stringify(param.enviroment)); //将字符串转换为base64编码\n      var obj_attr = {};\n      info.attr.forEach(function (item) {\n        obj_attr[item.attr] = item.val;\n      });\n      // console.log(obj_attr);\n      // var dataInfo = {\n      //                 edtype: info.edtype, eventid: info.eventid, projectid: info.projectid,\n      //                 rclsid: info.rclsid, robjid: info.robjid, userlogin: info.userlogin, clsid: info.clsid, objid: info.objid,\n      //                 attr: JSON.stringify(info.attr), extinfo: JSON.stringify(param.enviroment), inputparameter: inputparameter, global_attr: global_attr\n      //             }\n      if (!info.eventid.includes('{')) info.eventid = '{' + info.eventid + '}';\n      var dataInfo = {\n        ed_type: info.edtype,\n        start_transaction: '',\n        class_id: info.clsid,\n        class_name: '',\n        event_id: info.eventid,\n        event_name: '',\n        data_obj_id: info.objid,\n        obj_attr: obj_attr,\n        prj_id: info.projectid,\n        ref_cls_id: info.rclsid,\n        rel_obj_id: info.robjid,\n        user_login: info.userlogin,\n        data_json: '',\n        compose_info: '',\n        ext_info: param.enviroment,\n        global_attr: global_attr,\n        input_param: inputparameter\n      };\n      __f__(\"log\", dataInfo, \" at pages/modal/3018.vue:1466\");\n      // return;\n      this.$store.dispatch('runCustomEvent', dataInfo).then(function (success) {\n        __f__(\"log\", success, \" at pages/modal/3018.vue:1469\");\n        if (success.err_code == 0) {\n          var data = success.result;\n          if (data.action) {\n            var actionlist = data.action;\n            if (actionlist) {\n              for (var j = 0; j < actionlist.length; j++) {\n                var action = actionlist[j];\n                var action_type = action.action_type;\n                var value = action.value;\n                if (action_type == 'set_dlg_attr') {\n                  if (value) {\n                    __f__(\"log\", value, \" at pages/modal/3018.vue:1481\");\n                    for (var i = 0; i < value.length; i++) {\n                      for (var a = 0; a < _this5.$data.classAttrList.length; a++) {\n                        for (var l = 0; l < _this5.$data.classAttrList[a].Attr.length; l++) {\n                          var ca = _this5.$data.classAttrList[a].Attr[l];\n                          if (value[i].attr == ca.Name) {\n                            if (ca.Type == '字典' || ca.Type == '字典-字符串' || ca.Type == '字典-整数') {\n                              var dictItemList = [];\n                              for (var d in value[i].choice_list) {\n                                var list_val = value[i].choice_list[d];\n                                dictItemList.push({\n                                  \"CN_S_NAME\": list_val,\n                                  \"Name\": list_val,\n                                  \"label\": list_val,\n                                  \"value\": list_val\n                                });\n                              }\n                              ca.dictitem = dictItemList;\n                              // attr[j].dictitem = val[i].choice_list;\n                            } else {\n                              ca.Value = value[i].value;\n                            }\n                          }\n                        }\n                      }\n                      var length = 0;\n                      if (!_this5.$data.refdatastore.filter(function (s) {\n                        return value[i].attr == s.attr;\n                      }).length) {\n                        length = 1;\n                        _this5.$data.refdatastore.push(value[i]);\n                      }\n                      if (length == 0) {\n                        for (var j = 0; j < _this5.$data.refdatastore.length; j++) {\n                          if (_this5.$data.refdatastore[j].attr == value[i].attr) {\n                            _this5.$data.refdatastore[j].value = value[i].value;\n                          }\n                        }\n                      }\n                    }\n                  }\n                }\n                if (action_type == 'open_select_userdlg') {\n                  uni.showModal({\n                    title: \"错误2.2\",\n                    content: \"open_select_userdlg这个action_type还未处理!\",\n                    showCancel: false,\n                    confirmText: \"取消\"\n                  });\n                }\n                // else if (action_type == 'tip_dlg') {\n\n                // }\n              }\n            }\n          }\n        } else {\n          uni.showModal({\n            title: \"错误2\",\n            content: success.err_msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        // console.log(ex);\n        uni.showModal({\n          title: \"错误2.1\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\n    },\n    DataObjRunCustomEvent: function DataObjRunCustomEvent(info, data_attr) {\n      var $this = this;\n      var enviroment = {\n        'function': '3000',\n        // 功能点编号\n        cls_id: this.$data.param.clsid,\n        // 功能点主数据类标识\n        'button': 'top',\n        // top/bottom\n        button_name: '新增',\n        master: {\n          cls_id: this.$data.param.clsid // button=bottom时 master的cls_id\n          //obj_id: ''  // button=bottom时 master的obj_id\n        }\n      };\n\n      if (data_attr) {\n        enviroment.edit_dlg = {\n          type: 'small',\n          //小窗口\n          class_id: this.$data.param.clsid //当前数据类id\n        };\n\n        if (data_attr) {\n          enviroment.edit_dlg.form_control = {\n            //所属的表单控件\n            name: data_attr.Name,\n            //字段属性\n            text: data_attr.DispName,\n            //显示文本\n            group_name: data_attr.GroupName,\n            //属性组\n            type: data_attr.Type,\n            //字段类型\n            readonly: data_attr.ReadOnly,\n            //是否只读\n            button_img: data_attr.button_img,\n            //引用按钮的图标\n            button_tooltip: data_attr.button_tooltip //引用按钮的tooltip\n          };\n        }\n      }\n\n      // var dataInfo = {\n      //     edtype: info.edtype, eventid: info.eventid, projectid: info.projectid.replace('{','').replace('}',''),\n      //     rclsid: info.rclsid, robjid: info.robjid, userlogin: info.userlogin, clsid: info.clsid, objid: info.objid,\n      //     attr: JSON.stringify(info.attr), extinfo: JSON.stringify(enviroment), inputparameter: \"\",\n      // \tglobal_attr: JSON.stringify(this.$data.global_attr), dataJson:JSON.stringify(info.dataJson)\n      // }\n      enviroment = _base.default.encode(JSON.stringify(enviroment)); //将字符串转换为base64编码\n      var global_attr = _base.default.encode(JSON.stringify(this.$data.global_attr)); //将字符串转换为base64编码\n      if (info.dataJson) info.dataJson = _base.default.encode(JSON.stringify(info.dataJson)); //将字符串转换为base64编码\n      var obj_attr = {};\n      info.attr.forEach(function (item) {\n        obj_attr[item.attr] = item.val;\n      });\n      if (!info.eventid.includes('{')) info.eventid = '{' + info.eventid + '}';\n      var dataInfo = {\n        ed_type: info.edtype,\n        start_transaction: '',\n        class_id: info.clsid,\n        class_name: '',\n        event_id: info.eventid,\n        event_name: '',\n        data_obj_id: info.objid,\n        obj_attr: obj_attr,\n        prj_id: info.projectid,\n        ref_cls_id: info.rclsid,\n        rel_obj_id: info.robjid,\n        user_login: info.userlogin,\n        data_json: info.dataJson,\n        compose_info: '',\n        ext_info: enviroment,\n        global_attr: global_attr,\n        input_param: ''\n      };\n      __f__(\"log\", dataInfo, \" at pages/modal/3018.vue:1602\");\n      // return;\n      this.$store.dispatch('runCustomEvent', dataInfo).then(function (success) {\n        __f__(\"log\", success, \" at pages/modal/3018.vue:1605\");\n        if (success.err_code == 0) {\n          var data = success.result;\n          var actionlist = data.action;\n          if (actionlist) {\n            __f__(\"log\", actionlist, \" at pages/modal/3018.vue:1611\");\n            for (var i = 0; i < actionlist.length; i++) {\n              var action = actionlist[i];\n              if (action.action_type == 'set_dlg_attr') {\n                var result = action.value;\n                for (var i = 0; i < result.length; i++) {\n                  if (result[i].choice_list) {\n                    for (var c = 0; c < $this.$data.classAttrList.length; c++) {\n                      var attr = $this.$data.classAttrList[c].Attr;\n                      for (var j = 0; j < attr.length; j++) {\n                        if (attr[j].Name == result[i].attr) {\n                          if (attr[j].Type == '字典' || attr[j].Type == '字典-字符串' || attr[j].Type == '字典-整数') {\n                            var dictItemList = [];\n                            for (var d in result[i].choice_list) {\n                              var val = result[i].choice_list[d];\n                              dictItemList.push({\n                                \"CN_S_NAME\": val,\n                                \"Name\": val,\n                                \"label\": val,\n                                \"value\": val\n                              });\n                            }\n                            attr[j].dictitem = dictItemList;\n                            // attr[j].dictitem = result[i].choice_list;\n                          }\n                        }\n                      }\n                    }\n                  }\n\n                  for (var c = 0; c < $this.$data.classAttrList.length; c++) {\n                    var attr = $this.$data.classAttrList[c].Attr;\n                    for (var j = 0; j < attr.length; j++) {\n                      __f__(\"log\", attr[j].Name + '==' + result[i].attr, \" at pages/modal/3018.vue:1638\");\n                      if (attr[j].Name == result[i].attr) {\n                        attr[j].Value = result[i].value;\n                      }\n                    }\n                  }\n                  var length = 0;\n                  if (!$this.$data.refdatastore.filter(function (s) {\n                    return result[i].attr == s.attr;\n                  }).length) {\n                    length = 1;\n                    $this.$data.refdatastore.push(result[i]);\n                  }\n                  if (length == 0) {\n                    for (var j = 0; j < $this.$data.refdatastore.length; j++) {\n                      if ($this.$data.refdatastore[j].attr == result[i].attr) {\n                        $this.$data.refdatastore[j].value = result[i].value;\n                      }\n                    }\n                  }\n                }\n              } else if (data.action[i].action_type == 'set_global_attr') {\n                $this.$data.global_attr = data.action[i].value || [];\n              }\n            }\n          }\n          if (data.result) {\n            var result = data.result;\n            for (var i = 0; i < result.length; i++) {\n              for (var c = 0; c < $this.$data.classAttrList.length; c++) {\n                var attr = $this.$data.classAttrList[c].Attr;\n                for (var j = 0; j < attr.length; j++) {\n                  if (attr[j].Name == result[i].attr) {\n                    attr[j].Value = result[i].value;\n                  }\n                }\n              }\n              var length = 0;\n              if (!$this.$data.refdatastore.filter(function (s) {\n                return result[i].attr == s.attr;\n              }).length) {\n                length = 1;\n                $this.$data.refdatastore.push(result[i]);\n              }\n              if (length == 0) {\n                for (var j = 0; j < $this.$data.refdatastore.length; j++) {\n                  if ($this.$data.refdatastore[j].attr == result[i].attr) {\n                    $this.$data.refdatastore[j].value = result[i].value;\n                  }\n                }\n              }\n            }\n          }\n        } else {\n          uni.showModal({\n            title: \"错误3\",\n            content: success.err_msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        // console.log(ex);\n        uni.showModal({\n          title: \"错误3.1\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\n    },\n    OKDataObjRunCustomEvent: function OKDataObjRunCustomEvent() {\n      var _this6 = this;\n      var enviroment = {\n        'function': '3000',\n        // 功能点编号\n        cls_id: this.$data.param.clsid,\n        // 功能点主数据类标识\n        'button': 'top',\n        // top/bottom\n        button_name: '新增',\n        master: {\n          cls_id: this.$data.param.clsid // button=bottom时 master的cls_id\n        }\n      };\n\n      var eventid = this.$data.edit_ok_event.scrip_id;\n      var req = [];\n      var attrlist = this.$data.classAttrList;\n      for (var i = 0; i < attrlist.length; i++) {\n        var attr = attrlist[i].Attr;\n        for (var j = 0; j < attr.length; j++) {\n          var ar = attr[j];\n          if (ar.Value == '请选择' || ar.Value == '——请选择——') ar.Value = '';\n          if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n          if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n            attr: ar.Name,\n            val: ar.ValID ? ar.ValID : ''\n          });else if (ar.Type == '布尔值') req.push({\n            attr: ar.Name,\n            val: ar.Value ? '1' : '0'\n          });else req.push({\n            attr: ar.Name,\n            val: ar.Value\n          });\n        }\n      }\n      if (this.$data.refdatastore.length > 0) {\n        for (var i = 0; i < this.$data.refdatastore.length; i++) {\n          if (!req.filter(function (s) {\n            return this.$data.refdatastore[i].attr == s.name;\n          }).length) {\n            length = 1;\n            req.push({\n              'attr': this.$data.refdatastore[i].attr,\n              'val': this.$data.refdatastore[i].value\n            });\n          }\n        }\n      }\n      var info = {\n        eventid: eventid,\n        edtype: \"0\",\n        projectid: '',\n        rclsid: '',\n        robjid: '',\n        userlogin: '',\n        clsid: this.$data.param.clsid,\n        objid: \"\",\n        attr: req\n      };\n      //  \tvar dataInfo = {\n      //          edtype: info.edtype, eventid: info.eventid, projectid: info.projectid,rclsid: info.rclsid, \n      // robjid: info.robjid, userlogin: info.userlogin, clsid: info.clsid, objid: info.objid,\n      // attr: JSON.stringify(info.attr), extinfo: JSON.stringify(enviroment), global_attr: JSON.stringify(this.$data.global_attr)\n      //      }\n\n      enviroment = _base.default.encode(JSON.stringify(enviroment)); //将字符串转换为base64编码\n      var global_attr = _base.default.encode(JSON.stringify(this.$data.global_attr)); //将字符串转换为base64编码\n      var obj_attr = {};\n      info.attr.forEach(function (item) {\n        obj_attr[item.attr] = item.val;\n      });\n      if (!eventid.includes('{')) eventid = '{' + eventid + '}';\n      var dataInfo = {\n        ed_type: info.edtype,\n        start_transaction: '',\n        class_id: info.clsid,\n        class_name: '',\n        event_id: eventid,\n        event_name: '',\n        data_obj_id: info.objid,\n        obj_attr: obj_attr,\n        prj_id: info.projectid,\n        ref_cls_id: info.rclsid,\n        rel_obj_id: info.robjid,\n        user_login: info.userlogin,\n        data_json: '',\n        compose_info: '',\n        ext_info: enviroment,\n        global_attr: global_attr,\n        input_param: ''\n      };\n      __f__(\"log\", dataInfo, \" at pages/modal/3018.vue:1783\");\n      // return;\n      this.$store.dispatch('runCustomEvent', dataInfo).then(function (success) {\n        __f__(\"log\", success, \" at pages/modal/3018.vue:1786\");\n        if (success.err_code == 0) {\n          var data = success.result;\n          var result = data.result;\n          for (var i = 0; i < result.length; i++) {\n            // self.class_attr_ele.find('.attr_field[data-field=\"' + result[i].attr + '\"]').val(result[i].value).data('val', result[i].value);\n            var length = 0;\n            if (!_this6.$data.refdatastore.filter(function (s) {\n              return result[i].attr == s.attr;\n            }).length) {\n              length = 1;\n              _this6.$data.refdatastore.push(result[i]);\n            }\n            if (length == 0) {\n              for (var j = 0; j < _this6.$data.refdatastore.length; j++) {\n                if (_this6.$data.refdatastore[j].attr == result[i].attr) {\n                  _this6.$data.refdatastore[j].value = result[i].value;\n                }\n              }\n            }\n          }\n          _this6.add();\n        } else {\n          uni.showModal({\n            title: \"错误4\",\n            content: success.err_msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        // console.log(ex);\n        uni.showModal({\n          title: \"错误4.1\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\n    },\n    DataObjRunCustomEvent_Return: function DataObjRunCustomEvent_Return(eventid, data_attr, button_callback, index, iindex) {\n      var _this7 = this;\n      var enviroment = {\n        'function': '3000',\n        // 功能点编号\n        cls_id: this.$data.param.clsid,\n        // 功能点主数据类标识\n        'button': 'top',\n        // top/bottom\n        button_name: '新增',\n        master: {\n          cls_id: this.$data.param.clsid // button=bottom时 master的cls_id\n          //obj_id: ''  // button=bottom时 master的obj_id\n        }\n      };\n\n      var req = [];\n      var attrlist = this.$data.classAttrList;\n      for (var i = 0; i < attrlist.length; i++) {\n        var attr = attrlist[i].Attr;\n        for (var j = 0; j < attr.length; j++) {\n          var ar = attr[j];\n          if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n          if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n            attr: ar.Name,\n            val: ar.ValID ? ar.ValID : ''\n          });else if (ar.Type == '布尔值') req.push({\n            attr: ar.Name,\n            val: ar.Value ? '1' : '0'\n          });else req.push({\n            attr: ar.Name,\n            val: ar.Value\n          });\n        }\n      }\n      if (this.$data.refdatastore.length > 0) {\n        for (var i = 0; i < this.$data.refdatastore.length; i++) {\n          if (!req.filter(function (s) {\n            return this.$data.refdatastore[i].attr == s.name;\n          }).length) {\n            length = 1;\n            req.push({\n              'attr': this.$data.refdatastore[i].attr,\n              'val': this.$data.refdatastore[i].value\n            });\n          }\n        }\n      }\n      var extinfo = enviroment;\n      extinfo.edit_dlg = {\n        type: 'small',\n        //小窗口\n        class_id: this.$data.param.clsid //当前数据类id\n      };\n\n      if (data_attr) {\n        extinfo.edit_dlg.form_control = {\n          //所属的表单控件\n          name: data_attr.Name,\n          //字段属性\n          text: data_attr.DispName,\n          //显示文本\n          group_name: data_attr.GroupName,\n          //属性组\n          type: data_attr.Type,\n          //字段类型\n          readonly: data_attr.ReadOnly,\n          //是否只读\n          button_img: data_attr.button_img,\n          //引用按钮的图标\n          button_tooltip: data_attr.button_tooltip //引用按钮的tooltip\n        };\n      }\n      // var dataInfo = {\n      // \tedtype:  \"0\", eventid: eventid, projectid: '',rclsid: '', robjid: '', userlogin: '', \n      // \tclsid: this.$data.param.clsid, objid: '',attr: JSON.stringify(req), \n      // \textinfo: JSON.stringify(extinfo), global_attr: JSON.stringify(this.$data.global_attr)\n      // }\n      extinfo = _base.default.encode(JSON.stringify(extinfo)); //将字符串转换为base64编码\n      var global_attr = _base.default.encode(JSON.stringify(this.$data.global_attr)); //将字符串转换为base64编码\n      var obj_attr = {};\n      req.forEach(function (item) {\n        obj_attr[item.attr] = item.val;\n      });\n      if (!eventid.includes('{')) eventid = '{' + eventid + '}';\n      var dataInfo = {\n        ed_type: \"0\",\n        start_transaction: '',\n        class_id: this.$data.param.clsid,\n        class_name: '',\n        event_id: eventid,\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: extinfo,\n        global_attr: global_attr,\n        input_param: ''\n      };\n      __f__(\"log\", dataInfo, \" at pages/modal/3018.vue:1901\");\n      // return;\n      this.$store.dispatch('runCustomEvent', dataInfo).then(function (success) {\n        __f__(\"log\", success, \" at pages/modal/3018.vue:1904\");\n        if (success.err_code == 0) {\n          var data = success.result;\n          if (data != \"\") {\n            var actions = data.action;\n            __f__(\"log\", actions, \" at pages/modal/3018.vue:1910\");\n            if (actions) {\n              for (var i = 0; i < actions.length; i++) {\n                var action = actions[i];\n                var val = action.value;\n                var enviroment = JSON.stringify(enviroment);\n                if (action.action_type == 'open_panel') {\n                  var d = dialog({\n                    title: '<i class=\"ace-icon fa fa-info-circle\"></i> ' + '提示',\n                    content: action.action_type + '此action尚未处理!'\n                  });\n                  d.show();\n                } else if (action.action_type == 'open_select_userdlg') {\n                  var style = val.style;\n                  // style == 'user' ? '选择人员' : style == 'department' ? '选择部门' : style == 'role' ? '选择角色' : ''\n                  var $this = _this7;\n                  var param = {\n                    index: index,\n                    iindex: iindex,\n                    button_callback: button_callback,\n                    req: req,\n                    data_attr: data_attr\n                  };\n                  uni.navigateTo({\n                    url: '../selpsn/index?mulit=false&param=' + JSON.stringify(param),\n                    events: {\n                      AddPer: function AddPer(data, param) {\n                        // console.log(param);\n                        __f__(\"log\", data, \" at pages/modal/3018.vue:1940\");\n                        var callback_eventid = param.button_callback.trim();\n                        var info = {\n                          eventid: callback_eventid,\n                          edtype: \"0\",\n                          projectid: '',\n                          rclsid: '',\n                          robjid: '',\n                          userlogin: '',\n                          clsid: $this.$data.param.clsid,\n                          objid: \"\",\n                          attr: param.req,\n                          inputparameter: data,\n                          dataJson: []\n                        };\n                        $this.DataObjRunCustomEvent(info, param.data_attr);\n                      }\n                    }\n                  });\n                } else if (action.action_type == 'open_data_query_dlg') {\n                  var d = dialog({\n                    title: '<i class=\"ace-icon fa fa-info-circle\"></i> ' + '提示',\n                    content: action.action_type + '此action尚未处理!'\n                  });\n                  d.show();\n                } else if (action.action_type == 'open_common_dlg') {\n                  var $this = _this7;\n                  if (val.common_dlg_id == 'check_list') {\n                    $this.$data.check_list = val.config;\n                    if (val.config.appear_style == 'sideslip')\n                      //判断是否是侧滑\n                      $this.$data.popupType = 'right';else $this.$data.popupType = 'center';\n                    // open 方法传入参数 等同在 uni-popup 组件上绑定 type属性\n                    $this.$refs.popup.open($this.$data.popupType);\n                    var popupParam = {\n                      index: index,\n                      iindex: iindex,\n                      button_callback: button_callback,\n                      req: req,\n                      data_attr: data_attr\n                    };\n                    $this.$data.popupParam = popupParam;\n                  }\n                } else if (action.action_type == 'open_project_query_dlg') {\n                  //console.log(action.value.select_range);\n                  //console.log(action.value.mulit_select);\n                  var priRel = '-1';\n                  if (action.value.select_range == '全部相关') priRel = '0';else if (action.value.select_range == '我负责的项目') priRel = '1';else if (action.value.select_range == '我创建的') priRel = '2';else if (action.value.select_range == '我参与的' || action.value.select_range == '我参加的') priRel = '3';else if (action.value.select_range == '我关注的') priRel = '4';else if (action.value.select_range == '我下属的项目') priRel = '5';\n                  var $this = _this7;\n                  var param_ = {\n                    index: index,\n                    iindex: iindex,\n                    button_callback: button_callback,\n                    req: req\n                  };\n                  uni.navigateTo({\n                    url: '../selPrj/index?relation=' + priRel + '&param=' + JSON.stringify(param_),\n                    events: {\n                      AddPer: function AddPer(data, param) {\n                        $this.$data.classAttrList[param.index].Attr[param.iindex].Value = data[0].Name;\n                        $this.$data.classAttrList[param.index].Attr[param.iindex].ValID = data[0].ID + ';' + data[0].Name;\n                        var callback_eventid = param.button_callback.trim();\n                        if (callback_eventid) {\n                          var info = {\n                            eventid: callback_eventid,\n                            edtype: \"2\",\n                            projectid: data[0].ID,\n                            rclsid: \"\",\n                            robjid: \"\",\n                            userlogin: \"\",\n                            clsid: $this.$data.param.clsid,\n                            objid: \"\",\n                            attr: param.req,\n                            dataJson: []\n                          };\n                          $this.DataObjRunCustomEvent(info);\n                        }\n                      }\n                    }\n                  });\n                } else {\n                  var d = dialog({\n                    title: '<i class=\"ace-icon fa fa-info-circle\"></i> ' + '提示',\n                    content: action.action_type + '此action尚未处理!'\n                  });\n                  d.show();\n                }\n              }\n            }\n          } else {\n            uni.showModal({\n              title: \"提示5.2\",\n              content: '调用 before_click_button 脚本返回空,event_id' + eventid,\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n          }\n        } else {\n          uni.showModal({\n            title: \"错误5\",\n            content: success.err_msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        // console.log(ex);\n        uni.showModal({\n          title: \"提示5.1\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vcGFnZXMvbW9kYWwvMzAxOC52dWUiXSwibmFtZXMiOlsibW9kdWxlcyIsIkJhc2U2NCIsImNvbXBvbmVudHMiLCJwaWNrZXJBZGRyZXNzIiwiZGF0YSIsInRpdGxlIiwicGFyYW0iLCJjbGFzc0F0dHJMaXN0IiwiY2xhc3NHcmlkU3R5bGUiLCJlZGl0X2luaXRhbF9ldmVudCIsImVkaXRfb2tfZXZlbnQiLCJlZGl0X3NlbGVjdF9jb21wb3NlX2V2ZW50IiwiZWRpdF9jb21wb3NlX2Nsc19pZCIsImdsb2JhbF9hdHRyIiwicmVmZGF0YXN0b3JlIiwiaW5wdXRWYWxMaXN0IiwiTmFtZSIsInBvcHVwVHlwZSIsImNoZWNrX2xpc3QiLCJwb3B1cFBhcmFtIiwib25Mb2FkIiwib3B0aW9ucyIsInVuaSIsInNldE5hdmlnYXRpb25CYXJUaXRsZSIsInRpdGxlbmFtZSIsIkpTT04iLCJwYXJzZSIsIiRkYXRhIiwiQWRkX0J0bk5hbWUiLCJFZGl0RGxnTW9kZSIsInNob3dNb2RhbCIsImNvbnRlbnQiLCJzaG93Q2FuY2VsIiwiY29uZmlybVRleHQiLCJFZGl0X2RsZyIsImVkaXRfZGxnIiwiTW9kZWwiLCJkYXRhSW5mbyIsImNsYXNzX2lkIiwiY2xzaWQiLCJjbGFzc19uYW1lIiwiZ3JvdXBfbmFtZSIsIiR0aGlzIiwiJHN0b3JlIiwic3RhdGUiLCJ0aGlzYXJlYUZ1bmNJRCIsImdldHRlcnMiLCJnZXRjbGFzc0F0dHJMaXN0IiwiY2xhc3NHcmlkU3R5bGVJbmZvIiwiZGlzcGF0Y2giLCJ0aGVuIiwic3VjY2VzcyIsImVycl9jb2RlIiwicmVzdWx0IiwiZm9yRWFjaCIsImdyb3VwIiwiaW5kZXgiLCJhdHRyX2xpc3QiLCJhdHRyIiwia2V5IiwidHlwZSIsIkRpY3RJdGVtR2V0TGlzdCIsInNldFRpbWVvdXQiLCJlcnJfbXNnIiwiY2F0Y2giLCJleCIsImVyck1zZyIsIm1ldGhvZHMiLCJkaWN0X2lkIiwiZGljdF9uYW1lIiwiZGljdGl0ZW0iLCJjb21taXQiLCJncmlkc3R5bGVJbmZvIiwidWlfc3R5bGVfdHlwZSIsInVpX3N0eWxlX25hbWUiLCJ0aGlzRWRpdE5hbWUiLCJnZXRjbGFzc0dyaWRTdHlsZUluZm8iLCJ2aWV3UGFyYW0iLCJzdHlsZWRlZiIsImRlY29kZSIsInN0eWxlX2RlZiIsImNsYXNzX2dyaWRTdHlsZSIsIklEIiwiaWQiLCJuYW1lIiwiVHlwZSIsIklzRGVmYXVsdCIsImlzX2RlZmF1bCIsIlN0eWxlRGVmIiwiY2xhc3NfYXR0ckxpc3QiLCJhdHRycyIsImRpY3RpdGVtcyIsImRpY3QiLCJwdXNoIiwiTm90ZSIsIm5vdGUiLCJPcmRlciIsIm9yZGVyIiwiSW1nVXJsIiwiQ29kZSIsImNvZGUiLCJIYXNTdWIiLCJQYXJlbnRJRCIsIlBhcmVudE5hbWUiLCJMdmwiLCJsdmwiLCJpc19kZWZhdWx0IiwiVmFsdWUiLCJ2YWx1ZSIsIkNOX0dfSUQiLCJDTl9HX0RJQ1RfSUQiLCJDTl9TX05BTUUiLCJDTl9TX05PVEUiLCJDTl9OX09SREVSIiwiQ05fU19JTUdfVVJMIiwiQ05fU19DT0RFIiwiQ05fQ19IQVNfU1VCIiwiQ05fR19QQVJFTlRfSVRFTV9JRCIsIkNOX0dfUEFSRU5UX0lURU1fTkFNRSIsIkNOX05fTFZMIiwiQ05fQ19JU19ERUZBVUxUIiwiQ05fU19WQUxVRSIsIlNpemUiLCJzaXplIiwiTm90RW1wdHkiLCJub3RfZW1wdHkiLCJEZWZWYWx1ZSIsImRlZl92YWx1ZSIsIkRpY3ROYW1lIiwiRGljdElEIiwiQ29kZURlZk5hbWUiLCJjb2RlX2RlZl9uYW1lIiwiQ29kZURlZklEIiwiY29kZV9kZWZfaWQiLCJSZWxDbHNJRCIsIlJlbENscyIsInJlZl9jbHMiLCJXaWR0aCIsIndpZHRoIiwiSGVpZ2h0IiwiaGVpZ2h0IiwiQ3RybFN0eWxlIiwiY3RybF9zdHlsZSIsIkhhc0FjZSIsImhhc19hY2UiLCJDYW5TaG93IiwiY2FuX3Nob3ciLCJDYW5RdWVyeSIsImNhbl9xdWVyeSIsIlJlYWRPbmx5IiwicmVhZF9vbmx5IiwiSXNLZXkiLCJpc19rZXkiLCJJc0ZpeGVkIiwiaXNfZml4ZWQiLCJEaXNwTmFtZSIsImRpc3BfbmFtZSIsIkx1YUF0dHIiLCJsdWFfYXR0ciIsIkRlc2MiLCJkZXNjIiwiQWN0aW9uRGVmIiwiYWN0aW9uX2RlZiIsIk11bHRpbGluZ3VhbCIsIm11bHRpbGluZ3VhbCIsIlJlZkNvbmRpdGlvbiIsInJlZl9jb25kaXRpb24iLCJHcm91cE5hbWUiLCJCa0NvbG9yIiwiYmtfY29sb3IiLCJJbWdGb250U3R5bGUiLCJpbWdfZm9udF9zdHlsZSIsIkF0dHIiLCJjbGFzc19hdHRyX2luaXQiLCJhdHRybGlzdCIsInNob3dfc3R5bGUiLCJuZXdhdHRybGlzdCIsImxlbmd0aCIsImkiLCJvcGVuIiwiYXR0cmdyb3VwX25hbWUiLCJzIiwiY2xzYXR0ciIsImoiLCJsIiwiY2EiLCJhY3Rpb24iLCJlZGl0Iiwibm90ZW1wdHkiLCJleHRfYnV0dG9uIiwiYnV0dG9uX2ltZyIsImJ1dHRvbl90b29sdGlwIiwiYmVmb3JlX2NsaWNrX2J1dHRvbiIsImJ1dHRvbl9jYWxsYmFjayIsImhpZGRlbiIsInNlbGVjdCIsInVuZGVmaW5lZCIsImRpY3RpdGVtbGlzdCIsImQiLCJsYWJlbCIsIm5vd0RhdGUiLCJEYXRlIiwiZGF0ZSIsInllYXIiLCJnZXRGdWxsWWVhciIsIm1vbnRoIiwiZ2V0TW9udGgiLCJkYXkiLCJnZXREYXRlIiwiUmVsQ2xzTGlzdCIsIk9wZW4iLCJjb250cm9sX3N0eWxlIiwidGl0bGVfcF93ZGl0aCIsInJlcSIsImFyIiwidmFsIiwiZXZlbnRsaXN0IiwiZXZlbnQiLCJldmVudF9pZCIsInNjcmlwX2lkIiwiY29tcG9zZV9jbHNfaWQiLCJldmVudGlkIiwiaW5mbyIsImVkdHlwZSIsInByb2plY3RpZCIsInJjbHNpZCIsInJvYmppZCIsInVzZXJsb2dpbiIsIm9iamlkIiwiaW5pX0RhdGFPYmpSdW5DdXN0b21FdmVudCIsImNsYXNzQXR0cl9leHRCdXR0b24iLCJpaW5kZXgiLCIkcmVmcyIsInBvcHVwIiwiZGF0YV9hdHRyIiwiRGF0YU9ialJ1bkN1c3RvbUV2ZW50X1JldHVybiIsInBvcHVwQ2hhbmdlIiwiZSIsInNob3ciLCJjaGVja0NoYW5nZSIsInRhcmdldCIsImRhdGFzZXQiLCJpc2NoZWNrIiwiaXRlbXMiLCJtdWx0aXBsZV9jaG9pY2UiLCJjaGVjayIsInBvcHVwX2NhbmNlbCIsImNsb3NlIiwicG9wdXBfc2F2YSIsImNhbGxiYWNrX2V2ZW50aWQiLCJ0cmltIiwiZGF0YUpzb24iLCJEYXRhT2JqUnVuQ3VzdG9tRXZlbnQiLCJjYW5jZWwiLCJuYXZpZ2F0ZUJhY2siLCJkZWx0YSIsIm9udGFwIiwiJGVsZSIsImdldEFwcCIsIm9uU2NhbiIsImRlY29kZWRhdGEiLCJoaWRlS2V5Ym9hcmQiLCJvbmV2ZW50Iiwib25hcnJvdyIsIm9uZGF0ZVRpbWUiLCJvbmNoYW5nZSIsIlZhbElEIiwib25jaGFuZ2UyIiwiaXRlbSIsImRlbHZhbHVlIiwiZGluZGV4IiwidiIsIml0ZW12YWx1ZSIsIm9uY2hlY2siLCJpc2NoZWNrZWQiLCJpbnB1dFZhbExpc3RJc0RlbCIsInNwbGljZSIsImFkZHJlc3NjaGFuZ2UiLCJqb2luIiwiY2xhc3NBdHRyX0FkZFBlciIsIm5hdmlnYXRlVG8iLCJ1cmwiLCJzdHJpbmdpZnkiLCJldmVudHMiLCJBZGRQZXIiLCJMb2dpbiIsImNsYXNzQXR0cl9BZGRSZWYiLCJjbGFzc0F0dHJfQWRkUHJqIiwic2F2YSIsIk9LRGF0YU9ialJ1bkN1c3RvbUV2ZW50IiwiYWRkIiwic2hvd0xvYWRpbmciLCJtYXNrIiwidmFsU3RyIiwiaGlkZUxvYWRpbmciLCJlbnZpcm9tZW50IiwiY2xzX2lkIiwiYnV0dG9uX25hbWUiLCJtYXN0ZXIiLCJlbmNvZGUiLCJvYmpfYXR0ciIsIm1hc3Rlcl9jbHNfaWQiLCJtYXN0ZXJfb2JqX2lkIiwiY3JlYXRvciIsImNyZWF0b3JfbmFtZSIsIm5vdF90cmlnZ2VyX2V2ZW50IiwidXBkYXRlX2V4aXN0IiwicG9zdF9wcm9jZXNzIiwiZXh0X2luZm8iLCJyZXQiLCJyZXN1bHRfdHlwZSIsInNob3dUb2FzdCIsImljb24iLCJkdXJhdGlvbiIsInJlZGlyZWN0VG8iLCJFZGl0U3R5bGUiLCJWaWV3U3R5bGUiLCJOb3RUcmlnZ2VyU3lzRXZlbnQiLCJpbnB1dHBhcmFtZXRlciIsImluY2x1ZGVzIiwiZWRfdHlwZSIsInN0YXJ0X3RyYW5zYWN0aW9uIiwiZXZlbnRfbmFtZSIsImRhdGFfb2JqX2lkIiwicHJqX2lkIiwicmVmX2Nsc19pZCIsInJlbF9vYmpfaWQiLCJ1c2VyX2xvZ2luIiwiZGF0YV9qc29uIiwiY29tcG9zZV9pbmZvIiwiaW5wdXRfcGFyYW0iLCJhY3Rpb25saXN0IiwiYWN0aW9uX3R5cGUiLCJhIiwiZGljdEl0ZW1MaXN0IiwiY2hvaWNlX2xpc3QiLCJsaXN0X3ZhbCIsImZpbHRlciIsImZvcm1fY29udHJvbCIsInRleHQiLCJyZWFkb25seSIsImMiLCJleHRpbmZvIiwiYWN0aW9ucyIsImRpYWxvZyIsInN0eWxlIiwiY29tbW9uX2RsZ19pZCIsImNvbmZpZyIsImFwcGVhcl9zdHlsZSIsInByaVJlbCIsInNlbGVjdF9yYW5nZSIsInBhcmFtXyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBc2dCQztBQUNBO0FBdmdCRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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LE9BQU8sRUFBRTJKLE1BQU0sQ0FBQ2tKLFdBQVcsR0FBRztrQkFDbEMsQ0FBQyxDQUFDO2tCQUNGdEksQ0FBQyxDQUFDd0MsSUFBSSxFQUFFO2dCQUNaO2NBQ0o7WUFDSjtVQUNBLENBQUMsTUFBSTtZQUNKeE4sR0FBRyxDQUFDUSxTQUFTLENBQUM7Y0FBQ3pCLEtBQUssRUFBQyxPQUFPO2NBQUMwQixPQUFPLEVBQUUsdUNBQXVDLEdBQUc4TCxPQUFPO2NBQUM3TCxVQUFVLEVBQUMsS0FBSztjQUFDQyxXQUFXLEVBQUM7WUFBSSxDQUFDLENBQUM7VUFDNUg7UUFDRCxDQUFDLE1BQUk7VUFDSlgsR0FBRyxDQUFDUSxTQUFTLENBQUM7WUFBQ3pCLEtBQUssRUFBQyxLQUFLO1lBQUMwQixPQUFPLEVBQUNvQixPQUFPLENBQUNZLE9BQU87WUFBQy9CLFVBQVUsRUFBQyxLQUFLO1lBQUNDLFdBQVcsRUFBQztVQUFJLENBQUMsQ0FBQztRQUN2RjtNQUNELENBQUMsQ0FBQyxDQUFDK0IsS0FBSyxDQUFDLFVBQUFDLEVBQUUsRUFBRTtRQUNaO1FBQ0EzQyxHQUFHLENBQUNRLFNBQVMsQ0FBQztVQUFDekIsS0FBSyxFQUFDLE9BQU87VUFBQzBCLE9BQU8sRUFBQ2tDLEVBQUUsQ0FBQ0MsTUFBTTtVQUFDbEMsVUFBVSxFQUFDLEtBQUs7VUFBQ0MsV0FBVyxFQUFDO1FBQUksQ0FBQyxDQUFDO01BQ25GLENBQUMsQ0FBQztJQUNBO0VBR0o7QUFDRCxDQUFDO0FBQUEsMkIiLCJmaWxlIjoiMTEwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuXHRpbXBvcnQgQmFzZTY0IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvanMtYmFzZTY0L2Jhc2U2NC5qcydcblx0aW1wb3J0IHBpY2tlckFkZHJlc3MgZnJvbSAnLi4vLi4vanMvcGlja2VyQWRkcmVzcy9waWNrZXJBZGRyZXNzLnZ1ZSdcblx0ZXhwb3J0IGRlZmF1bHQge1xuXHRcdG1vZHVsZXM6e1xuXHRcdFx0QmFzZTY0LFxuXHRcdH0sXG5cdFx0Y29tcG9uZW50czoge1xuICAgICAgICAgICAgcGlja2VyQWRkcmVzc1xuICAgICAgICB9LFxuXHRcdGRhdGEoKSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHR0aXRsZTogJ+aWsOWinicsXG5cdFx0XHRcdHBhcmFtOnt9LFxuXHRcdFx0XHRjbGFzc0F0dHJMaXN0OltdLFxuXHRcdFx0XHRjbGFzc0dyaWRTdHlsZTpbXSxcblx0XHRcdFx0ZWRpdF9pbml0YWxfZXZlbnQ6XCJcIiwgIC8v5by556qX5Yid5aeL5YyW5LqL5Lu2SURcblx0XHRcdFx0ZWRpdF9va19ldmVudDpcIlwiLCAgICAgIC8v5by556qX54K55Ye7T0sg6Kem5Y+R5LqL5Lu2SURcblx0XHRcdFx0ZWRpdF9zZWxlY3RfY29tcG9zZV9ldmVudDpcIlwiLCAgLy/pgInmi6nnu4TmiJDlr7nosaHml7bosIPnlKhcblx0XHRcdFx0ZWRpdF9jb21wb3NlX2Nsc19pZDpcIlwiLFxuXHRcdFx0XHRnbG9iYWxfYXR0cjpbXSxcblx0XHRcdFx0cmVmZGF0YXN0b3JlOiBbXSxcdCAgIC8v5byV55So5pWw5o2u5a2Y5YKo5Yy6Ly8ge2F0dHI6J0dfUFJKXycgKyBiaW5kYXR0ciArICdfSUQnLCB2YWx1ZTppbmZvLmlkfVxuXHRcdFx0XHRpbnB1dFZhbExpc3Q6W3tOYW1lOlwidGVzdFwifSx7TmFtZTpcInRlc3QyXCJ9LHtOYW1lOlwidGVzdDNcIn0se05hbWU6XCJ0ZXN0NFwifSx7TmFtZTpcInRlc3Q1XCJ9LHtOYW1lOlwidGVzdDZcIn0se05hbWU6XCJ0ZXN0N1wifV0sXG5cdFx0XHRcdHBvcHVwVHlwZTpcImNlbnRlclwiLFxuXHRcdFx0XHRjaGVja19saXN0Ont9LFxuXHRcdFx0XHRwb3B1cFBhcmFtOnt9LFxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0b25Mb2FkKG9wdGlvbnMpIHtcblx0XHRcdC8vIGNvbnNvbGUubG9nKG9wdGlvbnMpO1xuXHRcdFx0dW5pLnNldE5hdmlnYXRpb25CYXJUaXRsZSh7IHRpdGxlOiBvcHRpb25zLnRpdGxlbmFtZX0pOyAvL+iuvue9rumhtumDqOagh+mimCBcblx0XHRcdHZhciBwYXJhbSA9IEpTT04ucGFyc2Uob3B0aW9ucy5wYXJhbSk7XG5cdFx0XHR0aGlzLiRkYXRhLnRpdGxlID0gcGFyYW0uQWRkX0J0bk5hbWU/cGFyYW0uQWRkX0J0bk5hbWU6b3B0aW9ucy50aXRsZW5hbWU7IC8v6K6+572u5oyJ6ZKu5paH5a2XXG5cdFx0XHQvLyBjb25zb2xlLmxvZyhwYXJhbSk7XG5cdFx0XHRpZighcGFyYW0uRWRpdERsZ01vZGUpe1xuXHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIuaPkOekulwiLGNvbnRlbnQ6XCLor6Xlip/og73ngrnmnKrphY3nva7nvJbovpHnqpflj6PvvIzor7fph43mlrDphY3nva7vvIFcIixzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0aWYoIXBhcmFtLkVkaXRfZGxnLk5hbWUpe1xuXHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIuaPkOekulwiLGNvbnRlbnQ6XCLor6Xlip/og73ngrnmnKrphY3nva7nqpflj6PmoLflvI/vvIzor7fph43mlrDphY3nva7vvIFcIixzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy4kZGF0YS5wYXJhbSA9IHBhcmFtO1xuXHRcdFx0dmFyIGVkaXRfZGxnID0ge1xuXHRcdFx0ICAgIE1vZGVsOiBwYXJhbS5FZGl0RGxnTW9kZSxcblx0XHRcdCAgICBOYW1lOiBwYXJhbS5FZGl0X2RsZy5OYW1lXG5cdFx0XHR9XG5cdFx0XHR2YXIgZGF0YUluZm8gPSB7XG5cdFx0XHRcdGNsYXNzX2lkOiBwYXJhbS5jbHNpZCxcblx0XHRcdFx0Y2xhc3NfbmFtZTogJycsXG5cdFx0XHRcdGdyb3VwX25hbWU6ICcnXG5cdFx0XHR9O1xuXHRcdFx0dmFyICR0aGlzID0gdGhpcztcblx0XHRcdCR0aGlzLiRzdG9yZS5zdGF0ZS50aGlzYXJlYUZ1bmNJRCA9IHBhcmFtLmNsc2lkO1xuXHRcdFx0Ly8gY29uc29sZS5sb2coJHRoaXMuJHN0b3JlLmdldHRlcnMuZ2V0Y2xhc3NBdHRyTGlzdCk7XG5cdFx0XHQgLy/ojrflj5Zcblx0XHRcdGlmKCR0aGlzLiRzdG9yZS5nZXR0ZXJzLmdldGNsYXNzQXR0ckxpc3Qpe1xuXHRcdFx0IFx0JHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdCA9ICR0aGlzLiRzdG9yZS5nZXR0ZXJzLmdldGNsYXNzQXR0ckxpc3Q7XG5cdFx0XHRcdCR0aGlzLmNsYXNzR3JpZFN0eWxlSW5mbygpO1xuXHRcdFx0fWVsc2Vcblx0XHRcdFx0JHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdjbGFzc0F0dHJHZXRMaXN0JyxkYXRhSW5mbykudGhlbihzdWNjZXNzPT57XG5cdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coc3VjY2Vzcyk7XG5cdFx0XHRcdFx0aWYgKHN1Y2Nlc3MuZXJyX2NvZGUgPT0gMCkge1xuXHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdCA9IHN1Y2Nlc3MucmVzdWx0O1xuXHRcdFx0XHRcdFx0c3VjY2Vzcy5yZXN1bHQuZm9yRWFjaChhc3luYyAoZ3JvdXAsaW5kZXgpID0+IHtcblx0XHRcdFx0XHRcdFx0Z3JvdXAuYXR0cl9saXN0LmZvckVhY2goYXN5bmMgKGF0dHIsa2V5KSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGF0dHIudHlwZSA9PSBcIuWtl+WFuC3lrZfnrKbkuLJcIiB8fCBhdHRyLnR5cGUgPT0gXCLlrZflhbgt5pW05pWwXCIpe1xuXHRcdFx0XHRcdFx0XHRcdFx0YXdhaXQgJHRoaXMuRGljdEl0ZW1HZXRMaXN0KGF0dHIsa2V5LGluZGV4KTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XG5cdFx0XHRcdFx0XHRcdCR0aGlzLmNsYXNzR3JpZFN0eWxlSW5mbygpO1xuXHRcdFx0XHRcdFx0fSw1MDApO1xuXHRcdFx0XHRcdH1lbHNle1xuXHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor68xXCIsY29udGVudDpzdWNjZXNzLmVycl9tc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KS5jYXRjaChleD0+e1xuXHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKGV4KTtcblx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzEuMVwiLGNvbnRlbnQ6ZXguZXJyTXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHR9KTtcblx0XHRcdFxuXHRcdH0sXG5cdFx0bWV0aG9kczoge1xuXHRcdFx0YXN5bmMgRGljdEl0ZW1HZXRMaXN0KGF0dHIsa2V5LGluZGV4KXsgLy9Nb2JveDPlvpfliLDlrZflhbjpobnliJfooahcblx0XHRcdFx0dGhpcy5kYXRhPVtdO1xuXHRcdFx0XHR2YXIgJHRoaXMgPSB0aGlzO1xuXHRcdFx0XHR2YXIgZGF0YUluZm8gPXtcblx0XHRcdFx0XHRkaWN0X2lkOiBhdHRyLmRpY3RfaWQsXG5cdFx0XHRcdFx0ZGljdF9uYW1lOiBhdHRyLmRpY3RfbmFtZVxuXHRcdFx0XHR9O1xuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhkYXRhSW5mbyk7XG5cdFx0XHRcdHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdEaWN0SXRlbUdldExpc3QnLGRhdGFJbmZvKS50aGVuKGFzeW5jIChzdWNjZXNzKT0+e1xuXHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKHN1Y2Nlc3MpO1xuXHRcdFx0XHRcdGlmIChzdWNjZXNzLmVycl9jb2RlID09IDApIHtcblx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbaW5kZXhdLmF0dHJfbGlzdFtrZXldLmRpY3RpdGVtPXN1Y2Nlc3MucmVzdWx0O1xuXHRcdFx0XHRcdFx0dGhpcy4kc3RvcmUuY29tbWl0KFwiY2xhc3NBdHRyTGlzdFwiLCAkdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0KTtcblx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdH1lbHNle1xuXHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor68xLjJcIixjb250ZW50OnN1Y2Nlc3MuZXJyX21zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pLmNhdGNoKGV4PT57XG5cdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coZXgpO1xuXHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vMS4zXCIsY29udGVudDpleC5lcnJNc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSxcblx0XHRcdGFzeW5jIGNsYXNzR3JpZFN0eWxlSW5mbygpe1xuXHRcdFx0XHR2YXIgJHRoaXMgPSB0aGlzO1xuXHRcdFx0XHR2YXIgZ3JpZHN0eWxlSW5mbyA9IHtcblx0XHRcdFx0XHRjbGFzc19pZDogJHRoaXMuJGRhdGEucGFyYW0uY2xzaWQsXG5cdFx0XHRcdFx0dWlfc3R5bGVfdHlwZTogMixcblx0XHRcdFx0XHR1aV9zdHlsZV9uYW1lOiAkdGhpcy4kZGF0YS5wYXJhbS5FZGl0X2RsZy5OYW1lXG5cdFx0XHRcdH07XG5cdFx0XHRcdCR0aGlzLiRzdG9yZS5zdGF0ZS50aGlzRWRpdE5hbWUgPSAkdGhpcy4kZGF0YS5wYXJhbS5FZGl0X2RsZy5OYW1lXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKCR0aGlzLiRzdG9yZS5nZXR0ZXJzLmdldGNsYXNzR3JpZFN0eWxlSW5mbyk7XG5cdFx0XHRcdCAvL+iOt+WPllxuXHRcdFx0XHRpZigkdGhpcy4kc3RvcmUuZ2V0dGVycy5nZXRjbGFzc0dyaWRTdHlsZUluZm8pe1xuXHRcdFx0XHQgXHQkdGhpcy4kZGF0YS5jbGFzc0dyaWRTdHlsZSA9ICR0aGlzLiRzdG9yZS5nZXR0ZXJzLmdldGNsYXNzR3JpZFN0eWxlSW5mbztcblx0XHRcdFx0XHQkdGhpcy52aWV3UGFyYW0oKTtcblx0XHRcdFx0fWVsc2V7XG5cdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coZ3JpZHN0eWxlSW5mbyk7XG5cdFx0XHRcdFx0JHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdVSVN0eWxlR2V0SW5mbycsZ3JpZHN0eWxlSW5mbykudGhlbihhc3luYyAoc3VjY2Vzcyk9Pntcblx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKHN1Y2Nlc3MpO1xuXHRcdFx0XHRcdFx0aWYgKHN1Y2Nlc3MuZXJyX2NvZGUgPT0gMCkge1xuXHRcdFx0XHRcdFx0XHR2YXIgc3R5bGVkZWYgPSBCYXNlNjQuZGVjb2RlKHN1Y2Nlc3MucmVzdWx0LnN0eWxlX2RlZik7XG5cdFx0XHRcdFx0XHRcdHN1Y2Nlc3MucmVzdWx0LnN0eWxlX2RlZiA9IEpTT04ucGFyc2Uoc3R5bGVkZWYpO1xuXHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5jbGFzc0dyaWRTdHlsZSA9IHN1Y2Nlc3MucmVzdWx0O1xuXHRcdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZygkdGhpcy4kZGF0YS5jbGFzc0dyaWRTdHlsZSk7XG5cdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHQkdGhpcy52aWV3UGFyYW0oKTtcblx0XHRcdFx0XHRcdH1lbHNle1xuXHRcdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzEuNFwiLGNvbnRlbnQ6c3VjY2Vzcy5lcnJfbXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pLmNhdGNoKGV4PT57XG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhleCk7XG5cdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzEuNVwiLGNvbnRlbnQ6ZXguZXJyTXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0dmlld1BhcmFtKCl7IC8v5bCGbW9ib3gz5bCP5YaZ5Y+C5pWw6L2s5o2i5Li6bW9ib3gy5aSn5YaZ5Y+C5pWwXG5cdFx0XHRcdHZhciBjbGFzc19ncmlkU3R5bGUgPXtcblx0XHRcdFx0XHRJRDogdGhpcy4kZGF0YS5jbGFzc0dyaWRTdHlsZS5pZCxcblx0XHRcdFx0XHROYW1lOiB0aGlzLiRkYXRhLmNsYXNzR3JpZFN0eWxlLm5hbWUsXG5cdFx0XHRcdFx0VHlwZTogdGhpcy4kZGF0YS5jbGFzc0dyaWRTdHlsZS50eXBlLFxuXHRcdFx0XHRcdElzRGVmYXVsdDp0aGlzLiRkYXRhLmNsYXNzR3JpZFN0eWxlLmlzX2RlZmF1bCxcblx0XHRcdFx0XHRTdHlsZURlZjp0aGlzLiRkYXRhLmNsYXNzR3JpZFN0eWxlLnN0eWxlX2RlZixcblx0XHRcdFx0fTtcblx0XHRcdFx0dGhpcy4kZGF0YS5jbGFzc0dyaWRTdHlsZSA9IGNsYXNzX2dyaWRTdHlsZTtcblx0XHRcdFx0dmFyIGNsYXNzX2F0dHJMaXN0ID1bXTtcblx0XHRcdFx0dGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0LmZvckVhY2goZGF0YSA9PiB7XG5cdFx0XHRcdFx0dmFyIGF0dHJzID1bXTtcblx0XHRcdFx0XHRpZihkYXRhLmF0dHJfbGlzdCl7XG5cdFx0XHRcdFx0ICBkYXRhLmF0dHJfbGlzdC5mb3JFYWNoKGF0dHIgPT4ge1xuXHRcdFx0XHRcdFx0dmFyIGRpY3RpdGVtcyA9W107XG5cdFx0XHRcdFx0XHRpZihhdHRyLmRpY3RpdGVtKXtcblx0XHRcdFx0XHRcdFx0YXR0ci5kaWN0aXRlbS5mb3JFYWNoKGRpY3QgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdGRpY3RpdGVtcy5wdXNoKHtcblx0XHRcdFx0XHRcdFx0XHRcdElEOiBkaWN0LmlkLFxuXHRcdFx0XHRcdFx0XHRcdFx0TmFtZTogZGljdC5uYW1lLFxuXHRcdFx0XHRcdFx0XHRcdFx0Tm90ZTogZGljdC5ub3RlLFxuXHRcdFx0XHRcdFx0XHRcdFx0T3JkZXI6IGRpY3Qub3JkZXIsXG5cdFx0XHRcdFx0XHRcdFx0XHRJbWdVcmw6IG51bGwsXG5cdFx0XHRcdFx0XHRcdFx0XHRDb2RlOiBkaWN0LmNvZGUsXG5cdFx0XHRcdFx0XHRcdFx0XHRIYXNTdWI6IG51bGwsXG5cdFx0XHRcdFx0XHRcdFx0XHRQYXJlbnRJRDogbnVsbCxcblx0XHRcdFx0XHRcdFx0XHRcdFBhcmVudE5hbWU6IG51bGwsXG5cdFx0XHRcdFx0XHRcdFx0XHRMdmw6IGRpY3QubHZsLFxuXHRcdFx0XHRcdFx0XHRcdFx0SXNEZWZhdWx0OiBkaWN0LmlzX2RlZmF1bHQsXG5cdFx0XHRcdFx0XHRcdFx0XHRWYWx1ZTogZGljdC52YWx1ZSxcblx0XHRcdFx0XHRcdFx0XHRcdENOX0dfSUQ6IGRpY3QuaWQsXG5cdFx0XHRcdFx0XHRcdFx0XHRDTl9HX0RJQ1RfSUQ6IG51bGwsXG5cdFx0XHRcdFx0XHRcdFx0XHRDTl9TX05BTUU6IGRpY3QubmFtZSxcblx0XHRcdFx0XHRcdFx0XHRcdENOX1NfTk9URTogZGljdC5ub3RlLFxuXHRcdFx0XHRcdFx0XHRcdFx0Q05fTl9PUkRFUjogZGljdC5vcmRlcixcblx0XHRcdFx0XHRcdFx0XHRcdENOX1NfSU1HX1VSTDogbnVsbCxcblx0XHRcdFx0XHRcdFx0XHRcdENOX1NfQ09ERTogZGljdC5jb2RlLFxuXHRcdFx0XHRcdFx0XHRcdFx0Q05fQ19IQVNfU1VCOiBudWxsLFxuXHRcdFx0XHRcdFx0XHRcdFx0Q05fR19QQVJFTlRfSVRFTV9JRDogbnVsbCxcblx0XHRcdFx0XHRcdFx0XHRcdENOX0dfUEFSRU5UX0lURU1fTkFNRTogbnVsbCxcblx0XHRcdFx0XHRcdFx0XHRcdENOX05fTFZMOiBkaWN0Lmx2bCxcblx0XHRcdFx0XHRcdFx0XHRcdENOX0NfSVNfREVGQVVMVDogZGljdC5pc19kZWZhdWx0LFxuXHRcdFx0XHRcdFx0XHRcdFx0Q05fU19WQUxVRTogZGljdC52YWx1ZVxuXHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGF0dHJzLnB1c2goe1xuXHRcdFx0XHRcdFx0XHRJRDogYXR0ci5pZCxcblx0XHRcdFx0XHRcdFx0TmFtZTogYXR0ci5uYW1lLFxuXHRcdFx0XHRcdFx0XHRUeXBlOiBhdHRyLnR5cGUsXG5cdFx0XHRcdFx0XHRcdFNpemU6IGF0dHIuc2l6ZSxcblx0XHRcdFx0XHRcdFx0Tm90RW1wdHk6IGF0dHIubm90X2VtcHR5LFxuXHRcdFx0XHRcdFx0XHREZWZWYWx1ZTphdHRyLmRlZl92YWx1ZSxcblx0XHRcdFx0XHRcdFx0T3JkZXI6IGF0dHIub3JkZXIsXG5cdFx0XHRcdFx0XHRcdERpY3ROYW1lOiBhdHRyLmRpY3RfbmFtZSxcblx0XHRcdFx0XHRcdFx0RGljdElEOiBhdHRyLmRpY3RfaWQsXG5cdFx0XHRcdFx0XHRcdENvZGVEZWZOYW1lOiBhdHRyLmNvZGVfZGVmX25hbWUsXG5cdFx0XHRcdFx0XHRcdENvZGVEZWZJRDogYXR0ci5jb2RlX2RlZl9pZCxcblx0XHRcdFx0XHRcdFx0UmVsQ2xzSUQ6IG51bGwsXG5cdFx0XHRcdFx0XHRcdFJlbENsczogYXR0ci5yZWZfY2xzLFxuXHRcdFx0XHRcdFx0XHRXaWR0aDogYXR0ci53aWR0aCxcblx0XHRcdFx0XHRcdFx0SGVpZ2h0OiBhdHRyLmhlaWdodCxcblx0XHRcdFx0XHRcdFx0Q3RybFN0eWxlOiBhdHRyLmN0cmxfc3R5bGUsXG5cdFx0XHRcdFx0XHRcdEhhc0FjZTogYXR0ci5oYXNfYWNlLFxuXHRcdFx0XHRcdFx0XHRDYW5TaG93OiBhdHRyLmNhbl9zaG93LFxuXHRcdFx0XHRcdFx0XHRDYW5RdWVyeTogYXR0ci5jYW5fcXVlcnksXG5cdFx0XHRcdFx0XHRcdFJlYWRPbmx5OiBhdHRyLnJlYWRfb25seSxcblx0XHRcdFx0XHRcdFx0SXNLZXk6IGF0dHIuaXNfa2V5LFxuXHRcdFx0XHRcdFx0XHRJc0ZpeGVkOiBhdHRyLmlzX2ZpeGVkLFxuXHRcdFx0XHRcdFx0XHREaXNwTmFtZTogYXR0ci5kaXNwX25hbWUsXG5cdFx0XHRcdFx0XHRcdEx1YUF0dHI6IGF0dHIubHVhX2F0dHIsXG5cdFx0XHRcdFx0XHRcdERlc2M6IGF0dHIuZGVzYyxcblx0XHRcdFx0XHRcdFx0QWN0aW9uRGVmOiBhdHRyLmFjdGlvbl9kZWY/QmFzZTY0LmRlY29kZShhdHRyLmFjdGlvbl9kZWYpOicnLFxuXHRcdFx0XHRcdFx0XHRNdWx0aWxpbmd1YWw6IGF0dHIubXVsdGlsaW5ndWFsLFxuXHRcdFx0XHRcdFx0XHRSZWZDb25kaXRpb246IGF0dHIucmVmX2NvbmRpdGlvbixcblx0XHRcdFx0XHRcdFx0R3JvdXBOYW1lOiBkYXRhLmdyb3VwLFxuXHRcdFx0XHRcdFx0XHRWYWx1ZTogbnVsbCxcblx0XHRcdFx0XHRcdFx0ZGljdGl0ZW06IGRpY3RpdGVtc1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0ICB9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y2xhc3NfYXR0ckxpc3QucHVzaCh7XG5cdFx0XHRcdFx0XHROYW1lOiBkYXRhLmdyb3VwLFxuXHRcdFx0XHRcdFx0T3JkZXI6IGRhdGEub3JkZXIsXG5cdFx0XHRcdFx0XHRIYXNBY2U6IGRhdGEuaGFzX2FjZSxcblx0XHRcdFx0XHRcdEJrQ29sb3I6IGRhdGEuYmtfY29sb3IsXG5cdFx0XHRcdFx0XHRJbWdGb250U3R5bGU6IGRhdGEuaW1nX2ZvbnRfc3R5bGUsXG5cdFx0XHRcdFx0XHRBdHRyOiBhdHRyc1xuXHRcdFx0XHRcdH0pOyBcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdCA9IGNsYXNzX2F0dHJMaXN0O1xuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyh0aGlzLiRkYXRhLmNsYXNzR3JpZFN0eWxlKTtcblx0XHRcdFx0Ly8gY29uc29sZS5sb2codGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0KTtcblx0XHRcdFx0dGhpcy5jbGFzc19hdHRyX2luaXQoKTtcblx0XHRcdH0sXG5cdFx0XHRjbGFzc19hdHRyX2luaXQoKXtcblx0XHRcdFx0dmFyIGF0dHJsaXN0ID0gdGhpcy4kZGF0YS5jbGFzc0dyaWRTdHlsZS5TdHlsZURlZi5zaG93X3N0eWxlXG5cdFx0XHRcdHZhciBuZXdhdHRybGlzdCA9IFtdO1xuXHRcdFx0XHRpZiAodGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0Lmxlbmd0aCA+IDApIHtcblx0XHRcdFx0ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmxpc3QubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0ICAgICAgICB2YXIgb3BlbiA9IGF0dHJsaXN0W2ldLm9wZW47XG5cdFx0XHRcdCAgICAgICAgdmFyIG5hbWUgPSBhdHRybGlzdFtpXS5hdHRyZ3JvdXBfbmFtZTtcblx0XHRcdFx0ICAgICAgICB2YXIgYXR0cnMgPSBhdHRybGlzdFtpXS5hdHRycztcblx0XHRcdFx0ICAgICAgICBmb3IgKHZhciBzID0gMDsgcyA8IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdC5sZW5ndGg7IHMrKykge1xuXHRcdFx0XHQgICAgICAgICAgICB2YXIgY2xzYXR0ciA9IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtzXTtcblx0XHRcdFx0ICAgICAgICAgICAgaWYgKG5hbWUgPT0gY2xzYXR0ci5OYW1lKSB7XG5cdFx0XHRcdCAgICAgICAgICAgICAgICB2YXIgYXR0ciA9IFtdO1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBhdHRycy5sZW5ndGg7IGorKykge1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGwgPSAwOyBsIDwgY2xzYXR0ci5BdHRyLmxlbmd0aDsgbCsrKSB7XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYSA9IGNsc2F0dHIuQXR0cltsXTtcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGF0dHJzW2pdLmF0dHIgPT0gY2EuTmFtZSkge1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2EuYWN0aW9uID0gYXR0cnNbal0uYWN0aW9uO1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2EuZWRpdCA9IGF0dHJzW2pdLmVkaXQ7XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYS5ub3RlbXB0eSA9IGF0dHJzW2pdLm5vdGVtcHR5O1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2EuZXh0X2J1dHRvbiA9IGF0dHJzW2pdLmV4dF9idXR0b247XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYS5idXR0b25faW1nID0gYXR0cnNbal0uYnV0dG9uX2ltZztcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhLmJ1dHRvbl90b29sdGlwID0gYXR0cnNbal0uYnV0dG9uX3Rvb2x0aXA7XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYS5iZWZvcmVfY2xpY2tfYnV0dG9uID0gYXR0cnNbal0uYmVmb3JlX2NsaWNrX2J1dHRvbjtcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhLmJ1dHRvbl9jYWxsYmFjayA9IGF0dHJzW2pdLmJ1dHRvbl9jYWxsYmFjaztcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhLmhpZGRlbiA9IGF0dHJzW2pdLmhpZGRlbjtcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhLnNlbGVjdCA9IGF0dHJzW2pdLnNlbGVjdD09dW5kZWZpbmVkP2ZhbHNlOmF0dHJzW2pdLnNlbGVjdDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5WYWx1ZSA9XCJcIjtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihjYS5kaWN0aXRlbS5sZW5ndGg+MCl7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihjYS5zZWxlY3QgPT0gdHJ1ZSlcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2EuVmFsdWUgPSBbXTsvL2NhLmRpY3RpdGVtWzBdLkNOX1NfTkFNRTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGVsc2UgXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhLlZhbHVlID0gJ+ivt+mAieaLqSc7Ly9jYS5kaWN0aXRlbVswXS5DTl9TX05BTUU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgZGljdGl0ZW1saXN0PVtdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgZCA9IDA7IGQgPCBjYS5kaWN0aXRlbS5sZW5ndGg7IGQrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5kaWN0aXRlbVtkXS5sYWJlbD1jYS5kaWN0aXRlbVtkXS5DTl9TX05BTUU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhLmRpY3RpdGVtW2RdLnZhbHVlPWNhLmRpY3RpdGVtW2RdLkNOX1NfTkFNRTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2EuZGljdGl0ZW1bZF0uYXR0cj1jYS5OYW1lO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihjYS5kaWN0aXRlbVtkXS5DTl9DX0lTX0RFRkFVTFQ9PScxJylcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5WYWx1ZT1jYS5kaWN0aXRlbVtkXS5DTl9TX05BTUU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGNhLlR5cGU9PSfml6XmnJ8nIHx8IGNhLlR5cGU9PSfml7bpl7QnKXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBub3dEYXRlID0gbmV3IERhdGUoKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBkYXRlID0ge3llYXI6IG5vd0RhdGUuZ2V0RnVsbFllYXIoKSxtb250aDogbm93RGF0ZS5nZXRNb250aCgpICsgMSxkYXk6IG5vd0RhdGUuZ2V0RGF0ZSgpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2EuVmFsdWUgPSBkYXRlLnllYXIgKyAnLScgKyAoZGF0ZS5tb250aCA+PSAxMCA/IGRhdGUubW9udGggOiAnMCcgKyBkYXRlLm1vbnRoKSArICctJyArIChkYXRlLmRheSA+PSAxMCA/IGRhdGUuZGF5IDogJzAnICsgZGF0ZS5kYXkpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihjYS5UeXBlPT0n5byV55So5a+56LGhKOWkmuS4qiknKXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhLlJlbENsc0xpc3QgPSBjYS5SZWxDbHM7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5WYWx1ZSA9ICfor7cnO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihjYS5UeXBlPT0n55yB5biC5Yy6Jylcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhLlZhbHVlID0gJ+ivt+mAieaLqSc7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoY2EuVHlwZT09J+W4g+WwlOWAvCcpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5WYWx1ZSA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyLnB1c2goY2EpO1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICB9XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgfVxuXHRcdFx0XHQgICAgICAgICAgICAgICAgfVxuXHRcdFx0XHQgICAgICAgICAgICAgICAgbmV3YXR0cmxpc3QucHVzaCh7XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgQmtDb2xvcjogY2xzYXR0ci5Ca0NvbG9yLFxuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgIEhhc0FjZTogY2xzYXR0ci5IYXNBY2UsXG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgSW1nRm9udFN0eWxlOiBjbHNhdHRyLkltZ0ZvbnRTdHlsZSxcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICBOYW1lOiBjbHNhdHRyLk5hbWUsXG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgT3JkZXI6IGNsc2F0dHIuT3JkZXIsXG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgT3Blbjogb3Blbixcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICBBdHRyOiBhdHRyLFxuXHRcdFx0XHRcdFx0XHRcdFx0Y29udHJvbF9zdHlsZTp0aGlzLiRkYXRhLmNsYXNzR3JpZFN0eWxlLlN0eWxlRGVmLmNvbnRyb2xfc3R5bGUsXG5cdFx0XHRcdFx0XHRcdFx0XHR0aXRsZV9wX3dkaXRoOnRoaXMuJGRhdGEuY2xhc3NHcmlkU3R5bGUuU3R5bGVEZWYudGl0bGVfcF93ZGl0aFxuXHRcdFx0XHQgICAgICAgICAgICAgICAgfSlcblx0XHRcdFx0ICAgICAgICAgICAgfVxuXHRcdFx0XHQgICAgICAgIH1cblx0XHRcdFx0ICAgIH1cblx0XHRcdFx0ICAgIGlmIChuZXdhdHRybGlzdC5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdCAgICAgICAgdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0ID0gbmV3YXR0cmxpc3Q7XG5cdFx0XHRcdCAgICB9XG5cdFx0XHRcdFx0dmFyIHJlcT1bXTtcblx0XHRcdFx0ICAgIGlmICh0aGlzLiRkYXRhLmNsYXNzR3JpZFN0eWxlLlN0eWxlRGVmKSB7XG5cdFx0XHRcdCAgICAgICAgIGlmICh0aGlzLiRkYXRhLmNsYXNzR3JpZFN0eWxlLlN0eWxlRGVmLnNob3dfc3R5bGUubGVuZ3RoID4gMCkge1xuXHRcdFx0XHQgICAgICAgICAgICB2YXIgYXR0cmxpc3QgPSB0aGlzLiRkYXRhLmNsYXNzR3JpZFN0eWxlLlN0eWxlRGVmLnNob3dfc3R5bGVcblx0XHRcdFx0ICAgICAgICAgICAgLy8gJGVsLmZpbmQoJy5hdHRyX2ZpZWxkJykucHJvcCgncmVhZG9ubHknLCB0cnVlKTtcblx0XHRcdFx0ICAgICAgICAgICAgLy8gJGVsLmZpbmQoJy5hdHRyX2ZpZWxkJykucHJvcCgnZGlzYWJsZWQnLCB0cnVlKTtcblx0XHRcdFx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRybGlzdC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgdmFyIGF0dHIgPSBhdHRybGlzdFtpXS5hdHRyc1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgdmFyIGFyID0gYXR0cltqXTtcblx0XHRcdFx0XHRcdFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuYXR0ciwgdmFsOiBhci52YWx1ZT9hci52YWx1ZTonJyB9KTtcblx0XHRcdFx0ICAgICAgICAgICAgICAgIH1cblx0XHRcdFx0ICAgICAgICAgICAgfVxuXHRcdFx0XHQgICAgICAgIH1cblx0XHRcdFx0XHR9XHRcblx0XHRcdFx0XHRcblx0XHRcdFx0XHR2YXIgZXZlbnRsaXN0ID0gdGhpcy4kZGF0YS5jbGFzc0dyaWRTdHlsZS5TdHlsZURlZi5ldmVudDtcblx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhldmVudGxpc3QpO1xuXHRcdFx0XHRcdGlmIChldmVudGxpc3QpIHtcblx0XHRcdFx0XHQgICAgaWYgKGV2ZW50bGlzdC5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV2ZW50bGlzdC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdCAgICAgICAgICAgIGlmIChldmVudGxpc3RbaV0uZXZlbnRfaWQgPT0gJ2JlZm9yZV9vaycpIHtcblx0XHRcdFx0XHQgICAgICAgICAgICAgICAgdGhpcy4kZGF0YS5lZGl0X29rX2V2ZW50ID0gZXZlbnRsaXN0W2ldO1xuXHRcdFx0XHRcdCAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnRsaXN0W2ldLmV2ZW50X2lkID09ICdpbml0aWFsJykge1xuXHRcdFx0XHRcdCAgICAgICAgICAgICAgICB0aGlzLiRkYXRhLmVkaXRfaW5pdGFsX2V2ZW50ID0gZXZlbnRsaXN0W2ldO1xuXHRcdFx0XHRcdCAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnRsaXN0W2ldLmV2ZW50X2lkID09ICdiZWZvcmVfc2VsZWN0X2NvbXBvc2UnKSB7XG5cdFx0XHRcdFx0ICAgICAgICAgICAgICAgIHRoaXMuJGRhdGEuZWRpdF9zZWxlY3RfY29tcG9zZV9ldmVudCA9IGV2ZW50bGlzdFtpXS5zY3JpcF9pZDtcblx0XHRcdFx0XHQgICAgICAgICAgICAgICAgdGhpcy4kZGF0YS5lZGl0X2NvbXBvc2VfY2xzX2lkID0gZXZlbnRsaXN0W2ldLmNvbXBvc2VfY2xzX2lkO1xuXHRcdFx0XHRcdCAgICAgICAgICAgIH1cblx0XHRcdFx0XHQgICAgICAgIH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Ly8gY29uc29sZS5sb2cocmVxKTtcblx0XHRcdFx0XHRpZiAodGhpcy4kZGF0YS5lZGl0X2luaXRhbF9ldmVudCkge1xuXHRcdFx0XHRcdCAgICB2YXIgZXZlbnRpZCA9IHRoaXMuJGRhdGEuZWRpdF9pbml0YWxfZXZlbnQuc2NyaXBfaWQ7XG5cdFx0XHRcdFx0ICAgIHZhciBpbmZvID0ge1xuXHRcdFx0XHRcdCAgICAgICAgZXZlbnRpZDogZXZlbnRpZCxcblx0XHRcdFx0XHQgICAgICAgIGVkdHlwZTogXCIwXCIsXG5cdFx0XHRcdFx0ICAgICAgICBwcm9qZWN0aWQ6ICcnLFxuXHRcdFx0XHRcdCAgICAgICAgcmNsc2lkOiAnJyxcblx0XHRcdFx0XHQgICAgICAgIHJvYmppZDogJycsXG5cdFx0XHRcdFx0ICAgICAgICB1c2VybG9naW46ICcnLFxuXHRcdFx0XHRcdCAgICAgICAgY2xzaWQ6IHRoaXMuJGRhdGEucGFyYW0uY2xzaWQsXG5cdFx0XHRcdFx0ICAgICAgICBvYmppZDogXCJcIixcblx0XHRcdFx0XHQgICAgICAgIGF0dHI6IHJlcSxcblx0XHRcdFx0XHQgICAgfVxuXHRcdFx0XHRcdCAgICB0aGlzLmluaV9EYXRhT2JqUnVuQ3VzdG9tRXZlbnQoaW5mbyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNvbnNvbGUubG9nKHRoaXMuJGRhdGEuY2xhc3NHcmlkU3R5bGUpO1xuXHRcdFx0XHRcdGNvbnNvbGUubG9nKHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdCk7XG5cdFx0XHRcdFx0XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLmj5DnpLpcIixjb250ZW50Olwi5pyq5om+5Yiw5Y+v5pi+56S655qE55qE5bGe5oCnXCIsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRcblx0XHRcdGNsYXNzQXR0cl9leHRCdXR0b24oaW5kZXgsaWluZGV4KXsgIC8v5by55qGG5bGC5pi+56S6IHR5cGU6dG9wIGJvdHRvbSBjZW50ZXIgbGVmdCByaWdodFxuXHRcdFx0XHR2YXIgJHRoaXMgPSB0aGlzO1xuXHRcdFx0XHQkdGhpcy4kZGF0YS5wb3B1cFR5cGUgPSAncmlnaHQnXG5cdFx0XHRcdC8vIG9wZW4g5pa55rOV5Lyg5YWl5Y+C5pWwIOetieWQjOWcqCB1bmktcG9wdXAg57uE5Lu25LiK57uR5a6aIHR5cGXlsZ7mgKdcblx0XHRcdFx0JHRoaXMuJHJlZnMucG9wdXAub3BlbigkdGhpcy5wb3B1cFR5cGUpO1xuXHRcdFx0XHR2YXIgZGF0YV9hdHRyID0gJHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtpbmRleF0uQXR0cltpaW5kZXhdO1xuXHRcdFx0XHQvLyB2YXIgdmFsdWUgPSBhY3Rpb24udmFsdWU7XG5cdFx0XHRcdC8vIHZhciBhY3Rpb24gPXtcImFjdGlvbl90eXBlXCI6XCJvcGVuX2NvbW1vbl9kbGdcIixcInZhbHVlXCI6e1wiY29tbW9uX2RsZ19pZFwiOlwiY2hlY2tfbGlzdFwiLFwiY29uZmlnXCI6e1widGl0bGVcIjpcIueUn+S6p+W3peWNlVwiLFwiYXBwZWFyX3N0eWxlXCI6XCJzaWRlc2xpcFwiLFwid2lkdGhcIjoyNTAsXCJtdWx0aXBsZV9jaG9pY2VcIjpcIjFcIixcIml0ZW1zXCI6W3tcImlkXCI6XCIxMzNENTBENy1ENzk4LTREMkUtQTE1Ri0zMDgzNjUwOTJERjVcIixcIm5hbWVcIjpcIjUxMDA2OTE2NzNcIiwgXCJjaGVja1wiOmZhbHNlfSx7XCJpZFwiOlwiMjI5OTIwMjEtN0QzQi00OTU5LTg2QjctRUYxODRCNTk2QUM2XCIsXCJuYW1lXCI6XCI1MTAwNjkxNjc0XCIsIFwiY2hlY2tcIjpmYWxzZX0se1wiaWRcIjpcIjQ4RkJCRThFLTU5NEQtNDVENS04QzI0LTM4NUM2NjFDNEExQ1wiLFwibmFtZVwiOlwiNTEwMDY5MTY3NVwiLCBcImNoZWNrXCI6ZmFsc2V9LHtcImlkXCI6XCI0RTQyOUM2MC0zMjVBLTQyRUQtQkVBMy1CMzM5N0MwN0NDQTFcIixcIm5hbWVcIjpcIjUxMDA2OTE2NjhcIiwgXCJjaGVja1wiOmZhbHNlfV19fX1cblx0XHRcdFx0Ly8gaWYgKGFjdGlvbi5hY3Rpb25fdHlwZSA9PSAnb3Blbl9jb21tb25fZGxnJykge1xuXHRcdFx0XHQvLyBcdHZhciB2YWx1ZSA9IGFjdGlvbi52YWx1ZTtcblx0XHRcdFx0Ly8gXHRpZih2YWx1ZS5jb21tb25fZGxnX2lkID09ICdjaGVja19saXN0Jyl7XG5cdFx0XHRcdC8vIFx0ICAgJHRoaXMuJGRhdGEuY2hlY2tfbGlzdD0gdmFsdWUuY29uZmlnO1xuXHRcdFx0XHQvLyBcdH1cblx0XHRcdFx0Ly8gfVxuXHRcdFx0XHQvLyB2YXIgcG9wdXBQYXJhbT17XG5cdFx0XHRcdC8vIFx0aW5kZXg6IGluZGV4LFxuXHRcdFx0XHQvLyBcdGlpbmRleDogaWluZGV4LFxuXHRcdFx0XHQvLyBcdGJ1dHRvbl9jYWxsYmFjazpcIlwiLFxuXHRcdFx0XHQvLyBcdHJlcTpcIlwiLFxuXHRcdFx0XHQvLyBcdGRhdGFfYXR0cjpkYXRhX2F0dHJcblx0XHRcdFx0Ly8gfVxuXHRcdFx0XHQvLyAkdGhpcy4kZGF0YS5wb3B1cFBhcmFtPSBwb3B1cFBhcmFtO1xuXHRcdFx0XHQvLyByZXR1cm47XG5cdFx0XHRcdHZhciBiZWZvcmVfY2xpY2tfYnV0dG9uID0gJHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtpbmRleF0uQXR0cltpaW5kZXhdLmJlZm9yZV9jbGlja19idXR0b247XG5cdFx0XHRcdHZhciBidXR0b25fY2FsbGJhY2sgPSAkdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2luZGV4XS5BdHRyW2lpbmRleF0uYnV0dG9uX2NhbGxiYWNrO1xuXHRcdFx0XHRpZighYmVmb3JlX2NsaWNrX2J1dHRvbil7XG5cdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLmj5DnpLpcIixjb250ZW50OlwiYmVmb3JlX2NsaWNrX2J1dHRvbi1ldmVudF9pZOS4uuepuu+8gVwiLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZighYnV0dG9uX2NhbGxiYWNrKXtcblx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIuaPkOekulwiLGNvbnRlbnQ6XCJidXR0b25fY2FsbGJhY2stZXZlbnRfaWTkuLrnqbrvvIFcIixzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy5EYXRhT2JqUnVuQ3VzdG9tRXZlbnRfUmV0dXJuKGJlZm9yZV9jbGlja19idXR0b24sIGRhdGFfYXR0ciwgYnV0dG9uX2NhbGxiYWNrLCBpbmRleCxpaW5kZXgpO1xuXHRcdFx0fSxcblx0XHRcdHBvcHVwQ2hhbmdlKGUpIHsgIFxuXHRcdFx0XHRjb25zb2xlLmxvZygn5b2T5YmN5qih5byP77yaJyArIGUudHlwZSArICcs54q25oCB77yaJyArIGUuc2hvdyk7XG5cdFx0XHR9LFxuXHRcdFx0Y2hlY2tDaGFuZ2UoZSl7IC8v5by55qGGY2hlY2vpgInmi6lcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coZS50YXJnZXQuZGF0YXNldCk7XG5cdFx0XHRcdHZhciBpbmRleCA9IGUudGFyZ2V0LmRhdGFzZXQuaW5kZXg7XG5cdFx0XHRcdHZhciBpc2NoZWNrID0gZS50YXJnZXQuZGF0YXNldC5pc2NoZWNrO1xuXHRcdFx0XHR2YXIgZGF0YSA9IHRoaXMuJGRhdGEuY2hlY2tfbGlzdC5pdGVtcztcblx0XHRcdFx0Ly8gdGhpcy4kZGF0YS5jaGVja19saXN0Lml0ZW1zPVtdO1xuXHRcdFx0XHRpZih0aGlzLiRkYXRhLmNoZWNrX2xpc3QubXVsdGlwbGVfY2hvaWNlPT1cIjBcIil7IC8v5Yik5pat5pe25Y2V6YCJ6L+Y5piv5aSa6YCJXG5cdFx0XHRcdFx0Zm9yKHZhciBpIGluIGRhdGEpe1xuXHRcdFx0XHRcdFx0ZGF0YVtpXS5jaGVjaz1mYWxzZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0ZGF0YVtpbmRleF0uY2hlY2s9aXNjaGVjaz9mYWxzZTp0cnVlO1xuXHRcdFx0XHR0aGlzLiRkYXRhLmNoZWNrX2xpc3QuaXRlbXM9ZGF0YTtcblx0XHRcdFx0XG5cdFx0XHR9LFxuXHRcdFx0cG9wdXBfY2FuY2VsKGUpeyAvL+W8ueahhuWPlua2iFxuXHRcdFx0XHR0aGlzLiRyZWZzLnBvcHVwLmNsb3NlKCk7XG5cdFx0XHR9LFxuXHRcdFx0cG9wdXBfc2F2YShlKXsgLy/lvLnmoYbnoa7lrppcblx0XHRcdFx0dmFyICR0aGlzID0gdGhpcztcblx0XHRcdFx0dmFyIGl0ZW1zID0gJHRoaXMuJGRhdGEuY2hlY2tfbGlzdC5pdGVtcztcblx0XHRcdFx0dmFyIGRhdGE9W107XG5cdFx0XHRcdHZhciBuYW1lPVwiXCI7XG5cdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRpZihpdGVtc1tpXS5jaGVjaz09dHJ1ZSl7XG5cdFx0XHRcdFx0XHRpZihuYW1lKVxuXHRcdFx0XHRcdFx0XHRuYW1lKz0nOyc7XG5cdFx0XHRcdFx0XHRuYW1lKz1pdGVtc1tpXS5uYW1lO1xuXHRcdFx0XHRcdFx0ZGF0YS5wdXNoKHtpZDppdGVtc1tpXS5pZCxuYW1lOml0ZW1zW2ldLm5hbWV9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYoISR0aGlzLiRkYXRhLnBvcHVwUGFyYW0pe1xuXHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi5o+Q56S6XCIsY29udGVudDpcInBvcHVwUGFyYW3kuLrnqbrvvIFcIixzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0JHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFskdGhpcy4kZGF0YS5wb3B1cFBhcmFtLmluZGV4XS5BdHRyWyR0aGlzLiRkYXRhLnBvcHVwUGFyYW0uaWluZGV4XS5WYWx1ZT1uYW1lO1xuXHRcdFx0XHRjb25zb2xlLmxvZyhkYXRhKTtcblx0XHRcdFx0dmFyIGNhbGxiYWNrX2V2ZW50aWQgPSAkdGhpcy4kZGF0YS5wb3B1cFBhcmFtLmJ1dHRvbl9jYWxsYmFjay50cmltKCk7XG5cdFx0XHRcdHZhciBpbmZvID0ge1xuXHRcdFx0XHQgICAgZXZlbnRpZDogY2FsbGJhY2tfZXZlbnRpZCxcblx0XHRcdFx0ICAgIGVkdHlwZTogXCIwXCIsXG5cdFx0XHRcdCAgICBwcm9qZWN0aWQ6ICcnLFxuXHRcdFx0XHQgICAgcmNsc2lkOiAnJyxcblx0XHRcdFx0ICAgIHJvYmppZDogJycsXG5cdFx0XHRcdCAgICB1c2VybG9naW46ICcnLFxuXHRcdFx0XHQgICAgY2xzaWQ6ICR0aGlzLiRkYXRhLnBhcmFtLmNsc2lkLFxuXHRcdFx0XHQgICAgb2JqaWQ6IFwiXCIsXG5cdFx0XHRcdCAgICBhdHRyOiAkdGhpcy4kZGF0YS5wb3B1cFBhcmFtLnJlcSxcblx0XHRcdFx0ICAgIGRhdGFKc29uOiBkYXRhXG5cdFx0XHRcdH1cblx0XHRcdFx0JHRoaXMuRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGluZm8sICR0aGlzLiRkYXRhLnBvcHVwUGFyYW0uZGF0YV9hdHRyKTtcblx0XHRcdFx0dGhpcy4kcmVmcy5wb3B1cC5jbG9zZSgpO1xuXHRcdFx0fSxcblx0XHRcdGNhbmNlbChlKXtcblx0XHRcdFx0dW5pLm5hdmlnYXRlQmFjayh7XG5cdFx0XHRcdFx0ZGVsdGE6MSAvL+i/lOWbnuWxguaVsO+8jDLliJnkuIrkuIrpobVcblx0XHRcdFx0fSk7XG5cdFx0XHR9LFxuXHRcdFx0b250YXAoZSl7IC8v5omr56CB5Yqf6IO9XG5cdFx0XHRcdHZhciAkZWxlID0gZTtcblx0XHRcdFx0Ly9jb25zb2xlLmxvZyhlLnRhcmdldClcblx0XHRcdFx0Z2V0QXBwKCkub25TY2FuKChyZXN1bHQpPT57XG5cdFx0XHRcdFx0Ly9jb25zb2xlLmxvZyhyZXN1bHQuZGVjb2RlZGF0YSk7XG5cdFx0XHRcdFx0dGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZS50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dLlZhbHVlPXJlc3VsdC5kZWNvZGVkYXRhO1xuXHRcdFx0XHRcdHVuaS5oaWRlS2V5Ym9hcmQoKTtcblx0XHRcdFx0XHR0aGlzLm9uZXZlbnQoJGVsZSxyZXN1bHQuZGVjb2RlZGF0YSk7XG5cdFx0XHRcdH0pXG5cdFx0XHR9LFxuXHRcdFx0b25hcnJvdyhpbmRleCxvcGVuKXtcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coaW5kZXgrJy0tJytvcGVuKTtcblx0XHRcdFx0dGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2luZGV4XS5PcGVuPW9wZW49PXRydWU/ZmFsc2U6dHJ1ZTtcblx0XHRcdH0sXG5cdFx0XHRvbmRhdGVUaW1lKGUpIHtcblx0XHRcdFx0Ly9jb25zb2xlLmxvZyhlLnRhcmdldClcblx0XHRcdFx0dGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZS50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dLlZhbHVlPWUudGFyZ2V0LnZhbHVlO1xuXHRcdFx0fSxcblx0XHRcdG9uY2hhbmdlKGUpIHtcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coZS50YXJnZXQpO1xuXHRcdFx0XHR2YXIgdmFsdWU9dGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZS50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dLmRpY3RpdGVtW2UudGFyZ2V0LnZhbHVlXTtcblx0XHRcdFx0dmFyIGRhdGFfYXR0ciA9IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtlLnRhcmdldC5kYXRhc2V0WydpbmRleCddXS5BdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2lpbmRleCddXTtcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coZGF0YV9hdHRyKTtcblx0XHRcdFx0aWYgKHZhbHVlLk5hbWUgIT0gZGF0YV9hdHRyLlZhbHVlKSB7XG5cdFx0XHRcdFx0dGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZS50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dLlZhbHVlPXZhbHVlLk5hbWU7XG5cdFx0XHRcdFx0Ly8gY29uc29sZS5sb2codGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZS50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dLlZhbHVlKTtcblx0XHRcdFx0XHR2YXIgZXZlbnRpZCA9IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtlLnRhcmdldC5kYXRhc2V0WydpbmRleCddXS5BdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2lpbmRleCddXS5hY3Rpb247XG5cdFx0XHRcdFx0aWYgKGV2ZW50aWQpIHtcblx0XHRcdFx0ICAgICAgICAvLyBzZWxmLmV2ZW50X25vX3N1YiA9IDE7XG5cdFx0XHRcdCAgICAgICAgdmFyIHJlcT1bXTtcblx0XHRcdFx0ICAgICAgICB2YXIgYXR0cmxpc3QgPSB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3Q7XG5cdFx0XHRcdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRybGlzdC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHQgICAgICAgIFx0dmFyIGF0dHIgPSBhdHRybGlzdFtpXS5BdHRyO1xuXHRcdFx0XHQgICAgICAgIFx0Zm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdCAgICAgICAgXHRcdHZhciBhciA9IGF0dHJbal07XG5cdFx0XHRcdCAgICAgICAgXHRcdGlmKGFyLlR5cGU9PSflvJXnlKjlr7nosaEo5aSa5LiqKScpXG5cdFx0XHRcdCAgICAgICAgXHRcdFx0aWYoYXIuVmFsdWU9PSfor7cnKSBhci5WYWx1ZT0nJztcblx0XHRcdFx0ICAgICAgICBcdFx0aWYoYXIuVHlwZT09J+W8leeUqOS6uuWRmCcgfHwgYXIuVHlwZT09J+W8leeUqOmhueebricpXG5cdFx0XHRcdCAgICAgICAgXHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWw6IGFyLlZhbElEID9hci5WYWxJRCA6JycgfSk7XG5cdFx0XHRcdCAgICAgICAgXHRcdGVsc2UgaWYoYXIuVHlwZT09J+W4g+WwlOWAvCcpXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbDogYXIuVmFsdWU/JzEnOicwJ30pO1xuXHRcdFx0XHQgICAgICAgIFx0XHRlbHNlXG5cdFx0XHRcdCAgICAgICAgXHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWw6IGFyLlZhbHVlID9hci5WYWx1ZSA6Jyd9KTtcblx0XHRcdFx0ICAgICAgICBcdH1cblx0XHRcdFx0ICAgICAgICB9XG5cdFx0XHRcdCAgICAgICAgdmFyIGluZm8gPSB7XG5cdFx0XHRcdCAgICAgICAgICAgIGV2ZW50aWQ6IGV2ZW50aWQsXG5cdFx0XHRcdCAgICAgICAgICAgIGVkdHlwZTogXCIwXCIsXG5cdFx0XHRcdCAgICAgICAgICAgIHByb2plY3RpZDogJycsXG5cdFx0XHRcdCAgICAgICAgICAgIHJjbHNpZDogJycsXG5cdFx0XHRcdCAgICAgICAgICAgIHJvYmppZDogJycsXG5cdFx0XHRcdCAgICAgICAgICAgIHVzZXJsb2dpbjogJycsXG5cdFx0XHRcdCAgICAgICAgICAgIGNsc2lkOiB0aGlzLiRkYXRhLnBhcmFtLmNsc2lkLFxuXHRcdFx0XHQgICAgICAgICAgICBvYmppZDogXCJcIixcblx0XHRcdFx0ICAgICAgICAgICAgYXR0cjogcmVxLFxuXHRcdFx0XHRcdFx0XHRkYXRhSnNvbjpbXVxuXHRcdFx0XHQgICAgICAgIH1cblx0XHRcdFx0ICAgICAgICB0aGlzLkRhdGFPYmpSdW5DdXN0b21FdmVudChpbmZvKTtcblx0XHRcdFx0ICAgIH1cblx0XHRcdFx0fVxuXHRcdFx0XHRcblx0XHRcdH0sXG5cdFx0XHRvbmNoYW5nZTIoaXRlbSx2YWx1ZSxkZWx2YWx1ZSkge1xuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhpdGVtKTtcblx0XHRcdFx0Ly8gY29uc29sZS5sb2codmFsdWUpO1xuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhkZWx2YWx1ZSk7XG5cdFx0XHRcdC8v5Li656m65pe277yM5riF56m65bGe5oCndmFsdWVcblx0XHRcdFx0aWYoaXRlbS5sZW5ndGg9PTApeyBcblx0XHRcdFx0XHR2YXIgaW5kZXggLGlpbmRleCxkaW5kZXg9MDtcblx0XHRcdFx0XHRmb3IodmFyIGkgaW4gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0KXtcblx0XHRcdFx0XHRcdGZvcih2YXIgaiBpbiB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbaV0uQXR0cil7XG5cdFx0XHRcdFx0XHRcdGlmKGRlbHZhbHVlWzBdLmF0dHIgPT0gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2ldLkF0dHJbal0uTmFtZSl7XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2ldLkF0dHJbal0uVmFsdWU9XCJcIjtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRcblx0XHRcdFx0Zm9yKHZhciB2IGluIGl0ZW0pe1xuXHRcdFx0XHRcdHZhciBpbmRleCAsaWluZGV4LGRpbmRleD0wO1xuXHRcdFx0XHRcdGZvcih2YXIgaSBpbiB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3Qpe1xuXHRcdFx0XHRcdFx0Zm9yKHZhciBqIGluIHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtpXS5BdHRyKXtcblx0XHRcdFx0XHRcdFx0aWYoaXRlbVt2XS5hdHRyID09IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtpXS5BdHRyW2pdLk5hbWUpe1xuXHRcdFx0XHRcdFx0XHRcdGluZGV4PWk7aWluZGV4PWo7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0dmFyIGl0ZW12YWx1ZSA9IGl0ZW1bdl07XG5cdFx0XHRcdFx0dmFyIGRhdGFfYXR0ciA9IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtpbmRleF0uQXR0cltpaW5kZXhdO1xuXHRcdFx0XHRcdFxuXHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKGRhdGFfYXR0cik7XG5cdFx0XHRcdFx0aWYgKGl0ZW12YWx1ZS5OYW1lICE9IGRhdGFfYXR0ci5WYWx1ZSkge1xuXHRcdFx0XHRcdFx0dGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2luZGV4XS5BdHRyW2lpbmRleF0uVmFsdWU9dmFsdWU7XG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyh0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbaW5kZXhdLkF0dHJbaWluZGV4XS5WYWx1ZSk7XG5cdFx0XHRcdFx0XHR2YXIgZXZlbnRpZCA9IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtpbmRleF0uQXR0cltpaW5kZXhdLmFjdGlvbjtcblx0XHRcdFx0XHRcdGlmIChldmVudGlkKSB7XG5cdFx0XHRcdFx0ICAgICAgICAvLyBzZWxmLmV2ZW50X25vX3N1YiA9IDE7XG5cdFx0XHRcdFx0ICAgICAgICB2YXIgcmVxPVtdO1xuXHRcdFx0XHRcdCAgICAgICAgdmFyIGF0dHJsaXN0ID0gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0O1xuXHRcdFx0XHRcdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRybGlzdC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdCAgICAgICAgXHR2YXIgYXR0ciA9IGF0dHJsaXN0W2ldLkF0dHI7XG5cdFx0XHRcdFx0ICAgICAgICBcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdCAgICAgICAgXHRcdHZhciBhciA9IGF0dHJbal07XG5cdFx0XHRcdFx0ICAgICAgICBcdFx0aWYoYXIuVHlwZT09J+W8leeUqOWvueixoSjlpJrkuKopJylcblx0XHRcdFx0XHQgICAgICAgIFx0XHRcdGlmKGFyLlZhbHVlPT0n6K+3JykgYXIuVmFsdWU9Jyc7XG5cdFx0XHRcdFx0ICAgICAgICBcdFx0aWYoYXIuVHlwZT09J+W8leeUqOS6uuWRmCcgfHwgYXIuVHlwZT09J+W8leeUqOmhueebricpXG5cdFx0XHRcdFx0ICAgICAgICBcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbDogYXIuVmFsSUQgP2FyLlZhbElEIDonJyB9KTtcblx0XHRcdFx0XHQgICAgICAgIFx0XHRlbHNlIGlmKGFyLlR5cGU9PSfluIPlsJTlgLwnKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbDogYXIuVmFsdWU/JzEnOicwJ30pO1xuXHRcdFx0XHRcdCAgICAgICAgXHRcdGVsc2UgaWYoYXIuVHlwZT09J+Wtl+WFuCcgfHwgYXIuVHlwZT09J+Wtl+WFuC3lrZfnrKbkuLInIHx8IGFyLlR5cGU9PSflrZflhbgt5pW05pWwJylcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWw6IGl0ZW12YWx1ZS5OYW1lfSk7XG5cdFx0XHRcdFx0ICAgICAgICBcdFx0ZWxzZVxuXHRcdFx0XHRcdCAgICAgICAgXHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWw6IGFyLlZhbHVlID9hci5WYWx1ZSA6Jyd9KTtcblx0XHRcdFx0XHQgICAgICAgIFx0fVxuXHRcdFx0XHRcdCAgICAgICAgfVxuXHRcdFx0XHRcdCAgICAgICAgdmFyIGluZm8gPSB7XG5cdFx0XHRcdFx0ICAgICAgICAgICAgZXZlbnRpZDogZXZlbnRpZCxcblx0XHRcdFx0XHQgICAgICAgICAgICBlZHR5cGU6IFwiMFwiLFxuXHRcdFx0XHRcdCAgICAgICAgICAgIHByb2plY3RpZDogJycsXG5cdFx0XHRcdFx0ICAgICAgICAgICAgcmNsc2lkOiAnJyxcblx0XHRcdFx0XHQgICAgICAgICAgICByb2JqaWQ6ICcnLFxuXHRcdFx0XHRcdCAgICAgICAgICAgIHVzZXJsb2dpbjogJycsXG5cdFx0XHRcdFx0ICAgICAgICAgICAgY2xzaWQ6IHRoaXMuJGRhdGEucGFyYW0uY2xzaWQsXG5cdFx0XHRcdFx0ICAgICAgICAgICAgb2JqaWQ6IFwiXCIsXG5cdFx0XHRcdFx0ICAgICAgICAgICAgYXR0cjogcmVxLFxuXHRcdFx0XHRcdFx0XHRcdGRhdGFKc29uOltdLFxuXHRcdFx0XHRcdCAgICAgICAgfVxuXHRcdFx0XHRcdCAgICAgICAgdGhpcy5EYXRhT2JqUnVuQ3VzdG9tRXZlbnQoaW5mbyk7XG5cdFx0XHRcdFx0ICAgIH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0XG5cdFx0XHRcdFxuXHRcdFx0fSxcblx0XHRcdG9uZXZlbnQoZSxkZWNvZGVkYXRhKXtcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coZS50YXJnZXQpO1xuXHRcdFx0XHR2YXIgZGF0YV9hdHRyID0gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZS50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dO1xuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhkZWNvZGVkYXRhKTtcblx0XHRcdFx0aWYgKGUudGFyZ2V0LnZhbHVlICE9IGRhdGFfYXR0ci5WYWx1ZSkge1xuXHRcdFx0XHRcdHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtlLnRhcmdldC5kYXRhc2V0WydpbmRleCddXS5BdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2lpbmRleCddXS5WYWx1ZT1kZWNvZGVkYXRhP2RlY29kZWRhdGE6ZS50YXJnZXQudmFsdWU7XG5cdFx0XHRcdFx0dmFyIGV2ZW50aWQgPSB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV0uYWN0aW9uO1xuXHRcdFx0XHRcdGlmIChldmVudGlkKSB7XG5cdFx0XHRcdCAgICAgICAgLy8gc2VsZi5ldmVudF9ub19zdWIgPSAxO1xuXHRcdFx0XHQgICAgICAgIHZhciByZXE9W107XG5cdFx0XHRcdCAgICAgICAgdmFyIGF0dHJsaXN0ID0gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0O1xuXHRcdFx0XHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmxpc3QubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0ICAgICAgICBcdHZhciBhdHRyID0gYXR0cmxpc3RbaV0uQXR0cjtcblx0XHRcdFx0ICAgICAgICBcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xuXHRcdFx0XHQgICAgICAgIFx0XHR2YXIgYXIgPSBhdHRyW2pdO1xuXHRcdFx0XHQgICAgICAgIFx0XHRpZihhci5UeXBlPT0n5byV55So5a+56LGhKOWkmuS4qiknKVxuXHRcdFx0XHQgICAgICAgIFx0XHRcdGlmKGFyLlZhbHVlPT0n6K+3JykgYXIuVmFsdWU9Jyc7XG5cdFx0XHRcdCAgICAgICAgXHRcdGlmKGFyLlR5cGU9PSflvJXnlKjkurrlkZgnIHx8IGFyLlR5cGU9PSflvJXnlKjpobnnm64nKVxuXHRcdFx0XHQgICAgICAgIFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsOiBhci5WYWxJRCA/YXIuVmFsSUQgOicnIH0pO1xuXHRcdFx0XHQgICAgICAgIFx0XHRlbHNlIGlmKGFyLlR5cGU9PSfluIPlsJTlgLwnKVxuXHRcdFx0XHRcdFx0XHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWw6IGFyLlZhbHVlPycxJzonMCd9KTtcblx0XHRcdFx0ICAgICAgICBcdFx0ZWxzZVxuXHRcdFx0XHQgICAgICAgIFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsOiBhci5WYWx1ZSA/YXIuVmFsdWUgOicnfSk7XG5cdFx0XHRcdCAgICAgICAgXHR9XG5cdFx0XHRcdCAgICAgICAgfVxuXHRcdFx0XHQgICAgICAgIHZhciBpbmZvID0ge1xuXHRcdFx0XHQgICAgICAgICAgICBldmVudGlkOiBldmVudGlkLFxuXHRcdFx0XHQgICAgICAgICAgICBlZHR5cGU6IFwiMFwiLFxuXHRcdFx0XHQgICAgICAgICAgICBwcm9qZWN0aWQ6ICcnLFxuXHRcdFx0XHQgICAgICAgICAgICByY2xzaWQ6ICcnLFxuXHRcdFx0XHQgICAgICAgICAgICByb2JqaWQ6ICcnLFxuXHRcdFx0XHQgICAgICAgICAgICB1c2VybG9naW46ICcnLFxuXHRcdFx0XHQgICAgICAgICAgICBjbHNpZDogdGhpcy4kZGF0YS5wYXJhbS5jbHNpZCxcblx0XHRcdFx0ICAgICAgICAgICAgb2JqaWQ6IFwiXCIsXG5cdFx0XHRcdCAgICAgICAgICAgIGF0dHI6IHJlcSxcblx0XHRcdFx0XHRcdFx0ZGF0YUpzb246W10sXG5cdFx0XHRcdCAgICAgICAgfVxuXHRcdFx0XHQgICAgICAgIHRoaXMuRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGluZm8sIGRhdGFfYXR0cik7XG5cdFx0XHRcdCAgICB9XG5cdFx0XHRcdH1cblx0XHRcdFx0XG5cdFx0XHR9LFxuXHRcdFx0b25jaGVjayhlKSB7XG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKGUudGFyZ2V0KTtcblx0XHRcdFx0dmFyIGlzY2hlY2tlZCA9IGUudGFyZ2V0LmRhdGFzZXQuaXNjaGVjaz9mYWxzZTp0cnVlO1xuXHRcdFx0XHR2YXIgZGF0YV9hdHRyID0gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZS50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dO1xuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhkYXRhX2F0dHIpO1xuXHRcdFx0XHRpZiAoaXNjaGVja2VkICE9IGRhdGFfYXR0ci5WYWx1ZSkge1xuXHRcdFx0XHRcdHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtlLnRhcmdldC5kYXRhc2V0WydpbmRleCddXS5BdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2lpbmRleCddXS5WYWx1ZT1pc2NoZWNrZWQ7XG5cdFx0XHRcdFx0dmFyIGV2ZW50aWQgPSB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV0uYWN0aW9uO1xuXHRcdFx0XHRcdGlmIChldmVudGlkKSB7XG5cdFx0XHRcdCAgICAgICAgLy8gc2VsZi5ldmVudF9ub19zdWIgPSAxO1xuXHRcdFx0XHQgICAgICAgIHZhciByZXE9W107XG5cdFx0XHRcdCAgICAgICAgdmFyIGF0dHJsaXN0ID0gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0O1xuXHRcdFx0XHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmxpc3QubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0ICAgICAgICBcdHZhciBhdHRyID0gYXR0cmxpc3RbaV0uQXR0cjtcblx0XHRcdFx0ICAgICAgICBcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xuXHRcdFx0XHQgICAgICAgIFx0XHR2YXIgYXIgPSBhdHRyW2pdO1xuXHRcdFx0XHQgICAgICAgIFx0XHRpZihhci5UeXBlPT0n5byV55So5a+56LGhKOWkmuS4qiknKVxuXHRcdFx0XHQgICAgICAgIFx0XHRcdGlmKGFyLlZhbHVlPT0n6K+3JykgYXIuVmFsdWU9Jyc7XG5cdFx0XHRcdCAgICAgICAgXHRcdGlmKGFyLlR5cGU9PSflvJXnlKjkurrlkZgnIHx8IGFyLlR5cGU9PSflvJXnlKjpobnnm64nKVxuXHRcdFx0XHQgICAgICAgIFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsOiBhci5WYWxJRCA/YXIuVmFsSUQgOicnIH0pO1xuXHRcdFx0XHQgICAgICAgIFx0XHRlbHNlIGlmKGFyLlR5cGU9PSfluIPlsJTlgLwnKVxuXHRcdFx0XHRcdFx0XHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWw6IGFyLlZhbHVlPycxJzonMCd9KTtcblx0XHRcdFx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbDogYXIuVmFsdWUgP2FyLlZhbHVlIDonJ30pO1xuXHRcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHQgICAgICAgIFx0fVxuXHRcdFx0XHQgICAgICAgIH1cblx0XHRcdFx0ICAgICAgICB2YXIgaW5mbyA9IHtcblx0XHRcdFx0ICAgICAgICAgICAgZXZlbnRpZDogZXZlbnRpZCxcblx0XHRcdFx0ICAgICAgICAgICAgZWR0eXBlOiBcIjBcIixcblx0XHRcdFx0ICAgICAgICAgICAgcHJvamVjdGlkOiAnJyxcblx0XHRcdFx0ICAgICAgICAgICAgcmNsc2lkOiAnJyxcblx0XHRcdFx0ICAgICAgICAgICAgcm9iamlkOiAnJyxcblx0XHRcdFx0ICAgICAgICAgICAgdXNlcmxvZ2luOiAnJyxcblx0XHRcdFx0ICAgICAgICAgICAgY2xzaWQ6IHRoaXMuJGRhdGEucGFyYW0uY2xzaWQsXG5cdFx0XHRcdCAgICAgICAgICAgIG9iamlkOiBcIlwiLFxuXHRcdFx0XHQgICAgICAgICAgICBhdHRyOiByZXEsXG5cdFx0XHRcdFx0XHRcdGRhdGFKc29uOltdLFxuXHRcdFx0XHQgICAgICAgIH1cblx0XHRcdFx0ICAgICAgICB0aGlzLkRhdGFPYmpSdW5DdXN0b21FdmVudChpbmZvKTtcblx0XHRcdFx0ICAgIH1cblx0XHRcdFx0fVxuXHRcdFx0XHRcblx0XHRcdH0sXG5cdFx0XHRpbnB1dFZhbExpc3RJc0RlbChpbmRleCl7XG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKGluZGV4KTtcbiAgICAgICAgICAgICAgICB0aGlzLiRkYXRhLmlucHV0VmFsTGlzdC5zcGxpY2UoaW5kZXgsIDEpOyAvL+WIoOmZpHRhYlBhZ2Vqc29u55qE5YaF5a65XG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKHRoaXMuJGRhdGEuaW5wdXRWYWxMaXN0KTtcblx0XHRcdH0sXG5cdFx0XHRhZGRyZXNzY2hhbmdlKGUpIHtcblx0XHRcdCAgICAvLyBjb25zb2xlLmxvZyhlLnRhcmdldCk7XG5cdFx0XHQgICAgY29uc29sZS5sb2coZS5kYXRhLmpvaW4oJzsnKSlcblx0XHRcdFx0dGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZS50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dLlZhbHVlPWUuZGF0YS5qb2luKCc7Jyk7XG5cdFx0XHR9LFxuXHRcdFx0Y2xhc3NBdHRyX0FkZFBlcihpbmRleCxpaW5kZXgpe1xuXHRcdFx0XHR2YXIgcGFyYW09e2luZGV4OmluZGV4LGlpbmRleDppaW5kZXh9O1xuXHRcdFx0XHR2YXIgJHRoaXMgPSB0aGlzO1xuXHRcdFx0XHR1bmkubmF2aWdhdGVUbyh7XG5cdFx0XHRcdFx0dXJsOicuLi9zZWxwc24vaW5kZXg/bXVsaXQ9ZmFsc2UmcGFyYW09JytKU09OLnN0cmluZ2lmeShwYXJhbSksXG5cdFx0XHRcdFx0ZXZlbnRzOntcblx0XHRcdFx0XHRcdEFkZFBlcihkYXRhLHBhcmFtKXsgXG5cdFx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKHBhcmFtKTtcblx0XHRcdFx0XHRcdFx0Y29uc29sZS5sb2coZGF0YSk7XG5cdFx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbcGFyYW0uaW5kZXhdLkF0dHJbcGFyYW0uaWluZGV4XS5WYWx1ZT1kYXRhWzBdLk5hbWU7XG5cdFx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbcGFyYW0uaW5kZXhdLkF0dHJbcGFyYW0uaWluZGV4XS5WYWxJRD1kYXRhWzBdLkxvZ2luKyc7JytkYXRhWzBdLk5hbWU7XG5cdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHR2YXIgZXZlbnRpZCA9ICR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbcGFyYW0uaW5kZXhdLkF0dHJbcGFyYW0uaWluZGV4XS5hY3Rpb247XG5cdFx0XHRcdFx0XHRcdGlmIChldmVudGlkKSB7XG5cdFx0XHRcdFx0XHRcdCAgICBldmVudGlkID0gZXZlbnRpZC50cmltKCk7XG5cdFx0XHRcdFx0XHRcdCAgICBpZiAoZXZlbnRpZCkge1xuXHRcdFx0XHRcdFx0XHQgICAgICAgIHZhciBpbmZvID0ge1xuXHRcdFx0XHRcdFx0XHQgICAgICAgICAgICBldmVudGlkOiBldmVudGlkLFxuXHRcdFx0XHRcdFx0XHQgICAgICAgICAgICBlZHR5cGU6IFwiNFwiLFxuXHRcdFx0XHRcdFx0XHQgICAgICAgICAgICBwcm9qZWN0aWQ6IFwiXCIsXG5cdFx0XHRcdFx0XHRcdCAgICAgICAgICAgIHJjbHNpZDogXCJcIixcblx0XHRcdFx0XHRcdFx0ICAgICAgICAgICAgcm9iamlkOiBcIlwiLFxuXHRcdFx0XHRcdFx0XHQgICAgICAgICAgICB1c2VybG9naW46IGRhdGFbMF0uTG9naW4sXG5cdFx0XHRcdFx0XHRcdCAgICAgICAgICAgIGNsc2lkOiAkdGhpcy4kZGF0YS5wYXJhbS5jbHNpZCxcblx0XHRcdFx0XHRcdFx0ICAgICAgICAgICAgb2JqaWQ6IFwiXCIsXG5cdFx0XHRcdFx0XHRcdCAgICAgICAgICAgIGF0dHI6IFtdLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRhSnNvbjpbXSxcblx0XHRcdFx0XHRcdFx0ICAgICAgICB9XG5cdFx0XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0XHRcdC8vIHZhciBkYXRhX2F0dHIgPSAkdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W3BhcmFtLmluZGV4XS5BdHRyW3BhcmFtLmlpbmRleF07XG5cdFx0XHRcdFx0XHRcdCAgICAgICAgJHRoaXMuRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGluZm8pO1xuXHRcdFx0XHRcdFx0XHQgICAgfVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH0sXG5cdFx0XHRjbGFzc0F0dHJfQWRkUmVmKGUpe1xuXHRcdFx0XHRjb25zb2xlLmxvZyhlLnRhcmdldCk7XG5cdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi5o+Q56S6XCIsY29udGVudDpcIuatpOWKn+iDvei/mOacquWunueOsO+8gVwiLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHQvLyB2YXIgdmFsdWU9dGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZS50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dLlJlbENsc1tlLnRhcmdldC52YWx1ZV07XG5cdFx0XHRcdC8vIHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtlLnRhcmdldC5kYXRhc2V0WydpbmRleCddXS5BdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2lpbmRleCddXS5WYWx1ZT12YWx1ZTtcblx0XHRcdH0sXG5cdFx0XHRjbGFzc0F0dHJfQWRkUHJqKGluZGV4LGlpbmRleCl7XG5cdFx0XHRcdHZhciBwYXJhbT17aW5kZXg6aW5kZXgsaWluZGV4OmlpbmRleH07XG5cdFx0XHRcdHZhciAkdGhpcyA9IHRoaXM7XG5cdFx0XHRcdHVuaS5uYXZpZ2F0ZVRvKHtcblx0XHRcdFx0XHR1cmw6Jy4uL3NlbFByai9pbmRleD9yZWxhdGlvbj0tMSZwYXJhbT0nK0pTT04uc3RyaW5naWZ5KHBhcmFtKSxcblx0XHRcdFx0XHRldmVudHM6e1xuXHRcdFx0XHRcdFx0QWRkUGVyKGRhdGEscGFyYW0peyBcblx0XHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2cocGFyYW0pO1xuXHRcdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhkYXRhKTtcblx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtwYXJhbS5pbmRleF0uQXR0cltwYXJhbS5paW5kZXhdLlZhbHVlPWRhdGFbMF0uTmFtZTtcblx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtwYXJhbS5pbmRleF0uQXR0cltwYXJhbS5paW5kZXhdLlZhbElEPWRhdGFbMF0uSUQrJzsnK2RhdGFbMF0uTmFtZTtcblx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdHZhciBldmVudGlkID0gJHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtwYXJhbS5pbmRleF0uQXR0cltwYXJhbS5paW5kZXhdLmFjdGlvbjtcblx0XHRcdFx0XHRcdFx0aWYgKGV2ZW50aWQpIHtcblx0XHRcdFx0XHRcdFx0ICAgIGV2ZW50aWQgPSBldmVudGlkLnRyaW0oKTtcblx0XHRcdFx0XHRcdFx0ICAgIGlmIChldmVudGlkKSB7XG5cdFx0XHRcdFx0XHRcdCAgICAgICAgdmFyIGluZm8gPSB7XG5cdFx0XHRcdFx0XHRcdCAgICAgICAgICAgIGV2ZW50aWQ6IGV2ZW50aWQsXG5cdFx0XHRcdFx0XHRcdCAgICAgICAgICAgIGVkdHlwZTogXCIyXCIsXG5cdFx0XHRcdFx0XHRcdCAgICAgICAgICAgIHByb2plY3RpZDogZGF0YVswXS5JRCxcblx0XHRcdFx0XHRcdFx0ICAgICAgICAgICAgcmNsc2lkOiBcIlwiLFxuXHRcdFx0XHRcdFx0XHQgICAgICAgICAgICByb2JqaWQ6IFwiXCIsXG5cdFx0XHRcdFx0XHRcdCAgICAgICAgICAgIHVzZXJsb2dpbjogXCJcIixcblx0XHRcdFx0XHRcdFx0ICAgICAgICAgICAgY2xzaWQ6ICR0aGlzLiRkYXRhLnBhcmFtLmNsc2lkLFxuXHRcdFx0XHRcdFx0XHQgICAgICAgICAgICBvYmppZDogXCJcIixcblx0XHRcdFx0XHRcdFx0ICAgICAgICAgICAgYXR0cjogW10sXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGRhdGFKc29uOltdLFxuXHRcdFx0XHRcdFx0XHQgICAgICAgIH1cblx0XHRcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHQgICAgICAgIC8vIHZhciBkYXRhX2F0dHIgPSAkdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W3BhcmFtLmluZGV4XS5BdHRyW3BhcmFtLmlpbmRleF07XG5cdFx0XHRcdFx0XHRcdCAgICAgICAgJHRoaXMuRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGluZm8pO1xuXHRcdFx0XHRcdFx0XHQgICAgfVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH0sXG5cdFx0XHQvL+ehruWumlxuXHRcdFx0c2F2YSgpe1xuXHRcdFx0XHRpZiAodGhpcy4kZGF0YS5lZGl0X29rX2V2ZW50KVxuXHRcdFx0XHRcdHRoaXMuT0tEYXRhT2JqUnVuQ3VzdG9tRXZlbnQoKTtcblx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdHRoaXMuYWRkKCk7XG5cdFx0XHR9LFxuXHRcdFx0YWRkKCl7XG5cdFx0XHRcdHVuaS5zaG93TG9hZGluZyh7XG5cdFx0XHRcdFx0dGl0bGU6XCLliqDovb3kuK0uLi5cIixcblx0XHRcdFx0XHRtYXNrOnRydWVcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHZhciByZXE9W107XG5cdFx0XHRcdHZhciBhdHRybGlzdCA9IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdDtcblx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhdHRybGlzdC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdHZhciBhdHRyID0gYXR0cmxpc3RbaV0uQXR0cjtcblx0XHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IGF0dHIubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0XHRcdHZhciBhciA9IGF0dHJbal07XG5cdFx0XHRcdFx0XHRpZihhci5WYWx1ZT09J+ivt+mAieaLqScgfHwgYXIuVmFsdWU9PSfigJTigJTor7fpgInmi6nigJTigJQnKSBhci5WYWx1ZT0nJztcblx0XHRcdFx0XHRcdGlmKGFyLlR5cGU9PSflvJXnlKjlr7nosaEo5aSa5LiqKScpXG5cdFx0XHRcdFx0XHRcdGlmKGFyLlZhbHVlPT0n6K+3JykgYXIuVmFsdWU9Jyc7XG5cdFx0XHRcdCAgICAgICAgaWYoYXIuVHlwZT09J+W8leeUqOS6uuWRmCcgfHwgYXIuVHlwZT09J+W8leeUqOmhueebricpXG5cdFx0XHRcdCAgICAgICAgXHRyZXEucHVzaCh7IG5hbWU6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWxJRCA/YXIuVmFsSUQgOicnIH0pO1xuXHRcdFx0XHQgICAgICAgIGVsc2UgaWYoYXIuVHlwZT09J+W4g+WwlOWAvCcpXG5cdFx0XHRcdFx0XHRcdHJlcS5wdXNoKHsgbmFtZTogYXIuTmFtZSwgdmFsdWU6IGFyLlZhbHVlPycxJzonMCd9KTtcblx0XHRcdFx0ICAgICAgICBlbHNlIGlmKGFyLlR5cGU9PSflrZflhbgnIHx8IGFyLlR5cGU9PSflrZflhbgt5a2X56ym5LiyJyB8fCBhci5UeXBlPT0n5a2X5YW4LeaVtOaVsCcpe1xuXHRcdFx0XHRcdFx0XHRpZihhci5zZWxlY3Q9PXRydWUpeyAvL+WIpOaWreS4i+aLieaYr+WQpuWkmumAiVxuXHRcdFx0XHRcdFx0XHRcdHZhciB2YWxTdHIgPVwiXCI7XG5cdFx0XHRcdFx0XHRcdFx0Zm9yKHZhciB2IGluIGFyLlZhbHVlKXtcblx0XHRcdFx0XHRcdFx0XHRcdGlmKHZhbFN0cilcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsU3RyKz1cIjtcIjtcblx0XHRcdFx0XHRcdFx0XHRcdHZhbFN0cis9YXIuVmFsdWVbdl07XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdHJlcS5wdXNoKHsgbmFtZTogYXIuTmFtZSwgdmFsdWU6IHZhbFN0cn0pO1xuXHRcdFx0XHRcdFx0XHR9ZWxzZVxuXHRcdFx0XHRcdFx0XHRcdHJlcS5wdXNoKHsgbmFtZTogYXIuTmFtZSwgdmFsdWU6IGFyLlZhbHVlfSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHRcdHJlcS5wdXNoKHsgbmFtZTogYXIuTmFtZSwgdmFsdWU6IGFyLlZhbHVlID9hci5WYWx1ZSA6Jyd9KTtcblx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRpZiAoYXIubm90ZW1wdHkgPT0gdHJ1ZSAmJiAhYXIuVmFsdWUpIHtcblx0XHRcdFx0XHRcdC8vIGlmKGFyLk5vdEVtcHR5PT0nMScpe1xuXHRcdFx0XHRcdFx0XHR1bmkuaGlkZUxvYWRpbmcoKTtcblx0XHRcdFx0XHRcdFx0Ly8gdW5pLnNob3dUb2FzdCh7dGl0bGU6YXIuRGlzcE5hbWUrJ+S4jeiDveS4uuepuu+8gScsaWNvbjpcInN1Y2Nlc3NcIixkdXJhdGlvbjozMDAwfSk7XG5cdFx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi5o+Q56S6XCIsY29udGVudDphci5EaXNwTmFtZSsn5LiN6IO95Li656m677yBJyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHR2YXIgZW52aXJvbWVudCA9IHtcblx0XHRcdFx0ICAgICAnZnVuY3Rpb24nOiAnMzAwMCcsIC8vIOWKn+iDveeCuee8luWPt1xuXHRcdFx0XHQgICAgIGNsc19pZDogdGhpcy4kZGF0YS5wYXJhbS5jbHNpZCwgICAgIC8vIOWKn+iDveeCueS4u+aVsOaNruexu+agh+ivhlxuXHRcdFx0XHQgICAgICdidXR0b24nOiAndG9wJywgICAvLyB0b3AvYm90dG9tXG5cdFx0XHRcdCAgICAgYnV0dG9uX25hbWU6ICfmlrDlop4nLFxuXHRcdFx0XHQgICAgIG1hc3Rlcjoge1xuXHRcdFx0XHQgICAgICAgICBjbHNfaWQ6IHRoaXMuJGRhdGEucGFyYW0uY2xzaWQsIFxuXHRcdFx0XHQgICAgIH1cblx0XHRcdFx0fTtcblx0XHRcdFx0XG5cdFx0XHRcdGVudmlyb21lbnQgPSBCYXNlNjQuZW5jb2RlKEpTT04uc3RyaW5naWZ5KGVudmlyb21lbnQpKTsvL+WwhuWtl+espuS4sui9rOaNouS4umJhc2U2NOe8lueggVxuXHRcdFx0XHR2YXIgb2JqX2F0dHI9e307XG5cdFx0XHRcdHJlcS5mb3JFYWNoKGl0ZW09Pntcblx0XHRcdFx0XHRvYmpfYXR0cltpdGVtLm5hbWVdID0gaXRlbS52YWx1ZTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKG9ial9hdHRyKTtcblx0XHRcdFx0Ly8gdmFyIGRhdGFJbmZvPXtcblx0XHRcdFx0Ly8gICAgIGNsYXNzX2lkOiB0aGlzLiRkYXRhLnBhcmFtLmNsc2lkLCBkYXRhX29ial9pZDogJycsIG1hc3RlcmNsc2lkOiAnJyxcblx0XHRcdFx0Ly8gICAgIHJlcTogSlNPTi5zdHJpbmdpZnkocmVxKSwgdXBmaWxlOiBKU09OLnN0cmluZ2lmeShbXSksIHBvc3RfZGF0YTogSlNPTi5zdHJpbmdpZnkoe30pLFxuXHRcdFx0XHQvLyAgICAgY29tcG9zZTogSlNPTi5zdHJpbmdpZnkoW10pLCByZWZkYXRhc3RvcmU6IEpTT04uc3RyaW5naWZ5KFtdKSwgZXh0aW5mbzogSlNPTi5zdHJpbmdpZnkoZW52aXJvbWVudCksIFxuXHRcdFx0XHQvLyBcdG5vdF90cmlnZ2VyX3N5c19ldmVudDogJydcblx0XHRcdFx0Ly8gfTtcblx0XHRcdFx0dmFyIGRhdGFJbmZvPXtcblx0XHRcdFx0XHRjbGFzc19pZDogdGhpcy4kZGF0YS5wYXJhbS5jbHNpZCxcblx0XHRcdFx0XHRjbGFzc19uYW1lOicnLFxuXHRcdFx0XHRcdG1hc3Rlcl9jbHNfaWQ6JycsXG5cdFx0XHRcdFx0bWFzdGVyX29ial9pZDonJyxcblx0XHRcdFx0XHRjcmVhdG9yOicnLFxuXHRcdFx0XHRcdGNyZWF0b3JfbmFtZTonJyxcblx0XHRcdFx0XHRub3RfdHJpZ2dlcl9ldmVudDonJyxcblx0XHRcdFx0XHR1cGRhdGVfZXhpc3Q6JycsXG5cdFx0XHRcdFx0cG9zdF9wcm9jZXNzOicnLFxuXHRcdFx0XHRcdGV4dF9pbmZvOiBlbnZpcm9tZW50LFxuXHRcdFx0XHRcdG9ial9hdHRyOiBvYmpfYXR0clxuXHRcdFx0XHR9O1xuXHRcdFx0XHRjb25zb2xlLmxvZyhkYXRhSW5mbyk7XG5cdFx0XHRcdC8vIHJldHVyblxuXHRcdFx0XHR0aGlzLiRzdG9yZS5kaXNwYXRjaCgnY3JlYXRlRGF0YU9iaicsZGF0YUluZm8pLnRoZW4oc3VjY2Vzcz0+e1xuXHRcdFx0XHRcdGNvbnNvbGUubG9nKHN1Y2Nlc3MpO1xuXHRcdFx0XHRcdHVuaS5oaWRlTG9hZGluZygpO1xuXHRcdFx0XHRcdGlmIChzdWNjZXNzLmVycl9jb2RlID09IDApIHtcblx0XHRcdFx0XHRcdHZhciByZXN1bHQgPSBzdWNjZXNzLnJlc3VsdDtcblx0XHRcdFx0XHRcdC8vIGlmKHJlc3VsdC5yZXN1bHRfdHlwZSA9PSAwKXt9XG5cdFx0XHRcdFx0XHRpZihzdWNjZXNzLnJlc3VsdC5hY3Rpb24pe1xuXHRcdFx0XHRcdFx0XHR2YXIgYWN0aW9uID0gSlNPTi5wYXJzZShzdWNjZXNzLnJlc3VsdC5hY3Rpb24pO1xuXHRcdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhhY3Rpb24pO1xuXHRcdFx0XHRcdFx0XHRpZihhY3Rpb24ucmV0PT0nMCcpe1xuXHRcdFx0XHRcdFx0XHRcdGlmIChhY3Rpb24ucmV0ICE9IDApIHtcblx0XHRcdFx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi5o+Q56S6XCIsY29udGVudDon5omn6KGM6ISa5pys5aSx6LSl77yMJyArIGFjdGlvbi5yZXN1bHQsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdGlmIChhY3Rpb24uaW5mbykge1xuXHRcdFx0XHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLmj5DnpLpcIixjb250ZW50OifmiafooYzohJrmnKzlpLHotKXvvIwnICsgYWN0aW9uLmluZm8sc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdGlmKGFjdGlvbi5yZXN1bHRfdHlwZT09JzAnKXtcblx0XHRcdFx0XHRcdFx0XHRcdHVuaS5zaG93VG9hc3Qoe3RpdGxlOmFjdGlvbi5yZXN1bHQsaWNvbjpcInN1Y2Nlc3NcIixkdXJhdGlvbjozMDAwfSk7XG5cdFx0XHRcdFx0XHRcdFx0fSBcblx0XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0XHQvLyBcIntcInJldFwiOjAsIFwicmVzdWx0X3R5cGVcIjowLCBcInJlc3VsdFwiOlwi5Yib5bu65oiQ5YqfMTIzMTIzMTIzXCIsXCJpbmZvXCI6XCJcIn1cIlxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2Vcblx0XHRcdFx0XHRcdFx0dW5pLnNob3dUb2FzdCh7dGl0bGU6XCLliJvlu7rmiJDlip/vvIFcIixpY29uOlwic3VjY2Vzc1wiLGR1cmF0aW9uOjMwMDB9KTtcblx0XHRcdFx0XHRcdC8v5Yi35pawXG5cdFx0XHRcdFx0XHR1bmkucmVkaXJlY3RUbyh7XG5cdFx0XHRcdFx0XHRcdHVybDonLi4vbW9kYWwvMzAxOD9wYXJhbT0nK0pTT04uc3RyaW5naWZ5KHRoaXMuJGRhdGEucGFyYW0pK1wiJnRpdGxlbmFtZT1cIit0aGlzLiRkYXRhLnRpdGxlXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdC8vIHRoaXMuY2xhc3NfYXR0cl9pbml0KCk7XG5cdFx0XHRcdFx0fWVsc2V7XG5cdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivr1wiLGNvbnRlbnQ6c3VjY2Vzcy5lcnJfbXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSkuY2F0Y2goZXg9Pntcblx0XHRcdFx0XHRjb25zb2xlLmxvZyhleCk7XG5cdFx0XHRcdFx0dW5pLmhpZGVMb2FkaW5nKCk7XG5cdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLmj5DnpLpcIixjb250ZW50OmV4LmVyck1zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9LFxuXHRcdFx0aW5pX0RhdGFPYmpSdW5DdXN0b21FdmVudChpbmZvKXtcblx0XHRcdFx0dmFyIHBhcmFtID0ge1xuXHRcdFx0XHQgICAgRWRpdFN0eWxlOiB0aGlzLiRkYXRhLnBhcmFtLkVkaXRfZGxnLk5hbWUsXG5cdFx0XHRcdCAgICBWaWV3U3R5bGU6IHRoaXMuJGRhdGEucGFyYW0uRWRpdF9kbGcuTmFtZSxcblx0XHRcdFx0ICAgIE5vdFRyaWdnZXJTeXNFdmVudDogMCxcblx0XHRcdFx0ICAgIGVudmlyb21lbnQ6IHtcblx0XHRcdFx0ICAgICAgICAnZnVuY3Rpb24nOiAnMzAwMCcsIC8vIOWKn+iDveeCuee8luWPt1xuXHRcdFx0XHQgICAgICAgIGNsc19pZDogdGhpcy4kZGF0YS5wYXJhbS5jbHNpZCwgICAgIC8vIOWKn+iDveeCueS4u+aVsOaNruexu+agh+ivhlxuXHRcdFx0XHQgICAgICAgICdidXR0b24nOiAndG9wJywgICAvLyB0b3AvYm90dG9tXG5cdFx0XHRcdCAgICAgICAgYnV0dG9uX25hbWU6ICfmlrDlop4nLFxuXHRcdFx0XHQgICAgICAgIG1hc3Rlcjoge1xuXHRcdFx0XHQgICAgICAgICAgICBjbHNfaWQ6IHRoaXMuJGRhdGEucGFyYW0uY2xzaWQsIC8vIGJ1dHRvbj1ib3R0b23ml7YgbWFzdGVy55qEY2xzX2lkXG5cdFx0XHRcdCAgICAgICAgICAgIC8vb2JqX2lkOiAnJyAgLy8gYnV0dG9uPWJvdHRvbeaXtiBtYXN0ZXLnmoRvYmpfaWRcblx0XHRcdFx0ICAgICAgICB9XG5cdFx0XHRcdCAgICB9XG5cdFx0XHRcdH1cblx0XHRcdFx0dmFyIGlucHV0cGFyYW1ldGVyID0gJyc7XG5cdFx0XHRcdHZhciBnbG9iYWxfYXR0ciA9ICcnO1xuXHRcdFx0XHRcblx0XHRcdFx0cGFyYW0uZW52aXJvbWVudCA9IEJhc2U2NC5lbmNvZGUoSlNPTi5zdHJpbmdpZnkocGFyYW0uZW52aXJvbWVudCkpOy8v5bCG5a2X56ym5Liy6L2s5o2i5Li6YmFzZTY057yW56CBXG5cdFx0XHRcdHZhciBvYmpfYXR0cj17fTtcblx0XHRcdFx0aW5mby5hdHRyLmZvckVhY2goaXRlbT0+e1xuXHRcdFx0XHRcdG9ial9hdHRyW2l0ZW0uYXR0cl0gPSBpdGVtLnZhbDtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKG9ial9hdHRyKTtcblx0XHRcdFx0Ly8gdmFyIGRhdGFJbmZvID0ge1xuICAgIC8vICAgICAgICAgICAgICAgICBlZHR5cGU6IGluZm8uZWR0eXBlLCBldmVudGlkOiBpbmZvLmV2ZW50aWQsIHByb2plY3RpZDogaW5mby5wcm9qZWN0aWQsXG4gICAgLy8gICAgICAgICAgICAgICAgIHJjbHNpZDogaW5mby5yY2xzaWQsIHJvYmppZDogaW5mby5yb2JqaWQsIHVzZXJsb2dpbjogaW5mby51c2VybG9naW4sIGNsc2lkOiBpbmZvLmNsc2lkLCBvYmppZDogaW5mby5vYmppZCxcbiAgICAvLyAgICAgICAgICAgICAgICAgYXR0cjogSlNPTi5zdHJpbmdpZnkoaW5mby5hdHRyKSwgZXh0aW5mbzogSlNPTi5zdHJpbmdpZnkocGFyYW0uZW52aXJvbWVudCksIGlucHV0cGFyYW1ldGVyOiBpbnB1dHBhcmFtZXRlciwgZ2xvYmFsX2F0dHI6IGdsb2JhbF9hdHRyXG4gICAgLy8gICAgICAgICAgICAgfVxuXHRcdFx0XHRpZighaW5mby5ldmVudGlkLmluY2x1ZGVzKCd7JykpIGluZm8uZXZlbnRpZCA9ICd7JytpbmZvLmV2ZW50aWQrJ30nO1xuXHRcdFx0XHR2YXIgZGF0YUluZm89e1xuXHRcdFx0XHQgIGVkX3R5cGU6IGluZm8uZWR0eXBlLFxuXHRcdFx0XHQgIHN0YXJ0X3RyYW5zYWN0aW9uOiAnJyxcblx0XHRcdFx0ICBjbGFzc19pZDogaW5mby5jbHNpZCxcblx0XHRcdFx0ICBjbGFzc19uYW1lOiAnJyxcblx0XHRcdFx0ICBldmVudF9pZDogaW5mby5ldmVudGlkLFxuXHRcdFx0XHQgIGV2ZW50X25hbWU6ICcnLFxuXHRcdFx0XHQgIGRhdGFfb2JqX2lkOiBpbmZvLm9iamlkLFxuXHRcdFx0XHQgIG9ial9hdHRyOiBvYmpfYXR0cixcblx0XHRcdFx0ICBwcmpfaWQ6IGluZm8ucHJvamVjdGlkLFxuXHRcdFx0XHQgIHJlZl9jbHNfaWQ6IGluZm8ucmNsc2lkLFxuXHRcdFx0XHQgIHJlbF9vYmpfaWQ6IGluZm8ucm9iamlkLFxuXHRcdFx0XHQgIHVzZXJfbG9naW46IGluZm8udXNlcmxvZ2luLFxuXHRcdFx0XHQgIGRhdGFfanNvbjogJycsXG5cdFx0XHRcdCAgY29tcG9zZV9pbmZvOiAnJyxcblx0XHRcdFx0ICBleHRfaW5mbzogcGFyYW0uZW52aXJvbWVudCxcblx0XHRcdFx0ICBnbG9iYWxfYXR0cjogZ2xvYmFsX2F0dHIsXG5cdFx0XHRcdCAgaW5wdXRfcGFyYW06IGlucHV0cGFyYW1ldGVyLFxuXHRcdFx0XHR9O1xuXHRcdFx0XHRjb25zb2xlLmxvZyhkYXRhSW5mbyk7XG5cdFx0XHRcdC8vIHJldHVybjtcblx0XHRcdFx0dGhpcy4kc3RvcmUuZGlzcGF0Y2goJ3J1bkN1c3RvbUV2ZW50JyxkYXRhSW5mbykudGhlbihzdWNjZXNzPT57XG5cdFx0XHRcdFx0Y29uc29sZS5sb2coc3VjY2Vzcyk7XG5cdFx0XHRcdFx0aWYgKHN1Y2Nlc3MuZXJyX2NvZGUgPT0gMCkge1xuXHRcdFx0XHRcdFx0dmFyIGRhdGEgPSBzdWNjZXNzLnJlc3VsdDtcblx0XHRcdFx0XHRcdGlmKGRhdGEuYWN0aW9uKXtcblx0XHRcdFx0XHRcdFx0dmFyIGFjdGlvbmxpc3QgPSBkYXRhLmFjdGlvbjtcblx0XHRcdFx0XHRcdFx0aWYgKGFjdGlvbmxpc3QpIHtcblx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IGFjdGlvbmxpc3QubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBhY3Rpb24gPSBhY3Rpb25saXN0W2pdO1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIGFjdGlvbl90eXBlID0gYWN0aW9uLmFjdGlvbl90eXBlO1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIHZhbHVlID0gYWN0aW9uLnZhbHVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKGFjdGlvbl90eXBlID09ICdzZXRfZGxnX2F0dHInKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmICh2YWx1ZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKHZhbHVlKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBhID0gMDsgYSA8IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdC5sZW5ndGg7IGErKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBsID0gMDsgbCA8IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFthXS5BdHRyLmxlbmd0aDsgbCsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGNhID0gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2FdLkF0dHJbbF07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKHZhbHVlW2ldLmF0dHIgID09IGNhLk5hbWUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGNhLlR5cGU9PSflrZflhbgnIHx8IGNhLlR5cGU9PSflrZflhbgt5a2X56ym5LiyJyB8fCBjYS5UeXBlPT0n5a2X5YW4LeaVtOaVsCcpe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgZGljdEl0ZW1MaXN0PVtdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IodmFyIGQgaW4gdmFsdWVbaV0uY2hvaWNlX2xpc3Qpe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBsaXN0X3ZhbCA9dmFsdWVbaV0uY2hvaWNlX2xpc3RbZF07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGljdEl0ZW1MaXN0LnB1c2goe1wiQ05fU19OQU1FXCI6bGlzdF92YWwsXCJOYW1lXCI6bGlzdF92YWwsXCJsYWJlbFwiOmxpc3RfdmFsLFwidmFsdWVcIjpsaXN0X3ZhbH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhLmRpY3RpdGVtID0gZGljdEl0ZW1MaXN0O1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBhdHRyW2pdLmRpY3RpdGVtID0gdmFsW2ldLmNob2ljZV9saXN0O1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fWVsc2V7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhLlZhbHVlID0gdmFsdWVbaV0udmFsdWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBsZW5ndGggPSAwO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCF0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5maWx0ZXIoZnVuY3Rpb24gKHMpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHZhbHVlW2ldLmF0dHIgPT0gcy5hdHRyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9KS5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0bGVuZ3RoID0gMTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUucHVzaCh2YWx1ZVtpXSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAobGVuZ3RoID09IDApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCB0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICh0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZVtqXS5hdHRyID09IHZhbHVlW2ldLmF0dHIpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlW2pdLnZhbHVlID0gdmFsdWVbaV0udmFsdWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoYWN0aW9uX3R5cGUgPT0gJ29wZW5fc2VsZWN0X3VzZXJkbGcnKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vMi4yXCIsY29udGVudDpcIm9wZW5fc2VsZWN0X3VzZXJkbGfov5nkuKphY3Rpb25fdHlwZei/mOacquWkhOeQhu+8gVwiLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gZWxzZSBpZiAoYWN0aW9uX3R5cGUgPT0gJ3RpcF9kbGcnKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gfVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0fWVsc2V7XG5cdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzJcIixjb250ZW50OnN1Y2Nlc3MuZXJyX21zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pLmNhdGNoKGV4PT57XG5cdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coZXgpO1xuXHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vMi4xXCIsY29udGVudDpleC5lcnJNc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSxcblx0XHQgICAgRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGluZm8sZGF0YV9hdHRyKXtcblx0XHRcdFx0dmFyICR0aGlzID0gdGhpcztcblx0XHQgICAgXHR2YXIgZW52aXJvbWVudCA9IHtcblx0XHQgICAgXHQgICAgJ2Z1bmN0aW9uJzogJzMwMDAnLCAvLyDlip/og73ngrnnvJblj7dcblx0XHQgICAgXHQgICAgY2xzX2lkOiB0aGlzLiRkYXRhLnBhcmFtLmNsc2lkLCAgICAgLy8g5Yqf6IO954K55Li75pWw5o2u57G75qCH6K+GXG5cdFx0ICAgIFx0ICAgICdidXR0b24nOiAndG9wJywgICAvLyB0b3AvYm90dG9tXG5cdFx0ICAgIFx0ICAgIGJ1dHRvbl9uYW1lOiAn5paw5aKeJyxcblx0XHQgICAgXHQgICAgbWFzdGVyOiB7XG5cdFx0ICAgIFx0ICAgICAgICBjbHNfaWQ6IHRoaXMuJGRhdGEucGFyYW0uY2xzaWQsIC8vIGJ1dHRvbj1ib3R0b23ml7YgbWFzdGVy55qEY2xzX2lkXG5cdFx0ICAgIFx0ICAgICAgICAvL29ial9pZDogJycgIC8vIGJ1dHRvbj1ib3R0b23ml7YgbWFzdGVy55qEb2JqX2lkXG5cdFx0ICAgIFx0ICAgIH1cblx0XHQgICAgXHR9O1xuXHRcdCAgICBcdGlmKGRhdGFfYXR0cil7XG5cdFx0XHRcdFx0ZW52aXJvbWVudC5lZGl0X2RsZyA9IHtcblx0XHRcdFx0XHQgICAgdHlwZTogJ3NtYWxsJywvL+Wwj+eql+WPo1xuXHRcdFx0XHRcdCAgICBjbGFzc19pZDogdGhpcy4kZGF0YS5wYXJhbS5jbHNpZCwvL+W9k+WJjeaVsOaNruexu2lkXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmIChkYXRhX2F0dHIpIHtcblx0XHRcdFx0XHQgICAgZW52aXJvbWVudC5lZGl0X2RsZy5mb3JtX2NvbnRyb2wgPSB7Ly/miYDlsZ7nmoTooajljZXmjqfku7Zcblx0XHRcdFx0XHQgICAgICAgIG5hbWU6IGRhdGFfYXR0ci5OYW1lLC8v5a2X5q615bGe5oCnXG5cdFx0XHRcdFx0ICAgICAgICB0ZXh0OiBkYXRhX2F0dHIuRGlzcE5hbWUsLy/mmL7npLrmlofmnKxcblx0XHRcdFx0XHQgICAgICAgIGdyb3VwX25hbWU6IGRhdGFfYXR0ci5Hcm91cE5hbWUsLy/lsZ7mgKfnu4Rcblx0XHRcdFx0XHQgICAgICAgIHR5cGU6IGRhdGFfYXR0ci5UeXBlLC8v5a2X5q6157G75Z6LXG5cdFx0XHRcdFx0ICAgICAgICByZWFkb25seTogZGF0YV9hdHRyLlJlYWRPbmx5LC8v5piv5ZCm5Y+q6K+7XG5cdFx0XHRcdFx0ICAgICAgICBidXR0b25faW1nOiBkYXRhX2F0dHIuYnV0dG9uX2ltZywvL+W8leeUqOaMiemSrueahOWbvuagh1xuXHRcdFx0XHRcdCAgICAgICAgYnV0dG9uX3Rvb2x0aXA6IGRhdGFfYXR0ci5idXR0b25fdG9vbHRpcC8v5byV55So5oyJ6ZKu55qEdG9vbHRpcFxuXHRcdFx0XHRcdCAgICB9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0ICAgIFx0XG5cdFx0ICAgIFx0Ly8gdmFyIGRhdGFJbmZvID0ge1xuXHRcdCAgICBcdC8vICAgICBlZHR5cGU6IGluZm8uZWR0eXBlLCBldmVudGlkOiBpbmZvLmV2ZW50aWQsIHByb2plY3RpZDogaW5mby5wcm9qZWN0aWQucmVwbGFjZSgneycsJycpLnJlcGxhY2UoJ30nLCcnKSxcblx0XHQgICAgXHQvLyAgICAgcmNsc2lkOiBpbmZvLnJjbHNpZCwgcm9iamlkOiBpbmZvLnJvYmppZCwgdXNlcmxvZ2luOiBpbmZvLnVzZXJsb2dpbiwgY2xzaWQ6IGluZm8uY2xzaWQsIG9iamlkOiBpbmZvLm9iamlkLFxuXHRcdCAgICBcdC8vICAgICBhdHRyOiBKU09OLnN0cmluZ2lmeShpbmZvLmF0dHIpLCBleHRpbmZvOiBKU09OLnN0cmluZ2lmeShlbnZpcm9tZW50KSwgaW5wdXRwYXJhbWV0ZXI6IFwiXCIsXG5cdFx0ICAgIFx0Ly8gXHRnbG9iYWxfYXR0cjogSlNPTi5zdHJpbmdpZnkodGhpcy4kZGF0YS5nbG9iYWxfYXR0ciksIGRhdGFKc29uOkpTT04uc3RyaW5naWZ5KGluZm8uZGF0YUpzb24pXG5cdFx0ICAgIFx0Ly8gfVxuXHRcdFx0XHRlbnZpcm9tZW50ID0gQmFzZTY0LmVuY29kZShKU09OLnN0cmluZ2lmeShlbnZpcm9tZW50KSk7Ly/lsIblrZfnrKbkuLLovazmjaLkuLpiYXNlNjTnvJbnoIFcblx0XHRcdFx0dmFyIGdsb2JhbF9hdHRyID0gQmFzZTY0LmVuY29kZShKU09OLnN0cmluZ2lmeSh0aGlzLiRkYXRhLmdsb2JhbF9hdHRyKSk7Ly/lsIblrZfnrKbkuLLovazmjaLkuLpiYXNlNjTnvJbnoIFcblx0XHRcdFx0aWYoaW5mby5kYXRhSnNvbilcblx0XHRcdFx0XHRpbmZvLmRhdGFKc29uID0gQmFzZTY0LmVuY29kZShKU09OLnN0cmluZ2lmeShpbmZvLmRhdGFKc29uKSk7Ly/lsIblrZfnrKbkuLLovazmjaLkuLpiYXNlNjTnvJbnoIFcblx0XHQgICAgXHR2YXIgb2JqX2F0dHI9e307XG5cdFx0ICAgIFx0aW5mby5hdHRyLmZvckVhY2goaXRlbT0+e1xuXHRcdCAgICBcdFx0b2JqX2F0dHJbaXRlbS5hdHRyXSA9IGl0ZW0udmFsO1xuXHRcdCAgICBcdH0pO1xuXHRcdFx0XHRpZighaW5mby5ldmVudGlkLmluY2x1ZGVzKCd7JykpIGluZm8uZXZlbnRpZCA9ICd7JytpbmZvLmV2ZW50aWQrJ30nO1xuXHRcdFx0XHR2YXIgZGF0YUluZm89e1xuXHRcdFx0XHQgIGVkX3R5cGU6IGluZm8uZWR0eXBlLFxuXHRcdFx0XHQgIHN0YXJ0X3RyYW5zYWN0aW9uOiAnJyxcblx0XHRcdFx0ICBjbGFzc19pZDogaW5mby5jbHNpZCxcblx0XHRcdFx0ICBjbGFzc19uYW1lOiAnJyxcblx0XHRcdFx0ICBldmVudF9pZDogaW5mby5ldmVudGlkLFxuXHRcdFx0XHQgIGV2ZW50X25hbWU6ICcnLFxuXHRcdFx0XHQgIGRhdGFfb2JqX2lkOiBpbmZvLm9iamlkLFxuXHRcdFx0XHQgIG9ial9hdHRyOiBvYmpfYXR0cixcblx0XHRcdFx0ICBwcmpfaWQ6IGluZm8ucHJvamVjdGlkLFxuXHRcdFx0XHQgIHJlZl9jbHNfaWQ6IGluZm8ucmNsc2lkLFxuXHRcdFx0XHQgIHJlbF9vYmpfaWQ6IGluZm8ucm9iamlkLFxuXHRcdFx0XHQgIHVzZXJfbG9naW46IGluZm8udXNlcmxvZ2luLFxuXHRcdFx0XHQgIGRhdGFfanNvbjogaW5mby5kYXRhSnNvbixcblx0XHRcdFx0ICBjb21wb3NlX2luZm86ICcnLFxuXHRcdFx0XHQgIGV4dF9pbmZvOiBlbnZpcm9tZW50LFxuXHRcdFx0XHQgIGdsb2JhbF9hdHRyOiBnbG9iYWxfYXR0cixcblx0XHRcdFx0ICBpbnB1dF9wYXJhbTogJycsXG5cdFx0XHRcdH07XG5cdFx0XHRcdGNvbnNvbGUubG9nKGRhdGFJbmZvKTtcblx0XHRcdFx0Ly8gcmV0dXJuO1xuXHRcdCAgICBcdHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdydW5DdXN0b21FdmVudCcsZGF0YUluZm8pLnRoZW4oc3VjY2Vzcz0+e1xuXHRcdCAgICBcdFx0Y29uc29sZS5sb2coc3VjY2Vzcyk7XG5cdFx0ICAgIFx0XHRpZiAoc3VjY2Vzcy5lcnJfY29kZSA9PSAwKSB7XG5cdFx0ICAgIFx0XHRcdHZhciBkYXRhID0gc3VjY2Vzcy5yZXN1bHQ7XG5cdFx0ICAgIFx0XHRcdHZhciBhY3Rpb25saXN0ID0gZGF0YS5hY3Rpb247XG5cdFx0XHRcdFx0XHRcdFx0XHRcblx0XHQgICAgXHRcdFx0aWYgKGFjdGlvbmxpc3QpIHtcblx0XHRcdFx0XHRcdFx0Y29uc29sZS5sb2coYWN0aW9ubGlzdCk7XG5cdFx0ICAgIFx0XHRcdCAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFjdGlvbmxpc3QubGVuZ3RoOyBpKyspIHtcblx0XHQgICAgXHRcdFx0ICAgICAgICB2YXIgYWN0aW9uID0gYWN0aW9ubGlzdFtpXTtcblx0XHQgICAgXHRcdFx0ICAgICAgICBpZiAoYWN0aW9uLmFjdGlvbl90eXBlID09ICdzZXRfZGxnX2F0dHInKSB7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgIHZhciByZXN1bHQgPSBhY3Rpb24udmFsdWU7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdWx0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChyZXN1bHRbaV0uY2hvaWNlX2xpc3QpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBjID0gMDsgYyA8ICR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3QubGVuZ3RoOyBjKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBhdHRyID0gJHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtjXS5BdHRyO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGF0dHJbal0uTmFtZT09cmVzdWx0W2ldLmF0dHIpe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGF0dHJbal0uVHlwZT09J+Wtl+WFuCcgfHwgYXR0cltqXS5UeXBlPT0n5a2X5YW4LeWtl+espuS4sicgfHwgYXR0cltqXS5UeXBlPT0n5a2X5YW4LeaVtOaVsCcpe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGRpY3RJdGVtTGlzdD1bXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvcih2YXIgZCBpbiByZXN1bHRbaV0uY2hvaWNlX2xpc3Qpe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgdmFsID1yZXN1bHRbaV0uY2hvaWNlX2xpc3RbZF07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRpY3RJdGVtTGlzdC5wdXNoKHtcIkNOX1NfTkFNRVwiOnZhbCxcIk5hbWVcIjp2YWwsXCJsYWJlbFwiOnZhbCxcInZhbHVlXCI6dmFsfSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhdHRyW2pdLmRpY3RpdGVtID0gZGljdEl0ZW1MaXN0O1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gYXR0cltqXS5kaWN0aXRlbSA9IHJlc3VsdFtpXS5jaG9pY2VfbGlzdDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICB9XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICBmb3IgKHZhciBjID0gMDsgYyA8ICR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3QubGVuZ3RoOyBjKyspIHtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgIFx0dmFyIGF0dHIgPSAkdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2NdLkF0dHI7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICBcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc29sZS5sb2coYXR0cltqXS5OYW1lKyc9PScrcmVzdWx0W2ldLmF0dHIpO1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgXHRcdGlmKGF0dHJbal0uTmFtZT09cmVzdWx0W2ldLmF0dHIpe1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgXHRcdFx0YXR0cltqXS5WYWx1ZSA9IHJlc3VsdFtpXS52YWx1ZTtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgIFx0XHR9XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICBcdH1cblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgIH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGxlbmd0aCA9IDA7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICBpZiAoISR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5maWx0ZXIoZnVuY3Rpb24gKHMpIHtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0W2ldLmF0dHIgPT0gcy5hdHRyXG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICB9KS5sZW5ndGgpIHtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgICAgICBsZW5ndGggPSAxO1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgICAgICR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5wdXNoKHJlc3VsdFtpXSk7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICB9XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICBpZiAobGVuZ3RoID09IDApIHtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8ICR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5sZW5ndGg7IGorKykge1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlW2pdLmF0dHIgPT0gcmVzdWx0W2ldLmF0dHIpIHtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZVtqXS52YWx1ZSA9IHJlc3VsdFtpXS52YWx1ZTtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgfVxuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgICAgIH1cblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgIH1cblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgfVxuXHRcdCAgICBcdFx0XHQgICAgICAgIH0gZWxzZSBpZiAoZGF0YS5hY3Rpb25baV0uYWN0aW9uX3R5cGUgPT0gJ3NldF9nbG9iYWxfYXR0cicpIHtcblx0XHRcdFx0XHRcdCAgICAgICAgICAgICR0aGlzLiRkYXRhLmdsb2JhbF9hdHRyID0gZGF0YS5hY3Rpb25baV0udmFsdWUgfHwgW107XG5cdFx0XHRcdFx0XHQgICAgICAgIH1cblx0XHQgICAgXHRcdFx0ICAgIH1cblx0XHQgICAgXHRcdFx0fVxuXHRcdCAgICBcdFx0XHRcblx0XHQgICAgXHRcdFx0aWYgKGRhdGEucmVzdWx0KSB7XG5cdFx0ICAgIFx0XHRcdCAgICB2YXIgcmVzdWx0ID0gZGF0YS5yZXN1bHQ7XG5cdFx0ICAgIFx0XHRcdCAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdC5sZW5ndGg7IGkrKykge1xuXHRcdCAgICBcdFx0XHQgICAgICAgIGZvciAodmFyIGMgPSAwOyBjIDwgJHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdC5sZW5ndGg7IGMrKykge1xuXHRcdCAgICBcdFx0XHQgICAgICAgIFx0dmFyIGF0dHIgPSAkdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2NdLkF0dHI7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgXHRmb3IgKHZhciBqID0gMDsgaiA8IGF0dHIubGVuZ3RoOyBqKyspIHtcblx0XHQgICAgXHRcdFx0ICAgICAgICBcdFx0aWYoYXR0cltqXS5OYW1lPT1yZXN1bHRbaV0uYXR0cil7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgXHRcdFx0YXR0cltqXS5WYWx1ZSA9IHJlc3VsdFtpXS52YWx1ZTtcblx0XHQgICAgXHRcdFx0ICAgICAgICBcdFx0fVxuXHRcdCAgICBcdFx0XHQgICAgICAgIFx0fVxuXHRcdCAgICBcdFx0XHQgICAgICAgIH1cblx0XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0XHR2YXIgbGVuZ3RoID0gMDtcblx0XHQgICAgXHRcdFx0ICAgICAgICBpZiAoISR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5maWx0ZXIoZnVuY3Rpb24gKHMpIHtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFtpXS5hdHRyID09IHMuYXR0clxuXHRcdCAgICBcdFx0XHQgICAgICAgIH0pLmxlbmd0aCkge1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICBsZW5ndGggPSAxO1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUucHVzaChyZXN1bHRbaV0pO1xuXHRcdCAgICBcdFx0XHQgICAgICAgIH1cblx0XHQgICAgXHRcdFx0ICAgICAgICBpZiAobGVuZ3RoID09IDApIHtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCAkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUubGVuZ3RoOyBqKyspIHtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgIGlmICgkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmVbal0uYXR0ciA9PSByZXN1bHRbaV0uYXR0cikge1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgICAgICR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZVtqXS52YWx1ZSA9IHJlc3VsdFtpXS52YWx1ZTtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgIH1cblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgfVxuXHRcdCAgICBcdFx0XHQgICAgICAgIH1cblx0XHQgICAgXHRcdFx0ICAgIH1cblx0XHQgICAgXHRcdFx0fVxuXHRcdCAgICBcdFx0fWVsc2V7XG5cdFx0ICAgIFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vM1wiLGNvbnRlbnQ6c3VjY2Vzcy5lcnJfbXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdCAgICBcdFx0fVxuXHRcdCAgICBcdH0pLmNhdGNoKGV4PT57XG5cdFx0ICAgIFx0XHQvLyBjb25zb2xlLmxvZyhleCk7XG5cdFx0ICAgIFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzMuMVwiLGNvbnRlbnQ6ZXguZXJyTXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdCAgICBcdH0pO1xuXHRcdCAgICB9LFxuXHRcdFx0T0tEYXRhT2JqUnVuQ3VzdG9tRXZlbnQoKXtcblx0XHQgICAgXHR2YXIgZW52aXJvbWVudCA9IHtcblx0XHRcdFx0ICAgICdmdW5jdGlvbic6ICczMDAwJywgLy8g5Yqf6IO954K557yW5Y+3XG5cdFx0XHRcdCAgICBjbHNfaWQ6IHRoaXMuJGRhdGEucGFyYW0uY2xzaWQsICAgICAvLyDlip/og73ngrnkuLvmlbDmja7nsbvmoIfor4Zcblx0XHRcdFx0ICAgICdidXR0b24nOiAndG9wJywgICAvLyB0b3AvYm90dG9tXG5cdFx0XHRcdCAgICBidXR0b25fbmFtZTogJ+aWsOWinicsXG5cdFx0XHRcdCAgICBtYXN0ZXI6IHtcblx0XHRcdFx0ICAgICAgICBjbHNfaWQ6IHRoaXMuJGRhdGEucGFyYW0uY2xzaWQsIC8vIGJ1dHRvbj1ib3R0b23ml7YgbWFzdGVy55qEY2xzX2lkXG5cdFx0XHRcdCAgICAgICAgXG5cdFx0XHRcdCAgICB9XG5cdFx0XHRcdH07XG5cdFx0ICAgIFx0dmFyIGV2ZW50aWQgPSB0aGlzLiRkYXRhLmVkaXRfb2tfZXZlbnQuc2NyaXBfaWQ7XG5cdFx0XHRcdHZhciByZXE9W107XG5cdFx0XHRcdHZhciBhdHRybGlzdCA9IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdDtcblx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhdHRybGlzdC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdHZhciBhdHRyID0gYXR0cmxpc3RbaV0uQXR0cjtcblx0XHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IGF0dHIubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0XHRcdHZhciBhciA9IGF0dHJbal07XG5cdFx0XHRcdFx0XHRpZihhci5WYWx1ZT09J+ivt+mAieaLqScgfHwgYXIuVmFsdWU9PSfigJTigJTor7fpgInmi6nigJTigJQnKSBhci5WYWx1ZT0nJztcblx0XHRcdFx0XHRcdGlmKGFyLlR5cGU9PSflvJXnlKjlr7nosaEo5aSa5LiqKScpXG5cdFx0XHRcdFx0XHRcdGlmKGFyLlZhbHVlPT0n6K+3JykgYXIuVmFsdWU9Jyc7XG5cdFx0XHRcdCAgICAgICAgaWYoYXIuVHlwZT09J+W8leeUqOS6uuWRmCcgfHwgYXIuVHlwZT09J+W8leeUqOmhueebricpXG5cdFx0XHRcdCAgICAgICAgXHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbDogYXIuVmFsSUQgP2FyLlZhbElEIDonJyB9KTtcblx0XHRcdFx0ICAgICAgICBlbHNlIGlmKGFyLlR5cGU9PSfluIPlsJTlgLwnKVxuXHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbDogYXIuVmFsdWU/JzEnOicwJ30pO1xuXHRcdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbDogYXIuVmFsdWUgfSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICh0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5sZW5ndGggPiAwKSB7XG5cdFx0ICAgIFx0ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUubGVuZ3RoOyBpKyspIHtcblx0XHQgICAgXHQgICAgICAgIGlmICghcmVxLmZpbHRlcihmdW5jdGlvbiAocykge1xuXHRcdCAgICBcdCAgICAgICAgICAgIHJldHVybiB0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZVtpXS5hdHRyID09IHMubmFtZVxuXHRcdCAgICBcdCAgICAgICAgfSkubGVuZ3RoKSB7XG5cdFx0ICAgIFx0ICAgICAgICAgICAgbGVuZ3RoID0gMTtcblx0XHQgICAgXHQgICAgICAgICAgICByZXEucHVzaCh7ICdhdHRyJzogdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmVbaV0uYXR0ciwgJ3ZhbCc6IHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlW2ldLnZhbHVlIH0pO1xuXHRcdCAgICBcdCAgICAgICAgfVxuXHRcdCAgICBcdCAgICB9XG5cdFx0ICAgIFx0fVxuXHRcdCAgICBcdHZhciBpbmZvID0ge1xuXHRcdCAgICBcdCAgICBldmVudGlkOiBldmVudGlkLFxuXHRcdCAgICBcdCAgICBlZHR5cGU6IFwiMFwiLFxuXHRcdCAgICBcdCAgICBwcm9qZWN0aWQ6ICcnLFxuXHRcdCAgICBcdCAgICByY2xzaWQ6ICcnLFxuXHRcdCAgICBcdCAgICByb2JqaWQ6ICcnLFxuXHRcdCAgICBcdCAgICB1c2VybG9naW46ICcnLFxuXHRcdCAgICBcdCAgICBjbHNpZDogdGhpcy4kZGF0YS5wYXJhbS5jbHNpZCxcblx0XHQgICAgXHQgICAgb2JqaWQ6IFwiXCIsXG5cdFx0ICAgIFx0ICAgIGF0dHI6IHJlcSxcblx0XHQgICAgXHR9XG5cdFx0ICAgLy8gIFx0dmFyIGRhdGFJbmZvID0ge1xuXHRcdCAgIC8vICAgICAgICAgIGVkdHlwZTogaW5mby5lZHR5cGUsIGV2ZW50aWQ6IGluZm8uZXZlbnRpZCwgcHJvamVjdGlkOiBpbmZvLnByb2plY3RpZCxyY2xzaWQ6IGluZm8ucmNsc2lkLCBcblx0XHRcdFx0XHQvLyByb2JqaWQ6IGluZm8ucm9iamlkLCB1c2VybG9naW46IGluZm8udXNlcmxvZ2luLCBjbHNpZDogaW5mby5jbHNpZCwgb2JqaWQ6IGluZm8ub2JqaWQsXG5cdFx0XHRcdFx0Ly8gYXR0cjogSlNPTi5zdHJpbmdpZnkoaW5mby5hdHRyKSwgZXh0aW5mbzogSlNPTi5zdHJpbmdpZnkoZW52aXJvbWVudCksIGdsb2JhbF9hdHRyOiBKU09OLnN0cmluZ2lmeSh0aGlzLiRkYXRhLmdsb2JhbF9hdHRyKVxuXHRcdCAgIC8vICAgICAgfVxuXHRcdFx0XHRcblx0XHRcdFx0ZW52aXJvbWVudCA9IEJhc2U2NC5lbmNvZGUoSlNPTi5zdHJpbmdpZnkoZW52aXJvbWVudCkpOy8v5bCG5a2X56ym5Liy6L2s5o2i5Li6YmFzZTY057yW56CBXG5cdFx0XHRcdHZhciBnbG9iYWxfYXR0ciA9IEJhc2U2NC5lbmNvZGUoSlNPTi5zdHJpbmdpZnkodGhpcy4kZGF0YS5nbG9iYWxfYXR0cikpOy8v5bCG5a2X56ym5Liy6L2s5o2i5Li6YmFzZTY057yW56CBXG5cdFx0ICAgIFx0dmFyIG9ial9hdHRyPXt9O1xuXHRcdCAgICBcdGluZm8uYXR0ci5mb3JFYWNoKGl0ZW09Pntcblx0XHQgICAgXHRcdG9ial9hdHRyW2l0ZW0uYXR0cl0gPSBpdGVtLnZhbDtcblx0XHQgICAgXHR9KTtcblx0XHRcdFx0aWYoIWV2ZW50aWQuaW5jbHVkZXMoJ3snKSkgZXZlbnRpZD0gJ3snKyBldmVudGlkICsnfSc7XG5cdFx0XHRcdHZhciBkYXRhSW5mbz17XG5cdFx0XHRcdCAgZWRfdHlwZTogaW5mby5lZHR5cGUsXG5cdFx0XHRcdCAgc3RhcnRfdHJhbnNhY3Rpb246ICcnLFxuXHRcdFx0XHQgIGNsYXNzX2lkOiBpbmZvLmNsc2lkLFxuXHRcdFx0XHQgIGNsYXNzX25hbWU6ICcnLFxuXHRcdFx0XHQgIGV2ZW50X2lkOiBldmVudGlkLFxuXHRcdFx0XHQgIGV2ZW50X25hbWU6ICcnLFxuXHRcdFx0XHQgIGRhdGFfb2JqX2lkOiBpbmZvLm9iamlkLFxuXHRcdFx0XHQgIG9ial9hdHRyOiBvYmpfYXR0cixcblx0XHRcdFx0ICBwcmpfaWQ6IGluZm8ucHJvamVjdGlkLFxuXHRcdFx0XHQgIHJlZl9jbHNfaWQ6IGluZm8ucmNsc2lkLFxuXHRcdFx0XHQgIHJlbF9vYmpfaWQ6IGluZm8ucm9iamlkLFxuXHRcdFx0XHQgIHVzZXJfbG9naW46IGluZm8udXNlcmxvZ2luLFxuXHRcdFx0XHQgIGRhdGFfanNvbjogJycsXG5cdFx0XHRcdCAgY29tcG9zZV9pbmZvOiAnJyxcblx0XHRcdFx0ICBleHRfaW5mbzogZW52aXJvbWVudCxcblx0XHRcdFx0ICBnbG9iYWxfYXR0cjogZ2xvYmFsX2F0dHIsXG5cdFx0XHRcdCAgaW5wdXRfcGFyYW06ICcnLFxuXHRcdFx0XHR9O1xuXHRcdFx0XHRjb25zb2xlLmxvZyhkYXRhSW5mbyk7XG5cdFx0XHRcdC8vIHJldHVybjtcblx0XHQgICAgXHR0aGlzLiRzdG9yZS5kaXNwYXRjaCgncnVuQ3VzdG9tRXZlbnQnLGRhdGFJbmZvKS50aGVuKHN1Y2Nlc3M9Pntcblx0XHQgICAgXHRcdGNvbnNvbGUubG9nKHN1Y2Nlc3MpO1xuXHRcdCAgICBcdFx0aWYgKHN1Y2Nlc3MuZXJyX2NvZGUgPT0gMCkge1xuXHRcdCAgICBcdFx0XHR2YXIgZGF0YSA9IHN1Y2Nlc3MucmVzdWx0O1x0XG5cdFx0ICAgIFx0XHRcdHZhciByZXN1bHQgPSBkYXRhLnJlc3VsdDtcblx0XHQgICAgXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCByZXN1bHQubGVuZ3RoOyBpKyspIHtcblx0XHQgICAgXHRcdFx0ICAgIC8vIHNlbGYuY2xhc3NfYXR0cl9lbGUuZmluZCgnLmF0dHJfZmllbGRbZGF0YS1maWVsZD1cIicgKyByZXN1bHRbaV0uYXR0ciArICdcIl0nKS52YWwocmVzdWx0W2ldLnZhbHVlKS5kYXRhKCd2YWwnLCByZXN1bHRbaV0udmFsdWUpO1xuXHRcdCAgICBcdFx0XHQgICAgdmFyIGxlbmd0aCA9IDA7XG5cdFx0ICAgIFx0XHRcdCAgICBpZiAoIXRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLmZpbHRlcihmdW5jdGlvbiAocykge1xuXHRcdCAgICBcdFx0XHQgICAgICAgIHJldHVybiByZXN1bHRbaV0uYXR0ciA9PSBzLmF0dHJcblx0XHQgICAgXHRcdFx0ICAgIH0pLmxlbmd0aCkge1xuXHRcdCAgICBcdFx0XHQgICAgICAgIGxlbmd0aCA9IDE7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUucHVzaChyZXN1bHRbaV0pO1xuXHRcdCAgICBcdFx0XHQgICAgfVxuXHRcdCAgICBcdFx0XHQgICAgaWYgKGxlbmd0aCA9PSAwKSB7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5sZW5ndGg7IGorKykge1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICBpZiAodGhpcy4kZGF0YS5yZWZkYXRhc3RvcmVbal0uYXR0ciA9PSByZXN1bHRbaV0uYXR0cikge1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmVbal0udmFsdWUgPSByZXN1bHRbaV0udmFsdWU7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgIH1cblx0XHQgICAgXHRcdFx0ICAgICAgICB9XG5cdFx0ICAgIFx0XHRcdCAgICB9XG5cdFx0ICAgIFx0XHRcdH1cblx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0dGhpcy5hZGQoKTtcblx0XHQgICAgXHRcdH1lbHNle1xuXHRcdCAgICBcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzRcIixjb250ZW50OnN1Y2Nlc3MuZXJyX21zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHQgICAgXHRcdH1cblx0XHQgICAgXHR9KS5jYXRjaChleD0+e1xuXHRcdCAgICBcdFx0Ly8gY29uc29sZS5sb2coZXgpO1xuXHRcdCAgICBcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor680LjFcIixjb250ZW50OmV4LmVyck1zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHQgICAgXHR9KTtcblx0XHQgICAgfSxcblx0XHQgICAgRGF0YU9ialJ1bkN1c3RvbUV2ZW50X1JldHVybihldmVudGlkLGRhdGFfYXR0cixidXR0b25fY2FsbGJhY2ssaW5kZXgsaWluZGV4KXtcblx0XHRcdFx0dmFyIGVudmlyb21lbnQgPSB7XG5cdFx0XHRcdCAgICAnZnVuY3Rpb24nOiAnMzAwMCcsIC8vIOWKn+iDveeCuee8luWPt1xuXHRcdFx0XHQgICAgY2xzX2lkOiB0aGlzLiRkYXRhLnBhcmFtLmNsc2lkLCAgICAgLy8g5Yqf6IO954K55Li75pWw5o2u57G75qCH6K+GXG5cdFx0XHRcdCAgICAnYnV0dG9uJzogJ3RvcCcsICAgLy8gdG9wL2JvdHRvbVxuXHRcdFx0XHQgICAgYnV0dG9uX25hbWU6ICfmlrDlop4nLFxuXHRcdFx0XHQgICAgbWFzdGVyOiB7XG5cdFx0XHRcdCAgICAgICAgY2xzX2lkOiB0aGlzLiRkYXRhLnBhcmFtLmNsc2lkLCAvLyBidXR0b249Ym90dG9t5pe2IG1hc3RlcueahGNsc19pZFxuXHRcdFx0XHQgICAgICAgIC8vb2JqX2lkOiAnJyAgLy8gYnV0dG9uPWJvdHRvbeaXtiBtYXN0ZXLnmoRvYmpfaWRcblx0XHRcdFx0ICAgIH1cblx0XHRcdFx0fTtcblx0XHRcdFx0dmFyIHJlcT1bXTtcblx0XHRcdFx0dmFyIGF0dHJsaXN0ID0gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0O1xuXHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJsaXN0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0dmFyIGF0dHIgPSBhdHRybGlzdFtpXS5BdHRyO1xuXHRcdFx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdFx0dmFyIGFyID0gYXR0cltqXTtcblx0XHRcdFx0XHRcdGlmKGFyLlR5cGU9PSflvJXnlKjlr7nosaEo5aSa5LiqKScpXG5cdFx0XHRcdFx0XHRcdGlmKGFyLlZhbHVlPT0n6K+3JykgYXIuVmFsdWU9Jyc7XG5cdFx0XHRcdCAgICAgICAgaWYoYXIuVHlwZT09J+W8leeUqOS6uuWRmCcgfHwgYXIuVHlwZT09J+W8leeUqOmhueebricpXG5cdFx0XHRcdCAgICAgICAgXHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbDogYXIuVmFsSUQgP2FyLlZhbElEIDonJyB9KTtcblx0XHRcdFx0ICAgICAgICBlbHNlIGlmKGFyLlR5cGU9PSfluIPlsJTlgLwnKVxuXHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbDogYXIuVmFsdWU/JzEnOicwJ30pO1xuXHRcdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbDogYXIuVmFsdWUgfSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICh0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdCAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdCAgICAgICAgaWYgKCFyZXEuZmlsdGVyKGZ1bmN0aW9uIChzKSB7XG5cdFx0XHRcdCAgICAgICAgICAgIHJldHVybiB0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZVtpXS5hdHRyID09IHMubmFtZVxuXHRcdFx0XHQgICAgICAgIH0pLmxlbmd0aCkge1xuXHRcdFx0XHQgICAgICAgICAgICBsZW5ndGggPSAxO1xuXHRcdFx0XHQgICAgICAgICAgICByZXEucHVzaCh7ICdhdHRyJzogdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmVbaV0uYXR0ciwgJ3ZhbCc6IHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlW2ldLnZhbHVlIH0pO1xuXHRcdFx0XHQgICAgICAgIH1cblx0XHRcdFx0ICAgIH1cblx0XHRcdFx0fVxuXHRcdFx0XHR2YXIgZXh0aW5mbyA9IGVudmlyb21lbnQ7XG5cdFx0XHRcdGV4dGluZm8uZWRpdF9kbGcgPSB7XG5cdFx0XHRcdCAgICB0eXBlOiAnc21hbGwnLC8v5bCP56qX5Y+jXG5cdFx0XHRcdCAgICBjbGFzc19pZDogdGhpcy4kZGF0YS5wYXJhbS5jbHNpZCwvL+W9k+WJjeaVsOaNruexu2lkXG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGRhdGFfYXR0cikge1xuXHRcdFx0XHQgICAgZXh0aW5mby5lZGl0X2RsZy5mb3JtX2NvbnRyb2wgPSB7Ly/miYDlsZ7nmoTooajljZXmjqfku7Zcblx0XHRcdFx0ICAgICAgICBuYW1lOiBkYXRhX2F0dHIuTmFtZSwvL+Wtl+auteWxnuaAp1xuXHRcdFx0XHQgICAgICAgIHRleHQ6IGRhdGFfYXR0ci5EaXNwTmFtZSwvL+aYvuekuuaWh+acrFxuXHRcdFx0XHQgICAgICAgIGdyb3VwX25hbWU6IGRhdGFfYXR0ci5Hcm91cE5hbWUsLy/lsZ7mgKfnu4Rcblx0XHRcdFx0ICAgICAgICB0eXBlOiBkYXRhX2F0dHIuVHlwZSwvL+Wtl+auteexu+Wei1xuXHRcdFx0XHQgICAgICAgIHJlYWRvbmx5OiBkYXRhX2F0dHIuUmVhZE9ubHksLy/mmK/lkKblj6ror7tcblx0XHRcdFx0ICAgICAgICBidXR0b25faW1nOiBkYXRhX2F0dHIuYnV0dG9uX2ltZywvL+W8leeUqOaMiemSrueahOWbvuagh1xuXHRcdFx0XHQgICAgICAgIGJ1dHRvbl90b29sdGlwOiBkYXRhX2F0dHIuYnV0dG9uX3Rvb2x0aXAvL+W8leeUqOaMiemSrueahHRvb2x0aXBcblx0XHRcdFx0ICAgIH1cblx0XHRcdFx0fVxuXHRcdFx0XHQvLyB2YXIgZGF0YUluZm8gPSB7XG5cdFx0XHRcdC8vIFx0ZWR0eXBlOiAgXCIwXCIsIGV2ZW50aWQ6IGV2ZW50aWQsIHByb2plY3RpZDogJycscmNsc2lkOiAnJywgcm9iamlkOiAnJywgdXNlcmxvZ2luOiAnJywgXG5cdFx0XHRcdC8vIFx0Y2xzaWQ6IHRoaXMuJGRhdGEucGFyYW0uY2xzaWQsIG9iamlkOiAnJyxhdHRyOiBKU09OLnN0cmluZ2lmeShyZXEpLCBcblx0XHRcdFx0Ly8gXHRleHRpbmZvOiBKU09OLnN0cmluZ2lmeShleHRpbmZvKSwgZ2xvYmFsX2F0dHI6IEpTT04uc3RyaW5naWZ5KHRoaXMuJGRhdGEuZ2xvYmFsX2F0dHIpXG5cdFx0XHRcdC8vIH1cblx0XHRcdFx0ZXh0aW5mbyA9IEJhc2U2NC5lbmNvZGUoSlNPTi5zdHJpbmdpZnkoZXh0aW5mbykpOy8v5bCG5a2X56ym5Liy6L2s5o2i5Li6YmFzZTY057yW56CBXG5cdFx0XHRcdHZhciBnbG9iYWxfYXR0ciA9IEJhc2U2NC5lbmNvZGUoSlNPTi5zdHJpbmdpZnkodGhpcy4kZGF0YS5nbG9iYWxfYXR0cikpOy8v5bCG5a2X56ym5Liy6L2s5o2i5Li6YmFzZTY057yW56CBXG5cdFx0XHRcdHZhciBvYmpfYXR0cj17fTtcblx0XHRcdFx0cmVxLmZvckVhY2goaXRlbT0+e1xuXHRcdFx0XHRcdG9ial9hdHRyW2l0ZW0uYXR0cl0gPSBpdGVtLnZhbDtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGlmKCFldmVudGlkLmluY2x1ZGVzKCd7JykpIGV2ZW50aWQ9ICd7JysgZXZlbnRpZCArJ30nO1xuXHRcdFx0XHR2YXIgZGF0YUluZm89e1xuXHRcdFx0XHQgIGVkX3R5cGU6IFwiMFwiLFxuXHRcdFx0XHQgIHN0YXJ0X3RyYW5zYWN0aW9uOiAnJyxcblx0XHRcdFx0ICBjbGFzc19pZDogdGhpcy4kZGF0YS5wYXJhbS5jbHNpZCxcblx0XHRcdFx0ICBjbGFzc19uYW1lOiAnJyxcblx0XHRcdFx0ICBldmVudF9pZDogZXZlbnRpZCxcblx0XHRcdFx0ICBldmVudF9uYW1lOiAnJyxcblx0XHRcdFx0ICBkYXRhX29ial9pZDogJycsXG5cdFx0XHRcdCAgb2JqX2F0dHI6IG9ial9hdHRyLFxuXHRcdFx0XHQgIHByal9pZDogJycsXG5cdFx0XHRcdCAgcmVmX2Nsc19pZDogJycsXG5cdFx0XHRcdCAgcmVsX29ial9pZDogJycsXG5cdFx0XHRcdCAgdXNlcl9sb2dpbjogJycsXG5cdFx0XHRcdCAgZGF0YV9qc29uOiAnJyxcblx0XHRcdFx0ICBjb21wb3NlX2luZm86ICcnLFxuXHRcdFx0XHQgIGV4dF9pbmZvOiBleHRpbmZvLFxuXHRcdFx0XHQgIGdsb2JhbF9hdHRyOiBnbG9iYWxfYXR0cixcblx0XHRcdFx0ICBpbnB1dF9wYXJhbTogJycsXG5cdFx0XHRcdH07XG5cdFx0XHRcdGNvbnNvbGUubG9nKGRhdGFJbmZvKTtcblx0XHRcdFx0Ly8gcmV0dXJuO1xuXHRcdFx0XHR0aGlzLiRzdG9yZS5kaXNwYXRjaCgncnVuQ3VzdG9tRXZlbnQnLGRhdGFJbmZvKS50aGVuKHN1Y2Nlc3M9Pntcblx0XHRcdFx0XHRjb25zb2xlLmxvZyhzdWNjZXNzKTtcblx0XHRcdFx0XHRpZiAoc3VjY2Vzcy5lcnJfY29kZSA9PSAwKSB7XG5cdFx0XHRcdFx0XHR2YXIgZGF0YSA9IHN1Y2Nlc3MucmVzdWx0O1x0XG5cdFx0XHRcdFx0XHRpZiAoZGF0YSAhPSBcIlwiKSB7XG5cdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHR2YXIgYWN0aW9ucyA9IGRhdGEuYWN0aW9uO1xuXHRcdFx0XHRcdFx0Y29uc29sZS5sb2coYWN0aW9ucyk7XG5cdFx0XHRcdFx0XHRpZiAoYWN0aW9ucykge1xuXHRcdFx0XHRcdFx0ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYWN0aW9ucy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdFx0ICAgICAgICB2YXIgYWN0aW9uID0gYWN0aW9uc1tpXTtcblx0XHRcdFx0XHRcdCAgICAgICAgdmFyIHZhbCA9IGFjdGlvbi52YWx1ZTtcblx0XHRcdFx0XHRcdCAgICAgICAgdmFyIGVudmlyb21lbnQgPSBKU09OLnN0cmluZ2lmeShlbnZpcm9tZW50KTtcblx0XHRcdFx0XHRcdCAgICAgICAgXG5cdFx0XHRcdFx0XHQgICAgICAgIGlmIChhY3Rpb24uYWN0aW9uX3R5cGUgPT0gJ29wZW5fcGFuZWwnKSB7XG5cdFx0XHRcdFx0XHQgICAgICAgICAgIHZhciBkID0gZGlhbG9nKHtcblx0XHRcdFx0XHRcdCAgICAgICAgICAgICAgIHRpdGxlOiAnPGkgY2xhc3M9XCJhY2UtaWNvbiBmYSBmYS1pbmZvLWNpcmNsZVwiPjwvaT4gJyArICfmj5DnpLonLFxuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgICAgY29udGVudDogYWN0aW9uLmFjdGlvbl90eXBlICsgJ+atpGFjdGlvbuWwmuacquWkhOeQhu+8gSdcblx0XHRcdFx0XHRcdCAgICAgICAgICAgfSk7XG5cdFx0XHRcdFx0XHQgICAgICAgICAgIGQuc2hvdygpO1xuXHRcdFx0XHRcdFx0ICAgICAgICB9XG5cdFx0XHRcdFx0XHQgICAgICAgIGVsc2UgaWYgKGFjdGlvbi5hY3Rpb25fdHlwZSA9PSAnb3Blbl9zZWxlY3RfdXNlcmRsZycpIHtcblx0XHRcdFx0XHRcdCAgICAgICAgICAgIHZhciBzdHlsZSA9IHZhbC5zdHlsZTtcblx0XHRcdFx0XHRcdFx0XHRcdC8vIHN0eWxlID09ICd1c2VyJyA/ICfpgInmi6nkurrlkZgnIDogc3R5bGUgPT0gJ2RlcGFydG1lbnQnID8gJ+mAieaLqemDqOmXqCcgOiBzdHlsZSA9PSAncm9sZScgPyAn6YCJ5oup6KeS6ImyJyA6ICcnXG5cdFx0XHRcdFx0XHQgICAgICAgICAgICB2YXIgJHRoaXMgPSB0aGlzO1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIHBhcmFtPXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aW5kZXg6IGluZGV4LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpaW5kZXg6aWluZGV4LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRidXR0b25fY2FsbGJhY2s6YnV0dG9uX2NhbGxiYWNrLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXE6cmVxLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRhX2F0dHI6ZGF0YV9hdHRyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR1bmkubmF2aWdhdGVUbyh7XG5cdFx0XHRcdFx0XHQgICAgICAgICAgICBcdHVybDonLi4vc2VscHNuL2luZGV4P211bGl0PWZhbHNlJnBhcmFtPScrSlNPTi5zdHJpbmdpZnkocGFyYW0pLFxuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgXHRldmVudHM6e1xuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgXHRcdEFkZFBlcihkYXRhLHBhcmFtKXsgXG5cdFx0XHRcdFx0XHQgICAgICAgICAgICBcdFx0XHQvLyBjb25zb2xlLmxvZyhwYXJhbSk7XG5cdFx0XHRcdFx0XHQgICAgICAgICAgICBcdFx0XHRjb25zb2xlLmxvZyhkYXRhKTtcblx0XHRcdFx0XHRcdCAgICAgICAgICAgIFx0XHRcdHZhciBjYWxsYmFja19ldmVudGlkID0gcGFyYW0uYnV0dG9uX2NhbGxiYWNrLnRyaW0oKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBpbmZvID0ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgIGV2ZW50aWQ6IGNhbGxiYWNrX2V2ZW50aWQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgICAgZWR0eXBlOiBcIjBcIixcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgICBwcm9qZWN0aWQ6ICcnLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgIHJjbHNpZDogJycsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgICAgcm9iamlkOiAnJyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgICB1c2VybG9naW46ICcnLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgIGNsc2lkOiAkdGhpcy4kZGF0YS5wYXJhbS5jbHNpZCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgICBvYmppZDogXCJcIixcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgICBhdHRyOiBwYXJhbS5yZXEsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgICAgaW5wdXRwYXJhbWV0ZXI6IGRhdGEsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRhdGFKc29uOltdLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMuRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGluZm8sIHBhcmFtLmRhdGFfYXR0cik7XG5cdFx0XHRcdFx0XHQgICAgICAgICAgICBcdFx0fVxuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgXHR9XG5cdFx0XHRcdFx0XHQgICAgICAgICAgICB9KTtcdFxuXHRcdFx0XHRcdFx0ICAgICAgICB9XG5cdFx0XHRcdFx0XHQgICAgICAgIGVsc2UgaWYgKGFjdGlvbi5hY3Rpb25fdHlwZSA9PSAnb3Blbl9kYXRhX3F1ZXJ5X2RsZycpIHtcblx0XHRcdFx0XHRcdCAgICAgICAgICAgIHZhciBkID0gZGlhbG9nKHtcblx0XHRcdFx0XHRcdCAgICAgICAgICAgICAgICB0aXRsZTogJzxpIGNsYXNzPVwiYWNlLWljb24gZmEgZmEtaW5mby1jaXJjbGVcIj48L2k+ICcgKyAn5o+Q56S6Jyxcblx0XHRcdFx0XHRcdCAgICAgICAgICAgICAgICBjb250ZW50OiBhY3Rpb24uYWN0aW9uX3R5cGUgKyAn5q2kYWN0aW9u5bCa5pyq5aSE55CG77yBJ1xuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgfSk7XG5cdFx0XHRcdFx0XHQgICAgICAgICAgICBkLnNob3coKTtcblx0XHRcdFx0XHRcdCAgICAgICAgfVxuXHRcdFx0XHRcdFx0ICAgICAgICBlbHNlIGlmIChhY3Rpb24uYWN0aW9uX3R5cGUgPT0gJ29wZW5fY29tbW9uX2RsZycpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciAkdGhpcyA9IHRoaXM7XG5cdFx0XHRcdFx0XHQgICAgICAgICAgICBpZih2YWwuY29tbW9uX2RsZ19pZCA9PSAnY2hlY2tfbGlzdCcpe1xuXHRcdFx0XHRcdFx0XHRcdFx0ICAgJHRoaXMuJGRhdGEuY2hlY2tfbGlzdD0gdmFsLmNvbmZpZztcblx0XHRcdFx0XHRcdFx0XHRcdCAgIGlmKHZhbC5jb25maWcuYXBwZWFyX3N0eWxlID09ICdzaWRlc2xpcCcpIC8v5Yik5pat5piv5ZCm5piv5L6n5ruRXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEucG9wdXBUeXBlID0gJ3JpZ2h0Jztcblx0XHRcdFx0XHRcdFx0XHRcdCAgIGVsc2Vcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5wb3B1cFR5cGUgPSAnY2VudGVyJ1xuXHRcdFx0XHRcdFx0XHRcdFx0ICAgLy8gb3BlbiDmlrnms5XkvKDlhaXlj4LmlbAg562J5ZCM5ZyoIHVuaS1wb3B1cCDnu4Tku7bkuIrnu5HlrpogdHlwZeWxnuaAp1xuXHRcdFx0XHRcdFx0XHRcdFx0ICAgJHRoaXMuJHJlZnMucG9wdXAub3BlbigkdGhpcy4kZGF0YS5wb3B1cFR5cGUpO1xuXHRcdFx0XHRcdFx0XHRcdFx0ICAgdmFyIHBvcHVwUGFyYW09e1xuXHRcdFx0XHRcdFx0XHRcdFx0ICAgXHRpbmRleDogaW5kZXgsXG5cdFx0XHRcdFx0XHRcdFx0XHQgICBcdGlpbmRleDppaW5kZXgsXG5cdFx0XHRcdFx0XHRcdFx0XHQgICBcdGJ1dHRvbl9jYWxsYmFjazpidXR0b25fY2FsbGJhY2ssXG5cdFx0XHRcdFx0XHRcdFx0XHQgICBcdHJlcTpyZXEsXG5cdFx0XHRcdFx0XHRcdFx0XHQgICBcdGRhdGFfYXR0cjpkYXRhX2F0dHJcblx0XHRcdFx0XHRcdFx0XHRcdCAgIH1cblx0XHRcdFx0XHRcdFx0XHRcdCAgICR0aGlzLiRkYXRhLnBvcHVwUGFyYW09IHBvcHVwUGFyYW07XG5cdFx0XHRcdFx0XHRcdFx0ICAgIH1cblx0XHRcdFx0XHRcdCAgICAgICAgfVxuXHRcdFx0XHRcdFx0ICAgICAgICBlbHNlIGlmIChhY3Rpb24uYWN0aW9uX3R5cGUgPT0gJ29wZW5fcHJvamVjdF9xdWVyeV9kbGcnKSB7XG5cdFx0XHRcdFx0XHQgICAgICAgICAgICAvL2NvbnNvbGUubG9nKGFjdGlvbi52YWx1ZS5zZWxlY3RfcmFuZ2UpO1xuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhhY3Rpb24udmFsdWUubXVsaXRfc2VsZWN0KTtcblx0XHRcdFx0XHRcdCAgICAgICAgICAgIHZhciBwcmlSZWwgPSAnLTEnO1xuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgaWYgKGFjdGlvbi52YWx1ZS5zZWxlY3RfcmFuZ2UgPT0gJ+WFqOmDqOebuOWFsycpXG5cdFx0XHRcdFx0XHQgICAgICAgICAgICAgICAgcHJpUmVsID0gJzAnO1xuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgZWxzZSBpZiAoYWN0aW9uLnZhbHVlLnNlbGVjdF9yYW5nZSA9PSAn5oiR6LSf6LSj55qE6aG555uuJylcblx0XHRcdFx0XHRcdCAgICAgICAgICAgICAgICBwcmlSZWwgPSAnMSc7XG5cdFx0XHRcdFx0XHQgICAgICAgICAgICBlbHNlIGlmIChhY3Rpb24udmFsdWUuc2VsZWN0X3JhbmdlID09ICfmiJHliJvlu7rnmoQnKVxuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgICAgIHByaVJlbCA9ICcyJztcblx0XHRcdFx0XHRcdCAgICAgICAgICAgIGVsc2UgaWYgKGFjdGlvbi52YWx1ZS5zZWxlY3RfcmFuZ2UgPT0gJ+aIkeWPguS4jueahCcgfHwgYWN0aW9uLnZhbHVlLnNlbGVjdF9yYW5nZSA9PSAn5oiR5Y+C5Yqg55qEJylcblx0XHRcdFx0XHRcdCAgICAgICAgICAgICAgICBwcmlSZWwgPSAnMyc7XG5cdFx0XHRcdFx0XHQgICAgICAgICAgICBlbHNlIGlmIChhY3Rpb24udmFsdWUuc2VsZWN0X3JhbmdlID09ICfmiJHlhbPms6jnmoQnKVxuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgICAgIHByaVJlbCA9ICc0Jztcblx0XHRcdFx0XHRcdCAgICAgICAgICAgIGVsc2UgaWYgKGFjdGlvbi52YWx1ZS5zZWxlY3RfcmFuZ2UgPT0gJ+aIkeS4i+WxnueahOmhueebricpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHByaVJlbCA9ICc1Jztcblx0XHRcdFx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgJHRoaXMgPSB0aGlzO1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIHBhcmFtXz17XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGluZGV4OiBpbmRleCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWluZGV4OmlpbmRleCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0YnV0dG9uX2NhbGxiYWNrOmJ1dHRvbl9jYWxsYmFjayxcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmVxOnJlcVxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0dW5pLm5hdmlnYXRlVG8oe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR1cmw6Jy4uL3NlbFByai9pbmRleD9yZWxhdGlvbj0nK3ByaVJlbCsnJnBhcmFtPScrSlNPTi5zdHJpbmdpZnkocGFyYW1fKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZXZlbnRzOntcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRBZGRQZXIoZGF0YSxwYXJhbSl7IFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtwYXJhbS5pbmRleF0uQXR0cltwYXJhbS5paW5kZXhdLlZhbHVlPWRhdGFbMF0uTmFtZTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbcGFyYW0uaW5kZXhdLkF0dHJbcGFyYW0uaWluZGV4XS5WYWxJRD1kYXRhWzBdLklEKyc7JytkYXRhWzBdLk5hbWU7XG5cdFx0XHRcdFx0XHQgICAgICAgICAgICBcdFx0XHR2YXIgY2FsbGJhY2tfZXZlbnRpZCA9IHBhcmFtLmJ1dHRvbl9jYWxsYmFjay50cmltKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoY2FsbGJhY2tfZXZlbnRpZCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgIHZhciBpbmZvID0ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgICAgICBldmVudGlkOiBjYWxsYmFja19ldmVudGlkLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgICAgICBlZHR5cGU6IFwiMlwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgICAgICBwcm9qZWN0aWQ6IGRhdGFbMF0uSUQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgICAgICAgIHJjbHNpZDogXCJcIixcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgICAgICAgcm9iamlkOiBcIlwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgICAgICB1c2VybG9naW46IFwiXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgICAgICAgIGNsc2lkOiAkdGhpcy4kZGF0YS5wYXJhbS5jbHNpZCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgICAgICAgb2JqaWQ6IFwiXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgICAgICAgIGF0dHI6IHBhcmFtLnJlcSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRhSnNvbjpbXSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgICB9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgICR0aGlzLkRhdGFPYmpSdW5DdXN0b21FdmVudChpbmZvKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0ICAgICAgICB9IGVsc2Uge1xuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgdmFyIGQgPSBkaWFsb2coe1xuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgICAgIHRpdGxlOiAnPGkgY2xhc3M9XCJhY2UtaWNvbiBmYSBmYS1pbmZvLWNpcmNsZVwiPjwvaT4gJyArICfmj5DnpLonLFxuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgICAgIGNvbnRlbnQ6IGFjdGlvbi5hY3Rpb25fdHlwZSArICfmraRhY3Rpb27lsJrmnKrlpITnkIbvvIEnXG5cdFx0XHRcdFx0XHQgICAgICAgICAgICB9KTtcblx0XHRcdFx0XHRcdCAgICAgICAgICAgIGQuc2hvdygpO1xuXHRcdFx0XHRcdFx0ICAgICAgICB9XG5cdFx0XHRcdFx0XHQgICAgfVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fWVsc2V7XG5cdFx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi5o+Q56S6NS4yXCIsY29udGVudDogJ+iwg+eUqCBiZWZvcmVfY2xpY2tfYnV0dG9uIOiEmuacrOi/lOWbnuepuu+8jGV2ZW50X2lkJyArIGV2ZW50aWQsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fWVsc2V7XG5cdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzVcIixjb250ZW50OnN1Y2Nlc3MuZXJyX21zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pLmNhdGNoKGV4PT57XG5cdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coZXgpO1xuXHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi5o+Q56S6NS4xXCIsY29udGVudDpleC5lcnJNc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdH0pO1xuXHRcdCAgICB9LFxuXHRcdCAgICBcblx0XHRcdFxuXHRcdH1cblx0fVxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///110\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 */ 65));\nvar _pickerAddress = _interopRequireDefault(__webpack_require__(/*! ../../js/pickerAddress/pickerAddress.vue */ 80));\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\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  components: {\n    pickerAddress: _pickerAddress.default\n  },\n  data: function data() {\n    return {\n      title: '新增',\n      param: {},\n      classAttrList: [],\n      classGridStyle: [],\n      edit_inital_event: \"\",\n      //弹窗初始化事件ID\n      edit_ok_event: \"\",\n      //弹窗点击OK 触发事件ID\n      edit_select_compose_event: \"\",\n      //选择组成对象时调用\n      edit_compose_cls_id: \"\",\n      global_attr: [],\n      refdatastore: [],\n      //引用数据存储区// {attr:'G_PRJ_' + bindattr + '_ID', value:info.id}\n      inputValList: [{\n        Name: \"test\"\n      }, {\n        Name: \"test2\"\n      }, {\n        Name: \"test3\"\n      }, {\n        Name: \"test4\"\n      }, {\n        Name: \"test5\"\n      }, {\n        Name: \"test6\"\n      }, {\n        Name: \"test7\"\n      }],\n      popupType: \"center\",\n      check_list: {},\n      popupParam: {}\n    };\n  },\n  onLoad: function onLoad(options) {\n    // console.log(options);\n    uni.setNavigationBarTitle({\n      title: options.titlename\n    }); //设置顶部标题 \n    var param = JSON.parse(options.param);\n    this.$data.title = param.Add_BtnName ? param.Add_BtnName : options.titlename; //设置按钮文字\n    // console.log(param);\n    if (!param.EditDlgMode) {\n      uni.showModal({\n        title: \"提示\",\n        content: \"该功能点未配置编辑窗口,请重新配置!\",\n        showCancel: false,\n        confirmText: \"取消\"\n      });\n      return;\n    }\n    if (!param.Edit_dlg.Name) {\n      uni.showModal({\n        title: \"提示\",\n        content: \"该功能点未配置窗口样式,请重新配置!\",\n        showCancel: false,\n        confirmText: \"取消\"\n      });\n      return;\n    }\n    this.$data.param = param;\n    var edit_dlg = {\n      Model: param.EditDlgMode,\n      Name: param.Edit_dlg.Name\n    };\n    var dataInfo = {\n      class_id: param.clsid,\n      class_name: '',\n      group_name: ''\n    };\n    var $this = this;\n    $this.$store.state.thisareaFuncID = param.clsid;\n    // console.log($this.$store.getters.getclassAttrList);\n    //获取\n    if ($this.$store.getters.getclassAttrList) {\n      $this.$data.classAttrList = $this.$store.getters.getclassAttrList;\n      $this.classGridStyleInfo();\n    } else $this.$store.dispatch('classAttrGetList', dataInfo).then(function (success) {\n      // console.log(success);\n      if (success.err_code == 0) {\n        $this.$data.classAttrList = success.result;\n        success.result.forEach( /*#__PURE__*/function () {\n          var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(group, index) {\n            return _regenerator.default.wrap(function _callee2$(_context2) {\n              while (1) {\n                switch (_context2.prev = _context2.next) {\n                  case 0:\n                    group.attr_list.forEach( /*#__PURE__*/function () {\n                      var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(attr, key) {\n                        return _regenerator.default.wrap(function _callee$(_context) {\n                          while (1) {\n                            switch (_context.prev = _context.next) {\n                              case 0:\n                                if (!(attr.type == \"字典-字符串\" || attr.type == \"字典-整数\")) {\n                                  _context.next = 3;\n                                  break;\n                                }\n                                _context.next = 3;\n                                return $this.DictItemGetList(attr, key, index);\n                              case 3:\n                              case \"end\":\n                                return _context.stop();\n                            }\n                          }\n                        }, _callee);\n                      }));\n                      return function (_x3, _x4) {\n                        return _ref2.apply(this, arguments);\n                      };\n                    }());\n                  case 1:\n                  case \"end\":\n                    return _context2.stop();\n                }\n              }\n            }, _callee2);\n          }));\n          return function (_x, _x2) {\n            return _ref.apply(this, arguments);\n          };\n        }());\n        setTimeout(function () {\n          $this.classGridStyleInfo();\n        }, 500);\n      } else {\n        uni.showModal({\n          title: \"错误1\",\n          content: success.err_msg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      }\n    }).catch(function (ex) {\n      // console.log(ex);\n      uni.showModal({\n        title: \"错误1.1\",\n        content: ex.errMsg,\n        showCancel: false,\n        confirmText: \"取消\"\n      });\n    });\n  },\n  methods: {\n    DictItemGetList: function DictItemGetList(attr, key, index) {\n      var _this = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4() {\n        var $this, dataInfo;\n        return _regenerator.default.wrap(function _callee4$(_context4) {\n          while (1) {\n            switch (_context4.prev = _context4.next) {\n              case 0:\n                //Mobox3得到字典项列表\n                _this.data = [];\n                $this = _this;\n                dataInfo = {\n                  dict_id: attr.dict_id,\n                  dict_name: attr.dict_name\n                }; // console.log(dataInfo);\n                _this.$store.dispatch('DictItemGetList', dataInfo).then( /*#__PURE__*/function () {\n                  var _ref3 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3(success) {\n                    return _regenerator.default.wrap(function _callee3$(_context3) {\n                      while (1) {\n                        switch (_context3.prev = _context3.next) {\n                          case 0:\n                            // console.log(success);\n                            if (success.err_code == 0) {\n                              $this.$data.classAttrList[index].attr_list[key].dictitem = success.result;\n                              _this.$store.commit(\"classAttrList\", $this.$data.classAttrList);\n                            } else {\n                              uni.showModal({\n                                title: \"错误1.2\",\n                                content: success.err_msg,\n                                showCancel: false,\n                                confirmText: \"取消\"\n                              });\n                            }\n                          case 1:\n                          case \"end\":\n                            return _context3.stop();\n                        }\n                      }\n                    }, _callee3);\n                  }));\n                  return function (_x5) {\n                    return _ref3.apply(this, arguments);\n                  };\n                }()).catch(function (ex) {\n                  // console.log(ex);\n                  uni.showModal({\n                    title: \"错误1.3\",\n                    content: ex.errMsg,\n                    showCancel: false,\n                    confirmText: \"取消\"\n                  });\n                });\n              case 4:\n              case \"end\":\n                return _context4.stop();\n            }\n          }\n        }, _callee4);\n      }))();\n    },\n    classGridStyleInfo: function classGridStyleInfo() {\n      var _this2 = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee6() {\n        var $this, gridstyleInfo;\n        return _regenerator.default.wrap(function _callee6$(_context6) {\n          while (1) {\n            switch (_context6.prev = _context6.next) {\n              case 0:\n                $this = _this2;\n                gridstyleInfo = {\n                  class_id: $this.$data.param.clsid,\n                  ui_style_type: 2,\n                  ui_style_name: $this.$data.param.Edit_dlg.Name\n                };\n                $this.$store.state.thisEditName = $this.$data.param.Edit_dlg.Name;\n                // console.log($this.$store.getters.getclassGridStyleInfo);\n                //获取\n                if ($this.$store.getters.getclassGridStyleInfo) {\n                  $this.$data.classGridStyle = $this.$store.getters.getclassGridStyleInfo;\n                  $this.viewParam();\n                } else {\n                  // console.log(gridstyleInfo);\n                  $this.$store.dispatch('UIStyleGetInfo', gridstyleInfo).then( /*#__PURE__*/function () {\n                    var _ref4 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee5(success) {\n                      var styledef;\n                      return _regenerator.default.wrap(function _callee5$(_context5) {\n                        while (1) {\n                          switch (_context5.prev = _context5.next) {\n                            case 0:\n                              // console.log(success);\n                              if (success.err_code == 0) {\n                                styledef = _base.default.decode(success.result.style_def);\n                                success.result.style_def = JSON.parse(styledef);\n                                $this.$data.classGridStyle = success.result;\n                                // console.log($this.$data.classGridStyle);\n\n                                $this.viewParam();\n                              } else {\n                                uni.showModal({\n                                  title: \"错误1.4\",\n                                  content: success.err_msg,\n                                  showCancel: false,\n                                  confirmText: \"取消\"\n                                });\n                              }\n                            case 1:\n                            case \"end\":\n                              return _context5.stop();\n                          }\n                        }\n                      }, _callee5);\n                    }));\n                    return function (_x6) {\n                      return _ref4.apply(this, arguments);\n                    };\n                  }()).catch(function (ex) {\n                    __f__(\"log\", ex, \" at pages/modal/3018.vue:652\");\n                    uni.showModal({\n                      title: \"错误1.5\",\n                      content: ex.errMsg,\n                      showCancel: false,\n                      confirmText: \"取消\"\n                    });\n                  });\n                }\n              case 4:\n              case \"end\":\n                return _context6.stop();\n            }\n          }\n        }, _callee6);\n      }))();\n    },\n    viewParam: function viewParam() {\n      //将mobox3小写参数转换为mobox2大写参数\n      var class_gridStyle = {\n        ID: this.$data.classGridStyle.id,\n        Name: this.$data.classGridStyle.name,\n        Type: this.$data.classGridStyle.type,\n        IsDefault: this.$data.classGridStyle.is_defaul,\n        StyleDef: this.$data.classGridStyle.style_def\n      };\n      this.$data.classGridStyle = class_gridStyle;\n      var class_attrList = [];\n      this.$data.classAttrList.forEach(function (data) {\n        var attrs = [];\n        if (data.attr_list) {\n          data.attr_list.forEach(function (attr) {\n            var dictitems = [];\n            if (attr.dictitem) {\n              attr.dictitem.forEach(function (dict) {\n                dictitems.push({\n                  ID: dict.id,\n                  Name: dict.name,\n                  Note: dict.note,\n                  Order: dict.order,\n                  ImgUrl: null,\n                  Code: dict.code,\n                  HasSub: null,\n                  ParentID: null,\n                  ParentName: null,\n                  Lvl: dict.lvl,\n                  IsDefault: dict.is_default,\n                  Value: dict.value,\n                  CN_G_ID: dict.id,\n                  CN_G_DICT_ID: null,\n                  CN_S_NAME: dict.name,\n                  CN_S_NOTE: dict.note,\n                  CN_N_ORDER: dict.order,\n                  CN_S_IMG_URL: null,\n                  CN_S_CODE: dict.code,\n                  CN_C_HAS_SUB: null,\n                  CN_G_PARENT_ITEM_ID: null,\n                  CN_G_PARENT_ITEM_NAME: null,\n                  CN_N_LVL: dict.lvl,\n                  CN_C_IS_DEFAULT: dict.is_default,\n                  CN_S_VALUE: dict.value\n                });\n              });\n            }\n            attrs.push({\n              ID: attr.id,\n              Name: attr.name,\n              Type: attr.type,\n              Size: attr.size,\n              NotEmpty: attr.not_empty,\n              DefValue: attr.def_value,\n              Order: attr.order,\n              DictName: attr.dict_name,\n              DictID: attr.dict_id,\n              CodeDefName: attr.code_def_name,\n              CodeDefID: attr.code_def_id,\n              RelClsID: null,\n              RelCls: attr.ref_cls,\n              Width: attr.width,\n              Height: attr.height,\n              CtrlStyle: attr.ctrl_style,\n              HasAce: attr.has_ace,\n              CanShow: attr.can_show,\n              CanQuery: attr.can_query,\n              ReadOnly: attr.read_only,\n              IsKey: attr.is_key,\n              IsFixed: attr.is_fixed,\n              DispName: attr.disp_name,\n              LuaAttr: attr.lua_attr,\n              Desc: attr.desc,\n              ActionDef: attr.action_def ? _base.default.decode(attr.action_def) : '',\n              Multilingual: attr.multilingual,\n              RefCondition: attr.ref_condition,\n              GroupName: data.group,\n              Value: null,\n              dictitem: dictitems\n            });\n          });\n        }\n        class_attrList.push({\n          Name: data.group,\n          Order: data.order,\n          HasAce: data.has_ace,\n          BkColor: data.bk_color,\n          ImgFontStyle: data.img_font_style,\n          Attr: attrs\n        });\n      });\n      this.$data.classAttrList = class_attrList;\n      // console.log(this.$data.classGridStyle);\n      // console.log(this.$data.classAttrList);\n      this.class_attr_init();\n    },\n    class_attr_init: function class_attr_init() {\n      var attrlist = this.$data.classGridStyle.StyleDef.show_style;\n      var newattrlist = [];\n      if (this.$data.classAttrList.length > 0) {\n        for (var i = 0; i < attrlist.length; i++) {\n          var open = attrlist[i].open;\n          var name = attrlist[i].attrgroup_name;\n          var attrs = attrlist[i].attrs;\n          for (var s = 0; s < this.$data.classAttrList.length; s++) {\n            var clsattr = this.$data.classAttrList[s];\n            if (name == clsattr.Name) {\n              var attr = [];\n              for (var j = 0; j < attrs.length; j++) {\n                for (var l = 0; l < clsattr.Attr.length; l++) {\n                  var ca = clsattr.Attr[l];\n                  if (attrs[j].attr == ca.Name) {\n                    ca.action = attrs[j].action;\n                    ca.edit = attrs[j].edit;\n                    ca.notempty = attrs[j].notempty;\n                    ca.ext_button = attrs[j].ext_button;\n                    ca.button_img = attrs[j].button_img;\n                    ca.button_tooltip = attrs[j].button_tooltip;\n                    ca.before_click_button = attrs[j].before_click_button;\n                    ca.button_callback = attrs[j].button_callback;\n                    ca.hidden = attrs[j].hidden;\n                    ca.select = attrs[j].select == undefined ? false : attrs[j].select;\n                    ca.Value = \"\";\n                    if (ca.dictitem.length > 0) {\n                      if (ca.select == true) ca.Value = []; //ca.dictitem[0].CN_S_NAME;\n                      else ca.Value = '请选择'; //ca.dictitem[0].CN_S_NAME;\n                      var dictitemlist = [];\n                      for (var d = 0; d < ca.dictitem.length; d++) {\n                        ca.dictitem[d].label = ca.dictitem[d].CN_S_NAME;\n                        ca.dictitem[d].value = ca.dictitem[d].CN_S_NAME;\n                        ca.dictitem[d].attr = ca.Name;\n                        if (ca.dictitem[d].CN_C_IS_DEFAULT == '1') ca.Value = ca.dictitem[d].CN_S_NAME;\n                      }\n                    }\n                    if (ca.Type == '日期' || ca.Type == '时间') {\n                      var nowDate = new Date();\n                      var date = {\n                        year: nowDate.getFullYear(),\n                        month: nowDate.getMonth() + 1,\n                        day: nowDate.getDate()\n                      };\n                      ca.Value = date.year + '-' + (date.month >= 10 ? date.month : '0' + date.month) + '-' + (date.day >= 10 ? date.day : '0' + date.day);\n                    }\n                    if (ca.Type == '引用对象(多个)') {\n                      ca.RelClsList = ca.RelCls;\n                      ca.Value = '请';\n                    }\n                    if (ca.Type == '省市区') ca.Value = '请选择';\n                    if (ca.Type == '布尔值') ca.Value = false;\n                    attr.push(ca);\n                  }\n                }\n              }\n              newattrlist.push({\n                BkColor: clsattr.BkColor,\n                HasAce: clsattr.HasAce,\n                ImgFontStyle: clsattr.ImgFontStyle,\n                Name: clsattr.Name,\n                Order: clsattr.Order,\n                Open: open,\n                Attr: attr,\n                control_style: this.$data.classGridStyle.StyleDef.control_style,\n                title_p_wdith: this.$data.classGridStyle.StyleDef.title_p_wdith\n              });\n            }\n          }\n        }\n        if (newattrlist.length > 0) {\n          this.$data.classAttrList = newattrlist;\n        }\n        var req = [];\n        if (this.$data.classGridStyle.StyleDef) {\n          if (this.$data.classGridStyle.StyleDef.show_style.length > 0) {\n            var attrlist = this.$data.classGridStyle.StyleDef.show_style;\n            // $el.find('.attr_field').prop('readonly', true);\n            // $el.find('.attr_field').prop('disabled', true);\n            for (var i = 0; i < attrlist.length; i++) {\n              var attr = attrlist[i].attrs;\n              for (var j = 0; j < attr.length; j++) {\n                var ar = attr[j];\n                req.push({\n                  attr: ar.attr,\n                  val: ar.value ? ar.value : ''\n                });\n              }\n            }\n          }\n        }\n        var eventlist = this.$data.classGridStyle.StyleDef.event;\n        // console.log(eventlist);\n        if (eventlist) {\n          if (eventlist.length > 0) {\n            for (var i = 0; i < eventlist.length; i++) {\n              if (eventlist[i].event_id == 'before_ok') {\n                this.$data.edit_ok_event = eventlist[i];\n              } else if (eventlist[i].event_id == 'initial') {\n                this.$data.edit_inital_event = eventlist[i];\n              } else if (eventlist[i].event_id == 'before_select_compose') {\n                this.$data.edit_select_compose_event = eventlist[i].scrip_id;\n                this.$data.edit_compose_cls_id = eventlist[i].compose_cls_id;\n              }\n            }\n          }\n        }\n        // console.log(req);\n        if (this.$data.edit_inital_event) {\n          var eventid = this.$data.edit_inital_event.scrip_id;\n          var info = {\n            eventid: eventid,\n            edtype: \"0\",\n            projectid: '',\n            rclsid: '',\n            robjid: '',\n            userlogin: '',\n            clsid: this.$data.param.clsid,\n            objid: \"\",\n            attr: req\n          };\n          this.ini_DataObjRunCustomEvent(info);\n        }\n        __f__(\"log\", this.$data.classGridStyle, \" at pages/modal/3018.vue:876\");\n        __f__(\"log\", this.$data.classAttrList, \" at pages/modal/3018.vue:877\");\n      } else {\n        uni.showModal({\n          title: \"提示\",\n          content: \"未找到可显示的的属性\",\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      }\n    },\n    classAttr_extButton: function classAttr_extButton(index, iindex) {\n      //弹框层显示 type:top bottom center left right\n      var $this = this;\n      $this.$data.popupType = 'right';\n      // open 方法传入参数 等同在 uni-popup 组件上绑定 type属性\n      $this.$refs.popup.open($this.popupType);\n      var data_attr = $this.$data.classAttrList[index].Attr[iindex];\n      // var value = action.value;\n      // var action ={\"action_type\":\"open_common_dlg\",\"value\":{\"common_dlg_id\":\"check_list\",\"config\":{\"title\":\"生产工单\",\"appear_style\":\"sideslip\",\"width\":250,\"multiple_choice\":\"1\",\"items\":[{\"id\":\"133D50D7-D798-4D2E-A15F-308365092DF5\",\"name\":\"5100691673\", \"check\":false},{\"id\":\"22992021-7D3B-4959-86B7-EF184B596AC6\",\"name\":\"5100691674\", \"check\":false},{\"id\":\"48FBBE8E-594D-45D5-8C24-385C661C4A1C\",\"name\":\"5100691675\", \"check\":false},{\"id\":\"4E429C60-325A-42ED-BEA3-B3397C07CCA1\",\"name\":\"5100691668\", \"check\":false}]}}}\n      // if (action.action_type == 'open_common_dlg') {\n      // \tvar value = action.value;\n      // \tif(value.common_dlg_id == 'check_list'){\n      // \t   $this.$data.check_list= value.config;\n      // \t}\n      // }\n      // var popupParam={\n      // \tindex: index,\n      // \tiindex: iindex,\n      // \tbutton_callback:\"\",\n      // \treq:\"\",\n      // \tdata_attr:data_attr\n      // }\n      // $this.$data.popupParam= popupParam;\n      // return;\n      var before_click_button = $this.$data.classAttrList[index].Attr[iindex].before_click_button;\n      var button_callback = $this.$data.classAttrList[index].Attr[iindex].button_callback;\n      if (!before_click_button) {\n        uni.showModal({\n          title: \"提示\",\n          content: \"before_click_button-event_id为空!\",\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n        return;\n      }\n      if (!button_callback) {\n        uni.showModal({\n          title: \"提示\",\n          content: \"button_callback-event_id为空!\",\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n        return;\n      }\n      this.DataObjRunCustomEvent_Return(before_click_button, data_attr, button_callback, index, iindex);\n    },\n    popupChange: function popupChange(e) {\n      __f__(\"log\", '当前模式:' + e.type + ',状态:' + e.show, \" at pages/modal/3018.vue:920\");\n    },\n    checkChange: function checkChange(e) {\n      //弹框check选择\n      // console.log(e.target.dataset);\n      var index = e.target.dataset.index;\n      var ischeck = e.target.dataset.ischeck;\n      var data = this.$data.check_list.items;\n      // this.$data.check_list.items=[];\n      if (this.$data.check_list.multiple_choice == \"0\") {\n        //判断时单选还是多选\n        for (var i in data) {\n          data[i].check = false;\n        }\n      }\n      data[index].check = ischeck ? false : true;\n      this.$data.check_list.items = data;\n    },\n    popup_cancel: function popup_cancel(e) {\n      //弹框取消\n      this.$refs.popup.close();\n    },\n    popup_sava: function popup_sava(e) {\n      //弹框确定\n      var $this = this;\n      var items = $this.$data.check_list.items;\n      var data = [];\n      var name = \"\";\n      for (var i = 0; i < items.length; i++) {\n        if (items[i].check == true) {\n          if (name) name += ';';\n          name += items[i].name;\n          data.push({\n            id: items[i].id,\n            name: items[i].name\n          });\n        }\n      }\n      if (!$this.$data.popupParam) {\n        uni.showModal({\n          title: \"提示\",\n          content: \"popupParam为空!\",\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n        return;\n      }\n      $this.$data.classAttrList[$this.$data.popupParam.index].Attr[$this.$data.popupParam.iindex].Value = name;\n      __f__(\"log\", data, \" at pages/modal/3018.vue:958\");\n      var callback_eventid = $this.$data.popupParam.button_callback.trim();\n      var info = {\n        eventid: callback_eventid,\n        edtype: \"0\",\n        projectid: '',\n        rclsid: '',\n        robjid: '',\n        userlogin: '',\n        clsid: $this.$data.param.clsid,\n        objid: \"\",\n        attr: $this.$data.popupParam.req,\n        dataJson: data\n      };\n      $this.DataObjRunCustomEvent(info, $this.$data.popupParam.data_attr);\n      this.$refs.popup.close();\n    },\n    cancel: function cancel(e) {\n      uni.navigateBack({\n        delta: 1 //返回层数,2则上上页\n      });\n    },\n    ontap: function ontap(e) {\n      var _this3 = this;\n      //扫码功能\n      var $ele = e;\n      //console.log(e.target)\n      getApp().onScan(function (result) {\n        //console.log(result.decodedata);\n        _this3.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value = result.decodedata;\n        uni.hideKeyboard();\n        _this3.onevent($ele, result.decodedata);\n      });\n    },\n    onarrow: function onarrow(index, open) {\n      // console.log(index+'--'+open);\n      this.$data.classAttrList[index].Open = open == true ? false : true;\n    },\n    ondateTime: function ondateTime(e) {\n      //console.log(e.target)\n      this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value = e.target.value;\n    },\n    onchange: function onchange(e) {\n      // console.log(e.target);\n      var value = this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].dictitem[e.target.value];\n      var data_attr = this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']];\n      // console.log(data_attr);\n      if (value.Name != data_attr.Value) {\n        this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value = value.Name;\n        // console.log(this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value);\n        var eventid = this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].action;\n        if (eventid) {\n          // self.event_no_sub = 1;\n          var req = [];\n          var attrlist = this.$data.classAttrList;\n          for (var i = 0; i < attrlist.length; i++) {\n            var attr = attrlist[i].Attr;\n            for (var j = 0; j < attr.length; j++) {\n              var ar = attr[j];\n              if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n              if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n                attr: ar.Name,\n                val: ar.ValID ? ar.ValID : ''\n              });else if (ar.Type == '布尔值') req.push({\n                attr: ar.Name,\n                val: ar.Value ? '1' : '0'\n              });else req.push({\n                attr: ar.Name,\n                val: ar.Value ? ar.Value : ''\n              });\n            }\n          }\n          var info = {\n            eventid: eventid,\n            edtype: \"0\",\n            projectid: '',\n            rclsid: '',\n            robjid: '',\n            userlogin: '',\n            clsid: this.$data.param.clsid,\n            objid: \"\",\n            attr: req,\n            dataJson: []\n          };\n          this.DataObjRunCustomEvent(info);\n        }\n      }\n    },\n    onchange2: function onchange2(item, value, delvalue) {\n      // console.log(item);\n      // console.log(value);\n      // console.log(delvalue);\n      //为空时,清空属性value\n      if (item.length == 0) {\n        var index,\n          iindex,\n          dindex = 0;\n        for (var i in this.$data.classAttrList) {\n          for (var j in this.$data.classAttrList[i].Attr) {\n            if (delvalue[0].attr == this.$data.classAttrList[i].Attr[j].Name) {\n              this.$data.classAttrList[i].Attr[j].Value = \"\";\n            }\n          }\n        }\n      }\n      for (var v in item) {\n        var index,\n          iindex,\n          dindex = 0;\n        for (var i in this.$data.classAttrList) {\n          for (var j in this.$data.classAttrList[i].Attr) {\n            if (item[v].attr == this.$data.classAttrList[i].Attr[j].Name) {\n              index = i;\n              iindex = j;\n            }\n          }\n        }\n        var itemvalue = item[v];\n        var data_attr = this.$data.classAttrList[index].Attr[iindex];\n\n        // console.log(data_attr);\n        if (itemvalue.Name != data_attr.Value) {\n          this.$data.classAttrList[index].Attr[iindex].Value = value;\n          // console.log(this.$data.classAttrList[index].Attr[iindex].Value);\n          var eventid = this.$data.classAttrList[index].Attr[iindex].action;\n          if (eventid) {\n            // self.event_no_sub = 1;\n            var req = [];\n            var attrlist = this.$data.classAttrList;\n            for (var i = 0; i < attrlist.length; i++) {\n              var attr = attrlist[i].Attr;\n              for (var j = 0; j < attr.length; j++) {\n                var ar = attr[j];\n                if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n                if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n                  attr: ar.Name,\n                  val: ar.ValID ? ar.ValID : ''\n                });else if (ar.Type == '布尔值') req.push({\n                  attr: ar.Name,\n                  val: ar.Value ? '1' : '0'\n                });else if (ar.Type == '字典' || ar.Type == '字典-字符串' || ar.Type == '字典-整数') req.push({\n                  attr: ar.Name,\n                  val: itemvalue.Name\n                });else req.push({\n                  attr: ar.Name,\n                  val: ar.Value ? ar.Value : ''\n                });\n              }\n            }\n            var info = {\n              eventid: eventid,\n              edtype: \"0\",\n              projectid: '',\n              rclsid: '',\n              robjid: '',\n              userlogin: '',\n              clsid: this.$data.param.clsid,\n              objid: \"\",\n              attr: req,\n              dataJson: []\n            };\n            this.DataObjRunCustomEvent(info);\n          }\n        }\n      }\n    },\n    onevent: function onevent(e, decodedata) {\n      // console.log(e.target);\n      var data_attr = this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']];\n      // console.log(decodedata);\n      if (e.target.value != data_attr.Value) {\n        this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value = decodedata ? decodedata : e.target.value;\n        var eventid = this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].action;\n        if (eventid) {\n          // self.event_no_sub = 1;\n          var req = [];\n          var attrlist = this.$data.classAttrList;\n          for (var i = 0; i < attrlist.length; i++) {\n            var attr = attrlist[i].Attr;\n            for (var j = 0; j < attr.length; j++) {\n              var ar = attr[j];\n              if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n              if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n                attr: ar.Name,\n                val: ar.ValID ? ar.ValID : ''\n              });else if (ar.Type == '布尔值') req.push({\n                attr: ar.Name,\n                val: ar.Value ? '1' : '0'\n              });else req.push({\n                attr: ar.Name,\n                val: ar.Value ? ar.Value : ''\n              });\n            }\n          }\n          var info = {\n            eventid: eventid,\n            edtype: \"0\",\n            projectid: '',\n            rclsid: '',\n            robjid: '',\n            userlogin: '',\n            clsid: this.$data.param.clsid,\n            objid: \"\",\n            attr: req,\n            dataJson: []\n          };\n          this.DataObjRunCustomEvent(info, data_attr);\n        }\n      }\n    },\n    oncheck: function oncheck(e) {\n      // console.log(e.target);\n      var ischecked = e.target.dataset.ischeck ? false : true;\n      var data_attr = this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']];\n      // console.log(data_attr);\n      if (ischecked != data_attr.Value) {\n        this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value = ischecked;\n        var eventid = this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].action;\n        if (eventid) {\n          // self.event_no_sub = 1;\n          var req = [];\n          var attrlist = this.$data.classAttrList;\n          for (var i = 0; i < attrlist.length; i++) {\n            var attr = attrlist[i].Attr;\n            for (var j = 0; j < attr.length; j++) {\n              var ar = attr[j];\n              if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n              if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n                attr: ar.Name,\n                val: ar.ValID ? ar.ValID : ''\n              });else if (ar.Type == '布尔值') req.push({\n                attr: ar.Name,\n                val: ar.Value ? '1' : '0'\n              });else req.push({\n                attr: ar.Name,\n                val: ar.Value ? ar.Value : ''\n              });\n            }\n          }\n          var info = {\n            eventid: eventid,\n            edtype: \"0\",\n            projectid: '',\n            rclsid: '',\n            robjid: '',\n            userlogin: '',\n            clsid: this.$data.param.clsid,\n            objid: \"\",\n            attr: req,\n            dataJson: []\n          };\n          this.DataObjRunCustomEvent(info);\n        }\n      }\n    },\n    inputValListIsDel: function inputValListIsDel(index) {\n      // console.log(index);\n      this.$data.inputValList.splice(index, 1); //删除tabPagejson的内容\n      // console.log(this.$data.inputValList);\n    },\n    addresschange: function addresschange(e) {\n      // console.log(e.target);\n      __f__(\"log\", e.data.join(';'), \" at pages/modal/3018.vue:1207\");\n      this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value = e.data.join(';');\n    },\n    classAttr_AddPer: function classAttr_AddPer(index, iindex) {\n      var param = {\n        index: index,\n        iindex: iindex\n      };\n      var $this = this;\n      uni.navigateTo({\n        url: '../selpsn/index?mulit=false&param=' + JSON.stringify(param),\n        events: {\n          AddPer: function AddPer(data, param) {\n            // console.log(param);\n            __f__(\"log\", data, \" at pages/modal/3018.vue:1218\");\n            $this.$data.classAttrList[param.index].Attr[param.iindex].Value = data[0].Name;\n            $this.$data.classAttrList[param.index].Attr[param.iindex].ValID = data[0].Login + ';' + data[0].Name;\n            var eventid = $this.$data.classAttrList[param.index].Attr[param.iindex].action;\n            if (eventid) {\n              eventid = eventid.trim();\n              if (eventid) {\n                var info = {\n                  eventid: eventid,\n                  edtype: \"4\",\n                  projectid: \"\",\n                  rclsid: \"\",\n                  robjid: \"\",\n                  userlogin: data[0].Login,\n                  clsid: $this.$data.param.clsid,\n                  objid: \"\",\n                  attr: [],\n                  dataJson: []\n                };\n\n                // var data_attr = $this.$data.classAttrList[param.index].Attr[param.iindex];\n                $this.DataObjRunCustomEvent(info);\n              }\n            }\n          }\n        }\n      });\n    },\n    classAttr_AddRef: function classAttr_AddRef(e) {\n      __f__(\"log\", e.target, \" at pages/modal/3018.vue:1248\");\n      uni.showModal({\n        title: \"提示\",\n        content: \"此功能还未实现!\",\n        showCancel: false,\n        confirmText: \"取消\"\n      });\n      // var value=this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].RelCls[e.target.value];\n      // this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value=value;\n    },\n    classAttr_AddPrj: function classAttr_AddPrj(index, iindex) {\n      var param = {\n        index: index,\n        iindex: iindex\n      };\n      var $this = this;\n      uni.navigateTo({\n        url: '../selPrj/index?relation=-1&param=' + JSON.stringify(param),\n        events: {\n          AddPer: function AddPer(data, param) {\n            // console.log(param);\n            // console.log(data);\n            $this.$data.classAttrList[param.index].Attr[param.iindex].Value = data[0].Name;\n            $this.$data.classAttrList[param.index].Attr[param.iindex].ValID = data[0].ID + ';' + data[0].Name;\n            var eventid = $this.$data.classAttrList[param.index].Attr[param.iindex].action;\n            if (eventid) {\n              eventid = eventid.trim();\n              if (eventid) {\n                var info = {\n                  eventid: eventid,\n                  edtype: \"2\",\n                  projectid: data[0].ID,\n                  rclsid: \"\",\n                  robjid: \"\",\n                  userlogin: \"\",\n                  clsid: $this.$data.param.clsid,\n                  objid: \"\",\n                  attr: [],\n                  dataJson: []\n                };\n\n                // var data_attr = $this.$data.classAttrList[param.index].Attr[param.iindex];\n                $this.DataObjRunCustomEvent(info);\n              }\n            }\n          }\n        }\n      });\n    },\n    //确定\n    sava: function sava() {\n      if (this.$data.edit_ok_event) this.OKDataObjRunCustomEvent();else this.add();\n    },\n    add: function add() {\n      var _this4 = this;\n      uni.showLoading({\n        title: \"加载中...\",\n        mask: true\n      });\n      var req = [];\n      var attrlist = this.$data.classAttrList;\n      for (var i = 0; i < attrlist.length; i++) {\n        var attr = attrlist[i].Attr;\n        for (var j = 0; j < attr.length; j++) {\n          var ar = attr[j];\n          if (ar.Value == '请选择' || ar.Value == '——请选择——') ar.Value = '';\n          if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n          if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n            name: ar.Name,\n            value: ar.ValID ? ar.ValID : ''\n          });else if (ar.Type == '布尔值') req.push({\n            name: ar.Name,\n            value: ar.Value ? '1' : '0'\n          });else if (ar.Type == '字典' || ar.Type == '字典-字符串' || ar.Type == '字典-整数') {\n            if (ar.select == true) {\n              //判断下拉是否多选\n              var valStr = \"\";\n              for (var v in ar.Value) {\n                if (valStr) valStr += \";\";\n                valStr += ar.Value[v];\n              }\n              req.push({\n                name: ar.Name,\n                value: valStr\n              });\n            } else req.push({\n              name: ar.Name,\n              value: ar.Value\n            });\n          } else req.push({\n            name: ar.Name,\n            value: ar.Value ? ar.Value : ''\n          });\n          if (ar.notempty == true && !ar.Value) {\n            // if(ar.NotEmpty=='1'){\n            uni.hideLoading();\n            // uni.showToast({title:ar.DispName+'不能为空!',icon:\"success\",duration:3000});\n            uni.showModal({\n              title: \"提示\",\n              content: ar.DispName + '不能为空!',\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n            return;\n          }\n        }\n      }\n      var enviroment = {\n        'function': '3000',\n        // 功能点编号\n        cls_id: this.$data.param.clsid,\n        // 功能点主数据类标识\n        'button': 'top',\n        // top/bottom\n        button_name: '新增',\n        master: {\n          cls_id: this.$data.param.clsid\n        }\n      };\n      enviroment = _base.default.encode(JSON.stringify(enviroment)); //将字符串转换为base64编码\n      var obj_attr = {};\n      req.forEach(function (item) {\n        obj_attr[item.name] = item.value;\n      });\n      // console.log(obj_attr);\n      // var dataInfo={\n      //     class_id: this.$data.param.clsid, data_obj_id: '', masterclsid: '',\n      //     req: JSON.stringify(req), upfile: JSON.stringify([]), post_data: JSON.stringify({}),\n      //     compose: JSON.stringify([]), refdatastore: JSON.stringify([]), extinfo: JSON.stringify(enviroment), \n      // \tnot_trigger_sys_event: ''\n      // };\n      var dataInfo = {\n        class_id: this.$data.param.clsid,\n        class_name: '',\n        master_cls_id: '',\n        master_obj_id: '',\n        creator: '',\n        creator_name: '',\n        not_trigger_event: '',\n        update_exist: '',\n        post_process: '',\n        ext_info: enviroment,\n        obj_attr: obj_attr\n      };\n      __f__(\"log\", dataInfo, \" at pages/modal/3018.vue:1374\");\n      // return\n      this.$store.dispatch('createDataObj', dataInfo).then(function (success) {\n        __f__(\"log\", success, \" at pages/modal/3018.vue:1377\");\n        uni.hideLoading();\n        if (success.err_code == 0) {\n          var result = success.result;\n          // if(result.result_type == 0){}\n          if (success.result.action) {\n            var action = JSON.parse(success.result.action);\n            __f__(\"log\", action, \" at pages/modal/3018.vue:1384\");\n            if (action.ret == '0') {\n              if (action.ret != 0) {\n                uni.showModal({\n                  title: \"提示\",\n                  content: '执行脚本失败,' + action.result,\n                  showCancel: false,\n                  confirmText: \"取消\"\n                });\n                return;\n              }\n              if (action.info) {\n                uni.showModal({\n                  title: \"提示\",\n                  content: '执行脚本失败,' + action.info,\n                  showCancel: false,\n                  confirmText: \"取消\"\n                });\n                return;\n              }\n              if (action.result_type == '0') {\n                uni.showToast({\n                  title: action.result,\n                  icon: \"success\",\n                  duration: 3000\n                });\n              }\n\n              // \"{\"ret\":0, \"result_type\":0, \"result\":\"创建成功123123123\",\"info\":\"\"}\"\n            }\n          } else uni.showToast({\n            title: \"创建成功!\",\n            icon: \"success\",\n            duration: 3000\n          });\n          //刷新\n          uni.redirectTo({\n            url: '../modal/3018?param=' + JSON.stringify(_this4.$data.param) + \"&titlename=\" + _this4.$data.title\n          });\n          // this.class_attr_init();\n        } else {\n          uni.showModal({\n            title: \"错误\",\n            content: success.err_msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        __f__(\"log\", ex, \" at pages/modal/3018.vue:1411\");\n        uni.hideLoading();\n        uni.showModal({\n          title: \"提示\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\n    },\n    ini_DataObjRunCustomEvent: function ini_DataObjRunCustomEvent(info) {\n      var _this5 = this;\n      var param = {\n        EditStyle: this.$data.param.Edit_dlg.Name,\n        ViewStyle: this.$data.param.Edit_dlg.Name,\n        NotTriggerSysEvent: 0,\n        enviroment: {\n          'function': '3000',\n          // 功能点编号\n          cls_id: this.$data.param.clsid,\n          // 功能点主数据类标识\n          'button': 'top',\n          // top/bottom\n          button_name: '新增',\n          master: {\n            cls_id: this.$data.param.clsid // button=bottom时 master的cls_id\n            //obj_id: ''  // button=bottom时 master的obj_id\n          }\n        }\n      };\n\n      var inputparameter = '';\n      var global_attr = '';\n      param.enviroment = _base.default.encode(JSON.stringify(param.enviroment)); //将字符串转换为base64编码\n      var obj_attr = {};\n      info.attr.forEach(function (item) {\n        obj_attr[item.attr] = item.val;\n      });\n      // console.log(obj_attr);\n      // var dataInfo = {\n      //                 edtype: info.edtype, eventid: info.eventid, projectid: info.projectid,\n      //                 rclsid: info.rclsid, robjid: info.robjid, userlogin: info.userlogin, clsid: info.clsid, objid: info.objid,\n      //                 attr: JSON.stringify(info.attr), extinfo: JSON.stringify(param.enviroment), inputparameter: inputparameter, global_attr: global_attr\n      //             }\n      if (!info.eventid.includes('{')) info.eventid = '{' + info.eventid + '}';\n      var dataInfo = {\n        ed_type: info.edtype,\n        start_transaction: '',\n        class_id: info.clsid,\n        class_name: '',\n        event_id: info.eventid,\n        event_name: '',\n        data_obj_id: info.objid,\n        obj_attr: obj_attr,\n        prj_id: info.projectid,\n        ref_cls_id: info.rclsid,\n        rel_obj_id: info.robjid,\n        user_login: info.userlogin,\n        data_json: '',\n        compose_info: '',\n        ext_info: param.enviroment,\n        global_attr: global_attr,\n        input_param: inputparameter\n      };\n      __f__(\"log\", dataInfo, \" at pages/modal/3018.vue:1466\");\n      // return;\n      this.$store.dispatch('runCustomEvent', dataInfo).then(function (success) {\n        __f__(\"log\", success, \" at pages/modal/3018.vue:1469\");\n        if (success.err_code == 0) {\n          var data = success.result;\n          if (data.ret != 0) {\n            var tip = data.err_info ? typeof data.err_info == 'string' ? data.err_info : data.err_info.join('<br/>') : '';\n            if (data.ret == 801) uni.showModal({\n              title: '提示',\n              content: tip,\n              showCancel: false,\n              confirmText: \"取消\"\n            });else uni.showModal({\n              title: '提示',\n              content: tip + ',提示:' + data.ret,\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n            return false;\n          } else {\n            var _tip = data.info ? typeof data.info == 'string' ? data.info : data.info.join('<br/>') : '';\n            if (_tip) uni.showModal({\n              title: '提示',\n              content: _tip,\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n            if (data.action) {\n              var actionlist = data.action;\n              if (actionlist) {\n                for (var j = 0; j < actionlist.length; j++) {\n                  var action = actionlist[j];\n                  var action_type = action.action_type;\n                  var value = action.value;\n                  if (action_type == 'set_dlg_attr') {\n                    if (value) {\n                      __f__(\"log\", value, \" at pages/modal/3018.vue:1490\");\n                      for (var i = 0; i < value.length; i++) {\n                        for (var a = 0; a < _this5.$data.classAttrList.length; a++) {\n                          for (var l = 0; l < _this5.$data.classAttrList[a].Attr.length; l++) {\n                            var ca = _this5.$data.classAttrList[a].Attr[l];\n                            if (value[i].attr == ca.Name) {\n                              if (ca.Type == '字典' || ca.Type == '字典-字符串' || ca.Type == '字典-整数') {\n                                var dictItemList = [];\n                                for (var d in value[i].choice_list) {\n                                  var list_val = value[i].choice_list[d];\n                                  dictItemList.push({\n                                    \"CN_S_NAME\": list_val,\n                                    \"Name\": list_val,\n                                    \"label\": list_val,\n                                    \"value\": list_val\n                                  });\n                                }\n                                ca.dictitem = dictItemList;\n                                // attr[j].dictitem = val[i].choice_list;\n                              } else {\n                                ca.Value = value[i].value;\n                              }\n                            }\n                          }\n                        }\n                        var length = 0;\n                        if (!_this5.$data.refdatastore.filter(function (s) {\n                          return value[i].attr == s.attr;\n                        }).length) {\n                          length = 1;\n                          _this5.$data.refdatastore.push(value[i]);\n                        }\n                        if (length == 0) {\n                          for (var j = 0; j < _this5.$data.refdatastore.length; j++) {\n                            if (_this5.$data.refdatastore[j].attr == value[i].attr) {\n                              _this5.$data.refdatastore[j].value = value[i].value;\n                            }\n                          }\n                        }\n                      }\n                    }\n                  }\n                  if (action_type == 'open_select_userdlg') {\n                    uni.showModal({\n                      title: \"错误2.2\",\n                      content: \"open_select_userdlg这个action_type还未处理!\",\n                      showCancel: false,\n                      confirmText: \"取消\"\n                    });\n                  }\n                  // else if (action_type == 'tip_dlg') {\n\n                  // }\n                }\n              }\n            }\n          }\n        } else {\n          uni.showModal({\n            title: \"错误2\",\n            content: success.err_msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        // console.log(ex);\n        uni.showModal({\n          title: \"错误2.1\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\n    },\n    DataObjRunCustomEvent: function DataObjRunCustomEvent(info, data_attr) {\n      var $this = this;\n      var enviroment = {\n        'function': '3000',\n        // 功能点编号\n        cls_id: this.$data.param.clsid,\n        // 功能点主数据类标识\n        'button': 'top',\n        // top/bottom\n        button_name: '新增',\n        master: {\n          cls_id: this.$data.param.clsid // button=bottom时 master的cls_id\n          //obj_id: ''  // button=bottom时 master的obj_id\n        }\n      };\n\n      if (data_attr) {\n        enviroment.edit_dlg = {\n          type: 'small',\n          //小窗口\n          class_id: this.$data.param.clsid //当前数据类id\n        };\n\n        if (data_attr) {\n          enviroment.edit_dlg.form_control = {\n            //所属的表单控件\n            name: data_attr.Name,\n            //字段属性\n            text: data_attr.DispName,\n            //显示文本\n            group_name: data_attr.GroupName,\n            //属性组\n            type: data_attr.Type,\n            //字段类型\n            readonly: data_attr.ReadOnly,\n            //是否只读\n            button_img: data_attr.button_img,\n            //引用按钮的图标\n            button_tooltip: data_attr.button_tooltip //引用按钮的tooltip\n          };\n        }\n      }\n\n      // var dataInfo = {\n      //     edtype: info.edtype, eventid: info.eventid, projectid: info.projectid.replace('{','').replace('}',''),\n      //     rclsid: info.rclsid, robjid: info.robjid, userlogin: info.userlogin, clsid: info.clsid, objid: info.objid,\n      //     attr: JSON.stringify(info.attr), extinfo: JSON.stringify(enviroment), inputparameter: \"\",\n      // \tglobal_attr: JSON.stringify(this.$data.global_attr), dataJson:JSON.stringify(info.dataJson)\n      // }\n      enviroment = _base.default.encode(JSON.stringify(enviroment)); //将字符串转换为base64编码\n      var global_attr = _base.default.encode(JSON.stringify(this.$data.global_attr)); //将字符串转换为base64编码\n      if (info.dataJson) info.dataJson = _base.default.encode(JSON.stringify(info.dataJson)); //将字符串转换为base64编码\n      var obj_attr = {};\n      info.attr.forEach(function (item) {\n        obj_attr[item.attr] = item.val;\n      });\n      if (!info.eventid.includes('{')) info.eventid = '{' + info.eventid + '}';\n      var dataInfo = {\n        ed_type: info.edtype,\n        start_transaction: '',\n        class_id: info.clsid,\n        class_name: '',\n        event_id: info.eventid,\n        event_name: '',\n        data_obj_id: info.objid,\n        obj_attr: obj_attr,\n        prj_id: info.projectid,\n        ref_cls_id: info.rclsid,\n        rel_obj_id: info.robjid,\n        user_login: info.userlogin,\n        data_json: info.dataJson,\n        compose_info: '',\n        ext_info: enviroment,\n        global_attr: global_attr,\n        input_param: ''\n      };\n      __f__(\"log\", dataInfo, \" at pages/modal/3018.vue:1611\");\n      // return;\n      this.$store.dispatch('runCustomEvent', dataInfo).then(function (success) {\n        __f__(\"log\", success, \" at pages/modal/3018.vue:1614\");\n        if (success.err_code == 0) {\n          var data = success.result;\n          if (data.ret != 0) {\n            var tip = data.err_info ? typeof data.err_info == 'string' ? data.err_info : data.err_info.join('<br/>') : '';\n            if (data.ret == 801) uni.showModal({\n              title: '提示',\n              content: tip,\n              showCancel: false,\n              confirmText: \"取消\"\n            });else uni.showModal({\n              title: '提示',\n              content: tip + ',提示:' + data.ret,\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n            return false;\n          } else {\n            var _tip2 = data.info ? typeof data.info == 'string' ? data.info : data.info.join('<br/>') : '';\n            if (_tip2) uni.showModal({\n              title: '提示',\n              content: _tip2,\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n            var actionlist = data.action;\n            if (actionlist) {\n              __f__(\"log\", actionlist, \" at pages/modal/3018.vue:1628\");\n              for (var i = 0; i < actionlist.length; i++) {\n                var action = actionlist[i];\n                if (action.action_type == 'set_dlg_attr') {\n                  var result = action.value;\n                  for (var i = 0; i < result.length; i++) {\n                    if (result[i].choice_list) {\n                      for (var c = 0; c < $this.$data.classAttrList.length; c++) {\n                        var attr = $this.$data.classAttrList[c].Attr;\n                        for (var j = 0; j < attr.length; j++) {\n                          if (attr[j].Name == result[i].attr) {\n                            if (attr[j].Type == '字典' || attr[j].Type == '字典-字符串' || attr[j].Type == '字典-整数') {\n                              var dictItemList = [];\n                              for (var d in result[i].choice_list) {\n                                var val = result[i].choice_list[d];\n                                dictItemList.push({\n                                  \"CN_S_NAME\": val,\n                                  \"Name\": val,\n                                  \"label\": val,\n                                  \"value\": val\n                                });\n                              }\n                              attr[j].dictitem = dictItemList;\n                              // attr[j].dictitem = result[i].choice_list;\n                            }\n                          }\n                        }\n                      }\n                    }\n\n                    for (var c = 0; c < $this.$data.classAttrList.length; c++) {\n                      var attr = $this.$data.classAttrList[c].Attr;\n                      for (var j = 0; j < attr.length; j++) {\n                        __f__(\"log\", attr[j].Name + '==' + result[i].attr, \" at pages/modal/3018.vue:1655\");\n                        if (attr[j].Name == result[i].attr) {\n                          attr[j].Value = result[i].value;\n                        }\n                      }\n                    }\n                    var length = 0;\n                    if (!$this.$data.refdatastore.filter(function (s) {\n                      return result[i].attr == s.attr;\n                    }).length) {\n                      length = 1;\n                      $this.$data.refdatastore.push(result[i]);\n                    }\n                    if (length == 0) {\n                      for (var j = 0; j < $this.$data.refdatastore.length; j++) {\n                        if ($this.$data.refdatastore[j].attr == result[i].attr) {\n                          $this.$data.refdatastore[j].value = result[i].value;\n                        }\n                      }\n                    }\n                  }\n                } else if (data.action[i].action_type == 'set_global_attr') {\n                  $this.$data.global_attr = data.action[i].value || [];\n                }\n              }\n            }\n            if (data.result) {\n              var result = data.result;\n              for (var i = 0; i < result.length; i++) {\n                for (var c = 0; c < $this.$data.classAttrList.length; c++) {\n                  var attr = $this.$data.classAttrList[c].Attr;\n                  for (var j = 0; j < attr.length; j++) {\n                    if (attr[j].Name == result[i].attr) {\n                      attr[j].Value = result[i].value;\n                    }\n                  }\n                }\n                var length = 0;\n                if (!$this.$data.refdatastore.filter(function (s) {\n                  return result[i].attr == s.attr;\n                }).length) {\n                  length = 1;\n                  $this.$data.refdatastore.push(result[i]);\n                }\n                if (length == 0) {\n                  for (var j = 0; j < $this.$data.refdatastore.length; j++) {\n                    if ($this.$data.refdatastore[j].attr == result[i].attr) {\n                      $this.$data.refdatastore[j].value = result[i].value;\n                    }\n                  }\n                }\n              }\n            }\n          }\n        } else {\n          uni.showModal({\n            title: \"错误3\",\n            content: success.err_msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        // console.log(ex);\n        uni.showModal({\n          title: \"错误3.1\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\n    },\n    OKDataObjRunCustomEvent: function OKDataObjRunCustomEvent() {\n      var _this6 = this;\n      var enviroment = {\n        'function': '3000',\n        // 功能点编号\n        cls_id: this.$data.param.clsid,\n        // 功能点主数据类标识\n        'button': 'top',\n        // top/bottom\n        button_name: '新增',\n        master: {\n          cls_id: this.$data.param.clsid // button=bottom时 master的cls_id\n        }\n      };\n\n      var eventid = this.$data.edit_ok_event.scrip_id;\n      var req = [];\n      var attrlist = this.$data.classAttrList;\n      for (var i = 0; i < attrlist.length; i++) {\n        var attr = attrlist[i].Attr;\n        for (var j = 0; j < attr.length; j++) {\n          var ar = attr[j];\n          if (ar.Value == '请选择' || ar.Value == '——请选择——') ar.Value = '';\n          if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n          if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n            attr: ar.Name,\n            val: ar.ValID ? ar.ValID : ''\n          });else if (ar.Type == '布尔值') req.push({\n            attr: ar.Name,\n            val: ar.Value ? '1' : '0'\n          });else req.push({\n            attr: ar.Name,\n            val: ar.Value\n          });\n        }\n      }\n      if (this.$data.refdatastore.length > 0) {\n        for (var i = 0; i < this.$data.refdatastore.length; i++) {\n          if (!req.filter(function (s) {\n            return this.$data.refdatastore[i].attr == s.name;\n          }).length) {\n            length = 1;\n            req.push({\n              'attr': this.$data.refdatastore[i].attr,\n              'val': this.$data.refdatastore[i].value\n            });\n          }\n        }\n      }\n      var info = {\n        eventid: eventid,\n        edtype: \"0\",\n        projectid: '',\n        rclsid: '',\n        robjid: '',\n        userlogin: '',\n        clsid: this.$data.param.clsid,\n        objid: \"\",\n        attr: req\n      };\n      //  \tvar dataInfo = {\n      //          edtype: info.edtype, eventid: info.eventid, projectid: info.projectid,rclsid: info.rclsid, \n      // robjid: info.robjid, userlogin: info.userlogin, clsid: info.clsid, objid: info.objid,\n      // attr: JSON.stringify(info.attr), extinfo: JSON.stringify(enviroment), global_attr: JSON.stringify(this.$data.global_attr)\n      //      }\n\n      enviroment = _base.default.encode(JSON.stringify(enviroment)); //将字符串转换为base64编码\n      var global_attr = _base.default.encode(JSON.stringify(this.$data.global_attr)); //将字符串转换为base64编码\n      var obj_attr = {};\n      info.attr.forEach(function (item) {\n        obj_attr[item.attr] = item.val;\n      });\n      if (!eventid.includes('{')) eventid = '{' + eventid + '}';\n      var dataInfo = {\n        ed_type: info.edtype,\n        start_transaction: '',\n        class_id: info.clsid,\n        class_name: '',\n        event_id: eventid,\n        event_name: '',\n        data_obj_id: info.objid,\n        obj_attr: obj_attr,\n        prj_id: info.projectid,\n        ref_cls_id: info.rclsid,\n        rel_obj_id: info.robjid,\n        user_login: info.userlogin,\n        data_json: '',\n        compose_info: '',\n        ext_info: enviroment,\n        global_attr: global_attr,\n        input_param: ''\n      };\n      __f__(\"log\", dataInfo, \" at pages/modal/3018.vue:1801\");\n      // return;\n      this.$store.dispatch('runCustomEvent', dataInfo).then(function (success) {\n        __f__(\"log\", success, \" at pages/modal/3018.vue:1804\");\n        if (success.err_code == 0) {\n          var data = success.result;\n          if (data.ret != 0) {\n            var tip = data.err_info ? typeof data.err_info == 'string' ? data.err_info : data.err_info.join('<br/>') : '';\n            if (data.ret == 801) uni.showModal({\n              title: '提示',\n              content: tip,\n              showCancel: false,\n              confirmText: \"取消\"\n            });else uni.showModal({\n              title: '提示',\n              content: tip + ',提示:' + data.ret,\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n            return false;\n          } else {\n            var _tip3 = data.info ? typeof data.info == 'string' ? data.info : data.info.join('<br/>') : '';\n            if (_tip3) uni.showModal({\n              title: '提示',\n              content: _tip3,\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n            var result = data.result;\n            for (var i = 0; i < result.length; i++) {\n              // self.class_attr_ele.find('.attr_field[data-field=\"' + result[i].attr + '\"]').val(result[i].value).data('val', result[i].value);\n              var length = 0;\n              if (!_this6.$data.refdatastore.filter(function (s) {\n                return result[i].attr == s.attr;\n              }).length) {\n                length = 1;\n                _this6.$data.refdatastore.push(result[i]);\n              }\n              if (length == 0) {\n                for (var j = 0; j < _this6.$data.refdatastore.length; j++) {\n                  if (_this6.$data.refdatastore[j].attr == result[i].attr) {\n                    _this6.$data.refdatastore[j].value = result[i].value;\n                  }\n                }\n              }\n            }\n            _this6.add();\n          }\n        } else {\n          uni.showModal({\n            title: \"错误4\",\n            content: success.err_msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        // console.log(ex);\n        uni.showModal({\n          title: \"错误4.1\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\n    },\n    DataObjRunCustomEvent_Return: function DataObjRunCustomEvent_Return(eventid, data_attr, button_callback, index, iindex) {\n      var _this7 = this;\n      var enviroment = {\n        'function': '3000',\n        // 功能点编号\n        cls_id: this.$data.param.clsid,\n        // 功能点主数据类标识\n        'button': 'top',\n        // top/bottom\n        button_name: '新增',\n        master: {\n          cls_id: this.$data.param.clsid // button=bottom时 master的cls_id\n          //obj_id: ''  // button=bottom时 master的obj_id\n        }\n      };\n\n      var req = [];\n      var attrlist = this.$data.classAttrList;\n      for (var i = 0; i < attrlist.length; i++) {\n        var attr = attrlist[i].Attr;\n        for (var j = 0; j < attr.length; j++) {\n          var ar = attr[j];\n          if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n          if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n            attr: ar.Name,\n            val: ar.ValID ? ar.ValID : ''\n          });else if (ar.Type == '布尔值') req.push({\n            attr: ar.Name,\n            val: ar.Value ? '1' : '0'\n          });else req.push({\n            attr: ar.Name,\n            val: ar.Value\n          });\n        }\n      }\n      if (this.$data.refdatastore.length > 0) {\n        for (var i = 0; i < this.$data.refdatastore.length; i++) {\n          if (!req.filter(function (s) {\n            return this.$data.refdatastore[i].attr == s.name;\n          }).length) {\n            length = 1;\n            req.push({\n              'attr': this.$data.refdatastore[i].attr,\n              'val': this.$data.refdatastore[i].value\n            });\n          }\n        }\n      }\n      var extinfo = enviroment;\n      extinfo.edit_dlg = {\n        type: 'small',\n        //小窗口\n        class_id: this.$data.param.clsid //当前数据类id\n      };\n\n      if (data_attr) {\n        extinfo.edit_dlg.form_control = {\n          //所属的表单控件\n          name: data_attr.Name,\n          //字段属性\n          text: data_attr.DispName,\n          //显示文本\n          group_name: data_attr.GroupName,\n          //属性组\n          type: data_attr.Type,\n          //字段类型\n          readonly: data_attr.ReadOnly,\n          //是否只读\n          button_img: data_attr.button_img,\n          //引用按钮的图标\n          button_tooltip: data_attr.button_tooltip //引用按钮的tooltip\n        };\n      }\n      // var dataInfo = {\n      // \tedtype:  \"0\", eventid: eventid, projectid: '',rclsid: '', robjid: '', userlogin: '', \n      // \tclsid: this.$data.param.clsid, objid: '',attr: JSON.stringify(req), \n      // \textinfo: JSON.stringify(extinfo), global_attr: JSON.stringify(this.$data.global_attr)\n      // }\n      extinfo = _base.default.encode(JSON.stringify(extinfo)); //将字符串转换为base64编码\n      var global_attr = _base.default.encode(JSON.stringify(this.$data.global_attr)); //将字符串转换为base64编码\n      var obj_attr = {};\n      req.forEach(function (item) {\n        obj_attr[item.attr] = item.val;\n      });\n      if (!eventid.includes('{')) eventid = '{' + eventid + '}';\n      var dataInfo = {\n        ed_type: \"0\",\n        start_transaction: '',\n        class_id: this.$data.param.clsid,\n        class_name: '',\n        event_id: eventid,\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: extinfo,\n        global_attr: global_attr,\n        input_param: ''\n      };\n      __f__(\"log\", dataInfo, \" at pages/modal/3018.vue:1929\");\n      // return;\n      this.$store.dispatch('runCustomEvent', dataInfo).then(function (success) {\n        __f__(\"log\", success, \" at pages/modal/3018.vue:1932\");\n        if (success.err_code == 0) {\n          var data = success.result;\n          if (data.ret != 0) {\n            var tip = data.err_info ? typeof data.err_info == 'string' ? data.err_info : data.err_info.join('<br/>') : '';\n            if (data.ret == 801) uni.showModal({\n              title: '提示',\n              content: tip,\n              showCancel: false,\n              confirmText: \"取消\"\n            });else uni.showModal({\n              title: '提示',\n              content: tip + ',提示:' + data.ret,\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n            return false;\n          } else {\n            var _tip4 = data.info ? typeof data.info == 'string' ? data.info : data.info.join('<br/>') : '';\n            if (_tip4) uni.showModal({\n              title: '提示',\n              content: _tip4,\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n            if (data != \"\") {\n              var actions = data.action;\n              __f__(\"log\", actions, \" at pages/modal/3018.vue:1946\");\n              if (actions) {\n                for (var i = 0; i < actions.length; i++) {\n                  var action = actions[i];\n                  var val = action.value;\n                  var enviroment = JSON.stringify(enviroment);\n                  if (action.action_type == 'open_panel') {\n                    var d = dialog({\n                      title: '<i class=\"ace-icon fa fa-info-circle\"></i> ' + '提示',\n                      content: action.action_type + '此action尚未处理!'\n                    });\n                    d.show();\n                  } else if (action.action_type == 'open_select_userdlg') {\n                    var style = val.style;\n                    // style == 'user' ? '选择人员' : style == 'department' ? '选择部门' : style == 'role' ? '选择角色' : ''\n                    var $this = _this7;\n                    var param = {\n                      index: index,\n                      iindex: iindex,\n                      button_callback: button_callback,\n                      req: req,\n                      data_attr: data_attr\n                    };\n                    uni.navigateTo({\n                      url: '../selpsn/index?mulit=false&param=' + JSON.stringify(param),\n                      events: {\n                        AddPer: function AddPer(data, param) {\n                          // console.log(param);\n                          __f__(\"log\", data, \" at pages/modal/3018.vue:1976\");\n                          var callback_eventid = param.button_callback.trim();\n                          var info = {\n                            eventid: callback_eventid,\n                            edtype: \"0\",\n                            projectid: '',\n                            rclsid: '',\n                            robjid: '',\n                            userlogin: '',\n                            clsid: $this.$data.param.clsid,\n                            objid: \"\",\n                            attr: param.req,\n                            inputparameter: data,\n                            dataJson: []\n                          };\n                          $this.DataObjRunCustomEvent(info, param.data_attr);\n                        }\n                      }\n                    });\n                  } else if (action.action_type == 'open_data_query_dlg') {\n                    var d = dialog({\n                      title: '<i class=\"ace-icon fa fa-info-circle\"></i> ' + '提示',\n                      content: action.action_type + '此action尚未处理!'\n                    });\n                    d.show();\n                  } else if (action.action_type == 'open_common_dlg') {\n                    var $this = _this7;\n                    if (val.common_dlg_id == 'check_list') {\n                      $this.$data.check_list = val.config;\n                      if (val.config.appear_style == 'sideslip')\n                        //判断是否是侧滑\n                        $this.$data.popupType = 'right';else $this.$data.popupType = 'center';\n                      // open 方法传入参数 等同在 uni-popup 组件上绑定 type属性\n                      $this.$refs.popup.open($this.$data.popupType);\n                      var popupParam = {\n                        index: index,\n                        iindex: iindex,\n                        button_callback: button_callback,\n                        req: req,\n                        data_attr: data_attr\n                      };\n                      $this.$data.popupParam = popupParam;\n                    }\n                  } else if (action.action_type == 'open_project_query_dlg') {\n                    //console.log(action.value.select_range);\n                    //console.log(action.value.mulit_select);\n                    var priRel = '-1';\n                    if (action.value.select_range == '全部相关') priRel = '0';else if (action.value.select_range == '我负责的项目') priRel = '1';else if (action.value.select_range == '我创建的') priRel = '2';else if (action.value.select_range == '我参与的' || action.value.select_range == '我参加的') priRel = '3';else if (action.value.select_range == '我关注的') priRel = '4';else if (action.value.select_range == '我下属的项目') priRel = '5';\n                    var $this = _this7;\n                    var param_ = {\n                      index: index,\n                      iindex: iindex,\n                      button_callback: button_callback,\n                      req: req\n                    };\n                    uni.navigateTo({\n                      url: '../selPrj/index?relation=' + priRel + '&param=' + JSON.stringify(param_),\n                      events: {\n                        AddPer: function AddPer(data, param) {\n                          $this.$data.classAttrList[param.index].Attr[param.iindex].Value = data[0].Name;\n                          $this.$data.classAttrList[param.index].Attr[param.iindex].ValID = data[0].ID + ';' + data[0].Name;\n                          var callback_eventid = param.button_callback.trim();\n                          if (callback_eventid) {\n                            var info = {\n                              eventid: callback_eventid,\n                              edtype: \"2\",\n                              projectid: data[0].ID,\n                              rclsid: \"\",\n                              robjid: \"\",\n                              userlogin: \"\",\n                              clsid: $this.$data.param.clsid,\n                              objid: \"\",\n                              attr: param.req,\n                              dataJson: []\n                            };\n                            $this.DataObjRunCustomEvent(info);\n                          }\n                        }\n                      }\n                    });\n                  } else {\n                    var d = dialog({\n                      title: '<i class=\"ace-icon fa fa-info-circle\"></i> ' + '提示',\n                      content: action.action_type + '此action尚未处理!'\n                    });\n                    d.show();\n                  }\n                }\n              }\n            } else {\n              uni.showModal({\n                title: \"提示5.2\",\n                content: '调用 before_click_button 脚本返回空,event_id' + eventid,\n                showCancel: false,\n                confirmText: \"取消\"\n              });\n            }\n          }\n        } else {\n          uni.showModal({\n            title: \"错误5\",\n            content: success.err_msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        // console.log(ex);\n        uni.showModal({\n          title: \"提示5.1\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vcGFnZXMvbW9kYWwvMzAxOC52dWUiXSwibmFtZXMiOlsibW9kdWxlcyIsIkJhc2U2NCIsImNvbXBvbmVudHMiLCJwaWNrZXJBZGRyZXNzIiwiZGF0YSIsInRpdGxlIiwicGFyYW0iLCJjbGFzc0F0dHJMaXN0IiwiY2xhc3NHcmlkU3R5bGUiLCJlZGl0X2luaXRhbF9ldmVudCIsImVkaXRfb2tfZXZlbnQiLCJlZGl0X3NlbGVjdF9jb21wb3NlX2V2ZW50IiwiZWRpdF9jb21wb3NlX2Nsc19pZCIsImdsb2JhbF9hdHRyIiwicmVmZGF0YXN0b3JlIiwiaW5wdXRWYWxMaXN0IiwiTmFtZSIsInBvcHVwVHlwZSIsImNoZWNrX2xpc3QiLCJwb3B1cFBhcmFtIiwib25Mb2FkIiwib3B0aW9ucyIsInVuaSIsInNldE5hdmlnYXRpb25CYXJUaXRsZSIsInRpdGxlbmFtZSIsIkpTT04iLCJwYXJzZSIsIiRkYXRhIiwiQWRkX0J0bk5hbWUiLCJFZGl0RGxnTW9kZSIsInNob3dNb2RhbCIsImNvbnRlbnQiLCJzaG93Q2FuY2VsIiwiY29uZmlybVRleHQiLCJFZGl0X2RsZyIsImVkaXRfZGxnIiwiTW9kZWwiLCJkYXRhSW5mbyIsImNsYXNzX2lkIiwiY2xzaWQiLCJjbGFzc19uYW1lIiwiZ3JvdXBfbmFtZSIsIiR0aGlzIiwiJHN0b3JlIiwic3RhdGUiLCJ0aGlzYXJlYUZ1bmNJRCIsImdldHRlcnMiLCJnZXRjbGFzc0F0dHJMaXN0IiwiY2xhc3NHcmlkU3R5bGVJbmZvIiwiZGlzcGF0Y2giLCJ0aGVuIiwic3VjY2VzcyIsImVycl9jb2RlIiwicmVzdWx0IiwiZm9yRWFjaCIsImdyb3VwIiwiaW5kZXgiLCJhdHRyX2xpc3QiLCJhdHRyIiwia2V5IiwidHlwZSIsIkRpY3RJdGVtR2V0TGlzdCIsInNldFRpbWVvdXQiLCJlcnJfbXNnIiwiY2F0Y2giLCJleCIsImVyck1zZyIsIm1ldGhvZHMiLCJkaWN0X2lkIiwiZGljdF9uYW1lIiwiZGljdGl0ZW0iLCJjb21taXQiLCJncmlkc3R5bGVJbmZvIiwidWlfc3R5bGVfdHlwZSIsInVpX3N0eWxlX25hbWUiLCJ0aGlzRWRpdE5hbWUiLCJnZXRjbGFzc0dyaWRTdHlsZUluZm8iLCJ2aWV3UGFyYW0iLCJzdHlsZWRlZiIsImRlY29kZSIsInN0eWxlX2RlZiIsImNsYXNzX2dyaWRTdHlsZSIsIklEIiwiaWQiLCJuYW1lIiwiVHlwZSIsIklzRGVmYXVsdCIsImlzX2RlZmF1bCIsIlN0eWxlRGVmIiwiY2xhc3NfYXR0ckxpc3QiLCJhdHRycyIsImRpY3RpdGVtcyIsImRpY3QiLCJwdXNoIiwiTm90ZSIsIm5vdGUiLCJPcmRlciIsIm9yZGVyIiwiSW1nVXJsIiwiQ29kZSIsImNvZGUiLCJIYXNTdWIiLCJQYXJlbnRJRCIsIlBhcmVudE5hbWUiLCJMdmwiLCJsdmwiLCJpc19kZWZhdWx0IiwiVmFsdWUiLCJ2YWx1ZSIsIkNOX0dfSUQiLCJDTl9HX0RJQ1RfSUQiLCJDTl9TX05BTUUiLCJDTl9TX05PVEUiLCJDTl9OX09SREVSIiwiQ05fU19JTUdfVVJMIiwiQ05fU19DT0RFIiwiQ05fQ19IQVNfU1VCIiwiQ05fR19QQVJFTlRfSVRFTV9JRCIsIkNOX0dfUEFSRU5UX0lURU1fTkFNRSIsIkNOX05fTFZMIiwiQ05fQ19JU19ERUZBVUxUIiwiQ05fU19WQUxVRSIsIlNpemUiLCJzaXplIiwiTm90RW1wdHkiLCJub3RfZW1wdHkiLCJEZWZWYWx1ZSIsImRlZl92YWx1ZSIsIkRpY3ROYW1lIiwiRGljdElEIiwiQ29kZURlZk5hbWUiLCJjb2RlX2RlZl9uYW1lIiwiQ29kZURlZklEIiwiY29kZV9kZWZfaWQiLCJSZWxDbHNJRCIsIlJlbENscyIsInJlZl9jbHMiLCJXaWR0aCIsIndpZHRoIiwiSGVpZ2h0IiwiaGVpZ2h0IiwiQ3RybFN0eWxlIiwiY3RybF9zdHlsZSIsIkhhc0FjZSIsImhhc19hY2UiLCJDYW5TaG93IiwiY2FuX3Nob3ciLCJDYW5RdWVyeSIsImNhbl9xdWVyeSIsIlJlYWRPbmx5IiwicmVhZF9vbmx5IiwiSXNLZXkiLCJpc19rZXkiLCJJc0ZpeGVkIiwiaXNfZml4ZWQiLCJEaXNwTmFtZSIsImRpc3BfbmFtZSIsIkx1YUF0dHIiLCJsdWFfYXR0ciIsIkRlc2MiLCJkZXNjIiwiQWN0aW9uRGVmIiwiYWN0aW9uX2RlZiIsIk11bHRpbGluZ3VhbCIsIm11bHRpbGluZ3VhbCIsIlJlZkNvbmRpdGlvbiIsInJlZl9jb25kaXRpb24iLCJHcm91cE5hbWUiLCJCa0NvbG9yIiwiYmtfY29sb3IiLCJJbWdGb250U3R5bGUiLCJpbWdfZm9udF9zdHlsZSIsIkF0dHIiLCJjbGFzc19hdHRyX2luaXQiLCJhdHRybGlzdCIsInNob3dfc3R5bGUiLCJuZXdhdHRybGlzdCIsImxlbmd0aCIsImkiLCJvcGVuIiwiYXR0cmdyb3VwX25hbWUiLCJzIiwiY2xzYXR0ciIsImoiLCJsIiwiY2EiLCJhY3Rpb24iLCJlZGl0Iiwibm90ZW1wdHkiLCJleHRfYnV0dG9uIiwiYnV0dG9uX2ltZyIsImJ1dHRvbl90b29sdGlwIiwiYmVmb3JlX2NsaWNrX2J1dHRvbiIsImJ1dHRvbl9jYWxsYmFjayIsImhpZGRlbiIsInNlbGVjdCIsInVuZGVmaW5lZCIsImRpY3RpdGVtbGlzdCIsImQiLCJsYWJlbCIsIm5vd0RhdGUiLCJEYXRlIiwiZGF0ZSIsInllYXIiLCJnZXRGdWxsWWVhciIsIm1vbnRoIiwiZ2V0TW9udGgiLCJkYXkiLCJnZXREYXRlIiwiUmVsQ2xzTGlzdCIsIk9wZW4iLCJjb250cm9sX3N0eWxlIiwidGl0bGVfcF93ZGl0aCIsInJlcSIsImFyIiwidmFsIiwiZXZlbnRsaXN0IiwiZXZlbnQiLCJldmVudF9pZCIsInNjcmlwX2lkIiwiY29tcG9zZV9jbHNfaWQiLCJldmVudGlkIiwiaW5mbyIsImVkdHlwZSIsInByb2plY3RpZCIsInJjbHNpZCIsInJvYmppZCIsInVzZXJsb2dpbiIsIm9iamlkIiwiaW5pX0RhdGFPYmpSdW5DdXN0b21FdmVudCIsImNsYXNzQXR0cl9leHRCdXR0b24iLCJpaW5kZXgiLCIkcmVmcyIsInBvcHVwIiwiZGF0YV9hdHRyIiwiRGF0YU9ialJ1bkN1c3RvbUV2ZW50X1JldHVybiIsInBvcHVwQ2hhbmdlIiwiZSIsInNob3ciLCJjaGVja0NoYW5nZSIsInRhcmdldCIsImRhdGFzZXQiLCJpc2NoZWNrIiwiaXRlbXMiLCJtdWx0aXBsZV9jaG9pY2UiLCJjaGVjayIsInBvcHVwX2NhbmNlbCIsImNsb3NlIiwicG9wdXBfc2F2YSIsImNhbGxiYWNrX2V2ZW50aWQiLCJ0cmltIiwiZGF0YUpzb24iLCJEYXRhT2JqUnVuQ3VzdG9tRXZlbnQiLCJjYW5jZWwiLCJuYXZpZ2F0ZUJhY2siLCJkZWx0YSIsIm9udGFwIiwiJGVsZSIsImdldEFwcCIsIm9uU2NhbiIsImRlY29kZWRhdGEiLCJoaWRlS2V5Ym9hcmQiLCJvbmV2ZW50Iiwib25hcnJvdyIsIm9uZGF0ZVRpbWUiLCJvbmNoYW5nZSIsIlZhbElEIiwib25jaGFuZ2UyIiwiaXRlbSIsImRlbHZhbHVlIiwiZGluZGV4IiwidiIsIml0ZW12YWx1ZSIsIm9uY2hlY2siLCJpc2NoZWNrZWQiLCJpbnB1dFZhbExpc3RJc0RlbCIsInNwbGljZSIsImFkZHJlc3NjaGFuZ2UiLCJqb2luIiwiY2xhc3NBdHRyX0FkZFBlciIsIm5hdmlnYXRlVG8iLCJ1cmwiLCJzdHJpbmdpZnkiLCJldmVudHMiLCJBZGRQZXIiLCJMb2dpbiIsImNsYXNzQXR0cl9BZGRSZWYiLCJjbGFzc0F0dHJfQWRkUHJqIiwic2F2YSIsIk9LRGF0YU9ialJ1bkN1c3RvbUV2ZW50IiwiYWRkIiwic2hvd0xvYWRpbmciLCJtYXNrIiwidmFsU3RyIiwiaGlkZUxvYWRpbmciLCJlbnZpcm9tZW50IiwiY2xzX2lkIiwiYnV0dG9uX25hbWUiLCJtYXN0ZXIiLCJlbmNvZGUiLCJvYmpfYXR0ciIsIm1hc3Rlcl9jbHNfaWQiLCJtYXN0ZXJfb2JqX2lkIiwiY3JlYXRvciIsImNyZWF0b3JfbmFtZSIsIm5vdF90cmlnZ2VyX2V2ZW50IiwidXBkYXRlX2V4aXN0IiwicG9zdF9wcm9jZXNzIiwiZXh0X2luZm8iLCJyZXQiLCJyZXN1bHRfdHlwZSIsInNob3dUb2FzdCIsImljb24iLCJkdXJhdGlvbiIsInJlZGlyZWN0VG8iLCJFZGl0U3R5bGUiLCJWaWV3U3R5bGUiLCJOb3RUcmlnZ2VyU3lzRXZlbnQiLCJpbnB1dHBhcmFtZXRlciIsImluY2x1ZGVzIiwiZWRfdHlwZSIsInN0YXJ0X3RyYW5zYWN0aW9uIiwiZXZlbnRfbmFtZSIsImRhdGFfb2JqX2lkIiwicHJqX2lkIiwicmVmX2Nsc19pZCIsInJlbF9vYmpfaWQiLCJ1c2VyX2xvZ2luIiwiZGF0YV9qc29uIiwiY29tcG9zZV9pbmZvIiwiaW5wdXRfcGFyYW0iLCJ0aXAiLCJlcnJfaW5mbyIsImFjdGlvbmxpc3QiLCJhY3Rpb25fdHlwZSIsImEiLCJkaWN0SXRlbUxpc3QiLCJjaG9pY2VfbGlzdCIsImxpc3RfdmFsIiwiZmlsdGVyIiwiZm9ybV9jb250cm9sIiwidGV4dCIsInJlYWRvbmx5IiwiYyIsImV4dGluZm8iLCJhY3Rpb25zIiwiZGlhbG9nIiwic3R5bGUiLCJjb21tb25fZGxnX2lkIiwiY29uZmlnIiwiYXBwZWFyX3N0eWxlIiwicHJpUmVsIiwic2VsZWN0X3JhbmdlIiwicGFyYW1fIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFzZ0JDO0FBQ0E7QUF2Z0JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUEsZUFJZ0I7RUFDZEEsT0FBTyxFQUFDO0lBQ1BDLE1BQU0sRUFBTkE7RUFDRCxDQUFDO0VBQ0RDLFVBQVUsRUFBRTtJQUNGQyxhQUFhLEVBQWJBO0VBQ0osQ0FBQztFQUNQQyxJQUFJLGtCQUFHO0lBQ04sT0FBTztNQUNOQyxLQUFLLEVBQUUsSUFBSTtNQUNYQyxLQUFLLEVBQUMsQ0FBQyxDQUFDO01BQ1JDLGFBQWEsRUFBQyxFQUFFO01BQ2hCQyxjQUFjLEVBQUMsRUFBRTtNQUNqQkMsaUJBQWlCLEVBQUMsRUFBRTtNQUFHO01BQ3ZCQyxhQUFhLEVBQUMsRUFBRTtNQUFPO01BQ3ZCQyx5QkFBeUIsRUFBQyxFQUFFO01BQUc7TUFDL0JDLG1CQUFtQixFQUFDLEVBQUU7TUFDdEJDLFdBQVcsRUFBQyxFQUFFO01BQ2RDLFlBQVksRUFBRSxFQUFFO01BQUs7TUFDckJDLFlBQVksRUFBQyxDQUFDO1FBQUNDLElBQUksRUFBQztNQUFNLENBQUMsRUFBQztRQUFDQSxJQUFJLEVBQUM7TUFBTyxDQUFDLEVBQUM7UUFBQ0EsSUFBSSxFQUFDO01BQU8sQ0FBQyxFQUFDO1FBQUNBLElBQUksRUFBQztNQUFPLENBQUMsRUFBQztRQUFDQSxJQUFJLEVBQUM7TUFBTyxDQUFDLEVBQUM7UUFBQ0EsSUFBSSxFQUFDO01BQU8sQ0FBQyxFQUFDO1FBQUNBLElBQUksRUFBQztNQUFPLENBQUMsQ0FBQztNQUN0SEMsU0FBUyxFQUFDLFFBQVE7TUFDbEJDLFVBQVUsRUFBQyxDQUFDLENBQUM7TUFDYkMsVUFBVSxFQUFDLENBQUM7SUFDYixDQUFDO0VBQ0YsQ0FBQztFQUNEQyxNQUFNLGtCQUFDQyxPQUFPLEVBQUU7SUFDZjtJQUNBQyxHQUFHLENBQUNDLHFCQUFxQixDQUFDO01BQUVsQixLQUFLLEVBQUVnQixPQUFPLENBQUNHO0lBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4RCxJQUFJbEIsS0FBSyxHQUFHbUIsSUFBSSxDQUFDQyxLQUFLLENBQUNMLE9BQU8sQ0FBQ2YsS0FBSyxDQUFDO0lBQ3JDLElBQUksQ0FBQ3FCLEtBQUssQ0FBQ3RCLEtBQUssR0FBR0MsS0FBSyxDQUFDc0IsV0FBVyxHQUFDdEIsS0FBSyxDQUFDc0IsV0FBVyxHQUFDUCxPQUFPLENBQUNHLFNBQVMsQ0FBQyxDQUFDO0lBQzFFO0lBQ0EsSUFBRyxDQUFDbEIsS0FBSyxDQUFDdUIsV0FBVyxFQUFDO01BQ3JCUCxHQUFHLENBQUNRLFNBQVMsQ0FBQztRQUFDekIsS0FBSyxFQUFDLElBQUk7UUFBQzBCLE9BQU8sRUFBQyxvQkFBb0I7UUFBQ0MsVUFBVSxFQUFDLEtBQUs7UUFBQ0MsV0FBVyxFQUFDO01BQUksQ0FBQyxDQUFDO01BQzFGO0lBQ0Q7SUFDQSxJQUFHLENBQUMzQixLQUFLLENBQUM0QixRQUFRLENBQUNsQixJQUFJLEVBQUM7TUFDdkJNLEdBQUcsQ0FBQ1EsU0FBUyxDQUFDO1FBQUN6QixLQUFLLEVBQUMsSUFBSTtRQUFDMEIsT0FBTyxFQUFDLG9CQUFvQjtRQUFDQyxVQUFVLEVBQUMsS0FBSztRQUFDQyxXQUFXLEVBQUM7TUFBSSxDQUFDLENBQUM7TUFDMUY7SUFDRDtJQUNBLElBQUksQ0FBQ04sS0FBSyxDQUFDckIsS0FBSyxHQUFHQSxLQUFLO0lBQ3hCLElBQUk2QixRQUFRLEdBQUc7TUFDWEMsS0FBSyxFQUFFOUIsS0FBSyxDQUFDdUIsV0FBVztNQUN4QmIsSUFBSSxFQUFFVixLQUFLLENBQUM0QixRQUFRLENBQUNsQjtJQUN6QixDQUFDO0lBQ0QsSUFBSXFCLFFBQVEsR0FBRztNQUNkQyxRQUFRLEVBQUVoQyxLQUFLLENBQUNpQyxLQUFLO01BQ3JCQyxVQUFVLEVBQUUsRUFBRTtNQUNkQyxVQUFVLEVBQUU7SUFDYixDQUFDO0lBQ0QsSUFBSUMsS0FBSyxHQUFHLElBQUk7SUFDaEJBLEtBQUssQ0FBQ0MsTUFBTSxDQUFDQyxLQUFLLENBQUNDLGNBQWMsR0FBR3ZDLEtBQUssQ0FBQ2lDLEtBQUs7SUFDL0M7SUFDQztJQUNELElBQUdHLEtBQUssQ0FBQ0MsTUFBTSxDQUFDRyxPQUFPLENBQUNDLGdCQUFnQixFQUFDO01BQ3ZDTCxLQUFLLENBQUNmLEtBQUssQ0FBQ3BCLGFBQWEsR0FBR21DLEtBQUssQ0FBQ0MsTUFBTSxDQUFDRyxPQUFPLENBQUNDLGdCQUFnQjtNQUNsRUwsS0FBSyxDQUFDTSxrQkFBa0IsRUFBRTtJQUMzQixDQUFDLE1BQ0FOLEtBQUssQ0FBQ0MsTUFBTSxDQUFDTSxRQUFRLENBQUMsa0JBQWtCLEVBQUNaLFFBQVEsQ0FBQyxDQUFDYSxJQUFJLENBQUMsVUFBQUMsT0FBTyxFQUFFO01BQ2hFO01BQ0EsSUFBSUEsT0FBTyxDQUFDQyxRQUFRLElBQUksQ0FBQyxFQUFFO1FBQzFCVixLQUFLLENBQUNmLEtBQUssQ0FBQ3BCLGFBQWEsR0FBRzRDLE9BQU8sQ0FBQ0UsTUFBTTtRQUMxQ0YsT0FBTyxDQUFDRSxNQUFNLENBQUNDLE9BQU87VUFBQSxtRkFBQyxrQkFBT0MsS0FBSyxFQUFDQyxLQUFLO1lBQUE7Y0FBQTtnQkFBQTtrQkFBQTtvQkFDeENELEtBQUssQ0FBQ0UsU0FBUyxDQUFDSCxPQUFPO3NCQUFBLG9GQUFDLGlCQUFPSSxJQUFJLEVBQUNDLEdBQUc7d0JBQUE7MEJBQUE7NEJBQUE7OEJBQUE7Z0NBQUEsTUFDbENELElBQUksQ0FBQ0UsSUFBSSxJQUFJLFFBQVEsSUFBSUYsSUFBSSxDQUFDRSxJQUFJLElBQUksT0FBTztrQ0FBQTtrQ0FBQTtnQ0FBQTtnQ0FBQTtnQ0FBQSxPQUMxQ2xCLEtBQUssQ0FBQ21CLGVBQWUsQ0FBQ0gsSUFBSSxFQUFDQyxHQUFHLEVBQUNILEtBQUssQ0FBQzs4QkFBQTs4QkFBQTtnQ0FBQTs0QkFBQTswQkFBQTt3QkFBQTtzQkFBQSxDQUU1QztzQkFBQTt3QkFBQTtzQkFBQTtvQkFBQSxJQUFDO2tCQUFDO2tCQUFBO29CQUFBO2dCQUFBO2NBQUE7WUFBQTtVQUFBLENBQ0g7VUFBQTtZQUFBO1VBQUE7UUFBQSxJQUFDO1FBQ0ZNLFVBQVUsQ0FBQyxZQUFVO1VBQ3BCcEIsS0FBSyxDQUFDTSxrQkFBa0IsRUFBRTtRQUMzQixDQUFDLEVBQUMsR0FBRyxDQUFDO01BQ1AsQ0FBQyxNQUFJO1FBQ0oxQixHQUFHLENBQUNRLFNBQVMsQ0FBQztVQUFDekIsS0FBSyxFQUFDLEtBQUs7VUFBQzBCLE9BQU8sRUFBQ29CLE9BQU8sQ0FBQ1ksT0FBTztVQUFDL0IsVUFBVSxFQUFDLEtBQUs7VUFBQ0MsV0FBVyxFQUFDO1FBQUksQ0FBQyxDQUFDO01BQ3ZGO0lBQ0QsQ0FBQyxDQUFDLENBQUMrQixLQUFLLENBQUMsVUFBQUMsRUFBRSxFQUFFO01BQ1o7TUFDQTNDLEdBQUcsQ0FBQ1EsU0FBUyxDQUFDO1FBQUN6QixLQUFLLEVBQUMsT0FBTztRQUFDMEIsT0FBTyxFQUFDa0MsRUFBRSxDQUFDQyxNQUFNO1FBQUNsQyxVQUFVLEVBQUMsS0FBSztRQUFDQyxXQUFXLEVBQUM7TUFBSSxDQUFDLENBQUM7SUFDbkYsQ0FBQyxDQUFDO0VBRUosQ0FBQztFQUNEa0MsT0FBTyxFQUFFO0lBQ0ZOLGVBQWUsMkJBQUNILElBQUksRUFBQ0MsR0FBRyxFQUFDSCxLQUFLLEVBQUM7TUFBQTtNQUFBO1FBQUE7UUFBQTtVQUFBO1lBQUE7Y0FBQTtnQkFBRTtnQkFDdEMsS0FBSSxDQUFDcEQsSUFBSSxHQUFDLEVBQUU7Z0JBQ1JzQyxLQUFLLEdBQUcsS0FBSTtnQkFDWkwsUUFBUSxHQUFFO2tCQUNiK0IsT0FBTyxFQUFFVixJQUFJLENBQUNVLE9BQU87a0JBQ3JCQyxTQUFTLEVBQUVYLElBQUksQ0FBQ1c7Z0JBQ2pCLENBQUMsRUFDRDtnQkFDQSxLQUFJLENBQUMxQixNQUFNLENBQUNNLFFBQVEsQ0FBQyxpQkFBaUIsRUFBQ1osUUFBUSxDQUFDLENBQUNhLElBQUk7a0JBQUEsb0ZBQUMsa0JBQU9DLE9BQU87b0JBQUE7c0JBQUE7d0JBQUE7MEJBQUE7NEJBQ25FOzRCQUNBLElBQUlBLE9BQU8sQ0FBQ0MsUUFBUSxJQUFJLENBQUMsRUFBRTs4QkFDMUJWLEtBQUssQ0FBQ2YsS0FBSyxDQUFDcEIsYUFBYSxDQUFDaUQsS0FBSyxDQUFDLENBQUNDLFNBQVMsQ0FBQ0UsR0FBRyxDQUFDLENBQUNXLFFBQVEsR0FBQ25CLE9BQU8sQ0FBQ0UsTUFBTTs4QkFDdkUsS0FBSSxDQUFDVixNQUFNLENBQUM0QixNQUFNLENBQUMsZUFBZSxFQUFFN0IsS0FBSyxDQUFDZixLQUFLLENBQUNwQixhQUFhLENBQUM7NEJBRS9ELENBQUMsTUFBSTs4QkFDSmUsR0FBRyxDQUFDUSxTQUFTLENBQUM7Z0NBQUN6QixLQUFLLEVBQUMsT0FBTztnQ0FBQzBCLE9BQU8sRUFBQ29CLE9BQU8sQ0FBQ1ksT0FBTztnQ0FBQy9CLFVBQVUsRUFBQyxLQUFLO2dDQUFDQyxXQUFXLEVBQUM7OEJBQUksQ0FBQyxDQUFDOzRCQUN6RjswQkFBQzswQkFBQTs0QkFBQTt3QkFBQTtzQkFBQTtvQkFBQTtrQkFBQSxDQUNEO2tCQUFBO29CQUFBO2tCQUFBO2dCQUFBLElBQUMsQ0FBQytCLEtBQUssQ0FBQyxVQUFBQyxFQUFFLEVBQUU7a0JBQ1o7a0JBQ0EzQyxHQUFHLENBQUNRLFNBQVMsQ0FBQztvQkFBQ3pCLEtBQUssRUFBQyxPQUFPO29CQUFDMEIsT0FBTyxFQUFDa0MsRUFBRSxDQUFDQyxNQUFNO29CQUFDbEMsVUFBVSxFQUFDLEtBQUs7b0JBQUNDLFdBQVcsRUFBQztrQkFBSSxDQUFDLENBQUM7Z0JBQ25GLENBQUMsQ0FBQztjQUFDO2NBQUE7Z0JBQUE7WUFBQTtVQUFBO1FBQUE7TUFBQTtJQUNKLENBQUM7SUFDS2Usa0JBQWtCLGdDQUFFO01BQUE7TUFBQTtRQUFBO1FBQUE7VUFBQTtZQUFBO2NBQUE7Z0JBQ3JCTixLQUFLLEdBQUcsTUFBSTtnQkFDWjhCLGFBQWEsR0FBRztrQkFDbkJsQyxRQUFRLEVBQUVJLEtBQUssQ0FBQ2YsS0FBSyxDQUFDckIsS0FBSyxDQUFDaUMsS0FBSztrQkFDakNrQyxhQUFhLEVBQUUsQ0FBQztrQkFDaEJDLGFBQWEsRUFBRWhDLEtBQUssQ0FBQ2YsS0FBSyxDQUFDckIsS0FBSyxDQUFDNEIsUUFBUSxDQUFDbEI7Z0JBQzNDLENBQUM7Z0JBQ0QwQixLQUFLLENBQUNDLE1BQU0sQ0FBQ0MsS0FBSyxDQUFDK0IsWUFBWSxHQUFHakMsS0FBSyxDQUFDZixLQUFLLENBQUNyQixLQUFLLENBQUM0QixRQUFRLENBQUNsQixJQUFJO2dCQUNqRTtnQkFDQztnQkFDRCxJQUFHMEIsS0FBSyxDQUFDQyxNQUFNLENBQUNHLE9BQU8sQ0FBQzhCLHFCQUFxQixFQUFDO2tCQUM1Q2xDLEtBQUssQ0FBQ2YsS0FBSyxDQUFDbkIsY0FBYyxHQUFHa0MsS0FBSyxDQUFDQyxNQUFNLENBQUNHLE9BQU8sQ0FBQzhCLHFCQUFxQjtrQkFDeEVsQyxLQUFLLENBQUNtQyxTQUFTLEVBQUU7Z0JBQ2xCLENBQUMsTUFBSTtrQkFDSjtrQkFDQW5DLEtBQUssQ0FBQ0MsTUFBTSxDQUFDTSxRQUFRLENBQUMsZ0JBQWdCLEVBQUN1QixhQUFhLENBQUMsQ0FBQ3RCLElBQUk7b0JBQUEsb0ZBQUMsa0JBQU9DLE9BQU87c0JBQUE7c0JBQUE7d0JBQUE7MEJBQUE7NEJBQUE7OEJBQ3hFOzhCQUNBLElBQUlBLE9BQU8sQ0FBQ0MsUUFBUSxJQUFJLENBQUMsRUFBRTtnQ0FDdEIwQixRQUFRLEdBQUc3RSxhQUFNLENBQUM4RSxNQUFNLENBQUM1QixPQUFPLENBQUNFLE1BQU0sQ0FBQzJCLFNBQVMsQ0FBQztnQ0FDdEQ3QixPQUFPLENBQUNFLE1BQU0sQ0FBQzJCLFNBQVMsR0FBR3ZELElBQUksQ0FBQ0MsS0FBSyxDQUFDb0QsUUFBUSxDQUFDO2dDQUMvQ3BDLEtBQUssQ0FBQ2YsS0FBSyxDQUFDbkIsY0FBYyxHQUFHMkMsT0FBTyxDQUFDRSxNQUFNO2dDQUMzQzs7Z0NBRUFYLEtBQUssQ0FBQ21DLFNBQVMsRUFBRTs4QkFDbEIsQ0FBQyxNQUFJO2dDQUNKdkQsR0FBRyxDQUFDUSxTQUFTLENBQUM7a0NBQUN6QixLQUFLLEVBQUMsT0FBTztrQ0FBQzBCLE9BQU8sRUFBQ29CLE9BQU8sQ0FBQ1ksT0FBTztrQ0FBQy9CLFVBQVUsRUFBQyxLQUFLO2tDQUFDQyxXQUFXLEVBQUM7Z0NBQUksQ0FBQyxDQUFDOzhCQUN6Rjs0QkFBQzs0QkFBQTs4QkFBQTswQkFBQTt3QkFBQTtzQkFBQTtvQkFBQSxDQUNEO29CQUFBO3NCQUFBO29CQUFBO2tCQUFBLElBQUMsQ0FBQytCLEtBQUssQ0FBQyxVQUFBQyxFQUFFLEVBQUU7b0JBQ1osYUFBWUEsRUFBRTtvQkFDZDNDLEdBQUcsQ0FBQ1EsU0FBUyxDQUFDO3NCQUFDekIsS0FBSyxFQUFDLE9BQU87c0JBQUMwQixPQUFPLEVBQUNrQyxFQUFFLENBQUNDLE1BQU07c0JBQUNsQyxVQUFVLEVBQUMsS0FBSztzQkFBQ0MsV0FBVyxFQUFDO29CQUFJLENBQUMsQ0FBQztrQkFDbkYsQ0FBQyxDQUFDO2dCQUNIO2NBQUM7Y0FBQTtnQkFBQTtZQUFBO1VBQUE7UUFBQTtNQUFBO0lBQ0YsQ0FBQztJQUNENEMsU0FBUyx1QkFBRTtNQUFFO01BQ1osSUFBSUksZUFBZSxHQUFFO1FBQ3BCQyxFQUFFLEVBQUUsSUFBSSxDQUFDdkQsS0FBSyxDQUFDbkIsY0FBYyxDQUFDMkUsRUFBRTtRQUNoQ25FLElBQUksRUFBRSxJQUFJLENBQUNXLEtBQUssQ0FBQ25CLGNBQWMsQ0FBQzRFLElBQUk7UUFDcENDLElBQUksRUFBRSxJQUFJLENBQUMxRCxLQUFLLENBQUNuQixjQUFjLENBQUNvRCxJQUFJO1FBQ3BDMEIsU0FBUyxFQUFDLElBQUksQ0FBQzNELEtBQUssQ0FBQ25CLGNBQWMsQ0FBQytFLFNBQVM7UUFDN0NDLFFBQVEsRUFBQyxJQUFJLENBQUM3RCxLQUFLLENBQUNuQixjQUFjLENBQUN3RTtNQUNwQyxDQUFDO01BQ0QsSUFBSSxDQUFDckQsS0FBSyxDQUFDbkIsY0FBYyxHQUFHeUUsZUFBZTtNQUMzQyxJQUFJUSxjQUFjLEdBQUUsRUFBRTtNQUN0QixJQUFJLENBQUM5RCxLQUFLLENBQUNwQixhQUFhLENBQUMrQyxPQUFPLENBQUMsVUFBQWxELElBQUksRUFBSTtRQUN4QyxJQUFJc0YsS0FBSyxHQUFFLEVBQUU7UUFDYixJQUFHdEYsSUFBSSxDQUFDcUQsU0FBUyxFQUFDO1VBQ2hCckQsSUFBSSxDQUFDcUQsU0FBUyxDQUFDSCxPQUFPLENBQUMsVUFBQUksSUFBSSxFQUFJO1lBQ2hDLElBQUlpQyxTQUFTLEdBQUUsRUFBRTtZQUNqQixJQUFHakMsSUFBSSxDQUFDWSxRQUFRLEVBQUM7Y0FDaEJaLElBQUksQ0FBQ1ksUUFBUSxDQUFDaEIsT0FBTyxDQUFDLFVBQUFzQyxJQUFJLEVBQUk7Z0JBQzdCRCxTQUFTLENBQUNFLElBQUksQ0FBQztrQkFDZFgsRUFBRSxFQUFFVSxJQUFJLENBQUNULEVBQUU7a0JBQ1huRSxJQUFJLEVBQUU0RSxJQUFJLENBQUNSLElBQUk7a0JBQ2ZVLElBQUksRUFBRUYsSUFBSSxDQUFDRyxJQUFJO2tCQUNmQyxLQUFLLEVBQUVKLElBQUksQ0FBQ0ssS0FBSztrQkFDakJDLE1BQU0sRUFBRSxJQUFJO2tCQUNaQyxJQUFJLEVBQUVQLElBQUksQ0FBQ1EsSUFBSTtrQkFDZkMsTUFBTSxFQUFFLElBQUk7a0JBQ1pDLFFBQVEsRUFBRSxJQUFJO2tCQUNkQyxVQUFVLEVBQUUsSUFBSTtrQkFDaEJDLEdBQUcsRUFBRVosSUFBSSxDQUFDYSxHQUFHO2tCQUNibkIsU0FBUyxFQUFFTSxJQUFJLENBQUNjLFVBQVU7a0JBQzFCQyxLQUFLLEVBQUVmLElBQUksQ0FBQ2dCLEtBQUs7a0JBQ2pCQyxPQUFPLEVBQUVqQixJQUFJLENBQUNULEVBQUU7a0JBQ2hCMkIsWUFBWSxFQUFFLElBQUk7a0JBQ2xCQyxTQUFTLEVBQUVuQixJQUFJLENBQUNSLElBQUk7a0JBQ3BCNEIsU0FBUyxFQUFFcEIsSUFBSSxDQUFDRyxJQUFJO2tCQUNwQmtCLFVBQVUsRUFBRXJCLElBQUksQ0FBQ0ssS0FBSztrQkFDdEJpQixZQUFZLEVBQUUsSUFBSTtrQkFDbEJDLFNBQVMsRUFBRXZCLElBQUksQ0FBQ1EsSUFBSTtrQkFDcEJnQixZQUFZLEVBQUUsSUFBSTtrQkFDbEJDLG1CQUFtQixFQUFFLElBQUk7a0JBQ3pCQyxxQkFBcUIsRUFBRSxJQUFJO2tCQUMzQkMsUUFBUSxFQUFFM0IsSUFBSSxDQUFDYSxHQUFHO2tCQUNsQmUsZUFBZSxFQUFFNUIsSUFBSSxDQUFDYyxVQUFVO2tCQUNoQ2UsVUFBVSxFQUFFN0IsSUFBSSxDQUFDZ0I7Z0JBQ2xCLENBQUMsQ0FBQztjQUNILENBQUMsQ0FBQztZQUNIO1lBQ0FsQixLQUFLLENBQUNHLElBQUksQ0FBQztjQUNWWCxFQUFFLEVBQUV4QixJQUFJLENBQUN5QixFQUFFO2NBQ1huRSxJQUFJLEVBQUUwQyxJQUFJLENBQUMwQixJQUFJO2NBQ2ZDLElBQUksRUFBRTNCLElBQUksQ0FBQ0UsSUFBSTtjQUNmOEQsSUFBSSxFQUFFaEUsSUFBSSxDQUFDaUUsSUFBSTtjQUNmQyxRQUFRLEVBQUVsRSxJQUFJLENBQUNtRSxTQUFTO2NBQ3hCQyxRQUFRLEVBQUNwRSxJQUFJLENBQUNxRSxTQUFTO2NBQ3ZCL0IsS0FBSyxFQUFFdEMsSUFBSSxDQUFDdUMsS0FBSztjQUNqQitCLFFBQVEsRUFBRXRFLElBQUksQ0FBQ1csU0FBUztjQUN4QjRELE1BQU0sRUFBRXZFLElBQUksQ0FBQ1UsT0FBTztjQUNwQjhELFdBQVcsRUFBRXhFLElBQUksQ0FBQ3lFLGFBQWE7Y0FDL0JDLFNBQVMsRUFBRTFFLElBQUksQ0FBQzJFLFdBQVc7Y0FDM0JDLFFBQVEsRUFBRSxJQUFJO2NBQ2RDLE1BQU0sRUFBRTdFLElBQUksQ0FBQzhFLE9BQU87Y0FDcEJDLEtBQUssRUFBRS9FLElBQUksQ0FBQ2dGLEtBQUs7Y0FDakJDLE1BQU0sRUFBRWpGLElBQUksQ0FBQ2tGLE1BQU07Y0FDbkJDLFNBQVMsRUFBRW5GLElBQUksQ0FBQ29GLFVBQVU7Y0FDMUJDLE1BQU0sRUFBRXJGLElBQUksQ0FBQ3NGLE9BQU87Y0FDcEJDLE9BQU8sRUFBRXZGLElBQUksQ0FBQ3dGLFFBQVE7Y0FDdEJDLFFBQVEsRUFBRXpGLElBQUksQ0FBQzBGLFNBQVM7Y0FDeEJDLFFBQVEsRUFBRTNGLElBQUksQ0FBQzRGLFNBQVM7Y0FDeEJDLEtBQUssRUFBRTdGLElBQUksQ0FBQzhGLE1BQU07Y0FDbEJDLE9BQU8sRUFBRS9GLElBQUksQ0FBQ2dHLFFBQVE7Y0FDdEJDLFFBQVEsRUFBRWpHLElBQUksQ0FBQ2tHLFNBQVM7Y0FDeEJDLE9BQU8sRUFBRW5HLElBQUksQ0FBQ29HLFFBQVE7Y0FDdEJDLElBQUksRUFBRXJHLElBQUksQ0FBQ3NHLElBQUk7Y0FDZkMsU0FBUyxFQUFFdkcsSUFBSSxDQUFDd0csVUFBVSxHQUFDakssYUFBTSxDQUFDOEUsTUFBTSxDQUFDckIsSUFBSSxDQUFDd0csVUFBVSxDQUFDLEdBQUMsRUFBRTtjQUM1REMsWUFBWSxFQUFFekcsSUFBSSxDQUFDMEcsWUFBWTtjQUMvQkMsWUFBWSxFQUFFM0csSUFBSSxDQUFDNEcsYUFBYTtjQUNoQ0MsU0FBUyxFQUFFbkssSUFBSSxDQUFDbUQsS0FBSztjQUNyQm9ELEtBQUssRUFBRSxJQUFJO2NBQ1hyQyxRQUFRLEVBQUVxQjtZQUNYLENBQUMsQ0FBQztVQUNELENBQUMsQ0FBQztRQUNKO1FBQ0FGLGNBQWMsQ0FBQ0ksSUFBSSxDQUFDO1VBQ25CN0UsSUFBSSxFQUFFWixJQUFJLENBQUNtRCxLQUFLO1VBQ2hCeUMsS0FBSyxFQUFFNUYsSUFBSSxDQUFDNkYsS0FBSztVQUNqQjhDLE1BQU0sRUFBRTNJLElBQUksQ0FBQzRJLE9BQU87VUFDcEJ3QixPQUFPLEVBQUVwSyxJQUFJLENBQUNxSyxRQUFRO1VBQ3RCQyxZQUFZLEVBQUV0SyxJQUFJLENBQUN1SyxjQUFjO1VBQ2pDQyxJQUFJLEVBQUVsRjtRQUNQLENBQUMsQ0FBQztNQUNILENBQUMsQ0FBQztNQUNGLElBQUksQ0FBQy9ELEtBQUssQ0FBQ3BCLGFBQWEsR0FBR2tGLGNBQWM7TUFDekM7TUFDQTtNQUNBLElBQUksQ0FBQ29GLGVBQWUsRUFBRTtJQUN2QixDQUFDO0lBQ0RBLGVBQWUsNkJBQUU7TUFDaEIsSUFBSUMsUUFBUSxHQUFHLElBQUksQ0FBQ25KLEtBQUssQ0FBQ25CLGNBQWMsQ0FBQ2dGLFFBQVEsQ0FBQ3VGLFVBQVU7TUFDNUQsSUFBSUMsV0FBVyxHQUFHLEVBQUU7TUFDcEIsSUFBSSxJQUFJLENBQUNySixLQUFLLENBQUNwQixhQUFhLENBQUMwSyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1FBQ3JDLEtBQUssSUFBSUMsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHSixRQUFRLENBQUNHLE1BQU0sRUFBRUMsQ0FBQyxFQUFFLEVBQUU7VUFDdEMsSUFBSUMsSUFBSSxHQUFHTCxRQUFRLENBQUNJLENBQUMsQ0FBQyxDQUFDQyxJQUFJO1VBQzNCLElBQUkvRixJQUFJLEdBQUcwRixRQUFRLENBQUNJLENBQUMsQ0FBQyxDQUFDRSxjQUFjO1VBQ3JDLElBQUkxRixLQUFLLEdBQUdvRixRQUFRLENBQUNJLENBQUMsQ0FBQyxDQUFDeEYsS0FBSztVQUM3QixLQUFLLElBQUkyRixDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUcsSUFBSSxDQUFDMUosS0FBSyxDQUFDcEIsYUFBYSxDQUFDMEssTUFBTSxFQUFFSSxDQUFDLEVBQUUsRUFBRTtZQUN0RCxJQUFJQyxPQUFPLEdBQUcsSUFBSSxDQUFDM0osS0FBSyxDQUFDcEIsYUFBYSxDQUFDOEssQ0FBQyxDQUFDO1lBQ3pDLElBQUlqRyxJQUFJLElBQUlrRyxPQUFPLENBQUN0SyxJQUFJLEVBQUU7Y0FDdEIsSUFBSTBDLElBQUksR0FBRyxFQUFFO2NBQ2IsS0FBSyxJQUFJNkgsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHN0YsS0FBSyxDQUFDdUYsTUFBTSxFQUFFTSxDQUFDLEVBQUUsRUFBRTtnQkFDbkMsS0FBSyxJQUFJQyxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUdGLE9BQU8sQ0FBQ1YsSUFBSSxDQUFDSyxNQUFNLEVBQUVPLENBQUMsRUFBRSxFQUFFO2tCQUMxQyxJQUFJQyxFQUFFLEdBQUdILE9BQU8sQ0FBQ1YsSUFBSSxDQUFDWSxDQUFDLENBQUM7a0JBQ3hCLElBQUk5RixLQUFLLENBQUM2RixDQUFDLENBQUMsQ0FBQzdILElBQUksSUFBSStILEVBQUUsQ0FBQ3pLLElBQUksRUFBRTtvQkFDMUJ5SyxFQUFFLENBQUNDLE1BQU0sR0FBR2hHLEtBQUssQ0FBQzZGLENBQUMsQ0FBQyxDQUFDRyxNQUFNO29CQUMzQkQsRUFBRSxDQUFDRSxJQUFJLEdBQUdqRyxLQUFLLENBQUM2RixDQUFDLENBQUMsQ0FBQ0ksSUFBSTtvQkFDdkJGLEVBQUUsQ0FBQ0csUUFBUSxHQUFHbEcsS0FBSyxDQUFDNkYsQ0FBQyxDQUFDLENBQUNLLFFBQVE7b0JBQy9CSCxFQUFFLENBQUNJLFVBQVUsR0FBR25HLEtBQUssQ0FBQzZGLENBQUMsQ0FBQyxDQUFDTSxVQUFVO29CQUNuQ0osRUFBRSxDQUFDSyxVQUFVLEdBQUdwRyxLQUFLLENBQUM2RixDQUFDLENBQUMsQ0FBQ08sVUFBVTtvQkFDbkNMLEVBQUUsQ0FBQ00sY0FBYyxHQUFHckcsS0FBSyxDQUFDNkYsQ0FBQyxDQUFDLENBQUNRLGNBQWM7b0JBQzNDTixFQUFFLENBQUNPLG1CQUFtQixHQUFHdEcsS0FBSyxDQUFDNkYsQ0FBQyxDQUFDLENBQUNTLG1CQUFtQjtvQkFDckRQLEVBQUUsQ0FBQ1EsZUFBZSxHQUFHdkcsS0FBSyxDQUFDNkYsQ0FBQyxDQUFDLENBQUNVLGVBQWU7b0JBQzdDUixFQUFFLENBQUNTLE1BQU0sR0FBR3hHLEtBQUssQ0FBQzZGLENBQUMsQ0FBQyxDQUFDVyxNQUFNO29CQUMzQlQsRUFBRSxDQUFDVSxNQUFNLEdBQUd6RyxLQUFLLENBQUM2RixDQUFDLENBQUMsQ0FBQ1ksTUFBTSxJQUFFQyxTQUFTLEdBQUMsS0FBSyxHQUFDMUcsS0FBSyxDQUFDNkYsQ0FBQyxDQUFDLENBQUNZLE1BQU07b0JBQ2pGVixFQUFFLENBQUM5RSxLQUFLLEdBQUUsRUFBRTtvQkFDWixJQUFHOEUsRUFBRSxDQUFDbkgsUUFBUSxDQUFDMkcsTUFBTSxHQUFDLENBQUMsRUFBQztzQkFDdkIsSUFBR1EsRUFBRSxDQUFDVSxNQUFNLElBQUksSUFBSSxFQUNuQlYsRUFBRSxDQUFDOUUsS0FBSyxHQUFHLEVBQUUsQ0FBQztzQkFBQSxLQUVkOEUsRUFBRSxDQUFDOUUsS0FBSyxHQUFHLEtBQUssQ0FBQztzQkFDbEIsSUFBSTBGLFlBQVksR0FBQyxFQUFFO3NCQUNuQixLQUFLLElBQUlDLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBR2IsRUFBRSxDQUFDbkgsUUFBUSxDQUFDMkcsTUFBTSxFQUFFcUIsQ0FBQyxFQUFFLEVBQUU7d0JBQzVDYixFQUFFLENBQUNuSCxRQUFRLENBQUNnSSxDQUFDLENBQUMsQ0FBQ0MsS0FBSyxHQUFDZCxFQUFFLENBQUNuSCxRQUFRLENBQUNnSSxDQUFDLENBQUMsQ0FBQ3ZGLFNBQVM7d0JBQzdDMEUsRUFBRSxDQUFDbkgsUUFBUSxDQUFDZ0ksQ0FBQyxDQUFDLENBQUMxRixLQUFLLEdBQUM2RSxFQUFFLENBQUNuSCxRQUFRLENBQUNnSSxDQUFDLENBQUMsQ0FBQ3ZGLFNBQVM7d0JBQzdDMEUsRUFBRSxDQUFDbkgsUUFBUSxDQUFDZ0ksQ0FBQyxDQUFDLENBQUM1SSxJQUFJLEdBQUMrSCxFQUFFLENBQUN6SyxJQUFJO3dCQUMzQixJQUFHeUssRUFBRSxDQUFDbkgsUUFBUSxDQUFDZ0ksQ0FBQyxDQUFDLENBQUM5RSxlQUFlLElBQUUsR0FBRyxFQUNyQ2lFLEVBQUUsQ0FBQzlFLEtBQUssR0FBQzhFLEVBQUUsQ0FBQ25ILFFBQVEsQ0FBQ2dJLENBQUMsQ0FBQyxDQUFDdkYsU0FBUztzQkFDbkM7b0JBQ0Q7b0JBQ0EsSUFBRzBFLEVBQUUsQ0FBQ3BHLElBQUksSUFBRSxJQUFJLElBQUlvRyxFQUFFLENBQUNwRyxJQUFJLElBQUUsSUFBSSxFQUFDO3NCQUNqQyxJQUFJbUgsT0FBTyxHQUFHLElBQUlDLElBQUksRUFBRTtzQkFDeEIsSUFBSUMsSUFBSSxHQUFHO3dCQUFDQyxJQUFJLEVBQUVILE9BQU8sQ0FBQ0ksV0FBVyxFQUFFO3dCQUFDQyxLQUFLLEVBQUVMLE9BQU8sQ0FBQ00sUUFBUSxFQUFFLEdBQUcsQ0FBQzt3QkFBQ0MsR0FBRyxFQUFFUCxPQUFPLENBQUNRLE9BQU87c0JBQUUsQ0FBQztzQkFDN0Z2QixFQUFFLENBQUM5RSxLQUFLLEdBQUcrRixJQUFJLENBQUNDLElBQUksR0FBRyxHQUFHLElBQUlELElBQUksQ0FBQ0csS0FBSyxJQUFJLEVBQUUsR0FBR0gsSUFBSSxDQUFDRyxLQUFLLEdBQUcsR0FBRyxHQUFHSCxJQUFJLENBQUNHLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSUgsSUFBSSxDQUFDSyxHQUFHLElBQUksRUFBRSxHQUFHTCxJQUFJLENBQUNLLEdBQUcsR0FBRyxHQUFHLEdBQUdMLElBQUksQ0FBQ0ssR0FBRyxDQUFDO29CQUNySTtvQkFDQSxJQUFHdEIsRUFBRSxDQUFDcEcsSUFBSSxJQUFFLFVBQVUsRUFBQztzQkFDdEJvRyxFQUFFLENBQUN3QixVQUFVLEdBQUd4QixFQUFFLENBQUNsRCxNQUFNO3NCQUN6QmtELEVBQUUsQ0FBQzlFLEtBQUssR0FBRyxHQUFHO29CQUNmO29CQUNBLElBQUc4RSxFQUFFLENBQUNwRyxJQUFJLElBQUUsS0FBSyxFQUNoQm9HLEVBQUUsQ0FBQzlFLEtBQUssR0FBRyxLQUFLO29CQUNqQixJQUFHOEUsRUFBRSxDQUFDcEcsSUFBSSxJQUFFLEtBQUssRUFDaEJvRyxFQUFFLENBQUM5RSxLQUFLLEdBQUcsS0FBSztvQkFFSWpELElBQUksQ0FBQ21DLElBQUksQ0FBQzRGLEVBQUUsQ0FBQztrQkFDakI7Z0JBQ0o7Y0FDSjtjQUNBVCxXQUFXLENBQUNuRixJQUFJLENBQUM7Z0JBQ2IyRSxPQUFPLEVBQUVjLE9BQU8sQ0FBQ2QsT0FBTztnQkFDeEJ6QixNQUFNLEVBQUV1QyxPQUFPLENBQUN2QyxNQUFNO2dCQUN0QjJCLFlBQVksRUFBRVksT0FBTyxDQUFDWixZQUFZO2dCQUNsQzFKLElBQUksRUFBRXNLLE9BQU8sQ0FBQ3RLLElBQUk7Z0JBQ2xCZ0YsS0FBSyxFQUFFc0YsT0FBTyxDQUFDdEYsS0FBSztnQkFDcEJrSCxJQUFJLEVBQUUvQixJQUFJO2dCQUNWUCxJQUFJLEVBQUVsSCxJQUFJO2dCQUN6QnlKLGFBQWEsRUFBQyxJQUFJLENBQUN4TCxLQUFLLENBQUNuQixjQUFjLENBQUNnRixRQUFRLENBQUMySCxhQUFhO2dCQUM5REMsYUFBYSxFQUFDLElBQUksQ0FBQ3pMLEtBQUssQ0FBQ25CLGNBQWMsQ0FBQ2dGLFFBQVEsQ0FBQzRIO2NBQ3RDLENBQUMsQ0FBQztZQUNOO1VBQ0o7UUFDSjtRQUNBLElBQUlwQyxXQUFXLENBQUNDLE1BQU0sR0FBRyxDQUFDLEVBQUU7VUFDeEIsSUFBSSxDQUFDdEosS0FBSyxDQUFDcEIsYUFBYSxHQUFHeUssV0FBVztRQUMxQztRQUNILElBQUlxQyxHQUFHLEdBQUMsRUFBRTtRQUNQLElBQUksSUFBSSxDQUFDMUwsS0FBSyxDQUFDbkIsY0FBYyxDQUFDZ0YsUUFBUSxFQUFFO1VBQ25DLElBQUksSUFBSSxDQUFDN0QsS0FBSyxDQUFDbkIsY0FBYyxDQUFDZ0YsUUFBUSxDQUFDdUYsVUFBVSxDQUFDRSxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQzNELElBQUlILFFBQVEsR0FBRyxJQUFJLENBQUNuSixLQUFLLENBQUNuQixjQUFjLENBQUNnRixRQUFRLENBQUN1RixVQUFVO1lBQzVEO1lBQ0E7WUFDQSxLQUFLLElBQUlHLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBR0osUUFBUSxDQUFDRyxNQUFNLEVBQUVDLENBQUMsRUFBRSxFQUFFO2NBQ3RDLElBQUl4SCxJQUFJLEdBQUdvSCxRQUFRLENBQUNJLENBQUMsQ0FBQyxDQUFDeEYsS0FBSztjQUM1QixLQUFLLElBQUk2RixDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUc3SCxJQUFJLENBQUN1SCxNQUFNLEVBQUVNLENBQUMsRUFBRSxFQUFFO2dCQUNsQyxJQUFJK0IsRUFBRSxHQUFHNUosSUFBSSxDQUFDNkgsQ0FBQyxDQUFDO2dCQUMvQjhCLEdBQUcsQ0FBQ3hILElBQUksQ0FBQztrQkFBRW5DLElBQUksRUFBRTRKLEVBQUUsQ0FBQzVKLElBQUk7a0JBQUU2SixHQUFHLEVBQUVELEVBQUUsQ0FBQzFHLEtBQUssR0FBQzBHLEVBQUUsQ0FBQzFHLEtBQUssR0FBQztnQkFBRyxDQUFDLENBQUM7Y0FDM0M7WUFDSjtVQUNKO1FBQ1A7UUFFQSxJQUFJNEcsU0FBUyxHQUFHLElBQUksQ0FBQzdMLEtBQUssQ0FBQ25CLGNBQWMsQ0FBQ2dGLFFBQVEsQ0FBQ2lJLEtBQUs7UUFDeEQ7UUFDQSxJQUFJRCxTQUFTLEVBQUU7VUFDWCxJQUFJQSxTQUFTLENBQUN2QyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3RCLEtBQUssSUFBSUMsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHc0MsU0FBUyxDQUFDdkMsTUFBTSxFQUFFQyxDQUFDLEVBQUUsRUFBRTtjQUN2QyxJQUFJc0MsU0FBUyxDQUFDdEMsQ0FBQyxDQUFDLENBQUN3QyxRQUFRLElBQUksV0FBVyxFQUFFO2dCQUN0QyxJQUFJLENBQUMvTCxLQUFLLENBQUNqQixhQUFhLEdBQUc4TSxTQUFTLENBQUN0QyxDQUFDLENBQUM7Y0FDM0MsQ0FBQyxNQUFNLElBQUlzQyxTQUFTLENBQUN0QyxDQUFDLENBQUMsQ0FBQ3dDLFFBQVEsSUFBSSxTQUFTLEVBQUU7Z0JBQzNDLElBQUksQ0FBQy9MLEtBQUssQ0FBQ2xCLGlCQUFpQixHQUFHK00sU0FBUyxDQUFDdEMsQ0FBQyxDQUFDO2NBQy9DLENBQUMsTUFBTSxJQUFJc0MsU0FBUyxDQUFDdEMsQ0FBQyxDQUFDLENBQUN3QyxRQUFRLElBQUksdUJBQXVCLEVBQUU7Z0JBQ3pELElBQUksQ0FBQy9MLEtBQUssQ0FBQ2hCLHlCQUF5QixHQUFHNk0sU0FBUyxDQUFDdEMsQ0FBQyxDQUFDLENBQUN5QyxRQUFRO2dCQUM1RCxJQUFJLENBQUNoTSxLQUFLLENBQUNmLG1CQUFtQixHQUFHNE0sU0FBUyxDQUFDdEMsQ0FBQyxDQUFDLENBQUMwQyxjQUFjO2NBQ2hFO1lBQ0o7VUFDUDtRQUNEO1FBQ0E7UUFDQSxJQUFJLElBQUksQ0FBQ2pNLEtBQUssQ0FBQ2xCLGlCQUFpQixFQUFFO1VBQzlCLElBQUlvTixPQUFPLEdBQUcsSUFBSSxDQUFDbE0sS0FBSyxDQUFDbEIsaUJBQWlCLENBQUNrTixRQUFRO1VBQ25ELElBQUlHLElBQUksR0FBRztZQUNQRCxPQUFPLEVBQUVBLE9BQU87WUFDaEJFLE1BQU0sRUFBRSxHQUFHO1lBQ1hDLFNBQVMsRUFBRSxFQUFFO1lBQ2JDLE1BQU0sRUFBRSxFQUFFO1lBQ1ZDLE1BQU0sRUFBRSxFQUFFO1lBQ1ZDLFNBQVMsRUFBRSxFQUFFO1lBQ2I1TCxLQUFLLEVBQUUsSUFBSSxDQUFDWixLQUFLLENBQUNyQixLQUFLLENBQUNpQyxLQUFLO1lBQzdCNkwsS0FBSyxFQUFFLEVBQUU7WUFDVDFLLElBQUksRUFBRTJKO1VBQ1YsQ0FBQztVQUNELElBQUksQ0FBQ2dCLHlCQUF5QixDQUFDUCxJQUFJLENBQUM7UUFDeEM7UUFDQSxhQUFZLElBQUksQ0FBQ25NLEtBQUssQ0FBQ25CLGNBQWM7UUFDckMsYUFBWSxJQUFJLENBQUNtQixLQUFLLENBQUNwQixhQUFhO01BRXJDLENBQUMsTUFBTTtRQUNOZSxHQUFHLENBQUNRLFNBQVMsQ0FBQztVQUFDekIsS0FBSyxFQUFDLElBQUk7VUFBQzBCLE9BQU8sRUFBQyxZQUFZO1VBQUNDLFVBQVUsRUFBQyxLQUFLO1VBQUNDLFdBQVcsRUFBQztRQUFJLENBQUMsQ0FBQztNQUNuRjtJQUNELENBQUM7SUFFRHFNLG1CQUFtQiwrQkFBQzlLLEtBQUssRUFBQytLLE1BQU0sRUFBQztNQUFHO01BQ25DLElBQUk3TCxLQUFLLEdBQUcsSUFBSTtNQUNoQkEsS0FBSyxDQUFDZixLQUFLLENBQUNWLFNBQVMsR0FBRyxPQUFPO01BQy9CO01BQ0F5QixLQUFLLENBQUM4TCxLQUFLLENBQUNDLEtBQUssQ0FBQ3RELElBQUksQ0FBQ3pJLEtBQUssQ0FBQ3pCLFNBQVMsQ0FBQztNQUN2QyxJQUFJeU4sU0FBUyxHQUFHaE0sS0FBSyxDQUFDZixLQUFLLENBQUNwQixhQUFhLENBQUNpRCxLQUFLLENBQUMsQ0FBQ29ILElBQUksQ0FBQzJELE1BQU0sQ0FBQztNQUM3RDtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0EsSUFBSXZDLG1CQUFtQixHQUFHdEosS0FBSyxDQUFDZixLQUFLLENBQUNwQixhQUFhLENBQUNpRCxLQUFLLENBQUMsQ0FBQ29ILElBQUksQ0FBQzJELE1BQU0sQ0FBQyxDQUFDdkMsbUJBQW1CO01BQzNGLElBQUlDLGVBQWUsR0FBR3ZKLEtBQUssQ0FBQ2YsS0FBSyxDQUFDcEIsYUFBYSxDQUFDaUQsS0FBSyxDQUFDLENBQUNvSCxJQUFJLENBQUMyRCxNQUFNLENBQUMsQ0FBQ3RDLGVBQWU7TUFDbkYsSUFBRyxDQUFDRCxtQkFBbUIsRUFBQztRQUN2QjFLLEdBQUcsQ0FBQ1EsU0FBUyxDQUFDO1VBQUN6QixLQUFLLEVBQUMsSUFBSTtVQUFDMEIsT0FBTyxFQUFDLGlDQUFpQztVQUFDQyxVQUFVLEVBQUMsS0FBSztVQUFDQyxXQUFXLEVBQUM7UUFBSSxDQUFDLENBQUM7UUFDdkc7TUFDRDtNQUNBLElBQUcsQ0FBQ2dLLGVBQWUsRUFBQztRQUNuQjNLLEdBQUcsQ0FBQ1EsU0FBUyxDQUFDO1VBQUN6QixLQUFLLEVBQUMsSUFBSTtVQUFDMEIsT0FBTyxFQUFDLDZCQUE2QjtVQUFDQyxVQUFVLEVBQUMsS0FBSztVQUFDQyxXQUFXLEVBQUM7UUFBSSxDQUFDLENBQUM7UUFDbkc7TUFDRDtNQUNBLElBQUksQ0FBQzBNLDRCQUE0QixDQUFDM0MsbUJBQW1CLEVBQUUwQyxTQUFTLEVBQUV6QyxlQUFlLEVBQUV6SSxLQUFLLEVBQUMrSyxNQUFNLENBQUM7SUFDakcsQ0FBQztJQUNESyxXQUFXLHVCQUFDQyxDQUFDLEVBQUU7TUFDZCxhQUFZLE9BQU8sR0FBR0EsQ0FBQyxDQUFDakwsSUFBSSxHQUFHLE1BQU0sR0FBR2lMLENBQUMsQ0FBQ0MsSUFBSTtJQUMvQyxDQUFDO0lBQ0RDLFdBQVcsdUJBQUNGLENBQUMsRUFBQztNQUFFO01BQ2Y7TUFDQSxJQUFJckwsS0FBSyxHQUFHcUwsQ0FBQyxDQUFDRyxNQUFNLENBQUNDLE9BQU8sQ0FBQ3pMLEtBQUs7TUFDbEMsSUFBSTBMLE9BQU8sR0FBR0wsQ0FBQyxDQUFDRyxNQUFNLENBQUNDLE9BQU8sQ0FBQ0MsT0FBTztNQUN0QyxJQUFJOU8sSUFBSSxHQUFHLElBQUksQ0FBQ3VCLEtBQUssQ0FBQ1QsVUFBVSxDQUFDaU8sS0FBSztNQUN0QztNQUNBLElBQUcsSUFBSSxDQUFDeE4sS0FBSyxDQUFDVCxVQUFVLENBQUNrTyxlQUFlLElBQUUsR0FBRyxFQUFDO1FBQUU7UUFDL0MsS0FBSSxJQUFJbEUsQ0FBQyxJQUFJOUssSUFBSSxFQUFDO1VBQ2pCQSxJQUFJLENBQUM4SyxDQUFDLENBQUMsQ0FBQ21FLEtBQUssR0FBQyxLQUFLO1FBQ3BCO01BQ0Q7TUFDQWpQLElBQUksQ0FBQ29ELEtBQUssQ0FBQyxDQUFDNkwsS0FBSyxHQUFDSCxPQUFPLEdBQUMsS0FBSyxHQUFDLElBQUk7TUFDcEMsSUFBSSxDQUFDdk4sS0FBSyxDQUFDVCxVQUFVLENBQUNpTyxLQUFLLEdBQUMvTyxJQUFJO0lBRWpDLENBQUM7SUFDRGtQLFlBQVksd0JBQUNULENBQUMsRUFBQztNQUFFO01BQ2hCLElBQUksQ0FBQ0wsS0FBSyxDQUFDQyxLQUFLLENBQUNjLEtBQUssRUFBRTtJQUN6QixDQUFDO0lBQ0RDLFVBQVUsc0JBQUNYLENBQUMsRUFBQztNQUFFO01BQ2QsSUFBSW5NLEtBQUssR0FBRyxJQUFJO01BQ2hCLElBQUl5TSxLQUFLLEdBQUd6TSxLQUFLLENBQUNmLEtBQUssQ0FBQ1QsVUFBVSxDQUFDaU8sS0FBSztNQUN4QyxJQUFJL08sSUFBSSxHQUFDLEVBQUU7TUFDWCxJQUFJZ0YsSUFBSSxHQUFDLEVBQUU7TUFDWCxLQUFLLElBQUk4RixDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUdpRSxLQUFLLENBQUNsRSxNQUFNLEVBQUVDLENBQUMsRUFBRSxFQUFFO1FBQ3RDLElBQUdpRSxLQUFLLENBQUNqRSxDQUFDLENBQUMsQ0FBQ21FLEtBQUssSUFBRSxJQUFJLEVBQUM7VUFDdkIsSUFBR2pLLElBQUksRUFDTkEsSUFBSSxJQUFFLEdBQUc7VUFDVkEsSUFBSSxJQUFFK0osS0FBSyxDQUFDakUsQ0FBQyxDQUFDLENBQUM5RixJQUFJO1VBQ25CaEYsSUFBSSxDQUFDeUYsSUFBSSxDQUFDO1lBQUNWLEVBQUUsRUFBQ2dLLEtBQUssQ0FBQ2pFLENBQUMsQ0FBQyxDQUFDL0YsRUFBRTtZQUFDQyxJQUFJLEVBQUMrSixLQUFLLENBQUNqRSxDQUFDLENBQUMsQ0FBQzlGO1VBQUksQ0FBQyxDQUFDO1FBQy9DO01BQ0Q7TUFDQSxJQUFHLENBQUMxQyxLQUFLLENBQUNmLEtBQUssQ0FBQ1IsVUFBVSxFQUFDO1FBQzFCRyxHQUFHLENBQUNRLFNBQVMsQ0FBQztVQUFDekIsS0FBSyxFQUFDLElBQUk7VUFBQzBCLE9BQU8sRUFBQyxlQUFlO1VBQUNDLFVBQVUsRUFBQyxLQUFLO1VBQUNDLFdBQVcsRUFBQztRQUFJLENBQUMsQ0FBQztRQUNyRjtNQUNEO01BQ0FTLEtBQUssQ0FBQ2YsS0FBSyxDQUFDcEIsYUFBYSxDQUFDbUMsS0FBSyxDQUFDZixLQUFLLENBQUNSLFVBQVUsQ0FBQ3FDLEtBQUssQ0FBQyxDQUFDb0gsSUFBSSxDQUFDbEksS0FBSyxDQUFDZixLQUFLLENBQUNSLFVBQVUsQ0FBQ29OLE1BQU0sQ0FBQyxDQUFDNUgsS0FBSyxHQUFDdkIsSUFBSTtNQUN0RyxhQUFZaEYsSUFBSTtNQUNoQixJQUFJcVAsZ0JBQWdCLEdBQUcvTSxLQUFLLENBQUNmLEtBQUssQ0FBQ1IsVUFBVSxDQUFDOEssZUFBZSxDQUFDeUQsSUFBSSxFQUFFO01BQ3BFLElBQUk1QixJQUFJLEdBQUc7UUFDUEQsT0FBTyxFQUFFNEIsZ0JBQWdCO1FBQ3pCMUIsTUFBTSxFQUFFLEdBQUc7UUFDWEMsU0FBUyxFQUFFLEVBQUU7UUFDYkMsTUFBTSxFQUFFLEVBQUU7UUFDVkMsTUFBTSxFQUFFLEVBQUU7UUFDVkMsU0FBUyxFQUFFLEVBQUU7UUFDYjVMLEtBQUssRUFBRUcsS0FBSyxDQUFDZixLQUFLLENBQUNyQixLQUFLLENBQUNpQyxLQUFLO1FBQzlCNkwsS0FBSyxFQUFFLEVBQUU7UUFDVDFLLElBQUksRUFBRWhCLEtBQUssQ0FBQ2YsS0FBSyxDQUFDUixVQUFVLENBQUNrTSxHQUFHO1FBQ2hDc0MsUUFBUSxFQUFFdlA7TUFDZCxDQUFDO01BQ0RzQyxLQUFLLENBQUNrTixxQkFBcUIsQ0FBQzlCLElBQUksRUFBRXBMLEtBQUssQ0FBQ2YsS0FBSyxDQUFDUixVQUFVLENBQUN1TixTQUFTLENBQUM7TUFDbkUsSUFBSSxDQUFDRixLQUFLLENBQUNDLEtBQUssQ0FBQ2MsS0FBSyxFQUFFO0lBQ3pCLENBQUM7SUFDRE0sTUFBTSxrQkFBQ2hCLENBQUMsRUFBQztNQUNSdk4sR0FBRyxDQUFDd08sWUFBWSxDQUFDO1FBQ2hCQyxLQUFLLEVBQUMsQ0FBQyxDQUFDO01BQ1QsQ0FBQyxDQUFDO0lBQ0gsQ0FBQztJQUNEQyxLQUFLLGlCQUFDbkIsQ0FBQyxFQUFDO01BQUE7TUFBRTtNQUNULElBQUlvQixJQUFJLEdBQUdwQixDQUFDO01BQ1o7TUFDQXFCLE1BQU0sRUFBRSxDQUFDQyxNQUFNLENBQUMsVUFBQzlNLE1BQU0sRUFBRztRQUN6QjtRQUNBLE1BQUksQ0FBQzFCLEtBQUssQ0FBQ3BCLGFBQWEsQ0FBQ3NPLENBQUMsQ0FBQ0csTUFBTSxDQUFDQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQ3JFLElBQUksQ0FBQ2lFLENBQUMsQ0FBQ0csTUFBTSxDQUFDQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQ3RJLEtBQUssR0FBQ3RELE1BQU0sQ0FBQytNLFVBQVU7UUFDNUc5TyxHQUFHLENBQUMrTyxZQUFZLEVBQUU7UUFDbEIsTUFBSSxDQUFDQyxPQUFPLENBQUNMLElBQUksRUFBQzVNLE1BQU0sQ0FBQytNLFVBQVUsQ0FBQztNQUNyQyxDQUFDLENBQUM7SUFDSCxDQUFDO0lBQ0RHLE9BQU8sbUJBQUMvTSxLQUFLLEVBQUMySCxJQUFJLEVBQUM7TUFDbEI7TUFDQSxJQUFJLENBQUN4SixLQUFLLENBQUNwQixhQUFhLENBQUNpRCxLQUFLLENBQUMsQ0FBQzBKLElBQUksR0FBQy9CLElBQUksSUFBRSxJQUFJLEdBQUMsS0FBSyxHQUFDLElBQUk7SUFDM0QsQ0FBQztJQUNEcUYsVUFBVSxzQkFBQzNCLENBQUMsRUFBRTtNQUNiO01BQ0EsSUFBSSxDQUFDbE4sS0FBSyxDQUFDcEIsYUFBYSxDQUFDc08sQ0FBQyxDQUFDRyxNQUFNLENBQUNDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDckUsSUFBSSxDQUFDaUUsQ0FBQyxDQUFDRyxNQUFNLENBQUNDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDdEksS0FBSyxHQUFDa0ksQ0FBQyxDQUFDRyxNQUFNLENBQUNwSSxLQUFLO0lBQzFHLENBQUM7SUFDRDZKLFFBQVEsb0JBQUM1QixDQUFDLEVBQUU7TUFDWDtNQUNBLElBQUlqSSxLQUFLLEdBQUMsSUFBSSxDQUFDakYsS0FBSyxDQUFDcEIsYUFBYSxDQUFDc08sQ0FBQyxDQUFDRyxNQUFNLENBQUNDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDckUsSUFBSSxDQUFDaUUsQ0FBQyxDQUFDRyxNQUFNLENBQUNDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDM0ssUUFBUSxDQUFDdUssQ0FBQyxDQUFDRyxNQUFNLENBQUNwSSxLQUFLLENBQUM7TUFDdkgsSUFBSThILFNBQVMsR0FBRyxJQUFJLENBQUMvTSxLQUFLLENBQUNwQixhQUFhLENBQUNzTyxDQUFDLENBQUNHLE1BQU0sQ0FBQ0MsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUNyRSxJQUFJLENBQUNpRSxDQUFDLENBQUNHLE1BQU0sQ0FBQ0MsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO01BQ3BHO01BQ0EsSUFBSXJJLEtBQUssQ0FBQzVGLElBQUksSUFBSTBOLFNBQVMsQ0FBQy9ILEtBQUssRUFBRTtRQUNsQyxJQUFJLENBQUNoRixLQUFLLENBQUNwQixhQUFhLENBQUNzTyxDQUFDLENBQUNHLE1BQU0sQ0FBQ0MsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUNyRSxJQUFJLENBQUNpRSxDQUFDLENBQUNHLE1BQU0sQ0FBQ0MsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUN0SSxLQUFLLEdBQUNDLEtBQUssQ0FBQzVGLElBQUk7UUFDckc7UUFDQSxJQUFJNk0sT0FBTyxHQUFHLElBQUksQ0FBQ2xNLEtBQUssQ0FBQ3BCLGFBQWEsQ0FBQ3NPLENBQUMsQ0FBQ0csTUFBTSxDQUFDQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQ3JFLElBQUksQ0FBQ2lFLENBQUMsQ0FBQ0csTUFBTSxDQUFDQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQ3ZELE1BQU07UUFDekcsSUFBSW1DLE9BQU8sRUFBRTtVQUNOO1VBQ0EsSUFBSVIsR0FBRyxHQUFDLEVBQUU7VUFDVixJQUFJdkMsUUFBUSxHQUFHLElBQUksQ0FBQ25KLEtBQUssQ0FBQ3BCLGFBQWE7VUFDdkMsS0FBSyxJQUFJMkssQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHSixRQUFRLENBQUNHLE1BQU0sRUFBRUMsQ0FBQyxFQUFFLEVBQUU7WUFDekMsSUFBSXhILElBQUksR0FBR29ILFFBQVEsQ0FBQ0ksQ0FBQyxDQUFDLENBQUNOLElBQUk7WUFDM0IsS0FBSyxJQUFJVyxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUc3SCxJQUFJLENBQUN1SCxNQUFNLEVBQUVNLENBQUMsRUFBRSxFQUFFO2NBQ3JDLElBQUkrQixFQUFFLEdBQUc1SixJQUFJLENBQUM2SCxDQUFDLENBQUM7Y0FDaEIsSUFBRytCLEVBQUUsQ0FBQ2pJLElBQUksSUFBRSxVQUFVLEVBQ3JCLElBQUdpSSxFQUFFLENBQUMzRyxLQUFLLElBQUUsR0FBRyxFQUFFMkcsRUFBRSxDQUFDM0csS0FBSyxHQUFDLEVBQUU7Y0FDOUIsSUFBRzJHLEVBQUUsQ0FBQ2pJLElBQUksSUFBRSxNQUFNLElBQUlpSSxFQUFFLENBQUNqSSxJQUFJLElBQUUsTUFBTSxFQUNwQ2dJLEdBQUcsQ0FBQ3hILElBQUksQ0FBQztnQkFBRW5DLElBQUksRUFBRTRKLEVBQUUsQ0FBQ3RNLElBQUk7Z0JBQUV1TSxHQUFHLEVBQUVELEVBQUUsQ0FBQ29ELEtBQUssR0FBRXBELEVBQUUsQ0FBQ29ELEtBQUssR0FBRTtjQUFHLENBQUMsQ0FBQyxDQUFDLEtBQ3JELElBQUdwRCxFQUFFLENBQUNqSSxJQUFJLElBQUUsS0FBSyxFQUMzQmdJLEdBQUcsQ0FBQ3hILElBQUksQ0FBQztnQkFBRW5DLElBQUksRUFBRTRKLEVBQUUsQ0FBQ3RNLElBQUk7Z0JBQUV1TSxHQUFHLEVBQUVELEVBQUUsQ0FBQzNHLEtBQUssR0FBQyxHQUFHLEdBQUM7Y0FBRyxDQUFDLENBQUMsQ0FBQyxLQUU1QzBHLEdBQUcsQ0FBQ3hILElBQUksQ0FBQztnQkFBRW5DLElBQUksRUFBRTRKLEVBQUUsQ0FBQ3RNLElBQUk7Z0JBQUV1TSxHQUFHLEVBQUVELEVBQUUsQ0FBQzNHLEtBQUssR0FBRTJHLEVBQUUsQ0FBQzNHLEtBQUssR0FBRTtjQUFFLENBQUMsQ0FBQztZQUN6RDtVQUNEO1VBQ0EsSUFBSW1ILElBQUksR0FBRztZQUNQRCxPQUFPLEVBQUVBLE9BQU87WUFDaEJFLE1BQU0sRUFBRSxHQUFHO1lBQ1hDLFNBQVMsRUFBRSxFQUFFO1lBQ2JDLE1BQU0sRUFBRSxFQUFFO1lBQ1ZDLE1BQU0sRUFBRSxFQUFFO1lBQ1ZDLFNBQVMsRUFBRSxFQUFFO1lBQ2I1TCxLQUFLLEVBQUUsSUFBSSxDQUFDWixLQUFLLENBQUNyQixLQUFLLENBQUNpQyxLQUFLO1lBQzdCNkwsS0FBSyxFQUFFLEVBQUU7WUFDVDFLLElBQUksRUFBRTJKLEdBQUc7WUFDbEJzQyxRQUFRLEVBQUM7VUFDSixDQUFDO1VBQ0QsSUFBSSxDQUFDQyxxQkFBcUIsQ0FBQzlCLElBQUksQ0FBQztRQUNwQztNQUNKO0lBRUQsQ0FBQztJQUNENkMsU0FBUyxxQkFBQ0MsSUFBSSxFQUFDaEssS0FBSyxFQUFDaUssUUFBUSxFQUFFO01BQzlCO01BQ0E7TUFDQTtNQUNBO01BQ0EsSUFBR0QsSUFBSSxDQUFDM0YsTUFBTSxJQUFFLENBQUMsRUFBQztRQUNqQixJQUFJekgsS0FBSztVQUFFK0ssTUFBTTtVQUFDdUMsTUFBTSxHQUFDLENBQUM7UUFDMUIsS0FBSSxJQUFJNUYsQ0FBQyxJQUFJLElBQUksQ0FBQ3ZKLEtBQUssQ0FBQ3BCLGFBQWEsRUFBQztVQUNyQyxLQUFJLElBQUlnTCxDQUFDLElBQUksSUFBSSxDQUFDNUosS0FBSyxDQUFDcEIsYUFBYSxDQUFDMkssQ0FBQyxDQUFDLENBQUNOLElBQUksRUFBQztZQUM3QyxJQUFHaUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDbk4sSUFBSSxJQUFJLElBQUksQ0FBQy9CLEtBQUssQ0FBQ3BCLGFBQWEsQ0FBQzJLLENBQUMsQ0FBQyxDQUFDTixJQUFJLENBQUNXLENBQUMsQ0FBQyxDQUFDdkssSUFBSSxFQUFDO2NBQy9ELElBQUksQ0FBQ1csS0FBSyxDQUFDcEIsYUFBYSxDQUFDMkssQ0FBQyxDQUFDLENBQUNOLElBQUksQ0FBQ1csQ0FBQyxDQUFDLENBQUM1RSxLQUFLLEdBQUMsRUFBRTtZQUM3QztVQUNEO1FBQ0Q7TUFDRDtNQUVBLEtBQUksSUFBSW9LLENBQUMsSUFBSUgsSUFBSSxFQUFDO1FBQ2pCLElBQUlwTixLQUFLO1VBQUUrSyxNQUFNO1VBQUN1QyxNQUFNLEdBQUMsQ0FBQztRQUMxQixLQUFJLElBQUk1RixDQUFDLElBQUksSUFBSSxDQUFDdkosS0FBSyxDQUFDcEIsYUFBYSxFQUFDO1VBQ3JDLEtBQUksSUFBSWdMLENBQUMsSUFBSSxJQUFJLENBQUM1SixLQUFLLENBQUNwQixhQUFhLENBQUMySyxDQUFDLENBQUMsQ0FBQ04sSUFBSSxFQUFDO1lBQzdDLElBQUdnRyxJQUFJLENBQUNHLENBQUMsQ0FBQyxDQUFDck4sSUFBSSxJQUFJLElBQUksQ0FBQy9CLEtBQUssQ0FBQ3BCLGFBQWEsQ0FBQzJLLENBQUMsQ0FBQyxDQUFDTixJQUFJLENBQUNXLENBQUMsQ0FBQyxDQUFDdkssSUFBSSxFQUFDO2NBQzNEd0MsS0FBSyxHQUFDMEgsQ0FBQztjQUFDcUQsTUFBTSxHQUFDaEQsQ0FBQztZQUNqQjtVQUNEO1FBQ0Q7UUFDQSxJQUFJeUYsU0FBUyxHQUFHSixJQUFJLENBQUNHLENBQUMsQ0FBQztRQUN2QixJQUFJckMsU0FBUyxHQUFHLElBQUksQ0FBQy9NLEtBQUssQ0FBQ3BCLGFBQWEsQ0FBQ2lELEtBQUssQ0FBQyxDQUFDb0gsSUFBSSxDQUFDMkQsTUFBTSxDQUFDOztRQUU1RDtRQUNBLElBQUl5QyxTQUFTLENBQUNoUSxJQUFJLElBQUkwTixTQUFTLENBQUMvSCxLQUFLLEVBQUU7VUFDdEMsSUFBSSxDQUFDaEYsS0FBSyxDQUFDcEIsYUFBYSxDQUFDaUQsS0FBSyxDQUFDLENBQUNvSCxJQUFJLENBQUMyRCxNQUFNLENBQUMsQ0FBQzVILEtBQUssR0FBQ0MsS0FBSztVQUN4RDtVQUNBLElBQUlpSCxPQUFPLEdBQUcsSUFBSSxDQUFDbE0sS0FBSyxDQUFDcEIsYUFBYSxDQUFDaUQsS0FBSyxDQUFDLENBQUNvSCxJQUFJLENBQUMyRCxNQUFNLENBQUMsQ0FBQzdDLE1BQU07VUFDakUsSUFBSW1DLE9BQU8sRUFBRTtZQUNOO1lBQ0EsSUFBSVIsR0FBRyxHQUFDLEVBQUU7WUFDVixJQUFJdkMsUUFBUSxHQUFHLElBQUksQ0FBQ25KLEtBQUssQ0FBQ3BCLGFBQWE7WUFDdkMsS0FBSyxJQUFJMkssQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHSixRQUFRLENBQUNHLE1BQU0sRUFBRUMsQ0FBQyxFQUFFLEVBQUU7Y0FDekMsSUFBSXhILElBQUksR0FBR29ILFFBQVEsQ0FBQ0ksQ0FBQyxDQUFDLENBQUNOLElBQUk7Y0FDM0IsS0FBSyxJQUFJVyxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUc3SCxJQUFJLENBQUN1SCxNQUFNLEVBQUVNLENBQUMsRUFBRSxFQUFFO2dCQUNyQyxJQUFJK0IsRUFBRSxHQUFHNUosSUFBSSxDQUFDNkgsQ0FBQyxDQUFDO2dCQUNoQixJQUFHK0IsRUFBRSxDQUFDakksSUFBSSxJQUFFLFVBQVUsRUFDckIsSUFBR2lJLEVBQUUsQ0FBQzNHLEtBQUssSUFBRSxHQUFHLEVBQUUyRyxFQUFFLENBQUMzRyxLQUFLLEdBQUMsRUFBRTtnQkFDOUIsSUFBRzJHLEVBQUUsQ0FBQ2pJLElBQUksSUFBRSxNQUFNLElBQUlpSSxFQUFFLENBQUNqSSxJQUFJLElBQUUsTUFBTSxFQUNwQ2dJLEdBQUcsQ0FBQ3hILElBQUksQ0FBQztrQkFBRW5DLElBQUksRUFBRTRKLEVBQUUsQ0FBQ3RNLElBQUk7a0JBQUV1TSxHQUFHLEVBQUVELEVBQUUsQ0FBQ29ELEtBQUssR0FBRXBELEVBQUUsQ0FBQ29ELEtBQUssR0FBRTtnQkFBRyxDQUFDLENBQUMsQ0FBQyxLQUNyRCxJQUFHcEQsRUFBRSxDQUFDakksSUFBSSxJQUFFLEtBQUssRUFDM0JnSSxHQUFHLENBQUN4SCxJQUFJLENBQUM7a0JBQUVuQyxJQUFJLEVBQUU0SixFQUFFLENBQUN0TSxJQUFJO2tCQUFFdU0sR0FBRyxFQUFFRCxFQUFFLENBQUMzRyxLQUFLLEdBQUMsR0FBRyxHQUFDO2dCQUFHLENBQUMsQ0FBQyxDQUFDLEtBQ3hDLElBQUcyRyxFQUFFLENBQUNqSSxJQUFJLElBQUUsSUFBSSxJQUFJaUksRUFBRSxDQUFDakksSUFBSSxJQUFFLFFBQVEsSUFBSWlJLEVBQUUsQ0FBQ2pJLElBQUksSUFBRSxPQUFPLEVBQ25FZ0ksR0FBRyxDQUFDeEgsSUFBSSxDQUFDO2tCQUFFbkMsSUFBSSxFQUFFNEosRUFBRSxDQUFDdE0sSUFBSTtrQkFBRXVNLEdBQUcsRUFBRXlELFNBQVMsQ0FBQ2hRO2dCQUFJLENBQUMsQ0FBQyxDQUFDLEtBRTFDcU0sR0FBRyxDQUFDeEgsSUFBSSxDQUFDO2tCQUFFbkMsSUFBSSxFQUFFNEosRUFBRSxDQUFDdE0sSUFBSTtrQkFBRXVNLEdBQUcsRUFBRUQsRUFBRSxDQUFDM0csS0FBSyxHQUFFMkcsRUFBRSxDQUFDM0csS0FBSyxHQUFFO2dCQUFFLENBQUMsQ0FBQztjQUN6RDtZQUNEO1lBQ0EsSUFBSW1ILElBQUksR0FBRztjQUNQRCxPQUFPLEVBQUVBLE9BQU87Y0FDaEJFLE1BQU0sRUFBRSxHQUFHO2NBQ1hDLFNBQVMsRUFBRSxFQUFFO2NBQ2JDLE1BQU0sRUFBRSxFQUFFO2NBQ1ZDLE1BQU0sRUFBRSxFQUFFO2NBQ1ZDLFNBQVMsRUFBRSxFQUFFO2NBQ2I1TCxLQUFLLEVBQUUsSUFBSSxDQUFDWixLQUFLLENBQUNyQixLQUFLLENBQUNpQyxLQUFLO2NBQzdCNkwsS0FBSyxFQUFFLEVBQUU7Y0FDVDFLLElBQUksRUFBRTJKLEdBQUc7Y0FDbEJzQyxRQUFRLEVBQUM7WUFDSixDQUFDO1lBQ0QsSUFBSSxDQUFDQyxxQkFBcUIsQ0FBQzlCLElBQUksQ0FBQztVQUNwQztRQUNKO01BQ0Q7SUFHRCxDQUFDO0lBQ0R3QyxPQUFPLG1CQUFDekIsQ0FBQyxFQUFDdUIsVUFBVSxFQUFDO01BQ3BCO01BQ0EsSUFBSTFCLFNBQVMsR0FBRyxJQUFJLENBQUMvTSxLQUFLLENBQUNwQixhQUFhLENBQUNzTyxDQUFDLENBQUNHLE1BQU0sQ0FBQ0MsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUNyRSxJQUFJLENBQUNpRSxDQUFDLENBQUNHLE1BQU0sQ0FBQ0MsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO01BQ3BHO01BQ0EsSUFBSUosQ0FBQyxDQUFDRyxNQUFNLENBQUNwSSxLQUFLLElBQUk4SCxTQUFTLENBQUMvSCxLQUFLLEVBQUU7UUFDdEMsSUFBSSxDQUFDaEYsS0FBSyxDQUFDcEIsYUFBYSxDQUFDc08sQ0FBQyxDQUFDRyxNQUFNLENBQUNDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDckUsSUFBSSxDQUFDaUUsQ0FBQyxDQUFDRyxNQUFNLENBQUNDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDdEksS0FBSyxHQUFDeUosVUFBVSxHQUFDQSxVQUFVLEdBQUN2QixDQUFDLENBQUNHLE1BQU0sQ0FBQ3BJLEtBQUs7UUFDL0gsSUFBSWlILE9BQU8sR0FBRyxJQUFJLENBQUNsTSxLQUFLLENBQUNwQixhQUFhLENBQUNzTyxDQUFDLENBQUNHLE1BQU0sQ0FBQ0MsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUNyRSxJQUFJLENBQUNpRSxDQUFDLENBQUNHLE1BQU0sQ0FBQ0MsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUN2RCxNQUFNO1FBQ3pHLElBQUltQyxPQUFPLEVBQUU7VUFDTjtVQUNBLElBQUlSLEdBQUcsR0FBQyxFQUFFO1VBQ1YsSUFBSXZDLFFBQVEsR0FBRyxJQUFJLENBQUNuSixLQUFLLENBQUNwQixhQUFhO1VBQ3ZDLEtBQUssSUFBSTJLLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBR0osUUFBUSxDQUFDRyxNQUFNLEVBQUVDLENBQUMsRUFBRSxFQUFFO1lBQ3pDLElBQUl4SCxJQUFJLEdBQUdvSCxRQUFRLENBQUNJLENBQUMsQ0FBQyxDQUFDTixJQUFJO1lBQzNCLEtBQUssSUFBSVcsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHN0gsSUFBSSxDQUFDdUgsTUFBTSxFQUFFTSxDQUFDLEVBQUUsRUFBRTtjQUNyQyxJQUFJK0IsRUFBRSxHQUFHNUosSUFBSSxDQUFDNkgsQ0FBQyxDQUFDO2NBQ2hCLElBQUcrQixFQUFFLENBQUNqSSxJQUFJLElBQUUsVUFBVSxFQUNyQixJQUFHaUksRUFBRSxDQUFDM0csS0FBSyxJQUFFLEdBQUcsRUFBRTJHLEVBQUUsQ0FBQzNHLEtBQUssR0FBQyxFQUFFO2NBQzlCLElBQUcyRyxFQUFFLENBQUNqSSxJQUFJLElBQUUsTUFBTSxJQUFJaUksRUFBRSxDQUFDakksSUFBSSxJQUFFLE1BQU0sRUFDcENnSSxHQUFHLENBQUN4SCxJQUFJLENBQUM7Z0JBQUVuQyxJQUFJLEVBQUU0SixFQUFFLENBQUN0TSxJQUFJO2dCQUFFdU0sR0FBRyxFQUFFRCxFQUFFLENBQUNvRCxLQUFLLEdBQUVwRCxFQUFFLENBQUNvRCxLQUFLLEdBQUU7Y0FBRyxDQUFDLENBQUMsQ0FBQyxLQUNyRCxJQUFHcEQsRUFBRSxDQUFDakksSUFBSSxJQUFFLEtBQUssRUFDM0JnSSxHQUFHLENBQUN4SCxJQUFJLENBQUM7Z0JBQUVuQyxJQUFJLEVBQUU0SixFQUFFLENBQUN0TSxJQUFJO2dCQUFFdU0sR0FBRyxFQUFFRCxFQUFFLENBQUMzRyxLQUFLLEdBQUMsR0FBRyxHQUFDO2NBQUcsQ0FBQyxDQUFDLENBQUMsS0FFNUMwRyxHQUFHLENBQUN4SCxJQUFJLENBQUM7Z0JBQUVuQyxJQUFJLEVBQUU0SixFQUFFLENBQUN0TSxJQUFJO2dCQUFFdU0sR0FBRyxFQUFFRCxFQUFFLENBQUMzRyxLQUFLLEdBQUUyRyxFQUFFLENBQUMzRyxLQUFLLEdBQUU7Y0FBRSxDQUFDLENBQUM7WUFDekQ7VUFDRDtVQUNBLElBQUltSCxJQUFJLEdBQUc7WUFDUEQsT0FBTyxFQUFFQSxPQUFPO1lBQ2hCRSxNQUFNLEVBQUUsR0FBRztZQUNYQyxTQUFTLEVBQUUsRUFBRTtZQUNiQyxNQUFNLEVBQUUsRUFBRTtZQUNWQyxNQUFNLEVBQUUsRUFBRTtZQUNWQyxTQUFTLEVBQUUsRUFBRTtZQUNiNUwsS0FBSyxFQUFFLElBQUksQ0FBQ1osS0FBSyxDQUFDckIsS0FBSyxDQUFDaUMsS0FBSztZQUM3QjZMLEtBQUssRUFBRSxFQUFFO1lBQ1QxSyxJQUFJLEVBQUUySixHQUFHO1lBQ2xCc0MsUUFBUSxFQUFDO1VBQ0osQ0FBQztVQUNELElBQUksQ0FBQ0MscUJBQXFCLENBQUM5QixJQUFJLEVBQUVZLFNBQVMsQ0FBQztRQUMvQztNQUNKO0lBRUQsQ0FBQztJQUNEdUMsT0FBTyxtQkFBQ3BDLENBQUMsRUFBRTtNQUNWO01BQ0EsSUFBSXFDLFNBQVMsR0FBR3JDLENBQUMsQ0FBQ0csTUFBTSxDQUFDQyxPQUFPLENBQUNDLE9BQU8sR0FBQyxLQUFLLEdBQUMsSUFBSTtNQUNuRCxJQUFJUixTQUFTLEdBQUcsSUFBSSxDQUFDL00sS0FBSyxDQUFDcEIsYUFBYSxDQUFDc08sQ0FBQyxDQUFDRyxNQUFNLENBQUNDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDckUsSUFBSSxDQUFDaUUsQ0FBQyxDQUFDRyxNQUFNLENBQUNDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztNQUNwRztNQUNBLElBQUlpQyxTQUFTLElBQUl4QyxTQUFTLENBQUMvSCxLQUFLLEVBQUU7UUFDakMsSUFBSSxDQUFDaEYsS0FBSyxDQUFDcEIsYUFBYSxDQUFDc08sQ0FBQyxDQUFDRyxNQUFNLENBQUNDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDckUsSUFBSSxDQUFDaUUsQ0FBQyxDQUFDRyxNQUFNLENBQUNDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDdEksS0FBSyxHQUFDdUssU0FBUztRQUNwRyxJQUFJckQsT0FBTyxHQUFHLElBQUksQ0FBQ2xNLEtBQUssQ0FBQ3BCLGFBQWEsQ0FBQ3NPLENBQUMsQ0FBQ0csTUFBTSxDQUFDQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQ3JFLElBQUksQ0FBQ2lFLENBQUMsQ0FBQ0csTUFBTSxDQUFDQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQ3ZELE1BQU07UUFDekcsSUFBSW1DLE9BQU8sRUFBRTtVQUNOO1VBQ0EsSUFBSVIsR0FBRyxHQUFDLEVBQUU7VUFDVixJQUFJdkMsUUFBUSxHQUFHLElBQUksQ0FBQ25KLEtBQUssQ0FBQ3BCLGFBQWE7VUFDdkMsS0FBSyxJQUFJMkssQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHSixRQUFRLENBQUNHLE1BQU0sRUFBRUMsQ0FBQyxFQUFFLEVBQUU7WUFDekMsSUFBSXhILElBQUksR0FBR29ILFFBQVEsQ0FBQ0ksQ0FBQyxDQUFDLENBQUNOLElBQUk7WUFDM0IsS0FBSyxJQUFJVyxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUc3SCxJQUFJLENBQUN1SCxNQUFNLEVBQUVNLENBQUMsRUFBRSxFQUFFO2NBQ3JDLElBQUkrQixFQUFFLEdBQUc1SixJQUFJLENBQUM2SCxDQUFDLENBQUM7Y0FDaEIsSUFBRytCLEVBQUUsQ0FBQ2pJLElBQUksSUFBRSxVQUFVLEVBQ3JCLElBQUdpSSxFQUFFLENBQUMzRyxLQUFLLElBQUUsR0FBRyxFQUFFMkcsRUFBRSxDQUFDM0csS0FBSyxHQUFDLEVBQUU7Y0FDOUIsSUFBRzJHLEVBQUUsQ0FBQ2pJLElBQUksSUFBRSxNQUFNLElBQUlpSSxFQUFFLENBQUNqSSxJQUFJLElBQUUsTUFBTSxFQUNwQ2dJLEdBQUcsQ0FBQ3hILElBQUksQ0FBQztnQkFBRW5DLElBQUksRUFBRTRKLEVBQUUsQ0FBQ3RNLElBQUk7Z0JBQUV1TSxHQUFHLEVBQUVELEVBQUUsQ0FBQ29ELEtBQUssR0FBRXBELEVBQUUsQ0FBQ29ELEtBQUssR0FBRTtjQUFHLENBQUMsQ0FBQyxDQUFDLEtBQ3JELElBQUdwRCxFQUFFLENBQUNqSSxJQUFJLElBQUUsS0FBSyxFQUMzQmdJLEdBQUcsQ0FBQ3hILElBQUksQ0FBQztnQkFBRW5DLElBQUksRUFBRTRKLEVBQUUsQ0FBQ3RNLElBQUk7Z0JBQUV1TSxHQUFHLEVBQUVELEVBQUUsQ0FBQzNHLEtBQUssR0FBQyxHQUFHLEdBQUM7Y0FBRyxDQUFDLENBQUMsQ0FBQyxLQUVsRDBHLEdBQUcsQ0FBQ3hILElBQUksQ0FBQztnQkFBRW5DLElBQUksRUFBRTRKLEVBQUUsQ0FBQ3RNLElBQUk7Z0JBQUV1TSxHQUFHLEVBQUVELEVBQUUsQ0FBQzNHLEtBQUssR0FBRTJHLEVBQUUsQ0FBQzNHLEtBQUssR0FBRTtjQUFFLENBQUMsQ0FBQztZQUVuRDtVQUNEO1VBQ0EsSUFBSW1ILElBQUksR0FBRztZQUNQRCxPQUFPLEVBQUVBLE9BQU87WUFDaEJFLE1BQU0sRUFBRSxHQUFHO1lBQ1hDLFNBQVMsRUFBRSxFQUFFO1lBQ2JDLE1BQU0sRUFBRSxFQUFFO1lBQ1ZDLE1BQU0sRUFBRSxFQUFFO1lBQ1ZDLFNBQVMsRUFBRSxFQUFFO1lBQ2I1TCxLQUFLLEVBQUUsSUFBSSxDQUFDWixLQUFLLENBQUNyQixLQUFLLENBQUNpQyxLQUFLO1lBQzdCNkwsS0FBSyxFQUFFLEVBQUU7WUFDVDFLLElBQUksRUFBRTJKLEdBQUc7WUFDbEJzQyxRQUFRLEVBQUM7VUFDSixDQUFDO1VBQ0QsSUFBSSxDQUFDQyxxQkFBcUIsQ0FBQzlCLElBQUksQ0FBQztRQUNwQztNQUNKO0lBRUQsQ0FBQztJQUNEcUQsaUJBQWlCLDZCQUFDM04sS0FBSyxFQUFDO01BQ3ZCO01BQ1ksSUFBSSxDQUFDN0IsS0FBSyxDQUFDWixZQUFZLENBQUNxUSxNQUFNLENBQUM1TixLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUN0RDtJQUNELENBQUM7SUFDRDZOLGFBQWEseUJBQUN4QyxDQUFDLEVBQUU7TUFDYjtNQUNBLGFBQVlBLENBQUMsQ0FBQ3pPLElBQUksQ0FBQ2tSLElBQUksQ0FBQyxHQUFHLENBQUM7TUFDL0IsSUFBSSxDQUFDM1AsS0FBSyxDQUFDcEIsYUFBYSxDQUFDc08sQ0FBQyxDQUFDRyxNQUFNLENBQUNDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDckUsSUFBSSxDQUFDaUUsQ0FBQyxDQUFDRyxNQUFNLENBQUNDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDdEksS0FBSyxHQUFDa0ksQ0FBQyxDQUFDek8sSUFBSSxDQUFDa1IsSUFBSSxDQUFDLEdBQUcsQ0FBQztJQUM1RyxDQUFDO0lBQ0RDLGdCQUFnQiw0QkFBQy9OLEtBQUssRUFBQytLLE1BQU0sRUFBQztNQUM3QixJQUFJak8sS0FBSyxHQUFDO1FBQUNrRCxLQUFLLEVBQUNBLEtBQUs7UUFBQytLLE1BQU0sRUFBQ0E7TUFBTSxDQUFDO01BQ3JDLElBQUk3TCxLQUFLLEdBQUcsSUFBSTtNQUNoQnBCLEdBQUcsQ0FBQ2tRLFVBQVUsQ0FBQztRQUNkQyxHQUFHLEVBQUMsb0NBQW9DLEdBQUNoUSxJQUFJLENBQUNpUSxTQUFTLENBQUNwUixLQUFLLENBQUM7UUFDOURxUixNQUFNLEVBQUM7VUFDTkMsTUFBTSxrQkFBQ3hSLElBQUksRUFBQ0UsS0FBSyxFQUFDO1lBQ2pCO1lBQ0EsYUFBWUYsSUFBSTtZQUNoQnNDLEtBQUssQ0FBQ2YsS0FBSyxDQUFDcEIsYUFBYSxDQUFDRCxLQUFLLENBQUNrRCxLQUFLLENBQUMsQ0FBQ29ILElBQUksQ0FBQ3RLLEtBQUssQ0FBQ2lPLE1BQU0sQ0FBQyxDQUFDNUgsS0FBSyxHQUFDdkcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDWSxJQUFJO1lBQzVFMEIsS0FBSyxDQUFDZixLQUFLLENBQUNwQixhQUFhLENBQUNELEtBQUssQ0FBQ2tELEtBQUssQ0FBQyxDQUFDb0gsSUFBSSxDQUFDdEssS0FBSyxDQUFDaU8sTUFBTSxDQUFDLENBQUNtQyxLQUFLLEdBQUN0USxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUN5UixLQUFLLEdBQUMsR0FBRyxHQUFDelIsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDWSxJQUFJO1lBRTlGLElBQUk2TSxPQUFPLEdBQUduTCxLQUFLLENBQUNmLEtBQUssQ0FBQ3BCLGFBQWEsQ0FBQ0QsS0FBSyxDQUFDa0QsS0FBSyxDQUFDLENBQUNvSCxJQUFJLENBQUN0SyxLQUFLLENBQUNpTyxNQUFNLENBQUMsQ0FBQzdDLE1BQU07WUFDOUUsSUFBSW1DLE9BQU8sRUFBRTtjQUNUQSxPQUFPLEdBQUdBLE9BQU8sQ0FBQzZCLElBQUksRUFBRTtjQUN4QixJQUFJN0IsT0FBTyxFQUFFO2dCQUNULElBQUlDLElBQUksR0FBRztrQkFDUEQsT0FBTyxFQUFFQSxPQUFPO2tCQUNoQkUsTUFBTSxFQUFFLEdBQUc7a0JBQ1hDLFNBQVMsRUFBRSxFQUFFO2tCQUNiQyxNQUFNLEVBQUUsRUFBRTtrQkFDVkMsTUFBTSxFQUFFLEVBQUU7a0JBQ1ZDLFNBQVMsRUFBRS9OLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQ3lSLEtBQUs7a0JBQ3hCdFAsS0FBSyxFQUFFRyxLQUFLLENBQUNmLEtBQUssQ0FBQ3JCLEtBQUssQ0FBQ2lDLEtBQUs7a0JBQzlCNkwsS0FBSyxFQUFFLEVBQUU7a0JBQ1QxSyxJQUFJLEVBQUUsRUFBRTtrQkFDakJpTSxRQUFRLEVBQUM7Z0JBQ0osQ0FBQzs7Z0JBRVA7Z0JBQ01qTixLQUFLLENBQUNrTixxQkFBcUIsQ0FBQzlCLElBQUksQ0FBQztjQUNyQztZQUNKO1VBQ0Q7UUFDRDtNQUNELENBQUMsQ0FBQztJQUNILENBQUM7SUFDRGdFLGdCQUFnQiw0QkFBQ2pELENBQUMsRUFBQztNQUNsQixhQUFZQSxDQUFDLENBQUNHLE1BQU07TUFDcEIxTixHQUFHLENBQUNRLFNBQVMsQ0FBQztRQUFDekIsS0FBSyxFQUFDLElBQUk7UUFBQzBCLE9BQU8sRUFBQyxVQUFVO1FBQUNDLFVBQVUsRUFBQyxLQUFLO1FBQUNDLFdBQVcsRUFBQztNQUFJLENBQUMsQ0FBQztNQUNoRjtNQUNBO0lBQ0QsQ0FBQztJQUNEOFAsZ0JBQWdCLDRCQUFDdk8sS0FBSyxFQUFDK0ssTUFBTSxFQUFDO01BQzdCLElBQUlqTyxLQUFLLEdBQUM7UUFBQ2tELEtBQUssRUFBQ0EsS0FBSztRQUFDK0ssTUFBTSxFQUFDQTtNQUFNLENBQUM7TUFDckMsSUFBSTdMLEtBQUssR0FBRyxJQUFJO01BQ2hCcEIsR0FBRyxDQUFDa1EsVUFBVSxDQUFDO1FBQ2RDLEdBQUcsRUFBQyxvQ0FBb0MsR0FBQ2hRLElBQUksQ0FBQ2lRLFNBQVMsQ0FBQ3BSLEtBQUssQ0FBQztRQUM5RHFSLE1BQU0sRUFBQztVQUNOQyxNQUFNLGtCQUFDeFIsSUFBSSxFQUFDRSxLQUFLLEVBQUM7WUFDakI7WUFDQTtZQUNBb0MsS0FBSyxDQUFDZixLQUFLLENBQUNwQixhQUFhLENBQUNELEtBQUssQ0FBQ2tELEtBQUssQ0FBQyxDQUFDb0gsSUFBSSxDQUFDdEssS0FBSyxDQUFDaU8sTUFBTSxDQUFDLENBQUM1SCxLQUFLLEdBQUN2RyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUNZLElBQUk7WUFDNUUwQixLQUFLLENBQUNmLEtBQUssQ0FBQ3BCLGFBQWEsQ0FBQ0QsS0FBSyxDQUFDa0QsS0FBSyxDQUFDLENBQUNvSCxJQUFJLENBQUN0SyxLQUFLLENBQUNpTyxNQUFNLENBQUMsQ0FBQ21DLEtBQUssR0FBQ3RRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzhFLEVBQUUsR0FBQyxHQUFHLEdBQUM5RSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUNZLElBQUk7WUFFM0YsSUFBSTZNLE9BQU8sR0FBR25MLEtBQUssQ0FBQ2YsS0FBSyxDQUFDcEIsYUFBYSxDQUFDRCxLQUFLLENBQUNrRCxLQUFLLENBQUMsQ0FBQ29ILElBQUksQ0FBQ3RLLEtBQUssQ0FBQ2lPLE1BQU0sQ0FBQyxDQUFDN0MsTUFBTTtZQUM5RSxJQUFJbUMsT0FBTyxFQUFFO2NBQ1RBLE9BQU8sR0FBR0EsT0FBTyxDQUFDNkIsSUFBSSxFQUFFO2NBQ3hCLElBQUk3QixPQUFPLEVBQUU7Z0JBQ1QsSUFBSUMsSUFBSSxHQUFHO2tCQUNQRCxPQUFPLEVBQUVBLE9BQU87a0JBQ2hCRSxNQUFNLEVBQUUsR0FBRztrQkFDWEMsU0FBUyxFQUFFNU4sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDOEUsRUFBRTtrQkFDckIrSSxNQUFNLEVBQUUsRUFBRTtrQkFDVkMsTUFBTSxFQUFFLEVBQUU7a0JBQ1ZDLFNBQVMsRUFBRSxFQUFFO2tCQUNiNUwsS0FBSyxFQUFFRyxLQUFLLENBQUNmLEtBQUssQ0FBQ3JCLEtBQUssQ0FBQ2lDLEtBQUs7a0JBQzlCNkwsS0FBSyxFQUFFLEVBQUU7a0JBQ1QxSyxJQUFJLEVBQUUsRUFBRTtrQkFDakJpTSxRQUFRLEVBQUM7Z0JBQ0osQ0FBQzs7Z0JBRUQ7Z0JBQ0FqTixLQUFLLENBQUNrTixxQkFBcUIsQ0FBQzlCLElBQUksQ0FBQztjQUNyQztZQUNKO1VBQ0Q7UUFDRDtNQUNELENBQUMsQ0FBQztJQUNILENBQUM7SUFDRDtJQUNBa0UsSUFBSSxrQkFBRTtNQUNMLElBQUksSUFBSSxDQUFDclEsS0FBSyxDQUFDakIsYUFBYSxFQUMzQixJQUFJLENBQUN1Uix1QkFBdUIsRUFBRSxDQUFDLEtBRS9CLElBQUksQ0FBQ0MsR0FBRyxFQUFFO0lBQ1osQ0FBQztJQUNEQSxHQUFHLGlCQUFFO01BQUE7TUFDSjVRLEdBQUcsQ0FBQzZRLFdBQVcsQ0FBQztRQUNmOVIsS0FBSyxFQUFDLFFBQVE7UUFDZCtSLElBQUksRUFBQztNQUNOLENBQUMsQ0FBQztNQUNGLElBQUkvRSxHQUFHLEdBQUMsRUFBRTtNQUNWLElBQUl2QyxRQUFRLEdBQUcsSUFBSSxDQUFDbkosS0FBSyxDQUFDcEIsYUFBYTtNQUN2QyxLQUFLLElBQUkySyxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUdKLFFBQVEsQ0FBQ0csTUFBTSxFQUFFQyxDQUFDLEVBQUUsRUFBRTtRQUN6QyxJQUFJeEgsSUFBSSxHQUFHb0gsUUFBUSxDQUFDSSxDQUFDLENBQUMsQ0FBQ04sSUFBSTtRQUMzQixLQUFLLElBQUlXLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBRzdILElBQUksQ0FBQ3VILE1BQU0sRUFBRU0sQ0FBQyxFQUFFLEVBQUU7VUFDckMsSUFBSStCLEVBQUUsR0FBRzVKLElBQUksQ0FBQzZILENBQUMsQ0FBQztVQUNoQixJQUFHK0IsRUFBRSxDQUFDM0csS0FBSyxJQUFFLEtBQUssSUFBSTJHLEVBQUUsQ0FBQzNHLEtBQUssSUFBRSxTQUFTLEVBQUUyRyxFQUFFLENBQUMzRyxLQUFLLEdBQUMsRUFBRTtVQUN0RCxJQUFHMkcsRUFBRSxDQUFDakksSUFBSSxJQUFFLFVBQVUsRUFDckIsSUFBR2lJLEVBQUUsQ0FBQzNHLEtBQUssSUFBRSxHQUFHLEVBQUUyRyxFQUFFLENBQUMzRyxLQUFLLEdBQUMsRUFBRTtVQUN4QixJQUFHMkcsRUFBRSxDQUFDakksSUFBSSxJQUFFLE1BQU0sSUFBSWlJLEVBQUUsQ0FBQ2pJLElBQUksSUFBRSxNQUFNLEVBQ3BDZ0ksR0FBRyxDQUFDeEgsSUFBSSxDQUFDO1lBQUVULElBQUksRUFBRWtJLEVBQUUsQ0FBQ3RNLElBQUk7WUFBRTRGLEtBQUssRUFBRTBHLEVBQUUsQ0FBQ29ELEtBQUssR0FBRXBELEVBQUUsQ0FBQ29ELEtBQUssR0FBRTtVQUFHLENBQUMsQ0FBQyxDQUFDLEtBQ3ZELElBQUdwRCxFQUFFLENBQUNqSSxJQUFJLElBQUUsS0FBSyxFQUMzQmdJLEdBQUcsQ0FBQ3hILElBQUksQ0FBQztZQUFFVCxJQUFJLEVBQUVrSSxFQUFFLENBQUN0TSxJQUFJO1lBQUU0RixLQUFLLEVBQUUwRyxFQUFFLENBQUMzRyxLQUFLLEdBQUMsR0FBRyxHQUFDO1VBQUcsQ0FBQyxDQUFDLENBQUMsS0FDMUMsSUFBRzJHLEVBQUUsQ0FBQ2pJLElBQUksSUFBRSxJQUFJLElBQUlpSSxFQUFFLENBQUNqSSxJQUFJLElBQUUsUUFBUSxJQUFJaUksRUFBRSxDQUFDakksSUFBSSxJQUFFLE9BQU8sRUFBQztZQUNwRSxJQUFHaUksRUFBRSxDQUFDbkIsTUFBTSxJQUFFLElBQUksRUFBQztjQUFFO2NBQ3BCLElBQUlrRyxNQUFNLEdBQUUsRUFBRTtjQUNkLEtBQUksSUFBSXRCLENBQUMsSUFBSXpELEVBQUUsQ0FBQzNHLEtBQUssRUFBQztnQkFDckIsSUFBRzBMLE1BQU0sRUFDUkEsTUFBTSxJQUFFLEdBQUc7Z0JBQ1pBLE1BQU0sSUFBRS9FLEVBQUUsQ0FBQzNHLEtBQUssQ0FBQ29LLENBQUMsQ0FBQztjQUNwQjtjQUNBMUQsR0FBRyxDQUFDeEgsSUFBSSxDQUFDO2dCQUFFVCxJQUFJLEVBQUVrSSxFQUFFLENBQUN0TSxJQUFJO2dCQUFFNEYsS0FBSyxFQUFFeUw7Y0FBTSxDQUFDLENBQUM7WUFDMUMsQ0FBQyxNQUNBaEYsR0FBRyxDQUFDeEgsSUFBSSxDQUFDO2NBQUVULElBQUksRUFBRWtJLEVBQUUsQ0FBQ3RNLElBQUk7Y0FBRTRGLEtBQUssRUFBRTBHLEVBQUUsQ0FBQzNHO1lBQUssQ0FBQyxDQUFDO1VBQzdDLENBQUMsTUFFQTBHLEdBQUcsQ0FBQ3hILElBQUksQ0FBQztZQUFFVCxJQUFJLEVBQUVrSSxFQUFFLENBQUN0TSxJQUFJO1lBQUU0RixLQUFLLEVBQUUwRyxFQUFFLENBQUMzRyxLQUFLLEdBQUUyRyxFQUFFLENBQUMzRyxLQUFLLEdBQUU7VUFBRSxDQUFDLENBQUM7VUFFMUQsSUFBSTJHLEVBQUUsQ0FBQzFCLFFBQVEsSUFBSSxJQUFJLElBQUksQ0FBQzBCLEVBQUUsQ0FBQzNHLEtBQUssRUFBRTtZQUN0QztZQUNDckYsR0FBRyxDQUFDZ1IsV0FBVyxFQUFFO1lBQ2pCO1lBQ0FoUixHQUFHLENBQUNRLFNBQVMsQ0FBQztjQUFDekIsS0FBSyxFQUFDLElBQUk7Y0FBQzBCLE9BQU8sRUFBQ3VMLEVBQUUsQ0FBQzNELFFBQVEsR0FBQyxPQUFPO2NBQUMzSCxVQUFVLEVBQUMsS0FBSztjQUFDQyxXQUFXLEVBQUM7WUFBSSxDQUFDLENBQUM7WUFDekY7VUFDRDtRQUNEO01BQ0Q7TUFDQSxJQUFJc1EsVUFBVSxHQUFHO1FBQ1osVUFBVSxFQUFFLE1BQU07UUFBRTtRQUNwQkMsTUFBTSxFQUFFLElBQUksQ0FBQzdRLEtBQUssQ0FBQ3JCLEtBQUssQ0FBQ2lDLEtBQUs7UUFBTTtRQUNwQyxRQUFRLEVBQUUsS0FBSztRQUFJO1FBQ25Ca1EsV0FBVyxFQUFFLElBQUk7UUFDakJDLE1BQU0sRUFBRTtVQUNKRixNQUFNLEVBQUUsSUFBSSxDQUFDN1EsS0FBSyxDQUFDckIsS0FBSyxDQUFDaUM7UUFDN0I7TUFDTCxDQUFDO01BRURnUSxVQUFVLEdBQUd0UyxhQUFNLENBQUMwUyxNQUFNLENBQUNsUixJQUFJLENBQUNpUSxTQUFTLENBQUNhLFVBQVUsQ0FBQyxDQUFDLENBQUM7TUFDdkQsSUFBSUssUUFBUSxHQUFDLENBQUMsQ0FBQztNQUNmdkYsR0FBRyxDQUFDL0osT0FBTyxDQUFDLFVBQUFzTixJQUFJLEVBQUU7UUFDakJnQyxRQUFRLENBQUNoQyxJQUFJLENBQUN4TCxJQUFJLENBQUMsR0FBR3dMLElBQUksQ0FBQ2hLLEtBQUs7TUFDakMsQ0FBQyxDQUFDO01BQ0Y7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQSxJQUFJdkUsUUFBUSxHQUFDO1FBQ1pDLFFBQVEsRUFBRSxJQUFJLENBQUNYLEtBQUssQ0FBQ3JCLEtBQUssQ0FBQ2lDLEtBQUs7UUFDaENDLFVBQVUsRUFBQyxFQUFFO1FBQ2JxUSxhQUFhLEVBQUMsRUFBRTtRQUNoQkMsYUFBYSxFQUFDLEVBQUU7UUFDaEJDLE9BQU8sRUFBQyxFQUFFO1FBQ1ZDLFlBQVksRUFBQyxFQUFFO1FBQ2ZDLGlCQUFpQixFQUFDLEVBQUU7UUFDcEJDLFlBQVksRUFBQyxFQUFFO1FBQ2ZDLFlBQVksRUFBQyxFQUFFO1FBQ2ZDLFFBQVEsRUFBRWIsVUFBVTtRQUNwQkssUUFBUSxFQUFFQTtNQUNYLENBQUM7TUFDRCxhQUFZdlEsUUFBUTtNQUNwQjtNQUNBLElBQUksQ0FBQ00sTUFBTSxDQUFDTSxRQUFRLENBQUMsZUFBZSxFQUFDWixRQUFRLENBQUMsQ0FBQ2EsSUFBSSxDQUFDLFVBQUFDLE9BQU8sRUFBRTtRQUM1RCxhQUFZQSxPQUFPO1FBQ25CN0IsR0FBRyxDQUFDZ1IsV0FBVyxFQUFFO1FBQ2pCLElBQUluUCxPQUFPLENBQUNDLFFBQVEsSUFBSSxDQUFDLEVBQUU7VUFDMUIsSUFBSUMsTUFBTSxHQUFHRixPQUFPLENBQUNFLE1BQU07VUFDM0I7VUFDQSxJQUFHRixPQUFPLENBQUNFLE1BQU0sQ0FBQ3FJLE1BQU0sRUFBQztZQUN4QixJQUFJQSxNQUFNLEdBQUdqSyxJQUFJLENBQUNDLEtBQUssQ0FBQ3lCLE9BQU8sQ0FBQ0UsTUFBTSxDQUFDcUksTUFBTSxDQUFDO1lBQzlDLGFBQVlBLE1BQU07WUFDbEIsSUFBR0EsTUFBTSxDQUFDMkgsR0FBRyxJQUFFLEdBQUcsRUFBQztjQUNsQixJQUFJM0gsTUFBTSxDQUFDMkgsR0FBRyxJQUFJLENBQUMsRUFBRTtnQkFDcEIvUixHQUFHLENBQUNRLFNBQVMsQ0FBQztrQkFBQ3pCLEtBQUssRUFBQyxJQUFJO2tCQUFDMEIsT0FBTyxFQUFDLFNBQVMsR0FBRzJKLE1BQU0sQ0FBQ3JJLE1BQU07a0JBQUNyQixVQUFVLEVBQUMsS0FBSztrQkFBQ0MsV0FBVyxFQUFDO2dCQUFJLENBQUMsQ0FBQztnQkFDL0Y7Y0FDRDtjQUNBLElBQUl5SixNQUFNLENBQUNvQyxJQUFJLEVBQUU7Z0JBQ2hCeE0sR0FBRyxDQUFDUSxTQUFTLENBQUM7a0JBQUN6QixLQUFLLEVBQUMsSUFBSTtrQkFBQzBCLE9BQU8sRUFBQyxTQUFTLEdBQUcySixNQUFNLENBQUNvQyxJQUFJO2tCQUFDOUwsVUFBVSxFQUFDLEtBQUs7a0JBQUNDLFdBQVcsRUFBQztnQkFBSSxDQUFDLENBQUM7Z0JBQzdGO2NBQ0Q7Y0FDQSxJQUFHeUosTUFBTSxDQUFDNEgsV0FBVyxJQUFFLEdBQUcsRUFBQztnQkFDMUJoUyxHQUFHLENBQUNpUyxTQUFTLENBQUM7a0JBQUNsVCxLQUFLLEVBQUNxTCxNQUFNLENBQUNySSxNQUFNO2tCQUFDbVEsSUFBSSxFQUFDLFNBQVM7a0JBQUNDLFFBQVEsRUFBQztnQkFBSSxDQUFDLENBQUM7Y0FDbEU7O2NBRUE7WUFDRDtVQUNELENBQUMsTUFDQW5TLEdBQUcsQ0FBQ2lTLFNBQVMsQ0FBQztZQUFDbFQsS0FBSyxFQUFDLE9BQU87WUFBQ21ULElBQUksRUFBQyxTQUFTO1lBQUNDLFFBQVEsRUFBQztVQUFJLENBQUMsQ0FBQztVQUM1RDtVQUNBblMsR0FBRyxDQUFDb1MsVUFBVSxDQUFDO1lBQ2RqQyxHQUFHLEVBQUMsc0JBQXNCLEdBQUNoUSxJQUFJLENBQUNpUSxTQUFTLENBQUMsTUFBSSxDQUFDL1AsS0FBSyxDQUFDckIsS0FBSyxDQUFDLEdBQUMsYUFBYSxHQUFDLE1BQUksQ0FBQ3FCLEtBQUssQ0FBQ3RCO1VBQ3RGLENBQUMsQ0FBQztVQUNGO1FBQ0QsQ0FBQyxNQUFJO1VBQ0ppQixHQUFHLENBQUNRLFNBQVMsQ0FBQztZQUFDekIsS0FBSyxFQUFDLElBQUk7WUFBQzBCLE9BQU8sRUFBQ29CLE9BQU8sQ0FBQ1ksT0FBTztZQUFDL0IsVUFBVSxFQUFDLEtBQUs7WUFBQ0MsV0FBVyxFQUFDO1VBQUksQ0FBQyxDQUFDO1FBQ3RGO01BQ0QsQ0FBQyxDQUFDLENBQUMrQixLQUFLLENBQUMsVUFBQUMsRUFBRSxFQUFFO1FBQ1osYUFBWUEsRUFBRTtRQUNkM0MsR0FBRyxDQUFDZ1IsV0FBVyxFQUFFO1FBQ2pCaFIsR0FBRyxDQUFDUSxTQUFTLENBQUM7VUFBQ3pCLEtBQUssRUFBQyxJQUFJO1VBQUMwQixPQUFPLEVBQUNrQyxFQUFFLENBQUNDLE1BQU07VUFBQ2xDLFVBQVUsRUFBQyxLQUFLO1VBQUNDLFdBQVcsRUFBQztRQUFJLENBQUMsQ0FBQztNQUNoRixDQUFDLENBQUM7SUFDSCxDQUFDO0lBQ0RvTSx5QkFBeUIscUNBQUNQLElBQUksRUFBQztNQUFBO01BQzlCLElBQUl4TixLQUFLLEdBQUc7UUFDUnFULFNBQVMsRUFBRSxJQUFJLENBQUNoUyxLQUFLLENBQUNyQixLQUFLLENBQUM0QixRQUFRLENBQUNsQixJQUFJO1FBQ3pDNFMsU0FBUyxFQUFFLElBQUksQ0FBQ2pTLEtBQUssQ0FBQ3JCLEtBQUssQ0FBQzRCLFFBQVEsQ0FBQ2xCLElBQUk7UUFDekM2UyxrQkFBa0IsRUFBRSxDQUFDO1FBQ3JCdEIsVUFBVSxFQUFFO1VBQ1IsVUFBVSxFQUFFLE1BQU07VUFBRTtVQUNwQkMsTUFBTSxFQUFFLElBQUksQ0FBQzdRLEtBQUssQ0FBQ3JCLEtBQUssQ0FBQ2lDLEtBQUs7VUFBTTtVQUNwQyxRQUFRLEVBQUUsS0FBSztVQUFJO1VBQ25Ca1EsV0FBVyxFQUFFLElBQUk7VUFDakJDLE1BQU0sRUFBRTtZQUNKRixNQUFNLEVBQUUsSUFBSSxDQUFDN1EsS0FBSyxDQUFDckIsS0FBSyxDQUFDaUMsS0FBSyxDQUFFO1lBQ2hDO1VBQ0o7UUFDSjtNQUNKLENBQUM7O01BQ0QsSUFBSXVSLGNBQWMsR0FBRyxFQUFFO01BQ3ZCLElBQUlqVCxXQUFXLEdBQUcsRUFBRTtNQUVwQlAsS0FBSyxDQUFDaVMsVUFBVSxHQUFHdFMsYUFBTSxDQUFDMFMsTUFBTSxDQUFDbFIsSUFBSSxDQUFDaVEsU0FBUyxDQUFDcFIsS0FBSyxDQUFDaVMsVUFBVSxDQUFDLENBQUMsQ0FBQztNQUNuRSxJQUFJSyxRQUFRLEdBQUMsQ0FBQyxDQUFDO01BQ2Y5RSxJQUFJLENBQUNwSyxJQUFJLENBQUNKLE9BQU8sQ0FBQyxVQUFBc04sSUFBSSxFQUFFO1FBQ3ZCZ0MsUUFBUSxDQUFDaEMsSUFBSSxDQUFDbE4sSUFBSSxDQUFDLEdBQUdrTixJQUFJLENBQUNyRCxHQUFHO01BQy9CLENBQUMsQ0FBQztNQUNGO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBLElBQUcsQ0FBQ08sSUFBSSxDQUFDRCxPQUFPLENBQUNrRyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUVqRyxJQUFJLENBQUNELE9BQU8sR0FBRyxHQUFHLEdBQUNDLElBQUksQ0FBQ0QsT0FBTyxHQUFDLEdBQUc7TUFDbkUsSUFBSXhMLFFBQVEsR0FBQztRQUNYMlIsT0FBTyxFQUFFbEcsSUFBSSxDQUFDQyxNQUFNO1FBQ3BCa0csaUJBQWlCLEVBQUUsRUFBRTtRQUNyQjNSLFFBQVEsRUFBRXdMLElBQUksQ0FBQ3ZMLEtBQUs7UUFDcEJDLFVBQVUsRUFBRSxFQUFFO1FBQ2RrTCxRQUFRLEVBQUVJLElBQUksQ0FBQ0QsT0FBTztRQUN0QnFHLFVBQVUsRUFBRSxFQUFFO1FBQ2RDLFdBQVcsRUFBRXJHLElBQUksQ0FBQ00sS0FBSztRQUN2QndFLFFBQVEsRUFBRUEsUUFBUTtRQUNsQndCLE1BQU0sRUFBRXRHLElBQUksQ0FBQ0UsU0FBUztRQUN0QnFHLFVBQVUsRUFBRXZHLElBQUksQ0FBQ0csTUFBTTtRQUN2QnFHLFVBQVUsRUFBRXhHLElBQUksQ0FBQ0ksTUFBTTtRQUN2QnFHLFVBQVUsRUFBRXpHLElBQUksQ0FBQ0ssU0FBUztRQUMxQnFHLFNBQVMsRUFBRSxFQUFFO1FBQ2JDLFlBQVksRUFBRSxFQUFFO1FBQ2hCckIsUUFBUSxFQUFFOVMsS0FBSyxDQUFDaVMsVUFBVTtRQUMxQjFSLFdBQVcsRUFBRUEsV0FBVztRQUN4QjZULFdBQVcsRUFBRVo7TUFDZixDQUFDO01BQ0QsYUFBWXpSLFFBQVE7TUFDcEI7TUFDQSxJQUFJLENBQUNNLE1BQU0sQ0FBQ00sUUFBUSxDQUFDLGdCQUFnQixFQUFDWixRQUFRLENBQUMsQ0FBQ2EsSUFBSSxDQUFDLFVBQUFDLE9BQU8sRUFBRTtRQUM3RCxhQUFZQSxPQUFPO1FBQ25CLElBQUlBLE9BQU8sQ0FBQ0MsUUFBUSxJQUFJLENBQUMsRUFBRTtVQUMxQixJQUFJaEQsSUFBSSxHQUFHK0MsT0FBTyxDQUFDRSxNQUFNO1VBQ3pCLElBQUlqRCxJQUFJLENBQUNpVCxHQUFHLElBQUksQ0FBQyxFQUFFO1lBQ2YsSUFBSXNCLEdBQUcsR0FBR3ZVLElBQUksQ0FBQ3dVLFFBQVEsR0FBRyxPQUFPeFUsSUFBSSxDQUFDd1UsUUFBUSxJQUFJLFFBQVEsR0FBR3hVLElBQUksQ0FBQ3dVLFFBQVEsR0FBR3hVLElBQUksQ0FBQ3dVLFFBQVEsQ0FBQ3RELElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFO1lBQzdHLElBQUlsUixJQUFJLENBQUNpVCxHQUFHLElBQUksR0FBRyxFQUFFL1IsR0FBRyxDQUFDUSxTQUFTLENBQUM7Y0FBQ3pCLEtBQUssRUFBQyxJQUFJO2NBQUMwQixPQUFPLEVBQUM0UyxHQUFHO2NBQUMzUyxVQUFVLEVBQUMsS0FBSztjQUFDQyxXQUFXLEVBQUM7WUFBSSxDQUFDLENBQUMsQ0FBQyxLQUMxRlgsR0FBRyxDQUFDUSxTQUFTLENBQUM7Y0FBQ3pCLEtBQUssRUFBQyxJQUFJO2NBQUMwQixPQUFPLEVBQUM0UyxHQUFHLEdBQUMsTUFBTSxHQUFDdlUsSUFBSSxDQUFDaVQsR0FBRztjQUFDclIsVUFBVSxFQUFDLEtBQUs7Y0FBQ0MsV0FBVyxFQUFDO1lBQUksQ0FBQyxDQUFDO1lBQ2pHLE9BQU8sS0FBSztVQUNiLENBQUMsTUFBSTtZQUNKLElBQUkwUyxJQUFHLEdBQUd2VSxJQUFJLENBQUMwTixJQUFJLEdBQUcsT0FBTzFOLElBQUksQ0FBQzBOLElBQUksSUFBSSxRQUFRLEdBQUcxTixJQUFJLENBQUMwTixJQUFJLEdBQUcxTixJQUFJLENBQUMwTixJQUFJLENBQUN3RCxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRTtZQUM3RixJQUFJcUQsSUFBRyxFQUFFclQsR0FBRyxDQUFDUSxTQUFTLENBQUM7Y0FBQ3pCLEtBQUssRUFBQyxJQUFJO2NBQUMwQixPQUFPLEVBQUM0UyxJQUFHO2NBQUMzUyxVQUFVLEVBQUMsS0FBSztjQUFDQyxXQUFXLEVBQUM7WUFBSSxDQUFDLENBQUM7WUFFbEYsSUFBRzdCLElBQUksQ0FBQ3NMLE1BQU0sRUFBQztjQUNkLElBQUltSixVQUFVLEdBQUd6VSxJQUFJLENBQUNzTCxNQUFNO2NBQzVCLElBQUltSixVQUFVLEVBQUU7Z0JBQ2YsS0FBSyxJQUFJdEosQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHc0osVUFBVSxDQUFDNUosTUFBTSxFQUFFTSxDQUFDLEVBQUUsRUFBRTtrQkFDM0MsSUFBSUcsTUFBTSxHQUFHbUosVUFBVSxDQUFDdEosQ0FBQyxDQUFDO2tCQUMxQixJQUFJdUosV0FBVyxHQUFHcEosTUFBTSxDQUFDb0osV0FBVztrQkFDcEMsSUFBSWxPLEtBQUssR0FBRzhFLE1BQU0sQ0FBQzlFLEtBQUs7a0JBQ3hCLElBQUlrTyxXQUFXLElBQUksY0FBYyxFQUFFO29CQUNsQyxJQUFJbE8sS0FBSyxFQUFFO3NCQUNWLGFBQVlBLEtBQUs7c0JBQ2pCLEtBQUssSUFBSXNFLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBR3RFLEtBQUssQ0FBQ3FFLE1BQU0sRUFBRUMsQ0FBQyxFQUFFLEVBQUU7d0JBQ3RDLEtBQUssSUFBSTZKLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBRyxNQUFJLENBQUNwVCxLQUFLLENBQUNwQixhQUFhLENBQUMwSyxNQUFNLEVBQUU4SixDQUFDLEVBQUUsRUFBRTswQkFDekQsS0FBSyxJQUFJdkosQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHLE1BQUksQ0FBQzdKLEtBQUssQ0FBQ3BCLGFBQWEsQ0FBQ3dVLENBQUMsQ0FBQyxDQUFDbkssSUFBSSxDQUFDSyxNQUFNLEVBQUVPLENBQUMsRUFBRSxFQUFFOzRCQUNqRSxJQUFJQyxFQUFFLEdBQUcsTUFBSSxDQUFDOUosS0FBSyxDQUFDcEIsYUFBYSxDQUFDd1UsQ0FBQyxDQUFDLENBQUNuSyxJQUFJLENBQUNZLENBQUMsQ0FBQzs0QkFDNUMsSUFBSTVFLEtBQUssQ0FBQ3NFLENBQUMsQ0FBQyxDQUFDeEgsSUFBSSxJQUFLK0gsRUFBRSxDQUFDekssSUFBSSxFQUFFOzhCQUM5QixJQUFHeUssRUFBRSxDQUFDcEcsSUFBSSxJQUFFLElBQUksSUFBSW9HLEVBQUUsQ0FBQ3BHLElBQUksSUFBRSxRQUFRLElBQUlvRyxFQUFFLENBQUNwRyxJQUFJLElBQUUsT0FBTyxFQUFDO2dDQUN6RCxJQUFJMlAsWUFBWSxHQUFDLEVBQUU7Z0NBQ25CLEtBQUksSUFBSTFJLENBQUMsSUFBSTFGLEtBQUssQ0FBQ3NFLENBQUMsQ0FBQyxDQUFDK0osV0FBVyxFQUFDO2tDQUNqQyxJQUFJQyxRQUFRLEdBQUV0TyxLQUFLLENBQUNzRSxDQUFDLENBQUMsQ0FBQytKLFdBQVcsQ0FBQzNJLENBQUMsQ0FBQztrQ0FDckMwSSxZQUFZLENBQUNuUCxJQUFJLENBQUM7b0NBQUMsV0FBVyxFQUFDcVAsUUFBUTtvQ0FBQyxNQUFNLEVBQUNBLFFBQVE7b0NBQUMsT0FBTyxFQUFDQSxRQUFRO29DQUFDLE9BQU8sRUFBQ0E7a0NBQVEsQ0FBQyxDQUFDO2dDQUU1RjtnQ0FDQXpKLEVBQUUsQ0FBQ25ILFFBQVEsR0FBRzBRLFlBQVk7Z0NBQzFCOzhCQUNELENBQUMsTUFBSTtnQ0FDSnZKLEVBQUUsQ0FBQzlFLEtBQUssR0FBR0MsS0FBSyxDQUFDc0UsQ0FBQyxDQUFDLENBQUN0RSxLQUFLOzhCQUMxQjs0QkFDRDswQkFDRDt3QkFDRDt3QkFFQSxJQUFJcUUsTUFBTSxHQUFHLENBQUM7d0JBQ2QsSUFBSSxDQUFDLE1BQUksQ0FBQ3RKLEtBQUssQ0FBQ2IsWUFBWSxDQUFDcVUsTUFBTSxDQUFDLFVBQVU5SixDQUFDLEVBQUU7MEJBQ2hELE9BQU96RSxLQUFLLENBQUNzRSxDQUFDLENBQUMsQ0FBQ3hILElBQUksSUFBSTJILENBQUMsQ0FBQzNILElBQUk7d0JBQy9CLENBQUMsQ0FBQyxDQUFDdUgsTUFBTSxFQUFFOzBCQUNWQSxNQUFNLEdBQUcsQ0FBQzswQkFDVixNQUFJLENBQUN0SixLQUFLLENBQUNiLFlBQVksQ0FBQytFLElBQUksQ0FBQ2UsS0FBSyxDQUFDc0UsQ0FBQyxDQUFDLENBQUM7d0JBQ3ZDO3dCQUNBLElBQUlELE1BQU0sSUFBSSxDQUFDLEVBQUU7MEJBQ2hCLEtBQUssSUFBSU0sQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHLE1BQUksQ0FBQzVKLEtBQUssQ0FBQ2IsWUFBWSxDQUFDbUssTUFBTSxFQUFFTSxDQUFDLEVBQUUsRUFBRTs0QkFDeEQsSUFBSSxNQUFJLENBQUM1SixLQUFLLENBQUNiLFlBQVksQ0FBQ3lLLENBQUMsQ0FBQyxDQUFDN0gsSUFBSSxJQUFJa0QsS0FBSyxDQUFDc0UsQ0FBQyxDQUFDLENBQUN4SCxJQUFJLEVBQUU7OEJBQ3JELE1BQUksQ0FBQy9CLEtBQUssQ0FBQ2IsWUFBWSxDQUFDeUssQ0FBQyxDQUFDLENBQUMzRSxLQUFLLEdBQUdBLEtBQUssQ0FBQ3NFLENBQUMsQ0FBQyxDQUFDdEUsS0FBSzs0QkFDbEQ7MEJBQ0Q7d0JBQ0Q7c0JBQ0Q7b0JBQ0Q7a0JBQ0Q7a0JBQ0EsSUFBSWtPLFdBQVcsSUFBSSxxQkFBcUIsRUFBRTtvQkFDekN4VCxHQUFHLENBQUNRLFNBQVMsQ0FBQztzQkFBQ3pCLEtBQUssRUFBQyxPQUFPO3NCQUFDMEIsT0FBTyxFQUFDLHVDQUF1QztzQkFBQ0MsVUFBVSxFQUFDLEtBQUs7c0JBQUNDLFdBQVcsRUFBQztvQkFBSSxDQUFDLENBQUM7a0JBQ2pIO2tCQUNBOztrQkFFQTtnQkFDRDtjQUNEO1lBQ0Q7VUFDRDtRQUNELENBQUMsTUFBSTtVQUNKWCxHQUFHLENBQUNRLFNBQVMsQ0FBQztZQUFDekIsS0FBSyxFQUFDLEtBQUs7WUFBQzBCLE9BQU8sRUFBQ29CLE9BQU8sQ0FBQ1ksT0FBTztZQUFDL0IsVUFBVSxFQUFDLEtBQUs7WUFBQ0MsV0FBVyxFQUFDO1VBQUksQ0FBQyxDQUFDO1FBQ3ZGO01BQ0QsQ0FBQyxDQUFDLENBQUMrQixLQUFLLENBQUMsVUFBQUMsRUFBRSxFQUFFO1FBQ1o7UUFDQTNDLEdBQUcsQ0FBQ1EsU0FBUyxDQUFDO1VBQUN6QixLQUFLLEVBQUMsT0FBTztVQUFDMEIsT0FBTyxFQUFDa0MsRUFBRSxDQUFDQyxNQUFNO1VBQUNsQyxVQUFVLEVBQUMsS0FBSztVQUFDQyxXQUFXLEVBQUM7UUFBSSxDQUFDLENBQUM7TUFDbkYsQ0FBQyxDQUFDO0lBQ0gsQ0FBQztJQUNFMk4scUJBQXFCLGlDQUFDOUIsSUFBSSxFQUFDWSxTQUFTLEVBQUM7TUFDdkMsSUFBSWhNLEtBQUssR0FBRyxJQUFJO01BQ2IsSUFBSTZQLFVBQVUsR0FBRztRQUNiLFVBQVUsRUFBRSxNQUFNO1FBQUU7UUFDcEJDLE1BQU0sRUFBRSxJQUFJLENBQUM3USxLQUFLLENBQUNyQixLQUFLLENBQUNpQyxLQUFLO1FBQU07UUFDcEMsUUFBUSxFQUFFLEtBQUs7UUFBSTtRQUNuQmtRLFdBQVcsRUFBRSxJQUFJO1FBQ2pCQyxNQUFNLEVBQUU7VUFDSkYsTUFBTSxFQUFFLElBQUksQ0FBQzdRLEtBQUssQ0FBQ3JCLEtBQUssQ0FBQ2lDLEtBQUssQ0FBRTtVQUNoQztRQUNKO01BQ0osQ0FBQzs7TUFDRCxJQUFHbU0sU0FBUyxFQUFDO1FBQ2Y2RCxVQUFVLENBQUNwUSxRQUFRLEdBQUc7VUFDbEJ5QixJQUFJLEVBQUUsT0FBTztVQUFDO1VBQ2R0QixRQUFRLEVBQUUsSUFBSSxDQUFDWCxLQUFLLENBQUNyQixLQUFLLENBQUNpQyxLQUFLLENBQUM7UUFDckMsQ0FBQzs7UUFDRCxJQUFJbU0sU0FBUyxFQUFFO1VBQ1g2RCxVQUFVLENBQUNwUSxRQUFRLENBQUNpVCxZQUFZLEdBQUc7WUFBQztZQUNoQ2hRLElBQUksRUFBRXNKLFNBQVMsQ0FBQzFOLElBQUk7WUFBQztZQUNyQnFVLElBQUksRUFBRTNHLFNBQVMsQ0FBQy9FLFFBQVE7WUFBQztZQUN6QmxILFVBQVUsRUFBRWlNLFNBQVMsQ0FBQ25FLFNBQVM7WUFBQztZQUNoQzNHLElBQUksRUFBRThLLFNBQVMsQ0FBQ3JKLElBQUk7WUFBQztZQUNyQmlRLFFBQVEsRUFBRTVHLFNBQVMsQ0FBQ3JGLFFBQVE7WUFBQztZQUM3QnlDLFVBQVUsRUFBRTRDLFNBQVMsQ0FBQzVDLFVBQVU7WUFBQztZQUNqQ0MsY0FBYyxFQUFFMkMsU0FBUyxDQUFDM0MsY0FBYztVQUM1QyxDQUFDO1FBQ0w7TUFDRDs7TUFFRztNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDSHdHLFVBQVUsR0FBR3RTLGFBQU0sQ0FBQzBTLE1BQU0sQ0FBQ2xSLElBQUksQ0FBQ2lRLFNBQVMsQ0FBQ2EsVUFBVSxDQUFDLENBQUMsQ0FBQztNQUN2RCxJQUFJMVIsV0FBVyxHQUFHWixhQUFNLENBQUMwUyxNQUFNLENBQUNsUixJQUFJLENBQUNpUSxTQUFTLENBQUMsSUFBSSxDQUFDL1AsS0FBSyxDQUFDZCxXQUFXLENBQUMsQ0FBQyxDQUFDO01BQ3hFLElBQUdpTixJQUFJLENBQUM2QixRQUFRLEVBQ2Y3QixJQUFJLENBQUM2QixRQUFRLEdBQUcxUCxhQUFNLENBQUMwUyxNQUFNLENBQUNsUixJQUFJLENBQUNpUSxTQUFTLENBQUM1RCxJQUFJLENBQUM2QixRQUFRLENBQUMsQ0FBQyxDQUFDO01BQzNELElBQUlpRCxRQUFRLEdBQUMsQ0FBQyxDQUFDO01BQ2Y5RSxJQUFJLENBQUNwSyxJQUFJLENBQUNKLE9BQU8sQ0FBQyxVQUFBc04sSUFBSSxFQUFFO1FBQ3ZCZ0MsUUFBUSxDQUFDaEMsSUFBSSxDQUFDbE4sSUFBSSxDQUFDLEdBQUdrTixJQUFJLENBQUNyRCxHQUFHO01BQy9CLENBQUMsQ0FBQztNQUNMLElBQUcsQ0FBQ08sSUFBSSxDQUFDRCxPQUFPLENBQUNrRyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUVqRyxJQUFJLENBQUNELE9BQU8sR0FBRyxHQUFHLEdBQUNDLElBQUksQ0FBQ0QsT0FBTyxHQUFDLEdBQUc7TUFDbkUsSUFBSXhMLFFBQVEsR0FBQztRQUNYMlIsT0FBTyxFQUFFbEcsSUFBSSxDQUFDQyxNQUFNO1FBQ3BCa0csaUJBQWlCLEVBQUUsRUFBRTtRQUNyQjNSLFFBQVEsRUFBRXdMLElBQUksQ0FBQ3ZMLEtBQUs7UUFDcEJDLFVBQVUsRUFBRSxFQUFFO1FBQ2RrTCxRQUFRLEVBQUVJLElBQUksQ0FBQ0QsT0FBTztRQUN0QnFHLFVBQVUsRUFBRSxFQUFFO1FBQ2RDLFdBQVcsRUFBRXJHLElBQUksQ0FBQ00sS0FBSztRQUN2QndFLFFBQVEsRUFBRUEsUUFBUTtRQUNsQndCLE1BQU0sRUFBRXRHLElBQUksQ0FBQ0UsU0FBUztRQUN0QnFHLFVBQVUsRUFBRXZHLElBQUksQ0FBQ0csTUFBTTtRQUN2QnFHLFVBQVUsRUFBRXhHLElBQUksQ0FBQ0ksTUFBTTtRQUN2QnFHLFVBQVUsRUFBRXpHLElBQUksQ0FBQ0ssU0FBUztRQUMxQnFHLFNBQVMsRUFBRTFHLElBQUksQ0FBQzZCLFFBQVE7UUFDeEI4RSxZQUFZLEVBQUUsRUFBRTtRQUNoQnJCLFFBQVEsRUFBRWIsVUFBVTtRQUNwQjFSLFdBQVcsRUFBRUEsV0FBVztRQUN4QjZULFdBQVcsRUFBRTtNQUNmLENBQUM7TUFDRCxhQUFZclMsUUFBUTtNQUNwQjtNQUNHLElBQUksQ0FBQ00sTUFBTSxDQUFDTSxRQUFRLENBQUMsZ0JBQWdCLEVBQUNaLFFBQVEsQ0FBQyxDQUFDYSxJQUFJLENBQUMsVUFBQUMsT0FBTyxFQUFFO1FBQzdELGFBQVlBLE9BQU87UUFDbkIsSUFBSUEsT0FBTyxDQUFDQyxRQUFRLElBQUksQ0FBQyxFQUFFO1VBQzFCLElBQUloRCxJQUFJLEdBQUcrQyxPQUFPLENBQUNFLE1BQU07VUFDNUIsSUFBSWpELElBQUksQ0FBQ2lULEdBQUcsSUFBSSxDQUFDLEVBQUU7WUFDZixJQUFJc0IsR0FBRyxHQUFHdlUsSUFBSSxDQUFDd1UsUUFBUSxHQUFHLE9BQU94VSxJQUFJLENBQUN3VSxRQUFRLElBQUksUUFBUSxHQUFHeFUsSUFBSSxDQUFDd1UsUUFBUSxHQUFHeFUsSUFBSSxDQUFDd1UsUUFBUSxDQUFDdEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUU7WUFDN0csSUFBSWxSLElBQUksQ0FBQ2lULEdBQUcsSUFBSSxHQUFHLEVBQUUvUixHQUFHLENBQUNRLFNBQVMsQ0FBQztjQUFDekIsS0FBSyxFQUFDLElBQUk7Y0FBQzBCLE9BQU8sRUFBQzRTLEdBQUc7Y0FBQzNTLFVBQVUsRUFBQyxLQUFLO2NBQUNDLFdBQVcsRUFBQztZQUFJLENBQUMsQ0FBQyxDQUFDLEtBQzFGWCxHQUFHLENBQUNRLFNBQVMsQ0FBQztjQUFDekIsS0FBSyxFQUFDLElBQUk7Y0FBQzBCLE9BQU8sRUFBQzRTLEdBQUcsR0FBQyxNQUFNLEdBQUN2VSxJQUFJLENBQUNpVCxHQUFHO2NBQUNyUixVQUFVLEVBQUMsS0FBSztjQUFDQyxXQUFXLEVBQUM7WUFBSSxDQUFDLENBQUM7WUFDakcsT0FBTyxLQUFLO1VBQ2IsQ0FBQyxNQUFJO1lBQ0osSUFBSTBTLEtBQUcsR0FBR3ZVLElBQUksQ0FBQzBOLElBQUksR0FBRyxPQUFPMU4sSUFBSSxDQUFDME4sSUFBSSxJQUFJLFFBQVEsR0FBRzFOLElBQUksQ0FBQzBOLElBQUksR0FBRzFOLElBQUksQ0FBQzBOLElBQUksQ0FBQ3dELElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFO1lBQzdGLElBQUlxRCxLQUFHLEVBQUVyVCxHQUFHLENBQUNRLFNBQVMsQ0FBQztjQUFDekIsS0FBSyxFQUFDLElBQUk7Y0FBQzBCLE9BQU8sRUFBQzRTLEtBQUc7Y0FBQzNTLFVBQVUsRUFBQyxLQUFLO2NBQUNDLFdBQVcsRUFBQztZQUFJLENBQUMsQ0FBQztZQUVsRixJQUFJNFMsVUFBVSxHQUFHelUsSUFBSSxDQUFDc0wsTUFBTTtZQUM1QixJQUFJbUosVUFBVSxFQUFFO2NBQ2YsYUFBWUEsVUFBVTtjQUN0QixLQUFLLElBQUkzSixDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUcySixVQUFVLENBQUM1SixNQUFNLEVBQUVDLENBQUMsRUFBRSxFQUFFO2dCQUMzQyxJQUFJUSxNQUFNLEdBQUdtSixVQUFVLENBQUMzSixDQUFDLENBQUM7Z0JBQzFCLElBQUlRLE1BQU0sQ0FBQ29KLFdBQVcsSUFBSSxjQUFjLEVBQUU7a0JBQ3pDLElBQUl6UixNQUFNLEdBQUdxSSxNQUFNLENBQUM5RSxLQUFLO2tCQUN6QixLQUFLLElBQUlzRSxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUc3SCxNQUFNLENBQUM0SCxNQUFNLEVBQUVDLENBQUMsRUFBRSxFQUFFO29CQUN2QyxJQUFJN0gsTUFBTSxDQUFDNkgsQ0FBQyxDQUFDLENBQUMrSixXQUFXLEVBQUU7c0JBQzFCLEtBQUssSUFBSU0sQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHN1MsS0FBSyxDQUFDZixLQUFLLENBQUNwQixhQUFhLENBQUMwSyxNQUFNLEVBQUVzSyxDQUFDLEVBQUUsRUFBRTt3QkFDMUQsSUFBSTdSLElBQUksR0FBR2hCLEtBQUssQ0FBQ2YsS0FBSyxDQUFDcEIsYUFBYSxDQUFDZ1YsQ0FBQyxDQUFDLENBQUMzSyxJQUFJO3dCQUM1QyxLQUFLLElBQUlXLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBRzdILElBQUksQ0FBQ3VILE1BQU0sRUFBRU0sQ0FBQyxFQUFFLEVBQUU7MEJBQ3JDLElBQUc3SCxJQUFJLENBQUM2SCxDQUFDLENBQUMsQ0FBQ3ZLLElBQUksSUFBRXFDLE1BQU0sQ0FBQzZILENBQUMsQ0FBQyxDQUFDeEgsSUFBSSxFQUFDOzRCQUMvQixJQUFHQSxJQUFJLENBQUM2SCxDQUFDLENBQUMsQ0FBQ2xHLElBQUksSUFBRSxJQUFJLElBQUkzQixJQUFJLENBQUM2SCxDQUFDLENBQUMsQ0FBQ2xHLElBQUksSUFBRSxRQUFRLElBQUkzQixJQUFJLENBQUM2SCxDQUFDLENBQUMsQ0FBQ2xHLElBQUksSUFBRSxPQUFPLEVBQUM7OEJBQ3hFLElBQUkyUCxZQUFZLEdBQUMsRUFBRTs4QkFDbkIsS0FBSSxJQUFJMUksQ0FBQyxJQUFJakosTUFBTSxDQUFDNkgsQ0FBQyxDQUFDLENBQUMrSixXQUFXLEVBQUM7Z0NBQ2xDLElBQUkxSCxHQUFHLEdBQUVsSyxNQUFNLENBQUM2SCxDQUFDLENBQUMsQ0FBQytKLFdBQVcsQ0FBQzNJLENBQUMsQ0FBQztnQ0FDakMwSSxZQUFZLENBQUNuUCxJQUFJLENBQUM7a0NBQUMsV0FBVyxFQUFDMEgsR0FBRztrQ0FBQyxNQUFNLEVBQUNBLEdBQUc7a0NBQUMsT0FBTyxFQUFDQSxHQUFHO2tDQUFDLE9BQU8sRUFBQ0E7Z0NBQUcsQ0FBQyxDQUFDOzhCQUN4RTs4QkFDQTdKLElBQUksQ0FBQzZILENBQUMsQ0FBQyxDQUFDakgsUUFBUSxHQUFHMFEsWUFBWTs4QkFDL0I7NEJBQ0Q7MEJBQ0Q7d0JBQ0Q7c0JBQ0Q7b0JBQ0Q7O29CQUNBLEtBQUssSUFBSU8sQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHN1MsS0FBSyxDQUFDZixLQUFLLENBQUNwQixhQUFhLENBQUMwSyxNQUFNLEVBQUVzSyxDQUFDLEVBQUUsRUFBRTtzQkFDMUQsSUFBSTdSLElBQUksR0FBR2hCLEtBQUssQ0FBQ2YsS0FBSyxDQUFDcEIsYUFBYSxDQUFDZ1YsQ0FBQyxDQUFDLENBQUMzSyxJQUFJO3NCQUM1QyxLQUFLLElBQUlXLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBRzdILElBQUksQ0FBQ3VILE1BQU0sRUFBRU0sQ0FBQyxFQUFFLEVBQUU7d0JBQ3JDLGFBQVk3SCxJQUFJLENBQUM2SCxDQUFDLENBQUMsQ0FBQ3ZLLElBQUksR0FBQyxJQUFJLEdBQUNxQyxNQUFNLENBQUM2SCxDQUFDLENBQUMsQ0FBQ3hILElBQUk7d0JBQzVDLElBQUdBLElBQUksQ0FBQzZILENBQUMsQ0FBQyxDQUFDdkssSUFBSSxJQUFFcUMsTUFBTSxDQUFDNkgsQ0FBQyxDQUFDLENBQUN4SCxJQUFJLEVBQUM7MEJBQy9CQSxJQUFJLENBQUM2SCxDQUFDLENBQUMsQ0FBQzVFLEtBQUssR0FBR3RELE1BQU0sQ0FBQzZILENBQUMsQ0FBQyxDQUFDdEUsS0FBSzt3QkFDaEM7c0JBQ0Q7b0JBQ0Q7b0JBQ0EsSUFBSXFFLE1BQU0sR0FBRyxDQUFDO29CQUNkLElBQUksQ0FBQ3ZJLEtBQUssQ0FBQ2YsS0FBSyxDQUFDYixZQUFZLENBQUNxVSxNQUFNLENBQUMsVUFBVTlKLENBQUMsRUFBRTtzQkFDakQsT0FBT2hJLE1BQU0sQ0FBQzZILENBQUMsQ0FBQyxDQUFDeEgsSUFBSSxJQUFJMkgsQ0FBQyxDQUFDM0gsSUFBSTtvQkFDaEMsQ0FBQyxDQUFDLENBQUN1SCxNQUFNLEVBQUU7c0JBQ1ZBLE1BQU0sR0FBRyxDQUFDO3NCQUNWdkksS0FBSyxDQUFDZixLQUFLLENBQUNiLFlBQVksQ0FBQytFLElBQUksQ0FBQ3hDLE1BQU0sQ0FBQzZILENBQUMsQ0FBQyxDQUFDO29CQUN6QztvQkFDQSxJQUFJRCxNQUFNLElBQUksQ0FBQyxFQUFFO3NCQUNoQixLQUFLLElBQUlNLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBRzdJLEtBQUssQ0FBQ2YsS0FBSyxDQUFDYixZQUFZLENBQUNtSyxNQUFNLEVBQUVNLENBQUMsRUFBRSxFQUFFO3dCQUN6RCxJQUFJN0ksS0FBSyxDQUFDZixLQUFLLENBQUNiLFlBQVksQ0FBQ3lLLENBQUMsQ0FBQyxDQUFDN0gsSUFBSSxJQUFJTCxNQUFNLENBQUM2SCxDQUFDLENBQUMsQ0FBQ3hILElBQUksRUFBRTswQkFDdkRoQixLQUFLLENBQUNmLEtBQUssQ0FBQ2IsWUFBWSxDQUFDeUssQ0FBQyxDQUFDLENBQUMzRSxLQUFLLEdBQUd2RCxNQUFNLENBQUM2SCxDQUFDLENBQUMsQ0FBQ3RFLEtBQUs7d0JBQ3BEO3NCQUNEO29CQUNEO2tCQUNEO2dCQUNELENBQUMsTUFBTSxJQUFJeEcsSUFBSSxDQUFDc0wsTUFBTSxDQUFDUixDQUFDLENBQUMsQ0FBQzRKLFdBQVcsSUFBSSxpQkFBaUIsRUFBRTtrQkFDM0RwUyxLQUFLLENBQUNmLEtBQUssQ0FBQ2QsV0FBVyxHQUFHVCxJQUFJLENBQUNzTCxNQUFNLENBQUNSLENBQUMsQ0FBQyxDQUFDdEUsS0FBSyxJQUFJLEVBQUU7Z0JBQ3JEO2NBQ0Q7WUFDRDtZQUVBLElBQUl4RyxJQUFJLENBQUNpRCxNQUFNLEVBQUU7Y0FDaEIsSUFBSUEsTUFBTSxHQUFHakQsSUFBSSxDQUFDaUQsTUFBTTtjQUN4QixLQUFLLElBQUk2SCxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUc3SCxNQUFNLENBQUM0SCxNQUFNLEVBQUVDLENBQUMsRUFBRSxFQUFFO2dCQUN2QyxLQUFLLElBQUlxSyxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUc3UyxLQUFLLENBQUNmLEtBQUssQ0FBQ3BCLGFBQWEsQ0FBQzBLLE1BQU0sRUFBRXNLLENBQUMsRUFBRSxFQUFFO2tCQUMxRCxJQUFJN1IsSUFBSSxHQUFHaEIsS0FBSyxDQUFDZixLQUFLLENBQUNwQixhQUFhLENBQUNnVixDQUFDLENBQUMsQ0FBQzNLLElBQUk7a0JBQzVDLEtBQUssSUFBSVcsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHN0gsSUFBSSxDQUFDdUgsTUFBTSxFQUFFTSxDQUFDLEVBQUUsRUFBRTtvQkFDckMsSUFBRzdILElBQUksQ0FBQzZILENBQUMsQ0FBQyxDQUFDdkssSUFBSSxJQUFFcUMsTUFBTSxDQUFDNkgsQ0FBQyxDQUFDLENBQUN4SCxJQUFJLEVBQUM7c0JBQy9CQSxJQUFJLENBQUM2SCxDQUFDLENBQUMsQ0FBQzVFLEtBQUssR0FBR3RELE1BQU0sQ0FBQzZILENBQUMsQ0FBQyxDQUFDdEUsS0FBSztvQkFDaEM7a0JBQ0Q7Z0JBQ0Q7Z0JBRUEsSUFBSXFFLE1BQU0sR0FBRyxDQUFDO2dCQUNkLElBQUksQ0FBQ3ZJLEtBQUssQ0FBQ2YsS0FBSyxDQUFDYixZQUFZLENBQUNxVSxNQUFNLENBQUMsVUFBVTlKLENBQUMsRUFBRTtrQkFDakQsT0FBT2hJLE1BQU0sQ0FBQzZILENBQUMsQ0FBQyxDQUFDeEgsSUFBSSxJQUFJMkgsQ0FBQyxDQUFDM0gsSUFBSTtnQkFDaEMsQ0FBQyxDQUFDLENBQUN1SCxNQUFNLEVBQUU7a0JBQ1ZBLE1BQU0sR0FBRyxDQUFDO2tCQUNWdkksS0FBSyxDQUFDZixLQUFLLENBQUNiLFlBQVksQ0FBQytFLElBQUksQ0FBQ3hDLE1BQU0sQ0FBQzZILENBQUMsQ0FBQyxDQUFDO2dCQUN6QztnQkFDQSxJQUFJRCxNQUFNLElBQUksQ0FBQyxFQUFFO2tCQUNoQixLQUFLLElBQUlNLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBRzdJLEtBQUssQ0FBQ2YsS0FBSyxDQUFDYixZQUFZLENBQUNtSyxNQUFNLEVBQUVNLENBQUMsRUFBRSxFQUFFO29CQUN6RCxJQUFJN0ksS0FBSyxDQUFDZixLQUFLLENBQUNiLFlBQVksQ0FBQ3lLLENBQUMsQ0FBQyxDQUFDN0gsSUFBSSxJQUFJTCxNQUFNLENBQUM2SCxDQUFDLENBQUMsQ0FBQ3hILElBQUksRUFBRTtzQkFDdkRoQixLQUFLLENBQUNmLEtBQUssQ0FBQ2IsWUFBWSxDQUFDeUssQ0FBQyxDQUFDLENBQUMzRSxLQUFLLEdBQUd2RCxNQUFNLENBQUM2SCxDQUFDLENBQUMsQ0FBQ3RFLEtBQUs7b0JBQ3BEO2tCQUNEO2dCQUNEO2NBQ0Q7WUFDRDtVQUNEO1FBQ0QsQ0FBQyxNQUFJO1VBQ0R0RixHQUFHLENBQUNRLFNBQVMsQ0FBQztZQUFDekIsS0FBSyxFQUFDLEtBQUs7WUFBQzBCLE9BQU8sRUFBQ29CLE9BQU8sQ0FBQ1ksT0FBTztZQUFDL0IsVUFBVSxFQUFDLEtBQUs7WUFBQ0MsV0FBVyxFQUFDO1VBQUksQ0FBQyxDQUFDO1FBQ3ZGO01BQ0QsQ0FBQyxDQUFDLENBQUMrQixLQUFLLENBQUMsVUFBQUMsRUFBRSxFQUFFO1FBQ1o7UUFDQTNDLEdBQUcsQ0FBQ1EsU0FBUyxDQUFDO1VBQUN6QixLQUFLLEVBQUMsT0FBTztVQUFDMEIsT0FBTyxFQUFDa0MsRUFBRSxDQUFDQyxNQUFNO1VBQUNsQyxVQUFVLEVBQUMsS0FBSztVQUFDQyxXQUFXLEVBQUM7UUFBSSxDQUFDLENBQUM7TUFDbkYsQ0FBQyxDQUFDO0lBQ0gsQ0FBQztJQUNKZ1EsdUJBQXVCLHFDQUFFO01BQUE7TUFDckIsSUFBSU0sVUFBVSxHQUFHO1FBQ2hCLFVBQVUsRUFBRSxNQUFNO1FBQUU7UUFDcEJDLE1BQU0sRUFBRSxJQUFJLENBQUM3USxLQUFLLENBQUNyQixLQUFLLENBQUNpQyxLQUFLO1FBQU07UUFDcEMsUUFBUSxFQUFFLEtBQUs7UUFBSTtRQUNuQmtRLFdBQVcsRUFBRSxJQUFJO1FBQ2pCQyxNQUFNLEVBQUU7VUFDSkYsTUFBTSxFQUFFLElBQUksQ0FBQzdRLEtBQUssQ0FBQ3JCLEtBQUssQ0FBQ2lDLEtBQUssQ0FBRTtRQUVwQztNQUNKLENBQUM7O01BQ0UsSUFBSXNMLE9BQU8sR0FBRyxJQUFJLENBQUNsTSxLQUFLLENBQUNqQixhQUFhLENBQUNpTixRQUFRO01BQ2xELElBQUlOLEdBQUcsR0FBQyxFQUFFO01BQ1YsSUFBSXZDLFFBQVEsR0FBRyxJQUFJLENBQUNuSixLQUFLLENBQUNwQixhQUFhO01BQ3ZDLEtBQUssSUFBSTJLLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBR0osUUFBUSxDQUFDRyxNQUFNLEVBQUVDLENBQUMsRUFBRSxFQUFFO1FBQ3pDLElBQUl4SCxJQUFJLEdBQUdvSCxRQUFRLENBQUNJLENBQUMsQ0FBQyxDQUFDTixJQUFJO1FBQzNCLEtBQUssSUFBSVcsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHN0gsSUFBSSxDQUFDdUgsTUFBTSxFQUFFTSxDQUFDLEVBQUUsRUFBRTtVQUNyQyxJQUFJK0IsRUFBRSxHQUFHNUosSUFBSSxDQUFDNkgsQ0FBQyxDQUFDO1VBQ2hCLElBQUcrQixFQUFFLENBQUMzRyxLQUFLLElBQUUsS0FBSyxJQUFJMkcsRUFBRSxDQUFDM0csS0FBSyxJQUFFLFNBQVMsRUFBRTJHLEVBQUUsQ0FBQzNHLEtBQUssR0FBQyxFQUFFO1VBQ3RELElBQUcyRyxFQUFFLENBQUNqSSxJQUFJLElBQUUsVUFBVSxFQUNyQixJQUFHaUksRUFBRSxDQUFDM0csS0FBSyxJQUFFLEdBQUcsRUFBRTJHLEVBQUUsQ0FBQzNHLEtBQUssR0FBQyxFQUFFO1VBQ3hCLElBQUcyRyxFQUFFLENBQUNqSSxJQUFJLElBQUUsTUFBTSxJQUFJaUksRUFBRSxDQUFDakksSUFBSSxJQUFFLE1BQU0sRUFDcENnSSxHQUFHLENBQUN4SCxJQUFJLENBQUM7WUFBRW5DLElBQUksRUFBRTRKLEVBQUUsQ0FBQ3RNLElBQUk7WUFBRXVNLEdBQUcsRUFBRUQsRUFBRSxDQUFDb0QsS0FBSyxHQUFFcEQsRUFBRSxDQUFDb0QsS0FBSyxHQUFFO1VBQUcsQ0FBQyxDQUFDLENBQUMsS0FDckQsSUFBR3BELEVBQUUsQ0FBQ2pJLElBQUksSUFBRSxLQUFLLEVBQzNCZ0ksR0FBRyxDQUFDeEgsSUFBSSxDQUFDO1lBQUVuQyxJQUFJLEVBQUU0SixFQUFFLENBQUN0TSxJQUFJO1lBQUV1TSxHQUFHLEVBQUVELEVBQUUsQ0FBQzNHLEtBQUssR0FBQyxHQUFHLEdBQUM7VUFBRyxDQUFDLENBQUMsQ0FBQyxLQUVsRDBHLEdBQUcsQ0FBQ3hILElBQUksQ0FBQztZQUFFbkMsSUFBSSxFQUFFNEosRUFBRSxDQUFDdE0sSUFBSTtZQUFFdU0sR0FBRyxFQUFFRCxFQUFFLENBQUMzRztVQUFNLENBQUMsQ0FBQztRQUM1QztNQUNEO01BQ0EsSUFBSSxJQUFJLENBQUNoRixLQUFLLENBQUNiLFlBQVksQ0FBQ21LLE1BQU0sR0FBRyxDQUFDLEVBQUU7UUFDakMsS0FBSyxJQUFJQyxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUcsSUFBSSxDQUFDdkosS0FBSyxDQUFDYixZQUFZLENBQUNtSyxNQUFNLEVBQUVDLENBQUMsRUFBRSxFQUFFO1VBQ3JELElBQUksQ0FBQ21DLEdBQUcsQ0FBQzhILE1BQU0sQ0FBQyxVQUFVOUosQ0FBQyxFQUFFO1lBQ3pCLE9BQU8sSUFBSSxDQUFDMUosS0FBSyxDQUFDYixZQUFZLENBQUNvSyxDQUFDLENBQUMsQ0FBQ3hILElBQUksSUFBSTJILENBQUMsQ0FBQ2pHLElBQUk7VUFDcEQsQ0FBQyxDQUFDLENBQUM2RixNQUFNLEVBQUU7WUFDUEEsTUFBTSxHQUFHLENBQUM7WUFDVm9DLEdBQUcsQ0FBQ3hILElBQUksQ0FBQztjQUFFLE1BQU0sRUFBRSxJQUFJLENBQUNsRSxLQUFLLENBQUNiLFlBQVksQ0FBQ29LLENBQUMsQ0FBQyxDQUFDeEgsSUFBSTtjQUFFLEtBQUssRUFBRSxJQUFJLENBQUMvQixLQUFLLENBQUNiLFlBQVksQ0FBQ29LLENBQUMsQ0FBQyxDQUFDdEU7WUFBTSxDQUFDLENBQUM7VUFDbEc7UUFDSjtNQUNKO01BQ0EsSUFBSWtILElBQUksR0FBRztRQUNQRCxPQUFPLEVBQUVBLE9BQU87UUFDaEJFLE1BQU0sRUFBRSxHQUFHO1FBQ1hDLFNBQVMsRUFBRSxFQUFFO1FBQ2JDLE1BQU0sRUFBRSxFQUFFO1FBQ1ZDLE1BQU0sRUFBRSxFQUFFO1FBQ1ZDLFNBQVMsRUFBRSxFQUFFO1FBQ2I1TCxLQUFLLEVBQUUsSUFBSSxDQUFDWixLQUFLLENBQUNyQixLQUFLLENBQUNpQyxLQUFLO1FBQzdCNkwsS0FBSyxFQUFFLEVBQUU7UUFDVDFLLElBQUksRUFBRTJKO01BQ1YsQ0FBQztNQUNIO01BQ0E7TUFDQTtNQUNBO01BQ0E7O01BRURrRixVQUFVLEdBQUd0UyxhQUFNLENBQUMwUyxNQUFNLENBQUNsUixJQUFJLENBQUNpUSxTQUFTLENBQUNhLFVBQVUsQ0FBQyxDQUFDLENBQUM7TUFDdkQsSUFBSTFSLFdBQVcsR0FBR1osYUFBTSxDQUFDMFMsTUFBTSxDQUFDbFIsSUFBSSxDQUFDaVEsU0FBUyxDQUFDLElBQUksQ0FBQy9QLEtBQUssQ0FBQ2QsV0FBVyxDQUFDLENBQUMsQ0FBQztNQUNyRSxJQUFJK1IsUUFBUSxHQUFDLENBQUMsQ0FBQztNQUNmOUUsSUFBSSxDQUFDcEssSUFBSSxDQUFDSixPQUFPLENBQUMsVUFBQXNOLElBQUksRUFBRTtRQUN2QmdDLFFBQVEsQ0FBQ2hDLElBQUksQ0FBQ2xOLElBQUksQ0FBQyxHQUFHa04sSUFBSSxDQUFDckQsR0FBRztNQUMvQixDQUFDLENBQUM7TUFDTCxJQUFHLENBQUNNLE9BQU8sQ0FBQ2tHLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRWxHLE9BQU8sR0FBRSxHQUFHLEdBQUVBLE9BQU8sR0FBRSxHQUFHO01BQ3JELElBQUl4TCxRQUFRLEdBQUM7UUFDWDJSLE9BQU8sRUFBRWxHLElBQUksQ0FBQ0MsTUFBTTtRQUNwQmtHLGlCQUFpQixFQUFFLEVBQUU7UUFDckIzUixRQUFRLEVBQUV3TCxJQUFJLENBQUN2TCxLQUFLO1FBQ3BCQyxVQUFVLEVBQUUsRUFBRTtRQUNka0wsUUFBUSxFQUFFRyxPQUFPO1FBQ2pCcUcsVUFBVSxFQUFFLEVBQUU7UUFDZEMsV0FBVyxFQUFFckcsSUFBSSxDQUFDTSxLQUFLO1FBQ3ZCd0UsUUFBUSxFQUFFQSxRQUFRO1FBQ2xCd0IsTUFBTSxFQUFFdEcsSUFBSSxDQUFDRSxTQUFTO1FBQ3RCcUcsVUFBVSxFQUFFdkcsSUFBSSxDQUFDRyxNQUFNO1FBQ3ZCcUcsVUFBVSxFQUFFeEcsSUFBSSxDQUFDSSxNQUFNO1FBQ3ZCcUcsVUFBVSxFQUFFekcsSUFBSSxDQUFDSyxTQUFTO1FBQzFCcUcsU0FBUyxFQUFFLEVBQUU7UUFDYkMsWUFBWSxFQUFFLEVBQUU7UUFDaEJyQixRQUFRLEVBQUViLFVBQVU7UUFDcEIxUixXQUFXLEVBQUVBLFdBQVc7UUFDeEI2VCxXQUFXLEVBQUU7TUFDZixDQUFDO01BQ0QsYUFBWXJTLFFBQVE7TUFDcEI7TUFDRyxJQUFJLENBQUNNLE1BQU0sQ0FBQ00sUUFBUSxDQUFDLGdCQUFnQixFQUFDWixRQUFRLENBQUMsQ0FBQ2EsSUFBSSxDQUFDLFVBQUFDLE9BQU8sRUFBRTtRQUM3RCxhQUFZQSxPQUFPO1FBQ25CLElBQUlBLE9BQU8sQ0FBQ0MsUUFBUSxJQUFJLENBQUMsRUFBRTtVQUMxQixJQUFJaEQsSUFBSSxHQUFHK0MsT0FBTyxDQUFDRSxNQUFNO1VBQzVCLElBQUlqRCxJQUFJLENBQUNpVCxHQUFHLElBQUksQ0FBQyxFQUFFO1lBQ2YsSUFBSXNCLEdBQUcsR0FBR3ZVLElBQUksQ0FBQ3dVLFFBQVEsR0FBRyxPQUFPeFUsSUFBSSxDQUFDd1UsUUFBUSxJQUFJLFFBQVEsR0FBR3hVLElBQUksQ0FBQ3dVLFFBQVEsR0FBR3hVLElBQUksQ0FBQ3dVLFFBQVEsQ0FBQ3RELElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFO1lBQzdHLElBQUlsUixJQUFJLENBQUNpVCxHQUFHLElBQUksR0FBRyxFQUFFL1IsR0FBRyxDQUFDUSxTQUFTLENBQUM7Y0FBQ3pCLEtBQUssRUFBQyxJQUFJO2NBQUMwQixPQUFPLEVBQUM0UyxHQUFHO2NBQUMzUyxVQUFVLEVBQUMsS0FBSztjQUFDQyxXQUFXLEVBQUM7WUFBSSxDQUFDLENBQUMsQ0FBQyxLQUMxRlgsR0FBRyxDQUFDUSxTQUFTLENBQUM7Y0FBQ3pCLEtBQUssRUFBQyxJQUFJO2NBQUMwQixPQUFPLEVBQUM0UyxHQUFHLEdBQUMsTUFBTSxHQUFDdlUsSUFBSSxDQUFDaVQsR0FBRztjQUFDclIsVUFBVSxFQUFDLEtBQUs7Y0FBQ0MsV0FBVyxFQUFDO1lBQUksQ0FBQyxDQUFDO1lBQ2pHLE9BQU8sS0FBSztVQUNiLENBQUMsTUFBSTtZQUNKLElBQUkwUyxLQUFHLEdBQUd2VSxJQUFJLENBQUMwTixJQUFJLEdBQUcsT0FBTzFOLElBQUksQ0FBQzBOLElBQUksSUFBSSxRQUFRLEdBQUcxTixJQUFJLENBQUMwTixJQUFJLEdBQUcxTixJQUFJLENBQUMwTixJQUFJLENBQUN3RCxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRTtZQUM3RixJQUFJcUQsS0FBRyxFQUFFclQsR0FBRyxDQUFDUSxTQUFTLENBQUM7Y0FBQ3pCLEtBQUssRUFBQyxJQUFJO2NBQUMwQixPQUFPLEVBQUM0UyxLQUFHO2NBQUMzUyxVQUFVLEVBQUMsS0FBSztjQUFDQyxXQUFXLEVBQUM7WUFBSSxDQUFDLENBQUM7WUFFbEYsSUFBSW9CLE1BQU0sR0FBR2pELElBQUksQ0FBQ2lELE1BQU07WUFDeEIsS0FBSyxJQUFJNkgsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHN0gsTUFBTSxDQUFDNEgsTUFBTSxFQUFFQyxDQUFDLEVBQUUsRUFBRTtjQUN2QztjQUNBLElBQUlELE1BQU0sR0FBRyxDQUFDO2NBQ2QsSUFBSSxDQUFDLE1BQUksQ0FBQ3RKLEtBQUssQ0FBQ2IsWUFBWSxDQUFDcVUsTUFBTSxDQUFDLFVBQVU5SixDQUFDLEVBQUU7Z0JBQ2hELE9BQU9oSSxNQUFNLENBQUM2SCxDQUFDLENBQUMsQ0FBQ3hILElBQUksSUFBSTJILENBQUMsQ0FBQzNILElBQUk7Y0FDaEMsQ0FBQyxDQUFDLENBQUN1SCxNQUFNLEVBQUU7Z0JBQ1ZBLE1BQU0sR0FBRyxDQUFDO2dCQUNWLE1BQUksQ0FBQ3RKLEtBQUssQ0FBQ2IsWUFBWSxDQUFDK0UsSUFBSSxDQUFDeEMsTUFBTSxDQUFDNkgsQ0FBQyxDQUFDLENBQUM7Y0FDeEM7Y0FDQSxJQUFJRCxNQUFNLElBQUksQ0FBQyxFQUFFO2dCQUNoQixLQUFLLElBQUlNLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBRyxNQUFJLENBQUM1SixLQUFLLENBQUNiLFlBQVksQ0FBQ21LLE1BQU0sRUFBRU0sQ0FBQyxFQUFFLEVBQUU7a0JBQ3hELElBQUksTUFBSSxDQUFDNUosS0FBSyxDQUFDYixZQUFZLENBQUN5SyxDQUFDLENBQUMsQ0FBQzdILElBQUksSUFBSUwsTUFBTSxDQUFDNkgsQ0FBQyxDQUFDLENBQUN4SCxJQUFJLEVBQUU7b0JBQ3RELE1BQUksQ0FBQy9CLEtBQUssQ0FBQ2IsWUFBWSxDQUFDeUssQ0FBQyxDQUFDLENBQUMzRSxLQUFLLEdBQUd2RCxNQUFNLENBQUM2SCxDQUFDLENBQUMsQ0FBQ3RFLEtBQUs7a0JBQ25EO2dCQUNEO2NBQ0Q7WUFDRDtZQUVBLE1BQUksQ0FBQ3NMLEdBQUcsRUFBRTtVQUNYO1FBQ0UsQ0FBQyxNQUFJO1VBQ0o1USxHQUFHLENBQUNRLFNBQVMsQ0FBQztZQUFDekIsS0FBSyxFQUFDLEtBQUs7WUFBQzBCLE9BQU8sRUFBQ29CLE9BQU8sQ0FBQ1ksT0FBTztZQUFDL0IsVUFBVSxFQUFDLEtBQUs7WUFBQ0MsV0FBVyxFQUFDO1VBQUksQ0FBQyxDQUFDO1FBQ3ZGO01BQ0QsQ0FBQyxDQUFDLENBQUMrQixLQUFLLENBQUMsVUFBQUMsRUFBRSxFQUFFO1FBQ1o7UUFDQTNDLEdBQUcsQ0FBQ1EsU0FBUyxDQUFDO1VBQUN6QixLQUFLLEVBQUMsT0FBTztVQUFDMEIsT0FBTyxFQUFDa0MsRUFBRSxDQUFDQyxNQUFNO1VBQUNsQyxVQUFVLEVBQUMsS0FBSztVQUFDQyxXQUFXLEVBQUM7UUFBSSxDQUFDLENBQUM7TUFDbkYsQ0FBQyxDQUFDO0lBQ0gsQ0FBQztJQUNEME0sNEJBQTRCLHdDQUFDZCxPQUFPLEVBQUNhLFNBQVMsRUFBQ3pDLGVBQWUsRUFBQ3pJLEtBQUssRUFBQytLLE1BQU0sRUFBQztNQUFBO01BQzlFLElBQUlnRSxVQUFVLEdBQUc7UUFDYixVQUFVLEVBQUUsTUFBTTtRQUFFO1FBQ3BCQyxNQUFNLEVBQUUsSUFBSSxDQUFDN1EsS0FBSyxDQUFDckIsS0FBSyxDQUFDaUMsS0FBSztRQUFNO1FBQ3BDLFFBQVEsRUFBRSxLQUFLO1FBQUk7UUFDbkJrUSxXQUFXLEVBQUUsSUFBSTtRQUNqQkMsTUFBTSxFQUFFO1VBQ0pGLE1BQU0sRUFBRSxJQUFJLENBQUM3USxLQUFLLENBQUNyQixLQUFLLENBQUNpQyxLQUFLLENBQUU7VUFDaEM7UUFDSjtNQUNKLENBQUM7O01BQ0QsSUFBSThLLEdBQUcsR0FBQyxFQUFFO01BQ1YsSUFBSXZDLFFBQVEsR0FBRyxJQUFJLENBQUNuSixLQUFLLENBQUNwQixhQUFhO01BQ3ZDLEtBQUssSUFBSTJLLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBR0osUUFBUSxDQUFDRyxNQUFNLEVBQUVDLENBQUMsRUFBRSxFQUFFO1FBQ3pDLElBQUl4SCxJQUFJLEdBQUdvSCxRQUFRLENBQUNJLENBQUMsQ0FBQyxDQUFDTixJQUFJO1FBQzNCLEtBQUssSUFBSVcsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHN0gsSUFBSSxDQUFDdUgsTUFBTSxFQUFFTSxDQUFDLEVBQUUsRUFBRTtVQUNyQyxJQUFJK0IsRUFBRSxHQUFHNUosSUFBSSxDQUFDNkgsQ0FBQyxDQUFDO1VBQ2hCLElBQUcrQixFQUFFLENBQUNqSSxJQUFJLElBQUUsVUFBVSxFQUNyQixJQUFHaUksRUFBRSxDQUFDM0csS0FBSyxJQUFFLEdBQUcsRUFBRTJHLEVBQUUsQ0FBQzNHLEtBQUssR0FBQyxFQUFFO1VBQ3hCLElBQUcyRyxFQUFFLENBQUNqSSxJQUFJLElBQUUsTUFBTSxJQUFJaUksRUFBRSxDQUFDakksSUFBSSxJQUFFLE1BQU0sRUFDcENnSSxHQUFHLENBQUN4SCxJQUFJLENBQUM7WUFBRW5DLElBQUksRUFBRTRKLEVBQUUsQ0FBQ3RNLElBQUk7WUFBRXVNLEdBQUcsRUFBRUQsRUFBRSxDQUFDb0QsS0FBSyxHQUFFcEQsRUFBRSxDQUFDb0QsS0FBSyxHQUFFO1VBQUcsQ0FBQyxDQUFDLENBQUMsS0FDckQsSUFBR3BELEVBQUUsQ0FBQ2pJLElBQUksSUFBRSxLQUFLLEVBQzNCZ0ksR0FBRyxDQUFDeEgsSUFBSSxDQUFDO1lBQUVuQyxJQUFJLEVBQUU0SixFQUFFLENBQUN0TSxJQUFJO1lBQUV1TSxHQUFHLEVBQUVELEVBQUUsQ0FBQzNHLEtBQUssR0FBQyxHQUFHLEdBQUM7VUFBRyxDQUFDLENBQUMsQ0FBQyxLQUVsRDBHLEdBQUcsQ0FBQ3hILElBQUksQ0FBQztZQUFFbkMsSUFBSSxFQUFFNEosRUFBRSxDQUFDdE0sSUFBSTtZQUFFdU0sR0FBRyxFQUFFRCxFQUFFLENBQUMzRztVQUFNLENBQUMsQ0FBQztRQUM1QztNQUNEO01BQ0EsSUFBSSxJQUFJLENBQUNoRixLQUFLLENBQUNiLFlBQVksQ0FBQ21LLE1BQU0sR0FBRyxDQUFDLEVBQUU7UUFDcEMsS0FBSyxJQUFJQyxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUcsSUFBSSxDQUFDdkosS0FBSyxDQUFDYixZQUFZLENBQUNtSyxNQUFNLEVBQUVDLENBQUMsRUFBRSxFQUFFO1VBQ3JELElBQUksQ0FBQ21DLEdBQUcsQ0FBQzhILE1BQU0sQ0FBQyxVQUFVOUosQ0FBQyxFQUFFO1lBQ3pCLE9BQU8sSUFBSSxDQUFDMUosS0FBSyxDQUFDYixZQUFZLENBQUNvSyxDQUFDLENBQUMsQ0FBQ3hILElBQUksSUFBSTJILENBQUMsQ0FBQ2pHLElBQUk7VUFDcEQsQ0FBQyxDQUFDLENBQUM2RixNQUFNLEVBQUU7WUFDUEEsTUFBTSxHQUFHLENBQUM7WUFDVm9DLEdBQUcsQ0FBQ3hILElBQUksQ0FBQztjQUFFLE1BQU0sRUFBRSxJQUFJLENBQUNsRSxLQUFLLENBQUNiLFlBQVksQ0FBQ29LLENBQUMsQ0FBQyxDQUFDeEgsSUFBSTtjQUFFLEtBQUssRUFBRSxJQUFJLENBQUMvQixLQUFLLENBQUNiLFlBQVksQ0FBQ29LLENBQUMsQ0FBQyxDQUFDdEU7WUFBTSxDQUFDLENBQUM7VUFDbEc7UUFDSjtNQUNKO01BQ0EsSUFBSTRPLE9BQU8sR0FBR2pELFVBQVU7TUFDeEJpRCxPQUFPLENBQUNyVCxRQUFRLEdBQUc7UUFDZnlCLElBQUksRUFBRSxPQUFPO1FBQUM7UUFDZHRCLFFBQVEsRUFBRSxJQUFJLENBQUNYLEtBQUssQ0FBQ3JCLEtBQUssQ0FBQ2lDLEtBQUssQ0FBQztNQUNyQyxDQUFDOztNQUNELElBQUltTSxTQUFTLEVBQUU7UUFDWDhHLE9BQU8sQ0FBQ3JULFFBQVEsQ0FBQ2lULFlBQVksR0FBRztVQUFDO1VBQzdCaFEsSUFBSSxFQUFFc0osU0FBUyxDQUFDMU4sSUFBSTtVQUFDO1VBQ3JCcVUsSUFBSSxFQUFFM0csU0FBUyxDQUFDL0UsUUFBUTtVQUFDO1VBQ3pCbEgsVUFBVSxFQUFFaU0sU0FBUyxDQUFDbkUsU0FBUztVQUFDO1VBQ2hDM0csSUFBSSxFQUFFOEssU0FBUyxDQUFDckosSUFBSTtVQUFDO1VBQ3JCaVEsUUFBUSxFQUFFNUcsU0FBUyxDQUFDckYsUUFBUTtVQUFDO1VBQzdCeUMsVUFBVSxFQUFFNEMsU0FBUyxDQUFDNUMsVUFBVTtVQUFDO1VBQ2pDQyxjQUFjLEVBQUUyQyxTQUFTLENBQUMzQyxjQUFjO1FBQzVDLENBQUM7TUFDTDtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQXlKLE9BQU8sR0FBR3ZWLGFBQU0sQ0FBQzBTLE1BQU0sQ0FBQ2xSLElBQUksQ0FBQ2lRLFNBQVMsQ0FBQzhELE9BQU8sQ0FBQyxDQUFDLENBQUM7TUFDakQsSUFBSTNVLFdBQVcsR0FBR1osYUFBTSxDQUFDMFMsTUFBTSxDQUFDbFIsSUFBSSxDQUFDaVEsU0FBUyxDQUFDLElBQUksQ0FBQy9QLEtBQUssQ0FBQ2QsV0FBVyxDQUFDLENBQUMsQ0FBQztNQUN4RSxJQUFJK1IsUUFBUSxHQUFDLENBQUMsQ0FBQztNQUNmdkYsR0FBRyxDQUFDL0osT0FBTyxDQUFDLFVBQUFzTixJQUFJLEVBQUU7UUFDakJnQyxRQUFRLENBQUNoQyxJQUFJLENBQUNsTixJQUFJLENBQUMsR0FBR2tOLElBQUksQ0FBQ3JELEdBQUc7TUFDL0IsQ0FBQyxDQUFDO01BQ0YsSUFBRyxDQUFDTSxPQUFPLENBQUNrRyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUVsRyxPQUFPLEdBQUUsR0FBRyxHQUFFQSxPQUFPLEdBQUUsR0FBRztNQUNyRCxJQUFJeEwsUUFBUSxHQUFDO1FBQ1gyUixPQUFPLEVBQUUsR0FBRztRQUNaQyxpQkFBaUIsRUFBRSxFQUFFO1FBQ3JCM1IsUUFBUSxFQUFFLElBQUksQ0FBQ1gsS0FBSyxDQUFDckIsS0FBSyxDQUFDaUMsS0FBSztRQUNoQ0MsVUFBVSxFQUFFLEVBQUU7UUFDZGtMLFFBQVEsRUFBRUcsT0FBTztRQUNqQnFHLFVBQVUsRUFBRSxFQUFFO1FBQ2RDLFdBQVcsRUFBRSxFQUFFO1FBQ2Z2QixRQUFRLEVBQUVBLFFBQVE7UUFDbEJ3QixNQUFNLEVBQUUsRUFBRTtRQUNWQyxVQUFVLEVBQUUsRUFBRTtRQUNkQyxVQUFVLEVBQUUsRUFBRTtRQUNkQyxVQUFVLEVBQUUsRUFBRTtRQUNkQyxTQUFTLEVBQUUsRUFBRTtRQUNiQyxZQUFZLEVBQUUsRUFBRTtRQUNoQnJCLFFBQVEsRUFBRW9DLE9BQU87UUFDakIzVSxXQUFXLEVBQUVBLFdBQVc7UUFDeEI2VCxXQUFXLEVBQUU7TUFDZixDQUFDO01BQ0QsYUFBWXJTLFFBQVE7TUFDcEI7TUFDQSxJQUFJLENBQUNNLE1BQU0sQ0FBQ00sUUFBUSxDQUFDLGdCQUFnQixFQUFDWixRQUFRLENBQUMsQ0FBQ2EsSUFBSSxDQUFDLFVBQUFDLE9BQU8sRUFBRTtRQUM3RCxhQUFZQSxPQUFPO1FBQ25CLElBQUlBLE9BQU8sQ0FBQ0MsUUFBUSxJQUFJLENBQUMsRUFBRTtVQUMxQixJQUFJaEQsSUFBSSxHQUFHK0MsT0FBTyxDQUFDRSxNQUFNO1VBQ3pCLElBQUlqRCxJQUFJLENBQUNpVCxHQUFHLElBQUksQ0FBQyxFQUFFO1lBQ2YsSUFBSXNCLEdBQUcsR0FBR3ZVLElBQUksQ0FBQ3dVLFFBQVEsR0FBRyxPQUFPeFUsSUFBSSxDQUFDd1UsUUFBUSxJQUFJLFFBQVEsR0FBR3hVLElBQUksQ0FBQ3dVLFFBQVEsR0FBR3hVLElBQUksQ0FBQ3dVLFFBQVEsQ0FBQ3RELElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFO1lBQzdHLElBQUlsUixJQUFJLENBQUNpVCxHQUFHLElBQUksR0FBRyxFQUFFL1IsR0FBRyxDQUFDUSxTQUFTLENBQUM7Y0FBQ3pCLEtBQUssRUFBQyxJQUFJO2NBQUMwQixPQUFPLEVBQUM0UyxHQUFHO2NBQUMzUyxVQUFVLEVBQUMsS0FBSztjQUFDQyxXQUFXLEVBQUM7WUFBSSxDQUFDLENBQUMsQ0FBQyxLQUMxRlgsR0FBRyxDQUFDUSxTQUFTLENBQUM7Y0FBQ3pCLEtBQUssRUFBQyxJQUFJO2NBQUMwQixPQUFPLEVBQUM0UyxHQUFHLEdBQUMsTUFBTSxHQUFDdlUsSUFBSSxDQUFDaVQsR0FBRztjQUFDclIsVUFBVSxFQUFDLEtBQUs7Y0FBQ0MsV0FBVyxFQUFDO1lBQUksQ0FBQyxDQUFDO1lBQ2pHLE9BQU8sS0FBSztVQUNiLENBQUMsTUFBSTtZQUNKLElBQUkwUyxLQUFHLEdBQUd2VSxJQUFJLENBQUMwTixJQUFJLEdBQUcsT0FBTzFOLElBQUksQ0FBQzBOLElBQUksSUFBSSxRQUFRLEdBQUcxTixJQUFJLENBQUMwTixJQUFJLEdBQUcxTixJQUFJLENBQUMwTixJQUFJLENBQUN3RCxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRTtZQUM3RixJQUFJcUQsS0FBRyxFQUFFclQsR0FBRyxDQUFDUSxTQUFTLENBQUM7Y0FBQ3pCLEtBQUssRUFBQyxJQUFJO2NBQUMwQixPQUFPLEVBQUM0UyxLQUFHO2NBQUMzUyxVQUFVLEVBQUMsS0FBSztjQUFDQyxXQUFXLEVBQUM7WUFBSSxDQUFDLENBQUM7WUFFbEYsSUFBSTdCLElBQUksSUFBSSxFQUFFLEVBQUU7Y0FDaEIsSUFBSXFWLE9BQU8sR0FBR3JWLElBQUksQ0FBQ3NMLE1BQU07Y0FDekIsYUFBWStKLE9BQU87Y0FDbkIsSUFBSUEsT0FBTyxFQUFFO2dCQUNaLEtBQUssSUFBSXZLLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBR3VLLE9BQU8sQ0FBQ3hLLE1BQU0sRUFBRUMsQ0FBQyxFQUFFLEVBQUU7a0JBQ3hDLElBQUlRLE1BQU0sR0FBRytKLE9BQU8sQ0FBQ3ZLLENBQUMsQ0FBQztrQkFDdkIsSUFBSXFDLEdBQUcsR0FBRzdCLE1BQU0sQ0FBQzlFLEtBQUs7a0JBQ3RCLElBQUkyTCxVQUFVLEdBQUc5USxJQUFJLENBQUNpUSxTQUFTLENBQUNhLFVBQVUsQ0FBQztrQkFFM0MsSUFBSTdHLE1BQU0sQ0FBQ29KLFdBQVcsSUFBSSxZQUFZLEVBQUU7b0JBQ3JDLElBQUl4SSxDQUFDLEdBQUdvSixNQUFNLENBQUM7c0JBQ2RyVixLQUFLLEVBQUUsNkNBQTZDLEdBQUcsSUFBSTtzQkFDM0QwQixPQUFPLEVBQUUySixNQUFNLENBQUNvSixXQUFXLEdBQUc7b0JBQy9CLENBQUMsQ0FBQztvQkFDRnhJLENBQUMsQ0FBQ3dDLElBQUksRUFBRTtrQkFDWCxDQUFDLE1BQ0ksSUFBSXBELE1BQU0sQ0FBQ29KLFdBQVcsSUFBSSxxQkFBcUIsRUFBRTtvQkFDckQsSUFBSWEsS0FBSyxHQUFHcEksR0FBRyxDQUFDb0ksS0FBSztvQkFDckI7b0JBQ0EsSUFBSWpULEtBQUssR0FBRyxNQUFJO29CQUNoQixJQUFJcEMsS0FBSyxHQUFDO3NCQUNUa0QsS0FBSyxFQUFFQSxLQUFLO3NCQUNaK0ssTUFBTSxFQUFDQSxNQUFNO3NCQUNidEMsZUFBZSxFQUFDQSxlQUFlO3NCQUMvQm9CLEdBQUcsRUFBQ0EsR0FBRztzQkFDUHFCLFNBQVMsRUFBQ0E7b0JBQ1gsQ0FBQztvQkFDRHBOLEdBQUcsQ0FBQ2tRLFVBQVUsQ0FBQztzQkFDZEMsR0FBRyxFQUFDLG9DQUFvQyxHQUFDaFEsSUFBSSxDQUFDaVEsU0FBUyxDQUFDcFIsS0FBSyxDQUFDO3NCQUM5RHFSLE1BQU0sRUFBQzt3QkFDTkMsTUFBTSxrQkFBQ3hSLElBQUksRUFBQ0UsS0FBSyxFQUFDOzBCQUNqQjswQkFDQSxhQUFZRixJQUFJOzBCQUNoQixJQUFJcVAsZ0JBQWdCLEdBQUduUCxLQUFLLENBQUMyTCxlQUFlLENBQUN5RCxJQUFJLEVBQUU7MEJBQ25ELElBQUk1QixJQUFJLEdBQUc7NEJBQ1ZELE9BQU8sRUFBRTRCLGdCQUFnQjs0QkFDekIxQixNQUFNLEVBQUUsR0FBRzs0QkFDWEMsU0FBUyxFQUFFLEVBQUU7NEJBQ2JDLE1BQU0sRUFBRSxFQUFFOzRCQUNWQyxNQUFNLEVBQUUsRUFBRTs0QkFDVkMsU0FBUyxFQUFFLEVBQUU7NEJBQ2I1TCxLQUFLLEVBQUVHLEtBQUssQ0FBQ2YsS0FBSyxDQUFDckIsS0FBSyxDQUFDaUMsS0FBSzs0QkFDOUI2TCxLQUFLLEVBQUUsRUFBRTs0QkFDVDFLLElBQUksRUFBRXBELEtBQUssQ0FBQytNLEdBQUc7NEJBQ2Z5RyxjQUFjLEVBQUUxVCxJQUFJOzRCQUNwQnVQLFFBQVEsRUFBQzswQkFDVixDQUFDOzBCQUNEak4sS0FBSyxDQUFDa04scUJBQXFCLENBQUM5QixJQUFJLEVBQUV4TixLQUFLLENBQUNvTyxTQUFTLENBQUM7d0JBQ25EO3NCQUNEO29CQUNELENBQUMsQ0FBQztrQkFDSCxDQUFDLE1BQ0ksSUFBSWhELE1BQU0sQ0FBQ29KLFdBQVcsSUFBSSxxQkFBcUIsRUFBRTtvQkFDckQsSUFBSXhJLENBQUMsR0FBR29KLE1BQU0sQ0FBQztzQkFDZHJWLEtBQUssRUFBRSw2Q0FBNkMsR0FBRyxJQUFJO3NCQUMzRDBCLE9BQU8sRUFBRTJKLE1BQU0sQ0FBQ29KLFdBQVcsR0FBRztvQkFDL0IsQ0FBQyxDQUFDO29CQUNGeEksQ0FBQyxDQUFDd0MsSUFBSSxFQUFFO2tCQUNULENBQUMsTUFDSSxJQUFJcEQsTUFBTSxDQUFDb0osV0FBVyxJQUFJLGlCQUFpQixFQUFFO29CQUNqRCxJQUFJcFMsS0FBSyxHQUFHLE1BQUk7b0JBQ2hCLElBQUc2SyxHQUFHLENBQUNxSSxhQUFhLElBQUksWUFBWSxFQUFDO3NCQUNsQ2xULEtBQUssQ0FBQ2YsS0FBSyxDQUFDVCxVQUFVLEdBQUVxTSxHQUFHLENBQUNzSSxNQUFNO3NCQUNsQyxJQUFHdEksR0FBRyxDQUFDc0ksTUFBTSxDQUFDQyxZQUFZLElBQUksVUFBVTt3QkFBRTt3QkFDM0NwVCxLQUFLLENBQUNmLEtBQUssQ0FBQ1YsU0FBUyxHQUFHLE9BQU8sQ0FBQyxLQUVoQ3lCLEtBQUssQ0FBQ2YsS0FBSyxDQUFDVixTQUFTLEdBQUcsUUFBUTtzQkFDL0I7c0JBQ0F5QixLQUFLLENBQUM4TCxLQUFLLENBQUNDLEtBQUssQ0FBQ3RELElBQUksQ0FBQ3pJLEtBQUssQ0FBQ2YsS0FBSyxDQUFDVixTQUFTLENBQUM7c0JBQzdDLElBQUlFLFVBQVUsR0FBQzt3QkFDakJxQyxLQUFLLEVBQUVBLEtBQUs7d0JBQ1orSyxNQUFNLEVBQUNBLE1BQU07d0JBQ2J0QyxlQUFlLEVBQUNBLGVBQWU7d0JBQy9Cb0IsR0FBRyxFQUFDQSxHQUFHO3dCQUNQcUIsU0FBUyxFQUFDQTtzQkFDUixDQUFDO3NCQUNEaE0sS0FBSyxDQUFDZixLQUFLLENBQUNSLFVBQVUsR0FBRUEsVUFBVTtvQkFDckM7a0JBQ0QsQ0FBQyxNQUNJLElBQUl1SyxNQUFNLENBQUNvSixXQUFXLElBQUksd0JBQXdCLEVBQUU7b0JBQ3hEO29CQUNBO29CQUNBLElBQUlpQixNQUFNLEdBQUcsSUFBSTtvQkFDakIsSUFBSXJLLE1BQU0sQ0FBQzlFLEtBQUssQ0FBQ29QLFlBQVksSUFBSSxNQUFNLEVBQ3RDRCxNQUFNLEdBQUcsR0FBRyxDQUFDLEtBQ1QsSUFBSXJLLE1BQU0sQ0FBQzlFLEtBQUssQ0FBQ29QLFlBQVksSUFBSSxRQUFRLEVBQzdDRCxNQUFNLEdBQUcsR0FBRyxDQUFDLEtBQ1QsSUFBSXJLLE1BQU0sQ0FBQzlFLEtBQUssQ0FBQ29QLFlBQVksSUFBSSxNQUFNLEVBQzNDRCxNQUFNLEdBQUcsR0FBRyxDQUFDLEtBQ1QsSUFBSXJLLE1BQU0sQ0FBQzlFLEtBQUssQ0FBQ29QLFlBQVksSUFBSSxNQUFNLElBQUl0SyxNQUFNLENBQUM5RSxLQUFLLENBQUNvUCxZQUFZLElBQUksTUFBTSxFQUNsRkQsTUFBTSxHQUFHLEdBQUcsQ0FBQyxLQUNULElBQUlySyxNQUFNLENBQUM5RSxLQUFLLENBQUNvUCxZQUFZLElBQUksTUFBTSxFQUMzQ0QsTUFBTSxHQUFHLEdBQUcsQ0FBQyxLQUNULElBQUlySyxNQUFNLENBQUM5RSxLQUFLLENBQUNvUCxZQUFZLElBQUksUUFBUSxFQUM3Q0QsTUFBTSxHQUFHLEdBQUc7b0JBRWIsSUFBSXJULEtBQUssR0FBRyxNQUFJO29CQUNoQixJQUFJdVQsTUFBTSxHQUFDO3NCQUNWelMsS0FBSyxFQUFFQSxLQUFLO3NCQUNaK0ssTUFBTSxFQUFDQSxNQUFNO3NCQUNidEMsZUFBZSxFQUFDQSxlQUFlO3NCQUMvQm9CLEdBQUcsRUFBQ0E7b0JBQ0wsQ0FBQztvQkFDRC9MLEdBQUcsQ0FBQ2tRLFVBQVUsQ0FBQztzQkFDZEMsR0FBRyxFQUFDLDJCQUEyQixHQUFDc0UsTUFBTSxHQUFDLFNBQVMsR0FBQ3RVLElBQUksQ0FBQ2lRLFNBQVMsQ0FBQ3VFLE1BQU0sQ0FBQztzQkFDdkV0RSxNQUFNLEVBQUM7d0JBQ05DLE1BQU0sa0JBQUN4UixJQUFJLEVBQUNFLEtBQUssRUFBQzswQkFDakJvQyxLQUFLLENBQUNmLEtBQUssQ0FBQ3BCLGFBQWEsQ0FBQ0QsS0FBSyxDQUFDa0QsS0FBSyxDQUFDLENBQUNvSCxJQUFJLENBQUN0SyxLQUFLLENBQUNpTyxNQUFNLENBQUMsQ0FBQzVILEtBQUssR0FBQ3ZHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQ1ksSUFBSTswQkFDNUUwQixLQUFLLENBQUNmLEtBQUssQ0FBQ3BCLGFBQWEsQ0FBQ0QsS0FBSyxDQUFDa0QsS0FBSyxDQUFDLENBQUNvSCxJQUFJLENBQUN0SyxLQUFLLENBQUNpTyxNQUFNLENBQUMsQ0FBQ21DLEtBQUssR0FBQ3RRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzhFLEVBQUUsR0FBQyxHQUFHLEdBQUM5RSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUNZLElBQUk7MEJBQzNGLElBQUl5TyxnQkFBZ0IsR0FBR25QLEtBQUssQ0FBQzJMLGVBQWUsQ0FBQ3lELElBQUksRUFBRTswQkFDbkQsSUFBSUQsZ0JBQWdCLEVBQUU7NEJBQ3JCLElBQUkzQixJQUFJLEdBQUc7OEJBQ1ZELE9BQU8sRUFBRTRCLGdCQUFnQjs4QkFDekIxQixNQUFNLEVBQUUsR0FBRzs4QkFDWEMsU0FBUyxFQUFFNU4sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDOEUsRUFBRTs4QkFDckIrSSxNQUFNLEVBQUUsRUFBRTs4QkFDVkMsTUFBTSxFQUFFLEVBQUU7OEJBQ1ZDLFNBQVMsRUFBRSxFQUFFOzhCQUNiNUwsS0FBSyxFQUFFRyxLQUFLLENBQUNmLEtBQUssQ0FBQ3JCLEtBQUssQ0FBQ2lDLEtBQUs7OEJBQzlCNkwsS0FBSyxFQUFFLEVBQUU7OEJBQ1QxSyxJQUFJLEVBQUVwRCxLQUFLLENBQUMrTSxHQUFHOzhCQUNmc0MsUUFBUSxFQUFDOzRCQUNWLENBQUM7NEJBRURqTixLQUFLLENBQUNrTixxQkFBcUIsQ0FBQzlCLElBQUksQ0FBQzswQkFDbEM7d0JBQ0Q7c0JBQ0Q7b0JBQ0QsQ0FBQyxDQUFDO2tCQUNILENBQUMsTUFBTTtvQkFDTixJQUFJeEIsQ0FBQyxHQUFHb0osTUFBTSxDQUFDO3NCQUNkclYsS0FBSyxFQUFFLDZDQUE2QyxHQUFHLElBQUk7c0JBQzNEMEIsT0FBTyxFQUFFMkosTUFBTSxDQUFDb0osV0FBVyxHQUFHO29CQUMvQixDQUFDLENBQUM7b0JBQ0Z4SSxDQUFDLENBQUN3QyxJQUFJLEVBQUU7a0JBQ1Q7Z0JBQ0Q7Y0FDRDtZQUNBLENBQUMsTUFBSTtjQUNKeE4sR0FBRyxDQUFDUSxTQUFTLENBQUM7Z0JBQUN6QixLQUFLLEVBQUMsT0FBTztnQkFBQzBCLE9BQU8sRUFBRSx1Q0FBdUMsR0FBRzhMLE9BQU87Z0JBQUM3TCxVQUFVLEVBQUMsS0FBSztnQkFBQ0MsV0FBVyxFQUFDO2NBQUksQ0FBQyxDQUFDO1lBQzVIO1VBQ0Q7UUFDRCxDQUFDLE1BQUk7VUFDSlgsR0FBRyxDQUFDUSxTQUFTLENBQUM7WUFBQ3pCLEtBQUssRUFBQyxLQUFLO1lBQUMwQixPQUFPLEVBQUNvQixPQUFPLENBQUNZLE9BQU87WUFBQy9CLFVBQVUsRUFBQyxLQUFLO1lBQUNDLFdBQVcsRUFBQztVQUFJLENBQUMsQ0FBQztRQUN2RjtNQUNELENBQUMsQ0FBQyxDQUFDK0IsS0FBSyxDQUFDLFVBQUFDLEVBQUUsRUFBRTtRQUNaO1FBQ0EzQyxHQUFHLENBQUNRLFNBQVMsQ0FBQztVQUFDekIsS0FBSyxFQUFDLE9BQU87VUFBQzBCLE9BQU8sRUFBQ2tDLEVBQUUsQ0FBQ0MsTUFBTTtVQUFDbEMsVUFBVSxFQUFDLEtBQUs7VUFBQ0MsV0FBVyxFQUFDO1FBQUksQ0FBQyxDQUFDO01BQ25GLENBQUMsQ0FBQztJQUNBO0VBR0o7QUFDRCxDQUFDO0FBQUEsMkIiLCJmaWxlIjoiMTEwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuXHRpbXBvcnQgQmFzZTY0IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvanMtYmFzZTY0L2Jhc2U2NC5qcydcblx0aW1wb3J0IHBpY2tlckFkZHJlc3MgZnJvbSAnLi4vLi4vanMvcGlja2VyQWRkcmVzcy9waWNrZXJBZGRyZXNzLnZ1ZSdcblx0ZXhwb3J0IGRlZmF1bHQge1xuXHRcdG1vZHVsZXM6e1xuXHRcdFx0QmFzZTY0LFxuXHRcdH0sXG5cdFx0Y29tcG9uZW50czoge1xuICAgICAgICAgICAgcGlja2VyQWRkcmVzc1xuICAgICAgICB9LFxuXHRcdGRhdGEoKSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHR0aXRsZTogJ+aWsOWinicsXG5cdFx0XHRcdHBhcmFtOnt9LFxuXHRcdFx0XHRjbGFzc0F0dHJMaXN0OltdLFxuXHRcdFx0XHRjbGFzc0dyaWRTdHlsZTpbXSxcblx0XHRcdFx0ZWRpdF9pbml0YWxfZXZlbnQ6XCJcIiwgIC8v5by556qX5Yid5aeL5YyW5LqL5Lu2SURcblx0XHRcdFx0ZWRpdF9va19ldmVudDpcIlwiLCAgICAgIC8v5by556qX54K55Ye7T0sg6Kem5Y+R5LqL5Lu2SURcblx0XHRcdFx0ZWRpdF9zZWxlY3RfY29tcG9zZV9ldmVudDpcIlwiLCAgLy/pgInmi6nnu4TmiJDlr7nosaHml7bosIPnlKhcblx0XHRcdFx0ZWRpdF9jb21wb3NlX2Nsc19pZDpcIlwiLFxuXHRcdFx0XHRnbG9iYWxfYXR0cjpbXSxcblx0XHRcdFx0cmVmZGF0YXN0b3JlOiBbXSxcdCAgIC8v5byV55So5pWw5o2u5a2Y5YKo5Yy6Ly8ge2F0dHI6J0dfUFJKXycgKyBiaW5kYXR0ciArICdfSUQnLCB2YWx1ZTppbmZvLmlkfVxuXHRcdFx0XHRpbnB1dFZhbExpc3Q6W3tOYW1lOlwidGVzdFwifSx7TmFtZTpcInRlc3QyXCJ9LHtOYW1lOlwidGVzdDNcIn0se05hbWU6XCJ0ZXN0NFwifSx7TmFtZTpcInRlc3Q1XCJ9LHtOYW1lOlwidGVzdDZcIn0se05hbWU6XCJ0ZXN0N1wifV0sXG5cdFx0XHRcdHBvcHVwVHlwZTpcImNlbnRlclwiLFxuXHRcdFx0XHRjaGVja19saXN0Ont9LFxuXHRcdFx0XHRwb3B1cFBhcmFtOnt9LFxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0b25Mb2FkKG9wdGlvbnMpIHtcblx0XHRcdC8vIGNvbnNvbGUubG9nKG9wdGlvbnMpO1xuXHRcdFx0dW5pLnNldE5hdmlnYXRpb25CYXJUaXRsZSh7IHRpdGxlOiBvcHRpb25zLnRpdGxlbmFtZX0pOyAvL+iuvue9rumhtumDqOagh+mimCBcblx0XHRcdHZhciBwYXJhbSA9IEpTT04ucGFyc2Uob3B0aW9ucy5wYXJhbSk7XG5cdFx0XHR0aGlzLiRkYXRhLnRpdGxlID0gcGFyYW0uQWRkX0J0bk5hbWU/cGFyYW0uQWRkX0J0bk5hbWU6b3B0aW9ucy50aXRsZW5hbWU7IC8v6K6+572u5oyJ6ZKu5paH5a2XXG5cdFx0XHQvLyBjb25zb2xlLmxvZyhwYXJhbSk7XG5cdFx0XHRpZighcGFyYW0uRWRpdERsZ01vZGUpe1xuXHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIuaPkOekulwiLGNvbnRlbnQ6XCLor6Xlip/og73ngrnmnKrphY3nva7nvJbovpHnqpflj6PvvIzor7fph43mlrDphY3nva7vvIFcIixzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0aWYoIXBhcmFtLkVkaXRfZGxnLk5hbWUpe1xuXHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIuaPkOekulwiLGNvbnRlbnQ6XCLor6Xlip/og73ngrnmnKrphY3nva7nqpflj6PmoLflvI/vvIzor7fph43mlrDphY3nva7vvIFcIixzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy4kZGF0YS5wYXJhbSA9IHBhcmFtO1xuXHRcdFx0dmFyIGVkaXRfZGxnID0ge1xuXHRcdFx0ICAgIE1vZGVsOiBwYXJhbS5FZGl0RGxnTW9kZSxcblx0XHRcdCAgICBOYW1lOiBwYXJhbS5FZGl0X2RsZy5OYW1lXG5cdFx0XHR9XG5cdFx0XHR2YXIgZGF0YUluZm8gPSB7XG5cdFx0XHRcdGNsYXNzX2lkOiBwYXJhbS5jbHNpZCxcblx0XHRcdFx0Y2xhc3NfbmFtZTogJycsXG5cdFx0XHRcdGdyb3VwX25hbWU6ICcnXG5cdFx0XHR9O1xuXHRcdFx0dmFyICR0aGlzID0gdGhpcztcblx0XHRcdCR0aGlzLiRzdG9yZS5zdGF0ZS50aGlzYXJlYUZ1bmNJRCA9IHBhcmFtLmNsc2lkO1xuXHRcdFx0Ly8gY29uc29sZS5sb2coJHRoaXMuJHN0b3JlLmdldHRlcnMuZ2V0Y2xhc3NBdHRyTGlzdCk7XG5cdFx0XHQgLy/ojrflj5Zcblx0XHRcdGlmKCR0aGlzLiRzdG9yZS5nZXR0ZXJzLmdldGNsYXNzQXR0ckxpc3Qpe1xuXHRcdFx0IFx0JHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdCA9ICR0aGlzLiRzdG9yZS5nZXR0ZXJzLmdldGNsYXNzQXR0ckxpc3Q7XG5cdFx0XHRcdCR0aGlzLmNsYXNzR3JpZFN0eWxlSW5mbygpO1xuXHRcdFx0fWVsc2Vcblx0XHRcdFx0JHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdjbGFzc0F0dHJHZXRMaXN0JyxkYXRhSW5mbykudGhlbihzdWNjZXNzPT57XG5cdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coc3VjY2Vzcyk7XG5cdFx0XHRcdFx0aWYgKHN1Y2Nlc3MuZXJyX2NvZGUgPT0gMCkge1xuXHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdCA9IHN1Y2Nlc3MucmVzdWx0O1xuXHRcdFx0XHRcdFx0c3VjY2Vzcy5yZXN1bHQuZm9yRWFjaChhc3luYyAoZ3JvdXAsaW5kZXgpID0+IHtcblx0XHRcdFx0XHRcdFx0Z3JvdXAuYXR0cl9saXN0LmZvckVhY2goYXN5bmMgKGF0dHIsa2V5KSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGF0dHIudHlwZSA9PSBcIuWtl+WFuC3lrZfnrKbkuLJcIiB8fCBhdHRyLnR5cGUgPT0gXCLlrZflhbgt5pW05pWwXCIpe1xuXHRcdFx0XHRcdFx0XHRcdFx0YXdhaXQgJHRoaXMuRGljdEl0ZW1HZXRMaXN0KGF0dHIsa2V5LGluZGV4KTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XG5cdFx0XHRcdFx0XHRcdCR0aGlzLmNsYXNzR3JpZFN0eWxlSW5mbygpO1xuXHRcdFx0XHRcdFx0fSw1MDApO1xuXHRcdFx0XHRcdH1lbHNle1xuXHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor68xXCIsY29udGVudDpzdWNjZXNzLmVycl9tc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KS5jYXRjaChleD0+e1xuXHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKGV4KTtcblx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzEuMVwiLGNvbnRlbnQ6ZXguZXJyTXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHR9KTtcblx0XHRcdFxuXHRcdH0sXG5cdFx0bWV0aG9kczoge1xuXHRcdFx0YXN5bmMgRGljdEl0ZW1HZXRMaXN0KGF0dHIsa2V5LGluZGV4KXsgLy9Nb2JveDPlvpfliLDlrZflhbjpobnliJfooahcblx0XHRcdFx0dGhpcy5kYXRhPVtdO1xuXHRcdFx0XHR2YXIgJHRoaXMgPSB0aGlzO1xuXHRcdFx0XHR2YXIgZGF0YUluZm8gPXtcblx0XHRcdFx0XHRkaWN0X2lkOiBhdHRyLmRpY3RfaWQsXG5cdFx0XHRcdFx0ZGljdF9uYW1lOiBhdHRyLmRpY3RfbmFtZVxuXHRcdFx0XHR9O1xuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhkYXRhSW5mbyk7XG5cdFx0XHRcdHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdEaWN0SXRlbUdldExpc3QnLGRhdGFJbmZvKS50aGVuKGFzeW5jIChzdWNjZXNzKT0+e1xuXHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKHN1Y2Nlc3MpO1xuXHRcdFx0XHRcdGlmIChzdWNjZXNzLmVycl9jb2RlID09IDApIHtcblx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbaW5kZXhdLmF0dHJfbGlzdFtrZXldLmRpY3RpdGVtPXN1Y2Nlc3MucmVzdWx0O1xuXHRcdFx0XHRcdFx0dGhpcy4kc3RvcmUuY29tbWl0KFwiY2xhc3NBdHRyTGlzdFwiLCAkdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0KTtcblx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdH1lbHNle1xuXHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor68xLjJcIixjb250ZW50OnN1Y2Nlc3MuZXJyX21zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pLmNhdGNoKGV4PT57XG5cdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coZXgpO1xuXHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vMS4zXCIsY29udGVudDpleC5lcnJNc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSxcblx0XHRcdGFzeW5jIGNsYXNzR3JpZFN0eWxlSW5mbygpe1xuXHRcdFx0XHR2YXIgJHRoaXMgPSB0aGlzO1xuXHRcdFx0XHR2YXIgZ3JpZHN0eWxlSW5mbyA9IHtcblx0XHRcdFx0XHRjbGFzc19pZDogJHRoaXMuJGRhdGEucGFyYW0uY2xzaWQsXG5cdFx0XHRcdFx0dWlfc3R5bGVfdHlwZTogMixcblx0XHRcdFx0XHR1aV9zdHlsZV9uYW1lOiAkdGhpcy4kZGF0YS5wYXJhbS5FZGl0X2RsZy5OYW1lXG5cdFx0XHRcdH07XG5cdFx0XHRcdCR0aGlzLiRzdG9yZS5zdGF0ZS50aGlzRWRpdE5hbWUgPSAkdGhpcy4kZGF0YS5wYXJhbS5FZGl0X2RsZy5OYW1lXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKCR0aGlzLiRzdG9yZS5nZXR0ZXJzLmdldGNsYXNzR3JpZFN0eWxlSW5mbyk7XG5cdFx0XHRcdCAvL+iOt+WPllxuXHRcdFx0XHRpZigkdGhpcy4kc3RvcmUuZ2V0dGVycy5nZXRjbGFzc0dyaWRTdHlsZUluZm8pe1xuXHRcdFx0XHQgXHQkdGhpcy4kZGF0YS5jbGFzc0dyaWRTdHlsZSA9ICR0aGlzLiRzdG9yZS5nZXR0ZXJzLmdldGNsYXNzR3JpZFN0eWxlSW5mbztcblx0XHRcdFx0XHQkdGhpcy52aWV3UGFyYW0oKTtcblx0XHRcdFx0fWVsc2V7XG5cdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coZ3JpZHN0eWxlSW5mbyk7XG5cdFx0XHRcdFx0JHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdVSVN0eWxlR2V0SW5mbycsZ3JpZHN0eWxlSW5mbykudGhlbihhc3luYyAoc3VjY2Vzcyk9Pntcblx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKHN1Y2Nlc3MpO1xuXHRcdFx0XHRcdFx0aWYgKHN1Y2Nlc3MuZXJyX2NvZGUgPT0gMCkge1xuXHRcdFx0XHRcdFx0XHR2YXIgc3R5bGVkZWYgPSBCYXNlNjQuZGVjb2RlKHN1Y2Nlc3MucmVzdWx0LnN0eWxlX2RlZik7XG5cdFx0XHRcdFx0XHRcdHN1Y2Nlc3MucmVzdWx0LnN0eWxlX2RlZiA9IEpTT04ucGFyc2Uoc3R5bGVkZWYpO1xuXHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5jbGFzc0dyaWRTdHlsZSA9IHN1Y2Nlc3MucmVzdWx0O1xuXHRcdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZygkdGhpcy4kZGF0YS5jbGFzc0dyaWRTdHlsZSk7XG5cdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHQkdGhpcy52aWV3UGFyYW0oKTtcblx0XHRcdFx0XHRcdH1lbHNle1xuXHRcdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzEuNFwiLGNvbnRlbnQ6c3VjY2Vzcy5lcnJfbXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pLmNhdGNoKGV4PT57XG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhleCk7XG5cdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzEuNVwiLGNvbnRlbnQ6ZXguZXJyTXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0dmlld1BhcmFtKCl7IC8v5bCGbW9ib3gz5bCP5YaZ5Y+C5pWw6L2s5o2i5Li6bW9ib3gy5aSn5YaZ5Y+C5pWwXG5cdFx0XHRcdHZhciBjbGFzc19ncmlkU3R5bGUgPXtcblx0XHRcdFx0XHRJRDogdGhpcy4kZGF0YS5jbGFzc0dyaWRTdHlsZS5pZCxcblx0XHRcdFx0XHROYW1lOiB0aGlzLiRkYXRhLmNsYXNzR3JpZFN0eWxlLm5hbWUsXG5cdFx0XHRcdFx0VHlwZTogdGhpcy4kZGF0YS5jbGFzc0dyaWRTdHlsZS50eXBlLFxuXHRcdFx0XHRcdElzRGVmYXVsdDp0aGlzLiRkYXRhLmNsYXNzR3JpZFN0eWxlLmlzX2RlZmF1bCxcblx0XHRcdFx0XHRTdHlsZURlZjp0aGlzLiRkYXRhLmNsYXNzR3JpZFN0eWxlLnN0eWxlX2RlZixcblx0XHRcdFx0fTtcblx0XHRcdFx0dGhpcy4kZGF0YS5jbGFzc0dyaWRTdHlsZSA9IGNsYXNzX2dyaWRTdHlsZTtcblx0XHRcdFx0dmFyIGNsYXNzX2F0dHJMaXN0ID1bXTtcblx0XHRcdFx0dGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0LmZvckVhY2goZGF0YSA9PiB7XG5cdFx0XHRcdFx0dmFyIGF0dHJzID1bXTtcblx0XHRcdFx0XHRpZihkYXRhLmF0dHJfbGlzdCl7XG5cdFx0XHRcdFx0ICBkYXRhLmF0dHJfbGlzdC5mb3JFYWNoKGF0dHIgPT4ge1xuXHRcdFx0XHRcdFx0dmFyIGRpY3RpdGVtcyA9W107XG5cdFx0XHRcdFx0XHRpZihhdHRyLmRpY3RpdGVtKXtcblx0XHRcdFx0XHRcdFx0YXR0ci5kaWN0aXRlbS5mb3JFYWNoKGRpY3QgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdGRpY3RpdGVtcy5wdXNoKHtcblx0XHRcdFx0XHRcdFx0XHRcdElEOiBkaWN0LmlkLFxuXHRcdFx0XHRcdFx0XHRcdFx0TmFtZTogZGljdC5uYW1lLFxuXHRcdFx0XHRcdFx0XHRcdFx0Tm90ZTogZGljdC5ub3RlLFxuXHRcdFx0XHRcdFx0XHRcdFx0T3JkZXI6IGRpY3Qub3JkZXIsXG5cdFx0XHRcdFx0XHRcdFx0XHRJbWdVcmw6IG51bGwsXG5cdFx0XHRcdFx0XHRcdFx0XHRDb2RlOiBkaWN0LmNvZGUsXG5cdFx0XHRcdFx0XHRcdFx0XHRIYXNTdWI6IG51bGwsXG5cdFx0XHRcdFx0XHRcdFx0XHRQYXJlbnRJRDogbnVsbCxcblx0XHRcdFx0XHRcdFx0XHRcdFBhcmVudE5hbWU6IG51bGwsXG5cdFx0XHRcdFx0XHRcdFx0XHRMdmw6IGRpY3QubHZsLFxuXHRcdFx0XHRcdFx0XHRcdFx0SXNEZWZhdWx0OiBkaWN0LmlzX2RlZmF1bHQsXG5cdFx0XHRcdFx0XHRcdFx0XHRWYWx1ZTogZGljdC52YWx1ZSxcblx0XHRcdFx0XHRcdFx0XHRcdENOX0dfSUQ6IGRpY3QuaWQsXG5cdFx0XHRcdFx0XHRcdFx0XHRDTl9HX0RJQ1RfSUQ6IG51bGwsXG5cdFx0XHRcdFx0XHRcdFx0XHRDTl9TX05BTUU6IGRpY3QubmFtZSxcblx0XHRcdFx0XHRcdFx0XHRcdENOX1NfTk9URTogZGljdC5ub3RlLFxuXHRcdFx0XHRcdFx0XHRcdFx0Q05fTl9PUkRFUjogZGljdC5vcmRlcixcblx0XHRcdFx0XHRcdFx0XHRcdENOX1NfSU1HX1VSTDogbnVsbCxcblx0XHRcdFx0XHRcdFx0XHRcdENOX1NfQ09ERTogZGljdC5jb2RlLFxuXHRcdFx0XHRcdFx0XHRcdFx0Q05fQ19IQVNfU1VCOiBudWxsLFxuXHRcdFx0XHRcdFx0XHRcdFx0Q05fR19QQVJFTlRfSVRFTV9JRDogbnVsbCxcblx0XHRcdFx0XHRcdFx0XHRcdENOX0dfUEFSRU5UX0lURU1fTkFNRTogbnVsbCxcblx0XHRcdFx0XHRcdFx0XHRcdENOX05fTFZMOiBkaWN0Lmx2bCxcblx0XHRcdFx0XHRcdFx0XHRcdENOX0NfSVNfREVGQVVMVDogZGljdC5pc19kZWZhdWx0LFxuXHRcdFx0XHRcdFx0XHRcdFx0Q05fU19WQUxVRTogZGljdC52YWx1ZVxuXHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGF0dHJzLnB1c2goe1xuXHRcdFx0XHRcdFx0XHRJRDogYXR0ci5pZCxcblx0XHRcdFx0XHRcdFx0TmFtZTogYXR0ci5uYW1lLFxuXHRcdFx0XHRcdFx0XHRUeXBlOiBhdHRyLnR5cGUsXG5cdFx0XHRcdFx0XHRcdFNpemU6IGF0dHIuc2l6ZSxcblx0XHRcdFx0XHRcdFx0Tm90RW1wdHk6IGF0dHIubm90X2VtcHR5LFxuXHRcdFx0XHRcdFx0XHREZWZWYWx1ZTphdHRyLmRlZl92YWx1ZSxcblx0XHRcdFx0XHRcdFx0T3JkZXI6IGF0dHIub3JkZXIsXG5cdFx0XHRcdFx0XHRcdERpY3ROYW1lOiBhdHRyLmRpY3RfbmFtZSxcblx0XHRcdFx0XHRcdFx0RGljdElEOiBhdHRyLmRpY3RfaWQsXG5cdFx0XHRcdFx0XHRcdENvZGVEZWZOYW1lOiBhdHRyLmNvZGVfZGVmX25hbWUsXG5cdFx0XHRcdFx0XHRcdENvZGVEZWZJRDogYXR0ci5jb2RlX2RlZl9pZCxcblx0XHRcdFx0XHRcdFx0UmVsQ2xzSUQ6IG51bGwsXG5cdFx0XHRcdFx0XHRcdFJlbENsczogYXR0ci5yZWZfY2xzLFxuXHRcdFx0XHRcdFx0XHRXaWR0aDogYXR0ci53aWR0aCxcblx0XHRcdFx0XHRcdFx0SGVpZ2h0OiBhdHRyLmhlaWdodCxcblx0XHRcdFx0XHRcdFx0Q3RybFN0eWxlOiBhdHRyLmN0cmxfc3R5bGUsXG5cdFx0XHRcdFx0XHRcdEhhc0FjZTogYXR0ci5oYXNfYWNlLFxuXHRcdFx0XHRcdFx0XHRDYW5TaG93OiBhdHRyLmNhbl9zaG93LFxuXHRcdFx0XHRcdFx0XHRDYW5RdWVyeTogYXR0ci5jYW5fcXVlcnksXG5cdFx0XHRcdFx0XHRcdFJlYWRPbmx5OiBhdHRyLnJlYWRfb25seSxcblx0XHRcdFx0XHRcdFx0SXNLZXk6IGF0dHIuaXNfa2V5LFxuXHRcdFx0XHRcdFx0XHRJc0ZpeGVkOiBhdHRyLmlzX2ZpeGVkLFxuXHRcdFx0XHRcdFx0XHREaXNwTmFtZTogYXR0ci5kaXNwX25hbWUsXG5cdFx0XHRcdFx0XHRcdEx1YUF0dHI6IGF0dHIubHVhX2F0dHIsXG5cdFx0XHRcdFx0XHRcdERlc2M6IGF0dHIuZGVzYyxcblx0XHRcdFx0XHRcdFx0QWN0aW9uRGVmOiBhdHRyLmFjdGlvbl9kZWY/QmFzZTY0LmRlY29kZShhdHRyLmFjdGlvbl9kZWYpOicnLFxuXHRcdFx0XHRcdFx0XHRNdWx0aWxpbmd1YWw6IGF0dHIubXVsdGlsaW5ndWFsLFxuXHRcdFx0XHRcdFx0XHRSZWZDb25kaXRpb246IGF0dHIucmVmX2NvbmRpdGlvbixcblx0XHRcdFx0XHRcdFx0R3JvdXBOYW1lOiBkYXRhLmdyb3VwLFxuXHRcdFx0XHRcdFx0XHRWYWx1ZTogbnVsbCxcblx0XHRcdFx0XHRcdFx0ZGljdGl0ZW06IGRpY3RpdGVtc1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0ICB9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y2xhc3NfYXR0ckxpc3QucHVzaCh7XG5cdFx0XHRcdFx0XHROYW1lOiBkYXRhLmdyb3VwLFxuXHRcdFx0XHRcdFx0T3JkZXI6IGRhdGEub3JkZXIsXG5cdFx0XHRcdFx0XHRIYXNBY2U6IGRhdGEuaGFzX2FjZSxcblx0XHRcdFx0XHRcdEJrQ29sb3I6IGRhdGEuYmtfY29sb3IsXG5cdFx0XHRcdFx0XHRJbWdGb250U3R5bGU6IGRhdGEuaW1nX2ZvbnRfc3R5bGUsXG5cdFx0XHRcdFx0XHRBdHRyOiBhdHRyc1xuXHRcdFx0XHRcdH0pOyBcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdCA9IGNsYXNzX2F0dHJMaXN0O1xuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyh0aGlzLiRkYXRhLmNsYXNzR3JpZFN0eWxlKTtcblx0XHRcdFx0Ly8gY29uc29sZS5sb2codGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0KTtcblx0XHRcdFx0dGhpcy5jbGFzc19hdHRyX2luaXQoKTtcblx0XHRcdH0sXG5cdFx0XHRjbGFzc19hdHRyX2luaXQoKXtcblx0XHRcdFx0dmFyIGF0dHJsaXN0ID0gdGhpcy4kZGF0YS5jbGFzc0dyaWRTdHlsZS5TdHlsZURlZi5zaG93X3N0eWxlXG5cdFx0XHRcdHZhciBuZXdhdHRybGlzdCA9IFtdO1xuXHRcdFx0XHRpZiAodGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0Lmxlbmd0aCA+IDApIHtcblx0XHRcdFx0ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmxpc3QubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0ICAgICAgICB2YXIgb3BlbiA9IGF0dHJsaXN0W2ldLm9wZW47XG5cdFx0XHRcdCAgICAgICAgdmFyIG5hbWUgPSBhdHRybGlzdFtpXS5hdHRyZ3JvdXBfbmFtZTtcblx0XHRcdFx0ICAgICAgICB2YXIgYXR0cnMgPSBhdHRybGlzdFtpXS5hdHRycztcblx0XHRcdFx0ICAgICAgICBmb3IgKHZhciBzID0gMDsgcyA8IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdC5sZW5ndGg7IHMrKykge1xuXHRcdFx0XHQgICAgICAgICAgICB2YXIgY2xzYXR0ciA9IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtzXTtcblx0XHRcdFx0ICAgICAgICAgICAgaWYgKG5hbWUgPT0gY2xzYXR0ci5OYW1lKSB7XG5cdFx0XHRcdCAgICAgICAgICAgICAgICB2YXIgYXR0ciA9IFtdO1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBhdHRycy5sZW5ndGg7IGorKykge1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGwgPSAwOyBsIDwgY2xzYXR0ci5BdHRyLmxlbmd0aDsgbCsrKSB7XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYSA9IGNsc2F0dHIuQXR0cltsXTtcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGF0dHJzW2pdLmF0dHIgPT0gY2EuTmFtZSkge1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2EuYWN0aW9uID0gYXR0cnNbal0uYWN0aW9uO1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2EuZWRpdCA9IGF0dHJzW2pdLmVkaXQ7XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYS5ub3RlbXB0eSA9IGF0dHJzW2pdLm5vdGVtcHR5O1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2EuZXh0X2J1dHRvbiA9IGF0dHJzW2pdLmV4dF9idXR0b247XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYS5idXR0b25faW1nID0gYXR0cnNbal0uYnV0dG9uX2ltZztcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhLmJ1dHRvbl90b29sdGlwID0gYXR0cnNbal0uYnV0dG9uX3Rvb2x0aXA7XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYS5iZWZvcmVfY2xpY2tfYnV0dG9uID0gYXR0cnNbal0uYmVmb3JlX2NsaWNrX2J1dHRvbjtcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhLmJ1dHRvbl9jYWxsYmFjayA9IGF0dHJzW2pdLmJ1dHRvbl9jYWxsYmFjaztcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhLmhpZGRlbiA9IGF0dHJzW2pdLmhpZGRlbjtcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhLnNlbGVjdCA9IGF0dHJzW2pdLnNlbGVjdD09dW5kZWZpbmVkP2ZhbHNlOmF0dHJzW2pdLnNlbGVjdDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5WYWx1ZSA9XCJcIjtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihjYS5kaWN0aXRlbS5sZW5ndGg+MCl7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihjYS5zZWxlY3QgPT0gdHJ1ZSlcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2EuVmFsdWUgPSBbXTsvL2NhLmRpY3RpdGVtWzBdLkNOX1NfTkFNRTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGVsc2UgXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhLlZhbHVlID0gJ+ivt+mAieaLqSc7Ly9jYS5kaWN0aXRlbVswXS5DTl9TX05BTUU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgZGljdGl0ZW1saXN0PVtdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgZCA9IDA7IGQgPCBjYS5kaWN0aXRlbS5sZW5ndGg7IGQrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5kaWN0aXRlbVtkXS5sYWJlbD1jYS5kaWN0aXRlbVtkXS5DTl9TX05BTUU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhLmRpY3RpdGVtW2RdLnZhbHVlPWNhLmRpY3RpdGVtW2RdLkNOX1NfTkFNRTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2EuZGljdGl0ZW1bZF0uYXR0cj1jYS5OYW1lO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihjYS5kaWN0aXRlbVtkXS5DTl9DX0lTX0RFRkFVTFQ9PScxJylcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5WYWx1ZT1jYS5kaWN0aXRlbVtkXS5DTl9TX05BTUU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGNhLlR5cGU9PSfml6XmnJ8nIHx8IGNhLlR5cGU9PSfml7bpl7QnKXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBub3dEYXRlID0gbmV3IERhdGUoKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBkYXRlID0ge3llYXI6IG5vd0RhdGUuZ2V0RnVsbFllYXIoKSxtb250aDogbm93RGF0ZS5nZXRNb250aCgpICsgMSxkYXk6IG5vd0RhdGUuZ2V0RGF0ZSgpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2EuVmFsdWUgPSBkYXRlLnllYXIgKyAnLScgKyAoZGF0ZS5tb250aCA+PSAxMCA/IGRhdGUubW9udGggOiAnMCcgKyBkYXRlLm1vbnRoKSArICctJyArIChkYXRlLmRheSA+PSAxMCA/IGRhdGUuZGF5IDogJzAnICsgZGF0ZS5kYXkpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihjYS5UeXBlPT0n5byV55So5a+56LGhKOWkmuS4qiknKXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhLlJlbENsc0xpc3QgPSBjYS5SZWxDbHM7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5WYWx1ZSA9ICfor7cnO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihjYS5UeXBlPT0n55yB5biC5Yy6Jylcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhLlZhbHVlID0gJ+ivt+mAieaLqSc7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoY2EuVHlwZT09J+W4g+WwlOWAvCcpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5WYWx1ZSA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyLnB1c2goY2EpO1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICB9XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgfVxuXHRcdFx0XHQgICAgICAgICAgICAgICAgfVxuXHRcdFx0XHQgICAgICAgICAgICAgICAgbmV3YXR0cmxpc3QucHVzaCh7XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgQmtDb2xvcjogY2xzYXR0ci5Ca0NvbG9yLFxuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgIEhhc0FjZTogY2xzYXR0ci5IYXNBY2UsXG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgSW1nRm9udFN0eWxlOiBjbHNhdHRyLkltZ0ZvbnRTdHlsZSxcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICBOYW1lOiBjbHNhdHRyLk5hbWUsXG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgT3JkZXI6IGNsc2F0dHIuT3JkZXIsXG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgT3Blbjogb3Blbixcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICBBdHRyOiBhdHRyLFxuXHRcdFx0XHRcdFx0XHRcdFx0Y29udHJvbF9zdHlsZTp0aGlzLiRkYXRhLmNsYXNzR3JpZFN0eWxlLlN0eWxlRGVmLmNvbnRyb2xfc3R5bGUsXG5cdFx0XHRcdFx0XHRcdFx0XHR0aXRsZV9wX3dkaXRoOnRoaXMuJGRhdGEuY2xhc3NHcmlkU3R5bGUuU3R5bGVEZWYudGl0bGVfcF93ZGl0aFxuXHRcdFx0XHQgICAgICAgICAgICAgICAgfSlcblx0XHRcdFx0ICAgICAgICAgICAgfVxuXHRcdFx0XHQgICAgICAgIH1cblx0XHRcdFx0ICAgIH1cblx0XHRcdFx0ICAgIGlmIChuZXdhdHRybGlzdC5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdCAgICAgICAgdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0ID0gbmV3YXR0cmxpc3Q7XG5cdFx0XHRcdCAgICB9XG5cdFx0XHRcdFx0dmFyIHJlcT1bXTtcblx0XHRcdFx0ICAgIGlmICh0aGlzLiRkYXRhLmNsYXNzR3JpZFN0eWxlLlN0eWxlRGVmKSB7XG5cdFx0XHRcdCAgICAgICAgIGlmICh0aGlzLiRkYXRhLmNsYXNzR3JpZFN0eWxlLlN0eWxlRGVmLnNob3dfc3R5bGUubGVuZ3RoID4gMCkge1xuXHRcdFx0XHQgICAgICAgICAgICB2YXIgYXR0cmxpc3QgPSB0aGlzLiRkYXRhLmNsYXNzR3JpZFN0eWxlLlN0eWxlRGVmLnNob3dfc3R5bGVcblx0XHRcdFx0ICAgICAgICAgICAgLy8gJGVsLmZpbmQoJy5hdHRyX2ZpZWxkJykucHJvcCgncmVhZG9ubHknLCB0cnVlKTtcblx0XHRcdFx0ICAgICAgICAgICAgLy8gJGVsLmZpbmQoJy5hdHRyX2ZpZWxkJykucHJvcCgnZGlzYWJsZWQnLCB0cnVlKTtcblx0XHRcdFx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRybGlzdC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgdmFyIGF0dHIgPSBhdHRybGlzdFtpXS5hdHRyc1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgdmFyIGFyID0gYXR0cltqXTtcblx0XHRcdFx0XHRcdFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuYXR0ciwgdmFsOiBhci52YWx1ZT9hci52YWx1ZTonJyB9KTtcblx0XHRcdFx0ICAgICAgICAgICAgICAgIH1cblx0XHRcdFx0ICAgICAgICAgICAgfVxuXHRcdFx0XHQgICAgICAgIH1cblx0XHRcdFx0XHR9XHRcblx0XHRcdFx0XHRcblx0XHRcdFx0XHR2YXIgZXZlbnRsaXN0ID0gdGhpcy4kZGF0YS5jbGFzc0dyaWRTdHlsZS5TdHlsZURlZi5ldmVudDtcblx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhldmVudGxpc3QpO1xuXHRcdFx0XHRcdGlmIChldmVudGxpc3QpIHtcblx0XHRcdFx0XHQgICAgaWYgKGV2ZW50bGlzdC5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV2ZW50bGlzdC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdCAgICAgICAgICAgIGlmIChldmVudGxpc3RbaV0uZXZlbnRfaWQgPT0gJ2JlZm9yZV9vaycpIHtcblx0XHRcdFx0XHQgICAgICAgICAgICAgICAgdGhpcy4kZGF0YS5lZGl0X29rX2V2ZW50ID0gZXZlbnRsaXN0W2ldO1xuXHRcdFx0XHRcdCAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnRsaXN0W2ldLmV2ZW50X2lkID09ICdpbml0aWFsJykge1xuXHRcdFx0XHRcdCAgICAgICAgICAgICAgICB0aGlzLiRkYXRhLmVkaXRfaW5pdGFsX2V2ZW50ID0gZXZlbnRsaXN0W2ldO1xuXHRcdFx0XHRcdCAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnRsaXN0W2ldLmV2ZW50X2lkID09ICdiZWZvcmVfc2VsZWN0X2NvbXBvc2UnKSB7XG5cdFx0XHRcdFx0ICAgICAgICAgICAgICAgIHRoaXMuJGRhdGEuZWRpdF9zZWxlY3RfY29tcG9zZV9ldmVudCA9IGV2ZW50bGlzdFtpXS5zY3JpcF9pZDtcblx0XHRcdFx0XHQgICAgICAgICAgICAgICAgdGhpcy4kZGF0YS5lZGl0X2NvbXBvc2VfY2xzX2lkID0gZXZlbnRsaXN0W2ldLmNvbXBvc2VfY2xzX2lkO1xuXHRcdFx0XHRcdCAgICAgICAgICAgIH1cblx0XHRcdFx0XHQgICAgICAgIH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Ly8gY29uc29sZS5sb2cocmVxKTtcblx0XHRcdFx0XHRpZiAodGhpcy4kZGF0YS5lZGl0X2luaXRhbF9ldmVudCkge1xuXHRcdFx0XHRcdCAgICB2YXIgZXZlbnRpZCA9IHRoaXMuJGRhdGEuZWRpdF9pbml0YWxfZXZlbnQuc2NyaXBfaWQ7XG5cdFx0XHRcdFx0ICAgIHZhciBpbmZvID0ge1xuXHRcdFx0XHRcdCAgICAgICAgZXZlbnRpZDogZXZlbnRpZCxcblx0XHRcdFx0XHQgICAgICAgIGVkdHlwZTogXCIwXCIsXG5cdFx0XHRcdFx0ICAgICAgICBwcm9qZWN0aWQ6ICcnLFxuXHRcdFx0XHRcdCAgICAgICAgcmNsc2lkOiAnJyxcblx0XHRcdFx0XHQgICAgICAgIHJvYmppZDogJycsXG5cdFx0XHRcdFx0ICAgICAgICB1c2VybG9naW46ICcnLFxuXHRcdFx0XHRcdCAgICAgICAgY2xzaWQ6IHRoaXMuJGRhdGEucGFyYW0uY2xzaWQsXG5cdFx0XHRcdFx0ICAgICAgICBvYmppZDogXCJcIixcblx0XHRcdFx0XHQgICAgICAgIGF0dHI6IHJlcSxcblx0XHRcdFx0XHQgICAgfVxuXHRcdFx0XHRcdCAgICB0aGlzLmluaV9EYXRhT2JqUnVuQ3VzdG9tRXZlbnQoaW5mbyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNvbnNvbGUubG9nKHRoaXMuJGRhdGEuY2xhc3NHcmlkU3R5bGUpO1xuXHRcdFx0XHRcdGNvbnNvbGUubG9nKHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdCk7XG5cdFx0XHRcdFx0XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLmj5DnpLpcIixjb250ZW50Olwi5pyq5om+5Yiw5Y+v5pi+56S655qE55qE5bGe5oCnXCIsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRcblx0XHRcdGNsYXNzQXR0cl9leHRCdXR0b24oaW5kZXgsaWluZGV4KXsgIC8v5by55qGG5bGC5pi+56S6IHR5cGU6dG9wIGJvdHRvbSBjZW50ZXIgbGVmdCByaWdodFxuXHRcdFx0XHR2YXIgJHRoaXMgPSB0aGlzO1xuXHRcdFx0XHQkdGhpcy4kZGF0YS5wb3B1cFR5cGUgPSAncmlnaHQnXG5cdFx0XHRcdC8vIG9wZW4g5pa55rOV5Lyg5YWl5Y+C5pWwIOetieWQjOWcqCB1bmktcG9wdXAg57uE5Lu25LiK57uR5a6aIHR5cGXlsZ7mgKdcblx0XHRcdFx0JHRoaXMuJHJlZnMucG9wdXAub3BlbigkdGhpcy5wb3B1cFR5cGUpO1xuXHRcdFx0XHR2YXIgZGF0YV9hdHRyID0gJHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtpbmRleF0uQXR0cltpaW5kZXhdO1xuXHRcdFx0XHQvLyB2YXIgdmFsdWUgPSBhY3Rpb24udmFsdWU7XG5cdFx0XHRcdC8vIHZhciBhY3Rpb24gPXtcImFjdGlvbl90eXBlXCI6XCJvcGVuX2NvbW1vbl9kbGdcIixcInZhbHVlXCI6e1wiY29tbW9uX2RsZ19pZFwiOlwiY2hlY2tfbGlzdFwiLFwiY29uZmlnXCI6e1widGl0bGVcIjpcIueUn+S6p+W3peWNlVwiLFwiYXBwZWFyX3N0eWxlXCI6XCJzaWRlc2xpcFwiLFwid2lkdGhcIjoyNTAsXCJtdWx0aXBsZV9jaG9pY2VcIjpcIjFcIixcIml0ZW1zXCI6W3tcImlkXCI6XCIxMzNENTBENy1ENzk4LTREMkUtQTE1Ri0zMDgzNjUwOTJERjVcIixcIm5hbWVcIjpcIjUxMDA2OTE2NzNcIiwgXCJjaGVja1wiOmZhbHNlfSx7XCJpZFwiOlwiMjI5OTIwMjEtN0QzQi00OTU5LTg2QjctRUYxODRCNTk2QUM2XCIsXCJuYW1lXCI6XCI1MTAwNjkxNjc0XCIsIFwiY2hlY2tcIjpmYWxzZX0se1wiaWRcIjpcIjQ4RkJCRThFLTU5NEQtNDVENS04QzI0LTM4NUM2NjFDNEExQ1wiLFwibmFtZVwiOlwiNTEwMDY5MTY3NVwiLCBcImNoZWNrXCI6ZmFsc2V9LHtcImlkXCI6XCI0RTQyOUM2MC0zMjVBLTQyRUQtQkVBMy1CMzM5N0MwN0NDQTFcIixcIm5hbWVcIjpcIjUxMDA2OTE2NjhcIiwgXCJjaGVja1wiOmZhbHNlfV19fX1cblx0XHRcdFx0Ly8gaWYgKGFjdGlvbi5hY3Rpb25fdHlwZSA9PSAnb3Blbl9jb21tb25fZGxnJykge1xuXHRcdFx0XHQvLyBcdHZhciB2YWx1ZSA9IGFjdGlvbi52YWx1ZTtcblx0XHRcdFx0Ly8gXHRpZih2YWx1ZS5jb21tb25fZGxnX2lkID09ICdjaGVja19saXN0Jyl7XG5cdFx0XHRcdC8vIFx0ICAgJHRoaXMuJGRhdGEuY2hlY2tfbGlzdD0gdmFsdWUuY29uZmlnO1xuXHRcdFx0XHQvLyBcdH1cblx0XHRcdFx0Ly8gfVxuXHRcdFx0XHQvLyB2YXIgcG9wdXBQYXJhbT17XG5cdFx0XHRcdC8vIFx0aW5kZXg6IGluZGV4LFxuXHRcdFx0XHQvLyBcdGlpbmRleDogaWluZGV4LFxuXHRcdFx0XHQvLyBcdGJ1dHRvbl9jYWxsYmFjazpcIlwiLFxuXHRcdFx0XHQvLyBcdHJlcTpcIlwiLFxuXHRcdFx0XHQvLyBcdGRhdGFfYXR0cjpkYXRhX2F0dHJcblx0XHRcdFx0Ly8gfVxuXHRcdFx0XHQvLyAkdGhpcy4kZGF0YS5wb3B1cFBhcmFtPSBwb3B1cFBhcmFtO1xuXHRcdFx0XHQvLyByZXR1cm47XG5cdFx0XHRcdHZhciBiZWZvcmVfY2xpY2tfYnV0dG9uID0gJHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtpbmRleF0uQXR0cltpaW5kZXhdLmJlZm9yZV9jbGlja19idXR0b247XG5cdFx0XHRcdHZhciBidXR0b25fY2FsbGJhY2sgPSAkdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2luZGV4XS5BdHRyW2lpbmRleF0uYnV0dG9uX2NhbGxiYWNrO1xuXHRcdFx0XHRpZighYmVmb3JlX2NsaWNrX2J1dHRvbil7XG5cdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLmj5DnpLpcIixjb250ZW50OlwiYmVmb3JlX2NsaWNrX2J1dHRvbi1ldmVudF9pZOS4uuepuu+8gVwiLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZighYnV0dG9uX2NhbGxiYWNrKXtcblx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIuaPkOekulwiLGNvbnRlbnQ6XCJidXR0b25fY2FsbGJhY2stZXZlbnRfaWTkuLrnqbrvvIFcIixzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy5EYXRhT2JqUnVuQ3VzdG9tRXZlbnRfUmV0dXJuKGJlZm9yZV9jbGlja19idXR0b24sIGRhdGFfYXR0ciwgYnV0dG9uX2NhbGxiYWNrLCBpbmRleCxpaW5kZXgpO1xuXHRcdFx0fSxcblx0XHRcdHBvcHVwQ2hhbmdlKGUpIHsgIFxuXHRcdFx0XHRjb25zb2xlLmxvZygn5b2T5YmN5qih5byP77yaJyArIGUudHlwZSArICcs54q25oCB77yaJyArIGUuc2hvdyk7XG5cdFx0XHR9LFxuXHRcdFx0Y2hlY2tDaGFuZ2UoZSl7IC8v5by55qGGY2hlY2vpgInmi6lcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coZS50YXJnZXQuZGF0YXNldCk7XG5cdFx0XHRcdHZhciBpbmRleCA9IGUudGFyZ2V0LmRhdGFzZXQuaW5kZXg7XG5cdFx0XHRcdHZhciBpc2NoZWNrID0gZS50YXJnZXQuZGF0YXNldC5pc2NoZWNrO1xuXHRcdFx0XHR2YXIgZGF0YSA9IHRoaXMuJGRhdGEuY2hlY2tfbGlzdC5pdGVtcztcblx0XHRcdFx0Ly8gdGhpcy4kZGF0YS5jaGVja19saXN0Lml0ZW1zPVtdO1xuXHRcdFx0XHRpZih0aGlzLiRkYXRhLmNoZWNrX2xpc3QubXVsdGlwbGVfY2hvaWNlPT1cIjBcIil7IC8v5Yik5pat5pe25Y2V6YCJ6L+Y5piv5aSa6YCJXG5cdFx0XHRcdFx0Zm9yKHZhciBpIGluIGRhdGEpe1xuXHRcdFx0XHRcdFx0ZGF0YVtpXS5jaGVjaz1mYWxzZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0ZGF0YVtpbmRleF0uY2hlY2s9aXNjaGVjaz9mYWxzZTp0cnVlO1xuXHRcdFx0XHR0aGlzLiRkYXRhLmNoZWNrX2xpc3QuaXRlbXM9ZGF0YTtcblx0XHRcdFx0XG5cdFx0XHR9LFxuXHRcdFx0cG9wdXBfY2FuY2VsKGUpeyAvL+W8ueahhuWPlua2iFxuXHRcdFx0XHR0aGlzLiRyZWZzLnBvcHVwLmNsb3NlKCk7XG5cdFx0XHR9LFxuXHRcdFx0cG9wdXBfc2F2YShlKXsgLy/lvLnmoYbnoa7lrppcblx0XHRcdFx0dmFyICR0aGlzID0gdGhpcztcblx0XHRcdFx0dmFyIGl0ZW1zID0gJHRoaXMuJGRhdGEuY2hlY2tfbGlzdC5pdGVtcztcblx0XHRcdFx0dmFyIGRhdGE9W107XG5cdFx0XHRcdHZhciBuYW1lPVwiXCI7XG5cdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRpZihpdGVtc1tpXS5jaGVjaz09dHJ1ZSl7XG5cdFx0XHRcdFx0XHRpZihuYW1lKVxuXHRcdFx0XHRcdFx0XHRuYW1lKz0nOyc7XG5cdFx0XHRcdFx0XHRuYW1lKz1pdGVtc1tpXS5uYW1lO1xuXHRcdFx0XHRcdFx0ZGF0YS5wdXNoKHtpZDppdGVtc1tpXS5pZCxuYW1lOml0ZW1zW2ldLm5hbWV9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYoISR0aGlzLiRkYXRhLnBvcHVwUGFyYW0pe1xuXHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi5o+Q56S6XCIsY29udGVudDpcInBvcHVwUGFyYW3kuLrnqbrvvIFcIixzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0JHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFskdGhpcy4kZGF0YS5wb3B1cFBhcmFtLmluZGV4XS5BdHRyWyR0aGlzLiRkYXRhLnBvcHVwUGFyYW0uaWluZGV4XS5WYWx1ZT1uYW1lO1xuXHRcdFx0XHRjb25zb2xlLmxvZyhkYXRhKTtcblx0XHRcdFx0dmFyIGNhbGxiYWNrX2V2ZW50aWQgPSAkdGhpcy4kZGF0YS5wb3B1cFBhcmFtLmJ1dHRvbl9jYWxsYmFjay50cmltKCk7XG5cdFx0XHRcdHZhciBpbmZvID0ge1xuXHRcdFx0XHQgICAgZXZlbnRpZDogY2FsbGJhY2tfZXZlbnRpZCxcblx0XHRcdFx0ICAgIGVkdHlwZTogXCIwXCIsXG5cdFx0XHRcdCAgICBwcm9qZWN0aWQ6ICcnLFxuXHRcdFx0XHQgICAgcmNsc2lkOiAnJyxcblx0XHRcdFx0ICAgIHJvYmppZDogJycsXG5cdFx0XHRcdCAgICB1c2VybG9naW46ICcnLFxuXHRcdFx0XHQgICAgY2xzaWQ6ICR0aGlzLiRkYXRhLnBhcmFtLmNsc2lkLFxuXHRcdFx0XHQgICAgb2JqaWQ6IFwiXCIsXG5cdFx0XHRcdCAgICBhdHRyOiAkdGhpcy4kZGF0YS5wb3B1cFBhcmFtLnJlcSxcblx0XHRcdFx0ICAgIGRhdGFKc29uOiBkYXRhXG5cdFx0XHRcdH1cblx0XHRcdFx0JHRoaXMuRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGluZm8sICR0aGlzLiRkYXRhLnBvcHVwUGFyYW0uZGF0YV9hdHRyKTtcblx0XHRcdFx0dGhpcy4kcmVmcy5wb3B1cC5jbG9zZSgpO1xuXHRcdFx0fSxcblx0XHRcdGNhbmNlbChlKXtcblx0XHRcdFx0dW5pLm5hdmlnYXRlQmFjayh7XG5cdFx0XHRcdFx0ZGVsdGE6MSAvL+i/lOWbnuWxguaVsO+8jDLliJnkuIrkuIrpobVcblx0XHRcdFx0fSk7XG5cdFx0XHR9LFxuXHRcdFx0b250YXAoZSl7IC8v5omr56CB5Yqf6IO9XG5cdFx0XHRcdHZhciAkZWxlID0gZTtcblx0XHRcdFx0Ly9jb25zb2xlLmxvZyhlLnRhcmdldClcblx0XHRcdFx0Z2V0QXBwKCkub25TY2FuKChyZXN1bHQpPT57XG5cdFx0XHRcdFx0Ly9jb25zb2xlLmxvZyhyZXN1bHQuZGVjb2RlZGF0YSk7XG5cdFx0XHRcdFx0dGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZS50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dLlZhbHVlPXJlc3VsdC5kZWNvZGVkYXRhO1xuXHRcdFx0XHRcdHVuaS5oaWRlS2V5Ym9hcmQoKTtcblx0XHRcdFx0XHR0aGlzLm9uZXZlbnQoJGVsZSxyZXN1bHQuZGVjb2RlZGF0YSk7XG5cdFx0XHRcdH0pXG5cdFx0XHR9LFxuXHRcdFx0b25hcnJvdyhpbmRleCxvcGVuKXtcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coaW5kZXgrJy0tJytvcGVuKTtcblx0XHRcdFx0dGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2luZGV4XS5PcGVuPW9wZW49PXRydWU/ZmFsc2U6dHJ1ZTtcblx0XHRcdH0sXG5cdFx0XHRvbmRhdGVUaW1lKGUpIHtcblx0XHRcdFx0Ly9jb25zb2xlLmxvZyhlLnRhcmdldClcblx0XHRcdFx0dGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZS50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dLlZhbHVlPWUudGFyZ2V0LnZhbHVlO1xuXHRcdFx0fSxcblx0XHRcdG9uY2hhbmdlKGUpIHtcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coZS50YXJnZXQpO1xuXHRcdFx0XHR2YXIgdmFsdWU9dGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZS50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dLmRpY3RpdGVtW2UudGFyZ2V0LnZhbHVlXTtcblx0XHRcdFx0dmFyIGRhdGFfYXR0ciA9IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtlLnRhcmdldC5kYXRhc2V0WydpbmRleCddXS5BdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2lpbmRleCddXTtcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coZGF0YV9hdHRyKTtcblx0XHRcdFx0aWYgKHZhbHVlLk5hbWUgIT0gZGF0YV9hdHRyLlZhbHVlKSB7XG5cdFx0XHRcdFx0dGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZS50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dLlZhbHVlPXZhbHVlLk5hbWU7XG5cdFx0XHRcdFx0Ly8gY29uc29sZS5sb2codGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZS50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dLlZhbHVlKTtcblx0XHRcdFx0XHR2YXIgZXZlbnRpZCA9IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtlLnRhcmdldC5kYXRhc2V0WydpbmRleCddXS5BdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2lpbmRleCddXS5hY3Rpb247XG5cdFx0XHRcdFx0aWYgKGV2ZW50aWQpIHtcblx0XHRcdFx0ICAgICAgICAvLyBzZWxmLmV2ZW50X25vX3N1YiA9IDE7XG5cdFx0XHRcdCAgICAgICAgdmFyIHJlcT1bXTtcblx0XHRcdFx0ICAgICAgICB2YXIgYXR0cmxpc3QgPSB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3Q7XG5cdFx0XHRcdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRybGlzdC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHQgICAgICAgIFx0dmFyIGF0dHIgPSBhdHRybGlzdFtpXS5BdHRyO1xuXHRcdFx0XHQgICAgICAgIFx0Zm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdCAgICAgICAgXHRcdHZhciBhciA9IGF0dHJbal07XG5cdFx0XHRcdCAgICAgICAgXHRcdGlmKGFyLlR5cGU9PSflvJXnlKjlr7nosaEo5aSa5LiqKScpXG5cdFx0XHRcdCAgICAgICAgXHRcdFx0aWYoYXIuVmFsdWU9PSfor7cnKSBhci5WYWx1ZT0nJztcblx0XHRcdFx0ICAgICAgICBcdFx0aWYoYXIuVHlwZT09J+W8leeUqOS6uuWRmCcgfHwgYXIuVHlwZT09J+W8leeUqOmhueebricpXG5cdFx0XHRcdCAgICAgICAgXHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWw6IGFyLlZhbElEID9hci5WYWxJRCA6JycgfSk7XG5cdFx0XHRcdCAgICAgICAgXHRcdGVsc2UgaWYoYXIuVHlwZT09J+W4g+WwlOWAvCcpXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbDogYXIuVmFsdWU/JzEnOicwJ30pO1xuXHRcdFx0XHQgICAgICAgIFx0XHRlbHNlXG5cdFx0XHRcdCAgICAgICAgXHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWw6IGFyLlZhbHVlID9hci5WYWx1ZSA6Jyd9KTtcblx0XHRcdFx0ICAgICAgICBcdH1cblx0XHRcdFx0ICAgICAgICB9XG5cdFx0XHRcdCAgICAgICAgdmFyIGluZm8gPSB7XG5cdFx0XHRcdCAgICAgICAgICAgIGV2ZW50aWQ6IGV2ZW50aWQsXG5cdFx0XHRcdCAgICAgICAgICAgIGVkdHlwZTogXCIwXCIsXG5cdFx0XHRcdCAgICAgICAgICAgIHByb2plY3RpZDogJycsXG5cdFx0XHRcdCAgICAgICAgICAgIHJjbHNpZDogJycsXG5cdFx0XHRcdCAgICAgICAgICAgIHJvYmppZDogJycsXG5cdFx0XHRcdCAgICAgICAgICAgIHVzZXJsb2dpbjogJycsXG5cdFx0XHRcdCAgICAgICAgICAgIGNsc2lkOiB0aGlzLiRkYXRhLnBhcmFtLmNsc2lkLFxuXHRcdFx0XHQgICAgICAgICAgICBvYmppZDogXCJcIixcblx0XHRcdFx0ICAgICAgICAgICAgYXR0cjogcmVxLFxuXHRcdFx0XHRcdFx0XHRkYXRhSnNvbjpbXVxuXHRcdFx0XHQgICAgICAgIH1cblx0XHRcdFx0ICAgICAgICB0aGlzLkRhdGFPYmpSdW5DdXN0b21FdmVudChpbmZvKTtcblx0XHRcdFx0ICAgIH1cblx0XHRcdFx0fVxuXHRcdFx0XHRcblx0XHRcdH0sXG5cdFx0XHRvbmNoYW5nZTIoaXRlbSx2YWx1ZSxkZWx2YWx1ZSkge1xuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhpdGVtKTtcblx0XHRcdFx0Ly8gY29uc29sZS5sb2codmFsdWUpO1xuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhkZWx2YWx1ZSk7XG5cdFx0XHRcdC8v5Li656m65pe277yM5riF56m65bGe5oCndmFsdWVcblx0XHRcdFx0aWYoaXRlbS5sZW5ndGg9PTApeyBcblx0XHRcdFx0XHR2YXIgaW5kZXggLGlpbmRleCxkaW5kZXg9MDtcblx0XHRcdFx0XHRmb3IodmFyIGkgaW4gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0KXtcblx0XHRcdFx0XHRcdGZvcih2YXIgaiBpbiB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbaV0uQXR0cil7XG5cdFx0XHRcdFx0XHRcdGlmKGRlbHZhbHVlWzBdLmF0dHIgPT0gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2ldLkF0dHJbal0uTmFtZSl7XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2ldLkF0dHJbal0uVmFsdWU9XCJcIjtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRcblx0XHRcdFx0Zm9yKHZhciB2IGluIGl0ZW0pe1xuXHRcdFx0XHRcdHZhciBpbmRleCAsaWluZGV4LGRpbmRleD0wO1xuXHRcdFx0XHRcdGZvcih2YXIgaSBpbiB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3Qpe1xuXHRcdFx0XHRcdFx0Zm9yKHZhciBqIGluIHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtpXS5BdHRyKXtcblx0XHRcdFx0XHRcdFx0aWYoaXRlbVt2XS5hdHRyID09IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtpXS5BdHRyW2pdLk5hbWUpe1xuXHRcdFx0XHRcdFx0XHRcdGluZGV4PWk7aWluZGV4PWo7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0dmFyIGl0ZW12YWx1ZSA9IGl0ZW1bdl07XG5cdFx0XHRcdFx0dmFyIGRhdGFfYXR0ciA9IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtpbmRleF0uQXR0cltpaW5kZXhdO1xuXHRcdFx0XHRcdFxuXHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKGRhdGFfYXR0cik7XG5cdFx0XHRcdFx0aWYgKGl0ZW12YWx1ZS5OYW1lICE9IGRhdGFfYXR0ci5WYWx1ZSkge1xuXHRcdFx0XHRcdFx0dGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2luZGV4XS5BdHRyW2lpbmRleF0uVmFsdWU9dmFsdWU7XG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyh0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbaW5kZXhdLkF0dHJbaWluZGV4XS5WYWx1ZSk7XG5cdFx0XHRcdFx0XHR2YXIgZXZlbnRpZCA9IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtpbmRleF0uQXR0cltpaW5kZXhdLmFjdGlvbjtcblx0XHRcdFx0XHRcdGlmIChldmVudGlkKSB7XG5cdFx0XHRcdFx0ICAgICAgICAvLyBzZWxmLmV2ZW50X25vX3N1YiA9IDE7XG5cdFx0XHRcdFx0ICAgICAgICB2YXIgcmVxPVtdO1xuXHRcdFx0XHRcdCAgICAgICAgdmFyIGF0dHJsaXN0ID0gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0O1xuXHRcdFx0XHRcdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRybGlzdC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdCAgICAgICAgXHR2YXIgYXR0ciA9IGF0dHJsaXN0W2ldLkF0dHI7XG5cdFx0XHRcdFx0ICAgICAgICBcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdCAgICAgICAgXHRcdHZhciBhciA9IGF0dHJbal07XG5cdFx0XHRcdFx0ICAgICAgICBcdFx0aWYoYXIuVHlwZT09J+W8leeUqOWvueixoSjlpJrkuKopJylcblx0XHRcdFx0XHQgICAgICAgIFx0XHRcdGlmKGFyLlZhbHVlPT0n6K+3JykgYXIuVmFsdWU9Jyc7XG5cdFx0XHRcdFx0ICAgICAgICBcdFx0aWYoYXIuVHlwZT09J+W8leeUqOS6uuWRmCcgfHwgYXIuVHlwZT09J+W8leeUqOmhueebricpXG5cdFx0XHRcdFx0ICAgICAgICBcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbDogYXIuVmFsSUQgP2FyLlZhbElEIDonJyB9KTtcblx0XHRcdFx0XHQgICAgICAgIFx0XHRlbHNlIGlmKGFyLlR5cGU9PSfluIPlsJTlgLwnKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbDogYXIuVmFsdWU/JzEnOicwJ30pO1xuXHRcdFx0XHRcdCAgICAgICAgXHRcdGVsc2UgaWYoYXIuVHlwZT09J+Wtl+WFuCcgfHwgYXIuVHlwZT09J+Wtl+WFuC3lrZfnrKbkuLInIHx8IGFyLlR5cGU9PSflrZflhbgt5pW05pWwJylcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWw6IGl0ZW12YWx1ZS5OYW1lfSk7XG5cdFx0XHRcdFx0ICAgICAgICBcdFx0ZWxzZVxuXHRcdFx0XHRcdCAgICAgICAgXHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWw6IGFyLlZhbHVlID9hci5WYWx1ZSA6Jyd9KTtcblx0XHRcdFx0XHQgICAgICAgIFx0fVxuXHRcdFx0XHRcdCAgICAgICAgfVxuXHRcdFx0XHRcdCAgICAgICAgdmFyIGluZm8gPSB7XG5cdFx0XHRcdFx0ICAgICAgICAgICAgZXZlbnRpZDogZXZlbnRpZCxcblx0XHRcdFx0XHQgICAgICAgICAgICBlZHR5cGU6IFwiMFwiLFxuXHRcdFx0XHRcdCAgICAgICAgICAgIHByb2plY3RpZDogJycsXG5cdFx0XHRcdFx0ICAgICAgICAgICAgcmNsc2lkOiAnJyxcblx0XHRcdFx0XHQgICAgICAgICAgICByb2JqaWQ6ICcnLFxuXHRcdFx0XHRcdCAgICAgICAgICAgIHVzZXJsb2dpbjogJycsXG5cdFx0XHRcdFx0ICAgICAgICAgICAgY2xzaWQ6IHRoaXMuJGRhdGEucGFyYW0uY2xzaWQsXG5cdFx0XHRcdFx0ICAgICAgICAgICAgb2JqaWQ6IFwiXCIsXG5cdFx0XHRcdFx0ICAgICAgICAgICAgYXR0cjogcmVxLFxuXHRcdFx0XHRcdFx0XHRcdGRhdGFKc29uOltdLFxuXHRcdFx0XHRcdCAgICAgICAgfVxuXHRcdFx0XHRcdCAgICAgICAgdGhpcy5EYXRhT2JqUnVuQ3VzdG9tRXZlbnQoaW5mbyk7XG5cdFx0XHRcdFx0ICAgIH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0XG5cdFx0XHRcdFxuXHRcdFx0fSxcblx0XHRcdG9uZXZlbnQoZSxkZWNvZGVkYXRhKXtcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coZS50YXJnZXQpO1xuXHRcdFx0XHR2YXIgZGF0YV9hdHRyID0gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZS50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dO1xuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhkZWNvZGVkYXRhKTtcblx0XHRcdFx0aWYgKGUudGFyZ2V0LnZhbHVlICE9IGRhdGFfYXR0ci5WYWx1ZSkge1xuXHRcdFx0XHRcdHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtlLnRhcmdldC5kYXRhc2V0WydpbmRleCddXS5BdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2lpbmRleCddXS5WYWx1ZT1kZWNvZGVkYXRhP2RlY29kZWRhdGE6ZS50YXJnZXQudmFsdWU7XG5cdFx0XHRcdFx0dmFyIGV2ZW50aWQgPSB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV0uYWN0aW9uO1xuXHRcdFx0XHRcdGlmIChldmVudGlkKSB7XG5cdFx0XHRcdCAgICAgICAgLy8gc2VsZi5ldmVudF9ub19zdWIgPSAxO1xuXHRcdFx0XHQgICAgICAgIHZhciByZXE9W107XG5cdFx0XHRcdCAgICAgICAgdmFyIGF0dHJsaXN0ID0gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0O1xuXHRcdFx0XHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmxpc3QubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0ICAgICAgICBcdHZhciBhdHRyID0gYXR0cmxpc3RbaV0uQXR0cjtcblx0XHRcdFx0ICAgICAgICBcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xuXHRcdFx0XHQgICAgICAgIFx0XHR2YXIgYXIgPSBhdHRyW2pdO1xuXHRcdFx0XHQgICAgICAgIFx0XHRpZihhci5UeXBlPT0n5byV55So5a+56LGhKOWkmuS4qiknKVxuXHRcdFx0XHQgICAgICAgIFx0XHRcdGlmKGFyLlZhbHVlPT0n6K+3JykgYXIuVmFsdWU9Jyc7XG5cdFx0XHRcdCAgICAgICAgXHRcdGlmKGFyLlR5cGU9PSflvJXnlKjkurrlkZgnIHx8IGFyLlR5cGU9PSflvJXnlKjpobnnm64nKVxuXHRcdFx0XHQgICAgICAgIFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsOiBhci5WYWxJRCA/YXIuVmFsSUQgOicnIH0pO1xuXHRcdFx0XHQgICAgICAgIFx0XHRlbHNlIGlmKGFyLlR5cGU9PSfluIPlsJTlgLwnKVxuXHRcdFx0XHRcdFx0XHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWw6IGFyLlZhbHVlPycxJzonMCd9KTtcblx0XHRcdFx0ICAgICAgICBcdFx0ZWxzZVxuXHRcdFx0XHQgICAgICAgIFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsOiBhci5WYWx1ZSA/YXIuVmFsdWUgOicnfSk7XG5cdFx0XHRcdCAgICAgICAgXHR9XG5cdFx0XHRcdCAgICAgICAgfVxuXHRcdFx0XHQgICAgICAgIHZhciBpbmZvID0ge1xuXHRcdFx0XHQgICAgICAgICAgICBldmVudGlkOiBldmVudGlkLFxuXHRcdFx0XHQgICAgICAgICAgICBlZHR5cGU6IFwiMFwiLFxuXHRcdFx0XHQgICAgICAgICAgICBwcm9qZWN0aWQ6ICcnLFxuXHRcdFx0XHQgICAgICAgICAgICByY2xzaWQ6ICcnLFxuXHRcdFx0XHQgICAgICAgICAgICByb2JqaWQ6ICcnLFxuXHRcdFx0XHQgICAgICAgICAgICB1c2VybG9naW46ICcnLFxuXHRcdFx0XHQgICAgICAgICAgICBjbHNpZDogdGhpcy4kZGF0YS5wYXJhbS5jbHNpZCxcblx0XHRcdFx0ICAgICAgICAgICAgb2JqaWQ6IFwiXCIsXG5cdFx0XHRcdCAgICAgICAgICAgIGF0dHI6IHJlcSxcblx0XHRcdFx0XHRcdFx0ZGF0YUpzb246W10sXG5cdFx0XHRcdCAgICAgICAgfVxuXHRcdFx0XHQgICAgICAgIHRoaXMuRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGluZm8sIGRhdGFfYXR0cik7XG5cdFx0XHRcdCAgICB9XG5cdFx0XHRcdH1cblx0XHRcdFx0XG5cdFx0XHR9LFxuXHRcdFx0b25jaGVjayhlKSB7XG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKGUudGFyZ2V0KTtcblx0XHRcdFx0dmFyIGlzY2hlY2tlZCA9IGUudGFyZ2V0LmRhdGFzZXQuaXNjaGVjaz9mYWxzZTp0cnVlO1xuXHRcdFx0XHR2YXIgZGF0YV9hdHRyID0gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZS50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dO1xuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhkYXRhX2F0dHIpO1xuXHRcdFx0XHRpZiAoaXNjaGVja2VkICE9IGRhdGFfYXR0ci5WYWx1ZSkge1xuXHRcdFx0XHRcdHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtlLnRhcmdldC5kYXRhc2V0WydpbmRleCddXS5BdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2lpbmRleCddXS5WYWx1ZT1pc2NoZWNrZWQ7XG5cdFx0XHRcdFx0dmFyIGV2ZW50aWQgPSB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV0uYWN0aW9uO1xuXHRcdFx0XHRcdGlmIChldmVudGlkKSB7XG5cdFx0XHRcdCAgICAgICAgLy8gc2VsZi5ldmVudF9ub19zdWIgPSAxO1xuXHRcdFx0XHQgICAgICAgIHZhciByZXE9W107XG5cdFx0XHRcdCAgICAgICAgdmFyIGF0dHJsaXN0ID0gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0O1xuXHRcdFx0XHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmxpc3QubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0ICAgICAgICBcdHZhciBhdHRyID0gYXR0cmxpc3RbaV0uQXR0cjtcblx0XHRcdFx0ICAgICAgICBcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xuXHRcdFx0XHQgICAgICAgIFx0XHR2YXIgYXIgPSBhdHRyW2pdO1xuXHRcdFx0XHQgICAgICAgIFx0XHRpZihhci5UeXBlPT0n5byV55So5a+56LGhKOWkmuS4qiknKVxuXHRcdFx0XHQgICAgICAgIFx0XHRcdGlmKGFyLlZhbHVlPT0n6K+3JykgYXIuVmFsdWU9Jyc7XG5cdFx0XHRcdCAgICAgICAgXHRcdGlmKGFyLlR5cGU9PSflvJXnlKjkurrlkZgnIHx8IGFyLlR5cGU9PSflvJXnlKjpobnnm64nKVxuXHRcdFx0XHQgICAgICAgIFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsOiBhci5WYWxJRCA/YXIuVmFsSUQgOicnIH0pO1xuXHRcdFx0XHQgICAgICAgIFx0XHRlbHNlIGlmKGFyLlR5cGU9PSfluIPlsJTlgLwnKVxuXHRcdFx0XHRcdFx0XHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWw6IGFyLlZhbHVlPycxJzonMCd9KTtcblx0XHRcdFx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbDogYXIuVmFsdWUgP2FyLlZhbHVlIDonJ30pO1xuXHRcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHQgICAgICAgIFx0fVxuXHRcdFx0XHQgICAgICAgIH1cblx0XHRcdFx0ICAgICAgICB2YXIgaW5mbyA9IHtcblx0XHRcdFx0ICAgICAgICAgICAgZXZlbnRpZDogZXZlbnRpZCxcblx0XHRcdFx0ICAgICAgICAgICAgZWR0eXBlOiBcIjBcIixcblx0XHRcdFx0ICAgICAgICAgICAgcHJvamVjdGlkOiAnJyxcblx0XHRcdFx0ICAgICAgICAgICAgcmNsc2lkOiAnJyxcblx0XHRcdFx0ICAgICAgICAgICAgcm9iamlkOiAnJyxcblx0XHRcdFx0ICAgICAgICAgICAgdXNlcmxvZ2luOiAnJyxcblx0XHRcdFx0ICAgICAgICAgICAgY2xzaWQ6IHRoaXMuJGRhdGEucGFyYW0uY2xzaWQsXG5cdFx0XHRcdCAgICAgICAgICAgIG9iamlkOiBcIlwiLFxuXHRcdFx0XHQgICAgICAgICAgICBhdHRyOiByZXEsXG5cdFx0XHRcdFx0XHRcdGRhdGFKc29uOltdLFxuXHRcdFx0XHQgICAgICAgIH1cblx0XHRcdFx0ICAgICAgICB0aGlzLkRhdGFPYmpSdW5DdXN0b21FdmVudChpbmZvKTtcblx0XHRcdFx0ICAgIH1cblx0XHRcdFx0fVxuXHRcdFx0XHRcblx0XHRcdH0sXG5cdFx0XHRpbnB1dFZhbExpc3RJc0RlbChpbmRleCl7XG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKGluZGV4KTtcbiAgICAgICAgICAgICAgICB0aGlzLiRkYXRhLmlucHV0VmFsTGlzdC5zcGxpY2UoaW5kZXgsIDEpOyAvL+WIoOmZpHRhYlBhZ2Vqc29u55qE5YaF5a65XG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKHRoaXMuJGRhdGEuaW5wdXRWYWxMaXN0KTtcblx0XHRcdH0sXG5cdFx0XHRhZGRyZXNzY2hhbmdlKGUpIHtcblx0XHRcdCAgICAvLyBjb25zb2xlLmxvZyhlLnRhcmdldCk7XG5cdFx0XHQgICAgY29uc29sZS5sb2coZS5kYXRhLmpvaW4oJzsnKSlcblx0XHRcdFx0dGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZS50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dLlZhbHVlPWUuZGF0YS5qb2luKCc7Jyk7XG5cdFx0XHR9LFxuXHRcdFx0Y2xhc3NBdHRyX0FkZFBlcihpbmRleCxpaW5kZXgpe1xuXHRcdFx0XHR2YXIgcGFyYW09e2luZGV4OmluZGV4LGlpbmRleDppaW5kZXh9O1xuXHRcdFx0XHR2YXIgJHRoaXMgPSB0aGlzO1xuXHRcdFx0XHR1bmkubmF2aWdhdGVUbyh7XG5cdFx0XHRcdFx0dXJsOicuLi9zZWxwc24vaW5kZXg/bXVsaXQ9ZmFsc2UmcGFyYW09JytKU09OLnN0cmluZ2lmeShwYXJhbSksXG5cdFx0XHRcdFx0ZXZlbnRzOntcblx0XHRcdFx0XHRcdEFkZFBlcihkYXRhLHBhcmFtKXsgXG5cdFx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKHBhcmFtKTtcblx0XHRcdFx0XHRcdFx0Y29uc29sZS5sb2coZGF0YSk7XG5cdFx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbcGFyYW0uaW5kZXhdLkF0dHJbcGFyYW0uaWluZGV4XS5WYWx1ZT1kYXRhWzBdLk5hbWU7XG5cdFx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbcGFyYW0uaW5kZXhdLkF0dHJbcGFyYW0uaWluZGV4XS5WYWxJRD1kYXRhWzBdLkxvZ2luKyc7JytkYXRhWzBdLk5hbWU7XG5cdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHR2YXIgZXZlbnRpZCA9ICR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbcGFyYW0uaW5kZXhdLkF0dHJbcGFyYW0uaWluZGV4XS5hY3Rpb247XG5cdFx0XHRcdFx0XHRcdGlmIChldmVudGlkKSB7XG5cdFx0XHRcdFx0XHRcdCAgICBldmVudGlkID0gZXZlbnRpZC50cmltKCk7XG5cdFx0XHRcdFx0XHRcdCAgICBpZiAoZXZlbnRpZCkge1xuXHRcdFx0XHRcdFx0XHQgICAgICAgIHZhciBpbmZvID0ge1xuXHRcdFx0XHRcdFx0XHQgICAgICAgICAgICBldmVudGlkOiBldmVudGlkLFxuXHRcdFx0XHRcdFx0XHQgICAgICAgICAgICBlZHR5cGU6IFwiNFwiLFxuXHRcdFx0XHRcdFx0XHQgICAgICAgICAgICBwcm9qZWN0aWQ6IFwiXCIsXG5cdFx0XHRcdFx0XHRcdCAgICAgICAgICAgIHJjbHNpZDogXCJcIixcblx0XHRcdFx0XHRcdFx0ICAgICAgICAgICAgcm9iamlkOiBcIlwiLFxuXHRcdFx0XHRcdFx0XHQgICAgICAgICAgICB1c2VybG9naW46IGRhdGFbMF0uTG9naW4sXG5cdFx0XHRcdFx0XHRcdCAgICAgICAgICAgIGNsc2lkOiAkdGhpcy4kZGF0YS5wYXJhbS5jbHNpZCxcblx0XHRcdFx0XHRcdFx0ICAgICAgICAgICAgb2JqaWQ6IFwiXCIsXG5cdFx0XHRcdFx0XHRcdCAgICAgICAgICAgIGF0dHI6IFtdLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRhSnNvbjpbXSxcblx0XHRcdFx0XHRcdFx0ICAgICAgICB9XG5cdFx0XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0XHRcdC8vIHZhciBkYXRhX2F0dHIgPSAkdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W3BhcmFtLmluZGV4XS5BdHRyW3BhcmFtLmlpbmRleF07XG5cdFx0XHRcdFx0XHRcdCAgICAgICAgJHRoaXMuRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGluZm8pO1xuXHRcdFx0XHRcdFx0XHQgICAgfVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH0sXG5cdFx0XHRjbGFzc0F0dHJfQWRkUmVmKGUpe1xuXHRcdFx0XHRjb25zb2xlLmxvZyhlLnRhcmdldCk7XG5cdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi5o+Q56S6XCIsY29udGVudDpcIuatpOWKn+iDvei/mOacquWunueOsO+8gVwiLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHQvLyB2YXIgdmFsdWU9dGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZS50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dLlJlbENsc1tlLnRhcmdldC52YWx1ZV07XG5cdFx0XHRcdC8vIHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtlLnRhcmdldC5kYXRhc2V0WydpbmRleCddXS5BdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2lpbmRleCddXS5WYWx1ZT12YWx1ZTtcblx0XHRcdH0sXG5cdFx0XHRjbGFzc0F0dHJfQWRkUHJqKGluZGV4LGlpbmRleCl7XG5cdFx0XHRcdHZhciBwYXJhbT17aW5kZXg6aW5kZXgsaWluZGV4OmlpbmRleH07XG5cdFx0XHRcdHZhciAkdGhpcyA9IHRoaXM7XG5cdFx0XHRcdHVuaS5uYXZpZ2F0ZVRvKHtcblx0XHRcdFx0XHR1cmw6Jy4uL3NlbFByai9pbmRleD9yZWxhdGlvbj0tMSZwYXJhbT0nK0pTT04uc3RyaW5naWZ5KHBhcmFtKSxcblx0XHRcdFx0XHRldmVudHM6e1xuXHRcdFx0XHRcdFx0QWRkUGVyKGRhdGEscGFyYW0peyBcblx0XHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2cocGFyYW0pO1xuXHRcdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhkYXRhKTtcblx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtwYXJhbS5pbmRleF0uQXR0cltwYXJhbS5paW5kZXhdLlZhbHVlPWRhdGFbMF0uTmFtZTtcblx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtwYXJhbS5pbmRleF0uQXR0cltwYXJhbS5paW5kZXhdLlZhbElEPWRhdGFbMF0uSUQrJzsnK2RhdGFbMF0uTmFtZTtcblx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdHZhciBldmVudGlkID0gJHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtwYXJhbS5pbmRleF0uQXR0cltwYXJhbS5paW5kZXhdLmFjdGlvbjtcblx0XHRcdFx0XHRcdFx0aWYgKGV2ZW50aWQpIHtcblx0XHRcdFx0XHRcdFx0ICAgIGV2ZW50aWQgPSBldmVudGlkLnRyaW0oKTtcblx0XHRcdFx0XHRcdFx0ICAgIGlmIChldmVudGlkKSB7XG5cdFx0XHRcdFx0XHRcdCAgICAgICAgdmFyIGluZm8gPSB7XG5cdFx0XHRcdFx0XHRcdCAgICAgICAgICAgIGV2ZW50aWQ6IGV2ZW50aWQsXG5cdFx0XHRcdFx0XHRcdCAgICAgICAgICAgIGVkdHlwZTogXCIyXCIsXG5cdFx0XHRcdFx0XHRcdCAgICAgICAgICAgIHByb2plY3RpZDogZGF0YVswXS5JRCxcblx0XHRcdFx0XHRcdFx0ICAgICAgICAgICAgcmNsc2lkOiBcIlwiLFxuXHRcdFx0XHRcdFx0XHQgICAgICAgICAgICByb2JqaWQ6IFwiXCIsXG5cdFx0XHRcdFx0XHRcdCAgICAgICAgICAgIHVzZXJsb2dpbjogXCJcIixcblx0XHRcdFx0XHRcdFx0ICAgICAgICAgICAgY2xzaWQ6ICR0aGlzLiRkYXRhLnBhcmFtLmNsc2lkLFxuXHRcdFx0XHRcdFx0XHQgICAgICAgICAgICBvYmppZDogXCJcIixcblx0XHRcdFx0XHRcdFx0ICAgICAgICAgICAgYXR0cjogW10sXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGRhdGFKc29uOltdLFxuXHRcdFx0XHRcdFx0XHQgICAgICAgIH1cblx0XHRcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHQgICAgICAgIC8vIHZhciBkYXRhX2F0dHIgPSAkdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W3BhcmFtLmluZGV4XS5BdHRyW3BhcmFtLmlpbmRleF07XG5cdFx0XHRcdFx0XHRcdCAgICAgICAgJHRoaXMuRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGluZm8pO1xuXHRcdFx0XHRcdFx0XHQgICAgfVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH0sXG5cdFx0XHQvL+ehruWumlxuXHRcdFx0c2F2YSgpe1xuXHRcdFx0XHRpZiAodGhpcy4kZGF0YS5lZGl0X29rX2V2ZW50KVxuXHRcdFx0XHRcdHRoaXMuT0tEYXRhT2JqUnVuQ3VzdG9tRXZlbnQoKTtcblx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdHRoaXMuYWRkKCk7XG5cdFx0XHR9LFxuXHRcdFx0YWRkKCl7XG5cdFx0XHRcdHVuaS5zaG93TG9hZGluZyh7XG5cdFx0XHRcdFx0dGl0bGU6XCLliqDovb3kuK0uLi5cIixcblx0XHRcdFx0XHRtYXNrOnRydWVcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHZhciByZXE9W107XG5cdFx0XHRcdHZhciBhdHRybGlzdCA9IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdDtcblx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhdHRybGlzdC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdHZhciBhdHRyID0gYXR0cmxpc3RbaV0uQXR0cjtcblx0XHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IGF0dHIubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0XHRcdHZhciBhciA9IGF0dHJbal07XG5cdFx0XHRcdFx0XHRpZihhci5WYWx1ZT09J+ivt+mAieaLqScgfHwgYXIuVmFsdWU9PSfigJTigJTor7fpgInmi6nigJTigJQnKSBhci5WYWx1ZT0nJztcblx0XHRcdFx0XHRcdGlmKGFyLlR5cGU9PSflvJXnlKjlr7nosaEo5aSa5LiqKScpXG5cdFx0XHRcdFx0XHRcdGlmKGFyLlZhbHVlPT0n6K+3JykgYXIuVmFsdWU9Jyc7XG5cdFx0XHRcdCAgICAgICAgaWYoYXIuVHlwZT09J+W8leeUqOS6uuWRmCcgfHwgYXIuVHlwZT09J+W8leeUqOmhueebricpXG5cdFx0XHRcdCAgICAgICAgXHRyZXEucHVzaCh7IG5hbWU6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWxJRCA/YXIuVmFsSUQgOicnIH0pO1xuXHRcdFx0XHQgICAgICAgIGVsc2UgaWYoYXIuVHlwZT09J+W4g+WwlOWAvCcpXG5cdFx0XHRcdFx0XHRcdHJlcS5wdXNoKHsgbmFtZTogYXIuTmFtZSwgdmFsdWU6IGFyLlZhbHVlPycxJzonMCd9KTtcblx0XHRcdFx0ICAgICAgICBlbHNlIGlmKGFyLlR5cGU9PSflrZflhbgnIHx8IGFyLlR5cGU9PSflrZflhbgt5a2X56ym5LiyJyB8fCBhci5UeXBlPT0n5a2X5YW4LeaVtOaVsCcpe1xuXHRcdFx0XHRcdFx0XHRpZihhci5zZWxlY3Q9PXRydWUpeyAvL+WIpOaWreS4i+aLieaYr+WQpuWkmumAiVxuXHRcdFx0XHRcdFx0XHRcdHZhciB2YWxTdHIgPVwiXCI7XG5cdFx0XHRcdFx0XHRcdFx0Zm9yKHZhciB2IGluIGFyLlZhbHVlKXtcblx0XHRcdFx0XHRcdFx0XHRcdGlmKHZhbFN0cilcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsU3RyKz1cIjtcIjtcblx0XHRcdFx0XHRcdFx0XHRcdHZhbFN0cis9YXIuVmFsdWVbdl07XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdHJlcS5wdXNoKHsgbmFtZTogYXIuTmFtZSwgdmFsdWU6IHZhbFN0cn0pO1xuXHRcdFx0XHRcdFx0XHR9ZWxzZVxuXHRcdFx0XHRcdFx0XHRcdHJlcS5wdXNoKHsgbmFtZTogYXIuTmFtZSwgdmFsdWU6IGFyLlZhbHVlfSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHRcdHJlcS5wdXNoKHsgbmFtZTogYXIuTmFtZSwgdmFsdWU6IGFyLlZhbHVlID9hci5WYWx1ZSA6Jyd9KTtcblx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRpZiAoYXIubm90ZW1wdHkgPT0gdHJ1ZSAmJiAhYXIuVmFsdWUpIHtcblx0XHRcdFx0XHRcdC8vIGlmKGFyLk5vdEVtcHR5PT0nMScpe1xuXHRcdFx0XHRcdFx0XHR1bmkuaGlkZUxvYWRpbmcoKTtcblx0XHRcdFx0XHRcdFx0Ly8gdW5pLnNob3dUb2FzdCh7dGl0bGU6YXIuRGlzcE5hbWUrJ+S4jeiDveS4uuepuu+8gScsaWNvbjpcInN1Y2Nlc3NcIixkdXJhdGlvbjozMDAwfSk7XG5cdFx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi5o+Q56S6XCIsY29udGVudDphci5EaXNwTmFtZSsn5LiN6IO95Li656m677yBJyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHR2YXIgZW52aXJvbWVudCA9IHtcblx0XHRcdFx0ICAgICAnZnVuY3Rpb24nOiAnMzAwMCcsIC8vIOWKn+iDveeCuee8luWPt1xuXHRcdFx0XHQgICAgIGNsc19pZDogdGhpcy4kZGF0YS5wYXJhbS5jbHNpZCwgICAgIC8vIOWKn+iDveeCueS4u+aVsOaNruexu+agh+ivhlxuXHRcdFx0XHQgICAgICdidXR0b24nOiAndG9wJywgICAvLyB0b3AvYm90dG9tXG5cdFx0XHRcdCAgICAgYnV0dG9uX25hbWU6ICfmlrDlop4nLFxuXHRcdFx0XHQgICAgIG1hc3Rlcjoge1xuXHRcdFx0XHQgICAgICAgICBjbHNfaWQ6IHRoaXMuJGRhdGEucGFyYW0uY2xzaWQsIFxuXHRcdFx0XHQgICAgIH1cblx0XHRcdFx0fTtcblx0XHRcdFx0XG5cdFx0XHRcdGVudmlyb21lbnQgPSBCYXNlNjQuZW5jb2RlKEpTT04uc3RyaW5naWZ5KGVudmlyb21lbnQpKTsvL+WwhuWtl+espuS4sui9rOaNouS4umJhc2U2NOe8lueggVxuXHRcdFx0XHR2YXIgb2JqX2F0dHI9e307XG5cdFx0XHRcdHJlcS5mb3JFYWNoKGl0ZW09Pntcblx0XHRcdFx0XHRvYmpfYXR0cltpdGVtLm5hbWVdID0gaXRlbS52YWx1ZTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKG9ial9hdHRyKTtcblx0XHRcdFx0Ly8gdmFyIGRhdGFJbmZvPXtcblx0XHRcdFx0Ly8gICAgIGNsYXNzX2lkOiB0aGlzLiRkYXRhLnBhcmFtLmNsc2lkLCBkYXRhX29ial9pZDogJycsIG1hc3RlcmNsc2lkOiAnJyxcblx0XHRcdFx0Ly8gICAgIHJlcTogSlNPTi5zdHJpbmdpZnkocmVxKSwgdXBmaWxlOiBKU09OLnN0cmluZ2lmeShbXSksIHBvc3RfZGF0YTogSlNPTi5zdHJpbmdpZnkoe30pLFxuXHRcdFx0XHQvLyAgICAgY29tcG9zZTogSlNPTi5zdHJpbmdpZnkoW10pLCByZWZkYXRhc3RvcmU6IEpTT04uc3RyaW5naWZ5KFtdKSwgZXh0aW5mbzogSlNPTi5zdHJpbmdpZnkoZW52aXJvbWVudCksIFxuXHRcdFx0XHQvLyBcdG5vdF90cmlnZ2VyX3N5c19ldmVudDogJydcblx0XHRcdFx0Ly8gfTtcblx0XHRcdFx0dmFyIGRhdGFJbmZvPXtcblx0XHRcdFx0XHRjbGFzc19pZDogdGhpcy4kZGF0YS5wYXJhbS5jbHNpZCxcblx0XHRcdFx0XHRjbGFzc19uYW1lOicnLFxuXHRcdFx0XHRcdG1hc3Rlcl9jbHNfaWQ6JycsXG5cdFx0XHRcdFx0bWFzdGVyX29ial9pZDonJyxcblx0XHRcdFx0XHRjcmVhdG9yOicnLFxuXHRcdFx0XHRcdGNyZWF0b3JfbmFtZTonJyxcblx0XHRcdFx0XHRub3RfdHJpZ2dlcl9ldmVudDonJyxcblx0XHRcdFx0XHR1cGRhdGVfZXhpc3Q6JycsXG5cdFx0XHRcdFx0cG9zdF9wcm9jZXNzOicnLFxuXHRcdFx0XHRcdGV4dF9pbmZvOiBlbnZpcm9tZW50LFxuXHRcdFx0XHRcdG9ial9hdHRyOiBvYmpfYXR0clxuXHRcdFx0XHR9O1xuXHRcdFx0XHRjb25zb2xlLmxvZyhkYXRhSW5mbyk7XG5cdFx0XHRcdC8vIHJldHVyblxuXHRcdFx0XHR0aGlzLiRzdG9yZS5kaXNwYXRjaCgnY3JlYXRlRGF0YU9iaicsZGF0YUluZm8pLnRoZW4oc3VjY2Vzcz0+e1xuXHRcdFx0XHRcdGNvbnNvbGUubG9nKHN1Y2Nlc3MpO1xuXHRcdFx0XHRcdHVuaS5oaWRlTG9hZGluZygpO1xuXHRcdFx0XHRcdGlmIChzdWNjZXNzLmVycl9jb2RlID09IDApIHtcblx0XHRcdFx0XHRcdHZhciByZXN1bHQgPSBzdWNjZXNzLnJlc3VsdDtcblx0XHRcdFx0XHRcdC8vIGlmKHJlc3VsdC5yZXN1bHRfdHlwZSA9PSAwKXt9XG5cdFx0XHRcdFx0XHRpZihzdWNjZXNzLnJlc3VsdC5hY3Rpb24pe1xuXHRcdFx0XHRcdFx0XHR2YXIgYWN0aW9uID0gSlNPTi5wYXJzZShzdWNjZXNzLnJlc3VsdC5hY3Rpb24pO1xuXHRcdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhhY3Rpb24pO1xuXHRcdFx0XHRcdFx0XHRpZihhY3Rpb24ucmV0PT0nMCcpe1xuXHRcdFx0XHRcdFx0XHRcdGlmIChhY3Rpb24ucmV0ICE9IDApIHtcblx0XHRcdFx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi5o+Q56S6XCIsY29udGVudDon5omn6KGM6ISa5pys5aSx6LSl77yMJyArIGFjdGlvbi5yZXN1bHQsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdGlmIChhY3Rpb24uaW5mbykge1xuXHRcdFx0XHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLmj5DnpLpcIixjb250ZW50OifmiafooYzohJrmnKzlpLHotKXvvIwnICsgYWN0aW9uLmluZm8sc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdGlmKGFjdGlvbi5yZXN1bHRfdHlwZT09JzAnKXtcblx0XHRcdFx0XHRcdFx0XHRcdHVuaS5zaG93VG9hc3Qoe3RpdGxlOmFjdGlvbi5yZXN1bHQsaWNvbjpcInN1Y2Nlc3NcIixkdXJhdGlvbjozMDAwfSk7XG5cdFx0XHRcdFx0XHRcdFx0fSBcblx0XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0XHQvLyBcIntcInJldFwiOjAsIFwicmVzdWx0X3R5cGVcIjowLCBcInJlc3VsdFwiOlwi5Yib5bu65oiQ5YqfMTIzMTIzMTIzXCIsXCJpbmZvXCI6XCJcIn1cIlxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2Vcblx0XHRcdFx0XHRcdFx0dW5pLnNob3dUb2FzdCh7dGl0bGU6XCLliJvlu7rmiJDlip/vvIFcIixpY29uOlwic3VjY2Vzc1wiLGR1cmF0aW9uOjMwMDB9KTtcblx0XHRcdFx0XHRcdC8v5Yi35pawXG5cdFx0XHRcdFx0XHR1bmkucmVkaXJlY3RUbyh7XG5cdFx0XHRcdFx0XHRcdHVybDonLi4vbW9kYWwvMzAxOD9wYXJhbT0nK0pTT04uc3RyaW5naWZ5KHRoaXMuJGRhdGEucGFyYW0pK1wiJnRpdGxlbmFtZT1cIit0aGlzLiRkYXRhLnRpdGxlXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdC8vIHRoaXMuY2xhc3NfYXR0cl9pbml0KCk7XG5cdFx0XHRcdFx0fWVsc2V7XG5cdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivr1wiLGNvbnRlbnQ6c3VjY2Vzcy5lcnJfbXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSkuY2F0Y2goZXg9Pntcblx0XHRcdFx0XHRjb25zb2xlLmxvZyhleCk7XG5cdFx0XHRcdFx0dW5pLmhpZGVMb2FkaW5nKCk7XG5cdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLmj5DnpLpcIixjb250ZW50OmV4LmVyck1zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9LFxuXHRcdFx0aW5pX0RhdGFPYmpSdW5DdXN0b21FdmVudChpbmZvKXtcblx0XHRcdFx0dmFyIHBhcmFtID0ge1xuXHRcdFx0XHQgICAgRWRpdFN0eWxlOiB0aGlzLiRkYXRhLnBhcmFtLkVkaXRfZGxnLk5hbWUsXG5cdFx0XHRcdCAgICBWaWV3U3R5bGU6IHRoaXMuJGRhdGEucGFyYW0uRWRpdF9kbGcuTmFtZSxcblx0XHRcdFx0ICAgIE5vdFRyaWdnZXJTeXNFdmVudDogMCxcblx0XHRcdFx0ICAgIGVudmlyb21lbnQ6IHtcblx0XHRcdFx0ICAgICAgICAnZnVuY3Rpb24nOiAnMzAwMCcsIC8vIOWKn+iDveeCuee8luWPt1xuXHRcdFx0XHQgICAgICAgIGNsc19pZDogdGhpcy4kZGF0YS5wYXJhbS5jbHNpZCwgICAgIC8vIOWKn+iDveeCueS4u+aVsOaNruexu+agh+ivhlxuXHRcdFx0XHQgICAgICAgICdidXR0b24nOiAndG9wJywgICAvLyB0b3AvYm90dG9tXG5cdFx0XHRcdCAgICAgICAgYnV0dG9uX25hbWU6ICfmlrDlop4nLFxuXHRcdFx0XHQgICAgICAgIG1hc3Rlcjoge1xuXHRcdFx0XHQgICAgICAgICAgICBjbHNfaWQ6IHRoaXMuJGRhdGEucGFyYW0uY2xzaWQsIC8vIGJ1dHRvbj1ib3R0b23ml7YgbWFzdGVy55qEY2xzX2lkXG5cdFx0XHRcdCAgICAgICAgICAgIC8vb2JqX2lkOiAnJyAgLy8gYnV0dG9uPWJvdHRvbeaXtiBtYXN0ZXLnmoRvYmpfaWRcblx0XHRcdFx0ICAgICAgICB9XG5cdFx0XHRcdCAgICB9XG5cdFx0XHRcdH1cblx0XHRcdFx0dmFyIGlucHV0cGFyYW1ldGVyID0gJyc7XG5cdFx0XHRcdHZhciBnbG9iYWxfYXR0ciA9ICcnO1xuXHRcdFx0XHRcblx0XHRcdFx0cGFyYW0uZW52aXJvbWVudCA9IEJhc2U2NC5lbmNvZGUoSlNPTi5zdHJpbmdpZnkocGFyYW0uZW52aXJvbWVudCkpOy8v5bCG5a2X56ym5Liy6L2s5o2i5Li6YmFzZTY057yW56CBXG5cdFx0XHRcdHZhciBvYmpfYXR0cj17fTtcblx0XHRcdFx0aW5mby5hdHRyLmZvckVhY2goaXRlbT0+e1xuXHRcdFx0XHRcdG9ial9hdHRyW2l0ZW0uYXR0cl0gPSBpdGVtLnZhbDtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKG9ial9hdHRyKTtcblx0XHRcdFx0Ly8gdmFyIGRhdGFJbmZvID0ge1xuICAgIC8vICAgICAgICAgICAgICAgICBlZHR5cGU6IGluZm8uZWR0eXBlLCBldmVudGlkOiBpbmZvLmV2ZW50aWQsIHByb2plY3RpZDogaW5mby5wcm9qZWN0aWQsXG4gICAgLy8gICAgICAgICAgICAgICAgIHJjbHNpZDogaW5mby5yY2xzaWQsIHJvYmppZDogaW5mby5yb2JqaWQsIHVzZXJsb2dpbjogaW5mby51c2VybG9naW4sIGNsc2lkOiBpbmZvLmNsc2lkLCBvYmppZDogaW5mby5vYmppZCxcbiAgICAvLyAgICAgICAgICAgICAgICAgYXR0cjogSlNPTi5zdHJpbmdpZnkoaW5mby5hdHRyKSwgZXh0aW5mbzogSlNPTi5zdHJpbmdpZnkocGFyYW0uZW52aXJvbWVudCksIGlucHV0cGFyYW1ldGVyOiBpbnB1dHBhcmFtZXRlciwgZ2xvYmFsX2F0dHI6IGdsb2JhbF9hdHRyXG4gICAgLy8gICAgICAgICAgICAgfVxuXHRcdFx0XHRpZighaW5mby5ldmVudGlkLmluY2x1ZGVzKCd7JykpIGluZm8uZXZlbnRpZCA9ICd7JytpbmZvLmV2ZW50aWQrJ30nO1xuXHRcdFx0XHR2YXIgZGF0YUluZm89e1xuXHRcdFx0XHQgIGVkX3R5cGU6IGluZm8uZWR0eXBlLFxuXHRcdFx0XHQgIHN0YXJ0X3RyYW5zYWN0aW9uOiAnJyxcblx0XHRcdFx0ICBjbGFzc19pZDogaW5mby5jbHNpZCxcblx0XHRcdFx0ICBjbGFzc19uYW1lOiAnJyxcblx0XHRcdFx0ICBldmVudF9pZDogaW5mby5ldmVudGlkLFxuXHRcdFx0XHQgIGV2ZW50X25hbWU6ICcnLFxuXHRcdFx0XHQgIGRhdGFfb2JqX2lkOiBpbmZvLm9iamlkLFxuXHRcdFx0XHQgIG9ial9hdHRyOiBvYmpfYXR0cixcblx0XHRcdFx0ICBwcmpfaWQ6IGluZm8ucHJvamVjdGlkLFxuXHRcdFx0XHQgIHJlZl9jbHNfaWQ6IGluZm8ucmNsc2lkLFxuXHRcdFx0XHQgIHJlbF9vYmpfaWQ6IGluZm8ucm9iamlkLFxuXHRcdFx0XHQgIHVzZXJfbG9naW46IGluZm8udXNlcmxvZ2luLFxuXHRcdFx0XHQgIGRhdGFfanNvbjogJycsXG5cdFx0XHRcdCAgY29tcG9zZV9pbmZvOiAnJyxcblx0XHRcdFx0ICBleHRfaW5mbzogcGFyYW0uZW52aXJvbWVudCxcblx0XHRcdFx0ICBnbG9iYWxfYXR0cjogZ2xvYmFsX2F0dHIsXG5cdFx0XHRcdCAgaW5wdXRfcGFyYW06IGlucHV0cGFyYW1ldGVyLFxuXHRcdFx0XHR9O1xuXHRcdFx0XHRjb25zb2xlLmxvZyhkYXRhSW5mbyk7XG5cdFx0XHRcdC8vIHJldHVybjtcblx0XHRcdFx0dGhpcy4kc3RvcmUuZGlzcGF0Y2goJ3J1bkN1c3RvbUV2ZW50JyxkYXRhSW5mbykudGhlbihzdWNjZXNzPT57XG5cdFx0XHRcdFx0Y29uc29sZS5sb2coc3VjY2Vzcyk7XG5cdFx0XHRcdFx0aWYgKHN1Y2Nlc3MuZXJyX2NvZGUgPT0gMCkge1xuXHRcdFx0XHRcdFx0dmFyIGRhdGEgPSBzdWNjZXNzLnJlc3VsdDtcblx0XHRcdFx0XHRcdGlmIChkYXRhLnJldCAhPSAwKSB7XG5cdFx0XHRcdFx0XHQgICAgdmFyIHRpcCA9IGRhdGEuZXJyX2luZm8gPyB0eXBlb2YgZGF0YS5lcnJfaW5mbyA9PSAnc3RyaW5nJyA/IGRhdGEuZXJyX2luZm8gOiBkYXRhLmVycl9pbmZvLmpvaW4oJzxici8+JykgOiAnJztcblx0XHRcdFx0XHRcdCAgICBpZiAoZGF0YS5yZXQgPT0gODAxKSB1bmkuc2hvd01vZGFsKHt0aXRsZTon5o+Q56S6Jyxjb250ZW50OnRpcCxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHRcdFx0XHRcdCAgICBlbHNlIHVuaS5zaG93TW9kYWwoe3RpdGxlOifmj5DnpLonLGNvbnRlbnQ6dGlwKycs5o+Q56S6OicrZGF0YS5yZXQsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBmYWxzZVxuXHRcdFx0XHRcdFx0fWVsc2V7XG5cdFx0XHRcdFx0XHRcdGxldCB0aXAgPSBkYXRhLmluZm8gPyB0eXBlb2YgZGF0YS5pbmZvID09ICdzdHJpbmcnID8gZGF0YS5pbmZvIDogZGF0YS5pbmZvLmpvaW4oJzxici8+JykgOiAnJztcblx0XHRcdFx0XHRcdFx0aWYgKHRpcCkgdW5pLnNob3dNb2RhbCh7dGl0bGU6J+aPkOekuicsY29udGVudDp0aXAsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0aWYoZGF0YS5hY3Rpb24pe1xuXHRcdFx0XHRcdFx0XHRcdHZhciBhY3Rpb25saXN0ID0gZGF0YS5hY3Rpb247XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGFjdGlvbmxpc3QpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgYWN0aW9ubGlzdC5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgYWN0aW9uID0gYWN0aW9ubGlzdFtqXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGFjdGlvbl90eXBlID0gYWN0aW9uLmFjdGlvbl90eXBlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgdmFsdWUgPSBhY3Rpb24udmFsdWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChhY3Rpb25fdHlwZSA9PSAnc2V0X2RsZ19hdHRyJykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICh2YWx1ZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc29sZS5sb2codmFsdWUpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBhID0gMDsgYSA8IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdC5sZW5ndGg7IGErKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGwgPSAwOyBsIDwgdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2FdLkF0dHIubGVuZ3RoOyBsKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBjYSA9IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFthXS5BdHRyW2xdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKHZhbHVlW2ldLmF0dHIgID09IGNhLk5hbWUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoY2EuVHlwZT09J+Wtl+WFuCcgfHwgY2EuVHlwZT09J+Wtl+WFuC3lrZfnrKbkuLInIHx8IGNhLlR5cGU9PSflrZflhbgt5pW05pWwJyl7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGRpY3RJdGVtTGlzdD1bXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IodmFyIGQgaW4gdmFsdWVbaV0uY2hvaWNlX2xpc3Qpe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGxpc3RfdmFsID12YWx1ZVtpXS5jaG9pY2VfbGlzdFtkXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRpY3RJdGVtTGlzdC5wdXNoKHtcIkNOX1NfTkFNRVwiOmxpc3RfdmFsLFwiTmFtZVwiOmxpc3RfdmFsLFwibGFiZWxcIjpsaXN0X3ZhbCxcInZhbHVlXCI6bGlzdF92YWx9KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5kaWN0aXRlbSA9IGRpY3RJdGVtTGlzdDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBhdHRyW2pdLmRpY3RpdGVtID0gdmFsW2ldLmNob2ljZV9saXN0O1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9ZWxzZXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5WYWx1ZSA9IHZhbHVlW2ldLnZhbHVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgbGVuZ3RoID0gMDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCF0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5maWx0ZXIoZnVuY3Rpb24gKHMpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gdmFsdWVbaV0uYXR0ciA9PSBzLmF0dHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSkubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0bGVuZ3RoID0gMTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5wdXNoKHZhbHVlW2ldKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAobGVuZ3RoID09IDApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAodGhpcy4kZGF0YS5yZWZkYXRhc3RvcmVbal0uYXR0ciA9PSB2YWx1ZVtpXS5hdHRyKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlW2pdLnZhbHVlID0gdmFsdWVbaV0udmFsdWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChhY3Rpb25fdHlwZSA9PSAnb3Blbl9zZWxlY3RfdXNlcmRsZycpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzIuMlwiLGNvbnRlbnQ6XCJvcGVuX3NlbGVjdF91c2VyZGxn6L+Z5LiqYWN0aW9uX3R5cGXov5jmnKrlpITnkIbvvIFcIixzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBlbHNlIGlmIChhY3Rpb25fdHlwZSA9PSAndGlwX2RsZycpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gfVxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1lbHNle1xuXHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor68yXCIsY29udGVudDpzdWNjZXNzLmVycl9tc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KS5jYXRjaChleD0+e1xuXHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKGV4KTtcblx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzIuMVwiLGNvbnRlbnQ6ZXguZXJyTXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0sXG5cdFx0ICAgIERhdGFPYmpSdW5DdXN0b21FdmVudChpbmZvLGRhdGFfYXR0cil7XG5cdFx0XHRcdHZhciAkdGhpcyA9IHRoaXM7XG5cdFx0ICAgIFx0dmFyIGVudmlyb21lbnQgPSB7XG5cdFx0ICAgIFx0ICAgICdmdW5jdGlvbic6ICczMDAwJywgLy8g5Yqf6IO954K557yW5Y+3XG5cdFx0ICAgIFx0ICAgIGNsc19pZDogdGhpcy4kZGF0YS5wYXJhbS5jbHNpZCwgICAgIC8vIOWKn+iDveeCueS4u+aVsOaNruexu+agh+ivhlxuXHRcdCAgICBcdCAgICAnYnV0dG9uJzogJ3RvcCcsICAgLy8gdG9wL2JvdHRvbVxuXHRcdCAgICBcdCAgICBidXR0b25fbmFtZTogJ+aWsOWinicsXG5cdFx0ICAgIFx0ICAgIG1hc3Rlcjoge1xuXHRcdCAgICBcdCAgICAgICAgY2xzX2lkOiB0aGlzLiRkYXRhLnBhcmFtLmNsc2lkLCAvLyBidXR0b249Ym90dG9t5pe2IG1hc3RlcueahGNsc19pZFxuXHRcdCAgICBcdCAgICAgICAgLy9vYmpfaWQ6ICcnICAvLyBidXR0b249Ym90dG9t5pe2IG1hc3RlcueahG9ial9pZFxuXHRcdCAgICBcdCAgICB9XG5cdFx0ICAgIFx0fTtcblx0XHQgICAgXHRpZihkYXRhX2F0dHIpe1xuXHRcdFx0XHRcdGVudmlyb21lbnQuZWRpdF9kbGcgPSB7XG5cdFx0XHRcdFx0ICAgIHR5cGU6ICdzbWFsbCcsLy/lsI/nqpflj6Ncblx0XHRcdFx0XHQgICAgY2xhc3NfaWQ6IHRoaXMuJGRhdGEucGFyYW0uY2xzaWQsLy/lvZPliY3mlbDmja7nsbtpZFxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoZGF0YV9hdHRyKSB7XG5cdFx0XHRcdFx0ICAgIGVudmlyb21lbnQuZWRpdF9kbGcuZm9ybV9jb250cm9sID0gey8v5omA5bGe55qE6KGo5Y2V5o6n5Lu2XG5cdFx0XHRcdFx0ICAgICAgICBuYW1lOiBkYXRhX2F0dHIuTmFtZSwvL+Wtl+auteWxnuaAp1xuXHRcdFx0XHRcdCAgICAgICAgdGV4dDogZGF0YV9hdHRyLkRpc3BOYW1lLC8v5pi+56S65paH5pysXG5cdFx0XHRcdFx0ICAgICAgICBncm91cF9uYW1lOiBkYXRhX2F0dHIuR3JvdXBOYW1lLC8v5bGe5oCn57uEXG5cdFx0XHRcdFx0ICAgICAgICB0eXBlOiBkYXRhX2F0dHIuVHlwZSwvL+Wtl+auteexu+Wei1xuXHRcdFx0XHRcdCAgICAgICAgcmVhZG9ubHk6IGRhdGFfYXR0ci5SZWFkT25seSwvL+aYr+WQpuWPquivu1xuXHRcdFx0XHRcdCAgICAgICAgYnV0dG9uX2ltZzogZGF0YV9hdHRyLmJ1dHRvbl9pbWcsLy/lvJXnlKjmjInpkq7nmoTlm77moIdcblx0XHRcdFx0XHQgICAgICAgIGJ1dHRvbl90b29sdGlwOiBkYXRhX2F0dHIuYnV0dG9uX3Rvb2x0aXAvL+W8leeUqOaMiemSrueahHRvb2x0aXBcblx0XHRcdFx0XHQgICAgfVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdCAgICBcdFxuXHRcdCAgICBcdC8vIHZhciBkYXRhSW5mbyA9IHtcblx0XHQgICAgXHQvLyAgICAgZWR0eXBlOiBpbmZvLmVkdHlwZSwgZXZlbnRpZDogaW5mby5ldmVudGlkLCBwcm9qZWN0aWQ6IGluZm8ucHJvamVjdGlkLnJlcGxhY2UoJ3snLCcnKS5yZXBsYWNlKCd9JywnJyksXG5cdFx0ICAgIFx0Ly8gICAgIHJjbHNpZDogaW5mby5yY2xzaWQsIHJvYmppZDogaW5mby5yb2JqaWQsIHVzZXJsb2dpbjogaW5mby51c2VybG9naW4sIGNsc2lkOiBpbmZvLmNsc2lkLCBvYmppZDogaW5mby5vYmppZCxcblx0XHQgICAgXHQvLyAgICAgYXR0cjogSlNPTi5zdHJpbmdpZnkoaW5mby5hdHRyKSwgZXh0aW5mbzogSlNPTi5zdHJpbmdpZnkoZW52aXJvbWVudCksIGlucHV0cGFyYW1ldGVyOiBcIlwiLFxuXHRcdCAgICBcdC8vIFx0Z2xvYmFsX2F0dHI6IEpTT04uc3RyaW5naWZ5KHRoaXMuJGRhdGEuZ2xvYmFsX2F0dHIpLCBkYXRhSnNvbjpKU09OLnN0cmluZ2lmeShpbmZvLmRhdGFKc29uKVxuXHRcdCAgICBcdC8vIH1cblx0XHRcdFx0ZW52aXJvbWVudCA9IEJhc2U2NC5lbmNvZGUoSlNPTi5zdHJpbmdpZnkoZW52aXJvbWVudCkpOy8v5bCG5a2X56ym5Liy6L2s5o2i5Li6YmFzZTY057yW56CBXG5cdFx0XHRcdHZhciBnbG9iYWxfYXR0ciA9IEJhc2U2NC5lbmNvZGUoSlNPTi5zdHJpbmdpZnkodGhpcy4kZGF0YS5nbG9iYWxfYXR0cikpOy8v5bCG5a2X56ym5Liy6L2s5o2i5Li6YmFzZTY057yW56CBXG5cdFx0XHRcdGlmKGluZm8uZGF0YUpzb24pXG5cdFx0XHRcdFx0aW5mby5kYXRhSnNvbiA9IEJhc2U2NC5lbmNvZGUoSlNPTi5zdHJpbmdpZnkoaW5mby5kYXRhSnNvbikpOy8v5bCG5a2X56ym5Liy6L2s5o2i5Li6YmFzZTY057yW56CBXG5cdFx0ICAgIFx0dmFyIG9ial9hdHRyPXt9O1xuXHRcdCAgICBcdGluZm8uYXR0ci5mb3JFYWNoKGl0ZW09Pntcblx0XHQgICAgXHRcdG9ial9hdHRyW2l0ZW0uYXR0cl0gPSBpdGVtLnZhbDtcblx0XHQgICAgXHR9KTtcblx0XHRcdFx0aWYoIWluZm8uZXZlbnRpZC5pbmNsdWRlcygneycpKSBpbmZvLmV2ZW50aWQgPSAneycraW5mby5ldmVudGlkKyd9Jztcblx0XHRcdFx0dmFyIGRhdGFJbmZvPXtcblx0XHRcdFx0ICBlZF90eXBlOiBpbmZvLmVkdHlwZSxcblx0XHRcdFx0ICBzdGFydF90cmFuc2FjdGlvbjogJycsXG5cdFx0XHRcdCAgY2xhc3NfaWQ6IGluZm8uY2xzaWQsXG5cdFx0XHRcdCAgY2xhc3NfbmFtZTogJycsXG5cdFx0XHRcdCAgZXZlbnRfaWQ6IGluZm8uZXZlbnRpZCxcblx0XHRcdFx0ICBldmVudF9uYW1lOiAnJyxcblx0XHRcdFx0ICBkYXRhX29ial9pZDogaW5mby5vYmppZCxcblx0XHRcdFx0ICBvYmpfYXR0cjogb2JqX2F0dHIsXG5cdFx0XHRcdCAgcHJqX2lkOiBpbmZvLnByb2plY3RpZCxcblx0XHRcdFx0ICByZWZfY2xzX2lkOiBpbmZvLnJjbHNpZCxcblx0XHRcdFx0ICByZWxfb2JqX2lkOiBpbmZvLnJvYmppZCxcblx0XHRcdFx0ICB1c2VyX2xvZ2luOiBpbmZvLnVzZXJsb2dpbixcblx0XHRcdFx0ICBkYXRhX2pzb246IGluZm8uZGF0YUpzb24sXG5cdFx0XHRcdCAgY29tcG9zZV9pbmZvOiAnJyxcblx0XHRcdFx0ICBleHRfaW5mbzogZW52aXJvbWVudCxcblx0XHRcdFx0ICBnbG9iYWxfYXR0cjogZ2xvYmFsX2F0dHIsXG5cdFx0XHRcdCAgaW5wdXRfcGFyYW06ICcnLFxuXHRcdFx0XHR9O1xuXHRcdFx0XHRjb25zb2xlLmxvZyhkYXRhSW5mbyk7XG5cdFx0XHRcdC8vIHJldHVybjtcblx0XHQgICAgXHR0aGlzLiRzdG9yZS5kaXNwYXRjaCgncnVuQ3VzdG9tRXZlbnQnLGRhdGFJbmZvKS50aGVuKHN1Y2Nlc3M9Pntcblx0XHQgICAgXHRcdGNvbnNvbGUubG9nKHN1Y2Nlc3MpO1xuXHRcdCAgICBcdFx0aWYgKHN1Y2Nlc3MuZXJyX2NvZGUgPT0gMCkge1xuXHRcdCAgICBcdFx0XHR2YXIgZGF0YSA9IHN1Y2Nlc3MucmVzdWx0O1xuXHRcdFx0XHRcdFx0aWYgKGRhdGEucmV0ICE9IDApIHtcblx0XHRcdFx0XHRcdCAgICB2YXIgdGlwID0gZGF0YS5lcnJfaW5mbyA/IHR5cGVvZiBkYXRhLmVycl9pbmZvID09ICdzdHJpbmcnID8gZGF0YS5lcnJfaW5mbyA6IGRhdGEuZXJyX2luZm8uam9pbignPGJyLz4nKSA6ICcnO1xuXHRcdFx0XHRcdFx0ICAgIGlmIChkYXRhLnJldCA9PSA4MDEpIHVuaS5zaG93TW9kYWwoe3RpdGxlOifmj5DnpLonLGNvbnRlbnQ6dGlwLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHRcdFx0ICAgIGVsc2UgdW5pLnNob3dNb2RhbCh7dGl0bGU6J+aPkOekuicsY29udGVudDp0aXArJyzmj5DnpLo6JytkYXRhLnJldCxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlXG5cdFx0XHRcdFx0XHR9ZWxzZXtcblx0XHRcdFx0XHRcdFx0bGV0IHRpcCA9IGRhdGEuaW5mbyA/IHR5cGVvZiBkYXRhLmluZm8gPT0gJ3N0cmluZycgPyBkYXRhLmluZm8gOiBkYXRhLmluZm8uam9pbignPGJyLz4nKSA6ICcnO1xuXHRcdFx0XHRcdFx0XHRpZiAodGlwKSB1bmkuc2hvd01vZGFsKHt0aXRsZTon5o+Q56S6Jyxjb250ZW50OnRpcCxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHR2YXIgYWN0aW9ubGlzdCA9IGRhdGEuYWN0aW9uO1xuXHRcdFx0XHRcdFx0XHRpZiAoYWN0aW9ubGlzdCkge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKGFjdGlvbmxpc3QpO1xuXHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgYWN0aW9ubGlzdC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIGFjdGlvbiA9IGFjdGlvbmxpc3RbaV07XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoYWN0aW9uLmFjdGlvbl90eXBlID09ICdzZXRfZGxnX2F0dHInKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhciByZXN1bHQgPSBhY3Rpb24udmFsdWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdWx0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKHJlc3VsdFtpXS5jaG9pY2VfbGlzdCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgYyA9IDA7IGMgPCAkdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0Lmxlbmd0aDsgYysrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBhdHRyID0gJHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtjXS5BdHRyO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IGF0dHIubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihhdHRyW2pdLk5hbWU9PXJlc3VsdFtpXS5hdHRyKXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGF0dHJbal0uVHlwZT09J+Wtl+WFuCcgfHwgYXR0cltqXS5UeXBlPT0n5a2X5YW4LeWtl+espuS4sicgfHwgYXR0cltqXS5UeXBlPT0n5a2X5YW4LeaVtOaVsCcpe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgZGljdEl0ZW1MaXN0PVtdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IodmFyIGQgaW4gcmVzdWx0W2ldLmNob2ljZV9saXN0KXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgdmFsID1yZXN1bHRbaV0uY2hvaWNlX2xpc3RbZF07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGljdEl0ZW1MaXN0LnB1c2goe1wiQ05fU19OQU1FXCI6dmFsLFwiTmFtZVwiOnZhbCxcImxhYmVsXCI6dmFsLFwidmFsdWVcIjp2YWx9KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhdHRyW2pdLmRpY3RpdGVtID0gZGljdEl0ZW1MaXN0O1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBhdHRyW2pdLmRpY3RpdGVtID0gcmVzdWx0W2ldLmNob2ljZV9saXN0O1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBjID0gMDsgYyA8ICR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3QubGVuZ3RoOyBjKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBhdHRyID0gJHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtjXS5BdHRyO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKGF0dHJbal0uTmFtZSsnPT0nK3Jlc3VsdFtpXS5hdHRyKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoYXR0cltqXS5OYW1lPT1yZXN1bHRbaV0uYXR0cil7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXR0cltqXS5WYWx1ZSA9IHJlc3VsdFtpXS52YWx1ZTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgbGVuZ3RoID0gMDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoISR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5maWx0ZXIoZnVuY3Rpb24gKHMpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiByZXN1bHRbaV0uYXR0ciA9PSBzLmF0dHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9KS5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGxlbmd0aCA9IDE7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUucHVzaChyZXN1bHRbaV0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAobGVuZ3RoID09IDApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgJHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICgkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmVbal0uYXR0ciA9PSByZXN1bHRbaV0uYXR0cikge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZVtqXS52YWx1ZSA9IHJlc3VsdFtpXS52YWx1ZTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmIChkYXRhLmFjdGlvbltpXS5hY3Rpb25fdHlwZSA9PSAnc2V0X2dsb2JhbF9hdHRyJykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5nbG9iYWxfYXR0ciA9IGRhdGEuYWN0aW9uW2ldLnZhbHVlIHx8IFtdO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0aWYgKGRhdGEucmVzdWx0KSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIHJlc3VsdCA9IGRhdGEucmVzdWx0O1xuXHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdWx0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBjID0gMDsgYyA8ICR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3QubGVuZ3RoOyBjKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGF0dHIgPSAkdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2NdLkF0dHI7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGF0dHJbal0uTmFtZT09cmVzdWx0W2ldLmF0dHIpe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXR0cltqXS5WYWx1ZSA9IHJlc3VsdFtpXS52YWx1ZTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIGxlbmd0aCA9IDA7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoISR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5maWx0ZXIoZnVuY3Rpb24gKHMpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdFtpXS5hdHRyID09IHMuYXR0clxuXHRcdFx0XHRcdFx0XHRcdFx0fSkubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGxlbmd0aCA9IDE7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5wdXNoKHJlc3VsdFtpXSk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAobGVuZ3RoID09IDApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCAkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoJHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlW2pdLmF0dHIgPT0gcmVzdWx0W2ldLmF0dHIpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZVtqXS52YWx1ZSA9IHJlc3VsdFtpXS52YWx1ZTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9ZWxzZXtcblx0XHQgICAgXHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor68zXCIsY29udGVudDpzdWNjZXNzLmVycl9tc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0ICAgIFx0XHR9XG5cdFx0ICAgIFx0fSkuY2F0Y2goZXg9Pntcblx0XHQgICAgXHRcdC8vIGNvbnNvbGUubG9nKGV4KTtcblx0XHQgICAgXHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vMy4xXCIsY29udGVudDpleC5lcnJNc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0ICAgIFx0fSk7XG5cdFx0ICAgIH0sXG5cdFx0XHRPS0RhdGFPYmpSdW5DdXN0b21FdmVudCgpe1xuXHRcdCAgICBcdHZhciBlbnZpcm9tZW50ID0ge1xuXHRcdFx0XHQgICAgJ2Z1bmN0aW9uJzogJzMwMDAnLCAvLyDlip/og73ngrnnvJblj7dcblx0XHRcdFx0ICAgIGNsc19pZDogdGhpcy4kZGF0YS5wYXJhbS5jbHNpZCwgICAgIC8vIOWKn+iDveeCueS4u+aVsOaNruexu+agh+ivhlxuXHRcdFx0XHQgICAgJ2J1dHRvbic6ICd0b3AnLCAgIC8vIHRvcC9ib3R0b21cblx0XHRcdFx0ICAgIGJ1dHRvbl9uYW1lOiAn5paw5aKeJyxcblx0XHRcdFx0ICAgIG1hc3Rlcjoge1xuXHRcdFx0XHQgICAgICAgIGNsc19pZDogdGhpcy4kZGF0YS5wYXJhbS5jbHNpZCwgLy8gYnV0dG9uPWJvdHRvbeaXtiBtYXN0ZXLnmoRjbHNfaWRcblx0XHRcdFx0ICAgICAgICBcblx0XHRcdFx0ICAgIH1cblx0XHRcdFx0fTtcblx0XHQgICAgXHR2YXIgZXZlbnRpZCA9IHRoaXMuJGRhdGEuZWRpdF9va19ldmVudC5zY3JpcF9pZDtcblx0XHRcdFx0dmFyIHJlcT1bXTtcblx0XHRcdFx0dmFyIGF0dHJsaXN0ID0gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0O1xuXHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJsaXN0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0dmFyIGF0dHIgPSBhdHRybGlzdFtpXS5BdHRyO1xuXHRcdFx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdFx0dmFyIGFyID0gYXR0cltqXTtcblx0XHRcdFx0XHRcdGlmKGFyLlZhbHVlPT0n6K+36YCJ5oupJyB8fCBhci5WYWx1ZT09J+KAlOKAlOivt+mAieaLqeKAlOKAlCcpIGFyLlZhbHVlPScnO1xuXHRcdFx0XHRcdFx0aWYoYXIuVHlwZT09J+W8leeUqOWvueixoSjlpJrkuKopJylcblx0XHRcdFx0XHRcdFx0aWYoYXIuVmFsdWU9PSfor7cnKSBhci5WYWx1ZT0nJztcblx0XHRcdFx0ICAgICAgICBpZihhci5UeXBlPT0n5byV55So5Lq65ZGYJyB8fCBhci5UeXBlPT0n5byV55So6aG555uuJylcblx0XHRcdFx0ICAgICAgICBcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsOiBhci5WYWxJRCA/YXIuVmFsSUQgOicnIH0pO1xuXHRcdFx0XHQgICAgICAgIGVsc2UgaWYoYXIuVHlwZT09J+W4g+WwlOWAvCcpXG5cdFx0XHRcdFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsOiBhci5WYWx1ZT8nMSc6JzAnfSk7XG5cdFx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsOiBhci5WYWx1ZSB9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLmxlbmd0aCA+IDApIHtcblx0XHQgICAgXHQgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5sZW5ndGg7IGkrKykge1xuXHRcdCAgICBcdCAgICAgICAgaWYgKCFyZXEuZmlsdGVyKGZ1bmN0aW9uIChzKSB7XG5cdFx0ICAgIFx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlW2ldLmF0dHIgPT0gcy5uYW1lXG5cdFx0ICAgIFx0ICAgICAgICB9KS5sZW5ndGgpIHtcblx0XHQgICAgXHQgICAgICAgICAgICBsZW5ndGggPSAxO1xuXHRcdCAgICBcdCAgICAgICAgICAgIHJlcS5wdXNoKHsgJ2F0dHInOiB0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZVtpXS5hdHRyLCAndmFsJzogdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmVbaV0udmFsdWUgfSk7XG5cdFx0ICAgIFx0ICAgICAgICB9XG5cdFx0ICAgIFx0ICAgIH1cblx0XHQgICAgXHR9XG5cdFx0ICAgIFx0dmFyIGluZm8gPSB7XG5cdFx0ICAgIFx0ICAgIGV2ZW50aWQ6IGV2ZW50aWQsXG5cdFx0ICAgIFx0ICAgIGVkdHlwZTogXCIwXCIsXG5cdFx0ICAgIFx0ICAgIHByb2plY3RpZDogJycsXG5cdFx0ICAgIFx0ICAgIHJjbHNpZDogJycsXG5cdFx0ICAgIFx0ICAgIHJvYmppZDogJycsXG5cdFx0ICAgIFx0ICAgIHVzZXJsb2dpbjogJycsXG5cdFx0ICAgIFx0ICAgIGNsc2lkOiB0aGlzLiRkYXRhLnBhcmFtLmNsc2lkLFxuXHRcdCAgICBcdCAgICBvYmppZDogXCJcIixcblx0XHQgICAgXHQgICAgYXR0cjogcmVxLFxuXHRcdCAgICBcdH1cblx0XHQgICAvLyAgXHR2YXIgZGF0YUluZm8gPSB7XG5cdFx0ICAgLy8gICAgICAgICAgZWR0eXBlOiBpbmZvLmVkdHlwZSwgZXZlbnRpZDogaW5mby5ldmVudGlkLCBwcm9qZWN0aWQ6IGluZm8ucHJvamVjdGlkLHJjbHNpZDogaW5mby5yY2xzaWQsIFxuXHRcdFx0XHRcdC8vIHJvYmppZDogaW5mby5yb2JqaWQsIHVzZXJsb2dpbjogaW5mby51c2VybG9naW4sIGNsc2lkOiBpbmZvLmNsc2lkLCBvYmppZDogaW5mby5vYmppZCxcblx0XHRcdFx0XHQvLyBhdHRyOiBKU09OLnN0cmluZ2lmeShpbmZvLmF0dHIpLCBleHRpbmZvOiBKU09OLnN0cmluZ2lmeShlbnZpcm9tZW50KSwgZ2xvYmFsX2F0dHI6IEpTT04uc3RyaW5naWZ5KHRoaXMuJGRhdGEuZ2xvYmFsX2F0dHIpXG5cdFx0ICAgLy8gICAgICB9XG5cdFx0XHRcdFxuXHRcdFx0XHRlbnZpcm9tZW50ID0gQmFzZTY0LmVuY29kZShKU09OLnN0cmluZ2lmeShlbnZpcm9tZW50KSk7Ly/lsIblrZfnrKbkuLLovazmjaLkuLpiYXNlNjTnvJbnoIFcblx0XHRcdFx0dmFyIGdsb2JhbF9hdHRyID0gQmFzZTY0LmVuY29kZShKU09OLnN0cmluZ2lmeSh0aGlzLiRkYXRhLmdsb2JhbF9hdHRyKSk7Ly/lsIblrZfnrKbkuLLovazmjaLkuLpiYXNlNjTnvJbnoIFcblx0XHQgICAgXHR2YXIgb2JqX2F0dHI9e307XG5cdFx0ICAgIFx0aW5mby5hdHRyLmZvckVhY2goaXRlbT0+e1xuXHRcdCAgICBcdFx0b2JqX2F0dHJbaXRlbS5hdHRyXSA9IGl0ZW0udmFsO1xuXHRcdCAgICBcdH0pO1xuXHRcdFx0XHRpZighZXZlbnRpZC5pbmNsdWRlcygneycpKSBldmVudGlkPSAneycrIGV2ZW50aWQgKyd9Jztcblx0XHRcdFx0dmFyIGRhdGFJbmZvPXtcblx0XHRcdFx0ICBlZF90eXBlOiBpbmZvLmVkdHlwZSxcblx0XHRcdFx0ICBzdGFydF90cmFuc2FjdGlvbjogJycsXG5cdFx0XHRcdCAgY2xhc3NfaWQ6IGluZm8uY2xzaWQsXG5cdFx0XHRcdCAgY2xhc3NfbmFtZTogJycsXG5cdFx0XHRcdCAgZXZlbnRfaWQ6IGV2ZW50aWQsXG5cdFx0XHRcdCAgZXZlbnRfbmFtZTogJycsXG5cdFx0XHRcdCAgZGF0YV9vYmpfaWQ6IGluZm8ub2JqaWQsXG5cdFx0XHRcdCAgb2JqX2F0dHI6IG9ial9hdHRyLFxuXHRcdFx0XHQgIHByal9pZDogaW5mby5wcm9qZWN0aWQsXG5cdFx0XHRcdCAgcmVmX2Nsc19pZDogaW5mby5yY2xzaWQsXG5cdFx0XHRcdCAgcmVsX29ial9pZDogaW5mby5yb2JqaWQsXG5cdFx0XHRcdCAgdXNlcl9sb2dpbjogaW5mby51c2VybG9naW4sXG5cdFx0XHRcdCAgZGF0YV9qc29uOiAnJyxcblx0XHRcdFx0ICBjb21wb3NlX2luZm86ICcnLFxuXHRcdFx0XHQgIGV4dF9pbmZvOiBlbnZpcm9tZW50LFxuXHRcdFx0XHQgIGdsb2JhbF9hdHRyOiBnbG9iYWxfYXR0cixcblx0XHRcdFx0ICBpbnB1dF9wYXJhbTogJycsXG5cdFx0XHRcdH07XG5cdFx0XHRcdGNvbnNvbGUubG9nKGRhdGFJbmZvKTtcblx0XHRcdFx0Ly8gcmV0dXJuO1xuXHRcdCAgICBcdHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdydW5DdXN0b21FdmVudCcsZGF0YUluZm8pLnRoZW4oc3VjY2Vzcz0+e1xuXHRcdCAgICBcdFx0Y29uc29sZS5sb2coc3VjY2Vzcyk7XG5cdFx0ICAgIFx0XHRpZiAoc3VjY2Vzcy5lcnJfY29kZSA9PSAwKSB7XG5cdFx0ICAgIFx0XHRcdHZhciBkYXRhID0gc3VjY2Vzcy5yZXN1bHQ7XG5cdFx0XHRcdFx0XHRpZiAoZGF0YS5yZXQgIT0gMCkge1xuXHRcdFx0XHRcdFx0ICAgIHZhciB0aXAgPSBkYXRhLmVycl9pbmZvID8gdHlwZW9mIGRhdGEuZXJyX2luZm8gPT0gJ3N0cmluZycgPyBkYXRhLmVycl9pbmZvIDogZGF0YS5lcnJfaW5mby5qb2luKCc8YnIvPicpIDogJyc7XG5cdFx0XHRcdFx0XHQgICAgaWYgKGRhdGEucmV0ID09IDgwMSkgdW5pLnNob3dNb2RhbCh7dGl0bGU6J+aPkOekuicsY29udGVudDp0aXAsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdFx0XHQgICAgZWxzZSB1bmkuc2hvd01vZGFsKHt0aXRsZTon5o+Q56S6Jyxjb250ZW50OnRpcCsnLOaPkOekujonK2RhdGEucmV0LHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2Vcblx0XHRcdFx0XHRcdH1lbHNle1xuXHRcdFx0XHRcdFx0XHRsZXQgdGlwID0gZGF0YS5pbmZvID8gdHlwZW9mIGRhdGEuaW5mbyA9PSAnc3RyaW5nJyA/IGRhdGEuaW5mbyA6IGRhdGEuaW5mby5qb2luKCc8YnIvPicpIDogJyc7XG5cdFx0XHRcdFx0XHRcdGlmICh0aXApIHVuaS5zaG93TW9kYWwoe3RpdGxlOifmj5DnpLonLGNvbnRlbnQ6dGlwLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdHZhciByZXN1bHQgPSBkYXRhLnJlc3VsdDtcblx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCByZXN1bHQubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRcdFx0XHQvLyBzZWxmLmNsYXNzX2F0dHJfZWxlLmZpbmQoJy5hdHRyX2ZpZWxkW2RhdGEtZmllbGQ9XCInICsgcmVzdWx0W2ldLmF0dHIgKyAnXCJdJykudmFsKHJlc3VsdFtpXS52YWx1ZSkuZGF0YSgndmFsJywgcmVzdWx0W2ldLnZhbHVlKTtcblx0XHRcdFx0XHRcdFx0XHR2YXIgbGVuZ3RoID0gMDtcblx0XHRcdFx0XHRcdFx0XHRpZiAoIXRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLmZpbHRlcihmdW5jdGlvbiAocykge1xuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdFtpXS5hdHRyID09IHMuYXR0clxuXHRcdFx0XHRcdFx0XHRcdH0pLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0bGVuZ3RoID0gMTtcblx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLnB1c2gocmVzdWx0W2ldKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGxlbmd0aCA9PSAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmICh0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZVtqXS5hdHRyID09IHJlc3VsdFtpXS5hdHRyKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy4kZGF0YS5yZWZkYXRhc3RvcmVbal0udmFsdWUgPSByZXN1bHRbaV0udmFsdWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdHRoaXMuYWRkKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0ICAgIFx0XHR9ZWxzZXtcblx0XHQgICAgXHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor680XCIsY29udGVudDpzdWNjZXNzLmVycl9tc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0ICAgIFx0XHR9XG5cdFx0ICAgIFx0fSkuY2F0Y2goZXg9Pntcblx0XHQgICAgXHRcdC8vIGNvbnNvbGUubG9nKGV4KTtcblx0XHQgICAgXHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vNC4xXCIsY29udGVudDpleC5lcnJNc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0ICAgIFx0fSk7XG5cdFx0ICAgIH0sXG5cdFx0ICAgIERhdGFPYmpSdW5DdXN0b21FdmVudF9SZXR1cm4oZXZlbnRpZCxkYXRhX2F0dHIsYnV0dG9uX2NhbGxiYWNrLGluZGV4LGlpbmRleCl7XG5cdFx0XHRcdHZhciBlbnZpcm9tZW50ID0ge1xuXHRcdFx0XHQgICAgJ2Z1bmN0aW9uJzogJzMwMDAnLCAvLyDlip/og73ngrnnvJblj7dcblx0XHRcdFx0ICAgIGNsc19pZDogdGhpcy4kZGF0YS5wYXJhbS5jbHNpZCwgICAgIC8vIOWKn+iDveeCueS4u+aVsOaNruexu+agh+ivhlxuXHRcdFx0XHQgICAgJ2J1dHRvbic6ICd0b3AnLCAgIC8vIHRvcC9ib3R0b21cblx0XHRcdFx0ICAgIGJ1dHRvbl9uYW1lOiAn5paw5aKeJyxcblx0XHRcdFx0ICAgIG1hc3Rlcjoge1xuXHRcdFx0XHQgICAgICAgIGNsc19pZDogdGhpcy4kZGF0YS5wYXJhbS5jbHNpZCwgLy8gYnV0dG9uPWJvdHRvbeaXtiBtYXN0ZXLnmoRjbHNfaWRcblx0XHRcdFx0ICAgICAgICAvL29ial9pZDogJycgIC8vIGJ1dHRvbj1ib3R0b23ml7YgbWFzdGVy55qEb2JqX2lkXG5cdFx0XHRcdCAgICB9XG5cdFx0XHRcdH07XG5cdFx0XHRcdHZhciByZXE9W107XG5cdFx0XHRcdHZhciBhdHRybGlzdCA9IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdDtcblx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhdHRybGlzdC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdHZhciBhdHRyID0gYXR0cmxpc3RbaV0uQXR0cjtcblx0XHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IGF0dHIubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0XHRcdHZhciBhciA9IGF0dHJbal07XG5cdFx0XHRcdFx0XHRpZihhci5UeXBlPT0n5byV55So5a+56LGhKOWkmuS4qiknKVxuXHRcdFx0XHRcdFx0XHRpZihhci5WYWx1ZT09J+ivtycpIGFyLlZhbHVlPScnO1xuXHRcdFx0XHQgICAgICAgIGlmKGFyLlR5cGU9PSflvJXnlKjkurrlkZgnIHx8IGFyLlR5cGU9PSflvJXnlKjpobnnm64nKVxuXHRcdFx0XHQgICAgICAgIFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWw6IGFyLlZhbElEID9hci5WYWxJRCA6JycgfSk7XG5cdFx0XHRcdCAgICAgICAgZWxzZSBpZihhci5UeXBlPT0n5biD5bCU5YC8Jylcblx0XHRcdFx0XHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWw6IGFyLlZhbHVlPycxJzonMCd9KTtcblx0XHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWw6IGFyLlZhbHVlIH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAodGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUubGVuZ3RoID4gMCkge1xuXHRcdFx0XHQgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHQgICAgICAgIGlmICghcmVxLmZpbHRlcihmdW5jdGlvbiAocykge1xuXHRcdFx0XHQgICAgICAgICAgICByZXR1cm4gdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmVbaV0uYXR0ciA9PSBzLm5hbWVcblx0XHRcdFx0ICAgICAgICB9KS5sZW5ndGgpIHtcblx0XHRcdFx0ICAgICAgICAgICAgbGVuZ3RoID0gMTtcblx0XHRcdFx0ICAgICAgICAgICAgcmVxLnB1c2goeyAnYXR0cic6IHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlW2ldLmF0dHIsICd2YWwnOiB0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZVtpXS52YWx1ZSB9KTtcblx0XHRcdFx0ICAgICAgICB9XG5cdFx0XHRcdCAgICB9XG5cdFx0XHRcdH1cblx0XHRcdFx0dmFyIGV4dGluZm8gPSBlbnZpcm9tZW50O1xuXHRcdFx0XHRleHRpbmZvLmVkaXRfZGxnID0ge1xuXHRcdFx0XHQgICAgdHlwZTogJ3NtYWxsJywvL+Wwj+eql+WPo1xuXHRcdFx0XHQgICAgY2xhc3NfaWQ6IHRoaXMuJGRhdGEucGFyYW0uY2xzaWQsLy/lvZPliY3mlbDmja7nsbtpZFxuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChkYXRhX2F0dHIpIHtcblx0XHRcdFx0ICAgIGV4dGluZm8uZWRpdF9kbGcuZm9ybV9jb250cm9sID0gey8v5omA5bGe55qE6KGo5Y2V5o6n5Lu2XG5cdFx0XHRcdCAgICAgICAgbmFtZTogZGF0YV9hdHRyLk5hbWUsLy/lrZfmrrXlsZ7mgKdcblx0XHRcdFx0ICAgICAgICB0ZXh0OiBkYXRhX2F0dHIuRGlzcE5hbWUsLy/mmL7npLrmlofmnKxcblx0XHRcdFx0ICAgICAgICBncm91cF9uYW1lOiBkYXRhX2F0dHIuR3JvdXBOYW1lLC8v5bGe5oCn57uEXG5cdFx0XHRcdCAgICAgICAgdHlwZTogZGF0YV9hdHRyLlR5cGUsLy/lrZfmrrXnsbvlnotcblx0XHRcdFx0ICAgICAgICByZWFkb25seTogZGF0YV9hdHRyLlJlYWRPbmx5LC8v5piv5ZCm5Y+q6K+7XG5cdFx0XHRcdCAgICAgICAgYnV0dG9uX2ltZzogZGF0YV9hdHRyLmJ1dHRvbl9pbWcsLy/lvJXnlKjmjInpkq7nmoTlm77moIdcblx0XHRcdFx0ICAgICAgICBidXR0b25fdG9vbHRpcDogZGF0YV9hdHRyLmJ1dHRvbl90b29sdGlwLy/lvJXnlKjmjInpkq7nmoR0b29sdGlwXG5cdFx0XHRcdCAgICB9XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gdmFyIGRhdGFJbmZvID0ge1xuXHRcdFx0XHQvLyBcdGVkdHlwZTogIFwiMFwiLCBldmVudGlkOiBldmVudGlkLCBwcm9qZWN0aWQ6ICcnLHJjbHNpZDogJycsIHJvYmppZDogJycsIHVzZXJsb2dpbjogJycsIFxuXHRcdFx0XHQvLyBcdGNsc2lkOiB0aGlzLiRkYXRhLnBhcmFtLmNsc2lkLCBvYmppZDogJycsYXR0cjogSlNPTi5zdHJpbmdpZnkocmVxKSwgXG5cdFx0XHRcdC8vIFx0ZXh0aW5mbzogSlNPTi5zdHJpbmdpZnkoZXh0aW5mbyksIGdsb2JhbF9hdHRyOiBKU09OLnN0cmluZ2lmeSh0aGlzLiRkYXRhLmdsb2JhbF9hdHRyKVxuXHRcdFx0XHQvLyB9XG5cdFx0XHRcdGV4dGluZm8gPSBCYXNlNjQuZW5jb2RlKEpTT04uc3RyaW5naWZ5KGV4dGluZm8pKTsvL+WwhuWtl+espuS4sui9rOaNouS4umJhc2U2NOe8lueggVxuXHRcdFx0XHR2YXIgZ2xvYmFsX2F0dHIgPSBCYXNlNjQuZW5jb2RlKEpTT04uc3RyaW5naWZ5KHRoaXMuJGRhdGEuZ2xvYmFsX2F0dHIpKTsvL+WwhuWtl+espuS4sui9rOaNouS4umJhc2U2NOe8lueggVxuXHRcdFx0XHR2YXIgb2JqX2F0dHI9e307XG5cdFx0XHRcdHJlcS5mb3JFYWNoKGl0ZW09Pntcblx0XHRcdFx0XHRvYmpfYXR0cltpdGVtLmF0dHJdID0gaXRlbS52YWw7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRpZighZXZlbnRpZC5pbmNsdWRlcygneycpKSBldmVudGlkPSAneycrIGV2ZW50aWQgKyd9Jztcblx0XHRcdFx0dmFyIGRhdGFJbmZvPXtcblx0XHRcdFx0ICBlZF90eXBlOiBcIjBcIixcblx0XHRcdFx0ICBzdGFydF90cmFuc2FjdGlvbjogJycsXG5cdFx0XHRcdCAgY2xhc3NfaWQ6IHRoaXMuJGRhdGEucGFyYW0uY2xzaWQsXG5cdFx0XHRcdCAgY2xhc3NfbmFtZTogJycsXG5cdFx0XHRcdCAgZXZlbnRfaWQ6IGV2ZW50aWQsXG5cdFx0XHRcdCAgZXZlbnRfbmFtZTogJycsXG5cdFx0XHRcdCAgZGF0YV9vYmpfaWQ6ICcnLFxuXHRcdFx0XHQgIG9ial9hdHRyOiBvYmpfYXR0cixcblx0XHRcdFx0ICBwcmpfaWQ6ICcnLFxuXHRcdFx0XHQgIHJlZl9jbHNfaWQ6ICcnLFxuXHRcdFx0XHQgIHJlbF9vYmpfaWQ6ICcnLFxuXHRcdFx0XHQgIHVzZXJfbG9naW46ICcnLFxuXHRcdFx0XHQgIGRhdGFfanNvbjogJycsXG5cdFx0XHRcdCAgY29tcG9zZV9pbmZvOiAnJyxcblx0XHRcdFx0ICBleHRfaW5mbzogZXh0aW5mbyxcblx0XHRcdFx0ICBnbG9iYWxfYXR0cjogZ2xvYmFsX2F0dHIsXG5cdFx0XHRcdCAgaW5wdXRfcGFyYW06ICcnLFxuXHRcdFx0XHR9O1xuXHRcdFx0XHRjb25zb2xlLmxvZyhkYXRhSW5mbyk7XG5cdFx0XHRcdC8vIHJldHVybjtcblx0XHRcdFx0dGhpcy4kc3RvcmUuZGlzcGF0Y2goJ3J1bkN1c3RvbUV2ZW50JyxkYXRhSW5mbykudGhlbihzdWNjZXNzPT57XG5cdFx0XHRcdFx0Y29uc29sZS5sb2coc3VjY2Vzcyk7XG5cdFx0XHRcdFx0aWYgKHN1Y2Nlc3MuZXJyX2NvZGUgPT0gMCkge1xuXHRcdFx0XHRcdFx0dmFyIGRhdGEgPSBzdWNjZXNzLnJlc3VsdDtcblx0XHRcdFx0XHRcdGlmIChkYXRhLnJldCAhPSAwKSB7XG5cdFx0XHRcdFx0XHQgICAgdmFyIHRpcCA9IGRhdGEuZXJyX2luZm8gPyB0eXBlb2YgZGF0YS5lcnJfaW5mbyA9PSAnc3RyaW5nJyA/IGRhdGEuZXJyX2luZm8gOiBkYXRhLmVycl9pbmZvLmpvaW4oJzxici8+JykgOiAnJztcblx0XHRcdFx0XHRcdCAgICBpZiAoZGF0YS5yZXQgPT0gODAxKSB1bmkuc2hvd01vZGFsKHt0aXRsZTon5o+Q56S6Jyxjb250ZW50OnRpcCxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHRcdFx0XHRcdCAgICBlbHNlIHVuaS5zaG93TW9kYWwoe3RpdGxlOifmj5DnpLonLGNvbnRlbnQ6dGlwKycs5o+Q56S6OicrZGF0YS5yZXQsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBmYWxzZVxuXHRcdFx0XHRcdFx0fWVsc2V7XG5cdFx0XHRcdFx0XHRcdGxldCB0aXAgPSBkYXRhLmluZm8gPyB0eXBlb2YgZGF0YS5pbmZvID09ICdzdHJpbmcnID8gZGF0YS5pbmZvIDogZGF0YS5pbmZvLmpvaW4oJzxici8+JykgOiAnJztcblx0XHRcdFx0XHRcdFx0aWYgKHRpcCkgdW5pLnNob3dNb2RhbCh7dGl0bGU6J+aPkOekuicsY29udGVudDp0aXAsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0aWYgKGRhdGEgIT0gXCJcIikge1xuXHRcdFx0XHRcdFx0XHR2YXIgYWN0aW9ucyA9IGRhdGEuYWN0aW9uO1xuXHRcdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhhY3Rpb25zKTtcblx0XHRcdFx0XHRcdFx0aWYgKGFjdGlvbnMpIHtcblx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGFjdGlvbnMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBhY3Rpb24gPSBhY3Rpb25zW2ldO1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIHZhbCA9IGFjdGlvbi52YWx1ZTtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBlbnZpcm9tZW50ID0gSlNPTi5zdHJpbmdpZnkoZW52aXJvbWVudCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChhY3Rpb24uYWN0aW9uX3R5cGUgPT0gJ29wZW5fcGFuZWwnKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHQgICB2YXIgZCA9IGRpYWxvZyh7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgIHRpdGxlOiAnPGkgY2xhc3M9XCJhY2UtaWNvbiBmYSBmYS1pbmZvLWNpcmNsZVwiPjwvaT4gJyArICfmj5DnpLonLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQgICBjb250ZW50OiBhY3Rpb24uYWN0aW9uX3R5cGUgKyAn5q2kYWN0aW9u5bCa5pyq5aSE55CG77yBJ1xuXHRcdFx0XHRcdFx0XHRcdFx0ICAgfSk7XG5cdFx0XHRcdFx0XHRcdFx0XHQgICBkLnNob3coKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdGVsc2UgaWYgKGFjdGlvbi5hY3Rpb25fdHlwZSA9PSAnb3Blbl9zZWxlY3RfdXNlcmRsZycpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIHN0eWxlID0gdmFsLnN0eWxlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBzdHlsZSA9PSAndXNlcicgPyAn6YCJ5oup5Lq65ZGYJyA6IHN0eWxlID09ICdkZXBhcnRtZW50JyA/ICfpgInmi6npg6jpl6gnIDogc3R5bGUgPT0gJ3JvbGUnID8gJ+mAieaLqeinkuiJsicgOiAnJ1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgJHRoaXMgPSB0aGlzO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgcGFyYW09e1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGluZGV4OiBpbmRleCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpaW5kZXg6aWluZGV4LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGJ1dHRvbl9jYWxsYmFjazpidXR0b25fY2FsbGJhY2ssXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVxOnJlcSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRhX2F0dHI6ZGF0YV9hdHRyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0dW5pLm5hdmlnYXRlVG8oe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHVybDonLi4vc2VscHNuL2luZGV4P211bGl0PWZhbHNlJnBhcmFtPScrSlNPTi5zdHJpbmdpZnkocGFyYW0pLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGV2ZW50czp7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRBZGRQZXIoZGF0YSxwYXJhbSl7IFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhwYXJhbSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKGRhdGEpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgY2FsbGJhY2tfZXZlbnRpZCA9IHBhcmFtLmJ1dHRvbl9jYWxsYmFjay50cmltKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBpbmZvID0ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGV2ZW50aWQ6IGNhbGxiYWNrX2V2ZW50aWQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZWR0eXBlOiBcIjBcIixcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRwcm9qZWN0aWQ6ICcnLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJjbHNpZDogJycsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cm9iamlkOiAnJyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR1c2VybG9naW46ICcnLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsc2lkOiAkdGhpcy4kZGF0YS5wYXJhbS5jbHNpZCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvYmppZDogXCJcIixcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhdHRyOiBwYXJhbS5yZXEsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aW5wdXRwYXJhbWV0ZXI6IGRhdGEsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF0YUpzb246W10sXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMuRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGluZm8sIHBhcmFtLmRhdGFfYXR0cik7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9KTtcdFxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0ZWxzZSBpZiAoYWN0aW9uLmFjdGlvbl90eXBlID09ICdvcGVuX2RhdGFfcXVlcnlfZGxnJykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgZCA9IGRpYWxvZyh7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGl0bGU6ICc8aSBjbGFzcz1cImFjZS1pY29uIGZhIGZhLWluZm8tY2lyY2xlXCI+PC9pPiAnICsgJ+aPkOekuicsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29udGVudDogYWN0aW9uLmFjdGlvbl90eXBlICsgJ+atpGFjdGlvbuWwmuacquWkhOeQhu+8gSdcblx0XHRcdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGQuc2hvdygpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0ZWxzZSBpZiAoYWN0aW9uLmFjdGlvbl90eXBlID09ICdvcGVuX2NvbW1vbl9kbGcnKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhciAkdGhpcyA9IHRoaXM7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmKHZhbC5jb21tb25fZGxnX2lkID09ICdjaGVja19saXN0Jyl7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgICR0aGlzLiRkYXRhLmNoZWNrX2xpc3Q9IHZhbC5jb25maWc7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgIGlmKHZhbC5jb25maWcuYXBwZWFyX3N0eWxlID09ICdzaWRlc2xpcCcpIC8v5Yik5pat5piv5ZCm5piv5L6n5ruRXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5wb3B1cFR5cGUgPSAncmlnaHQnO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHQgICBlbHNlXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5wb3B1cFR5cGUgPSAnY2VudGVyJ1xuXHRcdFx0XHRcdFx0XHRcdFx0XHQgICAvLyBvcGVuIOaWueazleS8oOWFpeWPguaVsCDnrYnlkIzlnKggdW5pLXBvcHVwIOe7hOS7tuS4iue7keWumiB0eXBl5bGe5oCnXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgICR0aGlzLiRyZWZzLnBvcHVwLm9wZW4oJHRoaXMuJGRhdGEucG9wdXBUeXBlKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgdmFyIHBvcHVwUGFyYW09e1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGluZGV4OiBpbmRleCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpaW5kZXg6aWluZGV4LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGJ1dHRvbl9jYWxsYmFjazpidXR0b25fY2FsbGJhY2ssXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVxOnJlcSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRhX2F0dHI6ZGF0YV9hdHRyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgIH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgJHRoaXMuJGRhdGEucG9wdXBQYXJhbT0gcG9wdXBQYXJhbTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0ZWxzZSBpZiAoYWN0aW9uLmFjdGlvbl90eXBlID09ICdvcGVuX3Byb2plY3RfcXVlcnlfZGxnJykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHQvL2NvbnNvbGUubG9nKGFjdGlvbi52YWx1ZS5zZWxlY3RfcmFuZ2UpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHQvL2NvbnNvbGUubG9nKGFjdGlvbi52YWx1ZS5tdWxpdF9zZWxlY3QpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgcHJpUmVsID0gJy0xJztcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGFjdGlvbi52YWx1ZS5zZWxlY3RfcmFuZ2UgPT0gJ+WFqOmDqOebuOWFsycpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cHJpUmVsID0gJzAnO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRlbHNlIGlmIChhY3Rpb24udmFsdWUuc2VsZWN0X3JhbmdlID09ICfmiJHotJ/otKPnmoTpobnnm64nKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHByaVJlbCA9ICcxJztcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZWxzZSBpZiAoYWN0aW9uLnZhbHVlLnNlbGVjdF9yYW5nZSA9PSAn5oiR5Yib5bu655qEJylcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRwcmlSZWwgPSAnMic7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGVsc2UgaWYgKGFjdGlvbi52YWx1ZS5zZWxlY3RfcmFuZ2UgPT0gJ+aIkeWPguS4jueahCcgfHwgYWN0aW9uLnZhbHVlLnNlbGVjdF9yYW5nZSA9PSAn5oiR5Y+C5Yqg55qEJylcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRwcmlSZWwgPSAnMyc7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGVsc2UgaWYgKGFjdGlvbi52YWx1ZS5zZWxlY3RfcmFuZ2UgPT0gJ+aIkeWFs+azqOeahCcpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cHJpUmVsID0gJzQnO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRlbHNlIGlmIChhY3Rpb24udmFsdWUuc2VsZWN0X3JhbmdlID09ICfmiJHkuIvlsZ7nmoTpobnnm64nKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHByaVJlbCA9ICc1Jztcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyICR0aGlzID0gdGhpcztcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIHBhcmFtXz17XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aW5kZXg6IGluZGV4LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlpbmRleDppaW5kZXgsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YnV0dG9uX2NhbGxiYWNrOmJ1dHRvbl9jYWxsYmFjayxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXE6cmVxXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0dW5pLm5hdmlnYXRlVG8oe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHVybDonLi4vc2VsUHJqL2luZGV4P3JlbGF0aW9uPScrcHJpUmVsKycmcGFyYW09JytKU09OLnN0cmluZ2lmeShwYXJhbV8pLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGV2ZW50czp7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRBZGRQZXIoZGF0YSxwYXJhbSl7IFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W3BhcmFtLmluZGV4XS5BdHRyW3BhcmFtLmlpbmRleF0uVmFsdWU9ZGF0YVswXS5OYW1lO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W3BhcmFtLmluZGV4XS5BdHRyW3BhcmFtLmlpbmRleF0uVmFsSUQ9ZGF0YVswXS5JRCsnOycrZGF0YVswXS5OYW1lO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgY2FsbGJhY2tfZXZlbnRpZCA9IHBhcmFtLmJ1dHRvbl9jYWxsYmFjay50cmltKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChjYWxsYmFja19ldmVudGlkKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGluZm8gPSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRldmVudGlkOiBjYWxsYmFja19ldmVudGlkLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZWR0eXBlOiBcIjJcIixcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHByb2plY3RpZDogZGF0YVswXS5JRCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJjbHNpZDogXCJcIixcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJvYmppZDogXCJcIixcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHVzZXJsb2dpbjogXCJcIixcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsc2lkOiAkdGhpcy4kZGF0YS5wYXJhbS5jbHNpZCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9iamlkOiBcIlwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXR0cjogcGFyYW0ucmVxLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF0YUpzb246W10sXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLkRhdGFPYmpSdW5DdXN0b21FdmVudChpbmZvKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgZCA9IGRpYWxvZyh7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGl0bGU6ICc8aSBjbGFzcz1cImFjZS1pY29uIGZhIGZhLWluZm8tY2lyY2xlXCI+PC9pPiAnICsgJ+aPkOekuicsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29udGVudDogYWN0aW9uLmFjdGlvbl90eXBlICsgJ+atpGFjdGlvbuWwmuacquWkhOeQhu+8gSdcblx0XHRcdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGQuc2hvdygpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9ZWxzZXtcblx0XHRcdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIuaPkOekujUuMlwiLGNvbnRlbnQ6ICfosIPnlKggYmVmb3JlX2NsaWNrX2J1dHRvbiDohJrmnKzov5Tlm57nqbrvvIxldmVudF9pZCcgKyBldmVudGlkLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fWVsc2V7XG5cdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzVcIixjb250ZW50OnN1Y2Nlc3MuZXJyX21zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pLmNhdGNoKGV4PT57XG5cdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coZXgpO1xuXHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi5o+Q56S6NS4xXCIsY29udGVudDpleC5lcnJNc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdH0pO1xuXHRcdCAgICB9LFxuXHRcdCAgICBcblx0XHRcdFxuXHRcdH1cblx0fVxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///110\n");
/***/ }),
/* 111 */
@@ -21658,6 +21658,9 @@
  components = {
    selectCy:
      __webpack_require__(/*! @/uni_modules/select-cy/components/select-cy/select-cy.vue */ 73)
        .default,
    uniPopup:
      __webpack_require__(/*! @/uni_modules/uni-popup/components/uni-popup/uni-popup.vue */ 10)
        .default,
  }
} catch (e) {
@@ -30885,6 +30888,161 @@
            [_vm._v(_vm._$s(281, "t0-0", _vm._s(_vm.title)))]
          )
        : _vm._e(),
      _c(
        "view",
        [
          _c(
            "uni-popup",
            {
              ref: "popup",
              staticClass: _vm._$s(283, "sc", "view-popup"),
              attrs: { "background-color": "#fff", _i: 283 },
              on: { change: _vm.popupChange },
            },
            [
              _c(
                "view",
                {
                  staticClass: _vm._$s(284, "sc", "popup-header"),
                  attrs: { _i: 284 },
                },
                [_vm._v(_vm._$s(284, "t0-0", _vm._s(_vm.check_list.title)))]
              ),
              _c(
                "view",
                {
                  staticClass: _vm._$s(285, "sc", "popup-content"),
                  class: _vm._$s(285, "c", {
                    "popup-height":
                      _vm.popupType === "left" || _vm.popupType === "right",
                  }),
                  style: _vm._$s(285, "s", {
                    width: _vm.check_list.width
                      ? _vm.check_list.width + "px"
                      : "200px",
                    height: _vm.check_list.height
                      ? _vm.check_list.height + "px"
                      : "88%",
                  }),
                  attrs: { _i: 285 },
                },
                [
                  _c(
                    "view",
                    {
                      staticClass: _vm._$s(286, "sc", "popup-cont"),
                      style: _vm._$s(286, "s", {
                        height: _vm.check_list.height
                          ? _vm.check_list.height - 45 + "px"
                          : "415px",
                      }),
                      attrs: { _i: 286 },
                    },
                    _vm._l(
                      _vm._$s(287, "f", { forItems: _vm.check_list.items }),
                      function (item, index, $25, $35) {
                        return _c(
                          "view",
                          {
                            key: _vm._$s(287, "f", {
                              forIndex: $25,
                              key: 287 + "-" + $35,
                            }),
                            staticClass: _vm._$s(
                              "287-" + $35,
                              "sc",
                              "view_popup_CheckList"
                            ),
                            attrs: { _i: "287-" + $35 },
                          },
                          [
                            _c(
                              "checkbox-group",
                              {
                                staticClass: _vm._$s(
                                  "288-" + $35,
                                  "sc",
                                  "check_list"
                                ),
                                style: _vm._$s("288-" + $35, "s", {
                                  "margin-left": "10rpx",
                                }),
                                attrs: {
                                  "data-ischeck": _vm._$s(
                                    "288-" + $35,
                                    "a-data-ischeck",
                                    item.check
                                  ),
                                  "data-index": _vm._$s(
                                    "288-" + $35,
                                    "a-data-index",
                                    index
                                  ),
                                  _i: "288-" + $35,
                                },
                                on: { change: _vm.checkChange },
                              },
                              [
                                _c("label", [
                                  _c("checkbox", {
                                    attrs: {
                                      value: _vm._$s(
                                        "290-" + $35,
                                        "a-value",
                                        item.check
                                      ),
                                      checked: _vm._$s(
                                        "290-" + $35,
                                        "a-checked",
                                        item.check
                                      ),
                                      _i: "290-" + $35,
                                    },
                                  }),
                                  _c("text", [
                                    _vm._v(
                                      _vm._$s(
                                        "291-" + $35,
                                        "t0-0",
                                        _vm._s(item.name)
                                      )
                                    ),
                                  ]),
                                ]),
                              ]
                            ),
                          ]
                        )
                      }
                    ),
                    0
                  ),
                  _c(
                    "view",
                    {
                      staticClass: _vm._$s(292, "sc", "popup-footer"),
                      attrs: { _i: 292 },
                    },
                    [
                      _c("button", {
                        staticClass: _vm._$s(293, "sc", "btn_popup_add"),
                        attrs: { _i: 293 },
                        on: { click: _vm.popup_sava },
                      }),
                      _c("button", {
                        staticClass: _vm._$s(294, "sc", "btn_popup_cancel"),
                        attrs: { _i: 294 },
                        on: { click: _vm.popup_cancel },
                      }),
                    ]
                  ),
                ]
              ),
            ]
          ),
        ],
        1
      ),
    ],
    2
  )
@@ -30915,7 +31073,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 */ 65));\nvar _pickerAddress = _interopRequireDefault(__webpack_require__(/*! ../../js/pickerAddress/pickerAddress.vue */ 80));\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\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  components: {\n    pickerAddress: _pickerAddress.default\n  },\n  data: function data() {\n    return {\n      title: '新增',\n      param: {},\n      classAttrList: [],\n      classGridStyle: [],\n      edit_inital_event: \"\",\n      //弹窗初始化事件ID\n      edit_ok_event: \"\",\n      //弹窗点击OK 触发事件ID\n      edit_select_compose_event: \"\",\n      //选择组成对象时调用\n      edit_compose_cls_id: \"\",\n      global_attr: [],\n      refdatastore: [],\n      //引用数据存储区// {attr:'G_PRJ_' + bindattr + '_ID', value:info.id}\n      scanCodeVal: \"\",\n      subClassAttrList: [],\n      subPanelList: [],\n      subClassGridStyle: []\n    };\n  },\n  onLoad: function onLoad(options) {\n    // console.log(options);\n    uni.setNavigationBarTitle({\n      title: options.titlename\n    }); //设置顶部标题 \n    var param = JSON.parse(options.param);\n    this.$data.title = param.Add_BtnName ? param.Add_BtnName : options.titlename; //设置按钮文字\n    __f__(\"log\", param, \" at pages/modal/3037.vue:650\");\n    if (!param.Master_Cls.View_Style) {\n      uni.showModal({\n        title: \"提示\",\n        content: \"该功能点未配置界面窗口,请重新配置!\",\n        showCancel: false,\n        confirmText: \"取消\"\n      });\n      return;\n    }\n    if (!param.Master_Cls.View_Style.Name) {\n      uni.showModal({\n        title: \"提示\",\n        content: \"该功能点未配置窗口样式,请重新配置!\",\n        showCancel: false,\n        confirmText: \"取消\"\n      });\n      return;\n    }\n    this.$data.param = param;\n    // var edit_dlg = {\n    //     Model: param.EditDlgMode,\n    //     Name: param.Master_Cls.View_Style.Name\n    // }\n    //主数据类获取\n    var dataInfo = {\n      class_id: param.Master_Cls.ID\n    };\n    var $this = this;\n    $this.$store.state.thisareaFuncID = param.Master_Cls.ID;\n    // console.log($this.$store.getters.getclassAttrList);\n    if ($this.$store.getters.getclassAttrList) {\n      $this.$data.classAttrList = $this.$store.getters.getclassAttrList;\n      $this.classGridStyleInfo(param.Master_Cls.ID, $this.$data.param.Master_Cls.View_Style.Name, 'Mast');\n    } else {\n      $this.$store.dispatch('classAttrGetList', dataInfo).then(function (success) {\n        // console.log(success);\n        if (success.err_code == 0) {\n          $this.$data.classAttrList = success.result;\n          success.result.forEach( /*#__PURE__*/function () {\n            var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(group, index) {\n              return _regenerator.default.wrap(function _callee2$(_context2) {\n                while (1) {\n                  switch (_context2.prev = _context2.next) {\n                    case 0:\n                      group.attr_list.forEach( /*#__PURE__*/function () {\n                        var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(attr, key) {\n                          return _regenerator.default.wrap(function _callee$(_context) {\n                            while (1) {\n                              switch (_context.prev = _context.next) {\n                                case 0:\n                                  if (!(attr.type == \"字典-字符串\" || attr.type == \"字典-整数\")) {\n                                    _context.next = 3;\n                                    break;\n                                  }\n                                  _context.next = 3;\n                                  return $this.DictItemGetList(attr, key, index, 'mast');\n                                case 3:\n                                case \"end\":\n                                  return _context.stop();\n                              }\n                            }\n                          }, _callee);\n                        }));\n                        return function (_x3, _x4) {\n                          return _ref2.apply(this, arguments);\n                        };\n                      }());\n                    case 1:\n                    case \"end\":\n                      return _context2.stop();\n                  }\n                }\n              }, _callee2);\n            }));\n            return function (_x, _x2) {\n              return _ref.apply(this, arguments);\n            };\n          }());\n          setTimeout(function () {\n            $this.classGridStyleInfo(param.Master_Cls.ID, $this.$data.param.Master_Cls.View_Style.Name, 'Mast');\n          }, 500);\n        } else {\n          uni.showModal({\n            title: \"错误1\",\n            content: success.err_msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        // console.log(ex);\n        uni.showModal({\n          title: \"错误1.1\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\n    }\n\n    //从数据类获取\n    var subdataInfo = {\n      class_id: param.Sub_Cls.ID\n    };\n    $this.$store.state.thisareaFuncSubID = param.Sub_Cls.ID;\n    if ($this.$store.getters.getSubClassAttrList) {\n      $this.$data.subClassAttrList = $this.$store.getters.getSubClassAttrList;\n      $this.classGridStyleInfo(param.Sub_Cls.ID, $this.$data.param.Sub_Cls.View_Style.Name, 'Sub');\n    } else {\n      $this.$store.dispatch('subClassAttrGetList', subdataInfo).then(function (success) {\n        // console.log(success);\n        if (success.err_code == 0) {\n          $this.$data.subClassAttrList = success.result;\n          success.result.forEach( /*#__PURE__*/function () {\n            var _ref3 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4(group, index) {\n              return _regenerator.default.wrap(function _callee4$(_context4) {\n                while (1) {\n                  switch (_context4.prev = _context4.next) {\n                    case 0:\n                      group.attr_list.forEach( /*#__PURE__*/function () {\n                        var _ref4 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3(attr, key) {\n                          return _regenerator.default.wrap(function _callee3$(_context3) {\n                            while (1) {\n                              switch (_context3.prev = _context3.next) {\n                                case 0:\n                                  if (!(attr.type == \"字典-字符串\" || attr.type == \"字典-整数\")) {\n                                    _context3.next = 3;\n                                    break;\n                                  }\n                                  _context3.next = 3;\n                                  return $this.DictItemGetList(attr, key, index, 'sub');\n                                case 3:\n                                case \"end\":\n                                  return _context3.stop();\n                              }\n                            }\n                          }, _callee3);\n                        }));\n                        return function (_x7, _x8) {\n                          return _ref4.apply(this, arguments);\n                        };\n                      }());\n                    case 1:\n                    case \"end\":\n                      return _context4.stop();\n                  }\n                }\n              }, _callee4);\n            }));\n            return function (_x5, _x6) {\n              return _ref3.apply(this, arguments);\n            };\n          }());\n          setTimeout(function () {\n            $this.classGridStyleInfo(param.Sub_Cls.ID, $this.$data.param.Sub_Cls.View_Style.Name, 'Sub');\n          }, 500);\n        } else {\n          uni.showModal({\n            title: \"错误1_1\",\n            content: success.err_msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        // console.log(ex);\n        uni.showModal({\n          title: \"错误1_1.1\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\n    }\n  },\n  methods: {\n    DictItemGetList: function DictItemGetList(attr, key, index, type) {\n      var _this = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee6() {\n        var $this, dataInfo;\n        return _regenerator.default.wrap(function _callee6$(_context6) {\n          while (1) {\n            switch (_context6.prev = _context6.next) {\n              case 0:\n                //Mobox3得到字典项列表\n                _this.data = [];\n                $this = _this;\n                dataInfo = {\n                  dict_id: attr.dict_id,\n                  dict_name: attr.dict_name\n                }; // console.log(dataInfo);\n                _this.$store.dispatch('DictItemGetList', dataInfo).then( /*#__PURE__*/function () {\n                  var _ref5 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee5(success) {\n                    return _regenerator.default.wrap(function _callee5$(_context5) {\n                      while (1) {\n                        switch (_context5.prev = _context5.next) {\n                          case 0:\n                            // console.log(success);\n                            if (success.err_code == 0) {\n                              if (type == 'mast') {\n                                $this.$data.classAttrList[index].attr_list[key].dictitem = success.result;\n                                _this.$store.commit(\"classAttrList\", $this.$data.classAttrList);\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: \"错误1.2\",\n                                content: success.err_msg,\n                                showCancel: false,\n                                confirmText: \"取消\"\n                              });\n                            }\n                          case 1:\n                          case \"end\":\n                            return _context5.stop();\n                        }\n                      }\n                    }, _callee5);\n                  }));\n                  return function (_x9) {\n                    return _ref5.apply(this, arguments);\n                  };\n                }()).catch(function (ex) {\n                  // console.log(ex);\n                  uni.showModal({\n                    title: \"错误1.3\",\n                    content: ex.errMsg,\n                    showCancel: false,\n                    confirmText: \"取消\"\n                  });\n                });\n              case 4:\n              case \"end\":\n                return _context6.stop();\n            }\n          }\n        }, _callee6);\n      }))();\n    },\n    classGridStyleInfo: function classGridStyleInfo(clsid, styleName, clsType) {\n      var _this2 = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee7() {\n        var $this, gridstyleInfo;\n        return _regenerator.default.wrap(function _callee7$(_context7) {\n          while (1) {\n            switch (_context7.prev = _context7.next) {\n              case 0:\n                $this = _this2;\n                gridstyleInfo = {\n                  class_id: clsid,\n                  ui_style_type: 2,\n                  ui_style_name: styleName\n                }; // console.log($this.$store.getters.getclassGridStyleInfo);\n                //获取主数据类界面样式\n                if (clsType == 'Mast') {\n                  $this.$store.state.thisEditName = styleName;\n                  if ($this.$store.getters.getclassGridStyleInfo) {\n                    $this.$data.classGridStyle = $this.$store.getters.getclassGridStyleInfo;\n                    $this.viewParam('Mast');\n                  } else {\n                    //console.log(gridstyleInfo);\n                    $this.$store.dispatch('UIStyleGetInfo', gridstyleInfo).then(function (success) {\n                      // console.log(success);\n                      if (success.err_code == 0) {\n                        var styledef = _base.default.decode(success.result.style_def);\n                        success.result.style_def = JSON.parse(styledef);\n                        $this.$data.classGridStyle = success.result;\n                        // console.log($this.$data.classGridStyle);\n\n                        $this.viewParam('Mast');\n                      } else {\n                        uni.showModal({\n                          title: \"错误1.2\",\n                          content: success.err_msg,\n                          showCancel: false,\n                          confirmText: \"取消\"\n                        });\n                      }\n                    }).catch(function (ex) {\n                      __f__(\"log\", ex, \" at pages/modal/3037.vue:787\");\n                      uni.showModal({\n                        title: \"错误1.3\",\n                        content: ex.errMsg,\n                        showCancel: false,\n                        confirmText: \"取消\"\n                      });\n                    });\n                  }\n                } else if (clsType == 'Sub') {\n                  //获取从数据类界面样式\n                  $this.$store.state.thisEditSubName = styleName;\n                  if ($this.$store.getters.getSubClassGridStyleInfo) {\n                    $this.$data.subClassGridStyle = $this.$store.getters.getSubClassGridStyleInfo;\n                    $this.viewParam('Sub');\n                  } else {\n                    //console.log(gridstyleInfo);\n                    $this.$store.dispatch('UIStyleGetInfo', gridstyleInfo).then(function (success) {\n                      // console.log(success);\n                      if (success.err_code == 0) {\n                        var styledef = _base.default.decode(success.result.style_def);\n                        success.result.style_def = JSON.parse(styledef);\n                        $this.$data.subClassGridStyle = success.result;\n                        // console.log($this.$data.subClassGridStyle);\n\n                        $this.viewParam('Sub');\n\n                        // $this.subClass_attr_init();\n                      } else {\n                        uni.showModal({\n                          title: \"错误1.2\",\n                          content: success.err_msg,\n                          showCancel: false,\n                          confirmText: \"取消\"\n                        });\n                      }\n                    }).catch(function (ex) {\n                      __f__(\"log\", ex, \" at pages/modal/3037.vue:813\");\n                      uni.showModal({\n                        title: \"错误1.3\",\n                        content: ex.errMsg,\n                        showCancel: false,\n                        confirmText: \"取消\"\n                      });\n                    });\n                  }\n                }\n              case 3:\n              case \"end\":\n                return _context7.stop();\n            }\n          }\n        }, _callee7);\n      }))();\n    },\n    viewParam: function viewParam(type) {\n      //将mobox3小写参数转换为mobox2大写参数\n      var classGridStyle = '';\n      var classAttrList = '';\n      if (type == 'Mast') {\n        classGridStyle = this.$data.classGridStyle;\n        classAttrList = this.$data.classAttrList;\n      } else if (type == 'Sub') {\n        classGridStyle = this.$data.subClassGridStyle;\n        classAttrList = this.$data.subClassAttrList;\n      }\n      var class_gridStyle = {\n        ID: classGridStyle.id,\n        Name: classGridStyle.name,\n        Type: classGridStyle.type,\n        IsDefault: classGridStyle.is_defaul,\n        StyleDef: classGridStyle.style_def\n      };\n      var class_attrList = [];\n      classAttrList.forEach(function (data) {\n        var attrs = [];\n        if (data.attr_list) {\n          data.attr_list.forEach(function (attr) {\n            var dictitems = [];\n            if (attr.dictitem) {\n              attr.dictitem.forEach(function (dict) {\n                dictitems.push({\n                  ID: dict.id,\n                  Name: dict.name,\n                  Note: dict.note,\n                  Order: dict.order,\n                  ImgUrl: null,\n                  Code: dict.code,\n                  HasSub: null,\n                  ParentID: null,\n                  ParentName: null,\n                  Lvl: dict.lvl,\n                  IsDefault: dict.is_default,\n                  Value: dict.value,\n                  CN_G_ID: dict.id,\n                  CN_G_DICT_ID: null,\n                  CN_S_NAME: dict.name,\n                  CN_S_NOTE: dict.note,\n                  CN_N_ORDER: dict.order,\n                  CN_S_IMG_URL: null,\n                  CN_S_CODE: dict.code,\n                  CN_C_HAS_SUB: null,\n                  CN_G_PARENT_ITEM_ID: null,\n                  CN_G_PARENT_ITEM_NAME: null,\n                  CN_N_LVL: dict.lvl,\n                  CN_C_IS_DEFAULT: dict.is_default,\n                  CN_S_VALUE: dict.value\n                });\n              });\n            }\n            attrs.push({\n              ID: attr.id,\n              Name: attr.name,\n              Type: attr.type,\n              Size: attr.size,\n              NotEmpty: attr.not_empty,\n              DefValue: attr.def_value,\n              Order: attr.order,\n              DictName: attr.dict_name,\n              DictID: attr.dict_id,\n              CodeDefName: attr.code_def_name,\n              CodeDefID: attr.code_def_id,\n              RelClsID: null,\n              RelCls: attr.ref_cls,\n              Width: attr.width,\n              Height: attr.height,\n              CtrlStyle: attr.ctrl_style,\n              HasAce: attr.has_ace,\n              CanShow: attr.can_show,\n              CanQuery: attr.can_query,\n              ReadOnly: attr.read_only,\n              IsKey: attr.is_key,\n              IsFixed: attr.is_fixed,\n              DispName: attr.disp_name,\n              LuaAttr: attr.lua_attr,\n              Desc: attr.desc,\n              ActionDef: attr.action_def ? _base.default.decode(attr.action_def) : '',\n              Multilingual: attr.multilingual,\n              RefCondition: attr.ref_condition,\n              GroupName: data.group,\n              Value: null,\n              dictitem: dictitems\n            });\n          });\n        }\n        class_attrList.push({\n          Name: data.group,\n          Order: data.order,\n          HasAce: data.has_ace,\n          BkColor: data.bk_color,\n          ImgFontStyle: data.img_font_style,\n          Attr: attrs\n        });\n      });\n      if (type == 'Mast') {\n        this.$data.classGridStyle = class_gridStyle;\n        this.$data.classAttrList = class_attrList;\n        // console.log('------Mast--------');\n        // console.log(this.$data.classGridStyle);\n        // console.log(this.$data.classAttrList);\n        this.class_attr_init();\n      } else if (type == 'Sub') {\n        this.$data.subClassGridStyle = class_gridStyle;\n        this.$data.subClassAttrList = class_attrList;\n        // console.log('------Sub--------');\n        // console.log(this.$data.subClassGridStyle);\n        // console.log(this.$data.subClassAttrList);\n        this.subClass_attr_init();\n      }\n    },\n    class_attr_init: function class_attr_init() {\n      var attrlist = this.$data.classGridStyle.StyleDef.show_style;\n      var newattrlist = [];\n      if (this.$data.classAttrList.length > 0) {\n        for (var i = 0; i < attrlist.length; i++) {\n          var open = attrlist[i].open;\n          var name = attrlist[i].attrgroup_name;\n          var attrs = attrlist[i].attrs;\n          for (var s = 0; s < this.$data.classAttrList.length; s++) {\n            var clsattr = this.$data.classAttrList[s];\n            if (name == clsattr.Name) {\n              var attr = [];\n              for (var j = 0; j < attrs.length; j++) {\n                for (var l = 0; l < clsattr.Attr.length; l++) {\n                  var ca = clsattr.Attr[l];\n                  if (attrs[j].attr == ca.Name) {\n                    ca.action = attrs[j].action;\n                    ca.edit = attrs[j].edit;\n                    ca.notempty = attrs[j].notempty;\n                    ca.ext_button = attrs[j].ext_button;\n                    ca.button_img = attrs[j].button_img;\n                    ca.button_tooltip = attrs[j].button_tooltip;\n                    ca.before_click_button = attrs[j].before_click_button;\n                    ca.button_callback = attrs[j].button_callback;\n                    ca.hidden = attrs[j].hidden;\n                    ca.select = attrs[j].select == undefined ? false : attrs[j].select;\n                    ca.Value = \"\";\n                    if (ca.dictitem.length > 0) {\n                      if (ca.select == true) ca.Value = []; //ca.dictitem[0].CN_S_NAME;\n                      else ca.Value = '请选择'; //ca.dictitem[0].CN_S_NAME;\n                      var dictitemlist = [];\n                      for (var d = 0; d < ca.dictitem.length; d++) {\n                        ca.dictitem[d].label = ca.dictitem[d].CN_S_NAME;\n                        ca.dictitem[d].value = ca.dictitem[d].CN_S_NAME;\n                        ca.dictitem[d].attr = ca.Name;\n                        if (ca.dictitem[d].CN_C_IS_DEFAULT == '1') ca.Value = ca.dictitem[d].CN_S_NAME;\n                      }\n                    }\n                    if (ca.Type == '日期' || ca.Type == '时间') {\n                      var nowDate = new Date();\n                      var date = {\n                        year: nowDate.getFullYear(),\n                        month: nowDate.getMonth() + 1,\n                        day: nowDate.getDate()\n                      };\n                      ca.Value = date.year + '-' + (date.month >= 10 ? date.month : '0' + date.month) + '-' + (date.day >= 10 ? date.day : '0' + date.day);\n                    }\n                    if (ca.Type == '引用对象(多个)') {\n                      ca.RelClsList = ca.RelCls;\n                      ca.Value = '请';\n                    }\n                    if (ca.Type == '省市区') ca.Value = '请选择';\n                    if (ca.Type == '布尔值') ca.Value = false;\n                    attr.push(ca);\n                  }\n                }\n              }\n              newattrlist.push({\n                BkColor: clsattr.BkColor,\n                HasAce: clsattr.HasAce,\n                ImgFontStyle: clsattr.ImgFontStyle,\n                Name: clsattr.Name,\n                Order: clsattr.Order,\n                Open: open,\n                Attr: attr,\n                control_style: this.$data.classGridStyle.StyleDef.control_style,\n                title_p_wdith: this.$data.classGridStyle.StyleDef.title_p_wdith,\n                Font: this.$data.classGridStyle.StyleDef.Font ? this.$data.classGridStyle.StyleDef.Font : {},\n                Bk_Color: this.$data.classGridStyle.StyleDef.Bk_Color ? this.$data.classGridStyle.StyleDef.Bk_Color : '#FFFFFF',\n                Text_Color: this.$data.classGridStyle.StyleDef.Text_Color ? this.$data.classGridStyle.StyleDef.Text_Color : '#000000'\n              });\n            }\n          }\n        }\n        if (newattrlist.length > 0) {\n          this.$data.classAttrList = newattrlist;\n        }\n        var req = [];\n        if (this.$data.classGridStyle.StyleDef) {\n          if (this.$data.classGridStyle.StyleDef.show_style.length > 0) {\n            var attrlist = this.$data.classGridStyle.StyleDef.show_style;\n            // $el.find('.attr_field').prop('readonly', true);\n            // $el.find('.attr_field').prop('disabled', true);\n            for (var i = 0; i < attrlist.length; i++) {\n              var attr = attrlist[i].attrs;\n              for (var j = 0; j < attr.length; j++) {\n                var ar = attr[j];\n                req.push({\n                  attr: ar.attr,\n                  value: ar.value ? ar.value : ''\n                });\n              }\n            }\n          }\n        }\n        var eventlist = this.$data.classGridStyle.StyleDef.event;\n        if (eventlist) {\n          if (eventlist.length > 0) {\n            for (var i = 0; i < eventlist.length; i++) {\n              if (eventlist[i].event_id == 'before_ok') {\n                this.$data.edit_ok_event = eventlist[i];\n              } else if (eventlist[i].event_id == 'initial') {\n                this.$data.edit_inital_event = eventlist[i];\n              } else if (eventlist[i].event_id == 'before_select_compose') {\n                this.$data.edit_select_compose_event = eventlist[i].scrip_id;\n                this.$data.edit_compose_cls_id = eventlist[i].compose_cls_id;\n              }\n            }\n          }\n        }\n        // console.log(req);\n        if (this.$data.edit_inital_event) {\n          var eventid = this.$data.edit_inital_event.scrip_id;\n          var info = {\n            eventid: eventid,\n            edtype: \"0\",\n            projectid: '',\n            rclsid: '',\n            robjid: '',\n            userlogin: '',\n            clsid: this.$data.param.Master_Cls.ID,\n            objid: \"\",\n            attr: req\n          };\n          this.ini_DataObjRunCustomEvent(info);\n        }\n        __f__(\"log\", this.$data.classGridStyle, \" at pages/modal/3037.vue:1060\");\n        __f__(\"log\", this.$data.classAttrList, \" at pages/modal/3037.vue:1061\");\n      } else {\n        uni.showModal({\n          title: \"提示\",\n          content: \"未找到可显示的的属性\",\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      }\n    },\n    subClass_attr_init: function subClass_attr_init() {\n      var attrlist = this.$data.subClassGridStyle.StyleDef.show_style;\n      var newattrlist = [];\n      if (this.$data.subClassAttrList.length > 0) {\n        for (var i = 0; i < attrlist.length; i++) {\n          var open = attrlist[i].open;\n          var name = attrlist[i].attrgroup_name;\n          var attrs = attrlist[i].attrs;\n          for (var s = 0; s < this.$data.subClassAttrList.length; s++) {\n            var clsattr = this.$data.subClassAttrList[s];\n            if (name == clsattr.Name) {\n              var attr = [];\n              for (var j = 0; j < attrs.length; j++) {\n                for (var l = 0; l < clsattr.Attr.length; l++) {\n                  var ca = clsattr.Attr[l];\n                  if (attrs[j].attr == ca.Name) {\n                    ca.action = attrs[j].action;\n                    ca.edit = attrs[j].edit;\n                    ca.notempty = attrs[j].notempty;\n                    ca.ext_button = attrs[j].ext_button;\n                    ca.button_img = attrs[j].button_img;\n                    ca.button_tooltip = attrs[j].button_tooltip;\n                    ca.before_click_button = attrs[j].before_click_button;\n                    ca.button_callback = attrs[j].button_callback;\n                    ca.hidden = attrs[j].hidden;\n                    ca.select = attrs[j].select == undefined ? false : attrs[j].select;\n                    ca.Value = \"\";\n                    if (ca.dictitem.length > 0) {\n                      if (ca.select == true) ca.Value = []; //ca.dictitem[0].CN_S_NAME;\n                      else ca.Value = '请选择'; //ca.dictitem[0].CN_S_NAME;\n                      var dictitemlist = [];\n                      for (var d = 0; d < ca.dictitem.length; d++) {\n                        ca.dictitem[d].label = ca.dictitem[d].CN_S_NAME;\n                        ca.dictitem[d].value = ca.dictitem[d].CN_S_NAME;\n                        ca.dictitem[d].attr = ca.Name;\n                        if (ca.dictitem[d].CN_C_IS_DEFAULT == '1') ca.Value = ca.dictitem[d].CN_S_NAME;\n                      }\n                    }\n                    if (ca.Type == '日期' || ca.Type == '时间') {\n                      var nowDate = new Date();\n                      var date = {\n                        year: nowDate.getFullYear(),\n                        month: nowDate.getMonth() + 1,\n                        day: nowDate.getDate()\n                      };\n                      ca.Value = date.year + '-' + (date.month >= 10 ? date.month : '0' + date.month) + '-' + (date.day >= 10 ? date.day : '0' + date.day);\n                    }\n                    if (ca.Type == '引用对象(多个)') {\n                      ca.RelClsList = ca.RelCls;\n                      ca.Value = '请';\n                    }\n                    if (ca.Type == '省市区') ca.Value = '请选择';\n                    if (ca.Type == '布尔值') ca.Value = false;\n                    attr.push(ca);\n                  }\n                }\n              }\n              newattrlist.push({\n                BkColor: clsattr.BkColor,\n                HasAce: clsattr.HasAce,\n                ImgFontStyle: clsattr.ImgFontStyle,\n                Name: clsattr.Name,\n                Order: clsattr.Order,\n                Open: open,\n                Attr: attr,\n                control_style: this.$data.subClassGridStyle.StyleDef.control_style,\n                title_p_wdith: this.$data.subClassGridStyle.StyleDef.title_p_wdith,\n                Font: this.$data.subClassGridStyle.StyleDef.Font ? this.$data.subClassGridStyle.StyleDef.Font : {},\n                Bk_Color: this.$data.subClassGridStyle.StyleDef.Bk_Color ? this.$data.subClassGridStyle.StyleDef.Bk_Color : '#FFFFFF',\n                Text_Color: this.$data.subClassGridStyle.StyleDef.Text_Color ? this.$data.subClassGridStyle.StyleDef.Text_Color : '#000000'\n              });\n            }\n          }\n        }\n        if (newattrlist.length > 0) {\n          this.$data.subClassAttrList = newattrlist;\n        }\n        var req = [];\n        if (this.$data.subClassGridStyle.StyleDef) {\n          if (this.$data.subClassGridStyle.StyleDef.show_style.length > 0) {\n            var attrlist = this.$data.subClassGridStyle.StyleDef.show_style;\n            // $el.find('.attr_field').prop('readonly', true);\n            // $el.find('.attr_field').prop('disabled', true);\n            for (var i = 0; i < attrlist.length; i++) {\n              var attr = attrlist[i].attrs;\n              for (var j = 0; j < attr.length; j++) {\n                var ar = attr[j];\n                req.push({\n                  attr: ar.attr,\n                  value: ar.value ? ar.value : ''\n                });\n              }\n            }\n          }\n        }\n        var eventlist = this.$data.subClassGridStyle.StyleDef.event;\n        if (eventlist) {\n          if (eventlist.length > 0) {\n            for (var i = 0; i < eventlist.length; i++) {\n              if (eventlist[i].event_id == 'before_ok') {\n                this.$data.edit_ok_event = eventlist[i];\n              } else if (eventlist[i].event_id == 'initial') {\n                this.$data.edit_inital_event = eventlist[i];\n              } else if (eventlist[i].event_id == 'before_select_compose') {\n                this.$data.edit_select_compose_event = eventlist[i].scrip_id;\n                this.$data.edit_compose_cls_id = eventlist[i].compose_cls_id;\n              }\n            }\n          }\n        }\n        // console.log(req);\n        if (this.$data.edit_inital_event) {\n          var eventid = this.$data.edit_inital_event.scrip_id;\n          var info = {\n            eventid: eventid,\n            edtype: \"0\",\n            projectid: '',\n            rclsid: '',\n            robjid: '',\n            userlogin: '',\n            clsid: this.$data.param.Sub_Cls.ID,\n            objid: \"\",\n            attr: req\n          };\n          this.scan_ini_DataObjRunCustomEvent(info);\n        }\n        __f__(\"log\", this.$data.subClassGridStyle, \" at pages/modal/3037.vue:1193\");\n        __f__(\"log\", this.$data.subClassAttrList, \" at pages/modal/3037.vue:1194\");\n      } else {\n        uni.showModal({\n          title: \"提示\",\n          content: \"未找到可显示的的属性\",\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      }\n    },\n    cancel: function cancel(e) {\n      uni.navigateBack({\n        delta: 1 //返回层数,2则上上页\n      });\n    },\n    panel_del: function panel_del(index) {\n      var $this = this;\n      if (this.$data.subPanelList[index].scanCodeVal == this.$data.scanCodeVal) {\n        this.$data.scanCodeVal = '';\n      }\n      if (!this.$data.subPanelList[index].ObjID) this.$data.subPanelList.splice(index, 1);else {\n        var dataInfo = {\n          class_id: this.$data.param.Sub_Cls.ID,\n          class_name: '',\n          obj_id: this.$data.subPanelList[index].ObjID\n        };\n        // console.log(dataInfo);\n        // return;\n        uni.showLoading({\n          title: \"加载中...\"\n        });\n        this.$store.dispatch('dataObjDel', dataInfo).then(function (success) {\n          // console.log(success);\n          uni.hideLoading();\n          if (ret.err_code == 0) {\n            $this.$data.subPanelList.splice(index, 1);\n            uni.showModal({\n              title: \"提示\",\n              content: \"删除成功!\",\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n          } else {\n            uni.showModal({\n              title: \"错误9\",\n              content: success.msg,\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n          }\n        }).catch(function (ex) {\n          __f__(\"log\", ex, \" at pages/modal/3037.vue:1232\");\n          uni.hideLoading();\n          uni.showModal({\n            title: \"提示9.1\",\n            content: ex.errMsg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        });\n      }\n    },\n    ontap: function ontap(e) {\n      var _this3 = this;\n      //扫码功能\n      //console.log(e.target)\n      getApp().onScan(function (result) {\n        //console.log(result.decodedata);\n        var isVal = _this3.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value;\n        // if(!isVal){\n        // \tthis.$data.subPanelList[e.target.dataset['iiindex']].subClassAttr[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value=result.decodedata;\n        // \tvar isVald =this.$data.subPanelList[e.target.dataset['iiindex']].subClassAttr[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value;\n        // \treturn;\n        // }\n        //主数据类扫码查询数据\n        if (isVal != result.decodedata) {\n          _this3.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value = result.decodedata;\n          uni.hideKeyboard();\n          //子数据类扫码区事件脚本\n          var eventid = _this3.$data.param.Scan_Code.Input_Change_Event.ID;\n          if (eventid) {\n            var req = [];\n            var attrlist = _this3.$data.classAttrList; //主数据类属性\n            for (var i = 0; i < attrlist.length; i++) {\n              var attr = attrlist[i].Attr;\n              for (var j = 0; j < attr.length; j++) {\n                var ar = attr[j];\n                if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n                if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n                  attr: ar.Name,\n                  value: ar.ValID ? ar.ValID : ''\n                });else if (ar.Type == '布尔值') req.push({\n                  attr: ar.Name,\n                  value: ar.Value ? '1' : '0'\n                });else req.push({\n                  attr: ar.Name,\n                  value: ar.Value ? ar.Value : ''\n                });\n              }\n            }\n            var info = {\n              eventid: eventid,\n              edtype: \"7\",\n              //\"0\",\n              projectid: '',\n              rclsid: '',\n              robjid: '',\n              userlogin: '',\n              clsid: 'MBOX',\n              //this.$data.param.Sub_Cls.ID,\n              objid: \"\",\n              attr: req,\n              mast_attr: [],\n              inputParamter: [{\n                attr: 'mast_input_3037',\n                value: result.decodedata\n              }]\n            };\n            _this3.scan_DataObjRunCustomEvent(info, \"\");\n          }\n        }\n      });\n    },\n    subontap: function subontap(e) {\n      var _this4 = this;\n      //扫码功能\n      //console.log(e.target)\n      getApp().onScan(function (result) {\n        //console.log(result.decodedata);\n        var isVal = _this4.$data.subClassAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value;\n        //主数据类扫码查询数据\n        if (isVal != result.decodedata) {\n          _this4.$data.subClassAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value = result.decodedata;\n          uni.hideKeyboard();\n          //子数据类扫码区事件脚本\n          var eventid = _this4.$data.param.Scan_Code.Input_Change_Event.ID;\n          if (eventid) {\n            var req = [];\n            var attrlist = _this4.$data.subClassAttrList; //主数据类属性\n            for (var i = 0; i < attrlist.length; i++) {\n              var attr = attrlist[i].Attr;\n              for (var j = 0; j < attr.length; j++) {\n                var ar = attr[j];\n                if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n                if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n                  attr: ar.Name,\n                  value: ar.ValID ? ar.ValID : ''\n                });else if (ar.Type == '布尔值') req.push({\n                  attr: ar.Name,\n                  value: ar.Value ? '1' : '0'\n                });else req.push({\n                  attr: ar.Name,\n                  value: ar.Value ? ar.Value : ''\n                });\n              }\n            }\n            var info = {\n              eventid: eventid,\n              edtype: \"7\",\n              //\"0\",\n              projectid: '',\n              rclsid: '',\n              robjid: '',\n              userlogin: '',\n              clsid: 'MBOX',\n              //this.$data.param.Sub_Cls.ID,\n              objid: \"\",\n              attr: req,\n              mast_attr: [],\n              inputParamter: [{\n                attr: 'mast_input_3037',\n                value: result.decodedata\n              }]\n            };\n            _this4.scan_DataObjRunCustomEvent(info, \"\");\n          }\n        }\n      });\n    },\n    scan_ontap: function scan_ontap(e) {\n      var _this5 = this;\n      //扫码区扫码功能\n      //console.log(e.target)\n      getApp().onScan(function (result) {\n        __f__(\"log\", result.decodedata, \" at pages/modal/3037.vue:1340\");\n        var isflag = true;\n        for (var i in _this5.$data.subPanelList) {\n          if (_this5.$data.subPanelList[i].scanCodeVal == result.decodedata) isflag = false;\n        }\n        //子数据类扫码查询数据\n        if (isflag) {\n          uni.hideKeyboard();\n          _this5.$data.scanCodeVal = result.decodedata;\n          var eventid = _this5.$data.param.Scan_Code.Input_Change_Event.ID;\n          if (eventid) {\n            var mast_req = [];\n            //主数据类属性\n            var classattrlist = _this5.$data.classAttrList;\n            for (var i = 0; i < classattrlist.length; i++) {\n              var attr = classattrlist[i].Attr;\n              for (var j = 0; j < attr.length; j++) {\n                var ar = attr[j];\n                if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n                if (ar.Type == '引用人员' || ar.Type == '引用项目') mast_req.push({\n                  attr: ar.Name,\n                  value: ar.ValID ? ar.ValID : ''\n                });else if (ar.Type == '布尔值') mast_req.push({\n                  attr: ar.Name,\n                  value: ar.Value ? '1' : '0'\n                });else mast_req.push({\n                  attr: ar.Name,\n                  value: ar.Value ? ar.Value : ''\n                });\n              }\n            }\n            var req = [];\n            //子数据类属性\n            var attrlist = _this5.$data.subClassAttrList;\n            for (var i = 0; i < attrlist.length; i++) {\n              var attr = attrlist[i].Attr;\n              for (var j = 0; j < attr.length; j++) {\n                var ar = attr[j];\n                if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n                if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n                  attr: ar.Name,\n                  value: ar.ValID ? ar.ValID : ''\n                });else if (ar.Type == '布尔值') req.push({\n                  attr: ar.Name,\n                  value: ar.Value ? '1' : '0'\n                });else req.push({\n                  attr: ar.Name,\n                  value: ar.Value ? ar.Value : ''\n                });\n              }\n            }\n            var info = {\n              eventid: eventid,\n              edtype: '7',\n              //\"0\",\n              projectid: '',\n              rclsid: '',\n              robjid: '',\n              userlogin: '',\n              clsid: 'MBOX',\n              //this.$data.param.Sub_Cls.ID,\n              objid: \"\",\n              attr: req,\n              mast_attr: mast_req,\n              inputParamter: [{\n                attr: 'input_3037',\n                value: _this5.$data.scanCodeVal\n              }]\n            };\n            _this5.scan_DataObjRunCustomEvent(info, \"\");\n          }\n        }\n      });\n    },\n    scan_onevent: function scan_onevent(e) {\n      // console.log(e.target);\n      if (e.target.value) {\n        var isflag = true;\n        for (var i in this.$data.subPanelList) {\n          if (this.$data.subPanelList[i].scanCodeVal == e.target.value) isflag = false;\n        }\n        //子数据类扫码查询数据\n        if (isflag) {\n          uni.hideKeyboard();\n          this.$data.scanCodeVal = e.target.value;\n          var eventid = this.$data.param.Scan_Code.Input_Change_Event.ID;\n          if (eventid) {\n            var mast_req = [];\n            //主数据类属性\n            var classattrlist = this.$data.classAttrList;\n            for (var i = 0; i < classattrlist.length; i++) {\n              var attr = classattrlist[i].Attr;\n              for (var j = 0; j < attr.length; j++) {\n                var ar = attr[j];\n                if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n                if (ar.Type == '引用人员' || ar.Type == '引用项目') mast_req.push({\n                  attr: ar.Name,\n                  value: ar.ValID ? ar.ValID : ''\n                });else if (ar.Type == '布尔值') mast_req.push({\n                  attr: ar.Name,\n                  value: ar.Value ? '1' : '0'\n                });else mast_req.push({\n                  attr: ar.Name,\n                  value: ar.Value ? ar.Value : ''\n                });\n              }\n            }\n            var req = [];\n            //子数据类属性\n            var attrlist = this.$data.subClassAttrList;\n            for (var i = 0; i < attrlist.length; i++) {\n              var attr = attrlist[i].Attr;\n              for (var j = 0; j < attr.length; j++) {\n                var ar = attr[j];\n                if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n                if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n                  attr: ar.Name,\n                  value: ar.ValID ? ar.ValID : ''\n                });else if (ar.Type == '布尔值') req.push({\n                  attr: ar.Name,\n                  value: ar.Value ? '1' : '0'\n                });else req.push({\n                  attr: ar.Name,\n                  value: ar.Value ? ar.Value : ''\n                });\n              }\n            }\n            var info = {\n              eventid: eventid,\n              edtype: '7',\n              //\"0\",\n              projectid: '',\n              rclsid: '',\n              robjid: '',\n              userlogin: '',\n              clsid: 'MBOX',\n              //this.$data.param.Sub_Cls.ID,\n              objid: \"\",\n              attr: req,\n              mast_attr: mast_req,\n              inputParamter: [{\n                attr: 'input_3037',\n                value: this.$data.scanCodeVal\n              }]\n            };\n            this.scan_DataObjRunCustomEvent(info, \"\");\n          }\n        }\n      }\n    },\n    onarrow: function onarrow(index, open) {\n      // console.log(index+'--'+open);\n      var data_attr = this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Open;\n      if (!data_attr) {\n        this.$data.subPanelList[e.target.dataset['iiindex']].subClassAttr[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value = open == true ? false : true;\n        return;\n      }\n      this.$data.classAttrList[e.target.dataset['iiindex']].subClassAttr[index].Open = open == true ? false : true;\n    },\n    ondateTime: function ondateTime(e) {\n      //console.log(e.target)\n      var data_attr = this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value;\n      if (!data_attr) {\n        this.$data.subPanelList[e.target.dataset['iiindex']].subClassAttr[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value = e.target.value;\n        return;\n      }\n      this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value = e.target.value;\n    },\n    onchange: function onchange(e) {\n      __f__(\"log\", e.target, \" at pages/modal/3037.vue:1492\");\n      var value = this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].dictitem[e.target.value];\n      var data_attr = this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']];\n      // console.log(data_attr);\n      if (value.Name != data_attr.Value) {\n        this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value = value.Name;\n        // console.log(this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value);\n        var eventid = this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].action;\n        if (eventid) {\n          // self.event_no_sub = 1;\n          var req = [];\n          var attrlist = this.$data.classAttrList;\n          for (var i = 0; i < attrlist.length; i++) {\n            var attr = attrlist[i].Attr;\n            for (var j = 0; j < attr.length; j++) {\n              var ar = attr[j];\n              if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n              if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n                attr: ar.Name,\n                val: ar.ValID ? ar.ValID : ''\n              });else if (ar.Type == '布尔值') req.push({\n                attr: ar.Name,\n                val: ar.Value ? '1' : '0'\n              });else req.push({\n                attr: ar.Name,\n                val: ar.Value ? ar.Value : ''\n              });\n            }\n          }\n          var info = {\n            eventid: eventid,\n            edtype: \"0\",\n            projectid: '',\n            rclsid: '',\n            robjid: '',\n            userlogin: '',\n            clsid: this.$data.param.Master_Cls.ID,\n            objid: \"\",\n            attr: req\n          };\n          this.DataObjRunCustomEvent(info);\n        }\n      }\n    },\n    onchange2: function onchange2(item, value, delvalue) {\n      // console.log(item);\n      // console.log(value);\n      // console.log(delvalue);\n      if (item.length == 0) {\n        //为空时,清空属性value\n        var index,\n          iindex,\n          dindex = 0;\n        for (var i in this.$data.classAttrList) {\n          for (var j in this.$data.classAttrList[i].Attr) {\n            if (delvalue[0].attr == this.$data.classAttrList[i].Attr[j].Name) {\n              this.$data.classAttrList[i].Attr[j].Value = \"\";\n            }\n          }\n        }\n      }\n      for (var v in item) {\n        var index,\n          iindex,\n          dindex = 0;\n        for (var i in this.$data.classAttrList) {\n          for (var j in this.$data.classAttrList[i].Attr) {\n            if (item[v].attr == this.$data.classAttrList[i].Attr[j].Name) {\n              index = i;\n              iindex = j;\n            }\n          }\n        }\n        var itemvalue = item[v];\n        var data_attr = this.$data.classAttrList[index].Attr[iindex];\n        __f__(\"log\", data_attr, \" at pages/modal/3037.vue:1561\");\n        if (itemvalue.Name != data_attr.Value) {\n          this.$data.classAttrList[index].Attr[iindex].Value = value;\n          // console.log(this.$data.classAttrList[index].Attr[iindex].Value);\n          var eventid = this.$data.classAttrList[index].Attr[iindex].action;\n          if (eventid) {\n            // self.event_no_sub = 1;\n            var req = [];\n            var attrlist = this.$data.classAttrList;\n            for (var i = 0; i < attrlist.length; i++) {\n              var attr = attrlist[i].Attr;\n              for (var j = 0; j < attr.length; j++) {\n                var ar = attr[j];\n                if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n                if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n                  attr: ar.Name,\n                  val: ar.ValID ? ar.ValID : ''\n                });else if (ar.Type == '布尔值') req.push({\n                  attr: ar.Name,\n                  val: ar.Value ? '1' : '0'\n                });else if (ar.Type == '字典' || ar.Type == '字典-字符串' || ar.Type == '字典-整数') req.push({\n                  attr: ar.Name,\n                  val: itemvalue.Name\n                });else req.push({\n                  attr: ar.Name,\n                  val: ar.Value ? ar.Value : ''\n                });\n              }\n            }\n            var info = {\n              eventid: eventid,\n              edtype: \"0\",\n              projectid: '',\n              rclsid: '',\n              robjid: '',\n              userlogin: '',\n              clsid: this.$data.param.Master_Cls.ID,\n              objid: \"\",\n              attr: req\n            };\n            this.DataObjRunCustomEvent(info);\n          }\n        }\n      }\n    },\n    sub_onchange: function sub_onchange(e) {\n      __f__(\"log\", e.target, \" at pages/modal/3037.vue:1605\");\n      var value = this.$data.subPanelList[e.target.dataset['iiindex']].subClassAttr[e.target.dataset['index']].Attr[e.target.dataset['iindex']].dictitem[e.target.value];\n      var data_attr = this.$data.subPanelList[e.target.dataset['iiindex']].subClassAttr[e.target.dataset['index']].Attr[e.target.dataset['iindex']];\n      // console.log(data_attr);\n      if (value.Name != data_attr.Value) {\n        this.$data.subPanelList[e.target.dataset['iiindex']].subClassAttr[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value = value.Name;\n        // console.log(this.$data.subPanelList[e.target.dataset['iiindex']].subClassAttr[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value);\n        var eventid = this.$data.subPanelList[e.target.dataset['iiindex']].subClassAttr[e.target.dataset['index']].Attr[e.target.dataset['iindex']].action;\n        if (eventid) {\n          // self.event_no_sub = 1;\n          var req = [];\n          var attrlist = this.$data.subPanelList[e.target.dataset['iiindex']].subClassAttr;\n          for (var i = 0; i < attrlist.length; i++) {\n            var attr = attrlist[i].Attr;\n            for (var j = 0; j < attr.length; j++) {\n              var ar = attr[j];\n              if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n              if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n                attr: ar.Name,\n                val: ar.ValID ? ar.ValID : ''\n              });else if (ar.Type == '布尔值') req.push({\n                attr: ar.Name,\n                val: ar.Value ? '1' : '0'\n              });else req.push({\n                attr: ar.Name,\n                val: ar.Value ? ar.Value : ''\n              });\n            }\n          }\n          var info = {\n            eventid: eventid,\n            edtype: \"0\",\n            projectid: '',\n            rclsid: '',\n            robjid: '',\n            userlogin: '',\n            clsid: this.$data.param.Sub_Cls.ID,\n            objid: \"\",\n            attr: req\n          };\n          this.DataObjRunCustomEvent(info);\n        }\n      }\n    },\n    sub_onchange2: function sub_onchange2(item, value, delvalue) {\n      // console.log(item);\n      // console.log(value);\n      // console.log(delvalue);\n      var subClassAttr = this.$data.subPanelList[e.target.dataset['iiindex']].subClassAttr;\n      if (item.length == 0) {\n        //为空时,清空属性value\n        var index,\n          iindex,\n          dindex = 0;\n        for (var i in subClassAttr) {\n          for (var j in subClassAttr[i].Attr) {\n            for (var d in subClassAttr[i].Attr[j].dictitem) {\n              if (delvalue[0].Name == subClassAttr[i].Attr[j].dictitem[d].Name) {\n                subClassAttr[i].Attr[j].Value = \"\";\n              }\n            }\n          }\n        }\n      }\n      for (var v in item) {\n        var index,\n          iindex,\n          dindex = 0;\n        for (var i in subClassAttr) {\n          for (var j in subClassAttr[i].Attr) {\n            for (var d in subClassAttr[i].Attr[j].dictitem) {\n              if (item[v].Name == subClassAttr[i].Attr[j].dictitem[d].Name) {\n                index = i;\n                iindex = j;\n                dindex = d;\n              }\n            }\n          }\n        }\n        var itemvalue = item[v];\n        var data_attr = subClassAttr[index].Attr[iindex];\n        __f__(\"log\", data_attr, \" at pages/modal/3037.vue:1679\");\n        if (itemvalue.Name != data_attr.Value) {\n          subClassAttr[index].Attr[iindex].Value = value;\n          // console.log(subClassAttr[index].Attr[iindex].Value);\n          var eventid = subClassAttr[index].Attr[iindex].action;\n          if (eventid) {\n            // self.event_no_sub = 1;\n            var req = [];\n            var attrlist = subClassAttr;\n            for (var i = 0; i < attrlist.length; i++) {\n              var attr = attrlist[i].Attr;\n              for (var j = 0; j < attr.length; j++) {\n                var ar = attr[j];\n                if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n                if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n                  attr: ar.Name,\n                  val: ar.ValID ? ar.ValID : ''\n                });else if (ar.Type == '布尔值') req.push({\n                  attr: ar.Name,\n                  val: ar.Value ? '1' : '0'\n                });else if (ar.Type == '字典' || ar.Type == '字典-字符串' || ar.Type == '字典-整数') req.push({\n                  attr: ar.Name,\n                  val: itemvalue.Name\n                });else req.push({\n                  attr: ar.Name,\n                  val: ar.Value ? ar.Value : ''\n                });\n              }\n            }\n            var info = {\n              eventid: eventid,\n              edtype: \"0\",\n              projectid: '',\n              rclsid: '',\n              robjid: '',\n              userlogin: '',\n              clsid: this.$data.param.Sub_Cls.ID,\n              objid: \"\",\n              attr: req\n            };\n            this.DataObjRunCustomEvent(info);\n          }\n        }\n      }\n    },\n    onevent: function onevent(e) {\n      // console.log(e.target);\n      var data_attr = this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']];\n      if (!data_attr) {\n        this.$data.subPanelList[e.target.dataset['iiindex']].subClassAttr[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value = e.target.value;\n        return;\n      }\n      // console.log(data_attr);\n      if (e.target.value != data_attr.Value) {\n        this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value = e.target.value;\n        // var eventid = this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].action;\n        //子数据类扫码区事件脚本\n        var eventid = this.$data.param.Scan_Code.Input_Change_Event.ID;\n        if (eventid) {\n          // self.event_no_sub = 1;\n          var req = [];\n          var attrlist = this.$data.classAttrList; //主数据类属性\n          for (var i = 0; i < attrlist.length; i++) {\n            var attr = attrlist[i].Attr;\n            for (var j = 0; j < attr.length; j++) {\n              var ar = attr[j];\n              if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n              if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n                attr: ar.Name,\n                value: ar.ValID ? ar.ValID : ''\n              });else if (ar.Type == '布尔值') req.push({\n                attr: ar.Name,\n                value: ar.Value ? '1' : '0'\n              });else req.push({\n                attr: ar.Name,\n                value: ar.Value ? ar.Value : ''\n              });\n            }\n          }\n          var info = {\n            eventid: eventid,\n            edtype: \"7\",\n            //\"0\",\n            projectid: '',\n            rclsid: '',\n            robjid: '',\n            userlogin: '',\n            clsid: 'MBOX',\n            //this.$data.param.Sub_Cls.ID,\n            objid: \"\",\n            attr: req,\n            mast_attr: [],\n            inputParamter: [{\n              attr: 'mast_input_3037',\n              value: e.target.value\n            }]\n          };\n          this.scan_DataObjRunCustomEvent(info, \"\");\n        }\n      }\n    },\n    oncheck: function oncheck(e) {\n      // console.log(e.target);\n      var ischecked = e.target.dataset.ischeck ? false : true;\n      var data_attr = this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']];\n      if (!data_attr) {\n        this.$data.subPanelList[e.target.dataset['iiindex']].subClassAttr[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value = ischecked;\n        return;\n      }\n      // console.log(data_attr);\n      if (ischecked != data_attr.Value) {\n        this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value = ischecked;\n        var eventid = this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].action;\n        if (eventid) {\n          // self.event_no_sub = 1;\n          var req = [];\n          var attrlist = this.$data.classAttrList;\n          for (var i = 0; i < attrlist.length; i++) {\n            var attr = attrlist[i].Attr;\n            for (var j = 0; j < attr.length; j++) {\n              var ar = attr[j];\n              if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n              if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n                attr: ar.Name,\n                val: ar.ValID ? ar.ValID : ''\n              });else if (ar.Type == '布尔值') req.push({\n                attr: ar.Name,\n                val: ar.Value ? '1' : '0'\n              });else req.push({\n                attr: ar.Name,\n                val: ar.Value ? ar.Value : ''\n              });\n            }\n          }\n          var info = {\n            eventid: eventid,\n            edtype: \"0\",\n            projectid: '',\n            rclsid: '',\n            robjid: '',\n            userlogin: '',\n            clsid: this.$data.param.Master_Cls.ID,\n            objid: \"\",\n            attr: req\n          };\n          this.DataObjRunCustomEvent(info);\n        }\n      }\n    },\n    inputValListIsDel: function inputValListIsDel(index) {\n      // console.log(index);\n      this.$data.inputValList.splice(index, 1); //删除tabPagejson的内容\n      // console.log(this.$data.inputValList);\n    },\n    addresschange: function addresschange(e) {\n      // console.log(e.target);\n      __f__(\"log\", e.data.join(';'), \" at pages/modal/3037.vue:1826\");\n      this.$data.subClassAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value = e.data.join(';');\n    },\n    classAttr_extButton: function classAttr_extButton(index, iindex) {\n      var $this = this;\n      var before_click_button = $this.$data.classAttrList[index].Attr[iindex].before_click_button;\n      var button_callback = $this.$data.classAttrList[index].Attr[iindex].button_callback;\n      if (!before_click_button) {\n        uni.showModal({\n          title: \"提示\",\n          content: \"before_click_button-event_id为空!\",\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n        return;\n      }\n      if (!button_callback) {\n        uni.showModal({\n          title: \"提示\",\n          content: \"button_callback-event_id为空!\",\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n        return;\n      }\n      var data_attr = this.$data.classAttrList[index].Attr[iindex];\n      this.DataObjRunCustomEvent_Return(before_click_button, data_attr, button_callback, index, iindex);\n    },\n    scan_classAttr_extButton: function scan_classAttr_extButton(e) {\n      //---------未完成-----------\n      var $this = this;\n      var Before_Select_Event = $this.$data.param.Scan_Code.Before_Select_Event.ID;\n      var After_Select_Event = $this.$data.param.Scan_Code.After_Select_Event.ID;\n      if (!Before_Select_Event) {\n        uni.showModal({\n          title: \"提示\",\n          content: \"选择按钮前事件为空!\",\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n        return;\n      }\n      if (!After_Select_Event) {\n        uni.showModal({\n          title: \"提示\",\n          content: \"新增按钮后事件为空!\",\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n        return;\n      }\n      // var data_attr = this.$data.classAttrList[index].Attr[iindex];\n      this.DataObjRunCustomEvent_Return(Before_Select_Event, '', After_Select_Event, '', '');\n    },\n    classAttr_AddPer: function classAttr_AddPer(index, iindex) {\n      var param = {\n        index: index,\n        iindex: iindex\n      };\n      var $this = this;\n      uni.navigateTo({\n        url: '../selpsn/index?mulit=false&param=' + JSON.stringify(param),\n        events: {\n          AddPer: function AddPer(data, param) {\n            // console.log(param);\n            __f__(\"log\", data, \" at pages/modal/3037.vue:1867\");\n            $this.$data.classAttrList[param.index].Attr[param.iindex].Value = data[0].Name;\n            $this.$data.classAttrList[param.index].Attr[param.iindex].ValID = data[0].Login + ';' + data[0].Name;\n            var eventid = $this.$data.classAttrList[param.index].Attr[param.iindex].action;\n            if (eventid) {\n              eventid = eventid.trim();\n              if (eventid) {\n                var info = {\n                  eventid: eventid,\n                  edtype: \"4\",\n                  projectid: \"\",\n                  rclsid: \"\",\n                  robjid: \"\",\n                  userlogin: data[0].Login,\n                  clsid: $this.$data.param.Master_Cls.ID,\n                  objid: \"\",\n                  attr: []\n                };\n\n                // var data_attr = $this.$data.classAttrList[param.index].Attr[param.iindex];\n                $this.DataObjRunCustomEvent(info);\n              }\n            }\n          }\n        }\n      });\n    },\n    classAttr_AddRef: function classAttr_AddRef(e) {\n      __f__(\"log\", e.target, \" at pages/modal/3037.vue:1896\");\n      uni.showModal({\n        title: \"提示\",\n        content: \"此功能还未实现!\",\n        showCancel: false,\n        confirmText: \"取消\"\n      });\n      // var value=this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].RelCls[e.target.value];\n      // this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value=value;\n    },\n    classAttr_AddPrj: function classAttr_AddPrj(index, iindex) {\n      var param = {\n        index: index,\n        iindex: iindex\n      };\n      var $this = this;\n      uni.navigateTo({\n        url: '../selPrj/index?relation=-1&param=' + JSON.stringify(param),\n        events: {\n          AddPer: function AddPer(data, param) {\n            // console.log(param);\n            // console.log(data);\n            $this.$data.classAttrList[param.index].Attr[param.iindex].Value = data[0].Name;\n            $this.$data.classAttrList[param.index].Attr[param.iindex].ValID = data[0].ID + ';' + data[0].Name;\n            var eventid = $this.$data.classAttrList[param.index].Attr[param.iindex].action;\n            if (eventid) {\n              eventid = eventid.trim();\n              if (eventid) {\n                var info = {\n                  eventid: eventid,\n                  edtype: \"2\",\n                  projectid: data[0].ID,\n                  rclsid: \"\",\n                  robjid: \"\",\n                  userlogin: \"\",\n                  clsid: $this.$data.param.Master_Cls.ID,\n                  objid: \"\",\n                  attr: []\n                };\n\n                // var data_attr = $this.$data.classAttrList[param.index].Attr[param.iindex];\n                $this.DataObjRunCustomEvent(info);\n              }\n            }\n          }\n        }\n      });\n    },\n    sava: function sava() {\n      if (this.$data.param.Before_OK_Event)\n        //判断功能点参数是否有确定前脚本\n        this.scan_OKDataObjRunCustomEvent(this.$data.param.Before_OK_Event.ID);else if (this.$data.param.After_OK_Event)\n        //判断功能点参数是否有确定后脚本\n        this.scan_OKDataObjRunCustomEvent(this.$data.param.After_OK_Event.ID);else uni.navigateBack({\n        delta: 1\n      }); //返回层数,2则上上页\n    },\n    add: function add() {\n      var _this6 = this;\n      uni.showLoading({\n        title: \"加载中...\",\n        mask: true\n      });\n      var req = [];\n      var attrlist = this.$data.classAttrList;\n      for (var i = 0; i < attrlist.length; i++) {\n        var attr = attrlist[i].Attr;\n        for (var j = 0; j < attr.length; j++) {\n          var ar = attr[j];\n          if (ar.Value == '请选择' || ar.Value == '——请选择——') ar.Value = '';\n          if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n          if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n            name: ar.Name,\n            value: ar.ValID ? ar.ValID : ''\n          });else if (ar.Type == '布尔值') req.push({\n            name: ar.Name,\n            value: ar.Value ? '1' : '0'\n          });else if (ar.Type == '字典' || ar.Type == '字典-字符串' || ar.Type == '字典-整数') {\n            if (ar.select == true) {\n              //判断下拉是否多选\n              var valStr = \"\";\n              for (var v in ar.Value) {\n                if (valStr) valStr += \";\";\n                valStr += ar.Value[v];\n              }\n              req.push({\n                name: ar.Name,\n                value: valStr\n              });\n            } else req.push({\n              name: ar.Name,\n              value: ar.Value\n            });\n          } else req.push({\n            name: ar.Name,\n            value: ar.Value ? ar.Value : ''\n          });\n          if (ar.notempty == true && !ar.Value) {\n            // if(ar.NotEmpty=='1'){\n            uni.hideLoading();\n            // uni.showToast({title:ar.DispName+'不能为空!',icon:\"success\",duration:3000});\n            uni.showModal({\n              title: \"提示\",\n              content: ar.DispName + '不能为空!',\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n            return;\n          }\n        }\n      }\n      var enviroment = {\n        'function': '3000',\n        // 功能点编号\n        cls_id: this.$data.param.Master_Cls.ID,\n        // 功能点主数据类标识\n        'button': 'top',\n        // top/bottom\n        button_name: '新增',\n        master: {\n          cls_id: this.$data.param.Master_Cls.ID\n        }\n      };\n\n      // var dataInfo={\n      //     class_id: this.$data.param.Master_Cls.ID, data_obj_id: '', masterclsid: '',\n      //     req: JSON.stringify(req), upfile: JSON.stringify([]), post_data: JSON.stringify({}),\n      //     compose: JSON.stringify([]), refdatastore: JSON.stringify([]), extinfo: JSON.stringify(enviroment), \n      // \tnot_trigger_sys_event: ''\n      // };\n      enviroment = _base.default.encode(JSON.stringify(enviroment)); //将字符串转换为base64编码\n      var obj_attr = {};\n      req.forEach(function (item) {\n        obj_attr[item.name] = item.value;\n      });\n      var dataInfo = {\n        class_id: this.$data.param.Master_Cls.ID,\n        class_name: '',\n        master_cls_id: '',\n        master_obj_id: '',\n        creator: '',\n        creator_name: '',\n        not_trigger_event: '',\n        update_exist: '',\n        post_process: '',\n        ext_info: enviroment,\n        obj_attr: obj_attr\n      };\n      __f__(\"log\", dataInfo, \" at pages/modal/3037.vue:2021\");\n      // return\n      this.$store.dispatch('createDataObj', dataInfo).then(function (success) {\n        __f__(\"log\", success, \" at pages/modal/3037.vue:2024\");\n        uni.hideLoading();\n        if (success.err_code == 0) {\n          var result = success.result;\n          if (success.result.action) {\n            var action = JSON.parse(success.result.Action);\n            if (action.ret == '0') {\n              if (action.result_type == '0') {\n                uni.showToast({\n                  title: action.result,\n                  icon: \"success\",\n                  duration: 3000\n                });\n              }\n              // \"{\"ret\":0, \"result_type\":0, \"result\":\"创建成功123123123\",\"info\":\"\"}\"\n            }\n          } else uni.showToast({\n            title: \"创建成功!\",\n            icon: \"success\",\n            duration: 3000\n          });\n          //刷新\n          uni.redirectTo({\n            url: '../modal/3037?param=' + JSON.stringify(_this6.$data.param) + \"&titlename=\" + _this6.$data.title\n          });\n          // this.class_attr_init();\n        } else {\n          uni.showModal({\n            title: \"错误\",\n            content: success.err_msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        __f__(\"log\", ex, \" at pages/modal/3037.vue:2047\");\n        uni.hideLoading();\n        uni.showModal({\n          title: \"提示\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\n    },\n    ini_DataObjRunCustomEvent: function ini_DataObjRunCustomEvent(info) {\n      var _this7 = this;\n      var param = {\n        EditStyle: this.$data.param.Master_Cls.View_Style.Name,\n        ViewStyle: this.$data.param.Master_Cls.View_Style.Name,\n        NotTriggerSysEvent: 0,\n        enviroment: {\n          'function': '3000',\n          // 功能点编号\n          cls_id: this.$data.param.Master_Cls.ID,\n          // 功能点主数据类标识\n          'button': 'top',\n          // top/bottom\n          button_name: '新增',\n          master: {\n            cls_id: this.$data.param.Master_Cls.ID // button=bottom时 master的cls_id\n            //obj_id: ''  // button=bottom时 master的obj_id\n          }\n        }\n      };\n\n      var inputparameter = '';\n      var global_attr = '';\n\n      // var dataInfo = {\n      //                 edtype: info.edtype, eventid: info.eventid, projectid: info.projectid,\n      //                 rclsid: info.rclsid, robjid: info.robjid, userlogin: info.userlogin, clsid: info.clsid, objid: info.objid,\n      //                 attr: JSON.stringify(info.attr), extinfo: JSON.stringify(param), inputparameter: inputparameter, global_attr: global_attr\n      //             }\n      param.enviroment = _base.default.encode(JSON.stringify(param.enviroment)); //将字符串转换为base64编码\n      var obj_attr = {};\n      info.attr.forEach(function (item) {\n        obj_attr[item.attr] = item.val;\n      });\n      if (!info.eventid.includes('{')) info.eventid = '{' + info.eventid + '}';\n      var dataInfo = {\n        ed_type: info.edtype,\n        start_transaction: '',\n        class_id: info.clsid,\n        class_name: '',\n        event_id: info.eventid,\n        event_name: '',\n        data_obj_id: info.objid,\n        obj_attr: obj_attr,\n        prj_id: info.projectid,\n        ref_cls_id: info.rclsid,\n        rel_obj_id: info.robjid,\n        user_login: info.userlogin,\n        data_json: '',\n        compose_info: '',\n        ext_info: param.enviroment,\n        global_attr: global_attr,\n        input_param: inputparameter\n      };\n      __f__(\"log\", dataInfo, \" at pages/modal/3037.vue:2101\");\n      // return;\n      this.$store.dispatch('runCustomEvent', dataInfo).then(function (success) {\n        __f__(\"log\", success, \" at pages/modal/3037.vue:2104\");\n        if (success.err_code == 0) {\n          var data = success.result;\n          if (data.action) {\n            var actionlist = data.action;\n            if (actionlist) {\n              for (var j = 0; j < actionlist.length; j++) {\n                var action = actionlist[j];\n                var action_type = action.action_type;\n                var value = action.value;\n                if (action_type == 'set_dlg_attr') {\n                  if (value) {\n                    var val = value;\n                    if (typeof value == 'string') {\n                      val = JSON.parse(value);\n                    }\n                    __f__(\"log\", val, \" at pages/modal/3037.vue:2120\");\n                    for (var i = 0; i < val.length; i++) {\n                      for (var a = 0; a < _this7.$data.classAttrList.length; a++) {\n                        for (var l = 0; l < _this7.$data.classAttrList[a].Attr.length; l++) {\n                          var ca = _this7.$data.classAttrList[a].Attr[l];\n                          if (val[i].attr == ca.Name) {\n                            if (ca.Type == '字典' || ca.Type == '字典-字符串' || ca.Type == '字典-整数') {\n                              var dictItemList = [];\n                              for (var d in val[i].choice_list) {\n                                var val = val[i].choice_list[d];\n                                dictItemList.push({\n                                  \"CN_S_NAME\": val,\n                                  \"Name\": val,\n                                  \"label\": val,\n                                  \"value\": val\n                                });\n                              }\n                              ca.dictitem = dictItemList;\n                              // attr[j].dictitem = val[i].choice_list;\n                            } else {\n                              // ca.value = val[i].value;\n                            }\n                          }\n                        }\n                      }\n                      var length = 0;\n                      if (!_this7.$data.refdatastore.filter(function (s) {\n                        return val[i].attr == s.attr;\n                      }).length) {\n                        length = 1;\n                        _this7.$data.refdatastore.push(val[i]);\n                      }\n                      if (length == 0) {\n                        for (var j = 0; j < _this7.$data.refdatastore.length; j++) {\n                          if (_this7.$data.refdatastore[j].attr == val[i].attr) {\n                            _this7.$data.refdatastore[j].value = val[i].value;\n                          }\n                        }\n                      }\n                    }\n                  }\n                }\n                if (action_type == 'open_select_userdlg') {\n                  uni.showModal({\n                    title: \"错误2.2\",\n                    content: \"open_select_userdlg这个action_type还未处理!\",\n                    showCancel: false,\n                    confirmText: \"取消\"\n                  });\n                }\n              }\n            }\n          }\n        } else {\n          uni.showModal({\n            title: \"错误2\",\n            content: success.err_msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        // console.log(ex);\n        uni.showModal({\n          title: \"错误2.1\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\n    },\n    DataObjRunCustomEvent: function DataObjRunCustomEvent(info, data_attr) {\n      var $this = this;\n      var enviroment = {\n        'function': '3000',\n        // 功能点编号\n        cls_id: this.$data.param.Master_Cls.ID,\n        // 功能点主数据类标识\n        'button': 'top',\n        // top/bottom\n        button_name: '新增',\n        master: {\n          cls_id: this.$data.param.Master_Cls.ID // button=bottom时 master的cls_id\n          //obj_id: ''  // button=bottom时 master的obj_id\n        }\n      };\n\n      enviroment.edit_dlg = {\n        type: 'small',\n        //小窗口\n        class_id: this.$data.param.Master_Cls.ID //当前数据类id\n      };\n\n      if (data_attr) {\n        enviroment.edit_dlg.form_control = {\n          //所属的表单控件\n          name: data_attr.Name,\n          //字段属性\n          text: data_attr.DispName,\n          //显示文本\n          group_name: data_attr.GroupName,\n          //属性组\n          type: data_attr.Type,\n          //字段类型\n          readonly: data_attr.ReadOnly,\n          //是否只读\n          button_img: data_attr.button_img,\n          //引用按钮的图标\n          button_tooltip: data_attr.button_tooltip //引用按钮的tooltip\n        };\n      }\n      // var dataInfo = {\n      //        edtype: info.edtype, eventid: info.eventid, projectid: info.projectid.replace('{','').replace('}',''),\n      //        rclsid: info.rclsid, robjid: info.robjid, userlogin: info.userlogin, clsid: info.clsid, objid: info.objid,\n      //        attr: JSON.stringify(info.attr), extinfo: JSON.stringify(enviroment), inputparameter: '', global_attr: JSON.stringify(this.$data.global_attr)\n      //    }\n      enviroment = _base.default.encode(JSON.stringify(enviroment)); //将字符串转换为base64编码\n      var global_attr = _base.default.encode(JSON.stringify(this.$data.global_attr)); //将字符串转换为base64编码\n      if (info.dataJson) info.dataJson = _base.default.encode(JSON.stringify(info.dataJson)); //将字符串转换为base64编码\n      var obj_attr = {};\n      info.attr.forEach(function (item) {\n        obj_attr[item.attr] = item.val;\n      });\n      if (!info.eventid.includes('{')) info.eventid = '{' + info.eventid + '}';\n      var dataInfo = {\n        ed_type: info.edtype,\n        start_transaction: '',\n        class_id: info.clsid,\n        class_name: '',\n        event_id: info.eventid,\n        event_name: '',\n        data_obj_id: info.objid,\n        obj_attr: obj_attr,\n        prj_id: info.projectid,\n        ref_cls_id: info.rclsid,\n        rel_obj_id: info.robjid,\n        user_login: info.userlogin,\n        data_json: info.dataJson,\n        compose_info: '',\n        ext_info: enviroment,\n        global_attr: global_attr,\n        input_param: ''\n      };\n      __f__(\"log\", dataInfo, \" at pages/modal/3037.vue:2233\");\n      // return;\n      this.$store.dispatch('runCustomEvent', dataInfo).then(function (success) {\n        __f__(\"log\", success, \" at pages/modal/3037.vue:2236\");\n        if (success.err_code == 0) {\n          var data = success.result;\n          var actionlist = data.action;\n          if (actionlist) {\n            __f__(\"log\", actionlist, \" at pages/modal/3037.vue:2242\");\n            for (var i = 0; i < actionlist.length; i++) {\n              var action = actionlist[i];\n              if (action.action_type == 'set_dlg_attr') {\n                var result = action.value;\n                for (var i = 0; i < result.length; i++) {\n                  if (result[i].choice_list) {\n                    for (var c = 0; c < $this.$data.classAttrList.length; c++) {\n                      var attr = $this.$data.classAttrList[c].Attr;\n                      for (var j = 0; j < attr.length; j++) {\n                        if (attr[j].Name == result[i].attr) {\n                          if (attr[j].Type == '字典' || attr[j].Type == '字典-字符串' || attr[j].Type == '字典-整数') {\n                            var dictItemList = [];\n                            for (var d in result[i].choice_list) {\n                              var val = result[i].choice_list[d];\n                              dictItemList.push({\n                                \"CN_S_NAME\": val,\n                                \"Name\": val,\n                                \"label\": val,\n                                \"value\": val\n                              });\n                            }\n                            attr[j].dictitem = dictItemList;\n                            // attr[j].dictitem = result[i].choice_list;\n                          }\n                        }\n                      }\n                    }\n                  }\n\n                  for (var c = 0; c < $this.$data.classAttrList.length; c++) {\n                    var attr = $this.$data.classAttrList[c].Attr;\n                    for (var j = 0; j < attr.length; j++) {\n                      __f__(\"log\", attr[j].Name + '==' + result[i].attr, \" at pages/modal/3037.vue:2269\");\n                      if (attr[j].Name == result[i].attr) {\n                        attr[j].Value = result[i].value;\n                      }\n                    }\n                  }\n                  var length = 0;\n                  if (!$this.$data.refdatastore.filter(function (s) {\n                    return result[i].attr == s.attr;\n                  }).length) {\n                    length = 1;\n                    $this.$data.refdatastore.push(result[i]);\n                  }\n                  if (length == 0) {\n                    for (var j = 0; j < $this.$data.refdatastore.length; j++) {\n                      if ($this.$data.refdatastore[j].attr == result[i].attr) {\n                        $this.$data.refdatastore[j].value = result[i].value;\n                      }\n                    }\n                  }\n                }\n              } else if (data.action[i].action_type == 'set_global_attr') {\n                $this.$data.global_attr = data.action[i].value || [];\n              }\n            }\n          }\n          if (data.result) {\n            var result = data.result;\n            for (var i = 0; i < result.length; i++) {\n              for (var c = 0; c < $this.$data.classAttrList.length; c++) {\n                var attr = $this.$data.classAttrList[c].Attr;\n                for (var j = 0; j < attr.length; j++) {\n                  if (attr[j].Name == result[i].attr) {\n                    attr[j].Value = result[i].value;\n                  }\n                }\n              }\n              var length = 0;\n              if (!$this.$data.refdatastore.filter(function (s) {\n                return result[i].attr == s.attr;\n              }).length) {\n                length = 1;\n                $this.$data.refdatastore.push(result[i]);\n              }\n              if (length == 0) {\n                for (var j = 0; j < $this.$data.refdatastore.length; j++) {\n                  if ($this.$data.refdatastore[j].attr == result[i].attr) {\n                    $this.$data.refdatastore[j].value = result[i].value;\n                  }\n                }\n              }\n            }\n          }\n        } else {\n          uni.showModal({\n            title: \"错误3\",\n            content: success.err_msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        // console.log(ex);\n        uni.showModal({\n          title: \"错误3.1\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\n    },\n    OKDataObjRunCustomEvent: function OKDataObjRunCustomEvent() {\n      var _this8 = this;\n      var enviroment = {\n        'function': '3000',\n        // 功能点编号\n        cls_id: this.$data.param.Master_Cls.ID,\n        // 功能点主数据类标识\n        'button': 'top',\n        // top/bottom\n        button_name: '新增',\n        master: {\n          cls_id: this.$data.param.Master_Cls.ID // button=bottom时 master的cls_id\n        }\n      };\n\n      var eventid = this.$data.edit_ok_event.scrip_id;\n      var req = [];\n      var attrlist = this.$data.classAttrList;\n      for (var i = 0; i < attrlist.length; i++) {\n        var attr = attrlist[i].Attr;\n        for (var j = 0; j < attr.length; j++) {\n          var ar = attr[j];\n          if (ar.Value == '请选择' || ar.Value == '——请选择——') ar.Value = '';\n          if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n          if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n            attr: ar.Name,\n            value: ar.ValID ? ar.ValID : ''\n          });else if (ar.Type == '布尔值') req.push({\n            attr: ar.Name,\n            value: ar.Value ? '1' : '0'\n          });else req.push({\n            attr: ar.Name,\n            value: ar.Value\n          });\n        }\n      }\n      if (this.$data.refdatastore.length > 0) {\n        for (var i = 0; i < this.$data.refdatastore.length; i++) {\n          if (!req.filter(function (s) {\n            return this.$data.refdatastore[i].attr == s.name;\n          }).length) {\n            length = 1;\n            req.push({\n              'attr': this.$data.refdatastore[i].attr,\n              'value': this.$data.refdatastore[i].value\n            });\n          }\n        }\n      }\n      var info = {\n        eventid: eventid,\n        edtype: \"0\",\n        projectid: '',\n        rclsid: '',\n        robjid: '',\n        userlogin: '',\n        clsid: this.$data.param.Master_Cls.ID,\n        objid: \"\",\n        attr: req\n      };\n      //  \tvar dataInfo = {\n      //          edtype: info.edtype, eventid: info.eventid, projectid: info.projectid,rclsid: info.rclsid, \n      // robjid: info.robjid, userlogin: info.userlogin, clsid: info.clsid, objid: info.objid,\n      // attr: JSON.stringify(info.attr), extinfo: JSON.stringify(enviroment), global_attr: JSON.stringify(this.$data.global_attr)\n      //      }\n      enviroment = _base.default.encode(JSON.stringify(enviroment)); //将字符串转换为base64编码\n      var global_attr = _base.default.encode(JSON.stringify(this.$data.global_attr)); //将字符串转换为base64编码\n      var obj_attr = {};\n      info.attr.forEach(function (item) {\n        obj_attr[item.attr] = item.val;\n      });\n      if (!eventid.includes('{')) eventid = '{' + eventid + '}';\n      var dataInfo = {\n        ed_type: info.edtype,\n        start_transaction: '',\n        class_id: info.clsid,\n        class_name: '',\n        event_id: eventid,\n        event_name: '',\n        data_obj_id: info.objid,\n        obj_attr: obj_attr,\n        prj_id: info.projectid,\n        ref_cls_id: info.rclsid,\n        rel_obj_id: info.robjid,\n        user_login: info.userlogin,\n        data_json: '',\n        compose_info: '',\n        ext_info: enviroment,\n        global_attr: global_attr,\n        input_param: ''\n      };\n      __f__(\"log\", dataInfo, \" at pages/modal/3037.vue:2413\");\n      // return;\n      this.$store.dispatch('runCustomEvent', dataInfo).then(function (success) {\n        __f__(\"log\", success, \" at pages/modal/3037.vue:2416\");\n        if (success.err_code == 0) {\n          var data = success.result;\n          var result = data.result;\n          for (var i = 0; i < result.length; i++) {\n            // self.class_attr_ele.find('.attr_field[data-field=\"' + result[i].attr + '\"]').val(result[i].value).data('val', result[i].value);\n            var length = 0;\n            if (!_this8.$data.refdatastore.filter(function (s) {\n              return result[i].attr == s.attr;\n            }).length) {\n              length = 1;\n              _this8.$data.refdatastore.push(result[i]);\n            }\n            if (length == 0) {\n              for (var j = 0; j < _this8.$data.refdatastore.length; j++) {\n                if (_this8.$data.refdatastore[j].attr == result[i].attr) {\n                  _this8.$data.refdatastore[j].value = result[i].value;\n                }\n              }\n            }\n          }\n          _this8.add();\n        } else {\n          uni.showModal({\n            title: \"错误4\",\n            content: success.err_msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        // console.log(ex);\n        uni.showModal({\n          title: \"错误4.1\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\n    },\n    DataObjRunCustomEvent_Return: function DataObjRunCustomEvent_Return(eventid, data_attr, button_callback, index, iindex) {\n      var _this9 = this;\n      var enviroment = {\n        'function': '3000',\n        // 功能点编号\n        cls_id: this.$data.param.Master_Cls.ID,\n        // 功能点主数据类标识\n        'button': 'top',\n        // top/bottom\n        button_name: '新增',\n        master: {\n          cls_id: this.$data.param.Master_Cls.ID // button=bottom时 master的cls_id\n          //obj_id: ''  // button=bottom时 master的obj_id\n        }\n      };\n\n      var req = [];\n      var attrlist = this.$data.classAttrList;\n      for (var i = 0; i < attrlist.length; i++) {\n        var attr = attrlist[i].Attr;\n        for (var j = 0; j < attr.length; j++) {\n          var ar = attr[j];\n          if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n          if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n            attr: ar.Name,\n            value: ar.ValID ? ar.ValID : ''\n          });else if (ar.Type == '布尔值') req.push({\n            attr: ar.Name,\n            value: ar.Value ? '1' : '0'\n          });else req.push({\n            attr: ar.Name,\n            value: ar.Value\n          });\n        }\n      }\n      if (this.$data.refdatastore.length > 0) {\n        for (var i = 0; i < this.$data.refdatastore.length; i++) {\n          if (!req.filter(function (s) {\n            return this.$data.refdatastore[i].attr == s.name;\n          }).length) {\n            length = 1;\n            req.push({\n              'attr': this.$data.refdatastore[i].attr,\n              'value': this.$data.refdatastore[i].value\n            });\n          }\n        }\n      }\n      var extinfo = enviroment;\n      extinfo.edit_dlg = {\n        type: 'small',\n        //小窗口\n        class_id: this.$data.param.Master_Cls.ID //当前数据类id\n      };\n\n      if (data_attr) {\n        extinfo.edit_dlg.form_control = {\n          //所属的表单控件\n          name: data_attr.Name,\n          //字段属性\n          text: data_attr.DispName,\n          //显示文本\n          group_name: data_attr.GroupName,\n          //属性组\n          type: data_attr.Type,\n          //字段类型\n          readonly: data_attr.ReadOnly,\n          //是否只读\n          button_img: data_attr.button_img,\n          //引用按钮的图标\n          button_tooltip: data_attr.button_tooltip //引用按钮的tooltip\n        };\n      }\n      // var dataInfo = {\n      // \tedtype:  \"0\", eventid: eventid, projectid: '',rclsid: '', robjid: '', userlogin: '', \n      // \tclsid: this.$data.param.Master_Cls.ID, objid: '',attr: JSON.stringify(req), \n      // \textinfo: JSON.stringify(extinfo), global_attr: JSON.stringify(this.$data.global_attr)\n      // }\n      extinfo = _base.default.encode(JSON.stringify(extinfo)); //将字符串转换为base64编码\n      var global_attr = _base.default.encode(JSON.stringify(this.$data.global_attr)); //将字符串转换为base64编码\n      var obj_attr = {};\n      req.forEach(function (item) {\n        obj_attr[item.attr] = item.val;\n      });\n      if (!eventid.includes('{')) eventid = '{' + eventid + '}';\n      var dataInfo = {\n        ed_type: \"0\",\n        start_transaction: '',\n        class_id: this.$data.param.clsid,\n        class_name: '',\n        event_id: eventid,\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: extinfo,\n        global_attr: global_attr,\n        input_param: ''\n      };\n      __f__(\"log\", dataInfo, \" at pages/modal/3037.vue:2531\");\n      // return;\n      this.$store.dispatch('runCustomEvent', dataInfo).then(function (success) {\n        __f__(\"log\", success, \" at pages/modal/3037.vue:2534\");\n        if (success.err_code == 0) {\n          var data = success.result;\n          if (data != \"\") {\n            var actions = data.action;\n            __f__(\"log\", actions, \" at pages/modal/3037.vue:2540\");\n            if (actions) {\n              for (var i = 0; i < actions.length; i++) {\n                var action = actions[i];\n                var val = action.value;\n                var enviroment = JSON.stringify(enviroment);\n                if (action.action_type == 'open_panel') {\n                  var d = dialog({\n                    title: '<i class=\"ace-icon fa fa-info-circle\"></i> ' + '提示',\n                    content: action.action_type + '此action尚未处理!'\n                  });\n                  d.show();\n                } else if (action.action_type == 'open_select_userdlg') {\n                  var style = val.style;\n                  // style == 'user' ? '选择人员' : style == 'department' ? '选择部门' : style == 'role' ? '选择角色' : ''\n                  var $this = _this9;\n                  var param = {\n                    index: index,\n                    iindex: iindex,\n                    button_callback: button_callback,\n                    req: req,\n                    data_attr: data_attr\n                  };\n                  uni.navigateTo({\n                    url: '../selpsn/index?mulit=false&param=' + JSON.stringify(param),\n                    events: {\n                      AddPer: function AddPer(data, param) {\n                        // console.log(param);\n                        __f__(\"log\", data, \" at pages/modal/3037.vue:2570\");\n                        var callback_eventid = param.button_callback.trim();\n                        var info = {\n                          eventid: callback_eventid,\n                          edtype: \"0\",\n                          projectid: '',\n                          rclsid: '',\n                          robjid: '',\n                          userlogin: '',\n                          clsid: $this.$data.param.Master_Cls.ID,\n                          objid: \"\",\n                          attr: param.req,\n                          inputparameter: data\n                        };\n                        $this.DataObjRunCustomEvent(info, param.data_attr);\n                      }\n                    }\n                  });\n                } else if (action.action_type == 'open_data_query_dlg') {} else if (action.action_type == 'open_common_dlg') {\n                  var value = action.value;\n                  var d = dialog({\n                    title: '<i class=\"ace-icon fa fa-info-circle\"></i> ' + '提示',\n                    content: action.action_type + '此action尚未处理!'\n                  });\n                  d.show();\n                } else if (action.action_type == 'open_project_query_dlg') {\n                  //console.log(action.value.select_range);\n                  //console.log(action.value.mulit_select);\n                  var priRel = '-1';\n                  if (action.value.select_range == '全部相关') priRel = '0';else if (action.value.select_range == '我负责的项目') priRel = '1';else if (action.value.select_range == '我创建的') priRel = '2';else if (action.value.select_range == '我参与的' || action.value.select_range == '我参加的') priRel = '3';else if (action.value.select_range == '我关注的') priRel = '4';else if (action.value.select_range == '我下属的项目') priRel = '5';\n                  var $this = _this9;\n                  var param_ = {\n                    index: index,\n                    iindex: iindex,\n                    button_callback: button_callback,\n                    req: req\n                  };\n                  uni.navigateTo({\n                    url: '../selPrj/index?relation=' + priRel + '&param=' + JSON.stringify(param_),\n                    events: {\n                      AddPer: function AddPer(data, param) {\n                        $this.$data.classAttrList[param.index].Attr[param.iindex].Value = data[0].Name;\n                        $this.$data.classAttrList[param.index].Attr[param.iindex].ValID = data[0].ID + ';' + data[0].Name;\n                        var callback_eventid = param.button_callback.trim();\n                        if (callback_eventid) {\n                          var info = {\n                            eventid: callback_eventid,\n                            edtype: \"2\",\n                            projectid: data[0].ID,\n                            rclsid: \"\",\n                            robjid: \"\",\n                            userlogin: \"\",\n                            clsid: $this.$data.param.Master_Cls.ID,\n                            objid: \"\",\n                            attr: param.req\n                          };\n                          $this.DataObjRunCustomEvent(info);\n                        }\n                      }\n                    }\n                  });\n                } else {\n                  var d = dialog({\n                    title: '<i class=\"ace-icon fa fa-info-circle\"></i> ' + '提示',\n                    content: action.action_type + '此action尚未处理!'\n                  });\n                  d.show();\n                }\n              }\n            }\n          } else {\n            uni.showModal({\n              title: \"提示5.2\",\n              content: '调用 before_click_button 脚本返回空,event_id' + eventid,\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n          }\n        } else {\n          uni.showModal({\n            title: \"错误5\",\n            content: success.err_msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        // console.log(ex);\n        uni.showModal({\n          title: \"提示5.1\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\n    },\n    scan_ini_DataObjRunCustomEvent: function scan_ini_DataObjRunCustomEvent(info) {\n      var _this10 = this;\n      var param = {\n        EditStyle: this.$data.param.Sub_Cls.View_Style.Name,\n        ViewStyle: this.$data.param.Sub_Cls.View_Style.Name,\n        NotTriggerSysEvent: 0,\n        enviroment: {\n          'function': '3000',\n          // 功能点编号\n          cls_id: this.$data.param.Sub_Cls.ID,\n          // 功能点主数据类标识\n          'button': 'top',\n          // top/bottom\n          button_name: '新增',\n          master: {\n            cls_id: this.$data.param.Sub_Cls.ID // button=bottom时 master的cls_id\n            //obj_id: ''  // button=bottom时 master的obj_id\n          }\n        }\n      };\n\n      var inputparameter = '';\n      var global_attr = '';\n      // var dataInfo = {\n      //        edtype: info.edtype, eventid: info.eventid, projectid: info.projectid,\n      //        rclsid: info.rclsid, robjid: info.robjid, userlogin: info.userlogin, clsid: info.clsid, objid: info.objid,\n      //        attr: JSON.stringify(info.attr), extinfo: JSON.stringify(param), inputparameter: inputparameter, global_attr: global_attr\n      //    }\n      param = _base.default.encode(JSON.stringify(param)); //将字符串转换为base64编码\n      var obj_attr = {};\n      info.attr.forEach(function (item) {\n        obj_attr[item.attr] = item.val;\n      });\n      if (!info.eventid.includes('{')) info.eventid = '{' + info.eventid + '}';\n      var dataInfo = {\n        ed_type: info.edtype,\n        start_transaction: '',\n        class_id: info.clsid,\n        class_name: '',\n        event_id: info.eventid,\n        event_name: '',\n        data_obj_id: info.objid,\n        obj_attr: obj_attr,\n        prj_id: info.projectid,\n        ref_cls_id: info.rclsid,\n        rel_obj_id: info.robjid,\n        user_login: info.userlogin,\n        data_json: '',\n        compose_info: '',\n        ext_info: param,\n        global_attr: '',\n        input_param: ''\n      };\n      __f__(\"log\", dataInfo, \" at pages/modal/3037.vue:2717\");\n      // return;\n      this.$store.dispatch('runCustomEvent', dataInfo).then(function (success) {\n        __f__(\"log\", success, \" at pages/modal/3037.vue:2720\");\n        if (success.err_code == 0) {\n          var data = success.result;\n          var actionlist = data.action;\n          if (actionlist) {\n            for (var j = 0; j < actionlist.length; j++) {\n              var action = actionlist[j];\n              var action_type = action.action_type;\n              var value = action.value;\n              if (action_type == 'set_dlg_attr') {\n                if (value) {\n                  var val = value;\n                  if (typeof value == 'string') {\n                    val = JSON.parse(value);\n                  }\n                  __f__(\"log\", val, \" at pages/modal/3037.vue:2735\");\n                  for (var i = 0; i < val.length; i++) {\n                    for (var a = 0; a < _this10.$data.subClassAttrList.length; a++) {\n                      for (var l = 0; l < _this10.$data.subClassAttrList[a].Attr.length; l++) {\n                        var ca = _this10.$data.subClassAttrList[a].Attr[l];\n                        if (val[i].attr == ca.Name) {\n                          if (ca.Type == '字典' || ca.Type == '字典-字符串' || ca.Type == '字典-整数') {\n                            var dictItemList = [];\n                            for (var d in val[i].choice_list) {\n                              var val = val[i].choice_list[d];\n                              dictItemList.push({\n                                \"CN_S_NAME\": val,\n                                \"Name\": val,\n                                \"label\": val,\n                                \"value\": val\n                              });\n                            }\n                            ca.dictitem = dictItemList;\n                            // attr[j].dictitem = val[i].choice_list;\n                          } else {\n                            // ca.value = val[i].value;\n                          }\n                        }\n                      }\n                    }\n                    var length = 0;\n                    if (!_this10.$data.refdatastore.filter(function (s) {\n                      return val[i].attr == s.attr;\n                    }).length) {\n                      length = 1;\n                      _this10.$data.refdatastore.push(val[i]);\n                    }\n                    if (length == 0) {\n                      for (var j = 0; j < _this10.$data.refdatastore.length; j++) {\n                        if (_this10.$data.refdatastore[j].attr == val[i].attr) {\n                          _this10.$data.refdatastore[j].value = val[i].value;\n                        }\n                      }\n                    }\n                  }\n                }\n              }\n              if (action_type == 'open_select_userdlg') {\n                uni.showModal({\n                  title: \"错误6.2\",\n                  content: \"open_select_userdlg这个action_type还未处理!\",\n                  showCancel: false,\n                  confirmText: \"取消\"\n                });\n              }\n            }\n          }\n        } else {\n          uni.showModal({\n            title: \"错误6\",\n            content: success.err_msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        // console.log(ex);\n        uni.showModal({\n          title: \"错误6.1\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\n    },\n    scan_DataObjRunCustomEvent: function scan_DataObjRunCustomEvent(info, data_attr) {\n      var _this11 = this;\n      var $this = this;\n      var enviroment = {\n        'function': '3000',\n        // 功能点编号\n        cls_id: 'MBOX',\n        //this.$data.param.Sub_Cls.ID,     // 功能点从数据类标识\n        'button': 'top',\n        // top/bottom\n        button_name: '新增',\n        master: {\n          cls_id: 'MBOX',\n          //this.$data.param.Sub_Cls.ID, // button=bottom时 master的cls_id\n          attr: info.mast_attr //主数据类属性\n          //obj_id: ''  // button=bottom时 master的obj_id\n        }\n      };\n\n      enviroment.edit_dlg = {\n        type: 'small',\n        //小窗口\n        class_id: 'MBOX' //this.$data.param.Sub_Cls.ID,//当前数据类id\n      };\n\n      if (data_attr) {\n        enviroment.edit_dlg.form_control = {\n          //所属的表单控件\n          name: data_attr.Name,\n          //字段属性\n          text: data_attr.DispName,\n          //显示文本\n          group_name: data_attr.GroupName,\n          //属性组\n          type: data_attr.Type,\n          //字段类型\n          readonly: data_attr.ReadOnly,\n          //是否只读\n          button_img: data_attr.button_img,\n          //引用按钮的图标\n          button_tooltip: data_attr.button_tooltip //引用按钮的tooltip\n        };\n      }\n\n      // var dataInfo = {\n      //        edtype: info.edtype, eventid: info.eventid, projectid: info.projectid.replace('{','').replace('}',''),\n      //        rclsid: info.rclsid, robjid: info.robjid, userlogin: info.userlogin, clsid: info.clsid, objid: info.objid,\n      //        attr: JSON.stringify(info.attr), extinfo: JSON.stringify(enviroment), inputparameter: JSON.stringify(info.inputParamter), global_attr: JSON.stringify(this.$data.global_attr)\n      //    }\n      enviroment = _base.default.encode(JSON.stringify(enviroment)); //将字符串转换为base64编码\n      if (info.inputParamter) {\n        info.inputParamter = _base.default.encode(JSON.stringify(info.inputParamter)); //将字符串转换为base64编码\n      }\n\n      var global_attr = _base.default.encode(JSON.stringify(this.$data.global_attr)); //将字符串转换为base64编码\n\n      var obj_attr = {};\n      info.attr.forEach(function (item) {\n        obj_attr[item.attr] = item.val;\n      });\n      if (!info.eventid.includes('{')) info.eventid = '{' + info.eventid + '}';\n      var dataInfo = {\n        ed_type: info.edtype,\n        start_transaction: '',\n        class_id: info.clsid,\n        class_name: '',\n        event_id: info.eventid,\n        event_name: '',\n        data_obj_id: info.objid,\n        obj_attr: obj_attr,\n        prj_id: info.projectid.replace('{', '').replace('}', ''),\n        ref_cls_id: info.rclsid,\n        rel_obj_id: info.robjid,\n        user_login: info.userlogin,\n        data_json: '',\n        compose_info: '',\n        ext_info: enviroment,\n        global_attr: global_attr,\n        input_param: info.inputParamter\n      };\n      __f__(\"log\", dataInfo, \" at pages/modal/3037.vue:2852\");\n      // return;\n      this.$store.dispatch('runCustomEvent', dataInfo).then(function (success) {\n        __f__(\"log\", success, \" at pages/modal/3037.vue:2855\");\n        if (success.err_code == 0) {\n          var data = success.result;\n          var actionlist = data.action;\n          if (actionlist) {\n            __f__(\"log\", actionlist, \" at pages/modal/3037.vue:2861\");\n            for (var ii = 0; ii < actionlist.length; ii++) {\n              var action = actionlist[ii];\n              if (action.action_type == 'set_dlg_attr') {\n                var result = action.value;\n                for (var i = 0; i < result.length; i++) {\n                  if (result[i].choice_list) {\n                    for (var s = 0; s < $this.$data.subPanelList.length; s++) {\n                      for (var c = 0; c < $this.$data.subPanelList[s].subClassAttrList.length; c++) {\n                        var attr = $this.$data.subPanelList[s].subClassAttrList[c].Attr;\n                        for (var j = 0; j < attr.length; j++) {\n                          if (attr[j].Name == result[i].attr) {\n                            if (attr[j].Type == '字典' || attr[j].Type == '字典-字符串' || attr[j].Type == '字典-整数') {\n                              var dictItemList = [];\n                              for (var d in result[i].choice_list) {\n                                var val = result[i].choice_list[d];\n                                dictItemList.push({\n                                  \"CN_S_NAME\": val,\n                                  \"Name\": val,\n                                  \"label\": val,\n                                  \"value\": val\n                                });\n                              }\n                              attr[j].dictitem = dictItemList;\n                              // attr[j].dictitem = result[i].choice_list;\n                            }\n                          }\n                        }\n                      }\n                    }\n                  }\n\n                  for (var s = 0; s < $this.$data.subPanelList.length; s++) {\n                    for (var c = 0; c < $this.$data.subPanelList[s].subClassAttrList.length; c++) {\n                      var attr = $this.$data.subPanelList[s].subClassAttrList[c].Attr;\n                      for (var j = 0; j < attr.length; j++) {\n                        __f__(\"log\", attr[j].Name + '==' + result[i].attr, \" at pages/modal/3037.vue:2891\");\n                        if (attr[j].Name == result[i].attr) {\n                          attr[j].Value = result[i].value;\n                        }\n                      }\n                    }\n                  }\n                  var length = 0;\n                  if (!$this.$data.refdatastore.filter(function (s) {\n                    return result[i].attr == s.attr;\n                  }).length) {\n                    length = 1;\n                    $this.$data.refdatastore.push(result[i]);\n                  }\n                  if (length == 0) {\n                    for (var j = 0; j < $this.$data.refdatastore.length; j++) {\n                      if ($this.$data.refdatastore[j].attr == result[i].attr) {\n                        $this.$data.refdatastore[j].value = result[i].value;\n                      }\n                    }\n                  }\n                }\n              } else if (action.action_type == 'set_global_attr') {\n                $this.$actiontr = action.value || [];\n              } else if (action.action_type == 'add_subcls_panel') {\n                //主从数据类扫码查询数据\n                var result = action.value;\n                var list_1 = JSON.parse(JSON.stringify(_this11.$data.subClassAttrList));\n                var scanCodeVal = $this.$data.scanCodeVal;\n                if (info.inputParamter[0].attr == \"mast_input_3037\")\n                  //判断是主数据类扫码查询数据\n                  scanCodeVal = \"mast_input_3037-\" + ii;\n                $this.$data.subPanelList.push({\n                  scanCodeVal: scanCodeVal,\n                  subClassAttr: list_1\n                });\n                for (var i = 0; i < result.length; i++) {\n                  for (var s = 0; s < $this.$data.subPanelList.length; s++) {\n                    if ($this.$data.subPanelList[s].scanCodeVal == scanCodeVal) {\n                      if (result[i].attr == \"S_ID\") $this.$data.subPanelList[s].ObjID = result[i].value;\n                      var _subClassAttr = $this.$data.subPanelList[s].subClassAttr;\n                      for (var c = 0; c < _subClassAttr.length; c++) {\n                        var attr = _subClassAttr[c].Attr;\n                        for (var j = 0; j < attr.length; j++) {\n                          // console.log(attr[j].Name+'=='+result[i].attr);\n                          if (attr[j].Name == result[i].attr) {\n                            attr[j].Value = result[i].value;\n                          }\n                        }\n                      }\n\n                      // $this.$data.subPanelList[s].subClassAttr=list_1;\n                    }\n                  }\n\n                  var length = 0;\n                  if (!$this.$data.refdatastore.filter(function (s) {\n                    return result[i].attr == s.attr;\n                  }).length) {\n                    length = 1;\n                    $this.$data.refdatastore.push(result[i]);\n                  }\n                  if (length == 0) {\n                    for (var j = 0; j < $this.$data.refdatastore.length; j++) {\n                      if ($this.$data.refdatastore[j].attr == result[i].attr) {\n                        $this.$data.refdatastore[j].value = result[i].value;\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          }\n          if (data.result) {\n            var _list_ = JSON.parse(JSON.stringify(_this11.$data.subClassAttrList));\n            var scanCodeVal = $this.$data.scanCodeVal;\n            if (info.inputParamter[0].attr == \"mast_input_3037\") scanCodeVal = \"mast_input_3037-\" + ii;\n            $this.$data.subPanelList.push({\n              scanCodeVal: scanCodeVal,\n              subClassAttr: _list_\n            });\n            var result = data.result;\n            for (var i = 0; i < result.length; i++) {\n              for (var s = 0; s < $this.$data.subPanelList.length; s++) {\n                if ($this.$data.subPanelList[s].scanCodeVal == scanCodeVal) {\n                  if (result[i].attr == \"S_ID\") $this.$data.subPanelList[s].ObjID = result[i].value;\n                  var _subClassAttr = $this.$data.subPanelList[s].subClassAttr;\n                  for (var c = 0; c < _subClassAttr.length; c++) {\n                    var attr = _subClassAttr[c].Attr;\n                    for (var j = 0; j < attr.length; j++) {\n                      // console.log(attr[j].Name+'=='+result[i].attr);\n                      if (attr[j].Name == result[i].attr) {\n                        attr[j].Value = result[i].value;\n                      }\n                    }\n                  }\n                }\n              }\n              var length = 0;\n              if (!$this.$data.refdatastore.filter(function (s) {\n                return result[i].attr == s.attr;\n              }).length) {\n                length = 1;\n                $this.$data.refdatastore.push(result[i]);\n              }\n              if (length == 0) {\n                for (var j = 0; j < $this.$data.refdatastore.length; j++) {\n                  if ($this.$data.refdatastore[j].attr == result[i].attr) {\n                    $this.$data.refdatastore[j].value = result[i].value;\n                  }\n                }\n              }\n            }\n          }\n        } else {\n          uni.showModal({\n            title: \"错误7\",\n            content: success.err_msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        // console.log(ex);\n        uni.showModal({\n          title: \"错误7.1\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\n    },\n    scan_OKDataObjRunCustomEvent: function scan_OKDataObjRunCustomEvent(eventID) {\n      uni.showLoading({\n        title: \"加载中...\",\n        mask: true\n      });\n      var $this = this;\n      var req = [];\n      var attrlist = $this.$data.classAttrList;\n      for (var i = 0; i < attrlist.length; i++) {\n        var attr = attrlist[i].Attr;\n        for (var j = 0; j < attr.length; j++) {\n          var ar = attr[j];\n          if (ar.Value == '请选择' || ar.Value == '——请选择——') ar.Value = '';\n          if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n          if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n            attr: ar.Name,\n            value: ar.ValID ? ar.ValID : ''\n          });else if (ar.Type == '布尔值') req.push({\n            attr: ar.Name,\n            value: ar.Value ? '1' : '0'\n          });else if (ar.Type == '字典' || ar.Type == '字典-字符串' || ar.Type == '字典-整数') {\n            if (ar.select == true) {\n              //判断下拉是否多选\n              var valStr = \"\";\n              for (var v in ar.Value) {\n                if (valStr) valStr += \";\";\n                valStr += ar.Value[v];\n              }\n              req.push({\n                attr: ar.Name,\n                value: valStr\n              });\n            } else req.push({\n              attr: ar.Name,\n              value: ar.Value\n            });\n          } else req.push({\n            attr: ar.Name,\n            value: ar.Value ? ar.Value : ''\n          });\n          if (ar.notempty == true && !ar.Value) {\n            // if(ar.NotEmpty=='1'){\n            uni.hideLoading();\n            // uni.showToast({title:ar.DispName+'不能为空!',icon:\"success\",duration:3000});\n            uni.showModal({\n              title: \"提示\",\n              content: ar.DispName + '不能为空!',\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n            return;\n          }\n        }\n      }\n      var objects = [];\n      var subPanelList = $this.$data.subPanelList;\n      for (var s = 0; s < subPanelList.length; s++) {\n        var sub_req = [];\n        for (var i = 0; i < subPanelList[s].subClassAttr.length; i++) {\n          var attr = subPanelList[s].subClassAttr[i].Attr;\n          for (var j = 0; j < attr.length; j++) {\n            var ar = attr[j];\n            if (ar.Value == '请选择' || ar.Value == '——请选择——') ar.Value = '';\n            if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n            if (ar.Type == '引用人员' || ar.Type == '引用项目') sub_req.push({\n              attr: ar.Name,\n              value: ar.ValID ? ar.ValID : ''\n            });else if (ar.Type == '布尔值') sub_req.push({\n              attr: ar.Name,\n              value: ar.Value ? '1' : '0'\n            });else if (ar.Type == '字典' || ar.Type == '字典-字符串' || ar.Type == '字典-整数') {\n              if (ar.select == true) {\n                //判断下拉是否多选\n                var valStr = \"\";\n                for (var v in ar.Value) {\n                  if (valStr) valStr += \";\";\n                  valStr += ar.Value[v];\n                }\n                sub_req.push({\n                  attr: ar.Name,\n                  value: valStr\n                });\n              } else sub_req.push({\n                attr: ar.Name,\n                value: ar.Value\n              });\n            } else sub_req.push({\n              attr: ar.Name,\n              value: ar.Value ? ar.Value : ''\n            });\n            if (ar.notempty == true && !ar.Value) {\n              // if(ar.NotEmpty=='1'){\n              uni.hideLoading();\n              // uni.showToast({title:ar.DispName+'不能为空!',icon:\"success\",duration:3000});\n              uni.showModal({\n                title: \"提示\",\n                content: ar.DispName + '不能为空!',\n                showCancel: false,\n                confirmText: \"取消\"\n              });\n              return;\n            }\n          }\n        }\n        objects.push({\n          obj_id: subPanelList[s].scanCodeVal,\n          obj_attrs: sub_req\n        });\n      }\n      var dataJson = {\n        master_cls: {\n          cls_name: 'MBOX',\n          //$this.$data.param.Master_Cls.Name,\n          obj_attrs: req\n        },\n        input_3037: $this.$data.scanCodeVal,\n        //扫码内容\n        op_type: $this.$data.param.OperationType,\n        //作业类型定义\n        sub_cls: {\n          cls_name: 'MBOX',\n          //$this.$data.param.Sub_Cls.Name,\n          objects: objects\n        }\n      };\n      // console.log(JSON.stringify(dataJson));\n      //  \tvar dataInfo = {\n      //          edtype: \"7\", eventid: eventID, projectid: '',rclsid: '', robjid: '', userlogin: '', \n      // clsid: 'MBOX', objid: '',attr: JSON.stringify([]), extinfo: JSON.stringify([]), \n      // global_attr: JSON.stringify($this.$data.global_attr),dataJson:JSON.stringify(dataJson)\n      //      }\n      // console.log(JSON.stringify(dataInfo));\n      var dataJson = _base.default.encode(JSON.stringify(dataJson)); //将字符串转换为base64编码\n      var global_attr = _base.default.encode(JSON.stringify(this.$data.global_attr)); //将字符串转换为base64编码\n      if (!eventID.includes('{')) eventID = '{' + eventID + '}';\n      var dataInfo = {\n        ed_type: \"7\",\n        start_transaction: '',\n        class_id: 'MBOX',\n        class_name: '',\n        event_id: eventID,\n        event_name: '',\n        data_obj_id: '',\n        obj_attr: '',\n        prj_id: '',\n        ref_cls_id: '',\n        rel_obj_id: '',\n        user_login: '',\n        data_json: dataJson,\n        compose_info: '',\n        ext_info: '',\n        global_attr: global_attr,\n        input_param: ''\n      };\n      __f__(\"log\", dataInfo, \" at pages/modal/3037.vue:3143\");\n      // return;\n      this.$store.dispatch('runCustomEvent', dataInfo).then(function (success) {\n        __f__(\"log\", success, \" at pages/modal/3037.vue:3146\");\n        uni.hideLoading();\n        if (success.err_code == 0) {\n          var data = success.result;\n          var result = data.result;\n          if (eventID != $this.$data.param.After_OK_Event.ID) $this.scan_OKDataObjRunCustomEvent($this.$data.param.After_OK_Event.ID);else {\n            //刷新\n            uni.redirectTo({\n              url: '../modal/3037?param=' + JSON.stringify($this.$data.param) + \"&titlename=\" + $this.$data.title\n            });\n          }\n        } else {\n          uni.showModal({\n            title: \"错误8\",\n            content: success.err_msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        // console.log(ex);\n        uni.hideLoading();\n        uni.showModal({\n          title: \"错误8.1\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vcGFnZXMvbW9kYWwvMzAzNy52dWUiXSwibmFtZXMiOlsibW9kdWxlcyIsIkJhc2U2NCIsImNvbXBvbmVudHMiLCJwaWNrZXJBZGRyZXNzIiwiZGF0YSIsInRpdGxlIiwicGFyYW0iLCJjbGFzc0F0dHJMaXN0IiwiY2xhc3NHcmlkU3R5bGUiLCJlZGl0X2luaXRhbF9ldmVudCIsImVkaXRfb2tfZXZlbnQiLCJlZGl0X3NlbGVjdF9jb21wb3NlX2V2ZW50IiwiZWRpdF9jb21wb3NlX2Nsc19pZCIsImdsb2JhbF9hdHRyIiwicmVmZGF0YXN0b3JlIiwic2NhbkNvZGVWYWwiLCJzdWJDbGFzc0F0dHJMaXN0Iiwic3ViUGFuZWxMaXN0Iiwic3ViQ2xhc3NHcmlkU3R5bGUiLCJvbkxvYWQiLCJvcHRpb25zIiwidW5pIiwic2V0TmF2aWdhdGlvbkJhclRpdGxlIiwidGl0bGVuYW1lIiwiSlNPTiIsInBhcnNlIiwiJGRhdGEiLCJBZGRfQnRuTmFtZSIsIk1hc3Rlcl9DbHMiLCJWaWV3X1N0eWxlIiwic2hvd01vZGFsIiwiY29udGVudCIsInNob3dDYW5jZWwiLCJjb25maXJtVGV4dCIsIk5hbWUiLCJkYXRhSW5mbyIsImNsYXNzX2lkIiwiSUQiLCIkdGhpcyIsIiRzdG9yZSIsInN0YXRlIiwidGhpc2FyZWFGdW5jSUQiLCJnZXR0ZXJzIiwiZ2V0Y2xhc3NBdHRyTGlzdCIsImNsYXNzR3JpZFN0eWxlSW5mbyIsImRpc3BhdGNoIiwidGhlbiIsInN1Y2Nlc3MiLCJlcnJfY29kZSIsInJlc3VsdCIsImZvckVhY2giLCJncm91cCIsImluZGV4IiwiYXR0cl9saXN0IiwiYXR0ciIsImtleSIsInR5cGUiLCJEaWN0SXRlbUdldExpc3QiLCJzZXRUaW1lb3V0IiwiZXJyX21zZyIsImNhdGNoIiwiZXgiLCJlcnJNc2ciLCJzdWJkYXRhSW5mbyIsIlN1Yl9DbHMiLCJ0aGlzYXJlYUZ1bmNTdWJJRCIsImdldFN1YkNsYXNzQXR0ckxpc3QiLCJtZXRob2RzIiwiZGljdF9pZCIsImRpY3RfbmFtZSIsImRpY3RpdGVtIiwiY29tbWl0IiwiY2xzaWQiLCJzdHlsZU5hbWUiLCJjbHNUeXBlIiwiZ3JpZHN0eWxlSW5mbyIsInVpX3N0eWxlX3R5cGUiLCJ1aV9zdHlsZV9uYW1lIiwidGhpc0VkaXROYW1lIiwiZ2V0Y2xhc3NHcmlkU3R5bGVJbmZvIiwidmlld1BhcmFtIiwic3R5bGVkZWYiLCJkZWNvZGUiLCJzdHlsZV9kZWYiLCJ0aGlzRWRpdFN1Yk5hbWUiLCJnZXRTdWJDbGFzc0dyaWRTdHlsZUluZm8iLCJjbGFzc19ncmlkU3R5bGUiLCJpZCIsIm5hbWUiLCJUeXBlIiwiSXNEZWZhdWx0IiwiaXNfZGVmYXVsIiwiU3R5bGVEZWYiLCJjbGFzc19hdHRyTGlzdCIsImF0dHJzIiwiZGljdGl0ZW1zIiwiZGljdCIsInB1c2giLCJOb3RlIiwibm90ZSIsIk9yZGVyIiwib3JkZXIiLCJJbWdVcmwiLCJDb2RlIiwiY29kZSIsIkhhc1N1YiIsIlBhcmVudElEIiwiUGFyZW50TmFtZSIsIkx2bCIsImx2bCIsImlzX2RlZmF1bHQiLCJWYWx1ZSIsInZhbHVlIiwiQ05fR19JRCIsIkNOX0dfRElDVF9JRCIsIkNOX1NfTkFNRSIsIkNOX1NfTk9URSIsIkNOX05fT1JERVIiLCJDTl9TX0lNR19VUkwiLCJDTl9TX0NPREUiLCJDTl9DX0hBU19TVUIiLCJDTl9HX1BBUkVOVF9JVEVNX0lEIiwiQ05fR19QQVJFTlRfSVRFTV9OQU1FIiwiQ05fTl9MVkwiLCJDTl9DX0lTX0RFRkFVTFQiLCJDTl9TX1ZBTFVFIiwiU2l6ZSIsInNpemUiLCJOb3RFbXB0eSIsIm5vdF9lbXB0eSIsIkRlZlZhbHVlIiwiZGVmX3ZhbHVlIiwiRGljdE5hbWUiLCJEaWN0SUQiLCJDb2RlRGVmTmFtZSIsImNvZGVfZGVmX25hbWUiLCJDb2RlRGVmSUQiLCJjb2RlX2RlZl9pZCIsIlJlbENsc0lEIiwiUmVsQ2xzIiwicmVmX2NscyIsIldpZHRoIiwid2lkdGgiLCJIZWlnaHQiLCJoZWlnaHQiLCJDdHJsU3R5bGUiLCJjdHJsX3N0eWxlIiwiSGFzQWNlIiwiaGFzX2FjZSIsIkNhblNob3ciLCJjYW5fc2hvdyIsIkNhblF1ZXJ5IiwiY2FuX3F1ZXJ5IiwiUmVhZE9ubHkiLCJyZWFkX29ubHkiLCJJc0tleSIsImlzX2tleSIsIklzRml4ZWQiLCJpc19maXhlZCIsIkRpc3BOYW1lIiwiZGlzcF9uYW1lIiwiTHVhQXR0ciIsImx1YV9hdHRyIiwiRGVzYyIsImRlc2MiLCJBY3Rpb25EZWYiLCJhY3Rpb25fZGVmIiwiTXVsdGlsaW5ndWFsIiwibXVsdGlsaW5ndWFsIiwiUmVmQ29uZGl0aW9uIiwicmVmX2NvbmRpdGlvbiIsIkdyb3VwTmFtZSIsIkJrQ29sb3IiLCJia19jb2xvciIsIkltZ0ZvbnRTdHlsZSIsImltZ19mb250X3N0eWxlIiwiQXR0ciIsImNsYXNzX2F0dHJfaW5pdCIsInN1YkNsYXNzX2F0dHJfaW5pdCIsImF0dHJsaXN0Iiwic2hvd19zdHlsZSIsIm5ld2F0dHJsaXN0IiwibGVuZ3RoIiwiaSIsIm9wZW4iLCJhdHRyZ3JvdXBfbmFtZSIsInMiLCJjbHNhdHRyIiwiaiIsImwiLCJjYSIsImFjdGlvbiIsImVkaXQiLCJub3RlbXB0eSIsImV4dF9idXR0b24iLCJidXR0b25faW1nIiwiYnV0dG9uX3Rvb2x0aXAiLCJiZWZvcmVfY2xpY2tfYnV0dG9uIiwiYnV0dG9uX2NhbGxiYWNrIiwiaGlkZGVuIiwic2VsZWN0IiwidW5kZWZpbmVkIiwiZGljdGl0ZW1saXN0IiwiZCIsImxhYmVsIiwibm93RGF0ZSIsIkRhdGUiLCJkYXRlIiwieWVhciIsImdldEZ1bGxZZWFyIiwibW9udGgiLCJnZXRNb250aCIsImRheSIsImdldERhdGUiLCJSZWxDbHNMaXN0IiwiT3BlbiIsImNvbnRyb2xfc3R5bGUiLCJ0aXRsZV9wX3dkaXRoIiwiRm9udCIsIkJrX0NvbG9yIiwiVGV4dF9Db2xvciIsInJlcSIsImFyIiwiZXZlbnRsaXN0IiwiZXZlbnQiLCJldmVudF9pZCIsInNjcmlwX2lkIiwiY29tcG9zZV9jbHNfaWQiLCJldmVudGlkIiwiaW5mbyIsImVkdHlwZSIsInByb2plY3RpZCIsInJjbHNpZCIsInJvYmppZCIsInVzZXJsb2dpbiIsIm9iamlkIiwiaW5pX0RhdGFPYmpSdW5DdXN0b21FdmVudCIsInNjYW5faW5pX0RhdGFPYmpSdW5DdXN0b21FdmVudCIsImNhbmNlbCIsImUiLCJuYXZpZ2F0ZUJhY2siLCJkZWx0YSIsInBhbmVsX2RlbCIsIk9iaklEIiwic3BsaWNlIiwiY2xhc3NfbmFtZSIsIm9ial9pZCIsInNob3dMb2FkaW5nIiwiaGlkZUxvYWRpbmciLCJyZXQiLCJtc2ciLCJvbnRhcCIsImdldEFwcCIsIm9uU2NhbiIsImlzVmFsIiwidGFyZ2V0IiwiZGF0YXNldCIsImRlY29kZWRhdGEiLCJoaWRlS2V5Ym9hcmQiLCJTY2FuX0NvZGUiLCJJbnB1dF9DaGFuZ2VfRXZlbnQiLCJWYWxJRCIsIm1hc3RfYXR0ciIsImlucHV0UGFyYW10ZXIiLCJzY2FuX0RhdGFPYmpSdW5DdXN0b21FdmVudCIsInN1Ym9udGFwIiwic2Nhbl9vbnRhcCIsImlzZmxhZyIsIm1hc3RfcmVxIiwiY2xhc3NhdHRybGlzdCIsInNjYW5fb25ldmVudCIsIm9uYXJyb3ciLCJkYXRhX2F0dHIiLCJzdWJDbGFzc0F0dHIiLCJvbmRhdGVUaW1lIiwib25jaGFuZ2UiLCJ2YWwiLCJEYXRhT2JqUnVuQ3VzdG9tRXZlbnQiLCJvbmNoYW5nZTIiLCJpdGVtIiwiZGVsdmFsdWUiLCJpaW5kZXgiLCJkaW5kZXgiLCJ2IiwiaXRlbXZhbHVlIiwic3ViX29uY2hhbmdlIiwic3ViX29uY2hhbmdlMiIsIm9uZXZlbnQiLCJvbmNoZWNrIiwiaXNjaGVja2VkIiwiaXNjaGVjayIsImlucHV0VmFsTGlzdElzRGVsIiwiaW5wdXRWYWxMaXN0IiwiYWRkcmVzc2NoYW5nZSIsImpvaW4iLCJjbGFzc0F0dHJfZXh0QnV0dG9uIiwiRGF0YU9ialJ1bkN1c3RvbUV2ZW50X1JldHVybiIsInNjYW5fY2xhc3NBdHRyX2V4dEJ1dHRvbiIsIkJlZm9yZV9TZWxlY3RfRXZlbnQiLCJBZnRlcl9TZWxlY3RfRXZlbnQiLCJjbGFzc0F0dHJfQWRkUGVyIiwibmF2aWdhdGVUbyIsInVybCIsInN0cmluZ2lmeSIsImV2ZW50cyIsIkFkZFBlciIsIkxvZ2luIiwidHJpbSIsImNsYXNzQXR0cl9BZGRSZWYiLCJjbGFzc0F0dHJfQWRkUHJqIiwic2F2YSIsIkJlZm9yZV9PS19FdmVudCIsInNjYW5fT0tEYXRhT2JqUnVuQ3VzdG9tRXZlbnQiLCJBZnRlcl9PS19FdmVudCIsImFkZCIsIm1hc2siLCJ2YWxTdHIiLCJlbnZpcm9tZW50IiwiY2xzX2lkIiwiYnV0dG9uX25hbWUiLCJtYXN0ZXIiLCJlbmNvZGUiLCJvYmpfYXR0ciIsIm1hc3Rlcl9jbHNfaWQiLCJtYXN0ZXJfb2JqX2lkIiwiY3JlYXRvciIsImNyZWF0b3JfbmFtZSIsIm5vdF90cmlnZ2VyX2V2ZW50IiwidXBkYXRlX2V4aXN0IiwicG9zdF9wcm9jZXNzIiwiZXh0X2luZm8iLCJBY3Rpb24iLCJyZXN1bHRfdHlwZSIsInNob3dUb2FzdCIsImljb24iLCJkdXJhdGlvbiIsInJlZGlyZWN0VG8iLCJFZGl0U3R5bGUiLCJWaWV3U3R5bGUiLCJOb3RUcmlnZ2VyU3lzRXZlbnQiLCJpbnB1dHBhcmFtZXRlciIsImluY2x1ZGVzIiwiZWRfdHlwZSIsInN0YXJ0X3RyYW5zYWN0aW9uIiwiZXZlbnRfbmFtZSIsImRhdGFfb2JqX2lkIiwicHJqX2lkIiwicmVmX2Nsc19pZCIsInJlbF9vYmpfaWQiLCJ1c2VyX2xvZ2luIiwiZGF0YV9qc29uIiwiY29tcG9zZV9pbmZvIiwiaW5wdXRfcGFyYW0iLCJhY3Rpb25saXN0IiwiYWN0aW9uX3R5cGUiLCJhIiwiZGljdEl0ZW1MaXN0IiwiY2hvaWNlX2xpc3QiLCJmaWx0ZXIiLCJlZGl0X2RsZyIsImZvcm1fY29udHJvbCIsInRleHQiLCJncm91cF9uYW1lIiwicmVhZG9ubHkiLCJkYXRhSnNvbiIsImMiLCJPS0RhdGFPYmpSdW5DdXN0b21FdmVudCIsImV4dGluZm8iLCJhY3Rpb25zIiwiZGlhbG9nIiwic2hvdyIsInN0eWxlIiwiY2FsbGJhY2tfZXZlbnRpZCIsInByaVJlbCIsInNlbGVjdF9yYW5nZSIsInBhcmFtXyIsInJlcGxhY2UiLCJpaSIsIiRhY3Rpb250ciIsImxpc3RfMSIsIl9zdWJDbGFzc0F0dHIiLCJldmVudElEIiwib2JqZWN0cyIsInN1Yl9yZXEiLCJvYmpfYXR0cnMiLCJtYXN0ZXJfY2xzIiwiY2xzX25hbWUiLCJpbnB1dF8zMDM3Iiwib3BfdHlwZSIsIk9wZXJhdGlvblR5cGUiLCJzdWJfY2xzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUF5bUJDO0FBQ0E7QUExbUJEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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SyxDQUFDWixLQUFLLENBQUNwQixLQUFLLENBQUMsR0FBQyxhQUFhLEdBQUNnQyxLQUFLLENBQUNaLEtBQUssQ0FBQ3JCO1lBQ3hGLENBQUMsQ0FBQztVQUNIO1FBQ0UsQ0FBQyxNQUFJO1VBQ0pnQixHQUFHLENBQUNTLFNBQVMsQ0FBQztZQUFDekIsS0FBSyxFQUFDLEtBQUs7WUFBQzBCLE9BQU8sRUFBQ2dCLE9BQU8sQ0FBQ1ksT0FBTztZQUFDM0IsVUFBVSxFQUFDLEtBQUs7WUFBQ0MsV0FBVyxFQUFDO1VBQUksQ0FBQyxDQUFDO1FBQ3ZGO01BQ0QsQ0FBQyxDQUFDLENBQUMyQixLQUFLLENBQUMsVUFBQUMsRUFBRSxFQUFFO1FBQ1o7UUFDSHhDLEdBQUcsQ0FBQ21PLFdBQVcsRUFBRTtRQUNkbk8sR0FBRyxDQUFDUyxTQUFTLENBQUM7VUFBQ3pCLEtBQUssRUFBQyxPQUFPO1VBQUMwQixPQUFPLEVBQUM4QixFQUFFLENBQUNDLE1BQU07VUFBQzlCLFVBQVUsRUFBQyxLQUFLO1VBQUNDLFdBQVcsRUFBQztRQUFJLENBQUMsQ0FBQztNQUNuRixDQUFDLENBQUM7SUFDSDtFQUdKO0FBQ0QsQ0FBQztBQUFBLDJCIiwiZmlsZSI6IjExNS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cblx0aW1wb3J0IEJhc2U2NCBmcm9tICcuLi8uLi9jb21wb25lbnRzL2pzLWJhc2U2NC9iYXNlNjQuanMnXG5cdGltcG9ydCBwaWNrZXJBZGRyZXNzIGZyb20gJy4uLy4uL2pzL3BpY2tlckFkZHJlc3MvcGlja2VyQWRkcmVzcy52dWUnXG5cdGV4cG9ydCBkZWZhdWx0IHtcblx0XHRtb2R1bGVzOntcblx0XHRcdEJhc2U2NCxcblx0XHR9LFxuXHRcdGNvbXBvbmVudHM6IHtcbiAgICAgICAgICAgIHBpY2tlckFkZHJlc3NcbiAgICAgICAgfSxcblx0XHRkYXRhKCkge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0dGl0bGU6ICfmlrDlop4nLFxuXHRcdFx0XHRwYXJhbTp7fSxcblx0XHRcdFx0Y2xhc3NBdHRyTGlzdDpbXSxcblx0XHRcdFx0Y2xhc3NHcmlkU3R5bGU6W10sXG5cdFx0XHRcdGVkaXRfaW5pdGFsX2V2ZW50OlwiXCIsICAvL+W8ueeql+WIneWni+WMluS6i+S7tklEXG5cdFx0XHRcdGVkaXRfb2tfZXZlbnQ6XCJcIiwgICAgICAvL+W8ueeql+eCueWHu09LIOinpuWPkeS6i+S7tklEXG5cdFx0XHRcdGVkaXRfc2VsZWN0X2NvbXBvc2VfZXZlbnQ6XCJcIiwgIC8v6YCJ5oup57uE5oiQ5a+56LGh5pe26LCD55SoXG5cdFx0XHRcdGVkaXRfY29tcG9zZV9jbHNfaWQ6XCJcIixcblx0XHRcdFx0Z2xvYmFsX2F0dHI6W10sXG5cdFx0XHRcdHJlZmRhdGFzdG9yZTogW10sXHQgICAvL+W8leeUqOaVsOaNruWtmOWCqOWMui8vIHthdHRyOidHX1BSSl8nICsgYmluZGF0dHIgKyAnX0lEJywgdmFsdWU6aW5mby5pZH1cblx0XHRcdFx0c2NhbkNvZGVWYWw6XCJcIixcblx0XHRcdFx0c3ViQ2xhc3NBdHRyTGlzdDpbXSxcblx0XHRcdFx0c3ViUGFuZWxMaXN0OltdLFxuXHRcdFx0XHRzdWJDbGFzc0dyaWRTdHlsZTpbXSxcblx0XHRcdH1cblx0XHR9LFxuXHRcdG9uTG9hZChvcHRpb25zKSB7XG5cdFx0XHQvLyBjb25zb2xlLmxvZyhvcHRpb25zKTtcblx0XHRcdHVuaS5zZXROYXZpZ2F0aW9uQmFyVGl0bGUoeyB0aXRsZTogb3B0aW9ucy50aXRsZW5hbWV9KTsgLy/orr7nva7pobbpg6jmoIfpopggXG5cdFx0XHR2YXIgcGFyYW0gPSBKU09OLnBhcnNlKG9wdGlvbnMucGFyYW0pO1xuXHRcdFx0dGhpcy4kZGF0YS50aXRsZSA9IHBhcmFtLkFkZF9CdG5OYW1lP3BhcmFtLkFkZF9CdG5OYW1lOm9wdGlvbnMudGl0bGVuYW1lOyAvL+iuvue9ruaMiemSruaWh+Wtl1xuXHRcdFx0Y29uc29sZS5sb2cocGFyYW0pO1xuXHRcdFx0aWYoIXBhcmFtLk1hc3Rlcl9DbHMuVmlld19TdHlsZSl7XG5cdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi5o+Q56S6XCIsY29udGVudDpcIuivpeWKn+iDveeCueacqumFjee9rueVjOmdoueql+WPo++8jOivt+mHjeaWsOmFjee9ru+8gVwiLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRpZighcGFyYW0uTWFzdGVyX0Nscy5WaWV3X1N0eWxlLk5hbWUpe1xuXHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIuaPkOekulwiLGNvbnRlbnQ6XCLor6Xlip/og73ngrnmnKrphY3nva7nqpflj6PmoLflvI/vvIzor7fph43mlrDphY3nva7vvIFcIixzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy4kZGF0YS5wYXJhbSA9IHBhcmFtO1xuXHRcdFx0Ly8gdmFyIGVkaXRfZGxnID0ge1xuXHRcdFx0Ly8gICAgIE1vZGVsOiBwYXJhbS5FZGl0RGxnTW9kZSxcblx0XHRcdC8vICAgICBOYW1lOiBwYXJhbS5NYXN0ZXJfQ2xzLlZpZXdfU3R5bGUuTmFtZVxuXHRcdFx0Ly8gfVxuXHRcdFx0Ly/kuLvmlbDmja7nsbvojrflj5Zcblx0XHRcdHZhciBkYXRhSW5mbyA9IHtcblx0XHRcdFx0Y2xhc3NfaWQ6IHBhcmFtLk1hc3Rlcl9DbHMuSURcblx0XHRcdH07XG5cdFx0XHR2YXIgJHRoaXMgPSB0aGlzO1xuXHRcdFx0JHRoaXMuJHN0b3JlLnN0YXRlLnRoaXNhcmVhRnVuY0lEID0gcGFyYW0uTWFzdGVyX0Nscy5JRDtcblx0XHRcdC8vIGNvbnNvbGUubG9nKCR0aGlzLiRzdG9yZS5nZXR0ZXJzLmdldGNsYXNzQXR0ckxpc3QpO1xuXHRcdFx0aWYoJHRoaXMuJHN0b3JlLmdldHRlcnMuZ2V0Y2xhc3NBdHRyTGlzdCl7XG5cdFx0XHQgXHQkdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0ID0gJHRoaXMuJHN0b3JlLmdldHRlcnMuZ2V0Y2xhc3NBdHRyTGlzdDtcblx0XHRcdFx0JHRoaXMuY2xhc3NHcmlkU3R5bGVJbmZvKHBhcmFtLk1hc3Rlcl9DbHMuSUQsJHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5WaWV3X1N0eWxlLk5hbWUsJ01hc3QnKTtcblx0XHRcdH1lbHNle1xuXHRcdFx0XHQkdGhpcy4kc3RvcmUuZGlzcGF0Y2goJ2NsYXNzQXR0ckdldExpc3QnLGRhdGFJbmZvKS50aGVuKHN1Y2Nlc3M9Pntcblx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhzdWNjZXNzKTtcblx0XHRcdFx0XHRpZiAoc3VjY2Vzcy5lcnJfY29kZSA9PSAwKSB7XG5cdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0ID0gc3VjY2Vzcy5yZXN1bHQ7XG5cdFx0XHRcdFx0XHRzdWNjZXNzLnJlc3VsdC5mb3JFYWNoKGFzeW5jIChncm91cCxpbmRleCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRncm91cC5hdHRyX2xpc3QuZm9yRWFjaChhc3luYyAoYXR0cixrZXkpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRpZiAoYXR0ci50eXBlID09IFwi5a2X5YW4LeWtl+espuS4slwiIHx8IGF0dHIudHlwZSA9PSBcIuWtl+WFuC3mlbTmlbBcIil7XG5cdFx0XHRcdFx0XHRcdFx0XHRhd2FpdCAkdGhpcy5EaWN0SXRlbUdldExpc3QoYXR0cixrZXksaW5kZXgsJ21hc3QnKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XHRcblx0XHRcdFx0XHRcdFx0JHRoaXMuY2xhc3NHcmlkU3R5bGVJbmZvKHBhcmFtLk1hc3Rlcl9DbHMuSUQsJHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5WaWV3X1N0eWxlLk5hbWUsJ01hc3QnKTtcblx0XHRcdFx0XHRcdH0sNTAwKTtcblx0XHRcdFx0XHR9ZWxzZXtcblx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vMVwiLGNvbnRlbnQ6c3VjY2Vzcy5lcnJfbXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSkuY2F0Y2goZXg9Pntcblx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhleCk7XG5cdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor68xLjFcIixjb250ZW50OmV4LmVyck1zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHRcblx0XHRcdC8v5LuO5pWw5o2u57G76I635Y+WXG5cdFx0XHR2YXIgc3ViZGF0YUluZm8gPSB7XG5cdFx0XHRcdGNsYXNzX2lkOiBwYXJhbS5TdWJfQ2xzLklEXG5cdFx0XHR9O1xuXHRcdFx0JHRoaXMuJHN0b3JlLnN0YXRlLnRoaXNhcmVhRnVuY1N1YklEID0gcGFyYW0uU3ViX0Nscy5JRDtcblx0XHRcdGlmKCR0aGlzLiRzdG9yZS5nZXR0ZXJzLmdldFN1YkNsYXNzQXR0ckxpc3Qpe1xuXHRcdFx0IFx0JHRoaXMuJGRhdGEuc3ViQ2xhc3NBdHRyTGlzdCA9ICR0aGlzLiRzdG9yZS5nZXR0ZXJzLmdldFN1YkNsYXNzQXR0ckxpc3Q7XG5cdFx0XHRcdCR0aGlzLmNsYXNzR3JpZFN0eWxlSW5mbyhwYXJhbS5TdWJfQ2xzLklELCR0aGlzLiRkYXRhLnBhcmFtLlN1Yl9DbHMuVmlld19TdHlsZS5OYW1lLCdTdWInKTtcblx0XHRcdH1lbHNle1xuXHRcdFx0XHQkdGhpcy4kc3RvcmUuZGlzcGF0Y2goJ3N1YkNsYXNzQXR0ckdldExpc3QnLHN1YmRhdGFJbmZvKS50aGVuKHN1Y2Nlc3M9Pntcblx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhzdWNjZXNzKTtcblx0XHRcdFx0XHRpZiAoc3VjY2Vzcy5lcnJfY29kZSA9PSAwKSB7XG5cdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5zdWJDbGFzc0F0dHJMaXN0ID0gc3VjY2Vzcy5yZXN1bHQ7XG5cdFx0XHRcdFx0XHRzdWNjZXNzLnJlc3VsdC5mb3JFYWNoKGFzeW5jIChncm91cCxpbmRleCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRncm91cC5hdHRyX2xpc3QuZm9yRWFjaChhc3luYyAoYXR0cixrZXkpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRpZiAoYXR0ci50eXBlID09IFwi5a2X5YW4LeWtl+espuS4slwiIHx8IGF0dHIudHlwZSA9PSBcIuWtl+WFuC3mlbTmlbBcIil7XG5cdFx0XHRcdFx0XHRcdFx0XHRhd2FpdCAkdGhpcy5EaWN0SXRlbUdldExpc3QoYXR0cixrZXksaW5kZXgsJ3N1YicpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcblx0XHRcdFx0XHRcdFx0JHRoaXMuY2xhc3NHcmlkU3R5bGVJbmZvKHBhcmFtLlN1Yl9DbHMuSUQsJHRoaXMuJGRhdGEucGFyYW0uU3ViX0Nscy5WaWV3X1N0eWxlLk5hbWUsJ1N1YicpO1xuXHRcdFx0XHRcdFx0fSw1MDApO1xuXHRcdFx0XHRcdH1lbHNle1xuXHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor68xXzFcIixjb250ZW50OnN1Y2Nlc3MuZXJyX21zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pLmNhdGNoKGV4PT57XG5cdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coZXgpO1xuXHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vMV8xLjFcIixjb250ZW50OmV4LmVyck1zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRtZXRob2RzOiB7XG5cdFx0XHRhc3luYyBEaWN0SXRlbUdldExpc3QoYXR0cixrZXksaW5kZXgsdHlwZSl7IC8vTW9ib3gz5b6X5Yiw5a2X5YW46aG55YiX6KGoXG5cdFx0XHRcdHRoaXMuZGF0YT1bXTtcblx0XHRcdFx0dmFyICR0aGlzID0gdGhpcztcblx0XHRcdFx0dmFyIGRhdGFJbmZvID17XG5cdFx0XHRcdFx0ZGljdF9pZDogYXR0ci5kaWN0X2lkLFxuXHRcdFx0XHRcdGRpY3RfbmFtZTogYXR0ci5kaWN0X25hbWVcblx0XHRcdFx0fTtcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coZGF0YUluZm8pO1xuXHRcdFx0XHR0aGlzLiRzdG9yZS5kaXNwYXRjaCgnRGljdEl0ZW1HZXRMaXN0JyxkYXRhSW5mbykudGhlbihhc3luYyAoc3VjY2Vzcyk9Pntcblx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhzdWNjZXNzKTtcblx0XHRcdFx0XHRpZiAoc3VjY2Vzcy5lcnJfY29kZSA9PSAwKSB7XG5cdFx0XHRcdFx0XHRpZih0eXBlPT0nbWFzdCcpe1xuXHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2luZGV4XS5hdHRyX2xpc3Rba2V5XS5kaWN0aXRlbT1zdWNjZXNzLnJlc3VsdDtcblx0XHRcdFx0XHRcdFx0dGhpcy4kc3RvcmUuY29tbWl0KFwiY2xhc3NBdHRyTGlzdFwiLCAkdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0KTtcblx0XHRcdFx0XHRcdH1lbHNle1xuXHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5zdWJDbGFzc0F0dHJMaXN0W2luZGV4XS5hdHRyX2xpc3Rba2V5XS5kaWN0aXRlbT1zdWNjZXNzLnJlc3VsdDtcblx0XHRcdFx0XHRcdFx0dGhpcy4kc3RvcmUuY29tbWl0KFwic3ViQ2xhc3NBdHRyTGlzdFwiLCAkdGhpcy4kZGF0YS5zdWJDbGFzc0F0dHJMaXN0KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdH1lbHNle1xuXHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor68xLjJcIixjb250ZW50OnN1Y2Nlc3MuZXJyX21zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pLmNhdGNoKGV4PT57XG5cdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coZXgpO1xuXHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vMS4zXCIsY29udGVudDpleC5lcnJNc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSxcblx0XHRcdGFzeW5jIGNsYXNzR3JpZFN0eWxlSW5mbyhjbHNpZCxzdHlsZU5hbWUsY2xzVHlwZSl7XG5cdFx0XHRcdHZhciAkdGhpcyA9IHRoaXM7XG5cdFx0XHRcdHZhciBncmlkc3R5bGVJbmZvID0ge1xuXHRcdFx0XHRcdGNsYXNzX2lkOiBjbHNpZCxcblx0XHRcdFx0XHR1aV9zdHlsZV90eXBlOiAyLFxuXHRcdFx0XHRcdHVpX3N0eWxlX25hbWU6IHN0eWxlTmFtZVxuXHRcdFx0XHR9O1xuXHRcdFx0XHQvLyBjb25zb2xlLmxvZygkdGhpcy4kc3RvcmUuZ2V0dGVycy5nZXRjbGFzc0dyaWRTdHlsZUluZm8pO1xuXHRcdFx0XHQvL+iOt+WPluS4u+aVsOaNruexu+eVjOmdouagt+W8j1xuXHRcdFx0XHRpZihjbHNUeXBlPT0nTWFzdCcpe1xuXHRcdFx0XHRcdCR0aGlzLiRzdG9yZS5zdGF0ZS50aGlzRWRpdE5hbWUgPSBzdHlsZU5hbWU7XG5cdFx0XHRcdFx0aWYoJHRoaXMuJHN0b3JlLmdldHRlcnMuZ2V0Y2xhc3NHcmlkU3R5bGVJbmZvKXtcblx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLmNsYXNzR3JpZFN0eWxlID0gJHRoaXMuJHN0b3JlLmdldHRlcnMuZ2V0Y2xhc3NHcmlkU3R5bGVJbmZvO1xuXHRcdFx0XHRcdFx0JHRoaXMudmlld1BhcmFtKCdNYXN0Jyk7XG5cdFx0XHRcdFx0fWVsc2V7XG5cdFx0XHRcdFx0XHQvL2NvbnNvbGUubG9nKGdyaWRzdHlsZUluZm8pO1xuXHRcdFx0XHRcdFx0JHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdVSVN0eWxlR2V0SW5mbycsZ3JpZHN0eWxlSW5mbykudGhlbihzdWNjZXNzPT57XG5cdFx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKHN1Y2Nlc3MpO1xuXHRcdFx0XHRcdFx0XHRpZiAoc3VjY2Vzcy5lcnJfY29kZSA9PSAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIHN0eWxlZGVmID0gQmFzZTY0LmRlY29kZShzdWNjZXNzLnJlc3VsdC5zdHlsZV9kZWYpO1xuXHRcdFx0XHRcdFx0XHRcdHN1Y2Nlc3MucmVzdWx0LnN0eWxlX2RlZiA9IEpTT04ucGFyc2Uoc3R5bGVkZWYpO1xuXHRcdFx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLmNsYXNzR3JpZFN0eWxlID0gc3VjY2Vzcy5yZXN1bHQ7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coJHRoaXMuJGRhdGEuY2xhc3NHcmlkU3R5bGUpO1xuXHRcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHRcdCR0aGlzLnZpZXdQYXJhbSgnTWFzdCcpO1xuXHRcdFx0XHRcdFx0XHR9ZWxzZXtcblx0XHRcdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzEuMlwiLGNvbnRlbnQ6c3VjY2Vzcy5lcnJfbXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9KS5jYXRjaChleD0+e1xuXHRcdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhleCk7XG5cdFx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vMS4zXCIsY29udGVudDpleC5lcnJNc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSBpZihjbHNUeXBlPT0nU3ViJyl7ICAvL+iOt+WPluS7juaVsOaNruexu+eVjOmdouagt+W8j1xuXHRcdFx0XHRcdCR0aGlzLiRzdG9yZS5zdGF0ZS50aGlzRWRpdFN1Yk5hbWUgPSBzdHlsZU5hbWU7XG5cdFx0XHRcdFx0aWYoJHRoaXMuJHN0b3JlLmdldHRlcnMuZ2V0U3ViQ2xhc3NHcmlkU3R5bGVJbmZvKXtcblx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLnN1YkNsYXNzR3JpZFN0eWxlID0gJHRoaXMuJHN0b3JlLmdldHRlcnMuZ2V0U3ViQ2xhc3NHcmlkU3R5bGVJbmZvO1xuXHRcdFx0XHRcdFx0JHRoaXMudmlld1BhcmFtKCdTdWInKTtcblx0XHRcdFx0XHR9ZWxzZXtcblx0XHRcdFx0XHRcdC8vY29uc29sZS5sb2coZ3JpZHN0eWxlSW5mbyk7XG5cdFx0XHRcdFx0XHQkdGhpcy4kc3RvcmUuZGlzcGF0Y2goJ1VJU3R5bGVHZXRJbmZvJyxncmlkc3R5bGVJbmZvKS50aGVuKHN1Y2Nlc3M9Pntcblx0XHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coc3VjY2Vzcyk7XG5cdFx0XHRcdFx0XHRcdGlmIChzdWNjZXNzLmVycl9jb2RlID09IDApIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgc3R5bGVkZWYgPSBCYXNlNjQuZGVjb2RlKHN1Y2Nlc3MucmVzdWx0LnN0eWxlX2RlZik7XG5cdFx0XHRcdFx0XHRcdFx0c3VjY2Vzcy5yZXN1bHQuc3R5bGVfZGVmID0gSlNPTi5wYXJzZShzdHlsZWRlZik7XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5zdWJDbGFzc0dyaWRTdHlsZSA9IHN1Y2Nlc3MucmVzdWx0O1xuXHRcdFx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKCR0aGlzLiRkYXRhLnN1YkNsYXNzR3JpZFN0eWxlKTtcblx0XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0XHQkdGhpcy52aWV3UGFyYW0oJ1N1YicpO1xuXHRcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHRcdC8vICR0aGlzLnN1YkNsYXNzX2F0dHJfaW5pdCgpO1xuXHRcdFx0XHRcdFx0XHR9ZWxzZXtcblx0XHRcdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzEuMlwiLGNvbnRlbnQ6c3VjY2Vzcy5lcnJfbXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9KS5jYXRjaChleD0+e1xuXHRcdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhleCk7XG5cdFx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vMS4zXCIsY29udGVudDpleC5lcnJNc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHR2aWV3UGFyYW0odHlwZSl7IC8v5bCGbW9ib3gz5bCP5YaZ5Y+C5pWw6L2s5o2i5Li6bW9ib3gy5aSn5YaZ5Y+C5pWwXG5cdFx0XHRcdHZhciBjbGFzc0dyaWRTdHlsZT0nJztcblx0XHRcdFx0dmFyIGNsYXNzQXR0ckxpc3Q9Jyc7XG5cdFx0XHRcdGlmKHR5cGU9PSdNYXN0Jyl7XG5cdFx0XHRcdFx0Y2xhc3NHcmlkU3R5bGU9dGhpcy4kZGF0YS5jbGFzc0dyaWRTdHlsZTtcblx0XHRcdFx0XHRjbGFzc0F0dHJMaXN0PXRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdDtcblx0XHRcdFx0fWVsc2UgaWYodHlwZT09J1N1YicpeyBcblx0XHRcdFx0XHRjbGFzc0dyaWRTdHlsZT10aGlzLiRkYXRhLnN1YkNsYXNzR3JpZFN0eWxlO1xuXHRcdFx0XHRcdGNsYXNzQXR0ckxpc3Q9dGhpcy4kZGF0YS5zdWJDbGFzc0F0dHJMaXN0O1xuXHRcdFx0XHR9XG5cdFx0XHRcdHZhciBjbGFzc19ncmlkU3R5bGUgPXtcblx0XHRcdFx0XHRJRDogY2xhc3NHcmlkU3R5bGUuaWQsXG5cdFx0XHRcdFx0TmFtZTogY2xhc3NHcmlkU3R5bGUubmFtZSxcblx0XHRcdFx0XHRUeXBlOiBjbGFzc0dyaWRTdHlsZS50eXBlLFxuXHRcdFx0XHRcdElzRGVmYXVsdDpjbGFzc0dyaWRTdHlsZS5pc19kZWZhdWwsXG5cdFx0XHRcdFx0U3R5bGVEZWY6Y2xhc3NHcmlkU3R5bGUuc3R5bGVfZGVmLFxuXHRcdFx0XHR9O1xuXHRcdFx0XHR2YXIgY2xhc3NfYXR0ckxpc3QgPVtdO1xuXHRcdFx0XHRjbGFzc0F0dHJMaXN0LmZvckVhY2goZGF0YSA9PiB7XG5cdFx0XHRcdFx0dmFyIGF0dHJzID1bXTtcblx0XHRcdFx0XHRpZihkYXRhLmF0dHJfbGlzdCl7XG5cdFx0XHRcdFx0ICBkYXRhLmF0dHJfbGlzdC5mb3JFYWNoKGF0dHIgPT4ge1xuXHRcdFx0XHRcdFx0dmFyIGRpY3RpdGVtcyA9W107XG5cdFx0XHRcdFx0XHRpZihhdHRyLmRpY3RpdGVtKXtcblx0XHRcdFx0XHRcdFx0YXR0ci5kaWN0aXRlbS5mb3JFYWNoKGRpY3QgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdGRpY3RpdGVtcy5wdXNoKHtcblx0XHRcdFx0XHRcdFx0XHRcdElEOiBkaWN0LmlkLFxuXHRcdFx0XHRcdFx0XHRcdFx0TmFtZTogZGljdC5uYW1lLFxuXHRcdFx0XHRcdFx0XHRcdFx0Tm90ZTogZGljdC5ub3RlLFxuXHRcdFx0XHRcdFx0XHRcdFx0T3JkZXI6IGRpY3Qub3JkZXIsXG5cdFx0XHRcdFx0XHRcdFx0XHRJbWdVcmw6IG51bGwsXG5cdFx0XHRcdFx0XHRcdFx0XHRDb2RlOiBkaWN0LmNvZGUsXG5cdFx0XHRcdFx0XHRcdFx0XHRIYXNTdWI6IG51bGwsXG5cdFx0XHRcdFx0XHRcdFx0XHRQYXJlbnRJRDogbnVsbCxcblx0XHRcdFx0XHRcdFx0XHRcdFBhcmVudE5hbWU6IG51bGwsXG5cdFx0XHRcdFx0XHRcdFx0XHRMdmw6IGRpY3QubHZsLFxuXHRcdFx0XHRcdFx0XHRcdFx0SXNEZWZhdWx0OiBkaWN0LmlzX2RlZmF1bHQsXG5cdFx0XHRcdFx0XHRcdFx0XHRWYWx1ZTogZGljdC52YWx1ZSxcblx0XHRcdFx0XHRcdFx0XHRcdENOX0dfSUQ6IGRpY3QuaWQsXG5cdFx0XHRcdFx0XHRcdFx0XHRDTl9HX0RJQ1RfSUQ6IG51bGwsXG5cdFx0XHRcdFx0XHRcdFx0XHRDTl9TX05BTUU6IGRpY3QubmFtZSxcblx0XHRcdFx0XHRcdFx0XHRcdENOX1NfTk9URTogZGljdC5ub3RlLFxuXHRcdFx0XHRcdFx0XHRcdFx0Q05fTl9PUkRFUjogZGljdC5vcmRlcixcblx0XHRcdFx0XHRcdFx0XHRcdENOX1NfSU1HX1VSTDogbnVsbCxcblx0XHRcdFx0XHRcdFx0XHRcdENOX1NfQ09ERTogZGljdC5jb2RlLFxuXHRcdFx0XHRcdFx0XHRcdFx0Q05fQ19IQVNfU1VCOiBudWxsLFxuXHRcdFx0XHRcdFx0XHRcdFx0Q05fR19QQVJFTlRfSVRFTV9JRDogbnVsbCxcblx0XHRcdFx0XHRcdFx0XHRcdENOX0dfUEFSRU5UX0lURU1fTkFNRTogbnVsbCxcblx0XHRcdFx0XHRcdFx0XHRcdENOX05fTFZMOiBkaWN0Lmx2bCxcblx0XHRcdFx0XHRcdFx0XHRcdENOX0NfSVNfREVGQVVMVDogZGljdC5pc19kZWZhdWx0LFxuXHRcdFx0XHRcdFx0XHRcdFx0Q05fU19WQUxVRTogZGljdC52YWx1ZVxuXHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGF0dHJzLnB1c2goe1xuXHRcdFx0XHRcdFx0XHRJRDogYXR0ci5pZCxcblx0XHRcdFx0XHRcdFx0TmFtZTogYXR0ci5uYW1lLFxuXHRcdFx0XHRcdFx0XHRUeXBlOiBhdHRyLnR5cGUsXG5cdFx0XHRcdFx0XHRcdFNpemU6IGF0dHIuc2l6ZSxcblx0XHRcdFx0XHRcdFx0Tm90RW1wdHk6IGF0dHIubm90X2VtcHR5LFxuXHRcdFx0XHRcdFx0XHREZWZWYWx1ZTphdHRyLmRlZl92YWx1ZSxcblx0XHRcdFx0XHRcdFx0T3JkZXI6IGF0dHIub3JkZXIsXG5cdFx0XHRcdFx0XHRcdERpY3ROYW1lOiBhdHRyLmRpY3RfbmFtZSxcblx0XHRcdFx0XHRcdFx0RGljdElEOiBhdHRyLmRpY3RfaWQsXG5cdFx0XHRcdFx0XHRcdENvZGVEZWZOYW1lOiBhdHRyLmNvZGVfZGVmX25hbWUsXG5cdFx0XHRcdFx0XHRcdENvZGVEZWZJRDogYXR0ci5jb2RlX2RlZl9pZCxcblx0XHRcdFx0XHRcdFx0UmVsQ2xzSUQ6IG51bGwsXG5cdFx0XHRcdFx0XHRcdFJlbENsczogYXR0ci5yZWZfY2xzLFxuXHRcdFx0XHRcdFx0XHRXaWR0aDogYXR0ci53aWR0aCxcblx0XHRcdFx0XHRcdFx0SGVpZ2h0OiBhdHRyLmhlaWdodCxcblx0XHRcdFx0XHRcdFx0Q3RybFN0eWxlOiBhdHRyLmN0cmxfc3R5bGUsXG5cdFx0XHRcdFx0XHRcdEhhc0FjZTogYXR0ci5oYXNfYWNlLFxuXHRcdFx0XHRcdFx0XHRDYW5TaG93OiBhdHRyLmNhbl9zaG93LFxuXHRcdFx0XHRcdFx0XHRDYW5RdWVyeTogYXR0ci5jYW5fcXVlcnksXG5cdFx0XHRcdFx0XHRcdFJlYWRPbmx5OiBhdHRyLnJlYWRfb25seSxcblx0XHRcdFx0XHRcdFx0SXNLZXk6IGF0dHIuaXNfa2V5LFxuXHRcdFx0XHRcdFx0XHRJc0ZpeGVkOiBhdHRyLmlzX2ZpeGVkLFxuXHRcdFx0XHRcdFx0XHREaXNwTmFtZTogYXR0ci5kaXNwX25hbWUsXG5cdFx0XHRcdFx0XHRcdEx1YUF0dHI6IGF0dHIubHVhX2F0dHIsXG5cdFx0XHRcdFx0XHRcdERlc2M6IGF0dHIuZGVzYyxcblx0XHRcdFx0XHRcdFx0QWN0aW9uRGVmOiBhdHRyLmFjdGlvbl9kZWY/QmFzZTY0LmRlY29kZShhdHRyLmFjdGlvbl9kZWYpOicnLFxuXHRcdFx0XHRcdFx0XHRNdWx0aWxpbmd1YWw6IGF0dHIubXVsdGlsaW5ndWFsLFxuXHRcdFx0XHRcdFx0XHRSZWZDb25kaXRpb246IGF0dHIucmVmX2NvbmRpdGlvbixcblx0XHRcdFx0XHRcdFx0R3JvdXBOYW1lOiBkYXRhLmdyb3VwLFxuXHRcdFx0XHRcdFx0XHRWYWx1ZTogbnVsbCxcblx0XHRcdFx0XHRcdFx0ZGljdGl0ZW06IGRpY3RpdGVtc1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0ICB9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y2xhc3NfYXR0ckxpc3QucHVzaCh7XG5cdFx0XHRcdFx0XHROYW1lOiBkYXRhLmdyb3VwLFxuXHRcdFx0XHRcdFx0T3JkZXI6IGRhdGEub3JkZXIsXG5cdFx0XHRcdFx0XHRIYXNBY2U6IGRhdGEuaGFzX2FjZSxcblx0XHRcdFx0XHRcdEJrQ29sb3I6IGRhdGEuYmtfY29sb3IsXG5cdFx0XHRcdFx0XHRJbWdGb250U3R5bGU6IGRhdGEuaW1nX2ZvbnRfc3R5bGUsXG5cdFx0XHRcdFx0XHRBdHRyOiBhdHRyc1xuXHRcdFx0XHRcdH0pOyBcblx0XHRcdFx0fSk7XG5cdFx0XHRcdFxuXHRcdFx0XHRpZih0eXBlPT0nTWFzdCcpe1xuXHRcdFx0XHRcdHRoaXMuJGRhdGEuY2xhc3NHcmlkU3R5bGUgPSBjbGFzc19ncmlkU3R5bGU7XG5cdFx0XHRcdFx0dGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0ID0gY2xhc3NfYXR0ckxpc3Q7XG5cdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coJy0tLS0tLU1hc3QtLS0tLS0tLScpO1xuXHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKHRoaXMuJGRhdGEuY2xhc3NHcmlkU3R5bGUpO1xuXHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdCk7XG5cdFx0XHRcdFx0dGhpcy5jbGFzc19hdHRyX2luaXQoKTtcblx0XHRcdFx0fWVsc2UgaWYodHlwZT09J1N1YicpeyBcblx0XHRcdFx0XHR0aGlzLiRkYXRhLnN1YkNsYXNzR3JpZFN0eWxlID0gY2xhc3NfZ3JpZFN0eWxlO1xuXHRcdFx0XHRcdHRoaXMuJGRhdGEuc3ViQ2xhc3NBdHRyTGlzdCA9IGNsYXNzX2F0dHJMaXN0O1xuXHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKCctLS0tLS1TdWItLS0tLS0tLScpO1xuXHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKHRoaXMuJGRhdGEuc3ViQ2xhc3NHcmlkU3R5bGUpO1xuXHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKHRoaXMuJGRhdGEuc3ViQ2xhc3NBdHRyTGlzdCk7XG5cdFx0XHRcdFx0dGhpcy5zdWJDbGFzc19hdHRyX2luaXQoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdGNsYXNzX2F0dHJfaW5pdCgpe1xuXHRcdFx0XHR2YXIgYXR0cmxpc3QgPSB0aGlzLiRkYXRhLmNsYXNzR3JpZFN0eWxlLlN0eWxlRGVmLnNob3dfc3R5bGVcblx0XHRcdFx0dmFyIG5ld2F0dHJsaXN0ID0gW107XG5cdFx0XHRcdGlmICh0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3QubGVuZ3RoID4gMCkge1xuXHRcdFx0XHQgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRybGlzdC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHQgICAgICAgIHZhciBvcGVuID0gYXR0cmxpc3RbaV0ub3Blbjtcblx0XHRcdFx0ICAgICAgICB2YXIgbmFtZSA9IGF0dHJsaXN0W2ldLmF0dHJncm91cF9uYW1lO1xuXHRcdFx0XHQgICAgICAgIHZhciBhdHRycyA9IGF0dHJsaXN0W2ldLmF0dHJzO1xuXHRcdFx0XHQgICAgICAgIGZvciAodmFyIHMgPSAwOyBzIDwgdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0Lmxlbmd0aDsgcysrKSB7XG5cdFx0XHRcdCAgICAgICAgICAgIHZhciBjbHNhdHRyID0gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W3NdO1xuXHRcdFx0XHQgICAgICAgICAgICBpZiAobmFtZSA9PSBjbHNhdHRyLk5hbWUpIHtcblx0XHRcdFx0ICAgICAgICAgICAgICAgIHZhciBhdHRyID0gW107XG5cdFx0XHRcdCAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGF0dHJzLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgbCA9IDA7IGwgPCBjbHNhdHRyLkF0dHIubGVuZ3RoOyBsKyspIHtcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhID0gY2xzYXR0ci5BdHRyW2xdO1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXR0cnNbal0uYXR0ciA9PSBjYS5OYW1lKSB7XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYS5hY3Rpb24gPSBhdHRyc1tqXS5hY3Rpb247XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYS5lZGl0ID0gYXR0cnNbal0uZWRpdDtcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhLm5vdGVtcHR5ID0gYXR0cnNbal0ubm90ZW1wdHk7XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYS5leHRfYnV0dG9uID0gYXR0cnNbal0uZXh0X2J1dHRvbjtcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhLmJ1dHRvbl9pbWcgPSBhdHRyc1tqXS5idXR0b25faW1nO1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2EuYnV0dG9uX3Rvb2x0aXAgPSBhdHRyc1tqXS5idXR0b25fdG9vbHRpcDtcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhLmJlZm9yZV9jbGlja19idXR0b24gPSBhdHRyc1tqXS5iZWZvcmVfY2xpY2tfYnV0dG9uO1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2EuYnV0dG9uX2NhbGxiYWNrID0gYXR0cnNbal0uYnV0dG9uX2NhbGxiYWNrO1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2EuaGlkZGVuID0gYXR0cnNbal0uaGlkZGVuO1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Euc2VsZWN0ID0gYXR0cnNbal0uc2VsZWN0PT11bmRlZmluZWQ/ZmFsc2U6YXR0cnNbal0uc2VsZWN0O1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhLlZhbHVlID1cIlwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGNhLmRpY3RpdGVtLmxlbmd0aD4wKXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGNhLnNlbGVjdCA9PSB0cnVlKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5WYWx1ZSA9IFtdOy8vY2EuZGljdGl0ZW1bMF0uQ05fU19OQU1FO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZWxzZSBcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2EuVmFsdWUgPSAn6K+36YCJ5oupJzsvL2NhLmRpY3RpdGVtWzBdLkNOX1NfTkFNRTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBkaWN0aXRlbWxpc3Q9W107XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBkID0gMDsgZCA8IGNhLmRpY3RpdGVtLmxlbmd0aDsgZCsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhLmRpY3RpdGVtW2RdLmxhYmVsPWNhLmRpY3RpdGVtW2RdLkNOX1NfTkFNRTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2EuZGljdGl0ZW1bZF0udmFsdWU9Y2EuZGljdGl0ZW1bZF0uQ05fU19OQU1FO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5kaWN0aXRlbVtkXS5hdHRyPWNhLk5hbWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGNhLmRpY3RpdGVtW2RdLkNOX0NfSVNfREVGQVVMVD09JzEnKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhLlZhbHVlPWNhLmRpY3RpdGVtW2RdLkNOX1NfTkFNRTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoY2EuVHlwZT09J+aXpeacnycgfHwgY2EuVHlwZT09J+aXtumXtCcpe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIG5vd0RhdGUgPSBuZXcgRGF0ZSgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGRhdGUgPSB7eWVhcjogbm93RGF0ZS5nZXRGdWxsWWVhcigpLG1vbnRoOiBub3dEYXRlLmdldE1vbnRoKCkgKyAxLGRheTogbm93RGF0ZS5nZXREYXRlKCl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5WYWx1ZSA9IGRhdGUueWVhciArICctJyArIChkYXRlLm1vbnRoID49IDEwID8gZGF0ZS5tb250aCA6ICcwJyArIGRhdGUubW9udGgpICsgJy0nICsgKGRhdGUuZGF5ID49IDEwID8gZGF0ZS5kYXkgOiAnMCcgKyBkYXRlLmRheSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGNhLlR5cGU9PSflvJXnlKjlr7nosaEo5aSa5LiqKScpe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2EuUmVsQ2xzTGlzdCA9IGNhLlJlbENscztcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhLlZhbHVlID0gJ+ivtyc7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGNhLlR5cGU9PSfnnIHluILljLonKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2EuVmFsdWUgPSAn6K+36YCJ5oupJztcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihjYS5UeXBlPT0n5biD5bCU5YC8Jylcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhLlZhbHVlID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHIucHVzaChjYSk7XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgIH1cblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICB9XG5cdFx0XHRcdCAgICAgICAgICAgICAgICB9XG5cdFx0XHRcdCAgICAgICAgICAgICAgICBuZXdhdHRybGlzdC5wdXNoKHtcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICBCa0NvbG9yOiBjbHNhdHRyLkJrQ29sb3IsXG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgSGFzQWNlOiBjbHNhdHRyLkhhc0FjZSxcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICBJbWdGb250U3R5bGU6IGNsc2F0dHIuSW1nRm9udFN0eWxlLFxuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgIE5hbWU6IGNsc2F0dHIuTmFtZSxcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICBPcmRlcjogY2xzYXR0ci5PcmRlcixcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICBPcGVuOiBvcGVuLFxuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgIEF0dHI6IGF0dHIsXG5cdFx0XHRcdFx0XHRcdFx0XHRjb250cm9sX3N0eWxlOnRoaXMuJGRhdGEuY2xhc3NHcmlkU3R5bGUuU3R5bGVEZWYuY29udHJvbF9zdHlsZSxcblx0XHRcdFx0XHRcdFx0XHRcdHRpdGxlX3Bfd2RpdGg6dGhpcy4kZGF0YS5jbGFzc0dyaWRTdHlsZS5TdHlsZURlZi50aXRsZV9wX3dkaXRoLFxuXHRcdFx0XHRcdFx0XHRcdFx0Rm9udDp0aGlzLiRkYXRhLmNsYXNzR3JpZFN0eWxlLlN0eWxlRGVmLkZvbnQ/dGhpcy4kZGF0YS5jbGFzc0dyaWRTdHlsZS5TdHlsZURlZi5Gb250Ont9LFxuXHRcdFx0XHRcdFx0XHRcdFx0QmtfQ29sb3I6dGhpcy4kZGF0YS5jbGFzc0dyaWRTdHlsZS5TdHlsZURlZi5Ca19Db2xvcj90aGlzLiRkYXRhLmNsYXNzR3JpZFN0eWxlLlN0eWxlRGVmLkJrX0NvbG9yOicjRkZGRkZGJyxcblx0XHRcdFx0XHRcdFx0XHRcdFRleHRfQ29sb3I6dGhpcy4kZGF0YS5jbGFzc0dyaWRTdHlsZS5TdHlsZURlZi5UZXh0X0NvbG9yP3RoaXMuJGRhdGEuY2xhc3NHcmlkU3R5bGUuU3R5bGVEZWYuVGV4dF9Db2xvcjonIzAwMDAwMCdcblx0XHRcdFx0ICAgICAgICAgICAgICAgIH0pXG5cdFx0XHRcdCAgICAgICAgICAgIH1cblx0XHRcdFx0ICAgICAgICB9XG5cdFx0XHRcdCAgICB9XG5cdFx0XHRcdCAgICBpZiAobmV3YXR0cmxpc3QubGVuZ3RoID4gMCkge1xuXHRcdFx0XHQgICAgICAgIHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdCA9IG5ld2F0dHJsaXN0O1xuXHRcdFx0XHQgICAgfVxuXHRcdFx0XHRcdHZhciByZXE9W107XG5cdFx0XHRcdCAgICBpZiAodGhpcy4kZGF0YS5jbGFzc0dyaWRTdHlsZS5TdHlsZURlZikge1xuXHRcdFx0XHQgICAgICAgICBpZiAodGhpcy4kZGF0YS5jbGFzc0dyaWRTdHlsZS5TdHlsZURlZi5zaG93X3N0eWxlLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0ICAgICAgICAgICAgdmFyIGF0dHJsaXN0ID0gdGhpcy4kZGF0YS5jbGFzc0dyaWRTdHlsZS5TdHlsZURlZi5zaG93X3N0eWxlXG5cdFx0XHRcdCAgICAgICAgICAgIC8vICRlbC5maW5kKCcuYXR0cl9maWVsZCcpLnByb3AoJ3JlYWRvbmx5JywgdHJ1ZSk7XG5cdFx0XHRcdCAgICAgICAgICAgIC8vICRlbC5maW5kKCcuYXR0cl9maWVsZCcpLnByb3AoJ2Rpc2FibGVkJywgdHJ1ZSk7XG5cdFx0XHRcdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmxpc3QubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0ICAgICAgICAgICAgICAgIHZhciBhdHRyID0gYXR0cmxpc3RbaV0uYXR0cnNcblx0XHRcdFx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgIHZhciBhciA9IGF0dHJbal07XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLmF0dHIsIHZhbHVlOiBhci52YWx1ZT9hci52YWx1ZTonJyB9KTtcblx0XHRcdFx0ICAgICAgICAgICAgICAgIH1cblx0XHRcdFx0ICAgICAgICAgICAgfVxuXHRcdFx0XHQgICAgICAgIH1cblx0XHRcdFx0XHR9XHRcblx0XHRcdFx0XHRcblx0XHRcdFx0XHR2YXIgZXZlbnRsaXN0ID0gdGhpcy4kZGF0YS5jbGFzc0dyaWRTdHlsZS5TdHlsZURlZi5ldmVudDtcblx0XHRcdFx0XHRpZiAoZXZlbnRsaXN0KSB7XG5cdFx0XHRcdFx0ICAgIGlmIChldmVudGxpc3QubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBldmVudGxpc3QubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHQgICAgICAgICAgICBpZiAoZXZlbnRsaXN0W2ldLmV2ZW50X2lkID09ICdiZWZvcmVfb2snKSB7XG5cdFx0XHRcdFx0ICAgICAgICAgICAgICAgIHRoaXMuJGRhdGEuZWRpdF9va19ldmVudCA9IGV2ZW50bGlzdFtpXTtcblx0XHRcdFx0XHQgICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50bGlzdFtpXS5ldmVudF9pZCA9PSAnaW5pdGlhbCcpIHtcblx0XHRcdFx0XHQgICAgICAgICAgICAgICAgdGhpcy4kZGF0YS5lZGl0X2luaXRhbF9ldmVudCA9IGV2ZW50bGlzdFtpXTtcblx0XHRcdFx0XHQgICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50bGlzdFtpXS5ldmVudF9pZCA9PSAnYmVmb3JlX3NlbGVjdF9jb21wb3NlJykge1xuXHRcdFx0XHRcdCAgICAgICAgICAgICAgICB0aGlzLiRkYXRhLmVkaXRfc2VsZWN0X2NvbXBvc2VfZXZlbnQgPSBldmVudGxpc3RbaV0uc2NyaXBfaWQ7XG5cdFx0XHRcdFx0ICAgICAgICAgICAgICAgIHRoaXMuJGRhdGEuZWRpdF9jb21wb3NlX2Nsc19pZCA9IGV2ZW50bGlzdFtpXS5jb21wb3NlX2Nsc19pZDtcblx0XHRcdFx0XHQgICAgICAgICAgICB9XG5cdFx0XHRcdFx0ICAgICAgICB9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKHJlcSk7XG5cdFx0XHRcdFx0aWYgKHRoaXMuJGRhdGEuZWRpdF9pbml0YWxfZXZlbnQpIHtcblx0XHRcdFx0XHQgICAgdmFyIGV2ZW50aWQgPSB0aGlzLiRkYXRhLmVkaXRfaW5pdGFsX2V2ZW50LnNjcmlwX2lkO1xuXHRcdFx0XHRcdCAgICB2YXIgaW5mbyA9IHtcblx0XHRcdFx0XHQgICAgICAgIGV2ZW50aWQ6IGV2ZW50aWQsXG5cdFx0XHRcdFx0ICAgICAgICBlZHR5cGU6IFwiMFwiLFxuXHRcdFx0XHRcdCAgICAgICAgcHJvamVjdGlkOiAnJyxcblx0XHRcdFx0XHQgICAgICAgIHJjbHNpZDogJycsXG5cdFx0XHRcdFx0ICAgICAgICByb2JqaWQ6ICcnLFxuXHRcdFx0XHRcdCAgICAgICAgdXNlcmxvZ2luOiAnJyxcblx0XHRcdFx0XHQgICAgICAgIGNsc2lkOiB0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuSUQsXG5cdFx0XHRcdFx0ICAgICAgICBvYmppZDogXCJcIixcblx0XHRcdFx0XHQgICAgICAgIGF0dHI6IHJlcSxcblx0XHRcdFx0XHQgICAgfVxuXHRcdFx0XHRcdCAgICB0aGlzLmluaV9EYXRhT2JqUnVuQ3VzdG9tRXZlbnQoaW5mbyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNvbnNvbGUubG9nKHRoaXMuJGRhdGEuY2xhc3NHcmlkU3R5bGUpO1xuXHRcdFx0XHRcdGNvbnNvbGUubG9nKHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdCk7XG5cdFx0XHRcdFx0XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLmj5DnpLpcIixjb250ZW50Olwi5pyq5om+5Yiw5Y+v5pi+56S655qE55qE5bGe5oCnXCIsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRzdWJDbGFzc19hdHRyX2luaXQoKXtcblx0XHRcdFx0dmFyIGF0dHJsaXN0ID0gdGhpcy4kZGF0YS5zdWJDbGFzc0dyaWRTdHlsZS5TdHlsZURlZi5zaG93X3N0eWxlXG5cdFx0XHRcdHZhciBuZXdhdHRybGlzdCA9IFtdO1xuXHRcdFx0XHRpZiAodGhpcy4kZGF0YS5zdWJDbGFzc0F0dHJMaXN0Lmxlbmd0aCA+IDApIHtcblx0XHRcdFx0ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmxpc3QubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0ICAgICAgICB2YXIgb3BlbiA9IGF0dHJsaXN0W2ldLm9wZW47XG5cdFx0XHRcdCAgICAgICAgdmFyIG5hbWUgPSBhdHRybGlzdFtpXS5hdHRyZ3JvdXBfbmFtZTtcblx0XHRcdFx0ICAgICAgICB2YXIgYXR0cnMgPSBhdHRybGlzdFtpXS5hdHRycztcblx0XHRcdFx0ICAgICAgICBmb3IgKHZhciBzID0gMDsgcyA8IHRoaXMuJGRhdGEuc3ViQ2xhc3NBdHRyTGlzdC5sZW5ndGg7IHMrKykge1xuXHRcdFx0XHQgICAgICAgICAgICB2YXIgY2xzYXR0ciA9IHRoaXMuJGRhdGEuc3ViQ2xhc3NBdHRyTGlzdFtzXTtcblx0XHRcdFx0ICAgICAgICAgICAgaWYgKG5hbWUgPT0gY2xzYXR0ci5OYW1lKSB7XG5cdFx0XHRcdCAgICAgICAgICAgICAgICB2YXIgYXR0ciA9IFtdO1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBhdHRycy5sZW5ndGg7IGorKykge1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGwgPSAwOyBsIDwgY2xzYXR0ci5BdHRyLmxlbmd0aDsgbCsrKSB7XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYSA9IGNsc2F0dHIuQXR0cltsXTtcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGF0dHJzW2pdLmF0dHIgPT0gY2EuTmFtZSkge1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2EuYWN0aW9uID0gYXR0cnNbal0uYWN0aW9uO1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2EuZWRpdCA9IGF0dHJzW2pdLmVkaXQ7XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYS5ub3RlbXB0eSA9IGF0dHJzW2pdLm5vdGVtcHR5O1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2EuZXh0X2J1dHRvbiA9IGF0dHJzW2pdLmV4dF9idXR0b247XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYS5idXR0b25faW1nID0gYXR0cnNbal0uYnV0dG9uX2ltZztcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhLmJ1dHRvbl90b29sdGlwID0gYXR0cnNbal0uYnV0dG9uX3Rvb2x0aXA7XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYS5iZWZvcmVfY2xpY2tfYnV0dG9uID0gYXR0cnNbal0uYmVmb3JlX2NsaWNrX2J1dHRvbjtcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhLmJ1dHRvbl9jYWxsYmFjayA9IGF0dHJzW2pdLmJ1dHRvbl9jYWxsYmFjaztcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhLmhpZGRlbiA9IGF0dHJzW2pdLmhpZGRlbjtcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhLnNlbGVjdCA9IGF0dHJzW2pdLnNlbGVjdD09dW5kZWZpbmVkP2ZhbHNlOmF0dHJzW2pdLnNlbGVjdDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5WYWx1ZSA9XCJcIjtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihjYS5kaWN0aXRlbS5sZW5ndGg+MCl7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihjYS5zZWxlY3QgPT0gdHJ1ZSlcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2EuVmFsdWUgPSBbXTsvL2NhLmRpY3RpdGVtWzBdLkNOX1NfTkFNRTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGVsc2UgXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhLlZhbHVlID0gJ+ivt+mAieaLqSc7Ly9jYS5kaWN0aXRlbVswXS5DTl9TX05BTUU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgZGljdGl0ZW1saXN0PVtdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgZCA9IDA7IGQgPCBjYS5kaWN0aXRlbS5sZW5ndGg7IGQrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5kaWN0aXRlbVtkXS5sYWJlbD1jYS5kaWN0aXRlbVtkXS5DTl9TX05BTUU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhLmRpY3RpdGVtW2RdLnZhbHVlPWNhLmRpY3RpdGVtW2RdLkNOX1NfTkFNRTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2EuZGljdGl0ZW1bZF0uYXR0cj1jYS5OYW1lO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihjYS5kaWN0aXRlbVtkXS5DTl9DX0lTX0RFRkFVTFQ9PScxJylcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5WYWx1ZT1jYS5kaWN0aXRlbVtkXS5DTl9TX05BTUU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGNhLlR5cGU9PSfml6XmnJ8nIHx8IGNhLlR5cGU9PSfml7bpl7QnKXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBub3dEYXRlID0gbmV3IERhdGUoKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBkYXRlID0ge3llYXI6IG5vd0RhdGUuZ2V0RnVsbFllYXIoKSxtb250aDogbm93RGF0ZS5nZXRNb250aCgpICsgMSxkYXk6IG5vd0RhdGUuZ2V0RGF0ZSgpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2EuVmFsdWUgPSBkYXRlLnllYXIgKyAnLScgKyAoZGF0ZS5tb250aCA+PSAxMCA/IGRhdGUubW9udGggOiAnMCcgKyBkYXRlLm1vbnRoKSArICctJyArIChkYXRlLmRheSA+PSAxMCA/IGRhdGUuZGF5IDogJzAnICsgZGF0ZS5kYXkpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihjYS5UeXBlPT0n5byV55So5a+56LGhKOWkmuS4qiknKXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhLlJlbENsc0xpc3QgPSBjYS5SZWxDbHM7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5WYWx1ZSA9ICfor7cnO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihjYS5UeXBlPT0n55yB5biC5Yy6Jylcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhLlZhbHVlID0gJ+ivt+mAieaLqSc7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoY2EuVHlwZT09J+W4g+WwlOWAvCcpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5WYWx1ZSA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyLnB1c2goY2EpO1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICB9XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgfVxuXHRcdFx0XHQgICAgICAgICAgICAgICAgfVxuXHRcdFx0XHQgICAgICAgICAgICAgICAgbmV3YXR0cmxpc3QucHVzaCh7XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgQmtDb2xvcjogY2xzYXR0ci5Ca0NvbG9yLFxuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgIEhhc0FjZTogY2xzYXR0ci5IYXNBY2UsXG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgSW1nRm9udFN0eWxlOiBjbHNhdHRyLkltZ0ZvbnRTdHlsZSxcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICBOYW1lOiBjbHNhdHRyLk5hbWUsXG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgT3JkZXI6IGNsc2F0dHIuT3JkZXIsXG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgT3Blbjogb3Blbixcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICBBdHRyOiBhdHRyLFxuXHRcdFx0XHRcdFx0XHRcdFx0Y29udHJvbF9zdHlsZTp0aGlzLiRkYXRhLnN1YkNsYXNzR3JpZFN0eWxlLlN0eWxlRGVmLmNvbnRyb2xfc3R5bGUsXG5cdFx0XHRcdFx0XHRcdFx0XHR0aXRsZV9wX3dkaXRoOnRoaXMuJGRhdGEuc3ViQ2xhc3NHcmlkU3R5bGUuU3R5bGVEZWYudGl0bGVfcF93ZGl0aCxcblx0XHRcdFx0XHRcdFx0XHRcdEZvbnQ6dGhpcy4kZGF0YS5zdWJDbGFzc0dyaWRTdHlsZS5TdHlsZURlZi5Gb250P3RoaXMuJGRhdGEuc3ViQ2xhc3NHcmlkU3R5bGUuU3R5bGVEZWYuRm9udDp7fSxcblx0XHRcdFx0XHRcdFx0XHRcdEJrX0NvbG9yOnRoaXMuJGRhdGEuc3ViQ2xhc3NHcmlkU3R5bGUuU3R5bGVEZWYuQmtfQ29sb3I/dGhpcy4kZGF0YS5zdWJDbGFzc0dyaWRTdHlsZS5TdHlsZURlZi5Ca19Db2xvcjonI0ZGRkZGRicsXG5cdFx0XHRcdFx0XHRcdFx0XHRUZXh0X0NvbG9yOnRoaXMuJGRhdGEuc3ViQ2xhc3NHcmlkU3R5bGUuU3R5bGVEZWYuVGV4dF9Db2xvcj90aGlzLiRkYXRhLnN1YkNsYXNzR3JpZFN0eWxlLlN0eWxlRGVmLlRleHRfQ29sb3I6JyMwMDAwMDAnXG5cdFx0XHRcdCAgICAgICAgICAgICAgICB9KVxuXHRcdFx0XHQgICAgICAgICAgICB9XG5cdFx0XHRcdCAgICAgICAgfVxuXHRcdFx0XHQgICAgfVxuXHRcdFx0XHQgICAgaWYgKG5ld2F0dHJsaXN0Lmxlbmd0aCA+IDApIHtcblx0XHRcdFx0ICAgICAgICB0aGlzLiRkYXRhLnN1YkNsYXNzQXR0ckxpc3QgPSBuZXdhdHRybGlzdDtcblx0XHRcdFx0ICAgIH1cblx0XHRcdFx0XHR2YXIgcmVxPVtdO1xuXHRcdFx0XHQgICAgaWYgKHRoaXMuJGRhdGEuc3ViQ2xhc3NHcmlkU3R5bGUuU3R5bGVEZWYpIHtcblx0XHRcdFx0ICAgICAgICAgaWYgKHRoaXMuJGRhdGEuc3ViQ2xhc3NHcmlkU3R5bGUuU3R5bGVEZWYuc2hvd19zdHlsZS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdCAgICAgICAgICAgIHZhciBhdHRybGlzdCA9IHRoaXMuJGRhdGEuc3ViQ2xhc3NHcmlkU3R5bGUuU3R5bGVEZWYuc2hvd19zdHlsZVxuXHRcdFx0XHQgICAgICAgICAgICAvLyAkZWwuZmluZCgnLmF0dHJfZmllbGQnKS5wcm9wKCdyZWFkb25seScsIHRydWUpO1xuXHRcdFx0XHQgICAgICAgICAgICAvLyAkZWwuZmluZCgnLmF0dHJfZmllbGQnKS5wcm9wKCdkaXNhYmxlZCcsIHRydWUpO1xuXHRcdFx0XHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJsaXN0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdCAgICAgICAgICAgICAgICB2YXIgYXR0ciA9IGF0dHJsaXN0W2ldLmF0dHJzXG5cdFx0XHRcdCAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGF0dHIubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICB2YXIgYXIgPSBhdHRyW2pdO1xuXHRcdFx0XHRcdFx0XHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5hdHRyLCB2YWx1ZTogYXIudmFsdWU/YXIudmFsdWU6JycgfSk7XG5cdFx0XHRcdCAgICAgICAgICAgICAgICB9XG5cdFx0XHRcdCAgICAgICAgICAgIH1cblx0XHRcdFx0ICAgICAgICB9XG5cdFx0XHRcdFx0fVx0XG5cdFx0XHRcdFx0XG5cdFx0XHRcdFx0dmFyIGV2ZW50bGlzdCA9IHRoaXMuJGRhdGEuc3ViQ2xhc3NHcmlkU3R5bGUuU3R5bGVEZWYuZXZlbnQ7XG5cdFx0XHRcdFx0aWYgKGV2ZW50bGlzdCkge1xuXHRcdFx0XHRcdCAgICBpZiAoZXZlbnRsaXN0Lmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXZlbnRsaXN0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0ICAgICAgICAgICAgaWYgKGV2ZW50bGlzdFtpXS5ldmVudF9pZCA9PSAnYmVmb3JlX29rJykge1xuXHRcdFx0XHRcdCAgICAgICAgICAgICAgICB0aGlzLiRkYXRhLmVkaXRfb2tfZXZlbnQgPSBldmVudGxpc3RbaV07XG5cdFx0XHRcdFx0ICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudGxpc3RbaV0uZXZlbnRfaWQgPT0gJ2luaXRpYWwnKSB7XG5cdFx0XHRcdFx0ICAgICAgICAgICAgICAgIHRoaXMuJGRhdGEuZWRpdF9pbml0YWxfZXZlbnQgPSBldmVudGxpc3RbaV07XG5cdFx0XHRcdFx0ICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudGxpc3RbaV0uZXZlbnRfaWQgPT0gJ2JlZm9yZV9zZWxlY3RfY29tcG9zZScpIHtcblx0XHRcdFx0XHQgICAgICAgICAgICAgICAgdGhpcy4kZGF0YS5lZGl0X3NlbGVjdF9jb21wb3NlX2V2ZW50ID0gZXZlbnRsaXN0W2ldLnNjcmlwX2lkO1xuXHRcdFx0XHRcdCAgICAgICAgICAgICAgICB0aGlzLiRkYXRhLmVkaXRfY29tcG9zZV9jbHNfaWQgPSBldmVudGxpc3RbaV0uY29tcG9zZV9jbHNfaWQ7XG5cdFx0XHRcdFx0ICAgICAgICAgICAgfVxuXHRcdFx0XHRcdCAgICAgICAgfVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhyZXEpO1xuXHRcdFx0XHRcdGlmICh0aGlzLiRkYXRhLmVkaXRfaW5pdGFsX2V2ZW50KSB7XG5cdFx0XHRcdFx0ICAgIHZhciBldmVudGlkID0gdGhpcy4kZGF0YS5lZGl0X2luaXRhbF9ldmVudC5zY3JpcF9pZDtcblx0XHRcdFx0XHQgICAgdmFyIGluZm8gPSB7XG5cdFx0XHRcdFx0ICAgICAgICBldmVudGlkOiBldmVudGlkLFxuXHRcdFx0XHRcdCAgICAgICAgZWR0eXBlOiBcIjBcIixcblx0XHRcdFx0XHQgICAgICAgIHByb2plY3RpZDogJycsXG5cdFx0XHRcdFx0ICAgICAgICByY2xzaWQ6ICcnLFxuXHRcdFx0XHRcdCAgICAgICAgcm9iamlkOiAnJyxcblx0XHRcdFx0XHQgICAgICAgIHVzZXJsb2dpbjogJycsXG5cdFx0XHRcdFx0ICAgICAgICBjbHNpZDogdGhpcy4kZGF0YS5wYXJhbS5TdWJfQ2xzLklELFxuXHRcdFx0XHRcdCAgICAgICAgb2JqaWQ6IFwiXCIsXG5cdFx0XHRcdFx0ICAgICAgICBhdHRyOiByZXEsXG5cdFx0XHRcdFx0ICAgIH1cblx0XHRcdFx0XHQgICAgdGhpcy5zY2FuX2luaV9EYXRhT2JqUnVuQ3VzdG9tRXZlbnQoaW5mbyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNvbnNvbGUubG9nKHRoaXMuJGRhdGEuc3ViQ2xhc3NHcmlkU3R5bGUpO1xuXHRcdFx0XHRcdGNvbnNvbGUubG9nKHRoaXMuJGRhdGEuc3ViQ2xhc3NBdHRyTGlzdCk7XG5cdFx0XHRcdFx0XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLmj5DnpLpcIixjb250ZW50Olwi5pyq5om+5Yiw5Y+v5pi+56S655qE55qE5bGe5oCnXCIsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRcblx0XHRcdGNhbmNlbChlKXtcblx0XHRcdFx0dW5pLm5hdmlnYXRlQmFjayh7XG5cdFx0XHRcdFx0ZGVsdGE6MSAvL+i/lOWbnuWxguaVsO+8jDLliJnkuIrkuIrpobVcblx0XHRcdFx0fSk7XG5cdFx0XHR9LFxuXHRcdFx0cGFuZWxfZGVsKGluZGV4KXtcblx0XHRcdFx0dmFyICR0aGlzID0gdGhpcztcblx0XHRcdFx0aWYgKHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0W2luZGV4XS5zY2FuQ29kZVZhbCA9PSB0aGlzLiRkYXRhLnNjYW5Db2RlVmFsKSB7XG5cdFx0XHRcdFx0dGhpcy4kZGF0YS5zY2FuQ29kZVZhbD0nJztcblx0XHRcdFx0fVxuXHRcdFx0XHRpZighdGhpcy4kZGF0YS5zdWJQYW5lbExpc3RbaW5kZXhdLk9iaklEKVxuXHRcdFx0XHRcdHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0LnNwbGljZShpbmRleCwgMSk7XG5cdFx0XHRcdGVsc2V7XG5cdFx0XHRcdFx0dmFyIGRhdGFJbmZvPXtcblx0XHRcdFx0XHRcdGNsYXNzX2lkOnRoaXMuJGRhdGEucGFyYW0uU3ViX0Nscy5JRCxcblx0XHRcdFx0XHRcdGNsYXNzX25hbWU6JycsXG5cdFx0XHRcdFx0XHRvYmpfaWQ6dGhpcy4kZGF0YS5zdWJQYW5lbExpc3RbaW5kZXhdLk9iaklEXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhkYXRhSW5mbyk7XG5cdFx0XHRcdFx0Ly8gcmV0dXJuO1xuXHRcdFx0XHRcdHVuaS5zaG93TG9hZGluZyh7IHRpdGxlOlwi5Yqg6L295LitLi4uXCIgfSk7XG5cdFx0XHRcdFx0dGhpcy4kc3RvcmUuZGlzcGF0Y2goJ2RhdGFPYmpEZWwnLGRhdGFJbmZvKS50aGVuKHN1Y2Nlc3M9Pntcblx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKHN1Y2Nlc3MpO1xuXHRcdFx0XHRcdFx0dW5pLmhpZGVMb2FkaW5nKCk7XG5cdFx0XHRcdFx0XHRpZiAocmV0LmVycl9jb2RlID09IDApIHtcblx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0LnNwbGljZShpbmRleCwgMSk7XG5cdFx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi5o+Q56S6XCIsY29udGVudDpcIuWIoOmZpOaIkOWKn++8gVwiLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHRcdFx0fWVsc2V7XG5cdFx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vOVwiLGNvbnRlbnQ6c3VjY2Vzcy5tc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSkuY2F0Y2goZXg9Pntcblx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKGV4KTtcblx0XHRcdFx0XHRcdHVuaS5oaWRlTG9hZGluZygpO1xuXHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLmj5DnpLo5LjFcIixjb250ZW50OmV4LmVyck1zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdG9udGFwKGUpeyAvL+aJq+eggeWKn+iDvVxuXHRcdFx0XHQvL2NvbnNvbGUubG9nKGUudGFyZ2V0KVxuXHRcdFx0XHRnZXRBcHAoKS5vblNjYW4oKHJlc3VsdCk9Pntcblx0XHRcdFx0XHQvL2NvbnNvbGUubG9nKHJlc3VsdC5kZWNvZGVkYXRhKTtcblx0XHRcdFx0XHR2YXIgaXNWYWwgPXRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtlLnRhcmdldC5kYXRhc2V0WydpbmRleCddXS5BdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2lpbmRleCddXS5WYWx1ZTtcblx0XHRcdFx0XHQvLyBpZighaXNWYWwpe1xuXHRcdFx0XHRcdC8vIFx0dGhpcy4kZGF0YS5zdWJQYW5lbExpc3RbZS50YXJnZXQuZGF0YXNldFsnaWlpbmRleCddXS5zdWJDbGFzc0F0dHJbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV0uVmFsdWU9cmVzdWx0LmRlY29kZWRhdGE7XG5cdFx0XHRcdFx0Ly8gXHR2YXIgaXNWYWxkID10aGlzLiRkYXRhLnN1YlBhbmVsTGlzdFtlLnRhcmdldC5kYXRhc2V0WydpaWluZGV4J11dLnN1YkNsYXNzQXR0cltlLnRhcmdldC5kYXRhc2V0WydpbmRleCddXS5BdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2lpbmRleCddXS5WYWx1ZTtcblx0XHRcdFx0XHQvLyBcdHJldHVybjtcblx0XHRcdFx0XHQvLyB9XG5cdFx0XHRcdFx0Ly/kuLvmlbDmja7nsbvmiavnoIHmn6Xor6LmlbDmja5cblx0XHRcdFx0XHRpZiAoaXNWYWwhPXJlc3VsdC5kZWNvZGVkYXRhKSB7XG5cdFx0XHRcdFx0XHR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV0uVmFsdWU9cmVzdWx0LmRlY29kZWRhdGE7XG5cdFx0XHRcdFx0XHR1bmkuaGlkZUtleWJvYXJkKCk7XG5cdFx0XHRcdFx0XHQvL+WtkOaVsOaNruexu+aJq+eggeWMuuS6i+S7tuiEmuacrFxuXHRcdFx0XHRcdFx0dmFyIGV2ZW50aWQgPSB0aGlzLiRkYXRhLnBhcmFtLlNjYW5fQ29kZS5JbnB1dF9DaGFuZ2VfRXZlbnQuSUQ7XG5cdFx0XHRcdFx0XHRpZiAoZXZlbnRpZCkge1xuXHRcdFx0XHRcdCAgICAgICAgdmFyIHJlcT1bXTtcblx0XHRcdFx0XHQgICAgICAgIHZhciBhdHRybGlzdCA9IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdDsgIC8v5Li75pWw5o2u57G75bGe5oCnXG5cdFx0XHRcdFx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJsaXN0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0ICAgICAgICBcdHZhciBhdHRyID0gYXR0cmxpc3RbaV0uQXR0cjtcblx0XHRcdFx0XHQgICAgICAgIFx0Zm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0ICAgICAgICBcdFx0dmFyIGFyID0gYXR0cltqXTtcblx0XHRcdFx0XHQgICAgICAgIFx0XHRpZihhci5UeXBlPT0n5byV55So5a+56LGhKOWkmuS4qiknKVxuXHRcdFx0XHRcdCAgICAgICAgXHRcdFx0aWYoYXIuVmFsdWU9PSfor7cnKSBhci5WYWx1ZT0nJztcblx0XHRcdFx0XHQgICAgICAgIFx0XHRpZihhci5UeXBlPT0n5byV55So5Lq65ZGYJyB8fCBhci5UeXBlPT0n5byV55So6aG555uuJylcblx0XHRcdFx0XHQgICAgICAgIFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsdWU6IGFyLlZhbElEID9hci5WYWxJRCA6JycgfSk7XG5cdFx0XHRcdFx0ICAgICAgICBcdFx0ZWxzZSBpZihhci5UeXBlPT0n5biD5bCU5YC8Jylcblx0XHRcdFx0XHQgICAgICAgIFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsdWU6IGFyLlZhbHVlPycxJzonMCd9KTtcblx0XHRcdFx0XHQgICAgICAgIFx0XHRlbHNlXG5cdFx0XHRcdFx0ICAgICAgICBcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWx1ZSA/YXIuVmFsdWUgOicnfSk7XG5cdFx0XHRcdFx0ICAgICAgICBcdH1cblx0XHRcdFx0XHQgICAgICAgIH1cblx0XHRcdFx0XHQgICAgICAgIHZhciBpbmZvID0ge1xuXHRcdFx0XHRcdCAgICAgICAgICAgIGV2ZW50aWQ6IGV2ZW50aWQsXG5cdFx0XHRcdFx0ICAgICAgICAgICAgZWR0eXBlOiBcIjdcIiwvL1wiMFwiLFxuXHRcdFx0XHRcdCAgICAgICAgICAgIHByb2plY3RpZDogJycsXG5cdFx0XHRcdFx0ICAgICAgICAgICAgcmNsc2lkOiAnJyxcblx0XHRcdFx0XHQgICAgICAgICAgICByb2JqaWQ6ICcnLFxuXHRcdFx0XHRcdCAgICAgICAgICAgIHVzZXJsb2dpbjogJycsXG5cdFx0XHRcdFx0ICAgICAgICAgICAgY2xzaWQ6ICdNQk9YJywvL3RoaXMuJGRhdGEucGFyYW0uU3ViX0Nscy5JRCxcblx0XHRcdFx0XHQgICAgICAgICAgICBvYmppZDogXCJcIixcblx0XHRcdFx0XHQgICAgICAgICAgICBhdHRyOiByZXEsXG5cdFx0XHRcdFx0XHRcdFx0bWFzdF9hdHRyOiBbXSxcblx0XHRcdFx0XHRcdFx0XHRpbnB1dFBhcmFtdGVyOlt7IGF0dHI6ICdtYXN0X2lucHV0XzMwMzcnLCB2YWx1ZTogcmVzdWx0LmRlY29kZWRhdGEgfV1cblx0XHRcdFx0XHQgICAgICAgIH1cblx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0ICAgICAgICB0aGlzLnNjYW5fRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGluZm8sIFwiXCIpO1xuXHRcdFx0XHRcdCAgICB9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KVxuXHRcdFx0fSxcblx0XHRcdHN1Ym9udGFwKGUpeyAvL+aJq+eggeWKn+iDvVxuXHRcdFx0XHQvL2NvbnNvbGUubG9nKGUudGFyZ2V0KVxuXHRcdFx0XHRnZXRBcHAoKS5vblNjYW4oKHJlc3VsdCk9Pntcblx0XHRcdFx0XHQvL2NvbnNvbGUubG9nKHJlc3VsdC5kZWNvZGVkYXRhKTtcblx0XHRcdFx0XHR2YXIgaXNWYWwgPXRoaXMuJGRhdGEuc3ViQ2xhc3NBdHRyTGlzdFtlLnRhcmdldC5kYXRhc2V0WydpbmRleCddXS5BdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2lpbmRleCddXS5WYWx1ZTtcblx0XHRcdFx0XHQvL+S4u+aVsOaNruexu+aJq+eggeafpeivouaVsOaNrlxuXHRcdFx0XHRcdGlmIChpc1ZhbCE9cmVzdWx0LmRlY29kZWRhdGEpIHtcblx0XHRcdFx0XHRcdHRoaXMuJGRhdGEuc3ViQ2xhc3NBdHRyTGlzdFtlLnRhcmdldC5kYXRhc2V0WydpbmRleCddXS5BdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2lpbmRleCddXS5WYWx1ZT1yZXN1bHQuZGVjb2RlZGF0YTtcblx0XHRcdFx0XHRcdHVuaS5oaWRlS2V5Ym9hcmQoKTtcblx0XHRcdFx0XHRcdC8v5a2Q5pWw5o2u57G75omr56CB5Yy65LqL5Lu26ISa5pysXG5cdFx0XHRcdFx0XHR2YXIgZXZlbnRpZCA9IHRoaXMuJGRhdGEucGFyYW0uU2Nhbl9Db2RlLklucHV0X0NoYW5nZV9FdmVudC5JRDtcblx0XHRcdFx0XHRcdGlmIChldmVudGlkKSB7XG5cdFx0XHRcdFx0ICAgICAgICB2YXIgcmVxPVtdO1xuXHRcdFx0XHRcdCAgICAgICAgdmFyIGF0dHJsaXN0ID0gdGhpcy4kZGF0YS5zdWJDbGFzc0F0dHJMaXN0OyAgLy/kuLvmlbDmja7nsbvlsZ7mgKdcblx0XHRcdFx0XHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmxpc3QubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHQgICAgICAgIFx0dmFyIGF0dHIgPSBhdHRybGlzdFtpXS5BdHRyO1xuXHRcdFx0XHRcdCAgICAgICAgXHRmb3IgKHZhciBqID0gMDsgaiA8IGF0dHIubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0XHQgICAgICAgIFx0XHR2YXIgYXIgPSBhdHRyW2pdO1xuXHRcdFx0XHRcdCAgICAgICAgXHRcdGlmKGFyLlR5cGU9PSflvJXnlKjlr7nosaEo5aSa5LiqKScpXG5cdFx0XHRcdFx0ICAgICAgICBcdFx0XHRpZihhci5WYWx1ZT09J+ivtycpIGFyLlZhbHVlPScnO1xuXHRcdFx0XHRcdCAgICAgICAgXHRcdGlmKGFyLlR5cGU9PSflvJXnlKjkurrlkZgnIHx8IGFyLlR5cGU9PSflvJXnlKjpobnnm64nKVxuXHRcdFx0XHRcdCAgICAgICAgXHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsSUQgP2FyLlZhbElEIDonJyB9KTtcblx0XHRcdFx0XHQgICAgICAgIFx0XHRlbHNlIGlmKGFyLlR5cGU9PSfluIPlsJTlgLwnKVxuXHRcdFx0XHRcdCAgICAgICAgXHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsdWU/JzEnOicwJ30pO1xuXHRcdFx0XHRcdCAgICAgICAgXHRcdGVsc2Vcblx0XHRcdFx0XHQgICAgICAgIFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsdWU6IGFyLlZhbHVlID9hci5WYWx1ZSA6Jyd9KTtcblx0XHRcdFx0XHQgICAgICAgIFx0fVxuXHRcdFx0XHRcdCAgICAgICAgfVxuXHRcdFx0XHRcdCAgICAgICAgdmFyIGluZm8gPSB7XG5cdFx0XHRcdFx0ICAgICAgICAgICAgZXZlbnRpZDogZXZlbnRpZCxcblx0XHRcdFx0XHQgICAgICAgICAgICBlZHR5cGU6IFwiN1wiLC8vXCIwXCIsXG5cdFx0XHRcdFx0ICAgICAgICAgICAgcHJvamVjdGlkOiAnJyxcblx0XHRcdFx0XHQgICAgICAgICAgICByY2xzaWQ6ICcnLFxuXHRcdFx0XHRcdCAgICAgICAgICAgIHJvYmppZDogJycsXG5cdFx0XHRcdFx0ICAgICAgICAgICAgdXNlcmxvZ2luOiAnJyxcblx0XHRcdFx0XHQgICAgICAgICAgICBjbHNpZDogJ01CT1gnLC8vdGhpcy4kZGF0YS5wYXJhbS5TdWJfQ2xzLklELFxuXHRcdFx0XHRcdCAgICAgICAgICAgIG9iamlkOiBcIlwiLFxuXHRcdFx0XHRcdCAgICAgICAgICAgIGF0dHI6IHJlcSxcblx0XHRcdFx0XHRcdFx0XHRtYXN0X2F0dHI6IFtdLFxuXHRcdFx0XHRcdFx0XHRcdGlucHV0UGFyYW10ZXI6W3sgYXR0cjogJ21hc3RfaW5wdXRfMzAzNycsIHZhbHVlOiByZXN1bHQuZGVjb2RlZGF0YSB9XVxuXHRcdFx0XHRcdCAgICAgICAgfVxuXHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHQgICAgICAgIHRoaXMuc2Nhbl9EYXRhT2JqUnVuQ3VzdG9tRXZlbnQoaW5mbywgXCJcIik7XG5cdFx0XHRcdFx0ICAgIH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pXG5cdFx0XHR9LFxuXHRcdFx0c2Nhbl9vbnRhcChlKXsgLy/miavnoIHljLrmiavnoIHlip/og71cblx0XHRcdFx0Ly9jb25zb2xlLmxvZyhlLnRhcmdldClcblx0XHRcdFx0Z2V0QXBwKCkub25TY2FuKChyZXN1bHQpPT57XG5cdFx0XHRcdFx0Y29uc29sZS5sb2cocmVzdWx0LmRlY29kZWRhdGEpO1xuXHRcdFx0XHRcdHZhciBpc2ZsYWc9dHJ1ZTtcblx0XHRcdFx0XHRmb3IodmFyIGkgaW4gdGhpcy4kZGF0YS5zdWJQYW5lbExpc3Qpe1xuXHRcdFx0XHRcdFx0aWYodGhpcy4kZGF0YS5zdWJQYW5lbExpc3RbaV0uc2NhbkNvZGVWYWwgPT0gcmVzdWx0LmRlY29kZWRhdGEpIFxuXHRcdFx0XHRcdFx0XHRpc2ZsYWc9ZmFsc2U7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC8v5a2Q5pWw5o2u57G75omr56CB5p+l6K+i5pWw5o2uXG5cdFx0XHRcdFx0aWYgKGlzZmxhZykge1xuXHRcdFx0XHRcdFx0dW5pLmhpZGVLZXlib2FyZCgpO1xuXHRcdFx0XHRcdFx0dGhpcy4kZGF0YS5zY2FuQ29kZVZhbD1yZXN1bHQuZGVjb2RlZGF0YTtcblx0XHRcdFx0XHRcdHZhciBldmVudGlkID0gdGhpcy4kZGF0YS5wYXJhbS5TY2FuX0NvZGUuSW5wdXRfQ2hhbmdlX0V2ZW50LklEO1xuXHRcdFx0XHRcdFx0aWYgKGV2ZW50aWQpIHtcblx0XHRcdFx0XHQgICAgICAgIHZhciBtYXN0X3JlcT1bXTtcblx0XHRcdFx0XHRcdFx0Ly/kuLvmlbDmja7nsbvlsZ7mgKdcblx0XHRcdFx0XHRcdFx0dmFyIGNsYXNzYXR0cmxpc3QgPSB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3Q7ICBcblx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBjbGFzc2F0dHJsaXN0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIGF0dHIgPSBjbGFzc2F0dHJsaXN0W2ldLkF0dHI7XG5cdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgYXIgPSBhdHRyW2pdO1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYoYXIuVHlwZT09J+W8leeUqOWvueixoSjlpJrkuKopJylcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoYXIuVmFsdWU9PSfor7cnKSBhci5WYWx1ZT0nJztcblx0XHRcdFx0XHRcdFx0XHRcdGlmKGFyLlR5cGU9PSflvJXnlKjkurrlkZgnIHx8IGFyLlR5cGU9PSflvJXnlKjpobnnm64nKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRtYXN0X3JlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsdWU6IGFyLlZhbElEID9hci5WYWxJRCA6JycgfSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRlbHNlIGlmKGFyLlR5cGU9PSfluIPlsJTlgLwnKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRtYXN0X3JlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsdWU6IGFyLlZhbHVlPycxJzonMCd9KTtcblx0XHRcdFx0XHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdFx0XHRcdFx0bWFzdF9yZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWx1ZSA/YXIuVmFsdWUgOicnfSk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0ICAgICAgICB2YXIgcmVxPVtdO1xuXHRcdFx0XHRcdCAgICAgICAgLy/lrZDmlbDmja7nsbvlsZ7mgKdcblx0XHRcdFx0XHRcdFx0dmFyIGF0dHJsaXN0ID0gdGhpcy4kZGF0YS5zdWJDbGFzc0F0dHJMaXN0O1xuXHRcdFx0XHRcdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRybGlzdC5sZW5ndGg7IGkrKykgeyBcblx0XHRcdFx0XHQgICAgICAgIFx0dmFyIGF0dHIgPSBhdHRybGlzdFtpXS5BdHRyO1xuXHRcdFx0XHRcdCAgICAgICAgXHRmb3IgKHZhciBqID0gMDsgaiA8IGF0dHIubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0XHQgICAgICAgIFx0XHR2YXIgYXIgPSBhdHRyW2pdO1xuXHRcdFx0XHRcdCAgICAgICAgXHRcdGlmKGFyLlR5cGU9PSflvJXnlKjlr7nosaEo5aSa5LiqKScpXG5cdFx0XHRcdFx0ICAgICAgICBcdFx0XHRpZihhci5WYWx1ZT09J+ivtycpIGFyLlZhbHVlPScnO1xuXHRcdFx0XHRcdCAgICAgICAgXHRcdGlmKGFyLlR5cGU9PSflvJXnlKjkurrlkZgnIHx8IGFyLlR5cGU9PSflvJXnlKjpobnnm64nKVxuXHRcdFx0XHRcdCAgICAgICAgXHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsSUQgP2FyLlZhbElEIDonJyB9KTtcblx0XHRcdFx0XHQgICAgICAgIFx0XHRlbHNlIGlmKGFyLlR5cGU9PSfluIPlsJTlgLwnKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWx1ZT8nMSc6JzAnfSk7XG5cdFx0XHRcdFx0ICAgICAgICBcdFx0ZWxzZVxuXHRcdFx0XHRcdCAgICAgICAgXHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsdWUgP2FyLlZhbHVlIDonJ30pO1xuXHRcdFx0XHRcdCAgICAgICAgXHR9XG5cdFx0XHRcdFx0ICAgICAgICB9XG5cdFx0XHRcdFx0ICAgICAgICB2YXIgaW5mbyA9IHtcblx0XHRcdFx0XHQgICAgICAgICAgICBldmVudGlkOiBldmVudGlkLFxuXHRcdFx0XHRcdCAgICAgICAgICAgIGVkdHlwZTogJzcnLC8vXCIwXCIsXG5cdFx0XHRcdFx0ICAgICAgICAgICAgcHJvamVjdGlkOiAnJyxcblx0XHRcdFx0XHQgICAgICAgICAgICByY2xzaWQ6ICcnLFxuXHRcdFx0XHRcdCAgICAgICAgICAgIHJvYmppZDogJycsXG5cdFx0XHRcdFx0ICAgICAgICAgICAgdXNlcmxvZ2luOiAnJyxcblx0XHRcdFx0XHQgICAgICAgICAgICBjbHNpZDogJ01CT1gnLC8vdGhpcy4kZGF0YS5wYXJhbS5TdWJfQ2xzLklELFxuXHRcdFx0XHRcdCAgICAgICAgICAgIG9iamlkOiBcIlwiLFxuXHRcdFx0XHRcdCAgICAgICAgICAgIGF0dHI6IHJlcSxcblx0XHRcdFx0XHRcdFx0XHRtYXN0X2F0dHI6IG1hc3RfcmVxLFxuXHRcdFx0XHRcdFx0XHRcdGlucHV0UGFyYW10ZXI6W3sgYXR0cjogJ2lucHV0XzMwMzcnLCB2YWx1ZTogdGhpcy4kZGF0YS5zY2FuQ29kZVZhbCB9XVxuXHRcdFx0XHRcdCAgICAgICAgfVxuXHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHQgICAgICAgIHRoaXMuc2Nhbl9EYXRhT2JqUnVuQ3VzdG9tRXZlbnQoaW5mbywgXCJcIik7XG5cdFx0XHRcdFx0ICAgIH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pXG5cdFx0XHR9LFxuXHRcdFx0c2Nhbl9vbmV2ZW50KGUpe1xuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhlLnRhcmdldCk7XG5cdFx0XHRcdGlmKGUudGFyZ2V0LnZhbHVlKXtcblx0XHRcdFx0XHR2YXIgaXNmbGFnPXRydWU7XG5cdFx0XHRcdFx0Zm9yKHZhciBpIGluIHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0KXtcblx0XHRcdFx0XHRcdGlmKHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0W2ldLnNjYW5Db2RlVmFsID09IGUudGFyZ2V0LnZhbHVlKSBcblx0XHRcdFx0XHRcdFx0aXNmbGFnPWZhbHNlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQvL+WtkOaVsOaNruexu+aJq+eggeafpeivouaVsOaNrlxuXHRcdFx0XHRcdGlmIChpc2ZsYWcpIHtcblx0XHRcdFx0XHRcdHVuaS5oaWRlS2V5Ym9hcmQoKTtcblx0XHRcdFx0XHRcdHRoaXMuJGRhdGEuc2NhbkNvZGVWYWw9ZS50YXJnZXQudmFsdWU7XG5cdFx0XHRcdFx0XHR2YXIgZXZlbnRpZCA9IHRoaXMuJGRhdGEucGFyYW0uU2Nhbl9Db2RlLklucHV0X0NoYW5nZV9FdmVudC5JRDtcblx0XHRcdFx0XHRcdGlmIChldmVudGlkKSB7XG5cdFx0XHRcdFx0XHRcdHZhciBtYXN0X3JlcT1bXTtcblx0XHRcdFx0XHRcdFx0Ly/kuLvmlbDmja7nsbvlsZ7mgKdcblx0XHRcdFx0XHRcdFx0dmFyIGNsYXNzYXR0cmxpc3QgPSB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3Q7ICBcblx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBjbGFzc2F0dHJsaXN0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIGF0dHIgPSBjbGFzc2F0dHJsaXN0W2ldLkF0dHI7XG5cdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgYXIgPSBhdHRyW2pdO1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYoYXIuVHlwZT09J+W8leeUqOWvueixoSjlpJrkuKopJylcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoYXIuVmFsdWU9PSfor7cnKSBhci5WYWx1ZT0nJztcblx0XHRcdFx0XHRcdFx0XHRcdGlmKGFyLlR5cGU9PSflvJXnlKjkurrlkZgnIHx8IGFyLlR5cGU9PSflvJXnlKjpobnnm64nKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRtYXN0X3JlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsdWU6IGFyLlZhbElEID9hci5WYWxJRCA6JycgfSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRlbHNlIGlmKGFyLlR5cGU9PSfluIPlsJTlgLwnKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRtYXN0X3JlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsdWU6IGFyLlZhbHVlPycxJzonMCd9KTtcblx0XHRcdFx0XHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdFx0XHRcdFx0bWFzdF9yZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWx1ZSA/YXIuVmFsdWUgOicnfSk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHZhciByZXE9W107XG5cdFx0XHRcdFx0XHRcdC8v5a2Q5pWw5o2u57G75bGe5oCnXG5cdFx0XHRcdFx0XHRcdHZhciBhdHRybGlzdCA9IHRoaXMuJGRhdGEuc3ViQ2xhc3NBdHRyTGlzdDtcblx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhdHRybGlzdC5sZW5ndGg7IGkrKykgeyBcblx0XHRcdFx0XHRcdFx0XHR2YXIgYXR0ciA9IGF0dHJsaXN0W2ldLkF0dHI7XG5cdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgYXIgPSBhdHRyW2pdO1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYoYXIuVHlwZT09J+W8leeUqOWvueixoSjlpJrkuKopJylcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoYXIuVmFsdWU9PSfor7cnKSBhci5WYWx1ZT0nJztcblx0XHRcdFx0XHRcdFx0XHRcdGlmKGFyLlR5cGU9PSflvJXnlKjkurrlkZgnIHx8IGFyLlR5cGU9PSflvJXnlKjpobnnm64nKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWxJRCA/YXIuVmFsSUQgOicnIH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0ZWxzZSBpZihhci5UeXBlPT0n5biD5bCU5YC8Jylcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsdWU/JzEnOicwJ30pO1xuXHRcdFx0XHRcdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWx1ZSA/YXIuVmFsdWUgOicnfSk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHZhciBpbmZvID0ge1xuXHRcdFx0XHRcdFx0XHRcdGV2ZW50aWQ6IGV2ZW50aWQsXG5cdFx0XHRcdFx0XHRcdFx0ZWR0eXBlOiAnNycsLy9cIjBcIixcblx0XHRcdFx0XHRcdFx0XHRwcm9qZWN0aWQ6ICcnLFxuXHRcdFx0XHRcdFx0XHRcdHJjbHNpZDogJycsXG5cdFx0XHRcdFx0XHRcdFx0cm9iamlkOiAnJyxcblx0XHRcdFx0XHRcdFx0XHR1c2VybG9naW46ICcnLFxuXHRcdFx0XHRcdFx0XHRcdGNsc2lkOiAnTUJPWCcsLy90aGlzLiRkYXRhLnBhcmFtLlN1Yl9DbHMuSUQsXG5cdFx0XHRcdFx0XHRcdFx0b2JqaWQ6IFwiXCIsXG5cdFx0XHRcdFx0XHRcdFx0YXR0cjogcmVxLFxuXHRcdFx0XHRcdFx0XHRcdG1hc3RfYXR0cjogbWFzdF9yZXEsXG5cdFx0XHRcdFx0XHRcdFx0aW5wdXRQYXJhbXRlcjpbeyBhdHRyOiAnaW5wdXRfMzAzNycsIHZhbHVlOiB0aGlzLiRkYXRhLnNjYW5Db2RlVmFsIH1dXG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdHRoaXMuc2Nhbl9EYXRhT2JqUnVuQ3VzdG9tRXZlbnQoaW5mbywgXCJcIik7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0b25hcnJvdyhpbmRleCxvcGVuKXtcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coaW5kZXgrJy0tJytvcGVuKTtcblx0XHRcdFx0dmFyIGRhdGFfYXR0cj10aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV0uT3Blbjtcblx0XHRcdFx0aWYoIWRhdGFfYXR0cil7XG5cdFx0XHRcdFx0dGhpcy4kZGF0YS5zdWJQYW5lbExpc3RbZS50YXJnZXQuZGF0YXNldFsnaWlpbmRleCddXS5zdWJDbGFzc0F0dHJbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV0uVmFsdWU9b3Blbj09dHJ1ZT9mYWxzZTp0cnVlO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbZS50YXJnZXQuZGF0YXNldFsnaWlpbmRleCddXS5zdWJDbGFzc0F0dHJbaW5kZXhdLk9wZW49b3Blbj09dHJ1ZT9mYWxzZTp0cnVlO1xuXHRcdFx0fSxcblx0XHRcdG9uZGF0ZVRpbWUoZSkge1xuXHRcdFx0XHQvL2NvbnNvbGUubG9nKGUudGFyZ2V0KVxuXHRcdFx0XHR2YXIgZGF0YV9hdHRyPXRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtlLnRhcmdldC5kYXRhc2V0WydpbmRleCddXS5BdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2lpbmRleCddXS5WYWx1ZTtcblx0XHRcdFx0aWYoIWRhdGFfYXR0cil7XG5cdFx0XHRcdFx0dGhpcy4kZGF0YS5zdWJQYW5lbExpc3RbZS50YXJnZXQuZGF0YXNldFsnaWlpbmRleCddXS5zdWJDbGFzc0F0dHJbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV0uVmFsdWU9ZS50YXJnZXQudmFsdWU7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtlLnRhcmdldC5kYXRhc2V0WydpbmRleCddXS5BdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2lpbmRleCddXS5WYWx1ZT1lLnRhcmdldC52YWx1ZTtcblx0XHRcdFx0XG5cdFx0XHR9LFxuXHRcdFx0b25jaGFuZ2UoZSkge1xuXHRcdFx0XHRjb25zb2xlLmxvZyhlLnRhcmdldCk7XG5cdFx0XHRcdHZhciB2YWx1ZT10aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV0uZGljdGl0ZW1bZS50YXJnZXQudmFsdWVdO1xuXHRcdFx0XHR2YXIgZGF0YV9hdHRyID0gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZS50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dO1xuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhkYXRhX2F0dHIpO1xuXHRcdFx0XHRpZiAodmFsdWUuTmFtZSAhPSBkYXRhX2F0dHIuVmFsdWUpIHtcblx0XHRcdFx0XHR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV0uVmFsdWU9dmFsdWUuTmFtZTtcblx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyh0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV0uVmFsdWUpO1xuXHRcdFx0XHRcdHZhciBldmVudGlkID0gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZS50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dLmFjdGlvbjtcblx0XHRcdFx0XHRpZiAoZXZlbnRpZCkge1xuXHRcdFx0XHQgICAgICAgIC8vIHNlbGYuZXZlbnRfbm9fc3ViID0gMTtcblx0XHRcdFx0ICAgICAgICB2YXIgcmVxPVtdO1xuXHRcdFx0XHQgICAgICAgIHZhciBhdHRybGlzdCA9IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdDtcblx0XHRcdFx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJsaXN0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdCAgICAgICAgXHR2YXIgYXR0ciA9IGF0dHJsaXN0W2ldLkF0dHI7XG5cdFx0XHRcdCAgICAgICAgXHRmb3IgKHZhciBqID0gMDsgaiA8IGF0dHIubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0ICAgICAgICBcdFx0dmFyIGFyID0gYXR0cltqXTtcblx0XHRcdFx0ICAgICAgICBcdFx0aWYoYXIuVHlwZT09J+W8leeUqOWvueixoSjlpJrkuKopJylcblx0XHRcdFx0ICAgICAgICBcdFx0XHRpZihhci5WYWx1ZT09J+ivtycpIGFyLlZhbHVlPScnO1xuXHRcdFx0XHQgICAgICAgIFx0XHRpZihhci5UeXBlPT0n5byV55So5Lq65ZGYJyB8fCBhci5UeXBlPT0n5byV55So6aG555uuJylcblx0XHRcdFx0ICAgICAgICBcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbDogYXIuVmFsSUQgP2FyLlZhbElEIDonJyB9KTtcblx0XHRcdFx0ICAgICAgICBcdFx0ZWxzZSBpZihhci5UeXBlPT0n5biD5bCU5YC8Jylcblx0XHRcdFx0XHRcdFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsOiBhci5WYWx1ZT8nMSc6JzAnfSk7XG5cdFx0XHRcdCAgICAgICAgXHRcdGVsc2Vcblx0XHRcdFx0ICAgICAgICBcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbDogYXIuVmFsdWUgP2FyLlZhbHVlIDonJ30pO1xuXHRcdFx0XHQgICAgICAgIFx0fVxuXHRcdFx0XHQgICAgICAgIH1cblx0XHRcdFx0ICAgICAgICB2YXIgaW5mbyA9IHtcblx0XHRcdFx0ICAgICAgICAgICAgZXZlbnRpZDogZXZlbnRpZCxcblx0XHRcdFx0ICAgICAgICAgICAgZWR0eXBlOiBcIjBcIixcblx0XHRcdFx0ICAgICAgICAgICAgcHJvamVjdGlkOiAnJyxcblx0XHRcdFx0ICAgICAgICAgICAgcmNsc2lkOiAnJyxcblx0XHRcdFx0ICAgICAgICAgICAgcm9iamlkOiAnJyxcblx0XHRcdFx0ICAgICAgICAgICAgdXNlcmxvZ2luOiAnJyxcblx0XHRcdFx0ICAgICAgICAgICAgY2xzaWQ6IHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5JRCxcblx0XHRcdFx0ICAgICAgICAgICAgb2JqaWQ6IFwiXCIsXG5cdFx0XHRcdCAgICAgICAgICAgIGF0dHI6IHJlcSxcblx0XHRcdFx0ICAgICAgICB9XG5cdFx0XHRcdCAgICAgICAgdGhpcy5EYXRhT2JqUnVuQ3VzdG9tRXZlbnQoaW5mbyk7XG5cdFx0XHRcdCAgICB9XG5cdFx0XHRcdH1cblx0XHRcdFx0XG5cdFx0XHR9LFxuXHRcdFx0b25jaGFuZ2UyKGl0ZW0sdmFsdWUsZGVsdmFsdWUpIHtcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coaXRlbSk7XG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKHZhbHVlKTtcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coZGVsdmFsdWUpO1xuXHRcdFx0XHRpZihpdGVtLmxlbmd0aD09MCl7IC8v5Li656m65pe277yM5riF56m65bGe5oCndmFsdWVcblx0XHRcdFx0XHR2YXIgaW5kZXggLGlpbmRleCxkaW5kZXg9MDtcblx0XHRcdFx0XHRmb3IodmFyIGkgaW4gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0KXtcblx0XHRcdFx0XHRcdGZvcih2YXIgaiBpbiB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbaV0uQXR0cil7XG5cdFx0XHRcdFx0XHRcdGlmKGRlbHZhbHVlWzBdLmF0dHIgPT0gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2ldLkF0dHJbal0uTmFtZSl7XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2ldLkF0dHJbal0uVmFsdWU9XCJcIjtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRcdFxuXHRcdFx0XHRmb3IodmFyIHYgaW4gaXRlbSl7XG5cdFx0XHRcdFx0dmFyIGluZGV4ICxpaW5kZXgsZGluZGV4PTA7XG5cdFx0XHRcdFx0Zm9yKHZhciBpIGluIHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdCl7XG5cdFx0XHRcdFx0XHRmb3IodmFyIGogaW4gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2ldLkF0dHIpe1xuXHRcdFx0XHRcdFx0XHRpZihpdGVtW3ZdLmF0dHIgPT0gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2ldLkF0dHJbal0uTmFtZSl7XG5cdFx0XHRcdFx0XHRcdFx0aW5kZXg9aTtpaW5kZXg9ajtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR2YXIgaXRlbXZhbHVlID0gaXRlbVt2XTtcblx0XHRcdFx0XHR2YXIgZGF0YV9hdHRyID0gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2luZGV4XS5BdHRyW2lpbmRleF07XG5cdFx0XHRcdFx0XG5cdFx0XHRcdFx0Y29uc29sZS5sb2coZGF0YV9hdHRyKTtcblx0XHRcdFx0XHRpZiAoaXRlbXZhbHVlLk5hbWUgIT0gZGF0YV9hdHRyLlZhbHVlKSB7XG5cdFx0XHRcdFx0XHR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbaW5kZXhdLkF0dHJbaWluZGV4XS5WYWx1ZT12YWx1ZTtcblx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtpbmRleF0uQXR0cltpaW5kZXhdLlZhbHVlKTtcblx0XHRcdFx0XHRcdHZhciBldmVudGlkID0gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2luZGV4XS5BdHRyW2lpbmRleF0uYWN0aW9uO1xuXHRcdFx0XHRcdFx0aWYgKGV2ZW50aWQpIHtcblx0XHRcdFx0XHQgICAgICAgIC8vIHNlbGYuZXZlbnRfbm9fc3ViID0gMTtcblx0XHRcdFx0XHQgICAgICAgIHZhciByZXE9W107XG5cdFx0XHRcdFx0ICAgICAgICB2YXIgYXR0cmxpc3QgPSB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3Q7XG5cdFx0XHRcdFx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJsaXN0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0ICAgICAgICBcdHZhciBhdHRyID0gYXR0cmxpc3RbaV0uQXR0cjtcblx0XHRcdFx0XHQgICAgICAgIFx0Zm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0ICAgICAgICBcdFx0dmFyIGFyID0gYXR0cltqXTtcblx0XHRcdFx0XHQgICAgICAgIFx0XHRpZihhci5UeXBlPT0n5byV55So5a+56LGhKOWkmuS4qiknKVxuXHRcdFx0XHRcdCAgICAgICAgXHRcdFx0aWYoYXIuVmFsdWU9PSfor7cnKSBhci5WYWx1ZT0nJztcblx0XHRcdFx0XHQgICAgICAgIFx0XHRpZihhci5UeXBlPT0n5byV55So5Lq65ZGYJyB8fCBhci5UeXBlPT0n5byV55So6aG555uuJylcblx0XHRcdFx0XHQgICAgICAgIFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsOiBhci5WYWxJRCA/YXIuVmFsSUQgOicnIH0pO1xuXHRcdFx0XHRcdCAgICAgICAgXHRcdGVsc2UgaWYoYXIuVHlwZT09J+W4g+WwlOWAvCcpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsOiBhci5WYWx1ZT8nMSc6JzAnfSk7XG5cdFx0XHRcdFx0ICAgICAgICBcdFx0ZWxzZSBpZihhci5UeXBlPT0n5a2X5YW4JyB8fCBhci5UeXBlPT0n5a2X5YW4LeWtl+espuS4sicgfHwgYXIuVHlwZT09J+Wtl+WFuC3mlbTmlbAnKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbDogaXRlbXZhbHVlLk5hbWV9KTtcblx0XHRcdFx0XHQgICAgICAgIFx0XHRlbHNlXG5cdFx0XHRcdFx0ICAgICAgICBcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbDogYXIuVmFsdWUgP2FyLlZhbHVlIDonJ30pO1xuXHRcdFx0XHRcdCAgICAgICAgXHR9XG5cdFx0XHRcdFx0ICAgICAgICB9XG5cdFx0XHRcdFx0ICAgICAgICB2YXIgaW5mbyA9IHtcblx0XHRcdFx0XHQgICAgICAgICAgICBldmVudGlkOiBldmVudGlkLFxuXHRcdFx0XHRcdCAgICAgICAgICAgIGVkdHlwZTogXCIwXCIsXG5cdFx0XHRcdFx0ICAgICAgICAgICAgcHJvamVjdGlkOiAnJyxcblx0XHRcdFx0XHQgICAgICAgICAgICByY2xzaWQ6ICcnLFxuXHRcdFx0XHRcdCAgICAgICAgICAgIHJvYmppZDogJycsXG5cdFx0XHRcdFx0ICAgICAgICAgICAgdXNlcmxvZ2luOiAnJyxcblx0XHRcdFx0XHQgICAgICAgICAgICBjbHNpZDogdGhpcy4kZGF0YS5wYXJhbS5NYXN0ZXJfQ2xzLklELFxuXHRcdFx0XHRcdCAgICAgICAgICAgIG9iamlkOiBcIlwiLFxuXHRcdFx0XHRcdCAgICAgICAgICAgIGF0dHI6IHJlcSxcblx0XHRcdFx0XHQgICAgICAgIH1cblx0XHRcdFx0XHQgICAgICAgIHRoaXMuRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGluZm8pO1xuXHRcdFx0XHRcdCAgICB9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdFxuXHRcdFx0XHRcblx0XHRcdH0sXG5cdFx0XHRzdWJfb25jaGFuZ2UoZSkge1xuXHRcdFx0XHRjb25zb2xlLmxvZyhlLnRhcmdldCk7XG5cdFx0XHRcdHZhciB2YWx1ZT10aGlzLiRkYXRhLnN1YlBhbmVsTGlzdFtlLnRhcmdldC5kYXRhc2V0WydpaWluZGV4J11dLnN1YkNsYXNzQXR0cltlLnRhcmdldC5kYXRhc2V0WydpbmRleCddXS5BdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2lpbmRleCddXS5kaWN0aXRlbVtlLnRhcmdldC52YWx1ZV07XG5cdFx0XHRcdHZhciBkYXRhX2F0dHIgPSB0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdFtlLnRhcmdldC5kYXRhc2V0WydpaWluZGV4J11dLnN1YkNsYXNzQXR0cltlLnRhcmdldC5kYXRhc2V0WydpbmRleCddXS5BdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2lpbmRleCddXTtcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coZGF0YV9hdHRyKTtcblx0XHRcdFx0aWYgKHZhbHVlLk5hbWUgIT0gZGF0YV9hdHRyLlZhbHVlKSB7XG5cdFx0XHRcdFx0dGhpcy4kZGF0YS5zdWJQYW5lbExpc3RbZS50YXJnZXQuZGF0YXNldFsnaWlpbmRleCddXS5zdWJDbGFzc0F0dHJbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV0uVmFsdWU9dmFsdWUuTmFtZTtcblx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyh0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdFtlLnRhcmdldC5kYXRhc2V0WydpaWluZGV4J11dLnN1YkNsYXNzQXR0cltlLnRhcmdldC5kYXRhc2V0WydpbmRleCddXS5BdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2lpbmRleCddXS5WYWx1ZSk7XG5cdFx0XHRcdFx0dmFyIGV2ZW50aWQgPSB0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdFtlLnRhcmdldC5kYXRhc2V0WydpaWluZGV4J11dLnN1YkNsYXNzQXR0cltlLnRhcmdldC5kYXRhc2V0WydpbmRleCddXS5BdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2lpbmRleCddXS5hY3Rpb247XG5cdFx0XHRcdFx0aWYgKGV2ZW50aWQpIHtcblx0XHRcdFx0ICAgICAgICAvLyBzZWxmLmV2ZW50X25vX3N1YiA9IDE7XG5cdFx0XHRcdCAgICAgICAgdmFyIHJlcT1bXTtcblx0XHRcdFx0ICAgICAgICB2YXIgYXR0cmxpc3QgPSB0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdFtlLnRhcmdldC5kYXRhc2V0WydpaWluZGV4J11dLnN1YkNsYXNzQXR0cjtcblx0XHRcdFx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJsaXN0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdCAgICAgICAgXHR2YXIgYXR0ciA9IGF0dHJsaXN0W2ldLkF0dHI7XG5cdFx0XHRcdCAgICAgICAgXHRmb3IgKHZhciBqID0gMDsgaiA8IGF0dHIubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0ICAgICAgICBcdFx0dmFyIGFyID0gYXR0cltqXTtcblx0XHRcdFx0ICAgICAgICBcdFx0aWYoYXIuVHlwZT09J+W8leeUqOWvueixoSjlpJrkuKopJylcblx0XHRcdFx0ICAgICAgICBcdFx0XHRpZihhci5WYWx1ZT09J+ivtycpIGFyLlZhbHVlPScnO1xuXHRcdFx0XHQgICAgICAgIFx0XHRpZihhci5UeXBlPT0n5byV55So5Lq65ZGYJyB8fCBhci5UeXBlPT0n5byV55So6aG555uuJylcblx0XHRcdFx0ICAgICAgICBcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbDogYXIuVmFsSUQgP2FyLlZhbElEIDonJyB9KTtcblx0XHRcdFx0ICAgICAgICBcdFx0ZWxzZSBpZihhci5UeXBlPT0n5biD5bCU5YC8Jylcblx0XHRcdFx0XHRcdFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsOiBhci5WYWx1ZT8nMSc6JzAnfSk7XG5cdFx0XHRcdCAgICAgICAgXHRcdGVsc2Vcblx0XHRcdFx0ICAgICAgICBcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbDogYXIuVmFsdWUgP2FyLlZhbHVlIDonJ30pO1xuXHRcdFx0XHQgICAgICAgIFx0fVxuXHRcdFx0XHQgICAgICAgIH1cblx0XHRcdFx0ICAgICAgICB2YXIgaW5mbyA9IHtcblx0XHRcdFx0ICAgICAgICAgICAgZXZlbnRpZDogZXZlbnRpZCxcblx0XHRcdFx0ICAgICAgICAgICAgZWR0eXBlOiBcIjBcIixcblx0XHRcdFx0ICAgICAgICAgICAgcHJvamVjdGlkOiAnJyxcblx0XHRcdFx0ICAgICAgICAgICAgcmNsc2lkOiAnJyxcblx0XHRcdFx0ICAgICAgICAgICAgcm9iamlkOiAnJyxcblx0XHRcdFx0ICAgICAgICAgICAgdXNlcmxvZ2luOiAnJyxcblx0XHRcdFx0ICAgICAgICAgICAgY2xzaWQ6IHRoaXMuJGRhdGEucGFyYW0uU3ViX0Nscy5JRCxcblx0XHRcdFx0ICAgICAgICAgICAgb2JqaWQ6IFwiXCIsXG5cdFx0XHRcdCAgICAgICAgICAgIGF0dHI6IHJlcSxcblx0XHRcdFx0ICAgICAgICB9XG5cdFx0XHRcdCAgICAgICAgdGhpcy5EYXRhT2JqUnVuQ3VzdG9tRXZlbnQoaW5mbyk7XG5cdFx0XHRcdCAgICB9XG5cdFx0XHRcdH1cblx0XHRcdFx0XG5cdFx0XHR9LFxuXHRcdFx0c3ViX29uY2hhbmdlMihpdGVtLHZhbHVlLGRlbHZhbHVlKSB7XG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKGl0ZW0pO1xuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyh2YWx1ZSk7XG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKGRlbHZhbHVlKTtcblx0XHRcdFx0dmFyIHN1YkNsYXNzQXR0ciA9IHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2lpaW5kZXgnXV0uc3ViQ2xhc3NBdHRyO1xuXHRcdFx0XHRpZihpdGVtLmxlbmd0aD09MCl7IC8v5Li656m65pe277yM5riF56m65bGe5oCndmFsdWVcblx0XHRcdFx0XHR2YXIgaW5kZXggLGlpbmRleCxkaW5kZXg9MDtcblx0XHRcdFx0XHRmb3IodmFyIGkgaW4gc3ViQ2xhc3NBdHRyKXtcblx0XHRcdFx0XHRcdGZvcih2YXIgaiBpbiBzdWJDbGFzc0F0dHJbaV0uQXR0cil7XG5cdFx0XHRcdFx0XHRcdGZvcih2YXIgZCBpbiBzdWJDbGFzc0F0dHJbaV0uQXR0cltqXS5kaWN0aXRlbSl7XG5cdFx0XHRcdFx0XHRcdFx0aWYoZGVsdmFsdWVbMF0uTmFtZSA9PSBzdWJDbGFzc0F0dHJbaV0uQXR0cltqXS5kaWN0aXRlbVtkXS5OYW1lKXtcblx0XHRcdFx0XHRcdFx0XHRcdHN1YkNsYXNzQXR0cltpXS5BdHRyW2pdLlZhbHVlPVwiXCI7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdFx0XG5cdFx0XHRcdGZvcih2YXIgdiBpbiBpdGVtKXtcblx0XHRcdFx0XHR2YXIgaW5kZXggLGlpbmRleCxkaW5kZXg9MDtcblx0XHRcdFx0XHRmb3IodmFyIGkgaW4gc3ViQ2xhc3NBdHRyKXtcblx0XHRcdFx0XHRcdGZvcih2YXIgaiBpbiBzdWJDbGFzc0F0dHJbaV0uQXR0cil7XG5cdFx0XHRcdFx0XHRcdGZvcih2YXIgZCBpbiBzdWJDbGFzc0F0dHJbaV0uQXR0cltqXS5kaWN0aXRlbSl7XG5cdFx0XHRcdFx0XHRcdFx0aWYoaXRlbVt2XS5OYW1lID09IHN1YkNsYXNzQXR0cltpXS5BdHRyW2pdLmRpY3RpdGVtW2RdLk5hbWUpe1xuXHRcdFx0XHRcdFx0XHRcdFx0aW5kZXg9aTtpaW5kZXg9ajtkaW5kZXg9ZDtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0dmFyIGl0ZW12YWx1ZSA9IGl0ZW1bdl07XG5cdFx0XHRcdFx0dmFyIGRhdGFfYXR0ciA9IHN1YkNsYXNzQXR0cltpbmRleF0uQXR0cltpaW5kZXhdO1xuXHRcdFx0XHRcdFxuXHRcdFx0XHRcdGNvbnNvbGUubG9nKGRhdGFfYXR0cik7XG5cdFx0XHRcdFx0aWYgKGl0ZW12YWx1ZS5OYW1lICE9IGRhdGFfYXR0ci5WYWx1ZSkge1xuXHRcdFx0XHRcdFx0c3ViQ2xhc3NBdHRyW2luZGV4XS5BdHRyW2lpbmRleF0uVmFsdWU9dmFsdWU7XG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhzdWJDbGFzc0F0dHJbaW5kZXhdLkF0dHJbaWluZGV4XS5WYWx1ZSk7XG5cdFx0XHRcdFx0XHR2YXIgZXZlbnRpZCA9IHN1YkNsYXNzQXR0cltpbmRleF0uQXR0cltpaW5kZXhdLmFjdGlvbjtcblx0XHRcdFx0XHRcdGlmIChldmVudGlkKSB7XG5cdFx0XHRcdFx0ICAgICAgICAvLyBzZWxmLmV2ZW50X25vX3N1YiA9IDE7XG5cdFx0XHRcdFx0ICAgICAgICB2YXIgcmVxPVtdO1xuXHRcdFx0XHRcdCAgICAgICAgdmFyIGF0dHJsaXN0ID0gc3ViQ2xhc3NBdHRyO1xuXHRcdFx0XHRcdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRybGlzdC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdCAgICAgICAgXHR2YXIgYXR0ciA9IGF0dHJsaXN0W2ldLkF0dHI7XG5cdFx0XHRcdFx0ICAgICAgICBcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdCAgICAgICAgXHRcdHZhciBhciA9IGF0dHJbal07XG5cdFx0XHRcdFx0ICAgICAgICBcdFx0aWYoYXIuVHlwZT09J+W8leeUqOWvueixoSjlpJrkuKopJylcblx0XHRcdFx0XHQgICAgICAgIFx0XHRcdGlmKGFyLlZhbHVlPT0n6K+3JykgYXIuVmFsdWU9Jyc7XG5cdFx0XHRcdFx0ICAgICAgICBcdFx0aWYoYXIuVHlwZT09J+W8leeUqOS6uuWRmCcgfHwgYXIuVHlwZT09J+W8leeUqOmhueebricpXG5cdFx0XHRcdFx0ICAgICAgICBcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbDogYXIuVmFsSUQgP2FyLlZhbElEIDonJyB9KTtcblx0XHRcdFx0XHQgICAgICAgIFx0XHRlbHNlIGlmKGFyLlR5cGU9PSfluIPlsJTlgLwnKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbDogYXIuVmFsdWU/JzEnOicwJ30pO1xuXHRcdFx0XHRcdCAgICAgICAgXHRcdGVsc2UgaWYoYXIuVHlwZT09J+Wtl+WFuCcgfHwgYXIuVHlwZT09J+Wtl+WFuC3lrZfnrKbkuLInIHx8IGFyLlR5cGU9PSflrZflhbgt5pW05pWwJylcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWw6IGl0ZW12YWx1ZS5OYW1lfSk7XG5cdFx0XHRcdFx0ICAgICAgICBcdFx0ZWxzZVxuXHRcdFx0XHRcdCAgICAgICAgXHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWw6IGFyLlZhbHVlID9hci5WYWx1ZSA6Jyd9KTtcblx0XHRcdFx0XHQgICAgICAgIFx0fVxuXHRcdFx0XHRcdCAgICAgICAgfVxuXHRcdFx0XHRcdCAgICAgICAgdmFyIGluZm8gPSB7XG5cdFx0XHRcdFx0ICAgICAgICAgICAgZXZlbnRpZDogZXZlbnRpZCxcblx0XHRcdFx0XHQgICAgICAgICAgICBlZHR5cGU6IFwiMFwiLFxuXHRcdFx0XHRcdCAgICAgICAgICAgIHByb2plY3RpZDogJycsXG5cdFx0XHRcdFx0ICAgICAgICAgICAgcmNsc2lkOiAnJyxcblx0XHRcdFx0XHQgICAgICAgICAgICByb2JqaWQ6ICcnLFxuXHRcdFx0XHRcdCAgICAgICAgICAgIHVzZXJsb2dpbjogJycsXG5cdFx0XHRcdFx0ICAgICAgICAgICAgY2xzaWQ6IHRoaXMuJGRhdGEucGFyYW0uU3ViX0Nscy5JRCxcblx0XHRcdFx0XHQgICAgICAgICAgICBvYmppZDogXCJcIixcblx0XHRcdFx0XHQgICAgICAgICAgICBhdHRyOiByZXEsXG5cdFx0XHRcdFx0ICAgICAgICB9XG5cdFx0XHRcdFx0ICAgICAgICB0aGlzLkRhdGFPYmpSdW5DdXN0b21FdmVudChpbmZvKTtcblx0XHRcdFx0XHQgICAgfVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRcblx0XHRcdFx0XG5cdFx0XHR9LFxuXHRcdFx0b25ldmVudChlKXtcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coZS50YXJnZXQpO1xuXHRcdFx0XHR2YXIgZGF0YV9hdHRyID0gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZS50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dO1xuXHRcdFx0XHRpZighZGF0YV9hdHRyKXtcblx0XHRcdFx0XHR0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdFtlLnRhcmdldC5kYXRhc2V0WydpaWluZGV4J11dLnN1YkNsYXNzQXR0cltlLnRhcmdldC5kYXRhc2V0WydpbmRleCddXS5BdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2lpbmRleCddXS5WYWx1ZT1lLnRhcmdldC52YWx1ZTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gY29uc29sZS5sb2coZGF0YV9hdHRyKTtcblx0XHRcdFx0aWYgKGUudGFyZ2V0LnZhbHVlICE9IGRhdGFfYXR0ci5WYWx1ZSkge1xuXHRcdFx0XHRcdHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtlLnRhcmdldC5kYXRhc2V0WydpbmRleCddXS5BdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2lpbmRleCddXS5WYWx1ZT1lLnRhcmdldC52YWx1ZTtcblx0XHRcdFx0XHQvLyB2YXIgZXZlbnRpZCA9IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtlLnRhcmdldC5kYXRhc2V0WydpbmRleCddXS5BdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2lpbmRleCddXS5hY3Rpb247XG5cdFx0XHRcdFx0Ly/lrZDmlbDmja7nsbvmiavnoIHljLrkuovku7bohJrmnKxcblx0XHRcdFx0XHR2YXIgZXZlbnRpZCA9IHRoaXMuJGRhdGEucGFyYW0uU2Nhbl9Db2RlLklucHV0X0NoYW5nZV9FdmVudC5JRDtcblx0XHRcdFx0XHRpZiAoZXZlbnRpZCkge1xuXHRcdFx0XHQgICAgICAgIC8vIHNlbGYuZXZlbnRfbm9fc3ViID0gMTtcblx0XHRcdFx0ICAgICAgICB2YXIgcmVxPVtdO1xuXHRcdFx0XHQgICAgICAgIHZhciBhdHRybGlzdCA9IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdDsgIC8v5Li75pWw5o2u57G75bGe5oCnXG5cdFx0XHRcdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRybGlzdC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHQgICAgICAgIFx0dmFyIGF0dHIgPSBhdHRybGlzdFtpXS5BdHRyO1xuXHRcdFx0XHQgICAgICAgIFx0Zm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdCAgICAgICAgXHRcdHZhciBhciA9IGF0dHJbal07XG5cdFx0XHRcdCAgICAgICAgXHRcdGlmKGFyLlR5cGU9PSflvJXnlKjlr7nosaEo5aSa5LiqKScpXG5cdFx0XHRcdCAgICAgICAgXHRcdFx0aWYoYXIuVmFsdWU9PSfor7cnKSBhci5WYWx1ZT0nJztcblx0XHRcdFx0ICAgICAgICBcdFx0aWYoYXIuVHlwZT09J+W8leeUqOS6uuWRmCcgfHwgYXIuVHlwZT09J+W8leeUqOmhueebricpXG5cdFx0XHRcdCAgICAgICAgXHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsSUQgP2FyLlZhbElEIDonJyB9KTtcblx0XHRcdFx0ICAgICAgICBcdFx0ZWxzZSBpZihhci5UeXBlPT0n5biD5bCU5YC8Jylcblx0XHRcdFx0ICAgICAgICBcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWx1ZT8nMSc6JzAnfSk7XG5cdFx0XHRcdCAgICAgICAgXHRcdGVsc2Vcblx0XHRcdFx0ICAgICAgICBcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWx1ZSA/YXIuVmFsdWUgOicnfSk7XG5cdFx0XHRcdCAgICAgICAgXHR9XG5cdFx0XHRcdCAgICAgICAgfVxuXHRcdFx0XHQgICAgICAgIHZhciBpbmZvID0ge1xuXHRcdFx0XHQgICAgICAgICAgICBldmVudGlkOiBldmVudGlkLFxuXHRcdFx0XHQgICAgICAgICAgICBlZHR5cGU6IFwiN1wiLC8vXCIwXCIsXG5cdFx0XHRcdCAgICAgICAgICAgIHByb2plY3RpZDogJycsXG5cdFx0XHRcdCAgICAgICAgICAgIHJjbHNpZDogJycsXG5cdFx0XHRcdCAgICAgICAgICAgIHJvYmppZDogJycsXG5cdFx0XHRcdCAgICAgICAgICAgIHVzZXJsb2dpbjogJycsXG5cdFx0XHRcdCAgICAgICAgICAgIGNsc2lkOiAnTUJPWCcsLy90aGlzLiRkYXRhLnBhcmFtLlN1Yl9DbHMuSUQsXG5cdFx0XHRcdCAgICAgICAgICAgIG9iamlkOiBcIlwiLFxuXHRcdFx0XHQgICAgICAgICAgICBhdHRyOiByZXEsXG5cdFx0XHRcdCAgICAgICAgXHRtYXN0X2F0dHI6IFtdLFxuXHRcdFx0XHQgICAgICAgIFx0aW5wdXRQYXJhbXRlcjpbeyBhdHRyOiAnbWFzdF9pbnB1dF8zMDM3JywgdmFsdWU6IGUudGFyZ2V0LnZhbHVlIH1dXG5cdFx0XHRcdCAgICAgICAgfVxuXHRcdFx0XHQgICAgICAgIFxuXHRcdFx0XHQgICAgICAgIHRoaXMuc2Nhbl9EYXRhT2JqUnVuQ3VzdG9tRXZlbnQoaW5mbywgXCJcIik7XG5cdFx0XHRcdCAgICB9XG5cdFx0XHRcdH1cblx0XHRcdFx0XG5cdFx0XHR9LFxuXHRcdFx0b25jaGVjayhlKSB7XG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKGUudGFyZ2V0KTtcblx0XHRcdFx0dmFyIGlzY2hlY2tlZCA9IGUudGFyZ2V0LmRhdGFzZXQuaXNjaGVjaz9mYWxzZTp0cnVlO1xuXHRcdFx0XHR2YXIgZGF0YV9hdHRyID0gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZS50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dO1xuXHRcdFx0XHRpZighZGF0YV9hdHRyKXtcblx0XHRcdFx0XHR0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdFtlLnRhcmdldC5kYXRhc2V0WydpaWluZGV4J11dLnN1YkNsYXNzQXR0cltlLnRhcmdldC5kYXRhc2V0WydpbmRleCddXS5BdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2lpbmRleCddXS5WYWx1ZT1pc2NoZWNrZWQ7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKGRhdGFfYXR0cik7XG5cdFx0XHRcdGlmIChpc2NoZWNrZWQgIT0gZGF0YV9hdHRyLlZhbHVlKSB7XG5cdFx0XHRcdFx0dGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZS50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dLlZhbHVlPWlzY2hlY2tlZDtcblx0XHRcdFx0XHR2YXIgZXZlbnRpZCA9IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtlLnRhcmdldC5kYXRhc2V0WydpbmRleCddXS5BdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2lpbmRleCddXS5hY3Rpb247XG5cdFx0XHRcdFx0aWYgKGV2ZW50aWQpIHtcblx0XHRcdFx0ICAgICAgICAvLyBzZWxmLmV2ZW50X25vX3N1YiA9IDE7XG5cdFx0XHRcdCAgICAgICAgdmFyIHJlcT1bXTtcblx0XHRcdFx0ICAgICAgICB2YXIgYXR0cmxpc3QgPSB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3Q7XG5cdFx0XHRcdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRybGlzdC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHQgICAgICAgIFx0dmFyIGF0dHIgPSBhdHRybGlzdFtpXS5BdHRyO1xuXHRcdFx0XHQgICAgICAgIFx0Zm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdCAgICAgICAgXHRcdHZhciBhciA9IGF0dHJbal07XG5cdFx0XHRcdCAgICAgICAgXHRcdGlmKGFyLlR5cGU9PSflvJXnlKjlr7nosaEo5aSa5LiqKScpXG5cdFx0XHRcdCAgICAgICAgXHRcdFx0aWYoYXIuVmFsdWU9PSfor7cnKSBhci5WYWx1ZT0nJztcblx0XHRcdFx0ICAgICAgICBcdFx0aWYoYXIuVHlwZT09J+W8leeUqOS6uuWRmCcgfHwgYXIuVHlwZT09J+W8leeUqOmhueebricpXG5cdFx0XHRcdCAgICAgICAgXHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWw6IGFyLlZhbElEID9hci5WYWxJRCA6JycgfSk7XG5cdFx0XHRcdCAgICAgICAgXHRcdGVsc2UgaWYoYXIuVHlwZT09J+W4g+WwlOWAvCcpXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbDogYXIuVmFsdWU/JzEnOicwJ30pO1xuXHRcdFx0XHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsOiBhci5WYWx1ZSA/YXIuVmFsdWUgOicnfSk7XG5cdFx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdCAgICAgICAgXHR9XG5cdFx0XHRcdCAgICAgICAgfVxuXHRcdFx0XHQgICAgICAgIHZhciBpbmZvID0ge1xuXHRcdFx0XHQgICAgICAgICAgICBldmVudGlkOiBldmVudGlkLFxuXHRcdFx0XHQgICAgICAgICAgICBlZHR5cGU6IFwiMFwiLFxuXHRcdFx0XHQgICAgICAgICAgICBwcm9qZWN0aWQ6ICcnLFxuXHRcdFx0XHQgICAgICAgICAgICByY2xzaWQ6ICcnLFxuXHRcdFx0XHQgICAgICAgICAgICByb2JqaWQ6ICcnLFxuXHRcdFx0XHQgICAgICAgICAgICB1c2VybG9naW46ICcnLFxuXHRcdFx0XHQgICAgICAgICAgICBjbHNpZDogdGhpcy4kZGF0YS5wYXJhbS5NYXN0ZXJfQ2xzLklELFxuXHRcdFx0XHQgICAgICAgICAgICBvYmppZDogXCJcIixcblx0XHRcdFx0ICAgICAgICAgICAgYXR0cjogcmVxLFxuXHRcdFx0XHQgICAgICAgIH1cblx0XHRcdFx0ICAgICAgICB0aGlzLkRhdGFPYmpSdW5DdXN0b21FdmVudChpbmZvKTtcblx0XHRcdFx0ICAgIH1cblx0XHRcdFx0fVxuXHRcdFx0XHRcblx0XHRcdH0sXG5cdFx0XHRpbnB1dFZhbExpc3RJc0RlbChpbmRleCl7XG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKGluZGV4KTtcbiAgICAgICAgICAgICAgICB0aGlzLiRkYXRhLmlucHV0VmFsTGlzdC5zcGxpY2UoaW5kZXgsIDEpOyAvL+WIoOmZpHRhYlBhZ2Vqc29u55qE5YaF5a65XG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKHRoaXMuJGRhdGEuaW5wdXRWYWxMaXN0KTtcblx0XHRcdH0sXG5cdFx0XHRhZGRyZXNzY2hhbmdlKGUpIHtcblx0XHRcdCAgICAvLyBjb25zb2xlLmxvZyhlLnRhcmdldCk7XG5cdFx0XHQgICAgY29uc29sZS5sb2coZS5kYXRhLmpvaW4oJzsnKSlcblx0XHRcdFx0dGhpcy4kZGF0YS5zdWJDbGFzc0F0dHJMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZS50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dLlZhbHVlPWUuZGF0YS5qb2luKCc7Jyk7XG5cdFx0XHR9LFxuXHRcdFx0Y2xhc3NBdHRyX2V4dEJ1dHRvbihpbmRleCxpaW5kZXgpe1xuXHRcdFx0XHR2YXIgJHRoaXMgPSB0aGlzO1xuXHRcdFx0XHR2YXIgYmVmb3JlX2NsaWNrX2J1dHRvbiA9ICR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbaW5kZXhdLkF0dHJbaWluZGV4XS5iZWZvcmVfY2xpY2tfYnV0dG9uO1xuXHRcdFx0XHR2YXIgYnV0dG9uX2NhbGxiYWNrID0gJHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtpbmRleF0uQXR0cltpaW5kZXhdLmJ1dHRvbl9jYWxsYmFjaztcblx0XHRcdFx0aWYoIWJlZm9yZV9jbGlja19idXR0b24pe1xuXHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi5o+Q56S6XCIsY29udGVudDpcImJlZm9yZV9jbGlja19idXR0b24tZXZlbnRfaWTkuLrnqbrvvIFcIixzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYoIWJ1dHRvbl9jYWxsYmFjayl7XG5cdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLmj5DnpLpcIixjb250ZW50OlwiYnV0dG9uX2NhbGxiYWNrLWV2ZW50X2lk5Li656m677yBXCIsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHZhciBkYXRhX2F0dHIgPSB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbaW5kZXhdLkF0dHJbaWluZGV4XTtcblx0XHRcdFx0dGhpcy5EYXRhT2JqUnVuQ3VzdG9tRXZlbnRfUmV0dXJuKGJlZm9yZV9jbGlja19idXR0b24sIGRhdGFfYXR0ciwgYnV0dG9uX2NhbGxiYWNrLCBpbmRleCxpaW5kZXgpO1xuXHRcdFx0fSxcblx0XHRcdHNjYW5fY2xhc3NBdHRyX2V4dEJ1dHRvbihlKXsgIC8vLS0tLS0tLS0t5pyq5a6M5oiQLS0tLS0tLS0tLS1cblx0XHRcdFx0dmFyICR0aGlzID0gdGhpcztcblx0XHRcdFx0dmFyIEJlZm9yZV9TZWxlY3RfRXZlbnQgPSAkdGhpcy4kZGF0YS5wYXJhbS5TY2FuX0NvZGUuQmVmb3JlX1NlbGVjdF9FdmVudC5JRDtcblx0XHRcdFx0dmFyIEFmdGVyX1NlbGVjdF9FdmVudCA9ICR0aGlzLiRkYXRhLnBhcmFtLlNjYW5fQ29kZS5BZnRlcl9TZWxlY3RfRXZlbnQuSUQ7XG5cdFx0XHRcdGlmKCFCZWZvcmVfU2VsZWN0X0V2ZW50KXtcblx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIuaPkOekulwiLGNvbnRlbnQ6XCLpgInmi6nmjInpkq7liY3kuovku7bkuLrnqbrvvIFcIixzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYoIUFmdGVyX1NlbGVjdF9FdmVudCl7XG5cdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLmj5DnpLpcIixjb250ZW50Olwi5paw5aKe5oyJ6ZKu5ZCO5LqL5Lu25Li656m677yBXCIsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIHZhciBkYXRhX2F0dHIgPSB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbaW5kZXhdLkF0dHJbaWluZGV4XTtcblx0XHRcdFx0dGhpcy5EYXRhT2JqUnVuQ3VzdG9tRXZlbnRfUmV0dXJuKEJlZm9yZV9TZWxlY3RfRXZlbnQsICcnLCBBZnRlcl9TZWxlY3RfRXZlbnQsICcnLCAnJyk7XG5cdFx0XHR9LFxuXHRcdFx0Y2xhc3NBdHRyX0FkZFBlcihpbmRleCxpaW5kZXgpe1xuXHRcdFx0XHR2YXIgcGFyYW09e2luZGV4OmluZGV4LGlpbmRleDppaW5kZXh9O1xuXHRcdFx0XHR2YXIgJHRoaXMgPSB0aGlzO1xuXHRcdFx0XHR1bmkubmF2aWdhdGVUbyh7XG5cdFx0XHRcdFx0dXJsOicuLi9zZWxwc24vaW5kZXg/bXVsaXQ9ZmFsc2UmcGFyYW09JytKU09OLnN0cmluZ2lmeShwYXJhbSksXG5cdFx0XHRcdFx0ZXZlbnRzOntcblx0XHRcdFx0XHRcdEFkZFBlcihkYXRhLHBhcmFtKXsgXG5cdFx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKHBhcmFtKTtcblx0XHRcdFx0XHRcdFx0Y29uc29sZS5sb2coZGF0YSk7XG5cdFx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbcGFyYW0uaW5kZXhdLkF0dHJbcGFyYW0uaWluZGV4XS5WYWx1ZT1kYXRhWzBdLk5hbWU7XG5cdFx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbcGFyYW0uaW5kZXhdLkF0dHJbcGFyYW0uaWluZGV4XS5WYWxJRD1kYXRhWzBdLkxvZ2luKyc7JytkYXRhWzBdLk5hbWU7XG5cdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHR2YXIgZXZlbnRpZCA9ICR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbcGFyYW0uaW5kZXhdLkF0dHJbcGFyYW0uaWluZGV4XS5hY3Rpb247XG5cdFx0XHRcdFx0XHRcdGlmIChldmVudGlkKSB7XG5cdFx0XHRcdFx0XHRcdCAgICBldmVudGlkID0gZXZlbnRpZC50cmltKCk7XG5cdFx0XHRcdFx0XHRcdCAgICBpZiAoZXZlbnRpZCkge1xuXHRcdFx0XHRcdFx0XHQgICAgICAgIHZhciBpbmZvID0ge1xuXHRcdFx0XHRcdFx0XHQgICAgICAgICAgICBldmVudGlkOiBldmVudGlkLFxuXHRcdFx0XHRcdFx0XHQgICAgICAgICAgICBlZHR5cGU6IFwiNFwiLFxuXHRcdFx0XHRcdFx0XHQgICAgICAgICAgICBwcm9qZWN0aWQ6IFwiXCIsXG5cdFx0XHRcdFx0XHRcdCAgICAgICAgICAgIHJjbHNpZDogXCJcIixcblx0XHRcdFx0XHRcdFx0ICAgICAgICAgICAgcm9iamlkOiBcIlwiLFxuXHRcdFx0XHRcdFx0XHQgICAgICAgICAgICB1c2VybG9naW46IGRhdGFbMF0uTG9naW4sXG5cdFx0XHRcdFx0XHRcdCAgICAgICAgICAgIGNsc2lkOiAkdGhpcy4kZGF0YS5wYXJhbS5NYXN0ZXJfQ2xzLklELFxuXHRcdFx0XHRcdFx0XHQgICAgICAgICAgICBvYmppZDogXCJcIixcblx0XHRcdFx0XHRcdFx0ICAgICAgICAgICAgYXR0cjogW10sXG5cdFx0XHRcdFx0XHRcdCAgICAgICAgfVxuXHRcdFx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyB2YXIgZGF0YV9hdHRyID0gJHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtwYXJhbS5pbmRleF0uQXR0cltwYXJhbS5paW5kZXhdO1xuXHRcdFx0XHRcdFx0XHQgICAgICAgICR0aGlzLkRhdGFPYmpSdW5DdXN0b21FdmVudChpbmZvKTtcblx0XHRcdFx0XHRcdFx0ICAgIH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9LFxuXHRcdFx0Y2xhc3NBdHRyX0FkZFJlZihlKXtcblx0XHRcdFx0Y29uc29sZS5sb2coZS50YXJnZXQpO1xuXHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIuaPkOekulwiLGNvbnRlbnQ6XCLmraTlip/og73ov5jmnKrlrp7njrDvvIFcIixzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHRcdFx0Ly8gdmFyIHZhbHVlPXRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtlLnRhcmdldC5kYXRhc2V0WydpbmRleCddXS5BdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2lpbmRleCddXS5SZWxDbHNbZS50YXJnZXQudmFsdWVdO1xuXHRcdFx0XHQvLyB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV0uVmFsdWU9dmFsdWU7XG5cdFx0XHR9LFxuXHRcdFx0Y2xhc3NBdHRyX0FkZFByaihpbmRleCxpaW5kZXgpe1xuXHRcdFx0XHR2YXIgcGFyYW09e2luZGV4OmluZGV4LGlpbmRleDppaW5kZXh9O1xuXHRcdFx0XHR2YXIgJHRoaXMgPSB0aGlzO1xuXHRcdFx0XHR1bmkubmF2aWdhdGVUbyh7XG5cdFx0XHRcdFx0dXJsOicuLi9zZWxQcmovaW5kZXg/cmVsYXRpb249LTEmcGFyYW09JytKU09OLnN0cmluZ2lmeShwYXJhbSksXG5cdFx0XHRcdFx0ZXZlbnRzOntcblx0XHRcdFx0XHRcdEFkZFBlcihkYXRhLHBhcmFtKXsgXG5cdFx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKHBhcmFtKTtcblx0XHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coZGF0YSk7XG5cdFx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbcGFyYW0uaW5kZXhdLkF0dHJbcGFyYW0uaWluZGV4XS5WYWx1ZT1kYXRhWzBdLk5hbWU7XG5cdFx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbcGFyYW0uaW5kZXhdLkF0dHJbcGFyYW0uaWluZGV4XS5WYWxJRD1kYXRhWzBdLklEKyc7JytkYXRhWzBdLk5hbWU7XG5cdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHR2YXIgZXZlbnRpZCA9ICR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbcGFyYW0uaW5kZXhdLkF0dHJbcGFyYW0uaWluZGV4XS5hY3Rpb247XG5cdFx0XHRcdFx0XHRcdGlmIChldmVudGlkKSB7XG5cdFx0XHRcdFx0XHRcdCAgICBldmVudGlkID0gZXZlbnRpZC50cmltKCk7XG5cdFx0XHRcdFx0XHRcdCAgICBpZiAoZXZlbnRpZCkge1xuXHRcdFx0XHRcdFx0XHQgICAgICAgIHZhciBpbmZvID0ge1xuXHRcdFx0XHRcdFx0XHQgICAgICAgICAgICBldmVudGlkOiBldmVudGlkLFxuXHRcdFx0XHRcdFx0XHQgICAgICAgICAgICBlZHR5cGU6IFwiMlwiLFxuXHRcdFx0XHRcdFx0XHQgICAgICAgICAgICBwcm9qZWN0aWQ6IGRhdGFbMF0uSUQsXG5cdFx0XHRcdFx0XHRcdCAgICAgICAgICAgIHJjbHNpZDogXCJcIixcblx0XHRcdFx0XHRcdFx0ICAgICAgICAgICAgcm9iamlkOiBcIlwiLFxuXHRcdFx0XHRcdFx0XHQgICAgICAgICAgICB1c2VybG9naW46IFwiXCIsXG5cdFx0XHRcdFx0XHRcdCAgICAgICAgICAgIGNsc2lkOiAkdGhpcy4kZGF0YS5wYXJhbS5NYXN0ZXJfQ2xzLklELFxuXHRcdFx0XHRcdFx0XHQgICAgICAgICAgICBvYmppZDogXCJcIixcblx0XHRcdFx0XHRcdFx0ICAgICAgICAgICAgYXR0cjogW10sXG5cdFx0XHRcdFx0XHRcdCAgICAgICAgfVxuXHRcdFx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdCAgICAgICAgLy8gdmFyIGRhdGFfYXR0ciA9ICR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbcGFyYW0uaW5kZXhdLkF0dHJbcGFyYW0uaWluZGV4XTtcblx0XHRcdFx0XHRcdFx0ICAgICAgICAkdGhpcy5EYXRhT2JqUnVuQ3VzdG9tRXZlbnQoaW5mbyk7XG5cdFx0XHRcdFx0XHRcdCAgICB9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSxcblx0XHRcdHNhdmEoKXtcblx0XHRcdFx0aWYgKHRoaXMuJGRhdGEucGFyYW0uQmVmb3JlX09LX0V2ZW50KSAvL+WIpOaWreWKn+iDveeCueWPguaVsOaYr+WQpuacieehruWumuWJjeiEmuacrFxuXHRcdFx0XHRcdHRoaXMuc2Nhbl9PS0RhdGFPYmpSdW5DdXN0b21FdmVudCh0aGlzLiRkYXRhLnBhcmFtLkJlZm9yZV9PS19FdmVudC5JRCk7XG5cdFx0XHRcdGVsc2UgaWYgKHRoaXMuJGRhdGEucGFyYW0uQWZ0ZXJfT0tfRXZlbnQpIC8v5Yik5pat5Yqf6IO954K55Y+C5pWw5piv5ZCm5pyJ56Gu5a6a5ZCO6ISa5pysXG5cdFx0XHRcdFx0dGhpcy5zY2FuX09LRGF0YU9ialJ1bkN1c3RvbUV2ZW50KHRoaXMuJGRhdGEucGFyYW0uQWZ0ZXJfT0tfRXZlbnQuSUQpO1xuXHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0dW5pLm5hdmlnYXRlQmFjayh7ZGVsdGE6MSB9KTsvL+i/lOWbnuWxguaVsO+8jDLliJnkuIrkuIrpobVcblx0XHRcdH0sXG5cdFx0XHRhZGQoKXtcblx0XHRcdFx0dW5pLnNob3dMb2FkaW5nKHtcblx0XHRcdFx0XHR0aXRsZTpcIuWKoOi9veS4rS4uLlwiLFxuXHRcdFx0XHRcdG1hc2s6dHJ1ZVxuXHRcdFx0XHR9KTtcblx0XHRcdFx0dmFyIHJlcT1bXTtcblx0XHRcdFx0dmFyIGF0dHJsaXN0ID0gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0O1xuXHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJsaXN0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0dmFyIGF0dHIgPSBhdHRybGlzdFtpXS5BdHRyO1xuXHRcdFx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdFx0dmFyIGFyID0gYXR0cltqXTtcblx0XHRcdFx0XHRcdGlmKGFyLlZhbHVlPT0n6K+36YCJ5oupJyB8fCBhci5WYWx1ZT09J+KAlOKAlOivt+mAieaLqeKAlOKAlCcpIGFyLlZhbHVlPScnO1xuXHRcdFx0XHRcdFx0aWYoYXIuVHlwZT09J+W8leeUqOWvueixoSjlpJrkuKopJylcblx0XHRcdFx0XHRcdFx0aWYoYXIuVmFsdWU9PSfor7cnKSBhci5WYWx1ZT0nJztcblx0XHRcdFx0ICAgICAgICBpZihhci5UeXBlPT0n5byV55So5Lq65ZGYJyB8fCBhci5UeXBlPT0n5byV55So6aG555uuJylcblx0XHRcdFx0ICAgICAgICBcdHJlcS5wdXNoKHsgbmFtZTogYXIuTmFtZSwgdmFsdWU6IGFyLlZhbElEID9hci5WYWxJRCA6JycgfSk7XG5cdFx0XHRcdCAgICAgICAgZWxzZSBpZihhci5UeXBlPT0n5biD5bCU5YC8Jylcblx0XHRcdFx0XHRcdFx0cmVxLnB1c2goeyBuYW1lOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsdWU/JzEnOicwJ30pO1xuXHRcdFx0XHQgICAgICAgIGVsc2UgaWYoYXIuVHlwZT09J+Wtl+WFuCcgfHwgYXIuVHlwZT09J+Wtl+WFuC3lrZfnrKbkuLInIHx8IGFyLlR5cGU9PSflrZflhbgt5pW05pWwJyl7XG5cdFx0XHRcdFx0XHRcdGlmKGFyLnNlbGVjdD09dHJ1ZSl7IC8v5Yik5pat5LiL5ouJ5piv5ZCm5aSa6YCJXG5cdFx0XHRcdFx0XHRcdFx0dmFyIHZhbFN0ciA9XCJcIjtcblx0XHRcdFx0XHRcdFx0XHRmb3IodmFyIHYgaW4gYXIuVmFsdWUpe1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYodmFsU3RyKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YWxTdHIrPVwiO1wiO1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFsU3RyKz1hci5WYWx1ZVt2XTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0cmVxLnB1c2goeyBuYW1lOiBhci5OYW1lLCB2YWx1ZTogdmFsU3RyfSk7XG5cdFx0XHRcdFx0XHRcdH1lbHNlXG5cdFx0XHRcdFx0XHRcdFx0cmVxLnB1c2goeyBuYW1lOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsdWV9KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdFx0cmVxLnB1c2goeyBuYW1lOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsdWUgP2FyLlZhbHVlIDonJ30pO1xuXHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdGlmIChhci5ub3RlbXB0eSA9PSB0cnVlICYmICFhci5WYWx1ZSkge1xuXHRcdFx0XHRcdFx0Ly8gaWYoYXIuTm90RW1wdHk9PScxJyl7XG5cdFx0XHRcdFx0XHRcdHVuaS5oaWRlTG9hZGluZygpO1xuXHRcdFx0XHRcdFx0XHQvLyB1bmkuc2hvd1RvYXN0KHt0aXRsZTphci5EaXNwTmFtZSsn5LiN6IO95Li656m677yBJyxpY29uOlwic3VjY2Vzc1wiLGR1cmF0aW9uOjMwMDB9KTtcblx0XHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLmj5DnpLpcIixjb250ZW50OmFyLkRpc3BOYW1lKyfkuI3og73kuLrnqbrvvIEnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHZhciBlbnZpcm9tZW50ID0ge1xuXHRcdFx0XHQgICAgICdmdW5jdGlvbic6ICczMDAwJywgLy8g5Yqf6IO954K557yW5Y+3XG5cdFx0XHRcdCAgICAgY2xzX2lkOiB0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuSUQsICAgICAvLyDlip/og73ngrnkuLvmlbDmja7nsbvmoIfor4Zcblx0XHRcdFx0ICAgICAnYnV0dG9uJzogJ3RvcCcsICAgLy8gdG9wL2JvdHRvbVxuXHRcdFx0XHQgICAgIGJ1dHRvbl9uYW1lOiAn5paw5aKeJyxcblx0XHRcdFx0ICAgICBtYXN0ZXI6IHtcblx0XHRcdFx0ICAgICAgICAgY2xzX2lkOiB0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuSUQsIFxuXHRcdFx0XHQgICAgIH1cblx0XHRcdFx0fTtcblx0XHRcdFx0IFxuXHRcdFx0XHQvLyB2YXIgZGF0YUluZm89e1xuXHRcdFx0XHQvLyAgICAgY2xhc3NfaWQ6IHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5JRCwgZGF0YV9vYmpfaWQ6ICcnLCBtYXN0ZXJjbHNpZDogJycsXG5cdFx0XHRcdC8vICAgICByZXE6IEpTT04uc3RyaW5naWZ5KHJlcSksIHVwZmlsZTogSlNPTi5zdHJpbmdpZnkoW10pLCBwb3N0X2RhdGE6IEpTT04uc3RyaW5naWZ5KHt9KSxcblx0XHRcdFx0Ly8gICAgIGNvbXBvc2U6IEpTT04uc3RyaW5naWZ5KFtdKSwgcmVmZGF0YXN0b3JlOiBKU09OLnN0cmluZ2lmeShbXSksIGV4dGluZm86IEpTT04uc3RyaW5naWZ5KGVudmlyb21lbnQpLCBcblx0XHRcdFx0Ly8gXHRub3RfdHJpZ2dlcl9zeXNfZXZlbnQ6ICcnXG5cdFx0XHRcdC8vIH07XG5cdFx0XHRcdGVudmlyb21lbnQgPSBCYXNlNjQuZW5jb2RlKEpTT04uc3RyaW5naWZ5KGVudmlyb21lbnQpKTsvL+WwhuWtl+espuS4sui9rOaNouS4umJhc2U2NOe8lueggVxuXHRcdFx0XHR2YXIgb2JqX2F0dHI9e307XG5cdFx0XHRcdHJlcS5mb3JFYWNoKGl0ZW09Pntcblx0XHRcdFx0XHRvYmpfYXR0cltpdGVtLm5hbWVdID0gaXRlbS52YWx1ZTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHZhciBkYXRhSW5mbz17XG5cdFx0XHRcdFx0Y2xhc3NfaWQ6IHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5JRCxcblx0XHRcdFx0XHRjbGFzc19uYW1lOicnLFxuXHRcdFx0XHRcdG1hc3Rlcl9jbHNfaWQ6JycsXG5cdFx0XHRcdFx0bWFzdGVyX29ial9pZDonJyxcblx0XHRcdFx0XHRjcmVhdG9yOicnLFxuXHRcdFx0XHRcdGNyZWF0b3JfbmFtZTonJyxcblx0XHRcdFx0XHRub3RfdHJpZ2dlcl9ldmVudDonJyxcblx0XHRcdFx0XHR1cGRhdGVfZXhpc3Q6JycsXG5cdFx0XHRcdFx0cG9zdF9wcm9jZXNzOicnLFxuXHRcdFx0XHRcdGV4dF9pbmZvOiBlbnZpcm9tZW50LFxuXHRcdFx0XHRcdG9ial9hdHRyOiBvYmpfYXR0clxuXHRcdFx0XHR9O1xuXHRcdFx0XHRjb25zb2xlLmxvZyhkYXRhSW5mbyk7XG5cdFx0XHRcdC8vIHJldHVyblxuXHRcdFx0XHR0aGlzLiRzdG9yZS5kaXNwYXRjaCgnY3JlYXRlRGF0YU9iaicsZGF0YUluZm8pLnRoZW4oc3VjY2Vzcz0+e1xuXHRcdFx0XHRcdGNvbnNvbGUubG9nKHN1Y2Nlc3MpO1xuXHRcdFx0XHRcdHVuaS5oaWRlTG9hZGluZygpO1xuXHRcdFx0XHRcdGlmIChzdWNjZXNzLmVycl9jb2RlID09IDApIHtcblx0XHRcdFx0XHRcdHZhciByZXN1bHQgPSBzdWNjZXNzLnJlc3VsdDtcblx0XHRcdFx0XHRcdGlmKHN1Y2Nlc3MucmVzdWx0LmFjdGlvbil7XG5cdFx0XHRcdFx0XHRcdHZhciBhY3Rpb24gPSBKU09OLnBhcnNlKHN1Y2Nlc3MucmVzdWx0LkFjdGlvbik7XG5cdFx0XHRcdFx0XHRcdGlmKGFjdGlvbi5yZXQ9PScwJyl7XG5cdFx0XHRcdFx0XHRcdFx0aWYoYWN0aW9uLnJlc3VsdF90eXBlPT0nMCcpe1xuXHRcdFx0XHRcdFx0XHRcdFx0dW5pLnNob3dUb2FzdCh7dGl0bGU6YWN0aW9uLnJlc3VsdCxpY29uOlwic3VjY2Vzc1wiLGR1cmF0aW9uOjMwMDB9KTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0Ly8gXCJ7XCJyZXRcIjowLCBcInJlc3VsdF90eXBlXCI6MCwgXCJyZXN1bHRcIjpcIuWIm+W7uuaIkOWKnzEyMzEyMzEyM1wiLFwiaW5mb1wiOlwiXCJ9XCJcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fWVsc2Vcblx0XHRcdFx0XHRcdFx0dW5pLnNob3dUb2FzdCh7dGl0bGU6XCLliJvlu7rmiJDlip/vvIFcIixpY29uOlwic3VjY2Vzc1wiLGR1cmF0aW9uOjMwMDB9KTtcblx0XHRcdFx0XHRcdC8v5Yi35pawXG5cdFx0XHRcdFx0XHR1bmkucmVkaXJlY3RUbyh7XG5cdFx0XHRcdFx0XHRcdHVybDonLi4vbW9kYWwvMzAzNz9wYXJhbT0nK0pTT04uc3RyaW5naWZ5KHRoaXMuJGRhdGEucGFyYW0pK1wiJnRpdGxlbmFtZT1cIit0aGlzLiRkYXRhLnRpdGxlXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdC8vIHRoaXMuY2xhc3NfYXR0cl9pbml0KCk7XG5cdFx0XHRcdFx0fWVsc2V7XG5cdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivr1wiLGNvbnRlbnQ6c3VjY2Vzcy5lcnJfbXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSkuY2F0Y2goZXg9Pntcblx0XHRcdFx0XHRjb25zb2xlLmxvZyhleCk7XG5cdFx0XHRcdFx0dW5pLmhpZGVMb2FkaW5nKCk7XG5cdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLmj5DnpLpcIixjb250ZW50OmV4LmVyck1zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9LFxuXHRcdFx0aW5pX0RhdGFPYmpSdW5DdXN0b21FdmVudChpbmZvKXtcblx0XHRcdFx0dmFyIHBhcmFtID0ge1xuXHRcdFx0XHQgICAgRWRpdFN0eWxlOiB0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuVmlld19TdHlsZS5OYW1lLFxuXHRcdFx0XHQgICAgVmlld1N0eWxlOiB0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuVmlld19TdHlsZS5OYW1lLFxuXHRcdFx0XHQgICAgTm90VHJpZ2dlclN5c0V2ZW50OiAwLFxuXHRcdFx0XHQgICAgZW52aXJvbWVudDoge1xuXHRcdFx0XHQgICAgICAgICdmdW5jdGlvbic6ICczMDAwJywgLy8g5Yqf6IO954K557yW5Y+3XG5cdFx0XHRcdCAgICAgICAgY2xzX2lkOiB0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuSUQsICAgICAvLyDlip/og73ngrnkuLvmlbDmja7nsbvmoIfor4Zcblx0XHRcdFx0ICAgICAgICAnYnV0dG9uJzogJ3RvcCcsICAgLy8gdG9wL2JvdHRvbVxuXHRcdFx0XHQgICAgICAgIGJ1dHRvbl9uYW1lOiAn5paw5aKeJyxcblx0XHRcdFx0ICAgICAgICBtYXN0ZXI6IHtcblx0XHRcdFx0ICAgICAgICAgICAgY2xzX2lkOiB0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuSUQsIC8vIGJ1dHRvbj1ib3R0b23ml7YgbWFzdGVy55qEY2xzX2lkXG5cdFx0XHRcdCAgICAgICAgICAgIC8vb2JqX2lkOiAnJyAgLy8gYnV0dG9uPWJvdHRvbeaXtiBtYXN0ZXLnmoRvYmpfaWRcblx0XHRcdFx0ICAgICAgICB9XG5cdFx0XHRcdCAgICB9XG5cdFx0XHRcdH1cblx0XHRcdFx0dmFyIGlucHV0cGFyYW1ldGVyID0gJyc7XG5cdFx0XHRcdHZhciBnbG9iYWxfYXR0ciA9ICcnO1xuXHRcdFx0XHRcblx0XHRcdFx0Ly8gdmFyIGRhdGFJbmZvID0ge1xuICAgIC8vICAgICAgICAgICAgICAgICBlZHR5cGU6IGluZm8uZWR0eXBlLCBldmVudGlkOiBpbmZvLmV2ZW50aWQsIHByb2plY3RpZDogaW5mby5wcm9qZWN0aWQsXG4gICAgLy8gICAgICAgICAgICAgICAgIHJjbHNpZDogaW5mby5yY2xzaWQsIHJvYmppZDogaW5mby5yb2JqaWQsIHVzZXJsb2dpbjogaW5mby51c2VybG9naW4sIGNsc2lkOiBpbmZvLmNsc2lkLCBvYmppZDogaW5mby5vYmppZCxcbiAgICAvLyAgICAgICAgICAgICAgICAgYXR0cjogSlNPTi5zdHJpbmdpZnkoaW5mby5hdHRyKSwgZXh0aW5mbzogSlNPTi5zdHJpbmdpZnkocGFyYW0pLCBpbnB1dHBhcmFtZXRlcjogaW5wdXRwYXJhbWV0ZXIsIGdsb2JhbF9hdHRyOiBnbG9iYWxfYXR0clxuICAgIC8vICAgICAgICAgICAgIH1cblx0XHRcdFx0cGFyYW0uZW52aXJvbWVudCA9IEJhc2U2NC5lbmNvZGUoSlNPTi5zdHJpbmdpZnkocGFyYW0uZW52aXJvbWVudCkpOy8v5bCG5a2X56ym5Liy6L2s5o2i5Li6YmFzZTY057yW56CBXG5cdFx0XHRcdHZhciBvYmpfYXR0cj17fTtcblx0XHRcdFx0aW5mby5hdHRyLmZvckVhY2goaXRlbT0+e1xuXHRcdFx0XHRcdG9ial9hdHRyW2l0ZW0uYXR0cl0gPSBpdGVtLnZhbDtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGlmKCFpbmZvLmV2ZW50aWQuaW5jbHVkZXMoJ3snKSkgaW5mby5ldmVudGlkID0gJ3snK2luZm8uZXZlbnRpZCsnfSc7XG5cdFx0XHRcdHZhciBkYXRhSW5mbz17XG5cdFx0XHRcdCAgZWRfdHlwZTogaW5mby5lZHR5cGUsXG5cdFx0XHRcdCAgc3RhcnRfdHJhbnNhY3Rpb246ICcnLFxuXHRcdFx0XHQgIGNsYXNzX2lkOiBpbmZvLmNsc2lkLFxuXHRcdFx0XHQgIGNsYXNzX25hbWU6ICcnLFxuXHRcdFx0XHQgIGV2ZW50X2lkOiBpbmZvLmV2ZW50aWQsXG5cdFx0XHRcdCAgZXZlbnRfbmFtZTogJycsXG5cdFx0XHRcdCAgZGF0YV9vYmpfaWQ6IGluZm8ub2JqaWQsXG5cdFx0XHRcdCAgb2JqX2F0dHI6IG9ial9hdHRyLFxuXHRcdFx0XHQgIHByal9pZDogaW5mby5wcm9qZWN0aWQsXG5cdFx0XHRcdCAgcmVmX2Nsc19pZDogaW5mby5yY2xzaWQsXG5cdFx0XHRcdCAgcmVsX29ial9pZDogaW5mby5yb2JqaWQsXG5cdFx0XHRcdCAgdXNlcl9sb2dpbjogaW5mby51c2VybG9naW4sXG5cdFx0XHRcdCAgZGF0YV9qc29uOiAnJyxcblx0XHRcdFx0ICBjb21wb3NlX2luZm86ICcnLFxuXHRcdFx0XHQgIGV4dF9pbmZvOiBwYXJhbS5lbnZpcm9tZW50LFxuXHRcdFx0XHQgIGdsb2JhbF9hdHRyOiBnbG9iYWxfYXR0cixcblx0XHRcdFx0ICBpbnB1dF9wYXJhbTogaW5wdXRwYXJhbWV0ZXIsXG5cdFx0XHRcdH07XG5cdFx0XHRcdGNvbnNvbGUubG9nKGRhdGFJbmZvKTtcblx0XHRcdFx0Ly8gcmV0dXJuO1xuXHRcdFx0XHR0aGlzLiRzdG9yZS5kaXNwYXRjaCgncnVuQ3VzdG9tRXZlbnQnLGRhdGFJbmZvKS50aGVuKHN1Y2Nlc3M9Pntcblx0XHRcdFx0XHRjb25zb2xlLmxvZyhzdWNjZXNzKTtcblx0XHRcdFx0XHRpZiAoc3VjY2Vzcy5lcnJfY29kZSA9PSAwKSB7XG5cdFx0XHRcdFx0ICB2YXIgZGF0YSA9IHN1Y2Nlc3MucmVzdWx0O1xuXHRcdFx0XHRcdCAgaWYoZGF0YS5hY3Rpb24pe1xuXHRcdFx0XHRcdFx0dmFyIGFjdGlvbmxpc3QgPSBkYXRhLmFjdGlvbjtcblx0XHRcdFx0XHRcdGlmIChhY3Rpb25saXN0KSB7XG5cdFx0XHRcdFx0XHQgICAgZm9yICh2YXIgaiA9IDA7IGogPCBhY3Rpb25saXN0Lmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0XHQgICAgICAgIHZhciBhY3Rpb24gPSBhY3Rpb25saXN0W2pdXG5cdFx0XHRcdFx0XHQgICAgICAgIHZhciBhY3Rpb25fdHlwZSA9IGFjdGlvbi5hY3Rpb25fdHlwZTtcblx0XHRcdFx0XHRcdCAgICAgICAgdmFyIHZhbHVlID0gYWN0aW9uLnZhbHVlO1xuXHRcdFx0XHRcdFx0ICAgICAgICBpZiAoYWN0aW9uX3R5cGUgPT0gJ3NldF9kbGdfYXR0cicpIHtcblx0XHRcdFx0XHRcdCAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgICAgIHZhciB2YWwgPSB2YWx1ZTtcblx0XHRcdFx0XHRcdCAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09ICdzdHJpbmcnKSB7XG5cdFx0XHRcdFx0XHQgICAgICAgICAgICAgICAgICAgIHZhbCA9IEpTT04ucGFyc2UodmFsdWUpO1xuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgICAgIH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc29sZS5sb2codmFsKTtcblx0XHRcdFx0XHRcdCAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGEgPSAwOyBhIDwgdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0Lmxlbmd0aDsgYSsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBsID0gMDsgbCA8IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFthXS5BdHRyLmxlbmd0aDsgbCsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBjYSA9IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFthXS5BdHRyW2xdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAodmFsW2ldLmF0dHIgID09IGNhLk5hbWUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihjYS5UeXBlPT0n5a2X5YW4JyB8fCBjYS5UeXBlPT0n5a2X5YW4LeWtl+espuS4sicgfHwgY2EuVHlwZT09J+Wtl+WFuC3mlbTmlbAnKXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBkaWN0SXRlbUxpc3Q9W107XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IodmFyIGQgaW4gdmFsW2ldLmNob2ljZV9saXN0KXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIHZhbCA9dmFsW2ldLmNob2ljZV9saXN0W2RdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkaWN0SXRlbUxpc3QucHVzaCh7XCJDTl9TX05BTUVcIjp2YWwsXCJOYW1lXCI6dmFsLFwibGFiZWxcIjp2YWwsXCJ2YWx1ZVwiOnZhbH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhLmRpY3RpdGVtID0gZGljdEl0ZW1MaXN0O1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gYXR0cltqXS5kaWN0aXRlbSA9IHZhbFtpXS5jaG9pY2VfbGlzdDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9ZWxzZXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGNhLnZhbHVlID0gdmFsW2ldLnZhbHVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgdmFyIGxlbmd0aCA9IDA7XG5cdFx0XHRcdFx0XHQgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUuZmlsdGVyKGZ1bmN0aW9uIChzKSB7XG5cdFx0XHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsW2ldLmF0dHIgPT0gcy5hdHRyXG5cdFx0XHRcdFx0XHQgICAgICAgICAgICAgICAgICAgIH0pLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID0gMTtcblx0XHRcdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLnB1c2godmFsW2ldKTtcblx0XHRcdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgfVxuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICBpZiAobGVuZ3RoID09IDApIHtcblx0XHRcdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy4kZGF0YS5yZWZkYXRhc3RvcmVbal0uYXR0ciA9PSB2YWxbaV0uYXR0cikge1xuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZVtqXS52YWx1ZSA9IHZhbFtpXS52YWx1ZTtcblx0XHRcdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cdFx0XHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICB9XG5cdFx0XHRcdFx0XHQgICAgICAgICAgICAgICAgICAgIH1cblx0XHRcdFx0XHRcdCAgICAgICAgICAgICAgICB9XG5cdFx0XHRcdFx0XHQgICAgICAgICAgICB9XG5cdFx0XHRcdFx0XHQgICAgICAgIH1cblx0XHRcdFx0XHRcdCAgICAgICAgaWYgKGFjdGlvbl90eXBlID09ICdvcGVuX3NlbGVjdF91c2VyZGxnJykge1xuXHRcdFx0XHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor68yLjJcIixjb250ZW50Olwib3Blbl9zZWxlY3RfdXNlcmRsZ+i/meS4qmFjdGlvbl90eXBl6L+Y5pyq5aSE55CG77yBXCIsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdFx0XHQgICAgICAgIH1cblx0XHRcdFx0XHRcdCAgICB9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0ICB9XG5cdFx0XHRcdFx0fWVsc2V7XG5cdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzJcIixjb250ZW50OnN1Y2Nlc3MuZXJyX21zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pLmNhdGNoKGV4PT57XG5cdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coZXgpO1xuXHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vMi4xXCIsY29udGVudDpleC5lcnJNc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSxcblx0XHQgICAgRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGluZm8sZGF0YV9hdHRyKXtcblx0XHRcdFx0dmFyICR0aGlzID0gdGhpcztcblx0XHQgICAgXHR2YXIgZW52aXJvbWVudCA9IHtcblx0XHQgICAgXHQgICAgJ2Z1bmN0aW9uJzogJzMwMDAnLCAvLyDlip/og73ngrnnvJblj7dcblx0XHQgICAgXHQgICAgY2xzX2lkOiB0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuSUQsICAgICAvLyDlip/og73ngrnkuLvmlbDmja7nsbvmoIfor4Zcblx0XHQgICAgXHQgICAgJ2J1dHRvbic6ICd0b3AnLCAgIC8vIHRvcC9ib3R0b21cblx0XHQgICAgXHQgICAgYnV0dG9uX25hbWU6ICfmlrDlop4nLFxuXHRcdCAgICBcdCAgICBtYXN0ZXI6IHtcblx0XHQgICAgXHQgICAgICAgIGNsc19pZDogdGhpcy4kZGF0YS5wYXJhbS5NYXN0ZXJfQ2xzLklELCAvLyBidXR0b249Ym90dG9t5pe2IG1hc3RlcueahGNsc19pZFxuXHRcdCAgICBcdCAgICAgICAgLy9vYmpfaWQ6ICcnICAvLyBidXR0b249Ym90dG9t5pe2IG1hc3RlcueahG9ial9pZFxuXHRcdCAgICBcdCAgICB9XG5cdFx0ICAgIFx0fTtcblx0XHRcdFx0ZW52aXJvbWVudC5lZGl0X2RsZyA9IHtcblx0XHRcdFx0ICAgIHR5cGU6ICdzbWFsbCcsLy/lsI/nqpflj6Ncblx0XHRcdFx0ICAgIGNsYXNzX2lkOiB0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuSUQsLy/lvZPliY3mlbDmja7nsbtpZFxuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChkYXRhX2F0dHIpIHtcblx0XHRcdFx0ICAgIGVudmlyb21lbnQuZWRpdF9kbGcuZm9ybV9jb250cm9sID0gey8v5omA5bGe55qE6KGo5Y2V5o6n5Lu2XG5cdFx0XHRcdCAgICAgICAgbmFtZTogZGF0YV9hdHRyLk5hbWUsLy/lrZfmrrXlsZ7mgKdcblx0XHRcdFx0ICAgICAgICB0ZXh0OiBkYXRhX2F0dHIuRGlzcE5hbWUsLy/mmL7npLrmlofmnKxcblx0XHRcdFx0ICAgICAgICBncm91cF9uYW1lOiBkYXRhX2F0dHIuR3JvdXBOYW1lLC8v5bGe5oCn57uEXG5cdFx0XHRcdCAgICAgICAgdHlwZTogZGF0YV9hdHRyLlR5cGUsLy/lrZfmrrXnsbvlnotcblx0XHRcdFx0ICAgICAgICByZWFkb25seTogZGF0YV9hdHRyLlJlYWRPbmx5LC8v5piv5ZCm5Y+q6K+7XG5cdFx0XHRcdCAgICAgICAgYnV0dG9uX2ltZzogZGF0YV9hdHRyLmJ1dHRvbl9pbWcsLy/lvJXnlKjmjInpkq7nmoTlm77moIdcblx0XHRcdFx0ICAgICAgICBidXR0b25fdG9vbHRpcDogZGF0YV9hdHRyLmJ1dHRvbl90b29sdGlwLy/lvJXnlKjmjInpkq7nmoR0b29sdGlwXG5cdFx0XHRcdCAgICB9XG5cdFx0XHRcdH1cblx0XHQgICAgXHQvLyB2YXIgZGF0YUluZm8gPSB7XG5cdFx0ICAgICAvLyAgICAgICAgZWR0eXBlOiBpbmZvLmVkdHlwZSwgZXZlbnRpZDogaW5mby5ldmVudGlkLCBwcm9qZWN0aWQ6IGluZm8ucHJvamVjdGlkLnJlcGxhY2UoJ3snLCcnKS5yZXBsYWNlKCd9JywnJyksXG5cdFx0ICAgICAvLyAgICAgICAgcmNsc2lkOiBpbmZvLnJjbHNpZCwgcm9iamlkOiBpbmZvLnJvYmppZCwgdXNlcmxvZ2luOiBpbmZvLnVzZXJsb2dpbiwgY2xzaWQ6IGluZm8uY2xzaWQsIG9iamlkOiBpbmZvLm9iamlkLFxuXHRcdCAgICAgLy8gICAgICAgIGF0dHI6IEpTT04uc3RyaW5naWZ5KGluZm8uYXR0ciksIGV4dGluZm86IEpTT04uc3RyaW5naWZ5KGVudmlyb21lbnQpLCBpbnB1dHBhcmFtZXRlcjogJycsIGdsb2JhbF9hdHRyOiBKU09OLnN0cmluZ2lmeSh0aGlzLiRkYXRhLmdsb2JhbF9hdHRyKVxuXHRcdCAgICAgLy8gICAgfVxuXHRcdCAgICBcdGVudmlyb21lbnQgPSBCYXNlNjQuZW5jb2RlKEpTT04uc3RyaW5naWZ5KGVudmlyb21lbnQpKTsvL+WwhuWtl+espuS4sui9rOaNouS4umJhc2U2NOe8lueggVxuXHRcdCAgICBcdHZhciBnbG9iYWxfYXR0ciA9IEJhc2U2NC5lbmNvZGUoSlNPTi5zdHJpbmdpZnkodGhpcy4kZGF0YS5nbG9iYWxfYXR0cikpOy8v5bCG5a2X56ym5Liy6L2s5o2i5Li6YmFzZTY057yW56CBXG5cdFx0ICAgIFx0aWYoaW5mby5kYXRhSnNvbilcblx0XHQgICAgXHRcdGluZm8uZGF0YUpzb24gPSBCYXNlNjQuZW5jb2RlKEpTT04uc3RyaW5naWZ5KGluZm8uZGF0YUpzb24pKTsvL+WwhuWtl+espuS4sui9rOaNouS4umJhc2U2NOe8lueggVxuXHRcdCAgICBcdHZhciBvYmpfYXR0cj17fTtcblx0XHQgICAgXHRpbmZvLmF0dHIuZm9yRWFjaChpdGVtPT57XG5cdFx0ICAgIFx0XHRvYmpfYXR0cltpdGVtLmF0dHJdID0gaXRlbS52YWw7XG5cdFx0ICAgIFx0fSk7XG5cdFx0ICAgIFx0aWYoIWluZm8uZXZlbnRpZC5pbmNsdWRlcygneycpKSBpbmZvLmV2ZW50aWQgPSAneycraW5mby5ldmVudGlkKyd9Jztcblx0XHQgICAgXHR2YXIgZGF0YUluZm89e1xuXHRcdCAgICBcdCAgZWRfdHlwZTogaW5mby5lZHR5cGUsXG5cdFx0ICAgIFx0ICBzdGFydF90cmFuc2FjdGlvbjogJycsXG5cdFx0ICAgIFx0ICBjbGFzc19pZDogaW5mby5jbHNpZCxcblx0XHQgICAgXHQgIGNsYXNzX25hbWU6ICcnLFxuXHRcdCAgICBcdCAgZXZlbnRfaWQ6IGluZm8uZXZlbnRpZCxcblx0XHQgICAgXHQgIGV2ZW50X25hbWU6ICcnLFxuXHRcdCAgICBcdCAgZGF0YV9vYmpfaWQ6IGluZm8ub2JqaWQsXG5cdFx0ICAgIFx0ICBvYmpfYXR0cjogb2JqX2F0dHIsXG5cdFx0ICAgIFx0ICBwcmpfaWQ6IGluZm8ucHJvamVjdGlkLFxuXHRcdCAgICBcdCAgcmVmX2Nsc19pZDogaW5mby5yY2xzaWQsXG5cdFx0ICAgIFx0ICByZWxfb2JqX2lkOiBpbmZvLnJvYmppZCxcblx0XHQgICAgXHQgIHVzZXJfbG9naW46IGluZm8udXNlcmxvZ2luLFxuXHRcdCAgICBcdCAgZGF0YV9qc29uOiBpbmZvLmRhdGFKc29uLFxuXHRcdCAgICBcdCAgY29tcG9zZV9pbmZvOiAnJyxcblx0XHQgICAgXHQgIGV4dF9pbmZvOiBlbnZpcm9tZW50LFxuXHRcdCAgICBcdCAgZ2xvYmFsX2F0dHI6IGdsb2JhbF9hdHRyLFxuXHRcdCAgICBcdCAgaW5wdXRfcGFyYW06ICcnLFxuXHRcdCAgICBcdH07XG5cdFx0ICAgIFx0Y29uc29sZS5sb2coZGF0YUluZm8pO1xuXHRcdCAgICBcdC8vIHJldHVybjtcblx0XHQgICAgXHR0aGlzLiRzdG9yZS5kaXNwYXRjaCgncnVuQ3VzdG9tRXZlbnQnLGRhdGFJbmZvKS50aGVuKHN1Y2Nlc3M9Pntcblx0XHQgICAgXHRcdGNvbnNvbGUubG9nKHN1Y2Nlc3MpO1xuXHRcdCAgICBcdFx0aWYgKHN1Y2Nlc3MuZXJyX2NvZGUgPT0gMCkge1xuXHRcdCAgICBcdFx0XHR2YXIgZGF0YSA9IHN1Y2Nlc3MucmVzdWx0O1xuXHRcdCAgICBcdFx0XHR2YXIgYWN0aW9ubGlzdCA9IGRhdGEuYWN0aW9uO1xuXHRcdFx0XHRcdFx0XHRcdFx0XG5cdFx0ICAgIFx0XHRcdGlmIChhY3Rpb25saXN0KSB7XG5cdFx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKGFjdGlvbmxpc3QpO1xuXHRcdCAgICBcdFx0XHQgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhY3Rpb25saXN0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgdmFyIGFjdGlvbiA9IGFjdGlvbmxpc3RbaV07XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgaWYgKGFjdGlvbi5hY3Rpb25fdHlwZSA9PSAnc2V0X2RsZ19hdHRyJykge1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICB2YXIgcmVzdWx0ID0gYWN0aW9uLnZhbHVlO1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChyZXN1bHRbaV0uY2hvaWNlX2xpc3QpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBjID0gMDsgYyA8ICR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3QubGVuZ3RoOyBjKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBhdHRyID0gJHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtjXS5BdHRyO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGF0dHJbal0uTmFtZT09cmVzdWx0W2ldLmF0dHIpe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGF0dHJbal0uVHlwZT09J+Wtl+WFuCcgfHwgYXR0cltqXS5UeXBlPT0n5a2X5YW4LeWtl+espuS4sicgfHwgYXR0cltqXS5UeXBlPT0n5a2X5YW4LeaVtOaVsCcpe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGRpY3RJdGVtTGlzdD1bXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvcih2YXIgZCBpbiByZXN1bHRbaV0uY2hvaWNlX2xpc3Qpe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgdmFsID1yZXN1bHRbaV0uY2hvaWNlX2xpc3RbZF07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRpY3RJdGVtTGlzdC5wdXNoKHtcIkNOX1NfTkFNRVwiOnZhbCxcIk5hbWVcIjp2YWwsXCJsYWJlbFwiOnZhbCxcInZhbHVlXCI6dmFsfSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhdHRyW2pdLmRpY3RpdGVtID0gZGljdEl0ZW1MaXN0O1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gYXR0cltqXS5kaWN0aXRlbSA9IHJlc3VsdFtpXS5jaG9pY2VfbGlzdDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICB9XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICBmb3IgKHZhciBjID0gMDsgYyA8ICR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3QubGVuZ3RoOyBjKyspIHtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgIFx0dmFyIGF0dHIgPSAkdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2NdLkF0dHI7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICBcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc29sZS5sb2coYXR0cltqXS5OYW1lKyc9PScrcmVzdWx0W2ldLmF0dHIpO1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgXHRcdGlmKGF0dHJbal0uTmFtZT09cmVzdWx0W2ldLmF0dHIpe1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgXHRcdFx0YXR0cltqXS5WYWx1ZSA9IHJlc3VsdFtpXS52YWx1ZTtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgIFx0XHR9XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICBcdH1cblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgIH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGxlbmd0aCA9IDA7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICBpZiAoISR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5maWx0ZXIoZnVuY3Rpb24gKHMpIHtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0W2ldLmF0dHIgPT0gcy5hdHRyXG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICB9KS5sZW5ndGgpIHtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgICAgICBsZW5ndGggPSAxO1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgICAgICR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5wdXNoKHJlc3VsdFtpXSk7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICB9XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICBpZiAobGVuZ3RoID09IDApIHtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8ICR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5sZW5ndGg7IGorKykge1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlW2pdLmF0dHIgPT0gcmVzdWx0W2ldLmF0dHIpIHtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZVtqXS52YWx1ZSA9IHJlc3VsdFtpXS52YWx1ZTtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgfVxuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgICAgIH1cblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgIH1cblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgfVxuXHRcdCAgICBcdFx0XHQgICAgICAgIH0gZWxzZSBpZiAoZGF0YS5hY3Rpb25baV0uYWN0aW9uX3R5cGUgPT0gJ3NldF9nbG9iYWxfYXR0cicpIHtcblx0XHRcdFx0XHRcdCAgICAgICAgICAgICR0aGlzLiRkYXRhLmdsb2JhbF9hdHRyID0gZGF0YS5hY3Rpb25baV0udmFsdWUgfHwgW107XG5cdFx0XHRcdFx0XHQgICAgICAgIH1cblx0XHQgICAgXHRcdFx0ICAgIH1cblx0XHQgICAgXHRcdFx0fVxuXHRcdCAgICBcdFx0XHRcblx0XHQgICAgXHRcdFx0aWYgKGRhdGEucmVzdWx0KSB7XG5cdFx0ICAgIFx0XHRcdCAgICB2YXIgcmVzdWx0ID0gZGF0YS5yZXN1bHQ7XG5cdFx0ICAgIFx0XHRcdCAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdC5sZW5ndGg7IGkrKykge1xuXHRcdCAgICBcdFx0XHQgICAgICAgIGZvciAodmFyIGMgPSAwOyBjIDwgJHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdC5sZW5ndGg7IGMrKykge1xuXHRcdCAgICBcdFx0XHQgICAgICAgIFx0dmFyIGF0dHIgPSAkdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2NdLkF0dHI7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgXHRmb3IgKHZhciBqID0gMDsgaiA8IGF0dHIubGVuZ3RoOyBqKyspIHtcblx0XHQgICAgXHRcdFx0ICAgICAgICBcdFx0aWYoYXR0cltqXS5OYW1lPT1yZXN1bHRbaV0uYXR0cil7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgXHRcdFx0YXR0cltqXS5WYWx1ZSA9IHJlc3VsdFtpXS52YWx1ZTtcblx0XHQgICAgXHRcdFx0ICAgICAgICBcdFx0fVxuXHRcdCAgICBcdFx0XHQgICAgICAgIFx0fVxuXHRcdCAgICBcdFx0XHQgICAgICAgIH1cblx0XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0XHR2YXIgbGVuZ3RoID0gMDtcblx0XHQgICAgXHRcdFx0ICAgICAgICBpZiAoISR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5maWx0ZXIoZnVuY3Rpb24gKHMpIHtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFtpXS5hdHRyID09IHMuYXR0clxuXHRcdCAgICBcdFx0XHQgICAgICAgIH0pLmxlbmd0aCkge1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICBsZW5ndGggPSAxO1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUucHVzaChyZXN1bHRbaV0pO1xuXHRcdCAgICBcdFx0XHQgICAgICAgIH1cblx0XHQgICAgXHRcdFx0ICAgICAgICBpZiAobGVuZ3RoID09IDApIHtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCAkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUubGVuZ3RoOyBqKyspIHtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgIGlmICgkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmVbal0uYXR0ciA9PSByZXN1bHRbaV0uYXR0cikge1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgICAgICR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZVtqXS52YWx1ZSA9IHJlc3VsdFtpXS52YWx1ZTtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgIH1cblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgfVxuXHRcdCAgICBcdFx0XHQgICAgICAgIH1cblx0XHQgICAgXHRcdFx0ICAgIH1cblx0XHQgICAgXHRcdFx0fVxuXHRcdCAgICBcdFx0fWVsc2V7XG5cdFx0ICAgIFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vM1wiLGNvbnRlbnQ6c3VjY2Vzcy5lcnJfbXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdCAgICBcdFx0fVxuXHRcdCAgICBcdH0pLmNhdGNoKGV4PT57XG5cdFx0ICAgIFx0XHQvLyBjb25zb2xlLmxvZyhleCk7XG5cdFx0ICAgIFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzMuMVwiLGNvbnRlbnQ6ZXguZXJyTXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdCAgICBcdH0pO1xuXHRcdCAgICB9LFxuXHRcdFx0T0tEYXRhT2JqUnVuQ3VzdG9tRXZlbnQoKXtcblx0XHQgICAgXHR2YXIgZW52aXJvbWVudCA9IHtcblx0XHRcdFx0ICAgICdmdW5jdGlvbic6ICczMDAwJywgLy8g5Yqf6IO954K557yW5Y+3XG5cdFx0XHRcdCAgICBjbHNfaWQ6IHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5JRCwgICAgIC8vIOWKn+iDveeCueS4u+aVsOaNruexu+agh+ivhlxuXHRcdFx0XHQgICAgJ2J1dHRvbic6ICd0b3AnLCAgIC8vIHRvcC9ib3R0b21cblx0XHRcdFx0ICAgIGJ1dHRvbl9uYW1lOiAn5paw5aKeJyxcblx0XHRcdFx0ICAgIG1hc3Rlcjoge1xuXHRcdFx0XHQgICAgICAgIGNsc19pZDogdGhpcy4kZGF0YS5wYXJhbS5NYXN0ZXJfQ2xzLklELCAvLyBidXR0b249Ym90dG9t5pe2IG1hc3RlcueahGNsc19pZFxuXHRcdFx0XHQgICAgICAgIFxuXHRcdFx0XHQgICAgfVxuXHRcdFx0XHR9O1xuXHRcdCAgICBcdHZhciBldmVudGlkID0gdGhpcy4kZGF0YS5lZGl0X29rX2V2ZW50LnNjcmlwX2lkO1xuXHRcdFx0XHR2YXIgcmVxPVtdO1xuXHRcdFx0XHR2YXIgYXR0cmxpc3QgPSB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3Q7XG5cdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmxpc3QubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHR2YXIgYXR0ciA9IGF0dHJsaXN0W2ldLkF0dHI7XG5cdFx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0XHR2YXIgYXIgPSBhdHRyW2pdO1xuXHRcdFx0XHRcdFx0aWYoYXIuVmFsdWU9PSfor7fpgInmi6knIHx8IGFyLlZhbHVlPT0n4oCU4oCU6K+36YCJ5oup4oCU4oCUJykgYXIuVmFsdWU9Jyc7XG5cdFx0XHRcdFx0XHRpZihhci5UeXBlPT0n5byV55So5a+56LGhKOWkmuS4qiknKVxuXHRcdFx0XHRcdFx0XHRpZihhci5WYWx1ZT09J+ivtycpIGFyLlZhbHVlPScnO1xuXHRcdFx0XHQgICAgICAgIGlmKGFyLlR5cGU9PSflvJXnlKjkurrlkZgnIHx8IGFyLlR5cGU9PSflvJXnlKjpobnnm64nKVxuXHRcdFx0XHQgICAgICAgIFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsSUQgP2FyLlZhbElEIDonJyB9KTtcblx0XHRcdFx0ICAgICAgICBlbHNlIGlmKGFyLlR5cGU9PSfluIPlsJTlgLwnKVxuXHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWx1ZT8nMSc6JzAnfSk7XG5cdFx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsdWU6IGFyLlZhbHVlIH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAodGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUubGVuZ3RoID4gMCkge1xuXHRcdCAgICBcdCAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLmxlbmd0aDsgaSsrKSB7XG5cdFx0ICAgIFx0ICAgICAgICBpZiAoIXJlcS5maWx0ZXIoZnVuY3Rpb24gKHMpIHtcblx0XHQgICAgXHQgICAgICAgICAgICByZXR1cm4gdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmVbaV0uYXR0ciA9PSBzLm5hbWVcblx0XHQgICAgXHQgICAgICAgIH0pLmxlbmd0aCkge1xuXHRcdCAgICBcdCAgICAgICAgICAgIGxlbmd0aCA9IDE7XG5cdFx0ICAgIFx0ICAgICAgICAgICAgcmVxLnB1c2goeyAnYXR0cic6IHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlW2ldLmF0dHIsICd2YWx1ZSc6IHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlW2ldLnZhbHVlIH0pO1xuXHRcdCAgICBcdCAgICAgICAgfVxuXHRcdCAgICBcdCAgICB9XG5cdFx0ICAgIFx0fVxuXHRcdCAgICBcdHZhciBpbmZvID0ge1xuXHRcdCAgICBcdCAgICBldmVudGlkOiBldmVudGlkLFxuXHRcdCAgICBcdCAgICBlZHR5cGU6IFwiMFwiLFxuXHRcdCAgICBcdCAgICBwcm9qZWN0aWQ6ICcnLFxuXHRcdCAgICBcdCAgICByY2xzaWQ6ICcnLFxuXHRcdCAgICBcdCAgICByb2JqaWQ6ICcnLFxuXHRcdCAgICBcdCAgICB1c2VybG9naW46ICcnLFxuXHRcdCAgICBcdCAgICBjbHNpZDogdGhpcy4kZGF0YS5wYXJhbS5NYXN0ZXJfQ2xzLklELFxuXHRcdCAgICBcdCAgICBvYmppZDogXCJcIixcblx0XHQgICAgXHQgICAgYXR0cjogcmVxLFxuXHRcdCAgICBcdH1cblx0XHQgICAvLyAgXHR2YXIgZGF0YUluZm8gPSB7XG5cdFx0ICAgLy8gICAgICAgICAgZWR0eXBlOiBpbmZvLmVkdHlwZSwgZXZlbnRpZDogaW5mby5ldmVudGlkLCBwcm9qZWN0aWQ6IGluZm8ucHJvamVjdGlkLHJjbHNpZDogaW5mby5yY2xzaWQsIFxuXHRcdFx0XHRcdC8vIHJvYmppZDogaW5mby5yb2JqaWQsIHVzZXJsb2dpbjogaW5mby51c2VybG9naW4sIGNsc2lkOiBpbmZvLmNsc2lkLCBvYmppZDogaW5mby5vYmppZCxcblx0XHRcdFx0XHQvLyBhdHRyOiBKU09OLnN0cmluZ2lmeShpbmZvLmF0dHIpLCBleHRpbmZvOiBKU09OLnN0cmluZ2lmeShlbnZpcm9tZW50KSwgZ2xvYmFsX2F0dHI6IEpTT04uc3RyaW5naWZ5KHRoaXMuJGRhdGEuZ2xvYmFsX2F0dHIpXG5cdFx0ICAgLy8gICAgICB9XG5cdFx0ICAgIFx0ZW52aXJvbWVudCA9IEJhc2U2NC5lbmNvZGUoSlNPTi5zdHJpbmdpZnkoZW52aXJvbWVudCkpOy8v5bCG5a2X56ym5Liy6L2s5o2i5Li6YmFzZTY057yW56CBXG5cdFx0ICAgIFx0dmFyIGdsb2JhbF9hdHRyID0gQmFzZTY0LmVuY29kZShKU09OLnN0cmluZ2lmeSh0aGlzLiRkYXRhLmdsb2JhbF9hdHRyKSk7Ly/lsIblrZfnrKbkuLLovazmjaLkuLpiYXNlNjTnvJbnoIFcblx0XHQgICAgXHR2YXIgb2JqX2F0dHI9e307XG5cdFx0ICAgIFx0aW5mby5hdHRyLmZvckVhY2goaXRlbT0+e1xuXHRcdCAgICBcdFx0b2JqX2F0dHJbaXRlbS5hdHRyXSA9IGl0ZW0udmFsO1xuXHRcdCAgICBcdH0pO1xuXHRcdCAgICBcdGlmKCFldmVudGlkLmluY2x1ZGVzKCd7JykpIGV2ZW50aWQ9ICd7JysgZXZlbnRpZCArJ30nO1xuXHRcdCAgICBcdHZhciBkYXRhSW5mbz17XG5cdFx0ICAgIFx0ICBlZF90eXBlOiBpbmZvLmVkdHlwZSxcblx0XHQgICAgXHQgIHN0YXJ0X3RyYW5zYWN0aW9uOiAnJyxcblx0XHQgICAgXHQgIGNsYXNzX2lkOiBpbmZvLmNsc2lkLFxuXHRcdCAgICBcdCAgY2xhc3NfbmFtZTogJycsXG5cdFx0ICAgIFx0ICBldmVudF9pZDogZXZlbnRpZCxcblx0XHQgICAgXHQgIGV2ZW50X25hbWU6ICcnLFxuXHRcdCAgICBcdCAgZGF0YV9vYmpfaWQ6IGluZm8ub2JqaWQsXG5cdFx0ICAgIFx0ICBvYmpfYXR0cjogb2JqX2F0dHIsXG5cdFx0ICAgIFx0ICBwcmpfaWQ6IGluZm8ucHJvamVjdGlkLFxuXHRcdCAgICBcdCAgcmVmX2Nsc19pZDogaW5mby5yY2xzaWQsXG5cdFx0ICAgIFx0ICByZWxfb2JqX2lkOiBpbmZvLnJvYmppZCxcblx0XHQgICAgXHQgIHVzZXJfbG9naW46IGluZm8udXNlcmxvZ2luLFxuXHRcdCAgICBcdCAgZGF0YV9qc29uOiAnJyxcblx0XHQgICAgXHQgIGNvbXBvc2VfaW5mbzogJycsXG5cdFx0ICAgIFx0ICBleHRfaW5mbzogZW52aXJvbWVudCxcblx0XHQgICAgXHQgIGdsb2JhbF9hdHRyOiBnbG9iYWxfYXR0cixcblx0XHQgICAgXHQgIGlucHV0X3BhcmFtOiAnJyxcblx0XHQgICAgXHR9O1xuXHRcdCAgICBcdGNvbnNvbGUubG9nKGRhdGFJbmZvKTtcblx0XHQgICAgXHQvLyByZXR1cm47XG5cdFx0ICAgIFx0dGhpcy4kc3RvcmUuZGlzcGF0Y2goJ3J1bkN1c3RvbUV2ZW50JyxkYXRhSW5mbykudGhlbihzdWNjZXNzPT57XG5cdFx0ICAgIFx0XHRjb25zb2xlLmxvZyhzdWNjZXNzKTtcblx0XHQgICAgXHRcdGlmIChzdWNjZXNzLmVycl9jb2RlID09IDApIHtcblx0XHQgICAgXHRcdFx0dmFyIGRhdGEgPSBzdWNjZXNzLnJlc3VsdDtcdFxuXHRcdCAgICBcdFx0XHR2YXIgcmVzdWx0ID0gZGF0YS5yZXN1bHQ7XG5cdFx0ICAgIFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdWx0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0ICAgIFx0XHRcdCAgICAvLyBzZWxmLmNsYXNzX2F0dHJfZWxlLmZpbmQoJy5hdHRyX2ZpZWxkW2RhdGEtZmllbGQ9XCInICsgcmVzdWx0W2ldLmF0dHIgKyAnXCJdJykudmFsKHJlc3VsdFtpXS52YWx1ZSkuZGF0YSgndmFsJywgcmVzdWx0W2ldLnZhbHVlKTtcblx0XHQgICAgXHRcdFx0ICAgIHZhciBsZW5ndGggPSAwO1xuXHRcdCAgICBcdFx0XHQgICAgaWYgKCF0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5maWx0ZXIoZnVuY3Rpb24gKHMpIHtcblx0XHQgICAgXHRcdFx0ICAgICAgICByZXR1cm4gcmVzdWx0W2ldLmF0dHIgPT0gcy5hdHRyXG5cdFx0ICAgIFx0XHRcdCAgICB9KS5sZW5ndGgpIHtcblx0XHQgICAgXHRcdFx0ICAgICAgICBsZW5ndGggPSAxO1xuXHRcdCAgICBcdFx0XHQgICAgICAgIHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLnB1c2gocmVzdWx0W2ldKTtcblx0XHQgICAgXHRcdFx0ICAgIH1cblx0XHQgICAgXHRcdFx0ICAgIGlmIChsZW5ndGggPT0gMCkge1xuXHRcdCAgICBcdFx0XHQgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUubGVuZ3RoOyBqKyspIHtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgaWYgKHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlW2pdLmF0dHIgPT0gcmVzdWx0W2ldLmF0dHIpIHtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgIHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlW2pdLnZhbHVlID0gcmVzdWx0W2ldLnZhbHVlO1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICB9XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgfVxuXHRcdCAgICBcdFx0XHQgICAgfVxuXHRcdCAgICBcdFx0XHR9XG5cdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdHRoaXMuYWRkKCk7XG5cdFx0ICAgIFx0XHR9ZWxzZXtcblx0XHQgICAgXHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor680XCIsY29udGVudDpzdWNjZXNzLmVycl9tc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0ICAgIFx0XHR9XG5cdFx0ICAgIFx0fSkuY2F0Y2goZXg9Pntcblx0XHQgICAgXHRcdC8vIGNvbnNvbGUubG9nKGV4KTtcblx0XHQgICAgXHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vNC4xXCIsY29udGVudDpleC5lcnJNc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0ICAgIFx0fSk7XG5cdFx0ICAgIH0sXG5cdFx0ICAgIERhdGFPYmpSdW5DdXN0b21FdmVudF9SZXR1cm4oZXZlbnRpZCxkYXRhX2F0dHIsYnV0dG9uX2NhbGxiYWNrLGluZGV4LGlpbmRleCl7XG5cdFx0XHRcdHZhciBlbnZpcm9tZW50ID0ge1xuXHRcdFx0XHQgICAgJ2Z1bmN0aW9uJzogJzMwMDAnLCAvLyDlip/og73ngrnnvJblj7dcblx0XHRcdFx0ICAgIGNsc19pZDogdGhpcy4kZGF0YS5wYXJhbS5NYXN0ZXJfQ2xzLklELCAgICAgLy8g5Yqf6IO954K55Li75pWw5o2u57G75qCH6K+GXG5cdFx0XHRcdCAgICAnYnV0dG9uJzogJ3RvcCcsICAgLy8gdG9wL2JvdHRvbVxuXHRcdFx0XHQgICAgYnV0dG9uX25hbWU6ICfmlrDlop4nLFxuXHRcdFx0XHQgICAgbWFzdGVyOiB7XG5cdFx0XHRcdCAgICAgICAgY2xzX2lkOiB0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuSUQsIC8vIGJ1dHRvbj1ib3R0b23ml7YgbWFzdGVy55qEY2xzX2lkXG5cdFx0XHRcdCAgICAgICAgLy9vYmpfaWQ6ICcnICAvLyBidXR0b249Ym90dG9t5pe2IG1hc3RlcueahG9ial9pZFxuXHRcdFx0XHQgICAgfVxuXHRcdFx0XHR9O1xuXHRcdFx0XHR2YXIgcmVxPVtdO1xuXHRcdFx0XHR2YXIgYXR0cmxpc3QgPSB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3Q7XG5cdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmxpc3QubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHR2YXIgYXR0ciA9IGF0dHJsaXN0W2ldLkF0dHI7XG5cdFx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0XHR2YXIgYXIgPSBhdHRyW2pdO1xuXHRcdFx0XHRcdFx0aWYoYXIuVHlwZT09J+W8leeUqOWvueixoSjlpJrkuKopJylcblx0XHRcdFx0XHRcdFx0aWYoYXIuVmFsdWU9PSfor7cnKSBhci5WYWx1ZT0nJztcblx0XHRcdFx0ICAgICAgICBpZihhci5UeXBlPT0n5byV55So5Lq65ZGYJyB8fCBhci5UeXBlPT0n5byV55So6aG555uuJylcblx0XHRcdFx0ICAgICAgICBcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsdWU6IGFyLlZhbElEID9hci5WYWxJRCA6JycgfSk7XG5cdFx0XHRcdCAgICAgICAgZWxzZSBpZihhci5UeXBlPT0n5biD5bCU5YC8Jylcblx0XHRcdFx0XHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsdWU/JzEnOicwJ30pO1xuXHRcdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWx1ZSB9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0ICAgICAgICBpZiAoIXJlcS5maWx0ZXIoZnVuY3Rpb24gKHMpIHtcblx0XHRcdFx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlW2ldLmF0dHIgPT0gcy5uYW1lXG5cdFx0XHRcdCAgICAgICAgfSkubGVuZ3RoKSB7XG5cdFx0XHRcdCAgICAgICAgICAgIGxlbmd0aCA9IDE7XG5cdFx0XHRcdCAgICAgICAgICAgIHJlcS5wdXNoKHsgJ2F0dHInOiB0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZVtpXS5hdHRyLCAndmFsdWUnOiB0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZVtpXS52YWx1ZSB9KTtcblx0XHRcdFx0ICAgICAgICB9XG5cdFx0XHRcdCAgICB9XG5cdFx0XHRcdH1cblx0XHRcdFx0dmFyIGV4dGluZm8gPSBlbnZpcm9tZW50O1xuXHRcdFx0XHRleHRpbmZvLmVkaXRfZGxnID0ge1xuXHRcdFx0XHQgICAgdHlwZTogJ3NtYWxsJywvL+Wwj+eql+WPo1xuXHRcdFx0XHQgICAgY2xhc3NfaWQ6IHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5JRCwvL+W9k+WJjeaVsOaNruexu2lkXG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGRhdGFfYXR0cikge1xuXHRcdFx0XHQgICAgZXh0aW5mby5lZGl0X2RsZy5mb3JtX2NvbnRyb2wgPSB7Ly/miYDlsZ7nmoTooajljZXmjqfku7Zcblx0XHRcdFx0ICAgICAgICBuYW1lOiBkYXRhX2F0dHIuTmFtZSwvL+Wtl+auteWxnuaAp1xuXHRcdFx0XHQgICAgICAgIHRleHQ6IGRhdGFfYXR0ci5EaXNwTmFtZSwvL+aYvuekuuaWh+acrFxuXHRcdFx0XHQgICAgICAgIGdyb3VwX25hbWU6IGRhdGFfYXR0ci5Hcm91cE5hbWUsLy/lsZ7mgKfnu4Rcblx0XHRcdFx0ICAgICAgICB0eXBlOiBkYXRhX2F0dHIuVHlwZSwvL+Wtl+auteexu+Wei1xuXHRcdFx0XHQgICAgICAgIHJlYWRvbmx5OiBkYXRhX2F0dHIuUmVhZE9ubHksLy/mmK/lkKblj6ror7tcblx0XHRcdFx0ICAgICAgICBidXR0b25faW1nOiBkYXRhX2F0dHIuYnV0dG9uX2ltZywvL+W8leeUqOaMiemSrueahOWbvuagh1xuXHRcdFx0XHQgICAgICAgIGJ1dHRvbl90b29sdGlwOiBkYXRhX2F0dHIuYnV0dG9uX3Rvb2x0aXAvL+W8leeUqOaMiemSrueahHRvb2x0aXBcblx0XHRcdFx0ICAgIH1cblx0XHRcdFx0fVxuXHRcdFx0XHQvLyB2YXIgZGF0YUluZm8gPSB7XG5cdFx0XHRcdC8vIFx0ZWR0eXBlOiAgXCIwXCIsIGV2ZW50aWQ6IGV2ZW50aWQsIHByb2plY3RpZDogJycscmNsc2lkOiAnJywgcm9iamlkOiAnJywgdXNlcmxvZ2luOiAnJywgXG5cdFx0XHRcdC8vIFx0Y2xzaWQ6IHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5JRCwgb2JqaWQ6ICcnLGF0dHI6IEpTT04uc3RyaW5naWZ5KHJlcSksIFxuXHRcdFx0XHQvLyBcdGV4dGluZm86IEpTT04uc3RyaW5naWZ5KGV4dGluZm8pLCBnbG9iYWxfYXR0cjogSlNPTi5zdHJpbmdpZnkodGhpcy4kZGF0YS5nbG9iYWxfYXR0cilcblx0XHRcdFx0Ly8gfVxuXHRcdFx0XHRleHRpbmZvID0gQmFzZTY0LmVuY29kZShKU09OLnN0cmluZ2lmeShleHRpbmZvKSk7Ly/lsIblrZfnrKbkuLLovazmjaLkuLpiYXNlNjTnvJbnoIFcblx0XHRcdFx0dmFyIGdsb2JhbF9hdHRyID0gQmFzZTY0LmVuY29kZShKU09OLnN0cmluZ2lmeSh0aGlzLiRkYXRhLmdsb2JhbF9hdHRyKSk7Ly/lsIblrZfnrKbkuLLovazmjaLkuLpiYXNlNjTnvJbnoIFcblx0XHRcdFx0dmFyIG9ial9hdHRyPXt9O1xuXHRcdFx0XHRyZXEuZm9yRWFjaChpdGVtPT57XG5cdFx0XHRcdFx0b2JqX2F0dHJbaXRlbS5hdHRyXSA9IGl0ZW0udmFsO1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0aWYoIWV2ZW50aWQuaW5jbHVkZXMoJ3snKSkgZXZlbnRpZD0gJ3snKyBldmVudGlkICsnfSc7XG5cdFx0XHRcdHZhciBkYXRhSW5mbz17XG5cdFx0XHRcdCAgZWRfdHlwZTogXCIwXCIsXG5cdFx0XHRcdCAgc3RhcnRfdHJhbnNhY3Rpb246ICcnLFxuXHRcdFx0XHQgIGNsYXNzX2lkOiB0aGlzLiRkYXRhLnBhcmFtLmNsc2lkLFxuXHRcdFx0XHQgIGNsYXNzX25hbWU6ICcnLFxuXHRcdFx0XHQgIGV2ZW50X2lkOiBldmVudGlkLFxuXHRcdFx0XHQgIGV2ZW50X25hbWU6ICcnLFxuXHRcdFx0XHQgIGRhdGFfb2JqX2lkOiAnJyxcblx0XHRcdFx0ICBvYmpfYXR0cjogb2JqX2F0dHIsXG5cdFx0XHRcdCAgcHJqX2lkOiAnJyxcblx0XHRcdFx0ICByZWZfY2xzX2lkOiAnJyxcblx0XHRcdFx0ICByZWxfb2JqX2lkOiAnJyxcblx0XHRcdFx0ICB1c2VyX2xvZ2luOiAnJyxcblx0XHRcdFx0ICBkYXRhX2pzb246ICcnLFxuXHRcdFx0XHQgIGNvbXBvc2VfaW5mbzogJycsXG5cdFx0XHRcdCAgZXh0X2luZm86IGV4dGluZm8sXG5cdFx0XHRcdCAgZ2xvYmFsX2F0dHI6IGdsb2JhbF9hdHRyLFxuXHRcdFx0XHQgIGlucHV0X3BhcmFtOiAnJyxcblx0XHRcdFx0fTtcblx0XHRcdFx0Y29uc29sZS5sb2coZGF0YUluZm8pO1xuXHRcdFx0XHQvLyByZXR1cm47XG5cdFx0XHRcdHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdydW5DdXN0b21FdmVudCcsZGF0YUluZm8pLnRoZW4oc3VjY2Vzcz0+e1xuXHRcdFx0XHRcdGNvbnNvbGUubG9nKHN1Y2Nlc3MpO1xuXHRcdFx0XHRcdGlmIChzdWNjZXNzLmVycl9jb2RlID09IDApIHtcblx0XHRcdFx0XHQgIHZhciBkYXRhID0gc3VjY2Vzcy5yZXN1bHQ7XHRcblx0XHRcdFx0XHQgIGlmIChkYXRhICE9IFwiXCIpIHtcblx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdHZhciBhY3Rpb25zID0gZGF0YS5hY3Rpb247XG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhhY3Rpb25zKTtcblx0XHRcdFx0XHRcdGlmIChhY3Rpb25zKSB7XG5cdFx0XHRcdFx0XHQgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHQgICAgICAgIHZhciBhY3Rpb24gPSBhY3Rpb25zW2ldO1xuXHRcdFx0XHRcdFx0ICAgICAgICB2YXIgdmFsID0gYWN0aW9uLnZhbHVlO1xuXHRcdFx0XHRcdFx0ICAgICAgICB2YXIgZW52aXJvbWVudCA9IEpTT04uc3RyaW5naWZ5KGVudmlyb21lbnQpO1xuXHRcdFx0XHRcdFx0ICAgICAgICBcblx0XHRcdFx0XHRcdCAgICAgICAgaWYgKGFjdGlvbi5hY3Rpb25fdHlwZSA9PSAnb3Blbl9wYW5lbCcpIHtcblx0XHRcdFx0XHRcdCAgICAgICAgICAgdmFyIGQgPSBkaWFsb2coe1xuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgICAgdGl0bGU6ICc8aSBjbGFzcz1cImFjZS1pY29uIGZhIGZhLWluZm8tY2lyY2xlXCI+PC9pPiAnICsgJ+aPkOekuicsXG5cdFx0XHRcdFx0XHQgICAgICAgICAgICAgICBjb250ZW50OiBhY3Rpb24uYWN0aW9uX3R5cGUgKyAn5q2kYWN0aW9u5bCa5pyq5aSE55CG77yBJ1xuXHRcdFx0XHRcdFx0ICAgICAgICAgICB9KTtcblx0XHRcdFx0XHRcdCAgICAgICAgICAgZC5zaG93KCk7XG5cdFx0XHRcdFx0XHQgICAgICAgIH1cblx0XHRcdFx0XHRcdCAgICAgICAgZWxzZSBpZiAoYWN0aW9uLmFjdGlvbl90eXBlID09ICdvcGVuX3NlbGVjdF91c2VyZGxnJykge1xuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgdmFyIHN0eWxlID0gdmFsLnN0eWxlO1xuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gc3R5bGUgPT0gJ3VzZXInID8gJ+mAieaLqeS6uuWRmCcgOiBzdHlsZSA9PSAnZGVwYXJ0bWVudCcgPyAn6YCJ5oup6YOo6ZeoJyA6IHN0eWxlID09ICdyb2xlJyA/ICfpgInmi6nop5LoibInIDogJydcblx0XHRcdFx0XHRcdCAgICAgICAgICAgIHZhciAkdGhpcyA9IHRoaXM7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgcGFyYW09e1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpbmRleDogaW5kZXgsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlpbmRleDppaW5kZXgsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGJ1dHRvbl9jYWxsYmFjazpidXR0b25fY2FsbGJhY2ssXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJlcTpyZXEsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGRhdGFfYXR0cjpkYXRhX2F0dHJcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdHVuaS5uYXZpZ2F0ZVRvKHtcblx0XHRcdFx0XHRcdCAgICAgICAgICAgIFx0dXJsOicuLi9zZWxwc24vaW5kZXg/bXVsaXQ9ZmFsc2UmcGFyYW09JytKU09OLnN0cmluZ2lmeShwYXJhbSksXG5cdFx0XHRcdFx0XHQgICAgICAgICAgICBcdGV2ZW50czp7XG5cdFx0XHRcdFx0XHQgICAgICAgICAgICBcdFx0QWRkUGVyKGRhdGEscGFyYW0peyBcblx0XHRcdFx0XHRcdCAgICAgICAgICAgIFx0XHRcdC8vIGNvbnNvbGUubG9nKHBhcmFtKTtcblx0XHRcdFx0XHRcdCAgICAgICAgICAgIFx0XHRcdGNvbnNvbGUubG9nKGRhdGEpO1xuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgXHRcdFx0dmFyIGNhbGxiYWNrX2V2ZW50aWQgPSBwYXJhbS5idXR0b25fY2FsbGJhY2sudHJpbSgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGluZm8gPSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgICAgZXZlbnRpZDogY2FsbGJhY2tfZXZlbnRpZCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgICBlZHR5cGU6IFwiMFwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgIHByb2plY3RpZDogJycsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgICAgcmNsc2lkOiAnJyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgICByb2JqaWQ6ICcnLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgIHVzZXJsb2dpbjogJycsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgICAgY2xzaWQ6ICR0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuSUQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgICAgb2JqaWQ6IFwiXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgICAgYXR0cjogcGFyYW0ucmVxLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgIGlucHV0cGFyYW1ldGVyOiBkYXRhXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy5EYXRhT2JqUnVuQ3VzdG9tRXZlbnQoaW5mbywgcGFyYW0uZGF0YV9hdHRyKTtcblx0XHRcdFx0XHRcdCAgICAgICAgICAgIFx0XHR9XG5cdFx0XHRcdFx0XHQgICAgICAgICAgICBcdH1cblx0XHRcdFx0XHRcdCAgICAgICAgICAgIH0pO1x0XG5cdFx0XHRcdFx0XHQgICAgICAgIH1cblx0XHRcdFx0XHRcdCAgICAgICAgZWxzZSBpZiAoYWN0aW9uLmFjdGlvbl90eXBlID09ICdvcGVuX2RhdGFfcXVlcnlfZGxnJykge1xuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgXG5cdFx0XHRcdFx0XHQgICAgICAgIH1cblx0XHRcdFx0XHRcdCAgICAgICAgZWxzZSBpZiAoYWN0aW9uLmFjdGlvbl90eXBlID09ICdvcGVuX2NvbW1vbl9kbGcnKSB7XG5cdFx0XHRcdFx0XHQgICAgICAgICAgICB2YXIgdmFsdWUgPSBhY3Rpb24udmFsdWU7XG5cdFx0XHRcdFx0XHQgICAgICAgICAgICB2YXIgZCA9IGRpYWxvZyh7XG5cdFx0XHRcdFx0XHQgICAgICAgICAgICAgICAgdGl0bGU6ICc8aSBjbGFzcz1cImFjZS1pY29uIGZhIGZhLWluZm8tY2lyY2xlXCI+PC9pPiAnICsgJ+aPkOekuicsXG5cdFx0XHRcdFx0XHQgICAgICAgICAgICAgICAgY29udGVudDogYWN0aW9uLmFjdGlvbl90eXBlICsgJ+atpGFjdGlvbuWwmuacquWkhOeQhu+8gSdcblx0XHRcdFx0XHRcdCAgICAgICAgICAgIH0pO1xuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgZC5zaG93KCk7XG5cdFx0XHRcdFx0XHQgICAgICAgIH1cblx0XHRcdFx0XHRcdCAgICAgICAgZWxzZSBpZiAoYWN0aW9uLmFjdGlvbl90eXBlID09ICdvcGVuX3Byb2plY3RfcXVlcnlfZGxnJykge1xuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhhY3Rpb24udmFsdWUuc2VsZWN0X3JhbmdlKTtcblx0XHRcdFx0XHRcdCAgICAgICAgICAgIC8vY29uc29sZS5sb2coYWN0aW9uLnZhbHVlLm11bGl0X3NlbGVjdCk7XG5cdFx0XHRcdFx0XHQgICAgICAgICAgICB2YXIgcHJpUmVsID0gJy0xJztcblx0XHRcdFx0XHRcdCAgICAgICAgICAgIGlmIChhY3Rpb24udmFsdWUuc2VsZWN0X3JhbmdlID09ICflhajpg6jnm7jlhbMnKVxuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgICAgIHByaVJlbCA9ICcwJztcblx0XHRcdFx0XHRcdCAgICAgICAgICAgIGVsc2UgaWYgKGFjdGlvbi52YWx1ZS5zZWxlY3RfcmFuZ2UgPT0gJ+aIkei0n+i0o+eahOmhueebricpXG5cdFx0XHRcdFx0XHQgICAgICAgICAgICAgICAgcHJpUmVsID0gJzEnO1xuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgZWxzZSBpZiAoYWN0aW9uLnZhbHVlLnNlbGVjdF9yYW5nZSA9PSAn5oiR5Yib5bu655qEJylcblx0XHRcdFx0XHRcdCAgICAgICAgICAgICAgICBwcmlSZWwgPSAnMic7XG5cdFx0XHRcdFx0XHQgICAgICAgICAgICBlbHNlIGlmIChhY3Rpb24udmFsdWUuc2VsZWN0X3JhbmdlID09ICfmiJHlj4LkuI7nmoQnIHx8IGFjdGlvbi52YWx1ZS5zZWxlY3RfcmFuZ2UgPT0gJ+aIkeWPguWKoOeahCcpXG5cdFx0XHRcdFx0XHQgICAgICAgICAgICAgICAgcHJpUmVsID0gJzMnO1xuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgZWxzZSBpZiAoYWN0aW9uLnZhbHVlLnNlbGVjdF9yYW5nZSA9PSAn5oiR5YWz5rOo55qEJylcblx0XHRcdFx0XHRcdCAgICAgICAgICAgICAgICBwcmlSZWwgPSAnNCc7XG5cdFx0XHRcdFx0XHQgICAgICAgICAgICBlbHNlIGlmIChhY3Rpb24udmFsdWUuc2VsZWN0X3JhbmdlID09ICfmiJHkuIvlsZ7nmoTpobnnm64nKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRwcmlSZWwgPSAnNSc7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHRcdFx0dmFyICR0aGlzID0gdGhpcztcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBwYXJhbV89e1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpbmRleDogaW5kZXgsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlpbmRleDppaW5kZXgsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGJ1dHRvbl9jYWxsYmFjazpidXR0b25fY2FsbGJhY2ssXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJlcTpyZXFcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdHVuaS5uYXZpZ2F0ZVRvKHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dXJsOicuLi9zZWxQcmovaW5kZXg/cmVsYXRpb249JytwcmlSZWwrJyZwYXJhbT0nK0pTT04uc3RyaW5naWZ5KHBhcmFtXyksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGV2ZW50czp7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0QWRkUGVyKGRhdGEscGFyYW0peyBcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbcGFyYW0uaW5kZXhdLkF0dHJbcGFyYW0uaWluZGV4XS5WYWx1ZT1kYXRhWzBdLk5hbWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W3BhcmFtLmluZGV4XS5BdHRyW3BhcmFtLmlpbmRleF0uVmFsSUQ9ZGF0YVswXS5JRCsnOycrZGF0YVswXS5OYW1lO1xuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgXHRcdFx0dmFyIGNhbGxiYWNrX2V2ZW50aWQgPSBwYXJhbS5idXR0b25fY2FsbGJhY2sudHJpbSgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGNhbGxiYWNrX2V2ZW50aWQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgICB2YXIgaW5mbyA9IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgICAgICAgZXZlbnRpZDogY2FsbGJhY2tfZXZlbnRpZCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgICAgICAgZWR0eXBlOiBcIjJcIixcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgICAgICAgcHJvamVjdGlkOiBkYXRhWzBdLklELFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgICAgICByY2xzaWQ6IFwiXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgICAgICAgIHJvYmppZDogXCJcIixcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgICAgICAgdXNlcmxvZ2luOiBcIlwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgICAgICBjbHNpZDogJHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5JRCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgICAgICAgb2JqaWQ6IFwiXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgICAgICAgIGF0dHI6IHBhcmFtLnJlcSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgICB9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgICR0aGlzLkRhdGFPYmpSdW5DdXN0b21FdmVudChpbmZvKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0ICAgICAgICB9IGVsc2Uge1xuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgdmFyIGQgPSBkaWFsb2coe1xuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgICAgIHRpdGxlOiAnPGkgY2xhc3M9XCJhY2UtaWNvbiBmYSBmYS1pbmZvLWNpcmNsZVwiPjwvaT4gJyArICfmj5DnpLonLFxuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgICAgIGNvbnRlbnQ6IGFjdGlvbi5hY3Rpb25fdHlwZSArICfmraRhY3Rpb27lsJrmnKrlpITnkIbvvIEnXG5cdFx0XHRcdFx0XHQgICAgICAgICAgICB9KTtcblx0XHRcdFx0XHRcdCAgICAgICAgICAgIGQuc2hvdygpO1xuXHRcdFx0XHRcdFx0ICAgICAgICB9XG5cdFx0XHRcdFx0XHQgICAgfVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdCAgfWVsc2V7XG5cdFx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi5o+Q56S6NS4yXCIsY29udGVudDogJ+iwg+eUqCBiZWZvcmVfY2xpY2tfYnV0dG9uIOiEmuacrOi/lOWbnuepuu+8jGV2ZW50X2lkJyArIGV2ZW50aWQsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdFx0ICB9XG5cdFx0XHRcdFx0fWVsc2V7XG5cdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzVcIixjb250ZW50OnN1Y2Nlc3MuZXJyX21zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pLmNhdGNoKGV4PT57XG5cdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coZXgpO1xuXHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi5o+Q56S6NS4xXCIsY29udGVudDpleC5lcnJNc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdH0pO1xuXHRcdCAgICB9LFxuXHRcdCAgICBzY2FuX2luaV9EYXRhT2JqUnVuQ3VzdG9tRXZlbnQoaW5mbyl7XG5cdFx0ICAgIFx0dmFyIHBhcmFtID0ge1xuXHRcdCAgICBcdCAgICBFZGl0U3R5bGU6IHRoaXMuJGRhdGEucGFyYW0uU3ViX0Nscy5WaWV3X1N0eWxlLk5hbWUsXG5cdFx0ICAgIFx0ICAgIFZpZXdTdHlsZTogdGhpcy4kZGF0YS5wYXJhbS5TdWJfQ2xzLlZpZXdfU3R5bGUuTmFtZSxcblx0XHQgICAgXHQgICAgTm90VHJpZ2dlclN5c0V2ZW50OiAwLFxuXHRcdCAgICBcdCAgICBlbnZpcm9tZW50OiB7XG5cdFx0ICAgIFx0ICAgICAgICAnZnVuY3Rpb24nOiAnMzAwMCcsIC8vIOWKn+iDveeCuee8luWPt1xuXHRcdCAgICBcdCAgICAgICAgY2xzX2lkOiB0aGlzLiRkYXRhLnBhcmFtLlN1Yl9DbHMuSUQsICAgICAvLyDlip/og73ngrnkuLvmlbDmja7nsbvmoIfor4Zcblx0XHQgICAgXHQgICAgICAgICdidXR0b24nOiAndG9wJywgICAvLyB0b3AvYm90dG9tXG5cdFx0ICAgIFx0ICAgICAgICBidXR0b25fbmFtZTogJ+aWsOWinicsXG5cdFx0ICAgIFx0ICAgICAgICBtYXN0ZXI6IHtcblx0XHQgICAgXHQgICAgICAgICAgICBjbHNfaWQ6IHRoaXMuJGRhdGEucGFyYW0uU3ViX0Nscy5JRCwgLy8gYnV0dG9uPWJvdHRvbeaXtiBtYXN0ZXLnmoRjbHNfaWRcblx0XHQgICAgXHQgICAgICAgICAgICAvL29ial9pZDogJycgIC8vIGJ1dHRvbj1ib3R0b23ml7YgbWFzdGVy55qEb2JqX2lkXG5cdFx0ICAgIFx0ICAgICAgICB9XG5cdFx0ICAgIFx0ICAgIH1cblx0XHQgICAgXHR9XG5cdFx0ICAgIFx0dmFyIGlucHV0cGFyYW1ldGVyID0gJyc7XG5cdFx0ICAgIFx0dmFyIGdsb2JhbF9hdHRyID0gJyc7XG5cdFx0ICAgIFx0Ly8gdmFyIGRhdGFJbmZvID0ge1xuXHRcdCAgICAgLy8gICAgICAgIGVkdHlwZTogaW5mby5lZHR5cGUsIGV2ZW50aWQ6IGluZm8uZXZlbnRpZCwgcHJvamVjdGlkOiBpbmZvLnByb2plY3RpZCxcblx0XHQgICAgIC8vICAgICAgICByY2xzaWQ6IGluZm8ucmNsc2lkLCByb2JqaWQ6IGluZm8ucm9iamlkLCB1c2VybG9naW46IGluZm8udXNlcmxvZ2luLCBjbHNpZDogaW5mby5jbHNpZCwgb2JqaWQ6IGluZm8ub2JqaWQsXG5cdFx0ICAgICAvLyAgICAgICAgYXR0cjogSlNPTi5zdHJpbmdpZnkoaW5mby5hdHRyKSwgZXh0aW5mbzogSlNPTi5zdHJpbmdpZnkocGFyYW0pLCBpbnB1dHBhcmFtZXRlcjogaW5wdXRwYXJhbWV0ZXIsIGdsb2JhbF9hdHRyOiBnbG9iYWxfYXR0clxuXHRcdCAgICAgLy8gICAgfVxuXHRcdFx0XHRwYXJhbSA9IEJhc2U2NC5lbmNvZGUoSlNPTi5zdHJpbmdpZnkocGFyYW0pKTsvL+WwhuWtl+espuS4sui9rOaNouS4umJhc2U2NOe8lueggVxuXHRcdFx0XHR2YXIgb2JqX2F0dHI9e307XG5cdFx0XHRcdGluZm8uYXR0ci5mb3JFYWNoKGl0ZW09Pntcblx0XHRcdFx0XHRvYmpfYXR0cltpdGVtLmF0dHJdID0gaXRlbS52YWw7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRpZighaW5mby5ldmVudGlkLmluY2x1ZGVzKCd7JykpIGluZm8uZXZlbnRpZD0gJ3snKyBpbmZvLmV2ZW50aWQgKyd9Jztcblx0XHRcdFx0dmFyIGRhdGFJbmZvPXtcblx0XHRcdFx0ICBlZF90eXBlOiBpbmZvLmVkdHlwZSxcblx0XHRcdFx0ICBzdGFydF90cmFuc2FjdGlvbjogJycsXG5cdFx0XHRcdCAgY2xhc3NfaWQ6IGluZm8uY2xzaWQsXG5cdFx0XHRcdCAgY2xhc3NfbmFtZTogJycsXG5cdFx0XHRcdCAgZXZlbnRfaWQ6IGluZm8uZXZlbnRpZCxcblx0XHRcdFx0ICBldmVudF9uYW1lOiAnJyxcblx0XHRcdFx0ICBkYXRhX29ial9pZDogaW5mby5vYmppZCxcblx0XHRcdFx0ICBvYmpfYXR0cjogb2JqX2F0dHIsXG5cdFx0XHRcdCAgcHJqX2lkOiBpbmZvLnByb2plY3RpZCxcblx0XHRcdFx0ICByZWZfY2xzX2lkOiBpbmZvLnJjbHNpZCxcblx0XHRcdFx0ICByZWxfb2JqX2lkOiBpbmZvLnJvYmppZCxcblx0XHRcdFx0ICB1c2VyX2xvZ2luOiBpbmZvLnVzZXJsb2dpbixcblx0XHRcdFx0ICBkYXRhX2pzb246ICcnLFxuXHRcdFx0XHQgIGNvbXBvc2VfaW5mbzogJycsXG5cdFx0XHRcdCAgZXh0X2luZm86IHBhcmFtLFxuXHRcdFx0XHQgIGdsb2JhbF9hdHRyOiAnJyxcblx0XHRcdFx0ICBpbnB1dF9wYXJhbTogJycsXG5cdFx0XHRcdH07XG5cdFx0XHRcdGNvbnNvbGUubG9nKGRhdGFJbmZvKTtcblx0XHRcdFx0Ly8gcmV0dXJuO1xuXHRcdCAgICBcdHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdydW5DdXN0b21FdmVudCcsZGF0YUluZm8pLnRoZW4oc3VjY2Vzcz0+e1xuXHRcdCAgICBcdFx0Y29uc29sZS5sb2coc3VjY2Vzcyk7XG5cdFx0ICAgIFx0XHRpZiAoc3VjY2Vzcy5lcnJfY29kZSA9PSAwKSB7XG5cdFx0ICAgIFx0XHRcdHZhciBkYXRhID0gc3VjY2Vzcy5yZXN1bHQ7XHRcblx0XHQgICAgXHRcdFx0dmFyIGFjdGlvbmxpc3QgPSBkYXRhLmFjdGlvbjtcblx0XHQgICAgXHRcdFx0aWYgKGFjdGlvbmxpc3QpIHtcblx0XHQgICAgXHRcdFx0ICAgIGZvciAodmFyIGogPSAwOyBqIDwgYWN0aW9ubGlzdC5sZW5ndGg7IGorKykge1xuXHRcdCAgICBcdFx0XHQgICAgICAgIHZhciBhY3Rpb24gPSBhY3Rpb25saXN0W2pdXG5cdFx0ICAgIFx0XHRcdCAgICAgICAgdmFyIGFjdGlvbl90eXBlID0gYWN0aW9uLmFjdGlvbl90eXBlO1xuXHRcdCAgICBcdFx0XHQgICAgICAgIHZhciB2YWx1ZSA9IGFjdGlvbi52YWx1ZTtcblx0XHQgICAgXHRcdFx0ICAgICAgICBpZiAoYWN0aW9uX3R5cGUgPT0gJ3NldF9kbGdfYXR0cicpIHtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgaWYgKHZhbHVlKSB7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICB2YXIgdmFsID0gdmFsdWU7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09ICdzdHJpbmcnKSB7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICAgICAgdmFsID0gSlNPTi5wYXJzZSh2YWx1ZSk7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICB9XG5cdFx0ICAgIFx0XHRcdFx0XHRcdFx0Y29uc29sZS5sb2codmFsKTtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsLmxlbmd0aDsgaSsrKSB7XG5cdFx0ICAgIFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBhID0gMDsgYSA8IHRoaXMuJGRhdGEuc3ViQ2xhc3NBdHRyTGlzdC5sZW5ndGg7IGErKykge1xuXHRcdCAgICBcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBsID0gMDsgbCA8IHRoaXMuJGRhdGEuc3ViQ2xhc3NBdHRyTGlzdFthXS5BdHRyLmxlbmd0aDsgbCsrKSB7XG5cdFx0ICAgIFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGNhID0gdGhpcy4kZGF0YS5zdWJDbGFzc0F0dHJMaXN0W2FdLkF0dHJbbF07XG5cdFx0ICAgIFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKHZhbFtpXS5hdHRyICA9PSBjYS5OYW1lKSB7XG5cdFx0ICAgIFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihjYS5UeXBlPT0n5a2X5YW4JyB8fCBjYS5UeXBlPT0n5a2X5YW4LeWtl+espuS4sicgfHwgY2EuVHlwZT09J+Wtl+WFuC3mlbTmlbAnKXtcblx0XHQgICAgXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGRpY3RJdGVtTGlzdD1bXTtcblx0XHQgICAgXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yKHZhciBkIGluIHZhbFtpXS5jaG9pY2VfbGlzdCl7XG5cdFx0ICAgIFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIHZhbCA9dmFsW2ldLmNob2ljZV9saXN0W2RdO1xuXHRcdCAgICBcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRpY3RJdGVtTGlzdC5wdXNoKHtcIkNOX1NfTkFNRVwiOnZhbCxcIk5hbWVcIjp2YWwsXCJsYWJlbFwiOnZhbCxcInZhbHVlXCI6dmFsfSk7XG5cdFx0ICAgIFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XG5cdFx0ICAgIFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHQgICAgXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2EuZGljdGl0ZW0gPSBkaWN0SXRlbUxpc3Q7XG5cdFx0ICAgIFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGF0dHJbal0uZGljdGl0ZW0gPSB2YWxbaV0uY2hvaWNlX2xpc3Q7XG5cdFx0ICAgIFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9ZWxzZXtcblx0XHQgICAgXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gY2EudmFsdWUgPSB2YWxbaV0udmFsdWU7XG5cdFx0ICAgIFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0ICAgIFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdCAgICBcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0ICAgIFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0ICAgIFx0XHRcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgICAgICB2YXIgbGVuZ3RoID0gMDtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLmZpbHRlcihmdW5jdGlvbiAocykge1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsW2ldLmF0dHIgPT0gcy5hdHRyXG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICAgICAgfSkubGVuZ3RoKSB7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9IDE7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLnB1c2godmFsW2ldKTtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgICAgICB9XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICAgICAgaWYgKGxlbmd0aCA9PSAwKSB7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUubGVuZ3RoOyBqKyspIHtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZVtqXS5hdHRyID09IHZhbFtpXS5hdHRyKSB7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmVbal0udmFsdWUgPSB2YWxbaV0udmFsdWU7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgIH1cblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgICAgICB9XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICB9XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgIH1cblx0XHQgICAgXHRcdFx0ICAgICAgICB9XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgaWYgKGFjdGlvbl90eXBlID09ICdvcGVuX3NlbGVjdF91c2VyZGxnJykge1xuXHRcdCAgICBcdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzYuMlwiLGNvbnRlbnQ6XCJvcGVuX3NlbGVjdF91c2VyZGxn6L+Z5LiqYWN0aW9uX3R5cGXov5jmnKrlpITnkIbvvIFcIixzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHQgICAgXHRcdFx0ICAgICAgICB9XG5cdFx0ICAgIFx0XHRcdCAgICB9XG5cdFx0ICAgIFx0XHRcdH1cblx0XHQgICAgXHRcdFx0XG5cdFx0ICAgIFx0XHR9ZWxzZXtcblx0XHQgICAgXHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor682XCIsY29udGVudDpzdWNjZXNzLmVycl9tc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0ICAgIFx0XHR9XG5cdFx0ICAgIFx0fSkuY2F0Y2goZXg9Pntcblx0XHQgICAgXHRcdC8vIGNvbnNvbGUubG9nKGV4KTtcblx0XHQgICAgXHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vNi4xXCIsY29udGVudDpleC5lcnJNc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0ICAgIFx0fSk7XG5cdFx0ICAgIH0sXG5cdFx0ICAgIHNjYW5fRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGluZm8sZGF0YV9hdHRyKXtcblx0XHQgICAgXHR2YXIgJHRoaXMgPSB0aGlzO1xuXHRcdCAgICBcdHZhciBlbnZpcm9tZW50ID0ge1xuXHRcdCAgICBcdCAgICAnZnVuY3Rpb24nOiAnMzAwMCcsIC8vIOWKn+iDveeCuee8luWPt1xuXHRcdCAgICBcdCAgICBjbHNfaWQ6ICdNQk9YJywvL3RoaXMuJGRhdGEucGFyYW0uU3ViX0Nscy5JRCwgICAgIC8vIOWKn+iDveeCueS7juaVsOaNruexu+agh+ivhlxuXHRcdCAgICBcdCAgICAnYnV0dG9uJzogJ3RvcCcsICAgLy8gdG9wL2JvdHRvbVxuXHRcdCAgICBcdCAgICBidXR0b25fbmFtZTogJ+aWsOWinicsXG5cdFx0ICAgIFx0ICAgIG1hc3Rlcjoge1xuXHRcdCAgICBcdCAgICAgICAgY2xzX2lkOiAnTUJPWCcsLy90aGlzLiRkYXRhLnBhcmFtLlN1Yl9DbHMuSUQsIC8vIGJ1dHRvbj1ib3R0b23ml7YgbWFzdGVy55qEY2xzX2lkXG5cdFx0XHRcdFx0XHRhdHRyOiBpbmZvLm1hc3RfYXR0ciAvL+S4u+aVsOaNruexu+WxnuaAp1xuXHRcdCAgICBcdCAgICAgICAgLy9vYmpfaWQ6ICcnICAvLyBidXR0b249Ym90dG9t5pe2IG1hc3RlcueahG9ial9pZFxuXHRcdCAgICBcdCAgICB9XG5cdFx0ICAgIFx0fTtcblx0XHQgICAgXHRlbnZpcm9tZW50LmVkaXRfZGxnID0ge1xuXHRcdFx0XHRcdHR5cGU6ICdzbWFsbCcsLy/lsI/nqpflj6Ncblx0XHQgICAgXHQgICAgY2xhc3NfaWQ6ICdNQk9YJywvL3RoaXMuJGRhdGEucGFyYW0uU3ViX0Nscy5JRCwvL+W9k+WJjeaVsOaNruexu2lkXG5cdFx0ICAgIFx0fVxuXHRcdCAgICBcdGlmIChkYXRhX2F0dHIpIHtcblx0XHQgICAgXHQgICAgZW52aXJvbWVudC5lZGl0X2RsZy5mb3JtX2NvbnRyb2wgPSB7Ly/miYDlsZ7nmoTooajljZXmjqfku7Zcblx0XHQgICAgXHQgICAgICAgIG5hbWU6IGRhdGFfYXR0ci5OYW1lLC8v5a2X5q615bGe5oCnXG5cdFx0ICAgIFx0ICAgICAgICB0ZXh0OiBkYXRhX2F0dHIuRGlzcE5hbWUsLy/mmL7npLrmlofmnKxcblx0XHQgICAgXHQgICAgICAgIGdyb3VwX25hbWU6IGRhdGFfYXR0ci5Hcm91cE5hbWUsLy/lsZ7mgKfnu4Rcblx0XHQgICAgXHQgICAgICAgIHR5cGU6IGRhdGFfYXR0ci5UeXBlLC8v5a2X5q6157G75Z6LXG5cdFx0ICAgIFx0ICAgICAgICByZWFkb25seTogZGF0YV9hdHRyLlJlYWRPbmx5LC8v5piv5ZCm5Y+q6K+7XG5cdFx0ICAgIFx0ICAgICAgICBidXR0b25faW1nOiBkYXRhX2F0dHIuYnV0dG9uX2ltZywvL+W8leeUqOaMiemSrueahOWbvuagh1xuXHRcdCAgICBcdCAgICAgICAgYnV0dG9uX3Rvb2x0aXA6IGRhdGFfYXR0ci5idXR0b25fdG9vbHRpcC8v5byV55So5oyJ6ZKu55qEdG9vbHRpcFxuXHRcdCAgICBcdCAgICB9XG5cdFx0ICAgIFx0fVxuXHRcdCAgICBcdFxuXHRcdCAgICBcdC8vIHZhciBkYXRhSW5mbyA9IHtcblx0XHQgICAgIC8vICAgICAgICBlZHR5cGU6IGluZm8uZWR0eXBlLCBldmVudGlkOiBpbmZvLmV2ZW50aWQsIHByb2plY3RpZDogaW5mby5wcm9qZWN0aWQucmVwbGFjZSgneycsJycpLnJlcGxhY2UoJ30nLCcnKSxcblx0XHQgICAgIC8vICAgICAgICByY2xzaWQ6IGluZm8ucmNsc2lkLCByb2JqaWQ6IGluZm8ucm9iamlkLCB1c2VybG9naW46IGluZm8udXNlcmxvZ2luLCBjbHNpZDogaW5mby5jbHNpZCwgb2JqaWQ6IGluZm8ub2JqaWQsXG5cdFx0ICAgICAvLyAgICAgICAgYXR0cjogSlNPTi5zdHJpbmdpZnkoaW5mby5hdHRyKSwgZXh0aW5mbzogSlNPTi5zdHJpbmdpZnkoZW52aXJvbWVudCksIGlucHV0cGFyYW1ldGVyOiBKU09OLnN0cmluZ2lmeShpbmZvLmlucHV0UGFyYW10ZXIpLCBnbG9iYWxfYXR0cjogSlNPTi5zdHJpbmdpZnkodGhpcy4kZGF0YS5nbG9iYWxfYXR0cilcblx0XHQgICAgIC8vICAgIH1cblx0XHQgICAgXHRlbnZpcm9tZW50ID0gQmFzZTY0LmVuY29kZShKU09OLnN0cmluZ2lmeShlbnZpcm9tZW50KSk7Ly/lsIblrZfnrKbkuLLovazmjaLkuLpiYXNlNjTnvJbnoIFcblx0XHRcdFx0aWYoaW5mby5pbnB1dFBhcmFtdGVyKXtcblx0XHRcdFx0XHRpbmZvLmlucHV0UGFyYW10ZXIgPSBCYXNlNjQuZW5jb2RlKEpTT04uc3RyaW5naWZ5KGluZm8uaW5wdXRQYXJhbXRlcikpOy8v5bCG5a2X56ym5Liy6L2s5o2i5Li6YmFzZTY057yW56CBXG5cdFx0XHRcdH1cblx0XHRcdFx0dmFyIGdsb2JhbF9hdHRyID0gQmFzZTY0LmVuY29kZShKU09OLnN0cmluZ2lmeSh0aGlzLiRkYXRhLmdsb2JhbF9hdHRyKSk7Ly/lsIblrZfnrKbkuLLovazmjaLkuLpiYXNlNjTnvJbnoIFcblx0XHRcdFx0XG5cdFx0ICAgIFx0dmFyIG9ial9hdHRyPXt9O1xuXHRcdCAgICBcdGluZm8uYXR0ci5mb3JFYWNoKGl0ZW09Pntcblx0XHQgICAgXHRcdG9ial9hdHRyW2l0ZW0uYXR0cl0gPSBpdGVtLnZhbDtcblx0XHQgICAgXHR9KTtcblx0XHQgICAgXHRpZighaW5mby5ldmVudGlkLmluY2x1ZGVzKCd7JykpIGluZm8uZXZlbnRpZD0gJ3snKyBpbmZvLmV2ZW50aWQgKyd9Jztcblx0XHQgICAgXHR2YXIgZGF0YUluZm89e1xuXHRcdCAgICBcdCAgZWRfdHlwZTogaW5mby5lZHR5cGUsXG5cdFx0ICAgIFx0ICBzdGFydF90cmFuc2FjdGlvbjogJycsXG5cdFx0ICAgIFx0ICBjbGFzc19pZDogaW5mby5jbHNpZCxcblx0XHQgICAgXHQgIGNsYXNzX25hbWU6ICcnLFxuXHRcdCAgICBcdCAgZXZlbnRfaWQ6IGluZm8uZXZlbnRpZCxcblx0XHQgICAgXHQgIGV2ZW50X25hbWU6ICcnLFxuXHRcdCAgICBcdCAgZGF0YV9vYmpfaWQ6IGluZm8ub2JqaWQsXG5cdFx0ICAgIFx0ICBvYmpfYXR0cjogb2JqX2F0dHIsXG5cdFx0ICAgIFx0ICBwcmpfaWQ6IGluZm8ucHJvamVjdGlkLnJlcGxhY2UoJ3snLCcnKS5yZXBsYWNlKCd9JywnJyksXG5cdFx0ICAgIFx0ICByZWZfY2xzX2lkOiBpbmZvLnJjbHNpZCxcblx0XHQgICAgXHQgIHJlbF9vYmpfaWQ6IGluZm8ucm9iamlkLFxuXHRcdCAgICBcdCAgdXNlcl9sb2dpbjogaW5mby51c2VybG9naW4sXG5cdFx0ICAgIFx0ICBkYXRhX2pzb246ICcnLFxuXHRcdCAgICBcdCAgY29tcG9zZV9pbmZvOiAnJyxcblx0XHQgICAgXHQgIGV4dF9pbmZvOiBlbnZpcm9tZW50LFxuXHRcdCAgICBcdCAgZ2xvYmFsX2F0dHI6IGdsb2JhbF9hdHRyLFxuXHRcdCAgICBcdCAgaW5wdXRfcGFyYW06IGluZm8uaW5wdXRQYXJhbXRlcixcblx0XHQgICAgXHR9O1xuXHRcdCAgICBcdGNvbnNvbGUubG9nKGRhdGFJbmZvKTtcblx0XHQgICAgXHQvLyByZXR1cm47XG5cdFx0ICAgIFx0dGhpcy4kc3RvcmUuZGlzcGF0Y2goJ3J1bkN1c3RvbUV2ZW50JyxkYXRhSW5mbykudGhlbihzdWNjZXNzPT57XG5cdFx0ICAgIFx0XHRjb25zb2xlLmxvZyhzdWNjZXNzKTtcblx0XHQgICAgXHRcdGlmIChzdWNjZXNzLmVycl9jb2RlID09IDApIHtcblx0XHQgICAgXHRcdFx0dmFyIGRhdGEgPSBzdWNjZXNzLnJlc3VsdDtcdFxuXHRcdCAgICBcdFx0XHR2YXIgYWN0aW9ubGlzdCA9IGRhdGEuYWN0aW9uO1xuXHRcdCAgICBcdFx0XHRcblx0XHQgICAgXHRcdFx0aWYgKGFjdGlvbmxpc3QpIHtcblx0XHQgICAgXHRcdFx0XHRjb25zb2xlLmxvZyhhY3Rpb25saXN0KTtcblx0XHQgICAgXHRcdFx0ICAgIGZvciAodmFyIGlpID0gMDsgaWkgPCBhY3Rpb25saXN0Lmxlbmd0aDsgaWkrKykge1xuXHRcdCAgICBcdFx0XHQgICAgICAgIHZhciBhY3Rpb24gPSBhY3Rpb25saXN0W2lpXTtcblx0XHQgICAgXHRcdFx0ICAgICAgICBpZiAoYWN0aW9uLmFjdGlvbl90eXBlID09ICdzZXRfZGxnX2F0dHInKSB7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgIHZhciByZXN1bHQgPSBhY3Rpb24udmFsdWU7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdWx0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0ICAgIFx0XHRcdFx0XHRcdFx0aWYgKHJlc3VsdFtpXS5jaG9pY2VfbGlzdCkge1xuXHRcdCAgICBcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgcyA9IDA7IHMgPCAkdGhpcy4kZGF0YS5zdWJQYW5lbExpc3QubGVuZ3RoOyBzKyspIHtcblx0XHQgICAgXHRcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgYyA9IDA7IGMgPCAkdGhpcy4kZGF0YS5zdWJQYW5lbExpc3Rbc10uc3ViQ2xhc3NBdHRyTGlzdC5sZW5ndGg7IGMrKykge1xuXHRcdCAgICBcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBhdHRyID0gJHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0W3NdLnN1YkNsYXNzQXR0ckxpc3RbY10uQXR0cjtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoYXR0cltqXS5OYW1lPT1yZXN1bHRbaV0uYXR0cil7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihhdHRyW2pdLlR5cGU9PSflrZflhbgnIHx8IGF0dHJbal0uVHlwZT09J+Wtl+WFuC3lrZfnrKbkuLInIHx8IGF0dHJbal0uVHlwZT09J+Wtl+WFuC3mlbTmlbAnKXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGRpY3RJdGVtTGlzdD1bXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yKHZhciBkIGluIHJlc3VsdFtpXS5jaG9pY2VfbGlzdCl7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIHZhbCA9cmVzdWx0W2ldLmNob2ljZV9saXN0W2RdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRpY3RJdGVtTGlzdC5wdXNoKHtcIkNOX1NfTkFNRVwiOnZhbCxcIk5hbWVcIjp2YWwsXCJsYWJlbFwiOnZhbCxcInZhbHVlXCI6dmFsfSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXR0cltqXS5kaWN0aXRlbSA9IGRpY3RJdGVtTGlzdDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gYXR0cltqXS5kaWN0aXRlbSA9IHJlc3VsdFtpXS5jaG9pY2VfbGlzdDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHQgICAgXHRcdFx0XHRcdFx0XHRcdH1cblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgIH1cblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgIGZvciAodmFyIHMgPSAwOyBzIDwgJHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0Lmxlbmd0aDsgcysrKSB7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICBcdGZvciAodmFyIGMgPSAwOyBjIDwgJHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0W3NdLnN1YkNsYXNzQXR0ckxpc3QubGVuZ3RoOyBjKyspIHtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgIFx0XHR2YXIgYXR0ciA9ICR0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdFtzXS5zdWJDbGFzc0F0dHJMaXN0W2NdLkF0dHI7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICBcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICBcdFx0XHRjb25zb2xlLmxvZyhhdHRyW2pdLk5hbWUrJz09JytyZXN1bHRbaV0uYXR0cik7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICBcdFx0XHRpZihhdHRyW2pdLk5hbWU9PXJlc3VsdFtpXS5hdHRyKXtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgIFx0XHRcdFx0YXR0cltqXS5WYWx1ZSA9IHJlc3VsdFtpXS52YWx1ZTtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgIFx0XHRcdH1cblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgIFx0XHR9XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICBcdH1cblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgIH1cblx0XHQgICAgXHRcdFx0XHRcdFx0XHR2YXIgbGVuZ3RoID0gMDtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgIGlmICghJHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLmZpbHRlcihmdW5jdGlvbiAocykge1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRbaV0uYXR0ciA9PSBzLmF0dHJcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgIH0pLmxlbmd0aCkge1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9IDE7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICAgICAgJHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLnB1c2gocmVzdWx0W2ldKTtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgIH1cblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgIGlmIChsZW5ndGggPT0gMCkge1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgJHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLmxlbmd0aDsgaisrKSB7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmVbal0uYXR0ciA9PSByZXN1bHRbaV0uYXR0cikge1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlW2pdLnZhbHVlID0gcmVzdWx0W2ldLnZhbHVlO1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICB9XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICAgICAgfVxuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgfVxuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICB9XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgfSBlbHNlIGlmIChhY3Rpb24uYWN0aW9uX3R5cGUgPT0gJ3NldF9nbG9iYWxfYXR0cicpIHtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgJHRoaXMuJGFjdGlvbnRyID0gYWN0aW9uLnZhbHVlIHx8IFtdO1xuXHRcdCAgICBcdFx0XHQgICAgICAgIH0gZWxzZSBpZiAoYWN0aW9uLmFjdGlvbl90eXBlID09ICdhZGRfc3ViY2xzX3BhbmVsJykgeyAvL+S4u+S7juaVsOaNruexu+aJq+eggeafpeivouaVsOaNrlxuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICB2YXIgcmVzdWx0ID0gYWN0aW9uLnZhbHVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0bGV0IGxpc3RfMSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy4kZGF0YS5zdWJDbGFzc0F0dHJMaXN0KSk7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgc2NhbkNvZGVWYWwgPSAkdGhpcy4kZGF0YS5zY2FuQ29kZVZhbDtcblx0XHRcdFx0XHRcdFx0XHRcdGlmKGluZm8uaW5wdXRQYXJhbXRlclswXS5hdHRyPT1cIm1hc3RfaW5wdXRfMzAzN1wiKSAvL+WIpOaWreaYr+S4u+aVsOaNruexu+aJq+eggeafpeivouaVsOaNrlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRzY2FuQ29kZVZhbCA9IFwibWFzdF9pbnB1dF8zMDM3LVwiK2lpO1xuXHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0LnB1c2goe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRzY2FuQ29kZVZhbDpzY2FuQ29kZVZhbCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0c3ViQ2xhc3NBdHRyOmxpc3RfMVxuXHRcdFx0XHRcdFx0XHRcdFx0fSk7IFxuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBzID0gMDsgcyA8ICR0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdC5sZW5ndGg7IHMrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKCR0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdFtzXS5zY2FuQ29kZVZhbCA9PSBzY2FuQ29kZVZhbCl7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihyZXN1bHRbaV0uYXR0cj09XCJTX0lEXCIpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdFtzXS5PYmpJRD1yZXN1bHRbaV0udmFsdWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgX3N1YkNsYXNzQXR0ciA9ICR0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdFtzXS5zdWJDbGFzc0F0dHI7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBjID0gMDsgYyA8IF9zdWJDbGFzc0F0dHIubGVuZ3RoOyBjKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGF0dHIgPSBfc3ViQ2xhc3NBdHRyW2NdLkF0dHI7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKGF0dHJbal0uTmFtZSsnPT0nK3Jlc3VsdFtpXS5hdHRyKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihhdHRyW2pdLk5hbWU9PXJlc3VsdFtpXS5hdHRyKXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGF0dHJbal0uVmFsdWUgPSByZXN1bHRbaV0udmFsdWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vICR0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdFtzXS5zdWJDbGFzc0F0dHI9bGlzdF8xO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgbGVuZ3RoID0gMDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCEkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUuZmlsdGVyKGZ1bmN0aW9uIChzKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgICByZXR1cm4gcmVzdWx0W2ldLmF0dHIgPT0gcy5hdHRyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0pLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHQgICAgbGVuZ3RoID0gMTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgICR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5wdXNoKHJlc3VsdFtpXSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGxlbmd0aCA9PSAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgICBmb3IgKHZhciBqID0gMDsgaiA8ICR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHQgICAgICAgIGlmICgkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmVbal0uYXR0ciA9PSByZXN1bHRbaV0uYXR0cikge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHQgICAgICAgICAgICAkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmVbal0udmFsdWUgPSByZXN1bHRbaV0udmFsdWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgICAgICAgfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQgICAgfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgfVxuXHRcdCAgICBcdFx0XHQgICAgfVxuXHRcdCAgICBcdFx0XHR9XG5cdFx0ICAgIFx0XHRcdFxuXHRcdCAgICBcdFx0XHRpZiAoZGF0YS5yZXN1bHQpIHtcblx0XHRcdFx0XHRcdFx0bGV0IGxpc3RfMSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy4kZGF0YS5zdWJDbGFzc0F0dHJMaXN0KSk7XG5cdFx0XHRcdFx0XHRcdHZhciBzY2FuQ29kZVZhbCA9ICR0aGlzLiRkYXRhLnNjYW5Db2RlVmFsO1xuXHRcdFx0XHRcdFx0XHRpZihpbmZvLmlucHV0UGFyYW10ZXJbMF0uYXR0cj09XCJtYXN0X2lucHV0XzMwMzdcIilcblx0XHRcdFx0XHRcdFx0XHRzY2FuQ29kZVZhbCA9IFwibWFzdF9pbnB1dF8zMDM3LVwiK2lpO1xuXHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5zdWJQYW5lbExpc3QucHVzaCh7XG5cdFx0XHRcdFx0XHRcdFx0c2NhbkNvZGVWYWw6c2NhbkNvZGVWYWwsXG5cdFx0XHRcdFx0XHRcdFx0c3ViQ2xhc3NBdHRyOmxpc3RfMVxuXHRcdFx0XHRcdFx0XHR9KTsgXG5cdFx0ICAgIFx0XHRcdCAgICB2YXIgcmVzdWx0ID0gZGF0YS5yZXN1bHQ7XG5cdFx0ICAgIFx0XHRcdCAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdC5sZW5ndGg7IGkrKykge1xuXHRcdCAgICBcdFx0XHQgICAgICAgIGZvciAodmFyIHMgPSAwOyBzIDwgJHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0Lmxlbmd0aDsgcysrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZigkdGhpcy4kZGF0YS5zdWJQYW5lbExpc3Rbc10uc2NhbkNvZGVWYWwgPT0gc2NhbkNvZGVWYWwpe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZihyZXN1bHRbaV0uYXR0cj09XCJTX0lEXCIpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0W3NdLk9iaklEPXJlc3VsdFtpXS52YWx1ZTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIF9zdWJDbGFzc0F0dHIgPSAkdGhpcy4kZGF0YS5zdWJQYW5lbExpc3Rbc10uc3ViQ2xhc3NBdHRyO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBjID0gMDsgYyA8IF9zdWJDbGFzc0F0dHIubGVuZ3RoOyBjKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgYXR0ciA9IF9zdWJDbGFzc0F0dHJbY10uQXR0cjtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IGF0dHIubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKGF0dHJbal0uTmFtZSsnPT0nK3Jlc3VsdFtpXS5hdHRyKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGF0dHJbal0uTmFtZT09cmVzdWx0W2ldLmF0dHIpe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhdHRyW2pdLlZhbHVlID0gcmVzdWx0W2ldLnZhbHVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdCAgICBcdFx0XHQgICAgICAgIFx0fVxuXHRcdCAgICBcdFx0XHQgICAgICAgIH1cblx0XHQgICAgXHRcdFx0XHRcdFxuXHRcdCAgICBcdFx0XHRcdFx0dmFyIGxlbmd0aCA9IDA7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgaWYgKCEkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUuZmlsdGVyKGZ1bmN0aW9uIChzKSB7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgIHJldHVybiByZXN1bHRbaV0uYXR0ciA9PSBzLmF0dHJcblx0XHQgICAgXHRcdFx0ICAgICAgICB9KS5sZW5ndGgpIHtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgbGVuZ3RoID0gMTtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgJHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLnB1c2gocmVzdWx0W2ldKTtcblx0XHQgICAgXHRcdFx0ICAgICAgICB9XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgaWYgKGxlbmd0aCA9PSAwKSB7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgJHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLmxlbmd0aDsgaisrKSB7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICBpZiAoJHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlW2pdLmF0dHIgPT0gcmVzdWx0W2ldLmF0dHIpIHtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgICAgICAkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmVbal0udmFsdWUgPSByZXN1bHRbaV0udmFsdWU7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICB9XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgIH1cblx0XHQgICAgXHRcdFx0ICAgICAgICB9XG5cdFx0ICAgIFx0XHRcdCAgICB9XG5cdFx0ICAgIFx0XHRcdH1cblx0XHQgICAgXHRcdH1lbHNle1xuXHRcdCAgICBcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzdcIixjb250ZW50OnN1Y2Nlc3MuZXJyX21zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHQgICAgXHRcdH1cblx0XHQgICAgXHR9KS5jYXRjaChleD0+e1xuXHRcdCAgICBcdFx0Ly8gY29uc29sZS5sb2coZXgpO1xuXHRcdCAgICBcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor683LjFcIixjb250ZW50OmV4LmVyck1zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHQgICAgXHR9KTtcblx0XHQgICAgfSxcblx0XHQgICAgc2Nhbl9PS0RhdGFPYmpSdW5DdXN0b21FdmVudChldmVudElEKXtcblx0XHRcdFx0dW5pLnNob3dMb2FkaW5nKHtcblx0XHRcdFx0XHR0aXRsZTpcIuWKoOi9veS4rS4uLlwiLFxuXHRcdFx0XHRcdG1hc2s6dHJ1ZVxuXHRcdFx0XHR9KTtcblx0XHRcdFx0dmFyICR0aGlzID0gdGhpcztcblx0XHRcdFx0dmFyIHJlcT1bXTtcblx0XHRcdFx0dmFyIGF0dHJsaXN0ID0gJHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdDtcblx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhdHRybGlzdC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdHZhciBhdHRyID0gYXR0cmxpc3RbaV0uQXR0cjtcblx0XHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IGF0dHIubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0XHRcdHZhciBhciA9IGF0dHJbal07XG5cdFx0XHRcdFx0XHRpZihhci5WYWx1ZT09J+ivt+mAieaLqScgfHwgYXIuVmFsdWU9PSfigJTigJTor7fpgInmi6nigJTigJQnKSBhci5WYWx1ZT0nJztcblx0XHRcdFx0XHRcdGlmKGFyLlR5cGU9PSflvJXnlKjlr7nosaEo5aSa5LiqKScpXG5cdFx0XHRcdFx0XHRcdGlmKGFyLlZhbHVlPT0n6K+3JykgYXIuVmFsdWU9Jyc7XG5cdFx0XHRcdFx0XHRpZihhci5UeXBlPT0n5byV55So5Lq65ZGYJyB8fCBhci5UeXBlPT0n5byV55So6aG555uuJylcblx0XHRcdFx0XHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsSUQgP2FyLlZhbElEIDonJyB9KTtcblx0XHRcdFx0XHRcdGVsc2UgaWYoYXIuVHlwZT09J+W4g+WwlOWAvCcpXG5cdFx0XHRcdFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsdWU6IGFyLlZhbHVlPycxJzonMCd9KTtcblx0XHRcdFx0XHRcdGVsc2UgaWYoYXIuVHlwZT09J+Wtl+WFuCcgfHwgYXIuVHlwZT09J+Wtl+WFuC3lrZfnrKbkuLInIHx8IGFyLlR5cGU9PSflrZflhbgt5pW05pWwJyl7XG5cdFx0XHRcdFx0XHRcdGlmKGFyLnNlbGVjdD09dHJ1ZSl7IC8v5Yik5pat5LiL5ouJ5piv5ZCm5aSa6YCJXG5cdFx0XHRcdFx0XHRcdFx0dmFyIHZhbFN0ciA9XCJcIjtcblx0XHRcdFx0XHRcdFx0XHRmb3IodmFyIHYgaW4gYXIuVmFsdWUpe1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYodmFsU3RyKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YWxTdHIrPVwiO1wiO1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFsU3RyKz1hci5WYWx1ZVt2XTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogdmFsU3RyfSk7XG5cdFx0XHRcdFx0XHRcdH1lbHNlXG5cdFx0XHRcdFx0XHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsdWV9KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsdWUgP2FyLlZhbHVlIDonJ30pO1xuXHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdGlmIChhci5ub3RlbXB0eSA9PSB0cnVlICYmICFhci5WYWx1ZSkge1xuXHRcdFx0XHRcdFx0Ly8gaWYoYXIuTm90RW1wdHk9PScxJyl7XG5cdFx0XHRcdFx0XHRcdHVuaS5oaWRlTG9hZGluZygpO1xuXHRcdFx0XHRcdFx0XHQvLyB1bmkuc2hvd1RvYXN0KHt0aXRsZTphci5EaXNwTmFtZSsn5LiN6IO95Li656m677yBJyxpY29uOlwic3VjY2Vzc1wiLGR1cmF0aW9uOjMwMDB9KTtcblx0XHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLmj5DnpLpcIixjb250ZW50OmFyLkRpc3BOYW1lKyfkuI3og73kuLrnqbrvvIEnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHZhciBvYmplY3RzPVtdO1xuXHRcdFx0XHR2YXIgc3ViUGFuZWxMaXN0ID0gJHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0O1xuXHRcdFx0XHRmb3IgKHZhciBzID0gMDsgcyA8IHN1YlBhbmVsTGlzdC5sZW5ndGg7IHMrKykge1xuXHRcdFx0XHRcdHZhciBzdWJfcmVxPVtdO1xuXHRcdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgc3ViUGFuZWxMaXN0W3NdLnN1YkNsYXNzQXR0ci5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdFx0dmFyIGF0dHIgPSBzdWJQYW5lbExpc3Rbc10uc3ViQ2xhc3NBdHRyW2ldLkF0dHI7XG5cdFx0XHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IGF0dHIubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0XHRcdFx0dmFyIGFyID0gYXR0cltqXTtcblx0XHRcdFx0XHRcdFx0aWYoYXIuVmFsdWU9PSfor7fpgInmi6knIHx8IGFyLlZhbHVlPT0n4oCU4oCU6K+36YCJ5oup4oCU4oCUJykgYXIuVmFsdWU9Jyc7XG5cdFx0XHRcdFx0XHRcdGlmKGFyLlR5cGU9PSflvJXnlKjlr7nosaEo5aSa5LiqKScpXG5cdFx0XHRcdFx0XHRcdFx0aWYoYXIuVmFsdWU9PSfor7cnKSBhci5WYWx1ZT0nJztcblx0XHRcdFx0XHRcdFx0aWYoYXIuVHlwZT09J+W8leeUqOS6uuWRmCcgfHwgYXIuVHlwZT09J+W8leeUqOmhueebricpXG5cdFx0XHRcdFx0XHRcdFx0c3ViX3JlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsdWU6IGFyLlZhbElEID9hci5WYWxJRCA6JycgfSk7XG5cdFx0XHRcdFx0XHRcdGVsc2UgaWYoYXIuVHlwZT09J+W4g+WwlOWAvCcpXG5cdFx0XHRcdFx0XHRcdFx0c3ViX3JlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsdWU6IGFyLlZhbHVlPycxJzonMCd9KTtcblx0XHRcdFx0XHRcdFx0ZWxzZSBpZihhci5UeXBlPT0n5a2X5YW4JyB8fCBhci5UeXBlPT0n5a2X5YW4LeWtl+espuS4sicgfHwgYXIuVHlwZT09J+Wtl+WFuC3mlbTmlbAnKXtcblx0XHRcdFx0XHRcdFx0XHRpZihhci5zZWxlY3Q9PXRydWUpeyAvL+WIpOaWreS4i+aLieaYr+WQpuWkmumAiVxuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIHZhbFN0ciA9XCJcIjtcblx0XHRcdFx0XHRcdFx0XHRcdGZvcih2YXIgdiBpbiBhci5WYWx1ZSl7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmKHZhbFN0cilcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YWxTdHIrPVwiO1wiO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YWxTdHIrPWFyLlZhbHVlW3ZdO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0c3ViX3JlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsdWU6IHZhbFN0cn0pO1xuXHRcdFx0XHRcdFx0XHRcdH1lbHNlXG5cdFx0XHRcdFx0XHRcdFx0XHRzdWJfcmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsdWV9KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHRcdFx0c3ViX3JlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsdWU6IGFyLlZhbHVlID9hci5WYWx1ZSA6Jyd9KTtcblx0XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0aWYgKGFyLm5vdGVtcHR5ID09IHRydWUgJiYgIWFyLlZhbHVlKSB7XG5cdFx0XHRcdFx0XHRcdC8vIGlmKGFyLk5vdEVtcHR5PT0nMScpe1xuXHRcdFx0XHRcdFx0XHRcdHVuaS5oaWRlTG9hZGluZygpO1xuXHRcdFx0XHRcdFx0XHRcdC8vIHVuaS5zaG93VG9hc3Qoe3RpdGxlOmFyLkRpc3BOYW1lKyfkuI3og73kuLrnqbrvvIEnLGljb246XCJzdWNjZXNzXCIsZHVyYXRpb246MzAwMH0pO1xuXHRcdFx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi5o+Q56S6XCIsY29udGVudDphci5EaXNwTmFtZSsn5LiN6IO95Li656m677yBJyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0b2JqZWN0cy5wdXNoKHtcblx0XHRcdFx0XHRcdG9ial9pZDpzdWJQYW5lbExpc3Rbc10uc2NhbkNvZGVWYWwsXG5cdFx0XHRcdFx0XHRvYmpfYXR0cnM6c3ViX3JlcVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHZhciBkYXRhSnNvbj17XG5cdFx0XHRcdFx0bWFzdGVyX2Nsczp7XG5cdFx0XHRcdFx0XHRjbHNfbmFtZTonTUJPWCcsLy8kdGhpcy4kZGF0YS5wYXJhbS5NYXN0ZXJfQ2xzLk5hbWUsXG5cdFx0XHRcdFx0XHRvYmpfYXR0cnM6cmVxXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRpbnB1dF8zMDM3OiR0aGlzLiRkYXRhLnNjYW5Db2RlVmFsLCAgIC8v5omr56CB5YaF5a65XG5cdFx0XHRcdFx0b3BfdHlwZTokdGhpcy4kZGF0YS5wYXJhbS5PcGVyYXRpb25UeXBlLCAvL+S9nOS4muexu+Wei+WumuS5iVxuXHRcdFx0XHRcdHN1Yl9jbHM6e1xuXHRcdFx0XHRcdFx0Y2xzX25hbWU6J01CT1gnLC8vJHRoaXMuJGRhdGEucGFyYW0uU3ViX0Nscy5OYW1lLFxuXHRcdFx0XHRcdFx0b2JqZWN0czpvYmplY3RzXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9O1xuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShkYXRhSnNvbikpO1xuXHRcdCAgIC8vICBcdHZhciBkYXRhSW5mbyA9IHtcblx0XHQgICAvLyAgICAgICAgICBlZHR5cGU6IFwiN1wiLCBldmVudGlkOiBldmVudElELCBwcm9qZWN0aWQ6ICcnLHJjbHNpZDogJycsIHJvYmppZDogJycsIHVzZXJsb2dpbjogJycsIFxuXHRcdFx0XHRcdC8vIGNsc2lkOiAnTUJPWCcsIG9iamlkOiAnJyxhdHRyOiBKU09OLnN0cmluZ2lmeShbXSksIGV4dGluZm86IEpTT04uc3RyaW5naWZ5KFtdKSwgXG5cdFx0XHRcdFx0Ly8gZ2xvYmFsX2F0dHI6IEpTT04uc3RyaW5naWZ5KCR0aGlzLiRkYXRhLmdsb2JhbF9hdHRyKSxkYXRhSnNvbjpKU09OLnN0cmluZ2lmeShkYXRhSnNvbilcblx0XHQgICAvLyAgICAgIH1cblx0XHRcdFx0Ly8gY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoZGF0YUluZm8pKTtcblx0XHQgICAgXHR2YXIgZGF0YUpzb24gPSBCYXNlNjQuZW5jb2RlKEpTT04uc3RyaW5naWZ5KGRhdGFKc29uKSk7Ly/lsIblrZfnrKbkuLLovazmjaLkuLpiYXNlNjTnvJbnoIFcblx0XHQgICAgXHR2YXIgZ2xvYmFsX2F0dHIgPSBCYXNlNjQuZW5jb2RlKEpTT04uc3RyaW5naWZ5KHRoaXMuJGRhdGEuZ2xvYmFsX2F0dHIpKTsvL+WwhuWtl+espuS4sui9rOaNouS4umJhc2U2NOe8lueggVxuXHRcdCAgICBcdGlmKCFldmVudElELmluY2x1ZGVzKCd7JykpIGV2ZW50SUQ9ICd7JysgZXZlbnRJRCArJ30nO1xuXHRcdCAgICBcdHZhciBkYXRhSW5mbz17XG5cdFx0ICAgIFx0ICBlZF90eXBlOiBcIjdcIixcblx0XHQgICAgXHQgIHN0YXJ0X3RyYW5zYWN0aW9uOiAnJyxcblx0XHQgICAgXHQgIGNsYXNzX2lkOiAnTUJPWCcsXG5cdFx0ICAgIFx0ICBjbGFzc19uYW1lOiAnJyxcblx0XHQgICAgXHQgIGV2ZW50X2lkOiBldmVudElELFxuXHRcdCAgICBcdCAgZXZlbnRfbmFtZTogJycsXG5cdFx0ICAgIFx0ICBkYXRhX29ial9pZDogJycsXG5cdFx0ICAgIFx0ICBvYmpfYXR0cjogJycsXG5cdFx0ICAgIFx0ICBwcmpfaWQ6ICcnLFxuXHRcdCAgICBcdCAgcmVmX2Nsc19pZDogJycsXG5cdFx0ICAgIFx0ICByZWxfb2JqX2lkOiAnJyxcblx0XHQgICAgXHQgIHVzZXJfbG9naW46ICcnLFxuXHRcdCAgICBcdCAgZGF0YV9qc29uOiBkYXRhSnNvbixcblx0XHQgICAgXHQgIGNvbXBvc2VfaW5mbzogJycsXG5cdFx0ICAgIFx0ICBleHRfaW5mbzogJycsXG5cdFx0ICAgIFx0ICBnbG9iYWxfYXR0cjogZ2xvYmFsX2F0dHIsXG5cdFx0ICAgIFx0ICBpbnB1dF9wYXJhbTogJycsXG5cdFx0ICAgIFx0fTtcblx0XHQgICAgXHRjb25zb2xlLmxvZyhkYXRhSW5mbyk7XG5cdFx0ICAgIFx0Ly8gcmV0dXJuO1xuXHRcdCAgICBcdHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdydW5DdXN0b21FdmVudCcsZGF0YUluZm8pLnRoZW4oc3VjY2Vzcz0+e1xuXHRcdCAgICBcdFx0Y29uc29sZS5sb2coc3VjY2Vzcyk7XG5cdFx0XHRcdFx0dW5pLmhpZGVMb2FkaW5nKCk7XG5cdFx0ICAgIFx0XHRpZiAoc3VjY2Vzcy5lcnJfY29kZSA9PSAwKSB7XG5cdFx0ICAgIFx0XHRcdHZhciBkYXRhID0gc3VjY2Vzcy5yZXN1bHQ7XHRcdFxuXHRcdCAgICBcdFx0XHR2YXIgcmVzdWx0ID0gZGF0YS5yZXN1bHQ7XG5cdFx0ICAgIFx0XHRcdGlmKGV2ZW50SUQgIT0gJHRoaXMuJGRhdGEucGFyYW0uQWZ0ZXJfT0tfRXZlbnQuSUQpXG5cdFx0ICAgIFx0XHRcdFx0JHRoaXMuc2Nhbl9PS0RhdGFPYmpSdW5DdXN0b21FdmVudCgkdGhpcy4kZGF0YS5wYXJhbS5BZnRlcl9PS19FdmVudC5JRCk7XG5cdFx0XHRcdFx0XHRlbHNle1xuXHRcdFx0XHRcdFx0XHQvL+WIt+aWsFxuXHRcdFx0XHRcdFx0XHR1bmkucmVkaXJlY3RUbyh7XG5cdFx0XHRcdFx0XHRcdFx0dXJsOicuLi9tb2RhbC8zMDM3P3BhcmFtPScrSlNPTi5zdHJpbmdpZnkoJHRoaXMuJGRhdGEucGFyYW0pK1wiJnRpdGxlbmFtZT1cIiskdGhpcy4kZGF0YS50aXRsZVxuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH1cblx0XHQgICAgXHRcdH1lbHNle1xuXHRcdCAgICBcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzhcIixjb250ZW50OnN1Y2Nlc3MuZXJyX21zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHQgICAgXHRcdH1cblx0XHQgICAgXHR9KS5jYXRjaChleD0+e1xuXHRcdCAgICBcdFx0Ly8gY29uc29sZS5sb2coZXgpO1xuXHRcdFx0XHRcdHVuaS5oaWRlTG9hZGluZygpO1xuXHRcdCAgICBcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor684LjFcIixjb250ZW50OmV4LmVyck1zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHQgICAgXHR9KTtcblx0XHQgICAgfSxcblx0XHQgICAgXG5cdFx0XHRcblx0XHR9XG5cdH1cbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///115\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 */ 65));\nvar _pickerAddress = _interopRequireDefault(__webpack_require__(/*! ../../js/pickerAddress/pickerAddress.vue */ 80));\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\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  components: {\n    pickerAddress: _pickerAddress.default\n  },\n  data: function data() {\n    return {\n      title: '新增',\n      param: {},\n      classAttrList: [],\n      classGridStyle: [],\n      edit_inital_event: \"\",\n      //弹窗初始化事件ID\n      edit_ok_event: \"\",\n      //弹窗点击OK 触发事件ID\n      edit_select_compose_event: \"\",\n      //选择组成对象时调用\n      edit_compose_cls_id: \"\",\n      global_attr: [],\n      refdatastore: [],\n      //引用数据存储区// {attr:'G_PRJ_' + bindattr + '_ID', value:info.id}\n      scanCodeVal: \"\",\n      subClassAttrList: [],\n      subPanelList: [],\n      subClassGridStyle: [],\n      popupType: \"center\",\n      check_list: {}\n    };\n  },\n  onLoad: function onLoad(options) {\n    // console.log(options);\n    uni.setNavigationBarTitle({\n      title: options.titlename\n    }); //设置顶部标题 \n    var param = JSON.parse(options.param);\n    this.$data.title = param.Add_BtnName ? param.Add_BtnName : options.titlename; //设置按钮文字\n    __f__(\"log\", param, \" at pages/modal/3037.vue:736\");\n    if (!param.Master_Cls.View_Style) {\n      uni.showModal({\n        title: \"提示\",\n        content: \"该功能点未配置界面窗口,请重新配置!\",\n        showCancel: false,\n        confirmText: \"取消\"\n      });\n      return;\n    }\n    if (!param.Master_Cls.View_Style.Name) {\n      uni.showModal({\n        title: \"提示\",\n        content: \"该功能点未配置窗口样式,请重新配置!\",\n        showCancel: false,\n        confirmText: \"取消\"\n      });\n      return;\n    }\n    this.$data.param = param;\n    // var edit_dlg = {\n    //     Model: param.EditDlgMode,\n    //     Name: param.Master_Cls.View_Style.Name\n    // }\n    //主数据类获取\n    var dataInfo = {\n      class_id: param.Master_Cls.ID\n    };\n    var $this = this;\n    $this.$store.state.thisareaFuncID = param.Master_Cls.ID;\n    // console.log($this.$store.getters.getclassAttrList);\n    if ($this.$store.getters.getclassAttrList) {\n      $this.$data.classAttrList = $this.$store.getters.getclassAttrList;\n      $this.classGridStyleInfo(param.Master_Cls.ID, $this.$data.param.Master_Cls.View_Style.Name, 'Mast');\n    } else {\n      $this.$store.dispatch('classAttrGetList', dataInfo).then(function (success) {\n        // console.log(success);\n        if (success.err_code == 0) {\n          $this.$data.classAttrList = success.result;\n          success.result.forEach( /*#__PURE__*/function () {\n            var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(group, index) {\n              return _regenerator.default.wrap(function _callee2$(_context2) {\n                while (1) {\n                  switch (_context2.prev = _context2.next) {\n                    case 0:\n                      group.attr_list.forEach( /*#__PURE__*/function () {\n                        var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(attr, key) {\n                          return _regenerator.default.wrap(function _callee$(_context) {\n                            while (1) {\n                              switch (_context.prev = _context.next) {\n                                case 0:\n                                  if (!(attr.type == \"字典-字符串\" || attr.type == \"字典-整数\")) {\n                                    _context.next = 3;\n                                    break;\n                                  }\n                                  _context.next = 3;\n                                  return $this.DictItemGetList(attr, key, index, 'mast');\n                                case 3:\n                                case \"end\":\n                                  return _context.stop();\n                              }\n                            }\n                          }, _callee);\n                        }));\n                        return function (_x3, _x4) {\n                          return _ref2.apply(this, arguments);\n                        };\n                      }());\n                    case 1:\n                    case \"end\":\n                      return _context2.stop();\n                  }\n                }\n              }, _callee2);\n            }));\n            return function (_x, _x2) {\n              return _ref.apply(this, arguments);\n            };\n          }());\n          setTimeout(function () {\n            $this.classGridStyleInfo(param.Master_Cls.ID, $this.$data.param.Master_Cls.View_Style.Name, 'Mast');\n          }, 500);\n        } else {\n          uni.showModal({\n            title: \"错误1\",\n            content: success.err_msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        // console.log(ex);\n        uni.showModal({\n          title: \"错误1.1\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\n    }\n\n    //从数据类获取\n    var subdataInfo = {\n      class_id: param.Sub_Cls.ID\n    };\n    $this.$store.state.thisareaFuncSubID = param.Sub_Cls.ID;\n    if ($this.$store.getters.getSubClassAttrList) {\n      $this.$data.subClassAttrList = $this.$store.getters.getSubClassAttrList;\n      $this.classGridStyleInfo(param.Sub_Cls.ID, $this.$data.param.Sub_Cls.View_Style.Name, 'Sub');\n    } else {\n      $this.$store.dispatch('subClassAttrGetList', subdataInfo).then(function (success) {\n        // console.log(success);\n        if (success.err_code == 0) {\n          $this.$data.subClassAttrList = success.result;\n          success.result.forEach( /*#__PURE__*/function () {\n            var _ref3 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4(group, index) {\n              return _regenerator.default.wrap(function _callee4$(_context4) {\n                while (1) {\n                  switch (_context4.prev = _context4.next) {\n                    case 0:\n                      group.attr_list.forEach( /*#__PURE__*/function () {\n                        var _ref4 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3(attr, key) {\n                          return _regenerator.default.wrap(function _callee3$(_context3) {\n                            while (1) {\n                              switch (_context3.prev = _context3.next) {\n                                case 0:\n                                  if (!(attr.type == \"字典-字符串\" || attr.type == \"字典-整数\")) {\n                                    _context3.next = 3;\n                                    break;\n                                  }\n                                  _context3.next = 3;\n                                  return $this.DictItemGetList(attr, key, index, 'sub');\n                                case 3:\n                                case \"end\":\n                                  return _context3.stop();\n                              }\n                            }\n                          }, _callee3);\n                        }));\n                        return function (_x7, _x8) {\n                          return _ref4.apply(this, arguments);\n                        };\n                      }());\n                    case 1:\n                    case \"end\":\n                      return _context4.stop();\n                  }\n                }\n              }, _callee4);\n            }));\n            return function (_x5, _x6) {\n              return _ref3.apply(this, arguments);\n            };\n          }());\n          setTimeout(function () {\n            $this.classGridStyleInfo(param.Sub_Cls.ID, $this.$data.param.Sub_Cls.View_Style.Name, 'Sub');\n          }, 500);\n        } else {\n          uni.showModal({\n            title: \"错误1_1\",\n            content: success.err_msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        // console.log(ex);\n        uni.showModal({\n          title: \"错误1_1.1\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\n    }\n  },\n  methods: {\n    DictItemGetList: function DictItemGetList(attr, key, index, type) {\n      var _this = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee6() {\n        var $this, dataInfo;\n        return _regenerator.default.wrap(function _callee6$(_context6) {\n          while (1) {\n            switch (_context6.prev = _context6.next) {\n              case 0:\n                //Mobox3得到字典项列表\n                _this.data = [];\n                $this = _this;\n                dataInfo = {\n                  dict_id: attr.dict_id,\n                  dict_name: attr.dict_name\n                }; // console.log(dataInfo);\n                _this.$store.dispatch('DictItemGetList', dataInfo).then( /*#__PURE__*/function () {\n                  var _ref5 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee5(success) {\n                    return _regenerator.default.wrap(function _callee5$(_context5) {\n                      while (1) {\n                        switch (_context5.prev = _context5.next) {\n                          case 0:\n                            // console.log(success);\n                            if (success.err_code == 0) {\n                              if (type == 'mast') {\n                                $this.$data.classAttrList[index].attr_list[key].dictitem = success.result;\n                                _this.$store.commit(\"classAttrList\", $this.$data.classAttrList);\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: \"错误1.2\",\n                                content: success.err_msg,\n                                showCancel: false,\n                                confirmText: \"取消\"\n                              });\n                            }\n                          case 1:\n                          case \"end\":\n                            return _context5.stop();\n                        }\n                      }\n                    }, _callee5);\n                  }));\n                  return function (_x9) {\n                    return _ref5.apply(this, arguments);\n                  };\n                }()).catch(function (ex) {\n                  // console.log(ex);\n                  uni.showModal({\n                    title: \"错误1.3\",\n                    content: ex.errMsg,\n                    showCancel: false,\n                    confirmText: \"取消\"\n                  });\n                });\n              case 4:\n              case \"end\":\n                return _context6.stop();\n            }\n          }\n        }, _callee6);\n      }))();\n    },\n    classGridStyleInfo: function classGridStyleInfo(clsid, styleName, clsType) {\n      var _this2 = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee7() {\n        var $this, gridstyleInfo;\n        return _regenerator.default.wrap(function _callee7$(_context7) {\n          while (1) {\n            switch (_context7.prev = _context7.next) {\n              case 0:\n                $this = _this2;\n                gridstyleInfo = {\n                  class_id: clsid,\n                  ui_style_type: 2,\n                  ui_style_name: styleName\n                }; // console.log($this.$store.getters.getclassGridStyleInfo);\n                //获取主数据类界面样式\n                if (clsType == 'Mast') {\n                  $this.$store.state.thisEditName = styleName;\n                  if ($this.$store.getters.getclassGridStyleInfo) {\n                    $this.$data.classGridStyle = $this.$store.getters.getclassGridStyleInfo;\n                    $this.viewParam('Mast');\n                  } else {\n                    //console.log(gridstyleInfo);\n                    $this.$store.dispatch('UIStyleGetInfo', gridstyleInfo).then(function (success) {\n                      // console.log(success);\n                      if (success.err_code == 0) {\n                        var styledef = _base.default.decode(success.result.style_def);\n                        success.result.style_def = JSON.parse(styledef);\n                        $this.$data.classGridStyle = success.result;\n                        // console.log($this.$data.classGridStyle);\n\n                        $this.viewParam('Mast');\n                      } else {\n                        uni.showModal({\n                          title: \"错误1.2\",\n                          content: success.err_msg,\n                          showCancel: false,\n                          confirmText: \"取消\"\n                        });\n                      }\n                    }).catch(function (ex) {\n                      __f__(\"log\", ex, \" at pages/modal/3037.vue:873\");\n                      uni.showModal({\n                        title: \"错误1.3\",\n                        content: ex.errMsg,\n                        showCancel: false,\n                        confirmText: \"取消\"\n                      });\n                    });\n                  }\n                } else if (clsType == 'Sub') {\n                  //获取从数据类界面样式\n                  $this.$store.state.thisEditSubName = styleName;\n                  if ($this.$store.getters.getSubClassGridStyleInfo) {\n                    $this.$data.subClassGridStyle = $this.$store.getters.getSubClassGridStyleInfo;\n                    $this.viewParam('Sub');\n                  } else {\n                    //console.log(gridstyleInfo);\n                    $this.$store.dispatch('UIStyleGetInfo', gridstyleInfo).then(function (success) {\n                      // console.log(success);\n                      if (success.err_code == 0) {\n                        var styledef = _base.default.decode(success.result.style_def);\n                        success.result.style_def = JSON.parse(styledef);\n                        $this.$data.subClassGridStyle = success.result;\n                        // console.log($this.$data.subClassGridStyle);\n\n                        $this.viewParam('Sub');\n\n                        // $this.subClass_attr_init();\n                      } else {\n                        uni.showModal({\n                          title: \"错误1.2\",\n                          content: success.err_msg,\n                          showCancel: false,\n                          confirmText: \"取消\"\n                        });\n                      }\n                    }).catch(function (ex) {\n                      __f__(\"log\", ex, \" at pages/modal/3037.vue:899\");\n                      uni.showModal({\n                        title: \"错误1.3\",\n                        content: ex.errMsg,\n                        showCancel: false,\n                        confirmText: \"取消\"\n                      });\n                    });\n                  }\n                }\n              case 3:\n              case \"end\":\n                return _context7.stop();\n            }\n          }\n        }, _callee7);\n      }))();\n    },\n    viewParam: function viewParam(type) {\n      //将mobox3小写参数转换为mobox2大写参数\n      var classGridStyle = '';\n      var classAttrList = '';\n      if (type == 'Mast') {\n        classGridStyle = this.$data.classGridStyle;\n        classAttrList = this.$data.classAttrList;\n      } else if (type == 'Sub') {\n        classGridStyle = this.$data.subClassGridStyle;\n        classAttrList = this.$data.subClassAttrList;\n      }\n      var class_gridStyle = {\n        ID: classGridStyle.id,\n        Name: classGridStyle.name,\n        Type: classGridStyle.type,\n        IsDefault: classGridStyle.is_defaul,\n        StyleDef: classGridStyle.style_def\n      };\n      var class_attrList = [];\n      classAttrList.forEach(function (data) {\n        var attrs = [];\n        if (data.attr_list) {\n          data.attr_list.forEach(function (attr) {\n            var dictitems = [];\n            if (attr.dictitem) {\n              attr.dictitem.forEach(function (dict) {\n                dictitems.push({\n                  ID: dict.id,\n                  Name: dict.name,\n                  Note: dict.note,\n                  Order: dict.order,\n                  ImgUrl: null,\n                  Code: dict.code,\n                  HasSub: null,\n                  ParentID: null,\n                  ParentName: null,\n                  Lvl: dict.lvl,\n                  IsDefault: dict.is_default,\n                  Value: dict.value,\n                  CN_G_ID: dict.id,\n                  CN_G_DICT_ID: null,\n                  CN_S_NAME: dict.name,\n                  CN_S_NOTE: dict.note,\n                  CN_N_ORDER: dict.order,\n                  CN_S_IMG_URL: null,\n                  CN_S_CODE: dict.code,\n                  CN_C_HAS_SUB: null,\n                  CN_G_PARENT_ITEM_ID: null,\n                  CN_G_PARENT_ITEM_NAME: null,\n                  CN_N_LVL: dict.lvl,\n                  CN_C_IS_DEFAULT: dict.is_default,\n                  CN_S_VALUE: dict.value\n                });\n              });\n            }\n            attrs.push({\n              ID: attr.id,\n              Name: attr.name,\n              Type: attr.type,\n              Size: attr.size,\n              NotEmpty: attr.not_empty,\n              DefValue: attr.def_value,\n              Order: attr.order,\n              DictName: attr.dict_name,\n              DictID: attr.dict_id,\n              CodeDefName: attr.code_def_name,\n              CodeDefID: attr.code_def_id,\n              RelClsID: null,\n              RelCls: attr.ref_cls,\n              Width: attr.width,\n              Height: attr.height,\n              CtrlStyle: attr.ctrl_style,\n              HasAce: attr.has_ace,\n              CanShow: attr.can_show,\n              CanQuery: attr.can_query,\n              ReadOnly: attr.read_only,\n              IsKey: attr.is_key,\n              IsFixed: attr.is_fixed,\n              DispName: attr.disp_name,\n              LuaAttr: attr.lua_attr,\n              Desc: attr.desc,\n              ActionDef: attr.action_def ? _base.default.decode(attr.action_def) : '',\n              Multilingual: attr.multilingual,\n              RefCondition: attr.ref_condition,\n              GroupName: data.group,\n              Value: null,\n              dictitem: dictitems\n            });\n          });\n        }\n        class_attrList.push({\n          Name: data.group,\n          Order: data.order,\n          HasAce: data.has_ace,\n          BkColor: data.bk_color,\n          ImgFontStyle: data.img_font_style,\n          Attr: attrs\n        });\n      });\n      if (type == 'Mast') {\n        this.$data.classGridStyle = class_gridStyle;\n        this.$data.classAttrList = class_attrList;\n        // console.log('------Mast--------');\n        // console.log(this.$data.classGridStyle);\n        // console.log(this.$data.classAttrList);\n        this.class_attr_init();\n      } else if (type == 'Sub') {\n        this.$data.subClassGridStyle = class_gridStyle;\n        this.$data.subClassAttrList = class_attrList;\n        // console.log('------Sub--------');\n        // console.log(this.$data.subClassGridStyle);\n        // console.log(this.$data.subClassAttrList);\n        this.subClass_attr_init();\n      }\n    },\n    class_attr_init: function class_attr_init() {\n      var attrlist = this.$data.classGridStyle.StyleDef.show_style;\n      var newattrlist = [];\n      if (this.$data.classAttrList.length > 0) {\n        for (var i = 0; i < attrlist.length; i++) {\n          var open = attrlist[i].open;\n          var name = attrlist[i].attrgroup_name;\n          var attrs = attrlist[i].attrs;\n          for (var s = 0; s < this.$data.classAttrList.length; s++) {\n            var clsattr = this.$data.classAttrList[s];\n            if (name == clsattr.Name) {\n              var attr = [];\n              for (var j = 0; j < attrs.length; j++) {\n                for (var l = 0; l < clsattr.Attr.length; l++) {\n                  var ca = clsattr.Attr[l];\n                  if (attrs[j].attr == ca.Name) {\n                    ca.action = attrs[j].action;\n                    ca.edit = attrs[j].edit;\n                    ca.notempty = attrs[j].notempty;\n                    ca.ext_button = attrs[j].ext_button;\n                    ca.button_img = attrs[j].button_img;\n                    ca.button_tooltip = attrs[j].button_tooltip;\n                    ca.before_click_button = attrs[j].before_click_button;\n                    ca.button_callback = attrs[j].button_callback;\n                    ca.hidden = attrs[j].hidden;\n                    ca.select = attrs[j].select == undefined ? false : attrs[j].select;\n                    ca.Value = \"\";\n                    if (ca.dictitem.length > 0) {\n                      if (ca.select == true) ca.Value = []; //ca.dictitem[0].CN_S_NAME;\n                      else ca.Value = '请选择'; //ca.dictitem[0].CN_S_NAME;\n                      var dictitemlist = [];\n                      for (var d = 0; d < ca.dictitem.length; d++) {\n                        ca.dictitem[d].label = ca.dictitem[d].CN_S_NAME;\n                        ca.dictitem[d].value = ca.dictitem[d].CN_S_NAME;\n                        ca.dictitem[d].attr = ca.Name;\n                        if (ca.dictitem[d].CN_C_IS_DEFAULT == '1') ca.Value = ca.dictitem[d].CN_S_NAME;\n                      }\n                    }\n                    if (ca.Type == '日期' || ca.Type == '时间') {\n                      var nowDate = new Date();\n                      var date = {\n                        year: nowDate.getFullYear(),\n                        month: nowDate.getMonth() + 1,\n                        day: nowDate.getDate()\n                      };\n                      ca.Value = date.year + '-' + (date.month >= 10 ? date.month : '0' + date.month) + '-' + (date.day >= 10 ? date.day : '0' + date.day);\n                    }\n                    if (ca.Type == '引用对象(多个)') {\n                      ca.RelClsList = ca.RelCls;\n                      ca.Value = '请';\n                    }\n                    if (ca.Type == '省市区') ca.Value = '请选择';\n                    if (ca.Type == '布尔值') ca.Value = false;\n                    attr.push(ca);\n                  }\n                }\n              }\n              newattrlist.push({\n                BkColor: clsattr.BkColor,\n                HasAce: clsattr.HasAce,\n                ImgFontStyle: clsattr.ImgFontStyle,\n                Name: clsattr.Name,\n                Order: clsattr.Order,\n                Open: open,\n                Attr: attr,\n                control_style: this.$data.classGridStyle.StyleDef.control_style,\n                title_p_wdith: this.$data.classGridStyle.StyleDef.title_p_wdith,\n                Font: this.$data.classGridStyle.StyleDef.Font ? this.$data.classGridStyle.StyleDef.Font : {},\n                Bk_Color: this.$data.classGridStyle.StyleDef.Bk_Color ? this.$data.classGridStyle.StyleDef.Bk_Color : '#FFFFFF',\n                Text_Color: this.$data.classGridStyle.StyleDef.Text_Color ? this.$data.classGridStyle.StyleDef.Text_Color : '#000000'\n              });\n            }\n          }\n        }\n        if (newattrlist.length > 0) {\n          this.$data.classAttrList = newattrlist;\n        }\n        var req = [];\n        if (this.$data.classGridStyle.StyleDef) {\n          if (this.$data.classGridStyle.StyleDef.show_style.length > 0) {\n            var attrlist = this.$data.classGridStyle.StyleDef.show_style;\n            // $el.find('.attr_field').prop('readonly', true);\n            // $el.find('.attr_field').prop('disabled', true);\n            for (var i = 0; i < attrlist.length; i++) {\n              var attr = attrlist[i].attrs;\n              for (var j = 0; j < attr.length; j++) {\n                var ar = attr[j];\n                req.push({\n                  attr: ar.attr,\n                  value: ar.value ? ar.value : ''\n                });\n              }\n            }\n          }\n        }\n        var eventlist = this.$data.classGridStyle.StyleDef.event;\n        if (eventlist) {\n          if (eventlist.length > 0) {\n            for (var i = 0; i < eventlist.length; i++) {\n              if (eventlist[i].event_id == 'before_ok') {\n                this.$data.edit_ok_event = eventlist[i];\n              } else if (eventlist[i].event_id == 'initial') {\n                this.$data.edit_inital_event = eventlist[i];\n              } else if (eventlist[i].event_id == 'before_select_compose') {\n                this.$data.edit_select_compose_event = eventlist[i].scrip_id;\n                this.$data.edit_compose_cls_id = eventlist[i].compose_cls_id;\n              }\n            }\n          }\n        }\n        // console.log(req);\n        if (this.$data.edit_inital_event) {\n          var eventid = this.$data.edit_inital_event.scrip_id;\n          var info = {\n            eventid: eventid,\n            edtype: \"0\",\n            projectid: '',\n            rclsid: '',\n            robjid: '',\n            userlogin: '',\n            clsid: this.$data.param.Master_Cls.ID,\n            objid: \"\",\n            attr: req\n          };\n          this.ini_DataObjRunCustomEvent(info);\n        }\n        __f__(\"log\", this.$data.classGridStyle, \" at pages/modal/3037.vue:1146\");\n        __f__(\"log\", this.$data.classAttrList, \" at pages/modal/3037.vue:1147\");\n      } else {\n        uni.showModal({\n          title: \"提示\",\n          content: \"未找到可显示的的属性\",\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      }\n    },\n    subClass_attr_init: function subClass_attr_init() {\n      var attrlist = this.$data.subClassGridStyle.StyleDef.show_style;\n      var newattrlist = [];\n      if (this.$data.subClassAttrList.length > 0) {\n        for (var i = 0; i < attrlist.length; i++) {\n          var open = attrlist[i].open;\n          var name = attrlist[i].attrgroup_name;\n          var attrs = attrlist[i].attrs;\n          for (var s = 0; s < this.$data.subClassAttrList.length; s++) {\n            var clsattr = this.$data.subClassAttrList[s];\n            if (name == clsattr.Name) {\n              var attr = [];\n              for (var j = 0; j < attrs.length; j++) {\n                for (var l = 0; l < clsattr.Attr.length; l++) {\n                  var ca = clsattr.Attr[l];\n                  if (attrs[j].attr == ca.Name) {\n                    ca.action = attrs[j].action;\n                    ca.edit = attrs[j].edit;\n                    ca.notempty = attrs[j].notempty;\n                    ca.ext_button = attrs[j].ext_button;\n                    ca.button_img = attrs[j].button_img;\n                    ca.button_tooltip = attrs[j].button_tooltip;\n                    ca.before_click_button = attrs[j].before_click_button;\n                    ca.button_callback = attrs[j].button_callback;\n                    ca.hidden = attrs[j].hidden;\n                    ca.select = attrs[j].select == undefined ? false : attrs[j].select;\n                    ca.Value = \"\";\n                    if (ca.dictitem.length > 0) {\n                      if (ca.select == true) ca.Value = []; //ca.dictitem[0].CN_S_NAME;\n                      else ca.Value = '请选择'; //ca.dictitem[0].CN_S_NAME;\n                      var dictitemlist = [];\n                      for (var d = 0; d < ca.dictitem.length; d++) {\n                        ca.dictitem[d].label = ca.dictitem[d].CN_S_NAME;\n                        ca.dictitem[d].value = ca.dictitem[d].CN_S_NAME;\n                        ca.dictitem[d].attr = ca.Name;\n                        if (ca.dictitem[d].CN_C_IS_DEFAULT == '1') ca.Value = ca.dictitem[d].CN_S_NAME;\n                      }\n                    }\n                    if (ca.Type == '日期' || ca.Type == '时间') {\n                      var nowDate = new Date();\n                      var date = {\n                        year: nowDate.getFullYear(),\n                        month: nowDate.getMonth() + 1,\n                        day: nowDate.getDate()\n                      };\n                      ca.Value = date.year + '-' + (date.month >= 10 ? date.month : '0' + date.month) + '-' + (date.day >= 10 ? date.day : '0' + date.day);\n                    }\n                    if (ca.Type == '引用对象(多个)') {\n                      ca.RelClsList = ca.RelCls;\n                      ca.Value = '请';\n                    }\n                    if (ca.Type == '省市区') ca.Value = '请选择';\n                    if (ca.Type == '布尔值') ca.Value = false;\n                    attr.push(ca);\n                  }\n                }\n              }\n              newattrlist.push({\n                BkColor: clsattr.BkColor,\n                HasAce: clsattr.HasAce,\n                ImgFontStyle: clsattr.ImgFontStyle,\n                Name: clsattr.Name,\n                Order: clsattr.Order,\n                Open: open,\n                Attr: attr,\n                control_style: this.$data.subClassGridStyle.StyleDef.control_style,\n                title_p_wdith: this.$data.subClassGridStyle.StyleDef.title_p_wdith,\n                Font: this.$data.subClassGridStyle.StyleDef.Font ? this.$data.subClassGridStyle.StyleDef.Font : {},\n                Bk_Color: this.$data.subClassGridStyle.StyleDef.Bk_Color ? this.$data.subClassGridStyle.StyleDef.Bk_Color : '#FFFFFF',\n                Text_Color: this.$data.subClassGridStyle.StyleDef.Text_Color ? this.$data.subClassGridStyle.StyleDef.Text_Color : '#000000'\n              });\n            }\n          }\n        }\n        if (newattrlist.length > 0) {\n          this.$data.subClassAttrList = newattrlist;\n        }\n        var req = [];\n        if (this.$data.subClassGridStyle.StyleDef) {\n          if (this.$data.subClassGridStyle.StyleDef.show_style.length > 0) {\n            var attrlist = this.$data.subClassGridStyle.StyleDef.show_style;\n            // $el.find('.attr_field').prop('readonly', true);\n            // $el.find('.attr_field').prop('disabled', true);\n            for (var i = 0; i < attrlist.length; i++) {\n              var attr = attrlist[i].attrs;\n              for (var j = 0; j < attr.length; j++) {\n                var ar = attr[j];\n                req.push({\n                  attr: ar.attr,\n                  value: ar.value ? ar.value : ''\n                });\n              }\n            }\n          }\n        }\n        var eventlist = this.$data.subClassGridStyle.StyleDef.event;\n        if (eventlist) {\n          if (eventlist.length > 0) {\n            for (var i = 0; i < eventlist.length; i++) {\n              if (eventlist[i].event_id == 'before_ok') {\n                this.$data.edit_ok_event = eventlist[i];\n              } else if (eventlist[i].event_id == 'initial') {\n                this.$data.edit_inital_event = eventlist[i];\n              } else if (eventlist[i].event_id == 'before_select_compose') {\n                this.$data.edit_select_compose_event = eventlist[i].scrip_id;\n                this.$data.edit_compose_cls_id = eventlist[i].compose_cls_id;\n              }\n            }\n          }\n        }\n        // console.log(req);\n        if (this.$data.edit_inital_event) {\n          var eventid = this.$data.edit_inital_event.scrip_id;\n          var info = {\n            eventid: eventid,\n            edtype: \"0\",\n            projectid: '',\n            rclsid: '',\n            robjid: '',\n            userlogin: '',\n            clsid: this.$data.param.Sub_Cls.ID,\n            objid: \"\",\n            attr: req\n          };\n          this.scan_ini_DataObjRunCustomEvent(info);\n        }\n        __f__(\"log\", this.$data.subClassGridStyle, \" at pages/modal/3037.vue:1279\");\n        __f__(\"log\", this.$data.subClassAttrList, \" at pages/modal/3037.vue:1280\");\n      } else {\n        uni.showModal({\n          title: \"提示\",\n          content: \"未找到可显示的的属性\",\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      }\n    },\n    scan_classAttr_extButton: function scan_classAttr_extButton(e) {\n      //选择按钮前\n      var $this = this;\n      var Before_Select_Event = $this.$data.param.Scan_Code.Before_Select_Event;\n      if (!Before_Select_Event) {\n        uni.showModal({\n          title: \"提示\",\n          content: \"选择前事件为空!\",\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n        return;\n      }\n      var mast_attr = [];\n      var attrlist = this.$data.classAttrList;\n      for (var i = 0; i < attrlist.length; i++) {\n        var attr = attrlist[i].Attr;\n        for (var j = 0; j < attr.length; j++) {\n          var ar = attr[j];\n          if (ar.Value == '请选择') {\n            uni.showModal({\n              title: \"提示\",\n              content: ar.DispName + \"未选择数据!\",\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n            return;\n          }\n          if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n          if (ar.Type == '引用人员' || ar.Type == '引用项目') mast_attr.push({\n            attr: ar.Name,\n            value: ar.ValID ? ar.ValID : ''\n          });else if (ar.Type == '布尔值') mast_attr.push({\n            attr: ar.Name,\n            value: ar.Value ? '1' : '0'\n          });else mast_attr.push({\n            attr: ar.Name,\n            value: ar.Value ? ar.Value : ''\n          });\n        }\n      }\n      var objects = [];\n      var subPanelList = $this.$data.subPanelList;\n      for (var s = 0; s < subPanelList.length; s++) {\n        var sub_req = [];\n        for (var i = 0; i < subPanelList[s].subClassAttr.length; i++) {\n          var attr = subPanelList[s].subClassAttr[i].Attr;\n          for (var j = 0; j < attr.length; j++) {\n            var ar = attr[j];\n            if (ar.Value == '请选择' || ar.Value == '——请选择——') ar.Value = '';\n            if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n            if (ar.Type == '引用人员' || ar.Type == '引用项目') sub_req.push({\n              attr: ar.Name,\n              value: ar.ValID ? ar.ValID : ''\n            });else if (ar.Type == '布尔值') sub_req.push({\n              attr: ar.Name,\n              value: ar.Value ? '1' : '0'\n            });else if (ar.Type == '字典' || ar.Type == '字典-字符串' || ar.Type == '字典-整数') {\n              if (ar.select == true) {\n                //判断下拉是否多选\n                var valStr = \"\";\n                for (var v in ar.Value) {\n                  if (valStr) valStr += \";\";\n                  valStr += ar.Value[v];\n                }\n                sub_req.push({\n                  attr: ar.Name,\n                  value: valStr\n                });\n              } else sub_req.push({\n                attr: ar.Name,\n                value: ar.Value\n              });\n            } else sub_req.push({\n              attr: ar.Name,\n              value: ar.Value ? ar.Value : ''\n            });\n            if (ar.notempty == true && !ar.Value) {\n              // if(ar.NotEmpty=='1'){\n              uni.hideLoading();\n              // uni.showToast({title:ar.DispName+'不能为空!',icon:\"success\",duration:3000});\n              uni.showModal({\n                title: \"提示\",\n                content: ar.DispName + '不能为空!',\n                showCancel: false,\n                confirmText: \"取消\"\n              });\n              return;\n            }\n          }\n        }\n        objects.push({\n          obj_id: subPanelList[s].scanCodeVal,\n          obj_attrs: sub_req\n        });\n      }\n      var enviroment = {\n        'function': '3000',\n        // 功能点编号\n        cls_id: 'MBOX',\n        //this.$data.param.Sub_Cls.ID,     // 功能点从数据类标识\n        'button': 'top',\n        // top/bottom\n        button_name: '新增',\n        edit_dlg: {\n          type: 'small',\n          //小窗口\n          class_id: 'MBOX' //this.$data.param.Sub_Cls.ID,//当前数据类id\n        },\n\n        master_cls: {\n          cls_name: 'MBOX',\n          //$this.$data.param.Master_Cls.Name,\n          obj_attrs: req\n        },\n        sub_cls: {\n          cls_name: 'MBOX',\n          //$this.$data.param.Sub_Cls.Name,\n          objects: objects\n        }\n      };\n      var req = [];\n      var req = [];\n      // var attrlist = this.$data.subClassAttrList;\n      // var msg='';\n      // for (var i = 0; i < attrlist.length; i++) {\n      // \tvar attr = attrlist[i].Attr;\n      // \tfor (var j = 0; j < attr.length; j++) {\n      // \t\tvar ar = attr[j];\n      // \t\tif(ar.Type=='引用对象(多个)')\n      // \t\t\tif(ar.Value=='请') ar.Value='';\n      // \t\tif(ar.Type=='引用人员' || ar.Type=='引用项目')\n      // \t\t\treq.push({ attr: ar.Name, value: ar.ValID ?ar.ValID :'' });\n      // \t\telse if(ar.Type=='布尔值')\n      // \t\t\treq.push({ attr: ar.Name, value: ar.Value?'1':'0'});\n      // \t\telse\n      // \t\t\treq.push({ attr: ar.Name, value: ar.Value ?ar.Value :''});\n      // \t}\n      // }\n\n      var info = {\n        eventid: Before_Select_Event.ID,\n        edtype: \"7\",\n        //\"0\",\n        projectid: '',\n        rclsid: '',\n        robjid: '',\n        userlogin: '',\n        clsid: 'MBOX',\n        //this.$data.param.Sub_Cls.ID,\n        objid: \"\",\n        attr: [],\n        global_attr: req,\n        mast_attr: mast_attr,\n        inputParamter: mast_attr,\n        enviroment: enviroment\n      };\n      // console.log(info);\n      this.scan_DataObjRunCustomEvent(info, \"\");\n    },\n    popupChange: function popupChange(e) {\n      __f__(\"log\", '当前模式:' + e.type + ',状态:' + e.show, \" at pages/modal/3037.vue:1434\");\n    },\n    checkChange: function checkChange(e) {\n      //弹框check选择\n      // console.log(e.target.dataset);\n      var index = e.target.dataset.index;\n      var ischeck = e.target.dataset.ischeck;\n      var data = this.$data.check_list.items;\n      // this.$data.check_list.items=[];\n      if (this.$data.check_list.multiple_choice == \"0\") {\n        //判断时单选还是多选\n        for (var i in data) {\n          data[i].check = false;\n        }\n      }\n      data[index].check = ischeck ? false : true;\n      this.$data.check_list.items = data;\n    },\n    popup_cancel: function popup_cancel(e) {\n      //弹框取消\n      this.$refs.popup.close();\n    },\n    popup_sava: function popup_sava(e) {\n      //弹框确定 选择按钮后\n      var $this = this;\n      var After_Select_Event = $this.$data.param.Scan_Code.After_Select_Event;\n      if (!After_Select_Event) {\n        uni.showModal({\n          title: \"提示\",\n          content: \"选择后事件为空!\",\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n        return;\n      }\n      var items = $this.$data.check_list.items;\n      var data = [];\n      var name = \"\";\n      for (var i = 0; i < items.length; i++) {\n        if (items[i].check == true) {\n          if (name) name += ';';\n          name += items[i].name;\n          data.push({\n            id: items[i].id,\n            name: items[i].name\n          });\n        }\n      }\n      if (data.length == 0) {\n        uni.showModal({\n          title: \"提示\",\n          content: \"未选择数据!\",\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n        return;\n      }\n      var mast_attr = [];\n      var attrlist = this.$data.classAttrList;\n      for (var i = 0; i < attrlist.length; i++) {\n        var attr = attrlist[i].Attr;\n        for (var j = 0; j < attr.length; j++) {\n          var ar = attr[j];\n          if (ar.Value == '请选择') {\n            uni.showModal({\n              title: \"提示\",\n              content: ar.DispName + \"未选择数据!\",\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n            return;\n          }\n          if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n          if (ar.Type == '引用人员' || ar.Type == '引用项目') mast_attr.push({\n            attr: ar.Name,\n            value: ar.ValID ? ar.ValID : ''\n          });else if (ar.Type == '布尔值') mast_attr.push({\n            attr: ar.Name,\n            value: ar.Value ? '1' : '0'\n          });else mast_attr.push({\n            attr: ar.Name,\n            value: ar.Value ? ar.Value : ''\n          });\n        }\n      }\n      $this.$data.scanCodeVal = name;\n      var info = {\n        eventid: After_Select_Event.ID,\n        edtype: \"7\",\n        projectid: '',\n        rclsid: '',\n        robjid: '',\n        userlogin: '',\n        clsid: 'MBOX',\n        objid: \"\",\n        attr: [{\n          attr: 'mast_input_3037',\n          value: name\n        }],\n        global_attr: mast_attr,\n        inputParamter: data,\n        enviroment: ''\n      };\n      // console.log(info);\n      this.scan_DataObjRunCustomEvent(info, \"\");\n      this.$refs.popup.close();\n    },\n    cancel: function cancel(e) {\n      uni.navigateBack({\n        delta: 1 //返回层数,2则上上页\n      });\n    },\n    panel_del: function panel_del(index) {\n      var $this = this;\n      if (this.$data.subPanelList[index].scanCodeVal == this.$data.scanCodeVal) {\n        this.$data.scanCodeVal = '';\n      }\n      if (!this.$data.subPanelList[index].ObjID) this.$data.subPanelList.splice(index, 1);else {\n        var dataInfo = {\n          class_id: this.$data.param.Sub_Cls.ID,\n          class_name: '',\n          obj_id: this.$data.subPanelList[index].ObjID\n        };\n        // console.log(dataInfo);\n        // return;\n        uni.showLoading({\n          title: \"加载中...\"\n        });\n        this.$store.dispatch('dataObjDel', dataInfo).then(function (success) {\n          // console.log(success);\n          uni.hideLoading();\n          if (ret.err_code == 0) {\n            $this.$data.subPanelList.splice(index, 1);\n            uni.showModal({\n              title: \"提示\",\n              content: \"删除成功!\",\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n          } else {\n            uni.showModal({\n              title: \"错误9\",\n              content: success.msg,\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n          }\n        }).catch(function (ex) {\n          __f__(\"log\", ex, \" at pages/modal/3037.vue:1548\");\n          uni.hideLoading();\n          uni.showModal({\n            title: \"提示9.1\",\n            content: ex.errMsg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        });\n      }\n    },\n    ontap: function ontap(e) {\n      var _this3 = this;\n      //扫码功能\n      //console.log(e.target)\n      getApp().onScan(function (result) {\n        //console.log(result.decodedata);\n        var isVal = _this3.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value;\n        // if(!isVal){\n        // \tthis.$data.subPanelList[e.target.dataset['iiindex']].subClassAttr[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value=result.decodedata;\n        // \tvar isVald =this.$data.subPanelList[e.target.dataset['iiindex']].subClassAttr[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value;\n        // \treturn;\n        // }\n        //主数据类扫码查询数据\n        if (isVal != result.decodedata) {\n          _this3.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value = result.decodedata;\n          uni.hideKeyboard();\n          //子数据类扫码区事件脚本\n          var eventid = _this3.$data.param.Scan_Code.Input_Change_Event.ID;\n          if (eventid) {\n            var req = [];\n            var attrlist = _this3.$data.classAttrList; //主数据类属性\n            for (var i = 0; i < attrlist.length; i++) {\n              var attr = attrlist[i].Attr;\n              for (var j = 0; j < attr.length; j++) {\n                var ar = attr[j];\n                if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n                if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n                  attr: ar.Name,\n                  value: ar.ValID ? ar.ValID : ''\n                });else if (ar.Type == '布尔值') req.push({\n                  attr: ar.Name,\n                  value: ar.Value ? '1' : '0'\n                });else req.push({\n                  attr: ar.Name,\n                  value: ar.Value ? ar.Value : ''\n                });\n              }\n            }\n            var info = {\n              eventid: eventid,\n              edtype: \"7\",\n              //\"0\",\n              projectid: '',\n              rclsid: '',\n              robjid: '',\n              userlogin: '',\n              clsid: 'MBOX',\n              //this.$data.param.Sub_Cls.ID,\n              objid: \"\",\n              attr: req,\n              mast_attr: [],\n              inputParamter: [{\n                attr: 'mast_input_3037',\n                value: result.decodedata\n              }]\n            };\n            _this3.scan_DataObjRunCustomEvent(info, \"\");\n          }\n        }\n      });\n    },\n    subontap: function subontap(e) {\n      var _this4 = this;\n      //扫码功能\n      //console.log(e.target)\n      getApp().onScan(function (result) {\n        //console.log(result.decodedata);\n        var isVal = _this4.$data.subClassAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value;\n        //主数据类扫码查询数据\n        if (isVal != result.decodedata) {\n          _this4.$data.subClassAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value = result.decodedata;\n          uni.hideKeyboard();\n          //子数据类扫码区事件脚本\n          var eventid = _this4.$data.param.Scan_Code.Input_Change_Event.ID;\n          if (eventid) {\n            var req = [];\n            var attrlist = _this4.$data.subClassAttrList; //主数据类属性\n            for (var i = 0; i < attrlist.length; i++) {\n              var attr = attrlist[i].Attr;\n              for (var j = 0; j < attr.length; j++) {\n                var ar = attr[j];\n                if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n                if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n                  attr: ar.Name,\n                  value: ar.ValID ? ar.ValID : ''\n                });else if (ar.Type == '布尔值') req.push({\n                  attr: ar.Name,\n                  value: ar.Value ? '1' : '0'\n                });else req.push({\n                  attr: ar.Name,\n                  value: ar.Value ? ar.Value : ''\n                });\n              }\n            }\n            var info = {\n              eventid: eventid,\n              edtype: \"7\",\n              //\"0\",\n              projectid: '',\n              rclsid: '',\n              robjid: '',\n              userlogin: '',\n              clsid: 'MBOX',\n              //this.$data.param.Sub_Cls.ID,\n              objid: \"\",\n              attr: req,\n              mast_attr: [],\n              inputParamter: [{\n                attr: 'mast_input_3037',\n                value: result.decodedata\n              }]\n            };\n            _this4.scan_DataObjRunCustomEvent(info, \"\");\n          }\n        }\n      });\n    },\n    scan_ontap: function scan_ontap(e) {\n      var _this5 = this;\n      //扫码区扫码功能\n      //console.log(e.target)\n      getApp().onScan(function (result) {\n        __f__(\"log\", result.decodedata, \" at pages/modal/3037.vue:1656\");\n        var isflag = true;\n        for (var i in _this5.$data.subPanelList) {\n          if (_this5.$data.subPanelList[i].scanCodeVal == result.decodedata) isflag = false;\n        }\n        //子数据类扫码查询数据\n        if (isflag) {\n          uni.hideKeyboard();\n          _this5.$data.scanCodeVal = result.decodedata;\n          var eventid = _this5.$data.param.Scan_Code.Input_Change_Event.ID;\n          if (eventid) {\n            var mast_req = [];\n            //主数据类属性\n            var classattrlist = _this5.$data.classAttrList;\n            for (var i = 0; i < classattrlist.length; i++) {\n              var attr = classattrlist[i].Attr;\n              for (var j = 0; j < attr.length; j++) {\n                var ar = attr[j];\n                if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n                if (ar.Type == '引用人员' || ar.Type == '引用项目') mast_req.push({\n                  attr: ar.Name,\n                  value: ar.ValID ? ar.ValID : ''\n                });else if (ar.Type == '布尔值') mast_req.push({\n                  attr: ar.Name,\n                  value: ar.Value ? '1' : '0'\n                });else mast_req.push({\n                  attr: ar.Name,\n                  value: ar.Value ? ar.Value : ''\n                });\n              }\n            }\n            var req = [];\n            //子数据类属性\n            var attrlist = _this5.$data.subClassAttrList;\n            for (var i = 0; i < attrlist.length; i++) {\n              var attr = attrlist[i].Attr;\n              for (var j = 0; j < attr.length; j++) {\n                var ar = attr[j];\n                if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n                if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n                  attr: ar.Name,\n                  value: ar.ValID ? ar.ValID : ''\n                });else if (ar.Type == '布尔值') req.push({\n                  attr: ar.Name,\n                  value: ar.Value ? '1' : '0'\n                });else req.push({\n                  attr: ar.Name,\n                  value: ar.Value ? ar.Value : ''\n                });\n              }\n            }\n            var info = {\n              eventid: eventid,\n              edtype: '7',\n              //\"0\",\n              projectid: '',\n              rclsid: '',\n              robjid: '',\n              userlogin: '',\n              clsid: 'MBOX',\n              //this.$data.param.Sub_Cls.ID,\n              objid: \"\",\n              attr: req,\n              mast_attr: mast_req,\n              inputParamter: [{\n                attr: 'input_3037',\n                value: _this5.$data.scanCodeVal\n              }]\n            };\n            _this5.scan_DataObjRunCustomEvent(info, \"\");\n          }\n        }\n      });\n    },\n    scan_onevent: function scan_onevent(e) {\n      // console.log(e.target);\n      if (e.target.value) {\n        var isflag = true;\n        for (var i in this.$data.subPanelList) {\n          if (this.$data.subPanelList[i].scanCodeVal == e.target.value) isflag = false;\n        }\n        //子数据类扫码查询数据\n        if (isflag) {\n          uni.hideKeyboard();\n          this.$data.scanCodeVal = e.target.value;\n          var eventid = this.$data.param.Scan_Code.Input_Change_Event.ID;\n          if (eventid) {\n            var mast_req = [];\n            //主数据类属性\n            var classattrlist = this.$data.classAttrList;\n            for (var i = 0; i < classattrlist.length; i++) {\n              var attr = classattrlist[i].Attr;\n              for (var j = 0; j < attr.length; j++) {\n                var ar = attr[j];\n                if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n                if (ar.Type == '引用人员' || ar.Type == '引用项目') mast_req.push({\n                  attr: ar.Name,\n                  value: ar.ValID ? ar.ValID : ''\n                });else if (ar.Type == '布尔值') mast_req.push({\n                  attr: ar.Name,\n                  value: ar.Value ? '1' : '0'\n                });else mast_req.push({\n                  attr: ar.Name,\n                  value: ar.Value ? ar.Value : ''\n                });\n              }\n            }\n            var req = [];\n            //子数据类属性\n            var attrlist = this.$data.subClassAttrList;\n            for (var i = 0; i < attrlist.length; i++) {\n              var attr = attrlist[i].Attr;\n              for (var j = 0; j < attr.length; j++) {\n                var ar = attr[j];\n                if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n                if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n                  attr: ar.Name,\n                  value: ar.ValID ? ar.ValID : ''\n                });else if (ar.Type == '布尔值') req.push({\n                  attr: ar.Name,\n                  value: ar.Value ? '1' : '0'\n                });else req.push({\n                  attr: ar.Name,\n                  value: ar.Value ? ar.Value : ''\n                });\n              }\n            }\n            var info = {\n              eventid: eventid,\n              edtype: '7',\n              //\"0\",\n              projectid: '',\n              rclsid: '',\n              robjid: '',\n              userlogin: '',\n              clsid: 'MBOX',\n              //this.$data.param.Sub_Cls.ID,\n              objid: \"\",\n              attr: req,\n              mast_attr: mast_req,\n              inputParamter: [{\n                attr: 'input_3037',\n                value: this.$data.scanCodeVal\n              }]\n            };\n            this.scan_DataObjRunCustomEvent(info, \"\");\n          }\n        }\n      }\n    },\n    onarrow: function onarrow(index, open) {\n      // console.log(index+'--'+open);\n      var data_attr = this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Open;\n      if (!data_attr) {\n        this.$data.subPanelList[e.target.dataset['iiindex']].subClassAttr[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value = open == true ? false : true;\n        return;\n      }\n      this.$data.classAttrList[e.target.dataset['iiindex']].subClassAttr[index].Open = open == true ? false : true;\n    },\n    ondateTime: function ondateTime(e) {\n      //console.log(e.target)\n      var data_attr = this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value;\n      if (!data_attr) {\n        this.$data.subPanelList[e.target.dataset['iiindex']].subClassAttr[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value = e.target.value;\n        return;\n      }\n      this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value = e.target.value;\n    },\n    onchange: function onchange(e) {\n      __f__(\"log\", e.target, \" at pages/modal/3037.vue:1808\");\n      var value = this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].dictitem[e.target.value];\n      var data_attr = this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']];\n      // console.log(data_attr);\n      if (value.Name != data_attr.Value) {\n        this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value = value.Name;\n        // console.log(this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value);\n        var eventid = this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].action;\n        if (eventid) {\n          // self.event_no_sub = 1;\n          var req = [];\n          var attrlist = this.$data.classAttrList;\n          for (var i = 0; i < attrlist.length; i++) {\n            var attr = attrlist[i].Attr;\n            for (var j = 0; j < attr.length; j++) {\n              var ar = attr[j];\n              if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n              if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n                attr: ar.Name,\n                val: ar.ValID ? ar.ValID : ''\n              });else if (ar.Type == '布尔值') req.push({\n                attr: ar.Name,\n                val: ar.Value ? '1' : '0'\n              });else req.push({\n                attr: ar.Name,\n                val: ar.Value ? ar.Value : ''\n              });\n            }\n          }\n          var info = {\n            eventid: eventid,\n            edtype: \"0\",\n            projectid: '',\n            rclsid: '',\n            robjid: '',\n            userlogin: '',\n            clsid: this.$data.param.Master_Cls.ID,\n            objid: \"\",\n            attr: req\n          };\n          this.DataObjRunCustomEvent(info);\n        }\n      }\n    },\n    onchange2: function onchange2(item, value, delvalue) {\n      // console.log(item);\n      // console.log(value);\n      // console.log(delvalue);\n      if (item.length == 0) {\n        //为空时,清空属性value\n        var index,\n          iindex,\n          dindex = 0;\n        for (var i in this.$data.classAttrList) {\n          for (var j in this.$data.classAttrList[i].Attr) {\n            if (delvalue[0].attr == this.$data.classAttrList[i].Attr[j].Name) {\n              this.$data.classAttrList[i].Attr[j].Value = \"\";\n            }\n          }\n        }\n      }\n      for (var v in item) {\n        var index,\n          iindex,\n          dindex = 0;\n        for (var i in this.$data.classAttrList) {\n          for (var j in this.$data.classAttrList[i].Attr) {\n            if (item[v].attr == this.$data.classAttrList[i].Attr[j].Name) {\n              index = i;\n              iindex = j;\n            }\n          }\n        }\n        var itemvalue = item[v];\n        var data_attr = this.$data.classAttrList[index].Attr[iindex];\n        __f__(\"log\", data_attr, \" at pages/modal/3037.vue:1877\");\n        if (itemvalue.Name != data_attr.Value) {\n          this.$data.classAttrList[index].Attr[iindex].Value = value;\n          // console.log(this.$data.classAttrList[index].Attr[iindex].Value);\n          var eventid = this.$data.classAttrList[index].Attr[iindex].action;\n          if (eventid) {\n            // self.event_no_sub = 1;\n            var req = [];\n            var attrlist = this.$data.classAttrList;\n            for (var i = 0; i < attrlist.length; i++) {\n              var attr = attrlist[i].Attr;\n              for (var j = 0; j < attr.length; j++) {\n                var ar = attr[j];\n                if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n                if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n                  attr: ar.Name,\n                  val: ar.ValID ? ar.ValID : ''\n                });else if (ar.Type == '布尔值') req.push({\n                  attr: ar.Name,\n                  val: ar.Value ? '1' : '0'\n                });else if (ar.Type == '字典' || ar.Type == '字典-字符串' || ar.Type == '字典-整数') req.push({\n                  attr: ar.Name,\n                  val: itemvalue.Name\n                });else req.push({\n                  attr: ar.Name,\n                  val: ar.Value ? ar.Value : ''\n                });\n              }\n            }\n            var info = {\n              eventid: eventid,\n              edtype: \"0\",\n              projectid: '',\n              rclsid: '',\n              robjid: '',\n              userlogin: '',\n              clsid: this.$data.param.Master_Cls.ID,\n              objid: \"\",\n              attr: req\n            };\n            this.DataObjRunCustomEvent(info);\n          }\n        }\n      }\n    },\n    sub_onchange: function sub_onchange(e) {\n      __f__(\"log\", e.target, \" at pages/modal/3037.vue:1921\");\n      var value = this.$data.subPanelList[e.target.dataset['iiindex']].subClassAttr[e.target.dataset['index']].Attr[e.target.dataset['iindex']].dictitem[e.target.value];\n      var data_attr = this.$data.subPanelList[e.target.dataset['iiindex']].subClassAttr[e.target.dataset['index']].Attr[e.target.dataset['iindex']];\n      // console.log(data_attr);\n      if (value.Name != data_attr.Value) {\n        this.$data.subPanelList[e.target.dataset['iiindex']].subClassAttr[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value = value.Name;\n        // console.log(this.$data.subPanelList[e.target.dataset['iiindex']].subClassAttr[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value);\n        var eventid = this.$data.subPanelList[e.target.dataset['iiindex']].subClassAttr[e.target.dataset['index']].Attr[e.target.dataset['iindex']].action;\n        if (eventid) {\n          // self.event_no_sub = 1;\n          var req = [];\n          var attrlist = this.$data.subPanelList[e.target.dataset['iiindex']].subClassAttr;\n          for (var i = 0; i < attrlist.length; i++) {\n            var attr = attrlist[i].Attr;\n            for (var j = 0; j < attr.length; j++) {\n              var ar = attr[j];\n              if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n              if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n                attr: ar.Name,\n                val: ar.ValID ? ar.ValID : ''\n              });else if (ar.Type == '布尔值') req.push({\n                attr: ar.Name,\n                val: ar.Value ? '1' : '0'\n              });else req.push({\n                attr: ar.Name,\n                val: ar.Value ? ar.Value : ''\n              });\n            }\n          }\n          var info = {\n            eventid: eventid,\n            edtype: \"0\",\n            projectid: '',\n            rclsid: '',\n            robjid: '',\n            userlogin: '',\n            clsid: this.$data.param.Sub_Cls.ID,\n            objid: \"\",\n            attr: req\n          };\n          this.DataObjRunCustomEvent(info);\n        }\n      }\n    },\n    sub_onchange2: function sub_onchange2(item, value, delvalue) {\n      // console.log(item);\n      // console.log(value);\n      // console.log(delvalue);\n      var subClassAttr = this.$data.subPanelList[e.target.dataset['iiindex']].subClassAttr;\n      if (item.length == 0) {\n        //为空时,清空属性value\n        var index,\n          iindex,\n          dindex = 0;\n        for (var i in subClassAttr) {\n          for (var j in subClassAttr[i].Attr) {\n            for (var d in subClassAttr[i].Attr[j].dictitem) {\n              if (delvalue[0].Name == subClassAttr[i].Attr[j].dictitem[d].Name) {\n                subClassAttr[i].Attr[j].Value = \"\";\n              }\n            }\n          }\n        }\n      }\n      for (var v in item) {\n        var index,\n          iindex,\n          dindex = 0;\n        for (var i in subClassAttr) {\n          for (var j in subClassAttr[i].Attr) {\n            for (var d in subClassAttr[i].Attr[j].dictitem) {\n              if (item[v].Name == subClassAttr[i].Attr[j].dictitem[d].Name) {\n                index = i;\n                iindex = j;\n                dindex = d;\n              }\n            }\n          }\n        }\n        var itemvalue = item[v];\n        var data_attr = subClassAttr[index].Attr[iindex];\n        __f__(\"log\", data_attr, \" at pages/modal/3037.vue:1995\");\n        if (itemvalue.Name != data_attr.Value) {\n          subClassAttr[index].Attr[iindex].Value = value;\n          // console.log(subClassAttr[index].Attr[iindex].Value);\n          var eventid = subClassAttr[index].Attr[iindex].action;\n          if (eventid) {\n            // self.event_no_sub = 1;\n            var req = [];\n            var attrlist = subClassAttr;\n            for (var i = 0; i < attrlist.length; i++) {\n              var attr = attrlist[i].Attr;\n              for (var j = 0; j < attr.length; j++) {\n                var ar = attr[j];\n                if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n                if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n                  attr: ar.Name,\n                  val: ar.ValID ? ar.ValID : ''\n                });else if (ar.Type == '布尔值') req.push({\n                  attr: ar.Name,\n                  val: ar.Value ? '1' : '0'\n                });else if (ar.Type == '字典' || ar.Type == '字典-字符串' || ar.Type == '字典-整数') req.push({\n                  attr: ar.Name,\n                  val: itemvalue.Name\n                });else req.push({\n                  attr: ar.Name,\n                  val: ar.Value ? ar.Value : ''\n                });\n              }\n            }\n            var info = {\n              eventid: eventid,\n              edtype: \"0\",\n              projectid: '',\n              rclsid: '',\n              robjid: '',\n              userlogin: '',\n              clsid: this.$data.param.Sub_Cls.ID,\n              objid: \"\",\n              attr: req\n            };\n            this.DataObjRunCustomEvent(info);\n          }\n        }\n      }\n    },\n    onevent: function onevent(e) {\n      // console.log(e.target);\n      var data_attr = this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']];\n      if (!data_attr) {\n        this.$data.subPanelList[e.target.dataset['iiindex']].subClassAttr[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value = e.target.value;\n        return;\n      }\n      // console.log(data_attr);\n      if (e.target.value != data_attr.Value) {\n        this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value = e.target.value;\n        // var eventid = this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].action;\n        //子数据类扫码区事件脚本\n        var eventid = this.$data.param.Scan_Code.Input_Change_Event.ID;\n        if (eventid) {\n          // self.event_no_sub = 1;\n          var req = [];\n          var attrlist = this.$data.classAttrList; //主数据类属性\n          for (var i = 0; i < attrlist.length; i++) {\n            var attr = attrlist[i].Attr;\n            for (var j = 0; j < attr.length; j++) {\n              var ar = attr[j];\n              if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n              if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n                attr: ar.Name,\n                value: ar.ValID ? ar.ValID : ''\n              });else if (ar.Type == '布尔值') req.push({\n                attr: ar.Name,\n                value: ar.Value ? '1' : '0'\n              });else req.push({\n                attr: ar.Name,\n                value: ar.Value ? ar.Value : ''\n              });\n            }\n          }\n          var info = {\n            eventid: eventid,\n            edtype: \"7\",\n            //\"0\",\n            projectid: '',\n            rclsid: '',\n            robjid: '',\n            userlogin: '',\n            clsid: 'MBOX',\n            //this.$data.param.Sub_Cls.ID,\n            objid: \"\",\n            attr: req,\n            mast_attr: [],\n            inputParamter: [{\n              attr: 'mast_input_3037',\n              value: e.target.value\n            }]\n          };\n          this.scan_DataObjRunCustomEvent(info, \"\");\n        }\n      }\n    },\n    oncheck: function oncheck(e) {\n      // console.log(e.target);\n      var ischecked = e.target.dataset.ischeck ? false : true;\n      var data_attr = this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']];\n      if (!data_attr) {\n        this.$data.subPanelList[e.target.dataset['iiindex']].subClassAttr[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value = ischecked;\n        return;\n      }\n      // console.log(data_attr);\n      if (ischecked != data_attr.Value) {\n        this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value = ischecked;\n        var eventid = this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].action;\n        if (eventid) {\n          // self.event_no_sub = 1;\n          var req = [];\n          var attrlist = this.$data.classAttrList;\n          for (var i = 0; i < attrlist.length; i++) {\n            var attr = attrlist[i].Attr;\n            for (var j = 0; j < attr.length; j++) {\n              var ar = attr[j];\n              if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n              if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n                attr: ar.Name,\n                val: ar.ValID ? ar.ValID : ''\n              });else if (ar.Type == '布尔值') req.push({\n                attr: ar.Name,\n                val: ar.Value ? '1' : '0'\n              });else req.push({\n                attr: ar.Name,\n                val: ar.Value ? ar.Value : ''\n              });\n            }\n          }\n          var info = {\n            eventid: eventid,\n            edtype: \"0\",\n            projectid: '',\n            rclsid: '',\n            robjid: '',\n            userlogin: '',\n            clsid: this.$data.param.Master_Cls.ID,\n            objid: \"\",\n            attr: req\n          };\n          this.DataObjRunCustomEvent(info);\n        }\n      }\n    },\n    inputValListIsDel: function inputValListIsDel(index) {\n      // console.log(index);\n      this.$data.inputValList.splice(index, 1); //删除tabPagejson的内容\n      // console.log(this.$data.inputValList);\n    },\n    addresschange: function addresschange(e) {\n      // console.log(e.target);\n      __f__(\"log\", e.data.join(';'), \" at pages/modal/3037.vue:2142\");\n      this.$data.subClassAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value = e.data.join(';');\n    },\n    classAttr_extButton: function classAttr_extButton(index, iindex) {\n      var $this = this;\n      var before_click_button = $this.$data.classAttrList[index].Attr[iindex].before_click_button;\n      var button_callback = $this.$data.classAttrList[index].Attr[iindex].button_callback;\n      if (!before_click_button) {\n        uni.showModal({\n          title: \"提示\",\n          content: \"before_click_button-event_id为空!\",\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n        return;\n      }\n      if (!button_callback) {\n        uni.showModal({\n          title: \"提示\",\n          content: \"button_callback-event_id为空!\",\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n        return;\n      }\n      var data_attr = this.$data.classAttrList[index].Attr[iindex];\n      this.DataObjRunCustomEvent_Return(before_click_button, data_attr, button_callback, index, iindex);\n    },\n    classAttr_AddPer: function classAttr_AddPer(index, iindex) {\n      var param = {\n        index: index,\n        iindex: iindex\n      };\n      var $this = this;\n      uni.navigateTo({\n        url: '../selpsn/index?mulit=false&param=' + JSON.stringify(param),\n        events: {\n          AddPer: function AddPer(data, param) {\n            // console.log(param);\n            __f__(\"log\", data, \" at pages/modal/3037.vue:2168\");\n            $this.$data.classAttrList[param.index].Attr[param.iindex].Value = data[0].Name;\n            $this.$data.classAttrList[param.index].Attr[param.iindex].ValID = data[0].Login + ';' + data[0].Name;\n            var eventid = $this.$data.classAttrList[param.index].Attr[param.iindex].action;\n            if (eventid) {\n              eventid = eventid.trim();\n              if (eventid) {\n                var info = {\n                  eventid: eventid,\n                  edtype: \"4\",\n                  projectid: \"\",\n                  rclsid: \"\",\n                  robjid: \"\",\n                  userlogin: data[0].Login,\n                  clsid: $this.$data.param.Master_Cls.ID,\n                  objid: \"\",\n                  attr: []\n                };\n\n                // var data_attr = $this.$data.classAttrList[param.index].Attr[param.iindex];\n                $this.DataObjRunCustomEvent(info);\n              }\n            }\n          }\n        }\n      });\n    },\n    classAttr_AddRef: function classAttr_AddRef(e) {\n      __f__(\"log\", e.target, \" at pages/modal/3037.vue:2197\");\n      uni.showModal({\n        title: \"提示\",\n        content: \"此功能还未实现!\",\n        showCancel: false,\n        confirmText: \"取消\"\n      });\n      // var value=this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].RelCls[e.target.value];\n      // this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value=value;\n    },\n    classAttr_AddPrj: function classAttr_AddPrj(index, iindex) {\n      var param = {\n        index: index,\n        iindex: iindex\n      };\n      var $this = this;\n      uni.navigateTo({\n        url: '../selPrj/index?relation=-1&param=' + JSON.stringify(param),\n        events: {\n          AddPer: function AddPer(data, param) {\n            // console.log(param);\n            // console.log(data);\n            $this.$data.classAttrList[param.index].Attr[param.iindex].Value = data[0].Name;\n            $this.$data.classAttrList[param.index].Attr[param.iindex].ValID = data[0].ID + ';' + data[0].Name;\n            var eventid = $this.$data.classAttrList[param.index].Attr[param.iindex].action;\n            if (eventid) {\n              eventid = eventid.trim();\n              if (eventid) {\n                var info = {\n                  eventid: eventid,\n                  edtype: \"2\",\n                  projectid: data[0].ID,\n                  rclsid: \"\",\n                  robjid: \"\",\n                  userlogin: \"\",\n                  clsid: $this.$data.param.Master_Cls.ID,\n                  objid: \"\",\n                  attr: []\n                };\n\n                // var data_attr = $this.$data.classAttrList[param.index].Attr[param.iindex];\n                $this.DataObjRunCustomEvent(info);\n              }\n            }\n          }\n        }\n      });\n    },\n    sava: function sava() {\n      if (this.$data.param.Before_OK_Event)\n        //判断功能点参数是否有确定前脚本\n        this.scan_OKDataObjRunCustomEvent(this.$data.param.Before_OK_Event.ID);else if (this.$data.param.After_OK_Event)\n        //判断功能点参数是否有确定后脚本\n        this.scan_OKDataObjRunCustomEvent(this.$data.param.After_OK_Event.ID);else uni.navigateBack({\n        delta: 1\n      }); //返回层数,2则上上页\n    },\n    add: function add() {\n      var _this6 = this;\n      uni.showLoading({\n        title: \"加载中...\",\n        mask: true\n      });\n      var req = [];\n      var attrlist = this.$data.classAttrList;\n      for (var i = 0; i < attrlist.length; i++) {\n        var attr = attrlist[i].Attr;\n        for (var j = 0; j < attr.length; j++) {\n          var ar = attr[j];\n          if (ar.Value == '请选择' || ar.Value == '——请选择——') ar.Value = '';\n          if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n          if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n            name: ar.Name,\n            value: ar.ValID ? ar.ValID : ''\n          });else if (ar.Type == '布尔值') req.push({\n            name: ar.Name,\n            value: ar.Value ? '1' : '0'\n          });else if (ar.Type == '字典' || ar.Type == '字典-字符串' || ar.Type == '字典-整数') {\n            if (ar.select == true) {\n              //判断下拉是否多选\n              var valStr = \"\";\n              for (var v in ar.Value) {\n                if (valStr) valStr += \";\";\n                valStr += ar.Value[v];\n              }\n              req.push({\n                name: ar.Name,\n                value: valStr\n              });\n            } else req.push({\n              name: ar.Name,\n              value: ar.Value\n            });\n          } else req.push({\n            name: ar.Name,\n            value: ar.Value ? ar.Value : ''\n          });\n          if (ar.notempty == true && !ar.Value) {\n            // if(ar.NotEmpty=='1'){\n            uni.hideLoading();\n            // uni.showToast({title:ar.DispName+'不能为空!',icon:\"success\",duration:3000});\n            uni.showModal({\n              title: \"提示\",\n              content: ar.DispName + '不能为空!',\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n            return;\n          }\n        }\n      }\n      var enviroment = {\n        'function': '3000',\n        // 功能点编号\n        cls_id: this.$data.param.Master_Cls.ID,\n        // 功能点主数据类标识\n        'button': 'top',\n        // top/bottom\n        button_name: '新增',\n        master: {\n          cls_id: this.$data.param.Master_Cls.ID\n        }\n      };\n\n      // var dataInfo={\n      //     class_id: this.$data.param.Master_Cls.ID, data_obj_id: '', masterclsid: '',\n      //     req: JSON.stringify(req), upfile: JSON.stringify([]), post_data: JSON.stringify({}),\n      //     compose: JSON.stringify([]), refdatastore: JSON.stringify([]), extinfo: JSON.stringify(enviroment), \n      // \tnot_trigger_sys_event: ''\n      // };\n      enviroment = _base.default.encode(JSON.stringify(enviroment)); //将字符串转换为base64编码\n      var obj_attr = {};\n      req.forEach(function (item) {\n        obj_attr[item.name] = item.value;\n      });\n      var dataInfo = {\n        class_id: this.$data.param.Master_Cls.ID,\n        class_name: '',\n        master_cls_id: '',\n        master_obj_id: '',\n        creator: '',\n        creator_name: '',\n        not_trigger_event: '',\n        update_exist: '',\n        post_process: '',\n        ext_info: enviroment,\n        obj_attr: obj_attr\n      };\n      __f__(\"log\", dataInfo, \" at pages/modal/3037.vue:2322\");\n      // return\n      this.$store.dispatch('createDataObj', dataInfo).then(function (success) {\n        __f__(\"log\", success, \" at pages/modal/3037.vue:2325\");\n        uni.hideLoading();\n        if (success.err_code == 0) {\n          var result = success.result;\n          if (success.result.action) {\n            var action = JSON.parse(success.result.Action);\n            if (action.ret == '0') {\n              if (action.result_type == '0') {\n                uni.showToast({\n                  title: action.result,\n                  icon: \"success\",\n                  duration: 3000\n                });\n              }\n              // \"{\"ret\":0, \"result_type\":0, \"result\":\"创建成功123123123\",\"info\":\"\"}\"\n            }\n          } else uni.showToast({\n            title: \"创建成功!\",\n            icon: \"success\",\n            duration: 3000\n          });\n          //刷新\n          uni.redirectTo({\n            url: '../modal/3037?param=' + JSON.stringify(_this6.$data.param) + \"&titlename=\" + _this6.$data.title\n          });\n          // this.class_attr_init();\n        } else {\n          uni.showModal({\n            title: \"错误\",\n            content: success.err_msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        __f__(\"log\", ex, \" at pages/modal/3037.vue:2348\");\n        uni.hideLoading();\n        uni.showModal({\n          title: \"提示\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\n    },\n    ini_DataObjRunCustomEvent: function ini_DataObjRunCustomEvent(info) {\n      var _this7 = this;\n      var param = {\n        EditStyle: this.$data.param.Master_Cls.View_Style.Name,\n        ViewStyle: this.$data.param.Master_Cls.View_Style.Name,\n        NotTriggerSysEvent: 0,\n        enviroment: {\n          'function': '3000',\n          // 功能点编号\n          cls_id: this.$data.param.Master_Cls.ID,\n          // 功能点主数据类标识\n          'button': 'top',\n          // top/bottom\n          button_name: '新增',\n          master: {\n            cls_id: this.$data.param.Master_Cls.ID // button=bottom时 master的cls_id\n            //obj_id: ''  // button=bottom时 master的obj_id\n          }\n        }\n      };\n\n      var inputparameter = '';\n      var global_attr = '';\n\n      // var dataInfo = {\n      //                 edtype: info.edtype, eventid: info.eventid, projectid: info.projectid,\n      //                 rclsid: info.rclsid, robjid: info.robjid, userlogin: info.userlogin, clsid: info.clsid, objid: info.objid,\n      //                 attr: JSON.stringify(info.attr), extinfo: JSON.stringify(param), inputparameter: inputparameter, global_attr: global_attr\n      //             }\n      param.enviroment = _base.default.encode(JSON.stringify(param.enviroment)); //将字符串转换为base64编码\n      var obj_attr = {};\n      info.attr.forEach(function (item) {\n        obj_attr[item.attr] = item.val;\n      });\n      if (!info.eventid.includes('{')) info.eventid = '{' + info.eventid + '}';\n      var dataInfo = {\n        ed_type: info.edtype,\n        start_transaction: '',\n        class_id: info.clsid,\n        class_name: '',\n        event_id: info.eventid,\n        event_name: '',\n        data_obj_id: info.objid,\n        obj_attr: obj_attr,\n        prj_id: info.projectid,\n        ref_cls_id: info.rclsid,\n        rel_obj_id: info.robjid,\n        user_login: info.userlogin,\n        data_json: '',\n        compose_info: '',\n        ext_info: param.enviroment,\n        global_attr: global_attr,\n        input_param: inputparameter\n      };\n      __f__(\"log\", dataInfo, \" at pages/modal/3037.vue:2402\");\n      // return;\n      this.$store.dispatch('runCustomEvent', dataInfo).then(function (success) {\n        __f__(\"log\", success, \" at pages/modal/3037.vue:2405\");\n        if (success.err_code == 0) {\n          var data = success.result;\n          if (data.ret != 0) {\n            var tip = data.err_info ? typeof data.err_info == 'string' ? data.err_info : data.err_info.join('<br/>') : '';\n            if (data.ret == 801) uni.showModal({\n              title: '提示',\n              content: tip,\n              showCancel: false,\n              confirmText: \"取消\"\n            });else uni.showModal({\n              title: '提示',\n              content: tip + ',提示:' + data.ret,\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n            return false;\n          } else {\n            var _tip = data.info ? typeof data.info == 'string' ? data.info : data.info.join('<br/>') : '';\n            if (_tip) uni.showModal({\n              title: '提示',\n              content: _tip,\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n            if (data.action) {\n              var actionlist = data.action;\n              if (actionlist) {\n                for (var j = 0; j < actionlist.length; j++) {\n                  var action = actionlist[j];\n                  var action_type = action.action_type;\n                  var value = action.value;\n                  if (action_type == 'set_dlg_attr') {\n                    if (value) {\n                      var val = value;\n                      if (typeof value == 'string') {\n                        val = JSON.parse(value);\n                      }\n                      __f__(\"log\", val, \" at pages/modal/3037.vue:2430\");\n                      for (var i = 0; i < val.length; i++) {\n                        for (var a = 0; a < _this7.$data.classAttrList.length; a++) {\n                          for (var l = 0; l < _this7.$data.classAttrList[a].Attr.length; l++) {\n                            var ca = _this7.$data.classAttrList[a].Attr[l];\n                            if (val[i].attr == ca.Name) {\n                              if (ca.Type == '字典' || ca.Type == '字典-字符串' || ca.Type == '字典-整数') {\n                                var dictItemList = [];\n                                for (var d in val[i].choice_list) {\n                                  var val = val[i].choice_list[d];\n                                  dictItemList.push({\n                                    \"CN_S_NAME\": val,\n                                    \"Name\": val,\n                                    \"label\": val,\n                                    \"value\": val\n                                  });\n                                }\n                                ca.dictitem = dictItemList;\n                                // attr[j].dictitem = val[i].choice_list;\n                              } else {\n                                // ca.value = val[i].value;\n                              }\n                            }\n                          }\n                        }\n                        var length = 0;\n                        if (!_this7.$data.refdatastore.filter(function (s) {\n                          return val[i].attr == s.attr;\n                        }).length) {\n                          length = 1;\n                          _this7.$data.refdatastore.push(val[i]);\n                        }\n                        if (length == 0) {\n                          for (var j = 0; j < _this7.$data.refdatastore.length; j++) {\n                            if (_this7.$data.refdatastore[j].attr == val[i].attr) {\n                              _this7.$data.refdatastore[j].value = val[i].value;\n                            }\n                          }\n                        }\n                      }\n                    }\n                  }\n                  if (action_type == 'open_select_userdlg') {\n                    uni.showModal({\n                      title: \"错误2.2\",\n                      content: \"open_select_userdlg这个action_type还未处理!\",\n                      showCancel: false,\n                      confirmText: \"取消\"\n                    });\n                  }\n                }\n              }\n            }\n          }\n        } else {\n          uni.showModal({\n            title: \"错误2\",\n            content: success.err_msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        // console.log(ex);\n        uni.showModal({\n          title: \"错误2.1\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\n    },\n    DataObjRunCustomEvent: function DataObjRunCustomEvent(info, data_attr) {\n      var $this = this;\n      var enviroment = {\n        'function': '3000',\n        // 功能点编号\n        cls_id: this.$data.param.Master_Cls.ID,\n        // 功能点主数据类标识\n        'button': 'top',\n        // top/bottom\n        button_name: '新增',\n        master: {\n          cls_id: this.$data.param.Master_Cls.ID // button=bottom时 master的cls_id\n          //obj_id: ''  // button=bottom时 master的obj_id\n        }\n      };\n\n      enviroment.edit_dlg = {\n        type: 'small',\n        //小窗口\n        class_id: this.$data.param.Master_Cls.ID //当前数据类id\n      };\n\n      if (data_attr) {\n        enviroment.edit_dlg.form_control = {\n          //所属的表单控件\n          name: data_attr.Name,\n          //字段属性\n          text: data_attr.DispName,\n          //显示文本\n          group_name: data_attr.GroupName,\n          //属性组\n          type: data_attr.Type,\n          //字段类型\n          readonly: data_attr.ReadOnly,\n          //是否只读\n          button_img: data_attr.button_img,\n          //引用按钮的图标\n          button_tooltip: data_attr.button_tooltip //引用按钮的tooltip\n        };\n      }\n      // var dataInfo = {\n      //        edtype: info.edtype, eventid: info.eventid, projectid: info.projectid.replace('{','').replace('}',''),\n      //        rclsid: info.rclsid, robjid: info.robjid, userlogin: info.userlogin, clsid: info.clsid, objid: info.objid,\n      //        attr: JSON.stringify(info.attr), extinfo: JSON.stringify(enviroment), inputparameter: '', global_attr: JSON.stringify(this.$data.global_attr)\n      //    }\n      enviroment = _base.default.encode(JSON.stringify(enviroment)); //将字符串转换为base64编码\n      var global_attr = _base.default.encode(JSON.stringify(this.$data.global_attr)); //将字符串转换为base64编码\n      if (info.dataJson) info.dataJson = _base.default.encode(JSON.stringify(info.dataJson)); //将字符串转换为base64编码\n      var obj_attr = {};\n      info.attr.forEach(function (item) {\n        obj_attr[item.attr] = item.val;\n      });\n      if (!info.eventid.includes('{')) info.eventid = '{' + info.eventid + '}';\n      var dataInfo = {\n        ed_type: info.edtype,\n        start_transaction: '',\n        class_id: info.clsid,\n        class_name: '',\n        event_id: info.eventid,\n        event_name: '',\n        data_obj_id: info.objid,\n        obj_attr: obj_attr,\n        prj_id: info.projectid,\n        ref_cls_id: info.rclsid,\n        rel_obj_id: info.robjid,\n        user_login: info.userlogin,\n        data_json: info.dataJson,\n        compose_info: '',\n        ext_info: enviroment,\n        global_attr: global_attr,\n        input_param: ''\n      };\n      __f__(\"log\", dataInfo, \" at pages/modal/3037.vue:2544\");\n      // return;\n      this.$store.dispatch('runCustomEvent', dataInfo).then(function (success) {\n        __f__(\"log\", success, \" at pages/modal/3037.vue:2547\");\n        if (success.err_code == 0) {\n          var data = success.result;\n          if (data.ret != 0) {\n            var tip = data.err_info ? typeof data.err_info == 'string' ? data.err_info : data.err_info.join('<br/>') : '';\n            if (data.ret == 801) uni.showModal({\n              title: '提示',\n              content: tip,\n              showCancel: false,\n              confirmText: \"取消\"\n            });else uni.showModal({\n              title: '提示',\n              content: tip + ',提示:' + data.ret,\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n            return false;\n          } else {\n            var _tip2 = data.info ? typeof data.info == 'string' ? data.info : data.info.join('<br/>') : '';\n            if (_tip2) uni.showModal({\n              title: '提示',\n              content: _tip2,\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n            var actionlist = data.action;\n            if (actionlist) {\n              __f__(\"log\", actionlist, \" at pages/modal/3037.vue:2561\");\n              for (var i = 0; i < actionlist.length; i++) {\n                var action = actionlist[i];\n                if (action.action_type == 'set_dlg_attr') {\n                  var result = action.value;\n                  for (var i = 0; i < result.length; i++) {\n                    if (result[i].choice_list) {\n                      for (var c = 0; c < $this.$data.classAttrList.length; c++) {\n                        var attr = $this.$data.classAttrList[c].Attr;\n                        for (var j = 0; j < attr.length; j++) {\n                          if (attr[j].Name == result[i].attr) {\n                            if (attr[j].Type == '字典' || attr[j].Type == '字典-字符串' || attr[j].Type == '字典-整数') {\n                              var dictItemList = [];\n                              for (var d in result[i].choice_list) {\n                                var val = result[i].choice_list[d];\n                                dictItemList.push({\n                                  \"CN_S_NAME\": val,\n                                  \"Name\": val,\n                                  \"label\": val,\n                                  \"value\": val\n                                });\n                              }\n                              attr[j].dictitem = dictItemList;\n                              // attr[j].dictitem = result[i].choice_list;\n                            }\n                          }\n                        }\n                      }\n                    }\n\n                    for (var c = 0; c < $this.$data.classAttrList.length; c++) {\n                      var attr = $this.$data.classAttrList[c].Attr;\n                      for (var j = 0; j < attr.length; j++) {\n                        __f__(\"log\", attr[j].Name + '==' + result[i].attr, \" at pages/modal/3037.vue:2588\");\n                        if (attr[j].Name == result[i].attr) {\n                          attr[j].Value = result[i].value;\n                        }\n                      }\n                    }\n                    var length = 0;\n                    if (!$this.$data.refdatastore.filter(function (s) {\n                      return result[i].attr == s.attr;\n                    }).length) {\n                      length = 1;\n                      $this.$data.refdatastore.push(result[i]);\n                    }\n                    if (length == 0) {\n                      for (var j = 0; j < $this.$data.refdatastore.length; j++) {\n                        if ($this.$data.refdatastore[j].attr == result[i].attr) {\n                          $this.$data.refdatastore[j].value = result[i].value;\n                        }\n                      }\n                    }\n                  }\n                } else if (data.action[i].action_type == 'set_global_attr') {\n                  $this.$data.global_attr = data.action[i].value || [];\n                }\n              }\n            }\n            if (data.result) {\n              var result = data.result;\n              for (var i = 0; i < result.length; i++) {\n                for (var c = 0; c < $this.$data.classAttrList.length; c++) {\n                  var attr = $this.$data.classAttrList[c].Attr;\n                  for (var j = 0; j < attr.length; j++) {\n                    if (attr[j].Name == result[i].attr) {\n                      attr[j].Value = result[i].value;\n                    }\n                  }\n                }\n                var length = 0;\n                if (!$this.$data.refdatastore.filter(function (s) {\n                  return result[i].attr == s.attr;\n                }).length) {\n                  length = 1;\n                  $this.$data.refdatastore.push(result[i]);\n                }\n                if (length == 0) {\n                  for (var j = 0; j < $this.$data.refdatastore.length; j++) {\n                    if ($this.$data.refdatastore[j].attr == result[i].attr) {\n                      $this.$data.refdatastore[j].value = result[i].value;\n                    }\n                  }\n                }\n              }\n            }\n          }\n        } else {\n          uni.showModal({\n            title: \"错误3\",\n            content: success.err_msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        // console.log(ex);\n        uni.showModal({\n          title: \"错误3.1\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\n    },\n    OKDataObjRunCustomEvent: function OKDataObjRunCustomEvent() {\n      var _this8 = this;\n      var enviroment = {\n        'function': '3000',\n        // 功能点编号\n        cls_id: this.$data.param.Master_Cls.ID,\n        // 功能点主数据类标识\n        'button': 'top',\n        // top/bottom\n        button_name: '新增',\n        master: {\n          cls_id: this.$data.param.Master_Cls.ID // button=bottom时 master的cls_id\n        }\n      };\n\n      var eventid = this.$data.edit_ok_event.scrip_id;\n      var req = [];\n      var attrlist = this.$data.classAttrList;\n      for (var i = 0; i < attrlist.length; i++) {\n        var attr = attrlist[i].Attr;\n        for (var j = 0; j < attr.length; j++) {\n          var ar = attr[j];\n          if (ar.Value == '请选择' || ar.Value == '——请选择——') ar.Value = '';\n          if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n          if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n            attr: ar.Name,\n            value: ar.ValID ? ar.ValID : ''\n          });else if (ar.Type == '布尔值') req.push({\n            attr: ar.Name,\n            value: ar.Value ? '1' : '0'\n          });else req.push({\n            attr: ar.Name,\n            value: ar.Value\n          });\n        }\n      }\n      if (this.$data.refdatastore.length > 0) {\n        for (var i = 0; i < this.$data.refdatastore.length; i++) {\n          if (!req.filter(function (s) {\n            return this.$data.refdatastore[i].attr == s.name;\n          }).length) {\n            length = 1;\n            req.push({\n              'attr': this.$data.refdatastore[i].attr,\n              'value': this.$data.refdatastore[i].value\n            });\n          }\n        }\n      }\n      var info = {\n        eventid: eventid,\n        edtype: \"0\",\n        projectid: '',\n        rclsid: '',\n        robjid: '',\n        userlogin: '',\n        clsid: this.$data.param.Master_Cls.ID,\n        objid: \"\",\n        attr: req\n      };\n      //  \tvar dataInfo = {\n      //          edtype: info.edtype, eventid: info.eventid, projectid: info.projectid,rclsid: info.rclsid, \n      // robjid: info.robjid, userlogin: info.userlogin, clsid: info.clsid, objid: info.objid,\n      // attr: JSON.stringify(info.attr), extinfo: JSON.stringify(enviroment), global_attr: JSON.stringify(this.$data.global_attr)\n      //      }\n      enviroment = _base.default.encode(JSON.stringify(enviroment)); //将字符串转换为base64编码\n      var global_attr = _base.default.encode(JSON.stringify(this.$data.global_attr)); //将字符串转换为base64编码\n      var obj_attr = {};\n      info.attr.forEach(function (item) {\n        obj_attr[item.attr] = item.val;\n      });\n      if (!eventid.includes('{')) eventid = '{' + eventid + '}';\n      var dataInfo = {\n        ed_type: info.edtype,\n        start_transaction: '',\n        class_id: info.clsid,\n        class_name: '',\n        event_id: eventid,\n        event_name: '',\n        data_obj_id: info.objid,\n        obj_attr: obj_attr,\n        prj_id: info.projectid,\n        ref_cls_id: info.rclsid,\n        rel_obj_id: info.robjid,\n        user_login: info.userlogin,\n        data_json: '',\n        compose_info: '',\n        ext_info: enviroment,\n        global_attr: global_attr,\n        input_param: ''\n      };\n      __f__(\"log\", dataInfo, \" at pages/modal/3037.vue:2733\");\n      // return;\n      this.$store.dispatch('runCustomEvent', dataInfo).then(function (success) {\n        __f__(\"log\", success, \" at pages/modal/3037.vue:2736\");\n        if (success.err_code == 0) {\n          var data = success.result;\n          if (data.ret != 0) {\n            var tip = data.err_info ? typeof data.err_info == 'string' ? data.err_info : data.err_info.join('<br/>') : '';\n            if (data.ret == 801) uni.showModal({\n              title: '提示',\n              content: tip,\n              showCancel: false,\n              confirmText: \"取消\"\n            });else uni.showModal({\n              title: '提示',\n              content: tip + ',提示:' + data.ret,\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n            return false;\n          } else {\n            var _tip3 = data.info ? typeof data.info == 'string' ? data.info : data.info.join('<br/>') : '';\n            if (_tip3) uni.showModal({\n              title: '提示',\n              content: _tip3,\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n            var result = data.result;\n            for (var i = 0; i < result.length; i++) {\n              // self.class_attr_ele.find('.attr_field[data-field=\"' + result[i].attr + '\"]').val(result[i].value).data('val', result[i].value);\n              var length = 0;\n              if (!_this8.$data.refdatastore.filter(function (s) {\n                return result[i].attr == s.attr;\n              }).length) {\n                length = 1;\n                _this8.$data.refdatastore.push(result[i]);\n              }\n              if (length == 0) {\n                for (var j = 0; j < _this8.$data.refdatastore.length; j++) {\n                  if (_this8.$data.refdatastore[j].attr == result[i].attr) {\n                    _this8.$data.refdatastore[j].value = result[i].value;\n                  }\n                }\n              }\n            }\n            _this8.add();\n          }\n        } else {\n          uni.showModal({\n            title: \"错误4\",\n            content: success.err_msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        // console.log(ex);\n        uni.showModal({\n          title: \"错误4.1\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\n    },\n    DataObjRunCustomEvent_Return: function DataObjRunCustomEvent_Return(eventid, data_attr, button_callback, index, iindex) {\n      var _this9 = this;\n      var enviroment = {\n        'function': '3000',\n        // 功能点编号\n        cls_id: this.$data.param.Master_Cls.ID,\n        // 功能点主数据类标识\n        'button': 'top',\n        // top/bottom\n        button_name: '新增',\n        master: {\n          cls_id: this.$data.param.Master_Cls.ID // button=bottom时 master的cls_id\n          //obj_id: ''  // button=bottom时 master的obj_id\n        }\n      };\n\n      var req = [];\n      var attrlist = this.$data.classAttrList;\n      for (var i = 0; i < attrlist.length; i++) {\n        var attr = attrlist[i].Attr;\n        for (var j = 0; j < attr.length; j++) {\n          var ar = attr[j];\n          if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n          if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n            attr: ar.Name,\n            value: ar.ValID ? ar.ValID : ''\n          });else if (ar.Type == '布尔值') req.push({\n            attr: ar.Name,\n            value: ar.Value ? '1' : '0'\n          });else req.push({\n            attr: ar.Name,\n            value: ar.Value\n          });\n        }\n      }\n      if (this.$data.refdatastore.length > 0) {\n        for (var i = 0; i < this.$data.refdatastore.length; i++) {\n          if (!req.filter(function (s) {\n            return this.$data.refdatastore[i].attr == s.name;\n          }).length) {\n            length = 1;\n            req.push({\n              'attr': this.$data.refdatastore[i].attr,\n              'value': this.$data.refdatastore[i].value\n            });\n          }\n        }\n      }\n      var extinfo = enviroment;\n      extinfo.edit_dlg = {\n        type: 'small',\n        //小窗口\n        class_id: this.$data.param.Master_Cls.ID //当前数据类id\n      };\n\n      if (data_attr) {\n        extinfo.edit_dlg.form_control = {\n          //所属的表单控件\n          name: data_attr.Name,\n          //字段属性\n          text: data_attr.DispName,\n          //显示文本\n          group_name: data_attr.GroupName,\n          //属性组\n          type: data_attr.Type,\n          //字段类型\n          readonly: data_attr.ReadOnly,\n          //是否只读\n          button_img: data_attr.button_img,\n          //引用按钮的图标\n          button_tooltip: data_attr.button_tooltip //引用按钮的tooltip\n        };\n      }\n      // var dataInfo = {\n      // \tedtype:  \"0\", eventid: eventid, projectid: '',rclsid: '', robjid: '', userlogin: '', \n      // \tclsid: this.$data.param.Master_Cls.ID, objid: '',attr: JSON.stringify(req), \n      // \textinfo: JSON.stringify(extinfo), global_attr: JSON.stringify(this.$data.global_attr)\n      // }\n      extinfo = _base.default.encode(JSON.stringify(extinfo)); //将字符串转换为base64编码\n      var global_attr = _base.default.encode(JSON.stringify(this.$data.global_attr)); //将字符串转换为base64编码\n      var obj_attr = {};\n      req.forEach(function (item) {\n        obj_attr[item.attr] = item.val;\n      });\n      if (!eventid.includes('{')) eventid = '{' + eventid + '}';\n      var dataInfo = {\n        ed_type: \"0\",\n        start_transaction: '',\n        class_id: this.$data.param.clsid,\n        class_name: '',\n        event_id: eventid,\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: extinfo,\n        global_attr: global_attr,\n        input_param: ''\n      };\n      __f__(\"log\", dataInfo, \" at pages/modal/3037.vue:2861\");\n      // return;\n      this.$store.dispatch('runCustomEvent', dataInfo).then(function (success) {\n        __f__(\"log\", success, \" at pages/modal/3037.vue:2864\");\n        if (success.err_code == 0) {\n          var data = success.result;\n          if (data.ret != 0) {\n            var tip = data.err_info ? typeof data.err_info == 'string' ? data.err_info : data.err_info.join('<br/>') : '';\n            if (data.ret == 801) uni.showModal({\n              title: '提示',\n              content: tip,\n              showCancel: false,\n              confirmText: \"取消\"\n            });else uni.showModal({\n              title: '提示',\n              content: tip + ',提示:' + data.ret,\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n            return false;\n          } else {\n            var _tip4 = data.info ? typeof data.info == 'string' ? data.info : data.info.join('<br/>') : '';\n            if (_tip4) uni.showModal({\n              title: '提示',\n              content: _tip4,\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n            if (data != \"\") {\n              var actions = data.action;\n              __f__(\"log\", actions, \" at pages/modal/3037.vue:2878\");\n              if (actions) {\n                for (var i = 0; i < actions.length; i++) {\n                  var action = actions[i];\n                  var val = action.value;\n                  var enviroment = JSON.stringify(enviroment);\n                  if (action.action_type == 'open_panel') {\n                    var d = dialog({\n                      title: '<i class=\"ace-icon fa fa-info-circle\"></i> ' + '提示',\n                      content: action.action_type + '此action尚未处理!'\n                    });\n                    d.show();\n                  } else if (action.action_type == 'open_select_userdlg') {\n                    var style = val.style;\n                    // style == 'user' ? '选择人员' : style == 'department' ? '选择部门' : style == 'role' ? '选择角色' : ''\n                    var $this = _this9;\n                    var param = {\n                      index: index,\n                      iindex: iindex,\n                      button_callback: button_callback,\n                      req: req,\n                      data_attr: data_attr\n                    };\n                    uni.navigateTo({\n                      url: '../selpsn/index?mulit=false&param=' + JSON.stringify(param),\n                      events: {\n                        AddPer: function AddPer(data, param) {\n                          // console.log(param);\n                          __f__(\"log\", data, \" at pages/modal/3037.vue:2908\");\n                          var callback_eventid = param.button_callback.trim();\n                          var info = {\n                            eventid: callback_eventid,\n                            edtype: \"0\",\n                            projectid: '',\n                            rclsid: '',\n                            robjid: '',\n                            userlogin: '',\n                            clsid: $this.$data.param.Master_Cls.ID,\n                            objid: \"\",\n                            attr: param.req,\n                            inputparameter: data\n                          };\n                          $this.DataObjRunCustomEvent(info, param.data_attr);\n                        }\n                      }\n                    });\n                  } else if (action.action_type == 'open_data_query_dlg') {} else if (action.action_type == 'open_common_dlg') {\n                    var value = action.value;\n                    var d = dialog({\n                      title: '<i class=\"ace-icon fa fa-info-circle\"></i> ' + '提示',\n                      content: action.action_type + '此action尚未处理!'\n                    });\n                    d.show();\n                  } else if (action.action_type == 'open_project_query_dlg') {\n                    //console.log(action.value.select_range);\n                    //console.log(action.value.mulit_select);\n                    var priRel = '-1';\n                    if (action.value.select_range == '全部相关') priRel = '0';else if (action.value.select_range == '我负责的项目') priRel = '1';else if (action.value.select_range == '我创建的') priRel = '2';else if (action.value.select_range == '我参与的' || action.value.select_range == '我参加的') priRel = '3';else if (action.value.select_range == '我关注的') priRel = '4';else if (action.value.select_range == '我下属的项目') priRel = '5';\n                    var $this = _this9;\n                    var param_ = {\n                      index: index,\n                      iindex: iindex,\n                      button_callback: button_callback,\n                      req: req\n                    };\n                    uni.navigateTo({\n                      url: '../selPrj/index?relation=' + priRel + '&param=' + JSON.stringify(param_),\n                      events: {\n                        AddPer: function AddPer(data, param) {\n                          $this.$data.classAttrList[param.index].Attr[param.iindex].Value = data[0].Name;\n                          $this.$data.classAttrList[param.index].Attr[param.iindex].ValID = data[0].ID + ';' + data[0].Name;\n                          var callback_eventid = param.button_callback.trim();\n                          if (callback_eventid) {\n                            var info = {\n                              eventid: callback_eventid,\n                              edtype: \"2\",\n                              projectid: data[0].ID,\n                              rclsid: \"\",\n                              robjid: \"\",\n                              userlogin: \"\",\n                              clsid: $this.$data.param.Master_Cls.ID,\n                              objid: \"\",\n                              attr: param.req\n                            };\n                            $this.DataObjRunCustomEvent(info);\n                          }\n                        }\n                      }\n                    });\n                  } else {\n                    var d = dialog({\n                      title: '<i class=\"ace-icon fa fa-info-circle\"></i> ' + '提示',\n                      content: action.action_type + '此action尚未处理!'\n                    });\n                    d.show();\n                  }\n                }\n              }\n            } else {\n              uni.showModal({\n                title: \"提示5.2\",\n                content: '调用 before_click_button 脚本返回空,event_id' + eventid,\n                showCancel: false,\n                confirmText: \"取消\"\n              });\n            }\n          }\n        } else {\n          uni.showModal({\n            title: \"错误5\",\n            content: success.err_msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        // console.log(ex);\n        uni.showModal({\n          title: \"提示5.1\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\n    },\n    scan_ini_DataObjRunCustomEvent: function scan_ini_DataObjRunCustomEvent(info) {\n      var _this10 = this;\n      var param = {\n        EditStyle: this.$data.param.Sub_Cls.View_Style.Name,\n        ViewStyle: this.$data.param.Sub_Cls.View_Style.Name,\n        NotTriggerSysEvent: 0,\n        enviroment: {\n          'function': '3000',\n          // 功能点编号\n          cls_id: this.$data.param.Sub_Cls.ID,\n          // 功能点主数据类标识\n          'button': 'top',\n          // top/bottom\n          button_name: '新增',\n          master: {\n            cls_id: this.$data.param.Sub_Cls.ID // button=bottom时 master的cls_id\n            //obj_id: ''  // button=bottom时 master的obj_id\n          }\n        }\n      };\n\n      var inputparameter = '';\n      var global_attr = '';\n      // var dataInfo = {\n      //        edtype: info.edtype, eventid: info.eventid, projectid: info.projectid,\n      //        rclsid: info.rclsid, robjid: info.robjid, userlogin: info.userlogin, clsid: info.clsid, objid: info.objid,\n      //        attr: JSON.stringify(info.attr), extinfo: JSON.stringify(param), inputparameter: inputparameter, global_attr: global_attr\n      //    }\n      param = _base.default.encode(JSON.stringify(param)); //将字符串转换为base64编码\n      var obj_attr = {};\n      info.attr.forEach(function (item) {\n        obj_attr[item.attr] = item.val;\n      });\n      if (!info.eventid.includes('{')) info.eventid = '{' + info.eventid + '}';\n      var dataInfo = {\n        ed_type: info.edtype,\n        start_transaction: '',\n        class_id: info.clsid,\n        class_name: '',\n        event_id: info.eventid,\n        event_name: '',\n        data_obj_id: info.objid,\n        obj_attr: obj_attr,\n        prj_id: info.projectid,\n        ref_cls_id: info.rclsid,\n        rel_obj_id: info.robjid,\n        user_login: info.userlogin,\n        data_json: '',\n        compose_info: '',\n        ext_info: param,\n        global_attr: '',\n        input_param: ''\n      };\n      __f__(\"log\", dataInfo, \" at pages/modal/3037.vue:3056\");\n      // return;\n      this.$store.dispatch('runCustomEvent', dataInfo).then(function (success) {\n        __f__(\"log\", success, \" at pages/modal/3037.vue:3059\");\n        if (success.err_code == 0) {\n          var data = success.result;\n          if (data.ret != 0) {\n            var tip = data.err_info ? typeof data.err_info == 'string' ? data.err_info : data.err_info.join('<br/>') : '';\n            if (data.ret == 801) uni.showModal({\n              title: '提示',\n              content: tip,\n              showCancel: false,\n              confirmText: \"取消\"\n            });else uni.showModal({\n              title: '提示',\n              content: tip + ',提示:' + data.ret,\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n            return false;\n          } else {\n            var _tip5 = data.info ? typeof data.info == 'string' ? data.info : data.info.join('<br/>') : '';\n            if (_tip5) uni.showModal({\n              title: '提示',\n              content: _tip5,\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n            var actionlist = data.action;\n            if (actionlist) {\n              for (var j = 0; j < actionlist.length; j++) {\n                var action = actionlist[j];\n                var action_type = action.action_type;\n                var value = action.value;\n                if (action_type == 'set_dlg_attr') {\n                  if (value) {\n                    var val = value;\n                    if (typeof value == 'string') {\n                      val = JSON.parse(value);\n                    }\n                    __f__(\"log\", val, \" at pages/modal/3037.vue:3083\");\n                    for (var i = 0; i < val.length; i++) {\n                      for (var a = 0; a < _this10.$data.subClassAttrList.length; a++) {\n                        for (var l = 0; l < _this10.$data.subClassAttrList[a].Attr.length; l++) {\n                          var ca = _this10.$data.subClassAttrList[a].Attr[l];\n                          if (val[i].attr == ca.Name) {\n                            if (ca.Type == '字典' || ca.Type == '字典-字符串' || ca.Type == '字典-整数') {\n                              var dictItemList = [];\n                              for (var d in val[i].choice_list) {\n                                var val = val[i].choice_list[d];\n                                dictItemList.push({\n                                  \"CN_S_NAME\": val,\n                                  \"Name\": val,\n                                  \"label\": val,\n                                  \"value\": val\n                                });\n                              }\n                              ca.dictitem = dictItemList;\n                              // attr[j].dictitem = val[i].choice_list;\n                            } else {\n                              // ca.value = val[i].value;\n                            }\n                          }\n                        }\n                      }\n                      var length = 0;\n                      if (!_this10.$data.refdatastore.filter(function (s) {\n                        return val[i].attr == s.attr;\n                      }).length) {\n                        length = 1;\n                        _this10.$data.refdatastore.push(val[i]);\n                      }\n                      if (length == 0) {\n                        for (var j = 0; j < _this10.$data.refdatastore.length; j++) {\n                          if (_this10.$data.refdatastore[j].attr == val[i].attr) {\n                            _this10.$data.refdatastore[j].value = val[i].value;\n                          }\n                        }\n                      }\n                    }\n                  }\n                }\n                if (action_type == 'open_select_userdlg') {\n                  uni.showModal({\n                    title: \"错误6.2\",\n                    content: \"open_select_userdlg这个action_type还未处理!\",\n                    showCancel: false,\n                    confirmText: \"取消\"\n                  });\n                }\n              }\n            }\n          }\n        } else {\n          uni.showModal({\n            title: \"错误6\",\n            content: success.err_msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        // console.log(ex);\n        uni.showModal({\n          title: \"错误6.1\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\n    },\n    scan_DataObjRunCustomEvent: function scan_DataObjRunCustomEvent(info, data_attr) {\n      var _this11 = this;\n      var $this = this;\n      var enviroment = {};\n      if (info.enviroment) {\n        enviroment = info.enviroment;\n      } else {\n        enviroment = {\n          'function': '3000',\n          // 功能点编号\n          cls_id: 'MBOX',\n          //this.$data.param.Sub_Cls.ID,     // 功能点从数据类标识\n          'button': 'top',\n          // top/bottom\n          button_name: '新增',\n          edit_dlg: {\n            type: 'small',\n            //小窗口\n            class_id: 'MBOX' //this.$data.param.Sub_Cls.ID,//当前数据类id\n          }\n        };\n      }\n\n      var global_attr = this.$data.global_attr;\n      if (info.global_attr) {\n        global_attr = info.global_attr;\n      }\n      enviroment = _base.default.encode(JSON.stringify(enviroment)); //将字符串转换为base64编码\n      if (info.inputParamter) {\n        info.inputParamter = _base.default.encode(JSON.stringify(info.inputParamter)); //将字符串转换为base64编码\n      }\n\n      var global_attr = _base.default.encode(JSON.stringify(this.$data.global_attr)); //将字符串转换为base64编码\n\n      var obj_attr = {};\n      info.attr.forEach(function (item) {\n        obj_attr[item.attr] = item.val;\n      });\n      if (!info.eventid.includes('{')) info.eventid = '{' + info.eventid + '}';\n      var dataInfo = {\n        ed_type: info.edtype,\n        start_transaction: '',\n        class_id: info.clsid,\n        class_name: '',\n        event_id: info.eventid,\n        event_name: '',\n        data_obj_id: info.objid,\n        obj_attr: obj_attr,\n        prj_id: info.projectid.replace('{', '').replace('}', ''),\n        ref_cls_id: info.rclsid,\n        rel_obj_id: info.robjid,\n        user_login: info.userlogin,\n        data_json: '',\n        compose_info: '',\n        ext_info: enviroment,\n        global_attr: global_attr,\n        input_param: info.inputParamter\n      };\n      __f__(\"log\", dataInfo, \" at pages/modal/3037.vue:3189\");\n      // return;\n      this.$store.dispatch('runCustomEvent', dataInfo).then(function (success) {\n        __f__(\"log\", success, \" at pages/modal/3037.vue:3192\");\n        if (success.err_code == 0) {\n          var data = success.result;\n          if (data.ret != 0) {\n            var tip = data.err_info ? typeof data.err_info == 'string' ? data.err_info : data.err_info.join('<br/>') : '';\n            if (data.ret == 801) uni.showModal({\n              title: '提示',\n              content: tip,\n              showCancel: false,\n              confirmText: \"取消\"\n            });else uni.showModal({\n              title: '提示',\n              content: tip + ',提示:' + data.ret,\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n            return false;\n          } else {\n            var _tip6 = data.info ? typeof data.info == 'string' ? data.info : data.info.join('<br/>') : '';\n            if (_tip6) uni.showModal({\n              title: '提示',\n              content: _tip6,\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n            var actionlist = data.action;\n            if (actionlist) {\n              __f__(\"log\", actionlist, \" at pages/modal/3037.vue:3206\");\n              for (var ii = 0; ii < actionlist.length; ii++) {\n                var action = actionlist[ii];\n                if (action.action_type == 'set_dlg_attr') {\n                  var result = action.value;\n                  for (var i = 0; i < result.length; i++) {\n                    if (result[i].choice_list) {\n                      for (var s = 0; s < $this.$data.subPanelList.length; s++) {\n                        for (var c = 0; c < $this.$data.subPanelList[s].subClassAttrList.length; c++) {\n                          var attr = $this.$data.subPanelList[s].subClassAttrList[c].Attr;\n                          for (var j = 0; j < attr.length; j++) {\n                            if (attr[j].Name == result[i].attr) {\n                              if (attr[j].Type == '字典' || attr[j].Type == '字典-字符串' || attr[j].Type == '字典-整数') {\n                                var dictItemList = [];\n                                for (var d in result[i].choice_list) {\n                                  var val = result[i].choice_list[d];\n                                  dictItemList.push({\n                                    \"CN_S_NAME\": val,\n                                    \"Name\": val,\n                                    \"label\": val,\n                                    \"value\": val\n                                  });\n                                }\n                                attr[j].dictitem = dictItemList;\n                                // attr[j].dictitem = result[i].choice_list;\n                              }\n                            }\n                          }\n                        }\n                      }\n                    }\n\n                    for (var s = 0; s < $this.$data.subPanelList.length; s++) {\n                      for (var c = 0; c < $this.$data.subPanelList[s].subClassAttrList.length; c++) {\n                        var attr = $this.$data.subPanelList[s].subClassAttrList[c].Attr;\n                        for (var j = 0; j < attr.length; j++) {\n                          __f__(\"log\", attr[j].Name + '==' + result[i].attr, \" at pages/modal/3037.vue:3236\");\n                          if (attr[j].Name == result[i].attr) {\n                            attr[j].Value = result[i].value;\n                          }\n                        }\n                      }\n                    }\n                    var length = 0;\n                    if (!$this.$data.refdatastore.filter(function (s) {\n                      return result[i].attr == s.attr;\n                    }).length) {\n                      length = 1;\n                      $this.$data.refdatastore.push(result[i]);\n                    }\n                    if (length == 0) {\n                      for (var j = 0; j < $this.$data.refdatastore.length; j++) {\n                        if ($this.$data.refdatastore[j].attr == result[i].attr) {\n                          $this.$data.refdatastore[j].value = result[i].value;\n                        }\n                      }\n                    }\n                  }\n                } else if (action.action_type == 'set_global_attr') {\n                  $this.$actiontr = action.value || [];\n                } else if (action.action_type == 'open_common_dlg') {\n                  //打开侧滑弹框\n                  var $this = _this11;\n                  if (action.value.common_dlg_id == 'check_list') {\n                    $this.$data.check_list = action.value.config;\n                    if (action.value.config.appear_style == 'sideslip')\n                      //判断是否是侧滑\n                      $this.$data.popupType = 'right';else $this.$data.popupType = 'center';\n                    // open 方法传入参数 等同在 uni-popup 组件上绑定 type属性\n                    $this.$refs.popup.open($this.$data.popupType);\n                  }\n                } else if (action.action_type == 'add_subcls_panel') {\n                  //主从数据类扫码查询数据\n                  var result = action.value;\n                  var $this = _this11;\n                  var list_1 = JSON.parse(JSON.stringify(_this11.$data.subClassAttrList));\n                  var scanCodeVal = $this.$data.scanCodeVal;\n                  var rand = '';\n                  for (var i = 0; i < 5; i++) {\n                    //生成5位随机数\n                    rand += Math.floor(Math.random() * 10);\n                  }\n                  if (info.inputParamter[0].attr) {\n                    if (info.inputParamter[0].attr == \"mast_input_3037\")\n                      //判断是主数据类扫码查询数据\n                      scanCodeVal = \"mast_input_3037-\" + rand;\n                  }\n                  if (info.attr[0].attr) {\n                    if (info.attr[0].attr == \"mast_input_3037\")\n                      //判断是主数据类扫码查询数据\n                      scanCodeVal = \"mast_input_3037-\" + rand;\n                  }\n                  $this.$data.subPanelList.push({\n                    scanCodeVal: scanCodeVal,\n                    subClassAttr: list_1\n                  });\n                  for (var i = 0; i < result.length; i++) {\n                    for (var s = 0; s < $this.$data.subPanelList.length; s++) {\n                      if ($this.$data.subPanelList[s].scanCodeVal == scanCodeVal) {\n                        if (result[i].attr == \"S_ID\") $this.$data.subPanelList[s].ObjID = result[i].value;\n                        var _subClassAttr = $this.$data.subPanelList[s].subClassAttr;\n                        for (var c = 0; c < _subClassAttr.length; c++) {\n                          var attr = _subClassAttr[c].Attr;\n                          for (var j = 0; j < attr.length; j++) {\n                            // console.log(attr[j].Name+'=='+result[i].attr);\n                            if (attr[j].Name == result[i].attr) {\n                              attr[j].Value = result[i].value;\n                            }\n                          }\n                        }\n\n                        // $this.$data.subPanelList[s].subClassAttr=list_1;\n                      }\n                    }\n\n                    var length = 0;\n                    if (!$this.$data.refdatastore.filter(function (s) {\n                      return result[i].attr == s.attr;\n                    }).length) {\n                      length = 1;\n                      $this.$data.refdatastore.push(result[i]);\n                    }\n                    if (length == 0) {\n                      for (var j = 0; j < $this.$data.refdatastore.length; j++) {\n                        if ($this.$data.refdatastore[j].attr == result[i].attr) {\n                          $this.$data.refdatastore[j].value = result[i].value;\n                        }\n                      }\n                    }\n                  }\n                }\n              }\n            }\n            if (data.result) {\n              var _list_ = JSON.parse(JSON.stringify(_this11.$data.subClassAttrList));\n              var scanCodeVal = $this.$data.scanCodeVal;\n              if (info.inputParamter[0].attr == \"mast_input_3037\") scanCodeVal = \"mast_input_3037-\" + ii;\n              $this.$data.subPanelList.push({\n                scanCodeVal: scanCodeVal,\n                subClassAttr: _list_\n              });\n              var result = data.result;\n              for (var i = 0; i < result.length; i++) {\n                for (var s = 0; s < $this.$data.subPanelList.length; s++) {\n                  if ($this.$data.subPanelList[s].scanCodeVal == scanCodeVal) {\n                    if (result[i].attr == \"S_ID\") $this.$data.subPanelList[s].ObjID = result[i].value;\n                    var _subClassAttr = $this.$data.subPanelList[s].subClassAttr;\n                    for (var c = 0; c < _subClassAttr.length; c++) {\n                      var attr = _subClassAttr[c].Attr;\n                      for (var j = 0; j < attr.length; j++) {\n                        // console.log(attr[j].Name+'=='+result[i].attr);\n                        if (attr[j].Name == result[i].attr) {\n                          attr[j].Value = result[i].value;\n                        }\n                      }\n                    }\n                  }\n                }\n                var length = 0;\n                if (!$this.$data.refdatastore.filter(function (s) {\n                  return result[i].attr == s.attr;\n                }).length) {\n                  length = 1;\n                  $this.$data.refdatastore.push(result[i]);\n                }\n                if (length == 0) {\n                  for (var j = 0; j < $this.$data.refdatastore.length; j++) {\n                    if ($this.$data.refdatastore[j].attr == result[i].attr) {\n                      $this.$data.refdatastore[j].value = result[i].value;\n                    }\n                  }\n                }\n              }\n            }\n          }\n        } else {\n          uni.showModal({\n            title: \"错误7\",\n            content: success.err_msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        // console.log(ex);\n        uni.showModal({\n          title: \"错误7.1\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\n    },\n    scan_OKDataObjRunCustomEvent: function scan_OKDataObjRunCustomEvent(eventID) {\n      uni.showLoading({\n        title: \"加载中...\",\n        mask: true\n      });\n      var $this = this;\n      var req = [];\n      var attrlist = $this.$data.classAttrList;\n      for (var i = 0; i < attrlist.length; i++) {\n        var attr = attrlist[i].Attr;\n        for (var j = 0; j < attr.length; j++) {\n          var ar = attr[j];\n          if (ar.Value == '请选择' || ar.Value == '——请选择——') ar.Value = '';\n          if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n          if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n            attr: ar.Name,\n            value: ar.ValID ? ar.ValID : ''\n          });else if (ar.Type == '布尔值') req.push({\n            attr: ar.Name,\n            value: ar.Value ? '1' : '0'\n          });else if (ar.Type == '字典' || ar.Type == '字典-字符串' || ar.Type == '字典-整数') {\n            if (ar.select == true) {\n              //判断下拉是否多选\n              var valStr = \"\";\n              for (var v in ar.Value) {\n                if (valStr) valStr += \";\";\n                valStr += ar.Value[v];\n              }\n              req.push({\n                attr: ar.Name,\n                value: valStr\n              });\n            } else req.push({\n              attr: ar.Name,\n              value: ar.Value\n            });\n          } else req.push({\n            attr: ar.Name,\n            value: ar.Value ? ar.Value : ''\n          });\n          if (ar.notempty == true && !ar.Value) {\n            // if(ar.NotEmpty=='1'){\n            uni.hideLoading();\n            // uni.showToast({title:ar.DispName+'不能为空!',icon:\"success\",duration:3000});\n            uni.showModal({\n              title: \"提示\",\n              content: ar.DispName + '不能为空!',\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n            return;\n          }\n        }\n      }\n      var objects = [];\n      var subPanelList = $this.$data.subPanelList;\n      for (var s = 0; s < subPanelList.length; s++) {\n        var sub_req = [];\n        for (var i = 0; i < subPanelList[s].subClassAttr.length; i++) {\n          var attr = subPanelList[s].subClassAttr[i].Attr;\n          for (var j = 0; j < attr.length; j++) {\n            var ar = attr[j];\n            if (ar.Value == '请选择' || ar.Value == '——请选择——') ar.Value = '';\n            if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n            if (ar.Type == '引用人员' || ar.Type == '引用项目') sub_req.push({\n              attr: ar.Name,\n              value: ar.ValID ? ar.ValID : ''\n            });else if (ar.Type == '布尔值') sub_req.push({\n              attr: ar.Name,\n              value: ar.Value ? '1' : '0'\n            });else if (ar.Type == '字典' || ar.Type == '字典-字符串' || ar.Type == '字典-整数') {\n              if (ar.select == true) {\n                //判断下拉是否多选\n                var valStr = \"\";\n                for (var v in ar.Value) {\n                  if (valStr) valStr += \";\";\n                  valStr += ar.Value[v];\n                }\n                sub_req.push({\n                  attr: ar.Name,\n                  value: valStr\n                });\n              } else sub_req.push({\n                attr: ar.Name,\n                value: ar.Value\n              });\n            } else sub_req.push({\n              attr: ar.Name,\n              value: ar.Value ? ar.Value : ''\n            });\n            if (ar.notempty == true && !ar.Value) {\n              // if(ar.NotEmpty=='1'){\n              uni.hideLoading();\n              // uni.showToast({title:ar.DispName+'不能为空!',icon:\"success\",duration:3000});\n              uni.showModal({\n                title: \"提示\",\n                content: ar.DispName + '不能为空!',\n                showCancel: false,\n                confirmText: \"取消\"\n              });\n              return;\n            }\n          }\n        }\n        objects.push({\n          obj_id: subPanelList[s].scanCodeVal,\n          obj_attrs: sub_req\n        });\n      }\n      var dataJson = {\n        master_cls: {\n          cls_name: 'MBOX',\n          //$this.$data.param.Master_Cls.Name,\n          obj_attrs: req\n        },\n        input_3037: $this.$data.scanCodeVal,\n        //扫码内容\n        op_type: $this.$data.param.OperationType,\n        //作业类型定义\n        sub_cls: {\n          cls_name: 'MBOX',\n          //$this.$data.param.Sub_Cls.Name,\n          objects: objects\n        }\n      };\n      // console.log(JSON.stringify(dataJson));\n      //  \tvar dataInfo = {\n      //          edtype: \"7\", eventid: eventID, projectid: '',rclsid: '', robjid: '', userlogin: '', \n      // clsid: 'MBOX', objid: '',attr: JSON.stringify([]), extinfo: JSON.stringify([]), \n      // global_attr: JSON.stringify($this.$data.global_attr),dataJson:JSON.stringify(dataJson)\n      //      }\n      // console.log(JSON.stringify(dataInfo));\n      var dataJson = _base.default.encode(JSON.stringify(dataJson)); //将字符串转换为base64编码\n      var global_attr = _base.default.encode(JSON.stringify(this.$data.global_attr)); //将字符串转换为base64编码\n      if (!eventID.includes('{')) eventID = '{' + eventID + '}';\n      var dataInfo = {\n        ed_type: \"7\",\n        start_transaction: '',\n        class_id: 'MBOX',\n        class_name: '',\n        event_id: eventID,\n        event_name: '',\n        data_obj_id: '',\n        obj_attr: '',\n        prj_id: '',\n        ref_cls_id: '',\n        rel_obj_id: '',\n        user_login: '',\n        data_json: dataJson,\n        compose_info: '',\n        ext_info: '',\n        global_attr: global_attr,\n        input_param: ''\n      };\n      __f__(\"log\", dataInfo, \" at pages/modal/3037.vue:3511\");\n      // return;\n      this.$store.dispatch('runCustomEvent', dataInfo).then(function (success) {\n        __f__(\"log\", success, \" at pages/modal/3037.vue:3514\");\n        uni.hideLoading();\n        if (success.err_code == 0) {\n          var data = success.result;\n          if (data.ret != 0) {\n            var tip = data.err_info ? typeof data.err_info == 'string' ? data.err_info : data.err_info.join('<br/>') : '';\n            if (data.ret == 801) uni.showModal({\n              title: '提示',\n              content: tip,\n              showCancel: false,\n              confirmText: \"取消\"\n            });else uni.showModal({\n              title: '提示',\n              content: tip + ',提示:' + data.ret,\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n            return false;\n          } else {\n            var _tip7 = data.info ? typeof data.info == 'string' ? data.info : data.info.join('<br/>') : '';\n            if (_tip7) uni.showModal({\n              title: '提示',\n              content: _tip7,\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n            var result = data.result;\n            if (eventID != $this.$data.param.After_OK_Event.ID) $this.scan_OKDataObjRunCustomEvent($this.$data.param.After_OK_Event.ID);else {\n              //刷新\n              uni.redirectTo({\n                url: '../modal/3037?param=' + JSON.stringify($this.$data.param) + \"&titlename=\" + $this.$data.title\n              });\n            }\n          }\n        } else {\n          uni.showModal({\n            title: \"错误8\",\n            content: success.err_msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        // console.log(ex);\n        uni.hideLoading();\n        uni.showModal({\n          title: \"错误8.1\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vcGFnZXMvbW9kYWwvMzAzNy52dWUiXSwibmFtZXMiOlsibW9kdWxlcyIsIkJhc2U2NCIsImNvbXBvbmVudHMiLCJwaWNrZXJBZGRyZXNzIiwiZGF0YSIsInRpdGxlIiwicGFyYW0iLCJjbGFzc0F0dHJMaXN0IiwiY2xhc3NHcmlkU3R5bGUiLCJlZGl0X2luaXRhbF9ldmVudCIsImVkaXRfb2tfZXZlbnQiLCJlZGl0X3NlbGVjdF9jb21wb3NlX2V2ZW50IiwiZWRpdF9jb21wb3NlX2Nsc19pZCIsImdsb2JhbF9hdHRyIiwicmVmZGF0YXN0b3JlIiwic2NhbkNvZGVWYWwiLCJzdWJDbGFzc0F0dHJMaXN0Iiwic3ViUGFuZWxMaXN0Iiwic3ViQ2xhc3NHcmlkU3R5bGUiLCJwb3B1cFR5cGUiLCJjaGVja19saXN0Iiwib25Mb2FkIiwib3B0aW9ucyIsInVuaSIsInNldE5hdmlnYXRpb25CYXJUaXRsZSIsInRpdGxlbmFtZSIsIkpTT04iLCJwYXJzZSIsIiRkYXRhIiwiQWRkX0J0bk5hbWUiLCJNYXN0ZXJfQ2xzIiwiVmlld19TdHlsZSIsInNob3dNb2RhbCIsImNvbnRlbnQiLCJzaG93Q2FuY2VsIiwiY29uZmlybVRleHQiLCJOYW1lIiwiZGF0YUluZm8iLCJjbGFzc19pZCIsIklEIiwiJHRoaXMiLCIkc3RvcmUiLCJzdGF0ZSIsInRoaXNhcmVhRnVuY0lEIiwiZ2V0dGVycyIsImdldGNsYXNzQXR0ckxpc3QiLCJjbGFzc0dyaWRTdHlsZUluZm8iLCJkaXNwYXRjaCIsInRoZW4iLCJzdWNjZXNzIiwiZXJyX2NvZGUiLCJyZXN1bHQiLCJmb3JFYWNoIiwiZ3JvdXAiLCJpbmRleCIsImF0dHJfbGlzdCIsImF0dHIiLCJrZXkiLCJ0eXBlIiwiRGljdEl0ZW1HZXRMaXN0Iiwic2V0VGltZW91dCIsImVycl9tc2ciLCJjYXRjaCIsImV4IiwiZXJyTXNnIiwic3ViZGF0YUluZm8iLCJTdWJfQ2xzIiwidGhpc2FyZWFGdW5jU3ViSUQiLCJnZXRTdWJDbGFzc0F0dHJMaXN0IiwibWV0aG9kcyIsImRpY3RfaWQiLCJkaWN0X25hbWUiLCJkaWN0aXRlbSIsImNvbW1pdCIsImNsc2lkIiwic3R5bGVOYW1lIiwiY2xzVHlwZSIsImdyaWRzdHlsZUluZm8iLCJ1aV9zdHlsZV90eXBlIiwidWlfc3R5bGVfbmFtZSIsInRoaXNFZGl0TmFtZSIsImdldGNsYXNzR3JpZFN0eWxlSW5mbyIsInZpZXdQYXJhbSIsInN0eWxlZGVmIiwiZGVjb2RlIiwic3R5bGVfZGVmIiwidGhpc0VkaXRTdWJOYW1lIiwiZ2V0U3ViQ2xhc3NHcmlkU3R5bGVJbmZvIiwiY2xhc3NfZ3JpZFN0eWxlIiwiaWQiLCJuYW1lIiwiVHlwZSIsIklzRGVmYXVsdCIsImlzX2RlZmF1bCIsIlN0eWxlRGVmIiwiY2xhc3NfYXR0ckxpc3QiLCJhdHRycyIsImRpY3RpdGVtcyIsImRpY3QiLCJwdXNoIiwiTm90ZSIsIm5vdGUiLCJPcmRlciIsIm9yZGVyIiwiSW1nVXJsIiwiQ29kZSIsImNvZGUiLCJIYXNTdWIiLCJQYXJlbnRJRCIsIlBhcmVudE5hbWUiLCJMdmwiLCJsdmwiLCJpc19kZWZhdWx0IiwiVmFsdWUiLCJ2YWx1ZSIsIkNOX0dfSUQiLCJDTl9HX0RJQ1RfSUQiLCJDTl9TX05BTUUiLCJDTl9TX05PVEUiLCJDTl9OX09SREVSIiwiQ05fU19JTUdfVVJMIiwiQ05fU19DT0RFIiwiQ05fQ19IQVNfU1VCIiwiQ05fR19QQVJFTlRfSVRFTV9JRCIsIkNOX0dfUEFSRU5UX0lURU1fTkFNRSIsIkNOX05fTFZMIiwiQ05fQ19JU19ERUZBVUxUIiwiQ05fU19WQUxVRSIsIlNpemUiLCJzaXplIiwiTm90RW1wdHkiLCJub3RfZW1wdHkiLCJEZWZWYWx1ZSIsImRlZl92YWx1ZSIsIkRpY3ROYW1lIiwiRGljdElEIiwiQ29kZURlZk5hbWUiLCJjb2RlX2RlZl9uYW1lIiwiQ29kZURlZklEIiwiY29kZV9kZWZfaWQiLCJSZWxDbHNJRCIsIlJlbENscyIsInJlZl9jbHMiLCJXaWR0aCIsIndpZHRoIiwiSGVpZ2h0IiwiaGVpZ2h0IiwiQ3RybFN0eWxlIiwiY3RybF9zdHlsZSIsIkhhc0FjZSIsImhhc19hY2UiLCJDYW5TaG93IiwiY2FuX3Nob3ciLCJDYW5RdWVyeSIsImNhbl9xdWVyeSIsIlJlYWRPbmx5IiwicmVhZF9vbmx5IiwiSXNLZXkiLCJpc19rZXkiLCJJc0ZpeGVkIiwiaXNfZml4ZWQiLCJEaXNwTmFtZSIsImRpc3BfbmFtZSIsIkx1YUF0dHIiLCJsdWFfYXR0ciIsIkRlc2MiLCJkZXNjIiwiQWN0aW9uRGVmIiwiYWN0aW9uX2RlZiIsIk11bHRpbGluZ3VhbCIsIm11bHRpbGluZ3VhbCIsIlJlZkNvbmRpdGlvbiIsInJlZl9jb25kaXRpb24iLCJHcm91cE5hbWUiLCJCa0NvbG9yIiwiYmtfY29sb3IiLCJJbWdGb250U3R5bGUiLCJpbWdfZm9udF9zdHlsZSIsIkF0dHIiLCJjbGFzc19hdHRyX2luaXQiLCJzdWJDbGFzc19hdHRyX2luaXQiLCJhdHRybGlzdCIsInNob3dfc3R5bGUiLCJuZXdhdHRybGlzdCIsImxlbmd0aCIsImkiLCJvcGVuIiwiYXR0cmdyb3VwX25hbWUiLCJzIiwiY2xzYXR0ciIsImoiLCJsIiwiY2EiLCJhY3Rpb24iLCJlZGl0Iiwibm90ZW1wdHkiLCJleHRfYnV0dG9uIiwiYnV0dG9uX2ltZyIsImJ1dHRvbl90b29sdGlwIiwiYmVmb3JlX2NsaWNrX2J1dHRvbiIsImJ1dHRvbl9jYWxsYmFjayIsImhpZGRlbiIsInNlbGVjdCIsInVuZGVmaW5lZCIsImRpY3RpdGVtbGlzdCIsImQiLCJsYWJlbCIsIm5vd0RhdGUiLCJEYXRlIiwiZGF0ZSIsInllYXIiLCJnZXRGdWxsWWVhciIsIm1vbnRoIiwiZ2V0TW9udGgiLCJkYXkiLCJnZXREYXRlIiwiUmVsQ2xzTGlzdCIsIk9wZW4iLCJjb250cm9sX3N0eWxlIiwidGl0bGVfcF93ZGl0aCIsIkZvbnQiLCJCa19Db2xvciIsIlRleHRfQ29sb3IiLCJyZXEiLCJhciIsImV2ZW50bGlzdCIsImV2ZW50IiwiZXZlbnRfaWQiLCJzY3JpcF9pZCIsImNvbXBvc2VfY2xzX2lkIiwiZXZlbnRpZCIsImluZm8iLCJlZHR5cGUiLCJwcm9qZWN0aWQiLCJyY2xzaWQiLCJyb2JqaWQiLCJ1c2VybG9naW4iLCJvYmppZCIsImluaV9EYXRhT2JqUnVuQ3VzdG9tRXZlbnQiLCJzY2FuX2luaV9EYXRhT2JqUnVuQ3VzdG9tRXZlbnQiLCJzY2FuX2NsYXNzQXR0cl9leHRCdXR0b24iLCJlIiwiQmVmb3JlX1NlbGVjdF9FdmVudCIsIlNjYW5fQ29kZSIsIm1hc3RfYXR0ciIsIlZhbElEIiwib2JqZWN0cyIsInN1Yl9yZXEiLCJzdWJDbGFzc0F0dHIiLCJ2YWxTdHIiLCJ2IiwiaGlkZUxvYWRpbmciLCJvYmpfaWQiLCJvYmpfYXR0cnMiLCJlbnZpcm9tZW50IiwiY2xzX2lkIiwiYnV0dG9uX25hbWUiLCJlZGl0X2RsZyIsIm1hc3Rlcl9jbHMiLCJjbHNfbmFtZSIsInN1Yl9jbHMiLCJpbnB1dFBhcmFtdGVyIiwic2Nhbl9EYXRhT2JqUnVuQ3VzdG9tRXZlbnQiLCJwb3B1cENoYW5nZSIsInNob3ciLCJjaGVja0NoYW5nZSIsInRhcmdldCIsImRhdGFzZXQiLCJpc2NoZWNrIiwiaXRlbXMiLCJtdWx0aXBsZV9jaG9pY2UiLCJjaGVjayIsInBvcHVwX2NhbmNlbCIsIiRyZWZzIiwicG9wdXAiLCJjbG9zZSIsInBvcHVwX3NhdmEiLCJBZnRlcl9TZWxlY3RfRXZlbnQiLCJjYW5jZWwiLCJuYXZpZ2F0ZUJhY2siLCJkZWx0YSIsInBhbmVsX2RlbCIsIk9iaklEIiwic3BsaWNlIiwiY2xhc3NfbmFtZSIsInNob3dMb2FkaW5nIiwicmV0IiwibXNnIiwib250YXAiLCJnZXRBcHAiLCJvblNjYW4iLCJpc1ZhbCIsImRlY29kZWRhdGEiLCJoaWRlS2V5Ym9hcmQiLCJJbnB1dF9DaGFuZ2VfRXZlbnQiLCJzdWJvbnRhcCIsInNjYW5fb250YXAiLCJpc2ZsYWciLCJtYXN0X3JlcSIsImNsYXNzYXR0cmxpc3QiLCJzY2FuX29uZXZlbnQiLCJvbmFycm93IiwiZGF0YV9hdHRyIiwib25kYXRlVGltZSIsIm9uY2hhbmdlIiwidmFsIiwiRGF0YU9ialJ1bkN1c3RvbUV2ZW50Iiwib25jaGFuZ2UyIiwiaXRlbSIsImRlbHZhbHVlIiwiaWluZGV4IiwiZGluZGV4IiwiaXRlbXZhbHVlIiwic3ViX29uY2hhbmdlIiwic3ViX29uY2hhbmdlMiIsIm9uZXZlbnQiLCJvbmNoZWNrIiwiaXNjaGVja2VkIiwiaW5wdXRWYWxMaXN0SXNEZWwiLCJpbnB1dFZhbExpc3QiLCJhZGRyZXNzY2hhbmdlIiwiam9pbiIsImNsYXNzQXR0cl9leHRCdXR0b24iLCJEYXRhT2JqUnVuQ3VzdG9tRXZlbnRfUmV0dXJuIiwiY2xhc3NBdHRyX0FkZFBlciIsIm5hdmlnYXRlVG8iLCJ1cmwiLCJzdHJpbmdpZnkiLCJldmVudHMiLCJBZGRQZXIiLCJMb2dpbiIsInRyaW0iLCJjbGFzc0F0dHJfQWRkUmVmIiwiY2xhc3NBdHRyX0FkZFByaiIsInNhdmEiLCJCZWZvcmVfT0tfRXZlbnQiLCJzY2FuX09LRGF0YU9ialJ1bkN1c3RvbUV2ZW50IiwiQWZ0ZXJfT0tfRXZlbnQiLCJhZGQiLCJtYXNrIiwibWFzdGVyIiwiZW5jb2RlIiwib2JqX2F0dHIiLCJtYXN0ZXJfY2xzX2lkIiwibWFzdGVyX29ial9pZCIsImNyZWF0b3IiLCJjcmVhdG9yX25hbWUiLCJub3RfdHJpZ2dlcl9ldmVudCIsInVwZGF0ZV9leGlzdCIsInBvc3RfcHJvY2VzcyIsImV4dF9pbmZvIiwiQWN0aW9uIiwicmVzdWx0X3R5cGUiLCJzaG93VG9hc3QiLCJpY29uIiwiZHVyYXRpb24iLCJyZWRpcmVjdFRvIiwiRWRpdFN0eWxlIiwiVmlld1N0eWxlIiwiTm90VHJpZ2dlclN5c0V2ZW50IiwiaW5wdXRwYXJhbWV0ZXIiLCJpbmNsdWRlcyIsImVkX3R5cGUiLCJzdGFydF90cmFuc2FjdGlvbiIsImV2ZW50X25hbWUiLCJkYXRhX29ial9pZCIsInByal9pZCIsInJlZl9jbHNfaWQiLCJyZWxfb2JqX2lkIiwidXNlcl9sb2dpbiIsImRhdGFfanNvbiIsImNvbXBvc2VfaW5mbyIsImlucHV0X3BhcmFtIiwidGlwIiwiZXJyX2luZm8iLCJhY3Rpb25saXN0IiwiYWN0aW9uX3R5cGUiLCJhIiwiZGljdEl0ZW1MaXN0IiwiY2hvaWNlX2xpc3QiLCJmaWx0ZXIiLCJmb3JtX2NvbnRyb2wiLCJ0ZXh0IiwiZ3JvdXBfbmFtZSIsInJlYWRvbmx5IiwiZGF0YUpzb24iLCJjIiwiT0tEYXRhT2JqUnVuQ3VzdG9tRXZlbnQiLCJleHRpbmZvIiwiYWN0aW9ucyIsImRpYWxvZyIsInN0eWxlIiwiY2FsbGJhY2tfZXZlbnRpZCIsInByaVJlbCIsInNlbGVjdF9yYW5nZSIsInBhcmFtXyIsInJlcGxhY2UiLCJpaSIsIiRhY3Rpb250ciIsImNvbW1vbl9kbGdfaWQiLCJjb25maWciLCJhcHBlYXJfc3R5bGUiLCJsaXN0XzEiLCJyYW5kIiwiTWF0aCIsImZsb29yIiwicmFuZG9tIiwiX3N1YkNsYXNzQXR0ciIsImV2ZW50SUQiLCJpbnB1dF8zMDM3Iiwib3BfdHlwZSIsIk9wZXJhdGlvblR5cGUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQTZyQkM7QUFDQTtBQTlyQkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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S0FBSyxDQUFDdEIsS0FBSyxDQUFDLEdBQUMsYUFBYSxHQUFDa0MsS0FBSyxDQUFDWixLQUFLLENBQUN2QjtjQUN4RixDQUFDLENBQUM7WUFDSDtVQUNEO1FBQ0UsQ0FBQyxNQUFJO1VBQ0prQixHQUFHLENBQUNTLFNBQVMsQ0FBQztZQUFDM0IsS0FBSyxFQUFDLEtBQUs7WUFBQzRCLE9BQU8sRUFBQ2dCLE9BQU8sQ0FBQ1ksT0FBTztZQUFDM0IsVUFBVSxFQUFDLEtBQUs7WUFBQ0MsV0FBVyxFQUFDO1VBQUksQ0FBQyxDQUFDO1FBQ3ZGO01BQ0QsQ0FBQyxDQUFDLENBQUMyQixLQUFLLENBQUMsVUFBQUMsRUFBRSxFQUFFO1FBQ1o7UUFDSHhDLEdBQUcsQ0FBQ29PLFdBQVcsRUFBRTtRQUNkcE8sR0FBRyxDQUFDUyxTQUFTLENBQUM7VUFBQzNCLEtBQUssRUFBQyxPQUFPO1VBQUM0QixPQUFPLEVBQUM4QixFQUFFLENBQUNDLE1BQU07VUFBQzlCLFVBQVUsRUFBQyxLQUFLO1VBQUNDLFdBQVcsRUFBQztRQUFJLENBQUMsQ0FBQztNQUNuRixDQUFDLENBQUM7SUFDSDtFQUdKO0FBQ0QsQ0FBQztBQUFBLDJCIiwiZmlsZSI6IjExNS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cblx0aW1wb3J0IEJhc2U2NCBmcm9tICcuLi8uLi9jb21wb25lbnRzL2pzLWJhc2U2NC9iYXNlNjQuanMnXG5cdGltcG9ydCBwaWNrZXJBZGRyZXNzIGZyb20gJy4uLy4uL2pzL3BpY2tlckFkZHJlc3MvcGlja2VyQWRkcmVzcy52dWUnXG5cdGV4cG9ydCBkZWZhdWx0IHtcblx0XHRtb2R1bGVzOntcblx0XHRcdEJhc2U2NCxcblx0XHR9LFxuXHRcdGNvbXBvbmVudHM6IHtcbiAgICAgICAgICAgIHBpY2tlckFkZHJlc3NcbiAgICAgICAgfSxcblx0XHRkYXRhKCkge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0dGl0bGU6ICfmlrDlop4nLFxuXHRcdFx0XHRwYXJhbTp7fSxcblx0XHRcdFx0Y2xhc3NBdHRyTGlzdDpbXSxcblx0XHRcdFx0Y2xhc3NHcmlkU3R5bGU6W10sXG5cdFx0XHRcdGVkaXRfaW5pdGFsX2V2ZW50OlwiXCIsICAvL+W8ueeql+WIneWni+WMluS6i+S7tklEXG5cdFx0XHRcdGVkaXRfb2tfZXZlbnQ6XCJcIiwgICAgICAvL+W8ueeql+eCueWHu09LIOinpuWPkeS6i+S7tklEXG5cdFx0XHRcdGVkaXRfc2VsZWN0X2NvbXBvc2VfZXZlbnQ6XCJcIiwgIC8v6YCJ5oup57uE5oiQ5a+56LGh5pe26LCD55SoXG5cdFx0XHRcdGVkaXRfY29tcG9zZV9jbHNfaWQ6XCJcIixcblx0XHRcdFx0Z2xvYmFsX2F0dHI6W10sXG5cdFx0XHRcdHJlZmRhdGFzdG9yZTogW10sXHQgICAvL+W8leeUqOaVsOaNruWtmOWCqOWMui8vIHthdHRyOidHX1BSSl8nICsgYmluZGF0dHIgKyAnX0lEJywgdmFsdWU6aW5mby5pZH1cblx0XHRcdFx0c2NhbkNvZGVWYWw6XCJcIixcblx0XHRcdFx0c3ViQ2xhc3NBdHRyTGlzdDpbXSxcblx0XHRcdFx0c3ViUGFuZWxMaXN0OltdLFxuXHRcdFx0XHRzdWJDbGFzc0dyaWRTdHlsZTpbXSxcblx0XHRcdFx0cG9wdXBUeXBlOlwiY2VudGVyXCIsXG5cdFx0XHRcdGNoZWNrX2xpc3Q6e30sXG5cdFx0XHR9XG5cdFx0fSxcblx0XHRvbkxvYWQob3B0aW9ucykge1xuXHRcdFx0Ly8gY29uc29sZS5sb2cob3B0aW9ucyk7XG5cdFx0XHR1bmkuc2V0TmF2aWdhdGlvbkJhclRpdGxlKHsgdGl0bGU6IG9wdGlvbnMudGl0bGVuYW1lfSk7IC8v6K6+572u6aG26YOo5qCH6aKYIFxuXHRcdFx0dmFyIHBhcmFtID0gSlNPTi5wYXJzZShvcHRpb25zLnBhcmFtKTtcblx0XHRcdHRoaXMuJGRhdGEudGl0bGUgPSBwYXJhbS5BZGRfQnRuTmFtZT9wYXJhbS5BZGRfQnRuTmFtZTpvcHRpb25zLnRpdGxlbmFtZTsgLy/orr7nva7mjInpkq7mloflrZdcblx0XHRcdGNvbnNvbGUubG9nKHBhcmFtKTtcblx0XHRcdGlmKCFwYXJhbS5NYXN0ZXJfQ2xzLlZpZXdfU3R5bGUpe1xuXHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIuaPkOekulwiLGNvbnRlbnQ6XCLor6Xlip/og73ngrnmnKrphY3nva7nlYzpnaLnqpflj6PvvIzor7fph43mlrDphY3nva7vvIFcIixzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0aWYoIXBhcmFtLk1hc3Rlcl9DbHMuVmlld19TdHlsZS5OYW1lKXtcblx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLmj5DnpLpcIixjb250ZW50Olwi6K+l5Yqf6IO954K55pyq6YWN572u56qX5Y+j5qC35byP77yM6K+36YeN5paw6YWN572u77yBXCIsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdHRoaXMuJGRhdGEucGFyYW0gPSBwYXJhbTtcblx0XHRcdC8vIHZhciBlZGl0X2RsZyA9IHtcblx0XHRcdC8vICAgICBNb2RlbDogcGFyYW0uRWRpdERsZ01vZGUsXG5cdFx0XHQvLyAgICAgTmFtZTogcGFyYW0uTWFzdGVyX0Nscy5WaWV3X1N0eWxlLk5hbWVcblx0XHRcdC8vIH1cblx0XHRcdC8v5Li75pWw5o2u57G76I635Y+WXG5cdFx0XHR2YXIgZGF0YUluZm8gPSB7XG5cdFx0XHRcdGNsYXNzX2lkOiBwYXJhbS5NYXN0ZXJfQ2xzLklEXG5cdFx0XHR9O1xuXHRcdFx0dmFyICR0aGlzID0gdGhpcztcblx0XHRcdCR0aGlzLiRzdG9yZS5zdGF0ZS50aGlzYXJlYUZ1bmNJRCA9IHBhcmFtLk1hc3Rlcl9DbHMuSUQ7XG5cdFx0XHQvLyBjb25zb2xlLmxvZygkdGhpcy4kc3RvcmUuZ2V0dGVycy5nZXRjbGFzc0F0dHJMaXN0KTtcblx0XHRcdGlmKCR0aGlzLiRzdG9yZS5nZXR0ZXJzLmdldGNsYXNzQXR0ckxpc3Qpe1xuXHRcdFx0IFx0JHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdCA9ICR0aGlzLiRzdG9yZS5nZXR0ZXJzLmdldGNsYXNzQXR0ckxpc3Q7XG5cdFx0XHRcdCR0aGlzLmNsYXNzR3JpZFN0eWxlSW5mbyhwYXJhbS5NYXN0ZXJfQ2xzLklELCR0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuVmlld19TdHlsZS5OYW1lLCdNYXN0Jyk7XG5cdFx0XHR9ZWxzZXtcblx0XHRcdFx0JHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdjbGFzc0F0dHJHZXRMaXN0JyxkYXRhSW5mbykudGhlbihzdWNjZXNzPT57XG5cdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coc3VjY2Vzcyk7XG5cdFx0XHRcdFx0aWYgKHN1Y2Nlc3MuZXJyX2NvZGUgPT0gMCkge1xuXHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdCA9IHN1Y2Nlc3MucmVzdWx0O1xuXHRcdFx0XHRcdFx0c3VjY2Vzcy5yZXN1bHQuZm9yRWFjaChhc3luYyAoZ3JvdXAsaW5kZXgpID0+IHtcblx0XHRcdFx0XHRcdFx0Z3JvdXAuYXR0cl9saXN0LmZvckVhY2goYXN5bmMgKGF0dHIsa2V5KSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGF0dHIudHlwZSA9PSBcIuWtl+WFuC3lrZfnrKbkuLJcIiB8fCBhdHRyLnR5cGUgPT0gXCLlrZflhbgt5pW05pWwXCIpe1xuXHRcdFx0XHRcdFx0XHRcdFx0YXdhaXQgJHRoaXMuRGljdEl0ZW1HZXRMaXN0KGF0dHIsa2V5LGluZGV4LCdtYXN0Jyk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0c2V0VGltZW91dChmdW5jdGlvbigpe1x0XG5cdFx0XHRcdFx0XHRcdCR0aGlzLmNsYXNzR3JpZFN0eWxlSW5mbyhwYXJhbS5NYXN0ZXJfQ2xzLklELCR0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuVmlld19TdHlsZS5OYW1lLCdNYXN0Jyk7XG5cdFx0XHRcdFx0XHR9LDUwMCk7XG5cdFx0XHRcdFx0fWVsc2V7XG5cdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzFcIixjb250ZW50OnN1Y2Nlc3MuZXJyX21zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pLmNhdGNoKGV4PT57XG5cdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coZXgpO1xuXHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vMS4xXCIsY29udGVudDpleC5lcnJNc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0XG5cdFx0XHQvL+S7juaVsOaNruexu+iOt+WPllxuXHRcdFx0dmFyIHN1YmRhdGFJbmZvID0ge1xuXHRcdFx0XHRjbGFzc19pZDogcGFyYW0uU3ViX0Nscy5JRFxuXHRcdFx0fTtcblx0XHRcdCR0aGlzLiRzdG9yZS5zdGF0ZS50aGlzYXJlYUZ1bmNTdWJJRCA9IHBhcmFtLlN1Yl9DbHMuSUQ7XG5cdFx0XHRpZigkdGhpcy4kc3RvcmUuZ2V0dGVycy5nZXRTdWJDbGFzc0F0dHJMaXN0KXtcblx0XHRcdCBcdCR0aGlzLiRkYXRhLnN1YkNsYXNzQXR0ckxpc3QgPSAkdGhpcy4kc3RvcmUuZ2V0dGVycy5nZXRTdWJDbGFzc0F0dHJMaXN0O1xuXHRcdFx0XHQkdGhpcy5jbGFzc0dyaWRTdHlsZUluZm8ocGFyYW0uU3ViX0Nscy5JRCwkdGhpcy4kZGF0YS5wYXJhbS5TdWJfQ2xzLlZpZXdfU3R5bGUuTmFtZSwnU3ViJyk7XG5cdFx0XHR9ZWxzZXtcblx0XHRcdFx0JHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdzdWJDbGFzc0F0dHJHZXRMaXN0JyxzdWJkYXRhSW5mbykudGhlbihzdWNjZXNzPT57XG5cdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coc3VjY2Vzcyk7XG5cdFx0XHRcdFx0aWYgKHN1Y2Nlc3MuZXJyX2NvZGUgPT0gMCkge1xuXHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEuc3ViQ2xhc3NBdHRyTGlzdCA9IHN1Y2Nlc3MucmVzdWx0O1xuXHRcdFx0XHRcdFx0c3VjY2Vzcy5yZXN1bHQuZm9yRWFjaChhc3luYyAoZ3JvdXAsaW5kZXgpID0+IHtcblx0XHRcdFx0XHRcdFx0Z3JvdXAuYXR0cl9saXN0LmZvckVhY2goYXN5bmMgKGF0dHIsa2V5KSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGF0dHIudHlwZSA9PSBcIuWtl+WFuC3lrZfnrKbkuLJcIiB8fCBhdHRyLnR5cGUgPT0gXCLlrZflhbgt5pW05pWwXCIpe1xuXHRcdFx0XHRcdFx0XHRcdFx0YXdhaXQgJHRoaXMuRGljdEl0ZW1HZXRMaXN0KGF0dHIsa2V5LGluZGV4LCdzdWInKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XG5cdFx0XHRcdFx0XHRcdCR0aGlzLmNsYXNzR3JpZFN0eWxlSW5mbyhwYXJhbS5TdWJfQ2xzLklELCR0aGlzLiRkYXRhLnBhcmFtLlN1Yl9DbHMuVmlld19TdHlsZS5OYW1lLCdTdWInKTtcblx0XHRcdFx0XHRcdH0sNTAwKTtcblx0XHRcdFx0XHR9ZWxzZXtcblx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vMV8xXCIsY29udGVudDpzdWNjZXNzLmVycl9tc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KS5jYXRjaChleD0+e1xuXHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKGV4KTtcblx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzFfMS4xXCIsY29udGVudDpleC5lcnJNc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0bWV0aG9kczoge1xuXHRcdFx0YXN5bmMgRGljdEl0ZW1HZXRMaXN0KGF0dHIsa2V5LGluZGV4LHR5cGUpeyAvL01vYm94M+W+l+WIsOWtl+WFuOmhueWIl+ihqFxuXHRcdFx0XHR0aGlzLmRhdGE9W107XG5cdFx0XHRcdHZhciAkdGhpcyA9IHRoaXM7XG5cdFx0XHRcdHZhciBkYXRhSW5mbyA9e1xuXHRcdFx0XHRcdGRpY3RfaWQ6IGF0dHIuZGljdF9pZCxcblx0XHRcdFx0XHRkaWN0X25hbWU6IGF0dHIuZGljdF9uYW1lXG5cdFx0XHRcdH07XG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKGRhdGFJbmZvKTtcblx0XHRcdFx0dGhpcy4kc3RvcmUuZGlzcGF0Y2goJ0RpY3RJdGVtR2V0TGlzdCcsZGF0YUluZm8pLnRoZW4oYXN5bmMgKHN1Y2Nlc3MpPT57XG5cdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coc3VjY2Vzcyk7XG5cdFx0XHRcdFx0aWYgKHN1Y2Nlc3MuZXJyX2NvZGUgPT0gMCkge1xuXHRcdFx0XHRcdFx0aWYodHlwZT09J21hc3QnKXtcblx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtpbmRleF0uYXR0cl9saXN0W2tleV0uZGljdGl0ZW09c3VjY2Vzcy5yZXN1bHQ7XG5cdFx0XHRcdFx0XHRcdHRoaXMuJHN0b3JlLmNvbW1pdChcImNsYXNzQXR0ckxpc3RcIiwgJHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdCk7XG5cdFx0XHRcdFx0XHR9ZWxzZXtcblx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEuc3ViQ2xhc3NBdHRyTGlzdFtpbmRleF0uYXR0cl9saXN0W2tleV0uZGljdGl0ZW09c3VjY2Vzcy5yZXN1bHQ7XG5cdFx0XHRcdFx0XHRcdHRoaXMuJHN0b3JlLmNvbW1pdChcInN1YkNsYXNzQXR0ckxpc3RcIiwgJHRoaXMuJGRhdGEuc3ViQ2xhc3NBdHRyTGlzdCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcblx0XHRcdFx0XHR9ZWxzZXtcblx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vMS4yXCIsY29udGVudDpzdWNjZXNzLmVycl9tc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KS5jYXRjaChleD0+e1xuXHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKGV4KTtcblx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzEuM1wiLGNvbnRlbnQ6ZXguZXJyTXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0sXG5cdFx0XHRhc3luYyBjbGFzc0dyaWRTdHlsZUluZm8oY2xzaWQsc3R5bGVOYW1lLGNsc1R5cGUpe1xuXHRcdFx0XHR2YXIgJHRoaXMgPSB0aGlzO1xuXHRcdFx0XHR2YXIgZ3JpZHN0eWxlSW5mbyA9IHtcblx0XHRcdFx0XHRjbGFzc19pZDogY2xzaWQsXG5cdFx0XHRcdFx0dWlfc3R5bGVfdHlwZTogMixcblx0XHRcdFx0XHR1aV9zdHlsZV9uYW1lOiBzdHlsZU5hbWVcblx0XHRcdFx0fTtcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coJHRoaXMuJHN0b3JlLmdldHRlcnMuZ2V0Y2xhc3NHcmlkU3R5bGVJbmZvKTtcblx0XHRcdFx0Ly/ojrflj5bkuLvmlbDmja7nsbvnlYzpnaLmoLflvI9cblx0XHRcdFx0aWYoY2xzVHlwZT09J01hc3QnKXtcblx0XHRcdFx0XHQkdGhpcy4kc3RvcmUuc3RhdGUudGhpc0VkaXROYW1lID0gc3R5bGVOYW1lO1xuXHRcdFx0XHRcdGlmKCR0aGlzLiRzdG9yZS5nZXR0ZXJzLmdldGNsYXNzR3JpZFN0eWxlSW5mbyl7XG5cdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5jbGFzc0dyaWRTdHlsZSA9ICR0aGlzLiRzdG9yZS5nZXR0ZXJzLmdldGNsYXNzR3JpZFN0eWxlSW5mbztcblx0XHRcdFx0XHRcdCR0aGlzLnZpZXdQYXJhbSgnTWFzdCcpO1xuXHRcdFx0XHRcdH1lbHNle1xuXHRcdFx0XHRcdFx0Ly9jb25zb2xlLmxvZyhncmlkc3R5bGVJbmZvKTtcblx0XHRcdFx0XHRcdCR0aGlzLiRzdG9yZS5kaXNwYXRjaCgnVUlTdHlsZUdldEluZm8nLGdyaWRzdHlsZUluZm8pLnRoZW4oc3VjY2Vzcz0+e1xuXHRcdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhzdWNjZXNzKTtcblx0XHRcdFx0XHRcdFx0aWYgKHN1Y2Nlc3MuZXJyX2NvZGUgPT0gMCkge1xuXHRcdFx0XHRcdFx0XHRcdHZhciBzdHlsZWRlZiA9IEJhc2U2NC5kZWNvZGUoc3VjY2Vzcy5yZXN1bHQuc3R5bGVfZGVmKTtcblx0XHRcdFx0XHRcdFx0XHRzdWNjZXNzLnJlc3VsdC5zdHlsZV9kZWYgPSBKU09OLnBhcnNlKHN0eWxlZGVmKTtcblx0XHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5jbGFzc0dyaWRTdHlsZSA9IHN1Y2Nlc3MucmVzdWx0O1xuXHRcdFx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKCR0aGlzLiRkYXRhLmNsYXNzR3JpZFN0eWxlKTtcblx0XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0XHQkdGhpcy52aWV3UGFyYW0oJ01hc3QnKTtcblx0XHRcdFx0XHRcdFx0fWVsc2V7XG5cdFx0XHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor68xLjJcIixjb250ZW50OnN1Y2Nlc3MuZXJyX21zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSkuY2F0Y2goZXg9Pntcblx0XHRcdFx0XHRcdFx0Y29uc29sZS5sb2coZXgpO1xuXHRcdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzEuM1wiLGNvbnRlbnQ6ZXguZXJyTXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2UgaWYoY2xzVHlwZT09J1N1YicpeyAgLy/ojrflj5bku47mlbDmja7nsbvnlYzpnaLmoLflvI9cblx0XHRcdFx0XHQkdGhpcy4kc3RvcmUuc3RhdGUudGhpc0VkaXRTdWJOYW1lID0gc3R5bGVOYW1lO1xuXHRcdFx0XHRcdGlmKCR0aGlzLiRzdG9yZS5nZXR0ZXJzLmdldFN1YkNsYXNzR3JpZFN0eWxlSW5mbyl7XG5cdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5zdWJDbGFzc0dyaWRTdHlsZSA9ICR0aGlzLiRzdG9yZS5nZXR0ZXJzLmdldFN1YkNsYXNzR3JpZFN0eWxlSW5mbztcblx0XHRcdFx0XHRcdCR0aGlzLnZpZXdQYXJhbSgnU3ViJyk7XG5cdFx0XHRcdFx0fWVsc2V7XG5cdFx0XHRcdFx0XHQvL2NvbnNvbGUubG9nKGdyaWRzdHlsZUluZm8pO1xuXHRcdFx0XHRcdFx0JHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdVSVN0eWxlR2V0SW5mbycsZ3JpZHN0eWxlSW5mbykudGhlbihzdWNjZXNzPT57XG5cdFx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKHN1Y2Nlc3MpO1xuXHRcdFx0XHRcdFx0XHRpZiAoc3VjY2Vzcy5lcnJfY29kZSA9PSAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIHN0eWxlZGVmID0gQmFzZTY0LmRlY29kZShzdWNjZXNzLnJlc3VsdC5zdHlsZV9kZWYpO1xuXHRcdFx0XHRcdFx0XHRcdHN1Y2Nlc3MucmVzdWx0LnN0eWxlX2RlZiA9IEpTT04ucGFyc2Uoc3R5bGVkZWYpO1x0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEuc3ViQ2xhc3NHcmlkU3R5bGUgPSBzdWNjZXNzLnJlc3VsdDtcblx0XHRcdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZygkdGhpcy4kZGF0YS5zdWJDbGFzc0dyaWRTdHlsZSk7XG5cdFx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdFx0JHRoaXMudmlld1BhcmFtKCdTdWInKTtcblx0XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0XHQvLyAkdGhpcy5zdWJDbGFzc19hdHRyX2luaXQoKTtcblx0XHRcdFx0XHRcdFx0fWVsc2V7XG5cdFx0XHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor68xLjJcIixjb250ZW50OnN1Y2Nlc3MuZXJyX21zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSkuY2F0Y2goZXg9Pntcblx0XHRcdFx0XHRcdFx0Y29uc29sZS5sb2coZXgpO1xuXHRcdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzEuM1wiLGNvbnRlbnQ6ZXguZXJyTXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0dmlld1BhcmFtKHR5cGUpeyAvL+Wwhm1vYm94M+Wwj+WGmeWPguaVsOi9rOaNouS4um1vYm94MuWkp+WGmeWPguaVsFxuXHRcdFx0XHR2YXIgY2xhc3NHcmlkU3R5bGU9Jyc7XG5cdFx0XHRcdHZhciBjbGFzc0F0dHJMaXN0PScnO1xuXHRcdFx0XHRpZih0eXBlPT0nTWFzdCcpe1xuXHRcdFx0XHRcdGNsYXNzR3JpZFN0eWxlPXRoaXMuJGRhdGEuY2xhc3NHcmlkU3R5bGU7XG5cdFx0XHRcdFx0Y2xhc3NBdHRyTGlzdD10aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3Q7XG5cdFx0XHRcdH1lbHNlIGlmKHR5cGU9PSdTdWInKXsgXG5cdFx0XHRcdFx0Y2xhc3NHcmlkU3R5bGU9dGhpcy4kZGF0YS5zdWJDbGFzc0dyaWRTdHlsZTtcblx0XHRcdFx0XHRjbGFzc0F0dHJMaXN0PXRoaXMuJGRhdGEuc3ViQ2xhc3NBdHRyTGlzdDtcblx0XHRcdFx0fVxuXHRcdFx0XHR2YXIgY2xhc3NfZ3JpZFN0eWxlID17XG5cdFx0XHRcdFx0SUQ6IGNsYXNzR3JpZFN0eWxlLmlkLFxuXHRcdFx0XHRcdE5hbWU6IGNsYXNzR3JpZFN0eWxlLm5hbWUsXG5cdFx0XHRcdFx0VHlwZTogY2xhc3NHcmlkU3R5bGUudHlwZSxcblx0XHRcdFx0XHRJc0RlZmF1bHQ6Y2xhc3NHcmlkU3R5bGUuaXNfZGVmYXVsLFxuXHRcdFx0XHRcdFN0eWxlRGVmOmNsYXNzR3JpZFN0eWxlLnN0eWxlX2RlZixcblx0XHRcdFx0fTtcblx0XHRcdFx0dmFyIGNsYXNzX2F0dHJMaXN0ID1bXTtcblx0XHRcdFx0Y2xhc3NBdHRyTGlzdC5mb3JFYWNoKGRhdGEgPT4ge1xuXHRcdFx0XHRcdHZhciBhdHRycyA9W107XG5cdFx0XHRcdFx0aWYoZGF0YS5hdHRyX2xpc3Qpe1xuXHRcdFx0XHRcdCAgZGF0YS5hdHRyX2xpc3QuZm9yRWFjaChhdHRyID0+IHtcblx0XHRcdFx0XHRcdHZhciBkaWN0aXRlbXMgPVtdO1xuXHRcdFx0XHRcdFx0aWYoYXR0ci5kaWN0aXRlbSl7XG5cdFx0XHRcdFx0XHRcdGF0dHIuZGljdGl0ZW0uZm9yRWFjaChkaWN0ID0+IHtcblx0XHRcdFx0XHRcdFx0XHRkaWN0aXRlbXMucHVzaCh7XG5cdFx0XHRcdFx0XHRcdFx0XHRJRDogZGljdC5pZCxcblx0XHRcdFx0XHRcdFx0XHRcdE5hbWU6IGRpY3QubmFtZSxcblx0XHRcdFx0XHRcdFx0XHRcdE5vdGU6IGRpY3Qubm90ZSxcblx0XHRcdFx0XHRcdFx0XHRcdE9yZGVyOiBkaWN0Lm9yZGVyLFxuXHRcdFx0XHRcdFx0XHRcdFx0SW1nVXJsOiBudWxsLFxuXHRcdFx0XHRcdFx0XHRcdFx0Q29kZTogZGljdC5jb2RlLFxuXHRcdFx0XHRcdFx0XHRcdFx0SGFzU3ViOiBudWxsLFxuXHRcdFx0XHRcdFx0XHRcdFx0UGFyZW50SUQ6IG51bGwsXG5cdFx0XHRcdFx0XHRcdFx0XHRQYXJlbnROYW1lOiBudWxsLFxuXHRcdFx0XHRcdFx0XHRcdFx0THZsOiBkaWN0Lmx2bCxcblx0XHRcdFx0XHRcdFx0XHRcdElzRGVmYXVsdDogZGljdC5pc19kZWZhdWx0LFxuXHRcdFx0XHRcdFx0XHRcdFx0VmFsdWU6IGRpY3QudmFsdWUsXG5cdFx0XHRcdFx0XHRcdFx0XHRDTl9HX0lEOiBkaWN0LmlkLFxuXHRcdFx0XHRcdFx0XHRcdFx0Q05fR19ESUNUX0lEOiBudWxsLFxuXHRcdFx0XHRcdFx0XHRcdFx0Q05fU19OQU1FOiBkaWN0Lm5hbWUsXG5cdFx0XHRcdFx0XHRcdFx0XHRDTl9TX05PVEU6IGRpY3Qubm90ZSxcblx0XHRcdFx0XHRcdFx0XHRcdENOX05fT1JERVI6IGRpY3Qub3JkZXIsXG5cdFx0XHRcdFx0XHRcdFx0XHRDTl9TX0lNR19VUkw6IG51bGwsXG5cdFx0XHRcdFx0XHRcdFx0XHRDTl9TX0NPREU6IGRpY3QuY29kZSxcblx0XHRcdFx0XHRcdFx0XHRcdENOX0NfSEFTX1NVQjogbnVsbCxcblx0XHRcdFx0XHRcdFx0XHRcdENOX0dfUEFSRU5UX0lURU1fSUQ6IG51bGwsXG5cdFx0XHRcdFx0XHRcdFx0XHRDTl9HX1BBUkVOVF9JVEVNX05BTUU6IG51bGwsXG5cdFx0XHRcdFx0XHRcdFx0XHRDTl9OX0xWTDogZGljdC5sdmwsXG5cdFx0XHRcdFx0XHRcdFx0XHRDTl9DX0lTX0RFRkFVTFQ6IGRpY3QuaXNfZGVmYXVsdCxcblx0XHRcdFx0XHRcdFx0XHRcdENOX1NfVkFMVUU6IGRpY3QudmFsdWVcblx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRhdHRycy5wdXNoKHtcblx0XHRcdFx0XHRcdFx0SUQ6IGF0dHIuaWQsXG5cdFx0XHRcdFx0XHRcdE5hbWU6IGF0dHIubmFtZSxcblx0XHRcdFx0XHRcdFx0VHlwZTogYXR0ci50eXBlLFxuXHRcdFx0XHRcdFx0XHRTaXplOiBhdHRyLnNpemUsXG5cdFx0XHRcdFx0XHRcdE5vdEVtcHR5OiBhdHRyLm5vdF9lbXB0eSxcblx0XHRcdFx0XHRcdFx0RGVmVmFsdWU6YXR0ci5kZWZfdmFsdWUsXG5cdFx0XHRcdFx0XHRcdE9yZGVyOiBhdHRyLm9yZGVyLFxuXHRcdFx0XHRcdFx0XHREaWN0TmFtZTogYXR0ci5kaWN0X25hbWUsXG5cdFx0XHRcdFx0XHRcdERpY3RJRDogYXR0ci5kaWN0X2lkLFxuXHRcdFx0XHRcdFx0XHRDb2RlRGVmTmFtZTogYXR0ci5jb2RlX2RlZl9uYW1lLFxuXHRcdFx0XHRcdFx0XHRDb2RlRGVmSUQ6IGF0dHIuY29kZV9kZWZfaWQsXG5cdFx0XHRcdFx0XHRcdFJlbENsc0lEOiBudWxsLFxuXHRcdFx0XHRcdFx0XHRSZWxDbHM6IGF0dHIucmVmX2Nscyxcblx0XHRcdFx0XHRcdFx0V2lkdGg6IGF0dHIud2lkdGgsXG5cdFx0XHRcdFx0XHRcdEhlaWdodDogYXR0ci5oZWlnaHQsXG5cdFx0XHRcdFx0XHRcdEN0cmxTdHlsZTogYXR0ci5jdHJsX3N0eWxlLFxuXHRcdFx0XHRcdFx0XHRIYXNBY2U6IGF0dHIuaGFzX2FjZSxcblx0XHRcdFx0XHRcdFx0Q2FuU2hvdzogYXR0ci5jYW5fc2hvdyxcblx0XHRcdFx0XHRcdFx0Q2FuUXVlcnk6IGF0dHIuY2FuX3F1ZXJ5LFxuXHRcdFx0XHRcdFx0XHRSZWFkT25seTogYXR0ci5yZWFkX29ubHksXG5cdFx0XHRcdFx0XHRcdElzS2V5OiBhdHRyLmlzX2tleSxcblx0XHRcdFx0XHRcdFx0SXNGaXhlZDogYXR0ci5pc19maXhlZCxcblx0XHRcdFx0XHRcdFx0RGlzcE5hbWU6IGF0dHIuZGlzcF9uYW1lLFxuXHRcdFx0XHRcdFx0XHRMdWFBdHRyOiBhdHRyLmx1YV9hdHRyLFxuXHRcdFx0XHRcdFx0XHREZXNjOiBhdHRyLmRlc2MsXG5cdFx0XHRcdFx0XHRcdEFjdGlvbkRlZjogYXR0ci5hY3Rpb25fZGVmP0Jhc2U2NC5kZWNvZGUoYXR0ci5hY3Rpb25fZGVmKTonJyxcblx0XHRcdFx0XHRcdFx0TXVsdGlsaW5ndWFsOiBhdHRyLm11bHRpbGluZ3VhbCxcblx0XHRcdFx0XHRcdFx0UmVmQ29uZGl0aW9uOiBhdHRyLnJlZl9jb25kaXRpb24sXG5cdFx0XHRcdFx0XHRcdEdyb3VwTmFtZTogZGF0YS5ncm91cCxcblx0XHRcdFx0XHRcdFx0VmFsdWU6IG51bGwsXG5cdFx0XHRcdFx0XHRcdGRpY3RpdGVtOiBkaWN0aXRlbXNcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdCAgfSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNsYXNzX2F0dHJMaXN0LnB1c2goe1xuXHRcdFx0XHRcdFx0TmFtZTogZGF0YS5ncm91cCxcblx0XHRcdFx0XHRcdE9yZGVyOiBkYXRhLm9yZGVyLFxuXHRcdFx0XHRcdFx0SGFzQWNlOiBkYXRhLmhhc19hY2UsXG5cdFx0XHRcdFx0XHRCa0NvbG9yOiBkYXRhLmJrX2NvbG9yLFxuXHRcdFx0XHRcdFx0SW1nRm9udFN0eWxlOiBkYXRhLmltZ19mb250X3N0eWxlLFxuXHRcdFx0XHRcdFx0QXR0cjogYXR0cnNcblx0XHRcdFx0XHR9KTsgXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRcblx0XHRcdFx0aWYodHlwZT09J01hc3QnKXtcblx0XHRcdFx0XHR0aGlzLiRkYXRhLmNsYXNzR3JpZFN0eWxlID0gY2xhc3NfZ3JpZFN0eWxlO1xuXHRcdFx0XHRcdHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdCA9IGNsYXNzX2F0dHJMaXN0O1xuXHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKCctLS0tLS1NYXN0LS0tLS0tLS0nKTtcblx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyh0aGlzLiRkYXRhLmNsYXNzR3JpZFN0eWxlKTtcblx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyh0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3QpO1xuXHRcdFx0XHRcdHRoaXMuY2xhc3NfYXR0cl9pbml0KCk7XG5cdFx0XHRcdH1lbHNlIGlmKHR5cGU9PSdTdWInKXsgXG5cdFx0XHRcdFx0dGhpcy4kZGF0YS5zdWJDbGFzc0dyaWRTdHlsZSA9IGNsYXNzX2dyaWRTdHlsZTtcblx0XHRcdFx0XHR0aGlzLiRkYXRhLnN1YkNsYXNzQXR0ckxpc3QgPSBjbGFzc19hdHRyTGlzdDtcblx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZygnLS0tLS0tU3ViLS0tLS0tLS0nKTtcblx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyh0aGlzLiRkYXRhLnN1YkNsYXNzR3JpZFN0eWxlKTtcblx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyh0aGlzLiRkYXRhLnN1YkNsYXNzQXR0ckxpc3QpO1xuXHRcdFx0XHRcdHRoaXMuc3ViQ2xhc3NfYXR0cl9pbml0KCk7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRjbGFzc19hdHRyX2luaXQoKXtcblx0XHRcdFx0dmFyIGF0dHJsaXN0ID0gdGhpcy4kZGF0YS5jbGFzc0dyaWRTdHlsZS5TdHlsZURlZi5zaG93X3N0eWxlXG5cdFx0XHRcdHZhciBuZXdhdHRybGlzdCA9IFtdO1xuXHRcdFx0XHRpZiAodGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0Lmxlbmd0aCA+IDApIHtcblx0XHRcdFx0ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmxpc3QubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0ICAgICAgICB2YXIgb3BlbiA9IGF0dHJsaXN0W2ldLm9wZW47XG5cdFx0XHRcdCAgICAgICAgdmFyIG5hbWUgPSBhdHRybGlzdFtpXS5hdHRyZ3JvdXBfbmFtZTtcblx0XHRcdFx0ICAgICAgICB2YXIgYXR0cnMgPSBhdHRybGlzdFtpXS5hdHRycztcblx0XHRcdFx0ICAgICAgICBmb3IgKHZhciBzID0gMDsgcyA8IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdC5sZW5ndGg7IHMrKykge1xuXHRcdFx0XHQgICAgICAgICAgICB2YXIgY2xzYXR0ciA9IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtzXTtcblx0XHRcdFx0ICAgICAgICAgICAgaWYgKG5hbWUgPT0gY2xzYXR0ci5OYW1lKSB7XG5cdFx0XHRcdCAgICAgICAgICAgICAgICB2YXIgYXR0ciA9IFtdO1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBhdHRycy5sZW5ndGg7IGorKykge1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGwgPSAwOyBsIDwgY2xzYXR0ci5BdHRyLmxlbmd0aDsgbCsrKSB7XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYSA9IGNsc2F0dHIuQXR0cltsXTtcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGF0dHJzW2pdLmF0dHIgPT0gY2EuTmFtZSkge1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2EuYWN0aW9uID0gYXR0cnNbal0uYWN0aW9uO1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2EuZWRpdCA9IGF0dHJzW2pdLmVkaXQ7XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYS5ub3RlbXB0eSA9IGF0dHJzW2pdLm5vdGVtcHR5O1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2EuZXh0X2J1dHRvbiA9IGF0dHJzW2pdLmV4dF9idXR0b247XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYS5idXR0b25faW1nID0gYXR0cnNbal0uYnV0dG9uX2ltZztcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhLmJ1dHRvbl90b29sdGlwID0gYXR0cnNbal0uYnV0dG9uX3Rvb2x0aXA7XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYS5iZWZvcmVfY2xpY2tfYnV0dG9uID0gYXR0cnNbal0uYmVmb3JlX2NsaWNrX2J1dHRvbjtcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhLmJ1dHRvbl9jYWxsYmFjayA9IGF0dHJzW2pdLmJ1dHRvbl9jYWxsYmFjaztcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhLmhpZGRlbiA9IGF0dHJzW2pdLmhpZGRlbjtcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhLnNlbGVjdCA9IGF0dHJzW2pdLnNlbGVjdD09dW5kZWZpbmVkP2ZhbHNlOmF0dHJzW2pdLnNlbGVjdDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5WYWx1ZSA9XCJcIjtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihjYS5kaWN0aXRlbS5sZW5ndGg+MCl7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihjYS5zZWxlY3QgPT0gdHJ1ZSlcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2EuVmFsdWUgPSBbXTsvL2NhLmRpY3RpdGVtWzBdLkNOX1NfTkFNRTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGVsc2UgXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhLlZhbHVlID0gJ+ivt+mAieaLqSc7Ly9jYS5kaWN0aXRlbVswXS5DTl9TX05BTUU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgZGljdGl0ZW1saXN0PVtdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgZCA9IDA7IGQgPCBjYS5kaWN0aXRlbS5sZW5ndGg7IGQrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5kaWN0aXRlbVtkXS5sYWJlbD1jYS5kaWN0aXRlbVtkXS5DTl9TX05BTUU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhLmRpY3RpdGVtW2RdLnZhbHVlPWNhLmRpY3RpdGVtW2RdLkNOX1NfTkFNRTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2EuZGljdGl0ZW1bZF0uYXR0cj1jYS5OYW1lO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihjYS5kaWN0aXRlbVtkXS5DTl9DX0lTX0RFRkFVTFQ9PScxJylcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5WYWx1ZT1jYS5kaWN0aXRlbVtkXS5DTl9TX05BTUU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGNhLlR5cGU9PSfml6XmnJ8nIHx8IGNhLlR5cGU9PSfml7bpl7QnKXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBub3dEYXRlID0gbmV3IERhdGUoKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBkYXRlID0ge3llYXI6IG5vd0RhdGUuZ2V0RnVsbFllYXIoKSxtb250aDogbm93RGF0ZS5nZXRNb250aCgpICsgMSxkYXk6IG5vd0RhdGUuZ2V0RGF0ZSgpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2EuVmFsdWUgPSBkYXRlLnllYXIgKyAnLScgKyAoZGF0ZS5tb250aCA+PSAxMCA/IGRhdGUubW9udGggOiAnMCcgKyBkYXRlLm1vbnRoKSArICctJyArIChkYXRlLmRheSA+PSAxMCA/IGRhdGUuZGF5IDogJzAnICsgZGF0ZS5kYXkpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihjYS5UeXBlPT0n5byV55So5a+56LGhKOWkmuS4qiknKXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhLlJlbENsc0xpc3QgPSBjYS5SZWxDbHM7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5WYWx1ZSA9ICfor7cnO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihjYS5UeXBlPT0n55yB5biC5Yy6Jylcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhLlZhbHVlID0gJ+ivt+mAieaLqSc7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoY2EuVHlwZT09J+W4g+WwlOWAvCcpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5WYWx1ZSA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyLnB1c2goY2EpO1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICB9XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgfVxuXHRcdFx0XHQgICAgICAgICAgICAgICAgfVxuXHRcdFx0XHQgICAgICAgICAgICAgICAgbmV3YXR0cmxpc3QucHVzaCh7XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgQmtDb2xvcjogY2xzYXR0ci5Ca0NvbG9yLFxuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgIEhhc0FjZTogY2xzYXR0ci5IYXNBY2UsXG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgSW1nRm9udFN0eWxlOiBjbHNhdHRyLkltZ0ZvbnRTdHlsZSxcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICBOYW1lOiBjbHNhdHRyLk5hbWUsXG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgT3JkZXI6IGNsc2F0dHIuT3JkZXIsXG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgT3Blbjogb3Blbixcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICBBdHRyOiBhdHRyLFxuXHRcdFx0XHRcdFx0XHRcdFx0Y29udHJvbF9zdHlsZTp0aGlzLiRkYXRhLmNsYXNzR3JpZFN0eWxlLlN0eWxlRGVmLmNvbnRyb2xfc3R5bGUsXG5cdFx0XHRcdFx0XHRcdFx0XHR0aXRsZV9wX3dkaXRoOnRoaXMuJGRhdGEuY2xhc3NHcmlkU3R5bGUuU3R5bGVEZWYudGl0bGVfcF93ZGl0aCxcblx0XHRcdFx0XHRcdFx0XHRcdEZvbnQ6dGhpcy4kZGF0YS5jbGFzc0dyaWRTdHlsZS5TdHlsZURlZi5Gb250P3RoaXMuJGRhdGEuY2xhc3NHcmlkU3R5bGUuU3R5bGVEZWYuRm9udDp7fSxcblx0XHRcdFx0XHRcdFx0XHRcdEJrX0NvbG9yOnRoaXMuJGRhdGEuY2xhc3NHcmlkU3R5bGUuU3R5bGVEZWYuQmtfQ29sb3I/dGhpcy4kZGF0YS5jbGFzc0dyaWRTdHlsZS5TdHlsZURlZi5Ca19Db2xvcjonI0ZGRkZGRicsXG5cdFx0XHRcdFx0XHRcdFx0XHRUZXh0X0NvbG9yOnRoaXMuJGRhdGEuY2xhc3NHcmlkU3R5bGUuU3R5bGVEZWYuVGV4dF9Db2xvcj90aGlzLiRkYXRhLmNsYXNzR3JpZFN0eWxlLlN0eWxlRGVmLlRleHRfQ29sb3I6JyMwMDAwMDAnXG5cdFx0XHRcdCAgICAgICAgICAgICAgICB9KVxuXHRcdFx0XHQgICAgICAgICAgICB9XG5cdFx0XHRcdCAgICAgICAgfVxuXHRcdFx0XHQgICAgfVxuXHRcdFx0XHQgICAgaWYgKG5ld2F0dHJsaXN0Lmxlbmd0aCA+IDApIHtcblx0XHRcdFx0ICAgICAgICB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3QgPSBuZXdhdHRybGlzdDtcblx0XHRcdFx0ICAgIH1cblx0XHRcdFx0XHR2YXIgcmVxPVtdO1xuXHRcdFx0XHQgICAgaWYgKHRoaXMuJGRhdGEuY2xhc3NHcmlkU3R5bGUuU3R5bGVEZWYpIHtcblx0XHRcdFx0ICAgICAgICAgaWYgKHRoaXMuJGRhdGEuY2xhc3NHcmlkU3R5bGUuU3R5bGVEZWYuc2hvd19zdHlsZS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdCAgICAgICAgICAgIHZhciBhdHRybGlzdCA9IHRoaXMuJGRhdGEuY2xhc3NHcmlkU3R5bGUuU3R5bGVEZWYuc2hvd19zdHlsZVxuXHRcdFx0XHQgICAgICAgICAgICAvLyAkZWwuZmluZCgnLmF0dHJfZmllbGQnKS5wcm9wKCdyZWFkb25seScsIHRydWUpO1xuXHRcdFx0XHQgICAgICAgICAgICAvLyAkZWwuZmluZCgnLmF0dHJfZmllbGQnKS5wcm9wKCdkaXNhYmxlZCcsIHRydWUpO1xuXHRcdFx0XHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJsaXN0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdCAgICAgICAgICAgICAgICB2YXIgYXR0ciA9IGF0dHJsaXN0W2ldLmF0dHJzXG5cdFx0XHRcdCAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGF0dHIubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICB2YXIgYXIgPSBhdHRyW2pdO1xuXHRcdFx0XHRcdFx0XHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5hdHRyLCB2YWx1ZTogYXIudmFsdWU/YXIudmFsdWU6JycgfSk7XG5cdFx0XHRcdCAgICAgICAgICAgICAgICB9XG5cdFx0XHRcdCAgICAgICAgICAgIH1cblx0XHRcdFx0ICAgICAgICB9XG5cdFx0XHRcdFx0fVx0XG5cdFx0XHRcdFx0XG5cdFx0XHRcdFx0dmFyIGV2ZW50bGlzdCA9IHRoaXMuJGRhdGEuY2xhc3NHcmlkU3R5bGUuU3R5bGVEZWYuZXZlbnQ7XG5cdFx0XHRcdFx0aWYgKGV2ZW50bGlzdCkge1xuXHRcdFx0XHRcdCAgICBpZiAoZXZlbnRsaXN0Lmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXZlbnRsaXN0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0ICAgICAgICAgICAgaWYgKGV2ZW50bGlzdFtpXS5ldmVudF9pZCA9PSAnYmVmb3JlX29rJykge1xuXHRcdFx0XHRcdCAgICAgICAgICAgICAgICB0aGlzLiRkYXRhLmVkaXRfb2tfZXZlbnQgPSBldmVudGxpc3RbaV07XG5cdFx0XHRcdFx0ICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudGxpc3RbaV0uZXZlbnRfaWQgPT0gJ2luaXRpYWwnKSB7XG5cdFx0XHRcdFx0ICAgICAgICAgICAgICAgIHRoaXMuJGRhdGEuZWRpdF9pbml0YWxfZXZlbnQgPSBldmVudGxpc3RbaV07XG5cdFx0XHRcdFx0ICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudGxpc3RbaV0uZXZlbnRfaWQgPT0gJ2JlZm9yZV9zZWxlY3RfY29tcG9zZScpIHtcblx0XHRcdFx0XHQgICAgICAgICAgICAgICAgdGhpcy4kZGF0YS5lZGl0X3NlbGVjdF9jb21wb3NlX2V2ZW50ID0gZXZlbnRsaXN0W2ldLnNjcmlwX2lkO1xuXHRcdFx0XHRcdCAgICAgICAgICAgICAgICB0aGlzLiRkYXRhLmVkaXRfY29tcG9zZV9jbHNfaWQgPSBldmVudGxpc3RbaV0uY29tcG9zZV9jbHNfaWQ7XG5cdFx0XHRcdFx0ICAgICAgICAgICAgfVxuXHRcdFx0XHRcdCAgICAgICAgfVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhyZXEpO1xuXHRcdFx0XHRcdGlmICh0aGlzLiRkYXRhLmVkaXRfaW5pdGFsX2V2ZW50KSB7XG5cdFx0XHRcdFx0ICAgIHZhciBldmVudGlkID0gdGhpcy4kZGF0YS5lZGl0X2luaXRhbF9ldmVudC5zY3JpcF9pZDtcblx0XHRcdFx0XHQgICAgdmFyIGluZm8gPSB7XG5cdFx0XHRcdFx0ICAgICAgICBldmVudGlkOiBldmVudGlkLFxuXHRcdFx0XHRcdCAgICAgICAgZWR0eXBlOiBcIjBcIixcblx0XHRcdFx0XHQgICAgICAgIHByb2plY3RpZDogJycsXG5cdFx0XHRcdFx0ICAgICAgICByY2xzaWQ6ICcnLFxuXHRcdFx0XHRcdCAgICAgICAgcm9iamlkOiAnJyxcblx0XHRcdFx0XHQgICAgICAgIHVzZXJsb2dpbjogJycsXG5cdFx0XHRcdFx0ICAgICAgICBjbHNpZDogdGhpcy4kZGF0YS5wYXJhbS5NYXN0ZXJfQ2xzLklELFxuXHRcdFx0XHRcdCAgICAgICAgb2JqaWQ6IFwiXCIsXG5cdFx0XHRcdFx0ICAgICAgICBhdHRyOiByZXEsXG5cdFx0XHRcdFx0ICAgIH1cblx0XHRcdFx0XHQgICAgdGhpcy5pbmlfRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGluZm8pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjb25zb2xlLmxvZyh0aGlzLiRkYXRhLmNsYXNzR3JpZFN0eWxlKTtcblx0XHRcdFx0XHRjb25zb2xlLmxvZyh0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3QpO1xuXHRcdFx0XHRcdFxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi5o+Q56S6XCIsY29udGVudDpcIuacquaJvuWIsOWPr+aYvuekuueahOeahOWxnuaAp1wiLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0c3ViQ2xhc3NfYXR0cl9pbml0KCl7XG5cdFx0XHRcdHZhciBhdHRybGlzdCA9IHRoaXMuJGRhdGEuc3ViQ2xhc3NHcmlkU3R5bGUuU3R5bGVEZWYuc2hvd19zdHlsZVxuXHRcdFx0XHR2YXIgbmV3YXR0cmxpc3QgPSBbXTtcblx0XHRcdFx0aWYgKHRoaXMuJGRhdGEuc3ViQ2xhc3NBdHRyTGlzdC5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdCAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJsaXN0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdCAgICAgICAgdmFyIG9wZW4gPSBhdHRybGlzdFtpXS5vcGVuO1xuXHRcdFx0XHQgICAgICAgIHZhciBuYW1lID0gYXR0cmxpc3RbaV0uYXR0cmdyb3VwX25hbWU7XG5cdFx0XHRcdCAgICAgICAgdmFyIGF0dHJzID0gYXR0cmxpc3RbaV0uYXR0cnM7XG5cdFx0XHRcdCAgICAgICAgZm9yICh2YXIgcyA9IDA7IHMgPCB0aGlzLiRkYXRhLnN1YkNsYXNzQXR0ckxpc3QubGVuZ3RoOyBzKyspIHtcblx0XHRcdFx0ICAgICAgICAgICAgdmFyIGNsc2F0dHIgPSB0aGlzLiRkYXRhLnN1YkNsYXNzQXR0ckxpc3Rbc107XG5cdFx0XHRcdCAgICAgICAgICAgIGlmIChuYW1lID09IGNsc2F0dHIuTmFtZSkge1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgdmFyIGF0dHIgPSBbXTtcblx0XHRcdFx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgYXR0cnMubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBsID0gMDsgbCA8IGNsc2F0dHIuQXR0ci5sZW5ndGg7IGwrKykge1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2EgPSBjbHNhdHRyLkF0dHJbbF07XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhdHRyc1tqXS5hdHRyID09IGNhLk5hbWUpIHtcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhLmFjdGlvbiA9IGF0dHJzW2pdLmFjdGlvbjtcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhLmVkaXQgPSBhdHRyc1tqXS5lZGl0O1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Eubm90ZW1wdHkgPSBhdHRyc1tqXS5ub3RlbXB0eTtcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhLmV4dF9idXR0b24gPSBhdHRyc1tqXS5leHRfYnV0dG9uO1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2EuYnV0dG9uX2ltZyA9IGF0dHJzW2pdLmJ1dHRvbl9pbWc7XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYS5idXR0b25fdG9vbHRpcCA9IGF0dHJzW2pdLmJ1dHRvbl90b29sdGlwO1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2EuYmVmb3JlX2NsaWNrX2J1dHRvbiA9IGF0dHJzW2pdLmJlZm9yZV9jbGlja19idXR0b247XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYS5idXR0b25fY2FsbGJhY2sgPSBhdHRyc1tqXS5idXR0b25fY2FsbGJhY2s7XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYS5oaWRkZW4gPSBhdHRyc1tqXS5oaWRkZW47XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYS5zZWxlY3QgPSBhdHRyc1tqXS5zZWxlY3Q9PXVuZGVmaW5lZD9mYWxzZTphdHRyc1tqXS5zZWxlY3Q7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2EuVmFsdWUgPVwiXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoY2EuZGljdGl0ZW0ubGVuZ3RoPjApe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoY2Euc2VsZWN0ID09IHRydWUpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhLlZhbHVlID0gW107Ly9jYS5kaWN0aXRlbVswXS5DTl9TX05BTUU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlbHNlIFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5WYWx1ZSA9ICfor7fpgInmi6knOy8vY2EuZGljdGl0ZW1bMF0uQ05fU19OQU1FO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGRpY3RpdGVtbGlzdD1bXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGQgPSAwOyBkIDwgY2EuZGljdGl0ZW0ubGVuZ3RoOyBkKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2EuZGljdGl0ZW1bZF0ubGFiZWw9Y2EuZGljdGl0ZW1bZF0uQ05fU19OQU1FO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5kaWN0aXRlbVtkXS52YWx1ZT1jYS5kaWN0aXRlbVtkXS5DTl9TX05BTUU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhLmRpY3RpdGVtW2RdLmF0dHI9Y2EuTmFtZTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoY2EuZGljdGl0ZW1bZF0uQ05fQ19JU19ERUZBVUxUPT0nMScpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2EuVmFsdWU9Y2EuZGljdGl0ZW1bZF0uQ05fU19OQU1FO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihjYS5UeXBlPT0n5pel5pyfJyB8fCBjYS5UeXBlPT0n5pe26Ze0Jyl7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgbm93RGF0ZSA9IG5ldyBEYXRlKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgZGF0ZSA9IHt5ZWFyOiBub3dEYXRlLmdldEZ1bGxZZWFyKCksbW9udGg6IG5vd0RhdGUuZ2V0TW9udGgoKSArIDEsZGF5OiBub3dEYXRlLmdldERhdGUoKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhLlZhbHVlID0gZGF0ZS55ZWFyICsgJy0nICsgKGRhdGUubW9udGggPj0gMTAgPyBkYXRlLm1vbnRoIDogJzAnICsgZGF0ZS5tb250aCkgKyAnLScgKyAoZGF0ZS5kYXkgPj0gMTAgPyBkYXRlLmRheSA6ICcwJyArIGRhdGUuZGF5KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoY2EuVHlwZT09J+W8leeUqOWvueixoSjlpJrkuKopJyl7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5SZWxDbHNMaXN0ID0gY2EuUmVsQ2xzO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2EuVmFsdWUgPSAn6K+3Jztcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoY2EuVHlwZT09J+ecgeW4guWMuicpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5WYWx1ZSA9ICfor7fpgInmi6knO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGNhLlR5cGU9PSfluIPlsJTlgLwnKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2EuVmFsdWUgPSBmYWxzZTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0ci5wdXNoKGNhKTtcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgfVxuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgIH1cblx0XHRcdFx0ICAgICAgICAgICAgICAgIH1cblx0XHRcdFx0ICAgICAgICAgICAgICAgIG5ld2F0dHJsaXN0LnB1c2goe1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgIEJrQ29sb3I6IGNsc2F0dHIuQmtDb2xvcixcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICBIYXNBY2U6IGNsc2F0dHIuSGFzQWNlLFxuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgIEltZ0ZvbnRTdHlsZTogY2xzYXR0ci5JbWdGb250U3R5bGUsXG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgTmFtZTogY2xzYXR0ci5OYW1lLFxuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgIE9yZGVyOiBjbHNhdHRyLk9yZGVyLFxuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgIE9wZW46IG9wZW4sXG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgQXR0cjogYXR0cixcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnRyb2xfc3R5bGU6dGhpcy4kZGF0YS5zdWJDbGFzc0dyaWRTdHlsZS5TdHlsZURlZi5jb250cm9sX3N0eWxlLFxuXHRcdFx0XHRcdFx0XHRcdFx0dGl0bGVfcF93ZGl0aDp0aGlzLiRkYXRhLnN1YkNsYXNzR3JpZFN0eWxlLlN0eWxlRGVmLnRpdGxlX3Bfd2RpdGgsXG5cdFx0XHRcdFx0XHRcdFx0XHRGb250OnRoaXMuJGRhdGEuc3ViQ2xhc3NHcmlkU3R5bGUuU3R5bGVEZWYuRm9udD90aGlzLiRkYXRhLnN1YkNsYXNzR3JpZFN0eWxlLlN0eWxlRGVmLkZvbnQ6e30sXG5cdFx0XHRcdFx0XHRcdFx0XHRCa19Db2xvcjp0aGlzLiRkYXRhLnN1YkNsYXNzR3JpZFN0eWxlLlN0eWxlRGVmLkJrX0NvbG9yP3RoaXMuJGRhdGEuc3ViQ2xhc3NHcmlkU3R5bGUuU3R5bGVEZWYuQmtfQ29sb3I6JyNGRkZGRkYnLFxuXHRcdFx0XHRcdFx0XHRcdFx0VGV4dF9Db2xvcjp0aGlzLiRkYXRhLnN1YkNsYXNzR3JpZFN0eWxlLlN0eWxlRGVmLlRleHRfQ29sb3I/dGhpcy4kZGF0YS5zdWJDbGFzc0dyaWRTdHlsZS5TdHlsZURlZi5UZXh0X0NvbG9yOicjMDAwMDAwJ1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgfSlcblx0XHRcdFx0ICAgICAgICAgICAgfVxuXHRcdFx0XHQgICAgICAgIH1cblx0XHRcdFx0ICAgIH1cblx0XHRcdFx0ICAgIGlmIChuZXdhdHRybGlzdC5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdCAgICAgICAgdGhpcy4kZGF0YS5zdWJDbGFzc0F0dHJMaXN0ID0gbmV3YXR0cmxpc3Q7XG5cdFx0XHRcdCAgICB9XG5cdFx0XHRcdFx0dmFyIHJlcT1bXTtcblx0XHRcdFx0ICAgIGlmICh0aGlzLiRkYXRhLnN1YkNsYXNzR3JpZFN0eWxlLlN0eWxlRGVmKSB7XG5cdFx0XHRcdCAgICAgICAgIGlmICh0aGlzLiRkYXRhLnN1YkNsYXNzR3JpZFN0eWxlLlN0eWxlRGVmLnNob3dfc3R5bGUubGVuZ3RoID4gMCkge1xuXHRcdFx0XHQgICAgICAgICAgICB2YXIgYXR0cmxpc3QgPSB0aGlzLiRkYXRhLnN1YkNsYXNzR3JpZFN0eWxlLlN0eWxlRGVmLnNob3dfc3R5bGVcblx0XHRcdFx0ICAgICAgICAgICAgLy8gJGVsLmZpbmQoJy5hdHRyX2ZpZWxkJykucHJvcCgncmVhZG9ubHknLCB0cnVlKTtcblx0XHRcdFx0ICAgICAgICAgICAgLy8gJGVsLmZpbmQoJy5hdHRyX2ZpZWxkJykucHJvcCgnZGlzYWJsZWQnLCB0cnVlKTtcblx0XHRcdFx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRybGlzdC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgdmFyIGF0dHIgPSBhdHRybGlzdFtpXS5hdHRyc1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgdmFyIGFyID0gYXR0cltqXTtcblx0XHRcdFx0XHRcdFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuYXR0ciwgdmFsdWU6IGFyLnZhbHVlP2FyLnZhbHVlOicnIH0pO1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgfVxuXHRcdFx0XHQgICAgICAgICAgICB9XG5cdFx0XHRcdCAgICAgICAgfVxuXHRcdFx0XHRcdH1cdFxuXHRcdFx0XHRcdFxuXHRcdFx0XHRcdHZhciBldmVudGxpc3QgPSB0aGlzLiRkYXRhLnN1YkNsYXNzR3JpZFN0eWxlLlN0eWxlRGVmLmV2ZW50O1xuXHRcdFx0XHRcdGlmIChldmVudGxpc3QpIHtcblx0XHRcdFx0XHQgICAgaWYgKGV2ZW50bGlzdC5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV2ZW50bGlzdC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdCAgICAgICAgICAgIGlmIChldmVudGxpc3RbaV0uZXZlbnRfaWQgPT0gJ2JlZm9yZV9vaycpIHtcblx0XHRcdFx0XHQgICAgICAgICAgICAgICAgdGhpcy4kZGF0YS5lZGl0X29rX2V2ZW50ID0gZXZlbnRsaXN0W2ldO1xuXHRcdFx0XHRcdCAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnRsaXN0W2ldLmV2ZW50X2lkID09ICdpbml0aWFsJykge1xuXHRcdFx0XHRcdCAgICAgICAgICAgICAgICB0aGlzLiRkYXRhLmVkaXRfaW5pdGFsX2V2ZW50ID0gZXZlbnRsaXN0W2ldO1xuXHRcdFx0XHRcdCAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnRsaXN0W2ldLmV2ZW50X2lkID09ICdiZWZvcmVfc2VsZWN0X2NvbXBvc2UnKSB7XG5cdFx0XHRcdFx0ICAgICAgICAgICAgICAgIHRoaXMuJGRhdGEuZWRpdF9zZWxlY3RfY29tcG9zZV9ldmVudCA9IGV2ZW50bGlzdFtpXS5zY3JpcF9pZDtcblx0XHRcdFx0XHQgICAgICAgICAgICAgICAgdGhpcy4kZGF0YS5lZGl0X2NvbXBvc2VfY2xzX2lkID0gZXZlbnRsaXN0W2ldLmNvbXBvc2VfY2xzX2lkO1xuXHRcdFx0XHRcdCAgICAgICAgICAgIH1cblx0XHRcdFx0XHQgICAgICAgIH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Ly8gY29uc29sZS5sb2cocmVxKTtcblx0XHRcdFx0XHRpZiAodGhpcy4kZGF0YS5lZGl0X2luaXRhbF9ldmVudCkge1xuXHRcdFx0XHRcdCAgICB2YXIgZXZlbnRpZCA9IHRoaXMuJGRhdGEuZWRpdF9pbml0YWxfZXZlbnQuc2NyaXBfaWQ7XG5cdFx0XHRcdFx0ICAgIHZhciBpbmZvID0ge1xuXHRcdFx0XHRcdCAgICAgICAgZXZlbnRpZDogZXZlbnRpZCxcblx0XHRcdFx0XHQgICAgICAgIGVkdHlwZTogXCIwXCIsXG5cdFx0XHRcdFx0ICAgICAgICBwcm9qZWN0aWQ6ICcnLFxuXHRcdFx0XHRcdCAgICAgICAgcmNsc2lkOiAnJyxcblx0XHRcdFx0XHQgICAgICAgIHJvYmppZDogJycsXG5cdFx0XHRcdFx0ICAgICAgICB1c2VybG9naW46ICcnLFxuXHRcdFx0XHRcdCAgICAgICAgY2xzaWQ6IHRoaXMuJGRhdGEucGFyYW0uU3ViX0Nscy5JRCxcblx0XHRcdFx0XHQgICAgICAgIG9iamlkOiBcIlwiLFxuXHRcdFx0XHRcdCAgICAgICAgYXR0cjogcmVxLFxuXHRcdFx0XHRcdCAgICB9XG5cdFx0XHRcdFx0ICAgIHRoaXMuc2Nhbl9pbmlfRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGluZm8pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjb25zb2xlLmxvZyh0aGlzLiRkYXRhLnN1YkNsYXNzR3JpZFN0eWxlKTtcblx0XHRcdFx0XHRjb25zb2xlLmxvZyh0aGlzLiRkYXRhLnN1YkNsYXNzQXR0ckxpc3QpO1xuXHRcdFx0XHRcdFxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi5o+Q56S6XCIsY29udGVudDpcIuacquaJvuWIsOWPr+aYvuekuueahOeahOWxnuaAp1wiLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0c2Nhbl9jbGFzc0F0dHJfZXh0QnV0dG9uKGUpeyAvL+mAieaLqeaMiemSruWJjVxuXHRcdFx0XHR2YXIgJHRoaXMgPSB0aGlzO1xuXHRcdFx0XHR2YXIgQmVmb3JlX1NlbGVjdF9FdmVudCA9ICR0aGlzLiRkYXRhLnBhcmFtLlNjYW5fQ29kZS5CZWZvcmVfU2VsZWN0X0V2ZW50O1xuXHRcdFx0XHRpZighQmVmb3JlX1NlbGVjdF9FdmVudCl7XG5cdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLmj5DnpLpcIixjb250ZW50Olwi6YCJ5oup5YmN5LqL5Lu25Li656m677yBXCIsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHZhciBtYXN0X2F0dHI9W107XG5cdFx0XHRcdHZhciBhdHRybGlzdCA9IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdDtcblx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhdHRybGlzdC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdHZhciBhdHRyID0gYXR0cmxpc3RbaV0uQXR0cjtcblx0XHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IGF0dHIubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0XHRcdHZhciBhciA9IGF0dHJbal07XG5cdFx0XHRcdFx0XHRpZihhci5WYWx1ZT09J+ivt+mAieaLqScpe1xuXHRcdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIuaPkOekulwiLGNvbnRlbnQ6YXIuRGlzcE5hbWUrXCLmnKrpgInmi6nmlbDmja7vvIFcIixzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYoYXIuVHlwZT09J+W8leeUqOWvueixoSjlpJrkuKopJylcblx0XHRcdFx0XHRcdFx0aWYoYXIuVmFsdWU9PSfor7cnKSBhci5WYWx1ZT0nJztcblx0XHRcdFx0XHRcdGlmKGFyLlR5cGU9PSflvJXnlKjkurrlkZgnIHx8IGFyLlR5cGU9PSflvJXnlKjpobnnm64nKVxuXHRcdFx0XHRcdFx0XHRtYXN0X2F0dHIucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWxJRCA/YXIuVmFsSUQgOicnIH0pO1xuXHRcdFx0XHRcdFx0ZWxzZSBpZihhci5UeXBlPT0n5biD5bCU5YC8Jylcblx0XHRcdFx0XHRcdFx0bWFzdF9hdHRyLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsdWU/JzEnOicwJ30pO1xuXHRcdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdFx0XHRtYXN0X2F0dHIucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWx1ZSA/YXIuVmFsdWUgOicnfSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdFxuXHRcdFx0XHR2YXIgb2JqZWN0cyA9IFtdO1xuXHRcdFx0XHR2YXIgc3ViUGFuZWxMaXN0ID0gJHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0O1xuXHRcdFx0XHRmb3IgKHZhciBzID0gMDsgcyA8IHN1YlBhbmVsTGlzdC5sZW5ndGg7IHMrKykge1xuXHRcdFx0XHRcdHZhciBzdWJfcmVxID0gW107XG5cdFx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBzdWJQYW5lbExpc3Rbc10uc3ViQ2xhc3NBdHRyLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHR2YXIgYXR0ciA9IHN1YlBhbmVsTGlzdFtzXS5zdWJDbGFzc0F0dHJbaV0uQXR0cjtcblx0XHRcdFx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdFx0XHR2YXIgYXIgPSBhdHRyW2pdO1xuXHRcdFx0XHRcdFx0XHRpZiAoYXIuVmFsdWUgPT0gJ+ivt+mAieaLqScgfHwgYXIuVmFsdWUgPT0gJ+KAlOKAlOivt+mAieaLqeKAlOKAlCcpIGFyLlZhbHVlID0gJyc7XG5cdFx0XHRcdFx0XHRcdGlmIChhci5UeXBlID09ICflvJXnlKjlr7nosaEo5aSa5LiqKScpXG5cdFx0XHRcdFx0XHRcdFx0aWYgKGFyLlZhbHVlID09ICfor7cnKSBhci5WYWx1ZSA9ICcnO1xuXHRcdFx0XHRcdFx0XHRpZiAoYXIuVHlwZSA9PSAn5byV55So5Lq65ZGYJyB8fCBhci5UeXBlID09ICflvJXnlKjpobnnm64nKVxuXHRcdFx0XHRcdFx0XHRcdHN1Yl9yZXEucHVzaCh7XG5cdFx0XHRcdFx0XHRcdFx0XHRhdHRyOiBhci5OYW1lLFxuXHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU6IGFyLlZhbElEID8gYXIuVmFsSUQgOiAnJ1xuXHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRlbHNlIGlmIChhci5UeXBlID09ICfluIPlsJTlgLwnKVxuXHRcdFx0XHRcdFx0XHRcdHN1Yl9yZXEucHVzaCh7XG5cdFx0XHRcdFx0XHRcdFx0XHRhdHRyOiBhci5OYW1lLFxuXHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU6IGFyLlZhbHVlID8gJzEnIDogJzAnXG5cdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdGVsc2UgaWYgKGFyLlR5cGUgPT0gJ+Wtl+WFuCcgfHwgYXIuVHlwZSA9PSAn5a2X5YW4LeWtl+espuS4sicgfHwgYXIuVHlwZSA9PSAn5a2X5YW4LeaVtOaVsCcpIHtcblx0XHRcdFx0XHRcdFx0XHRpZiAoYXIuc2VsZWN0ID09IHRydWUpIHsgLy/liKTmlq3kuIvmi4nmmK/lkKblpJrpgIlcblx0XHRcdFx0XHRcdFx0XHRcdHZhciB2YWxTdHIgPSBcIlwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgdiBpbiBhci5WYWx1ZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAodmFsU3RyKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhbFN0ciArPSBcIjtcIjtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsU3RyICs9IGFyLlZhbHVlW3ZdO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0c3ViX3JlcS5wdXNoKHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0YXR0cjogYXIuTmFtZSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU6IHZhbFN0clxuXHRcdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlXG5cdFx0XHRcdFx0XHRcdFx0XHRzdWJfcmVxLnB1c2goe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRhdHRyOiBhci5OYW1lLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogYXIuVmFsdWVcblx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Vcblx0XHRcdFx0XHRcdFx0XHRzdWJfcmVxLnB1c2goe1xuXHRcdFx0XHRcdFx0XHRcdFx0YXR0cjogYXIuTmFtZSxcblx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlOiBhci5WYWx1ZSA/IGFyLlZhbHVlIDogJydcblx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdGlmIChhci5ub3RlbXB0eSA9PSB0cnVlICYmICFhci5WYWx1ZSkge1xuXHRcdFx0XHRcdFx0XHRcdC8vIGlmKGFyLk5vdEVtcHR5PT0nMScpe1xuXHRcdFx0XHRcdFx0XHRcdHVuaS5oaWRlTG9hZGluZygpO1xuXHRcdFx0XHRcdFx0XHRcdC8vIHVuaS5zaG93VG9hc3Qoe3RpdGxlOmFyLkRpc3BOYW1lKyfkuI3og73kuLrnqbrvvIEnLGljb246XCJzdWNjZXNzXCIsZHVyYXRpb246MzAwMH0pO1xuXHRcdFx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe1xuXHRcdFx0XHRcdFx0XHRcdFx0dGl0bGU6IFwi5o+Q56S6XCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRjb250ZW50OiBhci5EaXNwTmFtZSArICfkuI3og73kuLrnqbrvvIEnLFxuXHRcdFx0XHRcdFx0XHRcdFx0c2hvd0NhbmNlbDogZmFsc2UsXG5cdFx0XHRcdFx0XHRcdFx0XHRjb25maXJtVGV4dDogXCLlj5bmtohcIlxuXHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRvYmplY3RzLnB1c2goe1xuXHRcdFx0XHRcdFx0b2JqX2lkOiBzdWJQYW5lbExpc3Rbc10uc2NhbkNvZGVWYWwsXG5cdFx0XHRcdFx0XHRvYmpfYXR0cnM6IHN1Yl9yZXFcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0XHR2YXIgZW52aXJvbWVudCA9IHtcblx0XHRcdFx0XHQnZnVuY3Rpb24nOiAnMzAwMCcsIC8vIOWKn+iDveeCuee8luWPt1xuXHRcdFx0XHRcdGNsc19pZDogJ01CT1gnLCAvL3RoaXMuJGRhdGEucGFyYW0uU3ViX0Nscy5JRCwgICAgIC8vIOWKn+iDveeCueS7juaVsOaNruexu+agh+ivhlxuXHRcdFx0XHRcdCdidXR0b24nOiAndG9wJywgLy8gdG9wL2JvdHRvbVxuXHRcdFx0XHRcdGJ1dHRvbl9uYW1lOiAn5paw5aKeJyxcblx0XHRcdFx0XHRlZGl0X2RsZzoge1xuXHRcdFx0XHRcdFx0dHlwZTogJ3NtYWxsJywgLy/lsI/nqpflj6Ncblx0XHRcdFx0XHRcdGNsYXNzX2lkOiAnTUJPWCcsIC8vdGhpcy4kZGF0YS5wYXJhbS5TdWJfQ2xzLklELC8v5b2T5YmN5pWw5o2u57G7aWRcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdG1hc3Rlcl9jbHM6IHtcblx0XHRcdFx0XHRcdGNsc19uYW1lOiAnTUJPWCcsIC8vJHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5OYW1lLFxuXHRcdFx0XHRcdFx0b2JqX2F0dHJzOiByZXFcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHN1Yl9jbHM6IHtcblx0XHRcdFx0XHRcdGNsc19uYW1lOiAnTUJPWCcsIC8vJHRoaXMuJGRhdGEucGFyYW0uU3ViX0Nscy5OYW1lLFxuXHRcdFx0XHRcdFx0b2JqZWN0czogb2JqZWN0c1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcblx0XHRcdFx0fTtcblx0XHRcdFx0dmFyIHJlcSA9IFtdO1xuXHRcdFx0XHR2YXIgcmVxPVtdO1xuXHRcdFx0XHQvLyB2YXIgYXR0cmxpc3QgPSB0aGlzLiRkYXRhLnN1YkNsYXNzQXR0ckxpc3Q7XG5cdFx0XHRcdC8vIHZhciBtc2c9Jyc7XG5cdFx0XHRcdC8vIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmxpc3QubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0Ly8gXHR2YXIgYXR0ciA9IGF0dHJsaXN0W2ldLkF0dHI7XG5cdFx0XHRcdC8vIFx0Zm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdC8vIFx0XHR2YXIgYXIgPSBhdHRyW2pdO1xuXHRcdFx0XHQvLyBcdFx0aWYoYXIuVHlwZT09J+W8leeUqOWvueixoSjlpJrkuKopJylcblx0XHRcdFx0Ly8gXHRcdFx0aWYoYXIuVmFsdWU9PSfor7cnKSBhci5WYWx1ZT0nJztcblx0XHRcdFx0Ly8gXHRcdGlmKGFyLlR5cGU9PSflvJXnlKjkurrlkZgnIHx8IGFyLlR5cGU9PSflvJXnlKjpobnnm64nKVxuXHRcdFx0XHQvLyBcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWxJRCA/YXIuVmFsSUQgOicnIH0pO1xuXHRcdFx0XHQvLyBcdFx0ZWxzZSBpZihhci5UeXBlPT0n5biD5bCU5YC8Jylcblx0XHRcdFx0Ly8gXHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsdWU/JzEnOicwJ30pO1xuXHRcdFx0XHQvLyBcdFx0ZWxzZVxuXHRcdFx0XHQvLyBcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWx1ZSA/YXIuVmFsdWUgOicnfSk7XG5cdFx0XHRcdC8vIFx0fVxuXHRcdFx0XHQvLyB9XG5cdFx0XHRcdFxuXHRcdFx0XHR2YXIgaW5mbyA9IHtcblx0XHRcdFx0ICAgIGV2ZW50aWQ6IEJlZm9yZV9TZWxlY3RfRXZlbnQuSUQsXG5cdFx0XHRcdCAgICBlZHR5cGU6IFwiN1wiLC8vXCIwXCIsXG5cdFx0XHRcdCAgICBwcm9qZWN0aWQ6ICcnLFxuXHRcdFx0XHQgICAgcmNsc2lkOiAnJyxcblx0XHRcdFx0ICAgIHJvYmppZDogJycsXG5cdFx0XHRcdCAgICB1c2VybG9naW46ICcnLFxuXHRcdFx0XHQgICAgY2xzaWQ6ICdNQk9YJywvL3RoaXMuJGRhdGEucGFyYW0uU3ViX0Nscy5JRCxcblx0XHRcdFx0ICAgIG9iamlkOiBcIlwiLFxuXHRcdFx0XHQgICAgYXR0cjogW10sXG5cdFx0XHRcdFx0Z2xvYmFsX2F0dHI6IHJlcSxcblx0XHRcdFx0XHRtYXN0X2F0dHI6IG1hc3RfYXR0cixcblx0XHRcdFx0XHRpbnB1dFBhcmFtdGVyOiBtYXN0X2F0dHIsXG5cdFx0XHRcdFx0ZW52aXJvbWVudDogZW52aXJvbWVudFxuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKGluZm8pO1xuXHRcdFx0XHR0aGlzLnNjYW5fRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGluZm8sIFwiXCIpO1xuXHRcdFx0fSxcblx0XHRcdHBvcHVwQ2hhbmdlKGUpIHtcblx0XHRcdFx0Y29uc29sZS5sb2coJ+W9k+WJjeaooeW8j++8micgKyBlLnR5cGUgKyAnLOeKtuaAge+8micgKyBlLnNob3cpO1xuXHRcdFx0fSxcblx0XHRcdGNoZWNrQ2hhbmdlKGUpeyAvL+W8ueahhmNoZWNr6YCJ5oupXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKGUudGFyZ2V0LmRhdGFzZXQpO1xuXHRcdFx0XHR2YXIgaW5kZXggPSBlLnRhcmdldC5kYXRhc2V0LmluZGV4O1xuXHRcdFx0XHR2YXIgaXNjaGVjayA9IGUudGFyZ2V0LmRhdGFzZXQuaXNjaGVjaztcblx0XHRcdFx0dmFyIGRhdGEgPSB0aGlzLiRkYXRhLmNoZWNrX2xpc3QuaXRlbXM7XG5cdFx0XHRcdC8vIHRoaXMuJGRhdGEuY2hlY2tfbGlzdC5pdGVtcz1bXTtcblx0XHRcdFx0aWYodGhpcy4kZGF0YS5jaGVja19saXN0Lm11bHRpcGxlX2Nob2ljZT09XCIwXCIpeyAvL+WIpOaWreaXtuWNlemAiei/mOaYr+WkmumAiVxuXHRcdFx0XHRcdGZvcih2YXIgaSBpbiBkYXRhKXtcblx0XHRcdFx0XHRcdGRhdGFbaV0uY2hlY2s9ZmFsc2U7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGRhdGFbaW5kZXhdLmNoZWNrPWlzY2hlY2s/ZmFsc2U6dHJ1ZTtcblx0XHRcdFx0dGhpcy4kZGF0YS5jaGVja19saXN0Lml0ZW1zPWRhdGE7XG5cdFx0XHRcdFxuXHRcdFx0fSxcblx0XHRcdHBvcHVwX2NhbmNlbChlKXsgLy/lvLnmoYblj5bmtohcblx0XHRcdFx0dGhpcy4kcmVmcy5wb3B1cC5jbG9zZSgpO1xuXHRcdFx0fSxcblx0XHRcdHBvcHVwX3NhdmEoZSl7IC8v5by55qGG56Gu5a6aIOmAieaLqeaMiemSruWQjlxuXHRcdFx0XHR2YXIgJHRoaXMgPSB0aGlzO1xuXHRcdFx0XHR2YXIgQWZ0ZXJfU2VsZWN0X0V2ZW50ID0gJHRoaXMuJGRhdGEucGFyYW0uU2Nhbl9Db2RlLkFmdGVyX1NlbGVjdF9FdmVudDtcblx0XHRcdFx0aWYoIUFmdGVyX1NlbGVjdF9FdmVudCl7XG5cdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLmj5DnpLpcIixjb250ZW50Olwi6YCJ5oup5ZCO5LqL5Lu25Li656m677yBXCIsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHZhciBpdGVtcyA9ICR0aGlzLiRkYXRhLmNoZWNrX2xpc3QuaXRlbXM7XG5cdFx0XHRcdHZhciBkYXRhPVtdO1xuXHRcdFx0XHR2YXIgbmFtZT1cIlwiO1xuXHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0aWYoaXRlbXNbaV0uY2hlY2s9PXRydWUpe1xuXHRcdFx0XHRcdFx0aWYobmFtZSlcblx0XHRcdFx0XHRcdFx0bmFtZSs9JzsnO1xuXHRcdFx0XHRcdFx0bmFtZSs9aXRlbXNbaV0ubmFtZTtcblx0XHRcdFx0XHRcdGRhdGEucHVzaCh7aWQ6aXRlbXNbaV0uaWQsbmFtZTppdGVtc1tpXS5uYW1lfSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGlmKGRhdGEubGVuZ3RoPT0wKXtcblx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIuaPkOekulwiLGNvbnRlbnQ6XCLmnKrpgInmi6nmlbDmja7vvIFcIixzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0dmFyIG1hc3RfYXR0cj1bXTtcblx0XHRcdFx0dmFyIGF0dHJsaXN0ID0gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0O1xuXHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJsaXN0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0dmFyIGF0dHIgPSBhdHRybGlzdFtpXS5BdHRyO1xuXHRcdFx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdFx0dmFyIGFyID0gYXR0cltqXTtcblx0XHRcdFx0XHRcdGlmKGFyLlZhbHVlPT0n6K+36YCJ5oupJyl7XG5cdFx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi5o+Q56S6XCIsY29udGVudDphci5EaXNwTmFtZStcIuacqumAieaLqeaVsOaNru+8gVwiLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpZihhci5UeXBlPT0n5byV55So5a+56LGhKOWkmuS4qiknKVxuXHRcdFx0XHRcdFx0XHRpZihhci5WYWx1ZT09J+ivtycpIGFyLlZhbHVlPScnO1xuXHRcdFx0XHRcdFx0aWYoYXIuVHlwZT09J+W8leeUqOS6uuWRmCcgfHwgYXIuVHlwZT09J+W8leeUqOmhueebricpXG5cdFx0XHRcdFx0XHRcdG1hc3RfYXR0ci5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsdWU6IGFyLlZhbElEID9hci5WYWxJRCA6JycgfSk7XG5cdFx0XHRcdFx0XHRlbHNlIGlmKGFyLlR5cGU9PSfluIPlsJTlgLwnKVxuXHRcdFx0XHRcdFx0XHRtYXN0X2F0dHIucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWx1ZT8nMSc6JzAnfSk7XG5cdFx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHRcdG1hc3RfYXR0ci5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsdWU6IGFyLlZhbHVlID9hci5WYWx1ZSA6Jyd9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0XG5cdFx0XHRcdCR0aGlzLiRkYXRhLnNjYW5Db2RlVmFsPW5hbWU7XG5cdFx0XHRcdHZhciBpbmZvID0ge1xuXHRcdFx0XHQgICAgZXZlbnRpZDogQWZ0ZXJfU2VsZWN0X0V2ZW50LklELFxuXHRcdFx0XHQgICAgZWR0eXBlOiBcIjdcIixcblx0XHRcdFx0ICAgIHByb2plY3RpZDogJycsXG5cdFx0XHRcdCAgICByY2xzaWQ6ICcnLFxuXHRcdFx0XHQgICAgcm9iamlkOiAnJyxcblx0XHRcdFx0XHR1c2VybG9naW46ICcnLFxuXHRcdFx0XHRcdGNsc2lkOiAnTUJPWCcsXG5cdFx0XHRcdFx0b2JqaWQ6IFwiXCIsXG5cdFx0XHRcdFx0YXR0cjogW3thdHRyOiAnbWFzdF9pbnB1dF8zMDM3Jyx2YWx1ZTogbmFtZX1dLFxuXHRcdFx0XHRcdGdsb2JhbF9hdHRyOiBtYXN0X2F0dHIsXG5cdFx0XHRcdFx0aW5wdXRQYXJhbXRlcjogZGF0YSxcblx0XHRcdFx0XHRlbnZpcm9tZW50OiAnJ1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKGluZm8pO1xuXHRcdFx0XHR0aGlzLnNjYW5fRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGluZm8sIFwiXCIpO1xuXHRcdFx0XHR0aGlzLiRyZWZzLnBvcHVwLmNsb3NlKCk7XG5cdFx0XHR9LFxuXHRcdFx0XG5cdFx0XHRjYW5jZWwoZSl7XG5cdFx0XHRcdHVuaS5uYXZpZ2F0ZUJhY2soe1xuXHRcdFx0XHRcdGRlbHRhOjEgLy/ov5Tlm57lsYLmlbDvvIwy5YiZ5LiK5LiK6aG1XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSxcblx0XHRcdHBhbmVsX2RlbChpbmRleCl7XG5cdFx0XHRcdHZhciAkdGhpcyA9IHRoaXM7XG5cdFx0XHRcdGlmICh0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdFtpbmRleF0uc2NhbkNvZGVWYWwgPT0gdGhpcy4kZGF0YS5zY2FuQ29kZVZhbCkge1xuXHRcdFx0XHRcdHRoaXMuJGRhdGEuc2NhbkNvZGVWYWw9Jyc7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYoIXRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0W2luZGV4XS5PYmpJRClcblx0XHRcdFx0XHR0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdC5zcGxpY2UoaW5kZXgsIDEpO1xuXHRcdFx0XHRlbHNle1xuXHRcdFx0XHRcdHZhciBkYXRhSW5mbz17XG5cdFx0XHRcdFx0XHRjbGFzc19pZDp0aGlzLiRkYXRhLnBhcmFtLlN1Yl9DbHMuSUQsXG5cdFx0XHRcdFx0XHRjbGFzc19uYW1lOicnLFxuXHRcdFx0XHRcdFx0b2JqX2lkOnRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0W2luZGV4XS5PYmpJRFxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coZGF0YUluZm8pO1xuXHRcdFx0XHRcdC8vIHJldHVybjtcblx0XHRcdFx0XHR1bmkuc2hvd0xvYWRpbmcoeyB0aXRsZTpcIuWKoOi9veS4rS4uLlwiIH0pO1xuXHRcdFx0XHRcdHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdkYXRhT2JqRGVsJyxkYXRhSW5mbykudGhlbihzdWNjZXNzPT57XG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhzdWNjZXNzKTtcblx0XHRcdFx0XHRcdHVuaS5oaWRlTG9hZGluZygpO1xuXHRcdFx0XHRcdFx0aWYgKHJldC5lcnJfY29kZSA9PSAwKSB7XG5cdFx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdC5zcGxpY2UoaW5kZXgsIDEpO1xuXHRcdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIuaPkOekulwiLGNvbnRlbnQ6XCLliKDpmaTmiJDlip/vvIFcIixzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHRcdFx0XHRcdH1lbHNle1xuXHRcdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzlcIixjb250ZW50OnN1Y2Nlc3MubXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pLmNhdGNoKGV4PT57XG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhleCk7XG5cdFx0XHRcdFx0XHR1bmkuaGlkZUxvYWRpbmcoKTtcblx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi5o+Q56S6OS4xXCIsY29udGVudDpleC5lcnJNc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRvbnRhcChlKXsgLy/miavnoIHlip/og71cblx0XHRcdFx0Ly9jb25zb2xlLmxvZyhlLnRhcmdldClcblx0XHRcdFx0Z2V0QXBwKCkub25TY2FuKChyZXN1bHQpPT57XG5cdFx0XHRcdFx0Ly9jb25zb2xlLmxvZyhyZXN1bHQuZGVjb2RlZGF0YSk7XG5cdFx0XHRcdFx0dmFyIGlzVmFsID10aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV0uVmFsdWU7XG5cdFx0XHRcdFx0Ly8gaWYoIWlzVmFsKXtcblx0XHRcdFx0XHQvLyBcdHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2lpaW5kZXgnXV0uc3ViQ2xhc3NBdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZS50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dLlZhbHVlPXJlc3VsdC5kZWNvZGVkYXRhO1xuXHRcdFx0XHRcdC8vIFx0dmFyIGlzVmFsZCA9dGhpcy4kZGF0YS5zdWJQYW5lbExpc3RbZS50YXJnZXQuZGF0YXNldFsnaWlpbmRleCddXS5zdWJDbGFzc0F0dHJbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV0uVmFsdWU7XG5cdFx0XHRcdFx0Ly8gXHRyZXR1cm47XG5cdFx0XHRcdFx0Ly8gfVxuXHRcdFx0XHRcdC8v5Li75pWw5o2u57G75omr56CB5p+l6K+i5pWw5o2uXG5cdFx0XHRcdFx0aWYgKGlzVmFsIT1yZXN1bHQuZGVjb2RlZGF0YSkge1xuXHRcdFx0XHRcdFx0dGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZS50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dLlZhbHVlPXJlc3VsdC5kZWNvZGVkYXRhO1xuXHRcdFx0XHRcdFx0dW5pLmhpZGVLZXlib2FyZCgpO1xuXHRcdFx0XHRcdFx0Ly/lrZDmlbDmja7nsbvmiavnoIHljLrkuovku7bohJrmnKxcblx0XHRcdFx0XHRcdHZhciBldmVudGlkID0gdGhpcy4kZGF0YS5wYXJhbS5TY2FuX0NvZGUuSW5wdXRfQ2hhbmdlX0V2ZW50LklEO1xuXHRcdFx0XHRcdFx0aWYgKGV2ZW50aWQpIHtcblx0XHRcdFx0XHQgICAgICAgIHZhciByZXE9W107XG5cdFx0XHRcdFx0ICAgICAgICB2YXIgYXR0cmxpc3QgPSB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3Q7ICAvL+S4u+aVsOaNruexu+WxnuaAp1xuXHRcdFx0XHRcdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRybGlzdC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdCAgICAgICAgXHR2YXIgYXR0ciA9IGF0dHJsaXN0W2ldLkF0dHI7XG5cdFx0XHRcdFx0ICAgICAgICBcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdCAgICAgICAgXHRcdHZhciBhciA9IGF0dHJbal07XG5cdFx0XHRcdFx0ICAgICAgICBcdFx0aWYoYXIuVHlwZT09J+W8leeUqOWvueixoSjlpJrkuKopJylcblx0XHRcdFx0XHQgICAgICAgIFx0XHRcdGlmKGFyLlZhbHVlPT0n6K+3JykgYXIuVmFsdWU9Jyc7XG5cdFx0XHRcdFx0ICAgICAgICBcdFx0aWYoYXIuVHlwZT09J+W8leeUqOS6uuWRmCcgfHwgYXIuVHlwZT09J+W8leeUqOmhueebricpXG5cdFx0XHRcdFx0ICAgICAgICBcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWxJRCA/YXIuVmFsSUQgOicnIH0pO1xuXHRcdFx0XHRcdCAgICAgICAgXHRcdGVsc2UgaWYoYXIuVHlwZT09J+W4g+WwlOWAvCcpXG5cdFx0XHRcdFx0ICAgICAgICBcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWx1ZT8nMSc6JzAnfSk7XG5cdFx0XHRcdFx0ICAgICAgICBcdFx0ZWxzZVxuXHRcdFx0XHRcdCAgICAgICAgXHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsdWUgP2FyLlZhbHVlIDonJ30pO1xuXHRcdFx0XHRcdCAgICAgICAgXHR9XG5cdFx0XHRcdFx0ICAgICAgICB9XG5cdFx0XHRcdFx0ICAgICAgICB2YXIgaW5mbyA9IHtcblx0XHRcdFx0XHQgICAgICAgICAgICBldmVudGlkOiBldmVudGlkLFxuXHRcdFx0XHRcdCAgICAgICAgICAgIGVkdHlwZTogXCI3XCIsLy9cIjBcIixcblx0XHRcdFx0XHQgICAgICAgICAgICBwcm9qZWN0aWQ6ICcnLFxuXHRcdFx0XHRcdCAgICAgICAgICAgIHJjbHNpZDogJycsXG5cdFx0XHRcdFx0ICAgICAgICAgICAgcm9iamlkOiAnJyxcblx0XHRcdFx0XHQgICAgICAgICAgICB1c2VybG9naW46ICcnLFxuXHRcdFx0XHRcdCAgICAgICAgICAgIGNsc2lkOiAnTUJPWCcsLy90aGlzLiRkYXRhLnBhcmFtLlN1Yl9DbHMuSUQsXG5cdFx0XHRcdFx0ICAgICAgICAgICAgb2JqaWQ6IFwiXCIsXG5cdFx0XHRcdFx0ICAgICAgICAgICAgYXR0cjogcmVxLFxuXHRcdFx0XHRcdFx0XHRcdG1hc3RfYXR0cjogW10sXG5cdFx0XHRcdFx0XHRcdFx0aW5wdXRQYXJhbXRlcjpbeyBhdHRyOiAnbWFzdF9pbnB1dF8zMDM3JywgdmFsdWU6IHJlc3VsdC5kZWNvZGVkYXRhIH1dXG5cdFx0XHRcdFx0ICAgICAgICB9XG5cdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdCAgICAgICAgdGhpcy5zY2FuX0RhdGFPYmpSdW5DdXN0b21FdmVudChpbmZvLCBcIlwiKTtcblx0XHRcdFx0XHQgICAgfVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSlcblx0XHRcdH0sXG5cdFx0XHRzdWJvbnRhcChlKXsgLy/miavnoIHlip/og71cblx0XHRcdFx0Ly9jb25zb2xlLmxvZyhlLnRhcmdldClcblx0XHRcdFx0Z2V0QXBwKCkub25TY2FuKChyZXN1bHQpPT57XG5cdFx0XHRcdFx0Ly9jb25zb2xlLmxvZyhyZXN1bHQuZGVjb2RlZGF0YSk7XG5cdFx0XHRcdFx0dmFyIGlzVmFsID10aGlzLiRkYXRhLnN1YkNsYXNzQXR0ckxpc3RbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV0uVmFsdWU7XG5cdFx0XHRcdFx0Ly/kuLvmlbDmja7nsbvmiavnoIHmn6Xor6LmlbDmja5cblx0XHRcdFx0XHRpZiAoaXNWYWwhPXJlc3VsdC5kZWNvZGVkYXRhKSB7XG5cdFx0XHRcdFx0XHR0aGlzLiRkYXRhLnN1YkNsYXNzQXR0ckxpc3RbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV0uVmFsdWU9cmVzdWx0LmRlY29kZWRhdGE7XG5cdFx0XHRcdFx0XHR1bmkuaGlkZUtleWJvYXJkKCk7XG5cdFx0XHRcdFx0XHQvL+WtkOaVsOaNruexu+aJq+eggeWMuuS6i+S7tuiEmuacrFxuXHRcdFx0XHRcdFx0dmFyIGV2ZW50aWQgPSB0aGlzLiRkYXRhLnBhcmFtLlNjYW5fQ29kZS5JbnB1dF9DaGFuZ2VfRXZlbnQuSUQ7XG5cdFx0XHRcdFx0XHRpZiAoZXZlbnRpZCkge1xuXHRcdFx0XHRcdCAgICAgICAgdmFyIHJlcT1bXTtcblx0XHRcdFx0XHQgICAgICAgIHZhciBhdHRybGlzdCA9IHRoaXMuJGRhdGEuc3ViQ2xhc3NBdHRyTGlzdDsgIC8v5Li75pWw5o2u57G75bGe5oCnXG5cdFx0XHRcdFx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJsaXN0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0ICAgICAgICBcdHZhciBhdHRyID0gYXR0cmxpc3RbaV0uQXR0cjtcblx0XHRcdFx0XHQgICAgICAgIFx0Zm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0ICAgICAgICBcdFx0dmFyIGFyID0gYXR0cltqXTtcblx0XHRcdFx0XHQgICAgICAgIFx0XHRpZihhci5UeXBlPT0n5byV55So5a+56LGhKOWkmuS4qiknKVxuXHRcdFx0XHRcdCAgICAgICAgXHRcdFx0aWYoYXIuVmFsdWU9PSfor7cnKSBhci5WYWx1ZT0nJztcblx0XHRcdFx0XHQgICAgICAgIFx0XHRpZihhci5UeXBlPT0n5byV55So5Lq65ZGYJyB8fCBhci5UeXBlPT0n5byV55So6aG555uuJylcblx0XHRcdFx0XHQgICAgICAgIFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsdWU6IGFyLlZhbElEID9hci5WYWxJRCA6JycgfSk7XG5cdFx0XHRcdFx0ICAgICAgICBcdFx0ZWxzZSBpZihhci5UeXBlPT0n5biD5bCU5YC8Jylcblx0XHRcdFx0XHQgICAgICAgIFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsdWU6IGFyLlZhbHVlPycxJzonMCd9KTtcblx0XHRcdFx0XHQgICAgICAgIFx0XHRlbHNlXG5cdFx0XHRcdFx0ICAgICAgICBcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWx1ZSA/YXIuVmFsdWUgOicnfSk7XG5cdFx0XHRcdFx0ICAgICAgICBcdH1cblx0XHRcdFx0XHQgICAgICAgIH1cblx0XHRcdFx0XHQgICAgICAgIHZhciBpbmZvID0ge1xuXHRcdFx0XHRcdCAgICAgICAgICAgIGV2ZW50aWQ6IGV2ZW50aWQsXG5cdFx0XHRcdFx0ICAgICAgICAgICAgZWR0eXBlOiBcIjdcIiwvL1wiMFwiLFxuXHRcdFx0XHRcdCAgICAgICAgICAgIHByb2plY3RpZDogJycsXG5cdFx0XHRcdFx0ICAgICAgICAgICAgcmNsc2lkOiAnJyxcblx0XHRcdFx0XHQgICAgICAgICAgICByb2JqaWQ6ICcnLFxuXHRcdFx0XHRcdCAgICAgICAgICAgIHVzZXJsb2dpbjogJycsXG5cdFx0XHRcdFx0ICAgICAgICAgICAgY2xzaWQ6ICdNQk9YJywvL3RoaXMuJGRhdGEucGFyYW0uU3ViX0Nscy5JRCxcblx0XHRcdFx0XHQgICAgICAgICAgICBvYmppZDogXCJcIixcblx0XHRcdFx0XHQgICAgICAgICAgICBhdHRyOiByZXEsXG5cdFx0XHRcdFx0XHRcdFx0bWFzdF9hdHRyOiBbXSxcblx0XHRcdFx0XHRcdFx0XHRpbnB1dFBhcmFtdGVyOlt7IGF0dHI6ICdtYXN0X2lucHV0XzMwMzcnLCB2YWx1ZTogcmVzdWx0LmRlY29kZWRhdGEgfV1cblx0XHRcdFx0XHQgICAgICAgIH1cblx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0ICAgICAgICB0aGlzLnNjYW5fRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGluZm8sIFwiXCIpO1xuXHRcdFx0XHRcdCAgICB9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KVxuXHRcdFx0fSxcblx0XHRcdHNjYW5fb250YXAoZSl7IC8v5omr56CB5Yy65omr56CB5Yqf6IO9XG5cdFx0XHRcdC8vY29uc29sZS5sb2coZS50YXJnZXQpXG5cdFx0XHRcdGdldEFwcCgpLm9uU2NhbigocmVzdWx0KT0+e1xuXHRcdFx0XHRcdGNvbnNvbGUubG9nKHJlc3VsdC5kZWNvZGVkYXRhKTtcblx0XHRcdFx0XHR2YXIgaXNmbGFnPXRydWU7XG5cdFx0XHRcdFx0Zm9yKHZhciBpIGluIHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0KXtcblx0XHRcdFx0XHRcdGlmKHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0W2ldLnNjYW5Db2RlVmFsID09IHJlc3VsdC5kZWNvZGVkYXRhKSBcblx0XHRcdFx0XHRcdFx0aXNmbGFnPWZhbHNlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQvL+WtkOaVsOaNruexu+aJq+eggeafpeivouaVsOaNrlxuXHRcdFx0XHRcdGlmIChpc2ZsYWcpIHtcblx0XHRcdFx0XHRcdHVuaS5oaWRlS2V5Ym9hcmQoKTtcblx0XHRcdFx0XHRcdHRoaXMuJGRhdGEuc2NhbkNvZGVWYWw9cmVzdWx0LmRlY29kZWRhdGE7XG5cdFx0XHRcdFx0XHR2YXIgZXZlbnRpZCA9IHRoaXMuJGRhdGEucGFyYW0uU2Nhbl9Db2RlLklucHV0X0NoYW5nZV9FdmVudC5JRDtcblx0XHRcdFx0XHRcdGlmIChldmVudGlkKSB7XG5cdFx0XHRcdFx0ICAgICAgICB2YXIgbWFzdF9yZXE9W107XG5cdFx0XHRcdFx0XHRcdC8v5Li75pWw5o2u57G75bGe5oCnXG5cdFx0XHRcdFx0XHRcdHZhciBjbGFzc2F0dHJsaXN0ID0gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0OyAgXG5cdFx0XHRcdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgY2xhc3NhdHRybGlzdC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdFx0XHRcdHZhciBhdHRyID0gY2xhc3NhdHRybGlzdFtpXS5BdHRyO1xuXHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIGFyID0gYXR0cltqXTtcblx0XHRcdFx0XHRcdFx0XHRcdGlmKGFyLlR5cGU9PSflvJXnlKjlr7nosaEo5aSa5LiqKScpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGFyLlZhbHVlPT0n6K+3JykgYXIuVmFsdWU9Jyc7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZihhci5UeXBlPT0n5byV55So5Lq65ZGYJyB8fCBhci5UeXBlPT0n5byV55So6aG555uuJylcblx0XHRcdFx0XHRcdFx0XHRcdFx0bWFzdF9yZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWxJRCA/YXIuVmFsSUQgOicnIH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0ZWxzZSBpZihhci5UeXBlPT0n5biD5bCU5YC8Jylcblx0XHRcdFx0XHRcdFx0XHRcdFx0bWFzdF9yZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWx1ZT8nMSc6JzAnfSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG1hc3RfcmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsdWUgP2FyLlZhbHVlIDonJ30pO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdCAgICAgICAgdmFyIHJlcT1bXTtcblx0XHRcdFx0XHQgICAgICAgIC8v5a2Q5pWw5o2u57G75bGe5oCnXG5cdFx0XHRcdFx0XHRcdHZhciBhdHRybGlzdCA9IHRoaXMuJGRhdGEuc3ViQ2xhc3NBdHRyTGlzdDtcblx0XHRcdFx0XHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmxpc3QubGVuZ3RoOyBpKyspIHsgXG5cdFx0XHRcdFx0ICAgICAgICBcdHZhciBhdHRyID0gYXR0cmxpc3RbaV0uQXR0cjtcblx0XHRcdFx0XHQgICAgICAgIFx0Zm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0ICAgICAgICBcdFx0dmFyIGFyID0gYXR0cltqXTtcblx0XHRcdFx0XHQgICAgICAgIFx0XHRpZihhci5UeXBlPT0n5byV55So5a+56LGhKOWkmuS4qiknKVxuXHRcdFx0XHRcdCAgICAgICAgXHRcdFx0aWYoYXIuVmFsdWU9PSfor7cnKSBhci5WYWx1ZT0nJztcblx0XHRcdFx0XHQgICAgICAgIFx0XHRpZihhci5UeXBlPT0n5byV55So5Lq65ZGYJyB8fCBhci5UeXBlPT0n5byV55So6aG555uuJylcblx0XHRcdFx0XHQgICAgICAgIFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsdWU6IGFyLlZhbElEID9hci5WYWxJRCA6JycgfSk7XG5cdFx0XHRcdFx0ICAgICAgICBcdFx0ZWxzZSBpZihhci5UeXBlPT0n5biD5bCU5YC8Jylcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsdWU/JzEnOicwJ30pO1xuXHRcdFx0XHRcdCAgICAgICAgXHRcdGVsc2Vcblx0XHRcdFx0XHQgICAgICAgIFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsdWU6IGFyLlZhbHVlID9hci5WYWx1ZSA6Jyd9KTtcblx0XHRcdFx0XHQgICAgICAgIFx0fVxuXHRcdFx0XHRcdCAgICAgICAgfVxuXHRcdFx0XHRcdCAgICAgICAgdmFyIGluZm8gPSB7XG5cdFx0XHRcdFx0ICAgICAgICAgICAgZXZlbnRpZDogZXZlbnRpZCxcblx0XHRcdFx0XHQgICAgICAgICAgICBlZHR5cGU6ICc3JywvL1wiMFwiLFxuXHRcdFx0XHRcdCAgICAgICAgICAgIHByb2plY3RpZDogJycsXG5cdFx0XHRcdFx0ICAgICAgICAgICAgcmNsc2lkOiAnJyxcblx0XHRcdFx0XHQgICAgICAgICAgICByb2JqaWQ6ICcnLFxuXHRcdFx0XHRcdCAgICAgICAgICAgIHVzZXJsb2dpbjogJycsXG5cdFx0XHRcdFx0ICAgICAgICAgICAgY2xzaWQ6ICdNQk9YJywvL3RoaXMuJGRhdGEucGFyYW0uU3ViX0Nscy5JRCxcblx0XHRcdFx0XHQgICAgICAgICAgICBvYmppZDogXCJcIixcblx0XHRcdFx0XHQgICAgICAgICAgICBhdHRyOiByZXEsXG5cdFx0XHRcdFx0XHRcdFx0bWFzdF9hdHRyOiBtYXN0X3JlcSxcblx0XHRcdFx0XHRcdFx0XHRpbnB1dFBhcmFtdGVyOlt7IGF0dHI6ICdpbnB1dF8zMDM3JywgdmFsdWU6IHRoaXMuJGRhdGEuc2NhbkNvZGVWYWwgfV1cblx0XHRcdFx0XHQgICAgICAgIH1cblx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0ICAgICAgICB0aGlzLnNjYW5fRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGluZm8sIFwiXCIpO1xuXHRcdFx0XHRcdCAgICB9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KVxuXHRcdFx0fSxcblx0XHRcdHNjYW5fb25ldmVudChlKXtcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coZS50YXJnZXQpO1xuXHRcdFx0XHRpZihlLnRhcmdldC52YWx1ZSl7XG5cdFx0XHRcdFx0dmFyIGlzZmxhZz10cnVlO1xuXHRcdFx0XHRcdGZvcih2YXIgaSBpbiB0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdCl7XG5cdFx0XHRcdFx0XHRpZih0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdFtpXS5zY2FuQ29kZVZhbCA9PSBlLnRhcmdldC52YWx1ZSkgXG5cdFx0XHRcdFx0XHRcdGlzZmxhZz1mYWxzZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Ly/lrZDmlbDmja7nsbvmiavnoIHmn6Xor6LmlbDmja5cblx0XHRcdFx0XHRpZiAoaXNmbGFnKSB7XG5cdFx0XHRcdFx0XHR1bmkuaGlkZUtleWJvYXJkKCk7XG5cdFx0XHRcdFx0XHR0aGlzLiRkYXRhLnNjYW5Db2RlVmFsPWUudGFyZ2V0LnZhbHVlO1xuXHRcdFx0XHRcdFx0dmFyIGV2ZW50aWQgPSB0aGlzLiRkYXRhLnBhcmFtLlNjYW5fQ29kZS5JbnB1dF9DaGFuZ2VfRXZlbnQuSUQ7XG5cdFx0XHRcdFx0XHRpZiAoZXZlbnRpZCkge1xuXHRcdFx0XHRcdFx0XHR2YXIgbWFzdF9yZXE9W107XG5cdFx0XHRcdFx0XHRcdC8v5Li75pWw5o2u57G75bGe5oCnXG5cdFx0XHRcdFx0XHRcdHZhciBjbGFzc2F0dHJsaXN0ID0gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0OyAgXG5cdFx0XHRcdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgY2xhc3NhdHRybGlzdC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdFx0XHRcdHZhciBhdHRyID0gY2xhc3NhdHRybGlzdFtpXS5BdHRyO1xuXHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIGFyID0gYXR0cltqXTtcblx0XHRcdFx0XHRcdFx0XHRcdGlmKGFyLlR5cGU9PSflvJXnlKjlr7nosaEo5aSa5LiqKScpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGFyLlZhbHVlPT0n6K+3JykgYXIuVmFsdWU9Jyc7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZihhci5UeXBlPT0n5byV55So5Lq65ZGYJyB8fCBhci5UeXBlPT0n5byV55So6aG555uuJylcblx0XHRcdFx0XHRcdFx0XHRcdFx0bWFzdF9yZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWxJRCA/YXIuVmFsSUQgOicnIH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0ZWxzZSBpZihhci5UeXBlPT0n5biD5bCU5YC8Jylcblx0XHRcdFx0XHRcdFx0XHRcdFx0bWFzdF9yZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWx1ZT8nMSc6JzAnfSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG1hc3RfcmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsdWUgP2FyLlZhbHVlIDonJ30pO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR2YXIgcmVxPVtdO1xuXHRcdFx0XHRcdFx0XHQvL+WtkOaVsOaNruexu+WxnuaAp1xuXHRcdFx0XHRcdFx0XHR2YXIgYXR0cmxpc3QgPSB0aGlzLiRkYXRhLnN1YkNsYXNzQXR0ckxpc3Q7XG5cdFx0XHRcdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmxpc3QubGVuZ3RoOyBpKyspIHsgXG5cdFx0XHRcdFx0XHRcdFx0dmFyIGF0dHIgPSBhdHRybGlzdFtpXS5BdHRyO1xuXHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIGFyID0gYXR0cltqXTtcblx0XHRcdFx0XHRcdFx0XHRcdGlmKGFyLlR5cGU9PSflvJXnlKjlr7nosaEo5aSa5LiqKScpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGFyLlZhbHVlPT0n6K+3JykgYXIuVmFsdWU9Jyc7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZihhci5UeXBlPT0n5byV55So5Lq65ZGYJyB8fCBhci5UeXBlPT0n5byV55So6aG555uuJylcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsSUQgP2FyLlZhbElEIDonJyB9KTtcblx0XHRcdFx0XHRcdFx0XHRcdGVsc2UgaWYoYXIuVHlwZT09J+W4g+WwlOWAvCcpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsdWU6IGFyLlZhbHVlPycxJzonMCd9KTtcblx0XHRcdFx0XHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsdWUgP2FyLlZhbHVlIDonJ30pO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR2YXIgaW5mbyA9IHtcblx0XHRcdFx0XHRcdFx0XHRldmVudGlkOiBldmVudGlkLFxuXHRcdFx0XHRcdFx0XHRcdGVkdHlwZTogJzcnLC8vXCIwXCIsXG5cdFx0XHRcdFx0XHRcdFx0cHJvamVjdGlkOiAnJyxcblx0XHRcdFx0XHRcdFx0XHRyY2xzaWQ6ICcnLFxuXHRcdFx0XHRcdFx0XHRcdHJvYmppZDogJycsXG5cdFx0XHRcdFx0XHRcdFx0dXNlcmxvZ2luOiAnJyxcblx0XHRcdFx0XHRcdFx0XHRjbHNpZDogJ01CT1gnLC8vdGhpcy4kZGF0YS5wYXJhbS5TdWJfQ2xzLklELFxuXHRcdFx0XHRcdFx0XHRcdG9iamlkOiBcIlwiLFxuXHRcdFx0XHRcdFx0XHRcdGF0dHI6IHJlcSxcblx0XHRcdFx0XHRcdFx0XHRtYXN0X2F0dHI6IG1hc3RfcmVxLFxuXHRcdFx0XHRcdFx0XHRcdGlucHV0UGFyYW10ZXI6W3sgYXR0cjogJ2lucHV0XzMwMzcnLCB2YWx1ZTogdGhpcy4kZGF0YS5zY2FuQ29kZVZhbCB9XVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHR0aGlzLnNjYW5fRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGluZm8sIFwiXCIpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdG9uYXJyb3coaW5kZXgsb3Blbil7XG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKGluZGV4KyctLScrb3Blbik7XG5cdFx0XHRcdHZhciBkYXRhX2F0dHI9dGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZS50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dLk9wZW47XG5cdFx0XHRcdGlmKCFkYXRhX2F0dHIpe1xuXHRcdFx0XHRcdHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2lpaW5kZXgnXV0uc3ViQ2xhc3NBdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZS50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dLlZhbHVlPW9wZW49PXRydWU/ZmFsc2U6dHJ1ZTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2lpaW5kZXgnXV0uc3ViQ2xhc3NBdHRyW2luZGV4XS5PcGVuPW9wZW49PXRydWU/ZmFsc2U6dHJ1ZTtcblx0XHRcdH0sXG5cdFx0XHRvbmRhdGVUaW1lKGUpIHtcblx0XHRcdFx0Ly9jb25zb2xlLmxvZyhlLnRhcmdldClcblx0XHRcdFx0dmFyIGRhdGFfYXR0cj10aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV0uVmFsdWU7XG5cdFx0XHRcdGlmKCFkYXRhX2F0dHIpe1xuXHRcdFx0XHRcdHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2lpaW5kZXgnXV0uc3ViQ2xhc3NBdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZS50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dLlZhbHVlPWUudGFyZ2V0LnZhbHVlO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV0uVmFsdWU9ZS50YXJnZXQudmFsdWU7XG5cdFx0XHRcdFxuXHRcdFx0fSxcblx0XHRcdG9uY2hhbmdlKGUpIHtcblx0XHRcdFx0Y29uc29sZS5sb2coZS50YXJnZXQpO1xuXHRcdFx0XHR2YXIgdmFsdWU9dGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZS50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dLmRpY3RpdGVtW2UudGFyZ2V0LnZhbHVlXTtcblx0XHRcdFx0dmFyIGRhdGFfYXR0ciA9IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtlLnRhcmdldC5kYXRhc2V0WydpbmRleCddXS5BdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2lpbmRleCddXTtcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coZGF0YV9hdHRyKTtcblx0XHRcdFx0aWYgKHZhbHVlLk5hbWUgIT0gZGF0YV9hdHRyLlZhbHVlKSB7XG5cdFx0XHRcdFx0dGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZS50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dLlZhbHVlPXZhbHVlLk5hbWU7XG5cdFx0XHRcdFx0Ly8gY29uc29sZS5sb2codGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZS50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dLlZhbHVlKTtcblx0XHRcdFx0XHR2YXIgZXZlbnRpZCA9IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtlLnRhcmdldC5kYXRhc2V0WydpbmRleCddXS5BdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2lpbmRleCddXS5hY3Rpb247XG5cdFx0XHRcdFx0aWYgKGV2ZW50aWQpIHtcblx0XHRcdFx0ICAgICAgICAvLyBzZWxmLmV2ZW50X25vX3N1YiA9IDE7XG5cdFx0XHRcdCAgICAgICAgdmFyIHJlcT1bXTtcblx0XHRcdFx0ICAgICAgICB2YXIgYXR0cmxpc3QgPSB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3Q7XG5cdFx0XHRcdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRybGlzdC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHQgICAgICAgIFx0dmFyIGF0dHIgPSBhdHRybGlzdFtpXS5BdHRyO1xuXHRcdFx0XHQgICAgICAgIFx0Zm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdCAgICAgICAgXHRcdHZhciBhciA9IGF0dHJbal07XG5cdFx0XHRcdCAgICAgICAgXHRcdGlmKGFyLlR5cGU9PSflvJXnlKjlr7nosaEo5aSa5LiqKScpXG5cdFx0XHRcdCAgICAgICAgXHRcdFx0aWYoYXIuVmFsdWU9PSfor7cnKSBhci5WYWx1ZT0nJztcblx0XHRcdFx0ICAgICAgICBcdFx0aWYoYXIuVHlwZT09J+W8leeUqOS6uuWRmCcgfHwgYXIuVHlwZT09J+W8leeUqOmhueebricpXG5cdFx0XHRcdCAgICAgICAgXHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWw6IGFyLlZhbElEID9hci5WYWxJRCA6JycgfSk7XG5cdFx0XHRcdCAgICAgICAgXHRcdGVsc2UgaWYoYXIuVHlwZT09J+W4g+WwlOWAvCcpXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbDogYXIuVmFsdWU/JzEnOicwJ30pO1xuXHRcdFx0XHQgICAgICAgIFx0XHRlbHNlXG5cdFx0XHRcdCAgICAgICAgXHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWw6IGFyLlZhbHVlID9hci5WYWx1ZSA6Jyd9KTtcblx0XHRcdFx0ICAgICAgICBcdH1cblx0XHRcdFx0ICAgICAgICB9XG5cdFx0XHRcdCAgICAgICAgdmFyIGluZm8gPSB7XG5cdFx0XHRcdCAgICAgICAgICAgIGV2ZW50aWQ6IGV2ZW50aWQsXG5cdFx0XHRcdCAgICAgICAgICAgIGVkdHlwZTogXCIwXCIsXG5cdFx0XHRcdCAgICAgICAgICAgIHByb2plY3RpZDogJycsXG5cdFx0XHRcdCAgICAgICAgICAgIHJjbHNpZDogJycsXG5cdFx0XHRcdCAgICAgICAgICAgIHJvYmppZDogJycsXG5cdFx0XHRcdCAgICAgICAgICAgIHVzZXJsb2dpbjogJycsXG5cdFx0XHRcdCAgICAgICAgICAgIGNsc2lkOiB0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuSUQsXG5cdFx0XHRcdCAgICAgICAgICAgIG9iamlkOiBcIlwiLFxuXHRcdFx0XHQgICAgICAgICAgICBhdHRyOiByZXEsXG5cdFx0XHRcdCAgICAgICAgfVxuXHRcdFx0XHQgICAgICAgIHRoaXMuRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGluZm8pO1xuXHRcdFx0XHQgICAgfVxuXHRcdFx0XHR9XG5cdFx0XHRcdFxuXHRcdFx0fSxcblx0XHRcdG9uY2hhbmdlMihpdGVtLHZhbHVlLGRlbHZhbHVlKSB7XG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKGl0ZW0pO1xuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyh2YWx1ZSk7XG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKGRlbHZhbHVlKTtcblx0XHRcdFx0aWYoaXRlbS5sZW5ndGg9PTApeyAvL+S4uuepuuaXtu+8jOa4heepuuWxnuaAp3ZhbHVlXG5cdFx0XHRcdFx0dmFyIGluZGV4ICxpaW5kZXgsZGluZGV4PTA7XG5cdFx0XHRcdFx0Zm9yKHZhciBpIGluIHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdCl7XG5cdFx0XHRcdFx0XHRmb3IodmFyIGogaW4gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2ldLkF0dHIpe1xuXHRcdFx0XHRcdFx0XHRpZihkZWx2YWx1ZVswXS5hdHRyID09IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtpXS5BdHRyW2pdLk5hbWUpe1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtpXS5BdHRyW2pdLlZhbHVlPVwiXCI7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0XHRcblx0XHRcdFx0Zm9yKHZhciB2IGluIGl0ZW0pe1xuXHRcdFx0XHRcdHZhciBpbmRleCAsaWluZGV4LGRpbmRleD0wO1xuXHRcdFx0XHRcdGZvcih2YXIgaSBpbiB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3Qpe1xuXHRcdFx0XHRcdFx0Zm9yKHZhciBqIGluIHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtpXS5BdHRyKXtcblx0XHRcdFx0XHRcdFx0aWYoaXRlbVt2XS5hdHRyID09IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtpXS5BdHRyW2pdLk5hbWUpe1xuXHRcdFx0XHRcdFx0XHRcdGluZGV4PWk7aWluZGV4PWo7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0dmFyIGl0ZW12YWx1ZSA9IGl0ZW1bdl07XG5cdFx0XHRcdFx0dmFyIGRhdGFfYXR0ciA9IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtpbmRleF0uQXR0cltpaW5kZXhdO1xuXHRcdFx0XHRcdFxuXHRcdFx0XHRcdGNvbnNvbGUubG9nKGRhdGFfYXR0cik7XG5cdFx0XHRcdFx0aWYgKGl0ZW12YWx1ZS5OYW1lICE9IGRhdGFfYXR0ci5WYWx1ZSkge1xuXHRcdFx0XHRcdFx0dGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2luZGV4XS5BdHRyW2lpbmRleF0uVmFsdWU9dmFsdWU7XG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyh0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbaW5kZXhdLkF0dHJbaWluZGV4XS5WYWx1ZSk7XG5cdFx0XHRcdFx0XHR2YXIgZXZlbnRpZCA9IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtpbmRleF0uQXR0cltpaW5kZXhdLmFjdGlvbjtcblx0XHRcdFx0XHRcdGlmIChldmVudGlkKSB7XG5cdFx0XHRcdFx0ICAgICAgICAvLyBzZWxmLmV2ZW50X25vX3N1YiA9IDE7XG5cdFx0XHRcdFx0ICAgICAgICB2YXIgcmVxPVtdO1xuXHRcdFx0XHRcdCAgICAgICAgdmFyIGF0dHJsaXN0ID0gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0O1xuXHRcdFx0XHRcdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRybGlzdC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdCAgICAgICAgXHR2YXIgYXR0ciA9IGF0dHJsaXN0W2ldLkF0dHI7XG5cdFx0XHRcdFx0ICAgICAgICBcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdCAgICAgICAgXHRcdHZhciBhciA9IGF0dHJbal07XG5cdFx0XHRcdFx0ICAgICAgICBcdFx0aWYoYXIuVHlwZT09J+W8leeUqOWvueixoSjlpJrkuKopJylcblx0XHRcdFx0XHQgICAgICAgIFx0XHRcdGlmKGFyLlZhbHVlPT0n6K+3JykgYXIuVmFsdWU9Jyc7XG5cdFx0XHRcdFx0ICAgICAgICBcdFx0aWYoYXIuVHlwZT09J+W8leeUqOS6uuWRmCcgfHwgYXIuVHlwZT09J+W8leeUqOmhueebricpXG5cdFx0XHRcdFx0ICAgICAgICBcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbDogYXIuVmFsSUQgP2FyLlZhbElEIDonJyB9KTtcblx0XHRcdFx0XHQgICAgICAgIFx0XHRlbHNlIGlmKGFyLlR5cGU9PSfluIPlsJTlgLwnKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbDogYXIuVmFsdWU/JzEnOicwJ30pO1xuXHRcdFx0XHRcdCAgICAgICAgXHRcdGVsc2UgaWYoYXIuVHlwZT09J+Wtl+WFuCcgfHwgYXIuVHlwZT09J+Wtl+WFuC3lrZfnrKbkuLInIHx8IGFyLlR5cGU9PSflrZflhbgt5pW05pWwJylcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWw6IGl0ZW12YWx1ZS5OYW1lfSk7XG5cdFx0XHRcdFx0ICAgICAgICBcdFx0ZWxzZVxuXHRcdFx0XHRcdCAgICAgICAgXHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWw6IGFyLlZhbHVlID9hci5WYWx1ZSA6Jyd9KTtcblx0XHRcdFx0XHQgICAgICAgIFx0fVxuXHRcdFx0XHRcdCAgICAgICAgfVxuXHRcdFx0XHRcdCAgICAgICAgdmFyIGluZm8gPSB7XG5cdFx0XHRcdFx0ICAgICAgICAgICAgZXZlbnRpZDogZXZlbnRpZCxcblx0XHRcdFx0XHQgICAgICAgICAgICBlZHR5cGU6IFwiMFwiLFxuXHRcdFx0XHRcdCAgICAgICAgICAgIHByb2plY3RpZDogJycsXG5cdFx0XHRcdFx0ICAgICAgICAgICAgcmNsc2lkOiAnJyxcblx0XHRcdFx0XHQgICAgICAgICAgICByb2JqaWQ6ICcnLFxuXHRcdFx0XHRcdCAgICAgICAgICAgIHVzZXJsb2dpbjogJycsXG5cdFx0XHRcdFx0ICAgICAgICAgICAgY2xzaWQ6IHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5JRCxcblx0XHRcdFx0XHQgICAgICAgICAgICBvYmppZDogXCJcIixcblx0XHRcdFx0XHQgICAgICAgICAgICBhdHRyOiByZXEsXG5cdFx0XHRcdFx0ICAgICAgICB9XG5cdFx0XHRcdFx0ICAgICAgICB0aGlzLkRhdGFPYmpSdW5DdXN0b21FdmVudChpbmZvKTtcblx0XHRcdFx0XHQgICAgfVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRcblx0XHRcdFx0XG5cdFx0XHR9LFxuXHRcdFx0c3ViX29uY2hhbmdlKGUpIHtcblx0XHRcdFx0Y29uc29sZS5sb2coZS50YXJnZXQpO1xuXHRcdFx0XHR2YXIgdmFsdWU9dGhpcy4kZGF0YS5zdWJQYW5lbExpc3RbZS50YXJnZXQuZGF0YXNldFsnaWlpbmRleCddXS5zdWJDbGFzc0F0dHJbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV0uZGljdGl0ZW1bZS50YXJnZXQudmFsdWVdO1xuXHRcdFx0XHR2YXIgZGF0YV9hdHRyID0gdGhpcy4kZGF0YS5zdWJQYW5lbExpc3RbZS50YXJnZXQuZGF0YXNldFsnaWlpbmRleCddXS5zdWJDbGFzc0F0dHJbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV07XG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKGRhdGFfYXR0cik7XG5cdFx0XHRcdGlmICh2YWx1ZS5OYW1lICE9IGRhdGFfYXR0ci5WYWx1ZSkge1xuXHRcdFx0XHRcdHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2lpaW5kZXgnXV0uc3ViQ2xhc3NBdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZS50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dLlZhbHVlPXZhbHVlLk5hbWU7XG5cdFx0XHRcdFx0Ly8gY29uc29sZS5sb2codGhpcy4kZGF0YS5zdWJQYW5lbExpc3RbZS50YXJnZXQuZGF0YXNldFsnaWlpbmRleCddXS5zdWJDbGFzc0F0dHJbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV0uVmFsdWUpO1xuXHRcdFx0XHRcdHZhciBldmVudGlkID0gdGhpcy4kZGF0YS5zdWJQYW5lbExpc3RbZS50YXJnZXQuZGF0YXNldFsnaWlpbmRleCddXS5zdWJDbGFzc0F0dHJbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV0uYWN0aW9uO1xuXHRcdFx0XHRcdGlmIChldmVudGlkKSB7XG5cdFx0XHRcdCAgICAgICAgLy8gc2VsZi5ldmVudF9ub19zdWIgPSAxO1xuXHRcdFx0XHQgICAgICAgIHZhciByZXE9W107XG5cdFx0XHRcdCAgICAgICAgdmFyIGF0dHJsaXN0ID0gdGhpcy4kZGF0YS5zdWJQYW5lbExpc3RbZS50YXJnZXQuZGF0YXNldFsnaWlpbmRleCddXS5zdWJDbGFzc0F0dHI7XG5cdFx0XHRcdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRybGlzdC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHQgICAgICAgIFx0dmFyIGF0dHIgPSBhdHRybGlzdFtpXS5BdHRyO1xuXHRcdFx0XHQgICAgICAgIFx0Zm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdCAgICAgICAgXHRcdHZhciBhciA9IGF0dHJbal07XG5cdFx0XHRcdCAgICAgICAgXHRcdGlmKGFyLlR5cGU9PSflvJXnlKjlr7nosaEo5aSa5LiqKScpXG5cdFx0XHRcdCAgICAgICAgXHRcdFx0aWYoYXIuVmFsdWU9PSfor7cnKSBhci5WYWx1ZT0nJztcblx0XHRcdFx0ICAgICAgICBcdFx0aWYoYXIuVHlwZT09J+W8leeUqOS6uuWRmCcgfHwgYXIuVHlwZT09J+W8leeUqOmhueebricpXG5cdFx0XHRcdCAgICAgICAgXHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWw6IGFyLlZhbElEID9hci5WYWxJRCA6JycgfSk7XG5cdFx0XHRcdCAgICAgICAgXHRcdGVsc2UgaWYoYXIuVHlwZT09J+W4g+WwlOWAvCcpXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbDogYXIuVmFsdWU/JzEnOicwJ30pO1xuXHRcdFx0XHQgICAgICAgIFx0XHRlbHNlXG5cdFx0XHRcdCAgICAgICAgXHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWw6IGFyLlZhbHVlID9hci5WYWx1ZSA6Jyd9KTtcblx0XHRcdFx0ICAgICAgICBcdH1cblx0XHRcdFx0ICAgICAgICB9XG5cdFx0XHRcdCAgICAgICAgdmFyIGluZm8gPSB7XG5cdFx0XHRcdCAgICAgICAgICAgIGV2ZW50aWQ6IGV2ZW50aWQsXG5cdFx0XHRcdCAgICAgICAgICAgIGVkdHlwZTogXCIwXCIsXG5cdFx0XHRcdCAgICAgICAgICAgIHByb2plY3RpZDogJycsXG5cdFx0XHRcdCAgICAgICAgICAgIHJjbHNpZDogJycsXG5cdFx0XHRcdCAgICAgICAgICAgIHJvYmppZDogJycsXG5cdFx0XHRcdCAgICAgICAgICAgIHVzZXJsb2dpbjogJycsXG5cdFx0XHRcdCAgICAgICAgICAgIGNsc2lkOiB0aGlzLiRkYXRhLnBhcmFtLlN1Yl9DbHMuSUQsXG5cdFx0XHRcdCAgICAgICAgICAgIG9iamlkOiBcIlwiLFxuXHRcdFx0XHQgICAgICAgICAgICBhdHRyOiByZXEsXG5cdFx0XHRcdCAgICAgICAgfVxuXHRcdFx0XHQgICAgICAgIHRoaXMuRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGluZm8pO1xuXHRcdFx0XHQgICAgfVxuXHRcdFx0XHR9XG5cdFx0XHRcdFxuXHRcdFx0fSxcblx0XHRcdHN1Yl9vbmNoYW5nZTIoaXRlbSx2YWx1ZSxkZWx2YWx1ZSkge1xuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhpdGVtKTtcblx0XHRcdFx0Ly8gY29uc29sZS5sb2codmFsdWUpO1xuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhkZWx2YWx1ZSk7XG5cdFx0XHRcdHZhciBzdWJDbGFzc0F0dHIgPSB0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdFtlLnRhcmdldC5kYXRhc2V0WydpaWluZGV4J11dLnN1YkNsYXNzQXR0cjtcblx0XHRcdFx0aWYoaXRlbS5sZW5ndGg9PTApeyAvL+S4uuepuuaXtu+8jOa4heepuuWxnuaAp3ZhbHVlXG5cdFx0XHRcdFx0dmFyIGluZGV4ICxpaW5kZXgsZGluZGV4PTA7XG5cdFx0XHRcdFx0Zm9yKHZhciBpIGluIHN1YkNsYXNzQXR0cil7XG5cdFx0XHRcdFx0XHRmb3IodmFyIGogaW4gc3ViQ2xhc3NBdHRyW2ldLkF0dHIpe1xuXHRcdFx0XHRcdFx0XHRmb3IodmFyIGQgaW4gc3ViQ2xhc3NBdHRyW2ldLkF0dHJbal0uZGljdGl0ZW0pe1xuXHRcdFx0XHRcdFx0XHRcdGlmKGRlbHZhbHVlWzBdLk5hbWUgPT0gc3ViQ2xhc3NBdHRyW2ldLkF0dHJbal0uZGljdGl0ZW1bZF0uTmFtZSl7XG5cdFx0XHRcdFx0XHRcdFx0XHRzdWJDbGFzc0F0dHJbaV0uQXR0cltqXS5WYWx1ZT1cIlwiO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRcdFxuXHRcdFx0XHRmb3IodmFyIHYgaW4gaXRlbSl7XG5cdFx0XHRcdFx0dmFyIGluZGV4ICxpaW5kZXgsZGluZGV4PTA7XG5cdFx0XHRcdFx0Zm9yKHZhciBpIGluIHN1YkNsYXNzQXR0cil7XG5cdFx0XHRcdFx0XHRmb3IodmFyIGogaW4gc3ViQ2xhc3NBdHRyW2ldLkF0dHIpe1xuXHRcdFx0XHRcdFx0XHRmb3IodmFyIGQgaW4gc3ViQ2xhc3NBdHRyW2ldLkF0dHJbal0uZGljdGl0ZW0pe1xuXHRcdFx0XHRcdFx0XHRcdGlmKGl0ZW1bdl0uTmFtZSA9PSBzdWJDbGFzc0F0dHJbaV0uQXR0cltqXS5kaWN0aXRlbVtkXS5OYW1lKXtcblx0XHRcdFx0XHRcdFx0XHRcdGluZGV4PWk7aWluZGV4PWo7ZGluZGV4PWQ7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHZhciBpdGVtdmFsdWUgPSBpdGVtW3ZdO1xuXHRcdFx0XHRcdHZhciBkYXRhX2F0dHIgPSBzdWJDbGFzc0F0dHJbaW5kZXhdLkF0dHJbaWluZGV4XTtcblx0XHRcdFx0XHRcblx0XHRcdFx0XHRjb25zb2xlLmxvZyhkYXRhX2F0dHIpO1xuXHRcdFx0XHRcdGlmIChpdGVtdmFsdWUuTmFtZSAhPSBkYXRhX2F0dHIuVmFsdWUpIHtcblx0XHRcdFx0XHRcdHN1YkNsYXNzQXR0cltpbmRleF0uQXR0cltpaW5kZXhdLlZhbHVlPXZhbHVlO1xuXHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coc3ViQ2xhc3NBdHRyW2luZGV4XS5BdHRyW2lpbmRleF0uVmFsdWUpO1xuXHRcdFx0XHRcdFx0dmFyIGV2ZW50aWQgPSBzdWJDbGFzc0F0dHJbaW5kZXhdLkF0dHJbaWluZGV4XS5hY3Rpb247XG5cdFx0XHRcdFx0XHRpZiAoZXZlbnRpZCkge1xuXHRcdFx0XHRcdCAgICAgICAgLy8gc2VsZi5ldmVudF9ub19zdWIgPSAxO1xuXHRcdFx0XHRcdCAgICAgICAgdmFyIHJlcT1bXTtcblx0XHRcdFx0XHQgICAgICAgIHZhciBhdHRybGlzdCA9IHN1YkNsYXNzQXR0cjtcblx0XHRcdFx0XHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmxpc3QubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHQgICAgICAgIFx0dmFyIGF0dHIgPSBhdHRybGlzdFtpXS5BdHRyO1xuXHRcdFx0XHRcdCAgICAgICAgXHRmb3IgKHZhciBqID0gMDsgaiA8IGF0dHIubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0XHQgICAgICAgIFx0XHR2YXIgYXIgPSBhdHRyW2pdO1xuXHRcdFx0XHRcdCAgICAgICAgXHRcdGlmKGFyLlR5cGU9PSflvJXnlKjlr7nosaEo5aSa5LiqKScpXG5cdFx0XHRcdFx0ICAgICAgICBcdFx0XHRpZihhci5WYWx1ZT09J+ivtycpIGFyLlZhbHVlPScnO1xuXHRcdFx0XHRcdCAgICAgICAgXHRcdGlmKGFyLlR5cGU9PSflvJXnlKjkurrlkZgnIHx8IGFyLlR5cGU9PSflvJXnlKjpobnnm64nKVxuXHRcdFx0XHRcdCAgICAgICAgXHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWw6IGFyLlZhbElEID9hci5WYWxJRCA6JycgfSk7XG5cdFx0XHRcdFx0ICAgICAgICBcdFx0ZWxzZSBpZihhci5UeXBlPT0n5biD5bCU5YC8Jylcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWw6IGFyLlZhbHVlPycxJzonMCd9KTtcblx0XHRcdFx0XHQgICAgICAgIFx0XHRlbHNlIGlmKGFyLlR5cGU9PSflrZflhbgnIHx8IGFyLlR5cGU9PSflrZflhbgt5a2X56ym5LiyJyB8fCBhci5UeXBlPT0n5a2X5YW4LeaVtOaVsCcpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsOiBpdGVtdmFsdWUuTmFtZX0pO1xuXHRcdFx0XHRcdCAgICAgICAgXHRcdGVsc2Vcblx0XHRcdFx0XHQgICAgICAgIFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsOiBhci5WYWx1ZSA/YXIuVmFsdWUgOicnfSk7XG5cdFx0XHRcdFx0ICAgICAgICBcdH1cblx0XHRcdFx0XHQgICAgICAgIH1cblx0XHRcdFx0XHQgICAgICAgIHZhciBpbmZvID0ge1xuXHRcdFx0XHRcdCAgICAgICAgICAgIGV2ZW50aWQ6IGV2ZW50aWQsXG5cdFx0XHRcdFx0ICAgICAgICAgICAgZWR0eXBlOiBcIjBcIixcblx0XHRcdFx0XHQgICAgICAgICAgICBwcm9qZWN0aWQ6ICcnLFxuXHRcdFx0XHRcdCAgICAgICAgICAgIHJjbHNpZDogJycsXG5cdFx0XHRcdFx0ICAgICAgICAgICAgcm9iamlkOiAnJyxcblx0XHRcdFx0XHQgICAgICAgICAgICB1c2VybG9naW46ICcnLFxuXHRcdFx0XHRcdCAgICAgICAgICAgIGNsc2lkOiB0aGlzLiRkYXRhLnBhcmFtLlN1Yl9DbHMuSUQsXG5cdFx0XHRcdFx0ICAgICAgICAgICAgb2JqaWQ6IFwiXCIsXG5cdFx0XHRcdFx0ICAgICAgICAgICAgYXR0cjogcmVxLFxuXHRcdFx0XHRcdCAgICAgICAgfVxuXHRcdFx0XHRcdCAgICAgICAgdGhpcy5EYXRhT2JqUnVuQ3VzdG9tRXZlbnQoaW5mbyk7XG5cdFx0XHRcdFx0ICAgIH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0XG5cdFx0XHRcdFxuXHRcdFx0fSxcblx0XHRcdG9uZXZlbnQoZSl7XG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKGUudGFyZ2V0KTtcblx0XHRcdFx0dmFyIGRhdGFfYXR0ciA9IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtlLnRhcmdldC5kYXRhc2V0WydpbmRleCddXS5BdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2lpbmRleCddXTtcblx0XHRcdFx0aWYoIWRhdGFfYXR0cil7XG5cdFx0XHRcdFx0dGhpcy4kZGF0YS5zdWJQYW5lbExpc3RbZS50YXJnZXQuZGF0YXNldFsnaWlpbmRleCddXS5zdWJDbGFzc0F0dHJbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV0uVmFsdWU9ZS50YXJnZXQudmFsdWU7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKGRhdGFfYXR0cik7XG5cdFx0XHRcdGlmIChlLnRhcmdldC52YWx1ZSAhPSBkYXRhX2F0dHIuVmFsdWUpIHtcblx0XHRcdFx0XHR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV0uVmFsdWU9ZS50YXJnZXQudmFsdWU7XG5cdFx0XHRcdFx0Ly8gdmFyIGV2ZW50aWQgPSB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV0uYWN0aW9uO1xuXHRcdFx0XHRcdC8v5a2Q5pWw5o2u57G75omr56CB5Yy65LqL5Lu26ISa5pysXG5cdFx0XHRcdFx0dmFyIGV2ZW50aWQgPSB0aGlzLiRkYXRhLnBhcmFtLlNjYW5fQ29kZS5JbnB1dF9DaGFuZ2VfRXZlbnQuSUQ7XG5cdFx0XHRcdFx0aWYgKGV2ZW50aWQpIHtcblx0XHRcdFx0ICAgICAgICAvLyBzZWxmLmV2ZW50X25vX3N1YiA9IDE7XG5cdFx0XHRcdCAgICAgICAgdmFyIHJlcT1bXTtcblx0XHRcdFx0ICAgICAgICB2YXIgYXR0cmxpc3QgPSB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3Q7ICAvL+S4u+aVsOaNruexu+WxnuaAp1xuXHRcdFx0XHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmxpc3QubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0ICAgICAgICBcdHZhciBhdHRyID0gYXR0cmxpc3RbaV0uQXR0cjtcblx0XHRcdFx0ICAgICAgICBcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xuXHRcdFx0XHQgICAgICAgIFx0XHR2YXIgYXIgPSBhdHRyW2pdO1xuXHRcdFx0XHQgICAgICAgIFx0XHRpZihhci5UeXBlPT0n5byV55So5a+56LGhKOWkmuS4qiknKVxuXHRcdFx0XHQgICAgICAgIFx0XHRcdGlmKGFyLlZhbHVlPT0n6K+3JykgYXIuVmFsdWU9Jyc7XG5cdFx0XHRcdCAgICAgICAgXHRcdGlmKGFyLlR5cGU9PSflvJXnlKjkurrlkZgnIHx8IGFyLlR5cGU9PSflvJXnlKjpobnnm64nKVxuXHRcdFx0XHQgICAgICAgIFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsdWU6IGFyLlZhbElEID9hci5WYWxJRCA6JycgfSk7XG5cdFx0XHRcdCAgICAgICAgXHRcdGVsc2UgaWYoYXIuVHlwZT09J+W4g+WwlOWAvCcpXG5cdFx0XHRcdCAgICAgICAgXHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsdWU/JzEnOicwJ30pO1xuXHRcdFx0XHQgICAgICAgIFx0XHRlbHNlXG5cdFx0XHRcdCAgICAgICAgXHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsdWUgP2FyLlZhbHVlIDonJ30pO1xuXHRcdFx0XHQgICAgICAgIFx0fVxuXHRcdFx0XHQgICAgICAgIH1cblx0XHRcdFx0ICAgICAgICB2YXIgaW5mbyA9IHtcblx0XHRcdFx0ICAgICAgICAgICAgZXZlbnRpZDogZXZlbnRpZCxcblx0XHRcdFx0ICAgICAgICAgICAgZWR0eXBlOiBcIjdcIiwvL1wiMFwiLFxuXHRcdFx0XHQgICAgICAgICAgICBwcm9qZWN0aWQ6ICcnLFxuXHRcdFx0XHQgICAgICAgICAgICByY2xzaWQ6ICcnLFxuXHRcdFx0XHQgICAgICAgICAgICByb2JqaWQ6ICcnLFxuXHRcdFx0XHQgICAgICAgICAgICB1c2VybG9naW46ICcnLFxuXHRcdFx0XHQgICAgICAgICAgICBjbHNpZDogJ01CT1gnLC8vdGhpcy4kZGF0YS5wYXJhbS5TdWJfQ2xzLklELFxuXHRcdFx0XHQgICAgICAgICAgICBvYmppZDogXCJcIixcblx0XHRcdFx0ICAgICAgICAgICAgYXR0cjogcmVxLFxuXHRcdFx0XHQgICAgICAgIFx0bWFzdF9hdHRyOiBbXSxcblx0XHRcdFx0ICAgICAgICBcdGlucHV0UGFyYW10ZXI6W3sgYXR0cjogJ21hc3RfaW5wdXRfMzAzNycsIHZhbHVlOiBlLnRhcmdldC52YWx1ZSB9XVxuXHRcdFx0XHQgICAgICAgIH1cblx0XHRcdFx0ICAgICAgICBcblx0XHRcdFx0ICAgICAgICB0aGlzLnNjYW5fRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGluZm8sIFwiXCIpO1xuXHRcdFx0XHQgICAgfVxuXHRcdFx0XHR9XG5cdFx0XHRcdFxuXHRcdFx0fSxcblx0XHRcdG9uY2hlY2soZSkge1xuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhlLnRhcmdldCk7XG5cdFx0XHRcdHZhciBpc2NoZWNrZWQgPSBlLnRhcmdldC5kYXRhc2V0LmlzY2hlY2s/ZmFsc2U6dHJ1ZTtcblx0XHRcdFx0dmFyIGRhdGFfYXR0ciA9IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtlLnRhcmdldC5kYXRhc2V0WydpbmRleCddXS5BdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2lpbmRleCddXTtcblx0XHRcdFx0aWYoIWRhdGFfYXR0cil7XG5cdFx0XHRcdFx0dGhpcy4kZGF0YS5zdWJQYW5lbExpc3RbZS50YXJnZXQuZGF0YXNldFsnaWlpbmRleCddXS5zdWJDbGFzc0F0dHJbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV0uVmFsdWU9aXNjaGVja2VkO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhkYXRhX2F0dHIpO1xuXHRcdFx0XHRpZiAoaXNjaGVja2VkICE9IGRhdGFfYXR0ci5WYWx1ZSkge1xuXHRcdFx0XHRcdHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtlLnRhcmdldC5kYXRhc2V0WydpbmRleCddXS5BdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2lpbmRleCddXS5WYWx1ZT1pc2NoZWNrZWQ7XG5cdFx0XHRcdFx0dmFyIGV2ZW50aWQgPSB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV0uYWN0aW9uO1xuXHRcdFx0XHRcdGlmIChldmVudGlkKSB7XG5cdFx0XHRcdCAgICAgICAgLy8gc2VsZi5ldmVudF9ub19zdWIgPSAxO1xuXHRcdFx0XHQgICAgICAgIHZhciByZXE9W107XG5cdFx0XHRcdCAgICAgICAgdmFyIGF0dHJsaXN0ID0gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0O1xuXHRcdFx0XHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmxpc3QubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0ICAgICAgICBcdHZhciBhdHRyID0gYXR0cmxpc3RbaV0uQXR0cjtcblx0XHRcdFx0ICAgICAgICBcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xuXHRcdFx0XHQgICAgICAgIFx0XHR2YXIgYXIgPSBhdHRyW2pdO1xuXHRcdFx0XHQgICAgICAgIFx0XHRpZihhci5UeXBlPT0n5byV55So5a+56LGhKOWkmuS4qiknKVxuXHRcdFx0XHQgICAgICAgIFx0XHRcdGlmKGFyLlZhbHVlPT0n6K+3JykgYXIuVmFsdWU9Jyc7XG5cdFx0XHRcdCAgICAgICAgXHRcdGlmKGFyLlR5cGU9PSflvJXnlKjkurrlkZgnIHx8IGFyLlR5cGU9PSflvJXnlKjpobnnm64nKVxuXHRcdFx0XHQgICAgICAgIFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsOiBhci5WYWxJRCA/YXIuVmFsSUQgOicnIH0pO1xuXHRcdFx0XHQgICAgICAgIFx0XHRlbHNlIGlmKGFyLlR5cGU9PSfluIPlsJTlgLwnKVxuXHRcdFx0XHRcdFx0XHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWw6IGFyLlZhbHVlPycxJzonMCd9KTtcblx0XHRcdFx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbDogYXIuVmFsdWUgP2FyLlZhbHVlIDonJ30pO1xuXHRcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHQgICAgICAgIFx0fVxuXHRcdFx0XHQgICAgICAgIH1cblx0XHRcdFx0ICAgICAgICB2YXIgaW5mbyA9IHtcblx0XHRcdFx0ICAgICAgICAgICAgZXZlbnRpZDogZXZlbnRpZCxcblx0XHRcdFx0ICAgICAgICAgICAgZWR0eXBlOiBcIjBcIixcblx0XHRcdFx0ICAgICAgICAgICAgcHJvamVjdGlkOiAnJyxcblx0XHRcdFx0ICAgICAgICAgICAgcmNsc2lkOiAnJyxcblx0XHRcdFx0ICAgICAgICAgICAgcm9iamlkOiAnJyxcblx0XHRcdFx0ICAgICAgICAgICAgdXNlcmxvZ2luOiAnJyxcblx0XHRcdFx0ICAgICAgICAgICAgY2xzaWQ6IHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5JRCxcblx0XHRcdFx0ICAgICAgICAgICAgb2JqaWQ6IFwiXCIsXG5cdFx0XHRcdCAgICAgICAgICAgIGF0dHI6IHJlcSxcblx0XHRcdFx0ICAgICAgICB9XG5cdFx0XHRcdCAgICAgICAgdGhpcy5EYXRhT2JqUnVuQ3VzdG9tRXZlbnQoaW5mbyk7XG5cdFx0XHRcdCAgICB9XG5cdFx0XHRcdH1cblx0XHRcdFx0XG5cdFx0XHR9LFxuXHRcdFx0aW5wdXRWYWxMaXN0SXNEZWwoaW5kZXgpe1xuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhpbmRleCk7XG4gICAgICAgICAgICAgICAgdGhpcy4kZGF0YS5pbnB1dFZhbExpc3Quc3BsaWNlKGluZGV4LCAxKTsgLy/liKDpmaR0YWJQYWdlanNvbueahOWGheWuuVxuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyh0aGlzLiRkYXRhLmlucHV0VmFsTGlzdCk7XG5cdFx0XHR9LFxuXHRcdFx0YWRkcmVzc2NoYW5nZShlKSB7XG5cdFx0XHQgICAgLy8gY29uc29sZS5sb2coZS50YXJnZXQpO1xuXHRcdFx0ICAgIGNvbnNvbGUubG9nKGUuZGF0YS5qb2luKCc7JykpXG5cdFx0XHRcdHRoaXMuJGRhdGEuc3ViQ2xhc3NBdHRyTGlzdFtlLnRhcmdldC5kYXRhc2V0WydpbmRleCddXS5BdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2lpbmRleCddXS5WYWx1ZT1lLmRhdGEuam9pbignOycpO1xuXHRcdFx0fSxcblx0XHRcdGNsYXNzQXR0cl9leHRCdXR0b24oaW5kZXgsaWluZGV4KXtcblx0XHRcdFx0dmFyICR0aGlzID0gdGhpcztcblx0XHRcdFx0dmFyIGJlZm9yZV9jbGlja19idXR0b24gPSAkdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2luZGV4XS5BdHRyW2lpbmRleF0uYmVmb3JlX2NsaWNrX2J1dHRvbjtcblx0XHRcdFx0dmFyIGJ1dHRvbl9jYWxsYmFjayA9ICR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbaW5kZXhdLkF0dHJbaWluZGV4XS5idXR0b25fY2FsbGJhY2s7XG5cdFx0XHRcdGlmKCFiZWZvcmVfY2xpY2tfYnV0dG9uKXtcblx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIuaPkOekulwiLGNvbnRlbnQ6XCJiZWZvcmVfY2xpY2tfYnV0dG9uLWV2ZW50X2lk5Li656m677yBXCIsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmKCFidXR0b25fY2FsbGJhY2spe1xuXHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi5o+Q56S6XCIsY29udGVudDpcImJ1dHRvbl9jYWxsYmFjay1ldmVudF9pZOS4uuepuu+8gVwiLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHR2YXIgZGF0YV9hdHRyID0gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2luZGV4XS5BdHRyW2lpbmRleF07XG5cdFx0XHRcdHRoaXMuRGF0YU9ialJ1bkN1c3RvbUV2ZW50X1JldHVybihiZWZvcmVfY2xpY2tfYnV0dG9uLCBkYXRhX2F0dHIsIGJ1dHRvbl9jYWxsYmFjaywgaW5kZXgsaWluZGV4KTtcblx0XHRcdH0sXG5cdFx0XHRjbGFzc0F0dHJfQWRkUGVyKGluZGV4LGlpbmRleCl7XG5cdFx0XHRcdHZhciBwYXJhbT17aW5kZXg6aW5kZXgsaWluZGV4OmlpbmRleH07XG5cdFx0XHRcdHZhciAkdGhpcyA9IHRoaXM7XG5cdFx0XHRcdHVuaS5uYXZpZ2F0ZVRvKHtcblx0XHRcdFx0XHR1cmw6Jy4uL3NlbHBzbi9pbmRleD9tdWxpdD1mYWxzZSZwYXJhbT0nK0pTT04uc3RyaW5naWZ5KHBhcmFtKSxcblx0XHRcdFx0XHRldmVudHM6e1xuXHRcdFx0XHRcdFx0QWRkUGVyKGRhdGEscGFyYW0peyBcblx0XHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2cocGFyYW0pO1xuXHRcdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhkYXRhKTtcblx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtwYXJhbS5pbmRleF0uQXR0cltwYXJhbS5paW5kZXhdLlZhbHVlPWRhdGFbMF0uTmFtZTtcblx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtwYXJhbS5pbmRleF0uQXR0cltwYXJhbS5paW5kZXhdLlZhbElEPWRhdGFbMF0uTG9naW4rJzsnK2RhdGFbMF0uTmFtZTtcblx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdHZhciBldmVudGlkID0gJHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtwYXJhbS5pbmRleF0uQXR0cltwYXJhbS5paW5kZXhdLmFjdGlvbjtcblx0XHRcdFx0XHRcdFx0aWYgKGV2ZW50aWQpIHtcblx0XHRcdFx0XHRcdFx0ICAgIGV2ZW50aWQgPSBldmVudGlkLnRyaW0oKTtcblx0XHRcdFx0XHRcdFx0ICAgIGlmIChldmVudGlkKSB7XG5cdFx0XHRcdFx0XHRcdCAgICAgICAgdmFyIGluZm8gPSB7XG5cdFx0XHRcdFx0XHRcdCAgICAgICAgICAgIGV2ZW50aWQ6IGV2ZW50aWQsXG5cdFx0XHRcdFx0XHRcdCAgICAgICAgICAgIGVkdHlwZTogXCI0XCIsXG5cdFx0XHRcdFx0XHRcdCAgICAgICAgICAgIHByb2plY3RpZDogXCJcIixcblx0XHRcdFx0XHRcdFx0ICAgICAgICAgICAgcmNsc2lkOiBcIlwiLFxuXHRcdFx0XHRcdFx0XHQgICAgICAgICAgICByb2JqaWQ6IFwiXCIsXG5cdFx0XHRcdFx0XHRcdCAgICAgICAgICAgIHVzZXJsb2dpbjogZGF0YVswXS5Mb2dpbixcblx0XHRcdFx0XHRcdFx0ICAgICAgICAgICAgY2xzaWQ6ICR0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuSUQsXG5cdFx0XHRcdFx0XHRcdCAgICAgICAgICAgIG9iamlkOiBcIlwiLFxuXHRcdFx0XHRcdFx0XHQgICAgICAgICAgICBhdHRyOiBbXSxcblx0XHRcdFx0XHRcdFx0ICAgICAgICB9XG5cdFx0XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0XHRcdC8vIHZhciBkYXRhX2F0dHIgPSAkdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W3BhcmFtLmluZGV4XS5BdHRyW3BhcmFtLmlpbmRleF07XG5cdFx0XHRcdFx0XHRcdCAgICAgICAgJHRoaXMuRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGluZm8pO1xuXHRcdFx0XHRcdFx0XHQgICAgfVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH0sXG5cdFx0XHRjbGFzc0F0dHJfQWRkUmVmKGUpe1xuXHRcdFx0XHRjb25zb2xlLmxvZyhlLnRhcmdldCk7XG5cdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi5o+Q56S6XCIsY29udGVudDpcIuatpOWKn+iDvei/mOacquWunueOsO+8gVwiLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHQvLyB2YXIgdmFsdWU9dGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZS50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dLlJlbENsc1tlLnRhcmdldC52YWx1ZV07XG5cdFx0XHRcdC8vIHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtlLnRhcmdldC5kYXRhc2V0WydpbmRleCddXS5BdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2lpbmRleCddXS5WYWx1ZT12YWx1ZTtcblx0XHRcdH0sXG5cdFx0XHRjbGFzc0F0dHJfQWRkUHJqKGluZGV4LGlpbmRleCl7XG5cdFx0XHRcdHZhciBwYXJhbT17aW5kZXg6aW5kZXgsaWluZGV4OmlpbmRleH07XG5cdFx0XHRcdHZhciAkdGhpcyA9IHRoaXM7XG5cdFx0XHRcdHVuaS5uYXZpZ2F0ZVRvKHtcblx0XHRcdFx0XHR1cmw6Jy4uL3NlbFByai9pbmRleD9yZWxhdGlvbj0tMSZwYXJhbT0nK0pTT04uc3RyaW5naWZ5KHBhcmFtKSxcblx0XHRcdFx0XHRldmVudHM6e1xuXHRcdFx0XHRcdFx0QWRkUGVyKGRhdGEscGFyYW0peyBcblx0XHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2cocGFyYW0pO1xuXHRcdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhkYXRhKTtcblx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtwYXJhbS5pbmRleF0uQXR0cltwYXJhbS5paW5kZXhdLlZhbHVlPWRhdGFbMF0uTmFtZTtcblx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtwYXJhbS5pbmRleF0uQXR0cltwYXJhbS5paW5kZXhdLlZhbElEPWRhdGFbMF0uSUQrJzsnK2RhdGFbMF0uTmFtZTtcblx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdHZhciBldmVudGlkID0gJHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtwYXJhbS5pbmRleF0uQXR0cltwYXJhbS5paW5kZXhdLmFjdGlvbjtcblx0XHRcdFx0XHRcdFx0aWYgKGV2ZW50aWQpIHtcblx0XHRcdFx0XHRcdFx0ICAgIGV2ZW50aWQgPSBldmVudGlkLnRyaW0oKTtcblx0XHRcdFx0XHRcdFx0ICAgIGlmIChldmVudGlkKSB7XG5cdFx0XHRcdFx0XHRcdCAgICAgICAgdmFyIGluZm8gPSB7XG5cdFx0XHRcdFx0XHRcdCAgICAgICAgICAgIGV2ZW50aWQ6IGV2ZW50aWQsXG5cdFx0XHRcdFx0XHRcdCAgICAgICAgICAgIGVkdHlwZTogXCIyXCIsXG5cdFx0XHRcdFx0XHRcdCAgICAgICAgICAgIHByb2plY3RpZDogZGF0YVswXS5JRCxcblx0XHRcdFx0XHRcdFx0ICAgICAgICAgICAgcmNsc2lkOiBcIlwiLFxuXHRcdFx0XHRcdFx0XHQgICAgICAgICAgICByb2JqaWQ6IFwiXCIsXG5cdFx0XHRcdFx0XHRcdCAgICAgICAgICAgIHVzZXJsb2dpbjogXCJcIixcblx0XHRcdFx0XHRcdFx0ICAgICAgICAgICAgY2xzaWQ6ICR0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuSUQsXG5cdFx0XHRcdFx0XHRcdCAgICAgICAgICAgIG9iamlkOiBcIlwiLFxuXHRcdFx0XHRcdFx0XHQgICAgICAgICAgICBhdHRyOiBbXSxcblx0XHRcdFx0XHRcdFx0ICAgICAgICB9XG5cdFx0XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0ICAgICAgICAvLyB2YXIgZGF0YV9hdHRyID0gJHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtwYXJhbS5pbmRleF0uQXR0cltwYXJhbS5paW5kZXhdO1xuXHRcdFx0XHRcdFx0XHQgICAgICAgICR0aGlzLkRhdGFPYmpSdW5DdXN0b21FdmVudChpbmZvKTtcblx0XHRcdFx0XHRcdFx0ICAgIH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9LFxuXHRcdFx0c2F2YSgpe1xuXHRcdFx0XHRpZiAodGhpcy4kZGF0YS5wYXJhbS5CZWZvcmVfT0tfRXZlbnQpIC8v5Yik5pat5Yqf6IO954K55Y+C5pWw5piv5ZCm5pyJ56Gu5a6a5YmN6ISa5pysXG5cdFx0XHRcdFx0dGhpcy5zY2FuX09LRGF0YU9ialJ1bkN1c3RvbUV2ZW50KHRoaXMuJGRhdGEucGFyYW0uQmVmb3JlX09LX0V2ZW50LklEKTtcblx0XHRcdFx0ZWxzZSBpZiAodGhpcy4kZGF0YS5wYXJhbS5BZnRlcl9PS19FdmVudCkgLy/liKTmlq3lip/og73ngrnlj4LmlbDmmK/lkKbmnInnoa7lrprlkI7ohJrmnKxcblx0XHRcdFx0XHR0aGlzLnNjYW5fT0tEYXRhT2JqUnVuQ3VzdG9tRXZlbnQodGhpcy4kZGF0YS5wYXJhbS5BZnRlcl9PS19FdmVudC5JRCk7XG5cdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHR1bmkubmF2aWdhdGVCYWNrKHtkZWx0YToxIH0pOy8v6L+U5Zue5bGC5pWw77yMMuWImeS4iuS4iumhtVxuXHRcdFx0fSxcblx0XHRcdGFkZCgpe1xuXHRcdFx0XHR1bmkuc2hvd0xvYWRpbmcoe1xuXHRcdFx0XHRcdHRpdGxlOlwi5Yqg6L295LitLi4uXCIsXG5cdFx0XHRcdFx0bWFzazp0cnVlXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHR2YXIgcmVxPVtdO1xuXHRcdFx0XHR2YXIgYXR0cmxpc3QgPSB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3Q7XG5cdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmxpc3QubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHR2YXIgYXR0ciA9IGF0dHJsaXN0W2ldLkF0dHI7XG5cdFx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0XHR2YXIgYXIgPSBhdHRyW2pdO1xuXHRcdFx0XHRcdFx0aWYoYXIuVmFsdWU9PSfor7fpgInmi6knIHx8IGFyLlZhbHVlPT0n4oCU4oCU6K+36YCJ5oup4oCU4oCUJykgYXIuVmFsdWU9Jyc7XG5cdFx0XHRcdFx0XHRpZihhci5UeXBlPT0n5byV55So5a+56LGhKOWkmuS4qiknKVxuXHRcdFx0XHRcdFx0XHRpZihhci5WYWx1ZT09J+ivtycpIGFyLlZhbHVlPScnO1xuXHRcdFx0XHQgICAgICAgIGlmKGFyLlR5cGU9PSflvJXnlKjkurrlkZgnIHx8IGFyLlR5cGU9PSflvJXnlKjpobnnm64nKVxuXHRcdFx0XHQgICAgICAgIFx0cmVxLnB1c2goeyBuYW1lOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsSUQgP2FyLlZhbElEIDonJyB9KTtcblx0XHRcdFx0ICAgICAgICBlbHNlIGlmKGFyLlR5cGU9PSfluIPlsJTlgLwnKVxuXHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7IG5hbWU6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWx1ZT8nMSc6JzAnfSk7XG5cdFx0XHRcdCAgICAgICAgZWxzZSBpZihhci5UeXBlPT0n5a2X5YW4JyB8fCBhci5UeXBlPT0n5a2X5YW4LeWtl+espuS4sicgfHwgYXIuVHlwZT09J+Wtl+WFuC3mlbTmlbAnKXtcblx0XHRcdFx0XHRcdFx0aWYoYXIuc2VsZWN0PT10cnVlKXsgLy/liKTmlq3kuIvmi4nmmK/lkKblpJrpgIlcblx0XHRcdFx0XHRcdFx0XHR2YXIgdmFsU3RyID1cIlwiO1xuXHRcdFx0XHRcdFx0XHRcdGZvcih2YXIgdiBpbiBhci5WYWx1ZSl7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZih2YWxTdHIpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhbFN0cis9XCI7XCI7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YWxTdHIrPWFyLlZhbHVlW3ZdO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7IG5hbWU6IGFyLk5hbWUsIHZhbHVlOiB2YWxTdHJ9KTtcblx0XHRcdFx0XHRcdFx0fWVsc2Vcblx0XHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7IG5hbWU6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWx1ZX0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7IG5hbWU6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWx1ZSA/YXIuVmFsdWUgOicnfSk7XG5cdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0aWYgKGFyLm5vdGVtcHR5ID09IHRydWUgJiYgIWFyLlZhbHVlKSB7XG5cdFx0XHRcdFx0XHQvLyBpZihhci5Ob3RFbXB0eT09JzEnKXtcblx0XHRcdFx0XHRcdFx0dW5pLmhpZGVMb2FkaW5nKCk7XG5cdFx0XHRcdFx0XHRcdC8vIHVuaS5zaG93VG9hc3Qoe3RpdGxlOmFyLkRpc3BOYW1lKyfkuI3og73kuLrnqbrvvIEnLGljb246XCJzdWNjZXNzXCIsZHVyYXRpb246MzAwMH0pO1xuXHRcdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIuaPkOekulwiLGNvbnRlbnQ6YXIuRGlzcE5hbWUrJ+S4jeiDveS4uuepuu+8gScsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0dmFyIGVudmlyb21lbnQgPSB7XG5cdFx0XHRcdCAgICAgJ2Z1bmN0aW9uJzogJzMwMDAnLCAvLyDlip/og73ngrnnvJblj7dcblx0XHRcdFx0ICAgICBjbHNfaWQ6IHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5JRCwgICAgIC8vIOWKn+iDveeCueS4u+aVsOaNruexu+agh+ivhlxuXHRcdFx0XHQgICAgICdidXR0b24nOiAndG9wJywgICAvLyB0b3AvYm90dG9tXG5cdFx0XHRcdCAgICAgYnV0dG9uX25hbWU6ICfmlrDlop4nLFxuXHRcdFx0XHQgICAgIG1hc3Rlcjoge1xuXHRcdFx0XHQgICAgICAgICBjbHNfaWQ6IHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5JRCwgXG5cdFx0XHRcdCAgICAgfVxuXHRcdFx0XHR9O1xuXHRcdFx0XHQgXG5cdFx0XHRcdC8vIHZhciBkYXRhSW5mbz17XG5cdFx0XHRcdC8vICAgICBjbGFzc19pZDogdGhpcy4kZGF0YS5wYXJhbS5NYXN0ZXJfQ2xzLklELCBkYXRhX29ial9pZDogJycsIG1hc3RlcmNsc2lkOiAnJyxcblx0XHRcdFx0Ly8gICAgIHJlcTogSlNPTi5zdHJpbmdpZnkocmVxKSwgdXBmaWxlOiBKU09OLnN0cmluZ2lmeShbXSksIHBvc3RfZGF0YTogSlNPTi5zdHJpbmdpZnkoe30pLFxuXHRcdFx0XHQvLyAgICAgY29tcG9zZTogSlNPTi5zdHJpbmdpZnkoW10pLCByZWZkYXRhc3RvcmU6IEpTT04uc3RyaW5naWZ5KFtdKSwgZXh0aW5mbzogSlNPTi5zdHJpbmdpZnkoZW52aXJvbWVudCksIFxuXHRcdFx0XHQvLyBcdG5vdF90cmlnZ2VyX3N5c19ldmVudDogJydcblx0XHRcdFx0Ly8gfTtcblx0XHRcdFx0ZW52aXJvbWVudCA9IEJhc2U2NC5lbmNvZGUoSlNPTi5zdHJpbmdpZnkoZW52aXJvbWVudCkpOy8v5bCG5a2X56ym5Liy6L2s5o2i5Li6YmFzZTY057yW56CBXG5cdFx0XHRcdHZhciBvYmpfYXR0cj17fTtcblx0XHRcdFx0cmVxLmZvckVhY2goaXRlbT0+e1xuXHRcdFx0XHRcdG9ial9hdHRyW2l0ZW0ubmFtZV0gPSBpdGVtLnZhbHVlO1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0dmFyIGRhdGFJbmZvPXtcblx0XHRcdFx0XHRjbGFzc19pZDogdGhpcy4kZGF0YS5wYXJhbS5NYXN0ZXJfQ2xzLklELFxuXHRcdFx0XHRcdGNsYXNzX25hbWU6JycsXG5cdFx0XHRcdFx0bWFzdGVyX2Nsc19pZDonJyxcblx0XHRcdFx0XHRtYXN0ZXJfb2JqX2lkOicnLFxuXHRcdFx0XHRcdGNyZWF0b3I6JycsXG5cdFx0XHRcdFx0Y3JlYXRvcl9uYW1lOicnLFxuXHRcdFx0XHRcdG5vdF90cmlnZ2VyX2V2ZW50OicnLFxuXHRcdFx0XHRcdHVwZGF0ZV9leGlzdDonJyxcblx0XHRcdFx0XHRwb3N0X3Byb2Nlc3M6JycsXG5cdFx0XHRcdFx0ZXh0X2luZm86IGVudmlyb21lbnQsXG5cdFx0XHRcdFx0b2JqX2F0dHI6IG9ial9hdHRyXG5cdFx0XHRcdH07XG5cdFx0XHRcdGNvbnNvbGUubG9nKGRhdGFJbmZvKTtcblx0XHRcdFx0Ly8gcmV0dXJuXG5cdFx0XHRcdHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdjcmVhdGVEYXRhT2JqJyxkYXRhSW5mbykudGhlbihzdWNjZXNzPT57XG5cdFx0XHRcdFx0Y29uc29sZS5sb2coc3VjY2Vzcyk7XG5cdFx0XHRcdFx0dW5pLmhpZGVMb2FkaW5nKCk7XG5cdFx0XHRcdFx0aWYgKHN1Y2Nlc3MuZXJyX2NvZGUgPT0gMCkge1xuXHRcdFx0XHRcdFx0dmFyIHJlc3VsdCA9IHN1Y2Nlc3MucmVzdWx0O1xuXHRcdFx0XHRcdFx0aWYoc3VjY2Vzcy5yZXN1bHQuYWN0aW9uKXtcblx0XHRcdFx0XHRcdFx0dmFyIGFjdGlvbiA9IEpTT04ucGFyc2Uoc3VjY2Vzcy5yZXN1bHQuQWN0aW9uKTtcblx0XHRcdFx0XHRcdFx0aWYoYWN0aW9uLnJldD09JzAnKXtcblx0XHRcdFx0XHRcdFx0XHRpZihhY3Rpb24ucmVzdWx0X3R5cGU9PScwJyl7XG5cdFx0XHRcdFx0XHRcdFx0XHR1bmkuc2hvd1RvYXN0KHt0aXRsZTphY3Rpb24ucmVzdWx0LGljb246XCJzdWNjZXNzXCIsZHVyYXRpb246MzAwMH0pO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHQvLyBcIntcInJldFwiOjAsIFwicmVzdWx0X3R5cGVcIjowLCBcInJlc3VsdFwiOlwi5Yib5bu65oiQ5YqfMTIzMTIzMTIzXCIsXCJpbmZvXCI6XCJcIn1cIlxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9ZWxzZVxuXHRcdFx0XHRcdFx0XHR1bmkuc2hvd1RvYXN0KHt0aXRsZTpcIuWIm+W7uuaIkOWKn++8gVwiLGljb246XCJzdWNjZXNzXCIsZHVyYXRpb246MzAwMH0pO1xuXHRcdFx0XHRcdFx0Ly/liLfmlrBcblx0XHRcdFx0XHRcdHVuaS5yZWRpcmVjdFRvKHtcblx0XHRcdFx0XHRcdFx0dXJsOicuLi9tb2RhbC8zMDM3P3BhcmFtPScrSlNPTi5zdHJpbmdpZnkodGhpcy4kZGF0YS5wYXJhbSkrXCImdGl0bGVuYW1lPVwiK3RoaXMuJGRhdGEudGl0bGVcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0Ly8gdGhpcy5jbGFzc19hdHRyX2luaXQoKTtcblx0XHRcdFx0XHR9ZWxzZXtcblx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vXCIsY29udGVudDpzdWNjZXNzLmVycl9tc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KS5jYXRjaChleD0+e1xuXHRcdFx0XHRcdGNvbnNvbGUubG9nKGV4KTtcblx0XHRcdFx0XHR1bmkuaGlkZUxvYWRpbmcoKTtcblx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIuaPkOekulwiLGNvbnRlbnQ6ZXguZXJyTXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0sXG5cdFx0XHRpbmlfRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGluZm8pe1xuXHRcdFx0XHR2YXIgcGFyYW0gPSB7XG5cdFx0XHRcdCAgICBFZGl0U3R5bGU6IHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5WaWV3X1N0eWxlLk5hbWUsXG5cdFx0XHRcdCAgICBWaWV3U3R5bGU6IHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5WaWV3X1N0eWxlLk5hbWUsXG5cdFx0XHRcdCAgICBOb3RUcmlnZ2VyU3lzRXZlbnQ6IDAsXG5cdFx0XHRcdCAgICBlbnZpcm9tZW50OiB7XG5cdFx0XHRcdCAgICAgICAgJ2Z1bmN0aW9uJzogJzMwMDAnLCAvLyDlip/og73ngrnnvJblj7dcblx0XHRcdFx0ICAgICAgICBjbHNfaWQ6IHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5JRCwgICAgIC8vIOWKn+iDveeCueS4u+aVsOaNruexu+agh+ivhlxuXHRcdFx0XHQgICAgICAgICdidXR0b24nOiAndG9wJywgICAvLyB0b3AvYm90dG9tXG5cdFx0XHRcdCAgICAgICAgYnV0dG9uX25hbWU6ICfmlrDlop4nLFxuXHRcdFx0XHQgICAgICAgIG1hc3Rlcjoge1xuXHRcdFx0XHQgICAgICAgICAgICBjbHNfaWQ6IHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5JRCwgLy8gYnV0dG9uPWJvdHRvbeaXtiBtYXN0ZXLnmoRjbHNfaWRcblx0XHRcdFx0ICAgICAgICAgICAgLy9vYmpfaWQ6ICcnICAvLyBidXR0b249Ym90dG9t5pe2IG1hc3RlcueahG9ial9pZFxuXHRcdFx0XHQgICAgICAgIH1cblx0XHRcdFx0ICAgIH1cblx0XHRcdFx0fVxuXHRcdFx0XHR2YXIgaW5wdXRwYXJhbWV0ZXIgPSAnJztcblx0XHRcdFx0dmFyIGdsb2JhbF9hdHRyID0gJyc7XG5cdFx0XHRcdFxuXHRcdFx0XHQvLyB2YXIgZGF0YUluZm8gPSB7XG4gICAgLy8gICAgICAgICAgICAgICAgIGVkdHlwZTogaW5mby5lZHR5cGUsIGV2ZW50aWQ6IGluZm8uZXZlbnRpZCwgcHJvamVjdGlkOiBpbmZvLnByb2plY3RpZCxcbiAgICAvLyAgICAgICAgICAgICAgICAgcmNsc2lkOiBpbmZvLnJjbHNpZCwgcm9iamlkOiBpbmZvLnJvYmppZCwgdXNlcmxvZ2luOiBpbmZvLnVzZXJsb2dpbiwgY2xzaWQ6IGluZm8uY2xzaWQsIG9iamlkOiBpbmZvLm9iamlkLFxuICAgIC8vICAgICAgICAgICAgICAgICBhdHRyOiBKU09OLnN0cmluZ2lmeShpbmZvLmF0dHIpLCBleHRpbmZvOiBKU09OLnN0cmluZ2lmeShwYXJhbSksIGlucHV0cGFyYW1ldGVyOiBpbnB1dHBhcmFtZXRlciwgZ2xvYmFsX2F0dHI6IGdsb2JhbF9hdHRyXG4gICAgLy8gICAgICAgICAgICAgfVxuXHRcdFx0XHRwYXJhbS5lbnZpcm9tZW50ID0gQmFzZTY0LmVuY29kZShKU09OLnN0cmluZ2lmeShwYXJhbS5lbnZpcm9tZW50KSk7Ly/lsIblrZfnrKbkuLLovazmjaLkuLpiYXNlNjTnvJbnoIFcblx0XHRcdFx0dmFyIG9ial9hdHRyPXt9O1xuXHRcdFx0XHRpbmZvLmF0dHIuZm9yRWFjaChpdGVtPT57XG5cdFx0XHRcdFx0b2JqX2F0dHJbaXRlbS5hdHRyXSA9IGl0ZW0udmFsO1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0aWYoIWluZm8uZXZlbnRpZC5pbmNsdWRlcygneycpKSBpbmZvLmV2ZW50aWQgPSAneycraW5mby5ldmVudGlkKyd9Jztcblx0XHRcdFx0dmFyIGRhdGFJbmZvPXtcblx0XHRcdFx0ICBlZF90eXBlOiBpbmZvLmVkdHlwZSxcblx0XHRcdFx0ICBzdGFydF90cmFuc2FjdGlvbjogJycsXG5cdFx0XHRcdCAgY2xhc3NfaWQ6IGluZm8uY2xzaWQsXG5cdFx0XHRcdCAgY2xhc3NfbmFtZTogJycsXG5cdFx0XHRcdCAgZXZlbnRfaWQ6IGluZm8uZXZlbnRpZCxcblx0XHRcdFx0ICBldmVudF9uYW1lOiAnJyxcblx0XHRcdFx0ICBkYXRhX29ial9pZDogaW5mby5vYmppZCxcblx0XHRcdFx0ICBvYmpfYXR0cjogb2JqX2F0dHIsXG5cdFx0XHRcdCAgcHJqX2lkOiBpbmZvLnByb2plY3RpZCxcblx0XHRcdFx0ICByZWZfY2xzX2lkOiBpbmZvLnJjbHNpZCxcblx0XHRcdFx0ICByZWxfb2JqX2lkOiBpbmZvLnJvYmppZCxcblx0XHRcdFx0ICB1c2VyX2xvZ2luOiBpbmZvLnVzZXJsb2dpbixcblx0XHRcdFx0ICBkYXRhX2pzb246ICcnLFxuXHRcdFx0XHQgIGNvbXBvc2VfaW5mbzogJycsXG5cdFx0XHRcdCAgZXh0X2luZm86IHBhcmFtLmVudmlyb21lbnQsXG5cdFx0XHRcdCAgZ2xvYmFsX2F0dHI6IGdsb2JhbF9hdHRyLFxuXHRcdFx0XHQgIGlucHV0X3BhcmFtOiBpbnB1dHBhcmFtZXRlcixcblx0XHRcdFx0fTtcblx0XHRcdFx0Y29uc29sZS5sb2coZGF0YUluZm8pO1xuXHRcdFx0XHQvLyByZXR1cm47XG5cdFx0XHRcdHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdydW5DdXN0b21FdmVudCcsZGF0YUluZm8pLnRoZW4oc3VjY2Vzcz0+e1xuXHRcdFx0XHRcdGNvbnNvbGUubG9nKHN1Y2Nlc3MpO1xuXHRcdFx0XHRcdGlmIChzdWNjZXNzLmVycl9jb2RlID09IDApIHtcblx0XHRcdFx0XHQgIHZhciBkYXRhID0gc3VjY2Vzcy5yZXN1bHQ7XG5cdFx0XHRcdFx0ICBpZiAoZGF0YS5yZXQgIT0gMCkge1xuXHRcdFx0XHRcdCAgICAgIHZhciB0aXAgPSBkYXRhLmVycl9pbmZvID8gdHlwZW9mIGRhdGEuZXJyX2luZm8gPT0gJ3N0cmluZycgPyBkYXRhLmVycl9pbmZvIDogZGF0YS5lcnJfaW5mby5qb2luKCc8YnIvPicpIDogJyc7XG5cdFx0XHRcdFx0ICAgICAgaWYgKGRhdGEucmV0ID09IDgwMSkgdW5pLnNob3dNb2RhbCh7dGl0bGU6J+aPkOekuicsY29udGVudDp0aXAsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdFx0ICAgICAgZWxzZSB1bmkuc2hvd01vZGFsKHt0aXRsZTon5o+Q56S6Jyxjb250ZW50OnRpcCsnLOaPkOekujonK2RhdGEucmV0LHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHRcdCAgXHRyZXR1cm4gZmFsc2Vcblx0XHRcdFx0XHQgIH1lbHNle1xuXHRcdFx0XHRcdCAgXHRsZXQgdGlwID0gZGF0YS5pbmZvID8gdHlwZW9mIGRhdGEuaW5mbyA9PSAnc3RyaW5nJyA/IGRhdGEuaW5mbyA6IGRhdGEuaW5mby5qb2luKCc8YnIvPicpIDogJyc7XG5cdFx0XHRcdFx0ICBcdGlmICh0aXApIHVuaS5zaG93TW9kYWwoe3RpdGxlOifmj5DnpLonLGNvbnRlbnQ6dGlwLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHRcdCAgXG5cdFx0XHRcdFx0XHRpZihkYXRhLmFjdGlvbil7XG5cdFx0XHRcdFx0XHRcdHZhciBhY3Rpb25saXN0ID0gZGF0YS5hY3Rpb247XG5cdFx0XHRcdFx0XHRcdGlmIChhY3Rpb25saXN0KSB7XG5cdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBhY3Rpb25saXN0Lmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgYWN0aW9uID0gYWN0aW9ubGlzdFtqXVxuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIGFjdGlvbl90eXBlID0gYWN0aW9uLmFjdGlvbl90eXBlO1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIHZhbHVlID0gYWN0aW9uLnZhbHVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKGFjdGlvbl90eXBlID09ICdzZXRfZGxnX2F0dHInKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmICh2YWx1ZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciB2YWwgPSB2YWx1ZTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAodHlwZW9mIHZhbHVlID09ICdzdHJpbmcnKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YWwgPSBKU09OLnBhcnNlKHZhbHVlKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc29sZS5sb2codmFsKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHZhbC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgYSA9IDA7IGEgPCB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3QubGVuZ3RoOyBhKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgbCA9IDA7IGwgPCB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbYV0uQXR0ci5sZW5ndGg7IGwrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBjYSA9IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFthXS5BdHRyW2xdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICh2YWxbaV0uYXR0ciAgPT0gY2EuTmFtZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoY2EuVHlwZT09J+Wtl+WFuCcgfHwgY2EuVHlwZT09J+Wtl+WFuC3lrZfnrKbkuLInIHx8IGNhLlR5cGU9PSflrZflhbgt5pW05pWwJyl7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBkaWN0SXRlbUxpc3Q9W107XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvcih2YXIgZCBpbiB2YWxbaV0uY2hvaWNlX2xpc3Qpe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciB2YWwgPXZhbFtpXS5jaG9pY2VfbGlzdFtkXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkaWN0SXRlbUxpc3QucHVzaCh7XCJDTl9TX05BTUVcIjp2YWwsXCJOYW1lXCI6dmFsLFwibGFiZWxcIjp2YWwsXCJ2YWx1ZVwiOnZhbH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhLmRpY3RpdGVtID0gZGljdEl0ZW1MaXN0O1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBhdHRyW2pdLmRpY3RpdGVtID0gdmFsW2ldLmNob2ljZV9saXN0O1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fWVsc2V7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGNhLnZhbHVlID0gdmFsW2ldLnZhbHVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgbGVuZ3RoID0gMDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICghdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUuZmlsdGVyKGZ1bmN0aW9uIChzKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiB2YWxbaV0uYXR0ciA9PSBzLmF0dHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0pLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRsZW5ndGggPSAxO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5wdXNoKHZhbFtpXSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAobGVuZ3RoID09IDApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCB0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICh0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZVtqXS5hdHRyID09IHZhbFtpXS5hdHRyKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZVtqXS52YWx1ZSA9IHZhbFtpXS52YWx1ZTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdGlmIChhY3Rpb25fdHlwZSA9PSAnb3Blbl9zZWxlY3RfdXNlcmRsZycpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor68yLjJcIixjb250ZW50Olwib3Blbl9zZWxlY3RfdXNlcmRsZ+i/meS4qmFjdGlvbl90eXBl6L+Y5pyq5aSE55CG77yBXCIsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0ICB9XG5cdFx0XHRcdFx0fWVsc2V7XG5cdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzJcIixjb250ZW50OnN1Y2Nlc3MuZXJyX21zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pLmNhdGNoKGV4PT57XG5cdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coZXgpO1xuXHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vMi4xXCIsY29udGVudDpleC5lcnJNc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSxcblx0XHQgICAgRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGluZm8sZGF0YV9hdHRyKXtcblx0XHRcdFx0dmFyICR0aGlzID0gdGhpcztcblx0XHQgICAgXHR2YXIgZW52aXJvbWVudCA9IHtcblx0XHQgICAgXHQgICAgJ2Z1bmN0aW9uJzogJzMwMDAnLCAvLyDlip/og73ngrnnvJblj7dcblx0XHQgICAgXHQgICAgY2xzX2lkOiB0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuSUQsICAgICAvLyDlip/og73ngrnkuLvmlbDmja7nsbvmoIfor4Zcblx0XHQgICAgXHQgICAgJ2J1dHRvbic6ICd0b3AnLCAgIC8vIHRvcC9ib3R0b21cblx0XHQgICAgXHQgICAgYnV0dG9uX25hbWU6ICfmlrDlop4nLFxuXHRcdCAgICBcdCAgICBtYXN0ZXI6IHtcblx0XHQgICAgXHQgICAgICAgIGNsc19pZDogdGhpcy4kZGF0YS5wYXJhbS5NYXN0ZXJfQ2xzLklELCAvLyBidXR0b249Ym90dG9t5pe2IG1hc3RlcueahGNsc19pZFxuXHRcdCAgICBcdCAgICAgICAgLy9vYmpfaWQ6ICcnICAvLyBidXR0b249Ym90dG9t5pe2IG1hc3RlcueahG9ial9pZFxuXHRcdCAgICBcdCAgICB9XG5cdFx0ICAgIFx0fTtcblx0XHRcdFx0ZW52aXJvbWVudC5lZGl0X2RsZyA9IHtcblx0XHRcdFx0ICAgIHR5cGU6ICdzbWFsbCcsLy/lsI/nqpflj6Ncblx0XHRcdFx0ICAgIGNsYXNzX2lkOiB0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuSUQsLy/lvZPliY3mlbDmja7nsbtpZFxuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChkYXRhX2F0dHIpIHtcblx0XHRcdFx0ICAgIGVudmlyb21lbnQuZWRpdF9kbGcuZm9ybV9jb250cm9sID0gey8v5omA5bGe55qE6KGo5Y2V5o6n5Lu2XG5cdFx0XHRcdCAgICAgICAgbmFtZTogZGF0YV9hdHRyLk5hbWUsLy/lrZfmrrXlsZ7mgKdcblx0XHRcdFx0ICAgICAgICB0ZXh0OiBkYXRhX2F0dHIuRGlzcE5hbWUsLy/mmL7npLrmlofmnKxcblx0XHRcdFx0ICAgICAgICBncm91cF9uYW1lOiBkYXRhX2F0dHIuR3JvdXBOYW1lLC8v5bGe5oCn57uEXG5cdFx0XHRcdCAgICAgICAgdHlwZTogZGF0YV9hdHRyLlR5cGUsLy/lrZfmrrXnsbvlnotcblx0XHRcdFx0ICAgICAgICByZWFkb25seTogZGF0YV9hdHRyLlJlYWRPbmx5LC8v5piv5ZCm5Y+q6K+7XG5cdFx0XHRcdCAgICAgICAgYnV0dG9uX2ltZzogZGF0YV9hdHRyLmJ1dHRvbl9pbWcsLy/lvJXnlKjmjInpkq7nmoTlm77moIdcblx0XHRcdFx0ICAgICAgICBidXR0b25fdG9vbHRpcDogZGF0YV9hdHRyLmJ1dHRvbl90b29sdGlwLy/lvJXnlKjmjInpkq7nmoR0b29sdGlwXG5cdFx0XHRcdCAgICB9XG5cdFx0XHRcdH1cblx0XHQgICAgXHQvLyB2YXIgZGF0YUluZm8gPSB7XG5cdFx0ICAgICAvLyAgICAgICAgZWR0eXBlOiBpbmZvLmVkdHlwZSwgZXZlbnRpZDogaW5mby5ldmVudGlkLCBwcm9qZWN0aWQ6IGluZm8ucHJvamVjdGlkLnJlcGxhY2UoJ3snLCcnKS5yZXBsYWNlKCd9JywnJyksXG5cdFx0ICAgICAvLyAgICAgICAgcmNsc2lkOiBpbmZvLnJjbHNpZCwgcm9iamlkOiBpbmZvLnJvYmppZCwgdXNlcmxvZ2luOiBpbmZvLnVzZXJsb2dpbiwgY2xzaWQ6IGluZm8uY2xzaWQsIG9iamlkOiBpbmZvLm9iamlkLFxuXHRcdCAgICAgLy8gICAgICAgIGF0dHI6IEpTT04uc3RyaW5naWZ5KGluZm8uYXR0ciksIGV4dGluZm86IEpTT04uc3RyaW5naWZ5KGVudmlyb21lbnQpLCBpbnB1dHBhcmFtZXRlcjogJycsIGdsb2JhbF9hdHRyOiBKU09OLnN0cmluZ2lmeSh0aGlzLiRkYXRhLmdsb2JhbF9hdHRyKVxuXHRcdCAgICAgLy8gICAgfVxuXHRcdCAgICBcdGVudmlyb21lbnQgPSBCYXNlNjQuZW5jb2RlKEpTT04uc3RyaW5naWZ5KGVudmlyb21lbnQpKTsvL+WwhuWtl+espuS4sui9rOaNouS4umJhc2U2NOe8lueggVxuXHRcdCAgICBcdHZhciBnbG9iYWxfYXR0ciA9IEJhc2U2NC5lbmNvZGUoSlNPTi5zdHJpbmdpZnkodGhpcy4kZGF0YS5nbG9iYWxfYXR0cikpOy8v5bCG5a2X56ym5Liy6L2s5o2i5Li6YmFzZTY057yW56CBXG5cdFx0ICAgIFx0aWYoaW5mby5kYXRhSnNvbilcblx0XHQgICAgXHRcdGluZm8uZGF0YUpzb24gPSBCYXNlNjQuZW5jb2RlKEpTT04uc3RyaW5naWZ5KGluZm8uZGF0YUpzb24pKTsvL+WwhuWtl+espuS4sui9rOaNouS4umJhc2U2NOe8lueggVxuXHRcdCAgICBcdHZhciBvYmpfYXR0cj17fTtcblx0XHQgICAgXHRpbmZvLmF0dHIuZm9yRWFjaChpdGVtPT57XG5cdFx0ICAgIFx0XHRvYmpfYXR0cltpdGVtLmF0dHJdID0gaXRlbS52YWw7XG5cdFx0ICAgIFx0fSk7XG5cdFx0ICAgIFx0aWYoIWluZm8uZXZlbnRpZC5pbmNsdWRlcygneycpKSBpbmZvLmV2ZW50aWQgPSAneycraW5mby5ldmVudGlkKyd9Jztcblx0XHQgICAgXHR2YXIgZGF0YUluZm89e1xuXHRcdCAgICBcdCAgZWRfdHlwZTogaW5mby5lZHR5cGUsXG5cdFx0ICAgIFx0ICBzdGFydF90cmFuc2FjdGlvbjogJycsXG5cdFx0ICAgIFx0ICBjbGFzc19pZDogaW5mby5jbHNpZCxcblx0XHQgICAgXHQgIGNsYXNzX25hbWU6ICcnLFxuXHRcdCAgICBcdCAgZXZlbnRfaWQ6IGluZm8uZXZlbnRpZCxcblx0XHQgICAgXHQgIGV2ZW50X25hbWU6ICcnLFxuXHRcdCAgICBcdCAgZGF0YV9vYmpfaWQ6IGluZm8ub2JqaWQsXG5cdFx0ICAgIFx0ICBvYmpfYXR0cjogb2JqX2F0dHIsXG5cdFx0ICAgIFx0ICBwcmpfaWQ6IGluZm8ucHJvamVjdGlkLFxuXHRcdCAgICBcdCAgcmVmX2Nsc19pZDogaW5mby5yY2xzaWQsXG5cdFx0ICAgIFx0ICByZWxfb2JqX2lkOiBpbmZvLnJvYmppZCxcblx0XHQgICAgXHQgIHVzZXJfbG9naW46IGluZm8udXNlcmxvZ2luLFxuXHRcdCAgICBcdCAgZGF0YV9qc29uOiBpbmZvLmRhdGFKc29uLFxuXHRcdCAgICBcdCAgY29tcG9zZV9pbmZvOiAnJyxcblx0XHQgICAgXHQgIGV4dF9pbmZvOiBlbnZpcm9tZW50LFxuXHRcdCAgICBcdCAgZ2xvYmFsX2F0dHI6IGdsb2JhbF9hdHRyLFxuXHRcdCAgICBcdCAgaW5wdXRfcGFyYW06ICcnLFxuXHRcdCAgICBcdH07XG5cdFx0ICAgIFx0Y29uc29sZS5sb2coZGF0YUluZm8pO1xuXHRcdCAgICBcdC8vIHJldHVybjtcblx0XHQgICAgXHR0aGlzLiRzdG9yZS5kaXNwYXRjaCgncnVuQ3VzdG9tRXZlbnQnLGRhdGFJbmZvKS50aGVuKHN1Y2Nlc3M9Pntcblx0XHQgICAgXHRcdGNvbnNvbGUubG9nKHN1Y2Nlc3MpO1xuXHRcdCAgICBcdFx0aWYgKHN1Y2Nlc3MuZXJyX2NvZGUgPT0gMCkge1xuXHRcdCAgICBcdFx0XHR2YXIgZGF0YSA9IHN1Y2Nlc3MucmVzdWx0O1xuXHRcdFx0XHRcdFx0aWYgKGRhdGEucmV0ICE9IDApIHtcblx0XHRcdFx0XHRcdCAgICB2YXIgdGlwID0gZGF0YS5lcnJfaW5mbyA/IHR5cGVvZiBkYXRhLmVycl9pbmZvID09ICdzdHJpbmcnID8gZGF0YS5lcnJfaW5mbyA6IGRhdGEuZXJyX2luZm8uam9pbignPGJyLz4nKSA6ICcnO1xuXHRcdFx0XHRcdFx0ICAgIGlmIChkYXRhLnJldCA9PSA4MDEpIHVuaS5zaG93TW9kYWwoe3RpdGxlOifmj5DnpLonLGNvbnRlbnQ6dGlwLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHRcdFx0ICAgIGVsc2UgdW5pLnNob3dNb2RhbCh7dGl0bGU6J+aPkOekuicsY29udGVudDp0aXArJyzmj5DnpLo6JytkYXRhLnJldCxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlXG5cdFx0XHRcdFx0XHR9ZWxzZXtcblx0XHRcdFx0XHRcdFx0bGV0IHRpcCA9IGRhdGEuaW5mbyA/IHR5cGVvZiBkYXRhLmluZm8gPT0gJ3N0cmluZycgPyBkYXRhLmluZm8gOiBkYXRhLmluZm8uam9pbignPGJyLz4nKSA6ICcnO1xuXHRcdFx0XHRcdFx0XHRpZiAodGlwKSB1bmkuc2hvd01vZGFsKHt0aXRsZTon5o+Q56S6Jyxjb250ZW50OnRpcCxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHR2YXIgYWN0aW9ubGlzdCA9IGRhdGEuYWN0aW9uO1xuXHRcdFx0XHRcdFx0XHRpZiAoYWN0aW9ubGlzdCkge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKGFjdGlvbmxpc3QpO1xuXHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgYWN0aW9ubGlzdC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIGFjdGlvbiA9IGFjdGlvbmxpc3RbaV07XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoYWN0aW9uLmFjdGlvbl90eXBlID09ICdzZXRfZGxnX2F0dHInKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhciByZXN1bHQgPSBhY3Rpb24udmFsdWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdWx0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAocmVzdWx0W2ldLmNob2ljZV9saXN0KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBjID0gMDsgYyA8ICR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3QubGVuZ3RoOyBjKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGF0dHIgPSAkdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2NdLkF0dHI7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGF0dHJbal0uTmFtZT09cmVzdWx0W2ldLmF0dHIpe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoYXR0cltqXS5UeXBlPT0n5a2X5YW4JyB8fCBhdHRyW2pdLlR5cGU9PSflrZflhbgt5a2X56ym5LiyJyB8fCBhdHRyW2pdLlR5cGU9PSflrZflhbgt5pW05pWwJyl7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBkaWN0SXRlbUxpc3Q9W107XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvcih2YXIgZCBpbiByZXN1bHRbaV0uY2hvaWNlX2xpc3Qpe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciB2YWwgPXJlc3VsdFtpXS5jaG9pY2VfbGlzdFtkXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkaWN0SXRlbUxpc3QucHVzaCh7XCJDTl9TX05BTUVcIjp2YWwsXCJOYW1lXCI6dmFsLFwibGFiZWxcIjp2YWwsXCJ2YWx1ZVwiOnZhbH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGF0dHJbal0uZGljdGl0ZW0gPSBkaWN0SXRlbUxpc3Q7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGF0dHJbal0uZGljdGl0ZW0gPSByZXN1bHRbaV0uY2hvaWNlX2xpc3Q7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGMgPSAwOyBjIDwgJHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdC5sZW5ndGg7IGMrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGF0dHIgPSAkdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2NdLkF0dHI7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IGF0dHIubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc29sZS5sb2coYXR0cltqXS5OYW1lKyc9PScrcmVzdWx0W2ldLmF0dHIpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihhdHRyW2pdLk5hbWU9PXJlc3VsdFtpXS5hdHRyKXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhdHRyW2pdLlZhbHVlID0gcmVzdWx0W2ldLnZhbHVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBsZW5ndGggPSAwO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICghJHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLmZpbHRlcihmdW5jdGlvbiAocykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdFtpXS5hdHRyID09IHMuYXR0clxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0pLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0bGVuZ3RoID0gMTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5wdXNoKHJlc3VsdFtpXSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChsZW5ndGggPT0gMCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCAkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZVtqXS5hdHRyID09IHJlc3VsdFtpXS5hdHRyKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlW2pdLnZhbHVlID0gcmVzdWx0W2ldLnZhbHVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGRhdGEuYWN0aW9uW2ldLmFjdGlvbl90eXBlID09ICdzZXRfZ2xvYmFsX2F0dHInKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLmdsb2JhbF9hdHRyID0gZGF0YS5hY3Rpb25baV0udmFsdWUgfHwgW107XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHRpZiAoZGF0YS5yZXN1bHQpIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgcmVzdWx0ID0gZGF0YS5yZXN1bHQ7XG5cdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCByZXN1bHQubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGMgPSAwOyBjIDwgJHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdC5sZW5ndGg7IGMrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgYXR0ciA9ICR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbY10uQXR0cjtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoYXR0cltqXS5OYW1lPT1yZXN1bHRbaV0uYXR0cil7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhdHRyW2pdLlZhbHVlID0gcmVzdWx0W2ldLnZhbHVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgbGVuZ3RoID0gMDtcblx0XHRcdFx0XHRcdFx0XHRcdGlmICghJHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLmZpbHRlcihmdW5jdGlvbiAocykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0W2ldLmF0dHIgPT0gcy5hdHRyXG5cdFx0XHRcdFx0XHRcdFx0XHR9KS5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0bGVuZ3RoID0gMTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLnB1c2gocmVzdWx0W2ldKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdGlmIChsZW5ndGggPT0gMCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8ICR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICgkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmVbal0uYXR0ciA9PSByZXN1bHRbaV0uYXR0cikge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlW2pdLnZhbHVlID0gcmVzdWx0W2ldLnZhbHVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1lbHNle1xuXHRcdCAgICBcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzNcIixjb250ZW50OnN1Y2Nlc3MuZXJyX21zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHQgICAgXHRcdH1cblx0XHQgICAgXHR9KS5jYXRjaChleD0+e1xuXHRcdCAgICBcdFx0Ly8gY29uc29sZS5sb2coZXgpO1xuXHRcdCAgICBcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor68zLjFcIixjb250ZW50OmV4LmVyck1zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHQgICAgXHR9KTtcblx0XHQgICAgfSxcblx0XHRcdE9LRGF0YU9ialJ1bkN1c3RvbUV2ZW50KCl7XG5cdFx0ICAgIFx0dmFyIGVudmlyb21lbnQgPSB7XG5cdFx0XHRcdCAgICAnZnVuY3Rpb24nOiAnMzAwMCcsIC8vIOWKn+iDveeCuee8luWPt1xuXHRcdFx0XHQgICAgY2xzX2lkOiB0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuSUQsICAgICAvLyDlip/og73ngrnkuLvmlbDmja7nsbvmoIfor4Zcblx0XHRcdFx0ICAgICdidXR0b24nOiAndG9wJywgICAvLyB0b3AvYm90dG9tXG5cdFx0XHRcdCAgICBidXR0b25fbmFtZTogJ+aWsOWinicsXG5cdFx0XHRcdCAgICBtYXN0ZXI6IHtcblx0XHRcdFx0ICAgICAgICBjbHNfaWQ6IHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5JRCwgLy8gYnV0dG9uPWJvdHRvbeaXtiBtYXN0ZXLnmoRjbHNfaWRcblx0XHRcdFx0ICAgICAgICBcblx0XHRcdFx0ICAgIH1cblx0XHRcdFx0fTtcblx0XHQgICAgXHR2YXIgZXZlbnRpZCA9IHRoaXMuJGRhdGEuZWRpdF9va19ldmVudC5zY3JpcF9pZDtcblx0XHRcdFx0dmFyIHJlcT1bXTtcblx0XHRcdFx0dmFyIGF0dHJsaXN0ID0gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0O1xuXHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJsaXN0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0dmFyIGF0dHIgPSBhdHRybGlzdFtpXS5BdHRyO1xuXHRcdFx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdFx0dmFyIGFyID0gYXR0cltqXTtcblx0XHRcdFx0XHRcdGlmKGFyLlZhbHVlPT0n6K+36YCJ5oupJyB8fCBhci5WYWx1ZT09J+KAlOKAlOivt+mAieaLqeKAlOKAlCcpIGFyLlZhbHVlPScnO1xuXHRcdFx0XHRcdFx0aWYoYXIuVHlwZT09J+W8leeUqOWvueixoSjlpJrkuKopJylcblx0XHRcdFx0XHRcdFx0aWYoYXIuVmFsdWU9PSfor7cnKSBhci5WYWx1ZT0nJztcblx0XHRcdFx0ICAgICAgICBpZihhci5UeXBlPT0n5byV55So5Lq65ZGYJyB8fCBhci5UeXBlPT0n5byV55So6aG555uuJylcblx0XHRcdFx0ICAgICAgICBcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsdWU6IGFyLlZhbElEID9hci5WYWxJRCA6JycgfSk7XG5cdFx0XHRcdCAgICAgICAgZWxzZSBpZihhci5UeXBlPT0n5biD5bCU5YC8Jylcblx0XHRcdFx0XHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsdWU/JzEnOicwJ30pO1xuXHRcdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWx1ZSB9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLmxlbmd0aCA+IDApIHtcblx0XHQgICAgXHQgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5sZW5ndGg7IGkrKykge1xuXHRcdCAgICBcdCAgICAgICAgaWYgKCFyZXEuZmlsdGVyKGZ1bmN0aW9uIChzKSB7XG5cdFx0ICAgIFx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlW2ldLmF0dHIgPT0gcy5uYW1lXG5cdFx0ICAgIFx0ICAgICAgICB9KS5sZW5ndGgpIHtcblx0XHQgICAgXHQgICAgICAgICAgICBsZW5ndGggPSAxO1xuXHRcdCAgICBcdCAgICAgICAgICAgIHJlcS5wdXNoKHsgJ2F0dHInOiB0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZVtpXS5hdHRyLCAndmFsdWUnOiB0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZVtpXS52YWx1ZSB9KTtcblx0XHQgICAgXHQgICAgICAgIH1cblx0XHQgICAgXHQgICAgfVxuXHRcdCAgICBcdH1cblx0XHQgICAgXHR2YXIgaW5mbyA9IHtcblx0XHQgICAgXHQgICAgZXZlbnRpZDogZXZlbnRpZCxcblx0XHQgICAgXHQgICAgZWR0eXBlOiBcIjBcIixcblx0XHQgICAgXHQgICAgcHJvamVjdGlkOiAnJyxcblx0XHQgICAgXHQgICAgcmNsc2lkOiAnJyxcblx0XHQgICAgXHQgICAgcm9iamlkOiAnJyxcblx0XHQgICAgXHQgICAgdXNlcmxvZ2luOiAnJyxcblx0XHQgICAgXHQgICAgY2xzaWQ6IHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5JRCxcblx0XHQgICAgXHQgICAgb2JqaWQ6IFwiXCIsXG5cdFx0ICAgIFx0ICAgIGF0dHI6IHJlcSxcblx0XHQgICAgXHR9XG5cdFx0ICAgLy8gIFx0dmFyIGRhdGFJbmZvID0ge1xuXHRcdCAgIC8vICAgICAgICAgIGVkdHlwZTogaW5mby5lZHR5cGUsIGV2ZW50aWQ6IGluZm8uZXZlbnRpZCwgcHJvamVjdGlkOiBpbmZvLnByb2plY3RpZCxyY2xzaWQ6IGluZm8ucmNsc2lkLCBcblx0XHRcdFx0XHQvLyByb2JqaWQ6IGluZm8ucm9iamlkLCB1c2VybG9naW46IGluZm8udXNlcmxvZ2luLCBjbHNpZDogaW5mby5jbHNpZCwgb2JqaWQ6IGluZm8ub2JqaWQsXG5cdFx0XHRcdFx0Ly8gYXR0cjogSlNPTi5zdHJpbmdpZnkoaW5mby5hdHRyKSwgZXh0aW5mbzogSlNPTi5zdHJpbmdpZnkoZW52aXJvbWVudCksIGdsb2JhbF9hdHRyOiBKU09OLnN0cmluZ2lmeSh0aGlzLiRkYXRhLmdsb2JhbF9hdHRyKVxuXHRcdCAgIC8vICAgICAgfVxuXHRcdCAgICBcdGVudmlyb21lbnQgPSBCYXNlNjQuZW5jb2RlKEpTT04uc3RyaW5naWZ5KGVudmlyb21lbnQpKTsvL+WwhuWtl+espuS4sui9rOaNouS4umJhc2U2NOe8lueggVxuXHRcdCAgICBcdHZhciBnbG9iYWxfYXR0ciA9IEJhc2U2NC5lbmNvZGUoSlNPTi5zdHJpbmdpZnkodGhpcy4kZGF0YS5nbG9iYWxfYXR0cikpOy8v5bCG5a2X56ym5Liy6L2s5o2i5Li6YmFzZTY057yW56CBXG5cdFx0ICAgIFx0dmFyIG9ial9hdHRyPXt9O1xuXHRcdCAgICBcdGluZm8uYXR0ci5mb3JFYWNoKGl0ZW09Pntcblx0XHQgICAgXHRcdG9ial9hdHRyW2l0ZW0uYXR0cl0gPSBpdGVtLnZhbDtcblx0XHQgICAgXHR9KTtcblx0XHQgICAgXHRpZighZXZlbnRpZC5pbmNsdWRlcygneycpKSBldmVudGlkPSAneycrIGV2ZW50aWQgKyd9Jztcblx0XHQgICAgXHR2YXIgZGF0YUluZm89e1xuXHRcdCAgICBcdCAgZWRfdHlwZTogaW5mby5lZHR5cGUsXG5cdFx0ICAgIFx0ICBzdGFydF90cmFuc2FjdGlvbjogJycsXG5cdFx0ICAgIFx0ICBjbGFzc19pZDogaW5mby5jbHNpZCxcblx0XHQgICAgXHQgIGNsYXNzX25hbWU6ICcnLFxuXHRcdCAgICBcdCAgZXZlbnRfaWQ6IGV2ZW50aWQsXG5cdFx0ICAgIFx0ICBldmVudF9uYW1lOiAnJyxcblx0XHQgICAgXHQgIGRhdGFfb2JqX2lkOiBpbmZvLm9iamlkLFxuXHRcdCAgICBcdCAgb2JqX2F0dHI6IG9ial9hdHRyLFxuXHRcdCAgICBcdCAgcHJqX2lkOiBpbmZvLnByb2plY3RpZCxcblx0XHQgICAgXHQgIHJlZl9jbHNfaWQ6IGluZm8ucmNsc2lkLFxuXHRcdCAgICBcdCAgcmVsX29ial9pZDogaW5mby5yb2JqaWQsXG5cdFx0ICAgIFx0ICB1c2VyX2xvZ2luOiBpbmZvLnVzZXJsb2dpbixcblx0XHQgICAgXHQgIGRhdGFfanNvbjogJycsXG5cdFx0ICAgIFx0ICBjb21wb3NlX2luZm86ICcnLFxuXHRcdCAgICBcdCAgZXh0X2luZm86IGVudmlyb21lbnQsXG5cdFx0ICAgIFx0ICBnbG9iYWxfYXR0cjogZ2xvYmFsX2F0dHIsXG5cdFx0ICAgIFx0ICBpbnB1dF9wYXJhbTogJycsXG5cdFx0ICAgIFx0fTtcblx0XHQgICAgXHRjb25zb2xlLmxvZyhkYXRhSW5mbyk7XG5cdFx0ICAgIFx0Ly8gcmV0dXJuO1xuXHRcdCAgICBcdHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdydW5DdXN0b21FdmVudCcsZGF0YUluZm8pLnRoZW4oc3VjY2Vzcz0+e1xuXHRcdCAgICBcdFx0Y29uc29sZS5sb2coc3VjY2Vzcyk7XG5cdFx0ICAgIFx0XHRpZiAoc3VjY2Vzcy5lcnJfY29kZSA9PSAwKSB7XG5cdFx0ICAgIFx0XHRcdHZhciBkYXRhID0gc3VjY2Vzcy5yZXN1bHQ7XG5cdFx0XHRcdFx0XHRpZiAoZGF0YS5yZXQgIT0gMCkge1xuXHRcdFx0XHRcdFx0ICAgIHZhciB0aXAgPSBkYXRhLmVycl9pbmZvID8gdHlwZW9mIGRhdGEuZXJyX2luZm8gPT0gJ3N0cmluZycgPyBkYXRhLmVycl9pbmZvIDogZGF0YS5lcnJfaW5mby5qb2luKCc8YnIvPicpIDogJyc7XG5cdFx0XHRcdFx0XHQgICAgaWYgKGRhdGEucmV0ID09IDgwMSkgdW5pLnNob3dNb2RhbCh7dGl0bGU6J+aPkOekuicsY29udGVudDp0aXAsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdFx0XHQgICAgZWxzZSB1bmkuc2hvd01vZGFsKHt0aXRsZTon5o+Q56S6Jyxjb250ZW50OnRpcCsnLOaPkOekujonK2RhdGEucmV0LHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2Vcblx0XHRcdFx0XHRcdH1lbHNle1xuXHRcdFx0XHRcdFx0XHRsZXQgdGlwID0gZGF0YS5pbmZvID8gdHlwZW9mIGRhdGEuaW5mbyA9PSAnc3RyaW5nJyA/IGRhdGEuaW5mbyA6IGRhdGEuaW5mby5qb2luKCc8YnIvPicpIDogJyc7XG5cdFx0XHRcdFx0XHRcdGlmICh0aXApIHVuaS5zaG93TW9kYWwoe3RpdGxlOifmj5DnpLonLGNvbnRlbnQ6dGlwLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdHZhciByZXN1bHQgPSBkYXRhLnJlc3VsdDtcblx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCByZXN1bHQubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRcdFx0XHQvLyBzZWxmLmNsYXNzX2F0dHJfZWxlLmZpbmQoJy5hdHRyX2ZpZWxkW2RhdGEtZmllbGQ9XCInICsgcmVzdWx0W2ldLmF0dHIgKyAnXCJdJykudmFsKHJlc3VsdFtpXS52YWx1ZSkuZGF0YSgndmFsJywgcmVzdWx0W2ldLnZhbHVlKTtcblx0XHRcdFx0XHRcdFx0XHR2YXIgbGVuZ3RoID0gMDtcblx0XHRcdFx0XHRcdFx0XHRpZiAoIXRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLmZpbHRlcihmdW5jdGlvbiAocykge1xuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdFtpXS5hdHRyID09IHMuYXR0clxuXHRcdFx0XHRcdFx0XHRcdH0pLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0bGVuZ3RoID0gMTtcblx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLnB1c2gocmVzdWx0W2ldKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGxlbmd0aCA9PSAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmICh0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZVtqXS5hdHRyID09IHJlc3VsdFtpXS5hdHRyKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy4kZGF0YS5yZWZkYXRhc3RvcmVbal0udmFsdWUgPSByZXN1bHRbaV0udmFsdWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdHRoaXMuYWRkKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0ICAgIFx0XHR9ZWxzZXtcblx0XHQgICAgXHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor680XCIsY29udGVudDpzdWNjZXNzLmVycl9tc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0ICAgIFx0XHR9XG5cdFx0ICAgIFx0fSkuY2F0Y2goZXg9Pntcblx0XHQgICAgXHRcdC8vIGNvbnNvbGUubG9nKGV4KTtcblx0XHQgICAgXHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vNC4xXCIsY29udGVudDpleC5lcnJNc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0ICAgIFx0fSk7XG5cdFx0ICAgIH0sXG5cdFx0ICAgIERhdGFPYmpSdW5DdXN0b21FdmVudF9SZXR1cm4oZXZlbnRpZCxkYXRhX2F0dHIsYnV0dG9uX2NhbGxiYWNrLGluZGV4LGlpbmRleCl7XG5cdFx0XHRcdHZhciBlbnZpcm9tZW50ID0ge1xuXHRcdFx0XHQgICAgJ2Z1bmN0aW9uJzogJzMwMDAnLCAvLyDlip/og73ngrnnvJblj7dcblx0XHRcdFx0ICAgIGNsc19pZDogdGhpcy4kZGF0YS5wYXJhbS5NYXN0ZXJfQ2xzLklELCAgICAgLy8g5Yqf6IO954K55Li75pWw5o2u57G75qCH6K+GXG5cdFx0XHRcdCAgICAnYnV0dG9uJzogJ3RvcCcsICAgLy8gdG9wL2JvdHRvbVxuXHRcdFx0XHQgICAgYnV0dG9uX25hbWU6ICfmlrDlop4nLFxuXHRcdFx0XHQgICAgbWFzdGVyOiB7XG5cdFx0XHRcdCAgICAgICAgY2xzX2lkOiB0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuSUQsIC8vIGJ1dHRvbj1ib3R0b23ml7YgbWFzdGVy55qEY2xzX2lkXG5cdFx0XHRcdCAgICAgICAgLy9vYmpfaWQ6ICcnICAvLyBidXR0b249Ym90dG9t5pe2IG1hc3RlcueahG9ial9pZFxuXHRcdFx0XHQgICAgfVxuXHRcdFx0XHR9O1xuXHRcdFx0XHR2YXIgcmVxPVtdO1xuXHRcdFx0XHR2YXIgYXR0cmxpc3QgPSB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3Q7XG5cdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmxpc3QubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHR2YXIgYXR0ciA9IGF0dHJsaXN0W2ldLkF0dHI7XG5cdFx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0XHR2YXIgYXIgPSBhdHRyW2pdO1xuXHRcdFx0XHRcdFx0aWYoYXIuVHlwZT09J+W8leeUqOWvueixoSjlpJrkuKopJylcblx0XHRcdFx0XHRcdFx0aWYoYXIuVmFsdWU9PSfor7cnKSBhci5WYWx1ZT0nJztcblx0XHRcdFx0ICAgICAgICBpZihhci5UeXBlPT0n5byV55So5Lq65ZGYJyB8fCBhci5UeXBlPT0n5byV55So6aG555uuJylcblx0XHRcdFx0ICAgICAgICBcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsdWU6IGFyLlZhbElEID9hci5WYWxJRCA6JycgfSk7XG5cdFx0XHRcdCAgICAgICAgZWxzZSBpZihhci5UeXBlPT0n5biD5bCU5YC8Jylcblx0XHRcdFx0XHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsdWU/JzEnOicwJ30pO1xuXHRcdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWx1ZSB9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0ICAgICAgICBpZiAoIXJlcS5maWx0ZXIoZnVuY3Rpb24gKHMpIHtcblx0XHRcdFx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlW2ldLmF0dHIgPT0gcy5uYW1lXG5cdFx0XHRcdCAgICAgICAgfSkubGVuZ3RoKSB7XG5cdFx0XHRcdCAgICAgICAgICAgIGxlbmd0aCA9IDE7XG5cdFx0XHRcdCAgICAgICAgICAgIHJlcS5wdXNoKHsgJ2F0dHInOiB0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZVtpXS5hdHRyLCAndmFsdWUnOiB0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZVtpXS52YWx1ZSB9KTtcblx0XHRcdFx0ICAgICAgICB9XG5cdFx0XHRcdCAgICB9XG5cdFx0XHRcdH1cblx0XHRcdFx0dmFyIGV4dGluZm8gPSBlbnZpcm9tZW50O1xuXHRcdFx0XHRleHRpbmZvLmVkaXRfZGxnID0ge1xuXHRcdFx0XHQgICAgdHlwZTogJ3NtYWxsJywvL+Wwj+eql+WPo1xuXHRcdFx0XHQgICAgY2xhc3NfaWQ6IHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5JRCwvL+W9k+WJjeaVsOaNruexu2lkXG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGRhdGFfYXR0cikge1xuXHRcdFx0XHQgICAgZXh0aW5mby5lZGl0X2RsZy5mb3JtX2NvbnRyb2wgPSB7Ly/miYDlsZ7nmoTooajljZXmjqfku7Zcblx0XHRcdFx0ICAgICAgICBuYW1lOiBkYXRhX2F0dHIuTmFtZSwvL+Wtl+auteWxnuaAp1xuXHRcdFx0XHQgICAgICAgIHRleHQ6IGRhdGFfYXR0ci5EaXNwTmFtZSwvL+aYvuekuuaWh+acrFxuXHRcdFx0XHQgICAgICAgIGdyb3VwX25hbWU6IGRhdGFfYXR0ci5Hcm91cE5hbWUsLy/lsZ7mgKfnu4Rcblx0XHRcdFx0ICAgICAgICB0eXBlOiBkYXRhX2F0dHIuVHlwZSwvL+Wtl+auteexu+Wei1xuXHRcdFx0XHQgICAgICAgIHJlYWRvbmx5OiBkYXRhX2F0dHIuUmVhZE9ubHksLy/mmK/lkKblj6ror7tcblx0XHRcdFx0ICAgICAgICBidXR0b25faW1nOiBkYXRhX2F0dHIuYnV0dG9uX2ltZywvL+W8leeUqOaMiemSrueahOWbvuagh1xuXHRcdFx0XHQgICAgICAgIGJ1dHRvbl90b29sdGlwOiBkYXRhX2F0dHIuYnV0dG9uX3Rvb2x0aXAvL+W8leeUqOaMiemSrueahHRvb2x0aXBcblx0XHRcdFx0ICAgIH1cblx0XHRcdFx0fVxuXHRcdFx0XHQvLyB2YXIgZGF0YUluZm8gPSB7XG5cdFx0XHRcdC8vIFx0ZWR0eXBlOiAgXCIwXCIsIGV2ZW50aWQ6IGV2ZW50aWQsIHByb2plY3RpZDogJycscmNsc2lkOiAnJywgcm9iamlkOiAnJywgdXNlcmxvZ2luOiAnJywgXG5cdFx0XHRcdC8vIFx0Y2xzaWQ6IHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5JRCwgb2JqaWQ6ICcnLGF0dHI6IEpTT04uc3RyaW5naWZ5KHJlcSksIFxuXHRcdFx0XHQvLyBcdGV4dGluZm86IEpTT04uc3RyaW5naWZ5KGV4dGluZm8pLCBnbG9iYWxfYXR0cjogSlNPTi5zdHJpbmdpZnkodGhpcy4kZGF0YS5nbG9iYWxfYXR0cilcblx0XHRcdFx0Ly8gfVxuXHRcdFx0XHRleHRpbmZvID0gQmFzZTY0LmVuY29kZShKU09OLnN0cmluZ2lmeShleHRpbmZvKSk7Ly/lsIblrZfnrKbkuLLovazmjaLkuLpiYXNlNjTnvJbnoIFcblx0XHRcdFx0dmFyIGdsb2JhbF9hdHRyID0gQmFzZTY0LmVuY29kZShKU09OLnN0cmluZ2lmeSh0aGlzLiRkYXRhLmdsb2JhbF9hdHRyKSk7Ly/lsIblrZfnrKbkuLLovazmjaLkuLpiYXNlNjTnvJbnoIFcblx0XHRcdFx0dmFyIG9ial9hdHRyPXt9O1xuXHRcdFx0XHRyZXEuZm9yRWFjaChpdGVtPT57XG5cdFx0XHRcdFx0b2JqX2F0dHJbaXRlbS5hdHRyXSA9IGl0ZW0udmFsO1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0aWYoIWV2ZW50aWQuaW5jbHVkZXMoJ3snKSkgZXZlbnRpZD0gJ3snKyBldmVudGlkICsnfSc7XG5cdFx0XHRcdHZhciBkYXRhSW5mbz17XG5cdFx0XHRcdCAgZWRfdHlwZTogXCIwXCIsXG5cdFx0XHRcdCAgc3RhcnRfdHJhbnNhY3Rpb246ICcnLFxuXHRcdFx0XHQgIGNsYXNzX2lkOiB0aGlzLiRkYXRhLnBhcmFtLmNsc2lkLFxuXHRcdFx0XHQgIGNsYXNzX25hbWU6ICcnLFxuXHRcdFx0XHQgIGV2ZW50X2lkOiBldmVudGlkLFxuXHRcdFx0XHQgIGV2ZW50X25hbWU6ICcnLFxuXHRcdFx0XHQgIGRhdGFfb2JqX2lkOiAnJyxcblx0XHRcdFx0ICBvYmpfYXR0cjogb2JqX2F0dHIsXG5cdFx0XHRcdCAgcHJqX2lkOiAnJyxcblx0XHRcdFx0ICByZWZfY2xzX2lkOiAnJyxcblx0XHRcdFx0ICByZWxfb2JqX2lkOiAnJyxcblx0XHRcdFx0ICB1c2VyX2xvZ2luOiAnJyxcblx0XHRcdFx0ICBkYXRhX2pzb246ICcnLFxuXHRcdFx0XHQgIGNvbXBvc2VfaW5mbzogJycsXG5cdFx0XHRcdCAgZXh0X2luZm86IGV4dGluZm8sXG5cdFx0XHRcdCAgZ2xvYmFsX2F0dHI6IGdsb2JhbF9hdHRyLFxuXHRcdFx0XHQgIGlucHV0X3BhcmFtOiAnJyxcblx0XHRcdFx0fTtcblx0XHRcdFx0Y29uc29sZS5sb2coZGF0YUluZm8pO1xuXHRcdFx0XHQvLyByZXR1cm47XG5cdFx0XHRcdHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdydW5DdXN0b21FdmVudCcsZGF0YUluZm8pLnRoZW4oc3VjY2Vzcz0+e1xuXHRcdFx0XHRcdGNvbnNvbGUubG9nKHN1Y2Nlc3MpO1xuXHRcdFx0XHRcdGlmIChzdWNjZXNzLmVycl9jb2RlID09IDApIHtcblx0XHRcdFx0XHQgIHZhciBkYXRhID0gc3VjY2Vzcy5yZXN1bHQ7XHRcblx0XHRcdFx0XHQgIGlmIChkYXRhLnJldCAhPSAwKSB7XG5cdFx0XHRcdFx0ICAgICAgdmFyIHRpcCA9IGRhdGEuZXJyX2luZm8gPyB0eXBlb2YgZGF0YS5lcnJfaW5mbyA9PSAnc3RyaW5nJyA/IGRhdGEuZXJyX2luZm8gOiBkYXRhLmVycl9pbmZvLmpvaW4oJzxici8+JykgOiAnJztcblx0XHRcdFx0XHQgICAgICBpZiAoZGF0YS5yZXQgPT0gODAxKSB1bmkuc2hvd01vZGFsKHt0aXRsZTon5o+Q56S6Jyxjb250ZW50OnRpcCxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHRcdFx0XHQgICAgICBlbHNlIHVuaS5zaG93TW9kYWwoe3RpdGxlOifmj5DnpLonLGNvbnRlbnQ6dGlwKycs5o+Q56S6OicrZGF0YS5yZXQsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdFx0ICBcdHJldHVybiBmYWxzZVxuXHRcdFx0XHRcdCAgfWVsc2V7XG5cdFx0XHRcdFx0ICBcdGxldCB0aXAgPSBkYXRhLmluZm8gPyB0eXBlb2YgZGF0YS5pbmZvID09ICdzdHJpbmcnID8gZGF0YS5pbmZvIDogZGF0YS5pbmZvLmpvaW4oJzxici8+JykgOiAnJztcblx0XHRcdFx0XHQgIFx0aWYgKHRpcCkgdW5pLnNob3dNb2RhbCh7dGl0bGU6J+aPkOekuicsY29udGVudDp0aXAsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdFx0ICBcblx0XHRcdFx0XHRcdGlmIChkYXRhICE9IFwiXCIpIHtcblx0XHRcdFx0XHRcdFx0dmFyIGFjdGlvbnMgPSBkYXRhLmFjdGlvbjtcblx0XHRcdFx0XHRcdFx0Y29uc29sZS5sb2coYWN0aW9ucyk7XG5cdFx0XHRcdFx0XHRcdGlmIChhY3Rpb25zKSB7XG5cdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgYWN0aW9uID0gYWN0aW9uc1tpXTtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciB2YWwgPSBhY3Rpb24udmFsdWU7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgZW52aXJvbWVudCA9IEpTT04uc3RyaW5naWZ5KGVudmlyb21lbnQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoYWN0aW9uLmFjdGlvbl90eXBlID09ICdvcGVuX3BhbmVsJykge1xuXHRcdFx0XHRcdFx0XHRcdFx0ICAgdmFyIGQgPSBkaWFsb2coe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHQgICB0aXRsZTogJzxpIGNsYXNzPVwiYWNlLWljb24gZmEgZmEtaW5mby1jaXJjbGVcIj48L2k+ICcgKyAn5o+Q56S6Jyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgY29udGVudDogYWN0aW9uLmFjdGlvbl90eXBlICsgJ+atpGFjdGlvbuWwmuacquWkhOeQhu+8gSdcblx0XHRcdFx0XHRcdFx0XHRcdCAgIH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0ICAgZC5zaG93KCk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRlbHNlIGlmIChhY3Rpb24uYWN0aW9uX3R5cGUgPT0gJ29wZW5fc2VsZWN0X3VzZXJkbGcnKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBzdHlsZSA9IHZhbC5zdHlsZTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gc3R5bGUgPT0gJ3VzZXInID8gJ+mAieaLqeS6uuWRmCcgOiBzdHlsZSA9PSAnZGVwYXJ0bWVudCcgPyAn6YCJ5oup6YOo6ZeoJyA6IHN0eWxlID09ICdyb2xlJyA/ICfpgInmi6nop5LoibInIDogJydcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyICR0aGlzID0gdGhpcztcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIHBhcmFtPXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpbmRleDogaW5kZXgsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWluZGV4OmlpbmRleCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRidXR0b25fY2FsbGJhY2s6YnV0dG9uX2NhbGxiYWNrLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlcTpyZXEsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF0YV9hdHRyOmRhdGFfYXR0clxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHVuaS5uYXZpZ2F0ZVRvKHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR1cmw6Jy4uL3NlbHBzbi9pbmRleD9tdWxpdD1mYWxzZSZwYXJhbT0nK0pTT04uc3RyaW5naWZ5KHBhcmFtKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRldmVudHM6e1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0QWRkUGVyKGRhdGEscGFyYW0peyBcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2cocGFyYW0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhkYXRhKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGNhbGxiYWNrX2V2ZW50aWQgPSBwYXJhbS5idXR0b25fY2FsbGJhY2sudHJpbSgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgaW5mbyA9IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRldmVudGlkOiBjYWxsYmFja19ldmVudGlkLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGVkdHlwZTogXCIwXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cHJvamVjdGlkOiAnJyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyY2xzaWQ6ICcnLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJvYmppZDogJycsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dXNlcmxvZ2luOiAnJyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbHNpZDogJHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5JRCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvYmppZDogXCJcIixcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhdHRyOiBwYXJhbS5yZXEsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aW5wdXRwYXJhbWV0ZXI6IGRhdGFcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy5EYXRhT2JqUnVuQ3VzdG9tRXZlbnQoaW5mbywgcGFyYW0uZGF0YV9hdHRyKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0pO1x0XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRlbHNlIGlmIChhY3Rpb24uYWN0aW9uX3R5cGUgPT0gJ29wZW5fZGF0YV9xdWVyeV9kbGcnKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0ZWxzZSBpZiAoYWN0aW9uLmFjdGlvbl90eXBlID09ICdvcGVuX2NvbW1vbl9kbGcnKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhciB2YWx1ZSA9IGFjdGlvbi52YWx1ZTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGQgPSBkaWFsb2coe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRpdGxlOiAnPGkgY2xhc3M9XCJhY2UtaWNvbiBmYSBmYS1pbmZvLWNpcmNsZVwiPjwvaT4gJyArICfmj5DnpLonLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnRlbnQ6IGFjdGlvbi5hY3Rpb25fdHlwZSArICfmraRhY3Rpb27lsJrmnKrlpITnkIbvvIEnXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRkLnNob3coKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdGVsc2UgaWYgKGFjdGlvbi5hY3Rpb25fdHlwZSA9PSAnb3Blbl9wcm9qZWN0X3F1ZXJ5X2RsZycpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly9jb25zb2xlLmxvZyhhY3Rpb24udmFsdWUuc2VsZWN0X3JhbmdlKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly9jb25zb2xlLmxvZyhhY3Rpb24udmFsdWUubXVsaXRfc2VsZWN0KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIHByaVJlbCA9ICctMSc7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChhY3Rpb24udmFsdWUuc2VsZWN0X3JhbmdlID09ICflhajpg6jnm7jlhbMnKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHByaVJlbCA9ICcwJztcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZWxzZSBpZiAoYWN0aW9uLnZhbHVlLnNlbGVjdF9yYW5nZSA9PSAn5oiR6LSf6LSj55qE6aG555uuJylcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRwcmlSZWwgPSAnMSc7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGVsc2UgaWYgKGFjdGlvbi52YWx1ZS5zZWxlY3RfcmFuZ2UgPT0gJ+aIkeWIm+W7uueahCcpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cHJpUmVsID0gJzInO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRlbHNlIGlmIChhY3Rpb24udmFsdWUuc2VsZWN0X3JhbmdlID09ICfmiJHlj4LkuI7nmoQnIHx8IGFjdGlvbi52YWx1ZS5zZWxlY3RfcmFuZ2UgPT0gJ+aIkeWPguWKoOeahCcpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cHJpUmVsID0gJzMnO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRlbHNlIGlmIChhY3Rpb24udmFsdWUuc2VsZWN0X3JhbmdlID09ICfmiJHlhbPms6jnmoQnKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHByaVJlbCA9ICc0Jztcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZWxzZSBpZiAoYWN0aW9uLnZhbHVlLnNlbGVjdF9yYW5nZSA9PSAn5oiR5LiL5bGe55qE6aG555uuJylcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRwcmlSZWwgPSAnNSc7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhciAkdGhpcyA9IHRoaXM7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBwYXJhbV89e1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGluZGV4OiBpbmRleCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpaW5kZXg6aWluZGV4LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGJ1dHRvbl9jYWxsYmFjazpidXR0b25fY2FsbGJhY2ssXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVxOnJlcVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHVuaS5uYXZpZ2F0ZVRvKHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR1cmw6Jy4uL3NlbFByai9pbmRleD9yZWxhdGlvbj0nK3ByaVJlbCsnJnBhcmFtPScrSlNPTi5zdHJpbmdpZnkocGFyYW1fKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRldmVudHM6e1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0QWRkUGVyKGRhdGEscGFyYW0peyBcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtwYXJhbS5pbmRleF0uQXR0cltwYXJhbS5paW5kZXhdLlZhbHVlPWRhdGFbMF0uTmFtZTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtwYXJhbS5pbmRleF0uQXR0cltwYXJhbS5paW5kZXhdLlZhbElEPWRhdGFbMF0uSUQrJzsnK2RhdGFbMF0uTmFtZTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGNhbGxiYWNrX2V2ZW50aWQgPSBwYXJhbS5idXR0b25fY2FsbGJhY2sudHJpbSgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoY2FsbGJhY2tfZXZlbnRpZCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBpbmZvID0ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZXZlbnRpZDogY2FsbGJhY2tfZXZlbnRpZCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGVkdHlwZTogXCIyXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRwcm9qZWN0aWQ6IGRhdGFbMF0uSUQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyY2xzaWQ6IFwiXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyb2JqaWQ6IFwiXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR1c2VybG9naW46IFwiXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbHNpZDogJHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5JRCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9iamlkOiBcIlwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXR0cjogcGFyYW0ucmVxLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy5EYXRhT2JqUnVuQ3VzdG9tRXZlbnQoaW5mbyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGQgPSBkaWFsb2coe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRpdGxlOiAnPGkgY2xhc3M9XCJhY2UtaWNvbiBmYSBmYS1pbmZvLWNpcmNsZVwiPjwvaT4gJyArICfmj5DnpLonLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnRlbnQ6IGFjdGlvbi5hY3Rpb25fdHlwZSArICfmraRhY3Rpb27lsJrmnKrlpITnkIbvvIEnXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRkLnNob3coKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1lbHNle1xuXHRcdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIuaPkOekujUuMlwiLGNvbnRlbnQ6ICfosIPnlKggYmVmb3JlX2NsaWNrX2J1dHRvbiDohJrmnKzov5Tlm57nqbrvvIxldmVudF9pZCcgKyBldmVudGlkLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdCAgfVxuXHRcdFx0XHRcdH1lbHNle1xuXHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor681XCIsY29udGVudDpzdWNjZXNzLmVycl9tc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KS5jYXRjaChleD0+e1xuXHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKGV4KTtcblx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIuaPkOekujUuMVwiLGNvbnRlbnQ6ZXguZXJyTXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHR9KTtcblx0XHQgICAgfSxcblx0XHQgICAgc2Nhbl9pbmlfRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGluZm8pe1xuXHRcdCAgICBcdHZhciBwYXJhbSA9IHtcblx0XHQgICAgXHQgICAgRWRpdFN0eWxlOiB0aGlzLiRkYXRhLnBhcmFtLlN1Yl9DbHMuVmlld19TdHlsZS5OYW1lLFxuXHRcdCAgICBcdCAgICBWaWV3U3R5bGU6IHRoaXMuJGRhdGEucGFyYW0uU3ViX0Nscy5WaWV3X1N0eWxlLk5hbWUsXG5cdFx0ICAgIFx0ICAgIE5vdFRyaWdnZXJTeXNFdmVudDogMCxcblx0XHQgICAgXHQgICAgZW52aXJvbWVudDoge1xuXHRcdCAgICBcdCAgICAgICAgJ2Z1bmN0aW9uJzogJzMwMDAnLCAvLyDlip/og73ngrnnvJblj7dcblx0XHQgICAgXHQgICAgICAgIGNsc19pZDogdGhpcy4kZGF0YS5wYXJhbS5TdWJfQ2xzLklELCAgICAgLy8g5Yqf6IO954K55Li75pWw5o2u57G75qCH6K+GXG5cdFx0ICAgIFx0ICAgICAgICAnYnV0dG9uJzogJ3RvcCcsICAgLy8gdG9wL2JvdHRvbVxuXHRcdCAgICBcdCAgICAgICAgYnV0dG9uX25hbWU6ICfmlrDlop4nLFxuXHRcdCAgICBcdCAgICAgICAgbWFzdGVyOiB7XG5cdFx0ICAgIFx0ICAgICAgICAgICAgY2xzX2lkOiB0aGlzLiRkYXRhLnBhcmFtLlN1Yl9DbHMuSUQsIC8vIGJ1dHRvbj1ib3R0b23ml7YgbWFzdGVy55qEY2xzX2lkXG5cdFx0ICAgIFx0ICAgICAgICAgICAgLy9vYmpfaWQ6ICcnICAvLyBidXR0b249Ym90dG9t5pe2IG1hc3RlcueahG9ial9pZFxuXHRcdCAgICBcdCAgICAgICAgfVxuXHRcdCAgICBcdCAgICB9XG5cdFx0ICAgIFx0fVxuXHRcdCAgICBcdHZhciBpbnB1dHBhcmFtZXRlciA9ICcnO1xuXHRcdCAgICBcdHZhciBnbG9iYWxfYXR0ciA9ICcnO1xuXHRcdCAgICBcdC8vIHZhciBkYXRhSW5mbyA9IHtcblx0XHQgICAgIC8vICAgICAgICBlZHR5cGU6IGluZm8uZWR0eXBlLCBldmVudGlkOiBpbmZvLmV2ZW50aWQsIHByb2plY3RpZDogaW5mby5wcm9qZWN0aWQsXG5cdFx0ICAgICAvLyAgICAgICAgcmNsc2lkOiBpbmZvLnJjbHNpZCwgcm9iamlkOiBpbmZvLnJvYmppZCwgdXNlcmxvZ2luOiBpbmZvLnVzZXJsb2dpbiwgY2xzaWQ6IGluZm8uY2xzaWQsIG9iamlkOiBpbmZvLm9iamlkLFxuXHRcdCAgICAgLy8gICAgICAgIGF0dHI6IEpTT04uc3RyaW5naWZ5KGluZm8uYXR0ciksIGV4dGluZm86IEpTT04uc3RyaW5naWZ5KHBhcmFtKSwgaW5wdXRwYXJhbWV0ZXI6IGlucHV0cGFyYW1ldGVyLCBnbG9iYWxfYXR0cjogZ2xvYmFsX2F0dHJcblx0XHQgICAgIC8vICAgIH1cblx0XHRcdFx0cGFyYW0gPSBCYXNlNjQuZW5jb2RlKEpTT04uc3RyaW5naWZ5KHBhcmFtKSk7Ly/lsIblrZfnrKbkuLLovazmjaLkuLpiYXNlNjTnvJbnoIFcblx0XHRcdFx0dmFyIG9ial9hdHRyPXt9O1xuXHRcdFx0XHRpbmZvLmF0dHIuZm9yRWFjaChpdGVtPT57XG5cdFx0XHRcdFx0b2JqX2F0dHJbaXRlbS5hdHRyXSA9IGl0ZW0udmFsO1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0aWYoIWluZm8uZXZlbnRpZC5pbmNsdWRlcygneycpKSBpbmZvLmV2ZW50aWQ9ICd7JysgaW5mby5ldmVudGlkICsnfSc7XG5cdFx0XHRcdHZhciBkYXRhSW5mbz17XG5cdFx0XHRcdCAgZWRfdHlwZTogaW5mby5lZHR5cGUsXG5cdFx0XHRcdCAgc3RhcnRfdHJhbnNhY3Rpb246ICcnLFxuXHRcdFx0XHQgIGNsYXNzX2lkOiBpbmZvLmNsc2lkLFxuXHRcdFx0XHQgIGNsYXNzX25hbWU6ICcnLFxuXHRcdFx0XHQgIGV2ZW50X2lkOiBpbmZvLmV2ZW50aWQsXG5cdFx0XHRcdCAgZXZlbnRfbmFtZTogJycsXG5cdFx0XHRcdCAgZGF0YV9vYmpfaWQ6IGluZm8ub2JqaWQsXG5cdFx0XHRcdCAgb2JqX2F0dHI6IG9ial9hdHRyLFxuXHRcdFx0XHQgIHByal9pZDogaW5mby5wcm9qZWN0aWQsXG5cdFx0XHRcdCAgcmVmX2Nsc19pZDogaW5mby5yY2xzaWQsXG5cdFx0XHRcdCAgcmVsX29ial9pZDogaW5mby5yb2JqaWQsXG5cdFx0XHRcdCAgdXNlcl9sb2dpbjogaW5mby51c2VybG9naW4sXG5cdFx0XHRcdCAgZGF0YV9qc29uOiAnJyxcblx0XHRcdFx0ICBjb21wb3NlX2luZm86ICcnLFxuXHRcdFx0XHQgIGV4dF9pbmZvOiBwYXJhbSxcblx0XHRcdFx0ICBnbG9iYWxfYXR0cjogJycsXG5cdFx0XHRcdCAgaW5wdXRfcGFyYW06ICcnLFxuXHRcdFx0XHR9O1xuXHRcdFx0XHRjb25zb2xlLmxvZyhkYXRhSW5mbyk7XG5cdFx0XHRcdC8vIHJldHVybjtcblx0XHQgICAgXHR0aGlzLiRzdG9yZS5kaXNwYXRjaCgncnVuQ3VzdG9tRXZlbnQnLGRhdGFJbmZvKS50aGVuKHN1Y2Nlc3M9Pntcblx0XHQgICAgXHRcdGNvbnNvbGUubG9nKHN1Y2Nlc3MpO1xuXHRcdCAgICBcdFx0aWYgKHN1Y2Nlc3MuZXJyX2NvZGUgPT0gMCkge1xuXHRcdCAgICBcdFx0XHR2YXIgZGF0YSA9IHN1Y2Nlc3MucmVzdWx0O1xuXHRcdFx0XHRcdFx0aWYgKGRhdGEucmV0ICE9IDApIHtcblx0XHRcdFx0XHRcdCAgICB2YXIgdGlwID0gZGF0YS5lcnJfaW5mbyA/IHR5cGVvZiBkYXRhLmVycl9pbmZvID09ICdzdHJpbmcnID8gZGF0YS5lcnJfaW5mbyA6IGRhdGEuZXJyX2luZm8uam9pbignPGJyLz4nKSA6ICcnO1xuXHRcdFx0XHRcdFx0ICAgIGlmIChkYXRhLnJldCA9PSA4MDEpIHVuaS5zaG93TW9kYWwoe3RpdGxlOifmj5DnpLonLGNvbnRlbnQ6dGlwLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHRcdFx0ICAgIGVsc2UgdW5pLnNob3dNb2RhbCh7dGl0bGU6J+aPkOekuicsY29udGVudDp0aXArJyzmj5DnpLo6JytkYXRhLnJldCxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlXG5cdFx0XHRcdFx0XHR9ZWxzZXtcblx0XHRcdFx0XHRcdFx0bGV0IHRpcCA9IGRhdGEuaW5mbyA/IHR5cGVvZiBkYXRhLmluZm8gPT0gJ3N0cmluZycgPyBkYXRhLmluZm8gOiBkYXRhLmluZm8uam9pbignPGJyLz4nKSA6ICcnO1xuXHRcdFx0XHRcdFx0XHRpZiAodGlwKSB1bmkuc2hvd01vZGFsKHt0aXRsZTon5o+Q56S6Jyxjb250ZW50OnRpcCxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHR2YXIgYWN0aW9ubGlzdCA9IGRhdGEuYWN0aW9uO1xuXHRcdFx0XHRcdFx0XHRpZiAoYWN0aW9ubGlzdCkge1xuXHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgYWN0aW9ubGlzdC5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIGFjdGlvbiA9IGFjdGlvbmxpc3Rbal1cblx0XHRcdFx0XHRcdFx0XHRcdHZhciBhY3Rpb25fdHlwZSA9IGFjdGlvbi5hY3Rpb25fdHlwZTtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciB2YWx1ZSA9IGFjdGlvbi52YWx1ZTtcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChhY3Rpb25fdHlwZSA9PSAnc2V0X2RsZ19hdHRyJykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAodmFsdWUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgdmFsID0gdmFsdWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsID0gSlNPTi5wYXJzZSh2YWx1ZSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKHZhbCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCB2YWwubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGEgPSAwOyBhIDwgdGhpcy4kZGF0YS5zdWJDbGFzc0F0dHJMaXN0Lmxlbmd0aDsgYSsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGwgPSAwOyBsIDwgdGhpcy4kZGF0YS5zdWJDbGFzc0F0dHJMaXN0W2FdLkF0dHIubGVuZ3RoOyBsKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgY2EgPSB0aGlzLiRkYXRhLnN1YkNsYXNzQXR0ckxpc3RbYV0uQXR0cltsXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAodmFsW2ldLmF0dHIgID09IGNhLk5hbWUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGNhLlR5cGU9PSflrZflhbgnIHx8IGNhLlR5cGU9PSflrZflhbgt5a2X56ym5LiyJyB8fCBjYS5UeXBlPT0n5a2X5YW4LeaVtOaVsCcpe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgZGljdEl0ZW1MaXN0PVtdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IodmFyIGQgaW4gdmFsW2ldLmNob2ljZV9saXN0KXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgdmFsID12YWxbaV0uY2hvaWNlX2xpc3RbZF07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGljdEl0ZW1MaXN0LnB1c2goe1wiQ05fU19OQU1FXCI6dmFsLFwiTmFtZVwiOnZhbCxcImxhYmVsXCI6dmFsLFwidmFsdWVcIjp2YWx9KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5kaWN0aXRlbSA9IGRpY3RJdGVtTGlzdDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gYXR0cltqXS5kaWN0aXRlbSA9IHZhbFtpXS5jaG9pY2VfbGlzdDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1lbHNle1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBjYS52YWx1ZSA9IHZhbFtpXS52YWx1ZTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGxlbmd0aCA9IDA7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIXRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLmZpbHRlcihmdW5jdGlvbiAocykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gdmFsW2ldLmF0dHIgPT0gcy5hdHRyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9KS5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0bGVuZ3RoID0gMTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUucHVzaCh2YWxbaV0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGxlbmd0aCA9PSAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAodGhpcy4kZGF0YS5yZWZkYXRhc3RvcmVbal0uYXR0ciA9PSB2YWxbaV0uYXR0cikge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy4kZGF0YS5yZWZkYXRhc3RvcmVbal0udmFsdWUgPSB2YWxbaV0udmFsdWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoYWN0aW9uX3R5cGUgPT0gJ29wZW5fc2VsZWN0X3VzZXJkbGcnKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vNi4yXCIsY29udGVudDpcIm9wZW5fc2VsZWN0X3VzZXJkbGfov5nkuKphY3Rpb25fdHlwZei/mOacquWkhOeQhu+8gVwiLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdCAgICBcdFx0fWVsc2V7XG5cdFx0ICAgIFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vNlwiLGNvbnRlbnQ6c3VjY2Vzcy5lcnJfbXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdCAgICBcdFx0fVxuXHRcdCAgICBcdH0pLmNhdGNoKGV4PT57XG5cdFx0ICAgIFx0XHQvLyBjb25zb2xlLmxvZyhleCk7XG5cdFx0ICAgIFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzYuMVwiLGNvbnRlbnQ6ZXguZXJyTXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdCAgICBcdH0pO1xuXHRcdCAgICB9LFxuXHRcdCAgICBzY2FuX0RhdGFPYmpSdW5DdXN0b21FdmVudChpbmZvLGRhdGFfYXR0cil7XG5cdFx0ICAgIFx0dmFyICR0aGlzID0gdGhpcztcblx0XHQgICAgXHR2YXIgZW52aXJvbWVudCA9IHt9O1xuXHRcdCAgICBcdGlmKGluZm8uZW52aXJvbWVudCl7XG5cdFx0ICAgIFx0XHRlbnZpcm9tZW50ID0gaW5mby5lbnZpcm9tZW50O1xuXHRcdCAgICBcdH0gZWxzZSB7XG5cdFx0ICAgIFx0XHRlbnZpcm9tZW50ID0ge1xuXHRcdCAgICBcdFx0XHQnZnVuY3Rpb24nOiAnMzAwMCcsIC8vIOWKn+iDveeCuee8luWPt1xuXHRcdCAgICBcdFx0XHRjbHNfaWQ6ICdNQk9YJywgLy90aGlzLiRkYXRhLnBhcmFtLlN1Yl9DbHMuSUQsICAgICAvLyDlip/og73ngrnku47mlbDmja7nsbvmoIfor4Zcblx0XHQgICAgXHRcdFx0J2J1dHRvbic6ICd0b3AnLCAvLyB0b3AvYm90dG9tXG5cdFx0ICAgIFx0XHRcdGJ1dHRvbl9uYW1lOiAn5paw5aKeJyxcblx0XHQgICAgXHRcdFx0ZWRpdF9kbGc6IHtcblx0XHQgICAgXHRcdFx0XHR0eXBlOiAnc21hbGwnLCAvL+Wwj+eql+WPo1xuXHRcdCAgICBcdFx0XHRcdGNsYXNzX2lkOiAnTUJPWCcsIC8vdGhpcy4kZGF0YS5wYXJhbS5TdWJfQ2xzLklELC8v5b2T5YmN5pWw5o2u57G7aWRcblx0XHQgICAgXHRcdFx0fSxcblx0XHQgICAgXHRcdH07XG5cdFx0ICAgIFx0XHRcblx0XHQgICAgXHR9XG5cdFx0ICAgIFx0dmFyIGdsb2JhbF9hdHRyID0gdGhpcy4kZGF0YS5nbG9iYWxfYXR0cjtcblx0XHQgICAgXHRpZiAoaW5mby5nbG9iYWxfYXR0cikge1xuXHRcdCAgICBcdFx0Z2xvYmFsX2F0dHIgPSBpbmZvLmdsb2JhbF9hdHRyO1xuXHRcdCAgICBcdH1cblx0XHRcdFx0XG5cdFx0ICAgIFx0ZW52aXJvbWVudCA9IEJhc2U2NC5lbmNvZGUoSlNPTi5zdHJpbmdpZnkoZW52aXJvbWVudCkpOy8v5bCG5a2X56ym5Liy6L2s5o2i5Li6YmFzZTY057yW56CBXG5cdFx0XHRcdGlmKGluZm8uaW5wdXRQYXJhbXRlcil7XG5cdFx0XHRcdFx0aW5mby5pbnB1dFBhcmFtdGVyID0gQmFzZTY0LmVuY29kZShKU09OLnN0cmluZ2lmeShpbmZvLmlucHV0UGFyYW10ZXIpKTsvL+WwhuWtl+espuS4sui9rOaNouS4umJhc2U2NOe8lueggVxuXHRcdFx0XHR9XG5cdFx0XHRcdHZhciBnbG9iYWxfYXR0ciA9IEJhc2U2NC5lbmNvZGUoSlNPTi5zdHJpbmdpZnkodGhpcy4kZGF0YS5nbG9iYWxfYXR0cikpOy8v5bCG5a2X56ym5Liy6L2s5o2i5Li6YmFzZTY057yW56CBXG5cdFx0XHRcdFxuXHRcdCAgICBcdHZhciBvYmpfYXR0cj17fTtcblx0XHQgICAgXHRpbmZvLmF0dHIuZm9yRWFjaChpdGVtPT57XG5cdFx0ICAgIFx0XHRvYmpfYXR0cltpdGVtLmF0dHJdID0gaXRlbS52YWw7XG5cdFx0ICAgIFx0fSk7XG5cdFx0ICAgIFx0aWYoIWluZm8uZXZlbnRpZC5pbmNsdWRlcygneycpKSBpbmZvLmV2ZW50aWQ9ICd7JysgaW5mby5ldmVudGlkICsnfSc7XG5cdFx0ICAgIFx0dmFyIGRhdGFJbmZvPXtcblx0XHQgICAgXHQgIGVkX3R5cGU6IGluZm8uZWR0eXBlLFxuXHRcdCAgICBcdCAgc3RhcnRfdHJhbnNhY3Rpb246ICcnLFxuXHRcdCAgICBcdCAgY2xhc3NfaWQ6IGluZm8uY2xzaWQsXG5cdFx0ICAgIFx0ICBjbGFzc19uYW1lOiAnJyxcblx0XHQgICAgXHQgIGV2ZW50X2lkOiBpbmZvLmV2ZW50aWQsXG5cdFx0ICAgIFx0ICBldmVudF9uYW1lOiAnJyxcblx0XHQgICAgXHQgIGRhdGFfb2JqX2lkOiBpbmZvLm9iamlkLFxuXHRcdCAgICBcdCAgb2JqX2F0dHI6IG9ial9hdHRyLFxuXHRcdCAgICBcdCAgcHJqX2lkOiBpbmZvLnByb2plY3RpZC5yZXBsYWNlKCd7JywnJykucmVwbGFjZSgnfScsJycpLFxuXHRcdCAgICBcdCAgcmVmX2Nsc19pZDogaW5mby5yY2xzaWQsXG5cdFx0ICAgIFx0ICByZWxfb2JqX2lkOiBpbmZvLnJvYmppZCxcblx0XHQgICAgXHQgIHVzZXJfbG9naW46IGluZm8udXNlcmxvZ2luLFxuXHRcdCAgICBcdCAgZGF0YV9qc29uOiAnJyxcblx0XHQgICAgXHQgIGNvbXBvc2VfaW5mbzogJycsXG5cdFx0ICAgIFx0ICBleHRfaW5mbzogZW52aXJvbWVudCxcblx0XHQgICAgXHQgIGdsb2JhbF9hdHRyOiBnbG9iYWxfYXR0cixcblx0XHQgICAgXHQgIGlucHV0X3BhcmFtOiBpbmZvLmlucHV0UGFyYW10ZXIsXG5cdFx0ICAgIFx0fTtcblx0XHQgICAgXHRjb25zb2xlLmxvZyhkYXRhSW5mbyk7XG5cdFx0ICAgIFx0Ly8gcmV0dXJuO1xuXHRcdCAgICBcdHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdydW5DdXN0b21FdmVudCcsZGF0YUluZm8pLnRoZW4oc3VjY2Vzcz0+e1xuXHRcdCAgICBcdFx0Y29uc29sZS5sb2coc3VjY2Vzcyk7XG5cdFx0ICAgIFx0XHRpZiAoc3VjY2Vzcy5lcnJfY29kZSA9PSAwKSB7XG5cdFx0ICAgIFx0XHRcdHZhciBkYXRhID0gc3VjY2Vzcy5yZXN1bHQ7XG5cdFx0XHRcdFx0XHRpZiAoZGF0YS5yZXQgIT0gMCkge1xuXHRcdFx0XHRcdFx0ICAgIHZhciB0aXAgPSBkYXRhLmVycl9pbmZvID8gdHlwZW9mIGRhdGEuZXJyX2luZm8gPT0gJ3N0cmluZycgPyBkYXRhLmVycl9pbmZvIDogZGF0YS5lcnJfaW5mby5qb2luKCc8YnIvPicpIDogJyc7XG5cdFx0XHRcdFx0XHQgICAgaWYgKGRhdGEucmV0ID09IDgwMSkgdW5pLnNob3dNb2RhbCh7dGl0bGU6J+aPkOekuicsY29udGVudDp0aXAsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdFx0XHQgICAgZWxzZSB1bmkuc2hvd01vZGFsKHt0aXRsZTon5o+Q56S6Jyxjb250ZW50OnRpcCsnLOaPkOekujonK2RhdGEucmV0LHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2Vcblx0XHRcdFx0XHRcdH1lbHNle1xuXHRcdFx0XHRcdFx0XHRsZXQgdGlwID0gZGF0YS5pbmZvID8gdHlwZW9mIGRhdGEuaW5mbyA9PSAnc3RyaW5nJyA/IGRhdGEuaW5mbyA6IGRhdGEuaW5mby5qb2luKCc8YnIvPicpIDogJyc7XG5cdFx0XHRcdFx0XHRcdGlmICh0aXApIHVuaS5zaG93TW9kYWwoe3RpdGxlOifmj5DnpLonLGNvbnRlbnQ6dGlwLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdHZhciBhY3Rpb25saXN0ID0gZGF0YS5hY3Rpb247XG5cdFx0XHRcdFx0XHRcdGlmIChhY3Rpb25saXN0KSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc29sZS5sb2coYWN0aW9ubGlzdCk7XG5cdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgaWkgPSAwOyBpaSA8IGFjdGlvbmxpc3QubGVuZ3RoOyBpaSsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgYWN0aW9uID0gYWN0aW9ubGlzdFtpaV07XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoYWN0aW9uLmFjdGlvbl90eXBlID09ICdzZXRfZGxnX2F0dHInKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhciByZXN1bHQgPSBhY3Rpb24udmFsdWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdWx0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKHJlc3VsdFtpXS5jaG9pY2VfbGlzdCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgcyA9IDA7IHMgPCAkdGhpcy4kZGF0YS5zdWJQYW5lbExpc3QubGVuZ3RoOyBzKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgYyA9IDA7IGMgPCAkdGhpcy4kZGF0YS5zdWJQYW5lbExpc3Rbc10uc3ViQ2xhc3NBdHRyTGlzdC5sZW5ndGg7IGMrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBhdHRyID0gJHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0W3NdLnN1YkNsYXNzQXR0ckxpc3RbY10uQXR0cjtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IGF0dHIubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGF0dHJbal0uTmFtZT09cmVzdWx0W2ldLmF0dHIpe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihhdHRyW2pdLlR5cGU9PSflrZflhbgnIHx8IGF0dHJbal0uVHlwZT09J+Wtl+WFuC3lrZfnrKbkuLInIHx8IGF0dHJbal0uVHlwZT09J+Wtl+WFuC3mlbTmlbAnKXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgZGljdEl0ZW1MaXN0PVtdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvcih2YXIgZCBpbiByZXN1bHRbaV0uY2hvaWNlX2xpc3Qpe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIHZhbCA9cmVzdWx0W2ldLmNob2ljZV9saXN0W2RdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGljdEl0ZW1MaXN0LnB1c2goe1wiQ05fU19OQU1FXCI6dmFsLFwiTmFtZVwiOnZhbCxcImxhYmVsXCI6dmFsLFwidmFsdWVcIjp2YWx9KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXR0cltqXS5kaWN0aXRlbSA9IGRpY3RJdGVtTGlzdDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBhdHRyW2pdLmRpY3RpdGVtID0gcmVzdWx0W2ldLmNob2ljZV9saXN0O1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIHMgPSAwOyBzIDwgJHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0Lmxlbmd0aDsgcysrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBjID0gMDsgYyA8ICR0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdFtzXS5zdWJDbGFzc0F0dHJMaXN0Lmxlbmd0aDsgYysrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBhdHRyID0gJHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0W3NdLnN1YkNsYXNzQXR0ckxpc3RbY10uQXR0cjtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc29sZS5sb2coYXR0cltqXS5OYW1lKyc9PScrcmVzdWx0W2ldLmF0dHIpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGF0dHJbal0uTmFtZT09cmVzdWx0W2ldLmF0dHIpe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXR0cltqXS5WYWx1ZSA9IHJlc3VsdFtpXS52YWx1ZTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGxlbmd0aCA9IDA7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCEkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUuZmlsdGVyKGZ1bmN0aW9uIChzKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0W2ldLmF0dHIgPT0gcy5hdHRyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSkubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRsZW5ndGggPSAxO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLnB1c2gocmVzdWx0W2ldKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGxlbmd0aCA9PSAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8ICR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoJHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlW2pdLmF0dHIgPT0gcmVzdWx0W2ldLmF0dHIpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmVbal0udmFsdWUgPSByZXN1bHRbaV0udmFsdWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoYWN0aW9uLmFjdGlvbl90eXBlID09ICdzZXRfZ2xvYmFsX2F0dHInKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLiRhY3Rpb250ciA9IGFjdGlvbi52YWx1ZSB8fCBbXTtcblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoYWN0aW9uLmFjdGlvbl90eXBlID09ICdvcGVuX2NvbW1vbl9kbGcnKSB7ICAvL+aJk+W8gOS+p+a7keW8ueahhlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgJHRoaXMgPSB0aGlzO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZihhY3Rpb24udmFsdWUuY29tbW9uX2RsZ19pZCA9PSAnY2hlY2tfbGlzdCcpe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHQgICAkdGhpcy4kZGF0YS5jaGVja19saXN0PSBhY3Rpb24udmFsdWUuY29uZmlnO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHQgICBpZihhY3Rpb24udmFsdWUuY29uZmlnLmFwcGVhcl9zdHlsZSA9PSAnc2lkZXNsaXAnKSAvL+WIpOaWreaYr+WQpuaYr+S+p+a7kVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEucG9wdXBUeXBlID0gJ3JpZ2h0Jztcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgZWxzZVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEucG9wdXBUeXBlID0gJ2NlbnRlcidcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgLy8gb3BlbiDmlrnms5XkvKDlhaXlj4LmlbAg562J5ZCM5ZyoIHVuaS1wb3B1cCDnu4Tku7bkuIrnu5HlrpogdHlwZeWxnuaAp1xuXHRcdFx0XHRcdFx0XHRcdFx0XHQgICAkdGhpcy4kcmVmcy5wb3B1cC5vcGVuKCR0aGlzLiRkYXRhLnBvcHVwVHlwZSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoYWN0aW9uLmFjdGlvbl90eXBlID09ICdhZGRfc3ViY2xzX3BhbmVsJykgeyAvL+S4u+S7juaVsOaNruexu+aJq+eggeafpeivouaVsOaNrlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgcmVzdWx0ID0gYWN0aW9uLnZhbHVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgJHRoaXMgPSB0aGlzO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRsZXQgbGlzdF8xID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLiRkYXRhLnN1YkNsYXNzQXR0ckxpc3QpKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIHNjYW5Db2RlVmFsID0gJHRoaXMuJGRhdGEuc2NhbkNvZGVWYWw7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhciByYW5kID0gJyc7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgNTsgaSsrKSB7IC8v55Sf5oiQNeS9jemaj+acuuaVsFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJhbmQgKz0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTApO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChpbmZvLmlucHV0UGFyYW10ZXJbMF0uYXR0cikge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChpbmZvLmlucHV0UGFyYW10ZXJbMF0uYXR0ciA9PSBcIm1hc3RfaW5wdXRfMzAzN1wiKSAvL+WIpOaWreaYr+S4u+aVsOaNruexu+aJq+eggeafpeivouaVsOaNrlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0c2NhbkNvZGVWYWwgPSBcIm1hc3RfaW5wdXRfMzAzNy1cIiArIHJhbmQ7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGluZm8uYXR0clswXS5hdHRyKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGluZm8uYXR0clswXS5hdHRyID09IFwibWFzdF9pbnB1dF8zMDM3XCIpIC8v5Yik5pat5piv5Li75pWw5o2u57G75omr56CB5p+l6K+i5pWw5o2uXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzY2FuQ29kZVZhbCA9IFwibWFzdF9pbnB1dF8zMDM3LVwiICsgcmFuZDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5zdWJQYW5lbExpc3QucHVzaCh7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0c2NhbkNvZGVWYWw6c2NhbkNvZGVWYWwsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0c3ViQ2xhc3NBdHRyOmxpc3RfMVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9KTsgXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdWx0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgcyA9IDA7IHMgPCAkdGhpcy4kZGF0YS5zdWJQYW5lbExpc3QubGVuZ3RoOyBzKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKCR0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdFtzXS5zY2FuQ29kZVZhbCA9PSBzY2FuQ29kZVZhbCl7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKHJlc3VsdFtpXS5hdHRyPT1cIlNfSURcIilcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5zdWJQYW5lbExpc3Rbc10uT2JqSUQ9cmVzdWx0W2ldLnZhbHVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgX3N1YkNsYXNzQXR0ciA9ICR0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdFtzXS5zdWJDbGFzc0F0dHI7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGMgPSAwOyBjIDwgX3N1YkNsYXNzQXR0ci5sZW5ndGg7IGMrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBhdHRyID0gX3N1YkNsYXNzQXR0cltjXS5BdHRyO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coYXR0cltqXS5OYW1lKyc9PScrcmVzdWx0W2ldLmF0dHIpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoYXR0cltqXS5OYW1lPT1yZXN1bHRbaV0uYXR0cil7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGF0dHJbal0uVmFsdWUgPSByZXN1bHRbaV0udmFsdWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyAkdGhpcy4kZGF0YS5zdWJQYW5lbExpc3Rbc10uc3ViQ2xhc3NBdHRyPWxpc3RfMTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGxlbmd0aCA9IDA7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCEkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUuZmlsdGVyKGZ1bmN0aW9uIChzKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0W2ldLmF0dHIgPT0gcy5hdHRyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSkubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRsZW5ndGggPSAxO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLnB1c2gocmVzdWx0W2ldKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGxlbmd0aCA9PSAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8ICR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoJHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlW2pdLmF0dHIgPT0gcmVzdWx0W2ldLmF0dHIpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmVbal0udmFsdWUgPSByZXN1bHRbaV0udmFsdWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdGlmIChkYXRhLnJlc3VsdCkge1xuXHRcdFx0XHRcdFx0XHRcdGxldCBsaXN0XzEgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuJGRhdGEuc3ViQ2xhc3NBdHRyTGlzdCkpO1xuXHRcdFx0XHRcdFx0XHRcdHZhciBzY2FuQ29kZVZhbCA9ICR0aGlzLiRkYXRhLnNjYW5Db2RlVmFsO1xuXHRcdFx0XHRcdFx0XHRcdGlmKGluZm8uaW5wdXRQYXJhbXRlclswXS5hdHRyPT1cIm1hc3RfaW5wdXRfMzAzN1wiKVxuXHRcdFx0XHRcdFx0XHRcdFx0c2NhbkNvZGVWYWwgPSBcIm1hc3RfaW5wdXRfMzAzNy1cIitpaTtcblx0XHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5zdWJQYW5lbExpc3QucHVzaCh7XG5cdFx0XHRcdFx0XHRcdFx0XHRzY2FuQ29kZVZhbDpzY2FuQ29kZVZhbCxcblx0XHRcdFx0XHRcdFx0XHRcdHN1YkNsYXNzQXR0cjpsaXN0XzFcblx0XHRcdFx0XHRcdFx0XHR9KTsgXG5cdFx0XHRcdFx0XHRcdFx0dmFyIHJlc3VsdCA9IGRhdGEucmVzdWx0O1xuXHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdWx0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBzID0gMDsgcyA8ICR0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdC5sZW5ndGg7IHMrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZigkdGhpcy4kZGF0YS5zdWJQYW5lbExpc3Rbc10uc2NhbkNvZGVWYWwgPT0gc2NhbkNvZGVWYWwpe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKHJlc3VsdFtpXS5hdHRyPT1cIlNfSURcIilcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdFtzXS5PYmpJRD1yZXN1bHRbaV0udmFsdWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIF9zdWJDbGFzc0F0dHIgPSAkdGhpcy4kZGF0YS5zdWJQYW5lbExpc3Rbc10uc3ViQ2xhc3NBdHRyO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGMgPSAwOyBjIDwgX3N1YkNsYXNzQXR0ci5sZW5ndGg7IGMrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGF0dHIgPSBfc3ViQ2xhc3NBdHRyW2NdLkF0dHI7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IGF0dHIubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coYXR0cltqXS5OYW1lKyc9PScrcmVzdWx0W2ldLmF0dHIpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihhdHRyW2pdLk5hbWU9PXJlc3VsdFtpXS5hdHRyKXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhdHRyW2pdLlZhbHVlID0gcmVzdWx0W2ldLnZhbHVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBsZW5ndGggPSAwO1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCEkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUuZmlsdGVyKGZ1bmN0aW9uIChzKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiByZXN1bHRbaV0uYXR0ciA9PSBzLmF0dHJcblx0XHRcdFx0XHRcdFx0XHRcdH0pLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRsZW5ndGggPSAxO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUucHVzaChyZXN1bHRbaV0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKGxlbmd0aCA9PSAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgJHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZVtqXS5hdHRyID09IHJlc3VsdFtpXS5hdHRyKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmVbal0udmFsdWUgPSByZXN1bHRbaV0udmFsdWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fWVsc2V7XG5cdFx0ICAgIFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vN1wiLGNvbnRlbnQ6c3VjY2Vzcy5lcnJfbXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdCAgICBcdFx0fVxuXHRcdCAgICBcdH0pLmNhdGNoKGV4PT57XG5cdFx0ICAgIFx0XHQvLyBjb25zb2xlLmxvZyhleCk7XG5cdFx0ICAgIFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzcuMVwiLGNvbnRlbnQ6ZXguZXJyTXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdCAgICBcdH0pO1xuXHRcdCAgICB9LFxuXHRcdCAgICBzY2FuX09LRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGV2ZW50SUQpe1xuXHRcdFx0XHR1bmkuc2hvd0xvYWRpbmcoe1xuXHRcdFx0XHRcdHRpdGxlOlwi5Yqg6L295LitLi4uXCIsXG5cdFx0XHRcdFx0bWFzazp0cnVlXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHR2YXIgJHRoaXMgPSB0aGlzO1xuXHRcdFx0XHR2YXIgcmVxPVtdO1xuXHRcdFx0XHR2YXIgYXR0cmxpc3QgPSAkdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0O1xuXHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJsaXN0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0dmFyIGF0dHIgPSBhdHRybGlzdFtpXS5BdHRyO1xuXHRcdFx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdFx0dmFyIGFyID0gYXR0cltqXTtcblx0XHRcdFx0XHRcdGlmKGFyLlZhbHVlPT0n6K+36YCJ5oupJyB8fCBhci5WYWx1ZT09J+KAlOKAlOivt+mAieaLqeKAlOKAlCcpIGFyLlZhbHVlPScnO1xuXHRcdFx0XHRcdFx0aWYoYXIuVHlwZT09J+W8leeUqOWvueixoSjlpJrkuKopJylcblx0XHRcdFx0XHRcdFx0aWYoYXIuVmFsdWU9PSfor7cnKSBhci5WYWx1ZT0nJztcblx0XHRcdFx0XHRcdGlmKGFyLlR5cGU9PSflvJXnlKjkurrlkZgnIHx8IGFyLlR5cGU9PSflvJXnlKjpobnnm64nKVxuXHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWxJRCA/YXIuVmFsSUQgOicnIH0pO1xuXHRcdFx0XHRcdFx0ZWxzZSBpZihhci5UeXBlPT0n5biD5bCU5YC8Jylcblx0XHRcdFx0XHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsdWU/JzEnOicwJ30pO1xuXHRcdFx0XHRcdFx0ZWxzZSBpZihhci5UeXBlPT0n5a2X5YW4JyB8fCBhci5UeXBlPT0n5a2X5YW4LeWtl+espuS4sicgfHwgYXIuVHlwZT09J+Wtl+WFuC3mlbTmlbAnKXtcblx0XHRcdFx0XHRcdFx0aWYoYXIuc2VsZWN0PT10cnVlKXsgLy/liKTmlq3kuIvmi4nmmK/lkKblpJrpgIlcblx0XHRcdFx0XHRcdFx0XHR2YXIgdmFsU3RyID1cIlwiO1xuXHRcdFx0XHRcdFx0XHRcdGZvcih2YXIgdiBpbiBhci5WYWx1ZSl7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZih2YWxTdHIpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhbFN0cis9XCI7XCI7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YWxTdHIrPWFyLlZhbHVlW3ZdO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiB2YWxTdHJ9KTtcblx0XHRcdFx0XHRcdFx0fWVsc2Vcblx0XHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWx1ZX0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWx1ZSA/YXIuVmFsdWUgOicnfSk7XG5cdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0aWYgKGFyLm5vdGVtcHR5ID09IHRydWUgJiYgIWFyLlZhbHVlKSB7XG5cdFx0XHRcdFx0XHQvLyBpZihhci5Ob3RFbXB0eT09JzEnKXtcblx0XHRcdFx0XHRcdFx0dW5pLmhpZGVMb2FkaW5nKCk7XG5cdFx0XHRcdFx0XHRcdC8vIHVuaS5zaG93VG9hc3Qoe3RpdGxlOmFyLkRpc3BOYW1lKyfkuI3og73kuLrnqbrvvIEnLGljb246XCJzdWNjZXNzXCIsZHVyYXRpb246MzAwMH0pO1xuXHRcdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIuaPkOekulwiLGNvbnRlbnQ6YXIuRGlzcE5hbWUrJ+S4jeiDveS4uuepuu+8gScsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0dmFyIG9iamVjdHM9W107XG5cdFx0XHRcdHZhciBzdWJQYW5lbExpc3QgPSAkdGhpcy4kZGF0YS5zdWJQYW5lbExpc3Q7XG5cdFx0XHRcdGZvciAodmFyIHMgPSAwOyBzIDwgc3ViUGFuZWxMaXN0Lmxlbmd0aDsgcysrKSB7XG5cdFx0XHRcdFx0dmFyIHN1Yl9yZXE9W107XG5cdFx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBzdWJQYW5lbExpc3Rbc10uc3ViQ2xhc3NBdHRyLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHR2YXIgYXR0ciA9IHN1YlBhbmVsTGlzdFtzXS5zdWJDbGFzc0F0dHJbaV0uQXR0cjtcblx0XHRcdFx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdFx0XHR2YXIgYXIgPSBhdHRyW2pdO1xuXHRcdFx0XHRcdFx0XHRpZihhci5WYWx1ZT09J+ivt+mAieaLqScgfHwgYXIuVmFsdWU9PSfigJTigJTor7fpgInmi6nigJTigJQnKSBhci5WYWx1ZT0nJztcblx0XHRcdFx0XHRcdFx0aWYoYXIuVHlwZT09J+W8leeUqOWvueixoSjlpJrkuKopJylcblx0XHRcdFx0XHRcdFx0XHRpZihhci5WYWx1ZT09J+ivtycpIGFyLlZhbHVlPScnO1xuXHRcdFx0XHRcdFx0XHRpZihhci5UeXBlPT0n5byV55So5Lq65ZGYJyB8fCBhci5UeXBlPT0n5byV55So6aG555uuJylcblx0XHRcdFx0XHRcdFx0XHRzdWJfcmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsSUQgP2FyLlZhbElEIDonJyB9KTtcblx0XHRcdFx0XHRcdFx0ZWxzZSBpZihhci5UeXBlPT0n5biD5bCU5YC8Jylcblx0XHRcdFx0XHRcdFx0XHRzdWJfcmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsdWU/JzEnOicwJ30pO1xuXHRcdFx0XHRcdFx0XHRlbHNlIGlmKGFyLlR5cGU9PSflrZflhbgnIHx8IGFyLlR5cGU9PSflrZflhbgt5a2X56ym5LiyJyB8fCBhci5UeXBlPT0n5a2X5YW4LeaVtOaVsCcpe1xuXHRcdFx0XHRcdFx0XHRcdGlmKGFyLnNlbGVjdD09dHJ1ZSl7IC8v5Yik5pat5LiL5ouJ5piv5ZCm5aSa6YCJXG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgdmFsU3RyID1cIlwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0Zm9yKHZhciB2IGluIGFyLlZhbHVlKXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYodmFsU3RyKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhbFN0cis9XCI7XCI7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhbFN0cis9YXIuVmFsdWVbdl07XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRzdWJfcmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogdmFsU3RyfSk7XG5cdFx0XHRcdFx0XHRcdFx0fWVsc2Vcblx0XHRcdFx0XHRcdFx0XHRcdHN1Yl9yZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWx1ZX0pO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdFx0XHRzdWJfcmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsdWUgP2FyLlZhbHVlIDonJ30pO1xuXHRcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHRpZiAoYXIubm90ZW1wdHkgPT0gdHJ1ZSAmJiAhYXIuVmFsdWUpIHtcblx0XHRcdFx0XHRcdFx0Ly8gaWYoYXIuTm90RW1wdHk9PScxJyl7XG5cdFx0XHRcdFx0XHRcdFx0dW5pLmhpZGVMb2FkaW5nKCk7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gdW5pLnNob3dUb2FzdCh7dGl0bGU6YXIuRGlzcE5hbWUrJ+S4jeiDveS4uuepuu+8gScsaWNvbjpcInN1Y2Nlc3NcIixkdXJhdGlvbjozMDAwfSk7XG5cdFx0XHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLmj5DnpLpcIixjb250ZW50OmFyLkRpc3BOYW1lKyfkuI3og73kuLrnqbrvvIEnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRvYmplY3RzLnB1c2goe1xuXHRcdFx0XHRcdFx0b2JqX2lkOnN1YlBhbmVsTGlzdFtzXS5zY2FuQ29kZVZhbCxcblx0XHRcdFx0XHRcdG9ial9hdHRyczpzdWJfcmVxXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0dmFyIGRhdGFKc29uPXtcblx0XHRcdFx0XHRtYXN0ZXJfY2xzOntcblx0XHRcdFx0XHRcdGNsc19uYW1lOidNQk9YJywvLyR0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuTmFtZSxcblx0XHRcdFx0XHRcdG9ial9hdHRyczpyZXFcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdGlucHV0XzMwMzc6JHRoaXMuJGRhdGEuc2NhbkNvZGVWYWwsICAgLy/miavnoIHlhoXlrrlcblx0XHRcdFx0XHRvcF90eXBlOiR0aGlzLiRkYXRhLnBhcmFtLk9wZXJhdGlvblR5cGUsIC8v5L2c5Lia57G75Z6L5a6a5LmJXG5cdFx0XHRcdFx0c3ViX2Nsczp7XG5cdFx0XHRcdFx0XHRjbHNfbmFtZTonTUJPWCcsLy8kdGhpcy4kZGF0YS5wYXJhbS5TdWJfQ2xzLk5hbWUsXG5cdFx0XHRcdFx0XHRvYmplY3RzOm9iamVjdHNcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH07XG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KGRhdGFKc29uKSk7XG5cdFx0ICAgLy8gIFx0dmFyIGRhdGFJbmZvID0ge1xuXHRcdCAgIC8vICAgICAgICAgIGVkdHlwZTogXCI3XCIsIGV2ZW50aWQ6IGV2ZW50SUQsIHByb2plY3RpZDogJycscmNsc2lkOiAnJywgcm9iamlkOiAnJywgdXNlcmxvZ2luOiAnJywgXG5cdFx0XHRcdFx0Ly8gY2xzaWQ6ICdNQk9YJywgb2JqaWQ6ICcnLGF0dHI6IEpTT04uc3RyaW5naWZ5KFtdKSwgZXh0aW5mbzogSlNPTi5zdHJpbmdpZnkoW10pLCBcblx0XHRcdFx0XHQvLyBnbG9iYWxfYXR0cjogSlNPTi5zdHJpbmdpZnkoJHRoaXMuJGRhdGEuZ2xvYmFsX2F0dHIpLGRhdGFKc29uOkpTT04uc3RyaW5naWZ5KGRhdGFKc29uKVxuXHRcdCAgIC8vICAgICAgfVxuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShkYXRhSW5mbykpO1xuXHRcdCAgICBcdHZhciBkYXRhSnNvbiA9IEJhc2U2NC5lbmNvZGUoSlNPTi5zdHJpbmdpZnkoZGF0YUpzb24pKTsvL+WwhuWtl+espuS4sui9rOaNouS4umJhc2U2NOe8lueggVxuXHRcdCAgICBcdHZhciBnbG9iYWxfYXR0ciA9IEJhc2U2NC5lbmNvZGUoSlNPTi5zdHJpbmdpZnkodGhpcy4kZGF0YS5nbG9iYWxfYXR0cikpOy8v5bCG5a2X56ym5Liy6L2s5o2i5Li6YmFzZTY057yW56CBXG5cdFx0ICAgIFx0aWYoIWV2ZW50SUQuaW5jbHVkZXMoJ3snKSkgZXZlbnRJRD0gJ3snKyBldmVudElEICsnfSc7XG5cdFx0ICAgIFx0dmFyIGRhdGFJbmZvPXtcblx0XHQgICAgXHQgIGVkX3R5cGU6IFwiN1wiLFxuXHRcdCAgICBcdCAgc3RhcnRfdHJhbnNhY3Rpb246ICcnLFxuXHRcdCAgICBcdCAgY2xhc3NfaWQ6ICdNQk9YJyxcblx0XHQgICAgXHQgIGNsYXNzX25hbWU6ICcnLFxuXHRcdCAgICBcdCAgZXZlbnRfaWQ6IGV2ZW50SUQsXG5cdFx0ICAgIFx0ICBldmVudF9uYW1lOiAnJyxcblx0XHQgICAgXHQgIGRhdGFfb2JqX2lkOiAnJyxcblx0XHQgICAgXHQgIG9ial9hdHRyOiAnJyxcblx0XHQgICAgXHQgIHByal9pZDogJycsXG5cdFx0ICAgIFx0ICByZWZfY2xzX2lkOiAnJyxcblx0XHQgICAgXHQgIHJlbF9vYmpfaWQ6ICcnLFxuXHRcdCAgICBcdCAgdXNlcl9sb2dpbjogJycsXG5cdFx0ICAgIFx0ICBkYXRhX2pzb246IGRhdGFKc29uLFxuXHRcdCAgICBcdCAgY29tcG9zZV9pbmZvOiAnJyxcblx0XHQgICAgXHQgIGV4dF9pbmZvOiAnJyxcblx0XHQgICAgXHQgIGdsb2JhbF9hdHRyOiBnbG9iYWxfYXR0cixcblx0XHQgICAgXHQgIGlucHV0X3BhcmFtOiAnJyxcblx0XHQgICAgXHR9O1xuXHRcdCAgICBcdGNvbnNvbGUubG9nKGRhdGFJbmZvKTtcblx0XHQgICAgXHQvLyByZXR1cm47XG5cdFx0ICAgIFx0dGhpcy4kc3RvcmUuZGlzcGF0Y2goJ3J1bkN1c3RvbUV2ZW50JyxkYXRhSW5mbykudGhlbihzdWNjZXNzPT57XG5cdFx0ICAgIFx0XHRjb25zb2xlLmxvZyhzdWNjZXNzKTtcblx0XHRcdFx0XHR1bmkuaGlkZUxvYWRpbmcoKTtcblx0XHQgICAgXHRcdGlmIChzdWNjZXNzLmVycl9jb2RlID09IDApIHtcblx0XHQgICAgXHRcdFx0dmFyIGRhdGEgPSBzdWNjZXNzLnJlc3VsdDtcblx0XHRcdFx0XHRcdGlmIChkYXRhLnJldCAhPSAwKSB7XG5cdFx0XHRcdFx0XHQgICAgdmFyIHRpcCA9IGRhdGEuZXJyX2luZm8gPyB0eXBlb2YgZGF0YS5lcnJfaW5mbyA9PSAnc3RyaW5nJyA/IGRhdGEuZXJyX2luZm8gOiBkYXRhLmVycl9pbmZvLmpvaW4oJzxici8+JykgOiAnJztcblx0XHRcdFx0XHRcdCAgICBpZiAoZGF0YS5yZXQgPT0gODAxKSB1bmkuc2hvd01vZGFsKHt0aXRsZTon5o+Q56S6Jyxjb250ZW50OnRpcCxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHRcdFx0XHRcdCAgICBlbHNlIHVuaS5zaG93TW9kYWwoe3RpdGxlOifmj5DnpLonLGNvbnRlbnQ6dGlwKycs5o+Q56S6OicrZGF0YS5yZXQsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBmYWxzZVxuXHRcdFx0XHRcdFx0fWVsc2V7XG5cdFx0XHRcdFx0XHRcdGxldCB0aXAgPSBkYXRhLmluZm8gPyB0eXBlb2YgZGF0YS5pbmZvID09ICdzdHJpbmcnID8gZGF0YS5pbmZvIDogZGF0YS5pbmZvLmpvaW4oJzxici8+JykgOiAnJztcblx0XHRcdFx0XHRcdFx0aWYgKHRpcCkgdW5pLnNob3dNb2RhbCh7dGl0bGU6J+aPkOekuicsY29udGVudDp0aXAsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0dmFyIHJlc3VsdCA9IGRhdGEucmVzdWx0O1xuXHRcdFx0XHRcdFx0XHRpZihldmVudElEICE9ICR0aGlzLiRkYXRhLnBhcmFtLkFmdGVyX09LX0V2ZW50LklEKVxuXHRcdFx0XHRcdFx0XHRcdCR0aGlzLnNjYW5fT0tEYXRhT2JqUnVuQ3VzdG9tRXZlbnQoJHRoaXMuJGRhdGEucGFyYW0uQWZ0ZXJfT0tfRXZlbnQuSUQpO1xuXHRcdFx0XHRcdFx0XHRlbHNle1xuXHRcdFx0XHRcdFx0XHRcdC8v5Yi35pawXG5cdFx0XHRcdFx0XHRcdFx0dW5pLnJlZGlyZWN0VG8oe1xuXHRcdFx0XHRcdFx0XHRcdFx0dXJsOicuLi9tb2RhbC8zMDM3P3BhcmFtPScrSlNPTi5zdHJpbmdpZnkoJHRoaXMuJGRhdGEucGFyYW0pK1wiJnRpdGxlbmFtZT1cIiskdGhpcy4kZGF0YS50aXRsZVxuXHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0ICAgIFx0XHR9ZWxzZXtcblx0XHQgICAgXHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor684XCIsY29udGVudDpzdWNjZXNzLmVycl9tc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0ICAgIFx0XHR9XG5cdFx0ICAgIFx0fSkuY2F0Y2goZXg9Pntcblx0XHQgICAgXHRcdC8vIGNvbnNvbGUubG9nKGV4KTtcblx0XHRcdFx0XHR1bmkuaGlkZUxvYWRpbmcoKTtcblx0XHQgICAgXHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vOC4xXCIsY29udGVudDpleC5lcnJNc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0ICAgIFx0fSk7XG5cdFx0ICAgIH0sXG5cdFx0ICAgIFxuXHRcdFx0XG5cdFx0fVxuXHR9XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///115\n");
/***/ }),
/* 116 */
@@ -32344,7 +32502,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 */ 65));\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\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  data: function data() {\n    return {\n      title: '码盘',\n      param: {},\n      focusMateria: false,\n      head_styledef: {\n        form: {\n          items: []\n        }\n      },\n      detail1_styledef: {},\n      detail1StyleDefList: [],\n      detail2_styledef: {},\n      detail2StyleDefList: [],\n      // 分段器数据\n      current: 0,\n      items: ['正在码盘', '已码盘']\n    };\n  },\n  onLoad: function onLoad(options) {\n    // console.log(options);\n    uni.setNavigationBarTitle({\n      title: options.titlename\n    }); //设置顶部标题 \n    this.$data.param = JSON.parse(options.param);\n    // console.log(this.$data.param);\n    //获取CG_Detail(托盘货品表)数据类的自定义表单参数\n    this.Head_UIStyleGetInfo('CG_Detail', this.$data.param.Head_Panel_Style.ID);\n    this.Detail1_UIstyleGetInfo('CG_Detail', this.$data.param.Detail_List_Panel1_Style.ID);\n    this.Detail2_UIstyleGetInfo('CG_Detail', this.$data.param.Detail_List_Panel2_Style.ID);\n    //页面初始化获取焦点\n    // this.focusMateria=true; \n  },\n\n  methods: {\n    Head_UIStyleGetInfo: function Head_UIStyleGetInfo(class_id, style_id) {\n      var _this = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {\n        var $this, dataInfo;\n        return _regenerator.default.wrap(function _callee$(_context) {\n          while (1) {\n            switch (_context.prev = _context.next) {\n              case 0:\n                //获取自定义表单样式\n                $this = _this;\n                dataInfo = {\n                  class_id: class_id,\n                  ui_style_id: style_id\n                };\n                _this.$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的style_def是json字符串\n                      styledef = ret.result.style_def.replace(/\\\\/g, \"\");\n                      //mobox3的style_def是base64字符串\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                  } else {\n                    uni.showModal({\n                      title: \"错误1\",\n                      content: ret.err_msg,\n                      showCancel: false,\n                      confirmText: \"取消\"\n                    });\n                  }\n                }).catch(function (ex) {\n                  // console.log(ex);\n                  uni.showModal({\n                    title: \"错误1.1\",\n                    content: ex.errMsg,\n                    showCancel: false,\n                    confirmText: \"取消\"\n                  });\n                });\n              case 3:\n              case \"end\":\n                return _context.stop();\n            }\n          }\n        }, _callee);\n      }))();\n    },\n    Detail1_UIstyleGetInfo: function Detail1_UIstyleGetInfo(class_id, style_id) {\n      var _this2 = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2() {\n        var $this, dataInfo;\n        return _regenerator.default.wrap(function _callee2$(_context2) {\n          while (1) {\n            switch (_context2.prev = _context2.next) {\n              case 0:\n                //获取自定义表单样式\n                $this = _this2;\n                dataInfo = {\n                  class_id: class_id,\n                  ui_style_id: style_id\n                };\n                _this2.$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的style_def是json字符串\n                      styledef = ret.result.style_def.replace(/\\\\/g, \"\");\n                      //mobox3的style_def是base64字符串\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                    // console.log($this.$data.detail1_styledef);\n                    // $this.$data.detail1StyleDefList.push($this.$data.detail1_styledef);\n                    // let 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: \"错误2\",\n                      content: ret.err_msg,\n                      showCancel: false,\n                      confirmText: \"取消\"\n                    });\n                  }\n                }).catch(function (ex) {\n                  // console.log(ex);\n                  uni.showModal({\n                    title: \"错误2.1\",\n                    content: ex.errMsg,\n                    showCancel: false,\n                    confirmText: \"取消\"\n                  });\n                });\n              case 3:\n              case \"end\":\n                return _context2.stop();\n            }\n          }\n        }, _callee2);\n      }))();\n    },\n    Detail2_UIstyleGetInfo: function Detail2_UIstyleGetInfo(class_id, style_id) {\n      var _this3 = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3() {\n        var $this, dataInfo;\n        return _regenerator.default.wrap(function _callee3$(_context3) {\n          while (1) {\n            switch (_context3.prev = _context3.next) {\n              case 0:\n                //获取自定义表单样式\n                $this = _this3;\n                dataInfo = {\n                  class_id: class_id,\n                  ui_style_id: style_id\n                };\n                _this3.$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的style_def是json字符串\n                      styledef = ret.result.style_def.replace(/\\\\/g, \"\");\n                      //mobox3的style_def是base64字符串\n                      if (!ret.result.style_def.includes('\"')) styledef = _base.default.decode(ret.result.style_def);\n                    }\n                    $this.$data.detail2_styledef = ret.result.style_def ? JSON.parse(styledef) : {};\n                    // console.log($this.$data.detail2_styledef);\n                  } else {\n                    uni.showModal({\n                      title: \"错误3\",\n                      content: ret.err_msg,\n                      showCancel: false,\n                      confirmText: \"取消\"\n                    });\n                  }\n                }).catch(function (ex) {\n                  // console.log(ex);\n                  uni.showModal({\n                    title: \"错误3.1\",\n                    content: ex.errMsg,\n                    showCancel: false,\n                    confirmText: \"取消\"\n                  });\n                });\n              case 3:\n              case \"end\":\n                return _context3.stop();\n            }\n          }\n        }, _callee3);\n      }))();\n    },\n    ontap: function ontap(item) {\n      var _this4 = this;\n      //扫码功能\n      // var $ele = e;\n      //console.log(e.target)\n      getApp().onScan(function (result) {\n        __f__(\"log\", result.decodedata, \" at pages/modal/5600.vue:462\");\n        item.value = result.decodedata;\n        uni.hideKeyboard();\n        var $this = _this4;\n        __f__(\"log\", item, \" at pages/modal/5600.vue:467\");\n        if (item.oldvalue != item.value) {\n          item.oldvalue = item.value;\n          var attr = item.fieldId;\n          _this4.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          }\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            }, 100);\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        }\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 _this5 = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4() {\n        var obj_attr, input_param, $this, dataInfo, tip;\n        return _regenerator.default.wrap(function _callee4$(_context4) {\n          while (1) {\n            switch (_context4.prev = _context4.next) {\n              case 0:\n                try {\n                  if (event.id) {\n                    obj_attr = _this5.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 = _this5;\n                    dataInfo = {\n                      ed_type: 0,\n                      start_transaction: '',\n                      class_id: _this5.$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                    _this5.$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.result_type == 0 && result.action) {\n                          result.action.forEach(function (item) {\n                            if (item.action_type == \"insert_subtable_page_row\") {\n                              //码盘中\n                              var value = item.value;\n                              $this.viewAceionRow(value);\n                            } else if (item.action_type == \"set_subtable_page_content\") {\n                              //已码盘\n                              var value = item.value;\n                              if (value.clear == true && $this.$data.detail1StyleDefList.length > 0) {\n                                //判断是否清空页签内容,正在码盘是否有数据\n                                uni.showModal({\n                                  title: '提示',\n                                  content: '系统检测到有正在码盘中的货品,继续操作会清空,是否继续?',\n                                  success: function success(res) {\n                                    if (res.confirm) {\n                                      $this.$data.detail1StyleDefList = [];\n                                      $this.$data.detail2StyleDefList = [];\n                                      $this.viewAceionContent(value);\n                                    } else if (res.cancel) {\n                                      $this.$data.detail2StyleDefList = [];\n                                      $this.viewAceionContent(value);\n                                    }\n                                  }\n                                });\n                              } else {\n                                $this.$data.detail2StyleDefList = [];\n                                $this.viewAceionContent(value);\n                              }\n                            }\n                          });\n                        } else {\n                          // this.detail2StyleDefList=[];\n                          if (result.info) {\n                            uni.showModal({\n                              title: \"错误4.3\",\n                              content: result.info,\n                              showCancel: false,\n                              confirmText: \"取消\"\n                            });\n                          }\n                        }\n                      } else {\n                        uni.showModal({\n                          title: \"错误4\",\n                          content: ret.err_msg,\n                          showCancel: false,\n                          confirmText: \"取消\"\n                        });\n                      }\n                    }).catch(function (ex) {\n                      // console.log(ex);\n                      uni.showModal({\n                        title: \"错误4.1\",\n                        content: ex.errMsg,\n                        showCancel: false,\n                        confirmText: \"取消\"\n                      });\n                    });\n                  }\n                } catch (ex) {\n                  tip = typeof ex == \"string\" ? ex : ex.message;\n                  uni.showModal({\n                    title: \"错误4.2\",\n                    content: \"执行“内容变化后”事件失败:\" + tip,\n                    showCancel: false,\n                    confirmText: \"取消\"\n                  });\n                }\n              case 1:\n              case \"end\":\n                return _context4.stop();\n            }\n          }\n        }, _callee4);\n      }))();\n    },\n    //加载正在码盘内容\n    viewAceionRow: function viewAceionRow(data, type) {\n      // console.log(data);\n      var styleStr = JSON.stringify(this.$data.detail1_styledef);\n      if (type) {\n        //确定后脚本进入加载已码盘数据\n        styleStr = JSON.stringify(this.$data.detail2_styledef);\n      }\n      var detailStyle = JSON.parse(styleStr);\n      data.row.attrs.forEach(function (attr) {\n        detailStyle.form.items.forEach(function (ele) {\n          if (ele.name != 'Layout') {\n            if (ele.fieldId == attr.attr) 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.attr) col.value = attr.value;\n              }\n            });\n          }\n        });\n      });\n      if (type) {\n        //确定后脚本进入加载已码盘数据\n        detailStyle.form.objId = data.row.id;\n        this.$data.detail2StyleDefList.push(detailStyle);\n        // console.log(this.$data.detail2StyleDefList);\n      } else {\n        this.$data.detail1StyleDefList.push(detailStyle);\n        // console.log(this.$data.detail1StyleDefList);\n      }\n    },\n    //加载已码盘内容\n    viewAceionContent: function viewAceionContent(data) {\n      var _this6 = this;\n      data.content.forEach(function (cont) {\n        var styleStr = JSON.stringify(_this6.$data.detail2_styledef);\n        var detailStyle = JSON.parse(styleStr);\n        detailStyle.form.objId = cont.id;\n        cont.attrs.forEach(function (attr) {\n          detailStyle.form.items.forEach(function (ele) {\n            if (ele.name != 'Layout') {\n              if (ele.fieldId == attr.attr) 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.attr) col.value = attr.value;\n                }\n              });\n            }\n          });\n        });\n        _this6.$data.detail2StyleDefList.push(detailStyle);\n      });\n      // console.log(this.detail2StyleDefList);\n    },\n    onClickItem: function onClickItem(e) {\n      //选择页签\n      // console.log(e);\n      this.current = e.currentIndex;\n    },\n    onDetail1EnterChange: function onDetail1EnterChange(item) {\n      //码盘中样式回车事件\n      __f__(\"log\", item, \" at pages/modal/5600.vue:665\");\n    },\n    delItem: function delItem(index) {\n      //删除码盘中样式面板\n      this.detail1StyleDefList.splice(index, 1);\n    },\n    delDataObj: function delDataObj(style, index) {\n      //删除已码盘数\n      // console.log(style);\n      var $this = this;\n      uni.showModal({\n        title: '提示',\n        content: '确定删除该已码盘数据!',\n        success: function success(res) {\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: style.form.clsId,\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                $this.detail2StyleDefList.splice(index, 1);\n                uni.showModal({\n                  title: \"提示\",\n                  content: \"删除成功!\",\n                  showCancel: false,\n                  confirmText: \"取消\"\n                });\n              } else {\n                uni.showModal({\n                  title: \"错误5\",\n                  content: ret.err_msg,\n                  showCancel: false,\n                  confirmText: \"取消\"\n                });\n              }\n            }).catch(function (ex) {\n              // console.log(ex);\n              uni.showModal({\n                title: \"错误5.1\",\n                content: ex.errMsg,\n                showCancel: false,\n                confirmText: \"取消\"\n              });\n            });\n          } else if (res.cancel) {}\n        }\n      });\n    },\n    ok: function ok() {\n      //确定\n      // var $this = this;\n      // console.log(this.$data.param.Before_OK_Event);\n      //    console.log(this.$data.param.After_OK_Event);\n      if (this.$data.param.Before_OK_Event)\n        //是否有确定前事件\n        this.sava(this.$data.param.Before_OK_Event);else if (this.$data.param.After_OK_Event)\n        //是否有确定后事件\n        this.sava(this.$data.param.After_OK_Event);\n    },\n    sava: function sava(event) {\n      var $this = this;\n      if (this.$data.detail1StyleDefList.length == 0) {\n        uni.showModal({\n          title: \"提示\",\n          content: \"没有正在码盘的数据!\",\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n        return false;\n      }\n      //获取表头属性\n      var head_attr = {};\n      this.$data.head_styledef.form.items.forEach(function (item) {\n        head_attr[item.fieldId] = item.value;\n      });\n      // console.log(head_attr);\n      //获取正在码盘属性\n      var detailAttrList = [];\n      this.$data.detail1StyleDefList.forEach(function (style) {\n        var detail_attr = {};\n        style.form.items.forEach(function (item) {\n          if (item.name == \"Layout\") {\n            //判断是否是栅栏格式\n            item.setting.colList.forEach(function (cols) {\n              if (cols != null) detail_attr[cols.fieldId] = cols.value;\n            });\n          } else detail_attr[item.fieldId] = item.value;\n        });\n        detailAttrList.push(detail_attr);\n      });\n      // console.log(detailAttrList);\n\n      var input_param = _base.default.encode(JSON.stringify(Object.keys(head_attr).map(function (a) {\n        return {\n          attr: a,\n          value: head_attr[a] || \"\"\n        };\n      })));\n      var jsonlist = [];\n      detailAttrList.forEach(function (attr) {\n        jsonlist.push({\n          id: '',\n          attrs: Object.keys(attr).map(function (a) {\n            return {\n              attr: a,\n              value: attr[a] || \"\"\n            };\n          })\n        });\n      });\n      // console.log(jsonlist);\n      jsonlist.forEach( /*#__PURE__*/function () {\n        var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee5(json, key) {\n          return _regenerator.default.wrap(function _callee5$(_context5) {\n            while (1) {\n              switch (_context5.prev = _context5.next) {\n                case 0:\n                  _context5.next = 2;\n                  return $this.runCustomEvent(event, input_param, json);\n                case 2:\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    //执行确定脚本\n    runCustomEvent: function runCustomEvent(event, input_param, json) {\n      var _this7 = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee6() {\n        var $this, data_json, dataInfo;\n        return _regenerator.default.wrap(function _callee6$(_context6) {\n          while (1) {\n            switch (_context6.prev = _context6.next) {\n              case 0:\n                $this = _this7;\n                data_json = _base.default.encode(JSON.stringify(json));\n                dataInfo = {\n                  ed_type: 0,\n                  start_transaction: '',\n                  class_id: _this7.$data.head_styledef.form.clsId,\n                  class_name: '',\n                  event_id: _this7.$data.param.After_OK_Event.ID,\n                  event_name: '',\n                  data_obj_id: '',\n                  obj_attr: '',\n                  prj_id: '',\n                  ref_cls_id: '',\n                  rel_obj_id: '',\n                  user_login: '',\n                  data_json: data_json,\n                  compose_info: '',\n                  ext_info: '',\n                  global_attr: '',\n                  input_param: input_param\n                }; // console.log(dataInfo);\n                _this7.$store.dispatch('runCustomEvent', dataInfo).then(function (res) {\n                  __f__(\"log\", res, \" at pages/modal/5600.vue:795\");\n                  if (res.err_code == 0) {\n                    var result = res.result;\n                    if (result.result_type == 0) {\n                      if (result.action) {\n                        result.action.forEach(function (item) {\n                          if (item.action_type == \"insert_subtable_page_row\") {\n                            //码盘中\n                            var value = item.value;\n                            //加载已经码盘数据\n                            $this.viewAceionRow(value, 'add');\n                            //清空条码内容\n                            $this.$data.head_styledef.form.items.forEach(function (item, index) {\n                              if (item.fieldId != \"S_CNTR_CODE\") {\n                                item.value = '';\n                                item.oldvalue = '';\n                                $this.$data.head_styledef.form.model[item.fieldId] = '';\n                              }\n                            });\n                            //清除正在码盘中成功的数据\n                            $this.$data.detail1StyleDefList.forEach(function (style, index) {\n                              if (style.form.items[0].fieldId == json.attrs[0].attr && style.form.items[0].value == json.attrs[0].value) {\n                                $this.$data.detail1StyleDefList.splice(index, 1);\n                                return;\n                              }\n                            });\n                            // this.detail2StyleDefList=[];\n                            uni.showModal({\n                              title: \"提示\",\n                              content: \"码盘成功\",\n                              showCancel: false,\n                              confirmText: \"取消\"\n                            });\n                          }\n                        });\n                      } else {\n                        if ($this.$data.param.After_OK_Event.ID != event.ID) {\n                          //判断当前事件是否是确定后事件\n                          $this.sava($this.$data.param.After_OK_Event); //执行确定后事件\n                        }\n                      }\n                    } else {\n                      // $this.$data.detail2StyleDefList=[];\n                      if (result.info) {\n                        uni.showModal({\n                          title: \"提示\",\n                          content: result.info,\n                          showCancel: false,\n                          confirmText: \"取消\"\n                        });\n                      }\n                    }\n                  } else {\n                    uni.showModal({\n                      title: \"错误8\",\n                      content: res.err_msg,\n                      showCancel: false,\n                      confirmText: \"取消\"\n                    });\n                  }\n                }).catch(function (ex) {\n                  var tip = typeof ex == \"string\" ? ex : ex.errMsg;\n                  uni.showModal({\n                    title: \"错误8.1\",\n                    content: \"执行“确定后”事件失败:\" + tip,\n                    showCancel: false,\n                    confirmText: \"取消\"\n                  });\n                });\n              case 4:\n              case \"end\":\n                return _context6.stop();\n            }\n          }\n        }, _callee6);\n      }))();\n    },\n    cancel: function cancel(e) {\n      //取消\n      uni.navigateBack({\n        delta: 1 //返回层数,2则上上页\n      });\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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vcGFnZXMvbW9kYWwvNTYwMC52dWUiXSwibmFtZXMiOlsibW9kdWxlcyIsIkJhc2U2NCIsImRhdGEiLCJ0aXRsZSIsInBhcmFtIiwiZm9jdXNNYXRlcmlhIiwiaGVhZF9zdHlsZWRlZiIsImZvcm0iLCJpdGVtcyIsImRldGFpbDFfc3R5bGVkZWYiLCJkZXRhaWwxU3R5bGVEZWZMaXN0IiwiZGV0YWlsMl9zdHlsZWRlZiIsImRldGFpbDJTdHlsZURlZkxpc3QiLCJjdXJyZW50Iiwib25Mb2FkIiwib3B0aW9ucyIsInVuaSIsInNldE5hdmlnYXRpb25CYXJUaXRsZSIsInRpdGxlbmFtZSIsIiRkYXRhIiwiSlNPTiIsInBhcnNlIiwiSGVhZF9VSVN0eWxlR2V0SW5mbyIsIkhlYWRfUGFuZWxfU3R5bGUiLCJJRCIsIkRldGFpbDFfVUlzdHlsZUdldEluZm8iLCJEZXRhaWxfTGlzdF9QYW5lbDFfU3R5bGUiLCJEZXRhaWwyX1VJc3R5bGVHZXRJbmZvIiwiRGV0YWlsX0xpc3RfUGFuZWwyX1N0eWxlIiwibWV0aG9kcyIsImNsYXNzX2lkIiwic3R5bGVfaWQiLCIkdGhpcyIsImRhdGFJbmZvIiwidWlfc3R5bGVfaWQiLCIkc3RvcmUiLCJkaXNwYXRjaCIsInRoZW4iLCJyZXQiLCJlcnJfY29kZSIsInN0eWxlZGVmIiwicmVzdWx0Iiwic3R5bGVfZGVmIiwicmVwbGFjZSIsImluY2x1ZGVzIiwiZGVjb2RlIiwic2hvd01vZGFsIiwiY29udGVudCIsImVycl9tc2ciLCJzaG93Q2FuY2VsIiwiY29uZmlybVRleHQiLCJjYXRjaCIsImV4IiwiZXJyTXNnIiwib250YXAiLCJpdGVtIiwiZ2V0QXBwIiwib25TY2FuIiwiZGVjb2RlZGF0YSIsInZhbHVlIiwiaGlkZUtleWJvYXJkIiwib2xkdmFsdWUiLCJhdHRyIiwiZmllbGRJZCIsIm1vZGVsIiwib25DaGFuZ2VFdmVudCIsImJpbmQiLCJvblN1ZmZpeENsaWNrQ2FsbGJhY2tFdmVudCIsIm9uU3VmZml4Q2xpY2tFdmVudCIsImlzZmxhZyIsImlkIiwib25DaGFuZ2UiLCJzZXRUaW1lb3V0Iiwib25FbnRlckNoYW5nZSIsImV2ZW50Iiwib2JqX2F0dHIiLCJpbnB1dF9wYXJhbSIsImVuY29kZSIsInN0cmluZ2lmeSIsIk9iamVjdCIsImtleXMiLCJtYXAiLCJhIiwiZWRfdHlwZSIsInN0YXJ0X3RyYW5zYWN0aW9uIiwiY2xzSWQiLCJjbGFzc19uYW1lIiwiZXZlbnRfaWQiLCJldmVudF9uYW1lIiwiZGF0YV9vYmpfaWQiLCJwcmpfaWQiLCJyZWZfY2xzX2lkIiwicmVsX29ial9pZCIsInVzZXJfbG9naW4iLCJkYXRhX2pzb24iLCJjb21wb3NlX2luZm8iLCJleHRfaW5mbyIsImdsb2JhbF9hdHRyIiwicmVzdWx0X3R5cGUiLCJhY3Rpb24iLCJmb3JFYWNoIiwiYWN0aW9uX3R5cGUiLCJ2aWV3QWNlaW9uUm93IiwiY2xlYXIiLCJsZW5ndGgiLCJzdWNjZXNzIiwicmVzIiwiY29uZmlybSIsInZpZXdBY2Vpb25Db250ZW50IiwiY2FuY2VsIiwiaW5mbyIsInRpcCIsIm1lc3NhZ2UiLCJ0eXBlIiwic3R5bGVTdHIiLCJkZXRhaWxTdHlsZSIsInJvdyIsImF0dHJzIiwiZWxlIiwibmFtZSIsInNldHRpbmciLCJjb2xMaXN0IiwiY29sIiwib2JqSWQiLCJwdXNoIiwiY29udCIsIm9uQ2xpY2tJdGVtIiwiZSIsImN1cnJlbnRJbmRleCIsIm9uRGV0YWlsMUVudGVyQ2hhbmdlIiwiZGVsSXRlbSIsImluZGV4Iiwic3BsaWNlIiwiZGVsRGF0YU9iaiIsInN0eWxlIiwib2JqSUQiLCJvYmpfaWQiLCJvayIsIkJlZm9yZV9PS19FdmVudCIsInNhdmEiLCJBZnRlcl9PS19FdmVudCIsImhlYWRfYXR0ciIsImRldGFpbEF0dHJMaXN0IiwiZGV0YWlsX2F0dHIiLCJjb2xzIiwianNvbmxpc3QiLCJqc29uIiwia2V5IiwicnVuQ3VzdG9tRXZlbnQiLCJuYXZpZ2F0ZUJhY2siLCJkZWx0YSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBMFVBO0FBMVVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQSxlQUdlO0VBQ2JBLE9BQU8sRUFBQztJQUNUQyxNQUFNLEVBQU5BO0VBQ0MsQ0FBQztFQUNEQyxJQUFJLGtCQUFHO0lBQ0wsT0FBTztNQUNSQyxLQUFLLEVBQUMsSUFBSTtNQUNQQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO01BQ1pDLFlBQVksRUFBQyxLQUFLO01BQ2xCQyxhQUFhLEVBQUM7UUFDZkMsSUFBSSxFQUFDO1VBQ0pDLEtBQUssRUFBQztRQUNQO01BQ0MsQ0FBQztNQUNFQyxnQkFBZ0IsRUFBQyxDQUFDLENBQUM7TUFDbkJDLG1CQUFtQixFQUFDLEVBQUU7TUFDdEJDLGdCQUFnQixFQUFDLENBQUMsQ0FBQztNQUNuQkMsbUJBQW1CLEVBQUMsRUFBRTtNQUN6QjtNQUNBQyxPQUFPLEVBQUUsQ0FBQztNQUNWTCxLQUFLLEVBQUUsQ0FBQyxNQUFNLEVBQUUsS0FBSztJQUNwQixDQUFDO0VBQ0gsQ0FBQztFQUNETSxNQUFNLGtCQUFDQyxPQUFPLEVBQUU7SUFDakI7SUFDQUMsR0FBRyxDQUFDQyxxQkFBcUIsQ0FBQztNQUFFZCxLQUFLLEVBQUVZLE9BQU8sQ0FBQ0c7SUFBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hELElBQUksQ0FBQ0MsS0FBSyxDQUFDZixLQUFLLEdBQUdnQixJQUFJLENBQUNDLEtBQUssQ0FBQ04sT0FBTyxDQUFDWCxLQUFLLENBQUM7SUFDNUM7SUFDQztJQUNELElBQUksQ0FBQ2tCLG1CQUFtQixDQUFDLFdBQVcsRUFBQyxJQUFJLENBQUNILEtBQUssQ0FBQ2YsS0FBSyxDQUFDbUIsZ0JBQWdCLENBQUNDLEVBQUUsQ0FBQztJQUMxRSxJQUFJLENBQUNDLHNCQUFzQixDQUFDLFdBQVcsRUFBQyxJQUFJLENBQUNOLEtBQUssQ0FBQ2YsS0FBSyxDQUFDc0Isd0JBQXdCLENBQUNGLEVBQUUsQ0FBQztJQUNyRixJQUFJLENBQUNHLHNCQUFzQixDQUFDLFdBQVcsRUFBQyxJQUFJLENBQUNSLEtBQUssQ0FBQ2YsS0FBSyxDQUFDd0Isd0JBQXdCLENBQUNKLEVBQUUsQ0FBQztJQUNyRjtJQUNBO0VBQ0MsQ0FBQzs7RUFDREssT0FBTyxFQUFFO0lBQ0RQLG1CQUFtQiwrQkFBQ1EsUUFBUSxFQUFDQyxRQUFRLEVBQUM7TUFBQTtNQUFBO1FBQUE7UUFBQTtVQUFBO1lBQUE7Y0FBQTtnQkFBSTtnQkFDOUNDLEtBQUssR0FBRyxLQUFJO2dCQUNaQyxRQUFRLEdBQUM7a0JBQ1pILFFBQVEsRUFBQ0EsUUFBUTtrQkFDakJJLFdBQVcsRUFBQ0g7Z0JBQ2IsQ0FBQztnQkFDRCxLQUFJLENBQUNJLE1BQU0sQ0FBQ0MsUUFBUSxDQUFDLGdCQUFnQixFQUFDSCxRQUFRLENBQUMsQ0FBQ0ksSUFBSSxDQUFDLFVBQUFDLEdBQUcsRUFBRTtrQkFDekQ7a0JBQ0EsSUFBSUEsR0FBRyxDQUFDQyxRQUFRLElBQUksQ0FBQyxFQUFFO29CQUN0QixJQUFJQyxRQUFRLEdBQUMsRUFBRTtvQkFDZixJQUFHRixHQUFHLENBQUNHLE1BQU0sQ0FBQ0MsU0FBUyxFQUFDO3NCQUNuQjtzQkFDQUYsUUFBUSxHQUFHRixHQUFHLENBQUNHLE1BQU0sQ0FBQ0MsU0FBUyxDQUFDQyxPQUFPLENBQUMsS0FBSyxFQUFDLEVBQUUsQ0FBQztzQkFDakQ7c0JBQ0EsSUFBRyxDQUFDTCxHQUFHLENBQUNHLE1BQU0sQ0FBQ0MsU0FBUyxDQUFDRSxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUVKLFFBQVEsR0FBR3ZDLGFBQU0sQ0FBQzRDLE1BQU0sQ0FBQ1AsR0FBRyxDQUFDRyxNQUFNLENBQUNDLFNBQVMsQ0FBQztvQkFDM0Y7b0JBQ0FWLEtBQUssQ0FBQ2IsS0FBSyxDQUFDYixhQUFhLEdBQUdnQyxHQUFHLENBQUNHLE1BQU0sQ0FBQ0MsU0FBUyxHQUFFdEIsSUFBSSxDQUFDQyxLQUFLLENBQUNtQixRQUFRLENBQUMsR0FBRSxDQUFDLENBQUM7b0JBQzFFO29CQUNBO2tCQUVELENBQUMsTUFBSTtvQkFDSnhCLEdBQUcsQ0FBQzhCLFNBQVMsQ0FBQztzQkFBQzNDLEtBQUssRUFBQyxLQUFLO3NCQUFDNEMsT0FBTyxFQUFDVCxHQUFHLENBQUNVLE9BQU87c0JBQUNDLFVBQVUsRUFBQyxLQUFLO3NCQUFDQyxXQUFXLEVBQUM7b0JBQUksQ0FBQyxDQUFDO2tCQUNuRjtnQkFDRCxDQUFDLENBQUMsQ0FBQ0MsS0FBSyxDQUFDLFVBQUFDLEVBQUUsRUFBRTtrQkFDWjtrQkFDQXBDLEdBQUcsQ0FBQzhCLFNBQVMsQ0FBQztvQkFBQzNDLEtBQUssRUFBQyxPQUFPO29CQUFDNEMsT0FBTyxFQUFDSyxFQUFFLENBQUNDLE1BQU07b0JBQUNKLFVBQVUsRUFBQyxLQUFLO29CQUFDQyxXQUFXLEVBQUM7a0JBQUksQ0FBQyxDQUFDO2dCQUNuRixDQUFDLENBQUM7Y0FBQztjQUFBO2dCQUFBO1lBQUE7VUFBQTtRQUFBO01BQUE7SUFFRCxDQUFDO0lBQ0t6QixzQkFBc0Isa0NBQUNLLFFBQVEsRUFBQ0MsUUFBUSxFQUFDO01BQUE7TUFBQTtRQUFBO1FBQUE7VUFBQTtZQUFBO2NBQUE7Z0JBQUk7Z0JBQ2pEQyxLQUFLLEdBQUcsTUFBSTtnQkFDWkMsUUFBUSxHQUFDO2tCQUNaSCxRQUFRLEVBQUNBLFFBQVE7a0JBQ2pCSSxXQUFXLEVBQUNIO2dCQUNiLENBQUM7Z0JBQ0QsTUFBSSxDQUFDSSxNQUFNLENBQUNDLFFBQVEsQ0FBQyxnQkFBZ0IsRUFBQ0gsUUFBUSxDQUFDLENBQUNJLElBQUksQ0FBQyxVQUFBQyxHQUFHLEVBQUU7a0JBQ3pEO2tCQUNBLElBQUlBLEdBQUcsQ0FBQ0MsUUFBUSxJQUFJLENBQUMsRUFBRTtvQkFDdEIsSUFBSUMsUUFBUSxHQUFDLEVBQUU7b0JBQ2YsSUFBR0YsR0FBRyxDQUFDRyxNQUFNLENBQUNDLFNBQVMsRUFBQztzQkFDbkI7c0JBQ0FGLFFBQVEsR0FBR0YsR0FBRyxDQUFDRyxNQUFNLENBQUNDLFNBQVMsQ0FBQ0MsT0FBTyxDQUFDLEtBQUssRUFBQyxFQUFFLENBQUM7c0JBQ2pEO3NCQUNBLElBQUcsQ0FBQ0wsR0FBRyxDQUFDRyxNQUFNLENBQUNDLFNBQVMsQ0FBQ0UsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFSixRQUFRLEdBQUd2QyxhQUFNLENBQUM0QyxNQUFNLENBQUNQLEdBQUcsQ0FBQ0csTUFBTSxDQUFDQyxTQUFTLENBQUM7b0JBQzNGO29CQUNBVixLQUFLLENBQUNiLEtBQUssQ0FBQ1YsZ0JBQWdCLEdBQUc2QixHQUFHLENBQUNHLE1BQU0sQ0FBQ0MsU0FBUyxHQUFFdEIsSUFBSSxDQUFDQyxLQUFLLENBQUNtQixRQUFRLENBQUMsR0FBRSxDQUFDLENBQUM7b0JBQzdFO29CQUNBO29CQUNBO29CQUNBO29CQUNBO2tCQUVELENBQUMsTUFBSTtvQkFDSnhCLEdBQUcsQ0FBQzhCLFNBQVMsQ0FBQztzQkFBQzNDLEtBQUssRUFBQyxLQUFLO3NCQUFDNEMsT0FBTyxFQUFDVCxHQUFHLENBQUNVLE9BQU87c0JBQUNDLFVBQVUsRUFBQyxLQUFLO3NCQUFDQyxXQUFXLEVBQUM7b0JBQUksQ0FBQyxDQUFDO2tCQUNuRjtnQkFDRCxDQUFDLENBQUMsQ0FBQ0MsS0FBSyxDQUFDLFVBQUFDLEVBQUUsRUFBRTtrQkFDWjtrQkFDQXBDLEdBQUcsQ0FBQzhCLFNBQVMsQ0FBQztvQkFBQzNDLEtBQUssRUFBQyxPQUFPO29CQUFDNEMsT0FBTyxFQUFDSyxFQUFFLENBQUNDLE1BQU07b0JBQUNKLFVBQVUsRUFBQyxLQUFLO29CQUFDQyxXQUFXLEVBQUM7a0JBQUksQ0FBQyxDQUFDO2dCQUNuRixDQUFDLENBQUM7Y0FBQztjQUFBO2dCQUFBO1lBQUE7VUFBQTtRQUFBO01BQUE7SUFFRCxDQUFDO0lBQ0t2QixzQkFBc0Isa0NBQUNHLFFBQVEsRUFBQ0MsUUFBUSxFQUFDO01BQUE7TUFBQTtRQUFBO1FBQUE7VUFBQTtZQUFBO2NBQUE7Z0JBQUk7Z0JBQ2pEQyxLQUFLLEdBQUcsTUFBSTtnQkFDWkMsUUFBUSxHQUFDO2tCQUNaSCxRQUFRLEVBQUNBLFFBQVE7a0JBQ2pCSSxXQUFXLEVBQUNIO2dCQUNiLENBQUM7Z0JBQ0QsTUFBSSxDQUFDSSxNQUFNLENBQUNDLFFBQVEsQ0FBQyxnQkFBZ0IsRUFBQ0gsUUFBUSxDQUFDLENBQUNJLElBQUksQ0FBQyxVQUFBQyxHQUFHLEVBQUU7a0JBQ3pEO2tCQUNBLElBQUlBLEdBQUcsQ0FBQ0MsUUFBUSxJQUFJLENBQUMsRUFBRTtvQkFDdEIsSUFBSUMsUUFBUSxHQUFDLEVBQUU7b0JBQ2YsSUFBR0YsR0FBRyxDQUFDRyxNQUFNLENBQUNDLFNBQVMsRUFBQztzQkFDbkI7c0JBQ0FGLFFBQVEsR0FBR0YsR0FBRyxDQUFDRyxNQUFNLENBQUNDLFNBQVMsQ0FBQ0MsT0FBTyxDQUFDLEtBQUssRUFBQyxFQUFFLENBQUM7c0JBQ2pEO3NCQUNBLElBQUcsQ0FBQ0wsR0FBRyxDQUFDRyxNQUFNLENBQUNDLFNBQVMsQ0FBQ0UsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFSixRQUFRLEdBQUd2QyxhQUFNLENBQUM0QyxNQUFNLENBQUNQLEdBQUcsQ0FBQ0csTUFBTSxDQUFDQyxTQUFTLENBQUM7b0JBQzNGO29CQUNBVixLQUFLLENBQUNiLEtBQUssQ0FBQ1IsZ0JBQWdCLEdBQUcyQixHQUFHLENBQUNHLE1BQU0sQ0FBQ0MsU0FBUyxHQUFFdEIsSUFBSSxDQUFDQyxLQUFLLENBQUNtQixRQUFRLENBQUMsR0FBRSxDQUFDLENBQUM7b0JBQzdFO2tCQUVELENBQUMsTUFBSTtvQkFDSnhCLEdBQUcsQ0FBQzhCLFNBQVMsQ0FBQztzQkFBQzNDLEtBQUssRUFBQyxLQUFLO3NCQUFDNEMsT0FBTyxFQUFDVCxHQUFHLENBQUNVLE9BQU87c0JBQUNDLFVBQVUsRUFBQyxLQUFLO3NCQUFDQyxXQUFXLEVBQUM7b0JBQUksQ0FBQyxDQUFDO2tCQUNuRjtnQkFDRCxDQUFDLENBQUMsQ0FBQ0MsS0FBSyxDQUFDLFVBQUFDLEVBQUUsRUFBRTtrQkFDWjtrQkFDQXBDLEdBQUcsQ0FBQzhCLFNBQVMsQ0FBQztvQkFBQzNDLEtBQUssRUFBQyxPQUFPO29CQUFDNEMsT0FBTyxFQUFDSyxFQUFFLENBQUNDLE1BQU07b0JBQUNKLFVBQVUsRUFBQyxLQUFLO29CQUFDQyxXQUFXLEVBQUM7a0JBQUksQ0FBQyxDQUFDO2dCQUNuRixDQUFDLENBQUM7Y0FBQztjQUFBO2dCQUFBO1lBQUE7VUFBQTtRQUFBO01BQUE7SUFFRCxDQUFDO0lBRUpJLEtBQUssaUJBQUNDLElBQUksRUFBQztNQUFBO01BQUU7TUFDWjtNQUNBO01BQ0FDLE1BQU0sRUFBRSxDQUFDQyxNQUFNLENBQUMsVUFBQ2hCLE1BQU0sRUFBRztRQUN6QixhQUFZQSxNQUFNLENBQUNpQixVQUFVO1FBQzdCSCxJQUFJLENBQUNJLEtBQUssR0FBR2xCLE1BQU0sQ0FBQ2lCLFVBQVU7UUFDOUIxQyxHQUFHLENBQUM0QyxZQUFZLEVBQUU7UUFFbEIsSUFBSTVCLEtBQUssR0FBRyxNQUFJO1FBQ2hCLGFBQVl1QixJQUFJO1FBQ2hCLElBQUdBLElBQUksQ0FBQ00sUUFBUSxJQUFJTixJQUFJLENBQUNJLEtBQUssRUFBQztVQUMzQkosSUFBSSxDQUFDTSxRQUFRLEdBQUdOLElBQUksQ0FBQ0ksS0FBSztVQUM3QixJQUFJRyxJQUFJLEdBQUdQLElBQUksQ0FBQ1EsT0FBTztVQUN2QixNQUFJLENBQUN6RCxhQUFhLENBQUNDLElBQUksQ0FBQ3lELEtBQUssQ0FBQ0YsSUFBSSxDQUFDLEdBQUdQLElBQUksQ0FBQ0ksS0FBSztVQUNoRCxJQUFJTSxhQUFhLEdBQUdWLElBQUksQ0FBQ1csSUFBSSxDQUFDRCxhQUFhLENBQUMsQ0FBRztVQUMvQyxJQUFJRSwwQkFBMEIsR0FBR1osSUFBSSxDQUFDVyxJQUFJLENBQUNDLDBCQUEwQixDQUFDLENBQUc7VUFDekUsSUFBSUMsa0JBQWtCLEdBQUdiLElBQUksQ0FBQ1csSUFBSSxDQUFDRSxrQkFBa0IsQ0FBQyxDQUFHO1VBQ3pELElBQUlDLE1BQU0sR0FBRyxLQUFLO1VBRWYsSUFBR0osYUFBYSxDQUFDSyxFQUFFLEVBQUM7WUFBSTtZQUN0QnRDLEtBQUssQ0FBQ3VDLFFBQVEsQ0FBQ04sYUFBYSxDQUFDO1VBQy9CO1VBQ0gsSUFBR1YsSUFBSSxDQUFDSSxLQUFLLEVBQUM7WUFBRTtZQUNmM0IsS0FBSyxDQUFDM0IsWUFBWSxHQUFHLElBQUksQ0FBQyxDQUFDO1lBQzNCO1lBQ0E7WUFDQ21FLFVBQVUsQ0FBQyxZQUFVO2NBQ3BCeEQsR0FBRyxDQUFDNEMsWUFBWSxFQUFFO1lBQ25CLENBQUMsRUFBQyxHQUFHLENBQUM7WUFDUDtVQUNEO1VBQ0c7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1FBQ0o7TUFDRCxDQUFDLENBQUM7SUFDSCxDQUFDO0lBQ0RhLGFBQWEseUJBQUNsQixJQUFJLEVBQUM7TUFBRTtNQUNwQjtNQUNBLElBQUdBLElBQUksQ0FBQ00sUUFBUSxJQUFJTixJQUFJLENBQUNJLEtBQUssRUFBQztRQUMzQkosSUFBSSxDQUFDTSxRQUFRLEdBQUdOLElBQUksQ0FBQ0ksS0FBSztRQUM3QixJQUFJRyxJQUFJLEdBQUdQLElBQUksQ0FBQ1EsT0FBTztRQUN2QixJQUFJLENBQUN6RCxhQUFhLENBQUNDLElBQUksQ0FBQ3lELEtBQUssQ0FBQ0YsSUFBSSxDQUFDLEdBQUdQLElBQUksQ0FBQ0ksS0FBSztRQUNoRCxJQUFJTSxhQUFhLEdBQUdWLElBQUksQ0FBQ1csSUFBSSxDQUFDRCxhQUFhLENBQUMsQ0FBRztRQUMvQyxJQUFJRSwwQkFBMEIsR0FBR1osSUFBSSxDQUFDVyxJQUFJLENBQUNDLDBCQUEwQixDQUFDLENBQUc7UUFDekUsSUFBSUMsa0JBQWtCLEdBQUdiLElBQUksQ0FBQ1csSUFBSSxDQUFDRSxrQkFBa0IsQ0FBQyxDQUFHO1FBQ3pELElBQUlDLE1BQU0sR0FBRyxLQUFLO1FBRWYsSUFBR0osYUFBYSxDQUFDSyxFQUFFLEVBQUM7VUFBSTtVQUN0QixJQUFJLENBQUNDLFFBQVEsQ0FBQ04sYUFBYSxDQUFDO1FBQzlCO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO01BQ0o7SUFDRCxDQUFDO0lBQ0Q7SUFDTU0sUUFBUSxvQkFBQ0csS0FBSyxFQUFFO01BQUE7TUFBQTtRQUFBO1FBQUE7VUFBQTtZQUFBO2NBQUE7Z0JBQ2xCLElBQUk7a0JBQ0EsSUFBSUEsS0FBSyxDQUFDSixFQUFFLEVBQUU7b0JBQ1JLLFFBQVEsR0FBRyxNQUFJLENBQUNyRSxhQUFhLENBQUNDLElBQUksQ0FBQ3lELEtBQUssRUFDNUM7b0JBQ0lZLFdBQVcsR0FBRzNFLGFBQU0sQ0FBQzRFLE1BQU0sQ0FDN0J6RCxJQUFJLENBQUMwRCxTQUFTLENBQ1pDLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDTCxRQUFRLENBQUMsQ0FBQ00sR0FBRyxDQUFDLFVBQUNDLENBQUM7c0JBQUEsT0FBTTt3QkFDaENwQixJQUFJLEVBQUVvQixDQUFDO3dCQUNQdkIsS0FBSyxFQUFFZ0IsUUFBUSxDQUFDTyxDQUFDLENBQUMsSUFBSTtzQkFDeEIsQ0FBQztvQkFBQSxDQUFDLENBQUMsQ0FDSixDQUNGO29CQUNIbEQsS0FBSyxHQUFHLE1BQUk7b0JBQ1pDLFFBQVEsR0FBQztzQkFDTGtELE9BQU8sRUFBRSxDQUFDO3NCQUNuQkMsaUJBQWlCLEVBQUUsRUFBRTtzQkFDWnRELFFBQVEsRUFBRSxNQUFJLENBQUNYLEtBQUssQ0FBQ2IsYUFBYSxDQUFDQyxJQUFJLENBQUM4RSxLQUFLO3NCQUN0REMsVUFBVSxFQUFFLEVBQUU7c0JBQ0xDLFFBQVEsRUFBRWIsS0FBSyxDQUFDSixFQUFFO3NCQUMzQmtCLFVBQVUsRUFBRSxFQUFFO3NCQUNkQyxXQUFXLEVBQUUsRUFBRTtzQkFDTmQsUUFBUSxFQUFFQSxRQUFRO3NCQUMzQmUsTUFBTSxFQUFFLEVBQUU7c0JBQ1ZDLFVBQVUsRUFBRSxFQUFFO3NCQUNkQyxVQUFVLEVBQUUsRUFBRTtzQkFDZEMsVUFBVSxFQUFFLEVBQUU7c0JBQ2RDLFNBQVMsRUFBRSxFQUFFO3NCQUNiQyxZQUFZLEVBQUUsRUFBRTtzQkFDaEJDLFFBQVEsRUFBRSxFQUFFO3NCQUNaQyxXQUFXLEVBQUUsRUFBRTtzQkFDTnJCLFdBQVcsRUFBRUE7b0JBQ2YsQ0FBQztvQkFDUCxNQUFJLENBQUN6QyxNQUFNLENBQUNDLFFBQVEsQ0FBQyxnQkFBZ0IsRUFBQ0gsUUFBUSxDQUFDLENBQUNJLElBQUksQ0FBQyxVQUFBQyxHQUFHLEVBQUU7c0JBQ3pEO3NCQUNBLElBQUlBLEdBQUcsQ0FBQ0MsUUFBUSxJQUFJLENBQUMsRUFBRTt3QkFDeEIsSUFBSUUsTUFBTSxHQUFHSCxHQUFHLENBQUNHLE1BQU07d0JBQ3JCLElBQUdBLE1BQU0sQ0FBQ3lELFdBQVcsSUFBSSxDQUFDLElBQUl6RCxNQUFNLENBQUMwRCxNQUFNLEVBQUM7MEJBQ3hDMUQsTUFBTSxDQUFDMEQsTUFBTSxDQUFDQyxPQUFPLENBQUMsVUFBQTdDLElBQUksRUFBRTs0QkFDeEIsSUFBR0EsSUFBSSxDQUFDOEMsV0FBVyxJQUFJLDBCQUEwQixFQUFDOzhCQUFFOzhCQUNoRCxJQUFJMUMsS0FBSyxHQUFHSixJQUFJLENBQUNJLEtBQUs7OEJBQ3RCM0IsS0FBSyxDQUFDc0UsYUFBYSxDQUFDM0MsS0FBSyxDQUFDOzRCQUM5QixDQUFDLE1BQU0sSUFBR0osSUFBSSxDQUFDOEMsV0FBVyxJQUFJLDJCQUEyQixFQUFDOzhCQUFHOzhCQUN6RCxJQUFJMUMsS0FBSyxHQUFHSixJQUFJLENBQUNJLEtBQUs7OEJBQ3RCLElBQUdBLEtBQUssQ0FBQzRDLEtBQUssSUFBSSxJQUFJLElBQUl2RSxLQUFLLENBQUNiLEtBQUssQ0FBQ1QsbUJBQW1CLENBQUM4RixNQUFNLEdBQUMsQ0FBQyxFQUFDO2dDQUFFO2dDQUMvRXhGLEdBQUcsQ0FBQzhCLFNBQVMsQ0FBQztrQ0FDYjNDLEtBQUssRUFBRSxJQUFJO2tDQUNYNEMsT0FBTyxFQUFFLDhCQUE4QjtrQ0FDdkMwRCxPQUFPLEVBQUUsaUJBQVVDLEdBQUcsRUFBRTtvQ0FDdkIsSUFBSUEsR0FBRyxDQUFDQyxPQUFPLEVBQUU7c0NBQ2YzRSxLQUFLLENBQUNiLEtBQUssQ0FBQ1QsbUJBQW1CLEdBQUMsRUFBRTtzQ0FDbENzQixLQUFLLENBQUNiLEtBQUssQ0FBQ1AsbUJBQW1CLEdBQUMsRUFBRTtzQ0FDbENvQixLQUFLLENBQUM0RSxpQkFBaUIsQ0FBQ2pELEtBQUssQ0FBQztvQ0FDaEMsQ0FBQyxNQUFNLElBQUkrQyxHQUFHLENBQUNHLE1BQU0sRUFBRTtzQ0FDckI3RSxLQUFLLENBQUNiLEtBQUssQ0FBQ1AsbUJBQW1CLEdBQUMsRUFBRTtzQ0FDbENvQixLQUFLLENBQUM0RSxpQkFBaUIsQ0FBQ2pELEtBQUssQ0FBQztvQ0FDaEM7a0NBQ0Q7Z0NBQ0QsQ0FBQyxDQUFDOzhCQUNRLENBQUMsTUFBTTtnQ0FDSDNCLEtBQUssQ0FBQ2IsS0FBSyxDQUFDUCxtQkFBbUIsR0FBQyxFQUFFO2dDQUNsQ29CLEtBQUssQ0FBQzRFLGlCQUFpQixDQUFDakQsS0FBSyxDQUFDOzhCQUNsQzs0QkFDSjswQkFDSixDQUFDLENBQUM7d0JBQ04sQ0FBQyxNQUFJOzBCQUNOOzBCQUNLLElBQUdsQixNQUFNLENBQUNxRSxJQUFJLEVBQUM7NEJBQ25COUYsR0FBRyxDQUFDOEIsU0FBUyxDQUFDOzhCQUFDM0MsS0FBSyxFQUFDLE9BQU87OEJBQUM0QyxPQUFPLEVBQUNOLE1BQU0sQ0FBQ3FFLElBQUk7OEJBQUM3RCxVQUFVLEVBQUMsS0FBSzs4QkFBQ0MsV0FBVyxFQUFDOzRCQUFJLENBQUMsQ0FBQzswQkFDckY7d0JBQ0M7c0JBRUQsQ0FBQyxNQUFJO3dCQUNKbEMsR0FBRyxDQUFDOEIsU0FBUyxDQUFDOzBCQUFDM0MsS0FBSyxFQUFDLEtBQUs7MEJBQUM0QyxPQUFPLEVBQUNULEdBQUcsQ0FBQ1UsT0FBTzswQkFBQ0MsVUFBVSxFQUFDLEtBQUs7MEJBQUNDLFdBQVcsRUFBQzt3QkFBSSxDQUFDLENBQUM7c0JBQ25GO29CQUNELENBQUMsQ0FBQyxDQUFDQyxLQUFLLENBQUMsVUFBQUMsRUFBRSxFQUFFO3NCQUNaO3NCQUNBcEMsR0FBRyxDQUFDOEIsU0FBUyxDQUFDO3dCQUFDM0MsS0FBSyxFQUFDLE9BQU87d0JBQUM0QyxPQUFPLEVBQUNLLEVBQUUsQ0FBQ0MsTUFBTTt3QkFBQ0osVUFBVSxFQUFDLEtBQUs7d0JBQUNDLFdBQVcsRUFBQztzQkFBSSxDQUFDLENBQUM7b0JBQ25GLENBQUMsQ0FBQztrQkFDRTtnQkFDSixDQUFDLENBQUMsT0FBT0UsRUFBRSxFQUFFO2tCQUNMMkQsR0FBRyxHQUFHLE9BQU8zRCxFQUFFLElBQUksUUFBUSxHQUFHQSxFQUFFLEdBQUdBLEVBQUUsQ0FBQzRELE9BQU87a0JBQ3ZEaEcsR0FBRyxDQUFDOEIsU0FBUyxDQUFDO29CQUFDM0MsS0FBSyxFQUFDLE9BQU87b0JBQUM0QyxPQUFPLEVBQUMsZ0JBQWdCLEdBQUdnRSxHQUFHO29CQUFDOUQsVUFBVSxFQUFDLEtBQUs7b0JBQUNDLFdBQVcsRUFBQztrQkFBSSxDQUFDLENBQUM7Z0JBRTdGO2NBQUM7Y0FBQTtnQkFBQTtZQUFBO1VBQUE7UUFBQTtNQUFBO0lBQ0wsQ0FBQztJQUNEO0lBQ0FvRCxhQUFhLHlCQUFDcEcsSUFBSSxFQUFDK0csSUFBSSxFQUFDO01BQ3ZCO01BQ0csSUFBSUMsUUFBUSxHQUFHOUYsSUFBSSxDQUFDMEQsU0FBUyxDQUFDLElBQUksQ0FBQzNELEtBQUssQ0FBQ1YsZ0JBQWdCLENBQUM7TUFDN0QsSUFBR3dHLElBQUksRUFBQztRQUFFO1FBQ05DLFFBQVEsR0FBRzlGLElBQUksQ0FBQzBELFNBQVMsQ0FBQyxJQUFJLENBQUMzRCxLQUFLLENBQUNSLGdCQUFnQixDQUFDO01BQzFEO01BQ0csSUFBSXdHLFdBQVcsR0FBRy9GLElBQUksQ0FBQ0MsS0FBSyxDQUFDNkYsUUFBUSxDQUFDO01BQ3RDaEgsSUFBSSxDQUFDa0gsR0FBRyxDQUFDQyxLQUFLLENBQUNqQixPQUFPLENBQUMsVUFBQXRDLElBQUksRUFBRTtRQUN6QnFELFdBQVcsQ0FBQzVHLElBQUksQ0FBQ0MsS0FBSyxDQUFDNEYsT0FBTyxDQUFDLFVBQUFrQixHQUFHLEVBQUU7VUFDaEMsSUFBR0EsR0FBRyxDQUFDQyxJQUFJLElBQUUsUUFBUSxFQUFDO1lBQ3BCLElBQUdELEdBQUcsQ0FBQ3ZELE9BQU8sSUFBSUQsSUFBSSxDQUFDQSxJQUFJLEVBQUV3RCxHQUFHLENBQUMzRCxLQUFLLEdBQUdHLElBQUksQ0FBQ0gsS0FBSztVQUNyRCxDQUFDLE1BQU0sSUFBRzJELEdBQUcsQ0FBQ0MsSUFBSSxJQUFFLFFBQVEsRUFBQztZQUMzQkQsR0FBRyxDQUFDRSxPQUFPLENBQUNDLE9BQU8sQ0FBQ3JCLE9BQU8sQ0FBQyxVQUFBc0IsR0FBRyxFQUFFO2NBQy9CLElBQUdBLEdBQUcsRUFBQztnQkFDTCxJQUFHQSxHQUFHLENBQUMzRCxPQUFPLElBQUlELElBQUksQ0FBQ0EsSUFBSSxFQUFFNEQsR0FBRyxDQUFDL0QsS0FBSyxHQUFHRyxJQUFJLENBQUNILEtBQUs7Y0FDckQ7WUFDRixDQUFDLENBQUM7VUFDSjtRQUNKLENBQUMsQ0FBQztNQUNOLENBQUMsQ0FBQztNQUNMLElBQUdzRCxJQUFJLEVBQUM7UUFBRTtRQUNORSxXQUFXLENBQUM1RyxJQUFJLENBQUNvSCxLQUFLLEdBQUd6SCxJQUFJLENBQUNrSCxHQUFHLENBQUM5QyxFQUFFO1FBQ3BDLElBQUksQ0FBQ25ELEtBQUssQ0FBQ1AsbUJBQW1CLENBQUNnSCxJQUFJLENBQUNULFdBQVcsQ0FBQztRQUNoRDtNQUNKLENBQUMsTUFBSTtRQUNKLElBQUksQ0FBQ2hHLEtBQUssQ0FBQ1QsbUJBQW1CLENBQUNrSCxJQUFJLENBQUNULFdBQVcsQ0FBQztRQUM5QztNQUNIO0lBQ0QsQ0FBQztJQUNEO0lBQ0FQLGlCQUFpQiw2QkFBQzFHLElBQUksRUFBQztNQUFBO01BQ25CQSxJQUFJLENBQUM2QyxPQUFPLENBQUNxRCxPQUFPLENBQUMsVUFBQXlCLElBQUksRUFBRTtRQUN2QixJQUFJWCxRQUFRLEdBQUc5RixJQUFJLENBQUMwRCxTQUFTLENBQUMsTUFBSSxDQUFDM0QsS0FBSyxDQUFDUixnQkFBZ0IsQ0FBQztRQUMxRCxJQUFJd0csV0FBVyxHQUFHL0YsSUFBSSxDQUFDQyxLQUFLLENBQUM2RixRQUFRLENBQUM7UUFDdENDLFdBQVcsQ0FBQzVHLElBQUksQ0FBQ29ILEtBQUssR0FBR0UsSUFBSSxDQUFDdkQsRUFBRTtRQUNoQ3VELElBQUksQ0FBQ1IsS0FBSyxDQUFDakIsT0FBTyxDQUFDLFVBQUF0QyxJQUFJLEVBQUU7VUFDdkJxRCxXQUFXLENBQUM1RyxJQUFJLENBQUNDLEtBQUssQ0FBQzRGLE9BQU8sQ0FBQyxVQUFBa0IsR0FBRyxFQUFFO1lBQ2xDLElBQUdBLEdBQUcsQ0FBQ0MsSUFBSSxJQUFFLFFBQVEsRUFBQztjQUNwQixJQUFHRCxHQUFHLENBQUN2RCxPQUFPLElBQUlELElBQUksQ0FBQ0EsSUFBSSxFQUFFd0QsR0FBRyxDQUFDM0QsS0FBSyxHQUFHRyxJQUFJLENBQUNILEtBQUs7WUFDckQsQ0FBQyxNQUFNLElBQUcyRCxHQUFHLENBQUNDLElBQUksSUFBRSxRQUFRLEVBQUM7Y0FDM0JELEdBQUcsQ0FBQ0UsT0FBTyxDQUFDQyxPQUFPLENBQUNyQixPQUFPLENBQUMsVUFBQXNCLEdBQUcsRUFBRTtnQkFDL0IsSUFBR0EsR0FBRyxFQUFDO2tCQUNMLElBQUdBLEdBQUcsQ0FBQzNELE9BQU8sSUFBSUQsSUFBSSxDQUFDQSxJQUFJLEVBQUU0RCxHQUFHLENBQUMvRCxLQUFLLEdBQUdHLElBQUksQ0FBQ0gsS0FBSztnQkFDckQ7Y0FDRixDQUFDLENBQUM7WUFDSjtVQUNGLENBQUMsQ0FBQztRQUNKLENBQUMsQ0FBQztRQUNGLE1BQUksQ0FBQ3hDLEtBQUssQ0FBQ1AsbUJBQW1CLENBQUNnSCxJQUFJLENBQUNULFdBQVcsQ0FBQztNQUNwRCxDQUFDLENBQUM7TUFDQTtJQUNOLENBQUM7SUFDRFcsV0FBVyx1QkFBQ0MsQ0FBQyxFQUFFO01BQUU7TUFDaEI7TUFDQSxJQUFJLENBQUNsSCxPQUFPLEdBQUdrSCxDQUFDLENBQUNDLFlBQVk7SUFDOUIsQ0FBQztJQUNEQyxvQkFBb0IsZ0NBQUMxRSxJQUFJLEVBQUM7TUFBRztNQUN6QixhQUFZQSxJQUFJO0lBQ3BCLENBQUM7SUFDRDJFLE9BQU8sbUJBQUNDLEtBQUssRUFBQztNQUFHO01BQ2IsSUFBSSxDQUFDekgsbUJBQW1CLENBQUMwSCxNQUFNLENBQUNELEtBQUssRUFBQyxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUNFRSxVQUFVLHNCQUFDQyxLQUFLLEVBQUNILEtBQUssRUFBQztNQUFHO01BQ3hCO01BQ0gsSUFBSW5HLEtBQUssR0FBRyxJQUFJO01BQ2hCaEIsR0FBRyxDQUFDOEIsU0FBUyxDQUFDO1FBQ2IzQyxLQUFLLEVBQUUsSUFBSTtRQUNYNEMsT0FBTyxFQUFFLGFBQWE7UUFDdEIwRCxPQUFPLEVBQUUsaUJBQVVDLEdBQUcsRUFBRTtVQUN2QixJQUFJQSxHQUFHLENBQUNDLE9BQU8sRUFBRTtZQUNsQixJQUFJNEIsS0FBSyxHQUFDRCxLQUFLLENBQUMvSCxJQUFJLENBQUNvSCxLQUFLO1lBQzFCLElBQUcsQ0FBQ1csS0FBSyxDQUFDL0gsSUFBSSxDQUFDb0gsS0FBSyxDQUFDL0UsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFMkYsS0FBSyxHQUFHLEdBQUcsR0FBQ0QsS0FBSyxDQUFDL0gsSUFBSSxDQUFDb0gsS0FBSyxHQUFDLEdBQUc7WUFFcEUsSUFBSTFGLFFBQVEsR0FBQztjQUNaSCxRQUFRLEVBQUN3RyxLQUFLLENBQUMvSCxJQUFJLENBQUM4RSxLQUFLO2NBQ3pCQyxVQUFVLEVBQUMsRUFBRTtjQUNia0QsTUFBTSxFQUFDRDtZQUNSLENBQUM7WUFDRDtZQUNBdkcsS0FBSyxDQUFDRyxNQUFNLENBQUNDLFFBQVEsQ0FBQyxZQUFZLEVBQUNILFFBQVEsQ0FBQyxDQUFDSSxJQUFJLENBQUMsVUFBQUMsR0FBRyxFQUFFO2NBQ3REO2NBQ0EsSUFBSUEsR0FBRyxDQUFDQyxRQUFRLElBQUksQ0FBQyxFQUFFO2dCQUN0QlAsS0FBSyxDQUFDcEIsbUJBQW1CLENBQUN3SCxNQUFNLENBQUNELEtBQUssRUFBQyxDQUFDLENBQUM7Z0JBQ3pDbkgsR0FBRyxDQUFDOEIsU0FBUyxDQUFDO2tCQUFDM0MsS0FBSyxFQUFDLElBQUk7a0JBQUM0QyxPQUFPLEVBQUMsT0FBTztrQkFBQ0UsVUFBVSxFQUFDLEtBQUs7a0JBQUNDLFdBQVcsRUFBQztnQkFBSSxDQUFDLENBQUM7Y0FFOUUsQ0FBQyxNQUFJO2dCQUNKbEMsR0FBRyxDQUFDOEIsU0FBUyxDQUFDO2tCQUFDM0MsS0FBSyxFQUFDLEtBQUs7a0JBQUM0QyxPQUFPLEVBQUNULEdBQUcsQ0FBQ1UsT0FBTztrQkFBQ0MsVUFBVSxFQUFDLEtBQUs7a0JBQUNDLFdBQVcsRUFBQztnQkFBSSxDQUFDLENBQUM7Y0FDbkY7WUFDRCxDQUFDLENBQUMsQ0FBQ0MsS0FBSyxDQUFDLFVBQUFDLEVBQUUsRUFBRTtjQUNaO2NBQ0FwQyxHQUFHLENBQUM4QixTQUFTLENBQUM7Z0JBQUMzQyxLQUFLLEVBQUMsT0FBTztnQkFBQzRDLE9BQU8sRUFBQ0ssRUFBRSxDQUFDQyxNQUFNO2dCQUFDSixVQUFVLEVBQUMsS0FBSztnQkFBQ0MsV0FBVyxFQUFDO2NBQUksQ0FBQyxDQUFDO1lBQ25GLENBQUMsQ0FBQztVQUNELENBQUMsTUFBTSxJQUFJd0QsR0FBRyxDQUFDRyxNQUFNLEVBQUUsQ0FFdkI7UUFDRDtNQUNELENBQUMsQ0FBQztJQUVELENBQUM7SUFFSjRCLEVBQUUsZ0JBQUU7TUFBRTtNQUNMO01BQ0E7TUFDQTtNQUNHLElBQUcsSUFBSSxDQUFDdEgsS0FBSyxDQUFDZixLQUFLLENBQUNzSSxlQUFlO1FBQUU7UUFDakMsSUFBSSxDQUFDQyxJQUFJLENBQUMsSUFBSSxDQUFDeEgsS0FBSyxDQUFDZixLQUFLLENBQUNzSSxlQUFlLENBQUMsQ0FBQyxLQUMzQyxJQUFHLElBQUksQ0FBQ3ZILEtBQUssQ0FBQ2YsS0FBSyxDQUFDd0ksY0FBYztRQUFHO1FBQ3RDLElBQUksQ0FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQ3hILEtBQUssQ0FBQ2YsS0FBSyxDQUFDd0ksY0FBYyxDQUFDO0lBQ2xELENBQUM7SUFDREQsSUFBSSxnQkFBQ2pFLEtBQUssRUFBQztNQUNWLElBQUkxQyxLQUFLLEdBQUcsSUFBSTtNQUNiLElBQUcsSUFBSSxDQUFDYixLQUFLLENBQUNULG1CQUFtQixDQUFDOEYsTUFBTSxJQUFFLENBQUMsRUFBQztRQUMxQ3hGLEdBQUcsQ0FBQzhCLFNBQVMsQ0FBQztVQUFDM0MsS0FBSyxFQUFDLElBQUk7VUFBQzRDLE9BQU8sRUFBQyxZQUFZO1VBQUNFLFVBQVUsRUFBQyxLQUFLO1VBQUNDLFdBQVcsRUFBQztRQUFJLENBQUMsQ0FBQztRQUNsRixPQUFPLEtBQUs7TUFDZDtNQUNBO01BQ0EsSUFBSTJGLFNBQVMsR0FBRyxDQUFDLENBQUM7TUFDbEIsSUFBSSxDQUFDMUgsS0FBSyxDQUFDYixhQUFhLENBQUNDLElBQUksQ0FBQ0MsS0FBSyxDQUFDNEYsT0FBTyxDQUFDLFVBQUE3QyxJQUFJLEVBQUk7UUFDbERzRixTQUFTLENBQUN0RixJQUFJLENBQUNRLE9BQU8sQ0FBQyxHQUFHUixJQUFJLENBQUNJLEtBQUs7TUFDdEMsQ0FBQyxDQUFDO01BQ0Y7TUFDQTtNQUNBLElBQUltRixjQUFjLEdBQUcsRUFBRTtNQUN2QixJQUFJLENBQUMzSCxLQUFLLENBQUNULG1CQUFtQixDQUFDMEYsT0FBTyxDQUFDLFVBQUFrQyxLQUFLLEVBQUU7UUFDNUMsSUFBSVMsV0FBVyxHQUFDLENBQUMsQ0FBQztRQUNyQlQsS0FBSyxDQUFDL0gsSUFBSSxDQUFDQyxLQUFLLENBQUM0RixPQUFPLENBQUMsVUFBQTdDLElBQUksRUFBSTtVQUM1QixJQUFHQSxJQUFJLENBQUNnRSxJQUFJLElBQUksUUFBUSxFQUFDO1lBQUc7WUFDMUJoRSxJQUFJLENBQUNpRSxPQUFPLENBQUNDLE9BQU8sQ0FBQ3JCLE9BQU8sQ0FBQyxVQUFBNEMsSUFBSSxFQUFJO2NBQ25DLElBQUdBLElBQUksSUFBRSxJQUFJLEVBQUVELFdBQVcsQ0FBQ0MsSUFBSSxDQUFDakYsT0FBTyxDQUFDLEdBQUdpRixJQUFJLENBQUNyRixLQUFLO1lBQ3ZELENBQUMsQ0FBQztVQUNKLENBQUMsTUFDQ29GLFdBQVcsQ0FBQ3hGLElBQUksQ0FBQ1EsT0FBTyxDQUFDLEdBQUdSLElBQUksQ0FBQ0ksS0FBSztRQUMxQyxDQUFDLENBQUM7UUFDRm1GLGNBQWMsQ0FBQ2xCLElBQUksQ0FBQ21CLFdBQVcsQ0FBQztNQUNsQyxDQUFDLENBQUM7TUFDRjs7TUFFSCxJQUFJbkUsV0FBVyxHQUFHM0UsYUFBTSxDQUFDNEUsTUFBTSxDQUMzQnpELElBQUksQ0FBQzBELFNBQVMsQ0FDWkMsTUFBTSxDQUFDQyxJQUFJLENBQUM2RCxTQUFTLENBQUMsQ0FBQzVELEdBQUcsQ0FBQyxVQUFDQyxDQUFDO1FBQUEsT0FBTTtVQUNqQ3BCLElBQUksRUFBRW9CLENBQUM7VUFDUHZCLEtBQUssRUFBRWtGLFNBQVMsQ0FBQzNELENBQUMsQ0FBQyxJQUFJO1FBQ3pCLENBQUM7TUFBQSxDQUFDLENBQUMsQ0FDSixDQUNKO01BQ0EsSUFBSStELFFBQVEsR0FBQyxFQUFFO01BQ2hCSCxjQUFjLENBQUMxQyxPQUFPLENBQUMsVUFBQXRDLElBQUksRUFBRTtRQUN6Qm1GLFFBQVEsQ0FBQ3JCLElBQUksQ0FBQztVQUNadEQsRUFBRSxFQUFDLEVBQUU7VUFDTCtDLEtBQUssRUFBRXRDLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDbEIsSUFBSSxDQUFDLENBQUNtQixHQUFHLENBQUMsVUFBQ0MsQ0FBQztZQUFBLE9BQU07Y0FDbkNwQixJQUFJLEVBQUVvQixDQUFDO2NBQ1B2QixLQUFLLEVBQUVHLElBQUksQ0FBQ29CLENBQUMsQ0FBQyxJQUFJO1lBQ3BCLENBQUM7VUFBQSxDQUFDO1FBQ0osQ0FBQyxDQUFDO01BQ04sQ0FBQyxDQUFDO01BQ0Y7TUFDQStELFFBQVEsQ0FBQzdDLE9BQU87UUFBQSxtRkFBQyxrQkFBTzhDLElBQUksRUFBQ0MsR0FBRztVQUFBO1lBQUE7Y0FBQTtnQkFBQTtrQkFBQTtrQkFBQSxPQUN6Qm5ILEtBQUssQ0FBQ29ILGNBQWMsQ0FBQzFFLEtBQUssRUFBQ0UsV0FBVyxFQUFDc0UsSUFBSSxDQUFDO2dCQUFBO2dCQUFBO2tCQUFBO2NBQUE7WUFBQTtVQUFBO1FBQUEsQ0FDbEQ7UUFBQTtVQUFBO1FBQUE7TUFBQSxJQUFDO0lBQ0gsQ0FBQztJQUNFO0lBQ01FLGNBQWMsMEJBQUMxRSxLQUFLLEVBQUNFLFdBQVcsRUFBQ3NFLElBQUksRUFBQztNQUFBO01BQUE7UUFBQTtRQUFBO1VBQUE7WUFBQTtjQUFBO2dCQUMxQ2xILEtBQUssR0FBRyxNQUFJO2dCQUNaOEQsU0FBUyxHQUFHN0YsYUFBTSxDQUFDNEUsTUFBTSxDQUN6QnpELElBQUksQ0FBQzBELFNBQVMsQ0FBQ29FLElBQUksQ0FBQyxDQUN2QjtnQkFDR2pILFFBQVEsR0FBQztrQkFDWGtELE9BQU8sRUFBRSxDQUFDO2tCQUNWQyxpQkFBaUIsRUFBRSxFQUFFO2tCQUNyQnRELFFBQVEsRUFBRSxNQUFJLENBQUNYLEtBQUssQ0FBQ2IsYUFBYSxDQUFDQyxJQUFJLENBQUM4RSxLQUFLO2tCQUM3Q0MsVUFBVSxFQUFFLEVBQUU7a0JBQ2RDLFFBQVEsRUFBRSxNQUFJLENBQUNwRSxLQUFLLENBQUNmLEtBQUssQ0FBQ3dJLGNBQWMsQ0FBQ3BILEVBQUU7a0JBQzVDZ0UsVUFBVSxFQUFFLEVBQUU7a0JBQ2RDLFdBQVcsRUFBRSxFQUFFO2tCQUNmZCxRQUFRLEVBQUUsRUFBRTtrQkFDWmUsTUFBTSxFQUFFLEVBQUU7a0JBQ1ZDLFVBQVUsRUFBRSxFQUFFO2tCQUNkQyxVQUFVLEVBQUUsRUFBRTtrQkFDZEMsVUFBVSxFQUFFLEVBQUU7a0JBQ2RDLFNBQVMsRUFBRUEsU0FBUztrQkFDcEJDLFlBQVksRUFBRSxFQUFFO2tCQUNoQkMsUUFBUSxFQUFFLEVBQUU7a0JBQ1pDLFdBQVcsRUFBRSxFQUFFO2tCQUNmckIsV0FBVyxFQUFFQTtnQkFDZixDQUFDLEVBQ0Q7Z0JBQ0EsTUFBSSxDQUFDekMsTUFBTSxDQUFDQyxRQUFRLENBQUMsZ0JBQWdCLEVBQUNILFFBQVEsQ0FBQyxDQUFDSSxJQUFJLENBQUMsVUFBQXFFLEdBQUcsRUFBRTtrQkFDekQsYUFBWUEsR0FBRztrQkFDZixJQUFJQSxHQUFHLENBQUNuRSxRQUFRLElBQUksQ0FBQyxFQUFFO29CQUN0QixJQUFJRSxNQUFNLEdBQUdpRSxHQUFHLENBQUNqRSxNQUFNO29CQUN2QixJQUFHQSxNQUFNLENBQUN5RCxXQUFXLElBQUksQ0FBQyxFQUFDO3NCQUN6QixJQUFHekQsTUFBTSxDQUFDMEQsTUFBTSxFQUFDO3dCQUNsQjFELE1BQU0sQ0FBQzBELE1BQU0sQ0FBQ0MsT0FBTyxDQUFDLFVBQUE3QyxJQUFJLEVBQUU7MEJBQzFCLElBQUdBLElBQUksQ0FBQzhDLFdBQVcsSUFBSSwwQkFBMEIsRUFBQzs0QkFBRTs0QkFDbEQsSUFBSTFDLEtBQUssR0FBR0osSUFBSSxDQUFDSSxLQUFLOzRCQUN0Qjs0QkFDRzNCLEtBQUssQ0FBQ3NFLGFBQWEsQ0FBQzNDLEtBQUssRUFBQyxLQUFLLENBQUM7NEJBQzdCOzRCQUNUM0IsS0FBSyxDQUFDYixLQUFLLENBQUNiLGFBQWEsQ0FBQ0MsSUFBSSxDQUFDQyxLQUFLLENBQUM0RixPQUFPLENBQUMsVUFBQzdDLElBQUksRUFBQzRFLEtBQUssRUFBSzs4QkFDNUQsSUFBRzVFLElBQUksQ0FBQ1EsT0FBTyxJQUFJLGFBQWEsRUFBQztnQ0FDL0JSLElBQUksQ0FBQ0ksS0FBSyxHQUFHLEVBQUU7Z0NBQ2JKLElBQUksQ0FBQ00sUUFBUSxHQUFHLEVBQUU7Z0NBQ3BCN0IsS0FBSyxDQUFDYixLQUFLLENBQUNiLGFBQWEsQ0FBQ0MsSUFBSSxDQUFDeUQsS0FBSyxDQUFDVCxJQUFJLENBQUNRLE9BQU8sQ0FBQyxHQUFHLEVBQUU7OEJBQ3pEOzRCQUNELENBQUMsQ0FBQzs0QkFDRjs0QkFDQS9CLEtBQUssQ0FBQ2IsS0FBSyxDQUFDVCxtQkFBbUIsQ0FBQzBGLE9BQU8sQ0FBQyxVQUFDa0MsS0FBSyxFQUFDSCxLQUFLLEVBQUc7OEJBQ3JELElBQUdHLEtBQUssQ0FBQy9ILElBQUksQ0FBQ0MsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDdUQsT0FBTyxJQUFJbUYsSUFBSSxDQUFDN0IsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDdkQsSUFBSSxJQUFJd0UsS0FBSyxDQUFDL0gsSUFBSSxDQUFDQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUNtRCxLQUFLLElBQUl1RixJQUFJLENBQUM3QixLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMxRCxLQUFLLEVBQUM7Z0NBQzFHM0IsS0FBSyxDQUFDYixLQUFLLENBQUNULG1CQUFtQixDQUFDMEgsTUFBTSxDQUFDRCxLQUFLLEVBQUMsQ0FBQyxDQUFDO2dDQUMvQzs4QkFDQzs0QkFDRixDQUFDLENBQUM7NEJBQ0M7NEJBQ0huSCxHQUFHLENBQUM4QixTQUFTLENBQUM7OEJBQUMzQyxLQUFLLEVBQUMsSUFBSTs4QkFBQzRDLE9BQU8sRUFBQyxNQUFNOzhCQUFDRSxVQUFVLEVBQUMsS0FBSzs4QkFBQ0MsV0FBVyxFQUFDOzRCQUFJLENBQUMsQ0FBQzswQkFDM0U7d0JBQ0YsQ0FBQyxDQUFDO3NCQUNELENBQUMsTUFBSTt3QkFDTixJQUFHbEIsS0FBSyxDQUFDYixLQUFLLENBQUNmLEtBQUssQ0FBQ3dJLGNBQWMsQ0FBQ3BILEVBQUUsSUFBSWtELEtBQUssQ0FBQ2xELEVBQUUsRUFBQzswQkFBRTswQkFDakRRLEtBQUssQ0FBQzJHLElBQUksQ0FBQzNHLEtBQUssQ0FBQ2IsS0FBSyxDQUFDZixLQUFLLENBQUN3SSxjQUFjLENBQUMsQ0FBQyxDQUFDO3dCQUNsRDtzQkFDQztvQkFDRixDQUFDLE1BQUk7c0JBQ0o7c0JBQ0csSUFBR25HLE1BQU0sQ0FBQ3FFLElBQUksRUFBQzt3QkFDaEI5RixHQUFHLENBQUM4QixTQUFTLENBQUM7MEJBQUMzQyxLQUFLLEVBQUMsSUFBSTswQkFBQzRDLE9BQU8sRUFBQ04sTUFBTSxDQUFDcUUsSUFBSTswQkFBQzdELFVBQVUsRUFBQyxLQUFLOzBCQUFDQyxXQUFXLEVBQUM7d0JBQUksQ0FBQyxDQUFDO3NCQUNuRjtvQkFDRDtrQkFDRCxDQUFDLE1BQUk7b0JBQ0psQyxHQUFHLENBQUM4QixTQUFTLENBQUM7c0JBQUMzQyxLQUFLLEVBQUMsS0FBSztzQkFBQzRDLE9BQU8sRUFBQzJELEdBQUcsQ0FBQzFELE9BQU87c0JBQUNDLFVBQVUsRUFBQyxLQUFLO3NCQUFDQyxXQUFXLEVBQUM7b0JBQUksQ0FBQyxDQUFDO2tCQUNuRjtnQkFDRCxDQUFDLENBQUMsQ0FBQ0MsS0FBSyxDQUFDLFVBQUFDLEVBQUUsRUFBRTtrQkFDVCxJQUFJMkQsR0FBRyxHQUFHLE9BQU8zRCxFQUFFLElBQUksUUFBUSxHQUFHQSxFQUFFLEdBQUdBLEVBQUUsQ0FBQ0MsTUFBTTtrQkFDbkRyQyxHQUFHLENBQUM4QixTQUFTLENBQUM7b0JBQUMzQyxLQUFLLEVBQUMsT0FBTztvQkFBQzRDLE9BQU8sRUFBQyxjQUFjLEdBQUdnRSxHQUFHO29CQUFDOUQsVUFBVSxFQUFDLEtBQUs7b0JBQUNDLFdBQVcsRUFBQztrQkFBSSxDQUFDLENBQUM7Z0JBQzlGLENBQUMsQ0FBQztjQUFDO2NBQUE7Z0JBQUE7WUFBQTtVQUFBO1FBQUE7TUFBQTtJQUNKLENBQUM7SUFFRDJELE1BQU0sa0JBQUNrQixDQUFDLEVBQUM7TUFBRTtNQUNWL0csR0FBRyxDQUFDcUksWUFBWSxDQUFDO1FBQ2hCQyxLQUFLLEVBQUMsQ0FBQyxDQUFDO01BQ1QsQ0FBQyxDQUFDO0lBQ0g7RUFDQztBQUNGLENBQUM7QUFBQSwyQiIsImZpbGUiOiIxMzYuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG5cclxuaW1wb3J0IEJhc2U2NCBmcm9tICcuLi8uLi9jb21wb25lbnRzL2pzLWJhc2U2NC9iYXNlNjQuanMnXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICBtb2R1bGVzOntcclxuXHRCYXNlNjQsXHJcbiAgfSxcclxuICBkYXRhKCkge1xyXG4gICAgcmV0dXJuIHtcclxuXHQgIHRpdGxlOifnoIHnm5gnLFxyXG4gICAgICBwYXJhbToge30sXHJcblx0ICBmb2N1c01hdGVyaWE6ZmFsc2UsXHJcblx0ICBoZWFkX3N0eWxlZGVmOntcclxuXHRcdGZvcm06e1xyXG5cdFx0XHRpdGVtczpbXVxyXG5cdFx0fVxyXG5cdCAgfSxcclxuICAgICAgZGV0YWlsMV9zdHlsZWRlZjp7fSxcclxuICAgICAgZGV0YWlsMVN0eWxlRGVmTGlzdDpbXSxcclxuICAgICAgZGV0YWlsMl9zdHlsZWRlZjp7fSxcclxuICAgICAgZGV0YWlsMlN0eWxlRGVmTGlzdDpbXSxcclxuXHQgIC8vIOWIhuauteWZqOaVsOaNrlxyXG5cdCAgY3VycmVudDogMCxcclxuXHQgIGl0ZW1zOiBbJ+ato+WcqOeggeebmCcsICflt7LnoIHnm5gnXSxcclxuICAgIH07XHJcbiAgfSxcclxuICBvbkxvYWQob3B0aW9ucykge1xyXG5cdC8vIGNvbnNvbGUubG9nKG9wdGlvbnMpO1xyXG5cdHVuaS5zZXROYXZpZ2F0aW9uQmFyVGl0bGUoeyB0aXRsZTogb3B0aW9ucy50aXRsZW5hbWV9KTsgLy/orr7nva7pobbpg6jmoIfpopggXHJcblx0dGhpcy4kZGF0YS5wYXJhbSA9IEpTT04ucGFyc2Uob3B0aW9ucy5wYXJhbSk7XHJcblx0Ly8gY29uc29sZS5sb2codGhpcy4kZGF0YS5wYXJhbSk7XHJcblx0IC8v6I635Y+WQ0dfRGV0YWls77yI5omY55uY6LSn5ZOB6KGo77yJ5pWw5o2u57G755qE6Ieq5a6a5LmJ6KGo5Y2V5Y+C5pWwXHJcblx0dGhpcy5IZWFkX1VJU3R5bGVHZXRJbmZvKCdDR19EZXRhaWwnLHRoaXMuJGRhdGEucGFyYW0uSGVhZF9QYW5lbF9TdHlsZS5JRCk7XHJcblx0dGhpcy5EZXRhaWwxX1VJc3R5bGVHZXRJbmZvKCdDR19EZXRhaWwnLHRoaXMuJGRhdGEucGFyYW0uRGV0YWlsX0xpc3RfUGFuZWwxX1N0eWxlLklEKTtcclxuXHR0aGlzLkRldGFpbDJfVUlzdHlsZUdldEluZm8oJ0NHX0RldGFpbCcsdGhpcy4kZGF0YS5wYXJhbS5EZXRhaWxfTGlzdF9QYW5lbDJfU3R5bGUuSUQpO1xyXG5cdC8v6aG16Z2i5Yid5aeL5YyW6I635Y+W54Sm54K5XHJcblx0Ly8gdGhpcy5mb2N1c01hdGVyaWE9dHJ1ZTsgXHJcbiAgfSxcdFxyXG4gIG1ldGhvZHM6IHtcclxuICAgIGFzeW5jIEhlYWRfVUlTdHlsZUdldEluZm8oY2xhc3NfaWQsc3R5bGVfaWQpeyAgIC8v6I635Y+W6Ieq5a6a5LmJ6KGo5Y2V5qC35byPXHJcblx0XHR2YXIgJHRoaXMgPSB0aGlzO1xyXG5cdFx0dmFyIGRhdGFJbmZvPXtcclxuXHRcdFx0Y2xhc3NfaWQ6Y2xhc3NfaWQsXHJcblx0XHRcdHVpX3N0eWxlX2lkOnN0eWxlX2lkLFxyXG5cdFx0fTtcclxuXHRcdHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdVSVN0eWxlR2V0SW5mbycsZGF0YUluZm8pLnRoZW4ocmV0PT57XHJcblx0XHRcdC8vIGNvbnNvbGUubG9nKHJldCk7XHJcblx0XHRcdGlmIChyZXQuZXJyX2NvZGUgPT0gMCkge1xyXG5cdFx0XHRcdHZhciBzdHlsZWRlZj1cIlwiO1xyXG5cdFx0XHRcdGlmKHJldC5yZXN1bHQuc3R5bGVfZGVmKXtcclxuXHRcdFx0XHQgICAgIC8vbW9ib3gy55qEc3R5bGVfZGVm5pivanNvbuWtl+espuS4slxyXG5cdFx0XHRcdCAgICAgc3R5bGVkZWYgPSByZXQucmVzdWx0LnN0eWxlX2RlZi5yZXBsYWNlKC9cXFxcL2csXCJcIik7XHJcblx0XHRcdFx0ICAgICAvL21vYm94M+eahHN0eWxlX2RlZuaYr2Jhc2U2NOWtl+espuS4slxyXG5cdFx0XHRcdCAgICAgaWYoIXJldC5yZXN1bHQuc3R5bGVfZGVmLmluY2x1ZGVzKCdcIicpKSBzdHlsZWRlZiA9IEJhc2U2NC5kZWNvZGUocmV0LnJlc3VsdC5zdHlsZV9kZWYpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHQkdGhpcy4kZGF0YS5oZWFkX3N0eWxlZGVmID0gcmV0LnJlc3VsdC5zdHlsZV9kZWY/IEpTT04ucGFyc2Uoc3R5bGVkZWYpOiB7fTtcclxuXHRcdFx0XHQvLyB0aGlzLmZvcm0gPSB0aGlzLmhlYWRfc3R5bGVkZWYuZm9ybS5tb2RlbDtcclxuXHRcdFx0XHQvLyBjb25zb2xlLmxvZygkdGhpcy4kZGF0YS5oZWFkX3N0eWxlZGVmKTtcclxuXHRcdFx0XHRcclxuXHRcdFx0fWVsc2V7XHJcblx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor68xXCIsY29udGVudDpyZXQuZXJyX21zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0fVxyXG5cdFx0fSkuY2F0Y2goZXg9PntcclxuXHRcdFx0Ly8gY29uc29sZS5sb2coZXgpO1xyXG5cdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzEuMVwiLGNvbnRlbnQ6ZXguZXJyTXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0fSk7XHJcbiAgICAgICAgXHJcbiAgICB9LFxyXG4gICAgYXN5bmMgRGV0YWlsMV9VSXN0eWxlR2V0SW5mbyhjbGFzc19pZCxzdHlsZV9pZCl7ICAgLy/ojrflj5boh6rlrprkuYnooajljZXmoLflvI9cclxuXHRcdHZhciAkdGhpcyA9IHRoaXM7XHJcblx0XHR2YXIgZGF0YUluZm89e1xyXG5cdFx0XHRjbGFzc19pZDpjbGFzc19pZCxcclxuXHRcdFx0dWlfc3R5bGVfaWQ6c3R5bGVfaWQsXHJcblx0XHR9O1xyXG5cdFx0dGhpcy4kc3RvcmUuZGlzcGF0Y2goJ1VJU3R5bGVHZXRJbmZvJyxkYXRhSW5mbykudGhlbihyZXQ9PntcclxuXHRcdFx0Ly8gY29uc29sZS5sb2cocmV0KTtcclxuXHRcdFx0aWYgKHJldC5lcnJfY29kZSA9PSAwKSB7XHJcblx0XHRcdFx0dmFyIHN0eWxlZGVmPVwiXCI7XHJcblx0XHRcdFx0aWYocmV0LnJlc3VsdC5zdHlsZV9kZWYpe1xyXG5cdFx0XHRcdCAgICAgLy9tb2JveDLnmoRzdHlsZV9kZWbmmK9qc29u5a2X56ym5LiyXHJcblx0XHRcdFx0ICAgICBzdHlsZWRlZiA9IHJldC5yZXN1bHQuc3R5bGVfZGVmLnJlcGxhY2UoL1xcXFwvZyxcIlwiKTtcclxuXHRcdFx0XHQgICAgIC8vbW9ib3gz55qEc3R5bGVfZGVm5pivYmFzZTY05a2X56ym5LiyXHJcblx0XHRcdFx0ICAgICBpZighcmV0LnJlc3VsdC5zdHlsZV9kZWYuaW5jbHVkZXMoJ1wiJykpIHN0eWxlZGVmID0gQmFzZTY0LmRlY29kZShyZXQucmVzdWx0LnN0eWxlX2RlZik7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdCR0aGlzLiRkYXRhLmRldGFpbDFfc3R5bGVkZWYgPSByZXQucmVzdWx0LnN0eWxlX2RlZj8gSlNPTi5wYXJzZShzdHlsZWRlZik6IHt9O1xyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKCR0aGlzLiRkYXRhLmRldGFpbDFfc3R5bGVkZWYpO1xyXG5cdFx0XHRcdC8vICR0aGlzLiRkYXRhLmRldGFpbDFTdHlsZURlZkxpc3QucHVzaCgkdGhpcy4kZGF0YS5kZXRhaWwxX3N0eWxlZGVmKTtcclxuXHRcdFx0XHQvLyBsZXQgYWEgPSBKU09OLnN0cmluZ2lmeSh0aGlzLmRldGFpbDFfc3R5bGVkZWYpO1xyXG5cdFx0XHRcdC8vICR0aGlzLiRkYXRhLmRldGFpbDFTdHlsZURlZkxpc3QucHVzaChKU09OLnBhcnNlKGFhKSk7XHJcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coJHRoaXMuJGRhdGEuZGV0YWlsMVN0eWxlRGVmTGlzdCk7XHJcblx0XHRcdFx0XHJcblx0XHRcdH1lbHNle1xyXG5cdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vMlwiLGNvbnRlbnQ6cmV0LmVycl9tc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdH1cclxuXHRcdH0pLmNhdGNoKGV4PT57XHJcblx0XHRcdC8vIGNvbnNvbGUubG9nKGV4KTtcclxuXHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor68yLjFcIixjb250ZW50OmV4LmVyck1zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdH0pO1xyXG4gICAgICAgIFxyXG4gICAgfSxcclxuICAgIGFzeW5jIERldGFpbDJfVUlzdHlsZUdldEluZm8oY2xhc3NfaWQsc3R5bGVfaWQpeyAgIC8v6I635Y+W6Ieq5a6a5LmJ6KGo5Y2V5qC35byPXHJcblx0XHR2YXIgJHRoaXMgPSB0aGlzO1xyXG5cdFx0dmFyIGRhdGFJbmZvPXtcclxuXHRcdFx0Y2xhc3NfaWQ6Y2xhc3NfaWQsXHJcblx0XHRcdHVpX3N0eWxlX2lkOnN0eWxlX2lkLFxyXG5cdFx0fTtcclxuXHRcdHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdVSVN0eWxlR2V0SW5mbycsZGF0YUluZm8pLnRoZW4ocmV0PT57XHJcblx0XHRcdC8vIGNvbnNvbGUubG9nKHJldCk7XHJcblx0XHRcdGlmIChyZXQuZXJyX2NvZGUgPT0gMCkge1xyXG5cdFx0XHRcdHZhciBzdHlsZWRlZj1cIlwiO1xyXG5cdFx0XHRcdGlmKHJldC5yZXN1bHQuc3R5bGVfZGVmKXtcclxuXHRcdFx0XHQgICAgIC8vbW9ib3gy55qEc3R5bGVfZGVm5pivanNvbuWtl+espuS4slxyXG5cdFx0XHRcdCAgICAgc3R5bGVkZWYgPSByZXQucmVzdWx0LnN0eWxlX2RlZi5yZXBsYWNlKC9cXFxcL2csXCJcIik7XHJcblx0XHRcdFx0ICAgICAvL21vYm94M+eahHN0eWxlX2RlZuaYr2Jhc2U2NOWtl+espuS4slxyXG5cdFx0XHRcdCAgICAgaWYoIXJldC5yZXN1bHQuc3R5bGVfZGVmLmluY2x1ZGVzKCdcIicpKSBzdHlsZWRlZiA9IEJhc2U2NC5kZWNvZGUocmV0LnJlc3VsdC5zdHlsZV9kZWYpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHQkdGhpcy4kZGF0YS5kZXRhaWwyX3N0eWxlZGVmID0gcmV0LnJlc3VsdC5zdHlsZV9kZWY/IEpTT04ucGFyc2Uoc3R5bGVkZWYpOiB7fTtcclxuXHRcdFx0XHQvLyBjb25zb2xlLmxvZygkdGhpcy4kZGF0YS5kZXRhaWwyX3N0eWxlZGVmKTtcclxuXHRcdFx0XHRcclxuXHRcdFx0fWVsc2V7XHJcblx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor68zXCIsY29udGVudDpyZXQuZXJyX21zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0fVxyXG5cdFx0fSkuY2F0Y2goZXg9PntcclxuXHRcdFx0Ly8gY29uc29sZS5sb2coZXgpO1xyXG5cdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzMuMVwiLGNvbnRlbnQ6ZXguZXJyTXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0fSk7XHJcbiAgICAgICAgXHJcbiAgICB9LFxyXG5cdFxyXG5cdG9udGFwKGl0ZW0peyAvL+aJq+eggeWKn+iDvVxyXG5cdFx0Ly8gdmFyICRlbGUgPSBlO1xyXG5cdFx0Ly9jb25zb2xlLmxvZyhlLnRhcmdldClcclxuXHRcdGdldEFwcCgpLm9uU2NhbigocmVzdWx0KT0+e1xyXG5cdFx0XHRjb25zb2xlLmxvZyhyZXN1bHQuZGVjb2RlZGF0YSk7XHJcblx0XHRcdGl0ZW0udmFsdWUgPSByZXN1bHQuZGVjb2RlZGF0YTtcclxuXHRcdFx0dW5pLmhpZGVLZXlib2FyZCgpO1xyXG5cdFx0XHRcclxuXHRcdFx0dmFyICR0aGlzID0gdGhpcztcclxuXHRcdFx0Y29uc29sZS5sb2coaXRlbSk7XHJcblx0XHRcdGlmKGl0ZW0ub2xkdmFsdWUgIT0gaXRlbS52YWx1ZSl7XHJcblx0XHRcdCAgICBpdGVtLm9sZHZhbHVlID0gaXRlbS52YWx1ZTtcclxuXHRcdFx0XHR2YXIgYXR0ciA9IGl0ZW0uZmllbGRJZDtcclxuXHRcdFx0XHR0aGlzLmhlYWRfc3R5bGVkZWYuZm9ybS5tb2RlbFthdHRyXSA9IGl0ZW0udmFsdWU7XHJcblx0XHRcdFx0dmFyIG9uQ2hhbmdlRXZlbnQgPSBpdGVtLmJpbmQub25DaGFuZ2VFdmVudDsgICAvL+WGheWuueWPmOWMluWQjuS6i+S7tlxyXG5cdFx0XHRcdHZhciBvblN1ZmZpeENsaWNrQ2FsbGJhY2tFdmVudCA9IGl0ZW0uYmluZC5vblN1ZmZpeENsaWNrQ2FsbGJhY2tFdmVudDsgICAvL+WQjuWbvuagh+eCueWHu+S6i+S7tlxyXG5cdFx0XHRcdHZhciBvblN1ZmZpeENsaWNrRXZlbnQgPSBpdGVtLmJpbmQub25TdWZmaXhDbGlja0V2ZW50OyAgIC8v5ZCO5Zu+5qCH54K55Ye75Zue6LCDXHJcblx0XHRcdFx0dmFyIGlzZmxhZyA9IGZhbHNlO1xyXG5cdFx0XHRcdFxyXG5cdFx0XHQgICAgaWYob25DaGFuZ2VFdmVudC5pZCl7ICAgLy/lhoXlrrnlj5jljJblkI7kuovku7ZcclxuXHRcdFx0ICAgICAgJHRoaXMub25DaGFuZ2Uob25DaGFuZ2VFdmVudCk7IFxyXG5cdFx0XHQgICAgfVxyXG5cdFx0XHRcdGlmKGl0ZW0udmFsdWUpeyAvL+esrOS4gOS4qui+k+WFpeahhuS4jeS4uuepulxyXG5cdFx0XHRcdFx0JHRoaXMuZm9jdXNNYXRlcmlhID0gdHJ1ZTsgLy/liJ3lp4vljJbvvIznrKzkuozkuKrovpPlhaXmoYZmb2N1c+WxnuaAp1xyXG5cdFx0XHRcdFx0Ly8gc2V0VGltZW91dChmdW5jdGlvbigpe1xyXG5cdFx0XHRcdFx0Ly8gXHQkdGhpcy5mb2N1c01hdGVyaWE9dHJ1ZTsgLy/nrKzkuozkuKrovpPlhaXmoYbojrflj5bnhKbngrlcclxuXHRcdFx0XHRcdFx0c2V0VGltZW91dChmdW5jdGlvbigpe1xyXG5cdFx0XHRcdFx0XHRcdHVuaS5oaWRlS2V5Ym9hcmQoKTtcclxuXHRcdFx0XHRcdFx0fSwxMDApO1xyXG5cdFx0XHRcdFx0Ly8gfSw1MDApO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0ICAgIC8vIGlmKG9uU3VmZml4Q2xpY2tDYWxsYmFja0V2ZW50LmlkKXsgICAvL+WQjuWbvuagh+eCueWHu+S6i+S7tlxyXG5cdFx0XHQgICAgLy8gICB0aGlzLm9uU3VmZml4Q2xpY2sob25TdWZmaXhDbGlja0NhbGxiYWNrRXZlbnQpO1xyXG5cdFx0XHQgICAgLy8gfVxyXG5cdFx0XHQgICAgLy8gaWYob25TdWZmaXhDbGlja0V2ZW50LmlkKXsgICAvL+WQjuWbvuagh+eCueWHu+Wbnuiwg1xyXG5cdFx0XHQgICAgLy8gICB0aGlzLm9uU3VmZml4Q2xpY2tDYWxsYmFjayhvblN1ZmZpeENsaWNrRXZlbnQpO1xyXG5cdFx0XHQgICAgLy8gfVxyXG5cdFx0XHR9XHJcblx0XHR9KVxyXG5cdH0sXHJcblx0b25FbnRlckNoYW5nZShpdGVtKXsgLy/lm57ovabvvIzngrnlh7vmjInpkq7vvIzlj5bmtojoioLngrnkuovku7ZcclxuXHRcdC8vIGNvbnNvbGUubG9nKGl0ZW0pO1xyXG5cdFx0aWYoaXRlbS5vbGR2YWx1ZSAhPSBpdGVtLnZhbHVlKXtcclxuXHRcdCAgICBpdGVtLm9sZHZhbHVlID0gaXRlbS52YWx1ZTtcclxuXHRcdFx0dmFyIGF0dHIgPSBpdGVtLmZpZWxkSWQ7XHJcblx0XHRcdHRoaXMuaGVhZF9zdHlsZWRlZi5mb3JtLm1vZGVsW2F0dHJdID0gaXRlbS52YWx1ZTtcclxuXHRcdFx0dmFyIG9uQ2hhbmdlRXZlbnQgPSBpdGVtLmJpbmQub25DaGFuZ2VFdmVudDsgICAvL+WGheWuueWPmOWMluWQjuS6i+S7tlxyXG5cdFx0XHR2YXIgb25TdWZmaXhDbGlja0NhbGxiYWNrRXZlbnQgPSBpdGVtLmJpbmQub25TdWZmaXhDbGlja0NhbGxiYWNrRXZlbnQ7ICAgLy/lkI7lm77moIfngrnlh7vkuovku7ZcclxuXHRcdFx0dmFyIG9uU3VmZml4Q2xpY2tFdmVudCA9IGl0ZW0uYmluZC5vblN1ZmZpeENsaWNrRXZlbnQ7ICAgLy/lkI7lm77moIfngrnlh7vlm57osINcclxuXHRcdFx0dmFyIGlzZmxhZyA9IGZhbHNlO1xyXG5cdFx0XHRcclxuXHRcdCAgICBpZihvbkNoYW5nZUV2ZW50LmlkKXsgICAvL+WGheWuueWPmOWMluWQjuS6i+S7tlxyXG5cdFx0ICAgICAgdGhpcy5vbkNoYW5nZShvbkNoYW5nZUV2ZW50KTsgXHJcblx0XHQgICAgfVxyXG5cdFx0ICAgIC8vIGlmKG9uU3VmZml4Q2xpY2tDYWxsYmFja0V2ZW50LmlkKXsgICAvL+WQjuWbvuagh+eCueWHu+S6i+S7tlxyXG5cdFx0ICAgIC8vICAgdGhpcy5vblN1ZmZpeENsaWNrKG9uU3VmZml4Q2xpY2tDYWxsYmFja0V2ZW50KTtcclxuXHRcdCAgICAvLyB9XHJcblx0XHQgICAgLy8gaWYob25TdWZmaXhDbGlja0V2ZW50LmlkKXsgICAvL+WQjuWbvuagh+eCueWHu+Wbnuiwg1xyXG5cdFx0ICAgIC8vICAgdGhpcy5vblN1ZmZpeENsaWNrQ2FsbGJhY2sob25TdWZmaXhDbGlja0V2ZW50KTtcclxuXHRcdCAgICAvLyB9XHJcblx0XHR9XHJcblx0fSxcclxuXHQvLyDlhoXlrrnlj5jljJblkI7kuovku7ZcclxuXHRhc3luYyBvbkNoYW5nZShldmVudCkge1xyXG5cdCAgICB0cnkge1xyXG5cdCAgICAgICAgaWYgKGV2ZW50LmlkKSB7XHJcblx0ICAgICAgICAgIHZhciBvYmpfYXR0ciA9IHRoaXMuaGVhZF9zdHlsZWRlZi5mb3JtLm1vZGVsO1xyXG5cdCAgICAgICAgICAvLyBjb25zb2xlLmxvZyhvYmpfYXR0cik7XHJcblx0ICAgICAgICAgIHZhciBpbnB1dF9wYXJhbSA9IEJhc2U2NC5lbmNvZGUoXHJcblx0ICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoXHJcblx0ICAgICAgICAgICAgICBPYmplY3Qua2V5cyhvYmpfYXR0cikubWFwKChhKSA9PiAoe1xyXG5cdCAgICAgICAgICAgICAgICBhdHRyOiBhLFxyXG5cdCAgICAgICAgICAgICAgICB2YWx1ZTogb2JqX2F0dHJbYV0gfHwgXCJcIixcclxuXHQgICAgICAgICAgICAgIH0pKVxyXG5cdCAgICAgICAgICAgIClcclxuXHQgICAgICAgICAgKTtcclxuXHRcdFx0ICB2YXIgJHRoaXMgPSB0aGlzO1xyXG5cdFx0XHQgIHZhciBkYXRhSW5mbz17XHJcblx0ICAgICAgICAgICAgZWRfdHlwZTogMCxcclxuXHRcdFx0XHRzdGFydF90cmFuc2FjdGlvbjogJycsXHJcblx0ICAgICAgICAgICAgY2xhc3NfaWQ6IHRoaXMuJGRhdGEuaGVhZF9zdHlsZWRlZi5mb3JtLmNsc0lkLFxyXG5cdFx0XHRcdGNsYXNzX25hbWU6ICcnLFxyXG5cdCAgICAgICAgICAgIGV2ZW50X2lkOiBldmVudC5pZCxcclxuXHRcdFx0XHRldmVudF9uYW1lOiAnJyxcclxuXHRcdFx0XHRkYXRhX29ial9pZDogJycsXHJcblx0ICAgICAgICAgICAgb2JqX2F0dHI6IG9ial9hdHRyLFxyXG5cdFx0XHRcdHByal9pZDogJycsXHJcblx0XHRcdFx0cmVmX2Nsc19pZDogJycsXHJcblx0XHRcdFx0cmVsX29ial9pZDogJycsXHJcblx0XHRcdFx0dXNlcl9sb2dpbjogJycsXHJcblx0XHRcdFx0ZGF0YV9qc29uOiAnJyxcclxuXHRcdFx0XHRjb21wb3NlX2luZm86ICcnLFxyXG5cdFx0XHRcdGV4dF9pbmZvOiAnJyxcclxuXHRcdFx0XHRnbG9iYWxfYXR0cjogJycsXHJcblx0ICAgICAgICAgICAgaW5wdXRfcGFyYW06IGlucHV0X3BhcmFtLFxyXG5cdCAgICAgICAgICB9O1xyXG5cdFx0XHQgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdydW5DdXN0b21FdmVudCcsZGF0YUluZm8pLnRoZW4ocmV0PT57XHJcblx0XHRcdCAgXHQvLyBjb25zb2xlLmxvZyhyZXQpO1xyXG5cdFx0XHQgIFx0aWYgKHJldC5lcnJfY29kZSA9PSAwKSB7XHJcblx0XHRcdFx0XHR2YXIgcmVzdWx0ID0gcmV0LnJlc3VsdDsgXHJcblx0XHRcdCAgXHRcdGlmKHJlc3VsdC5yZXN1bHRfdHlwZSA9PSAwICYmIHJlc3VsdC5hY3Rpb24pe1xyXG5cdFx0XHQgIFx0XHQgICAgcmVzdWx0LmFjdGlvbi5mb3JFYWNoKGl0ZW09PntcclxuXHRcdFx0ICBcdFx0ICAgICAgICBpZihpdGVtLmFjdGlvbl90eXBlID09IFwiaW5zZXJ0X3N1YnRhYmxlX3BhZ2Vfcm93XCIpeyAvL+eggeebmOS4rVxyXG5cdFx0XHQgIFx0XHQgICAgICAgICAgICB2YXIgdmFsdWUgPSBpdGVtLnZhbHVlO1xyXG5cdFx0XHQgIFx0XHQgICAgICAgICAgICAkdGhpcy52aWV3QWNlaW9uUm93KHZhbHVlKTtcclxuXHRcdFx0ICBcdFx0ICAgICAgICB9IGVsc2UgaWYoaXRlbS5hY3Rpb25fdHlwZSA9PSBcInNldF9zdWJ0YWJsZV9wYWdlX2NvbnRlbnRcIil7ICAvL+W3sueggeebmFxyXG5cdFx0XHQgIFx0XHQgICAgICAgICAgICB2YXIgdmFsdWUgPSBpdGVtLnZhbHVlO1xyXG5cdFx0XHQgIFx0XHQgICAgICAgICAgICBpZih2YWx1ZS5jbGVhciA9PSB0cnVlICYmICR0aGlzLiRkYXRhLmRldGFpbDFTdHlsZURlZkxpc3QubGVuZ3RoPjApeyAvL+WIpOaWreaYr+WQpua4heepuumhteetvuWGheWuuSzmraPlnKjnoIHnm5jmmK/lkKbmnInmlbDmja5cclxuXHRcdFx0XHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGl0bGU6ICfmj5DnpLonLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnRlbnQ6ICfns7vnu5/mo4DmtYvliLDmnInmraPlnKjnoIHnm5jkuK3nmoTotKflk4HvvIznu6fnu63mk43kvZzkvJrmuIXnqbrvvIzmmK/lkKbnu6fnu63vvJ8nLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXMpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChyZXMuY29uZmlybSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAkdGhpcy4kZGF0YS5kZXRhaWwxU3R5bGVEZWZMaXN0PVtdO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAkdGhpcy4kZGF0YS5kZXRhaWwyU3R5bGVEZWZMaXN0PVtdO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAkdGhpcy52aWV3QWNlaW9uQ29udGVudCh2YWx1ZSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKHJlcy5jYW5jZWwpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgJHRoaXMuJGRhdGEuZGV0YWlsMlN0eWxlRGVmTGlzdD1bXTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgJHRoaXMudmlld0FjZWlvbkNvbnRlbnQodmFsdWUpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdCAgXHRcdCAgICAgICAgICAgIH0gZWxzZSB7XHJcblx0XHRcdCAgXHRcdCAgICAgICAgICAgICAgICAkdGhpcy4kZGF0YS5kZXRhaWwyU3R5bGVEZWZMaXN0PVtdO1xyXG5cdFx0XHQgIFx0XHQgICAgICAgICAgICAgICAgJHRoaXMudmlld0FjZWlvbkNvbnRlbnQodmFsdWUpO1xyXG5cdFx0XHQgIFx0XHQgICAgICAgICAgICB9XHJcblx0XHRcdCAgXHRcdCAgICAgICAgfVxyXG5cdFx0XHQgIFx0XHQgICAgfSk7XHJcblx0XHRcdCAgXHRcdH1lbHNle1xyXG5cdFx0XHRcdFx0XHQvLyB0aGlzLmRldGFpbDJTdHlsZURlZkxpc3Q9W107XHJcblx0XHRcdCAgXHRcdCAgICBpZihyZXN1bHQuaW5mbyl7XHJcblx0XHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor680LjNcIixjb250ZW50OnJlc3VsdC5pbmZvLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdCAgXHRcdH1cclxuXHRcdFx0ICBcdFx0XHJcblx0XHRcdCAgXHR9ZWxzZXtcclxuXHRcdFx0ICBcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor680XCIsY29udGVudDpyZXQuZXJyX21zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0ICBcdH1cclxuXHRcdFx0ICB9KS5jYXRjaChleD0+e1xyXG5cdFx0XHQgIFx0Ly8gY29uc29sZS5sb2coZXgpO1xyXG5cdFx0XHQgIFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor680LjFcIixjb250ZW50OmV4LmVyck1zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0ICB9KTtcclxuXHQgICAgICAgIH1cclxuXHQgICAgfSBjYXRjaCAoZXgpIHtcclxuXHQgICAgICAgIHZhciB0aXAgPSB0eXBlb2YgZXggPT0gXCJzdHJpbmdcIiA/IGV4IDogZXgubWVzc2FnZTtcclxuXHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor680LjJcIixjb250ZW50Olwi5omn6KGM4oCc5YaF5a655Y+Y5YyW5ZCO4oCd5LqL5Lu25aSx6LSl77yaXCIgKyB0aXAsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdFxyXG5cdCAgICB9XHJcblx0fSxcclxuXHQvL+WKoOi9veato+WcqOeggeebmOWGheWuuVxyXG5cdHZpZXdBY2Vpb25Sb3coZGF0YSx0eXBlKXtcclxuXHRcdC8vIGNvbnNvbGUubG9nKGRhdGEpO1xyXG5cdCAgICB2YXIgc3R5bGVTdHIgPSBKU09OLnN0cmluZ2lmeSh0aGlzLiRkYXRhLmRldGFpbDFfc3R5bGVkZWYpO1xyXG5cdFx0aWYodHlwZSl7IC8v56Gu5a6a5ZCO6ISa5pys6L+b5YWl5Yqg6L295bey56CB55uY5pWw5o2uXHJcblx0XHQgICAgc3R5bGVTdHIgPSBKU09OLnN0cmluZ2lmeSh0aGlzLiRkYXRhLmRldGFpbDJfc3R5bGVkZWYpO1xyXG5cdFx0fVxyXG5cdCAgICB2YXIgZGV0YWlsU3R5bGUgPSBKU09OLnBhcnNlKHN0eWxlU3RyKTtcclxuXHQgICAgZGF0YS5yb3cuYXR0cnMuZm9yRWFjaChhdHRyPT57XHJcblx0ICAgICAgICBkZXRhaWxTdHlsZS5mb3JtLml0ZW1zLmZvckVhY2goZWxlPT57XHJcblx0ICAgICAgICAgICAgaWYoZWxlLm5hbWUhPSdMYXlvdXQnKXtcclxuXHQgICAgICAgICAgICAgIGlmKGVsZS5maWVsZElkID09IGF0dHIuYXR0cikgZWxlLnZhbHVlID0gYXR0ci52YWx1ZTtcclxuXHQgICAgICAgICAgICB9IGVsc2UgaWYoZWxlLm5hbWU9PSdMYXlvdXQnKXtcclxuXHQgICAgICAgICAgICAgIGVsZS5zZXR0aW5nLmNvbExpc3QuZm9yRWFjaChjb2w9PntcclxuXHQgICAgICAgICAgICAgICAgaWYoY29sKXtcclxuXHQgICAgICAgICAgICAgICAgICBpZihjb2wuZmllbGRJZCA9PSBhdHRyLmF0dHIpIGNvbC52YWx1ZSA9IGF0dHIudmFsdWU7XHJcblx0ICAgICAgICAgICAgICAgIH1cclxuXHQgICAgICAgICAgICAgIH0pO1xyXG5cdCAgICAgICAgICAgIH1cclxuXHQgICAgICAgIH0pO1xyXG5cdCAgICB9KTtcclxuXHRcdGlmKHR5cGUpeyAvL+ehruWumuWQjuiEmuacrOi/m+WFpeWKoOi9veW3sueggeebmOaVsOaNrlxyXG5cdFx0ICAgIGRldGFpbFN0eWxlLmZvcm0ub2JqSWQgPSBkYXRhLnJvdy5pZDtcclxuXHRcdCAgICB0aGlzLiRkYXRhLmRldGFpbDJTdHlsZURlZkxpc3QucHVzaChkZXRhaWxTdHlsZSk7XHJcblx0XHQgICAgLy8gY29uc29sZS5sb2codGhpcy4kZGF0YS5kZXRhaWwyU3R5bGVEZWZMaXN0KTtcclxuXHRcdH1lbHNle1xyXG5cdFx0XHR0aGlzLiRkYXRhLmRldGFpbDFTdHlsZURlZkxpc3QucHVzaChkZXRhaWxTdHlsZSk7XHJcblx0ICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuJGRhdGEuZGV0YWlsMVN0eWxlRGVmTGlzdCk7XHJcblx0XHR9XHJcblx0fSxcclxuXHQvL+WKoOi9veW3sueggeebmOWGheWuuVxyXG5cdHZpZXdBY2Vpb25Db250ZW50KGRhdGEpe1xyXG5cdCAgICBkYXRhLmNvbnRlbnQuZm9yRWFjaChjb250PT57XHJcblx0ICAgICAgICB2YXIgc3R5bGVTdHIgPSBKU09OLnN0cmluZ2lmeSh0aGlzLiRkYXRhLmRldGFpbDJfc3R5bGVkZWYpO1xyXG5cdCAgICAgICAgdmFyIGRldGFpbFN0eWxlID0gSlNPTi5wYXJzZShzdHlsZVN0cik7XHJcblx0ICAgICAgICBkZXRhaWxTdHlsZS5mb3JtLm9iaklkID0gY29udC5pZDtcclxuXHQgICAgICAgIGNvbnQuYXR0cnMuZm9yRWFjaChhdHRyPT57XHJcblx0ICAgICAgICAgIGRldGFpbFN0eWxlLmZvcm0uaXRlbXMuZm9yRWFjaChlbGU9PnsgXHJcblx0ICAgICAgICAgICAgaWYoZWxlLm5hbWUhPSdMYXlvdXQnKXtcclxuXHQgICAgICAgICAgICAgIGlmKGVsZS5maWVsZElkID09IGF0dHIuYXR0cikgZWxlLnZhbHVlID0gYXR0ci52YWx1ZTtcclxuXHQgICAgICAgICAgICB9IGVsc2UgaWYoZWxlLm5hbWU9PSdMYXlvdXQnKXtcclxuXHQgICAgICAgICAgICAgIGVsZS5zZXR0aW5nLmNvbExpc3QuZm9yRWFjaChjb2w9PntcclxuXHQgICAgICAgICAgICAgICAgaWYoY29sKXtcclxuXHQgICAgICAgICAgICAgICAgICBpZihjb2wuZmllbGRJZCA9PSBhdHRyLmF0dHIpIGNvbC52YWx1ZSA9IGF0dHIudmFsdWU7XHJcblx0ICAgICAgICAgICAgICAgIH1cclxuXHQgICAgICAgICAgICAgIH0pO1xyXG5cdCAgICAgICAgICAgIH1cclxuXHQgICAgICAgICAgfSk7XHJcblx0ICAgICAgICB9KTtcclxuXHQgICAgICAgIHRoaXMuJGRhdGEuZGV0YWlsMlN0eWxlRGVmTGlzdC5wdXNoKGRldGFpbFN0eWxlKTtcclxuXHQgICAgfSk7XHJcblx0ICAgICAgLy8gY29uc29sZS5sb2codGhpcy5kZXRhaWwyU3R5bGVEZWZMaXN0KTtcclxuXHR9LFxyXG5cdG9uQ2xpY2tJdGVtKGUpIHsgLy/pgInmi6npobXnrb5cclxuXHRcdC8vIGNvbnNvbGUubG9nKGUpO1xyXG5cdFx0dGhpcy5jdXJyZW50ID0gZS5jdXJyZW50SW5kZXhcclxuXHR9LFxyXG5cdG9uRGV0YWlsMUVudGVyQ2hhbmdlKGl0ZW0peyAgLy/noIHnm5jkuK3moLflvI/lm57ovabkuovku7ZcclxuXHQgICAgY29uc29sZS5sb2coaXRlbSk7XHJcblx0fSxcclxuXHRkZWxJdGVtKGluZGV4KXsgIC8v5Yig6Zmk56CB55uY5Lit5qC35byP6Z2i5p2/XHJcblx0ICAgIHRoaXMuZGV0YWlsMVN0eWxlRGVmTGlzdC5zcGxpY2UoaW5kZXgsMSk7XHJcblx0fSxcclxuICAgIGRlbERhdGFPYmooc3R5bGUsaW5kZXgpeyAgLy/liKDpmaTlt7LnoIHnm5jmlbBcclxuICAgICAgLy8gY29uc29sZS5sb2coc3R5bGUpO1xyXG5cdCAgdmFyICR0aGlzID0gdGhpcztcclxuXHQgIHVuaS5zaG93TW9kYWwoe1xyXG5cdCAgXHR0aXRsZTogJ+aPkOekuicsXHJcblx0ICBcdGNvbnRlbnQ6ICfnoa7lrprliKDpmaTor6Xlt7LnoIHnm5jmlbDmja7vvIEnLFxyXG5cdCAgXHRzdWNjZXNzOiBmdW5jdGlvbiAocmVzKSB7XHJcblx0ICBcdFx0aWYgKHJlcy5jb25maXJtKSB7XHJcblx0XHRcdFx0dmFyIG9iaklEPXN0eWxlLmZvcm0ub2JqSWQ7XHJcblx0XHRcdFx0aWYoIXN0eWxlLmZvcm0ub2JqSWQuaW5jbHVkZXMoJ3snKSkgb2JqSUQgPSAneycrc3R5bGUuZm9ybS5vYmpJZCsnfSc7XHJcblx0XHRcdFx0ICAgICAgICAgIFxyXG5cdFx0XHRcdHZhciBkYXRhSW5mbz17XHJcblx0XHRcdFx0XHRjbGFzc19pZDpzdHlsZS5mb3JtLmNsc0lkLFxyXG5cdFx0XHRcdFx0Y2xhc3NfbmFtZTonJyxcclxuXHRcdFx0XHRcdG9ial9pZDpvYmpJRFxyXG5cdFx0XHRcdH07XHJcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coZGF0YUluZm8pO1xyXG5cdFx0XHRcdCR0aGlzLiRzdG9yZS5kaXNwYXRjaCgnZGF0YU9iakRlbCcsZGF0YUluZm8pLnRoZW4ocmV0PT57XHJcblx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhyZXQpO1xyXG5cdFx0XHRcdFx0aWYgKHJldC5lcnJfY29kZSA9PSAwKSB7XHJcblx0XHRcdFx0XHRcdCR0aGlzLmRldGFpbDJTdHlsZURlZkxpc3Quc3BsaWNlKGluZGV4LDEpO1xyXG5cdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIuaPkOekulwiLGNvbnRlbnQ6XCLliKDpmaTmiJDlip/vvIFcIixzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0XHR9ZWxzZXtcclxuXHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor681XCIsY29udGVudDpyZXQuZXJyX21zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KS5jYXRjaChleD0+e1xyXG5cdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coZXgpO1xyXG5cdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor681LjFcIixjb250ZW50OmV4LmVyck1zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0XHR9KTtcclxuXHQgIFx0XHR9IGVsc2UgaWYgKHJlcy5jYW5jZWwpIHtcclxuXHRcdFx0XHRcclxuXHQgIFx0XHR9XHJcblx0ICBcdH1cclxuXHQgIH0pO1xyXG4gICAgICBcclxuICAgIH0sXHJcblx0XHJcblx0b2soKXsgLy/noa7lrppcclxuXHRcdC8vIHZhciAkdGhpcyA9IHRoaXM7XHJcblx0XHQvLyBjb25zb2xlLmxvZyh0aGlzLiRkYXRhLnBhcmFtLkJlZm9yZV9PS19FdmVudCk7XHJcblx0IC8vICAgIGNvbnNvbGUubG9nKHRoaXMuJGRhdGEucGFyYW0uQWZ0ZXJfT0tfRXZlbnQpO1xyXG5cdCAgICBpZih0aGlzLiRkYXRhLnBhcmFtLkJlZm9yZV9PS19FdmVudCkgLy/mmK/lkKbmnInnoa7lrprliY3kuovku7ZcclxuXHQgICAgICAgIHRoaXMuc2F2YSh0aGlzLiRkYXRhLnBhcmFtLkJlZm9yZV9PS19FdmVudCk7XHJcblx0ICAgIGVsc2UgaWYodGhpcy4kZGF0YS5wYXJhbS5BZnRlcl9PS19FdmVudCkgIC8v5piv5ZCm5pyJ56Gu5a6a5ZCO5LqL5Lu2XHJcblx0ICAgICAgICB0aGlzLnNhdmEodGhpcy4kZGF0YS5wYXJhbS5BZnRlcl9PS19FdmVudCk7XHJcblx0fSxcclxuXHRzYXZhKGV2ZW50KXtcclxuXHRcdHZhciAkdGhpcyA9IHRoaXM7XHJcblx0ICAgIGlmKHRoaXMuJGRhdGEuZGV0YWlsMVN0eWxlRGVmTGlzdC5sZW5ndGg9PTApe1xyXG5cdCAgICAgIHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi5o+Q56S6XCIsY29udGVudDpcIuayoeacieato+WcqOeggeebmOeahOaVsOaNru+8gVwiLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdCAgICAgIHJldHVybiBmYWxzZTtcclxuXHQgICAgfVxyXG5cdCAgICAvL+iOt+WPluihqOWktOWxnuaAp1xyXG5cdCAgICB2YXIgaGVhZF9hdHRyID0ge307XHJcblx0ICAgIHRoaXMuJGRhdGEuaGVhZF9zdHlsZWRlZi5mb3JtLml0ZW1zLmZvckVhY2goaXRlbSA9PiB7XHJcblx0ICAgICAgaGVhZF9hdHRyW2l0ZW0uZmllbGRJZF0gPSBpdGVtLnZhbHVlO1xyXG5cdCAgICB9KTtcclxuXHQgICAgLy8gY29uc29sZS5sb2coaGVhZF9hdHRyKTtcclxuXHQgICAgLy/ojrflj5bmraPlnKjnoIHnm5jlsZ7mgKdcclxuXHQgICAgdmFyIGRldGFpbEF0dHJMaXN0ID0gW107XHJcblx0ICAgIHRoaXMuJGRhdGEuZGV0YWlsMVN0eWxlRGVmTGlzdC5mb3JFYWNoKHN0eWxlPT57XHJcblx0ICAgICAgdmFyIGRldGFpbF9hdHRyPXt9O1xyXG5cdFx0ICBzdHlsZS5mb3JtLml0ZW1zLmZvckVhY2goaXRlbSA9PiB7XHJcblx0ICAgICAgICBpZihpdGVtLm5hbWUgPT0gXCJMYXlvdXRcIil7ICAvL+WIpOaWreaYr+WQpuaYr+agheagj+agvOW8j1xyXG5cdCAgICAgICAgICBpdGVtLnNldHRpbmcuY29sTGlzdC5mb3JFYWNoKGNvbHMgPT4ge1xyXG5cdCAgICAgICAgICAgIGlmKGNvbHMhPW51bGwpIGRldGFpbF9hdHRyW2NvbHMuZmllbGRJZF0gPSBjb2xzLnZhbHVlO1xyXG5cdCAgICAgICAgICB9KTtcclxuXHQgICAgICAgIH1lbHNlXHJcblx0ICAgICAgICAgIGRldGFpbF9hdHRyW2l0ZW0uZmllbGRJZF0gPSBpdGVtLnZhbHVlO1xyXG5cdCAgICAgIH0pO1xyXG5cdCAgICAgIGRldGFpbEF0dHJMaXN0LnB1c2goZGV0YWlsX2F0dHIpO1xyXG5cdCAgICB9KTtcclxuXHQgICAgLy8gY29uc29sZS5sb2coZGV0YWlsQXR0ckxpc3QpO1xyXG5cdCAgICBcclxuXHRcdHZhciBpbnB1dF9wYXJhbSA9IEJhc2U2NC5lbmNvZGUoXHJcblx0XHQgICAgSlNPTi5zdHJpbmdpZnkoXHJcblx0XHQgICAgICBPYmplY3Qua2V5cyhoZWFkX2F0dHIpLm1hcCgoYSkgPT4gKHtcclxuXHRcdCAgICAgICAgYXR0cjogYSxcclxuXHRcdCAgICAgICAgdmFsdWU6IGhlYWRfYXR0clthXSB8fCBcIlwiLFxyXG5cdFx0ICAgICAgfSkpXHJcblx0XHQgICAgKVxyXG5cdFx0KTtcclxuXHRcdCB2YXIganNvbmxpc3Q9W107XHJcblx0XHRkZXRhaWxBdHRyTGlzdC5mb3JFYWNoKGF0dHI9PntcclxuXHRcdCAgICBqc29ubGlzdC5wdXNoKHtcclxuXHRcdCAgICAgIGlkOicnLFxyXG5cdFx0ICAgICAgYXR0cnM6IE9iamVjdC5rZXlzKGF0dHIpLm1hcCgoYSkgPT4gKHtcclxuXHRcdCAgICAgICAgYXR0cjogYSxcclxuXHRcdCAgICAgICAgdmFsdWU6IGF0dHJbYV0gfHwgXCJcIixcclxuXHRcdCAgICAgIH0pKVxyXG5cdFx0ICAgIH0pO1xyXG5cdFx0fSk7XHJcblx0XHQvLyBjb25zb2xlLmxvZyhqc29ubGlzdCk7XHJcblx0XHRqc29ubGlzdC5mb3JFYWNoKGFzeW5jIChqc29uLGtleSk9PntcclxuXHRcdFx0YXdhaXQgJHRoaXMucnVuQ3VzdG9tRXZlbnQoZXZlbnQsaW5wdXRfcGFyYW0sanNvbik7XHJcblx0XHR9KTtcclxuXHR9LFxyXG4gICAgLy/miafooYznoa7lrprohJrmnKxcclxuICAgIGFzeW5jIHJ1bkN1c3RvbUV2ZW50KGV2ZW50LGlucHV0X3BhcmFtLGpzb24pe1xyXG5cdFx0dmFyICR0aGlzID0gdGhpcztcclxuXHRcdHZhciBkYXRhX2pzb24gPSBCYXNlNjQuZW5jb2RlKFxyXG5cdFx0ICAgIEpTT04uc3RyaW5naWZ5KGpzb24pXHJcblx0XHQpO1xyXG5cdFx0dmFyIGRhdGFJbmZvPXtcclxuXHRcdCAgZWRfdHlwZTogMCxcclxuXHRcdCAgc3RhcnRfdHJhbnNhY3Rpb246ICcnLFxyXG5cdFx0ICBjbGFzc19pZDogdGhpcy4kZGF0YS5oZWFkX3N0eWxlZGVmLmZvcm0uY2xzSWQsXHJcblx0XHQgIGNsYXNzX25hbWU6ICcnLFxyXG5cdFx0ICBldmVudF9pZDogdGhpcy4kZGF0YS5wYXJhbS5BZnRlcl9PS19FdmVudC5JRCxcclxuXHRcdCAgZXZlbnRfbmFtZTogJycsXHJcblx0XHQgIGRhdGFfb2JqX2lkOiAnJyxcclxuXHRcdCAgb2JqX2F0dHI6ICcnLFxyXG5cdFx0ICBwcmpfaWQ6ICcnLFxyXG5cdFx0ICByZWZfY2xzX2lkOiAnJyxcclxuXHRcdCAgcmVsX29ial9pZDogJycsXHJcblx0XHQgIHVzZXJfbG9naW46ICcnLFxyXG5cdFx0ICBkYXRhX2pzb246IGRhdGFfanNvbixcclxuXHRcdCAgY29tcG9zZV9pbmZvOiAnJyxcclxuXHRcdCAgZXh0X2luZm86ICcnLFxyXG5cdFx0ICBnbG9iYWxfYXR0cjogJycsXHJcblx0XHQgIGlucHV0X3BhcmFtOiBpbnB1dF9wYXJhbSxcclxuXHRcdH07XHJcblx0XHQvLyBjb25zb2xlLmxvZyhkYXRhSW5mbyk7XHJcblx0XHR0aGlzLiRzdG9yZS5kaXNwYXRjaCgncnVuQ3VzdG9tRXZlbnQnLGRhdGFJbmZvKS50aGVuKHJlcz0+e1xyXG5cdFx0XHRjb25zb2xlLmxvZyhyZXMpO1xyXG5cdFx0XHRpZiAocmVzLmVycl9jb2RlID09IDApIHtcclxuXHRcdFx0XHR2YXIgcmVzdWx0ID0gcmVzLnJlc3VsdDsgXHJcblx0XHRcdFx0aWYocmVzdWx0LnJlc3VsdF90eXBlID09IDApe1xyXG5cdFx0XHRcdCAgaWYocmVzdWx0LmFjdGlvbil7XHJcblx0XHRcdFx0XHRyZXN1bHQuYWN0aW9uLmZvckVhY2goaXRlbT0+e1xyXG5cdFx0XHRcdFx0ICBpZihpdGVtLmFjdGlvbl90eXBlID09IFwiaW5zZXJ0X3N1YnRhYmxlX3BhZ2Vfcm93XCIpeyAvL+eggeebmOS4rVxyXG5cdFx0XHRcdFx0ICAgIHZhciB2YWx1ZSA9IGl0ZW0udmFsdWU7XHJcblx0XHRcdFx0XHQgICAgLy/liqDovb3lt7Lnu4/noIHnm5jmlbDmja5cclxuXHRcdFx0XHQgICAgICAgICR0aGlzLnZpZXdBY2Vpb25Sb3codmFsdWUsJ2FkZCcpO1xyXG5cdFx0XHQgICAgICAgICAgICAvL+a4heepuuadoeeggeWGheWuuVxyXG5cdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5oZWFkX3N0eWxlZGVmLmZvcm0uaXRlbXMuZm9yRWFjaCgoaXRlbSxpbmRleCkgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdGlmKGl0ZW0uZmllbGRJZCAhPSBcIlNfQ05UUl9DT0RFXCIpe1xyXG5cdFx0XHRcdFx0XHRcdCAgaXRlbS52YWx1ZSA9ICcnO1xyXG5cdFx0XHRcdFx0XHQgIFx0ICBpdGVtLm9sZHZhbHVlID0gJyc7XHJcblx0XHRcdFx0XHRcdFx0ICAkdGhpcy4kZGF0YS5oZWFkX3N0eWxlZGVmLmZvcm0ubW9kZWxbaXRlbS5maWVsZElkXSA9ICcnO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdC8v5riF6Zmk5q2j5Zyo56CB55uY5Lit5oiQ5Yqf55qE5pWw5o2uXHJcblx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLmRldGFpbDFTdHlsZURlZkxpc3QuZm9yRWFjaCgoc3R5bGUsaW5kZXgpPT57XHJcblx0XHRcdFx0XHRcdCAgaWYoc3R5bGUuZm9ybS5pdGVtc1swXS5maWVsZElkID09IGpzb24uYXR0cnNbMF0uYXR0ciAmJiBzdHlsZS5mb3JtLml0ZW1zWzBdLnZhbHVlID09IGpzb24uYXR0cnNbMF0udmFsdWUpeyBcclxuXHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5kZXRhaWwxU3R5bGVEZWZMaXN0LnNwbGljZShpbmRleCwxKTtcclxuXHRcdFx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0XHRcdCAgfVxyXG5cdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdCAgICAvLyB0aGlzLmRldGFpbDJTdHlsZURlZkxpc3Q9W107XHJcblx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi5o+Q56S6XCIsY29udGVudDpcIueggeebmOaIkOWKn1wiLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHRcdFx0ICB9XHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHQgIH1lbHNle1xyXG5cdFx0XHRcdFx0aWYoJHRoaXMuJGRhdGEucGFyYW0uQWZ0ZXJfT0tfRXZlbnQuSUQgIT0gZXZlbnQuSUQpeyAvL+WIpOaWreW9k+WJjeS6i+S7tuaYr+WQpuaYr+ehruWumuWQjuS6i+S7tlxyXG5cdFx0XHRcdFx0ICAgICR0aGlzLnNhdmEoJHRoaXMuJGRhdGEucGFyYW0uQWZ0ZXJfT0tfRXZlbnQpOyAvL+aJp+ihjOehruWumuWQjuS6i+S7tlxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdCAgfVxyXG5cdFx0XHRcdH1lbHNle1xyXG5cdFx0XHRcdFx0Ly8gJHRoaXMuJGRhdGEuZGV0YWlsMlN0eWxlRGVmTGlzdD1bXTtcclxuXHRcdFx0XHQgICAgaWYocmVzdWx0LmluZm8pe1xyXG5cdFx0XHRcdFx0ICB1bmkuc2hvd01vZGFsKHt0aXRsZTpcIuaPkOekulwiLGNvbnRlbnQ6cmVzdWx0LmluZm8sc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9ZWxzZXtcclxuXHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzhcIixjb250ZW50OnJlcy5lcnJfbXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHR9XHJcblx0XHR9KS5jYXRjaChleD0+e1xyXG5cdFx0ICAgIGxldCB0aXAgPSB0eXBlb2YgZXggPT0gXCJzdHJpbmdcIiA/IGV4IDogZXguZXJyTXNnO1xyXG5cdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzguMVwiLGNvbnRlbnQ6XCLmiafooYzigJznoa7lrprlkI7igJ3kuovku7blpLHotKXvvJpcIiArIHRpcCxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdH0pO1xyXG5cdH0sXHJcblx0XHJcblx0Y2FuY2VsKGUpeyAvL+WPlua2iFxyXG5cdFx0dW5pLm5hdmlnYXRlQmFjayh7XHJcblx0XHRcdGRlbHRhOjEgLy/ov5Tlm57lsYLmlbDvvIwy5YiZ5LiK5LiK6aG1XHJcblx0XHR9KTtcclxuXHR9LFxyXG4gIH0sXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///136\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 */ 65));\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\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  data: function data() {\n    return {\n      title: '码盘',\n      param: {},\n      focusMateria: false,\n      head_styledef: {\n        form: {\n          items: []\n        }\n      },\n      detail1_styledef: {},\n      detail1StyleDefList: [],\n      detail2_styledef: {},\n      detail2StyleDefList: [],\n      // 分段器数据\n      current: 0,\n      items: ['正在码盘', '已码盘']\n    };\n  },\n  onLoad: function onLoad(options) {\n    // console.log(options);\n    uni.setNavigationBarTitle({\n      title: options.titlename\n    }); //设置顶部标题 \n    this.$data.param = JSON.parse(options.param);\n    // console.log(this.$data.param);\n    //获取CG_Detail(托盘货品表)数据类的自定义表单参数\n    this.Head_UIStyleGetInfo('CG_Detail', this.$data.param.Head_Panel_Style.ID);\n    this.Detail1_UIstyleGetInfo('CG_Detail', this.$data.param.Detail_List_Panel1_Style.ID);\n    this.Detail2_UIstyleGetInfo('CG_Detail', this.$data.param.Detail_List_Panel2_Style.ID);\n    //页面初始化获取焦点\n    // this.focusMateria=true; \n  },\n\n  methods: {\n    Head_UIStyleGetInfo: function Head_UIStyleGetInfo(class_id, style_id) {\n      var _this = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {\n        var $this, dataInfo;\n        return _regenerator.default.wrap(function _callee$(_context) {\n          while (1) {\n            switch (_context.prev = _context.next) {\n              case 0:\n                //获取自定义表单样式\n                $this = _this;\n                dataInfo = {\n                  class_id: class_id,\n                  ui_style_id: style_id\n                };\n                _this.$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的style_def是json字符串\n                      styledef = ret.result.style_def.replace(/\\\\/g, \"\");\n                      //mobox3的style_def是base64字符串\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                  } else {\n                    uni.showModal({\n                      title: \"错误1\",\n                      content: ret.err_msg,\n                      showCancel: false,\n                      confirmText: \"取消\"\n                    });\n                  }\n                }).catch(function (ex) {\n                  // console.log(ex);\n                  uni.showModal({\n                    title: \"错误1.1\",\n                    content: ex.errMsg,\n                    showCancel: false,\n                    confirmText: \"取消\"\n                  });\n                });\n              case 3:\n              case \"end\":\n                return _context.stop();\n            }\n          }\n        }, _callee);\n      }))();\n    },\n    Detail1_UIstyleGetInfo: function Detail1_UIstyleGetInfo(class_id, style_id) {\n      var _this2 = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2() {\n        var $this, dataInfo;\n        return _regenerator.default.wrap(function _callee2$(_context2) {\n          while (1) {\n            switch (_context2.prev = _context2.next) {\n              case 0:\n                //获取自定义表单样式\n                $this = _this2;\n                dataInfo = {\n                  class_id: class_id,\n                  ui_style_id: style_id\n                };\n                _this2.$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的style_def是json字符串\n                      styledef = ret.result.style_def.replace(/\\\\/g, \"\");\n                      //mobox3的style_def是base64字符串\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                    // console.log($this.$data.detail1_styledef);\n                    // $this.$data.detail1StyleDefList.push($this.$data.detail1_styledef);\n                    // let 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: \"错误2\",\n                      content: ret.err_msg,\n                      showCancel: false,\n                      confirmText: \"取消\"\n                    });\n                  }\n                }).catch(function (ex) {\n                  // console.log(ex);\n                  uni.showModal({\n                    title: \"错误2.1\",\n                    content: ex.errMsg,\n                    showCancel: false,\n                    confirmText: \"取消\"\n                  });\n                });\n              case 3:\n              case \"end\":\n                return _context2.stop();\n            }\n          }\n        }, _callee2);\n      }))();\n    },\n    Detail2_UIstyleGetInfo: function Detail2_UIstyleGetInfo(class_id, style_id) {\n      var _this3 = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3() {\n        var $this, dataInfo;\n        return _regenerator.default.wrap(function _callee3$(_context3) {\n          while (1) {\n            switch (_context3.prev = _context3.next) {\n              case 0:\n                //获取自定义表单样式\n                $this = _this3;\n                dataInfo = {\n                  class_id: class_id,\n                  ui_style_id: style_id\n                };\n                _this3.$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的style_def是json字符串\n                      styledef = ret.result.style_def.replace(/\\\\/g, \"\");\n                      //mobox3的style_def是base64字符串\n                      if (!ret.result.style_def.includes('\"')) styledef = _base.default.decode(ret.result.style_def);\n                    }\n                    $this.$data.detail2_styledef = ret.result.style_def ? JSON.parse(styledef) : {};\n                    // console.log($this.$data.detail2_styledef);\n                  } else {\n                    uni.showModal({\n                      title: \"错误3\",\n                      content: ret.err_msg,\n                      showCancel: false,\n                      confirmText: \"取消\"\n                    });\n                  }\n                }).catch(function (ex) {\n                  // console.log(ex);\n                  uni.showModal({\n                    title: \"错误3.1\",\n                    content: ex.errMsg,\n                    showCancel: false,\n                    confirmText: \"取消\"\n                  });\n                });\n              case 3:\n              case \"end\":\n                return _context3.stop();\n            }\n          }\n        }, _callee3);\n      }))();\n    },\n    ontap: function ontap(item) {\n      var _this4 = this;\n      //扫码功能\n      // var $ele = e;\n      //console.log(e.target)\n      getApp().onScan(function (result) {\n        __f__(\"log\", result.decodedata, \" at pages/modal/5600.vue:462\");\n        item.value = result.decodedata;\n        uni.hideKeyboard();\n        var $this = _this4;\n        __f__(\"log\", item, \" at pages/modal/5600.vue:467\");\n        if (item.oldvalue != item.value) {\n          item.oldvalue = item.value;\n          var attr = item.fieldId;\n          _this4.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          }\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            }, 100);\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        }\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 _this5 = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4() {\n        var obj_attr, input_param, $this, dataInfo, tip;\n        return _regenerator.default.wrap(function _callee4$(_context4) {\n          while (1) {\n            switch (_context4.prev = _context4.next) {\n              case 0:\n                try {\n                  if (event.id) {\n                    obj_attr = _this5.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 = _this5;\n                    dataInfo = {\n                      ed_type: 0,\n                      start_transaction: '',\n                      class_id: _this5.$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                    _this5.$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) uni.showModal({\n                            title: '提示',\n                            content: tip,\n                            showCancel: false,\n                            confirmText: \"取消\"\n                          });else uni.showModal({\n                            title: '提示',\n                            content: tip + ',提示:' + result.ret,\n                            showCancel: false,\n                            confirmText: \"取消\"\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: '提示',\n                            content: _tip,\n                            showCancel: false,\n                            confirmText: \"取消\"\n                          });\n                          if (result.result_type == 0 && result.action) {\n                            result.action.forEach(function (item) {\n                              if (item.action_type == \"insert_subtable_page_row\") {\n                                //码盘中\n                                var value = item.value;\n                                $this.viewAceionRow(value);\n                              } else if (item.action_type == \"set_subtable_page_content\") {\n                                //已码盘\n                                var value = item.value;\n                                if (value.clear == true && $this.$data.detail1StyleDefList.length > 0) {\n                                  //判断是否清空页签内容,正在码盘是否有数据\n                                  uni.showModal({\n                                    title: '提示',\n                                    content: '系统检测到有正在码盘中的货品,继续操作会清空,是否继续?',\n                                    success: function success(res) {\n                                      if (res.confirm) {\n                                        $this.$data.detail1StyleDefList = [];\n                                        $this.$data.detail2StyleDefList = [];\n                                        $this.viewAceionContent(value);\n                                      } else if (res.cancel) {\n                                        $this.$data.detail2StyleDefList = [];\n                                        $this.viewAceionContent(value);\n                                      }\n                                    }\n                                  });\n                                } else {\n                                  $this.$data.detail2StyleDefList = [];\n                                  $this.viewAceionContent(value);\n                                }\n                              }\n                            });\n                          } else {\n                            // this.detail2StyleDefList=[];\n                            if (result.info) {\n                              uni.showModal({\n                                title: \"错误4.3\",\n                                content: result.info,\n                                showCancel: false,\n                                confirmText: \"取消\"\n                              });\n                            }\n                          }\n                        }\n                      } else {\n                        uni.showModal({\n                          title: \"错误4\",\n                          content: ret.err_msg,\n                          showCancel: false,\n                          confirmText: \"取消\"\n                        });\n                      }\n                    }).catch(function (ex) {\n                      // console.log(ex);\n                      uni.showModal({\n                        title: \"错误4.1\",\n                        content: ex.errMsg,\n                        showCancel: false,\n                        confirmText: \"取消\"\n                      });\n                    });\n                  }\n                } catch (ex) {\n                  tip = typeof ex == \"string\" ? ex : ex.message;\n                  uni.showModal({\n                    title: \"错误4.2\",\n                    content: \"执行“内容变化后”事件失败:\" + tip,\n                    showCancel: false,\n                    confirmText: \"取消\"\n                  });\n                }\n              case 1:\n              case \"end\":\n                return _context4.stop();\n            }\n          }\n        }, _callee4);\n      }))();\n    },\n    //加载正在码盘内容\n    viewAceionRow: function viewAceionRow(data, type) {\n      // console.log(data);\n      var styleStr = JSON.stringify(this.$data.detail1_styledef);\n      if (type) {\n        //确定后脚本进入加载已码盘数据\n        styleStr = JSON.stringify(this.$data.detail2_styledef);\n      }\n      var detailStyle = JSON.parse(styleStr);\n      data.row.attrs.forEach(function (attr) {\n        detailStyle.form.items.forEach(function (ele) {\n          if (ele.name != 'Layout') {\n            if (ele.fieldId == attr.attr) 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.attr) col.value = attr.value;\n              }\n            });\n          }\n        });\n      });\n      if (type) {\n        //确定后脚本进入加载已码盘数据\n        detailStyle.form.objId = data.row.id;\n        this.$data.detail2StyleDefList.push(detailStyle);\n        // console.log(this.$data.detail2StyleDefList);\n      } else {\n        detailStyle.form.attrs = data.row.attrs;\n        this.$data.detail1StyleDefList.push(detailStyle);\n        // console.log(this.$data.detail1StyleDefList);\n      }\n    },\n    //加载已码盘内容\n    viewAceionContent: function viewAceionContent(data) {\n      var _this6 = this;\n      data.content.forEach(function (cont) {\n        var styleStr = JSON.stringify(_this6.$data.detail2_styledef);\n        var detailStyle = JSON.parse(styleStr);\n        detailStyle.form.objId = cont.id;\n        cont.attrs.forEach(function (attr) {\n          detailStyle.form.items.forEach(function (ele) {\n            if (ele.name != 'Layout') {\n              if (ele.fieldId == attr.attr) 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.attr) col.value = attr.value;\n                }\n              });\n            }\n          });\n        });\n        _this6.$data.detail2StyleDefList.push(detailStyle);\n      });\n      // console.log(this.detail2StyleDefList);\n    },\n    onClickItem: function onClickItem(e) {\n      //选择页签\n      // console.log(e);\n      this.current = e.currentIndex;\n    },\n    onDetail1EnterChange: function onDetail1EnterChange(item) {\n      //码盘中样式回车事件\n      __f__(\"log\", item, \" at pages/modal/5600.vue:676\");\n    },\n    delItem: function delItem(index) {\n      //删除码盘中样式面板\n      this.detail1StyleDefList.splice(index, 1);\n    },\n    delDataObj: function delDataObj(style, index) {\n      //删除已码盘数\n      // console.log(style);\n      var $this = this;\n      uni.showModal({\n        title: '提示',\n        content: '确定删除该已码盘数据!',\n        success: function success(res) {\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: style.form.clsId,\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                $this.detail2StyleDefList.splice(index, 1);\n                uni.showModal({\n                  title: \"提示\",\n                  content: \"删除成功!\",\n                  showCancel: false,\n                  confirmText: \"取消\"\n                });\n              } else {\n                uni.showModal({\n                  title: \"错误5\",\n                  content: ret.err_msg,\n                  showCancel: false,\n                  confirmText: \"取消\"\n                });\n              }\n            }).catch(function (ex) {\n              // console.log(ex);\n              uni.showModal({\n                title: \"错误5.1\",\n                content: ex.errMsg,\n                showCancel: false,\n                confirmText: \"取消\"\n              });\n            });\n          } else if (res.cancel) {}\n        }\n      });\n    },\n    ok: function ok() {\n      //确定\n      // var $this = this;\n      // console.log(this.$data.param.Before_OK_Event);\n      //    console.log(this.$data.param.After_OK_Event);\n      if (this.$data.param.Before_OK_Event)\n        //是否有确定前事件\n        this.sava(this.$data.param.Before_OK_Event);else if (this.$data.param.After_OK_Event)\n        //是否有确定后事件\n        this.sava(this.$data.param.After_OK_Event);\n    },\n    sava: function sava(event) {\n      var $this = this;\n      if (this.$data.detail1StyleDefList.length == 0) {\n        uni.showModal({\n          title: \"提示\",\n          content: \"没有正在码盘的数据!\",\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n        return false;\n      }\n      //获取表头属性\n      var head_attr = {};\n      this.$data.head_styledef.form.items.forEach(function (item) {\n        head_attr[item.fieldId] = item.value;\n      });\n      // console.log(head_attr);\n      //获取正在码盘属性\n      var detailAttrList = [];\n      this.$data.detail1StyleDefList.forEach(function (style) {\n        var detail_attr = {};\n        style.form.items.forEach(function (item) {\n          if (item.name == \"Layout\") {\n            //判断是否是栅栏格式\n            item.setting.colList.forEach(function (cols) {\n              if (cols != null) detail_attr[cols.fieldId] = cols.value;\n            });\n          } else detail_attr[item.fieldId] = item.value;\n        });\n        detailAttrList.push(detail_attr);\n      });\n      // console.log(detailAttrList);\n      //获取正在码盘里没有显示的字段\n      this.$data.detail1StyleDefList.forEach(function (style) {\n        style.form.attrs.forEach(function (attr) {\n          for (var key in detailAttrList) {\n            var keys = Object.keys(detailAttrList[key]);\n            var isflag = true;\n            keys.forEach(function (ele) {\n              if (ele == attr.attr) isflag = false;\n            });\n            if (isflag) {\n              detailAttrList[attr.attr] = attr.value;\n            }\n          }\n        });\n      });\n      // console.log(detailAttrList);\n      //    return;\n      var input_param = _base.default.encode(JSON.stringify(Object.keys(head_attr).map(function (a) {\n        return {\n          attr: a,\n          value: head_attr[a] || \"\"\n        };\n      })));\n      var jsonlist = [];\n      detailAttrList.forEach(function (attr) {\n        jsonlist.push({\n          id: '',\n          attrs: Object.keys(attr).map(function (a) {\n            return {\n              attr: a,\n              value: attr[a] || \"\"\n            };\n          })\n        });\n      });\n      // console.log(jsonlist);\n      jsonlist.forEach( /*#__PURE__*/function () {\n        var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee5(json, key) {\n          return _regenerator.default.wrap(function _callee5$(_context5) {\n            while (1) {\n              switch (_context5.prev = _context5.next) {\n                case 0:\n                  _context5.next = 2;\n                  return $this.runCustomEvent(event, input_param, json);\n                case 2:\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    //执行确定脚本\n    runCustomEvent: function runCustomEvent(event, input_param, json) {\n      var _this7 = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee6() {\n        var $this, data_json, dataInfo;\n        return _regenerator.default.wrap(function _callee6$(_context6) {\n          while (1) {\n            switch (_context6.prev = _context6.next) {\n              case 0:\n                $this = _this7;\n                data_json = _base.default.encode(JSON.stringify(json));\n                dataInfo = {\n                  ed_type: 0,\n                  start_transaction: '',\n                  class_id: _this7.$data.head_styledef.form.clsId,\n                  class_name: '',\n                  event_id: _this7.$data.param.After_OK_Event.ID,\n                  event_name: '',\n                  data_obj_id: '',\n                  obj_attr: '',\n                  prj_id: '',\n                  ref_cls_id: '',\n                  rel_obj_id: '',\n                  user_login: '',\n                  data_json: data_json,\n                  compose_info: '',\n                  ext_info: '',\n                  global_attr: '',\n                  input_param: input_param\n                }; // console.log(dataInfo);\n                _this7.$store.dispatch('runCustomEvent', dataInfo).then(function (res) {\n                  __f__(\"log\", res, \" at pages/modal/5600.vue:822\");\n                  if (res.err_code == 0) {\n                    var result = res.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) uni.showModal({\n                        title: '提示',\n                        content: tip,\n                        showCancel: false,\n                        confirmText: \"取消\"\n                      });else uni.showModal({\n                        title: '提示',\n                        content: tip + ',提示:' + result.ret,\n                        showCancel: false,\n                        confirmText: \"取消\"\n                      });\n                      return false;\n                    } else {\n                      var _tip2 = result.info ? typeof result.info == 'string' ? result.info : result.info.join('<br/>') : '';\n                      if (_tip2) uni.showModal({\n                        title: '提示',\n                        content: _tip2,\n                        showCancel: false,\n                        confirmText: \"取消\"\n                      });\n                      if (result.result_type == 0) {\n                        if (result.action) {\n                          result.action.forEach(function (item) {\n                            if (item.action_type == \"insert_subtable_page_row\") {\n                              //码盘中\n                              var value = item.value;\n                              //加载已经码盘数据\n                              $this.viewAceionRow(value, 'add');\n                              //清空条码内容\n                              $this.$data.head_styledef.form.items.forEach(function (item, index) {\n                                if (item.fieldId != \"S_CNTR_CODE\") {\n                                  item.value = '';\n                                  item.oldvalue = '';\n                                  $this.$data.head_styledef.form.model[item.fieldId] = '';\n                                }\n                              });\n                              //清除正在码盘中成功的数据\n                              $this.$data.detail1StyleDefList.forEach(function (style, index) {\n                                if (style.form.items[0].fieldId == json.attrs[0].attr && style.form.items[0].value == json.attrs[0].value) {\n                                  $this.$data.detail1StyleDefList.splice(index, 1);\n                                  return;\n                                }\n                              });\n                              // this.detail2StyleDefList=[];\n                              uni.showModal({\n                                title: \"提示\",\n                                content: \"码盘成功\",\n                                showCancel: false,\n                                confirmText: \"取消\"\n                              });\n                            }\n                          });\n                        } else {\n                          if ($this.$data.param.After_OK_Event.ID != event.ID) {\n                            //判断当前事件是否是确定后事件\n                            $this.sava($this.$data.param.After_OK_Event); //执行确定后事件\n                          }\n                        }\n                      } else {\n                        // $this.$data.detail2StyleDefList=[];\n                        if (result.info) {\n                          uni.showModal({\n                            title: \"提示\",\n                            content: result.info,\n                            showCancel: false,\n                            confirmText: \"取消\"\n                          });\n                        }\n                      }\n                    }\n                  } else {\n                    uni.showModal({\n                      title: \"错误8\",\n                      content: res.err_msg,\n                      showCancel: false,\n                      confirmText: \"取消\"\n                    });\n                  }\n                }).catch(function (ex) {\n                  var tip = typeof ex == \"string\" ? ex : ex.errMsg;\n                  uni.showModal({\n                    title: \"错误8.1\",\n                    content: \"执行“确定后”事件失败:\" + tip,\n                    showCancel: false,\n                    confirmText: \"取消\"\n                  });\n                });\n              case 4:\n              case \"end\":\n                return _context6.stop();\n            }\n          }\n        }, _callee6);\n      }))();\n    },\n    cancel: function cancel(e) {\n      //取消\n      uni.navigateBack({\n        delta: 1 //返回层数,2则上上页\n      });\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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vcGFnZXMvbW9kYWwvNTYwMC52dWUiXSwibmFtZXMiOlsibW9kdWxlcyIsIkJhc2U2NCIsImRhdGEiLCJ0aXRsZSIsInBhcmFtIiwiZm9jdXNNYXRlcmlhIiwiaGVhZF9zdHlsZWRlZiIsImZvcm0iLCJpdGVtcyIsImRldGFpbDFfc3R5bGVkZWYiLCJkZXRhaWwxU3R5bGVEZWZMaXN0IiwiZGV0YWlsMl9zdHlsZWRlZiIsImRldGFpbDJTdHlsZURlZkxpc3QiLCJjdXJyZW50Iiwib25Mb2FkIiwidW5pIiwibWV0aG9kcyIsIkhlYWRfVUlTdHlsZUdldEluZm8iLCIkdGhpcyIsImRhdGFJbmZvIiwiY2xhc3NfaWQiLCJ1aV9zdHlsZV9pZCIsInN0eWxlZGVmIiwiY29udGVudCIsInNob3dDYW5jZWwiLCJjb25maXJtVGV4dCIsIkRldGFpbDFfVUlzdHlsZUdldEluZm8iLCJEZXRhaWwyX1VJc3R5bGVHZXRJbmZvIiwib250YXAiLCJnZXRBcHAiLCJpdGVtIiwic2V0VGltZW91dCIsIm9uRW50ZXJDaGFuZ2UiLCJvbkNoYW5nZSIsIm9ial9hdHRyIiwiaW5wdXRfcGFyYW0iLCJKU09OIiwiT2JqZWN0IiwiYXR0ciIsInZhbHVlIiwiZWRfdHlwZSIsInN0YXJ0X3RyYW5zYWN0aW9uIiwiY2xhc3NfbmFtZSIsImV2ZW50X2lkIiwiZXZlbnRfbmFtZSIsImRhdGFfb2JqX2lkIiwicHJqX2lkIiwicmVmX2Nsc19pZCIsInJlbF9vYmpfaWQiLCJ1c2VyX2xvZ2luIiwiZGF0YV9qc29uIiwiY29tcG9zZV9pbmZvIiwiZXh0X2luZm8iLCJnbG9iYWxfYXR0ciIsInJlc3VsdCIsInN1Y2Nlc3MiLCJ0aXAiLCJ2aWV3QWNlaW9uUm93Iiwic3R5bGVTdHIiLCJkZXRhaWxTdHlsZSIsImVsZSIsInZpZXdBY2Vpb25Db250ZW50IiwiY29udCIsIm9uQ2xpY2tJdGVtIiwib25EZXRhaWwxRW50ZXJDaGFuZ2UiLCJkZWxJdGVtIiwiZGVsRGF0YU9iaiIsIm9ial9pZCIsIm9rIiwic2F2YSIsImhlYWRfYXR0ciIsInN0eWxlIiwiZGV0YWlsX2F0dHIiLCJkZXRhaWxBdHRyTGlzdCIsImtleXMiLCJqc29ubGlzdCIsImlkIiwiYXR0cnMiLCJydW5DdXN0b21FdmVudCIsImNhbmNlbCIsImRlbHRhIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUEwVUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztlQUNBO0VBQ0FBO0lBQ0FDO0VBQ0E7RUFDQUM7SUFDQTtNQUNBQztNQUNBQztNQUNBQztNQUNBQztRQUNBQztVQUNBQztRQUNBO01BQ0E7TUFDQUM7TUFDQUM7TUFDQUM7TUFDQUM7TUFDQTtNQUNBQztNQUNBTDtJQUNBO0VBQ0E7RUFDQU07SUFDQTtJQUNBQztNQUFBWjtJQUFBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtFQUNBOztFQUNBYTtJQUNBQztNQUFBO01BQUE7UUFBQTtRQUFBO1VBQUE7WUFBQTtjQUFBO2dCQUFBO2dCQUNBQztnQkFDQUM7a0JBQ0FDO2tCQUNBQztnQkFDQTtnQkFDQTtrQkFDQTtrQkFDQTtvQkFDQTtvQkFDQTtzQkFDQTtzQkFDQUM7c0JBQ0E7c0JBQ0E7b0JBQ0E7b0JBQ0FKO29CQUNBO29CQUNBO2tCQUVBO29CQUNBSDtzQkFBQVo7c0JBQUFvQjtzQkFBQUM7c0JBQUFDO29CQUFBO2tCQUNBO2dCQUNBO2tCQUNBO2tCQUNBVjtvQkFBQVo7b0JBQUFvQjtvQkFBQUM7b0JBQUFDO2tCQUFBO2dCQUNBO2NBQUE7Y0FBQTtnQkFBQTtZQUFBO1VBQUE7UUFBQTtNQUFBO0lBRUE7SUFDQUM7TUFBQTtNQUFBO1FBQUE7UUFBQTtVQUFBO1lBQUE7Y0FBQTtnQkFBQTtnQkFDQVI7Z0JBQ0FDO2tCQUNBQztrQkFDQUM7Z0JBQ0E7Z0JBQ0E7a0JBQ0E7a0JBQ0E7b0JBQ0E7b0JBQ0E7c0JBQ0E7c0JBQ0FDO3NCQUNBO3NCQUNBO29CQUNBO29CQUNBSjtvQkFDQTtvQkFDQTtvQkFDQTtvQkFDQTtvQkFDQTtrQkFFQTtvQkFDQUg7c0JBQUFaO3NCQUFBb0I7c0JBQUFDO3NCQUFBQztvQkFBQTtrQkFDQTtnQkFDQTtrQkFDQTtrQkFDQVY7b0JBQUFaO29CQUFBb0I7b0JBQUFDO29CQUFBQztrQkFBQTtnQkFDQTtjQUFBO2NBQUE7Z0JBQUE7WUFBQTtVQUFBO1FBQUE7TUFBQTtJQUVBO0lBQ0FFO01BQUE7TUFBQTtRQUFBO1FBQUE7VUFBQTtZQUFBO2NBQUE7Z0JBQUE7Z0JBQ0FUO2dCQUNBQztrQkFDQUM7a0JBQ0FDO2dCQUNBO2dCQUNBO2tCQUNBO2tCQUNBO29CQUNBO29CQUNBO3NCQUNBO3NCQUNBQztzQkFDQTtzQkFDQTtvQkFDQTtvQkFDQUo7b0JBQ0E7a0JBRUE7b0JBQ0FIO3NCQUFBWjtzQkFBQW9CO3NCQUFBQztzQkFBQUM7b0JBQUE7a0JBQ0E7Z0JBQ0E7a0JBQ0E7a0JBQ0FWO29CQUFBWjtvQkFBQW9CO29CQUFBQztvQkFBQUM7a0JBQUE7Z0JBQ0E7Y0FBQTtjQUFBO2dCQUFBO1lBQUE7VUFBQTtRQUFBO01BQUE7SUFFQTtJQUVBRztNQUFBO01BQUE7TUFDQTtNQUNBO01BQ0FDO1FBQ0E7UUFDQUM7UUFDQWY7UUFFQTtRQUNBO1FBQ0E7VUFDQWU7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFFQTtZQUFBO1lBQ0FaO1VBQ0E7VUFDQTtZQUFBO1lBQ0FBO1lB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QUFBQztzQkFBQSxRQUNBVjt3QkFBQVo7d0JBQUFvQjt3QkFBQUM7d0JBQUFDO3NCQUFBO3NCQUNBO29CQUNBO3NCQUNBO3NCQUNBO3dCQUFBdEI7d0JBQUFvQjt3QkFBQUM7d0JBQUFDO3NCQUFBO3NCQUVBO3dCQUNBOzBCQUNBNkI7NEJBQ0E7OEJBQUE7OEJBQ0E7OEJBQ0E7OEJBQ0FwQzs4QkFDQTs4QkFDQUE7Z0NBQ0E7a0NBQ0FZO2tDQUNBQTtrQ0FDQVo7Z0NBQ0E7OEJBQ0E7OEJBQ0E7OEJBQ0FBO2dDQUNBO2tDQUNBQTtrQ0FDQTtnQ0FDQTs4QkFDQTs4QkFDQTs4QkFDQUg7Z0NBQUFaO2dDQUFBb0I7Z0NBQUFDO2dDQUFBQzs4QkFBQTs0QkFDQTswQkFDQTt3QkFDQTswQkFDQTs0QkFBQTs0QkFDQVA7MEJBQ0E7d0JBQ0E7c0JBQ0E7d0JBQ0E7d0JBQ0E7MEJBQ0FIOzRCQUFBWjs0QkFBQW9COzRCQUFBQzs0QkFBQUM7MEJBQUE7d0JBQ0E7c0JBQ0E7b0JBQ0E7a0JBQ0E7b0JBQ0FWO3NCQUFBWjtzQkFBQW9CO3NCQUFBQztzQkFBQUM7b0JBQUE7a0JBQ0E7Z0JBQ0E7a0JBQ0E7a0JBQ0FWO29CQUFBWjtvQkFBQW9CO29CQUFBQztvQkFBQUM7a0JBQUE7Z0JBQ0E7Y0FBQTtjQUFBO2dCQUFBO1lBQUE7VUFBQTtRQUFBO01BQUE7SUFDQTtJQUVBc0Q7TUFBQTtNQUNBaEU7UUFDQWlFO01BQ0E7SUFDQTtFQUNBO0FBQ0E7QUFBQSwyQiIsImZpbGUiOiIxMzYuanMiLCJzb3VyY2VzQ29udGVudCI6WyI8c3R5bGU+XHJcbi52LWhlYWRTdHlsZSAudHh0X3RpdGxle1xyXG4gIGZvbnQtc2l6ZTogMzRycHg7XHJcbiAgdGV4dC1hbGlnbjogcmlnaHQ7XHJcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG4gIHZlcnRpY2FsLWFsaWduOiAxMnB4O1xyXG59XHJcbi52LWhlYWRTdHlsZSBpbnB1dHtcclxuXHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcblx0LyogYm9yZGVyOiAxcHggc29saWQgI2Q1ZDVkNTsgKi9cclxuXHQvKiB3aWR0aDogNjUlOyAqL1xyXG5cdHdpZHRoOiA4NSU7ICAgIFxyXG5cdGhlaWdodDogNTJycHg7XG4gICAgbGluZS1oZWlnaHQ6IDM0cnB4O1xyXG5cdGJhY2tncm91bmQ6ICNGRkY7XHJcblx0Ym9yZGVyLXJhZGl1czogMCAhaW1wb3J0YW50O1xyXG5cdGNvbG9yOiAjMmQ4Y2YwO1xyXG5cdHBhZGRpbmc6IDEwcnB4IDhycHggMTJycHg7XHJcblx0Zm9udC1zaXplOiAzNHJweDtcclxuXHRmb250LWZhbWlseTogaW5oZXJpdDtcclxuXHRib3gtc2hhZG93OiBub25lICFpbXBvcnRhbnQ7XHJcblx0dHJhbnNpdGlvbi1kdXJhdGlvbjogMC4xcztcclxuXHRtYXJnaW4tdG9wOiA0cnB4O1xyXG59XHJcbi52LWhlYWRTdHlsZSBpbnB1dDo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciB7XHJcblx0Zm9udC1zaXplOiAxMnJweDtcclxufVxyXG4uaW5wdXQtd3JhcHBlcntcclxuXHRib3JkZXI6IDFweCBzb2xpZCAjZDVkNWQ1O1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICB3aWR0aDogNjUlOyAgICBcclxuXHRsaW5lLWhlaWdodDogMjJycHg7XG59XHJcbltudnVlXSB1bmktdmlldyB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGJvcmRlcjogMCBzb2xpZCAjMDAwO1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG59XHJcbi51bmktaW5wdXQge1xyXG5cdC8qIGJvcmRlcjogbm9uZTsgKi9cbn1cclxuLnVuaS1pY29ue1xyXG5cdC8qIGJvcmRlcjogMXB4IHNvbGlkIHJlZDsgKi9cclxuXHR3aWR0aDogOCU7XG4gICAgZm9udC1mYW1pbHk6IHVuaWljb25zO1xuICAgIGZvbnQtc2l6ZTogNDBycHg7XG4gICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgLyogd2lkdGg6IDQ4cnB4OyAqL1xuICAgIGhlaWdodDogNDhycHg7XG4gICAgbGluZS1oZWlnaHQ6IDQ4cnB4O1xyXG5cdGNvbG9yOiAjMmQ4Y2YwO1xyXG4gICAgY3Vyc29yOiBwb2ludGVyO1xyXG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG5cdHZlcnRpY2FsLWFsaWduOiAxOHJweDtcbn1cclxuLnZpZXctY29udGVudHtcclxuXHRtaW4taGVpZ2h0OiA3NjBycHg7XHJcblx0LyogYm9yZGVyOjFweCBzb2xpZCByZWQ7ICovXHJcbn1cclxuLmR2LXBhbmVse1xuICAgIGJhY2tncm91bmQtY29sb3I6I0VBRkVEOTtcbiAgICBwYWRkaW5nOiAyMHJweCAyMHJweCA0cnB4IDBweDtcbiAgICBib3JkZXItcmFkaXVzOiAxMnJweDtcbiAgICBtYXJnaW4tYm90dG9tOiAyMHJweDtcclxuXHR0ZXh0LWFsaWduOiByaWdodDtcclxufVxuLmR2LXBhbmVsLWlucHV0e1xyXG5cdHdpZHRoOiAxMDAlO1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuXHR0ZXh0LWFsaWduOiBsZWZ0O1xufVxyXG4uZHYtcGFuZWwgLnR4dF90aXRsZXtcclxuICBmb250LXNpemU6IDM0cnB4O1xyXG4gIHRleHQtYWxpZ246IHJpZ2h0O1xyXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxufVxyXG5cclxuLmR2LXBhbmVsIGlucHV0e1xyXG5cdHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XHJcblx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG5cdGJvcmRlcjogMXB4IHNvbGlkICNkNWQ1ZDU7XHJcblx0d2lkdGg6IDY4JTsgXHJcblx0aGVpZ2h0OiA1MnJweDtcbiAgICBsaW5lLWhlaWdodDogMzRycHg7XHJcblx0YmFja2dyb3VuZDogI0ZGRjtcclxuXHRib3JkZXItcmFkaXVzOiA3cHggIWltcG9ydGFudDtcclxuXHRjb2xvcjogIzJkOGNmMDtcclxuXHRwYWRkaW5nOiA2cnB4IDhycHggOHJweDtcclxuXHRmb250LXNpemU6IDMycnB4O1xyXG5cdGZvbnQtZmFtaWx5OiBpbmhlcml0O1xyXG5cdGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDtcclxuXHR0cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjFzO1xyXG5cdG1hcmdpbi10b3A6IDBycHg7XHJcbn1cclxuLmR2LXBhbmVsIGlucHV0Ojotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyIHtcclxuXHRmb250LXNpemU6IDEwcnB4O1xyXG59XHJcbi5kdi1wYW5lbCAuZm9ybS1pdGVtLXNwYW57XHJcblx0dmVydGljYWwtYWxpZ246IHRleHQtdG9wO1xyXG4gICAgY29sb3I6ICMyZDhjZjA7XHJcblx0d2hpdGUtc3BhY2U6IG5vcm1hbDtcclxuXHR3b3JkLWJyZWFrOiBicmVhay1hbGw7XHJcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcblx0d2lkdGg6IGNhbGMoMTAwJSAtIDEwMHB4KTtcclxufVxyXG5cbi5kdi1wYW5lbC1idXR0b257XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG5cdG1hcmdpbi1yaWdodDogMjBycHg7XG59XHJcbi5kdi1wYW5lbC1idXR0b24gYnV0dG9uIHsgICAgXHJcblx0bGluZS1oZWlnaHQ6IDEuODtcbiAgICBib3JkZXI6IG5vbmU7XHJcblx0Zm9udC1zaXplOiAzNHJweDtcclxufVxyXG5idXR0b24uYnRuX2NhbmNlbCB7XHJcblx0d2lkdGg6NDkuNSU7XHJcblx0bWFyZ2luLXRvcDogNTBycHg7XHJcblx0cGFkZGluZzogMjBycHg7XHJcblx0bGluZS1oZWlnaHQ6IDEuNTtcclxuXHRib3JkZXI6IG5vbmU7XHJcblx0Zm9udC1zaXplOiAzOHJweDtcclxuXHRmb250LXdlaWdodDogYm9sZDtcclxuXHRmbG9hdDogbGVmdDtcclxuXHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbn1cclxuYnV0dG9uLmJ0bl9hZGQge1xyXG5cdHdpZHRoOjQ5LjUlO1xyXG5cdG1hcmdpbi10b3A6IDUwcnB4O1xyXG5cdHBhZGRpbmc6IDIwcnB4O1xyXG5cdGxpbmUtaGVpZ2h0OiAxLjU7XHJcblx0Ym9yZGVyOiBub25lO1xyXG5cdGZvbnQtc2l6ZTogMzhycHg7XHJcblx0Zm9udC13ZWlnaHQ6IGJvbGQ7XHJcblx0ZmxvYXQ6IHJpZ2h0O1xyXG5cdGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxufVxyXG4ubG9nbyB7XHJcblx0aGVpZ2h0OiA1MHB4O1xuICAgIHdpZHRoOiAyMzBweDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIG1hcmdpbjogMzglIGF1dG87XHJcbn1cclxuLmR2LWJvcmRlcntcclxuXHRib3JkZXI6IDFweCBzb2xpZCByZWQ7XHJcbn1cbjwvc3R5bGU+XHJcbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuXHQuZGVtby11bmktcm93IHtcblx0XHRtYXJnaW4tYm90dG9tOiAwcHg7XG5cdFx0ZGlzcGxheTogYmxvY2s7XG5cdH1cblx0Ojp2LWRlZXAgLnVuaS1yb3cge1xuXHRcdG1hcmdpbi1ib3R0b206IDBweDtcblx0fVxyXG5cdC52aWV3LXRhYnBhZ2UgOjp2LWRlZXAgLnVuaS1yb3cgIHtcblx0XHRtYXJnaW4tYm90dG9tOiA1cHg7XG5cdH1cblx0LmRlbW8tdW5pLWNvbCB7XG5cdFx0aGVpZ2h0OiAzNnB4O1xuXHRcdGJvcmRlci1yYWRpdXM6IDVweDtcblx0fVxyXG5cdC5kZW1vLXVuaS1yb3cgLnVuaS1pbnB1dHtcclxuXHRcdHdpZHRoOiBjYWxjKDEwMCUgLSAxMjBweCk7XHJcblx0fVxuPC9zdHlsZT5cblxuXHJcblxyXG48dGVtcGxhdGU+XHJcblx0PHZpZXcgY2xhc3M9XCJjb250ZW50XCI+XHJcblx0XHQ8IS0tIOihqOWktOagt+W8jyAtLT5cclxuXHRcdDx2aWV3IGNsYXNzPVwidi1oZWFkU3R5bGVcIiB2LWZvcj1cIihpdGVtLGluZGV4KSBpbiBoZWFkX3N0eWxlZGVmLmZvcm0uaXRlbXNcIiA+XHJcblx0XHRcdDx0ZXh0IGNsYXNzPVwidHh0X3RpdGxlXCIgOnN0eWxlPVwieyd3aWR0aCc6aXRlbS5sYWJlbFdpZHRoKydweCd9XCI+e3tpdGVtLmxhYmVsfX3vvJo8L3RleHQ+XHJcblx0XHRcdDx2aWV3IGNsYXNzPVwiaW5wdXQtd3JhcHBlclwiPlxuXHRcdFx0XHQ8dGV4dCB2LWlmPVwiaXRlbS5zZXR0aW5nLnByZWZpeFwiIFxyXG5cdFx0XHRcdFx0Y2xhc3M9XCJ1bmktaWNvblwiIFxyXG5cdFx0XHRcdFx0OmNsYXNzPVwiW2l0ZW0uc2V0dGluZy5wcmVmaXhdXCJcblx0XHRcdFx0XHRAY2xpY2s9XCJvbkVudGVyQ2hhbmdlKGl0ZW0pXCI+JiN4ZTU2ODs8L3RleHQ+XHJcblx0XHRcdFx0PGlucHV0XHJcblx0XHRcdFx0XHRjbGFzcz1cInVuaS1pbnB1dFwiXHJcblx0XHRcdFx0XHQ6dHlwZT1cIml0ZW0ubmFtZT09J0lucHV0Jz8ndGV4dCc6J3RleHQnXCIgXHJcblx0XHRcdFx0XHR2LW1vZGVsPVwiaXRlbS52YWx1ZVwiXHJcblx0XHRcdFx0XHQ6ZGlzYWJsZWQ9XCJpdGVtLmRpc2FibGVkXCJcclxuXHRcdFx0XHRcdDpwbGFjZWhvbGRlcj1cIml0ZW0ucGxhY2Vob2xkZXJcIlxyXG5cdFx0XHRcdFx0OnN0eWxlPVwieyd3aWR0aCc6aXRlbS5zZXR0aW5nLnByZWZpeCAmJiBpdGVtLnNldHRpbmcuc3VmZml4Pyc3OCUnOml0ZW0uc2V0dGluZy5wcmVmaXggfHwgaXRlbS5zZXR0aW5nLnN1ZmZpeD8nODclJzonOTYlJ31cIiBcclxuXHRcdFx0XHRcdDpmb2N1cz1cImZvY3VzTWF0ZXJpYVwiXHJcblx0XHRcdFx0XHRAZm9jdXM9XCJvbnRhcChpdGVtKVwiIFxuXHRcdFx0XHRcdEBrZXl1cC5lbnRlcj1cIm9uRW50ZXJDaGFuZ2UoaXRlbSlcIlxuXHRcdFx0XHRcdEBibHVyPVwib25FbnRlckNoYW5nZShpdGVtKVwiXHJcblx0XHRcdFx0Lz5cblx0XHRcdFx0PHRleHQgdi1pZj1cIml0ZW0uc2V0dGluZy5zdWZmaXhcIiBcclxuXHRcdFx0XHRcdGNsYXNzPVwidW5pLWljb25cIiBcclxuXHRcdFx0XHRcdDpjbGFzcz1cIltpdGVtLnNldHRpbmcuc3VmZml4XVwiXG5cdFx0XHRcdFx0QGNsaWNrPVwib25FbnRlckNoYW5nZShpdGVtKVwiPiYjeGU1Njg7PC90ZXh0PlxyXG5cdFx0ICAgIDwvdmlldz5cclxuXHRcdDwvdmlldz5cclxuXHRcdDx2aWV3IGNsYXNzPVwidmlldy1jb250ZW50XCI+XHJcblx0XHRcdDwhLS0g6aG1562+IC0tPlxyXG5cdFx0XHQ8dmlldyBjbGFzcz1cImR2LXRhYlwiPlxyXG5cdFx0XHRcdDx1bmktc2VnbWVudGVkLWNvbnRyb2wgOmN1cnJlbnQ9XCJjdXJyZW50XCIgOnZhbHVlcz1cIml0ZW1zXCIgQGNsaWNrSXRlbT1cIm9uQ2xpY2tJdGVtXCJcclxuXHRcdFx0XHRcdHN0eWxlVHlwZT1cImJ1dHRvblwiPlxyXG5cdFx0XHRcdDwvdW5pLXNlZ21lbnRlZC1jb250cm9sPlxyXG5cdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdDwhLS0g5q2j5Zyo56CB55uYIC0tPlxyXG5cdFx0XHQ8dmlldyBjbGFzcz1cInZpZXctdGFicGFnZVwiIHYtaWY9XCJjdXJyZW50PT0wXCI+XHJcblx0XHRcdFx0PGltYWdlIGNsYXNzPVwibG9nb1wiIHYtaWY9XCJkZXRhaWwxU3R5bGVEZWZMaXN0Lmxlbmd0aD09MFwiIHNyYz1cIi4uLy4uL2ltYWdlcy9tb2JveF9sb2dfMjAweDQwLnBuZ1wiPjwvaW1hZ2U+XHJcblx0XHRcdFx0XHJcblx0XHRcdFx0PCEtLSA8ZGl2IGNsYXNzPVwiZHYtcGFuZWxcIj5cclxuXHRcdFx0XHQgICAgPGRpdiBjbGFzcz1cImR2LXBhbmVsLWlucHV0XCI+XHJcblx0XHRcdFx0XHRcdDxkaXYgPlxyXG5cdFx0XHRcdFx0XHRcdDx0ZXh0IGNsYXNzPVwidHh0X3RpdGxlXCIgc3R5bGU9XCJ3aWR0aDoxMDBweFwiPnRlc3TvvJo8L3RleHQ+XHJcblx0XHRcdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJmb3JtLWl0ZW0tc3BhblwiID4xMTExPC9zcGFuPlxyXG5cdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHQgICAgICAgIDxkaXYgPlxyXG5cdFx0XHRcdFx0XHRcdDx0ZXh0IGNsYXNzPVwidHh0X3RpdGxlXCIgc3R5bGU9XCJ3aWR0aDoxMDBweFwiPnRlc3TvvJo8L3RleHQ+XHJcblx0XHRcdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJmb3JtLWl0ZW0tc3BhblwiID4xMTExPC9zcGFuPlxyXG5cdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdFx0PGRpdj5cclxuXHRcdFx0XHRcdFx0XHQ8dW5pLXJvdyBjbGFzcz1cImRlbW8tdW5pLXJvd1wiPlxyXG5cdFx0XHRcdFx0XHRcdFx0PHVuaS1jb2wgOnNwYW49XCIxMlwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8dGV4dCBjbGFzcz1cInR4dF90aXRsZSBkdi1mb3JtLWl0ZW0tY29sXCIgc3R5bGU9XCJ3aWR0aDoxMDBweFwiPnRlc3TvvJo8L3RleHQ+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwiZm9ybS1pdGVtLXNwYW5cIiA+ZmZhYWE8L3NwYW4+XHJcblx0XHRcdFx0XHRcdFx0XHQ8L3VuaS1jb2w+XHJcblx0XHRcdFx0XHRcdFx0XHQ8dW5pLWNvbCA6c3Bhbj1cIjEyXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDx0ZXh0IGNsYXNzPVwidHh0X3RpdGxlIGR2LWZvcm0taXRlbS1jb2xcIiBzdHlsZT1cIndpZHRoOjEwMHB4XCI+dGVzdO+8mjwvdGV4dD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJmb3JtLWl0ZW0tc3BhblwiID5mZmFhYWZmYWFhZmZhYWFmZmFhYWZmYWFhPC9zcGFuPlxyXG5cdFx0XHRcdFx0XHRcdFx0PC91bmktY29sPlxyXG5cdFx0XHRcdFx0XHRcdDwvdW5pLXJvdz5cclxuXHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHRcdDxkaXY+XHJcblx0XHRcdFx0XHRcdFx0PHVuaS1yb3cgY2xhc3M9XCJkZW1vLXVuaS1yb3dcIj5cclxuXHRcdFx0XHRcdFx0XHRcdDx1bmktY29sIDpzcGFuPVwiMTJcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PHRleHQgY2xhc3M9XCJ0eHRfdGl0bGUgZHYtZm9ybS1pdGVtLWNvbFwiIHN0eWxlPVwid2lkdGg6MTAwcHhcIj50ZXN077yaPC90ZXh0PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cImZvcm0taXRlbS1zcGFuXCIgPmZzZmVnZnM8L3NwYW4+XHJcblx0XHRcdFx0XHRcdFx0XHQ8L3VuaS1jb2w+XHJcblx0XHRcdFx0XHRcdFx0XHQ8dW5pLWNvbCA6c3Bhbj1cIjEyXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDx0ZXh0IGNsYXNzPVwidHh0X3RpdGxlIGR2LWZvcm0taXRlbS1jb2xcIiBzdHlsZT1cIndpZHRoOjEwMHB4XCI+dGVzdO+8mjwvdGV4dD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PGlucHV0IHR5cGU9XCJudW1iZXJcIiBjbGFzcz1cInVuaS1pbnB1dCBpbnB1dC1tYXJnaW50b3BcIiBzdHlsZT1cIndpZHRoOiBjYWxjKDEwMCUgLSAxMjBweCk7XCIvPlxyXG5cdFx0XHRcdFx0XHRcdFx0PC91bmktY29sPlxyXG5cdFx0XHRcdFx0XHRcdDwvdW5pLXJvdz5cclxuXHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJkdi1wYW5lbC1idXR0b25cIj5cclxuXHRcdFx0XHRcdFx0PGJ1dHRvbiB0eXBlPVwid2FyblwiIEB0YXA9XCJkZWxJdGVtKDApXCI+5Yig6ZmkPC9idXR0b24+XHJcblx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHQ8L2Rpdj4gLS0+XHJcblx0XHRcdFx0PGRpdiBjbGFzcz1cImR2LXBhbmVsXCIgdi1mb3I9XCIoc3R5bGUsaWkpIGluIGRldGFpbDFTdHlsZURlZkxpc3RcIj5cclxuXHRcdFx0XHQgICAgPGRpdiBjbGFzcz1cImR2LXBhbmVsLWlucHV0XCI+XHJcblx0XHRcdFx0ICAgICAgICA8ZGl2IHYtZm9yPVwiKGl0ZW0saW5kZXgpIGluIHN0eWxlLmZvcm0uaXRlbXNcIj5cclxuXHRcdFx0XHQgICAgICAgICAgICA8IS0tIOaZrumAmuW4g+WxgCAtLT5cclxuXHRcdFx0XHRcdFx0XHQ8dmlldyB2LWlmPVwiaXRlbS5uYW1lPT0nSW5wdXQnXCI+XHJcblx0XHRcdFx0XHRcdFx0XHQ8dGV4dCBjbGFzcz1cInR4dF90aXRsZVwiIDpzdHlsZT1cInsnd2lkdGgnOml0ZW0ubGFiZWxXaWR0aCsncHgnfVwiPnt7aXRlbS5sYWJlbH1977yaPC90ZXh0PlxyXG5cdFx0XHRcdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJmb3JtLWl0ZW0tc3BhblwiIHYtaWY9XCJpdGVtLmRpc2FibGVkXCI+e3tpdGVtLnZhbHVlfX08L3NwYW4+XHJcblx0XHRcdFx0XHRcdFx0XHQ8aW5wdXRcclxuXHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJ1bmktaW5wdXRcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHR2LWlmPVwiIWl0ZW0uZGlzYWJsZWRcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ6dHlwZT1cIml0ZW0ubmFtZT09J0lucHV0TnVtYmVyJz8nbnVtYmVyJzondGV4dCdcIiBcclxuXHRcdFx0XHRcdFx0XHRcdFx0OnZhbHVlPVwiaXRlbS52YWx1ZVwiIFxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ6ZGlzYWJsZWQ9XCJpdGVtLmRpc2FibGVkXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0OnBsYWNlaG9sZGVyPVwiaXRlbS5wbGFjZWhvbGRlclwiXHJcblx0XHRcdFx0XHRcdFx0XHQvPlxyXG5cdFx0XHRcdFx0XHRcdDwvdmlldz5cclxuXHRcdFx0XHQgICAgICAgICAgICA8IS0tIOagheagvOW4g+WxgCAtLT5cclxuXHRcdFx0XHRcdFx0XHQ8dW5pLXJvdyBjbGFzcz1cImRlbW8tdW5pLXJvd1wiIHYtaWY9XCJpdGVtLm5hbWU9PSdMYXlvdXQnXCI+XHJcblx0XHRcdFx0XHRcdFx0XHQ8dW5pLWNvbCBcclxuXHRcdFx0XHRcdFx0XHRcdFx0OnNwYW49XCIyNCAvIGl0ZW0uc2V0dGluZy5jb2xcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHR2LWZvcj1cIihjb2xzLGtleSkgaW4gaXRlbS5zZXR0aW5nLmNvbExpc3RcIiBcclxuXHRcdFx0XHRcdFx0XHRcdD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PHZpZXcgdi1pZj1cImNvbHMhPW51bGxcIiA+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PHRleHQgY2xhc3M9XCJ0eHRfdGl0bGVcIiA6c3R5bGU9XCJ7J3dpZHRoJzpjb2xzLmxhYmVsV2lkdGgrJ3B4J31cIj57e2NvbHMubGFiZWx9fe+8mjwvdGV4dD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cImZvcm0taXRlbS1zcGFuXCIgdi1pZj1cImNvbHMuZGlzYWJsZWRcIj57e2NvbHMudmFsdWV9fTwvc3Bhbj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8aW5wdXRcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzPVwidW5pLWlucHV0XCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHYtaWY9XCIhY29scy5kaXNhYmxlZFwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ6dHlwZT1cImNvbHMubmFtZT09J0lucHV0TnVtYmVyJz8nbnVtYmVyJzondGV4dCdcIiBcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDp2YWx1ZT1cImNvbHMudmFsdWVcIiBcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDpkaXNhYmxlZD1cImNvbHMuZGlzYWJsZWRcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0OnBsYWNlaG9sZGVyPVwiY29scy5wbGFjZWhvbGRlclwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Lz5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PC92aWV3PlxyXG5cdFx0XHRcdFx0XHRcdFx0PC91bmktY29sPlxyXG5cdFx0XHRcdFx0XHRcdDwvdW5pLXJvdz5cclxuXHRcdFx0XHQgICAgICAgIDwvZGl2PlxyXG5cdFx0XHRcdCAgICAgPC9kaXY+XHJcblx0XHRcdFx0ICAgIDxkaXYgY2xhc3M9XCJkdi1wYW5lbC1idXR0b25cIj5cclxuXHRcdFx0XHRcdFx0PGJ1dHRvbiB0eXBlPVwid2FyblwiIEB0YXA9XCJkZWxJdGVtKDApXCI+5Yig6ZmkPC9idXR0b24+XHJcblx0XHRcdFx0ICAgIDwvZGl2PlxyXG5cdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdDwhLS0g5bey56CB55uYIC0tPlxyXG5cdFx0XHQ8dmlldyBjbGFzcz1cInZpZXctdGFicGFnZTJcIiB2LWlmPVwiY3VycmVudD09MVwiPlxyXG5cdFx0XHRcdDxpbWFnZSBjbGFzcz1cImxvZ29cIiB2LWlmPVwiZGV0YWlsMlN0eWxlRGVmTGlzdC5sZW5ndGg9PTBcIiBzcmM9XCIuLi8uLi9pbWFnZXMvbW9ib3hfbG9nXzIwMHg0MC5wbmdcIj48L2ltYWdlPlxyXG5cdFx0XHRcdDxkaXYgY2xhc3M9XCJkdi1wYW5lbFwiIHYtZm9yPVwiKHN0eWxlLGlpKSBpbiBkZXRhaWwyU3R5bGVEZWZMaXN0XCI+XHJcblx0XHRcdFx0ICAgIDxkaXYgY2xhc3M9XCJkdi1wYW5lbC1pbnB1dFwiPlxyXG5cdFx0XHRcdCAgICAgICAgPGRpdiB2LWZvcj1cIihpdGVtLGluZGV4KSBpbiBzdHlsZS5mb3JtLml0ZW1zXCI+XHJcblx0XHRcdFx0ICAgICAgICAgICAgPCEtLSDmma7pgJrluIPlsYAgLS0+XHJcblx0XHRcdFx0XHRcdFx0PHZpZXcgdi1pZj1cIml0ZW0ubmFtZSE9J0xheW91dCdcIj5cclxuXHRcdFx0XHRcdFx0XHRcdDx0ZXh0IGNsYXNzPVwidHh0X3RpdGxlXCIgOnN0eWxlPVwieyd3aWR0aCc6aXRlbS5sYWJlbFdpZHRoKydweCd9XCI+e3tpdGVtLmxhYmVsfX3vvJo8L3RleHQ+XHJcblx0XHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cImZvcm0taXRlbS1zcGFuXCI+e3tpdGVtLnZhbHVlfX08L3NwYW4+XHJcblx0XHRcdFx0XHRcdFx0PC92aWV3PlxyXG5cdFx0XHRcdCAgICAgICAgICAgIDwhLS0g5qCF5qC85biD5bGAIC0tPlxyXG5cdFx0XHRcdFx0XHRcdDx1bmktcm93IGNsYXNzPVwiZGVtby11bmktcm93XCIgdi1pZj1cIml0ZW0ubmFtZT09J0xheW91dCdcIj5cclxuXHRcdFx0XHRcdFx0XHRcdDx1bmktY29sIFxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ6c3Bhbj1cIjI0IC8gaXRlbS5zZXR0aW5nLmNvbFwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdHYtZm9yPVwiKGNvbHMsa2V5KSBpbiBpdGVtLnNldHRpbmcuY29sTGlzdFwiIFxyXG5cdFx0XHRcdFx0XHRcdFx0PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8dmlldyB2LWlmPVwiY29scyE9bnVsbFwiID5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGV4dCBjbGFzcz1cInR4dF90aXRsZVwiIDpzdHlsZT1cInsnd2lkdGgnOmNvbHMubGFiZWxXaWR0aCsncHgnfVwiPnt7Y29scy5sYWJlbH1977yaPC90ZXh0PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwiZm9ybS1pdGVtLXNwYW5cIj57e2NvbHMudmFsdWV9fTwvc3Bhbj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PC92aWV3PlxyXG5cdFx0XHRcdFx0XHRcdFx0PC91bmktY29sPlxyXG5cdFx0XHRcdFx0XHRcdDwvdW5pLXJvdz5cclxuXHRcdFx0XHQgICAgICAgIDwvZGl2PlxyXG5cdFx0XHRcdCAgICA8L2Rpdj5cclxuXHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJkdi1wYW5lbC1idXR0b25cIj5cclxuXHRcdFx0XHRcdCBcdDxidXR0b24gdHlwZT1cIndhcm5cIiBAdGFwPVwiZGVsRGF0YU9iaihzdHlsZSxpaSlcIj7liKDpmaQ8L2J1dHRvbj5cclxuXHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHQ8L3ZpZXc+XHJcblx0XHQ8L3ZpZXc+XHJcblx0XHQ8dmlldz5cclxuXHRcdFx0PGJ1dHRvbiB0eXBlPVwiZGVmYXVsdFwiIEB0YXA9XCJjYW5jZWxcIiBjbGFzcz1cImJ0bl9jYW5jZWxcIj7lj5bmtog8L2J1dHRvbj5cclxuXHRcdCAgICA8YnV0dG9uIHR5cGU9XCJwcmltYXJ5XCIgQHRhcD1cIm9rXCIgY2xhc3M9XCJidG5fYWRkXCI+56Gu5a6aPC9idXR0b24+XHJcblx0XHQ8L3ZpZXc+XG4gICAgPC92aWV3PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cclxuaW1wb3J0IEJhc2U2NCBmcm9tICcuLi8uLi9jb21wb25lbnRzL2pzLWJhc2U2NC9iYXNlNjQuanMnXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICBtb2R1bGVzOntcclxuXHRCYXNlNjQsXHJcbiAgfSxcbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xyXG5cdCAgdGl0bGU6J+eggeebmCcsXG4gICAgICBwYXJhbToge30sXHJcblx0ICBmb2N1c01hdGVyaWE6ZmFsc2UsXHJcblx0ICBoZWFkX3N0eWxlZGVmOntcclxuXHRcdGZvcm06e1xyXG5cdFx0XHRpdGVtczpbXVxyXG5cdFx0fVxyXG5cdCAgfSxcbiAgICAgIGRldGFpbDFfc3R5bGVkZWY6e30sXG4gICAgICBkZXRhaWwxU3R5bGVEZWZMaXN0OltdLFxuICAgICAgZGV0YWlsMl9zdHlsZWRlZjp7fSxcbiAgICAgIGRldGFpbDJTdHlsZURlZkxpc3Q6W10sXHJcblx0ICAvLyDliIbmrrXlmajmlbDmja5cclxuXHQgIGN1cnJlbnQ6IDAsXHJcblx0ICBpdGVtczogWyfmraPlnKjnoIHnm5gnLCAn5bey56CB55uYJ10sXG4gICAgfTtcbiAgfSxcclxuICBvbkxvYWQob3B0aW9ucykge1xyXG5cdC8vIGNvbnNvbGUubG9nKG9wdGlvbnMpO1xyXG5cdHVuaS5zZXROYXZpZ2F0aW9uQmFyVGl0bGUoeyB0aXRsZTogb3B0aW9ucy50aXRsZW5hbWV9KTsgLy/orr7nva7pobbpg6jmoIfpopggXHJcblx0dGhpcy4kZGF0YS5wYXJhbSA9IEpTT04ucGFyc2Uob3B0aW9ucy5wYXJhbSk7XHJcblx0Ly8gY29uc29sZS5sb2codGhpcy4kZGF0YS5wYXJhbSk7XHJcblx0IC8v6I635Y+WQ0dfRGV0YWls77yI5omY55uY6LSn5ZOB6KGo77yJ5pWw5o2u57G755qE6Ieq5a6a5LmJ6KGo5Y2V5Y+C5pWwXHJcblx0dGhpcy5IZWFkX1VJU3R5bGVHZXRJbmZvKCdDR19EZXRhaWwnLHRoaXMuJGRhdGEucGFyYW0uSGVhZF9QYW5lbF9TdHlsZS5JRCk7XHJcblx0dGhpcy5EZXRhaWwxX1VJc3R5bGVHZXRJbmZvKCdDR19EZXRhaWwnLHRoaXMuJGRhdGEucGFyYW0uRGV0YWlsX0xpc3RfUGFuZWwxX1N0eWxlLklEKTtcclxuXHR0aGlzLkRldGFpbDJfVUlzdHlsZUdldEluZm8oJ0NHX0RldGFpbCcsdGhpcy4kZGF0YS5wYXJhbS5EZXRhaWxfTGlzdF9QYW5lbDJfU3R5bGUuSUQpO1xyXG5cdC8v6aG16Z2i5Yid5aeL5YyW6I635Y+W54Sm54K5XHJcblx0Ly8gdGhpcy5mb2N1c01hdGVyaWE9dHJ1ZTsgXHJcbiAgfSxcdFxuICBtZXRob2RzOiB7XG4gICAgYXN5bmMgSGVhZF9VSVN0eWxlR2V0SW5mbyhjbGFzc19pZCxzdHlsZV9pZCl7ICAgLy/ojrflj5boh6rlrprkuYnooajljZXmoLflvI9cclxuXHRcdHZhciAkdGhpcyA9IHRoaXM7XHJcblx0XHR2YXIgZGF0YUluZm89e1xyXG5cdFx0XHRjbGFzc19pZDpjbGFzc19pZCxcclxuXHRcdFx0dWlfc3R5bGVfaWQ6c3R5bGVfaWQsXHJcblx0XHR9O1xyXG5cdFx0dGhpcy4kc3RvcmUuZGlzcGF0Y2goJ1VJU3R5bGVHZXRJbmZvJyxkYXRhSW5mbykudGhlbihyZXQ9PntcclxuXHRcdFx0Ly8gY29uc29sZS5sb2cocmV0KTtcclxuXHRcdFx0aWYgKHJldC5lcnJfY29kZSA9PSAwKSB7XHJcblx0XHRcdFx0dmFyIHN0eWxlZGVmPVwiXCI7XHJcblx0XHRcdFx0aWYocmV0LnJlc3VsdC5zdHlsZV9kZWYpe1xyXG5cdFx0XHRcdCAgICAgLy9tb2JveDLnmoRzdHlsZV9kZWbmmK9qc29u5a2X56ym5LiyXHJcblx0XHRcdFx0ICAgICBzdHlsZWRlZiA9IHJldC5yZXN1bHQuc3R5bGVfZGVmLnJlcGxhY2UoL1xcXFwvZyxcIlwiKTtcclxuXHRcdFx0XHQgICAgIC8vbW9ib3gz55qEc3R5bGVfZGVm5pivYmFzZTY05a2X56ym5LiyXHJcblx0XHRcdFx0ICAgICBpZighcmV0LnJlc3VsdC5zdHlsZV9kZWYuaW5jbHVkZXMoJ1wiJykpIHN0eWxlZGVmID0gQmFzZTY0LmRlY29kZShyZXQucmVzdWx0LnN0eWxlX2RlZik7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdCR0aGlzLiRkYXRhLmhlYWRfc3R5bGVkZWYgPSByZXQucmVzdWx0LnN0eWxlX2RlZj8gSlNPTi5wYXJzZShzdHlsZWRlZik6IHt9O1xyXG5cdFx0XHRcdC8vIHRoaXMuZm9ybSA9IHRoaXMuaGVhZF9zdHlsZWRlZi5mb3JtLm1vZGVsO1xyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKCR0aGlzLiRkYXRhLmhlYWRfc3R5bGVkZWYpO1xyXG5cdFx0XHRcdFxyXG5cdFx0XHR9ZWxzZXtcclxuXHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzFcIixjb250ZW50OnJldC5lcnJfbXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHR9XHJcblx0XHR9KS5jYXRjaChleD0+e1xyXG5cdFx0XHQvLyBjb25zb2xlLmxvZyhleCk7XHJcblx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vMS4xXCIsY29udGVudDpleC5lcnJNc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHR9KTtcclxuICAgICAgICBcclxuICAgIH0sXG4gICAgYXN5bmMgRGV0YWlsMV9VSXN0eWxlR2V0SW5mbyhjbGFzc19pZCxzdHlsZV9pZCl7ICAgLy/ojrflj5boh6rlrprkuYnooajljZXmoLflvI9cclxuXHRcdHZhciAkdGhpcyA9IHRoaXM7XHJcblx0XHR2YXIgZGF0YUluZm89e1xyXG5cdFx0XHRjbGFzc19pZDpjbGFzc19pZCxcclxuXHRcdFx0dWlfc3R5bGVfaWQ6c3R5bGVfaWQsXHJcblx0XHR9O1xyXG5cdFx0dGhpcy4kc3RvcmUuZGlzcGF0Y2goJ1VJU3R5bGVHZXRJbmZvJyxkYXRhSW5mbykudGhlbihyZXQ9PntcclxuXHRcdFx0Ly8gY29uc29sZS5sb2cocmV0KTtcclxuXHRcdFx0aWYgKHJldC5lcnJfY29kZSA9PSAwKSB7XHJcblx0XHRcdFx0dmFyIHN0eWxlZGVmPVwiXCI7XHJcblx0XHRcdFx0aWYocmV0LnJlc3VsdC5zdHlsZV9kZWYpe1xyXG5cdFx0XHRcdCAgICAgLy9tb2JveDLnmoRzdHlsZV9kZWbmmK9qc29u5a2X56ym5LiyXHJcblx0XHRcdFx0ICAgICBzdHlsZWRlZiA9IHJldC5yZXN1bHQuc3R5bGVfZGVmLnJlcGxhY2UoL1xcXFwvZyxcIlwiKTtcclxuXHRcdFx0XHQgICAgIC8vbW9ib3gz55qEc3R5bGVfZGVm5pivYmFzZTY05a2X56ym5LiyXHJcblx0XHRcdFx0ICAgICBpZighcmV0LnJlc3VsdC5zdHlsZV9kZWYuaW5jbHVkZXMoJ1wiJykpIHN0eWxlZGVmID0gQmFzZTY0LmRlY29kZShyZXQucmVzdWx0LnN0eWxlX2RlZik7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdCR0aGlzLiRkYXRhLmRldGFpbDFfc3R5bGVkZWYgPSByZXQucmVzdWx0LnN0eWxlX2RlZj8gSlNPTi5wYXJzZShzdHlsZWRlZik6IHt9O1xyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKCR0aGlzLiRkYXRhLmRldGFpbDFfc3R5bGVkZWYpO1xyXG5cdFx0XHRcdC8vICR0aGlzLiRkYXRhLmRldGFpbDFTdHlsZURlZkxpc3QucHVzaCgkdGhpcy4kZGF0YS5kZXRhaWwxX3N0eWxlZGVmKTtcclxuXHRcdFx0XHQvLyBsZXQgYWEgPSBKU09OLnN0cmluZ2lmeSh0aGlzLmRldGFpbDFfc3R5bGVkZWYpO1xyXG5cdFx0XHRcdC8vICR0aGlzLiRkYXRhLmRldGFpbDFTdHlsZURlZkxpc3QucHVzaChKU09OLnBhcnNlKGFhKSk7XHJcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coJHRoaXMuJGRhdGEuZGV0YWlsMVN0eWxlRGVmTGlzdCk7XHJcblx0XHRcdFx0XHJcblx0XHRcdH1lbHNle1xyXG5cdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vMlwiLGNvbnRlbnQ6cmV0LmVycl9tc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdH1cclxuXHRcdH0pLmNhdGNoKGV4PT57XHJcblx0XHRcdC8vIGNvbnNvbGUubG9nKGV4KTtcclxuXHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor68yLjFcIixjb250ZW50OmV4LmVyck1zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdH0pO1xyXG4gICAgICAgIFxyXG4gICAgfSxcbiAgICBhc3luYyBEZXRhaWwyX1VJc3R5bGVHZXRJbmZvKGNsYXNzX2lkLHN0eWxlX2lkKXsgICAvL+iOt+WPluiHquWumuS5ieihqOWNleagt+W8j1xyXG5cdFx0dmFyICR0aGlzID0gdGhpcztcclxuXHRcdHZhciBkYXRhSW5mbz17XHJcblx0XHRcdGNsYXNzX2lkOmNsYXNzX2lkLFxyXG5cdFx0XHR1aV9zdHlsZV9pZDpzdHlsZV9pZCxcclxuXHRcdH07XHJcblx0XHR0aGlzLiRzdG9yZS5kaXNwYXRjaCgnVUlTdHlsZUdldEluZm8nLGRhdGFJbmZvKS50aGVuKHJldD0+e1xyXG5cdFx0XHQvLyBjb25zb2xlLmxvZyhyZXQpO1xyXG5cdFx0XHRpZiAocmV0LmVycl9jb2RlID09IDApIHtcclxuXHRcdFx0XHR2YXIgc3R5bGVkZWY9XCJcIjtcclxuXHRcdFx0XHRpZihyZXQucmVzdWx0LnN0eWxlX2RlZil7XHJcblx0XHRcdFx0ICAgICAvL21vYm94MueahHN0eWxlX2RlZuaYr2pzb27lrZfnrKbkuLJcclxuXHRcdFx0XHQgICAgIHN0eWxlZGVmID0gcmV0LnJlc3VsdC5zdHlsZV9kZWYucmVwbGFjZSgvXFxcXC9nLFwiXCIpO1xyXG5cdFx0XHRcdCAgICAgLy9tb2JveDPnmoRzdHlsZV9kZWbmmK9iYXNlNjTlrZfnrKbkuLJcclxuXHRcdFx0XHQgICAgIGlmKCFyZXQucmVzdWx0LnN0eWxlX2RlZi5pbmNsdWRlcygnXCInKSkgc3R5bGVkZWYgPSBCYXNlNjQuZGVjb2RlKHJldC5yZXN1bHQuc3R5bGVfZGVmKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0JHRoaXMuJGRhdGEuZGV0YWlsMl9zdHlsZWRlZiA9IHJldC5yZXN1bHQuc3R5bGVfZGVmPyBKU09OLnBhcnNlKHN0eWxlZGVmKToge307XHJcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coJHRoaXMuJGRhdGEuZGV0YWlsMl9zdHlsZWRlZik7XHJcblx0XHRcdFx0XHJcblx0XHRcdH1lbHNle1xyXG5cdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vM1wiLGNvbnRlbnQ6cmV0LmVycl9tc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdH1cclxuXHRcdH0pLmNhdGNoKGV4PT57XHJcblx0XHRcdC8vIGNvbnNvbGUubG9nKGV4KTtcclxuXHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor68zLjFcIixjb250ZW50OmV4LmVyck1zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdH0pO1xyXG4gICAgICAgIFxyXG4gICAgfSxcclxuXHRcclxuXHRvbnRhcChpdGVtKXsgLy/miavnoIHlip/og71cclxuXHRcdC8vIHZhciAkZWxlID0gZTtcclxuXHRcdC8vY29uc29sZS5sb2coZS50YXJnZXQpXHJcblx0XHRnZXRBcHAoKS5vblNjYW4oKHJlc3VsdCk9PntcclxuXHRcdFx0Y29uc29sZS5sb2cocmVzdWx0LmRlY29kZWRhdGEpO1xyXG5cdFx0XHRpdGVtLnZhbHVlID0gcmVzdWx0LmRlY29kZWRhdGE7XHJcblx0XHRcdHVuaS5oaWRlS2V5Ym9hcmQoKTtcclxuXHRcdFx0XHJcblx0XHRcdHZhciAkdGhpcyA9IHRoaXM7XHJcblx0XHRcdGNvbnNvbGUubG9nKGl0ZW0pO1xyXG5cdFx0XHRpZihpdGVtLm9sZHZhbHVlICE9IGl0ZW0udmFsdWUpe1xyXG5cdFx0XHQgICAgaXRlbS5vbGR2YWx1ZSA9IGl0ZW0udmFsdWU7XHJcblx0XHRcdFx0dmFyIGF0dHIgPSBpdGVtLmZpZWxkSWQ7XHJcblx0XHRcdFx0dGhpcy5oZWFkX3N0eWxlZGVmLmZvcm0ubW9kZWxbYXR0cl0gPSBpdGVtLnZhbHVlO1xyXG5cdFx0XHRcdHZhciBvbkNoYW5nZUV2ZW50ID0gaXRlbS5iaW5kLm9uQ2hhbmdlRXZlbnQ7ICAgLy/lhoXlrrnlj5jljJblkI7kuovku7ZcclxuXHRcdFx0XHR2YXIgb25TdWZmaXhDbGlja0NhbGxiYWNrRXZlbnQgPSBpdGVtLmJpbmQub25TdWZmaXhDbGlja0NhbGxiYWNrRXZlbnQ7ICAgLy/lkI7lm77moIfngrnlh7vkuovku7ZcclxuXHRcdFx0XHR2YXIgb25TdWZmaXhDbGlja0V2ZW50ID0gaXRlbS5iaW5kLm9uU3VmZml4Q2xpY2tFdmVudDsgICAvL+WQjuWbvuagh+eCueWHu+Wbnuiwg1xyXG5cdFx0XHRcdHZhciBpc2ZsYWcgPSBmYWxzZTtcclxuXHRcdFx0XHRcclxuXHRcdFx0ICAgIGlmKG9uQ2hhbmdlRXZlbnQuaWQpeyAgIC8v5YaF5a655Y+Y5YyW5ZCO5LqL5Lu2XHJcblx0XHRcdCAgICAgICR0aGlzLm9uQ2hhbmdlKG9uQ2hhbmdlRXZlbnQpOyBcclxuXHRcdFx0ICAgIH1cclxuXHRcdFx0XHRpZihpdGVtLnZhbHVlKXsgLy/nrKzkuIDkuKrovpPlhaXmoYbkuI3kuLrnqbpcclxuXHRcdFx0XHRcdCR0aGlzLmZvY3VzTWF0ZXJpYSA9IHRydWU7IC8v5Yid5aeL5YyW77yM56ys5LqM5Liq6L6T5YWl5qGGZm9jdXPlsZ7mgKdcclxuXHRcdFx0XHRcdC8vIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcclxuXHRcdFx0XHRcdC8vIFx0JHRoaXMuZm9jdXNNYXRlcmlhPXRydWU7IC8v56ys5LqM5Liq6L6T5YWl5qGG6I635Y+W54Sm54K5XHJcblx0XHRcdFx0XHRcdHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcclxuXHRcdFx0XHRcdFx0XHR1bmkuaGlkZUtleWJvYXJkKCk7XHJcblx0XHRcdFx0XHRcdH0sMTAwKTtcclxuXHRcdFx0XHRcdC8vIH0sNTAwKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdCAgICAvLyBpZihvblN1ZmZpeENsaWNrQ2FsbGJhY2tFdmVudC5pZCl7ICAgLy/lkI7lm77moIfngrnlh7vkuovku7ZcclxuXHRcdFx0ICAgIC8vICAgdGhpcy5vblN1ZmZpeENsaWNrKG9uU3VmZml4Q2xpY2tDYWxsYmFja0V2ZW50KTtcclxuXHRcdFx0ICAgIC8vIH1cclxuXHRcdFx0ICAgIC8vIGlmKG9uU3VmZml4Q2xpY2tFdmVudC5pZCl7ICAgLy/lkI7lm77moIfngrnlh7vlm57osINcclxuXHRcdFx0ICAgIC8vICAgdGhpcy5vblN1ZmZpeENsaWNrQ2FsbGJhY2sob25TdWZmaXhDbGlja0V2ZW50KTtcclxuXHRcdFx0ICAgIC8vIH1cclxuXHRcdFx0fVxyXG5cdFx0fSlcclxuXHR9LFxyXG5cdG9uRW50ZXJDaGFuZ2UoaXRlbSl7IC8v5Zue6L2m77yM54K55Ye75oyJ6ZKu77yM5Y+W5raI6IqC54K55LqL5Lu2XHJcblx0XHQvLyBjb25zb2xlLmxvZyhpdGVtKTtcclxuXHRcdGlmKGl0ZW0ub2xkdmFsdWUgIT0gaXRlbS52YWx1ZSl7XHJcblx0XHQgICAgaXRlbS5vbGR2YWx1ZSA9IGl0ZW0udmFsdWU7XHJcblx0XHRcdHZhciBhdHRyID0gaXRlbS5maWVsZElkO1xyXG5cdFx0XHR0aGlzLmhlYWRfc3R5bGVkZWYuZm9ybS5tb2RlbFthdHRyXSA9IGl0ZW0udmFsdWU7XHJcblx0XHRcdHZhciBvbkNoYW5nZUV2ZW50ID0gaXRlbS5iaW5kLm9uQ2hhbmdlRXZlbnQ7ICAgLy/lhoXlrrnlj5jljJblkI7kuovku7ZcclxuXHRcdFx0dmFyIG9uU3VmZml4Q2xpY2tDYWxsYmFja0V2ZW50ID0gaXRlbS5iaW5kLm9uU3VmZml4Q2xpY2tDYWxsYmFja0V2ZW50OyAgIC8v5ZCO5Zu+5qCH54K55Ye75LqL5Lu2XHJcblx0XHRcdHZhciBvblN1ZmZpeENsaWNrRXZlbnQgPSBpdGVtLmJpbmQub25TdWZmaXhDbGlja0V2ZW50OyAgIC8v5ZCO5Zu+5qCH54K55Ye75Zue6LCDXHJcblx0XHRcdHZhciBpc2ZsYWcgPSBmYWxzZTtcclxuXHRcdFx0XHJcblx0XHQgICAgaWYob25DaGFuZ2VFdmVudC5pZCl7ICAgLy/lhoXlrrnlj5jljJblkI7kuovku7ZcclxuXHRcdCAgICAgIHRoaXMub25DaGFuZ2Uob25DaGFuZ2VFdmVudCk7IFxyXG5cdFx0ICAgIH1cclxuXHRcdCAgICAvLyBpZihvblN1ZmZpeENsaWNrQ2FsbGJhY2tFdmVudC5pZCl7ICAgLy/lkI7lm77moIfngrnlh7vkuovku7ZcclxuXHRcdCAgICAvLyAgIHRoaXMub25TdWZmaXhDbGljayhvblN1ZmZpeENsaWNrQ2FsbGJhY2tFdmVudCk7XHJcblx0XHQgICAgLy8gfVxyXG5cdFx0ICAgIC8vIGlmKG9uU3VmZml4Q2xpY2tFdmVudC5pZCl7ICAgLy/lkI7lm77moIfngrnlh7vlm57osINcclxuXHRcdCAgICAvLyAgIHRoaXMub25TdWZmaXhDbGlja0NhbGxiYWNrKG9uU3VmZml4Q2xpY2tFdmVudCk7XHJcblx0XHQgICAgLy8gfVxyXG5cdFx0fVxyXG5cdH0sXHJcblx0Ly8g5YaF5a655Y+Y5YyW5ZCO5LqL5Lu2XHJcblx0YXN5bmMgb25DaGFuZ2UoZXZlbnQpIHtcclxuXHQgICAgdHJ5IHtcclxuXHQgICAgICAgIGlmIChldmVudC5pZCkge1xyXG5cdCAgICAgICAgICB2YXIgb2JqX2F0dHIgPSB0aGlzLmhlYWRfc3R5bGVkZWYuZm9ybS5tb2RlbDtcclxuXHQgICAgICAgICAgLy8gY29uc29sZS5sb2cob2JqX2F0dHIpO1xyXG5cdCAgICAgICAgICB2YXIgaW5wdXRfcGFyYW0gPSBCYXNlNjQuZW5jb2RlKFxyXG5cdCAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KFxyXG5cdCAgICAgICAgICAgICAgT2JqZWN0LmtleXMob2JqX2F0dHIpLm1hcCgoYSkgPT4gKHtcclxuXHQgICAgICAgICAgICAgICAgYXR0cjogYSxcclxuXHQgICAgICAgICAgICAgICAgdmFsdWU6IG9ial9hdHRyW2FdIHx8IFwiXCIsXHJcblx0ICAgICAgICAgICAgICB9KSlcclxuXHQgICAgICAgICAgICApXHJcblx0ICAgICAgICAgICk7XHJcblx0XHRcdCAgdmFyICR0aGlzID0gdGhpcztcclxuXHRcdFx0ICB2YXIgZGF0YUluZm89e1xyXG5cdCAgICAgICAgICAgIGVkX3R5cGU6IDAsXHJcblx0XHRcdFx0c3RhcnRfdHJhbnNhY3Rpb246ICcnLFxyXG5cdCAgICAgICAgICAgIGNsYXNzX2lkOiB0aGlzLiRkYXRhLmhlYWRfc3R5bGVkZWYuZm9ybS5jbHNJZCxcclxuXHRcdFx0XHRjbGFzc19uYW1lOiAnJyxcclxuXHQgICAgICAgICAgICBldmVudF9pZDogZXZlbnQuaWQsXHJcblx0XHRcdFx0ZXZlbnRfbmFtZTogJycsXHJcblx0XHRcdFx0ZGF0YV9vYmpfaWQ6ICcnLFxyXG5cdCAgICAgICAgICAgIG9ial9hdHRyOiBvYmpfYXR0cixcclxuXHRcdFx0XHRwcmpfaWQ6ICcnLFxyXG5cdFx0XHRcdHJlZl9jbHNfaWQ6ICcnLFxyXG5cdFx0XHRcdHJlbF9vYmpfaWQ6ICcnLFxyXG5cdFx0XHRcdHVzZXJfbG9naW46ICcnLFxyXG5cdFx0XHRcdGRhdGFfanNvbjogJycsXHJcblx0XHRcdFx0Y29tcG9zZV9pbmZvOiAnJyxcclxuXHRcdFx0XHRleHRfaW5mbzogJycsXHJcblx0XHRcdFx0Z2xvYmFsX2F0dHI6ICcnLFxyXG5cdCAgICAgICAgICAgIGlucHV0X3BhcmFtOiBpbnB1dF9wYXJhbSxcclxuXHQgICAgICAgICAgfTtcclxuXHRcdFx0ICB0aGlzLiRzdG9yZS5kaXNwYXRjaCgncnVuQ3VzdG9tRXZlbnQnLGRhdGFJbmZvKS50aGVuKHJldD0+e1xyXG5cdFx0XHQgIFx0Ly8gY29uc29sZS5sb2cocmV0KTtcclxuXHRcdFx0ICBcdGlmIChyZXQuZXJyX2NvZGUgPT0gMCkge1xyXG5cdFx0XHRcdFx0dmFyIHJlc3VsdCA9IHJldC5yZXN1bHQ7IFxyXG5cdFx0XHRcdFx0aWYgKHJlc3VsdC5yZXQgIT0gMCkge1xyXG5cdFx0XHRcdFx0ICAgIHZhciB0aXAgPSByZXN1bHQuZXJyX2luZm8gPyB0eXBlb2YgcmVzdWx0LmVycl9pbmZvID09ICdzdHJpbmcnID8gcmVzdWx0LmVycl9pbmZvIDogcmVzdWx0LmVycl9pbmZvLmpvaW4oJzxici8+JykgOiAnJztcclxuXHRcdFx0XHRcdCAgICBpZiAocmVzdWx0LnJldCA9PSA4MDEpIHVuaS5zaG93TW9kYWwoe3RpdGxlOifmj5DnpLonLGNvbnRlbnQ6dGlwLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHRcdFx0ICAgIGVsc2UgdW5pLnNob3dNb2RhbCh7dGl0bGU6J+aPkOekuicsY29udGVudDp0aXArJyzmj5DnpLo6JytyZXN1bHQucmV0LHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2VcclxuXHRcdFx0XHRcdH1lbHNle1xyXG5cdFx0XHRcdFx0XHRsZXQgdGlwID0gcmVzdWx0LmluZm8gPyB0eXBlb2YgcmVzdWx0LmluZm8gPT0gJ3N0cmluZycgPyByZXN1bHQuaW5mbyA6IHJlc3VsdC5pbmZvLmpvaW4oJzxici8+JykgOiAnJztcclxuXHRcdFx0XHRcdFx0aWYgKHRpcCkgdW5pLnNob3dNb2RhbCh7dGl0bGU6J+aPkOekuicsY29udGVudDp0aXAsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdFx0aWYocmVzdWx0LnJlc3VsdF90eXBlID09IDAgJiYgcmVzdWx0LmFjdGlvbil7XHJcblx0XHRcdFx0XHRcdFx0cmVzdWx0LmFjdGlvbi5mb3JFYWNoKGl0ZW09PntcclxuXHRcdFx0XHRcdFx0XHRcdGlmKGl0ZW0uYWN0aW9uX3R5cGUgPT0gXCJpbnNlcnRfc3VidGFibGVfcGFnZV9yb3dcIil7IC8v56CB55uY5LitXHJcblx0XHRcdFx0XHRcdFx0XHRcdHZhciB2YWx1ZSA9IGl0ZW0udmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLnZpZXdBY2Vpb25Sb3codmFsdWUpO1xyXG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmKGl0ZW0uYWN0aW9uX3R5cGUgPT0gXCJzZXRfc3VidGFibGVfcGFnZV9jb250ZW50XCIpeyAgLy/lt7LnoIHnm5hcclxuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIHZhbHVlID0gaXRlbS52YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0aWYodmFsdWUuY2xlYXIgPT0gdHJ1ZSAmJiAkdGhpcy4kZGF0YS5kZXRhaWwxU3R5bGVEZWZMaXN0Lmxlbmd0aD4wKXsgLy/liKTmlq3mmK/lkKbmuIXnqbrpobXnrb7lhoXlrrks5q2j5Zyo56CB55uY5piv5ZCm5pyJ5pWw5o2uXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aXRsZTogJ+aPkOekuicsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb250ZW50OiAn57O757uf5qOA5rWL5Yiw5pyJ5q2j5Zyo56CB55uY5Lit55qE6LSn5ZOB77yM57un57ut5pON5L2c5Lya5riF56m677yM5piv5ZCm57un57ut77yfJyxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXMpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKHJlcy5jb25maXJtKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgJHRoaXMuJGRhdGEuZGV0YWlsMVN0eWxlRGVmTGlzdD1bXTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAkdGhpcy4kZGF0YS5kZXRhaWwyU3R5bGVEZWZMaXN0PVtdO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgICR0aGlzLnZpZXdBY2Vpb25Db250ZW50KHZhbHVlKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmIChyZXMuY2FuY2VsKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgJHRoaXMuJGRhdGEuZGV0YWlsMlN0eWxlRGVmTGlzdD1bXTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAkdGhpcy52aWV3QWNlaW9uQ29udGVudCh2YWx1ZSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5kZXRhaWwyU3R5bGVEZWZMaXN0PVtdO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLnZpZXdBY2Vpb25Db250ZW50KHZhbHVlKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHR9ZWxzZXtcclxuXHRcdFx0XHRcdFx0XHQvLyB0aGlzLmRldGFpbDJTdHlsZURlZkxpc3Q9W107XHJcblx0XHRcdFx0XHRcdFx0aWYocmVzdWx0LmluZm8pe1xyXG5cdFx0XHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor680LjNcIixjb250ZW50OnJlc3VsdC5pbmZvLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHQgIFx0XHRcclxuXHRcdFx0ICBcdH1lbHNle1xyXG5cdFx0XHQgIFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzRcIixjb250ZW50OnJldC5lcnJfbXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHQgIFx0fVxyXG5cdFx0XHQgIH0pLmNhdGNoKGV4PT57XHJcblx0XHRcdCAgXHQvLyBjb25zb2xlLmxvZyhleCk7XHJcblx0XHRcdCAgXHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzQuMVwiLGNvbnRlbnQ6ZXguZXJyTXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHQgIH0pO1xyXG5cdCAgICAgICAgfVxyXG5cdCAgICB9IGNhdGNoIChleCkge1xyXG5cdCAgICAgICAgdmFyIHRpcCA9IHR5cGVvZiBleCA9PSBcInN0cmluZ1wiID8gZXggOiBleC5tZXNzYWdlO1xyXG5cdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzQuMlwiLGNvbnRlbnQ6XCLmiafooYzigJzlhoXlrrnlj5jljJblkI7igJ3kuovku7blpLHotKXvvJpcIiArIHRpcCxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0XHJcblx0ICAgIH1cclxuXHR9LFxyXG5cdC8v5Yqg6L295q2j5Zyo56CB55uY5YaF5a65XHJcblx0dmlld0FjZWlvblJvdyhkYXRhLHR5cGUpe1xyXG5cdFx0Ly8gY29uc29sZS5sb2coZGF0YSk7XHJcblx0ICAgIHZhciBzdHlsZVN0ciA9IEpTT04uc3RyaW5naWZ5KHRoaXMuJGRhdGEuZGV0YWlsMV9zdHlsZWRlZik7XHJcblx0XHRpZih0eXBlKXsgLy/noa7lrprlkI7ohJrmnKzov5vlhaXliqDovb3lt7LnoIHnm5jmlbDmja5cclxuXHRcdCAgICBzdHlsZVN0ciA9IEpTT04uc3RyaW5naWZ5KHRoaXMuJGRhdGEuZGV0YWlsMl9zdHlsZWRlZik7XHJcblx0XHR9XHJcblx0ICAgIHZhciBkZXRhaWxTdHlsZSA9IEpTT04ucGFyc2Uoc3R5bGVTdHIpO1xyXG5cdCAgICBkYXRhLnJvdy5hdHRycy5mb3JFYWNoKGF0dHI9PntcclxuXHQgICAgICAgIGRldGFpbFN0eWxlLmZvcm0uaXRlbXMuZm9yRWFjaChlbGU9PntcclxuXHQgICAgICAgICAgICBpZihlbGUubmFtZSE9J0xheW91dCcpe1xyXG5cdCAgICAgICAgICAgICAgaWYoZWxlLmZpZWxkSWQgPT0gYXR0ci5hdHRyKSBlbGUudmFsdWUgPSBhdHRyLnZhbHVlO1xyXG5cdCAgICAgICAgICAgIH0gZWxzZSBpZihlbGUubmFtZT09J0xheW91dCcpe1xyXG5cdCAgICAgICAgICAgICAgZWxlLnNldHRpbmcuY29sTGlzdC5mb3JFYWNoKGNvbD0+e1xyXG5cdCAgICAgICAgICAgICAgICBpZihjb2wpe1xyXG5cdCAgICAgICAgICAgICAgICAgIGlmKGNvbC5maWVsZElkID09IGF0dHIuYXR0cikgY29sLnZhbHVlID0gYXR0ci52YWx1ZTtcclxuXHQgICAgICAgICAgICAgICAgfVxyXG5cdCAgICAgICAgICAgICAgfSk7XHJcblx0ICAgICAgICAgICAgfVxyXG5cdCAgICAgICAgfSk7XHJcblx0ICAgIH0pO1xyXG5cdFx0aWYodHlwZSl7IC8v56Gu5a6a5ZCO6ISa5pys6L+b5YWl5Yqg6L295bey56CB55uY5pWw5o2uXHJcblx0XHQgICAgZGV0YWlsU3R5bGUuZm9ybS5vYmpJZCA9IGRhdGEucm93LmlkO1xyXG5cdFx0ICAgIHRoaXMuJGRhdGEuZGV0YWlsMlN0eWxlRGVmTGlzdC5wdXNoKGRldGFpbFN0eWxlKTtcclxuXHRcdCAgICAvLyBjb25zb2xlLmxvZyh0aGlzLiRkYXRhLmRldGFpbDJTdHlsZURlZkxpc3QpO1xyXG5cdFx0fWVsc2V7XHJcblx0XHRcdGRldGFpbFN0eWxlLmZvcm0uYXR0cnMgPSBkYXRhLnJvdy5hdHRycztcclxuXHRcdFx0dGhpcy4kZGF0YS5kZXRhaWwxU3R5bGVEZWZMaXN0LnB1c2goZGV0YWlsU3R5bGUpO1xyXG5cdFx0XHQvLyBjb25zb2xlLmxvZyh0aGlzLiRkYXRhLmRldGFpbDFTdHlsZURlZkxpc3QpO1xyXG5cdFx0fVxyXG5cdH0sXHJcblx0Ly/liqDovb3lt7LnoIHnm5jlhoXlrrlcclxuXHR2aWV3QWNlaW9uQ29udGVudChkYXRhKXtcclxuXHQgICAgZGF0YS5jb250ZW50LmZvckVhY2goY29udD0+e1xyXG5cdCAgICAgICAgdmFyIHN0eWxlU3RyID0gSlNPTi5zdHJpbmdpZnkodGhpcy4kZGF0YS5kZXRhaWwyX3N0eWxlZGVmKTtcclxuXHQgICAgICAgIHZhciBkZXRhaWxTdHlsZSA9IEpTT04ucGFyc2Uoc3R5bGVTdHIpO1xyXG5cdCAgICAgICAgZGV0YWlsU3R5bGUuZm9ybS5vYmpJZCA9IGNvbnQuaWQ7XHJcblx0ICAgICAgICBjb250LmF0dHJzLmZvckVhY2goYXR0cj0+e1xyXG5cdCAgICAgICAgICBkZXRhaWxTdHlsZS5mb3JtLml0ZW1zLmZvckVhY2goZWxlPT57IFxyXG5cdCAgICAgICAgICAgIGlmKGVsZS5uYW1lIT0nTGF5b3V0Jyl7XHJcblx0ICAgICAgICAgICAgICBpZihlbGUuZmllbGRJZCA9PSBhdHRyLmF0dHIpIGVsZS52YWx1ZSA9IGF0dHIudmFsdWU7XHJcblx0ICAgICAgICAgICAgfSBlbHNlIGlmKGVsZS5uYW1lPT0nTGF5b3V0Jyl7XHJcblx0ICAgICAgICAgICAgICBlbGUuc2V0dGluZy5jb2xMaXN0LmZvckVhY2goY29sPT57XHJcblx0ICAgICAgICAgICAgICAgIGlmKGNvbCl7XHJcblx0ICAgICAgICAgICAgICAgICAgaWYoY29sLmZpZWxkSWQgPT0gYXR0ci5hdHRyKSBjb2wudmFsdWUgPSBhdHRyLnZhbHVlO1xyXG5cdCAgICAgICAgICAgICAgICB9XHJcblx0ICAgICAgICAgICAgICB9KTtcclxuXHQgICAgICAgICAgICB9XHJcblx0ICAgICAgICAgIH0pO1xyXG5cdCAgICAgICAgfSk7XHJcblx0ICAgICAgICB0aGlzLiRkYXRhLmRldGFpbDJTdHlsZURlZkxpc3QucHVzaChkZXRhaWxTdHlsZSk7XHJcblx0ICAgIH0pO1xyXG5cdCAgICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuZGV0YWlsMlN0eWxlRGVmTGlzdCk7XHJcblx0fSxcblx0b25DbGlja0l0ZW0oZSkgeyAvL+mAieaLqemhteetvlxyXG5cdFx0Ly8gY29uc29sZS5sb2coZSk7XHJcblx0XHR0aGlzLmN1cnJlbnQgPSBlLmN1cnJlbnRJbmRleFxyXG5cdH0sXHJcblx0b25EZXRhaWwxRW50ZXJDaGFuZ2UoaXRlbSl7ICAvL+eggeebmOS4reagt+W8j+Wbnui9puS6i+S7tlxyXG5cdCAgICBjb25zb2xlLmxvZyhpdGVtKTtcclxuXHR9LFxyXG5cdGRlbEl0ZW0oaW5kZXgpeyAgLy/liKDpmaTnoIHnm5jkuK3moLflvI/pnaLmnb9cclxuXHQgICAgdGhpcy5kZXRhaWwxU3R5bGVEZWZMaXN0LnNwbGljZShpbmRleCwxKTtcclxuXHR9LFxuICAgIGRlbERhdGFPYmooc3R5bGUsaW5kZXgpeyAgLy/liKDpmaTlt7LnoIHnm5jmlbBcbiAgICAgIC8vIGNvbnNvbGUubG9nKHN0eWxlKTtcclxuXHQgIHZhciAkdGhpcyA9IHRoaXM7XHJcblx0ICB1bmkuc2hvd01vZGFsKHtcclxuXHQgIFx0dGl0bGU6ICfmj5DnpLonLFxyXG5cdCAgXHRjb250ZW50OiAn56Gu5a6a5Yig6Zmk6K+l5bey56CB55uY5pWw5o2u77yBJyxcclxuXHQgIFx0c3VjY2VzczogZnVuY3Rpb24gKHJlcykge1xyXG5cdCAgXHRcdGlmIChyZXMuY29uZmlybSkge1xyXG5cdFx0XHRcdHZhciBvYmpJRD1zdHlsZS5mb3JtLm9iaklkO1xyXG5cdFx0XHRcdGlmKCFzdHlsZS5mb3JtLm9iaklkLmluY2x1ZGVzKCd7JykpIG9iaklEID0gJ3snK3N0eWxlLmZvcm0ub2JqSWQrJ30nO1xyXG5cdFx0XHRcdCAgICAgICAgICBcclxuXHRcdFx0XHR2YXIgZGF0YUluZm89e1xuXHRcdFx0XHRcdGNsYXNzX2lkOnN0eWxlLmZvcm0uY2xzSWQsXHJcblx0XHRcdFx0XHRjbGFzc19uYW1lOicnLFxyXG5cdFx0XHRcdFx0b2JqX2lkOm9iaklEXG5cdFx0XHRcdH07XHJcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coZGF0YUluZm8pO1xyXG5cdFx0XHRcdCR0aGlzLiRzdG9yZS5kaXNwYXRjaCgnZGF0YU9iakRlbCcsZGF0YUluZm8pLnRoZW4ocmV0PT57XHJcblx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhyZXQpO1xyXG5cdFx0XHRcdFx0aWYgKHJldC5lcnJfY29kZSA9PSAwKSB7XHJcblx0XHRcdFx0XHRcdCR0aGlzLmRldGFpbDJTdHlsZURlZkxpc3Quc3BsaWNlKGluZGV4LDEpO1xyXG5cdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIuaPkOekulwiLGNvbnRlbnQ6XCLliKDpmaTmiJDlip/vvIFcIixzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0XHR9ZWxzZXtcclxuXHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor681XCIsY29udGVudDpyZXQuZXJyX21zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KS5jYXRjaChleD0+e1xyXG5cdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coZXgpO1xyXG5cdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor681LjFcIixjb250ZW50OmV4LmVyck1zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0XHR9KTtcclxuXHQgIFx0XHR9IGVsc2UgaWYgKHJlcy5jYW5jZWwpIHtcclxuXHRcdFx0XHRcclxuXHQgIFx0XHR9XHJcblx0ICBcdH1cclxuXHQgIH0pO1xuICAgICAgXG4gICAgfSxcclxuXHRcclxuXHRvaygpeyAvL+ehruWumlxyXG5cdFx0Ly8gdmFyICR0aGlzID0gdGhpcztcclxuXHRcdC8vIGNvbnNvbGUubG9nKHRoaXMuJGRhdGEucGFyYW0uQmVmb3JlX09LX0V2ZW50KTtcclxuXHQgLy8gICAgY29uc29sZS5sb2codGhpcy4kZGF0YS5wYXJhbS5BZnRlcl9PS19FdmVudCk7XHJcblx0ICAgIGlmKHRoaXMuJGRhdGEucGFyYW0uQmVmb3JlX09LX0V2ZW50KSAvL+aYr+WQpuacieehruWumuWJjeS6i+S7tlxyXG5cdCAgICAgICAgdGhpcy5zYXZhKHRoaXMuJGRhdGEucGFyYW0uQmVmb3JlX09LX0V2ZW50KTtcclxuXHQgICAgZWxzZSBpZih0aGlzLiRkYXRhLnBhcmFtLkFmdGVyX09LX0V2ZW50KSAgLy/mmK/lkKbmnInnoa7lrprlkI7kuovku7ZcclxuXHQgICAgICAgIHRoaXMuc2F2YSh0aGlzLiRkYXRhLnBhcmFtLkFmdGVyX09LX0V2ZW50KTtcclxuXHR9LFxyXG5cdHNhdmEoZXZlbnQpe1xyXG5cdFx0dmFyICR0aGlzID0gdGhpcztcclxuXHQgICAgaWYodGhpcy4kZGF0YS5kZXRhaWwxU3R5bGVEZWZMaXN0Lmxlbmd0aD09MCl7XHJcblx0ICAgICAgdW5pLnNob3dNb2RhbCh7dGl0bGU6XCLmj5DnpLpcIixjb250ZW50Olwi5rKh5pyJ5q2j5Zyo56CB55uY55qE5pWw5o2u77yBXCIsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0ICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cdCAgICB9XHJcblx0ICAgIC8v6I635Y+W6KGo5aS05bGe5oCnXHJcblx0ICAgIHZhciBoZWFkX2F0dHIgPSB7fTtcclxuXHQgICAgdGhpcy4kZGF0YS5oZWFkX3N0eWxlZGVmLmZvcm0uaXRlbXMuZm9yRWFjaChpdGVtID0+IHtcclxuXHQgICAgICBoZWFkX2F0dHJbaXRlbS5maWVsZElkXSA9IGl0ZW0udmFsdWU7XHJcblx0ICAgIH0pO1xyXG5cdCAgICAvLyBjb25zb2xlLmxvZyhoZWFkX2F0dHIpO1xyXG5cdCAgICAvL+iOt+WPluato+WcqOeggeebmOWxnuaAp1xyXG5cdCAgICB2YXIgZGV0YWlsQXR0ckxpc3QgPSBbXTtcclxuXHQgICAgdGhpcy4kZGF0YS5kZXRhaWwxU3R5bGVEZWZMaXN0LmZvckVhY2goc3R5bGU9PntcclxuXHQgICAgICB2YXIgZGV0YWlsX2F0dHI9e307XHJcblx0XHQgIHN0eWxlLmZvcm0uaXRlbXMuZm9yRWFjaChpdGVtID0+IHtcclxuXHQgICAgICAgIGlmKGl0ZW0ubmFtZSA9PSBcIkxheW91dFwiKXsgIC8v5Yik5pat5piv5ZCm5piv5qCF5qCP5qC85byPXHJcblx0ICAgICAgICAgIGl0ZW0uc2V0dGluZy5jb2xMaXN0LmZvckVhY2goY29scyA9PiB7XHJcblx0ICAgICAgICAgICAgaWYoY29scyE9bnVsbCkgZGV0YWlsX2F0dHJbY29scy5maWVsZElkXSA9IGNvbHMudmFsdWU7XHJcblx0ICAgICAgICAgIH0pO1xyXG5cdCAgICAgICAgfWVsc2VcclxuXHQgICAgICAgICAgZGV0YWlsX2F0dHJbaXRlbS5maWVsZElkXSA9IGl0ZW0udmFsdWU7XHJcblx0ICAgICAgfSk7XHJcblx0ICAgICAgZGV0YWlsQXR0ckxpc3QucHVzaChkZXRhaWxfYXR0cik7XHJcblx0ICAgIH0pO1xyXG5cdCAgICAvLyBjb25zb2xlLmxvZyhkZXRhaWxBdHRyTGlzdCk7XHJcblx0XHQvL+iOt+WPluato+WcqOeggeebmOmHjOayoeacieaYvuekuueahOWtl+autVxyXG5cdFx0dGhpcy4kZGF0YS5kZXRhaWwxU3R5bGVEZWZMaXN0LmZvckVhY2goc3R5bGU9PntcclxuXHRcdCAgc3R5bGUuZm9ybS5hdHRycy5mb3JFYWNoKGF0dHIgPT4ge1xyXG5cdFx0ICAgIGZvcih2YXIga2V5IGluIGRldGFpbEF0dHJMaXN0KXtcclxuXHRcdCAgICAgIGxldCBrZXlzID0gT2JqZWN0LmtleXMoZGV0YWlsQXR0ckxpc3Rba2V5XSk7XHJcblx0XHQgICAgICBsZXQgaXNmbGFnID0gdHJ1ZTtcclxuXHRcdCAgICAgIGtleXMuZm9yRWFjaCgoZWxlKSA9PiB7XHJcblx0XHQgICAgICAgIGlmKGVsZSA9PSBhdHRyLmF0dHIpIGlzZmxhZyA9IGZhbHNlO1xyXG5cdFx0ICAgICAgfSk7XHJcblx0XHQgICAgICBpZihpc2ZsYWcpIHtcclxuXHRcdCAgICAgICAgZGV0YWlsQXR0ckxpc3RbYXR0ci5hdHRyXSA9IGF0dHIudmFsdWU7XHJcblx0XHQgICAgICB9XHJcblx0XHQgICAgfSBcclxuXHRcdCAgfSk7XHJcblx0XHR9KTtcclxuXHRcdC8vIGNvbnNvbGUubG9nKGRldGFpbEF0dHJMaXN0KTtcclxuXHQgLy8gICAgcmV0dXJuO1xyXG5cdFx0dmFyIGlucHV0X3BhcmFtID0gQmFzZTY0LmVuY29kZShcclxuXHRcdCAgICBKU09OLnN0cmluZ2lmeShcclxuXHRcdCAgICAgIE9iamVjdC5rZXlzKGhlYWRfYXR0cikubWFwKChhKSA9PiAoe1xyXG5cdFx0ICAgICAgICBhdHRyOiBhLFxyXG5cdFx0ICAgICAgICB2YWx1ZTogaGVhZF9hdHRyW2FdIHx8IFwiXCIsXHJcblx0XHQgICAgICB9KSlcclxuXHRcdCAgICApXHJcblx0XHQpO1xyXG5cdFx0IHZhciBqc29ubGlzdD1bXTtcclxuXHRcdGRldGFpbEF0dHJMaXN0LmZvckVhY2goYXR0cj0+e1xyXG5cdFx0ICAgIGpzb25saXN0LnB1c2goe1xyXG5cdFx0ICAgICAgaWQ6JycsXHJcblx0XHQgICAgICBhdHRyczogT2JqZWN0LmtleXMoYXR0cikubWFwKChhKSA9PiAoe1xyXG5cdFx0ICAgICAgICBhdHRyOiBhLFxyXG5cdFx0ICAgICAgICB2YWx1ZTogYXR0clthXSB8fCBcIlwiLFxyXG5cdFx0ICAgICAgfSkpXHJcblx0XHQgICAgfSk7XHJcblx0XHR9KTtcclxuXHRcdC8vIGNvbnNvbGUubG9nKGpzb25saXN0KTtcclxuXHRcdGpzb25saXN0LmZvckVhY2goYXN5bmMgKGpzb24sa2V5KT0+e1xyXG5cdFx0XHRhd2FpdCAkdGhpcy5ydW5DdXN0b21FdmVudChldmVudCxpbnB1dF9wYXJhbSxqc29uKTtcclxuXHRcdH0pO1xyXG5cdH0sXG4gICAgLy/miafooYznoa7lrprohJrmnKxcbiAgICBhc3luYyBydW5DdXN0b21FdmVudChldmVudCxpbnB1dF9wYXJhbSxqc29uKXtcclxuXHRcdHZhciAkdGhpcyA9IHRoaXM7XHJcblx0XHR2YXIgZGF0YV9qc29uID0gQmFzZTY0LmVuY29kZShcclxuXHRcdCAgICBKU09OLnN0cmluZ2lmeShqc29uKVxyXG5cdFx0KTtcclxuXHRcdHZhciBkYXRhSW5mbz17XHJcblx0XHQgIGVkX3R5cGU6IDAsXHJcblx0XHQgIHN0YXJ0X3RyYW5zYWN0aW9uOiAnJyxcclxuXHRcdCAgY2xhc3NfaWQ6IHRoaXMuJGRhdGEuaGVhZF9zdHlsZWRlZi5mb3JtLmNsc0lkLFxyXG5cdFx0ICBjbGFzc19uYW1lOiAnJyxcclxuXHRcdCAgZXZlbnRfaWQ6IHRoaXMuJGRhdGEucGFyYW0uQWZ0ZXJfT0tfRXZlbnQuSUQsXHJcblx0XHQgIGV2ZW50X25hbWU6ICcnLFxyXG5cdFx0ICBkYXRhX29ial9pZDogJycsXHJcblx0XHQgIG9ial9hdHRyOiAnJyxcclxuXHRcdCAgcHJqX2lkOiAnJyxcclxuXHRcdCAgcmVmX2Nsc19pZDogJycsXHJcblx0XHQgIHJlbF9vYmpfaWQ6ICcnLFxyXG5cdFx0ICB1c2VyX2xvZ2luOiAnJyxcclxuXHRcdCAgZGF0YV9qc29uOiBkYXRhX2pzb24sXHJcblx0XHQgIGNvbXBvc2VfaW5mbzogJycsXHJcblx0XHQgIGV4dF9pbmZvOiAnJyxcclxuXHRcdCAgZ2xvYmFsX2F0dHI6ICcnLFxyXG5cdFx0ICBpbnB1dF9wYXJhbTogaW5wdXRfcGFyYW0sXHJcblx0XHR9O1xyXG5cdFx0Ly8gY29uc29sZS5sb2coZGF0YUluZm8pO1xyXG5cdFx0dGhpcy4kc3RvcmUuZGlzcGF0Y2goJ3J1bkN1c3RvbUV2ZW50JyxkYXRhSW5mbykudGhlbihyZXM9PntcclxuXHRcdFx0Y29uc29sZS5sb2cocmVzKTtcclxuXHRcdFx0aWYgKHJlcy5lcnJfY29kZSA9PSAwKSB7XHJcblx0XHRcdFx0dmFyIHJlc3VsdCA9IHJlcy5yZXN1bHQ7IFxyXG5cdFx0XHRcdGlmIChyZXN1bHQucmV0ICE9IDApIHtcclxuXHRcdFx0XHQgICAgdmFyIHRpcCA9IHJlc3VsdC5lcnJfaW5mbyA/IHR5cGVvZiByZXN1bHQuZXJyX2luZm8gPT0gJ3N0cmluZycgPyByZXN1bHQuZXJyX2luZm8gOiByZXN1bHQuZXJyX2luZm8uam9pbignPGJyLz4nKSA6ICcnO1xyXG5cdFx0XHRcdCAgICBpZiAocmVzdWx0LnJldCA9PSA4MDEpIHVuaS5zaG93TW9kYWwoe3RpdGxlOifmj5DnpLonLGNvbnRlbnQ6dGlwLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHRcdCAgICBlbHNlIHVuaS5zaG93TW9kYWwoe3RpdGxlOifmj5DnpLonLGNvbnRlbnQ6dGlwKycs5o+Q56S6OicrcmVzdWx0LnJldCxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0XHRcdHJldHVybiBmYWxzZVxyXG5cdFx0XHRcdH1lbHNle1xyXG5cdFx0XHRcdFx0bGV0IHRpcCA9IHJlc3VsdC5pbmZvID8gdHlwZW9mIHJlc3VsdC5pbmZvID09ICdzdHJpbmcnID8gcmVzdWx0LmluZm8gOiByZXN1bHQuaW5mby5qb2luKCc8YnIvPicpIDogJyc7XHJcblx0XHRcdFx0XHRpZiAodGlwKSB1bmkuc2hvd01vZGFsKHt0aXRsZTon5o+Q56S6Jyxjb250ZW50OnRpcCxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0XHRcclxuXHRcdFx0XHRcdGlmKHJlc3VsdC5yZXN1bHRfdHlwZSA9PSAwKXtcclxuXHRcdFx0XHRcdCAgaWYocmVzdWx0LmFjdGlvbil7XHJcblx0XHRcdFx0XHRcdHJlc3VsdC5hY3Rpb24uZm9yRWFjaChpdGVtPT57XHJcblx0XHRcdFx0XHRcdCAgaWYoaXRlbS5hY3Rpb25fdHlwZSA9PSBcImluc2VydF9zdWJ0YWJsZV9wYWdlX3Jvd1wiKXsgLy/noIHnm5jkuK1cclxuXHRcdFx0XHRcdFx0XHR2YXIgdmFsdWUgPSBpdGVtLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdC8v5Yqg6L295bey57uP56CB55uY5pWw5o2uXHJcblx0XHRcdFx0XHRcdFx0JHRoaXMudmlld0FjZWlvblJvdyh2YWx1ZSwnYWRkJyk7XHJcblx0XHRcdFx0XHRcdFx0Ly/muIXnqbrmnaHnoIHlhoXlrrlcclxuXHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5oZWFkX3N0eWxlZGVmLmZvcm0uaXRlbXMuZm9yRWFjaCgoaXRlbSxpbmRleCkgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdFx0aWYoaXRlbS5maWVsZElkICE9IFwiU19DTlRSX0NPREVcIil7XHJcblx0XHRcdFx0XHRcdFx0XHQgIGl0ZW0udmFsdWUgPSAnJztcclxuXHRcdFx0XHRcdFx0XHRcdCAgaXRlbS5vbGR2YWx1ZSA9ICcnO1xyXG5cdFx0XHRcdFx0XHRcdFx0ICAkdGhpcy4kZGF0YS5oZWFkX3N0eWxlZGVmLmZvcm0ubW9kZWxbaXRlbS5maWVsZElkXSA9ICcnO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHQvL+a4hemZpOato+WcqOeggeebmOS4reaIkOWKn+eahOaVsOaNrlxuXHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5kZXRhaWwxU3R5bGVEZWZMaXN0LmZvckVhY2goKHN0eWxlLGluZGV4KT0+e1xuXHRcdFx0XHRcdFx0XHQgIGlmKHN0eWxlLmZvcm0uaXRlbXNbMF0uZmllbGRJZCA9PSBqc29uLmF0dHJzWzBdLmF0dHIgJiYgc3R5bGUuZm9ybS5pdGVtc1swXS52YWx1ZSA9PSBqc29uLmF0dHJzWzBdLnZhbHVlKXsgXG5cdFx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEuZGV0YWlsMVN0eWxlRGVmTGlzdC5zcGxpY2UoaW5kZXgsMSk7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0XHQgIH1cblx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdFx0Ly8gdGhpcy5kZXRhaWwyU3R5bGVEZWZMaXN0PVtdO1xyXG5cdFx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi5o+Q56S6XCIsY29udGVudDpcIueggeebmOaIkOWKn1wiLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHRcdFx0XHQgIH1cclxuXHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHQgIH1lbHNle1xyXG5cdFx0XHRcdFx0XHRpZigkdGhpcy4kZGF0YS5wYXJhbS5BZnRlcl9PS19FdmVudC5JRCAhPSBldmVudC5JRCl7IC8v5Yik5pat5b2T5YmN5LqL5Lu25piv5ZCm5piv56Gu5a6a5ZCO5LqL5Lu2XHJcblx0XHRcdFx0XHRcdFx0JHRoaXMuc2F2YSgkdGhpcy4kZGF0YS5wYXJhbS5BZnRlcl9PS19FdmVudCk7IC8v5omn6KGM56Gu5a6a5ZCO5LqL5Lu2XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdCAgfVxyXG5cdFx0XHRcdFx0fWVsc2V7XHJcblx0XHRcdFx0XHRcdC8vICR0aGlzLiRkYXRhLmRldGFpbDJTdHlsZURlZkxpc3Q9W107XHJcblx0XHRcdFx0XHRcdGlmKHJlc3VsdC5pbmZvKXtcclxuXHRcdFx0XHRcdFx0ICB1bmkuc2hvd01vZGFsKHt0aXRsZTpcIuaPkOekulwiLGNvbnRlbnQ6cmVzdWx0LmluZm8sc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1lbHNle1xyXG5cdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vOFwiLGNvbnRlbnQ6cmVzLmVycl9tc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdH1cclxuXHRcdH0pLmNhdGNoKGV4PT57XHJcblx0XHQgICAgbGV0IHRpcCA9IHR5cGVvZiBleCA9PSBcInN0cmluZ1wiID8gZXggOiBleC5lcnJNc2c7XHJcblx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vOC4xXCIsY29udGVudDpcIuaJp+ihjOKAnOehruWumuWQjuKAneS6i+S7tuWksei0pe+8mlwiICsgdGlwLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0fSk7XHJcblx0fSxcclxuXHRcclxuXHRjYW5jZWwoZSl7IC8v5Y+W5raIXHJcblx0XHR1bmkubmF2aWdhdGVCYWNrKHtcclxuXHRcdFx0ZGVsdGE6MSAvL+i/lOWbnuWxguaVsO+8jDLliJnkuIrkuIrpobVcclxuXHRcdH0pO1xyXG5cdH0sXHJcbiAgfSxcbn07XG48L3NjcmlwdD5cbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///136\n");
/***/ }),
/* 137 */