diff --git a/pages/skiping/skip.vue b/pages/skiping/skip.vue index b8840e48..7822e0d7 100644 --- a/pages/skiping/skip.vue +++ b/pages/skiping/skip.vue @@ -408,7 +408,7 @@ uni.navigateTo({ url: "/pages/devices/PCT01?info=" + JSON.stringify(info) }) - }, 100) + }, 200) } console.log("value", value, that.active) }) diff --git a/unpackage/dist/dev/app-plus/app-service.js b/unpackage/dist/dev/app-plus/app-service.js index af711754..d2d71f1b 100644 --- a/unpackage/dist/dev/app-plus/app-service.js +++ b/unpackage/dist/dev/app-plus/app-service.js @@ -20072,7 +20072,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _D_H /***/ (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 _defineProperty2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/defineProperty */ 2));\nvar _vuex = __webpack_require__(/*! vuex */ 21);\nvar _record = _interopRequireDefault(__webpack_require__(/*! @/element/manuallyAdd/record.vue */ 33));\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\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 myTime;\nvar _default = {\n data: function data() {\n return {\n active: 1,\n acd_id: 6,\n weight: 50,\n disabled: false,\n isDevice: 0,\n isConnection: false,\n time_m: \"\",\n time_s: \"\",\n timeList: [],\n timesTndex: [1, 0],\n deviceId: \"\",\n serviceId: \"\",\n write: \"\",\n notify: \"\",\n islink: 0 //0连接中,1成功,-1失败\n };\n },\n\n components: {\n record: _record.default\n },\n computed: _objectSpread(_objectSpread({}, (0, _vuex.mapState)(['user', \"MeasureSkip\", \"isConnected\", \"isBluetoothTyle\", \"devicesList\"])), {}, {\n info: function info() {\n return this.MeasureSkip;\n }\n }),\n mounted: function mounted() {\n var that = this;\n that.timeList = that.$tools.gethms();\n that.time_m = that.timeList[0][1].substring(0, 2);\n that.time_s = that.timeList[1][0].substring(0, 2);\n },\n onLoad: function onLoad(options) {\n var that = this;\n __f__(\"log\", 'options', options, \" at pages/skiping/skip.vue:160\");\n // 首页进入\n if (options && options.acd_id) {\n that.acd_id = options.acd_id;\n that.isDevice = options.device;\n setTimeout(function () {\n that.handleisSdevice();\n }, 1000);\n }\n // 跳绳页返回\n if (options && options.info) {\n var data = JSON.parse(options.info);\n that.active = data.active;\n that.deviceId = data.deviceId;\n that.serviceId = data.serviceId;\n that.write = data.write;\n that.notify = data.notify;\n that.islink = !that.isConnected ? -1 : 1;\n that.notifyBLECharacteristicValue();\n }\n that.$store.dispatch(\"getSkipResult\", {\n aud_id: uni.getStorageSync('userid')\n });\n that.isConnection = that.isConnected;\n that.$Bluetooth.onBLEConnectionStateChange();\n uni.onBluetoothAdapterStateChange(function (res) {\n that.$store.commit(\"changeBluetooth\", res.available);\n });\n },\n onPullDownRefresh: function onPullDownRefresh() {\n setTimeout(function () {\n uni.stopPullDownRefresh();\n }, 1000);\n },\n onShow: function onShow() {\n var that = this;\n // 跳绳页返回\n uni.$on('updateData', function (data) {\n var info = JSON.parse(data);\n that.acd_id = info.acd_id;\n that.isDevice = info.device;\n __f__(\"log\", '监听到事件来自 updateData ,携带参数为:' + info, \" at pages/skiping/skip.vue:201\");\n });\n },\n onBackPress: function onBackPress(options) {\n var that = this;\n that.islink = -1;\n clearTimeout(myTime);\n that.isConnection = false;\n that.$Bluetooth.closeBluetoothAdapter();\n that.$Bluetooth.closeBLEConnection(that.deviceId);\n that.$Bluetooth.stopBluetoothDevicesDiscovery();\n that.$store.commit(\"changeBluetooth\", false);\n that.$store.commit(\"changeConnected\", false);\n setTimeout(function () {\n uni.switchTab({\n url: '/pages/home/home'\n });\n }, 300);\n __f__(\"log\", \"返回首页\", \" at pages/skiping/skip.vue:219\");\n return true;\n },\n watch: {\n devicesList: function devicesList() {\n var that = this;\n if (that.devicesList.length) {\n clearTimeout(myTime);\n that.$Bluetooth.stopBluetoothDevicesDiscovery();\n that.handleDevType(that.devicesList[0]);\n }\n __f__(\"log\", \"devicesList\", that.devicesList, \" at pages/skiping/skip.vue:230\");\n },\n isConnected: function isConnected() {\n var that = this;\n if (!that.isConnected) {\n that.islink = -1;\n }\n that.isConnection = that.isConnected;\n __f__(\"log\", \"蓝牙是否连接\", that.isConnected, \" at pages/skiping/skip.vue:238\");\n },\n isBluetoothTyle: function isBluetoothTyle() {\n var that = this;\n if (!that.isBluetoothTyle) {\n that.isConnection = false;\n that.islink = -1;\n }\n __f__(\"log\", \"蓝牙是否打开\", that.isBluetoothTyle, \" at pages/skiping/skip.vue:246\");\n }\n },\n methods: {\n handleisSdevice: function handleisSdevice() {\n var that = this;\n if (that.isConnected) return;\n if (Number(that.isDevice) != 0) {\n that.$Bluetooth.stopBluetoothDevicesDiscovery();\n uni.openBluetoothAdapter({\n success: function success(e) {\n that.islink = 0;\n that.handleMyTime();\n that.$store.commit(\"changedevicesList\", []);\n that.$store.commit(\"changeBluetooth\", true);\n that.$Bluetooth.startBluetoothDeviceDiscovery();\n __f__(\"log\", '初始化蓝牙成功:' + e.errMsg, \" at pages/skiping/skip.vue:262\");\n },\n fail: function fail(e) {\n that.islink = -1;\n that.$Bluetooth.getBluetoothAdapter(e);\n }\n });\n } else {\n that.$tools.msg(\"请先添加设备!\");\n setTimeout(function () {\n uni.switchTab({\n url: \"/pages/business/business\"\n });\n }, 500);\n }\n },\n // 设备排查\n handleDevType: function handleDevType(device) {\n var that = this;\n __f__(\"log\", \"device123\", device, \" at pages/skiping/skip.vue:281\");\n that.$model.getdevdetail({\n mac: device.macAddr,\n acd_id: that.acd_id\n }).then(function (res) {\n __f__(\"log\", \"排查返回\", res, \" at pages/skiping/skip.vue:286\");\n if (res.code == 0) {\n that.deviceId = device.deviceId;\n that.createBLEConnection();\n }\n });\n },\n // 连接蓝牙\n createBLEConnection: function createBLEConnection() {\n var that = this;\n uni.createBLEConnection({\n deviceId: that.deviceId,\n success: function success(res) {\n setTimeout(function () {\n uni.hideLoading();\n that.islink = 1;\n that.isConnection = true;\n that.getBLEDeviceServices();\n }, 1000);\n },\n fail: function fail(res) {\n __f__(\"log\", \"设备连接失败,请重新连接\", res, that.deviceId, \" at pages/skiping/skip.vue:307\");\n }\n });\n },\n /**\n * 获取设备的UUID\n */\n getBLEDeviceServices: function getBLEDeviceServices() {\n var serviceList = [];\n var that = this;\n uni.getBLEDeviceServices({\n deviceId: that.deviceId,\n success: function success(res) {\n __f__(\"log\", \"获取设备的UUID成功\", res, \" at pages/skiping/skip.vue:320\");\n serviceList = res.services;\n for (var i = 0; i < serviceList.length; i++) {\n var service = serviceList[i];\n if (service.uuid.indexOf(\"FFE0\") != -1) {\n that.serviceId = service.uuid;\n that.getBLEDeviceCharacteristics();\n __f__(\"log\", \"设备的FFE0的serviceId: \" + that.serviceId, \" at pages/skiping/skip.vue:327\");\n break;\n }\n }\n },\n fail: function fail(res) {\n __f__(\"log\", '获取设备的UUID失败:', res, \" at pages/skiping/skip.vue:333\");\n }\n });\n },\n /**\n * 获取指定服务的特征值\n */\n getBLEDeviceCharacteristics: function getBLEDeviceCharacteristics() {\n var characteristicsList = [];\n var that = this;\n uni.getBLEDeviceCharacteristics({\n deviceId: that.deviceId,\n serviceId: that.serviceId,\n success: function success(res) {\n __f__(\"log\", \"服务的特征值成功\", res, \" at pages/skiping/skip.vue:348\");\n // * 读read: true, //,写write: true, //,通知notify: true\n for (var i = 0; i < res.characteristics.length; i++) {\n var item = res.characteristics[i];\n if (item.uuid.indexOf('0000FF12') != -1) {\n that.write = item.uuid;\n } else if (item.uuid.indexOf('0000FFE4') != -1) {\n that.notify = item.uuid;\n }\n }\n setTimeout(function () {\n var j = Number(165 + 10 + 1 + 8 + 8 + 8 + 8 + 8 + 8).toString(16);\n var str = \"A50A01080808080808\" + j.substr(j.length - 2, 2);\n that.SendData(str);\n }, 300);\n // 体重\n setTimeout(function () {\n that.handleStart(4);\n }, 600);\n uni.notifyBLECharacteristicValueChange({\n deviceId: that.deviceId,\n serviceId: that.serviceId,\n characteristicId: that.notify,\n state: true\n });\n uni.notifyBLECharacteristicValueChange({\n deviceId: that.deviceId,\n serviceId: that.serviceId,\n characteristicId: that.write,\n state: true\n });\n that.notifyBLECharacteristicValue();\n },\n fail: function fail(res) {\n __f__(\"log\", '获取特征值失败:', JSON.stringify(res), \" at pages/skiping/skip.vue:383\");\n }\n });\n },\n notifyBLECharacteristicValue: function notifyBLECharacteristicValue() {\n var that = this;\n uni.notifyBLECharacteristicValueChange({\n state: true,\n // 启用 notify 功能\n deviceId: that.deviceId,\n serviceId: that.serviceId,\n characteristicId: that.notify,\n success: function success(res) {\n uni.onBLECharacteristicValueChange(function (res) {\n var value = that.$tools.ab2hex(res.value, \"\");\n if (value == '5a05090169') {\n //模式设置成功\n var info = {\n active: that.active,\n deviceId: that.deviceId,\n serviceId: that.serviceId,\n notify: that.notify,\n write: that.write,\n acd_id: that.acd_id,\n isDevice: that.isDevice\n };\n setTimeout(function () {\n uni.navigateTo({\n url: \"/pages/devices/PCT01?info=\" + JSON.stringify(info)\n });\n }, 100);\n }\n __f__(\"log\", \"value\", value, that.active, \" at pages/skiping/skip.vue:413\");\n });\n }\n });\n },\n // 开启蓝牙主动上报模式\n SendData: function SendData(str) {\n var that = this;\n var buf = new Uint8Array(str.match(/[\\da-f]{2}/gi).map(function (h) {\n return parseInt(h, 16);\n }));\n __f__(\"log\", \"xiafa\", str, \" at pages/skiping/skip.vue:424\");\n uni.writeBLECharacteristicValue({\n deviceId: that.deviceId,\n serviceId: that.serviceId,\n characteristicId: that.write,\n value: buf.buffer,\n success: function success(res) {\n __f__(\"log\", '下发指令成功', res.errMsg, \" at pages/skiping/skip.vue:431\");\n },\n fail: function fail(res) {\n __f__(\"log\", \"下发指令失败\", res, \" at pages/skiping/skip.vue:434\");\n }\n });\n },\n // 模式切换\n handleStart: function handleStart(ind) {\n var that = this;\n var m = null;\n var send = null;\n if (!that.isConnected) {\n that.$tools.msg(\"请先连接设备!\");\n return;\n }\n if (ind == 1) {\n // 1自由\n m = Number(165 + 8 + 9).toString(16);\n send = \"A5080900000000\" + m.substr(m.length - 2, 2);\n }\n if (ind == 2) {\n //2定时\n var time = Number(that.time_m) * 60 + Number(that.time_s);\n m = Number(165 + 8 + 9 + time).toString(16);\n send = \"A508090000\" + that.$tools.toHex(time, 4) + m.substr(m.length - 2, 2);\n }\n if (ind == 3) {\n //3定数\n var weight = that.$tools.toHex(that.weight, 4);\n m = Number(165 + 8 + 9 + that.weight).toString(16);\n send = \"A50809\" + weight + \"0000\" + m.substr(m.length - 2, 2);\n }\n if (ind == 4) {\n //体重\n\n var _weight = Number(that.user.weight) * 2;\n var num = parseInt(_weight).toString();\n m = Number(165 + 5 + 8 + Number(num)).toString(16);\n send = \"A50508\" + Number(num).toString(16) + m.substr(m.length - 2, 2);\n }\n that.SendData(send);\n that.$Bluetooth.stopBluetoothDevicesDiscovery();\n },\n // 历史数据删除时重新加载接口\n reload: function reload() {\n var that = this;\n this.$nextTick(function () {\n that.$store.dispatch(\"getSkipResult\", {\n aud_id: uni.getStorageSync('userid')\n });\n });\n },\n // 定时训练\n //\n bindTimeChange: function bindTimeChange(e) {\n var that = this;\n var m = e.target.value[0];\n var s = e.target.value[1];\n that.timesTndex = e.target.value;\n var time_m = Number(that.timeList[0][m].substring(0, 2)) * 60;\n var time_s = Number(that.timeList[1][s].substring(0, 2));\n if (Number(time_m + time_s) < 30) {\n that.time_m = '00';\n that.time_s = '30';\n } else {\n that.time_m = that.timeList[0][m].substring(0, 2);\n that.time_s = that.timeList[1][s].substring(0, 2);\n }\n },\n handleTimeEdit: function handleTimeEdit(text) {\n var that = this;\n var time_m = Number(that.time_m) * 60;\n var time_s = Number(that.time_s);\n var minutes = null;\n var seconds = null;\n if (Number(time_m + time_s) >= 3570 && text == '加') {\n that.time_m = '59';\n that.time_s = '59';\n return;\n }\n if (Number(time_m + time_s) <= 30 && text == '减') {\n that.time_m = '00';\n that.time_s = '30';\n return;\n }\n if (text == '减') {\n minutes = Math.floor(Number(time_m + time_s - 30) % 3600 / 60);\n seconds = Number(time_m + time_s - 30) % 60;\n }\n if (text == '加') {\n minutes = Math.floor(Number(time_m + time_s + 30) % 3600 / 60);\n seconds = Number(time_m + time_s + 30) % 60;\n }\n that.time_m = minutes > 9 ? minutes : '0' + minutes;\n that.time_s = seconds > 9 ? seconds : '0' + seconds;\n that.timesTndex = [Number(that.time_m), Number(that.time_s)];\n },\n handleWeightEdit: function handleWeightEdit(text) {\n var that = this;\n if (text == '减') {\n that.weight = Number(that.weight) - 50 > 50 ? Number(that.weight) - 50 : 50;\n }\n if (text == '加') {\n that.weight = Number(that.weight) + 50;\n }\n },\n // 蓝牙搜索记时\n handleMyTime: function handleMyTime() {\n var that = this;\n myTime = setTimeout(function () {\n if (!that.devicesList.length) {\n that.islink = -1;\n that.$tools.showModal(\"没有查找到设备\");\n }\n clearTimeout(myTime);\n that.$Bluetooth.stopBluetoothDevicesDiscovery();\n }, 12000);\n },\n navTo: function navTo(url) {\n var that = this;\n if (!that.isConnected) {\n that.islink = -1;\n clearTimeout(myTime);\n that.$Bluetooth.closeBluetoothAdapter();\n that.$Bluetooth.closeBLEConnection(that.deviceId);\n that.$Bluetooth.stopBluetoothDevicesDiscovery();\n __f__(\"log\", \"蓝牙没有连接\", \" at pages/skiping/skip.vue:555\");\n }\n uni.navigateTo({\n url: url\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 */ 20)[\"default\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vcGFnZXMvc2tpcGluZy9za2lwLnZ1ZSJdLCJuYW1lcyI6WyJteVRpbWUiLCJkYXRhIiwiYWN0aXZlIiwiYWNkX2lkIiwid2VpZ2h0IiwiZGlzYWJsZWQiLCJpc0RldmljZSIsImlzQ29ubmVjdGlvbiIsInRpbWVfbSIsInRpbWVfcyIsInRpbWVMaXN0IiwidGltZXNUbmRleCIsImRldmljZUlkIiwic2VydmljZUlkIiwid3JpdGUiLCJub3RpZnkiLCJpc2xpbmsiLCJjb21wb25lbnRzIiwicmVjb3JkIiwiY29tcHV0ZWQiLCJtYXBTdGF0ZSIsImluZm8iLCJNZWFzdXJlU2tpcCIsIm1vdW50ZWQiLCJ0aGF0IiwiJHRvb2xzIiwiZ2V0aG1zIiwic3Vic3RyaW5nIiwib25Mb2FkIiwib3B0aW9ucyIsImRldmljZSIsInNldFRpbWVvdXQiLCJoYW5kbGVpc1NkZXZpY2UiLCJKU09OIiwicGFyc2UiLCJpc0Nvbm5lY3RlZCIsIm5vdGlmeUJMRUNoYXJhY3RlcmlzdGljVmFsdWUiLCIkc3RvcmUiLCJkaXNwYXRjaCIsImF1ZF9pZCIsInVuaSIsImdldFN0b3JhZ2VTeW5jIiwiJEJsdWV0b290aCIsIm9uQkxFQ29ubmVjdGlvblN0YXRlQ2hhbmdlIiwib25CbHVldG9vdGhBZGFwdGVyU3RhdGVDaGFuZ2UiLCJyZXMiLCJjb21taXQiLCJhdmFpbGFibGUiLCJvblB1bGxEb3duUmVmcmVzaCIsInN0b3BQdWxsRG93blJlZnJlc2giLCJvblNob3ciLCIkb24iLCJvbkJhY2tQcmVzcyIsImNsZWFyVGltZW91dCIsImNsb3NlQmx1ZXRvb3RoQWRhcHRlciIsImNsb3NlQkxFQ29ubmVjdGlvbiIsInN0b3BCbHVldG9vdGhEZXZpY2VzRGlzY292ZXJ5Iiwic3dpdGNoVGFiIiwidXJsIiwid2F0Y2giLCJkZXZpY2VzTGlzdCIsImxlbmd0aCIsImhhbmRsZURldlR5cGUiLCJpc0JsdWV0b290aFR5bGUiLCJtZXRob2RzIiwiTnVtYmVyIiwib3BlbkJsdWV0b290aEFkYXB0ZXIiLCJzdWNjZXNzIiwiZSIsImhhbmRsZU15VGltZSIsInN0YXJ0Qmx1ZXRvb3RoRGV2aWNlRGlzY292ZXJ5IiwiZXJyTXNnIiwiZmFpbCIsImdldEJsdWV0b290aEFkYXB0ZXIiLCJtc2ciLCIkbW9kZWwiLCJnZXRkZXZkZXRhaWwiLCJtYWMiLCJtYWNBZGRyIiwidGhlbiIsImNvZGUiLCJjcmVhdGVCTEVDb25uZWN0aW9uIiwiaGlkZUxvYWRpbmciLCJnZXRCTEVEZXZpY2VTZXJ2aWNlcyIsInNlcnZpY2VMaXN0Iiwic2VydmljZXMiLCJpIiwic2VydmljZSIsInV1aWQiLCJpbmRleE9mIiwiZ2V0QkxFRGV2aWNlQ2hhcmFjdGVyaXN0aWNzIiwiY2hhcmFjdGVyaXN0aWNzTGlzdCIsImNoYXJhY3RlcmlzdGljcyIsIml0ZW0iLCJqIiwidG9TdHJpbmciLCJzdHIiLCJzdWJzdHIiLCJTZW5kRGF0YSIsImhhbmRsZVN0YXJ0Iiwibm90aWZ5QkxFQ2hhcmFjdGVyaXN0aWNWYWx1ZUNoYW5nZSIsImNoYXJhY3RlcmlzdGljSWQiLCJzdGF0ZSIsInN0cmluZ2lmeSIsIm9uQkxFQ2hhcmFjdGVyaXN0aWNWYWx1ZUNoYW5nZSIsInZhbHVlIiwiYWIyaGV4IiwibmF2aWdhdGVUbyIsImJ1ZiIsIlVpbnQ4QXJyYXkiLCJtYXRjaCIsIm1hcCIsImgiLCJwYXJzZUludCIsIndyaXRlQkxFQ2hhcmFjdGVyaXN0aWNWYWx1ZSIsImJ1ZmZlciIsImluZCIsIm0iLCJzZW5kIiwidGltZSIsInRvSGV4IiwidXNlciIsIm51bSIsInJlbG9hZCIsIiRuZXh0VGljayIsImJpbmRUaW1lQ2hhbmdlIiwidGFyZ2V0IiwicyIsImhhbmRsZVRpbWVFZGl0IiwidGV4dCIsIm1pbnV0ZXMiLCJzZWNvbmRzIiwiTWF0aCIsImZsb29yIiwiaGFuZGxlV2VpZ2h0RWRpdCIsInNob3dNb2RhbCIsIm5hdlRvIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQXNIQTtBQUdBO0FBQXNEO0FBQUE7QUF6SHREO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsSUFBSUEsTUFBTTtBQUFDLGVBS0k7RUFDZEMsSUFBSSxrQkFBRztJQUNOLE9BQU87TUFDTkMsTUFBTSxFQUFFLENBQUM7TUFDVEMsTUFBTSxFQUFFLENBQUM7TUFDVEMsTUFBTSxFQUFFLEVBQUU7TUFDVkMsUUFBUSxFQUFFLEtBQUs7TUFDZkMsUUFBUSxFQUFFLENBQUM7TUFDWEMsWUFBWSxFQUFFLEtBQUs7TUFDbkJDLE1BQU0sRUFBRSxFQUFFO01BQ1ZDLE1BQU0sRUFBRSxFQUFFO01BQ1ZDLFFBQVEsRUFBRSxFQUFFO01BQ1pDLFVBQVUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7TUFDbEJDLFFBQVEsRUFBRSxFQUFFO01BQ1pDLFNBQVMsRUFBRSxFQUFFO01BQ2JDLEtB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OiIyMDAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxubGV0IG15VGltZTtcbmltcG9ydCB7XG5cdG1hcFN0YXRlXG59IGZyb20gXCJ2dWV4XCI7XG5pbXBvcnQgcmVjb3JkIGZyb20gJ0AvZWxlbWVudC9tYW51YWxseUFkZC9yZWNvcmQudnVlJztcbmV4cG9ydCBkZWZhdWx0IHtcblx0ZGF0YSgpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0YWN0aXZlOiAxLFxuXHRcdFx0YWNkX2lkOiA2LFxuXHRcdFx0d2VpZ2h0OiA1MCxcblx0XHRcdGRpc2FibGVkOiBmYWxzZSxcblx0XHRcdGlzRGV2aWNlOiAwLFxuXHRcdFx0aXNDb25uZWN0aW9uOiBmYWxzZSxcblx0XHRcdHRpbWVfbTogXCJcIixcblx0XHRcdHRpbWVfczogXCJcIixcblx0XHRcdHRpbWVMaXN0OiBbXSxcblx0XHRcdHRpbWVzVG5kZXg6IFsxLCAwXSxcblx0XHRcdGRldmljZUlkOiBcIlwiLFxuXHRcdFx0c2VydmljZUlkOiBcIlwiLFxuXHRcdFx0d3JpdGU6IFwiXCIsXG5cdFx0XHRub3RpZnk6IFwiXCIsXG5cdFx0XHRpc2xpbms6IDAgLy8w6L+e5o6l5Lit77yMMeaIkOWKn++8jC0x5aSx6LSlXG5cdFx0fVxuXHR9LFxuXHRjb21wb25lbnRzOiB7XG5cdFx0cmVjb3JkXG5cdH0sXG5cdGNvbXB1dGVkOiB7XG5cdFx0Li4ubWFwU3RhdGUoWyd1c2VyJywgXCJNZWFzdXJlU2tpcFwiLCBcImlzQ29ubmVjdGVkXCIsIFwiaXNCbHVldG9vdGhUeWxlXCIsIFwiZGV2aWNlc0xpc3RcIl0pLFxuXHRcdGluZm8oKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5NZWFzdXJlU2tpcFxuXHRcdH0sXG5cdH0sXG5cdG1vdW50ZWQoKSB7XG5cdFx0bGV0IHRoYXQgPSB0aGlzXG5cdFx0dGhhdC50aW1lTGlzdCA9IHRoYXQuJHRvb2xzLmdldGhtcygpXG5cdFx0dGhhdC50aW1lX20gPSB0aGF0LnRpbWVMaXN0WzBdWzFdLnN1YnN0cmluZygwLCAyKVxuXHRcdHRoYXQudGltZV9zID0gdGhhdC50aW1lTGlzdFsxXVswXS5zdWJzdHJpbmcoMCwgMilcblx0fSxcblx0b25Mb2FkKG9wdGlvbnMpIHtcblx0XHRsZXQgdGhhdCA9IHRoaXNcblx0XHRjb25zb2xlLmxvZygnb3B0aW9ucycsIG9wdGlvbnMpXG5cdFx0Ly8g6aaW6aG16L+b5YWlXG5cdFx0aWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5hY2RfaWQpIHtcblx0XHRcdHRoYXQuYWNkX2lkID0gb3B0aW9ucy5hY2RfaWRcblx0XHRcdHRoYXQuaXNEZXZpY2UgPSBvcHRpb25zLmRldmljZVxuXHRcdFx0c2V0VGltZW91dChmdW5jdGlvbigpIHtcblx0XHRcdFx0dGhhdC5oYW5kbGVpc1NkZXZpY2UoKVxuXHRcdFx0fSwgMTAwMClcblx0XHR9XG5cdFx0Ly8g6Lez57uz6aG16L+U5ZueXG5cdFx0aWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5pbmZvKSB7XG5cdFx0XHRsZXQgZGF0YSA9IEpTT04ucGFyc2Uob3B0aW9ucy5pbmZvKVxuXHRcdFx0dGhhdC5hY3RpdmUgPSBkYXRhLmFjdGl2ZVxuXHRcdFx0dGhhdC5kZXZpY2VJZCA9IGRhdGEuZGV2aWNlSWRcblx0XHRcdHRoYXQuc2VydmljZUlkID0gZGF0YS5zZXJ2aWNlSWRcblx0XHRcdHRoYXQud3JpdGUgPSBkYXRhLndyaXRlXG5cdFx0XHR0aGF0Lm5vdGlmeSA9IGRhdGEubm90aWZ5XG5cdFx0XHR0aGF0LmlzbGluayA9ICF0aGF0LmlzQ29ubmVjdGVkID8gLTEgOiAxXG5cdFx0XHR0aGF0Lm5vdGlmeUJMRUNoYXJhY3RlcmlzdGljVmFsdWUoKVxuXHRcdH1cblx0XHR0aGF0LiRzdG9yZS5kaXNwYXRjaChcImdldFNraXBSZXN1bHRcIiwge1xuXHRcdFx0YXVkX2lkOiB1bmkuZ2V0U3RvcmFnZVN5bmMoJ3VzZXJpZCcpXG5cdFx0fSlcblx0XHR0aGF0LmlzQ29ubmVjdGlvbiA9IHRoYXQuaXNDb25uZWN0ZWRcblx0XHR0aGF0LiRCbHVldG9vdGgub25CTEVDb25uZWN0aW9uU3RhdGVDaGFuZ2UoKVxuXHRcdHVuaS5vbkJsdWV0b290aEFkYXB0ZXJTdGF0ZUNoYW5nZShmdW5jdGlvbihyZXMpIHtcblx0XHRcdHRoYXQuJHN0b3JlLmNvbW1pdChcImNoYW5nZUJsdWV0b290aFwiLCByZXMuYXZhaWxhYmxlKTtcblx0XHR9KVxuXHR9LFxuXHRvblB1bGxEb3duUmVmcmVzaCgpIHtcblx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdHVuaS5zdG9wUHVsbERvd25SZWZyZXNoKClcblx0XHR9LCAxMDAwKTtcblx0fSxcblx0b25TaG93KCkge1xuXHRcdGxldCB0aGF0ID0gdGhpc1xuXHRcdC8vIOi3s+e7s+mhtei/lOWbnlxuXHRcdHVuaS4kb24oJ3VwZGF0ZURhdGEnLCBmdW5jdGlvbihkYXRhKSB7XG5cdFx0XHRsZXQgaW5mbyA9IEpTT04ucGFyc2UoZGF0YSlcblx0XHRcdHRoYXQuYWNkX2lkID0gaW5mby5hY2RfaWRcblx0XHRcdHRoYXQuaXNEZXZpY2UgPSBpbmZvLmRldmljZVxuXHRcdFx0Y29uc29sZS5sb2coJ+ebkeWQrOWIsOS6i+S7tuadpeiHqiB1cGRhdGVEYXRhIO+8jOaQuuW4puWPguaVsOS4uu+8micgKyBpbmZvKTtcblx0XHR9KVxuXHR9LFxuXHRvbkJhY2tQcmVzcyhvcHRpb25zKSB7XG5cdFx0bGV0IHRoYXQgPSB0aGlzXG5cdFx0dGhhdC5pc2xpbmsgPSAtMVxuXHRcdGNsZWFyVGltZW91dChteVRpbWUpO1xuXHRcdHRoYXQuaXNDb25uZWN0aW9uID0gZmFsc2Vcblx0XHR0aGF0LiRCbHVldG9vdGguY2xvc2VCbHVldG9vdGhBZGFwdGVyKClcblx0XHR0aGF0LiRCbHVldG9vdGguY2xvc2VCTEVDb25uZWN0aW9uKHRoYXQuZGV2aWNlSWQpXG5cdFx0dGhhdC4kQmx1ZXRvb3RoLnN0b3BCbHVldG9vdGhEZXZpY2VzRGlzY292ZXJ5KClcblx0XHR0aGF0LiRzdG9yZS5jb21taXQoXCJjaGFuZ2VCbHVldG9vdGhcIiwgZmFsc2UpO1xuXHRcdHRoYXQuJHN0b3JlLmNvbW1pdChcImNoYW5nZUNvbm5lY3RlZFwiLCBmYWxzZSk7XG5cdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHR1bmkuc3dpdGNoVGFiKHtcblx0XHRcdFx0dXJsOiAnL3BhZ2VzL2hvbWUvaG9tZSdcblx0XHRcdH0pXG5cdFx0fSwgMzAwKVxuXHRcdGNvbnNvbGUubG9nKFwi6L+U5Zue6aaW6aG1XCIpXG5cdFx0cmV0dXJuIHRydWVcblx0fSxcblx0d2F0Y2g6IHtcblx0XHRkZXZpY2VzTGlzdCgpIHtcblx0XHRcdGxldCB0aGF0ID0gdGhpc1xuXHRcdFx0aWYgKHRoYXQuZGV2aWNlc0xpc3QubGVuZ3RoKSB7XG5cdFx0XHRcdGNsZWFyVGltZW91dChteVRpbWUpO1xuXHRcdFx0XHR0aGF0LiRCbHVldG9vdGguc3RvcEJsdWV0b290aERldmljZXNEaXNjb3ZlcnkoKVxuXHRcdFx0XHR0aGF0LmhhbmRsZURldlR5cGUodGhhdC5kZXZpY2VzTGlzdFswXSlcblx0XHRcdH1cblx0XHRcdGNvbnNvbGUubG9nKFwiZGV2aWNlc0xpc3RcIiwgdGhhdC5kZXZpY2VzTGlzdClcblx0XHR9LFxuXHRcdGlzQ29ubmVjdGVkKCkge1xuXHRcdFx0bGV0IHRoYXQgPSB0aGlzXG5cdFx0XHRpZiAoIXRoYXQuaXNDb25uZWN0ZWQpIHtcblx0XHRcdFx0dGhhdC5pc2xpbmsgPSAtMVxuXHRcdFx0fVxuXHRcdFx0dGhhdC5pc0Nvbm5lY3Rpb24gPSB0aGF0LmlzQ29ubmVjdGVkXG5cdFx0XHRjb25zb2xlLmxvZyhcIuiTneeJmeaYr+WQpui/nuaOpVwiLCB0aGF0LmlzQ29ubmVjdGVkKVxuXHRcdH0sXG5cdFx0aXNCbHVldG9vdGhUeWxlKCkge1xuXHRcdFx0bGV0IHRoYXQgPSB0aGlzXG5cdFx0XHRpZiAoIXRoYXQuaXNCbHVldG9vdGhUeWxlKSB7XG5cdFx0XHRcdHRoYXQuaXNDb25uZWN0aW9uID0gZmFsc2Vcblx0XHRcdFx0dGhhdC5pc2xpbmsgPSAtMVxuXHRcdFx0fVxuXHRcdFx0Y29uc29sZS5sb2coXCLok53niZnmmK/lkKbmiZPlvIBcIiwgdGhhdC5pc0JsdWV0b290aFR5bGUpXG5cdFx0fVxuXHR9LFxuXHRtZXRob2RzOiB7XG5cdFx0aGFuZGxlaXNTZGV2aWNlKCkge1xuXHRcdFx0bGV0IHRoYXQgPSB0aGlzXG5cdFx0XHRpZiAodGhhdC5pc0Nvbm5lY3RlZCkgcmV0dXJuXG5cdFx0XHRpZiAoTnVtYmVyKHRoYXQuaXNEZXZpY2UpICE9IDApIHtcblx0XHRcdFx0dGhhdC4kQmx1ZXRvb3RoLnN0b3BCbHVldG9vdGhEZXZpY2VzRGlzY292ZXJ5KClcblx0XHRcdFx0dW5pLm9wZW5CbHVldG9vdGhBZGFwdGVyKHtcblx0XHRcdFx0XHRzdWNjZXNzOiBlID0+IHtcblx0XHRcdFx0XHRcdHRoYXQuaXNsaW5rID0gMFxuXHRcdFx0XHRcdFx0dGhhdC5oYW5kbGVNeVRpbWUoKVxuXHRcdFx0XHRcdFx0dGhhdC4kc3RvcmUuY29tbWl0KFwiY2hhbmdlZGV2aWNlc0xpc3RcIiwgW10pO1xuXHRcdFx0XHRcdFx0dGhhdC4kc3RvcmUuY29tbWl0KFwiY2hhbmdlQmx1ZXRvb3RoXCIsIHRydWUpXG5cdFx0XHRcdFx0XHR0aGF0LiRCbHVldG9vdGguc3RhcnRCbHVldG9vdGhEZXZpY2VEaXNjb3ZlcnkoKVxuXHRcdFx0XHRcdFx0Y29uc29sZS5sb2coJ+WIneWni+WMluiTneeJmeaIkOWKnzonICsgZS5lcnJNc2cpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0ZmFpbDogZSA9PiB7XG5cdFx0XHRcdFx0XHR0aGF0LmlzbGluayA9IC0xXG5cdFx0XHRcdFx0XHR0aGF0LiRCbHVldG9vdGguZ2V0Qmx1ZXRvb3RoQWRhcHRlcihlKVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGF0LiR0b29scy5tc2coXCLor7flhYjmt7vliqDorr7lpIfvvIFcIilcblx0XHRcdFx0c2V0VGltZW91dChmdW5jdGlvbigpIHtcblx0XHRcdFx0XHR1bmkuc3dpdGNoVGFiKHtcblx0XHRcdFx0XHRcdHVybDogXCIvcGFnZXMvYnVzaW5lc3MvYnVzaW5lc3NcIlxuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdH0sIDUwMClcblx0XHRcdH1cblx0XHR9LFxuXHRcdC8vIOiuvuWkh+aOkuafpVxuXHRcdGhhbmRsZURldlR5cGUoZGV2aWNlKSB7XG5cdFx0XHRsZXQgdGhhdCA9IHRoaXNcblx0XHRcdGNvbnNvbGUubG9nKFwiZGV2aWNlMTIzXCIsIGRldmljZSlcblx0XHRcdHRoYXQuJG1vZGVsLmdldGRldmRldGFpbCh7XG5cdFx0XHRcdG1hYzogZGV2aWNlLm1hY0FkZHIsXG5cdFx0XHRcdGFjZF9pZDogdGhhdC5hY2RfaWRcblx0XHRcdH0pLnRoZW4ocmVzID0+IHtcblx0XHRcdFx0Y29uc29sZS5sb2coXCLmjpLmn6Xov5Tlm55cIiwgcmVzKVxuXHRcdFx0XHRpZiAocmVzLmNvZGUgPT0gMCkge1xuXHRcdFx0XHRcdHRoYXQuZGV2aWNlSWQgPSBkZXZpY2UuZGV2aWNlSWRcblx0XHRcdFx0XHR0aGF0LmNyZWF0ZUJMRUNvbm5lY3Rpb24oKVxuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdH0sXG5cdFx0Ly8g6L+e5o6l6JOd54mZXG5cdFx0Y3JlYXRlQkxFQ29ubmVjdGlvbigpIHtcblx0XHRcdGxldCB0aGF0ID0gdGhpcztcblx0XHRcdHVuaS5jcmVhdGVCTEVDb25uZWN0aW9uKHtcblx0XHRcdFx0ZGV2aWNlSWQ6IHRoYXQuZGV2aWNlSWQsXG5cdFx0XHRcdHN1Y2Nlc3M6IHJlcyA9PiB7XG5cdFx0XHRcdFx0c2V0VGltZW91dChmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdHVuaS5oaWRlTG9hZGluZygpXG5cdFx0XHRcdFx0XHR0aGF0LmlzbGluayA9IDFcblx0XHRcdFx0XHRcdHRoYXQuaXNDb25uZWN0aW9uID0gdHJ1ZVxuXHRcdFx0XHRcdFx0dGhhdC5nZXRCTEVEZXZpY2VTZXJ2aWNlcygpXG5cdFx0XHRcdFx0fSwgMTAwMClcblx0XHRcdFx0fSxcblx0XHRcdFx0ZmFpbDogcmVzID0+IHtcblx0XHRcdFx0XHRjb25zb2xlLmxvZyhcIuiuvuWkh+i/nuaOpeWksei0pe+8jOivt+mHjeaWsOi/nuaOpVwiLCByZXMsIHRoYXQuZGV2aWNlSWQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9LFxuXHRcdC8qKlxuXHRcdCAqIOiOt+WPluiuvuWkh+eahFVVSURcblx0XHQgKi9cblx0XHRnZXRCTEVEZXZpY2VTZXJ2aWNlcygpIHtcblx0XHRcdGxldCBzZXJ2aWNlTGlzdCA9IFtdO1xuXHRcdFx0bGV0IHRoYXQgPSB0aGlzO1xuXHRcdFx0dW5pLmdldEJMRURldmljZVNlcnZpY2VzKHtcblx0XHRcdFx0ZGV2aWNlSWQ6IHRoYXQuZGV2aWNlSWQsXG5cdFx0XHRcdHN1Y2Nlc3M6IHJlcyA9PiB7XG5cdFx0XHRcdFx0Y29uc29sZS5sb2coXCLojrflj5borr7lpIfnmoRVVUlE5oiQ5YqfXCIsIHJlcylcblx0XHRcdFx0XHRzZXJ2aWNlTGlzdCA9IHJlcy5zZXJ2aWNlcztcblx0XHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHNlcnZpY2VMaXN0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRsZXQgc2VydmljZSA9IHNlcnZpY2VMaXN0W2ldO1xuXHRcdFx0XHRcdFx0aWYgKHNlcnZpY2UudXVpZC5pbmRleE9mKFwiRkZFMFwiKSAhPSAtMSkge1xuXHRcdFx0XHRcdFx0XHR0aGF0LnNlcnZpY2VJZCA9IHNlcnZpY2UudXVpZDtcblx0XHRcdFx0XHRcdFx0dGhhdC5nZXRCTEVEZXZpY2VDaGFyYWN0ZXJpc3RpY3MoKTtcblx0XHRcdFx0XHRcdFx0Y29uc29sZS5sb2coXCLorr7lpIfnmoRGRkUw55qEc2VydmljZUlk77yaIFwiICsgdGhhdC5zZXJ2aWNlSWQpO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGZhaWw6IHJlcyA9PiB7XG5cdFx0XHRcdFx0Y29uc29sZS5sb2coJ+iOt+WPluiuvuWkh+eahFVVSUTlpLHotKU6JywgcmVzKVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICog6I635Y+W5oyH5a6a5pyN5Yqh55qE54m55b6B5YC8XG5cdFx0ICovXG5cdFx0Z2V0QkxFRGV2aWNlQ2hhcmFjdGVyaXN0aWNzKCkge1xuXHRcdFx0bGV0IGNoYXJhY3RlcmlzdGljc0xpc3QgPSBbXTtcblx0XHRcdGxldCB0aGF0ID0gdGhpcztcblx0XHRcdHVuaS5nZXRCTEVEZXZpY2VDaGFyYWN0ZXJpc3RpY3Moe1xuXHRcdFx0XHRkZXZpY2VJZDogdGhhdC5kZXZpY2VJZCxcblx0XHRcdFx0c2VydmljZUlkOiB0aGF0LnNlcnZpY2VJZCxcblx0XHRcdFx0c3VjY2VzczogcmVzID0+IHtcblx0XHRcdFx0XHRjb25zb2xlLmxvZyhcIuacjeWKoeeahOeJueW+geWAvOaIkOWKn1wiLCByZXMpXG5cdFx0XHRcdFx0Ly8gKiDor7tyZWFkOiB0cnVlLCAvLyzlhpl3cml0ZTogdHJ1ZSwgLy8s6YCa55+lbm90aWZ5OiB0cnVlXG5cdFx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCByZXMuY2hhcmFjdGVyaXN0aWNzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRsZXQgaXRlbSA9IHJlcy5jaGFyYWN0ZXJpc3RpY3NbaV07XG5cdFx0XHRcdFx0XHRpZiAoaXRlbS51dWlkLmluZGV4T2YoJzAwMDBGRjEyJykgIT0gLTEpIHtcblx0XHRcdFx0XHRcdFx0dGhhdC53cml0ZSA9IGl0ZW0udXVpZFxuXG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGl0ZW0udXVpZC5pbmRleE9mKCcwMDAwRkZFNCcpICE9IC0xKSB7XG5cdFx0XHRcdFx0XHRcdHRoYXQubm90aWZ5ID0gaXRlbS51dWlkXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRsZXQgaiA9IE51bWJlcigxNjUgKyAxMCArIDEgKyA4ICsgOCArIDggKyA4ICsgOCArIDgpLnRvU3RyaW5nKDE2KVxuXHRcdFx0XHRcdFx0bGV0IHN0ciA9IFwiQTUwQTAxMDgwODA4MDgwODA4XCIgKyBqLnN1YnN0cihqLmxlbmd0aCAtIDIsIDIpXG5cdFx0XHRcdFx0XHR0aGF0LlNlbmREYXRhKHN0cilcblx0XHRcdFx0XHR9LCAzMDApXG5cdFx0XHRcdFx0Ly8g5L2T6YeNXG5cdFx0XHRcdFx0c2V0VGltZW91dChmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdHRoYXQuaGFuZGxlU3RhcnQoNClcblx0XHRcdFx0XHR9LCA2MDApXG5cdFx0XHRcdFx0dW5pLm5vdGlmeUJMRUNoYXJhY3RlcmlzdGljVmFsdWVDaGFuZ2Uoe1xuXHRcdFx0XHRcdFx0ZGV2aWNlSWQ6IHRoYXQuZGV2aWNlSWQsXG5cdFx0XHRcdFx0XHRzZXJ2aWNlSWQ6IHRoYXQuc2VydmljZUlkLFxuXHRcdFx0XHRcdFx0Y2hhcmFjdGVyaXN0aWNJZDogdGhhdC5ub3RpZnksXG5cdFx0XHRcdFx0XHRzdGF0ZTogdHJ1ZSxcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdHVuaS5ub3RpZnlCTEVDaGFyYWN0ZXJpc3RpY1ZhbHVlQ2hhbmdlKHtcblx0XHRcdFx0XHRcdGRldmljZUlkOiB0aGF0LmRldmljZUlkLFxuXHRcdFx0XHRcdFx0c2VydmljZUlkOiB0aGF0LnNlcnZpY2VJZCxcblx0XHRcdFx0XHRcdGNoYXJhY3RlcmlzdGljSWQ6IHRoYXQud3JpdGUsXG5cdFx0XHRcdFx0XHRzdGF0ZTogdHJ1ZSxcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdHRoYXQubm90aWZ5QkxFQ2hhcmFjdGVyaXN0aWNWYWx1ZSgpXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGZhaWw6IHJlcyA9PiB7XG5cdFx0XHRcdFx0Y29uc29sZS5sb2coJ+iOt+WPlueJueW+geWAvOWksei0pTonLCBKU09OLnN0cmluZ2lmeShyZXMpKVxuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdH0sXG5cdFx0bm90aWZ5QkxFQ2hhcmFjdGVyaXN0aWNWYWx1ZSgpIHtcblx0XHRcdGxldCB0aGF0ID0gdGhpcztcblx0XHRcdHVuaS5ub3RpZnlCTEVDaGFyYWN0ZXJpc3RpY1ZhbHVlQ2hhbmdlKHtcblx0XHRcdFx0c3RhdGU6IHRydWUsIC8vIOWQr+eUqCBub3RpZnkg5Yqf6IO9XG5cdFx0XHRcdGRldmljZUlkOiB0aGF0LmRldmljZUlkLFxuXHRcdFx0XHRzZXJ2aWNlSWQ6IHRoYXQuc2VydmljZUlkLFxuXHRcdFx0XHRjaGFyYWN0ZXJpc3RpY0lkOiB0aGF0Lm5vdGlmeSxcblx0XHRcdFx0c3VjY2VzcyhyZXMpIHtcblx0XHRcdFx0XHR1bmkub25CTEVDaGFyYWN0ZXJpc3RpY1ZhbHVlQ2hhbmdlKGZ1bmN0aW9uKHJlcykge1xuXHRcdFx0XHRcdFx0bGV0IHZhbHVlID0gdGhhdC4kdG9vbHMuYWIyaGV4KHJlcy52YWx1ZSwgXCJcIik7XG5cdFx0XHRcdFx0XHRpZiAodmFsdWUgPT0gJzVhMDUwOTAxNjknKSB7IC8v5qih5byP6K6+572u5oiQ5YqfXG5cdFx0XHRcdFx0XHRcdGxldCBpbmZvID0ge1xuXHRcdFx0XHRcdFx0XHRcdGFjdGl2ZTogdGhhdC5hY3RpdmUsXG5cdFx0XHRcdFx0XHRcdFx0ZGV2aWNlSWQ6IHRoYXQuZGV2aWNlSWQsXG5cdFx0XHRcdFx0XHRcdFx0c2VydmljZUlkOiB0aGF0LnNlcnZpY2VJZCxcblx0XHRcdFx0XHRcdFx0XHRub3RpZnk6IHRoYXQubm90aWZ5LFxuXHRcdFx0XHRcdFx0XHRcdHdyaXRlOiB0aGF0LndyaXRlLFxuXHRcdFx0XHRcdFx0XHRcdGFjZF9pZDogdGhhdC5hY2RfaWQsXG5cdFx0XHRcdFx0XHRcdFx0aXNEZXZpY2U6IHRoYXQuaXNEZXZpY2Vcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHRcdHVuaS5uYXZpZ2F0ZVRvKHtcblx0XHRcdFx0XHRcdFx0XHRcdHVybDogXCIvcGFnZXMvZGV2aWNlcy9QQ1QwMT9pbmZvPVwiICsgSlNPTi5zdHJpbmdpZnkoaW5mbylcblx0XHRcdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdFx0XHR9LCAxMDApXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhcInZhbHVlXCIsIHZhbHVlLCB0aGF0LmFjdGl2ZSlcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdH0sXG5cdFx0Ly8g5byA5ZCv6JOd54mZ5Li75Yqo5LiK5oql5qih5byPXG5cdFx0U2VuZERhdGEoc3RyKSB7XG5cdFx0XHRsZXQgdGhhdCA9IHRoaXNcblx0XHRcdGxldCBidWYgPSBuZXcgVWludDhBcnJheShzdHIubWF0Y2goL1tcXGRhLWZdezJ9L2dpKS5tYXAoZnVuY3Rpb24oaCkge1xuXHRcdFx0XHRyZXR1cm4gcGFyc2VJbnQoaCwgMTYpXG5cdFx0XHR9KSlcblx0XHRcdGNvbnNvbGUubG9nKFwieGlhZmFcIiwgc3RyKVxuXHRcdFx0dW5pLndyaXRlQkxFQ2hhcmFjdGVyaXN0aWNWYWx1ZSh7XG5cdFx0XHRcdGRldmljZUlkOiB0aGF0LmRldmljZUlkLFxuXHRcdFx0XHRzZXJ2aWNlSWQ6IHRoYXQuc2VydmljZUlkLFxuXHRcdFx0XHRjaGFyYWN0ZXJpc3RpY0lkOiB0aGF0LndyaXRlLFxuXHRcdFx0XHR2YWx1ZTogYnVmLmJ1ZmZlcixcblx0XHRcdFx0c3VjY2VzczogcmVzID0+IHtcblx0XHRcdFx0XHRjb25zb2xlLmxvZygn5LiL5Y+R5oyH5Luk5oiQ5YqfJywgcmVzLmVyck1zZylcblx0XHRcdFx0fSxcblx0XHRcdFx0ZmFpbDogcmVzID0+IHtcblx0XHRcdFx0XHRjb25zb2xlLmxvZyhcIuS4i+WPkeaMh+S7pOWksei0pVwiLCByZXMpO1xuXHRcdFx0XHR9LFxuXHRcdFx0fSlcblx0XHR9LFxuXHRcdC8vIOaooeW8j+WIh+aNolxuXHRcdGhhbmRsZVN0YXJ0KGluZCkge1xuXHRcdFx0bGV0IHRoYXQgPSB0aGlzXG5cdFx0XHRsZXQgbSA9IG51bGxcblx0XHRcdGxldCBzZW5kID0gbnVsbFxuXHRcdFx0aWYgKCF0aGF0LmlzQ29ubmVjdGVkKSB7XG5cdFx0XHRcdHRoYXQuJHRvb2xzLm1zZyhcIuivt+WFiOi/nuaOpeiuvuWkh++8gVwiKVxuXHRcdFx0XHRyZXR1cm5cblx0XHRcdH1cblx0XHRcdGlmIChpbmQgPT0gMSkgeyAvLyAx6Ieq55SxXG5cdFx0XHRcdG0gPSBOdW1iZXIoMTY1ICsgOCArIDkpLnRvU3RyaW5nKDE2KVxuXHRcdFx0XHRzZW5kID0gXCJBNTA4MDkwMDAwMDAwMFwiICsgbS5zdWJzdHIobS5sZW5ndGggLSAyLCAyKVxuXHRcdFx0fVxuXHRcdFx0aWYgKGluZCA9PSAyKSB7IC8vMuWumuaXtlxuXHRcdFx0XHRsZXQgdGltZSA9IE51bWJlcih0aGF0LnRpbWVfbSkgKiA2MCArIE51bWJlcih0aGF0LnRpbWVfcylcblx0XHRcdFx0bSA9IE51bWJlcigxNjUgKyA4ICsgOSArIHRpbWUpLnRvU3RyaW5nKDE2KVxuXHRcdFx0XHRzZW5kID0gXCJBNTA4MDkwMDAwXCIgKyB0aGF0LiR0b29scy50b0hleCh0aW1lLCA0KSArIG0uc3Vic3RyKG0ubGVuZ3RoIC0gMiwgMilcblx0XHRcdH1cblx0XHRcdGlmIChpbmQgPT0gMykgeyAvLzPlrprmlbBcblx0XHRcdFx0bGV0IHdlaWdodCA9IHRoYXQuJHRvb2xzLnRvSGV4KHRoYXQud2VpZ2h0LCA0KVxuXHRcdFx0XHRtID0gTnVtYmVyKDE2NSArIDggKyA5ICsgdGhhdC53ZWlnaHQpLnRvU3RyaW5nKDE2KVxuXHRcdFx0XHRzZW5kID0gXCJBNTA4MDlcIiArIHdlaWdodCArIFwiMDAwMFwiICsgbS5zdWJzdHIobS5sZW5ndGggLSAyLCAyKVxuXHRcdFx0fVxuXHRcdFx0aWYgKGluZCA9PSA0KSB7IC8v5L2T6YeNXG5cblx0XHRcdFx0bGV0IHdlaWdodCA9IE51bWJlcih0aGF0LnVzZXIud2VpZ2h0KSAqIDJcblx0XHRcdFx0bGV0IG51bSA9IHBhcnNlSW50KHdlaWdodCkudG9TdHJpbmcoKTtcblx0XHRcdFx0bSA9IE51bWJlcigxNjUgKyA1ICsgOCArIE51bWJlcihudW0pKS50b1N0cmluZygxNilcblx0XHRcdFx0c2VuZCA9IFwiQTUwNTA4XCIgKyBOdW1iZXIobnVtKS50b1N0cmluZygxNikgKyBtLnN1YnN0cihtLmxlbmd0aCAtIDIsIDIpXG5cdFx0XHR9XG5cdFx0XHR0aGF0LlNlbmREYXRhKHNlbmQpXG5cdFx0XHR0aGF0LiRCbHVldG9vdGguc3RvcEJsdWV0b290aERldmljZXNEaXNjb3ZlcnkoKVxuXHRcdH0sXG5cdFx0Ly8g5Y6G5Y+y5pWw5o2u5Yig6Zmk5pe26YeN5paw5Yqg6L295o6l5Y+jXG5cdFx0cmVsb2FkKCkge1xuXHRcdFx0bGV0IHRoYXQgPSB0aGlzXG5cdFx0XHR0aGlzLiRuZXh0VGljaygoKSA9PiB7XG5cdFx0XHRcdHRoYXQuJHN0b3JlLmRpc3BhdGNoKFwiZ2V0U2tpcFJlc3VsdFwiLCB7XG5cdFx0XHRcdFx0YXVkX2lkOiB1bmkuZ2V0U3RvcmFnZVN5bmMoJ3VzZXJpZCcpXG5cdFx0XHRcdH0pXG5cdFx0XHR9KVxuXHRcdH0sXG5cdFx0Ly8g5a6a5pe26K6t57uDXG5cdFx0Ly9cblx0XHRiaW5kVGltZUNoYW5nZShlKSB7XG5cdFx0XHRsZXQgdGhhdCA9IHRoaXNcblx0XHRcdGxldCBtID0gZS50YXJnZXQudmFsdWVbMF1cblx0XHRcdGxldCBzID0gZS50YXJnZXQudmFsdWVbMV1cblx0XHRcdHRoYXQudGltZXNUbmRleCA9IGUudGFyZ2V0LnZhbHVlXG5cdFx0XHRsZXQgdGltZV9tID0gTnVtYmVyKHRoYXQudGltZUxpc3RbMF1bbV0uc3Vic3RyaW5nKDAsIDIpKSAqIDYwXG5cdFx0XHRsZXQgdGltZV9zID0gTnVtYmVyKHRoYXQudGltZUxpc3RbMV1bc10uc3Vic3RyaW5nKDAsIDIpKVxuXHRcdFx0aWYgKE51bWJlcih0aW1lX20gKyB0aW1lX3MpIDwgMzApIHtcblx0XHRcdFx0dGhhdC50aW1lX20gPSAnMDAnXG5cdFx0XHRcdHRoYXQudGltZV9zID0gJzMwJ1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhhdC50aW1lX20gPSB0aGF0LnRpbWVMaXN0WzBdW21dLnN1YnN0cmluZygwLCAyKVxuXHRcdFx0XHR0aGF0LnRpbWVfcyA9IHRoYXQudGltZUxpc3RbMV1bc10uc3Vic3RyaW5nKDAsIDIpXG5cdFx0XHR9XG5cdFx0fSxcblx0XHRoYW5kbGVUaW1lRWRpdCh0ZXh0KSB7XG5cdFx0XHRsZXQgdGhhdCA9IHRoaXNcblx0XHRcdGxldCB0aW1lX20gPSBOdW1iZXIodGhhdC50aW1lX20pICogNjBcblx0XHRcdGxldCB0aW1lX3MgPSBOdW1iZXIodGhhdC50aW1lX3MpXG5cdFx0XHRsZXQgbWludXRlcyA9IG51bGxcblx0XHRcdGxldCBzZWNvbmRzID0gbnVsbFxuXG5cdFx0XHRpZiAoTnVtYmVyKHRpbWVfbSArIHRpbWVfcykgPj0gMzU3MCAmJiB0ZXh0ID09ICfliqAnKSB7XG5cdFx0XHRcdHRoYXQudGltZV9tID0gJzU5J1xuXHRcdFx0XHR0aGF0LnRpbWVfcyA9ICc1OSdcblx0XHRcdFx0cmV0dXJuXG5cdFx0XHR9XG5cdFx0XHRpZiAoTnVtYmVyKHRpbWVfbSArIHRpbWVfcykgPD0gMzAgJiYgdGV4dCA9PSAn5YePJykge1xuXHRcdFx0XHR0aGF0LnRpbWVfbSA9ICcwMCdcblx0XHRcdFx0dGhhdC50aW1lX3MgPSAnMzAnXG5cdFx0XHRcdHJldHVyblxuXHRcdFx0fVxuXHRcdFx0aWYgKHRleHQgPT0gJ+WHjycpIHtcblx0XHRcdFx0bWludXRlcyA9IE1hdGguZmxvb3IoKE51bWJlcih0aW1lX20gKyB0aW1lX3MgLSAzMCkgJSAzNjAwKSAvIDYwKVxuXHRcdFx0XHRzZWNvbmRzID0gTnVtYmVyKHRpbWVfbSArIHRpbWVfcyAtIDMwKSAlIDYwXG5cdFx0XHR9XG5cdFx0XHRpZiAodGV4dCA9PSAn5YqgJykge1xuXHRcdFx0XHRtaW51dGVzID0gTWF0aC5mbG9vcigoTnVtYmVyKHRpbWVfbSArIHRpbWVfcyArIDMwKSAlIDM2MDApIC8gNjApXG5cdFx0XHRcdHNlY29uZHMgPSBOdW1iZXIodGltZV9tICsgdGltZV9zICsgMzApICUgNjBcblx0XHRcdH1cblx0XHRcdHRoYXQudGltZV9tID0gbWludXRlcyA+IDkgPyBtaW51dGVzIDogJzAnICsgbWludXRlcztcblx0XHRcdHRoYXQudGltZV9zID0gc2Vjb25kcyA+IDkgPyBzZWNvbmRzIDogJzAnICsgc2Vjb25kcztcblx0XHRcdHRoYXQudGltZXNUbmRleCA9IFtOdW1iZXIodGhhdC50aW1lX20pLCBOdW1iZXIodGhhdC50aW1lX3MpXVxuXHRcdH0sXG5cdFx0aGFuZGxlV2VpZ2h0RWRpdCh0ZXh0KSB7XG5cdFx0XHRsZXQgdGhhdCA9IHRoaXNcblx0XHRcdGlmICh0ZXh0ID09ICflh48nKSB7XG5cdFx0XHRcdHRoYXQud2VpZ2h0ID0gTnVtYmVyKHRoYXQud2VpZ2h0KSAtIDUwID4gNTAgPyBOdW1iZXIodGhhdC53ZWlnaHQpIC0gNTAgOiA1MFxuXHRcdFx0fVxuXHRcdFx0aWYgKHRleHQgPT0gJ+WKoCcpIHtcblx0XHRcdFx0dGhhdC53ZWlnaHQgPSBOdW1iZXIodGhhdC53ZWlnaHQpICsgNTBcblx0XHRcdH1cblx0XHR9LFxuXHRcdC8vIOiTneeJmeaQnOe0ouiusOaXtlxuXHRcdGhhbmRsZU15VGltZSgpIHtcblx0XHRcdGxldCB0aGF0ID0gdGhpc1xuXHRcdFx0bXlUaW1lID0gc2V0VGltZW91dChmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCF0aGF0LmRldmljZXNMaXN0Lmxlbmd0aCkge1xuXHRcdFx0XHRcdHRoYXQuaXNsaW5rID0gLTFcblx0XHRcdFx0XHR0aGF0LiR0b29scy5zaG93TW9kYWwoXCLmsqHmnInmn6Xmib7liLDorr7lpIdcIilcblx0XHRcdFx0fVxuXHRcdFx0XHRjbGVhclRpbWVvdXQobXlUaW1lKVxuXHRcdFx0XHR0aGF0LiRCbHVldG9vdGguc3RvcEJsdWV0b290aERldmljZXNEaXNjb3ZlcnkoKVxuXHRcdFx0fSwgMTIwMDApO1xuXHRcdH0sXG5cdFx0bmF2VG8odXJsKSB7XG5cdFx0XHRsZXQgdGhhdCA9IHRoaXNcblx0XHRcdGlmICghdGhhdC5pc0Nvbm5lY3RlZCkge1xuXHRcdFx0XHR0aGF0LmlzbGluayA9IC0xXG5cdFx0XHRcdGNsZWFyVGltZW91dChteVRpbWUpXG5cdFx0XHRcdHRoYXQuJEJsdWV0b290aC5jbG9zZUJsdWV0b290aEFkYXB0ZXIoKVxuXHRcdFx0XHR0aGF0LiRCbHVldG9vdGguY2xvc2VCTEVDb25uZWN0aW9uKHRoYXQuZGV2aWNlSWQpXG5cdFx0XHRcdHRoYXQuJEJsdWV0b290aC5zdG9wQmx1ZXRvb3RoRGV2aWNlc0Rpc2NvdmVyeSgpXG5cdFx0XHRcdGNvbnNvbGUubG9nKFwi6JOd54mZ5rKh5pyJ6L+e5o6lXCIpXG5cdFx0XHR9XG5cdFx0XHR1bmkubmF2aWdhdGVUbyh7XG5cdFx0XHRcdHVybDogdXJsXG5cdFx0XHR9KVxuXHRcdH0sXG5cblx0fVxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///200\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 _defineProperty2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/defineProperty */ 2));\nvar _vuex = __webpack_require__(/*! vuex */ 21);\nvar _record = _interopRequireDefault(__webpack_require__(/*! @/element/manuallyAdd/record.vue */ 33));\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\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 myTime;\nvar _default = {\n data: function data() {\n return {\n active: 1,\n acd_id: 6,\n weight: 50,\n disabled: false,\n isDevice: 0,\n isConnection: false,\n time_m: \"\",\n time_s: \"\",\n timeList: [],\n timesTndex: [1, 0],\n deviceId: \"\",\n serviceId: \"\",\n write: \"\",\n notify: \"\",\n islink: 0 //0连接中,1成功,-1失败\n };\n },\n\n components: {\n record: _record.default\n },\n computed: _objectSpread(_objectSpread({}, (0, _vuex.mapState)(['user', \"MeasureSkip\", \"isConnected\", \"isBluetoothTyle\", \"devicesList\"])), {}, {\n info: function info() {\n return this.MeasureSkip;\n }\n }),\n mounted: function mounted() {\n var that = this;\n that.timeList = that.$tools.gethms();\n that.time_m = that.timeList[0][1].substring(0, 2);\n that.time_s = that.timeList[1][0].substring(0, 2);\n },\n onLoad: function onLoad(options) {\n var that = this;\n __f__(\"log\", 'options', options, \" at pages/skiping/skip.vue:160\");\n // 首页进入\n if (options && options.acd_id) {\n that.acd_id = options.acd_id;\n that.isDevice = options.device;\n setTimeout(function () {\n that.handleisSdevice();\n }, 1000);\n }\n // 跳绳页返回\n if (options && options.info) {\n var data = JSON.parse(options.info);\n that.active = data.active;\n that.deviceId = data.deviceId;\n that.serviceId = data.serviceId;\n that.write = data.write;\n that.notify = data.notify;\n that.islink = !that.isConnected ? -1 : 1;\n that.notifyBLECharacteristicValue();\n }\n that.$store.dispatch(\"getSkipResult\", {\n aud_id: uni.getStorageSync('userid')\n });\n that.isConnection = that.isConnected;\n that.$Bluetooth.onBLEConnectionStateChange();\n uni.onBluetoothAdapterStateChange(function (res) {\n that.$store.commit(\"changeBluetooth\", res.available);\n });\n },\n onPullDownRefresh: function onPullDownRefresh() {\n setTimeout(function () {\n uni.stopPullDownRefresh();\n }, 1000);\n },\n onShow: function onShow() {\n var that = this;\n // 跳绳页返回\n uni.$on('updateData', function (data) {\n var info = JSON.parse(data);\n that.acd_id = info.acd_id;\n that.isDevice = info.device;\n __f__(\"log\", '监听到事件来自 updateData ,携带参数为:' + info, \" at pages/skiping/skip.vue:201\");\n });\n },\n onBackPress: function onBackPress(options) {\n var that = this;\n that.islink = -1;\n clearTimeout(myTime);\n that.isConnection = false;\n that.$Bluetooth.closeBluetoothAdapter();\n that.$Bluetooth.closeBLEConnection(that.deviceId);\n that.$Bluetooth.stopBluetoothDevicesDiscovery();\n that.$store.commit(\"changeBluetooth\", false);\n that.$store.commit(\"changeConnected\", false);\n setTimeout(function () {\n uni.switchTab({\n url: '/pages/home/home'\n });\n }, 300);\n __f__(\"log\", \"返回首页\", \" at pages/skiping/skip.vue:219\");\n return true;\n },\n watch: {\n devicesList: function devicesList() {\n var that = this;\n if (that.devicesList.length) {\n clearTimeout(myTime);\n that.$Bluetooth.stopBluetoothDevicesDiscovery();\n that.handleDevType(that.devicesList[0]);\n }\n __f__(\"log\", \"devicesList\", that.devicesList, \" at pages/skiping/skip.vue:230\");\n },\n isConnected: function isConnected() {\n var that = this;\n if (!that.isConnected) {\n that.islink = -1;\n }\n that.isConnection = that.isConnected;\n __f__(\"log\", \"蓝牙是否连接\", that.isConnected, \" at pages/skiping/skip.vue:238\");\n },\n isBluetoothTyle: function isBluetoothTyle() {\n var that = this;\n if (!that.isBluetoothTyle) {\n that.isConnection = false;\n that.islink = -1;\n }\n __f__(\"log\", \"蓝牙是否打开\", that.isBluetoothTyle, \" at pages/skiping/skip.vue:246\");\n }\n },\n methods: {\n handleisSdevice: function handleisSdevice() {\n var that = this;\n if (that.isConnected) return;\n if (Number(that.isDevice) != 0) {\n that.$Bluetooth.stopBluetoothDevicesDiscovery();\n uni.openBluetoothAdapter({\n success: function success(e) {\n that.islink = 0;\n that.handleMyTime();\n that.$store.commit(\"changedevicesList\", []);\n that.$store.commit(\"changeBluetooth\", true);\n that.$Bluetooth.startBluetoothDeviceDiscovery();\n __f__(\"log\", '初始化蓝牙成功:' + e.errMsg, \" at pages/skiping/skip.vue:262\");\n },\n fail: function fail(e) {\n that.islink = -1;\n that.$Bluetooth.getBluetoothAdapter(e);\n }\n });\n } else {\n that.$tools.msg(\"请先添加设备!\");\n setTimeout(function () {\n uni.switchTab({\n url: \"/pages/business/business\"\n });\n }, 500);\n }\n },\n // 设备排查\n handleDevType: function handleDevType(device) {\n var that = this;\n __f__(\"log\", \"device123\", device, \" at pages/skiping/skip.vue:281\");\n that.$model.getdevdetail({\n mac: device.macAddr,\n acd_id: that.acd_id\n }).then(function (res) {\n __f__(\"log\", \"排查返回\", res, \" at pages/skiping/skip.vue:286\");\n if (res.code == 0) {\n that.deviceId = device.deviceId;\n that.createBLEConnection();\n }\n });\n },\n // 连接蓝牙\n createBLEConnection: function createBLEConnection() {\n var that = this;\n uni.createBLEConnection({\n deviceId: that.deviceId,\n success: function success(res) {\n setTimeout(function () {\n uni.hideLoading();\n that.islink = 1;\n that.isConnection = true;\n that.getBLEDeviceServices();\n }, 1000);\n },\n fail: function fail(res) {\n __f__(\"log\", \"设备连接失败,请重新连接\", res, that.deviceId, \" at pages/skiping/skip.vue:307\");\n }\n });\n },\n /**\n * 获取设备的UUID\n */\n getBLEDeviceServices: function getBLEDeviceServices() {\n var serviceList = [];\n var that = this;\n uni.getBLEDeviceServices({\n deviceId: that.deviceId,\n success: function success(res) {\n __f__(\"log\", \"获取设备的UUID成功\", res, \" at pages/skiping/skip.vue:320\");\n serviceList = res.services;\n for (var i = 0; i < serviceList.length; i++) {\n var service = serviceList[i];\n if (service.uuid.indexOf(\"FFE0\") != -1) {\n that.serviceId = service.uuid;\n that.getBLEDeviceCharacteristics();\n __f__(\"log\", \"设备的FFE0的serviceId: \" + that.serviceId, \" at pages/skiping/skip.vue:327\");\n break;\n }\n }\n },\n fail: function fail(res) {\n __f__(\"log\", '获取设备的UUID失败:', res, \" at pages/skiping/skip.vue:333\");\n }\n });\n },\n /**\n * 获取指定服务的特征值\n */\n getBLEDeviceCharacteristics: function getBLEDeviceCharacteristics() {\n var characteristicsList = [];\n var that = this;\n uni.getBLEDeviceCharacteristics({\n deviceId: that.deviceId,\n serviceId: that.serviceId,\n success: function success(res) {\n __f__(\"log\", \"服务的特征值成功\", res, \" at pages/skiping/skip.vue:348\");\n // * 读read: true, //,写write: true, //,通知notify: true\n for (var i = 0; i < res.characteristics.length; i++) {\n var item = res.characteristics[i];\n if (item.uuid.indexOf('0000FF12') != -1) {\n that.write = item.uuid;\n } else if (item.uuid.indexOf('0000FFE4') != -1) {\n that.notify = item.uuid;\n }\n }\n setTimeout(function () {\n var j = Number(165 + 10 + 1 + 8 + 8 + 8 + 8 + 8 + 8).toString(16);\n var str = \"A50A01080808080808\" + j.substr(j.length - 2, 2);\n that.SendData(str);\n }, 300);\n // 体重\n setTimeout(function () {\n that.handleStart(4);\n }, 600);\n uni.notifyBLECharacteristicValueChange({\n deviceId: that.deviceId,\n serviceId: that.serviceId,\n characteristicId: that.notify,\n state: true\n });\n uni.notifyBLECharacteristicValueChange({\n deviceId: that.deviceId,\n serviceId: that.serviceId,\n characteristicId: that.write,\n state: true\n });\n that.notifyBLECharacteristicValue();\n },\n fail: function fail(res) {\n __f__(\"log\", '获取特征值失败:', JSON.stringify(res), \" at pages/skiping/skip.vue:383\");\n }\n });\n },\n notifyBLECharacteristicValue: function notifyBLECharacteristicValue() {\n var that = this;\n uni.notifyBLECharacteristicValueChange({\n state: true,\n // 启用 notify 功能\n deviceId: that.deviceId,\n serviceId: that.serviceId,\n characteristicId: that.notify,\n success: function success(res) {\n uni.onBLECharacteristicValueChange(function (res) {\n var value = that.$tools.ab2hex(res.value, \"\");\n if (value == '5a05090169') {\n //模式设置成功\n var info = {\n active: that.active,\n deviceId: that.deviceId,\n serviceId: that.serviceId,\n notify: that.notify,\n write: that.write,\n acd_id: that.acd_id,\n isDevice: that.isDevice\n };\n setTimeout(function () {\n uni.navigateTo({\n url: \"/pages/devices/PCT01?info=\" + JSON.stringify(info)\n });\n }, 200);\n }\n __f__(\"log\", \"value\", value, that.active, \" at pages/skiping/skip.vue:413\");\n });\n }\n });\n },\n // 开启蓝牙主动上报模式\n SendData: function SendData(str) {\n var that = this;\n var buf = new Uint8Array(str.match(/[\\da-f]{2}/gi).map(function (h) {\n return parseInt(h, 16);\n }));\n __f__(\"log\", \"xiafa\", str, \" at pages/skiping/skip.vue:424\");\n uni.writeBLECharacteristicValue({\n deviceId: that.deviceId,\n serviceId: that.serviceId,\n characteristicId: that.write,\n value: buf.buffer,\n success: function success(res) {\n __f__(\"log\", '下发指令成功', res.errMsg, \" at pages/skiping/skip.vue:431\");\n },\n fail: function fail(res) {\n __f__(\"log\", \"下发指令失败\", res, \" at pages/skiping/skip.vue:434\");\n }\n });\n },\n // 模式切换\n handleStart: function handleStart(ind) {\n var that = this;\n var m = null;\n var send = null;\n if (!that.isConnected) {\n that.$tools.msg(\"请先连接设备!\");\n return;\n }\n if (ind == 1) {\n // 1自由\n m = Number(165 + 8 + 9).toString(16);\n send = \"A5080900000000\" + m.substr(m.length - 2, 2);\n }\n if (ind == 2) {\n //2定时\n var time = Number(that.time_m) * 60 + Number(that.time_s);\n m = Number(165 + 8 + 9 + time).toString(16);\n send = \"A508090000\" + that.$tools.toHex(time, 4) + m.substr(m.length - 2, 2);\n }\n if (ind == 3) {\n //3定数\n var weight = that.$tools.toHex(that.weight, 4);\n m = Number(165 + 8 + 9 + that.weight).toString(16);\n send = \"A50809\" + weight + \"0000\" + m.substr(m.length - 2, 2);\n }\n if (ind == 4) {\n //体重\n\n var _weight = Number(that.user.weight) * 2;\n var num = parseInt(_weight).toString();\n m = Number(165 + 5 + 8 + Number(num)).toString(16);\n send = \"A50508\" + Number(num).toString(16) + m.substr(m.length - 2, 2);\n }\n that.SendData(send);\n that.$Bluetooth.stopBluetoothDevicesDiscovery();\n },\n // 历史数据删除时重新加载接口\n reload: function reload() {\n var that = this;\n this.$nextTick(function () {\n that.$store.dispatch(\"getSkipResult\", {\n aud_id: uni.getStorageSync('userid')\n });\n });\n },\n // 定时训练\n //\n bindTimeChange: function bindTimeChange(e) {\n var that = this;\n var m = e.target.value[0];\n var s = e.target.value[1];\n that.timesTndex = e.target.value;\n var time_m = Number(that.timeList[0][m].substring(0, 2)) * 60;\n var time_s = Number(that.timeList[1][s].substring(0, 2));\n if (Number(time_m + time_s) < 30) {\n that.time_m = '00';\n that.time_s = '30';\n } else {\n that.time_m = that.timeList[0][m].substring(0, 2);\n that.time_s = that.timeList[1][s].substring(0, 2);\n }\n },\n handleTimeEdit: function handleTimeEdit(text) {\n var that = this;\n var time_m = Number(that.time_m) * 60;\n var time_s = Number(that.time_s);\n var minutes = null;\n var seconds = null;\n if (Number(time_m + time_s) >= 3570 && text == '加') {\n that.time_m = '59';\n that.time_s = '59';\n return;\n }\n if (Number(time_m + time_s) <= 30 && text == '减') {\n that.time_m = '00';\n that.time_s = '30';\n return;\n }\n if (text == '减') {\n minutes = Math.floor(Number(time_m + time_s - 30) % 3600 / 60);\n seconds = Number(time_m + time_s - 30) % 60;\n }\n if (text == '加') {\n minutes = Math.floor(Number(time_m + time_s + 30) % 3600 / 60);\n seconds = Number(time_m + time_s + 30) % 60;\n }\n that.time_m = minutes > 9 ? minutes : '0' + minutes;\n that.time_s = seconds > 9 ? seconds : '0' + seconds;\n that.timesTndex = [Number(that.time_m), Number(that.time_s)];\n },\n handleWeightEdit: function handleWeightEdit(text) {\n var that = this;\n if (text == '减') {\n that.weight = Number(that.weight) - 50 > 50 ? Number(that.weight) - 50 : 50;\n }\n if (text == '加') {\n that.weight = Number(that.weight) + 50;\n }\n },\n // 蓝牙搜索记时\n handleMyTime: function handleMyTime() {\n var that = this;\n myTime = setTimeout(function () {\n if (!that.devicesList.length) {\n that.islink = -1;\n that.$tools.showModal(\"没有查找到设备\");\n }\n clearTimeout(myTime);\n that.$Bluetooth.stopBluetoothDevicesDiscovery();\n }, 12000);\n },\n navTo: function navTo(url) {\n var that = this;\n if (!that.isConnected) {\n that.islink = -1;\n clearTimeout(myTime);\n that.$Bluetooth.closeBluetoothAdapter();\n that.$Bluetooth.closeBLEConnection(that.deviceId);\n that.$Bluetooth.stopBluetoothDevicesDiscovery();\n __f__(\"log\", \"蓝牙没有连接\", \" at pages/skiping/skip.vue:555\");\n }\n uni.navigateTo({\n url: url\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 */ 20)[\"default\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vcGFnZXMvc2tpcGluZy9za2lwLnZ1ZSJdLCJuYW1lcyI6WyJkYXRhIiwiYWN0aXZlIiwiYWNkX2lkIiwid2VpZ2h0IiwiZGlzYWJsZWQiLCJpc0RldmljZSIsImlzQ29ubmVjdGlvbiIsInRpbWVfbSIsInRpbWVfcyIsInRpbWVMaXN0IiwidGltZXNUbmRleCIsImRldmljZUlkIiwic2VydmljZUlkIiwid3JpdGUiLCJub3RpZnkiLCJpc2xpbmsiLCJjb21wb25lbnRzIiwicmVjb3JkIiwiY29tcHV0ZWQiLCJpbmZvIiwibW91bnRlZCIsInRoYXQiLCJvbkxvYWQiLCJzZXRUaW1lb3V0IiwiYXVkX2lkIiwidW5pIiwib25QdWxsRG93blJlZnJlc2giLCJvblNob3ciLCJvbkJhY2tQcmVzcyIsImNsZWFyVGltZW91dCIsInVybCIsIndhdGNoIiwiZGV2aWNlc0xpc3QiLCJpc0Nvbm5lY3RlZCIsImlzQmx1ZXRvb3RoVHlsZSIsIm1ldGhvZHMiLCJoYW5kbGVpc1NkZXZpY2UiLCJzdWNjZXNzIiwiZmFpbCIsImhhbmRsZURldlR5cGUiLCJtYWMiLCJjcmVhdGVCTEVDb25uZWN0aW9uIiwiZ2V0QkxFRGV2aWNlU2VydmljZXMiLCJzZXJ2aWNlTGlzdCIsImdldEJMRURldmljZUNoYXJhY3RlcmlzdGljcyIsImNoYXJhY3RlcmlzdGljSWQiLCJzdGF0ZSIsIm5vdGlmeUJMRUNoYXJhY3RlcmlzdGljVmFsdWUiLCJTZW5kRGF0YSIsInZhbHVlIiwiaGFuZGxlU3RhcnQiLCJtIiwic2VuZCIsInJlbG9hZCIsImJpbmRUaW1lQ2hhbmdlIiwiaGFuZGxlVGltZUVkaXQiLCJtaW51dGVzIiwic2Vjb25kcyIsImhhbmRsZVdlaWdodEVkaXQiLCJoYW5kbGVNeVRpbWUiLCJteVRpbWUiLCJuYXZUbyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFzSEE7QUFHQTtBQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFKQTtBQUFBLGVBS0E7RUFDQUE7SUFDQTtNQUNBQztNQUNBQztNQUNBQztNQUNBQztNQUNBQztNQUNBQztNQUNBQztNQUNBQztNQUNBQztNQUNBQztNQUNBQztNQUNBQztNQUNBQztNQUNBQztNQUNBQztJQUNBO0VBQ0E7O0VBQ0FDO0lBQ0FDO0VBQ0E7RUFDQUMsMENBQ0E7SUFDQUM7TUFDQTtJQUNBO0VBQUEsRUFDQTtFQUNBQztJQUNBO0lBQ0FDO0lBQ0FBO0lBQ0FBO0VBQ0E7RUFDQUM7SUFDQTtJQUNBO0lBQ0E7SUFDQTtNQUNBRDtNQUNBQTtNQUNBRTtRQUNBRjtNQUNBO0lBQ0E7SUFDQTtJQUNBO01BQ0E7TUFDQUE7TUFDQUE7TUFDQUE7TUFDQUE7TUFDQUE7TUFDQUE7TUFDQUE7SUFDQTtJQUNBQTtNQUNBRztJQUNBO0lBQ0FIO0lBQ0FBO0lBQ0FJO01BQ0FKO0lBQ0E7RUFDQTtFQUNBSztJQUNBSDtNQUNBRTtJQUNBO0VBQ0E7RUFDQUU7SUFDQTtJQUNBO0lBQ0FGO01BQ0E7TUFDQUo7TUFDQUE7TUFDQTtJQUNBO0VBQ0E7RUFDQU87SUFDQTtJQUNBUDtJQUNBUTtJQUNBUjtJQUNBQTtJQUNBQTtJQUNBQTtJQUNBQTtJQUNBQTtJQUNBRTtNQUNBRTtRQUNBSztNQUNBO0lBQ0E7SUFDQTtJQUNBO0VBQ0E7RUFDQUM7SUFDQUM7TUFDQTtNQUNBO1FBQ0FIO1FBQ0FSO1FBQ0FBO01BQ0E7TUFDQTtJQUNBO0lBQ0FZO01BQ0E7TUFDQTtRQUNBWjtNQUNBO01BQ0FBO01BQ0E7SUFDQTtJQUNBYTtNQUNBO01BQ0E7UUFDQWI7UUFDQUE7TUFDQTtNQUNBO0lBQ0E7RUFDQTtFQUNBYztJQUNBQztNQUNBO01BQ0E7TUFDQTtRQUNBZjtRQUNBSTtVQUNBWTtZQUNBaEI7WUFDQUE7WUFDQUE7WUFDQUE7WUFDQUE7WUFDQTtVQUNBO1VBQ0FpQjtZQUNBakI7WUFDQUE7VUFDQTtRQUNBO01BQ0E7UUFDQUE7UUFDQUU7VUFDQUU7WUFDQUs7VUFDQTtRQUNBO01BQ0E7SUFDQTtJQUNBO0lBQ0FTO01BQ0E7TUFDQTtNQUNBbEI7UUFDQW1CO1FBQ0F0QztNQUNBO1FBQ0E7UUFDQTtVQUNBbUI7VUFDQUE7UUFDQTtNQUNBO0lBQ0E7SUFDQTtJQUNBb0I7TUFDQTtNQUNBaEI7UUFDQWQ7UUFDQTBCO1VBQ0FkO1lBQ0FFO1lBQ0FKO1lBQ0FBO1lBQ0FBO1VBQ0E7UUFDQTtRQUNBaUI7VUFDQTtRQUNBO01BQ0E7SUFDQTtJQUNBO0FBQ0E7QUFDQTtJQUNBSTtNQUNBO01BQ0E7TUFDQWpCO1FBQ0FkO1FBQ0EwQjtVQUNBO1VBQ0FNO1VBQ0E7WUFDQTtZQUNBO2NBQ0F0QjtjQUNBQTtjQUNBO2NBQ0E7WUFDQTtVQUNBO1FBQ0E7UUFDQWlCO1VBQ0E7UUFDQTtNQUNBO0lBQ0E7SUFFQTtBQUNBO0FBQ0E7SUFDQU07TUFDQTtNQUNBO01BQ0FuQjtRQUNBZDtRQUNBQztRQUNBeUI7VUFDQTtVQUNBO1VBQ0E7WUFDQTtZQUNBO2NBQ0FoQjtZQUVBO2NBQ0FBO1lBQ0E7VUFDQTtVQUNBRTtZQUNBO1lBQ0E7WUFDQUY7VUFDQTtVQUNBO1VBQ0FFO1lBQ0FGO1VBQ0E7VUFDQUk7WUFDQWQ7WUFDQUM7WUFDQWlDO1lBQ0FDO1VBQ0E7VUFDQXJCO1lBQ0FkO1lBQ0FDO1lBQ0FpQztZQUNBQztVQUNBO1VBQ0F6QjtRQUNBO1FBQ0FpQjtVQUNBO1FBQ0E7TUFDQTtJQUNBO0lBQ0FTO01BQ0E7TUFDQXRCO1FBQ0FxQjtRQUFBO1FBQ0FuQztRQUNBQztRQUNBaUM7UUFDQVI7VUFDQVo7WUFDQTtZQUNBO2NBQUE7Y0FDQTtnQkFDQXhCO2dCQUNBVTtnQkFDQUM7Z0JBQ0FFO2dCQUNBRDtnQkFDQVg7Z0JBQ0FHO2NBQ0E7Y0FDQWtCO2dCQUNBRTtrQkFDQUs7Z0JBQ0E7Y0FDQTtZQUNBO1lBQ0E7VUFDQTtRQUNBO01BQ0E7SUFDQTtJQUNBO0lBQ0FrQjtNQUNBO01BQ0E7UUFDQTtNQUNBO01BQ0E7TUFDQXZCO1FBQ0FkO1FBQ0FDO1FBQ0FpQztRQUNBSTtRQUNBWjtVQUNBO1FBQ0E7UUFDQUM7VUFDQTtRQUNBO01BQ0E7SUFDQTtJQUNBO0lBQ0FZO01BQ0E7TUFDQTtNQUNBO01BQ0E7UUFDQTdCO1FBQ0E7TUFDQTtNQUNBO1FBQUE7UUFDQThCO1FBQ0FDO01BQ0E7TUFDQTtRQUFBO1FBQ0E7UUFDQUQ7UUFDQUM7TUFDQTtNQUNBO1FBQUE7UUFDQTtRQUNBRDtRQUNBQztNQUNBO01BQ0E7UUFBQTs7UUFFQTtRQUNBO1FBQ0FEO1FBQ0FDO01BQ0E7TUFDQS9CO01BQ0FBO0lBQ0E7SUFDQTtJQUNBZ0M7TUFDQTtNQUNBO1FBQ0FoQztVQUNBRztRQUNBO01BQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQThCO01BQ0E7TUFDQTtNQUNBO01BQ0FqQztNQUNBO01BQ0E7TUFDQTtRQUNBQTtRQUNBQTtNQUNBO1FBQ0FBO1FBQ0FBO01BQ0E7SUFDQTtJQUNBa0M7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BRUE7UUFDQWxDO1FBQ0FBO1FBQ0E7TUFDQTtNQUNBO1FBQ0FBO1FBQ0FBO1FBQ0E7TUFDQTtNQUNBO1FBQ0FtQztRQUNBQztNQUNBO01BQ0E7UUFDQUQ7UUFDQUM7TUFDQTtNQUNBcEM7TUFDQUE7TUFDQUE7SUFDQTtJQUNBcUM7TUFDQTtNQUNBO1FBQ0FyQztNQUNBO01BQ0E7UUFDQUE7TUFDQTtJQUNBO0lBQ0E7SUFDQXNDO01BQ0E7TUFDQUM7UUFDQTtVQUNBdkM7VUFDQUE7UUFDQTtRQUNBUTtRQUNBUjtNQUNBO0lBQ0E7SUFDQXdDO01BQ0E7TUFDQTtRQUNBeEM7UUFDQVE7UUFDQVI7UUFDQUE7UUFDQUE7UUFDQTtNQUNBO01BQ0FJO1FBQ0FLO01BQ0E7SUFDQTtFQUVBO0FBQ0E7QUFBQSwyQiIsImZpbGUiOiIyMDAuanMiLCJzb3VyY2VzQ29udGVudCI6WyI8dGVtcGxhdGU+XHJcblx0PHZpZXcgY2xhc3M9XCJjb250ZW50IHNraXBwaW5nXCI+XHJcblx0XHQ8IS0tICAtLT5cclxuXHRcdDx2aWV3IGNsYXNzPVwic2tpcHRvcFwiPlxyXG5cdFx0XHQ8dmlldyBjbGFzcz1cInN0YXR1c1wiIEBjbGljaz1cImhhbmRsZWlzU2RldmljZSgpXCI+XHJcblx0XHRcdFx0PHRleHQ+e3tpc2xpbms9PTA/XCLmraPlnKjov57mjqVcIjppc2xpbms9PTE/J+i/nuaOpeaIkOWKnyc6J+mHjeaWsOi/nuaOpSd9fTwvdGV4dD5cclxuXHRcdFx0XHQ8aW1hZ2Ugdi1pZj1cImlzbGluayE9MVwiIDpjbGFzcz1cIltpc2xpbms9PS0xPycnOidpY29uX2xpbmsnXVwiIHNyYz1cIi4uLy4uL3N0YXRpYy96aHVhbi5wbmdcIj48L2ltYWdlPlxyXG5cdFx0XHRcdDxpbWFnZSB2LWlmPVwiaXNsaW5rPT0xXCIgc3JjPVwiLi4vLi4vc3RhdGljL2R1aS5wbmdcIj48L2ltYWdlPlxyXG5cdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdDx2aWV3IGNsYXNzPVwiaXRlbVwiPlxyXG5cdFx0XHRcdDx2aWV3IGNsYXNzPVwiaXRlbS1pdGVcIj7ku4rml6XkuKrmlbA8dGV4dD57e2luZm8/aW5mby50b2RheV9qdW1wX251bTonLS0nfX08L3RleHQ+PC92aWV3PlxyXG5cdFx0XHRcdDx2aWV3IGNsYXNzPVwiaXRlbS1pdGVcIj7ku4rml6Xml7bplb88dGV4dD57e2luZm8/aW5mby50b2RheV9qdW1wX3RpbWU6Jy0tJ319PC90ZXh0Pjwvdmlldz5cclxuXHRcdFx0XHQ8dmlldyBjbGFzcz1cIml0ZW0taXRlXCI+5Y2h6Lev6YeML2tjYWw8dGV4dD57e2luZm8/aW5mby50b2RheV9qdW1wX2tjYWw6Jy0tJ319PC90ZXh0Pjwvdmlldz5cclxuXHRcdFx0PC92aWV3PlxyXG5cdFx0PC92aWV3PlxyXG5cdFx0PCEtLSAgLS0+XHJcblx0XHQ8dmlldyBjbGFzcz1cInRhYmJhclwiPlxyXG5cdFx0XHQ8dmlldyBAY2xpY2s9XCJhY3RpdmU9MVwiIDpjbGFzcz1cIlthY3RpdmU9PTE/J2FjdGl2ZSc6JyddXCI+6Ieq55Sx6K6t57uDPC92aWV3PlxyXG5cdFx0XHQ8dmlldyBAY2xpY2s9XCJhY3RpdmU9MlwiIDpjbGFzcz1cIlthY3RpdmU9PTI/J2FjdGl2ZSc6JyddXCI+5a6a5pe26K6t57uDPC92aWV3PlxyXG5cdFx0XHQ8dmlldyBAY2xpY2s9XCJhY3RpdmU9M1wiIDpjbGFzcz1cIlthY3RpdmU9PTM/J2FjdGl2ZSc6JyddXCI+5a6a5pWw6K6t57uDPC92aWV3PlxyXG5cdFx0PC92aWV3PlxyXG5cdFx0PCEtLeiHqueUseiuree7gyAgLS0+XHJcblx0XHQ8dmlldyBjbGFzcz1cImJveDEgYm94XCIgdi1pZj1cImFjdGl2ZT09MVwiPlxyXG5cdFx0XHQ8dmlldyBjbGFzcz1cIml0ZW1cIj5cclxuXHRcdFx0XHQ8dGV4dCBjbGFzcz1cIml0ZW0tc2V0IGl0ZW0tc2V0MFwiPuiHqueUsTwvdGV4dD5cclxuXHRcdFx0XHQ8dGV4dCBjbGFzcz1cInRpcHNcIj7ml6DpmZDliLY8L3RleHQ+XHJcblx0XHRcdDwvdmlldz5cclxuXHRcdFx0PHZpZXcgOmNsYXNzPVwiW2lzQ29ubmVjdGlvbj8nc3RhcnQnOidzdGFydCBOc3RhcnQnXVwiIEBjbGljaz1cImhhbmRsZVN0YXJ0KDEpXCI+5byA5aeLPC92aWV3PlxyXG5cdFx0XHQ8IS0tIDx2aWV3IGNsYXNzPVwiaXRlbVwiPlxyXG5cdFx0XHRcdDx0ZXh0IGNsYXNzPVwiaXRlbS1pdGVcIj7mnKzmrKHml7bplb88L3RleHQ+XHJcblx0XHRcdFx0PHRleHQgY2xhc3M9XCJib2xkXCI+e3tpbmZvP2luZm8ubGFzdF9qdW1wX3RpbWU6JzAnfX08L3RleHQ+XHJcblx0XHRcdDwvdmlldz5cclxuXHRcdFx0PHZpZXcgY2xhc3M9XCJpdGVtXCI+XHJcblx0XHRcdFx0PHRleHQgY2xhc3M9XCJpdGVtLWl0ZVwiPua2iOiAl+WNoei3r+mHjDwvdGV4dD5cclxuXHRcdFx0XHQ8dGV4dCBjbGFzcz1cImJvbGRcIj57e2luZm8/aW5mby5sYXN0X2p1bXBfa2NhbDonMCd9fTwvdGV4dD5cclxuXHRcdFx0PC92aWV3PiAtLT5cclxuXHRcdDwvdmlldz5cclxuXHRcdDwhLS3lrprml7borq3nu4MgIC0tPlxyXG5cdFx0PHZpZXcgY2xhc3M9XCJib3gxIGJveFwiIHYtaWY9XCJhY3RpdmU9PTJcIj5cclxuXHRcdFx0PHZpZXcgY2xhc3M9XCJpdGVtXCI+XHJcblx0XHRcdFx0PHZpZXcgY2xhc3M9XCJpdGVtLXNldFwiPlxyXG5cdFx0XHRcdFx0PHRleHQgQGNsaWNrPVwiaGFuZGxlVGltZUVkaXQoJ+WHjycpXCI+77yNPC90ZXh0PlxyXG5cdFx0XHRcdFx0PHRleHQ+e3t0aW1lX219fTp7e3RpbWVfc319PC90ZXh0PlxyXG5cdFx0XHRcdFx0PHRleHQgQGNsaWNrPVwiaGFuZGxlVGltZUVkaXQoJ+WKoCcpXCI+77yLPC90ZXh0PlxyXG5cdFx0XHRcdDwvdmlldz5cclxuXHRcdFx0XHQ8dmlldyBjbGFzcz1cInRpcHNcIj5cclxuXHRcdFx0XHRcdDxwaWNrZXIgbW9kZT1cIm11bHRpU2VsZWN0b3JcIiA6cmFuZ2U9XCJ0aW1lTGlzdFwiIDp2YWx1ZT1cInRpbWVzVG5kZXhcIiBAY2hhbmdlPVwiYmluZFRpbWVDaGFuZ2VcIj5cclxuXHRcdFx0XHRcdFx0PHZpZXc+6LCD5pW055uu5qCHPC92aWV3PlxyXG5cdFx0XHRcdFx0PC9waWNrZXI+XHJcblx0XHRcdFx0PC92aWV3PlxyXG5cdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdDx2aWV3IDpjbGFzcz1cIltpc0Nvbm5lY3Rpb24/J3N0YXJ0Jzonc3RhcnQgTnN0YXJ0J11cIiBAY2xpY2s9XCJoYW5kbGVTdGFydCgyKVwiPuW8gOWnizwvdmlldz5cclxuXHRcdFx0PCEtLSA8dmlldyBjbGFzcz1cIml0ZW1cIj5cclxuXHRcdFx0XHQ8dGV4dCBjbGFzcz1cIml0ZW0taXRlXCI+5pys5qyh5Liq5pWwPC90ZXh0PlxyXG5cdFx0XHRcdDx0ZXh0PjwvdGV4dD5cclxuXHRcdFx0PC92aWV3PlxyXG5cdFx0XHQ8dmlldyBjbGFzcz1cIml0ZW1cIj5cclxuXHRcdFx0XHQ8dGV4dCBjbGFzcz1cIml0ZW0taXRlXCI+5raI6ICX5Y2h6Lev6YeMPC90ZXh0PlxyXG5cdFx0XHRcdDx0ZXh0PjwvdGV4dD5cclxuXHRcdFx0PC92aWV3PiAtLT5cclxuXHRcdDwvdmlldz5cclxuXHRcdDwhLS3lrprmlbDorq3nu4MgIC0tPlxyXG5cdFx0PHZpZXcgY2xhc3M9XCJib3gxIGJveFwiIHYtaWY9XCJhY3RpdmU9PTNcIj5cclxuXHRcdFx0PHZpZXcgY2xhc3M9XCJpdGVtXCI+XHJcblx0XHRcdFx0PHZpZXcgY2xhc3M9XCJpdGVtLXNldFwiPlxyXG5cdFx0XHRcdFx0PHRleHQgQGNsaWNrPVwiaGFuZGxlV2VpZ2h0RWRpdCgn5YePJylcIj7vvI08L3RleHQ+XHJcblx0XHRcdFx0XHQ8dGV4dCB2LWlmPVwiIWRpc2FibGVkXCI+e3t3ZWlnaHQ+NTA/d2VpZ2h0OjUwfX08L3RleHQ+XHJcblx0XHRcdFx0XHQ8aW5wdXQgdHlwZT1cIm51bWJlclwiIHYtbW9kZWw9XCJ3ZWlnaHRcIiBmb2N1cz1cInRydWVcIiB2LWVsc2UgQGJsdXI9XCJkaXNhYmxlZD1mYWxzZVwiPlxyXG5cdFx0XHRcdFx0PHRleHQgQGNsaWNrPVwiaGFuZGxlV2VpZ2h0RWRpdCgn5YqgJylcIj7vvIs8L3RleHQ+XHJcblx0XHRcdFx0PC92aWV3PlxyXG5cdFx0XHRcdDx0ZXh0IGNsYXNzPVwidGlwc1wiIEBjbGljaz1cImRpc2FibGVkPXRydWVcIj7osIPmlbTnm67moIc8L3RleHQ+XHJcblx0XHRcdDwvdmlldz5cclxuXHRcdFx0PHZpZXcgOmNsYXNzPVwiW2lzQ29ubmVjdGlvbj8nc3RhcnQnOidzdGFydCBOc3RhcnQnXVwiIEBjbGljaz1cImhhbmRsZVN0YXJ0KDMpXCI+5byA5aeLPC92aWV3PlxyXG5cdFx0XHQ8IS0tIDx2aWV3IGNsYXNzPVwiaXRlbVwiPlxyXG5cdFx0XHRcdDx0ZXh0IGNsYXNzPVwiaXRlbS1pdGVcIj7mnKzmrKHml7bplb88L3RleHQ+XHJcblx0XHRcdFx0PHRleHQ+MDwvdGV4dD5cclxuXHRcdFx0PC92aWV3PlxyXG5cdFx0XHQ8dmlldyBjbGFzcz1cIml0ZW1cIj5cclxuXHRcdFx0XHQ8dGV4dCBjbGFzcz1cIml0ZW0taXRlXCI+5raI6ICX5Y2h6Lev6YeMPC90ZXh0PlxyXG5cdFx0XHRcdDx0ZXh0PjA8L3RleHQ+XHJcblx0XHRcdDwvdmlldz4gLS0+XHJcblx0XHQ8L3ZpZXc+XHJcblx0XHQ8IS0tICAtLT5cclxuXHRcdDx2aWV3IGNsYXNzPVwiZ3JpZExpc3RcIj5cclxuXHRcdFx0PHZpZXcgY2xhc3M9XCJkYXRhXCI+XHJcblx0XHRcdFx0PHZpZXcgY2xhc3M9XCJpdGVtXCIgQGNsaWNrPVwibmF2VG8oJy9wYWdlcy9za2lwaW5nL2NoYXJ0cycpXCI+XHJcblx0XHRcdFx0XHQ8dmlldyBjbGFzcz1cImltYWdlXCI+XHJcblx0XHRcdFx0XHRcdDxpbWFnZSBzcmM9XCJAL3N0YXRpYy9jaGFydHMucG5nXCI+PC9pbWFnZT5cclxuXHRcdFx0XHRcdDwvdmlldz5cclxuXHRcdFx0XHRcdDx2aWV3IGNsYXNzPVwibmFtZVwiPui/kOWKqOabsue6vzwvdmlldz5cclxuXHRcdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdFx0PHZpZXcgY2xhc3M9XCJpdGVtXCIgQGNsaWNrPVwibmF2VG8oJy9wYWdlcy9oaXN0b3J5L2hpc3Rvcnk/YWNkX2lkPScrYWNkX2lkKVwiPlxyXG5cdFx0XHRcdFx0PHZpZXcgY2xhc3M9XCJpbWFnZVwiPlxyXG5cdFx0XHRcdFx0XHQ8aW1hZ2Ugc3JjPVwiQC9zdGF0aWMvYWRkLnBuZ1wiPjwvaW1hZ2U+XHJcblx0XHRcdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdFx0XHQ8dmlldyBjbGFzcz1cIm5hbWVcIj7ljoblj7LorrDlvZU8L3ZpZXc+XHJcblx0XHRcdFx0PC92aWV3PlxyXG5cdFx0XHRcdDx2aWV3IGNsYXNzPVwiaXRlbVwiIEBjbGljaz1cIm5hdlRvKCcvcGFnZXMvY29tcGsvY29udHJhc3Q/YWNkX2lkPScrYWNkX2lkKVwiPlxyXG5cdFx0XHRcdFx0PHZpZXcgY2xhc3M9XCJpbWFnZVwiPlxyXG5cdFx0XHRcdFx0XHQ8aW1hZ2Ugc3JjPVwiQC9zdGF0aWMvcGsucG5nXCI+PC9pbWFnZT5cclxuXHRcdFx0XHRcdDwvdmlldz5cclxuXHRcdFx0XHRcdDx2aWV3IGNsYXNzPVwibmFtZVwiPuaVsOaNruWvueavlDwvdmlldz5cclxuXHRcdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdFx0PHZpZXcgY2xhc3M9XCJpdGVtXCIgQGNsaWNrPVwiJHN0b3JlLmNvbW1pdCgnY2hhbmdlUmVjb3JkJyx0cnVlKVwiPlxyXG5cdFx0XHRcdFx0PHZpZXcgY2xhc3M9XCJpbWFnZVwiPlxyXG5cdFx0XHRcdFx0XHQ8aW1hZ2Ugc3JjPVwiQC9zdGF0aWMvaGlzdG9yeS5wbmdcIj48L2ltYWdlPlxyXG5cdFx0XHRcdFx0PC92aWV3PlxyXG5cdFx0XHRcdFx0PHZpZXcgY2xhc3M9XCJuYW1lXCI+5re75Yqg6K6w5b2VPC92aWV3PlxyXG5cdFx0XHRcdDwvdmlldz5cclxuXHRcdFx0PC92aWV3PlxyXG5cdFx0PC92aWV3PlxyXG5cdFx0PCEtLSDmiYvliqjorrDlvZUgLS0+XHJcblx0XHQ8cmVjb3JkIDpydHlwZT1cImFjZF9pZFwiPjwvcmVjb3JkPlxyXG5cdDwvdmlldz5cclxuPC90ZW1wbGF0ZT5cclxuXHJcbjxzY3JpcHQ+XHJcblx0bGV0IG15VGltZTtcclxuXHRpbXBvcnQge1xyXG5cdFx0bWFwU3RhdGVcclxuXHR9IGZyb20gXCJ2dWV4XCI7XHJcblx0aW1wb3J0IHJlY29yZCBmcm9tICdAL2VsZW1lbnQvbWFudWFsbHlBZGQvcmVjb3JkLnZ1ZSc7XHJcblx0ZXhwb3J0IGRlZmF1bHQge1xyXG5cdFx0ZGF0YSgpIHtcclxuXHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHRhY3RpdmU6IDEsXHJcblx0XHRcdFx0YWNkX2lkOiA2LFxyXG5cdFx0XHRcdHdlaWdodDogNTAsXHJcblx0XHRcdFx0ZGlzYWJsZWQ6IGZhbHNlLFxyXG5cdFx0XHRcdGlzRGV2aWNlOiAwLFxyXG5cdFx0XHRcdGlzQ29ubmVjdGlvbjogZmFsc2UsXHJcblx0XHRcdFx0dGltZV9tOiBcIlwiLFxyXG5cdFx0XHRcdHRpbWVfczogXCJcIixcclxuXHRcdFx0XHR0aW1lTGlzdDogW10sXHJcblx0XHRcdFx0dGltZXNUbmRleDogWzEsIDBdLFxyXG5cdFx0XHRcdGRldmljZUlkOiBcIlwiLFxyXG5cdFx0XHRcdHNlcnZpY2VJZDogXCJcIixcclxuXHRcdFx0XHR3cml0ZTogXCJcIixcclxuXHRcdFx0XHRub3RpZnk6IFwiXCIsXHJcblx0XHRcdFx0aXNsaW5rOiAwIC8vMOi/nuaOpeS4re+8jDHmiJDlip/vvIwtMeWksei0pVxyXG5cdFx0XHR9XHJcblx0XHR9LFxyXG5cdFx0Y29tcG9uZW50czoge1xyXG5cdFx0XHRyZWNvcmRcclxuXHRcdH0sXHJcblx0XHRjb21wdXRlZDoge1xyXG5cdFx0XHQuLi5tYXBTdGF0ZShbJ3VzZXInLCBcIk1lYXN1cmVTa2lwXCIsIFwiaXNDb25uZWN0ZWRcIiwgXCJpc0JsdWV0b290aFR5bGVcIiwgXCJkZXZpY2VzTGlzdFwiXSksXHJcblx0XHRcdGluZm8oKSB7XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuTWVhc3VyZVNraXBcclxuXHRcdFx0fSxcclxuXHRcdH0sXHJcblx0XHRtb3VudGVkKCkge1xyXG5cdFx0XHRsZXQgdGhhdCA9IHRoaXNcclxuXHRcdFx0dGhhdC50aW1lTGlzdCA9IHRoYXQuJHRvb2xzLmdldGhtcygpXHJcblx0XHRcdHRoYXQudGltZV9tID0gdGhhdC50aW1lTGlzdFswXVsxXS5zdWJzdHJpbmcoMCwgMilcclxuXHRcdFx0dGhhdC50aW1lX3MgPSB0aGF0LnRpbWVMaXN0WzFdWzBdLnN1YnN0cmluZygwLCAyKVxyXG5cdFx0fSxcclxuXHRcdG9uTG9hZChvcHRpb25zKSB7XHJcblx0XHRcdGxldCB0aGF0ID0gdGhpc1xyXG5cdFx0XHRjb25zb2xlLmxvZygnb3B0aW9ucycsIG9wdGlvbnMpXHJcblx0XHRcdC8vIOmmlumhtei/m+WFpVxyXG5cdFx0XHRpZiAob3B0aW9ucyAmJiBvcHRpb25zLmFjZF9pZCkge1xyXG5cdFx0XHRcdHRoYXQuYWNkX2lkID0gb3B0aW9ucy5hY2RfaWRcclxuXHRcdFx0XHR0aGF0LmlzRGV2aWNlID0gb3B0aW9ucy5kZXZpY2VcclxuXHRcdFx0XHRzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdFx0dGhhdC5oYW5kbGVpc1NkZXZpY2UoKVxyXG5cdFx0XHRcdH0sIDEwMDApXHJcblx0XHRcdH1cclxuXHRcdFx0Ly8g6Lez57uz6aG16L+U5ZueXHJcblx0XHRcdGlmIChvcHRpb25zICYmIG9wdGlvbnMuaW5mbykge1xyXG5cdFx0XHRcdGxldCBkYXRhID0gSlNPTi5wYXJzZShvcHRpb25zLmluZm8pXHJcblx0XHRcdFx0dGhhdC5hY3RpdmUgPSBkYXRhLmFjdGl2ZVxyXG5cdFx0XHRcdHRoYXQuZGV2aWNlSWQgPSBkYXRhLmRldmljZUlkXHJcblx0XHRcdFx0dGhhdC5zZXJ2aWNlSWQgPSBkYXRhLnNlcnZpY2VJZFxyXG5cdFx0XHRcdHRoYXQud3JpdGUgPSBkYXRhLndyaXRlXHJcblx0XHRcdFx0dGhhdC5ub3RpZnkgPSBkYXRhLm5vdGlmeVxyXG5cdFx0XHRcdHRoYXQuaXNsaW5rID0gIXRoYXQuaXNDb25uZWN0ZWQgPyAtMSA6IDFcclxuXHRcdFx0XHR0aGF0Lm5vdGlmeUJMRUNoYXJhY3RlcmlzdGljVmFsdWUoKVxyXG5cdFx0XHR9XHJcblx0XHRcdHRoYXQuJHN0b3JlLmRpc3BhdGNoKFwiZ2V0U2tpcFJlc3VsdFwiLCB7XHJcblx0XHRcdFx0YXVkX2lkOiB1bmkuZ2V0U3RvcmFnZVN5bmMoJ3VzZXJpZCcpXHJcblx0XHRcdH0pXHJcblx0XHRcdHRoYXQuaXNDb25uZWN0aW9uID0gdGhhdC5pc0Nvbm5lY3RlZFxyXG5cdFx0XHR0aGF0LiRCbHVldG9vdGgub25CTEVDb25uZWN0aW9uU3RhdGVDaGFuZ2UoKVxyXG5cdFx0XHR1bmkub25CbHVldG9vdGhBZGFwdGVyU3RhdGVDaGFuZ2UoZnVuY3Rpb24ocmVzKSB7XHJcblx0XHRcdFx0dGhhdC4kc3RvcmUuY29tbWl0KFwiY2hhbmdlQmx1ZXRvb3RoXCIsIHJlcy5hdmFpbGFibGUpO1xyXG5cdFx0XHR9KVxyXG5cdFx0fSxcclxuXHRcdG9uUHVsbERvd25SZWZyZXNoKCkge1xyXG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcclxuXHRcdFx0XHR1bmkuc3RvcFB1bGxEb3duUmVmcmVzaCgpXHJcblx0XHRcdH0sIDEwMDApO1xyXG5cdFx0fSxcclxuXHRcdG9uU2hvdygpIHtcclxuXHRcdFx0bGV0IHRoYXQgPSB0aGlzXHJcblx0XHRcdC8vIOi3s+e7s+mhtei/lOWbnlxyXG5cdFx0XHR1bmkuJG9uKCd1cGRhdGVEYXRhJywgZnVuY3Rpb24oZGF0YSkge1xyXG5cdFx0XHRcdGxldCBpbmZvID0gSlNPTi5wYXJzZShkYXRhKVxyXG5cdFx0XHRcdHRoYXQuYWNkX2lkID0gaW5mby5hY2RfaWRcclxuXHRcdFx0XHR0aGF0LmlzRGV2aWNlID0gaW5mby5kZXZpY2VcclxuXHRcdFx0XHRjb25zb2xlLmxvZygn55uR5ZCs5Yiw5LqL5Lu25p2l6IeqIHVwZGF0ZURhdGEg77yM5pC65bim5Y+C5pWw5Li677yaJyArIGluZm8pO1xyXG5cdFx0XHR9KVxyXG5cdFx0fSxcclxuXHRcdG9uQmFja1ByZXNzKG9wdGlvbnMpIHtcclxuXHRcdFx0bGV0IHRoYXQgPSB0aGlzXHJcblx0XHRcdHRoYXQuaXNsaW5rID0gLTFcclxuXHRcdFx0Y2xlYXJUaW1lb3V0KG15VGltZSk7XHJcblx0XHRcdHRoYXQuaXNDb25uZWN0aW9uID0gZmFsc2VcclxuXHRcdFx0dGhhdC4kQmx1ZXRvb3RoLmNsb3NlQmx1ZXRvb3RoQWRhcHRlcigpXHJcblx0XHRcdHRoYXQuJEJsdWV0b290aC5jbG9zZUJMRUNvbm5lY3Rpb24odGhhdC5kZXZpY2VJZClcclxuXHRcdFx0dGhhdC4kQmx1ZXRvb3RoLnN0b3BCbHVldG9vdGhEZXZpY2VzRGlzY292ZXJ5KClcclxuXHRcdFx0dGhhdC4kc3RvcmUuY29tbWl0KFwiY2hhbmdlQmx1ZXRvb3RoXCIsIGZhbHNlKTtcclxuXHRcdFx0dGhhdC4kc3RvcmUuY29tbWl0KFwiY2hhbmdlQ29ubmVjdGVkXCIsIGZhbHNlKTtcclxuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XHJcblx0XHRcdFx0dW5pLnN3aXRjaFRhYih7XHJcblx0XHRcdFx0XHR1cmw6ICcvcGFnZXMvaG9tZS9ob21lJ1xyXG5cdFx0XHRcdH0pXHJcblx0XHRcdH0sIDMwMClcclxuXHRcdFx0Y29uc29sZS5sb2coXCLov5Tlm57pppbpobVcIilcclxuXHRcdFx0cmV0dXJuIHRydWVcclxuXHRcdH0sXHJcblx0XHR3YXRjaDoge1xyXG5cdFx0XHRkZXZpY2VzTGlzdCgpIHtcclxuXHRcdFx0XHRsZXQgdGhhdCA9IHRoaXNcclxuXHRcdFx0XHRpZiAodGhhdC5kZXZpY2VzTGlzdC5sZW5ndGgpIHtcclxuXHRcdFx0XHRcdGNsZWFyVGltZW91dChteVRpbWUpO1xyXG5cdFx0XHRcdFx0dGhhdC4kQmx1ZXRvb3RoLnN0b3BCbHVldG9vdGhEZXZpY2VzRGlzY292ZXJ5KClcclxuXHRcdFx0XHRcdHRoYXQuaGFuZGxlRGV2VHlwZSh0aGF0LmRldmljZXNMaXN0WzBdKVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRjb25zb2xlLmxvZyhcImRldmljZXNMaXN0XCIsIHRoYXQuZGV2aWNlc0xpc3QpXHJcblx0XHRcdH0sXHJcblx0XHRcdGlzQ29ubmVjdGVkKCkge1xyXG5cdFx0XHRcdGxldCB0aGF0ID0gdGhpc1xyXG5cdFx0XHRcdGlmICghdGhhdC5pc0Nvbm5lY3RlZCkge1xyXG5cdFx0XHRcdFx0dGhhdC5pc2xpbmsgPSAtMVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHR0aGF0LmlzQ29ubmVjdGlvbiA9IHRoYXQuaXNDb25uZWN0ZWRcclxuXHRcdFx0XHRjb25zb2xlLmxvZyhcIuiTneeJmeaYr+WQpui/nuaOpVwiLCB0aGF0LmlzQ29ubmVjdGVkKVxyXG5cdFx0XHR9LFxyXG5cdFx0XHRpc0JsdWV0b290aFR5bGUoKSB7XHJcblx0XHRcdFx0bGV0IHRoYXQgPSB0aGlzXHJcblx0XHRcdFx0aWYgKCF0aGF0LmlzQmx1ZXRvb3RoVHlsZSkge1xyXG5cdFx0XHRcdFx0dGhhdC5pc0Nvbm5lY3Rpb24gPSBmYWxzZVxyXG5cdFx0XHRcdFx0dGhhdC5pc2xpbmsgPSAtMVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRjb25zb2xlLmxvZyhcIuiTneeJmeaYr+WQpuaJk+W8gFwiLCB0aGF0LmlzQmx1ZXRvb3RoVHlsZSlcclxuXHRcdFx0fVxyXG5cdFx0fSxcclxuXHRcdG1ldGhvZHM6IHtcclxuXHRcdFx0aGFuZGxlaXNTZGV2aWNlKCkge1xyXG5cdFx0XHRcdGxldCB0aGF0ID0gdGhpc1xyXG5cdFx0XHRcdGlmICh0aGF0LmlzQ29ubmVjdGVkKSByZXR1cm5cclxuXHRcdFx0XHRpZiAoTnVtYmVyKHRoYXQuaXNEZXZpY2UpICE9IDApIHtcclxuXHRcdFx0XHRcdHRoYXQuJEJsdWV0b290aC5zdG9wQmx1ZXRvb3RoRGV2aWNlc0Rpc2NvdmVyeSgpXHJcblx0XHRcdFx0XHR1bmkub3BlbkJsdWV0b290aEFkYXB0ZXIoe1xyXG5cdFx0XHRcdFx0XHRzdWNjZXNzOiBlID0+IHtcclxuXHRcdFx0XHRcdFx0XHR0aGF0LmlzbGluayA9IDBcclxuXHRcdFx0XHRcdFx0XHR0aGF0LmhhbmRsZU15VGltZSgpXHJcblx0XHRcdFx0XHRcdFx0dGhhdC4kc3RvcmUuY29tbWl0KFwiY2hhbmdlZGV2aWNlc0xpc3RcIiwgW10pO1xyXG5cdFx0XHRcdFx0XHRcdHRoYXQuJHN0b3JlLmNvbW1pdChcImNoYW5nZUJsdWV0b290aFwiLCB0cnVlKVxyXG5cdFx0XHRcdFx0XHRcdHRoYXQuJEJsdWV0b290aC5zdGFydEJsdWV0b290aERldmljZURpc2NvdmVyeSgpXHJcblx0XHRcdFx0XHRcdFx0Y29uc29sZS5sb2coJ+WIneWni+WMluiTneeJmeaIkOWKnzonICsgZS5lcnJNc2cpO1xyXG5cdFx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0XHRmYWlsOiBlID0+IHtcclxuXHRcdFx0XHRcdFx0XHR0aGF0LmlzbGluayA9IC0xXHJcblx0XHRcdFx0XHRcdFx0dGhhdC4kQmx1ZXRvb3RoLmdldEJsdWV0b290aEFkYXB0ZXIoZSlcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdHRoYXQuJHRvb2xzLm1zZyhcIuivt+WFiOa3u+WKoOiuvuWkh++8gVwiKVxyXG5cdFx0XHRcdFx0c2V0VGltZW91dChmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRcdFx0dW5pLnN3aXRjaFRhYih7XHJcblx0XHRcdFx0XHRcdFx0dXJsOiBcIi9wYWdlcy9idXNpbmVzcy9idXNpbmVzc1wiXHJcblx0XHRcdFx0XHRcdH0pXHJcblx0XHRcdFx0XHR9LCA1MDApXHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9LFxyXG5cdFx0XHQvLyDorr7lpIfmjpLmn6VcclxuXHRcdFx0aGFuZGxlRGV2VHlwZShkZXZpY2UpIHtcclxuXHRcdFx0XHRsZXQgdGhhdCA9IHRoaXNcclxuXHRcdFx0XHRjb25zb2xlLmxvZyhcImRldmljZTEyM1wiLCBkZXZpY2UpXHJcblx0XHRcdFx0dGhhdC4kbW9kZWwuZ2V0ZGV2ZGV0YWlsKHtcclxuXHRcdFx0XHRcdG1hYzogZGV2aWNlLm1hY0FkZHIsXHJcblx0XHRcdFx0XHRhY2RfaWQ6IHRoYXQuYWNkX2lkXHJcblx0XHRcdFx0fSkudGhlbihyZXMgPT4ge1xyXG5cdFx0XHRcdFx0Y29uc29sZS5sb2coXCLmjpLmn6Xov5Tlm55cIiwgcmVzKVxyXG5cdFx0XHRcdFx0aWYgKHJlcy5jb2RlID09IDApIHtcclxuXHRcdFx0XHRcdFx0dGhhdC5kZXZpY2VJZCA9IGRldmljZS5kZXZpY2VJZFxyXG5cdFx0XHRcdFx0XHR0aGF0LmNyZWF0ZUJMRUNvbm5lY3Rpb24oKVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pXHJcblx0XHRcdH0sXHJcblx0XHRcdC8vIOi/nuaOpeiTneeJmVxyXG5cdFx0XHRjcmVhdGVCTEVDb25uZWN0aW9uKCkge1xyXG5cdFx0XHRcdGxldCB0aGF0ID0gdGhpcztcclxuXHRcdFx0XHR1bmkuY3JlYXRlQkxFQ29ubmVjdGlvbih7XHJcblx0XHRcdFx0XHRkZXZpY2VJZDogdGhhdC5kZXZpY2VJZCxcclxuXHRcdFx0XHRcdHN1Y2Nlc3M6IHJlcyA9PiB7XHJcblx0XHRcdFx0XHRcdHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0XHRcdFx0dW5pLmhpZGVMb2FkaW5nKClcclxuXHRcdFx0XHRcdFx0XHR0aGF0LmlzbGluayA9IDFcclxuXHRcdFx0XHRcdFx0XHR0aGF0LmlzQ29ubmVjdGlvbiA9IHRydWVcclxuXHRcdFx0XHRcdFx0XHR0aGF0LmdldEJMRURldmljZVNlcnZpY2VzKClcclxuXHRcdFx0XHRcdFx0fSwgMTAwMClcclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRmYWlsOiByZXMgPT4ge1xyXG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhcIuiuvuWkh+i/nuaOpeWksei0pe+8jOivt+mHjeaWsOi/nuaOpVwiLCByZXMsIHRoYXQuZGV2aWNlSWQpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHQvKipcclxuXHRcdFx0ICog6I635Y+W6K6+5aSH55qEVVVJRFxyXG5cdFx0XHQgKi9cclxuXHRcdFx0Z2V0QkxFRGV2aWNlU2VydmljZXMoKSB7XHJcblx0XHRcdFx0bGV0IHNlcnZpY2VMaXN0ID0gW107XHJcblx0XHRcdFx0bGV0IHRoYXQgPSB0aGlzO1xyXG5cdFx0XHRcdHVuaS5nZXRCTEVEZXZpY2VTZXJ2aWNlcyh7XHJcblx0XHRcdFx0XHRkZXZpY2VJZDogdGhhdC5kZXZpY2VJZCxcclxuXHRcdFx0XHRcdHN1Y2Nlc3M6IHJlcyA9PiB7XHJcblx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKFwi6I635Y+W6K6+5aSH55qEVVVJROaIkOWKn1wiLCByZXMpXHJcblx0XHRcdFx0XHRcdHNlcnZpY2VMaXN0ID0gcmVzLnNlcnZpY2VzO1xyXG5cdFx0XHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHNlcnZpY2VMaXN0Lmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0XHRcdFx0bGV0IHNlcnZpY2UgPSBzZXJ2aWNlTGlzdFtpXTtcclxuXHRcdFx0XHRcdFx0XHRpZiAoc2VydmljZS51dWlkLmluZGV4T2YoXCJGRkUwXCIpICE9IC0xKSB7XHJcblx0XHRcdFx0XHRcdFx0XHR0aGF0LnNlcnZpY2VJZCA9IHNlcnZpY2UudXVpZDtcclxuXHRcdFx0XHRcdFx0XHRcdHRoYXQuZ2V0QkxFRGV2aWNlQ2hhcmFjdGVyaXN0aWNzKCk7XHJcblx0XHRcdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhcIuiuvuWkh+eahEZGRTDnmoRzZXJ2aWNlSWTvvJogXCIgKyB0aGF0LnNlcnZpY2VJZCk7XHJcblx0XHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRmYWlsOiByZXMgPT4ge1xyXG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZygn6I635Y+W6K6+5aSH55qEVVVJROWksei0pTonLCByZXMpXHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH0sXHJcblxyXG5cdFx0XHQvKipcclxuXHRcdFx0ICog6I635Y+W5oyH5a6a5pyN5Yqh55qE54m55b6B5YC8XHJcblx0XHRcdCAqL1xyXG5cdFx0XHRnZXRCTEVEZXZpY2VDaGFyYWN0ZXJpc3RpY3MoKSB7XHJcblx0XHRcdFx0bGV0IGNoYXJhY3RlcmlzdGljc0xpc3QgPSBbXTtcclxuXHRcdFx0XHRsZXQgdGhhdCA9IHRoaXM7XHJcblx0XHRcdFx0dW5pLmdldEJMRURldmljZUNoYXJhY3RlcmlzdGljcyh7XHJcblx0XHRcdFx0XHRkZXZpY2VJZDogdGhhdC5kZXZpY2VJZCxcclxuXHRcdFx0XHRcdHNlcnZpY2VJZDogdGhhdC5zZXJ2aWNlSWQsXHJcblx0XHRcdFx0XHRzdWNjZXNzOiByZXMgPT4ge1xyXG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhcIuacjeWKoeeahOeJueW+geWAvOaIkOWKn1wiLCByZXMpXHJcblx0XHRcdFx0XHRcdC8vICog6K+7cmVhZDogdHJ1ZSwgLy8s5YaZd3JpdGU6IHRydWUsIC8vLOmAmuefpW5vdGlmeTogdHJ1ZVxyXG5cdFx0XHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHJlcy5jaGFyYWN0ZXJpc3RpY3MubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRcdFx0XHRsZXQgaXRlbSA9IHJlcy5jaGFyYWN0ZXJpc3RpY3NbaV07XHJcblx0XHRcdFx0XHRcdFx0aWYgKGl0ZW0udXVpZC5pbmRleE9mKCcwMDAwRkYxMicpICE9IC0xKSB7XHJcblx0XHRcdFx0XHRcdFx0XHR0aGF0LndyaXRlID0gaXRlbS51dWlkXHJcblxyXG5cdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoaXRlbS51dWlkLmluZGV4T2YoJzAwMDBGRkU0JykgIT0gLTEpIHtcclxuXHRcdFx0XHRcdFx0XHRcdHRoYXQubm90aWZ5ID0gaXRlbS51dWlkXHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0XHRcdFx0bGV0IGogPSBOdW1iZXIoMTY1ICsgMTAgKyAxICsgOCArIDggKyA4ICsgOCArIDggKyA4KS50b1N0cmluZygxNilcclxuXHRcdFx0XHRcdFx0XHRsZXQgc3RyID0gXCJBNTBBMDEwODA4MDgwODA4MDhcIiArIGouc3Vic3RyKGoubGVuZ3RoIC0gMiwgMilcclxuXHRcdFx0XHRcdFx0XHR0aGF0LlNlbmREYXRhKHN0cilcclxuXHRcdFx0XHRcdFx0fSwgMzAwKVxyXG5cdFx0XHRcdFx0XHQvLyDkvZPph41cclxuXHRcdFx0XHRcdFx0c2V0VGltZW91dChmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRcdFx0XHR0aGF0LmhhbmRsZVN0YXJ0KDQpXHJcblx0XHRcdFx0XHRcdH0sIDYwMClcclxuXHRcdFx0XHRcdFx0dW5pLm5vdGlmeUJMRUNoYXJhY3RlcmlzdGljVmFsdWVDaGFuZ2Uoe1xyXG5cdFx0XHRcdFx0XHRcdGRldmljZUlkOiB0aGF0LmRldmljZUlkLFxyXG5cdFx0XHRcdFx0XHRcdHNlcnZpY2VJZDogdGhhdC5zZXJ2aWNlSWQsXHJcblx0XHRcdFx0XHRcdFx0Y2hhcmFjdGVyaXN0aWNJZDogdGhhdC5ub3RpZnksXHJcblx0XHRcdFx0XHRcdFx0c3RhdGU6IHRydWUsXHJcblx0XHRcdFx0XHRcdH0pXHJcblx0XHRcdFx0XHRcdHVuaS5ub3RpZnlCTEVDaGFyYWN0ZXJpc3RpY1ZhbHVlQ2hhbmdlKHtcclxuXHRcdFx0XHRcdFx0XHRkZXZpY2VJZDogdGhhdC5kZXZpY2VJZCxcclxuXHRcdFx0XHRcdFx0XHRzZXJ2aWNlSWQ6IHRoYXQuc2VydmljZUlkLFxyXG5cdFx0XHRcdFx0XHRcdGNoYXJhY3RlcmlzdGljSWQ6IHRoYXQud3JpdGUsXHJcblx0XHRcdFx0XHRcdFx0c3RhdGU6IHRydWUsXHJcblx0XHRcdFx0XHRcdH0pXHJcblx0XHRcdFx0XHRcdHRoYXQubm90aWZ5QkxFQ2hhcmFjdGVyaXN0aWNWYWx1ZSgpXHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0ZmFpbDogcmVzID0+IHtcclxuXHRcdFx0XHRcdFx0Y29uc29sZS5sb2coJ+iOt+WPlueJueW+geWAvOWksei0pTonLCBKU09OLnN0cmluZ2lmeShyZXMpKVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pXHJcblx0XHRcdH0sXHJcblx0XHRcdG5vdGlmeUJMRUNoYXJhY3RlcmlzdGljVmFsdWUoKSB7XHJcblx0XHRcdFx0bGV0IHRoYXQgPSB0aGlzO1xyXG5cdFx0XHRcdHVuaS5ub3RpZnlCTEVDaGFyYWN0ZXJpc3RpY1ZhbHVlQ2hhbmdlKHtcclxuXHRcdFx0XHRcdHN0YXRlOiB0cnVlLCAvLyDlkK/nlKggbm90aWZ5IOWKn+iDvVxyXG5cdFx0XHRcdFx0ZGV2aWNlSWQ6IHRoYXQuZGV2aWNlSWQsXHJcblx0XHRcdFx0XHRzZXJ2aWNlSWQ6IHRoYXQuc2VydmljZUlkLFxyXG5cdFx0XHRcdFx0Y2hhcmFjdGVyaXN0aWNJZDogdGhhdC5ub3RpZnksXHJcblx0XHRcdFx0XHRzdWNjZXNzKHJlcykge1xyXG5cdFx0XHRcdFx0XHR1bmkub25CTEVDaGFyYWN0ZXJpc3RpY1ZhbHVlQ2hhbmdlKGZ1bmN0aW9uKHJlcykge1xyXG5cdFx0XHRcdFx0XHRcdGxldCB2YWx1ZSA9IHRoYXQuJHRvb2xzLmFiMmhleChyZXMudmFsdWUsIFwiXCIpO1xyXG5cdFx0XHRcdFx0XHRcdGlmICh2YWx1ZSA9PSAnNWEwNTA5MDE2OScpIHsgLy/mqKHlvI/orr7nva7miJDlip9cclxuXHRcdFx0XHRcdFx0XHRcdGxldCBpbmZvID0ge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRhY3RpdmU6IHRoYXQuYWN0aXZlLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRkZXZpY2VJZDogdGhhdC5kZXZpY2VJZCxcclxuXHRcdFx0XHRcdFx0XHRcdFx0c2VydmljZUlkOiB0aGF0LnNlcnZpY2VJZCxcclxuXHRcdFx0XHRcdFx0XHRcdFx0bm90aWZ5OiB0aGF0Lm5vdGlmeSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0d3JpdGU6IHRoYXQud3JpdGUsXHJcblx0XHRcdFx0XHRcdFx0XHRcdGFjZF9pZDogdGhhdC5hY2RfaWQsXHJcblx0XHRcdFx0XHRcdFx0XHRcdGlzRGV2aWNlOiB0aGF0LmlzRGV2aWNlXHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR1bmkubmF2aWdhdGVUbyh7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dXJsOiBcIi9wYWdlcy9kZXZpY2VzL1BDVDAxP2luZm89XCIgKyBKU09OLnN0cmluZ2lmeShpbmZvKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHR9KVxyXG5cdFx0XHRcdFx0XHRcdFx0fSwgMjAwKVxyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhcInZhbHVlXCIsIHZhbHVlLCB0aGF0LmFjdGl2ZSlcclxuXHRcdFx0XHRcdFx0fSlcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KVxyXG5cdFx0XHR9LFxyXG5cdFx0XHQvLyDlvIDlkK/ok53niZnkuLvliqjkuIrmiqXmqKHlvI9cclxuXHRcdFx0U2VuZERhdGEoc3RyKSB7XHJcblx0XHRcdFx0bGV0IHRoYXQgPSB0aGlzXHJcblx0XHRcdFx0bGV0IGJ1ZiA9IG5ldyBVaW50OEFycmF5KHN0ci5tYXRjaCgvW1xcZGEtZl17Mn0vZ2kpLm1hcChmdW5jdGlvbihoKSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gcGFyc2VJbnQoaCwgMTYpXHJcblx0XHRcdFx0fSkpXHJcblx0XHRcdFx0Y29uc29sZS5sb2coXCJ4aWFmYVwiLCBzdHIpXHJcblx0XHRcdFx0dW5pLndyaXRlQkxFQ2hhcmFjdGVyaXN0aWNWYWx1ZSh7XHJcblx0XHRcdFx0XHRkZXZpY2VJZDogdGhhdC5kZXZpY2VJZCxcclxuXHRcdFx0XHRcdHNlcnZpY2VJZDogdGhhdC5zZXJ2aWNlSWQsXHJcblx0XHRcdFx0XHRjaGFyYWN0ZXJpc3RpY0lkOiB0aGF0LndyaXRlLFxyXG5cdFx0XHRcdFx0dmFsdWU6IGJ1Zi5idWZmZXIsXHJcblx0XHRcdFx0XHRzdWNjZXNzOiByZXMgPT4ge1xyXG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZygn5LiL5Y+R5oyH5Luk5oiQ5YqfJywgcmVzLmVyck1zZylcclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRmYWlsOiByZXMgPT4ge1xyXG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhcIuS4i+WPkeaMh+S7pOWksei0pVwiLCByZXMpO1xyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHR9KVxyXG5cdFx0XHR9LFxyXG5cdFx0XHQvLyDmqKHlvI/liIfmjaJcclxuXHRcdFx0aGFuZGxlU3RhcnQoaW5kKSB7XHJcblx0XHRcdFx0bGV0IHRoYXQgPSB0aGlzXHJcblx0XHRcdFx0bGV0IG0gPSBudWxsXHJcblx0XHRcdFx0bGV0IHNlbmQgPSBudWxsXHJcblx0XHRcdFx0aWYgKCF0aGF0LmlzQ29ubmVjdGVkKSB7XHJcblx0XHRcdFx0XHR0aGF0LiR0b29scy5tc2coXCLor7flhYjov57mjqXorr7lpIfvvIFcIilcclxuXHRcdFx0XHRcdHJldHVyblxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZiAoaW5kID09IDEpIHsgLy8gMeiHqueUsVxyXG5cdFx0XHRcdFx0bSA9IE51bWJlcigxNjUgKyA4ICsgOSkudG9TdHJpbmcoMTYpXHJcblx0XHRcdFx0XHRzZW5kID0gXCJBNTA4MDkwMDAwMDAwMFwiICsgbS5zdWJzdHIobS5sZW5ndGggLSAyLCAyKVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZiAoaW5kID09IDIpIHsgLy8y5a6a5pe2XHJcblx0XHRcdFx0XHRsZXQgdGltZSA9IE51bWJlcih0aGF0LnRpbWVfbSkgKiA2MCArIE51bWJlcih0aGF0LnRpbWVfcylcclxuXHRcdFx0XHRcdG0gPSBOdW1iZXIoMTY1ICsgOCArIDkgKyB0aW1lKS50b1N0cmluZygxNilcclxuXHRcdFx0XHRcdHNlbmQgPSBcIkE1MDgwOTAwMDBcIiArIHRoYXQuJHRvb2xzLnRvSGV4KHRpbWUsIDQpICsgbS5zdWJzdHIobS5sZW5ndGggLSAyLCAyKVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZiAoaW5kID09IDMpIHsgLy8z5a6a5pWwXHJcblx0XHRcdFx0XHRsZXQgd2VpZ2h0ID0gdGhhdC4kdG9vbHMudG9IZXgodGhhdC53ZWlnaHQsIDQpXHJcblx0XHRcdFx0XHRtID0gTnVtYmVyKDE2NSArIDggKyA5ICsgdGhhdC53ZWlnaHQpLnRvU3RyaW5nKDE2KVxyXG5cdFx0XHRcdFx0c2VuZCA9IFwiQTUwODA5XCIgKyB3ZWlnaHQgKyBcIjAwMDBcIiArIG0uc3Vic3RyKG0ubGVuZ3RoIC0gMiwgMilcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKGluZCA9PSA0KSB7IC8v5L2T6YeNXHJcblxyXG5cdFx0XHRcdFx0bGV0IHdlaWdodCA9IE51bWJlcih0aGF0LnVzZXIud2VpZ2h0KSAqIDJcclxuXHRcdFx0XHRcdGxldCBudW0gPSBwYXJzZUludCh3ZWlnaHQpLnRvU3RyaW5nKCk7XHJcblx0XHRcdFx0XHRtID0gTnVtYmVyKDE2NSArIDUgKyA4ICsgTnVtYmVyKG51bSkpLnRvU3RyaW5nKDE2KVxyXG5cdFx0XHRcdFx0c2VuZCA9IFwiQTUwNTA4XCIgKyBOdW1iZXIobnVtKS50b1N0cmluZygxNikgKyBtLnN1YnN0cihtLmxlbmd0aCAtIDIsIDIpXHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHRoYXQuU2VuZERhdGEoc2VuZClcclxuXHRcdFx0XHR0aGF0LiRCbHVldG9vdGguc3RvcEJsdWV0b290aERldmljZXNEaXNjb3ZlcnkoKVxyXG5cdFx0XHR9LFxyXG5cdFx0XHQvLyDljoblj7LmlbDmja7liKDpmaTml7bph43mlrDliqDovb3mjqXlj6NcclxuXHRcdFx0cmVsb2FkKCkge1xyXG5cdFx0XHRcdGxldCB0aGF0ID0gdGhpc1xyXG5cdFx0XHRcdHRoaXMuJG5leHRUaWNrKCgpID0+IHtcclxuXHRcdFx0XHRcdHRoYXQuJHN0b3JlLmRpc3BhdGNoKFwiZ2V0U2tpcFJlc3VsdFwiLCB7XHJcblx0XHRcdFx0XHRcdGF1ZF9pZDogdW5pLmdldFN0b3JhZ2VTeW5jKCd1c2VyaWQnKVxyXG5cdFx0XHRcdFx0fSlcclxuXHRcdFx0XHR9KVxyXG5cdFx0XHR9LFxyXG5cdFx0XHQvLyDlrprml7borq3nu4NcclxuXHRcdFx0Ly9cclxuXHRcdFx0YmluZFRpbWVDaGFuZ2UoZSkge1xyXG5cdFx0XHRcdGxldCB0aGF0ID0gdGhpc1xyXG5cdFx0XHRcdGxldCBtID0gZS50YXJnZXQudmFsdWVbMF1cclxuXHRcdFx0XHRsZXQgcyA9IGUudGFyZ2V0LnZhbHVlWzFdXHJcblx0XHRcdFx0dGhhdC50aW1lc1RuZGV4ID0gZS50YXJnZXQudmFsdWVcclxuXHRcdFx0XHRsZXQgdGltZV9tID0gTnVtYmVyKHRoYXQudGltZUxpc3RbMF1bbV0uc3Vic3RyaW5nKDAsIDIpKSAqIDYwXHJcblx0XHRcdFx0bGV0IHRpbWVfcyA9IE51bWJlcih0aGF0LnRpbWVMaXN0WzFdW3NdLnN1YnN0cmluZygwLCAyKSlcclxuXHRcdFx0XHRpZiAoTnVtYmVyKHRpbWVfbSArIHRpbWVfcykgPCAzMCkge1xyXG5cdFx0XHRcdFx0dGhhdC50aW1lX20gPSAnMDAnXHJcblx0XHRcdFx0XHR0aGF0LnRpbWVfcyA9ICczMCdcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0dGhhdC50aW1lX20gPSB0aGF0LnRpbWVMaXN0WzBdW21dLnN1YnN0cmluZygwLCAyKVxyXG5cdFx0XHRcdFx0dGhhdC50aW1lX3MgPSB0aGF0LnRpbWVMaXN0WzFdW3NdLnN1YnN0cmluZygwLCAyKVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSxcclxuXHRcdFx0aGFuZGxlVGltZUVkaXQodGV4dCkge1xyXG5cdFx0XHRcdGxldCB0aGF0ID0gdGhpc1xyXG5cdFx0XHRcdGxldCB0aW1lX20gPSBOdW1iZXIodGhhdC50aW1lX20pICogNjBcclxuXHRcdFx0XHRsZXQgdGltZV9zID0gTnVtYmVyKHRoYXQudGltZV9zKVxyXG5cdFx0XHRcdGxldCBtaW51dGVzID0gbnVsbFxyXG5cdFx0XHRcdGxldCBzZWNvbmRzID0gbnVsbFxyXG5cclxuXHRcdFx0XHRpZiAoTnVtYmVyKHRpbWVfbSArIHRpbWVfcykgPj0gMzU3MCAmJiB0ZXh0ID09ICfliqAnKSB7XHJcblx0XHRcdFx0XHR0aGF0LnRpbWVfbSA9ICc1OSdcclxuXHRcdFx0XHRcdHRoYXQudGltZV9zID0gJzU5J1xyXG5cdFx0XHRcdFx0cmV0dXJuXHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmIChOdW1iZXIodGltZV9tICsgdGltZV9zKSA8PSAzMCAmJiB0ZXh0ID09ICflh48nKSB7XHJcblx0XHRcdFx0XHR0aGF0LnRpbWVfbSA9ICcwMCdcclxuXHRcdFx0XHRcdHRoYXQudGltZV9zID0gJzMwJ1xyXG5cdFx0XHRcdFx0cmV0dXJuXHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmICh0ZXh0ID09ICflh48nKSB7XHJcblx0XHRcdFx0XHRtaW51dGVzID0gTWF0aC5mbG9vcigoTnVtYmVyKHRpbWVfbSArIHRpbWVfcyAtIDMwKSAlIDM2MDApIC8gNjApXHJcblx0XHRcdFx0XHRzZWNvbmRzID0gTnVtYmVyKHRpbWVfbSArIHRpbWVfcyAtIDMwKSAlIDYwXHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmICh0ZXh0ID09ICfliqAnKSB7XHJcblx0XHRcdFx0XHRtaW51dGVzID0gTWF0aC5mbG9vcigoTnVtYmVyKHRpbWVfbSArIHRpbWVfcyArIDMwKSAlIDM2MDApIC8gNjApXHJcblx0XHRcdFx0XHRzZWNvbmRzID0gTnVtYmVyKHRpbWVfbSArIHRpbWVfcyArIDMwKSAlIDYwXHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHRoYXQudGltZV9tID0gbWludXRlcyA+IDkgPyBtaW51dGVzIDogJzAnICsgbWludXRlcztcclxuXHRcdFx0XHR0aGF0LnRpbWVfcyA9IHNlY29uZHMgPiA5ID8gc2Vjb25kcyA6ICcwJyArIHNlY29uZHM7XHJcblx0XHRcdFx0dGhhdC50aW1lc1RuZGV4ID0gW051bWJlcih0aGF0LnRpbWVfbSksIE51bWJlcih0aGF0LnRpbWVfcyldXHJcblx0XHRcdH0sXHJcblx0XHRcdGhhbmRsZVdlaWdodEVkaXQodGV4dCkge1xyXG5cdFx0XHRcdGxldCB0aGF0ID0gdGhpc1xyXG5cdFx0XHRcdGlmICh0ZXh0ID09ICflh48nKSB7XHJcblx0XHRcdFx0XHR0aGF0LndlaWdodCA9IE51bWJlcih0aGF0LndlaWdodCkgLSA1MCA+IDUwID8gTnVtYmVyKHRoYXQud2VpZ2h0KSAtIDUwIDogNTBcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKHRleHQgPT0gJ+WKoCcpIHtcclxuXHRcdFx0XHRcdHRoYXQud2VpZ2h0ID0gTnVtYmVyKHRoYXQud2VpZ2h0KSArIDUwXHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9LFxyXG5cdFx0XHQvLyDok53niZnmkJzntKLorrDml7ZcclxuXHRcdFx0aGFuZGxlTXlUaW1lKCkge1xyXG5cdFx0XHRcdGxldCB0aGF0ID0gdGhpc1xyXG5cdFx0XHRcdG15VGltZSA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0XHRpZiAoIXRoYXQuZGV2aWNlc0xpc3QubGVuZ3RoKSB7XHJcblx0XHRcdFx0XHRcdHRoYXQuaXNsaW5rID0gLTFcclxuXHRcdFx0XHRcdFx0dGhhdC4kdG9vbHMuc2hvd01vZGFsKFwi5rKh5pyJ5p+l5om+5Yiw6K6+5aSHXCIpXHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRjbGVhclRpbWVvdXQobXlUaW1lKVxyXG5cdFx0XHRcdFx0dGhhdC4kQmx1ZXRvb3RoLnN0b3BCbHVldG9vdGhEZXZpY2VzRGlzY292ZXJ5KClcclxuXHRcdFx0XHR9LCAxMjAwMCk7XHJcblx0XHRcdH0sXHJcblx0XHRcdG5hdlRvKHVybCkge1xyXG5cdFx0XHRcdGxldCB0aGF0ID0gdGhpc1xyXG5cdFx0XHRcdGlmICghdGhhdC5pc0Nvbm5lY3RlZCkge1xyXG5cdFx0XHRcdFx0dGhhdC5pc2xpbmsgPSAtMVxyXG5cdFx0XHRcdFx0Y2xlYXJUaW1lb3V0KG15VGltZSlcclxuXHRcdFx0XHRcdHRoYXQuJEJsdWV0b290aC5jbG9zZUJsdWV0b290aEFkYXB0ZXIoKVxyXG5cdFx0XHRcdFx0dGhhdC4kQmx1ZXRvb3RoLmNsb3NlQkxFQ29ubmVjdGlvbih0aGF0LmRldmljZUlkKVxyXG5cdFx0XHRcdFx0dGhhdC4kQmx1ZXRvb3RoLnN0b3BCbHVldG9vdGhEZXZpY2VzRGlzY292ZXJ5KClcclxuXHRcdFx0XHRcdGNvbnNvbGUubG9nKFwi6JOd54mZ5rKh5pyJ6L+e5o6lXCIpXHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHVuaS5uYXZpZ2F0ZVRvKHtcclxuXHRcdFx0XHRcdHVybDogdXJsXHJcblx0XHRcdFx0fSlcclxuXHRcdFx0fSxcclxuXHJcblx0XHR9XHJcblx0fVxyXG48L3NjcmlwdD5cclxuXHJcbjxzdHlsZSBsYW5nPVwic2Nzc1wiIHNjb3BlZD5cclxuXHQuY29udGVudCB7XHJcblx0XHR3aWR0aDogMTAwJTtcclxuXHRcdG1pbi1oZWlnaHQ6IDEwMHZoO1xyXG5cdFx0YmFja2dyb3VuZC1jb2xvcjogI0Y1RjZGQTtcclxuXHR9XHJcblxyXG5cdC5za2lwdG9wIHtcclxuXHRcdG1hcmdpbi10b3A6IDE1cHg7XHJcblx0fVxyXG5cclxuXHQudGFiYmFyIHtcclxuXHRcdHdpZHRoOiAxMDAlO1xyXG5cdFx0bWFyZ2luLXRvcDogMjBweDtcclxuXHRcdG1hcmdpbi1ib3R0b206IDIwcHg7XHJcblx0XHRkaXNwbGF5OiBmbGV4O1xyXG5cdFx0YWxpZ24taXRlbXM6IGNlbnRlcjtcclxuXHRcdGp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kO1xyXG5cclxuXHRcdHZpZXcge1xyXG5cdFx0XHRwb3NpdGlvbjogcmVsYXRpdmU7XHJcblx0XHR9XHJcblxyXG5cdFx0LmFjdGl2ZTphZnRlciB7XHJcblx0XHRcdGNvbnRlbnQ6IFwiXCI7XHJcblx0XHRcdGhlaWdodDogM3B4O1xyXG5cdFx0XHR3aWR0aDogMTAwJTtcclxuXHRcdFx0cG9zaXRpb246IGFic29sdXRlO1xyXG5cdFx0XHRib3R0b206IC04cHg7XHJcblx0XHRcdGxlZnQ6IDA7XHJcblx0XHRcdGJvcmRlci1yYWRpdXM6IDVweDtcclxuXHRcdFx0YmFja2dyb3VuZDogJG1haW5jb2xvcjtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC5ib3gxIHtcclxuXHRcdGJhY2tncm91bmQtY29sb3I6ICNmZmY7XHJcblx0XHRwYWRkaW5nOiAxMHB4ICFpbXBvcnRhbnQ7XHJcblx0XHRjb2xvcjogIzk5OTtcclxuXHRcdG1hcmdpbjogMTVweDtcclxuXHRcdGJvcmRlci1yYWRpdXM6IDEwcHg7XHJcblx0XHR3aWR0aDogY2FsYygxMDAlLSAzMHB4KTtcclxuXHJcblx0XHQudGltZSB7XHJcblx0XHRcdHdpZHRoOiAxMDAlO1xyXG5cdFx0XHRmb250LXNpemU6IDMycnB4O1xyXG5cdFx0XHRtYXJnaW4tYm90dG9tOiAyMHB4O1xyXG5cdFx0fVxyXG5cclxuXHRcdC5pdGVtIHtcclxuXHRcdFx0d2lkdGg6IDEwMCU7XHJcblx0XHRcdGNvbG9yOiAjMzMzO1xyXG5cdFx0XHRmb250LXNpemU6IDQ0cnB4O1xyXG5cdFx0XHR0ZXh0LWFsaWduOiBjZW50ZXI7XHJcblx0XHRcdG1hcmdpbi1ib3R0b206IDE1cHg7XHJcblxyXG5cdFx0XHR0ZXh0IHtcclxuXHRcdFx0XHRkaXNwbGF5OiBibG9jaztcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Lml0ZW0taXRlIHtcclxuXHRcdFx0XHRmb250LXNpemU6IDM2cnB4O1xyXG5cdFx0XHRcdG1hcmdpbi1ib3R0b206IDE1cHg7XHJcblx0XHRcdFx0d2lkdGg6IDEwMCU7XHJcblxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQuaXRlbS1zZXQge1xyXG5cdFx0XHRcdHdpZHRoOiBjYWxjKDEwMCUgLSAzMHB4KTtcclxuXHRcdFx0XHRkaXNwbGF5OiBmbGV4O1xyXG5cdFx0XHRcdGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcblx0XHRcdFx0aGVpZ2h0OiA1NXB4O1xyXG5cdFx0XHRcdGxpbmUtaGVpZ2h0OiA1NXB4O1xyXG5cdFx0XHRcdGZvbnQtc2l6ZTogNjBycHg7XHJcblx0XHRcdFx0bWFyZ2luLWJvdHRvbTogNXB4O1xyXG5cdFx0XHRcdGJhY2tncm91bmQtY29sb3I6ICNmN2Y3Zjc7XHJcblx0XHRcdFx0cGFkZGluZzogMCAxNXB4O1xyXG5cdFx0XHRcdGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcclxuXHRcdFx0XHRtYXJnaW46IGF1dG87XHJcblx0XHRcdFx0cG9zaXRpb246IHJlbGF0aXZlO1xyXG5cclxuXHRcdFx0XHQvZGVlcC9pbnB1dCB7XHJcblx0XHRcdFx0XHRmb250LXNpemU6IDYwcnB4O1xyXG5cdFx0XHRcdFx0aGVpZ2h0OiA1NXB4O1xyXG5cdFx0XHRcdFx0bGluZS1oZWlnaHQ6IDU1cHg7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQuaXRlbS1zZXQwIHtcclxuXHRcdFx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xyXG5cdFx0XHRcdGp1c3RpZnktY29udGVudDogY2VudGVyXHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC50aXBzIHtcclxuXHRcdFx0XHRmb250LXNpemU6IDMycnB4O1xyXG5cdFx0XHRcdGNvbG9yOiAjOTk5O1xyXG5cdFx0XHRcdG1hcmdpbi10b3A6IDEwcHg7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQuc3RhcnQge1xyXG5cdFx0XHRjb2xvcjogI2ZmZjtcclxuXHRcdFx0d2lkdGg6IDEwMHB4O1xyXG5cdFx0XHRoZWlnaHQ6IDEwMHB4O1xyXG5cdFx0XHRmb250LXNpemU6IDM2cnB4O1xyXG5cdFx0XHRmb250LXdlaWdodDogYm9sZDtcclxuXHRcdFx0bGluZS1oZWlnaHQ6IDEwMHB4O1xyXG5cdFx0XHR0ZXh0LWFsaWduOiBjZW50ZXI7XHJcblx0XHRcdGJvcmRlci1yYWRpdXM6IDUwJTtcclxuXHRcdFx0YmFja2dyb3VuZDogJHRleHRjb2xvcjtcclxuXHRcdFx0bWFyZ2luOiAxNXB4IGF1dG87XHJcblx0XHR9XHJcblxyXG5cdFx0Lk5zdGFydCB7XHJcblx0XHRcdG9wYWNpdHk6IDAuNSAhaW1wb3J0YW50O1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LnN0YXR1cyB7XHJcblx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xyXG5cclxuXHRcdGltYWdlIHtcclxuXHRcdFx0d2lkdGg6IDE4cHg7XHJcblx0XHRcdGhlaWdodDogMThweDtcclxuXHRcdH1cclxuXHJcblx0XHQuaWNvbl9saW5rIHtcclxuXHRcdFx0YW5pbWF0aW9uOiByb3RhdGlvbiAwLjZzIGluZmluaXRlIGxpbmVhcjtcclxuXHRcdH1cclxuXHJcblx0XHRAa2V5ZnJhbWVzIHJvdGF0aW9uIHtcclxuXHRcdFx0MCUge1xyXG5cdFx0XHRcdHRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQxMDAlIHtcclxuXHRcdFx0XHR0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG48L3N0eWxlPiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///200\n"); /***/ }), /* 201 */