nsc-react-component 2.4.6 → 2.4.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/base/common/TreePanel.js +1 -2
- package/lib/base/form/Form.d.ts +3 -2
- package/lib/base/form/Form.js +5 -11
- package/lib/base/image/index.d.ts +1 -0
- package/lib/base/image/index.js +5 -5
- package/lib/base/modal/index.d.ts +8 -8
- package/lib/base/modal/index.js +61 -22
- package/lib/base/table/index.d.ts +5 -22
- package/lib/base/table/index.js +58 -29
- package/lib/page/BasePage/index.d.ts +5 -6
- package/lib/page/BasePage/index.js +133 -152
- package/lib/page/BasePage/index.module.less +3 -0
- package/lib/treeUtils.js +1 -2
- package/package.json +2 -2
|
@@ -4,7 +4,7 @@ var _excluded = ["children", "pageType", "onClick", "icon", "show"],
|
|
|
4
4
|
_excluded2 = ["children", "pageType", "onClick", "icon", "recordShow"],
|
|
5
5
|
_excluded3 = ["children", "pageType", "onClick", "recordShow", "icon", "show"],
|
|
6
6
|
_excluded4 = ["children", "pageType", "onClick", "recordShow", "icon"],
|
|
7
|
-
_excluded5 = ["store", "filterColumn", "actionColumn", "showRowSelection", "columnOrder"],
|
|
7
|
+
_excluded5 = ["store", "filterColumn", "actionColumn", "showRowSelection", "columnOrder", "rowSelection", "expandable"],
|
|
8
8
|
_excluded6 = ["store", "showSearch", "titleAlias"];
|
|
9
9
|
|
|
10
10
|
function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
|
@@ -13,6 +13,10 @@ function _objectWithoutProperties(source, excluded) { if (source == null) return
|
|
|
13
13
|
|
|
14
14
|
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
|
15
15
|
|
|
16
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
|
|
17
|
+
|
|
18
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
|
19
|
+
|
|
16
20
|
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
|
|
17
21
|
|
|
18
22
|
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
@@ -25,10 +29,6 @@ function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToAr
|
|
|
25
29
|
|
|
26
30
|
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
27
31
|
|
|
28
|
-
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
|
|
29
|
-
|
|
30
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
|
31
|
-
|
|
32
32
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
33
33
|
|
|
34
34
|
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
|
|
@@ -83,53 +83,27 @@ var BasePage = /*#__PURE__*/function (_PureComponent) {
|
|
|
83
83
|
function BasePage(props) {
|
|
84
84
|
var _type, _size;
|
|
85
85
|
|
|
86
|
-
var
|
|
86
|
+
var _this;
|
|
87
87
|
|
|
88
88
|
_classCallCheck(this, BasePage);
|
|
89
89
|
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
_defineProperty(_assertThisInitialized(_this2), "tableRef", /*#__PURE__*/React.createRef());
|
|
93
|
-
|
|
94
|
-
_defineProperty(_assertThisInitialized(_this2), "treeRef", /*#__PURE__*/React.createRef());
|
|
90
|
+
_this = _super.call(this, props);
|
|
95
91
|
|
|
96
|
-
_defineProperty(_assertThisInitialized(
|
|
92
|
+
_defineProperty(_assertThisInitialized(_this), "tableRef", /*#__PURE__*/React.createRef());
|
|
97
93
|
|
|
98
|
-
_defineProperty(_assertThisInitialized(
|
|
94
|
+
_defineProperty(_assertThisInitialized(_this), "treeRef", /*#__PURE__*/React.createRef());
|
|
99
95
|
|
|
100
|
-
_defineProperty(_assertThisInitialized(
|
|
96
|
+
_defineProperty(_assertThisInitialized(_this), "searchRef", /*#__PURE__*/React.createRef());
|
|
101
97
|
|
|
102
|
-
_defineProperty(_assertThisInitialized(
|
|
103
|
-
var data = typeof ev.data === "string" ? JSON.parse(ev.data) : ev.data;
|
|
98
|
+
_defineProperty(_assertThisInitialized(_this), "editorRef", /*#__PURE__*/React.createRef());
|
|
104
99
|
|
|
105
|
-
|
|
100
|
+
_defineProperty(_assertThisInitialized(_this), "dateFormat", {});
|
|
106
101
|
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
_this.
|
|
112
|
-
formType: payload.type
|
|
113
|
-
});
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
if (data.eventType == "changeTableSize") {
|
|
118
|
-
var _payload = data.payload;
|
|
119
|
-
|
|
120
|
-
if (_payload.size == "default" || _payload.size == "small" || _payload.size == "middle") {
|
|
121
|
-
_this.setState({
|
|
122
|
-
tableSize: _payload.size
|
|
123
|
-
});
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
});
|
|
127
|
-
|
|
128
|
-
_defineProperty(_assertThisInitialized(_this2), "onSelect", function (checkedTreeKeys) {
|
|
129
|
-
var _this2$state = _this2.state,
|
|
130
|
-
name = _this2$state.name,
|
|
131
|
-
userType = _this2$state.userType,
|
|
132
|
-
account = _this2$state.account;
|
|
102
|
+
_defineProperty(_assertThisInitialized(_this), "onSelect", function (checkedTreeKeys) {
|
|
103
|
+
var _this$state = _this.state,
|
|
104
|
+
name = _this$state.name,
|
|
105
|
+
userType = _this$state.userType,
|
|
106
|
+
account = _this$state.account;
|
|
133
107
|
var value = {
|
|
134
108
|
name: name,
|
|
135
109
|
userType: userType,
|
|
@@ -137,27 +111,43 @@ var BasePage = /*#__PURE__*/function (_PureComponent) {
|
|
|
137
111
|
deptId: checkedTreeKeys[0]
|
|
138
112
|
};
|
|
139
113
|
|
|
140
|
-
|
|
114
|
+
_this.tableLoad(value);
|
|
115
|
+
});
|
|
116
|
+
|
|
117
|
+
_defineProperty(_assertThisInitialized(_this), "getSelectedKey", function (selected) {
|
|
118
|
+
var res = [];
|
|
119
|
+
|
|
120
|
+
for (var key in selected) {
|
|
121
|
+
var keys = selected[key];
|
|
122
|
+
|
|
123
|
+
if (keys.length > 0) {
|
|
124
|
+
res = [].concat(_toConsumableArray(res), _toConsumableArray(keys));
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
return res;
|
|
141
129
|
});
|
|
142
130
|
|
|
143
131
|
var _config = config(),
|
|
144
132
|
storePrefix = _config.storePrefix;
|
|
145
133
|
|
|
146
|
-
console.log("storePrefix", storePrefix);
|
|
147
134
|
var type = getStorage(storePrefix ? storePrefix + "-" + "formType" : "formType");
|
|
148
135
|
type = (_type = type) === null || _type === void 0 ? void 0 : _type.content;
|
|
149
136
|
var size = getStorage(storePrefix ? storePrefix + "-" + "tableSize" : "tableSize");
|
|
150
137
|
size = (_size = size) === null || _size === void 0 ? void 0 : _size.content;
|
|
151
|
-
|
|
138
|
+
_this.state = {
|
|
152
139
|
type: "add",
|
|
153
140
|
selectedRowKeys: [],
|
|
154
141
|
selectedRowDatas: [],
|
|
155
142
|
treeSelectedKey: "",
|
|
156
143
|
expand: false,
|
|
157
144
|
formType: type || "modal",
|
|
158
|
-
tableSize: size || "default"
|
|
145
|
+
tableSize: size || "default",
|
|
146
|
+
selectedRowKeysStore: {},
|
|
147
|
+
selectedRowDatasStore: {},
|
|
148
|
+
currentPage: 1
|
|
159
149
|
};
|
|
160
|
-
return
|
|
150
|
+
return _this;
|
|
161
151
|
}
|
|
162
152
|
|
|
163
153
|
_createClass(BasePage, [{
|
|
@@ -165,12 +155,6 @@ var BasePage = /*#__PURE__*/function (_PureComponent) {
|
|
|
165
155
|
value: function componentDidMount() {
|
|
166
156
|
var initData = this.props.initData;
|
|
167
157
|
initData && initData();
|
|
168
|
-
window.addEventListener("message", this.listenMessage);
|
|
169
|
-
}
|
|
170
|
-
}, {
|
|
171
|
-
key: "componentWillUnmount",
|
|
172
|
-
value: function componentWillUnmount() {
|
|
173
|
-
window.removeEventListener("message", this.listenMessage);
|
|
174
158
|
}
|
|
175
159
|
}, {
|
|
176
160
|
key: "showForm",
|
|
@@ -293,9 +277,21 @@ var BasePage = /*#__PURE__*/function (_PureComponent) {
|
|
|
293
277
|
}, {
|
|
294
278
|
key: "tableReload",
|
|
295
279
|
value: function tableReload() {
|
|
296
|
-
var _this$tableRef$curren2
|
|
280
|
+
var _this$tableRef$curren2,
|
|
281
|
+
_this2 = this;
|
|
282
|
+
|
|
283
|
+
var autoLoad = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
|
|
284
|
+
(_this$tableRef$curren2 = this.tableRef.current) === null || _this$tableRef$curren2 === void 0 ? void 0 : _this$tableRef$curren2.store.reload({
|
|
285
|
+
callback: function callback(res) {
|
|
286
|
+
var _res$data, _res$data$records;
|
|
297
287
|
|
|
298
|
-
|
|
288
|
+
if (autoLoad && (res === null || res === void 0 ? void 0 : (_res$data = res.data) === null || _res$data === void 0 ? void 0 : (_res$data$records = _res$data.records) === null || _res$data$records === void 0 ? void 0 : _res$data$records.length) == 0 && _this2.state.currentPage !== 1) {
|
|
289
|
+
var searchValues = _this2.getSearchValues();
|
|
290
|
+
|
|
291
|
+
_this2.tableLoad(searchValues);
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
});
|
|
299
295
|
}
|
|
300
296
|
}, {
|
|
301
297
|
key: "getSelectedRowKeys",
|
|
@@ -307,6 +303,14 @@ var BasePage = /*#__PURE__*/function (_PureComponent) {
|
|
|
307
303
|
value: function getSelectedRowDatas() {
|
|
308
304
|
return this.state.selectedRowDatas;
|
|
309
305
|
}
|
|
306
|
+
}, {
|
|
307
|
+
key: "resetSelectedRowKeys",
|
|
308
|
+
value: function resetSelectedRowKeys() {
|
|
309
|
+
this.setState({
|
|
310
|
+
selectedRowKeys: [],
|
|
311
|
+
selectedRowDatas: []
|
|
312
|
+
});
|
|
313
|
+
}
|
|
310
314
|
}, {
|
|
311
315
|
key: "setSelectedRowKeys",
|
|
312
316
|
value: function setSelectedRowKeys(data) {
|
|
@@ -330,86 +334,38 @@ var BasePage = /*#__PURE__*/function (_PureComponent) {
|
|
|
330
334
|
return fromValue;
|
|
331
335
|
}
|
|
332
336
|
}, {
|
|
333
|
-
key: "
|
|
334
|
-
value: function
|
|
335
|
-
var
|
|
336
|
-
|
|
337
|
-
|
|
337
|
+
key: "getChildrenData",
|
|
338
|
+
value: function getChildrenData(data) {
|
|
339
|
+
var _this3 = this;
|
|
340
|
+
|
|
341
|
+
var keys = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
|
|
338
342
|
var tableProps = this.props.tableProps;
|
|
339
343
|
var _tableProps$rowKey = tableProps.rowKey,
|
|
340
344
|
rowKey = _tableProps$rowKey === void 0 ? "id" : _tableProps$rowKey;
|
|
345
|
+
var resKey = [];
|
|
341
346
|
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
} else {
|
|
350
|
-
selectedRowKeys.map(function (item, index) {
|
|
351
|
-
if (item === record[rowKey]) {
|
|
352
|
-
newSelectedRowKeys.splice(index, 1);
|
|
353
|
-
}
|
|
354
|
-
});
|
|
355
|
-
selectedRowDatas.map(function (item, index) {
|
|
356
|
-
if (item[rowKey] === record[rowKey]) {
|
|
357
|
-
newSelectedRowDatas.splice(index, 1);
|
|
347
|
+
if (data.childNodes) {
|
|
348
|
+
var children = data.childNodes;
|
|
349
|
+
children.map(function (item, index) {
|
|
350
|
+
if (item.childNodes) {
|
|
351
|
+
_this3.getChildrenData(item.childNodes, keys);
|
|
352
|
+
} else {
|
|
353
|
+
resKey = [].concat(_toConsumableArray(keys), [item[rowKey]]);
|
|
358
354
|
}
|
|
359
355
|
});
|
|
360
|
-
}
|
|
361
|
-
|
|
362
|
-
this.setState({
|
|
363
|
-
selectedRowKeys: newSelectedRowKeys,
|
|
364
|
-
selectedRowDatas: newSelectedRowDatas
|
|
365
|
-
});
|
|
366
|
-
}
|
|
367
|
-
}, {
|
|
368
|
-
key: "rowSelectionOnSelectAll",
|
|
369
|
-
value: function rowSelectionOnSelectAll(selected, selectedRows, changeRows) {
|
|
370
|
-
var _this$state2 = this.state,
|
|
371
|
-
selectedRowKeys = _this$state2.selectedRowKeys,
|
|
372
|
-
selectedRowDatas = _this$state2.selectedRowDatas;
|
|
373
|
-
var tableProps = this.props.tableProps;
|
|
374
|
-
var _tableProps$rowKey2 = tableProps.rowKey,
|
|
375
|
-
rowKey = _tableProps$rowKey2 === void 0 ? "id" : _tableProps$rowKey2;
|
|
376
|
-
var newids = [];
|
|
377
|
-
var newdatas = [];
|
|
378
|
-
|
|
379
|
-
if (changeRows.length > 0) {
|
|
380
|
-
var changeIds = changeRows.map(function (item) {
|
|
381
|
-
return item[rowKey];
|
|
382
|
-
});
|
|
383
|
-
|
|
384
|
-
if (selected) {
|
|
385
|
-
newids = [].concat(_toConsumableArray(selectedRowKeys), _toConsumableArray(changeIds));
|
|
386
|
-
newdatas = [].concat(_toConsumableArray(selectedRowDatas), _toConsumableArray(changeRows));
|
|
387
|
-
} else {
|
|
388
|
-
selectedRowKeys.map(function (item, index) {
|
|
389
|
-
if (changeIds.indexOf(item) == -1) {
|
|
390
|
-
newids.push(item);
|
|
391
|
-
}
|
|
392
|
-
});
|
|
393
|
-
selectedRowDatas.map(function (item, index) {
|
|
394
|
-
if (changeIds.indexOf(item[rowKey]) == -1) {
|
|
395
|
-
newdatas.push(item);
|
|
396
|
-
}
|
|
397
|
-
});
|
|
398
|
-
}
|
|
399
356
|
} else {
|
|
400
|
-
|
|
401
|
-
newdatas = _toConsumableArray(selectedRowDatas);
|
|
357
|
+
resKey = [].concat(_toConsumableArray(keys), [data[rowKey]]);
|
|
402
358
|
}
|
|
403
359
|
|
|
404
|
-
|
|
405
|
-
selectedRowKeys: _toConsumableArray(newids),
|
|
406
|
-
selectedRowDatas: _toConsumableArray(newdatas)
|
|
407
|
-
});
|
|
360
|
+
return resKey;
|
|
408
361
|
}
|
|
409
362
|
}, {
|
|
410
363
|
key: "renderToolButtons",
|
|
411
364
|
value: function renderToolButtons(toolbuttons) {
|
|
365
|
+
var marginflag = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
412
366
|
var flag = toolbuttons.length > 5;
|
|
367
|
+
var _this$props$showSearc = this.props.showSearch,
|
|
368
|
+
showSearch = _this$props$showSearc === void 0 ? true : _this$props$showSearc;
|
|
413
369
|
var content = toolbuttons.map(function (item, index) {
|
|
414
370
|
var _item$props = item.props,
|
|
415
371
|
children = _item$props.children,
|
|
@@ -434,7 +390,7 @@ var BasePage = /*#__PURE__*/function (_PureComponent) {
|
|
|
434
390
|
}
|
|
435
391
|
});
|
|
436
392
|
return /*#__PURE__*/React.createElement("div", {
|
|
437
|
-
className: getLess(styles, "tool-buttons"),
|
|
393
|
+
className: cls(getLess(styles, "tool-buttons"), _defineProperty({}, getLess(styles, "tool-buttons-margin"), !showSearch || marginflag)),
|
|
438
394
|
style: {
|
|
439
395
|
marginLeft: 0
|
|
440
396
|
}
|
|
@@ -588,7 +544,6 @@ var BasePage = /*#__PURE__*/function (_PureComponent) {
|
|
|
588
544
|
if (selected) {
|
|
589
545
|
if (selectedNodes[0].isLeaf || !selectedNodes[0].children) {
|
|
590
546
|
if (selectedKeys[0] !== treeSelectedKey) {
|
|
591
|
-
// let mapData = this.treeRef.current?.store.getFlattenData();
|
|
592
547
|
keyword = selectedNodes[0].dataref.attribute[searchKey];
|
|
593
548
|
this.setState({
|
|
594
549
|
treeSelectedKey: selectedKeys[0]
|
|
@@ -647,7 +602,7 @@ var BasePage = /*#__PURE__*/function (_PureComponent) {
|
|
|
647
602
|
}, {
|
|
648
603
|
key: "render",
|
|
649
604
|
value: function render() {
|
|
650
|
-
var
|
|
605
|
+
var _this4 = this;
|
|
651
606
|
|
|
652
607
|
var selectedRowKeys = this.state.selectedRowKeys;
|
|
653
608
|
var _this$props3 = this.props,
|
|
@@ -693,6 +648,10 @@ var BasePage = /*#__PURE__*/function (_PureComponent) {
|
|
|
693
648
|
showRowSelection = _tableProps$showRowSe === void 0 ? true : _tableProps$showRowSe,
|
|
694
649
|
_tableProps$columnOrd = tableProps.columnOrder,
|
|
695
650
|
columnOrder = _tableProps$columnOrd === void 0 ? true : _tableProps$columnOrd,
|
|
651
|
+
_tableProps$rowSelect = tableProps.rowSelection,
|
|
652
|
+
rowSelection = _tableProps$rowSelect === void 0 ? {} : _tableProps$rowSelect,
|
|
653
|
+
_tableProps$expandabl = tableProps.expandable,
|
|
654
|
+
expandable = _tableProps$expandabl === void 0 ? {} : _tableProps$expandabl,
|
|
696
655
|
othertableParams = _objectWithoutProperties(tableProps, _excluded5);
|
|
697
656
|
|
|
698
657
|
var _treeProps$store = treeProps.store,
|
|
@@ -708,17 +667,30 @@ var BasePage = /*#__PURE__*/function (_PureComponent) {
|
|
|
708
667
|
store: store
|
|
709
668
|
}, othertableParams);
|
|
710
669
|
|
|
711
|
-
console.log("this.props.formType", this.props.formType);
|
|
712
|
-
console.log("this.satte.formType", this.state.formType);
|
|
713
|
-
|
|
714
670
|
if (showRowSelection) {
|
|
715
671
|
tableParams = _objectSpread(_objectSpread({}, tableParams), {}, {
|
|
716
|
-
rowSelection: {
|
|
717
|
-
selectedRowKeys: selectedRowKeys,
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
672
|
+
rowSelection: _objectSpread({
|
|
673
|
+
selectedRowKeys: this.state.selectedRowKeys,
|
|
674
|
+
onChange: function onChange(selectedRowKeys, selectedRows) {
|
|
675
|
+
var _this4$state = _this4.state,
|
|
676
|
+
selectedRowKeysStore = _this4$state.selectedRowKeysStore,
|
|
677
|
+
selectedRowDatasStore = _this4$state.selectedRowDatasStore,
|
|
678
|
+
currentPage = _this4$state.currentPage;
|
|
679
|
+
|
|
680
|
+
var newRowKeysStore = _objectSpread(_objectSpread({}, selectedRowKeysStore), {}, _defineProperty({}, currentPage, selectedRowKeys));
|
|
681
|
+
|
|
682
|
+
var newRowDatasStore = _objectSpread(_objectSpread({}, selectedRowDatasStore), {}, _defineProperty({}, currentPage, selectedRows));
|
|
683
|
+
|
|
684
|
+
_this4.setState({
|
|
685
|
+
selectedRowKeys: _this4.getSelectedKey(newRowKeysStore),
|
|
686
|
+
selectedRowDatas: _this4.getSelectedKey(newRowDatasStore),
|
|
687
|
+
selectedRowKeysStore: _objectSpread({}, newRowKeysStore),
|
|
688
|
+
selectedRowDatasStore: _objectSpread({}, newRowDatasStore)
|
|
689
|
+
});
|
|
690
|
+
},
|
|
691
|
+
columnWidth: 40,
|
|
692
|
+
checkStrictly: false
|
|
693
|
+
}, rowSelection)
|
|
722
694
|
});
|
|
723
695
|
}
|
|
724
696
|
|
|
@@ -780,14 +752,14 @@ var BasePage = /*#__PURE__*/function (_PureComponent) {
|
|
|
780
752
|
className: getLess(styles, "col-back")
|
|
781
753
|
}, /*#__PURE__*/React.createElement("span", {
|
|
782
754
|
className: getLess(styles, "col-text")
|
|
783
|
-
},
|
|
755
|
+
}, _this4.getText(tempProp, text))));
|
|
784
756
|
},
|
|
785
757
|
ellipsis: true
|
|
786
758
|
}, temp);
|
|
787
759
|
} else {
|
|
788
760
|
temp = _objectSpread({
|
|
789
761
|
render: function render(text) {
|
|
790
|
-
return /*#__PURE__*/React.createElement(React.Fragment, null,
|
|
762
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, _this4.getText(tempProp, text));
|
|
791
763
|
}
|
|
792
764
|
}, temp);
|
|
793
765
|
}
|
|
@@ -807,7 +779,7 @@ var BasePage = /*#__PURE__*/function (_PureComponent) {
|
|
|
807
779
|
return;
|
|
808
780
|
}
|
|
809
781
|
|
|
810
|
-
|
|
782
|
+
_this4.showForm(record.attribute || record, "detail");
|
|
811
783
|
}
|
|
812
784
|
}, /*#__PURE__*/React.createElement("span", {
|
|
813
785
|
className: getLess(styles, "icon")
|
|
@@ -825,7 +797,7 @@ var BasePage = /*#__PURE__*/function (_PureComponent) {
|
|
|
825
797
|
return;
|
|
826
798
|
}
|
|
827
799
|
|
|
828
|
-
|
|
800
|
+
_this4.showForm(record.attribute || record, "editor");
|
|
829
801
|
}
|
|
830
802
|
}, /*#__PURE__*/React.createElement("span", {
|
|
831
803
|
className: getLess(styles, "icon")
|
|
@@ -839,14 +811,14 @@ var BasePage = /*#__PURE__*/function (_PureComponent) {
|
|
|
839
811
|
selfButtons.push( /*#__PURE__*/React.createElement(Button, {
|
|
840
812
|
type: "primary",
|
|
841
813
|
onClick: function onClick() {
|
|
842
|
-
var onShowForm =
|
|
814
|
+
var onShowForm = _this4.props.onShowForm;
|
|
843
815
|
|
|
844
816
|
if (onShowForm) {
|
|
845
817
|
onShowForm();
|
|
846
818
|
return;
|
|
847
819
|
}
|
|
848
820
|
|
|
849
|
-
|
|
821
|
+
_this4.showForm();
|
|
850
822
|
},
|
|
851
823
|
icon: /*#__PURE__*/React.createElement(PlusOutlined, null)
|
|
852
824
|
}, "\u6DFB\u52A0"));
|
|
@@ -893,7 +865,7 @@ var BasePage = /*#__PURE__*/function (_PureComponent) {
|
|
|
893
865
|
render: function render(text, record) {
|
|
894
866
|
return /*#__PURE__*/React.createElement("div", {
|
|
895
867
|
className: getLess(styles, "action")
|
|
896
|
-
},
|
|
868
|
+
}, _this4.renderCloumnButton(columnButtons, record));
|
|
897
869
|
}
|
|
898
870
|
});
|
|
899
871
|
var headerCount = toolButtonPosition == "right" ? 1 : 2;
|
|
@@ -958,10 +930,10 @@ var BasePage = /*#__PURE__*/function (_PureComponent) {
|
|
|
958
930
|
var itemProps = item.props || {};
|
|
959
931
|
|
|
960
932
|
if (itemProps.valueFormat) {
|
|
961
|
-
|
|
933
|
+
_this4.dateFormat[item.name] = itemProps.valueFormat;
|
|
962
934
|
}
|
|
963
935
|
|
|
964
|
-
if (index > headerCount && !
|
|
936
|
+
if (index > headerCount && !_this4.state.expand) {
|
|
965
937
|
return;
|
|
966
938
|
}
|
|
967
939
|
|
|
@@ -1023,18 +995,18 @@ var BasePage = /*#__PURE__*/function (_PureComponent) {
|
|
|
1023
995
|
}, "\u91CD\u7F6E"), showToolButton && toolButtonPosition == "right" && this.renderToolButtons(selfButtons), searchForms.length > 3 && /*#__PURE__*/React.createElement("div", {
|
|
1024
996
|
className: getLess(styles, "a_style"),
|
|
1025
997
|
onClick: function onClick() {
|
|
1026
|
-
var expand =
|
|
998
|
+
var expand = _this4.state.expand;
|
|
1027
999
|
|
|
1028
|
-
|
|
1000
|
+
_this4.setState({
|
|
1029
1001
|
expand: !expand
|
|
1030
1002
|
});
|
|
1031
1003
|
}
|
|
1032
|
-
}, this.state.expand ? "收起" : "展开", this.state.expand ? /*#__PURE__*/React.createElement(UpOutlined, null) : /*#__PURE__*/React.createElement(DownOutlined, null)))))))), showToolButton && toolButtonPosition == "buttom" && this.renderToolButtons(selfButtons), /*#__PURE__*/React.createElement("div", {
|
|
1004
|
+
}, this.state.expand ? "收起" : "展开", this.state.expand ? /*#__PURE__*/React.createElement(UpOutlined, null) : /*#__PURE__*/React.createElement(DownOutlined, null)))))))), showToolButton && toolButtonPosition == "buttom" && this.renderToolButtons(selfButtons, searchForms.length == 0), /*#__PURE__*/React.createElement("div", {
|
|
1033
1005
|
className: cls(getLess(styles, "table"))
|
|
1034
1006
|
}, /*#__PURE__*/React.createElement(Table, _extends({
|
|
1035
1007
|
ref: this.tableRef,
|
|
1036
1008
|
columns: tableColumn,
|
|
1037
|
-
expandable: {
|
|
1009
|
+
expandable: _objectSpread({
|
|
1038
1010
|
expandIcon: function expandIcon(_ref2) {
|
|
1039
1011
|
var expanded = _ref2.expanded,
|
|
1040
1012
|
onExpand = _ref2.onExpand,
|
|
@@ -1051,10 +1023,19 @@ var BasePage = /*#__PURE__*/function (_PureComponent) {
|
|
|
1051
1023
|
className: getLess(styles, "expand-icon")
|
|
1052
1024
|
}));
|
|
1053
1025
|
}
|
|
1054
|
-
},
|
|
1026
|
+
}, expandable),
|
|
1055
1027
|
columnOrder: true,
|
|
1056
|
-
bordered: true
|
|
1057
|
-
|
|
1028
|
+
bordered: true // size={this.state.tableSize}
|
|
1029
|
+
,
|
|
1030
|
+
onChange: function onChange(pagination) {
|
|
1031
|
+
var currentPage = _this4.state.currentPage;
|
|
1032
|
+
|
|
1033
|
+
if (currentPage !== pagination.current) {
|
|
1034
|
+
_this4.setState({
|
|
1035
|
+
currentPage: pagination.current
|
|
1036
|
+
});
|
|
1037
|
+
}
|
|
1038
|
+
}
|
|
1058
1039
|
}, tableParams)))), editorForm && /*#__PURE__*/React.createElement(EditorForm, {
|
|
1059
1040
|
ref: this.editorRef,
|
|
1060
1041
|
callBack: this.tableReload.bind(this),
|
|
@@ -1065,7 +1046,7 @@ var BasePage = /*#__PURE__*/function (_PureComponent) {
|
|
|
1065
1046
|
defaultValue: defaultValue,
|
|
1066
1047
|
onHideForm: this.props.onHideForm,
|
|
1067
1048
|
onFormChange: this.props.onFormChange,
|
|
1068
|
-
formType: this.props.formType ||
|
|
1049
|
+
formType: this.props.formType || "auto",
|
|
1069
1050
|
changeValid: formChangeValid,
|
|
1070
1051
|
otherProps: _objectSpread({}, formProps)
|
|
1071
1052
|
})));
|
|
@@ -1076,4 +1057,4 @@ var BasePage = /*#__PURE__*/function (_PureComponent) {
|
|
|
1076
1057
|
}(PureComponent);
|
|
1077
1058
|
|
|
1078
1059
|
export default BasePage;
|
|
1079
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3BhZ2UvQmFzZVBhZ2UvaW5kZXgudHN4Il0sIm5hbWVzIjpbIlJlYWN0IiwiUHVyZUNvbXBvbmVudCIsIlRhYmxlIiwiVHJlZSIsIkZvcm0iLCJCdXR0b24iLCJNb2RhbCIsIlBvcG92ZXIiLCJtZXNzYWdlIiwiSWNvbiIsImljb25UeXBlIiwiRWRpdG9yRm9ybSIsImNscyIsInN0eWxlcyIsIkNvbCIsIlJvdyIsIm1vbWVudCIsImlzRW1wdHlPYmoiLCJEb3duT3V0bGluZWQiLCJVcE91dGxpbmVkIiwiRXllT3V0bGluZWQiLCJFZGl0T3V0bGluZWQiLCJSaWdodE91dGxpbmVkIiwiUGx1c091dGxpbmVkIiwiUmVsb2FkT3V0bGluZWQiLCJTZWFyY2hPdXRsaW5lZCIsImdldExlc3MiLCJnZXROb2RlIiwicmVxdWVzdCIsIm9taXQiLCJjb25maWciLCJnZXRTdG9yYWdlIiwiQmFzZVBhZ2UiLCJwcm9wcyIsImNyZWF0ZVJlZiIsImV2IiwiZGF0YSIsIkpTT04iLCJwYXJzZSIsIl90aGlzIiwiZXZlbnRUeXBlIiwicGF5bG9hZCIsInR5cGUiLCJzZXRTdGF0ZSIsImZvcm1UeXBlIiwic2l6ZSIsInRhYmxlU2l6ZSIsImNoZWNrZWRUcmVlS2V5cyIsInN0YXRlIiwibmFtZSIsInVzZXJUeXBlIiwiYWNjb3VudCIsInZhbHVlIiwiZGVwdElkIiwidGFibGVMb2FkIiwic3RvcmVQcmVmaXgiLCJjb25zb2xlIiwibG9nIiwiY29udGVudCIsInNlbGVjdGVkUm93S2V5cyIsInNlbGVjdGVkUm93RGF0YXMiLCJ0cmVlU2VsZWN0ZWRLZXkiLCJleHBhbmQiLCJpbml0RGF0YSIsIndpbmRvdyIsImFkZEV2ZW50TGlzdGVuZXIiLCJsaXN0ZW5NZXNzYWdlIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImVkaXRvcmZsYWciLCJlZGl0b3JSZWYiLCJjdXJyZW50Iiwic2hvdyIsImhpZGVGb3JtIiwibG9hZGluZyIsInNldExvYWRpbmciLCJkZWxldGVVcmwiLCJvbkRlbGV0ZSIsImRlbGV0ZVBhcmFtcyIsImxlbmd0aCIsIndhcm5pbmciLCJFcnJvciIsImNvbmZpcm0iLCJ0aXRsZSIsIm9rVGV4dCIsImNhbmNlbFRleHQiLCJvbk9rIiwiZGVmYXVsdFBhcmFtcyIsIm1ldGhvZCIsInBhcmFtcyIsImlkcyIsImpvaW4iLCJyZXF1ZXN0UGFyYW1zIiwidGhlbiIsInJlcyIsImNvZGUiLCJzdWNjZXNzIiwiZXJyb3IiLCJjYXRjaCIsInRhYmxlUmVmIiwic3RvcmUiLCJsb2FkIiwib25TZWFyY2giLCJmcm9tVmFsdWUiLCJzZWFyY2hSZWYiLCJnZXRGaWVsZHNWYWx1ZSIsImRhdGVGb3JtYXQiLCJrZXkiLCJvbGRkYXRhIiwiQXJyYXkiLCJpc0FycmF5IiwiZm9ybWF0IiwicmVsb2FkIiwicmVjb3JkIiwic2VsZWN0ZWQiLCJ0YWJsZVByb3BzIiwicm93S2V5IiwibmV3U2VsZWN0ZWRSb3dLZXlzIiwibmV3U2VsZWN0ZWRSb3dEYXRhcyIsIm1hcCIsIml0ZW0iLCJpbmRleCIsInNwbGljZSIsInNlbGVjdGVkUm93cyIsImNoYW5nZVJvd3MiLCJuZXdpZHMiLCJuZXdkYXRhcyIsImNoYW5nZUlkcyIsImluZGV4T2YiLCJwdXNoIiwidG9vbGJ1dHRvbnMiLCJmbGFnIiwiY2hpbGRyZW4iLCJwYWdlVHlwZSIsIm9uQ2xpY2siLCJpY29uIiwibWFyZ2luTGVmdCIsImNvbHVtbkJ1dHRvbnMiLCJlZGl0b3JGb3JtIiwiYnV0dG9ucyIsIm5ld0J1dHRvbnMiLCJyZWNvcmRTaG93IiwiZXZhbCIsInNlbGVjdGVkS2V5cyIsInNlbGVjdGVkTm9kZXMiLCJrZXl3b3JkIiwidHJlZVByb3BzIiwic2VhcmNoS2V5Iiwic2VhcmNoRmllbGQiLCJpc0xlYWYiLCJkYXRhcmVmIiwiYXR0cmlidXRlIiwicmVzZXRGaWVsZHMiLCJ0ZXh0IiwibmV3VGV4dCIsImkiLCJsYWJlbCIsInNldERhdGEiLCJ0cmVlUmVmIiwiY29sdW1ucyIsInNob3dTZWFyY2giLCJzdWJtaXRVcmwiLCJmb3JtUHJvcHMiLCJzaG93TGVmdCIsInN1Ym1pdFBhcmFtcyIsInNob3dUb29sQnV0dG9uIiwib25TaG93Rm9ybSIsImZvcm1DaGFuZ2VWYWxpZCIsImNsYXNzTmFtZSIsImFjdGlvbkNvbHVtbnMiLCJ0b29sQnV0dG9uUG9zaXRpb24iLCJmaWx0ZXJDb2x1bW4iLCJhY3Rpb25Db2x1bW4iLCJzaG93Um93U2VsZWN0aW9uIiwiY29sdW1uT3JkZXIiLCJvdGhlcnRhYmxlUGFyYW1zIiwidHJlZVN0b3JlIiwidHJlZVNlYXJjaCIsInRpdGxlQWxpYXMiLCJvdGhlcnRyZWVQYXJhbXMiLCJ0YWJsZVBhcmFtcyIsInJvd1NlbGVjdGlvbiIsIm9uU2VsZWN0Iiwicm93U2VsZWN0aW9uT25TZWxlY3QiLCJiaW5kIiwib25TZWxlY3RBbGwiLCJyb3dTZWxlY3Rpb25PblNlbGVjdEFsbCIsImNvbHVtbldpZHRoIiwidGFibGVDb2x1bW4iLCJzZWFyY2hGb3JtcyIsImVkaXRvckZvcm1zIiwiZGVmYXVsdFZhbHVlIiwidGVtcCIsInNlYXJjaCIsImZpZWxkIiwiZGF0YUluZGV4IiwiZWRpdG9yIiwicnVsZXMiLCJzcGFuIiwiZGljdE5hbWUiLCJ1bmRlZmluZWQiLCJjb2x1bW5TZWFyY2giLCJmaWx0ZXJQcm9wcyIsInRlbXBQcm9wIiwic3R5bGUiLCJyZW5kZXIiLCJnZXRUZXh0IiwiZWxsaXBzaXMiLCJjb2x1bW5TaG93Iiwic2VsZkJ1dHRvbnMiLCJzaG93Rm9ybSIsImRlbGV0ZTMiLCJhbGlnbiIsIndpZHRoIiwiZml4ZWQiLCJyZW5kZXJDbG91bW5CdXR0b24iLCJoZWFkZXJDb3VudCIsInJlYWNvcmQiLCJwYWdpbmF0aW9uIiwic2Nyb2xsIiwieCIsInkiLCJwYWdlVGl0bGUiLCJkaXNwbGF5IiwidHJlZVNlbGVjdCIsIml0ZW1Qcm9wcyIsInZhbHVlRm9ybWF0IiwiYWxsb3dDaGFycyIsInBhZGRpbmdSaWdodCIsInBsYWNlaG9sZGVyIiwibWFyZ2luVG9wIiwicmVzZXRTZWFyY2giLCJyZW5kZXJUb29sQnV0dG9ucyIsImV4cGFuZEljb24iLCJleHBhbmRlZCIsIm9uRXhwYW5kIiwiZSIsImNoaWxkTm9kZXMiLCJ0YWJsZVJlbG9hZCIsIm9uU3VibWl0Iiwib25IaWRlRm9ybSIsIm9uRm9ybUNoYW5nZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPQSxLQUFQLElBQWdCQyxhQUFoQixRQUFnRCxPQUFoRDtBQUNBLE9BQU9DLEtBQVAsTUFBa0Isa0JBQWxCO0FBQ0EsT0FBT0MsSUFBUCxNQUFpQixpQkFBakI7QUFDQSxPQUFPQyxJQUFQLE1BQWlCLGlCQUFqQjtBQUNBLE9BQU9DLE1BQVAsTUFBbUIsbUJBQW5CO0FBQ0EsT0FBT0MsS0FBUCxNQUFrQixrQkFBbEI7QUFDQSxPQUFPQyxPQUFQLE1BQW9CLG9CQUFwQjtBQUNBLE9BQU9DLE9BQVAsTUFBb0Isb0JBQXBCO0FBQ0EsT0FBT0MsSUFBUCxNQUFpQiw0QkFBakI7QUFDQSxTQUFTQyxRQUFULFFBQXlCLGlCQUF6QjtBQUNBLE9BQU9DLFVBQVAsTUFBdUIsUUFBdkI7QUFDQSxPQUFPQyxHQUFQLE1BQWdCLFlBQWhCO0FBQ0EsT0FBT0MsTUFBUCxNQUFtQixxQkFBbkI7QUFFQSxPQUFPQyxHQUFQLE1BQWdCLHFCQUFoQjtBQUNBLE9BQU9DLEdBQVAsTUFBZ0IscUJBQWhCO0FBQ0EsT0FBT0MsTUFBUCxNQUFtQixRQUFuQjtBQUNBLFNBQVNDLFVBQVQsUUFBMkIsbUJBQTNCO0FBQ0EsU0FDRUMsWUFERixFQUVFQyxVQUZGLEVBR0VDLFdBSEYsRUFJRUMsWUFKRixFQUtFQyxhQUxGLEVBTUVDLFlBTkYsRUFPRUMsY0FQRixFQVFFQyxjQVJGLFFBU08sbUJBVFA7QUFVQSxTQUFTQyxPQUFULEVBQWtCQyxPQUFsQixRQUFpQyxhQUFqQztBQUNBLE9BQU9DLE9BQVAsTUFBb0IsYUFBcEI7QUFDQSxPQUFPQyxJQUFQLE1BQWlCLFNBQWpCO0FB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LFFBQUEsUUFBUSxFQUFFLEtBQUsvTSxLQUFMLENBQVdXLFFBQVgsSUFBdUIsS0FBS0ksS0FBTCxDQUFXSixRQVY5QztBQVdFLFFBQUEsV0FBVyxFQUFFMEgsZUFYZjtBQVlFLFFBQUEsVUFBVSxvQkFBTUwsU0FBTjtBQVpaLFFBL0pKLENBTkYsQ0FERjtBQXdMRDs7OztFQS8xQm9CaEssYTs7QUFpMkJ2QixlQUFlK0IsUUFBZiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyBQdXJlQ29tcG9uZW50LCBSZWFjdE5vZGUgfSBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IFRhYmxlIGZyb20gXCIuLi8uLi9iYXNlL3RhYmxlXCI7XHJcbmltcG9ydCBUcmVlIGZyb20gXCIuLi8uLi9iYXNlL3RyZWVcIjtcclxuaW1wb3J0IEZvcm0gZnJvbSBcIi4uLy4uL2Jhc2UvZm9ybVwiO1xyXG5pbXBvcnQgQnV0dG9uIGZyb20gXCIuLi8uLi9iYXNlL2J1dHRvblwiO1xyXG5pbXBvcnQgTW9kYWwgZnJvbSBcIi4uLy4uL2Jhc2UvbW9kYWxcIjtcclxuaW1wb3J0IFBvcG92ZXIgZnJvbSBcIi4uLy4uL2Jhc2UvcG9wb3ZlclwiO1xyXG5pbXBvcnQgbWVzc2FnZSBmcm9tIFwiLi4vLi4vYmFzZS9tZXNzYWdlXCI7XHJcbmltcG9ydCBJY29uIGZyb20gXCIuLi8uLi9iYXNlL2NvbW1vbi9JY29uRm9udFwiO1xyXG5pbXBvcnQgeyBpY29uVHlwZSB9IGZyb20gXCIuLi8uLi9jb25zdGFudHNcIjtcclxuaW1wb3J0IEVkaXRvckZvcm0gZnJvbSBcIi4vRm9ybVwiO1xyXG5pbXBvcnQgY2xzIGZyb20gXCJjbGFzc25hbWVzXCI7XHJcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vaW5kZXgubW9kdWxlLmxlc3NcIjtcclxuaW1wb3J0IFN0b3JlLCB7IFBhZ2VTdG9yZSwgU3RvcmVQcm9wcyB9IGZyb20gXCJAYmotbnNjL21zblwiO1xyXG5pbXBvcnQgQ29sIGZyb20gXCIuLi8uLi9iYXNlL2dyaWQvQ29sXCI7XHJcbmltcG9ydCBSb3cgZnJvbSBcIi4uLy4uL2Jhc2UvZ3JpZC9Sb3dcIjtcclxuaW1wb3J0IG1vbWVudCBmcm9tIFwibW9tZW50XCI7XHJcbmltcG9ydCB7IGlzRW1wdHlPYmogfSBmcm9tIFwiQGJqLW5zYy9mdW5jdGlvbnNcIjtcclxuaW1wb3J0IHtcclxuICBEb3duT3V0bGluZWQsXHJcbiAgVXBPdXRsaW5lZCxcclxuICBFeWVPdXRsaW5lZCxcclxuICBFZGl0T3V0bGluZWQsXHJcbiAgUmlnaHRPdXRsaW5lZCxcclxuICBQbHVzT3V0bGluZWQsXHJcbiAgUmVsb2FkT3V0bGluZWQsXHJcbiAgU2VhcmNoT3V0bGluZWQsXHJcbn0gZnJvbSBcIkBhbnQtZGVzaWduL2ljb25zXCI7XHJcbmltcG9ydCB7IGdldExlc3MsIGdldE5vZGUgfSBmcm9tIFwiLi4vLi4vdXRpbHNcIjtcclxuaW1wb3J0IHJlcXVlc3QgZnJvbSBcIm5zYy1yZXF1ZXN0XCI7XHJcbmltcG9ydCBvbWl0IGZyb20gXCJvbWl0LmpzXCI7XHJcbmltcG9ydCBjb25maWcgZnJvbSBcIi4uLy4uL2NvbmZpZ1wiO1xyXG5pbXBvcnQgeyBnZXRTdG9yYWdlIH0gZnJvbSBcIkBiai1uc2MvZnVuY3Rpb25zXCI7XHJcbmltcG9ydCB7IElGb3JtUHJvcHMgfSBmcm9tIFwiLi4vLi4vYmFzZS9mb3JtL0Zvcm1cIjtcclxuaW50ZXJmYWNlIFRhYmxlUHJvcHMge1xyXG4gIGFjdGlvbkNvbHVtbj86IGJvb2xlYW47IC8v5piv5ZCm5pi+56S65pON5L2c5YiXXHJcbiAgc3RvcmU/OiBTdG9yZVByb3BzO1xyXG4gIGZpbHRlckNvbHVtbj86IGJvb2xlYW47IC8v5piv5ZCm5pi+56S66L+H5ruk5oyJ6ZKuXHJcbiAgc2hvd1Jvd1NlbGVjdGlvbj86IGJvb2xlYW47IC8v5piv5ZCm6KGo5qC85Yu+6YCJ5YiXXHJcbiAgcGFnaW5hdGlvbj86IGJvb2xlYW47IC8v5piv5ZCm5pi+56S65YiG6aG1XHJcbiAgY29sdW1uT3JkZXI/OiBib29sZWFuOyAvL+aYr+WQpuaYvuekuuihqOagvOW6j+WIl1xyXG4gIFtwcm9wc05hbWU6IHN0cmluZ106IGFueTtcclxufVxyXG5pbnRlcmZhY2UgVHJlZVByb3BzIHtcclxuICBzdG9yZT86IFN0b3JlUHJvcHM7XHJcbiAgc2hvd1NlYXJjaD86IGJvb2xlYW47IC8v5piv5ZCm5pi+56S65pCc57Si5qGGXHJcbiAgc2VhcmNoS2V5Pzogc3RyaW5nOyAvL+aQnOe0onZhbHVl5a+55bqU55qEa2V5XHJcbiAgc2VhcmNoRmllbGQ/OiBzdHJpbmc7IC8v5p+l6K+i5a+55bqU55qEa2V5XHJcbiAgdGl0bGVBbGlhcz86IHN0cmluZzsgLy/moJF0aXRsZeWvueW6lOeahGtleSzpu5jorqR0aXRsZVxyXG4gIG5vZGVQb3Jwcz86IG9iamVjdDtcclxuICBbcHJvcHNOYW1lOiBzdHJpbmddOiBhbnk7XHJcbn1cclxuaW50ZXJmYWNlIEZvcm1Qcm9wcyBleHRlbmRzIElGb3JtUHJvcHMge31cclxuaW50ZXJmYWNlIE5TQ0Jhc2VCYWdlUHJvcHMge1xyXG4gIHNob3dTZWFyY2g/OiBib29sZWFuOyAvL+aYr+WQpuaYvuekuuWktOmDqOaQnOe0ouagj1xyXG4gIHRhYmxlUHJvcHM/OiBUYWJsZVByb3BzOyAvL+ihqOagvOWPguaVsFxyXG4gIHRyZWVQcm9wcz86IFRyZWVQcm9wczsgLy/lt6bkvqfmoJHlj4LmlbBcclxuICBzdWJtaXRQYXJhbXM/OiBPYmplY3Q7IC8v5re75Yqg5Y+C5pWw77yM6buY6K6kbW90aG9kOnBvc3TvvIwg5Y+C5pWw6YCa6L+HZGF0YeS8oOmAklxyXG4gIHN1Ym1pdFVybD86IHN0cmluZztcclxuICBvblN1Ym1pdD86ICh2YWx1ZT86IGFueSwgbGFiZWw/OiBhbnkpID0+IHZvaWQ7XHJcbiAgY29sdW1uczogQXJyYXk8T2JqZWN0PjtcclxuICBzaG93TGVmdD86IGJvb2xlYW47IC8v5piv5ZCm5pi+56S65bem5L6n55uu5b2V5qCRXHJcbiAgc2hvd1Rvb2xCdXR0b24/OiBib29sZWFuOyAvL+aYr+WQpuaYvuekuuaMiemSruagj1xyXG4gIGVkaXRvckZvcm0/OiBib29sZWFuOyAvL+aYr+WQpumcgOimgeihqOWNleWKn+iDvSAsIOS4umZhbHNlIOe8lui+ke+8jOafpeeci++8jOaWsOWinuWKn+iDveWdh+S4jeWPr+eUqFxyXG4gIGRlbGV0ZVVybD86IHN0cmluZzsgLy/liKDpmaR1cmxcclxuICBvbkRlbGV0ZT86IChzZWxlY3RlZEtleXM/OiBBcnJheTxhbnk+KSA9PiB2b2lkOyAvL+WIoOmZpOWPguaVsO+8jOm7mOiupG1vdGhvZDpwb3N077yMIOWPguaVsOmAmui/h2lkc+aLvOaOpeS8oOmAkue7meWQjuWPsFxyXG4gIGRlbGV0ZVBhcmFtcz86IE9iamVjdDtcclxuICBjaGlsZHJlbj86IFJlYWN0LlJlYWN0Tm9kZTtcclxuICBvblNlYXJjaD86ICh2YWx1ZT86IGFueSkgPT4gdm9pZDtcclxuICBpbml0RGF0YT86IGFueTsgLy/liJ3lp4vljJblm57osIPlh73mlbDvvIzlnKhjb21wb25lbnREaWRNb3VudOS4reiwg+eUqFxyXG4gIGJ1dHRvbnM/OiBBcnJheTxzdHJpbmc+OyAvL+aMiemSrumbhuWQiCAgWydhZGQnLCdkZWxldGUnLCdzZWFyY2gnLCdlZGl0b3InXVxyXG4gIG9uU2hvd0Zvcm0/OiAodmFsdWU/OiBhbnksIGVkaXRvckZsYWc/OiBzdHJpbmcpID0+IHZvaWQ7IC8v5omT5byA6KGo5Y2V5Zue6LCDXHJcbiAgb25IaWRlRm9ybT86ICgpID0+IHZvaWQ7IC8v5omT5byA6KGo5Y2V5Zue6LCDXHJcbiAgb25Gb3JtQ2hhbmdlPzogKGNoYW5nZWRWYWx1ZXM/OiBhbnksIGFsbFZhbHVlcz86IGFueSkgPT4gdm9pZDsgLy/ooajljZVvbkNoYW5nZeWbnuiwg1xyXG4gIGZvcm1UeXBlPzogXCJtb2RhbFwiIHwgXCJkcmF3ZXJcIjtcclxuICBmb3JtQ2hhbmdlVmFsaWQ/OiBib29sZWFuOyAvL+ihqOWNleagoemqjFxyXG4gIGNsYXNzTmFtZT86IGFueTtcclxuICBhY3Rpb25Db2x1bW5zPzogQXJyYXk8YW55PjtcclxuICB0b29sQnV0dG9uUG9zaXRpb24/OiBcInJpZ2h0XCIgfCBcImJ1dHRvbVwiO1xyXG4gIHBhZ2VUaXRsZT86IHN0cmluZyB8IFJlYWN0Tm9kZTtcclxuICBmb3JtUHJvcHM/OiBGb3JtUHJvcHM7XHJcbn1cclxuXHJcbmNsYXNzIEJhc2VQYWdlIGV4dGVuZHMgUHVyZUNvbXBvbmVudDxOU0NCYXNlQmFnZVByb3BzLCBhbnk+IHtcclxuICB0YWJsZVJlZiA9IFJlYWN0LmNyZWF0ZVJlZjxhbnk+KCk7XHJcbiAgdHJlZVJlZiA9IFJlYWN0LmNyZWF0ZVJlZjxhbnk+KCk7XHJcbiAgc2VhcmNoUmVmID0gUmVhY3QuY3JlYXRlUmVmPGFueT4oKTtcclxuICBlZGl0b3JSZWYgPSBSZWFjdC5jcmVhdGVSZWY8YW55PigpO1xyXG4gIGRhdGVGb3JtYXQgPSB7fSBhcyBhbnk7XHJcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xyXG4gICAgc3VwZXIocHJvcHMpO1xyXG4gICAgbGV0IHsgc3RvcmVQcmVmaXggfSA9IGNvbmZpZygpO1xyXG4gICAgY29uc29sZS5sb2coXCJzdG9yZVByZWZpeFwiLCBzdG9yZVByZWZpeCk7XHJcbiAgICBsZXQgdHlwZSA9IGdldFN0b3JhZ2UoXHJcbiAgICAgIHN0b3JlUHJlZml4ID8gc3RvcmVQcmVmaXggKyBcIi1cIiArIFwiZm9ybVR5cGVcIiA6IFwiZm9ybVR5cGVcIlxyXG4gICAgKTtcclxuICAgIHR5cGUgPSB0eXBlPy5jb250ZW50O1xyXG4gICAgbGV0IHNpemUgPSBnZXRTdG9yYWdlKFxyXG4gICAgICBzdG9yZVByZWZpeCA/IHN0b3JlUHJlZml4ICsgXCItXCIgKyBcInRhYmxlU2l6ZVwiIDogXCJ0YWJsZVNpemVcIlxyXG4gICAgKTtcclxuICAgIHNpemUgPSBzaXplPy5jb250ZW50O1xyXG4gICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgdHlwZTogXCJhZGRcIixcclxuICAgICAgc2VsZWN0ZWRSb3dLZXlzOiBbXSxcclxuICAgICAgc2VsZWN0ZWRSb3dEYXRhczogW10sXHJcbiAgICAgIHRyZWVTZWxlY3RlZEtleTogXCJcIixcclxuICAgICAgZXhwYW5kOiBmYWxzZSxcclxuICAgICAgZm9ybVR5cGU6IHR5cGUgfHwgXCJtb2RhbFwiLFxyXG4gICAgICB0YWJsZVNpemU6IHNpemUgfHwgXCJkZWZhdWx0XCIsXHJcbiAgICB9O1xyXG4gIH1cclxuICBjb21wb25lbnREaWRNb3VudCgpIHtcclxuICAgIGNvbnN0IHsgaW5pdERhdGEgfSA9IHRoaXMucHJvcHM7XHJcbiAgICBpbml0RGF0YSAmJiBpbml0RGF0YSgpO1xyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIHRoaXMubGlzdGVuTWVzc2FnZSk7XHJcbiAgfVxyXG5cclxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcclxuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCB0aGlzLmxpc3Rlbk1lc3NhZ2UpO1xyXG4gIH1cclxuICBsaXN0ZW5NZXNzYWdlID0gKGV2KSA9PiB7XHJcbiAgICBjb25zdCBkYXRhID0gdHlwZW9mIGV2LmRhdGEgPT09IFwic3RyaW5nXCIgPyBKU09OLnBhcnNlKGV2LmRhdGEpIDogZXYuZGF0YTtcclxuICAgIGxldCBfdGhpcyA9IHRoaXM7XHJcbiAgICBpZiAoZGF0YS5ldmVudFR5cGUgPT0gXCJjaGFuZ2VGb3JtVHlwZVwiKSB7XHJcbiAgICAgIGNvbnN0IHsgcGF5bG9hZCB9ID0gZGF0YTtcclxuICAgICAgaWYgKHBheWxvYWQudHlwZSA9PSBcIm1vZGFsXCIgfHwgcGF5bG9hZC50eXBlID09IFwiZHJhd2VyXCIpIHtcclxuICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7IGZvcm1UeXBlOiBwYXlsb2FkLnR5cGUgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChkYXRhLmV2ZW50VHlwZSA9PSBcImNoYW5nZVRhYmxlU2l6ZVwiKSB7XHJcbiAgICAgIGNvbnN0IHsgcGF5bG9hZCB9ID0gZGF0YTtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHBheWxvYWQuc2l6ZSA9PSBcImRlZmF1bHRcIiB8fFxyXG4gICAgICAgIHBheWxvYWQuc2l6ZSA9PSBcInNtYWxsXCIgfHxcclxuICAgICAgICBwYXlsb2FkLnNpemUgPT0gXCJtaWRkbGVcIlxyXG4gICAgICApIHtcclxuICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7IHRhYmxlU2l6ZTogcGF5bG9hZC5zaXplIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfTtcclxuICBvblNlbGVjdCA9IChjaGVja2VkVHJlZUtleXM6IGFueSkgPT4ge1xyXG4gICAgY29uc3QgeyBuYW1lLCB1c2VyVHlwZSwgYWNjb3VudCB9ID0gdGhpcy5zdGF0ZTtcclxuICAgIGNvbnN0IHZhbHVlID0geyBuYW1lLCB1c2VyVHlwZSwgYWNjb3VudCwgZGVwdElkOiBjaGVja2VkVHJlZUtleXNbMF0gfTtcclxuICAgIHRoaXMudGFibGVMb2FkKHZhbHVlKTtcclxuICB9O1xyXG5cclxuICAvL+aYvuekuuihqOWNlVxyXG4gIHNob3dGb3JtKHZhbHVlPzogYW55LCBlZGl0b3JmbGFnID0gXCJhZGRcIikge1xyXG4gICAgdGhpcy5lZGl0b3JSZWYuY3VycmVudD8uc2hvdyh2YWx1ZSwgZWRpdG9yZmxhZyk7XHJcbiAgfVxyXG5cclxuICAvL+WFs+mXreihqOWNlVxyXG4gIGhpZGVGb3JtKCkge1xyXG4gICAgdGhpcy5lZGl0b3JSZWYuY3VycmVudD8uaGlkZUZvcm0oKTtcclxuICB9XHJcblxyXG4gIHNldExvYWRpbmcobG9hZGluZzogYm9vbGVhbikge1xyXG4gICAgdGhpcy5lZGl0b3JSZWYuY3VycmVudD8uc2V0TG9hZGluZyhsb2FkaW5nKTtcclxuICB9XHJcblxyXG4gIC8v5om56YeP5Yig6ZmkXHJcbiAgb25EZWxldGUoKSB7XHJcbiAgICBjb25zdCB7IGRlbGV0ZVVybCwgb25EZWxldGUsIGRlbGV0ZVBhcmFtcyB9ID0gdGhpcy5wcm9wcztcclxuICAgIGNvbnN0IHsgc2VsZWN0ZWRSb3dLZXlzIH0gPSB0aGlzLnN0YXRlO1xyXG4gICAgaWYgKHNlbGVjdGVkUm93S2V5cy5sZW5ndGggPT0gMCkge1xyXG4gICAgICBtZXNzYWdlLndhcm5pbmcoXCLor7fpgInmi6nopoHliKDpmaTnmoTmlbDmja7vvIFcIik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmIChvbkRlbGV0ZSkge1xyXG4gICAgICBvbkRlbGV0ZSAmJiBvbkRlbGV0ZShzZWxlY3RlZFJvd0tleXMpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoIWRlbGV0ZVVybCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1cmzkuI3og73kuLrnqbrvvIFcIik7XHJcbiAgICB9XHJcbiAgICBNb2RhbC5jb25maXJtKHtcclxuICAgICAgdGl0bGU6IFwi5piv5ZCm56Gu6K6k5Yig6Zmk5omA6YCJ6aG577yfXCIsXHJcbiAgICAgIG9rVGV4dDogXCLnoa7orqRcIixcclxuICAgICAgY2FuY2VsVGV4dDogXCLlj5bmtohcIixcclxuICAgICAgb25PazogKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGRlZmF1bHRQYXJhbXMgPSB7XHJcbiAgICAgICAgICBtZXRob2Q6IFwicG9zdFwiLFxyXG4gICAgICAgICAgcGFyYW1zOiB7IGlkczogc2VsZWN0ZWRSb3dLZXlzLmpvaW4oKSB9LFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgbGV0IHJlcXVlc3RQYXJhbXMgPSB7fSBhcyBhbnk7XHJcbiAgICAgICAgaWYgKGRlZmF1bHRQYXJhbXMpIHtcclxuICAgICAgICAgIHJlcXVlc3RQYXJhbXMgPSB7IC4uLmRlbGV0ZVBhcmFtcyB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXF1ZXN0UGFyYW1zID0geyAuLi5kZWZhdWx0UGFyYW1zIH07XHJcbiAgICAgICAgcmVxdWVzdChkZWxldGVVcmwsIHtcclxuICAgICAgICAgIC4uLnJlcXVlc3RQYXJhbXMsXHJcbiAgICAgICAgfSlcclxuICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChyZXM6IGFueSkge1xyXG4gICAgICAgICAgICBjb25zdCB7IGNvZGUgfSA9IHJlcztcclxuICAgICAgICAgICAgaWYgKGNvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgICAgIG1lc3NhZ2Uuc3VjY2VzcyhcIuWIoOmZpOaIkOWKn++8gVwiKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBtZXNzYWdlLmVycm9yKFwi5Yig6Zmk5aSx6LSl77yBXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uIChlcnJvcjogYW55KSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiZXJyb3JcIiwgZXJyb3IpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICB9XHJcbiAgdGFibGVMb2FkKHBhcmFtczogYW55KSB7XHJcbiAgICB0aGlzLnRhYmxlUmVmLmN1cnJlbnQ/LnN0b3JlLmxvYWQoe1xyXG4gICAgICBwYXJhbXM6IHBhcmFtcyxcclxuICAgIH0pO1xyXG4gIH1cclxuICAvL+afpeivolxyXG4gIG9uU2VhcmNoKCkge1xyXG4gICAgY29uc3QgeyBvblNlYXJjaCB9ID0gdGhpcy5wcm9wcztcclxuICAgIGNvbnN0IGZyb21WYWx1ZSA9IHRoaXMuc2VhcmNoUmVmLmN1cnJlbnQ/LmdldEZpZWxkc1ZhbHVlKCk7XHJcbiAgICBpZiAob25TZWFyY2gpIHtcclxuICAgICAgb25TZWFyY2goZnJvbVZhbHVlKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKCFpc0VtcHR5T2JqKHRoaXMuZGF0ZUZvcm1hdCkpIHtcclxuICAgICAgZm9yIChsZXQga2V5IGluIHRoaXMuZGF0ZUZvcm1hdCkge1xyXG4gICAgICAgIGxldCBvbGRkYXRhID0gZnJvbVZhbHVlW2tleV07XHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob2xkZGF0YSkpIHtcclxuICAgICAgICAgIGZyb21WYWx1ZVtrZXldID0gW1xyXG4gICAgICAgICAgICBtb21lbnQob2xkZGF0YVswXSkuZm9ybWF0KHRoaXMuZGF0ZUZvcm1hdFtrZXldKSxcclxuICAgICAgICAgICAgbW9tZW50KG9sZGRhdGFbMV0pLmZvcm1hdCh0aGlzLmRhdGVGb3JtYXRba2V5XSksXHJcbiAgICAgICAgICBdO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBmcm9tVmFsdWVba2V5XSA9IG1vbWVudChvbGRkYXRhKS5mb3JtYXQodGhpcy5kYXRlRm9ybWF0W2tleV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy50YWJsZUxvYWQoZnJvbVZhbHVlKTtcclxuICB9XHJcbiAgLy/ooajmoLzph43mlrDliqDovb1cclxuICB0YWJsZVJlbG9hZCgpIHtcclxuICAgIHRoaXMudGFibGVSZWYuY3VycmVudD8uc3RvcmUucmVsb2FkKCk7XHJcbiAgfVxyXG4gIGdldFNlbGVjdGVkUm93S2V5cygpIHtcclxuICAgIHJldHVybiB0aGlzLnN0YXRlLnNlbGVjdGVkUm93S2V5cztcclxuICB9XHJcbiAgZ2V0U2VsZWN0ZWRSb3dEYXRhcygpIHtcclxuICAgIHJldHVybiB0aGlzLnN0YXRlLnNlbGVjdGVkUm93RGF0YXM7XHJcbiAgfVxyXG4gIHNldFNlbGVjdGVkUm93S2V5cyhkYXRhKSB7XHJcbiAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgc2VsZWN0ZWRSb3dLZXlzOiBkYXRhLFxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIHNldFNlbGVjdGVkUm93RGF0YXMoZGF0YSkge1xyXG4gICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgIHNlbGVjdGVkUm93RGF0YXM6IGRhdGEsXHJcbiAgICB9KTtcclxuICB9XHJcbiAgZ2V0U2VhcmNoVmFsdWVzKCkge1xyXG4gICAgY29uc3QgZnJvbVZhbHVlID0gdGhpcy5zZWFyY2hSZWYuY3VycmVudD8uZ2V0RmllbGRzVmFsdWUoKTtcclxuICAgIHJldHVybiBmcm9tVmFsdWU7XHJcbiAgfVxyXG4gIHJvd1NlbGVjdGlvbk9uU2VsZWN0KHJlY29yZDogYW55LCBzZWxlY3RlZDogYW55KSB7XHJcbiAgICBjb25zdCB7IHNlbGVjdGVkUm93S2V5cywgc2VsZWN0ZWRSb3dEYXRhcyB9ID0gdGhpcy5zdGF0ZTtcclxuICAgIGNvbnN0IHsgdGFibGVQcm9wcyB9ID0gdGhpcy5wcm9wcztcclxuICAgIGNvbnN0IHsgcm93S2V5ID0gXCJpZFwiIH0gPSB0YWJsZVByb3BzO1xyXG4gICAgbGV0IG5ld1NlbGVjdGVkUm93S2V5cyA9IFsuLi5zZWxlY3RlZFJvd0tleXNdO1xyXG4gICAgbGV0IG5ld1NlbGVjdGVkUm93RGF0YXMgPSBbLi4uc2VsZWN0ZWRSb3dEYXRhc107XHJcbiAgICBpZiAoc2VsZWN0ZWQpIHtcclxuICAgICAgbmV3U2VsZWN0ZWRSb3dLZXlzID0gWy4uLm5ld1NlbGVjdGVkUm93S2V5cywgcmVjb3JkW3Jvd0tleV1dO1xyXG4gICAgICBuZXdTZWxlY3RlZFJvd0RhdGFzID0gWy4uLm5ld1NlbGVjdGVkUm93RGF0YXMsIHJlY29yZF07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBzZWxlY3RlZFJvd0tleXMubWFwKChpdGVtOiBhbnksIGluZGV4OiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoaXRlbSA9PT0gcmVjb3JkW3Jvd0tleV0pIHtcclxuICAgICAgICAgIG5ld1NlbGVjdGVkUm93S2V5cy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIHNlbGVjdGVkUm93RGF0YXMubWFwKChpdGVtOiBhbnksIGluZGV4OiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoaXRlbVtyb3dLZXldID09PSByZWNvcmRbcm93S2V5XSkge1xyXG4gICAgICAgICAgbmV3U2VsZWN0ZWRSb3dEYXRhcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgc2VsZWN0ZWRSb3dLZXlzOiBuZXdTZWxlY3RlZFJvd0tleXMsXHJcbiAgICAgIHNlbGVjdGVkUm93RGF0YXM6IG5ld1NlbGVjdGVkUm93RGF0YXMsXHJcbiAgICB9KTtcclxuICB9XHJcbiAgcm93U2VsZWN0aW9uT25TZWxlY3RBbGwoc2VsZWN0ZWQ6IGFueSwgc2VsZWN0ZWRSb3dzOiBhbnksIGNoYW5nZVJvd3M6IGFueSkge1xyXG4gICAgY29uc3QgeyBzZWxlY3RlZFJvd0tleXMsIHNlbGVjdGVkUm93RGF0YXMgfSA9IHRoaXMuc3RhdGU7XHJcbiAgICBjb25zdCB7IHRhYmxlUHJvcHMgfSA9IHRoaXMucHJvcHM7XHJcbiAgICBjb25zdCB7IHJvd0tleSA9IFwiaWRcIiB9ID0gdGFibGVQcm9wcztcclxuICAgIGxldCBuZXdpZHM6IGFueSA9IFtdO1xyXG4gICAgbGV0IG5ld2RhdGFzOiBhbnkgPSBbXTtcclxuICAgIGlmIChjaGFuZ2VSb3dzLmxlbmd0aCA+IDApIHtcclxuICAgICAgbGV0IGNoYW5nZUlkcyA9IGNoYW5nZVJvd3MubWFwKChpdGVtOiBhbnkpID0+IGl0ZW1bcm93S2V5XSk7XHJcbiAgICAgIGlmIChzZWxlY3RlZCkge1xyXG4gICAgICAgIG5ld2lkcyA9IFsuLi5zZWxlY3RlZFJvd0tleXMsIC4uLmNoYW5nZUlkc107XHJcbiAgICAgICAgbmV3ZGF0YXMgPSBbLi4uc2VsZWN0ZWRSb3dEYXRhcywgLi4uY2hhbmdlUm93c107XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgc2VsZWN0ZWRSb3dLZXlzLm1hcCgoaXRlbTogYW55LCBpbmRleDogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAoY2hhbmdlSWRzLmluZGV4T2YoaXRlbSkgPT0gLTEpIHtcclxuICAgICAgICAgICAgbmV3aWRzLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgc2VsZWN0ZWRSb3dEYXRhcy5tYXAoKGl0ZW06IGFueSwgaW5kZXg6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKGNoYW5nZUlkcy5pbmRleE9mKGl0ZW1bcm93S2V5XSkgPT0gLTEpIHtcclxuICAgICAgICAgICAgbmV3ZGF0YXMucHVzaChpdGVtKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbmV3aWRzID0gWy4uLnNlbGVjdGVkUm93S2V5c107XHJcbiAgICAgIG5ld2RhdGFzID0gWy4uLnNlbGVjdGVkUm93RGF0YXNdO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgIHNlbGVjdGVkUm93S2V5czogWy4uLm5ld2lkc10sXHJcbiAgICAgIHNlbGVjdGVkUm93RGF0YXM6IFsuLi5uZXdkYXRhc10sXHJcbiAgICB9KTtcclxuICB9XHJcbiAgcmVuZGVyVG9vbEJ1dHRvbnModG9vbGJ1dHRvbnM6IGFueSkge1xyXG4gICAgY29uc3QgZmxhZyA9IHRvb2xidXR0b25zLmxlbmd0aCA+IDU7XHJcbiAgICBjb25zdCBjb250ZW50ID0gdG9vbGJ1dHRvbnMubWFwKChpdGVtOiBhbnksIGluZGV4OiBhbnkpID0+IHtcclxuICAgICAgY29uc3QgeyBjaGlsZHJlbiwgcGFnZVR5cGUsIG9uQ2xpY2ssIGljb24sIHNob3csIC4uLnBhcmFtcyB9ID0gaXRlbS5wcm9wcztcclxuICAgICAgaWYgKGluZGV4ID4gNCkge1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xzKFxyXG4gICAgICAgICAgICAgIGdldExlc3Moc3R5bGVzLCBcImVkaXRvclwiKSxcclxuICAgICAgICAgICAgICBnZXRMZXNzKHN0eWxlcywgXCJjb250ZW50LWl0ZW1cIilcclxuICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAga2V5PXtpbmRleH1cclxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgIG9uQ2xpY2sgJiYgb25DbGljaygpO1xyXG4gICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICB7Li4ucGFyYW1zfVxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcImljb25cIil9PntpY29ufTwvc3Bhbj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJ0ZXh0XCIpfT57Y2hpbGRyZW59PC9zcGFuPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJ0b29sLWJ1dHRvbnNcIil9XHJcbiAgICAgICAgc3R5bGU9e3sgbWFyZ2luTGVmdDogMCB9fVxyXG4gICAgICA+XHJcbiAgICAgICAge3Rvb2xidXR0b25zLm1hcCgoaXRlbTogYW55LCBpbmRleDogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAoZmxhZykge1xyXG4gICAgICAgICAgICBpZiAoaW5kZXggPCA0KSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIDxkaXYga2V5PXtpbmRleH0+e2l0ZW19PC9kaXY+O1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGluZGV4ID09IDQpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgPFBvcG92ZXJcclxuICAgICAgICAgICAgICAgICAgY29udGVudD17Y29udGVudH1cclxuICAgICAgICAgICAgICAgICAgdGl0bGU9e251bGx9XHJcbiAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbVwiXHJcbiAgICAgICAgICAgICAgICAgIHRyaWdnZXI9e1tcImNsaWNrXCJdfVxyXG4gICAgICAgICAgICAgICAgICBrZXk9e2luZGV4fVxyXG4gICAgICAgICAgICAgICAgICAvLyBvdmVybGF5Q2xhc3NOYW1lPXtzdHlsZXNbJ3BvcC1ib3gnXX1cclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgPEJ1dHRvbiB0eXBlPVwicHJpbWFyeVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIOabtOWkmiA8RG93bk91dGxpbmVkIC8+XHJcbiAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9Qb3BvdmVyPlxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiA8ZGl2IGtleT17aW5kZXh9PntpdGVtfTwvZGl2PjtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KX1cclxuICAgICAgPC9kaXY+XHJcbiAgICApO1xyXG4gIH1cclxuICByZW5kZXJDbG91bW5CdXR0b24oY29sdW1uQnV0dG9uczogYW55LCByZWNvcmQ6IGFueSkge1xyXG4gICAgY29uc3QgeyBlZGl0b3JGb3JtID0gdHJ1ZSwgYnV0dG9ucyA9IFtdIH0gPSB0aGlzLnByb3BzO1xyXG4gICAgY29uc3QgbmV3QnV0dG9ucyA9IFtdO1xyXG4gICAgY29sdW1uQnV0dG9ucy5tYXAoKGl0ZW06IGFueSwgaW5kZXg6IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCB7IGNoaWxkcmVuLCBwYWdlVHlwZSwgb25DbGljaywgaWNvbiwgcmVjb3JkU2hvdywgLi4ucGFyYW1zIH0gPVxyXG4gICAgICAgIGl0ZW0ucHJvcHM7XHJcbiAgICAgIGlmIChyZWNvcmRTaG93KSB7XHJcbiAgICAgICAgaWYgKGV2YWwocmVjb3JkU2hvdykpIHtcclxuICAgICAgICAgIG5ld0J1dHRvbnMucHVzaChpdGVtKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbmV3QnV0dG9ucy5wdXNoKGl0ZW0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIGNvbnN0IGZsYWcgPSBuZXdCdXR0b25zLmxlbmd0aCA+IDM7XHJcblxyXG4gICAgY29uc3QgY29udGVudCA9IG5ld0J1dHRvbnMubWFwKChpdGVtOiBhbnksIGluZGV4OiBhbnkpID0+IHtcclxuICAgICAgY29uc3QgeyBjaGlsZHJlbiwgcGFnZVR5cGUsIG9uQ2xpY2ssIHJlY29yZFNob3csIGljb24sIHNob3csIC4uLnBhcmFtcyB9ID1cclxuICAgICAgICBpdGVtLnByb3BzO1xyXG4gICAgICBpZiAoaW5kZXggPiAxKSB7XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjbHMoXHJcbiAgICAgICAgICAgICAgZ2V0TGVzcyhzdHlsZXMsIFwiZWRpdG9yXCIpLFxyXG4gICAgICAgICAgICAgIGdldExlc3Moc3R5bGVzLCBcImNvbnRlbnQtaXRlbVwiKVxyXG4gICAgICAgICAgICApfVxyXG4gICAgICAgICAgICBrZXk9e2luZGV4fVxyXG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgb25DbGljayAmJiBvbkNsaWNrKHJlY29yZCk7XHJcbiAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgIHsuLi5wYXJhbXN9XHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwiaWNvblwiKX0+e2ljb259PC9zcGFuPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcInRleHRcIil9PntjaGlsZHJlbn08L3NwYW4+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gbmV3QnV0dG9ucy5tYXAoKGl0ZW06IGFueSwgaW5kZXg6IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCB7IGNoaWxkcmVuLCBwYWdlVHlwZSwgb25DbGljaywgcmVjb3JkU2hvdywgaWNvbiwgLi4ucGFyYW1zIH0gPVxyXG4gICAgICAgIGl0ZW0ucHJvcHM7XHJcbiAgICAgIGlmIChmbGFnKSB7XHJcbiAgICAgICAgaWYgKGluZGV4IDwgMikge1xyXG4gICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwiZWRpdG9yXCIpfVxyXG4gICAgICAgICAgICAgIGtleT17aW5kZXh9XHJcbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgb25DbGljayAmJiBvbkNsaWNrKHJlY29yZCk7XHJcbiAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICB7Li4ucGFyYW1zfVxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJpY29uXCIpfT57aWNvbn08L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJ0ZXh0XCIpfT57Y2hpbGRyZW59PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChpbmRleCA9PSAyKSB7XHJcbiAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICA8UG9wb3ZlclxyXG4gICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbVwiXHJcbiAgICAgICAgICAgICAgdGl0bGU9e251bGx9XHJcbiAgICAgICAgICAgICAgY29udGVudD17Y29udGVudH1cclxuICAgICAgICAgICAgICB0cmlnZ2VyPXtbXCJjbGlja1wiXX1cclxuICAgICAgICAgICAgICBrZXk9e2luZGV4fVxyXG4gICAgICAgICAgICAgIC8vIG92ZXJsYXlDbGFzc05hbWU9e3N0eWxlc1sncG9wJ119XHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwiZWRpdG9yXCIpfT5cclxuICAgICAgICAgICAgICAgICZuYnNwOyDmm7TlpJpcclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwiaWNvblwiKX0+XHJcbiAgICAgICAgICAgICAgICAgIDxEb3duT3V0bGluZWQgLz5cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9Qb3BvdmVyPlxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwiZWRpdG9yXCIpfVxyXG4gICAgICAgICAgICBrZXk9e2luZGV4fVxyXG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgb25DbGljayAmJiBvbkNsaWNrKHJlY29yZCk7XHJcbiAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgIHsuLi5wYXJhbXN9XHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwiaWNvblwiKX0+e2ljb259PC9zcGFuPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcInRleHRcIil9PntjaGlsZHJlbn08L3NwYW4+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIC8vIH1cclxuICB9XHJcbiAgLy/moJHngrnlh7vkuovku7ZcclxuICB0cmVlU2VsZWN0KHNlbGVjdGVkS2V5czogYW55LCB7IHNlbGVjdGVkLCBzZWxlY3RlZE5vZGVzIH06IGFueSkge1xyXG4gICAgbGV0IGtleXdvcmQgPSBcIlwiO1xyXG4gICAgY29uc3QgeyBzZWFyY2hLZXkgPSBcImtleVwiLCBzZWFyY2hGaWVsZCA9IFwiXCIgfSA9IHRoaXMucHJvcHMudHJlZVByb3BzO1xyXG4gICAgY29uc3QgeyB0cmVlU2VsZWN0ZWRLZXkgfSA9IHRoaXMuc3RhdGU7XHJcbiAgICBpZiAoc2VsZWN0ZWQpIHtcclxuICAgICAgaWYgKHNlbGVjdGVkTm9kZXNbMF0uaXNMZWFmIHx8ICFzZWxlY3RlZE5vZGVzWzBdLmNoaWxkcmVuKSB7XHJcbiAgICAgICAgaWYgKHNlbGVjdGVkS2V5c1swXSAhPT0gdHJlZVNlbGVjdGVkS2V5KSB7XHJcbiAgICAgICAgICAvLyBsZXQgbWFwRGF0YSA9IHRoaXMudHJlZVJlZi5jdXJyZW50Py5zdG9yZS5nZXRGbGF0dGVuRGF0YSgpO1xyXG4gICAgICAgICAga2V5d29yZCA9IHNlbGVjdGVkTm9kZXNbMF0uZGF0YXJlZi5hdHRyaWJ1dGVbc2VhcmNoS2V5XTtcclxuICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICB0cmVlU2VsZWN0ZWRLZXk6IHNlbGVjdGVkS2V5c1swXSxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgdHJlZVNlbGVjdGVkS2V5OiBrZXl3b3JkLFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGNvbnN0IGZyb21WYWx1ZSA9IHRoaXMuc2VhcmNoUmVmLmN1cnJlbnQ/LmdldEZpZWxkc1ZhbHVlKCk7XHJcbiAgICBzZWFyY2hGaWVsZCAmJiB0aGlzLnRhYmxlTG9hZCh7IC4uLmZyb21WYWx1ZSwgW3NlYXJjaEZpZWxkXToga2V5d29yZCB9KTtcclxuICB9XHJcbiAgcmVzZXRTZWFyY2goKSB7XHJcbiAgICB0aGlzLnNlYXJjaFJlZi5jdXJyZW50Py5yZXNldEZpZWxkcygpO1xyXG4gIH1cclxuICBnZXRUZXh0KHByb3BzLCB0ZXh0KSB7XHJcbiAgICBsZXQgbmV3VGV4dCA9IHRleHQ7XHJcbiAgICBpZiAocHJvcHM/LmRhdGEgJiYgcHJvcHM/LmRhdGE/Lmxlbmd0aCA+IDApIHtcclxuICAgICAgbGV0IGRhdGEgPSBwcm9wcy5kYXRhO1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGE/Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKGRhdGFbaV0udmFsdWUgPT0gdGV4dCkge1xyXG4gICAgICAgICAgbmV3VGV4dCA9IGRhdGFbaV0ubGFiZWw7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmV3VGV4dDtcclxuICB9XHJcbiAgc2V0VGFibGVEYXRhKGRhdGEpIHtcclxuICAgIHRoaXMudGFibGVSZWYuY3VycmVudD8uc3RvcmUuc2V0RGF0YShkYXRhKTtcclxuICB9XHJcbiAgc2V0VHJlZURhdGEoZGF0YSkge1xyXG4gICAgdGhpcy50cmVlUmVmLmN1cnJlbnQ/LnN0b3JlLnNldERhdGEoZGF0YSk7XHJcbiAgfVxyXG4gIHJlbmRlcigpIHtcclxuICAgIGNvbnN0IHsgc2VsZWN0ZWRSb3dLZXlzIH0gPSB0aGlzLnN0YXRlO1xyXG4gICAgY29uc3Qge1xyXG4gICAgICBjb2x1bW5zID0gW10sXHJcbiAgICAgIHNob3dTZWFyY2ggPSB0cnVlLFxyXG4gICAgICBjaGlsZHJlbixcclxuICAgICAgc3VibWl0VXJsID0gXCJcIixcclxuICAgICAgdGFibGVQcm9wcyA9IHt9LFxyXG4gICAgICB0cmVlUHJvcHMgPSB7fSxcclxuICAgICAgZm9ybVByb3BzID0ge30sXHJcbiAgICAgIHNob3dMZWZ0ID0gZmFsc2UsXHJcbiAgICAgIHN1Ym1pdFBhcmFtcyA9IHt9LFxyXG4gICAgICBzaG93VG9vbEJ1dHRvbiA9IHRydWUsXHJcbiAgICAgIGJ1dHRvbnMgPSBbXSxcclxuICAgICAgZWRpdG9yRm9ybSA9IHRydWUsXHJcbiAgICAgIG9uU2hvd0Zvcm0sXHJcbiAgICAgIGZvcm1DaGFuZ2VWYWxpZCA9IHRydWUsXHJcbiAgICAgIGNsYXNzTmFtZSxcclxuICAgICAgYWN0aW9uQ29sdW1ucyA9IFtdLFxyXG4gICAgICB0b29sQnV0dG9uUG9zaXRpb24gPSBcImJ1dHRvbVwiLFxyXG4gICAgfSA9IHRoaXMucHJvcHM7XHJcbiAgICBjb25zdCB7XHJcbiAgICAgIHN0b3JlID0ge30sXHJcbiAgICAgIGZpbHRlckNvbHVtbiA9IHRydWUsXHJcbiAgICAgIGFjdGlvbkNvbHVtbiA9IHRydWUsXHJcbiAgICAgIHNob3dSb3dTZWxlY3Rpb24gPSB0cnVlLFxyXG4gICAgICBjb2x1bW5PcmRlciA9IHRydWUsXHJcbiAgICAgIC4uLm90aGVydGFibGVQYXJhbXNcclxuICAgIH0gPSB0YWJsZVByb3BzO1xyXG5cclxuICAgIGNvbnN0IHtcclxuICAgICAgc3RvcmU6IHRyZWVTdG9yZSA9IHt9LFxyXG4gICAgICBzaG93U2VhcmNoOiB0cmVlU2VhcmNoID0gdHJ1ZSxcclxuICAgICAgdGl0bGVBbGlhcyA9IFwidGl0bGVcIixcclxuICAgICAgLi4ub3RoZXJ0cmVlUGFyYW1zXHJcbiAgICB9ID0gdHJlZVByb3BzO1xyXG5cclxuICAgIGxldCB0YWJsZVBhcmFtcyA9IHsgZmlsdGVyQ29sdW1uLCBzdG9yZSwgLi4ub3RoZXJ0YWJsZVBhcmFtcyB9IGFzIGFueTtcclxuICAgIGNvbnNvbGUubG9nKFwidGhpcy5wcm9wcy5mb3JtVHlwZVwiLCB0aGlzLnByb3BzLmZvcm1UeXBlKTtcclxuICAgIGNvbnNvbGUubG9nKFwidGhpcy5zYXR0ZS5mb3JtVHlwZVwiLCB0aGlzLnN0YXRlLmZvcm1UeXBlKTtcclxuXHJcbiAgICBpZiAoc2hvd1Jvd1NlbGVjdGlvbikge1xyXG4gICAgICB0YWJsZVBhcmFtcyA9IHtcclxuICAgICAgICAuLi50YWJsZVBhcmFtcyxcclxuICAgICAgICByb3dTZWxlY3Rpb246IHtcclxuICAgICAgICAgIHNlbGVjdGVkUm93S2V5czogc2VsZWN0ZWRSb3dLZXlzLFxyXG4gICAgICAgICAgb25TZWxlY3Q6IHRoaXMucm93U2VsZWN0aW9uT25TZWxlY3QuYmluZCh0aGlzKSxcclxuICAgICAgICAgIG9uU2VsZWN0QWxsOiB0aGlzLnJvd1NlbGVjdGlvbk9uU2VsZWN0QWxsLmJpbmQodGhpcyksXHJcbiAgICAgICAgICBjb2x1bW5XaWR0aDogNDAsXHJcbiAgICAgICAgfSxcclxuICAgICAgfTtcclxuICAgIH1cclxuICAgIGxldCB0YWJsZUNvbHVtbjogYW55W10gPSBbXTtcclxuICAgIGNvbnN0IHNlYXJjaEZvcm1zOiBhbnkgPSBbXTtcclxuICAgIGNvbnN0IGVkaXRvckZvcm1zOiBhbnkgPSBbXTtcclxuICAgIGNvbnN0IGRlZmF1bHRWYWx1ZTogYW55ID0ge307XHJcbiAgICBjb25zdCBjb2x1bW5CdXR0b25zOiBhbnkgPSBbXTtcclxuICAgIGNvbHVtbnMubWFwKChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgbGV0IHRlbXAgPSB7IC4uLml0ZW0gfTtcclxuICAgICAgaWYgKHRlbXAuc2VhcmNoKSB7XHJcbiAgICAgICAgc2VhcmNoRm9ybXMucHVzaCh7XHJcbiAgICAgICAgICBuYW1lOiB0ZW1wLmZpZWxkIHx8IHRlbXAuZGF0YUluZGV4LFxyXG4gICAgICAgICAgbGFiZWw6IHRlbXAudGl0bGUsXHJcbiAgICAgICAgICB0eXBlOiB0ZW1wLnR5cGUsXHJcbiAgICAgICAgICBwcm9wczogdGVtcC5wcm9wcyxcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICBkZWxldGUgdGVtcC5zZWFyY2g7XHJcbiAgICAgIHRlbXAuZWRpdG9yICE9PSBmYWxzZSAmJlxyXG4gICAgICAgIGVkaXRvckZvcm1zLnB1c2goe1xyXG4gICAgICAgICAgbmFtZTogdGVtcC5maWVsZCB8fCB0ZW1wLmRhdGFJbmRleCxcclxuICAgICAgICAgIGxhYmVsOiB0ZW1wLnRpdGxlLFxyXG4gICAgICAgICAgcnVsZXM6IHRlbXAucnVsZXMgPyB0ZW1wLnJ1bGVzIDogW10sXHJcbiAgICAgICAgICB0eXBlOiB0ZW1wLnR5cGUsXHJcbiAgICAgICAgICBzcGFuOiB0ZW1wLnNwYW4sXHJcbiAgICAgICAgICBkaWN0TmFtZTogdGVtcC5kaWN0TmFtZSxcclxuICAgICAgICAgIHByb3BzOiBvbWl0KHsgLi4udGVtcC5wcm9wcyB9LCBbXCJkZWZhdWx0VmFsdWVcIiwgXCJ2YWx1ZVwiXSksXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIGlmIChcclxuICAgICAgICB0ZW1wLnByb3BzPy5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCAmJlxyXG4gICAgICAgIHRlbXAucHJvcHM/LmRlZmF1bHRWYWx1ZSAhPT0gbnVsbFxyXG4gICAgICApIHtcclxuICAgICAgICBjb25zdCBuYW1lID0gdGVtcC5maWVsZCB8fCB0ZW1wLmRhdGFJbmRleDtcclxuICAgICAgICBkZWZhdWx0VmFsdWVbbmFtZV0gPSB0ZW1wLnByb3BzPy5kZWZhdWx0VmFsdWU7XHJcbiAgICAgIH1cclxuICAgICAgZGVsZXRlIHRlbXAucnVsZXM7XHJcbiAgICAgIGRlbGV0ZSB0ZW1wLnNwYW47XHJcbiAgICAgIGlmICh0ZW1wLmNvbHVtblNlYXJjaCkge1xyXG4gICAgICAgIHRlbXAuZmlsdGVyUHJvcHMgPSB7XHJcbiAgICAgICAgICB0eXBlOiB0ZW1wLnR5cGUsXHJcbiAgICAgICAgICBwcm9wczogdGVtcC5wcm9wcyxcclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcbiAgICAgIGRlbGV0ZSB0ZW1wLnR5cGU7XHJcbiAgICAgIGxldCB0ZW1wUHJvcCA9IHsgLi4udGVtcC5wcm9wcyB9O1xyXG4gICAgICBpZiAodGVtcC5zdHlsZSkge1xyXG4gICAgICAgIHRlbXAgPSB7XHJcbiAgICAgICAgICByZW5kZXI6ICh0ZXh0OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICA8PlxyXG4gICAgICAgICAgICAgICAge3RleHQgIT09IFwiXCIgJiYgdGV4dCAhPT0gbnVsbCAmJiB0ZXh0ICE9PSB1bmRlZmluZWQgJiYgKFxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcImNvbC1iYWNrXCIpfT5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcImNvbC10ZXh0XCIpfT5cclxuICAgICAgICAgICAgICAgICAgICAgIHt0aGlzLmdldFRleHQodGVtcFByb3AsIHRleHQpfVxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgICA8Lz5cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBlbGxpcHNpczogdHJ1ZSxcclxuICAgICAgICAgIC4uLnRlbXAsXHJcbiAgICAgICAgfTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0ZW1wID0ge1xyXG4gICAgICAgICAgcmVuZGVyOiAodGV4dDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiA8Pnt0aGlzLmdldFRleHQodGVtcFByb3AsIHRleHQpfTwvPjtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICAuLi50ZW1wLFxyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuICAgICAgZGVsZXRlIHRlbXAucHJvcHM7XHJcbiAgICAgIGlmICh0ZW1wPy5jb2x1bW5TaG93ICE9PSBmYWxzZSkgdGFibGVDb2x1bW4ucHVzaCh0ZW1wKTtcclxuICAgIH0pO1xyXG4gICAgY29uc3Qgc2VsZkJ1dHRvbnM6IGFueSA9IFtdO1xyXG5cclxuICAgIGlmIChlZGl0b3JGb3JtID09IHRydWUpIHtcclxuICAgICAgaWYgKGJ1dHRvbnMuaW5kZXhPZihcInNlYXJjaFwiKSA+IC0xKSB7XHJcbiAgICAgICAgY29sdW1uQnV0dG9ucy5wdXNoKFxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcImVkaXRvclwiKX1cclxuICAgICAgICAgICAgb25DbGljaz17KHJlY29yZDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKG9uU2hvd0Zvcm0pIHtcclxuICAgICAgICAgICAgICAgIG9uU2hvd0Zvcm0ocmVjb3JkLmF0dHJpYnV0ZSB8fCByZWNvcmQsIFwiZGV0YWlsXCIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB0aGlzLnNob3dGb3JtKHJlY29yZC5hdHRyaWJ1dGUgfHwgcmVjb3JkLCBcImRldGFpbFwiKTtcclxuICAgICAgICAgICAgfX1cclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJpY29uXCIpfT5cclxuICAgICAgICAgICAgICA8RXllT3V0bGluZWQgLz5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcInRleHRcIil9Puafpeecizwvc3Bhbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGJ1dHRvbnMuaW5kZXhPZihcImVkaXRvclwiKSA+IC0xKSB7XHJcbiAgICAgICAgY29sdW1uQnV0dG9ucy5wdXNoKFxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcImVkaXRvclwiKX1cclxuICAgICAgICAgICAgb25DbGljaz17KHJlY29yZDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKG9uU2hvd0Zvcm0pIHtcclxuICAgICAgICAgICAgICAgIG9uU2hvd0Zvcm0ocmVjb3JkLmF0dHJpYnV0ZSB8fCByZWNvcmQsIFwiZWRpdG9yXCIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB0aGlzLnNob3dGb3JtKHJlY29yZC5hdHRyaWJ1dGUgfHwgcmVjb3JkLCBcImVkaXRvclwiKTtcclxuICAgICAgICAgICAgfX1cclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJpY29uXCIpfT5cclxuICAgICAgICAgICAgICA8RWRpdE91dGxpbmVkIC8+XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJ0ZXh0XCIpfT7nvJbovpE8L3NwYW4+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoYnV0dG9ucy5pbmRleE9mKFwiYWRkXCIpID4gLTEpIHtcclxuICAgICAgc2VsZkJ1dHRvbnMucHVzaChcclxuICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICB0eXBlPXtcInByaW1hcnlcIn1cclxuICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgeyBvblNob3dGb3JtIH0gPSB0aGlzLnByb3BzO1xyXG4gICAgICAgICAgICBpZiAob25TaG93Rm9ybSkge1xyXG4gICAgICAgICAgICAgIG9uU2hvd0Zvcm0oKTtcclxuICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5zaG93Rm9ybSgpO1xyXG4gICAgICAgICAgfX1cclxuICAgICAgICAgIGljb249ezxQbHVzT3V0bGluZWQgLz59XHJcbiAgICAgICAgPlxyXG4gICAgICAgICAg5re75YqgXHJcbiAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICBpZiAoYnV0dG9ucy5pbmRleE9mKFwiZGVsZXRlXCIpID4gLTEpIHtcclxuICAgICAgc2VsZkJ1dHRvbnMucHVzaChcclxuICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICAvLyB0eXBlPXtcInByaW1hcnlcIn1cclxuICAgICAgICAgIG9uQ2xpY2s9e3RoaXMub25EZWxldGUuYmluZCh0aGlzKX1cclxuICAgICAgICAgIGljb249ezxJY29uIHR5cGU9e2ljb25UeXBlLmRlbGV0ZTN9IC8+fVxyXG4gICAgICAgICAgZGFuZ2VyXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAg5Yig6ZmkXHJcbiAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHtcclxuICAgICAgY2hpbGRyZW4ubWFwKChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoaXRlbT8ucHJvcHM/LnBhZ2VUeXBlID09IFwidG9vbEJ1dHRvblwiKSB7XHJcbiAgICAgICAgICBzZWxmQnV0dG9ucy5wdXNoKGl0ZW0pO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbT8ucHJvcHM/LnBhZ2VUeXBlID09IFwiY2xvdW1uQnV0dG9uXCIpIHtcclxuICAgICAgICAgIGNvbHVtbkJ1dHRvbnMucHVzaChpdGVtKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIGlmIChjaGlsZHJlbikge1xyXG4gICAgICBjb25zdCB7IHByb3BzIH06IGFueSA9IGNoaWxkcmVuO1xyXG4gICAgICBpZiAocHJvcHM/LnBhZ2VUeXBlID09IFwidG9vbEJ1dHRvblwiKSB7XHJcbiAgICAgICAgc2VsZkJ1dHRvbnMucHVzaChjaGlsZHJlbik7XHJcbiAgICAgIH0gZWxzZSBpZiAocHJvcHM/LnBhZ2VUeXBlID09IFwiY2xvdW1uQnV0dG9uXCIpIHtcclxuICAgICAgICBjb2x1bW5CdXR0b25zLnB1c2goY2hpbGRyZW4pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYWN0aW9uQ29sdW1uICYmXHJcbiAgICAgIHRhYmxlQ29sdW1uLnB1c2goe1xyXG4gICAgICAgIHRpdGxlOiBcIuaTjeS9nFwiLFxyXG4gICAgICAgIGRhdGFJbmRleDogXCJhY3Rpb25cIixcclxuICAgICAgICBhbGlnbjogXCJjZW50ZXJcIixcclxuICAgICAgICB3aWR0aDogMjUwLFxyXG4gICAgICAgIGZpeGVkOiBcInJpZ2h0XCIsXHJcbiAgICAgICAgZWxsaXBzaXM6IHRydWUsXHJcbiAgICAgICAgcmVuZGVyOiAodGV4dDogYW55LCByZWNvcmQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcImFjdGlvblwiKX0+XHJcbiAgICAgICAgICAgICAge3RoaXMucmVuZGVyQ2xvdW1uQnV0dG9uKGNvbHVtbkJ1dHRvbnMsIHJlY29yZCl9XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICAgIGNvbnN0IGhlYWRlckNvdW50ID0gdG9vbEJ1dHRvblBvc2l0aW9uID09IFwicmlnaHRcIiA/IDEgOiAyO1xyXG4gICAgaWYgKGNvbHVtbk9yZGVyKVxyXG4gICAgICB0YWJsZUNvbHVtbiA9IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICB0aXRsZTogXCIjXCIsXHJcbiAgICAgICAgICB3aWR0aDogMzAsXHJcbiAgICAgICAgICBhbGlnbjogXCJjZW50ZXJcIixcclxuICAgICAgICAgIHJlbmRlcjogKHRleHQsIHJlYWNvcmQsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiA8PntpbmRleCArIDF9PC8+O1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIC4uLnRhYmxlQ29sdW1uLFxyXG4gICAgICBdO1xyXG4gICAgaWYgKHRhYmxlUHJvcHMucGFnaW5hdGlvbiAhPT0gZmFsc2UpIHtcclxuICAgICAgLy8gc2Nyb2xsPXt7IHg6IFwibWF4LWNvbnRlbnRcIiwgeTogXCIyNXZ3XCIgfX1cclxuICAgICAgdGFibGVQYXJhbXMgPSB7XHJcbiAgICAgICAgc2Nyb2xsOiB7IHg6IFwibWF4LWNvbnRlbnRcIiwgeTogdGhpcy5wcm9wcy5wYWdlVGl0bGUgPyBcIjIwdndcIiA6IFwiMjV2d1wiIH0sXHJcbiAgICAgICAgLi4udGFibGVQYXJhbXMsXHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xzKGdldExlc3Moc3R5bGVzLCBcInBhZ2VcIiksIGNsYXNzTmFtZSl9PlxyXG4gICAgICAgIHt0aGlzLnByb3BzLnBhZ2VUaXRsZSAmJiAoXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xzKGdldExlc3Moc3R5bGVzLCBcInBhZ2UtdGl0bGVcIiksIGNsYXNzTmFtZSl9PlxyXG4gICAgICAgICAgICB7dGhpcy5wcm9wcy5wYWdlVGl0bGV9XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICApfVxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xzKGdldExlc3Moc3R5bGVzLCBcInBhZ2UtcGFuZVwiKSwgY2xhc3NOYW1lKX1cclxuICAgICAgICAgIHN0eWxlPXt7IGRpc3BsYXk6IFwiZmxleFwiIH19XHJcbiAgICAgICAgPlxyXG4gICAgICAgICAge3Nob3dMZWZ0ICYmIChcclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcImxlZnRcIil9PlxyXG4gICAgICAgICAgICAgIDxUcmVlXHJcbiAgICAgICAgICAgICAgICBzdG9yZT17eyAuLi50cmVlU3RvcmUgfX1cclxuICAgICAgICAgICAgICAgIHNob3dJY29uPXtmYWxzZX1cclxuICAgICAgICAgICAgICAgIGNoZWNrYWJsZT17ZmFsc2V9XHJcbiAgICAgICAgICAgICAgICBzZWFyY2hhYmxlPXt0cmVlU2VhcmNofVxyXG4gICAgICAgICAgICAgICAgb25TZWxlY3Q9e3RoaXMudHJlZVNlbGVjdC5iaW5kKHRoaXMpfVxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRLZXlzPXtbdGhpcy5zdGF0ZS50cmVlU2VsZWN0ZWRLZXldfVxyXG4gICAgICAgICAgICAgICAgdGl0bGVBbGlhcz17dGl0bGVBbGlhc31cclxuICAgICAgICAgICAgICAgIHsuLi5vdGhlcnRyZWVQYXJhbXN9XHJcbiAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICApfVxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBjbGFzc05hbWU9e2NscyhnZXRMZXNzKHN0eWxlcywgXCJyaWdodFwiKSwge1xyXG4gICAgICAgICAgICAgIFtnZXRMZXNzKHN0eWxlcywgXCJuby1sZWZ0LXJpZ2h0XCIpXTogIXNob3dMZWZ0LFxyXG4gICAgICAgICAgICB9KX1cclxuICAgICAgICAgID5cclxuICAgICAgICAgICAge3Nob3dTZWFyY2ggJiYgKFxyXG4gICAgICAgICAgICAgIDxSb3cgZ3V0dGVyPXsyNH0gd3JhcD5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJoZWFkZXJcIil9PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xzKGdldExlc3Moc3R5bGVzLCBcImZvcm1cIikpfT5cclxuICAgICAgICAgICAgICAgICAgICB7LyogPFJvdyBndXR0ZXI9ezI0fSB3cmFwIHN0eWxlPXt7bWFyZ2luOjB9fT4gKi99XHJcbiAgICAgICAgICAgICAgICAgICAgPEZvcm1cclxuICAgICAgICAgICAgICAgICAgICAgIHJlZj17dGhpcy5zZWFyY2hSZWZ9XHJcbiAgICAgICAgICAgICAgICAgICAgICBsYWJlbENvbD17e319XHJcbiAgICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ29sPXt7fX1cclxuICAgICAgICAgICAgICAgICAgICAgIGxheW91dD1cImlubGluZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17eyB3aWR0aDogXCIxMDAlXCIgfX1cclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7c2VhcmNoRm9ybXMubWFwKChpdGVtOiBhbnksIGluZGV4OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbVByb3BzID0gaXRlbS5wcm9wcyB8fCB7fTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW1Qcm9wcy52YWx1ZUZvcm1hdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZUZvcm1hdFtpdGVtLm5hbWVdID0gaXRlbVByb3BzLnZhbHVlRm9ybWF0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA+IGhlYWRlckNvdW50ICYmICF0aGlzLnN0YXRlLmV4cGFuZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgYWxsb3dDaGFycyA9IGl0ZW0/LnByb3BzPy5hbGxvd0NoYXJzIHx8IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcHJvcHMgPSB7IC4uLml0ZW1Qcm9wcyB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWl0ZW0udHlwZSB8fCBpdGVtLnR5cGUgPT0gXCJJbnB1dFwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcHMuYWxsb3dDaGFycyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8Q29sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZD17eyBzcGFuOiAxMiB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc209e3sgc3BhbjogMjQgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxnPXt7IHNwYW46IDYgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleT17aW5kZXh9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17eyBwYWRkaW5nUmlnaHQ6IDAgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rm9ybS5JdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsPXtpdGVtLmxhYmVsfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPXtpdGVtLm5hbWV9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93Q2hhcnM9e2FsbG93Q2hhcnN9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtnZXROb2RlKGl0ZW0udHlwZSwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLnByb3BzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBg6K+36L6T5YWlJHtpdGVtLmxhYmVsfWAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Gb3JtLkl0ZW0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Db2w+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICB9KX1cclxuICAgICAgICAgICAgICAgICAgICAgIDxDb2xcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWQ9e3sgc3BhbjogMTIgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgc209e3sgc3BhbjogMjQgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgbGc9e3sgc3BhbjogdG9vbEJ1dHRvblBvc2l0aW9uID09IFwicmlnaHRcIiA/IDEyIDogNiB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17eyBwYWRkaW5nUmlnaHQ6IDAgfX1cclxuICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwic2VhcmNoLWJ1dHRvbnNcIil9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3sgbWFyZ2luVG9wOiAwIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPXtcInByaW1hcnlcIn1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e3RoaXMub25TZWFyY2guYmluZCh0aGlzKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb249ezxTZWFyY2hPdXRsaW5lZCAvPn1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICDmn6Xor6JcclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPXtcInByaW1hcnlcIn1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e3RoaXMucmVzZXRTZWFyY2guYmluZCh0aGlzKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb249ezxSZWxvYWRPdXRsaW5lZCAvPn1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICDph43nva5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB7c2hvd1Rvb2xCdXR0b24gJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xCdXR0b25Qb3NpdGlvbiA9PSBcInJpZ2h0XCIgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyVG9vbEJ1dHRvbnMoc2VsZkJ1dHRvbnMpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtzZWFyY2hGb3Jtcy5sZW5ndGggPiAzICYmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJhX3N0eWxlXCIpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBleHBhbmQgfSA9IHRoaXMuc3RhdGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBhbmQ6ICFleHBhbmQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt0aGlzLnN0YXRlLmV4cGFuZCA/IFwi5pS26LW3XCIgOiBcIuWxleW8gFwifVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dGhpcy5zdGF0ZS5leHBhbmQgPyAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFVwT3V0bGluZWQgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSA6IChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RG93bk91dGxpbmVkIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICApfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvQ29sPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvRm9ybT5cclxuICAgICAgICAgICAgICAgICAgICB7LyogPC9Sb3c+ICovfVxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvUm93PlxyXG4gICAgICAgICAgICApfVxyXG5cclxuICAgICAgICAgICAge3Nob3dUb29sQnV0dG9uICYmXHJcbiAgICAgICAgICAgICAgdG9vbEJ1dHRvblBvc2l0aW9uID09IFwiYnV0dG9tXCIgJiZcclxuICAgICAgICAgICAgICB0aGlzLnJlbmRlclRvb2xCdXR0b25zKHNlbGZCdXR0b25zKX1cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2NscyhnZXRMZXNzKHN0eWxlcywgXCJ0YWJsZVwiKSl9PlxyXG4gICAgICAgICAgICAgIDxUYWJsZVxyXG4gICAgICAgICAgICAgICAgcmVmPXt0aGlzLnRhYmxlUmVmfVxyXG4gICAgICAgICAgICAgICAgY29sdW1ucz17dGFibGVDb2x1bW59XHJcbiAgICAgICAgICAgICAgICBleHBhbmRhYmxlPXt7XHJcbiAgICAgICAgICAgICAgICAgIGV4cGFuZEljb246ICh7IGV4cGFuZGVkLCBvbkV4cGFuZCwgcmVjb3JkIH0pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgICAgICAgPD5cclxuICAgICAgICAgICAgICAgICAgICAgICAge2V4cGFuZGVkID8gKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxEb3duT3V0bGluZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eyhlKSA9PiBvbkV4cGFuZChyZWNvcmQsIGUpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJleHBhbmQtaWNvblwiKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICApIDogKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJlY29yZC5jaGlsZE5vZGVzICYmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxSaWdodE91dGxpbmVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eyhlKSA9PiBvbkV4cGFuZChyZWNvcmQsIGUpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcImV4cGFuZC1pY29uXCIpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgICAgICAgICAgICA8Lz5cclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgIGNvbHVtbk9yZGVyPXt0cnVlfVxyXG4gICAgICAgICAgICAgICAgYm9yZGVyZWQ9e3RydWV9XHJcbiAgICAgICAgICAgICAgICBzaXplPXt0aGlzLnN0YXRlLnRhYmxlU2l6ZX1cclxuICAgICAgICAgICAgICAgIHsuLi50YWJsZVBhcmFtc31cclxuICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAge2VkaXRvckZvcm0gJiYgKFxyXG4gICAgICAgICAgICA8RWRpdG9yRm9ybVxyXG4gICAgICAgICAgICAgIHJlZj17dGhpcy5lZGl0b3JSZWZ9XHJcbiAgICAgICAgICAgICAgY2FsbEJhY2s9e3RoaXMudGFibGVSZWxvYWQuYmluZCh0aGlzKX1cclxuICAgICAgICAgICAgICBmb3JtUHJvcHM9e2VkaXRvckZvcm1zfVxyXG4gICAgICAgICAgICAgIHN1Ym1pdFVybD17c3VibWl0VXJsfVxyXG4gICAgICAgICAgICAgIHN1Ym1pdFBhcmFtcz17c3VibWl0UGFyYW1zfVxyXG4gICAgICAgICAgICAgIG9uU3VibWl0PXt0aGlzLnByb3BzLm9uU3VibWl0fVxyXG4gICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZT17ZGVmYXVsdFZhbHVlfVxyXG4gICAgICAgICAgICAgIG9uSGlkZUZvcm09e3RoaXMucHJvcHMub25IaWRlRm9ybX1cclxuICAgICAgICAgICAgICBvbkZvcm1DaGFuZ2U9e3RoaXMucHJvcHMub25Gb3JtQ2hhbmdlfVxyXG4gICAgICAgICAgICAgIGZvcm1UeXBlPXt0aGlzLnByb3BzLmZvcm1UeXBlIHx8IHRoaXMuc3RhdGUuZm9ybVR5cGV9XHJcbiAgICAgICAgICAgICAgY2hhbmdlVmFsaWQ9e2Zvcm1DaGFuZ2VWYWxpZH1cclxuICAgICAgICAgICAgICBvdGhlclByb3BzPXt7Li4uZm9ybVByb3BzfX1cclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgICl9XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgKTtcclxuICB9XHJcbn1cclxuZXhwb3J0IGRlZmF1bHQgQmFzZVBhZ2U7XHJcbiJdfQ==
|
|
1060
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3BhZ2UvQmFzZVBhZ2UvaW5kZXgudHN4Il0sIm5hbWVzIjpbIlJlYWN0IiwiUHVyZUNvbXBvbmVudCIsIlRhYmxlIiwiVHJlZSIsIkZvcm0iLCJCdXR0b24iLCJNb2RhbCIsIlBvcG92ZXIiLCJtZXNzYWdlIiwiSWNvbiIsImljb25UeXBlIiwiRWRpdG9yRm9ybSIsImNscyIsInN0eWxlcyIsIkNvbCIsIlJvdyIsIm1vbWVudCIsImlzRW1wdHlPYmoiLCJEb3duT3V0bGluZWQiLCJVcE91dGxpbmVkIiwiRXllT3V0bGluZWQiLCJFZGl0T3V0bGluZWQiLCJSaWdodE91dGxpbmVkIiwiUGx1c091dGxpbmVkIiwiUmVsb2FkT3V0bGluZWQiLCJTZWFyY2hPdXRsaW5lZCIsImdldExlc3MiLCJnZXROb2RlIiwicmVxdWVzdCIsIm9taXQiLCJjb25maWciLCJnZXRTdG9yYWdlIiwiQmFzZVBhZ2UiLCJwcm9wcyIsImNyZWF0ZVJlZiIsImNoZWNrZWRUcmVlS2V5cyIsInN0YXRlIiwibmFtZSIsInVzZXJUeXBlIiwiYWNjb3VudCIsInZhbHVlIiwiZGVwdElkIiwidGFibGVMb2FkIiwic2VsZWN0ZWQiLCJyZXMiLCJrZXkiLCJrZXlzIiwibGVuZ3RoIiwic3RvcmVQcmVmaXgiLCJ0eXBlIiwiY29udGVudCIsInNpemUiLCJzZWxlY3RlZFJvd0tleXMiLCJzZWxlY3RlZFJvd0RhdGFzIiwidHJlZVNlbGVjdGVkS2V5IiwiZXhwYW5kIiwiZm9ybVR5cGUiLCJ0YWJsZVNpemUiLCJzZWxlY3RlZFJvd0tleXNTdG9yZSIsInNlbGVjdGVkUm93RGF0YXNTdG9yZSIsImN1cnJlbnRQYWdlIiwiaW5pdERhdGEiLCJlZGl0b3JmbGFnIiwiZWRpdG9yUmVmIiwiY3VycmVudCIsInNob3ciLCJoaWRlRm9ybSIsImxvYWRpbmciLCJzZXRMb2FkaW5nIiwiZGVsZXRlVXJsIiwib25EZWxldGUiLCJkZWxldGVQYXJhbXMiLCJ3YXJuaW5nIiwiRXJyb3IiLCJjb25maXJtIiwidGl0bGUiLCJva1RleHQiLCJjYW5jZWxUZXh0Iiwib25PayIsImRlZmF1bHRQYXJhbXMiLCJtZXRob2QiLCJwYXJhbXMiLCJpZHMiLCJqb2luIiwicmVxdWVzdFBhcmFtcyIsInRoZW4iLCJjb2RlIiwic3VjY2VzcyIsImVycm9yIiwiY2F0Y2giLCJjb25zb2xlIiwibG9nIiwidGFibGVSZWYiLCJzdG9yZSIsImxvYWQiLCJvblNlYXJjaCIsImZyb21WYWx1ZSIsInNlYXJjaFJlZiIsImdldEZpZWxkc1ZhbHVlIiwiZGF0ZUZvcm1hdCIsIm9sZGRhdGEiLCJBcnJheSIsImlzQXJyYXkiLCJmb3JtYXQiLCJhdXRvTG9hZCIsInJlbG9hZCIsImNhbGxiYWNrIiwiZGF0YSIsInJlY29yZHMiLCJzZWFyY2hWYWx1ZXMiLCJnZXRTZWFyY2hWYWx1ZXMiLCJzZXRTdGF0ZSIsInRhYmxlUHJvcHMiLCJyb3dLZXkiLCJyZXNLZXkiLCJjaGlsZE5vZGVzIiwiY2hpbGRyZW4iLCJtYXAiLCJpdGVtIiwiaW5kZXgiLCJnZXRDaGlsZHJlbkRhdGEiLCJ0b29sYnV0dG9ucyIsIm1hcmdpbmZsYWciLCJmbGFnIiwic2hvd1NlYXJjaCIsInBhZ2VUeXBlIiwib25DbGljayIsImljb24iLCJtYXJnaW5MZWZ0IiwiY29sdW1uQnV0dG9ucyIsInJlY29yZCIsImVkaXRvckZvcm0iLCJidXR0b25zIiwibmV3QnV0dG9ucyIsInJlY29yZFNob3ciLCJldmFsIiwicHVzaCIsInNlbGVjdGVkS2V5cyIsInNlbGVjdGVkTm9kZXMiLCJrZXl3b3JkIiwidHJlZVByb3BzIiwic2VhcmNoS2V5Iiwic2VhcmNoRmllbGQiLCJpc0xlYWYiLCJkYXRhcmVmIiwiYXR0cmlidXRlIiwicmVzZXRGaWVsZHMiLCJ0ZXh0IiwibmV3VGV4dCIsImkiLCJsYWJlbCIsInNldERhdGEiLCJ0cmVlUmVmIiwiY29sdW1ucyIsInN1Ym1pdFVybCIsImZvcm1Qcm9wcyIsInNob3dMZWZ0Iiwic3VibWl0UGFyYW1zIiwic2hvd1Rvb2xCdXR0b24iLCJvblNob3dGb3JtIiwiZm9ybUNoYW5nZVZhbGlkIiwiY2xhc3NOYW1lIiwiYWN0aW9uQ29sdW1ucyIsInRvb2xCdXR0b25Qb3NpdGlvbiIsImZpbHRlckNvbHVtbiIsImFjdGlvbkNvbHVtbiIsInNob3dSb3dTZWxlY3Rpb24iLCJjb2x1bW5PcmRlciIsInJvd1NlbGVjdGlvbiIsImV4cGFuZGFibGUiLCJvdGhlcnRhYmxlUGFyYW1zIiwidHJlZVN0b3JlIiwidHJlZVNlYXJjaCIsInRpdGxlQWxpYXMiLCJvdGhlcnRyZWVQYXJhbXMiLCJ0YWJsZVBhcmFtcyIsIm9uQ2hhbmdlIiwic2VsZWN0ZWRSb3dzIiwibmV3Um93S2V5c1N0b3JlIiwibmV3Um93RGF0YXNTdG9yZSIsImdldFNlbGVjdGVkS2V5IiwiY29sdW1uV2lkdGgiLCJjaGVja1N0cmljdGx5IiwidGFibGVDb2x1bW4iLCJzZWFyY2hGb3JtcyIsImVkaXRvckZvcm1zIiwiZGVmYXVsdFZhbHVlIiwidGVtcCIsInNlYXJjaCIsImZpZWxkIiwiZGF0YUluZGV4IiwiZWRpdG9yIiwicnVsZXMiLCJzcGFuIiwiZGljdE5hbWUiLCJ1bmRlZmluZWQiLCJjb2x1bW5TZWFyY2giLCJmaWx0ZXJQcm9wcyIsInRlbXBQcm9wIiwic3R5bGUiLCJyZW5kZXIiLCJnZXRUZXh0IiwiZWxsaXBzaXMiLCJjb2x1bW5TaG93Iiwic2VsZkJ1dHRvbnMiLCJpbmRleE9mIiwic2hvd0Zvcm0iLCJiaW5kIiwiZGVsZXRlMyIsImFsaWduIiwid2lkdGgiLCJmaXhlZCIsInJlbmRlckNsb3VtbkJ1dHRvbiIsImhlYWRlckNvdW50IiwicmVhY29yZCIsInBhZ2luYXRpb24iLCJzY3JvbGwiLCJ4IiwieSIsInBhZ2VUaXRsZSIsImRpc3BsYXkiLCJ0cmVlU2VsZWN0IiwiaXRlbVByb3BzIiwidmFsdWVGb3JtYXQiLCJhbGxvd0NoYXJzIiwicGFkZGluZ1JpZ2h0IiwicGxhY2Vob2xkZXIiLCJtYXJnaW5Ub3AiLCJyZXNldFNlYXJjaCIsInJlbmRlclRvb2xCdXR0b25zIiwiZXhwYW5kSWNvbiIsImV4cGFuZGVkIiwib25FeHBhbmQiLCJlIiwidGFibGVSZWxvYWQiLCJvblN1Ym1pdCIsIm9uSGlkZUZvcm0iLCJvbkZvcm1DaGFuZ2UiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBT0EsS0FBUCxJQUFnQkMsYUFBaEIsUUFBZ0QsT0FBaEQ7QUFDQSxPQUFPQyxLQUFQLE1BQWtCLGtCQUFsQjtBQUNBLE9BQU9DLElBQVAsTUFBaUIsaUJBQWpCO0FBQ0EsT0FBT0MsSUFBUCxNQUFpQixpQkFBakI7QUFDQSxPQUFPQyxNQUFQLE1BQW1CLG1CQUFuQjtBQUNBLE9BQU9DLEtBQVAsTUFBa0Isa0JBQWxCO0FBQ0EsT0FBT0MsT0FBUCxNQUFvQixvQkFBcEI7QUFDQSxPQUFPQyxPQUFQLE1BQW9CLG9CQUFwQjtBQUNBLE9BQU9DLElBQVAsTUFBaUIsNEJBQWpCO0FBQ0EsU0FBU0MsUUFBVCxRQUF5QixpQkFBekI7QUFDQSxPQUFPQyxVQUFQLE1BQXVCLFFBQXZCO0FBQ0EsT0FBT0MsR0FBUCxNQUFnQixZQUFoQjtBQUNBLE9BQU9DLE1BQVAsTUFBbUIscUJBQW5CO0FBRUEsT0FBT0MsR0FBUCxNQUFnQixxQkFBaEI7QUFDQSxPQUFPQyxHQUFQLE1BQWdCLHFCQUFoQjtBQUNBLE9BQU9DLE1BQVAsTUFBbUIsUUFBbkI7QUFDQSxTQUFTQyxVQUFULFFBQTJCLG1CQUEzQjtBQUNBLFNBQ0VDLFlBREYsRUFFRUMsVUFGRixFQUdFQyxXQUhGLEVBSUVDLFlBSkYsRUFLRUMsYUFMRixFQU1FQyxZQU5GLEVBT0VDLGNBUEYsRUFRRUMsY0FSRixRQVNPLG1CQVRQO0FBVUEsU0FBU0MsT0FBVCxFQUFrQkMsT0FBbEIsUUFBaUMsYUFBakM7QUFDQSxPQUFPQyxPQUFQLE1BQW9CLGFBQXBCO0FBQ0EsT0FBT0MsSUFBUCxNQUFpQixTQUFqQjtBQUNBLE9BQU9DLE1BQVAsTUFBbUIs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QUFZLEVBQUVHLFlBTGhCO0FBTUUsUUFBQSxRQUFRLEVBQUUsS0FBSzVILEtBQUwsQ0FBVzBNLFFBTnZCO0FBT0UsUUFBQSxZQUFZLEVBQUVqRCxZQVBoQjtBQVFFLFFBQUEsVUFBVSxFQUFFLEtBQUt6SixLQUFMLENBQVcyTSxVQVJ6QjtBQVNFLFFBQUEsWUFBWSxFQUFFLEtBQUszTSxLQUFMLENBQVc0TSxZQVQzQjtBQVVFLFFBQUEsUUFBUSxFQUFFLEtBQUs1TSxLQUFMLENBQVd1QixRQUFYLElBQXVCLE1BVm5DO0FBV0UsUUFBQSxXQUFXLEVBQUV3RyxlQVhmO0FBWUUsUUFBQSxVQUFVLG9CQUFPTCxTQUFQO0FBWlosUUF4S0osQ0FORixDQURGO0FBaU1EOzs7O0VBLzFCb0IxSixhOztBQWkyQnZCLGVBQWUrQixRQUFmIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7IFB1cmVDb21wb25lbnQsIFJlYWN0Tm9kZSB9IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgVGFibGUgZnJvbSBcIi4uLy4uL2Jhc2UvdGFibGVcIjtcclxuaW1wb3J0IFRyZWUgZnJvbSBcIi4uLy4uL2Jhc2UvdHJlZVwiO1xyXG5pbXBvcnQgRm9ybSBmcm9tIFwiLi4vLi4vYmFzZS9mb3JtXCI7XHJcbmltcG9ydCBCdXR0b24gZnJvbSBcIi4uLy4uL2Jhc2UvYnV0dG9uXCI7XHJcbmltcG9ydCBNb2RhbCBmcm9tIFwiLi4vLi4vYmFzZS9tb2RhbFwiO1xyXG5pbXBvcnQgUG9wb3ZlciBmcm9tIFwiLi4vLi4vYmFzZS9wb3BvdmVyXCI7XHJcbmltcG9ydCBtZXNzYWdlIGZyb20gXCIuLi8uLi9iYXNlL21lc3NhZ2VcIjtcclxuaW1wb3J0IEljb24gZnJvbSBcIi4uLy4uL2Jhc2UvY29tbW9uL0ljb25Gb250XCI7XHJcbmltcG9ydCB7IGljb25UeXBlIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50c1wiO1xyXG5pbXBvcnQgRWRpdG9yRm9ybSBmcm9tIFwiLi9Gb3JtXCI7XHJcbmltcG9ydCBjbHMgZnJvbSBcImNsYXNzbmFtZXNcIjtcclxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9pbmRleC5tb2R1bGUubGVzc1wiO1xyXG5pbXBvcnQgU3RvcmUsIHsgUGFnZVN0b3JlLCBTdG9yZVByb3BzIH0gZnJvbSBcIkBiai1uc2MvbXNuXCI7XHJcbmltcG9ydCBDb2wgZnJvbSBcIi4uLy4uL2Jhc2UvZ3JpZC9Db2xcIjtcclxuaW1wb3J0IFJvdyBmcm9tIFwiLi4vLi4vYmFzZS9ncmlkL1Jvd1wiO1xyXG5pbXBvcnQgbW9tZW50IGZyb20gXCJtb21lbnRcIjtcclxuaW1wb3J0IHsgaXNFbXB0eU9iaiB9IGZyb20gXCJAYmotbnNjL2Z1bmN0aW9uc1wiO1xyXG5pbXBvcnQge1xyXG4gIERvd25PdXRsaW5lZCxcclxuICBVcE91dGxpbmVkLFxyXG4gIEV5ZU91dGxpbmVkLFxyXG4gIEVkaXRPdXRsaW5lZCxcclxuICBSaWdodE91dGxpbmVkLFxyXG4gIFBsdXNPdXRsaW5lZCxcclxuICBSZWxvYWRPdXRsaW5lZCxcclxuICBTZWFyY2hPdXRsaW5lZCxcclxufSBmcm9tIFwiQGFudC1kZXNpZ24vaWNvbnNcIjtcclxuaW1wb3J0IHsgZ2V0TGVzcywgZ2V0Tm9kZSB9IGZyb20gXCIuLi8uLi91dGlsc1wiO1xyXG5pbXBvcnQgcmVxdWVzdCBmcm9tIFwibnNjLXJlcXVlc3RcIjtcclxuaW1wb3J0IG9taXQgZnJvbSBcIm9taXQuanNcIjtcclxuaW1wb3J0IGNvbmZpZyBmcm9tIFwiLi4vLi4vY29uZmlnXCI7XHJcbmltcG9ydCB7IGdldFN0b3JhZ2UgfSBmcm9tIFwiQGJqLW5zYy9mdW5jdGlvbnNcIjtcclxuaW1wb3J0IHsgSUZvcm1Qcm9wcyB9IGZyb20gXCIuLi8uLi9iYXNlL2Zvcm0vRm9ybVwiO1xyXG5pbnRlcmZhY2UgVGFibGVQcm9wcyB7XHJcbiAgYWN0aW9uQ29sdW1uPzogYm9vbGVhbjsgLy/mmK/lkKbmmL7npLrmk43kvZzliJdcclxuICBzdG9yZT86IFN0b3JlUHJvcHM7XHJcbiAgZmlsdGVyQ29sdW1uPzogYm9vbGVhbjsgLy/mmK/lkKbmmL7npLrov4fmu6TmjInpkq5cclxuICBzaG93Um93U2VsZWN0aW9uPzogYm9vbGVhbjsgLy/mmK/lkKbooajmoLzli77pgInliJdcclxuICBwYWdpbmF0aW9uPzogYm9vbGVhbjsgLy/mmK/lkKbmmL7npLrliIbpobVcclxuICBjb2x1bW5PcmRlcj86IGJvb2xlYW47IC8v5piv5ZCm5pi+56S66KGo5qC85bqP5YiXXHJcbiAgW3Byb3BzTmFtZTogc3RyaW5nXTogYW55O1xyXG59XHJcbmludGVyZmFjZSBUcmVlUHJvcHMge1xyXG4gIHN0b3JlPzogU3RvcmVQcm9wcztcclxuICBzaG93U2VhcmNoPzogYm9vbGVhbjsgLy/mmK/lkKbmmL7npLrmkJzntKLmoYZcclxuICBzZWFyY2hLZXk/OiBzdHJpbmc7IC8v5pCc57SidmFsdWXlr7nlupTnmoRrZXlcclxuICBzZWFyY2hGaWVsZD86IHN0cmluZzsgLy/mn6Xor6Llr7nlupTnmoRrZXlcclxuICB0aXRsZUFsaWFzPzogc3RyaW5nOyAvL+agkXRpdGxl5a+55bqU55qEa2V5LOm7mOiupHRpdGxlXHJcbiAgbm9kZVBvcnBzPzogb2JqZWN0O1xyXG4gIFtwcm9wc05hbWU6IHN0cmluZ106IGFueTtcclxufVxyXG5pbnRlcmZhY2UgRm9ybVByb3BzIGV4dGVuZHMgSUZvcm1Qcm9wcyB7fVxyXG5pbnRlcmZhY2UgTlNDQmFzZUJhZ2VQcm9wcyB7XHJcbiAgc2hvd1NlYXJjaD86IGJvb2xlYW47IC8v5piv5ZCm5pi+56S65aS06YOo5pCc57Si5qCPXHJcbiAgdGFibGVQcm9wcz86IFRhYmxlUHJvcHM7IC8v6KGo5qC85Y+C5pWwXHJcbiAgdHJlZVByb3BzPzogVHJlZVByb3BzOyAvL+W3puS+p+agkeWPguaVsFxyXG4gIHN1Ym1pdFBhcmFtcz86IE9iamVjdDsgLy/mt7vliqDlj4LmlbDvvIzpu5jorqRtb3Rob2Q6cG9zdO+8jCDlj4LmlbDpgJrov4dkYXRh5Lyg6YCSXHJcbiAgc3VibWl0VXJsPzogc3RyaW5nO1xyXG4gIG9uU3VibWl0PzogKHZhbHVlPzogYW55LCBsYWJlbD86IGFueSkgPT4gdm9pZDtcclxuICBjb2x1bW5zOiBBcnJheTxPYmplY3Q+O1xyXG4gIHNob3dMZWZ0PzogYm9vbGVhbjsgLy/mmK/lkKbmmL7npLrlt6bkvqfnm67lvZXmoJFcclxuICBzaG93VG9vbEJ1dHRvbj86IGJvb2xlYW47IC8v5piv5ZCm5pi+56S65oyJ6ZKu5qCPXHJcbiAgZWRpdG9yRm9ybT86IGJvb2xlYW47IC8v5piv5ZCm6ZyA6KaB6KGo5Y2V5Yqf6IO9ICwg5Li6ZmFsc2Ug57yW6L6R77yM5p+l55yL77yM5paw5aKe5Yqf6IO95Z2H5LiN5Y+v55SoXHJcbiAgZGVsZXRlVXJsPzogc3RyaW5nOyAvL+WIoOmZpHVybFxyXG4gIG9uRGVsZXRlPzogKHNlbGVjdGVkS2V5cz86IEFycmF5PGFueT4pID0+IHZvaWQ7IC8v5Yig6Zmk5Y+C5pWw77yM6buY6K6kbW90aG9kOnBvc3TvvIwg5Y+C5pWw6YCa6L+HaWRz5ou85o6l5Lyg6YCS57uZ5ZCO5Y+wXHJcbiAgZGVsZXRlUGFyYW1zPzogT2JqZWN0O1xyXG4gIGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlO1xyXG4gIG9uU2VhcmNoPzogKHZhbHVlPzogYW55KSA9PiB2b2lkO1xyXG4gIGluaXREYXRhPzogYW55OyAvL+WIneWni+WMluWbnuiwg+WHveaVsO+8jOWcqGNvbXBvbmVudERpZE1vdW505Lit6LCD55SoXHJcbiAgYnV0dG9ucz86IEFycmF5PHN0cmluZz47IC8v5oyJ6ZKu6ZuG5ZCIICBbJ2FkZCcsJ2RlbGV0ZScsJ3NlYXJjaCcsJ2VkaXRvciddXHJcbiAgb25TaG93Rm9ybT86ICh2YWx1ZT86IGFueSwgZWRpdG9yRmxhZz86IHN0cmluZykgPT4gdm9pZDsgLy/miZPlvIDooajljZXlm57osINcclxuICBvbkhpZGVGb3JtPzogKCkgPT4gdm9pZDsgLy/miZPlvIDooajljZXlm57osINcclxuICBvbkZvcm1DaGFuZ2U/OiAoY2hhbmdlZFZhbHVlcz86IGFueSwgYWxsVmFsdWVzPzogYW55KSA9PiB2b2lkOyAvL+ihqOWNlW9uQ2hhbmdl5Zue6LCDXHJcbiAgZm9ybVR5cGU/OiBcIm1vZGFsXCIgfCBcImRyYXdlclwiO1xyXG4gIGZvcm1DaGFuZ2VWYWxpZD86IGJvb2xlYW47IC8v6KGo5Y2V5qCh6aqMXHJcbiAgY2xhc3NOYW1lPzogYW55O1xyXG4gIGFjdGlvbkNvbHVtbnM/OiBBcnJheTxhbnk+O1xyXG4gIHRvb2xCdXR0b25Qb3NpdGlvbj86IFwicmlnaHRcIiB8IFwiYnV0dG9tXCI7XHJcbiAgcGFnZVRpdGxlPzogc3RyaW5nIHwgUmVhY3ROb2RlO1xyXG4gIGZvcm1Qcm9wcz86IEZvcm1Qcm9wcztcclxufVxyXG5cclxuY2xhc3MgQmFzZVBhZ2UgZXh0ZW5kcyBQdXJlQ29tcG9uZW50PE5TQ0Jhc2VCYWdlUHJvcHMsIGFueT4ge1xyXG4gIHRhYmxlUmVmID0gUmVhY3QuY3JlYXRlUmVmPGFueT4oKTtcclxuICB0cmVlUmVmID0gUmVhY3QuY3JlYXRlUmVmPGFueT4oKTtcclxuICBzZWFyY2hSZWYgPSBSZWFjdC5jcmVhdGVSZWY8YW55PigpO1xyXG4gIGVkaXRvclJlZiA9IFJlYWN0LmNyZWF0ZVJlZjxhbnk+KCk7XHJcbiAgZGF0ZUZvcm1hdCA9IHt9IGFzIGFueTtcclxuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XHJcbiAgICBzdXBlcihwcm9wcyk7XHJcbiAgICBsZXQgeyBzdG9yZVByZWZpeCB9ID0gY29uZmlnKCk7XHJcbiAgICBsZXQgdHlwZSA9IGdldFN0b3JhZ2UoXHJcbiAgICAgIHN0b3JlUHJlZml4ID8gc3RvcmVQcmVmaXggKyBcIi1cIiArIFwiZm9ybVR5cGVcIiA6IFwiZm9ybVR5cGVcIlxyXG4gICAgKTtcclxuICAgIHR5cGUgPSB0eXBlPy5jb250ZW50O1xyXG4gICAgbGV0IHNpemUgPSBnZXRTdG9yYWdlKFxyXG4gICAgICBzdG9yZVByZWZpeCA/IHN0b3JlUHJlZml4ICsgXCItXCIgKyBcInRhYmxlU2l6ZVwiIDogXCJ0YWJsZVNpemVcIlxyXG4gICAgKTtcclxuICAgIHNpemUgPSBzaXplPy5jb250ZW50O1xyXG4gICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgdHlwZTogXCJhZGRcIixcclxuICAgICAgc2VsZWN0ZWRSb3dLZXlzOiBbXSxcclxuICAgICAgc2VsZWN0ZWRSb3dEYXRhczogW10sXHJcbiAgICAgIHRyZWVTZWxlY3RlZEtleTogXCJcIixcclxuICAgICAgZXhwYW5kOiBmYWxzZSxcclxuICAgICAgZm9ybVR5cGU6IHR5cGUgfHwgXCJtb2RhbFwiLFxyXG4gICAgICB0YWJsZVNpemU6IHNpemUgfHwgXCJkZWZhdWx0XCIsXHJcbiAgICAgIHNlbGVjdGVkUm93S2V5c1N0b3JlOiB7fSxcclxuICAgICAgc2VsZWN0ZWRSb3dEYXRhc1N0b3JlOiB7fSxcclxuICAgICAgY3VycmVudFBhZ2U6IDEsXHJcbiAgICB9O1xyXG4gIH1cclxuICBjb21wb25lbnREaWRNb3VudCgpIHtcclxuICAgIGNvbnN0IHsgaW5pdERhdGEgfSA9IHRoaXMucHJvcHM7XHJcbiAgICBpbml0RGF0YSAmJiBpbml0RGF0YSgpO1xyXG4gIH1cclxuXHJcbiAgb25TZWxlY3QgPSAoY2hlY2tlZFRyZWVLZXlzOiBhbnkpID0+IHtcclxuICAgIGNvbnN0IHsgbmFtZSwgdXNlclR5cGUsIGFjY291bnQgfSA9IHRoaXMuc3RhdGU7XHJcbiAgICBjb25zdCB2YWx1ZSA9IHsgbmFtZSwgdXNlclR5cGUsIGFjY291bnQsIGRlcHRJZDogY2hlY2tlZFRyZWVLZXlzWzBdIH07XHJcbiAgICB0aGlzLnRhYmxlTG9hZCh2YWx1ZSk7XHJcbiAgfTtcclxuXHJcbiAgLy/mmL7npLrooajljZVcclxuICBzaG93Rm9ybSh2YWx1ZT86IGFueSwgZWRpdG9yZmxhZyA9IFwiYWRkXCIpIHtcclxuICAgIHRoaXMuZWRpdG9yUmVmLmN1cnJlbnQ/LnNob3codmFsdWUsIGVkaXRvcmZsYWcpO1xyXG4gIH1cclxuXHJcbiAgLy/lhbPpl63ooajljZVcclxuICBoaWRlRm9ybSgpIHtcclxuICAgIHRoaXMuZWRpdG9yUmVmLmN1cnJlbnQ/LmhpZGVGb3JtKCk7XHJcbiAgfVxyXG5cclxuICBzZXRMb2FkaW5nKGxvYWRpbmc6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuZWRpdG9yUmVmLmN1cnJlbnQ/LnNldExvYWRpbmcobG9hZGluZyk7XHJcbiAgfVxyXG5cclxuICAvL+aJuemHj+WIoOmZpFxyXG4gIG9uRGVsZXRlKCkge1xyXG4gICAgY29uc3QgeyBkZWxldGVVcmwsIG9uRGVsZXRlLCBkZWxldGVQYXJhbXMgfSA9IHRoaXMucHJvcHM7XHJcbiAgICBjb25zdCB7IHNlbGVjdGVkUm93S2V5cyB9ID0gdGhpcy5zdGF0ZTtcclxuICAgIGlmIChzZWxlY3RlZFJvd0tleXMubGVuZ3RoID09IDApIHtcclxuICAgICAgbWVzc2FnZS53YXJuaW5nKFwi6K+36YCJ5oup6KaB5Yig6Zmk55qE5pWw5o2u77yBXCIpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAob25EZWxldGUpIHtcclxuICAgICAgb25EZWxldGUgJiYgb25EZWxldGUoc2VsZWN0ZWRSb3dLZXlzKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKCFkZWxldGVVcmwpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwidXJs5LiN6IO95Li656m677yBXCIpO1xyXG4gICAgfVxyXG4gICAgTW9kYWwuY29uZmlybSh7XHJcbiAgICAgIHRpdGxlOiBcIuaYr+WQpuehruiupOWIoOmZpOaJgOmAiemhue+8n1wiLFxyXG4gICAgICBva1RleHQ6IFwi56Gu6K6kXCIsXHJcbiAgICAgIGNhbmNlbFRleHQ6IFwi5Y+W5raIXCIsXHJcbiAgICAgIG9uT2s6ICgpID0+IHtcclxuICAgICAgICBjb25zdCBkZWZhdWx0UGFyYW1zID0ge1xyXG4gICAgICAgICAgbWV0aG9kOiBcInBvc3RcIixcclxuICAgICAgICAgIHBhcmFtczogeyBpZHM6IHNlbGVjdGVkUm93S2V5cy5qb2luKCkgfSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGxldCByZXF1ZXN0UGFyYW1zID0ge30gYXMgYW55O1xyXG4gICAgICAgIGlmIChkZWZhdWx0UGFyYW1zKSB7XHJcbiAgICAgICAgICByZXF1ZXN0UGFyYW1zID0geyAuLi5kZWxldGVQYXJhbXMgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVxdWVzdFBhcmFtcyA9IHsgLi4uZGVmYXVsdFBhcmFtcyB9O1xyXG4gICAgICAgIHJlcXVlc3QoZGVsZXRlVXJsLCB7XHJcbiAgICAgICAgICAuLi5yZXF1ZXN0UGFyYW1zLFxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgICAudGhlbihmdW5jdGlvbiAocmVzOiBhbnkpIHtcclxuICAgICAgICAgICAgY29uc3QgeyBjb2RlIH0gPSByZXM7XHJcbiAgICAgICAgICAgIGlmIChjb2RlID09PSAyMDApIHtcclxuICAgICAgICAgICAgICBtZXNzYWdlLnN1Y2Nlc3MoXCLliKDpmaTmiJDlip/vvIFcIik7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgbWVzc2FnZS5lcnJvcihcIuWIoOmZpOWksei0pe+8gVwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIC5jYXRjaChmdW5jdGlvbiAoZXJyb3I6IGFueSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcImVycm9yXCIsIGVycm9yKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIHRhYmxlTG9hZChwYXJhbXM6IGFueSkge1xyXG4gICAgdGhpcy50YWJsZVJlZi5jdXJyZW50Py5zdG9yZS5sb2FkKHtcclxuICAgICAgcGFyYW1zOiBwYXJhbXMsXHJcbiAgICB9KTtcclxuICB9XHJcbiAgLy/mn6Xor6JcclxuICBvblNlYXJjaCgpIHtcclxuICAgIGNvbnN0IHsgb25TZWFyY2ggfSA9IHRoaXMucHJvcHM7XHJcbiAgICBjb25zdCBmcm9tVmFsdWUgPSB0aGlzLnNlYXJjaFJlZi5jdXJyZW50Py5nZXRGaWVsZHNWYWx1ZSgpO1xyXG4gICAgaWYgKG9uU2VhcmNoKSB7XHJcbiAgICAgIG9uU2VhcmNoKGZyb21WYWx1ZSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICghaXNFbXB0eU9iaih0aGlzLmRhdGVGb3JtYXQpKSB7XHJcbiAgICAgIGZvciAobGV0IGtleSBpbiB0aGlzLmRhdGVGb3JtYXQpIHtcclxuICAgICAgICBsZXQgb2xkZGF0YSA9IGZyb21WYWx1ZVtrZXldO1xyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9sZGRhdGEpKSB7XHJcbiAgICAgICAgICBmcm9tVmFsdWVba2V5XSA9IFtcclxuICAgICAgICAgICAgbW9tZW50KG9sZGRhdGFbMF0pLmZvcm1hdCh0aGlzLmRhdGVGb3JtYXRba2V5XSksXHJcbiAgICAgICAgICAgIG1vbWVudChvbGRkYXRhWzFdKS5mb3JtYXQodGhpcy5kYXRlRm9ybWF0W2tleV0pLFxyXG4gICAgICAgICAgXTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgZnJvbVZhbHVlW2tleV0gPSBtb21lbnQob2xkZGF0YSkuZm9ybWF0KHRoaXMuZGF0ZUZvcm1hdFtrZXldKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMudGFibGVMb2FkKGZyb21WYWx1ZSk7XHJcbiAgfVxyXG4gIC8v6KGo5qC86YeN5paw5Yqg6L29XHJcbiAgdGFibGVSZWxvYWQoYXV0b0xvYWQgPSB0cnVlKSB7XHJcbiAgICB0aGlzLnRhYmxlUmVmLmN1cnJlbnQ/LnN0b3JlLnJlbG9hZCh7XHJcbiAgICAgIGNhbGxiYWNrOiAocmVzKSA9PiB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgYXV0b0xvYWQgJiZcclxuICAgICAgICAgIHJlcz8uZGF0YT8ucmVjb3Jkcz8ubGVuZ3RoID09IDAgJiZcclxuICAgICAgICAgIHRoaXMuc3RhdGUuY3VycmVudFBhZ2UgIT09IDFcclxuICAgICAgICApIHtcclxuICAgICAgICAgIGNvbnN0IHNlYXJjaFZhbHVlcyA9IHRoaXMuZ2V0U2VhcmNoVmFsdWVzKCk7XHJcbiAgICAgICAgICB0aGlzLnRhYmxlTG9hZChzZWFyY2hWYWx1ZXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gIH1cclxuICBnZXRTZWxlY3RlZFJvd0tleXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zdGF0ZS5zZWxlY3RlZFJvd0tleXM7XHJcbiAgfVxyXG4gIGdldFNlbGVjdGVkUm93RGF0YXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zdGF0ZS5zZWxlY3RlZFJvd0RhdGFzO1xyXG4gIH1cclxuICByZXNldFNlbGVjdGVkUm93S2V5cygpIHtcclxuICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICBzZWxlY3RlZFJvd0tleXM6IFtdLFxyXG4gICAgICBzZWxlY3RlZFJvd0RhdGFzOiBbXSxcclxuICAgIH0pO1xyXG4gIH1cclxuICBzZXRTZWxlY3RlZFJvd0tleXMoZGF0YSkge1xyXG4gICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgIHNlbGVjdGVkUm93S2V5czogZGF0YSxcclxuICAgIH0pO1xyXG4gIH1cclxuICBzZXRTZWxlY3RlZFJvd0RhdGFzKGRhdGEpIHtcclxuICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICBzZWxlY3RlZFJvd0RhdGFzOiBkYXRhLFxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIGdldFNlYXJjaFZhbHVlcygpIHtcclxuICAgIGNvbnN0IGZyb21WYWx1ZSA9IHRoaXMuc2VhcmNoUmVmLmN1cnJlbnQ/LmdldEZpZWxkc1ZhbHVlKCk7XHJcbiAgICByZXR1cm4gZnJvbVZhbHVlO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q2hpbGRyZW5EYXRhKGRhdGEsIGtleXMgPSBbXSkge1xyXG4gICAgY29uc3QgeyB0YWJsZVByb3BzIH0gPSB0aGlzLnByb3BzO1xyXG4gICAgY29uc3QgeyByb3dLZXkgPSBcImlkXCIgfSA9IHRhYmxlUHJvcHM7XHJcbiAgICBsZXQgcmVzS2V5ID0gW107XHJcbiAgICBpZiAoZGF0YS5jaGlsZE5vZGVzKSB7XHJcbiAgICAgIGNvbnN0IGNoaWxkcmVuID0gZGF0YS5jaGlsZE5vZGVzO1xyXG4gICAgICBjaGlsZHJlbi5tYXAoKGl0ZW0sIGluZGV4KSA9PiB7XHJcbiAgICAgICAgaWYgKGl0ZW0uY2hpbGROb2Rlcykge1xyXG4gICAgICAgICAgdGhpcy5nZXRDaGlsZHJlbkRhdGEoaXRlbS5jaGlsZE5vZGVzLCBrZXlzKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmVzS2V5ID0gWy4uLmtleXMsIGl0ZW1bcm93S2V5XV07XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJlc0tleSA9IFsuLi5rZXlzLCBkYXRhW3Jvd0tleV1dO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc0tleTtcclxuICB9XHJcblxyXG4gIHJlbmRlclRvb2xCdXR0b25zKHRvb2xidXR0b25zOiBhbnksIG1hcmdpbmZsYWcgPSBmYWxzZSkge1xyXG4gICAgY29uc3QgZmxhZyA9IHRvb2xidXR0b25zLmxlbmd0aCA+IDU7XHJcbiAgICBjb25zdCB7IHNob3dTZWFyY2ggPSB0cnVlIH0gPSB0aGlzLnByb3BzO1xyXG4gICAgY29uc3QgY29udGVudCA9IHRvb2xidXR0b25zLm1hcCgoaXRlbTogYW55LCBpbmRleDogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IHsgY2hpbGRyZW4sIHBhZ2VUeXBlLCBvbkNsaWNrLCBpY29uLCBzaG93LCAuLi5wYXJhbXMgfSA9IGl0ZW0ucHJvcHM7XHJcbiAgICAgIGlmIChpbmRleCA+IDQpIHtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBjbGFzc05hbWU9e2NscyhcclxuICAgICAgICAgICAgICBnZXRMZXNzKHN0eWxlcywgXCJlZGl0b3JcIiksXHJcbiAgICAgICAgICAgICAgZ2V0TGVzcyhzdHlsZXMsIFwiY29udGVudC1pdGVtXCIpXHJcbiAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgIGtleT17aW5kZXh9XHJcbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgICBvbkNsaWNrICYmIG9uQ2xpY2soKTtcclxuICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgey4uLnBhcmFtc31cclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJpY29uXCIpfT57aWNvbn08L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwidGV4dFwiKX0+e2NoaWxkcmVufTwvc3Bhbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgPGRpdlxyXG4gICAgICAgIGNsYXNzTmFtZT17Y2xzKGdldExlc3Moc3R5bGVzLCBcInRvb2wtYnV0dG9uc1wiKSwge1xyXG4gICAgICAgICAgW2dldExlc3Moc3R5bGVzLCBcInRvb2wtYnV0dG9ucy1tYXJnaW5cIildOiAhc2hvd1NlYXJjaCB8fCBtYXJnaW5mbGFnLFxyXG4gICAgICAgIH0pfVxyXG4gICAgICAgIHN0eWxlPXt7IG1hcmdpbkxlZnQ6IDAgfX1cclxuICAgICAgPlxyXG4gICAgICAgIHt0b29sYnV0dG9ucy5tYXAoKGl0ZW06IGFueSwgaW5kZXg6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKGZsYWcpIHtcclxuICAgICAgICAgICAgaWYgKGluZGV4IDwgNCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiA8ZGl2IGtleT17aW5kZXh9PntpdGVtfTwvZGl2PjtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChpbmRleCA9PSA0KSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgIDxQb3BvdmVyXHJcbiAgICAgICAgICAgICAgICAgIGNvbnRlbnQ9e2NvbnRlbnR9XHJcbiAgICAgICAgICAgICAgICAgIHRpdGxlPXtudWxsfVxyXG4gICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b21cIlxyXG4gICAgICAgICAgICAgICAgICB0cmlnZ2VyPXtbXCJjbGlja1wiXX1cclxuICAgICAgICAgICAgICAgICAga2V5PXtpbmRleH1cclxuICAgICAgICAgICAgICAgICAgLy8gb3ZlcmxheUNsYXNzTmFtZT17c3R5bGVzWydwb3AtYm94J119XHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIDxCdXR0b24gdHlwZT1cInByaW1hcnlcIj5cclxuICAgICAgICAgICAgICAgICAgICDmm7TlpJogPERvd25PdXRsaW5lZCAvPlxyXG4gICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvUG9wb3Zlcj5cclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gPGRpdiBrZXk9e2luZGV4fT57aXRlbX08L2Rpdj47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSl9XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgKTtcclxuICB9XHJcbiAgcmVuZGVyQ2xvdW1uQnV0dG9uKGNvbHVtbkJ1dHRvbnM6IGFueSwgcmVjb3JkOiBhbnkpIHtcclxuICAgIGNvbnN0IHsgZWRpdG9yRm9ybSA9IHRydWUsIGJ1dHRvbnMgPSBbXSB9ID0gdGhpcy5wcm9wcztcclxuICAgIGNvbnN0IG5ld0J1dHRvbnMgPSBbXTtcclxuICAgIGNvbHVtbkJ1dHRvbnMubWFwKChpdGVtOiBhbnksIGluZGV4OiBhbnkpID0+IHtcclxuICAgICAgY29uc3QgeyBjaGlsZHJlbiwgcGFnZVR5cGUsIG9uQ2xpY2ssIGljb24sIHJlY29yZFNob3csIC4uLnBhcmFtcyB9ID1cclxuICAgICAgICBpdGVtLnByb3BzO1xyXG4gICAgICBpZiAocmVjb3JkU2hvdykge1xyXG4gICAgICAgIGlmIChldmFsKHJlY29yZFNob3cpKSB7XHJcbiAgICAgICAgICBuZXdCdXR0b25zLnB1c2goaXRlbSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG5ld0J1dHRvbnMucHVzaChpdGVtKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBjb25zdCBmbGFnID0gbmV3QnV0dG9ucy5sZW5ndGggPiAzO1xyXG5cclxuICAgIGNvbnN0IGNvbnRlbnQgPSBuZXdCdXR0b25zLm1hcCgoaXRlbTogYW55LCBpbmRleDogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IHsgY2hpbGRyZW4sIHBhZ2VUeXBlLCBvbkNsaWNrLCByZWNvcmRTaG93LCBpY29uLCBzaG93LCAuLi5wYXJhbXMgfSA9XHJcbiAgICAgICAgaXRlbS5wcm9wcztcclxuICAgICAgaWYgKGluZGV4ID4gMSkge1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xzKFxyXG4gICAgICAgICAgICAgIGdldExlc3Moc3R5bGVzLCBcImVkaXRvclwiKSxcclxuICAgICAgICAgICAgICBnZXRMZXNzKHN0eWxlcywgXCJjb250ZW50LWl0ZW1cIilcclxuICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAga2V5PXtpbmRleH1cclxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgIG9uQ2xpY2sgJiYgb25DbGljayhyZWNvcmQpO1xyXG4gICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICB7Li4ucGFyYW1zfVxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcImljb25cIil9PntpY29ufTwvc3Bhbj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJ0ZXh0XCIpfT57Y2hpbGRyZW59PC9zcGFuPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIG5ld0J1dHRvbnMubWFwKChpdGVtOiBhbnksIGluZGV4OiBhbnkpID0+IHtcclxuICAgICAgY29uc3QgeyBjaGlsZHJlbiwgcGFnZVR5cGUsIG9uQ2xpY2ssIHJlY29yZFNob3csIGljb24sIC4uLnBhcmFtcyB9ID1cclxuICAgICAgICBpdGVtLnByb3BzO1xyXG4gICAgICBpZiAoZmxhZykge1xyXG4gICAgICAgIGlmIChpbmRleCA8IDIpIHtcclxuICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcImVkaXRvclwiKX1cclxuICAgICAgICAgICAgICBrZXk9e2luZGV4fVxyXG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgICAgIG9uQ2xpY2sgJiYgb25DbGljayhyZWNvcmQpO1xyXG4gICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgey4uLnBhcmFtc31cclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwiaWNvblwiKX0+e2ljb259PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwidGV4dFwiKX0+e2NoaWxkcmVufTwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoaW5kZXggPT0gMikge1xyXG4gICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgPFBvcG92ZXJcclxuICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b21cIlxyXG4gICAgICAgICAgICAgIHRpdGxlPXtudWxsfVxyXG4gICAgICAgICAgICAgIGNvbnRlbnQ9e2NvbnRlbnR9XHJcbiAgICAgICAgICAgICAgdHJpZ2dlcj17W1wiY2xpY2tcIl19XHJcbiAgICAgICAgICAgICAga2V5PXtpbmRleH1cclxuICAgICAgICAgICAgICAvLyBvdmVybGF5Q2xhc3NOYW1lPXtzdHlsZXNbJ3BvcCddfVxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcImVkaXRvclwiKX0+XHJcbiAgICAgICAgICAgICAgICAmbmJzcDsg5pu05aSaXHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcImljb25cIil9PlxyXG4gICAgICAgICAgICAgICAgICA8RG93bk91dGxpbmVkIC8+XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvUG9wb3Zlcj5cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcImVkaXRvclwiKX1cclxuICAgICAgICAgICAga2V5PXtpbmRleH1cclxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgIG9uQ2xpY2sgJiYgb25DbGljayhyZWNvcmQpO1xyXG4gICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICB7Li4ucGFyYW1zfVxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcImljb25cIil9PntpY29ufTwvc3Bhbj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJ0ZXh0XCIpfT57Y2hpbGRyZW59PC9zcGFuPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICAvLyB9XHJcbiAgfVxyXG4gIC8v5qCR54K55Ye75LqL5Lu2XHJcbiAgdHJlZVNlbGVjdChzZWxlY3RlZEtleXM6IGFueSwgeyBzZWxlY3RlZCwgc2VsZWN0ZWROb2RlcyB9OiBhbnkpIHtcclxuICAgIGxldCBrZXl3b3JkID0gXCJcIjtcclxuICAgIGNvbnN0IHsgc2VhcmNoS2V5ID0gXCJrZXlcIiwgc2VhcmNoRmllbGQgPSBcIlwiIH0gPSB0aGlzLnByb3BzLnRyZWVQcm9wcztcclxuICAgIGNvbnN0IHsgdHJlZVNlbGVjdGVkS2V5IH0gPSB0aGlzLnN0YXRlO1xyXG4gICAgaWYgKHNlbGVjdGVkKSB7XHJcbiAgICAgIGlmIChzZWxlY3RlZE5vZGVzWzBdLmlzTGVhZiB8fCAhc2VsZWN0ZWROb2Rlc1swXS5jaGlsZHJlbikge1xyXG4gICAgICAgIGlmIChzZWxlY3RlZEtleXNbMF0gIT09IHRyZWVTZWxlY3RlZEtleSkge1xyXG4gICAgICAgICAga2V5d29yZCA9IHNlbGVjdGVkTm9kZXNbMF0uZGF0YXJlZi5hdHRyaWJ1dGVbc2VhcmNoS2V5XTtcclxuICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICB0cmVlU2VsZWN0ZWRLZXk6IHNlbGVjdGVkS2V5c1swXSxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgdHJlZVNlbGVjdGVkS2V5OiBrZXl3b3JkLFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGNvbnN0IGZyb21WYWx1ZSA9IHRoaXMuc2VhcmNoUmVmLmN1cnJlbnQ/LmdldEZpZWxkc1ZhbHVlKCk7XHJcbiAgICBzZWFyY2hGaWVsZCAmJiB0aGlzLnRhYmxlTG9hZCh7IC4uLmZyb21WYWx1ZSwgW3NlYXJjaEZpZWxkXToga2V5d29yZCB9KTtcclxuICB9XHJcbiAgcmVzZXRTZWFyY2goKSB7XHJcbiAgICB0aGlzLnNlYXJjaFJlZi5jdXJyZW50Py5yZXNldEZpZWxkcygpO1xyXG4gIH1cclxuICBnZXRUZXh0KHByb3BzLCB0ZXh0KSB7XHJcbiAgICBsZXQgbmV3VGV4dCA9IHRleHQ7XHJcbiAgICBpZiAocHJvcHM/LmRhdGEgJiYgcHJvcHM/LmRhdGE/Lmxlbmd0aCA+IDApIHtcclxuICAgICAgbGV0IGRhdGEgPSBwcm9wcy5kYXRhO1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGE/Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKGRhdGFbaV0udmFsdWUgPT0gdGV4dCkge1xyXG4gICAgICAgICAgbmV3VGV4dCA9IGRhdGFbaV0ubGFiZWw7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmV3VGV4dDtcclxuICB9XHJcbiAgc2V0VGFibGVEYXRhKGRhdGEpIHtcclxuICAgIHRoaXMudGFibGVSZWYuY3VycmVudD8uc3RvcmUuc2V0RGF0YShkYXRhKTtcclxuICB9XHJcbiAgc2V0VHJlZURhdGEoZGF0YSkge1xyXG4gICAgdGhpcy50cmVlUmVmLmN1cnJlbnQ/LnN0b3JlLnNldERhdGEoZGF0YSk7XHJcbiAgfVxyXG4gIGdldFNlbGVjdGVkS2V5ID0gKHNlbGVjdGVkKSA9PiB7XHJcbiAgICBsZXQgcmVzID0gW107XHJcbiAgICBmb3IgKGxldCBrZXkgaW4gc2VsZWN0ZWQpIHtcclxuICAgICAgY29uc3Qga2V5cyA9IHNlbGVjdGVkW2tleV07XHJcbiAgICAgIGlmIChrZXlzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICByZXMgPSBbLi4ucmVzLCAuLi5rZXlzXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlcztcclxuICB9O1xyXG4gIHJlbmRlcigpIHtcclxuICAgIGNvbnN0IHsgc2VsZWN0ZWRSb3dLZXlzIH0gPSB0aGlzLnN0YXRlO1xyXG4gICAgY29uc3Qge1xyXG4gICAgICBjb2x1bW5zID0gW10sXHJcbiAgICAgIHNob3dTZWFyY2ggPSB0cnVlLFxyXG4gICAgICBjaGlsZHJlbixcclxuICAgICAgc3VibWl0VXJsID0gXCJcIixcclxuICAgICAgdGFibGVQcm9wcyA9IHt9LFxyXG4gICAgICB0cmVlUHJvcHMgPSB7fSxcclxuICAgICAgZm9ybVByb3BzID0ge30sXHJcbiAgICAgIHNob3dMZWZ0ID0gZmFsc2UsXHJcbiAgICAgIHN1Ym1pdFBhcmFtcyA9IHt9LFxyXG4gICAgICBzaG93VG9vbEJ1dHRvbiA9IHRydWUsXHJcbiAgICAgIGJ1dHRvbnMgPSBbXSxcclxuICAgICAgZWRpdG9yRm9ybSA9IHRydWUsXHJcbiAgICAgIG9uU2hvd0Zvcm0sXHJcbiAgICAgIGZvcm1DaGFuZ2VWYWxpZCA9IHRydWUsXHJcbiAgICAgIGNsYXNzTmFtZSxcclxuICAgICAgYWN0aW9uQ29sdW1ucyA9IFtdLFxyXG4gICAgICB0b29sQnV0dG9uUG9zaXRpb24gPSBcImJ1dHRvbVwiLFxyXG4gICAgfSA9IHRoaXMucHJvcHM7XHJcbiAgICBjb25zdCB7XHJcbiAgICAgIHN0b3JlID0ge30sXHJcbiAgICAgIGZpbHRlckNvbHVtbiA9IHRydWUsXHJcbiAgICAgIGFjdGlvbkNvbHVtbiA9IHRydWUsXHJcbiAgICAgIHNob3dSb3dTZWxlY3Rpb24gPSB0cnVlLFxyXG4gICAgICBjb2x1bW5PcmRlciA9IHRydWUsXHJcbiAgICAgIHJvd1NlbGVjdGlvbiA9IHt9LFxyXG4gICAgICBleHBhbmRhYmxlID0ge30sXHJcbiAgICAgIC4uLm90aGVydGFibGVQYXJhbXNcclxuICAgIH0gPSB0YWJsZVByb3BzO1xyXG5cclxuICAgIGNvbnN0IHtcclxuICAgICAgc3RvcmU6IHRyZWVTdG9yZSA9IHt9LFxyXG4gICAgICBzaG93U2VhcmNoOiB0cmVlU2VhcmNoID0gdHJ1ZSxcclxuICAgICAgdGl0bGVBbGlhcyA9IFwidGl0bGVcIixcclxuICAgICAgLi4ub3RoZXJ0cmVlUGFyYW1zXHJcbiAgICB9ID0gdHJlZVByb3BzO1xyXG5cclxuICAgIGxldCB0YWJsZVBhcmFtcyA9IHsgZmlsdGVyQ29sdW1uLCBzdG9yZSwgLi4ub3RoZXJ0YWJsZVBhcmFtcyB9IGFzIGFueTtcclxuICAgIGlmIChzaG93Um93U2VsZWN0aW9uKSB7XHJcbiAgICAgIHRhYmxlUGFyYW1zID0ge1xyXG4gICAgICAgIC4uLnRhYmxlUGFyYW1zLFxyXG4gICAgICAgIHJvd1NlbGVjdGlvbjoge1xyXG4gICAgICAgICAgc2VsZWN0ZWRSb3dLZXlzOiB0aGlzLnN0YXRlLnNlbGVjdGVkUm93S2V5cyxcclxuICAgICAgICAgIG9uQ2hhbmdlOiAoc2VsZWN0ZWRSb3dLZXlzLCBzZWxlY3RlZFJvd3MpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgeyBzZWxlY3RlZFJvd0tleXNTdG9yZSwgc2VsZWN0ZWRSb3dEYXRhc1N0b3JlLCBjdXJyZW50UGFnZSB9ID1cclxuICAgICAgICAgICAgICB0aGlzLnN0YXRlO1xyXG4gICAgICAgICAgICBjb25zdCBuZXdSb3dLZXlzU3RvcmUgPSB7XHJcbiAgICAgICAgICAgICAgLi4uc2VsZWN0ZWRSb3dLZXlzU3RvcmUsXHJcbiAgICAgICAgICAgICAgW2N1cnJlbnRQYWdlXTogc2VsZWN0ZWRSb3dLZXlzLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBjb25zdCBuZXdSb3dEYXRhc1N0b3JlID0ge1xyXG4gICAgICAgICAgICAgIC4uLnNlbGVjdGVkUm93RGF0YXNTdG9yZSxcclxuICAgICAgICAgICAgICBbY3VycmVudFBhZ2VdOiBzZWxlY3RlZFJvd3MsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICAgIHNlbGVjdGVkUm93S2V5czogdGhpcy5nZXRTZWxlY3RlZEtleShuZXdSb3dLZXlzU3RvcmUpLFxyXG4gICAgICAgICAgICAgIHNlbGVjdGVkUm93RGF0YXM6IHRoaXMuZ2V0U2VsZWN0ZWRLZXkobmV3Um93RGF0YXNTdG9yZSksXHJcbiAgICAgICAgICAgICAgc2VsZWN0ZWRSb3dLZXlzU3RvcmU6IHtcclxuICAgICAgICAgICAgICAgIC4uLm5ld1Jvd0tleXNTdG9yZSxcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIHNlbGVjdGVkUm93RGF0YXNTdG9yZToge1xyXG4gICAgICAgICAgICAgICAgLi4ubmV3Um93RGF0YXNTdG9yZSxcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgY29sdW1uV2lkdGg6IDQwLFxyXG4gICAgICAgICAgY2hlY2tTdHJpY3RseTogZmFsc2UsXHJcbiAgICAgICAgICAuLi5yb3dTZWxlY3Rpb24sXHJcbiAgICAgICAgfSxcclxuICAgICAgfTtcclxuICAgIH1cclxuICAgIGxldCB0YWJsZUNvbHVtbjogYW55W10gPSBbXTtcclxuICAgIGNvbnN0IHNlYXJjaEZvcm1zOiBhbnkgPSBbXTtcclxuICAgIGNvbnN0IGVkaXRvckZvcm1zOiBhbnkgPSBbXTtcclxuICAgIGNvbnN0IGRlZmF1bHRWYWx1ZTogYW55ID0ge307XHJcbiAgICBjb25zdCBjb2x1bW5CdXR0b25zOiBhbnkgPSBbXTtcclxuICAgIGNvbHVtbnMubWFwKChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgbGV0IHRlbXAgPSB7IC4uLml0ZW0gfTtcclxuICAgICAgaWYgKHRlbXAuc2VhcmNoKSB7XHJcbiAgICAgICAgc2VhcmNoRm9ybXMucHVzaCh7XHJcbiAgICAgICAgICBuYW1lOiB0ZW1wLmZpZWxkIHx8IHRlbXAuZGF0YUluZGV4LFxyXG4gICAgICAgICAgbGFiZWw6IHRlbXAudGl0bGUsXHJcbiAgICAgICAgICB0eXBlOiB0ZW1wLnR5cGUsXHJcbiAgICAgICAgICBwcm9wczogdGVtcC5wcm9wcyxcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICBkZWxldGUgdGVtcC5zZWFyY2g7XHJcbiAgICAgIHRlbXAuZWRpdG9yICE9PSBmYWxzZSAmJlxyXG4gICAgICAgIGVkaXRvckZvcm1zLnB1c2goe1xyXG4gICAgICAgICAgbmFtZTogdGVtcC5maWVsZCB8fCB0ZW1wLmRhdGFJbmRleCxcclxuICAgICAgICAgIGxhYmVsOiB0ZW1wLnRpdGxlLFxyXG4gICAgICAgICAgcnVsZXM6IHRlbXAucnVsZXMgPyB0ZW1wLnJ1bGVzIDogW10sXHJcbiAgICAgICAgICB0eXBlOiB0ZW1wLnR5cGUsXHJcbiAgICAgICAgICBzcGFuOiB0ZW1wLnNwYW4sXHJcbiAgICAgICAgICBkaWN0TmFtZTogdGVtcC5kaWN0TmFtZSxcclxuICAgICAgICAgIHByb3BzOiBvbWl0KHsgLi4udGVtcC5wcm9wcyB9LCBbXCJkZWZhdWx0VmFsdWVcIiwgXCJ2YWx1ZVwiXSksXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIGlmIChcclxuICAgICAgICB0ZW1wLnByb3BzPy5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCAmJlxyXG4gICAgICAgIHRlbXAucHJvcHM/LmRlZmF1bHRWYWx1ZSAhPT0gbnVsbFxyXG4gICAgICApIHtcclxuICAgICAgICBjb25zdCBuYW1lID0gdGVtcC5maWVsZCB8fCB0ZW1wLmRhdGFJbmRleDtcclxuICAgICAgICBkZWZhdWx0VmFsdWVbbmFtZV0gPSB0ZW1wLnByb3BzPy5kZWZhdWx0VmFsdWU7XHJcbiAgICAgIH1cclxuICAgICAgZGVsZXRlIHRlbXAucnVsZXM7XHJcbiAgICAgIGRlbGV0ZSB0ZW1wLnNwYW47XHJcbiAgICAgIGlmICh0ZW1wLmNvbHVtblNlYXJjaCkge1xyXG4gICAgICAgIHRlbXAuZmlsdGVyUHJvcHMgPSB7XHJcbiAgICAgICAgICB0eXBlOiB0ZW1wLnR5cGUsXHJcbiAgICAgICAgICBwcm9wczogdGVtcC5wcm9wcyxcclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcbiAgICAgIGRlbGV0ZSB0ZW1wLnR5cGU7XHJcbiAgICAgIGxldCB0ZW1wUHJvcCA9IHsgLi4udGVtcC5wcm9wcyB9O1xyXG4gICAgICBpZiAodGVtcC5zdHlsZSkge1xyXG4gICAgICAgIHRlbXAgPSB7XHJcbiAgICAgICAgICByZW5kZXI6ICh0ZXh0OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICA8PlxyXG4gICAgICAgICAgICAgICAge3RleHQgIT09IFwiXCIgJiYgdGV4dCAhPT0gbnVsbCAmJiB0ZXh0ICE9PSB1bmRlZmluZWQgJiYgKFxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcImNvbC1iYWNrXCIpfT5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcImNvbC10ZXh0XCIpfT5cclxuICAgICAgICAgICAgICAgICAgICAgIHt0aGlzLmdldFRleHQodGVtcFByb3AsIHRleHQpfVxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgICA8Lz5cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBlbGxpcHNpczogdHJ1ZSxcclxuICAgICAgICAgIC4uLnRlbXAsXHJcbiAgICAgICAgfTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0ZW1wID0ge1xyXG4gICAgICAgICAgcmVuZGVyOiAodGV4dDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiA8Pnt0aGlzLmdldFRleHQodGVtcFByb3AsIHRleHQpfTwvPjtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICAuLi50ZW1wLFxyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuICAgICAgZGVsZXRlIHRlbXAucHJvcHM7XHJcbiAgICAgIGlmICh0ZW1wPy5jb2x1bW5TaG93ICE9PSBmYWxzZSkgdGFibGVDb2x1bW4ucHVzaCh0ZW1wKTtcclxuICAgIH0pO1xyXG4gICAgY29uc3Qgc2VsZkJ1dHRvbnM6IGFueSA9IFtdO1xyXG5cclxuICAgIGlmIChlZGl0b3JGb3JtID09IHRydWUpIHtcclxuICAgICAgaWYgKGJ1dHRvbnMuaW5kZXhPZihcInNlYXJjaFwiKSA+IC0xKSB7XHJcbiAgICAgICAgY29sdW1uQnV0dG9ucy5wdXNoKFxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcImVkaXRvclwiKX1cclxuICAgICAgICAgICAgb25DbGljaz17KHJlY29yZDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKG9uU2hvd0Zvcm0pIHtcclxuICAgICAgICAgICAgICAgIG9uU2hvd0Zvcm0ocmVjb3JkLmF0dHJpYnV0ZSB8fCByZWNvcmQsIFwiZGV0YWlsXCIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB0aGlzLnNob3dGb3JtKHJlY29yZC5hdHRyaWJ1dGUgfHwgcmVjb3JkLCBcImRldGFpbFwiKTtcclxuICAgICAgICAgICAgfX1cclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJpY29uXCIpfT5cclxuICAgICAgICAgICAgICA8RXllT3V0bGluZWQgLz5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcInRleHRcIil9Puafpeecizwvc3Bhbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGJ1dHRvbnMuaW5kZXhPZihcImVkaXRvclwiKSA+IC0xKSB7XHJcbiAgICAgICAgY29sdW1uQnV0dG9ucy5wdXNoKFxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcImVkaXRvclwiKX1cclxuICAgICAgICAgICAgb25DbGljaz17KHJlY29yZDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKG9uU2hvd0Zvcm0pIHtcclxuICAgICAgICAgICAgICAgIG9uU2hvd0Zvcm0ocmVjb3JkLmF0dHJpYnV0ZSB8fCByZWNvcmQsIFwiZWRpdG9yXCIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB0aGlzLnNob3dGb3JtKHJlY29yZC5hdHRyaWJ1dGUgfHwgcmVjb3JkLCBcImVkaXRvclwiKTtcclxuICAgICAgICAgICAgfX1cclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJpY29uXCIpfT5cclxuICAgICAgICAgICAgICA8RWRpdE91dGxpbmVkIC8+XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJ0ZXh0XCIpfT7nvJbovpE8L3NwYW4+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoYnV0dG9ucy5pbmRleE9mKFwiYWRkXCIpID4gLTEpIHtcclxuICAgICAgc2VsZkJ1dHRvbnMucHVzaChcclxuICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICB0eXBlPXtcInByaW1hcnlcIn1cclxuICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgeyBvblNob3dGb3JtIH0gPSB0aGlzLnByb3BzO1xyXG4gICAgICAgICAgICBpZiAob25TaG93Rm9ybSkge1xyXG4gICAgICAgICAgICAgIG9uU2hvd0Zvcm0oKTtcclxuICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5zaG93Rm9ybSgpO1xyXG4gICAgICAgICAgfX1cclxuICAgICAgICAgIGljb249ezxQbHVzT3V0bGluZWQgLz59XHJcbiAgICAgICAgPlxyXG4gICAgICAgICAg5re75YqgXHJcbiAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICBpZiAoYnV0dG9ucy5pbmRleE9mKFwiZGVsZXRlXCIpID4gLTEpIHtcclxuICAgICAgc2VsZkJ1dHRvbnMucHVzaChcclxuICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICAvLyB0eXBlPXtcInByaW1hcnlcIn1cclxuICAgICAgICAgIG9uQ2xpY2s9e3RoaXMub25EZWxldGUuYmluZCh0aGlzKX1cclxuICAgICAgICAgIGljb249ezxJY29uIHR5cGU9e2ljb25UeXBlLmRlbGV0ZTN9IC8+fVxyXG4gICAgICAgICAgZGFuZ2VyXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAg5Yig6ZmkXHJcbiAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHtcclxuICAgICAgY2hpbGRyZW4ubWFwKChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoaXRlbT8ucHJvcHM/LnBhZ2VUeXBlID09IFwidG9vbEJ1dHRvblwiKSB7XHJcbiAgICAgICAgICBzZWxmQnV0dG9ucy5wdXNoKGl0ZW0pO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbT8ucHJvcHM/LnBhZ2VUeXBlID09IFwiY2xvdW1uQnV0dG9uXCIpIHtcclxuICAgICAgICAgIGNvbHVtbkJ1dHRvbnMucHVzaChpdGVtKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIGlmIChjaGlsZHJlbikge1xyXG4gICAgICBjb25zdCB7IHByb3BzIH06IGFueSA9IGNoaWxkcmVuO1xyXG4gICAgICBpZiAocHJvcHM/LnBhZ2VUeXBlID09IFwidG9vbEJ1dHRvblwiKSB7XHJcbiAgICAgICAgc2VsZkJ1dHRvbnMucHVzaChjaGlsZHJlbik7XHJcbiAgICAgIH0gZWxzZSBpZiAocHJvcHM/LnBhZ2VUeXBlID09IFwiY2xvdW1uQnV0dG9uXCIpIHtcclxuICAgICAgICBjb2x1bW5CdXR0b25zLnB1c2goY2hpbGRyZW4pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYWN0aW9uQ29sdW1uICYmXHJcbiAgICAgIHRhYmxlQ29sdW1uLnB1c2goe1xyXG4gICAgICAgIHRpdGxlOiBcIuaTjeS9nFwiLFxyXG4gICAgICAgIGRhdGFJbmRleDogXCJhY3Rpb25cIixcclxuICAgICAgICBhbGlnbjogXCJjZW50ZXJcIixcclxuICAgICAgICB3aWR0aDogMjUwLFxyXG4gICAgICAgIGZpeGVkOiBcInJpZ2h0XCIsXHJcbiAgICAgICAgZWxsaXBzaXM6IHRydWUsXHJcbiAgICAgICAgcmVuZGVyOiAodGV4dDogYW55LCByZWNvcmQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcImFjdGlvblwiKX0+XHJcbiAgICAgICAgICAgICAge3RoaXMucmVuZGVyQ2xvdW1uQnV0dG9uKGNvbHVtbkJ1dHRvbnMsIHJlY29yZCl9XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICAgIGNvbnN0IGhlYWRlckNvdW50ID0gdG9vbEJ1dHRvblBvc2l0aW9uID09IFwicmlnaHRcIiA/IDEgOiAyO1xyXG4gICAgaWYgKGNvbHVtbk9yZGVyKVxyXG4gICAgICB0YWJsZUNvbHVtbiA9IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICB0aXRsZTogXCIjXCIsXHJcbiAgICAgICAgICB3aWR0aDogMzAsXHJcbiAgICAgICAgICBhbGlnbjogXCJjZW50ZXJcIixcclxuICAgICAgICAgIHJlbmRlcjogKHRleHQsIHJlYWNvcmQsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiA8PntpbmRleCArIDF9PC8+O1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIC4uLnRhYmxlQ29sdW1uLFxyXG4gICAgICBdO1xyXG4gICAgaWYgKHRhYmxlUHJvcHMucGFnaW5hdGlvbiAhPT0gZmFsc2UpIHtcclxuICAgICAgLy8gc2Nyb2xsPXt7IHg6IFwibWF4LWNvbnRlbnRcIiwgeTogXCIyNXZ3XCIgfX1cclxuICAgICAgdGFibGVQYXJhbXMgPSB7XHJcbiAgICAgICAgc2Nyb2xsOiB7IHg6IFwibWF4LWNvbnRlbnRcIiwgeTogdGhpcy5wcm9wcy5wYWdlVGl0bGUgPyBcIjIwdndcIiA6IFwiMjV2d1wiIH0sXHJcbiAgICAgICAgLi4udGFibGVQYXJhbXMsXHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xzKGdldExlc3Moc3R5bGVzLCBcInBhZ2VcIiksIGNsYXNzTmFtZSl9PlxyXG4gICAgICAgIHt0aGlzLnByb3BzLnBhZ2VUaXRsZSAmJiAoXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xzKGdldExlc3Moc3R5bGVzLCBcInBhZ2UtdGl0bGVcIiksIGNsYXNzTmFtZSl9PlxyXG4gICAgICAgICAgICB7dGhpcy5wcm9wcy5wYWdlVGl0bGV9XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICApfVxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xzKGdldExlc3Moc3R5bGVzLCBcInBhZ2UtcGFuZVwiKSwgY2xhc3NOYW1lKX1cclxuICAgICAgICAgIHN0eWxlPXt7IGRpc3BsYXk6IFwiZmxleFwiIH19XHJcbiAgICAgICAgPlxyXG4gICAgICAgICAge3Nob3dMZWZ0ICYmIChcclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcImxlZnRcIil9PlxyXG4gICAgICAgICAgICAgIDxUcmVlXHJcbiAgICAgICAgICAgICAgICBzdG9yZT17eyAuLi50cmVlU3RvcmUgfX1cclxuICAgICAgICAgICAgICAgIHNob3dJY29uPXtmYWxzZX1cclxuICAgICAgICAgICAgICAgIGNoZWNrYWJsZT17ZmFsc2V9XHJcbiAgICAgICAgICAgICAgICBzZWFyY2hhYmxlPXt0cmVlU2VhcmNofVxyXG4gICAgICAgICAgICAgICAgb25TZWxlY3Q9e3RoaXMudHJlZVNlbGVjdC5iaW5kKHRoaXMpfVxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRLZXlzPXtbdGhpcy5zdGF0ZS50cmVlU2VsZWN0ZWRLZXldfVxyXG4gICAgICAgICAgICAgICAgdGl0bGVBbGlhcz17dGl0bGVBbGlhc31cclxuICAgICAgICAgICAgICAgIHsuLi5vdGhlcnRyZWVQYXJhbXN9XHJcbiAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICApfVxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBjbGFzc05hbWU9e2NscyhnZXRMZXNzKHN0eWxlcywgXCJyaWdodFwiKSwge1xyXG4gICAgICAgICAgICAgIFtnZXRMZXNzKHN0eWxlcywgXCJuby1sZWZ0LXJpZ2h0XCIpXTogIXNob3dMZWZ0LFxyXG4gICAgICAgICAgICB9KX1cclxuICAgICAgICAgID5cclxuICAgICAgICAgICAge3Nob3dTZWFyY2ggJiYgKFxyXG4gICAgICAgICAgICAgIDxSb3cgZ3V0dGVyPXsyNH0gd3JhcD5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJoZWFkZXJcIil9PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xzKGdldExlc3Moc3R5bGVzLCBcImZvcm1cIikpfT5cclxuICAgICAgICAgICAgICAgICAgICB7LyogPFJvdyBndXR0ZXI9ezI0fSB3cmFwIHN0eWxlPXt7bWFyZ2luOjB9fT4gKi99XHJcbiAgICAgICAgICAgICAgICAgICAgPEZvcm1cclxuICAgICAgICAgICAgICAgICAgICAgIHJlZj17dGhpcy5zZWFyY2hSZWZ9XHJcbiAgICAgICAgICAgICAgICAgICAgICBsYWJlbENvbD17e319XHJcbiAgICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ29sPXt7fX1cclxuICAgICAgICAgICAgICAgICAgICAgIGxheW91dD1cImlubGluZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17eyB3aWR0aDogXCIxMDAlXCIgfX1cclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7c2VhcmNoRm9ybXMubWFwKChpdGVtOiBhbnksIGluZGV4OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbVByb3BzID0gaXRlbS5wcm9wcyB8fCB7fTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW1Qcm9wcy52YWx1ZUZvcm1hdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZUZvcm1hdFtpdGVtLm5hbWVdID0gaXRlbVByb3BzLnZhbHVlRm9ybWF0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA+IGhlYWRlckNvdW50ICYmICF0aGlzLnN0YXRlLmV4cGFuZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgYWxsb3dDaGFycyA9IGl0ZW0/LnByb3BzPy5hbGxvd0NoYXJzIHx8IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcHJvcHMgPSB7IC4uLml0ZW1Qcm9wcyB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWl0ZW0udHlwZSB8fCBpdGVtLnR5cGUgPT0gXCJJbnB1dFwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcHMuYWxsb3dDaGFycyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8Q29sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZD17eyBzcGFuOiAxMiB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc209e3sgc3BhbjogMjQgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxnPXt7IHNwYW46IDYgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleT17aW5kZXh9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17eyBwYWRkaW5nUmlnaHQ6IDAgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rm9ybS5JdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsPXtpdGVtLmxhYmVsfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPXtpdGVtLm5hbWV9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93Q2hhcnM9e2FsbG93Q2hhcnN9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtnZXROb2RlKGl0ZW0udHlwZSwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLnByb3BzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBg6K+36L6T5YWlJHtpdGVtLmxhYmVsfWAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Gb3JtLkl0ZW0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Db2w+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICB9KX1cclxuICAgICAgICAgICAgICAgICAgICAgIDxDb2xcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWQ9e3sgc3BhbjogMTIgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgc209e3sgc3BhbjogMjQgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgbGc9e3sgc3BhbjogdG9vbEJ1dHRvblBvc2l0aW9uID09IFwicmlnaHRcIiA/IDEyIDogNiB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17eyBwYWRkaW5nUmlnaHQ6IDAgfX1cclxuICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwic2VhcmNoLWJ1dHRvbnNcIil9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3sgbWFyZ2luVG9wOiAwIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPXtcInByaW1hcnlcIn1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e3RoaXMub25TZWFyY2guYmluZCh0aGlzKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb249ezxTZWFyY2hPdXRsaW5lZCAvPn1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICDmn6Xor6JcclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPXtcInByaW1hcnlcIn1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e3RoaXMucmVzZXRTZWFyY2guYmluZCh0aGlzKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb249ezxSZWxvYWRPdXRsaW5lZCAvPn1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICDph43nva5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB7c2hvd1Rvb2xCdXR0b24gJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xCdXR0b25Qb3NpdGlvbiA9PSBcInJpZ2h0XCIgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyVG9vbEJ1dHRvbnMoc2VsZkJ1dHRvbnMpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtzZWFyY2hGb3Jtcy5sZW5ndGggPiAzICYmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJhX3N0eWxlXCIpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBleHBhbmQgfSA9IHRoaXMuc3RhdGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBhbmQ6ICFleHBhbmQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt0aGlzLnN0YXRlLmV4cGFuZCA/IFwi5pS26LW3XCIgOiBcIuWxleW8gFwifVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dGhpcy5zdGF0ZS5leHBhbmQgPyAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFVwT3V0bGluZWQgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSA6IChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RG93bk91dGxpbmVkIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICApfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvQ29sPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvRm9ybT5cclxuICAgICAgICAgICAgICAgICAgICB7LyogPC9Sb3c+ICovfVxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvUm93PlxyXG4gICAgICAgICAgICApfVxyXG5cclxuICAgICAgICAgICAge3Nob3dUb29sQnV0dG9uICYmXHJcbiAgICAgICAgICAgICAgdG9vbEJ1dHRvblBvc2l0aW9uID09IFwiYnV0dG9tXCIgJiZcclxuICAgICAgICAgICAgICB0aGlzLnJlbmRlclRvb2xCdXR0b25zKHNlbGZCdXR0b25zLCBzZWFyY2hGb3Jtcy5sZW5ndGggPT0gMCl9XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjbHMoZ2V0TGVzcyhzdHlsZXMsIFwidGFibGVcIikpfT5cclxuICAgICAgICAgICAgICA8VGFibGVcclxuICAgICAgICAgICAgICAgIHJlZj17dGhpcy50YWJsZVJlZn1cclxuICAgICAgICAgICAgICAgIGNvbHVtbnM9e3RhYmxlQ29sdW1ufVxyXG4gICAgICAgICAgICAgICAgZXhwYW5kYWJsZT17e1xyXG4gICAgICAgICAgICAgICAgICBleHBhbmRJY29uOiAoeyBleHBhbmRlZCwgb25FeHBhbmQsIHJlY29yZCB9KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgICAgICAgIDw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtleHBhbmRlZCA/IChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8RG93bk91dGxpbmVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoZSkgPT4gb25FeHBhbmQocmVjb3JkLCBlKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwiZXhwYW5kLWljb25cIil9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgKSA6IChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICByZWNvcmQuY2hpbGROb2RlcyAmJiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8UmlnaHRPdXRsaW5lZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoZSkgPT4gb25FeHBhbmQocmVjb3JkLCBlKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJleHBhbmQtaWNvblwiKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApfVxyXG4gICAgICAgICAgICAgICAgICAgICAgPC8+XHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgLi4uZXhwYW5kYWJsZSxcclxuICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICBjb2x1bW5PcmRlcj17dHJ1ZX1cclxuICAgICAgICAgICAgICAgIGJvcmRlcmVkPXt0cnVlfVxyXG4gICAgICAgICAgICAgICAgLy8gc2l6ZT17dGhpcy5zdGF0ZS50YWJsZVNpemV9XHJcbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17KHBhZ2luYXRpb24pID0+IHtcclxuICAgICAgICAgICAgICAgICAgY29uc3QgeyBjdXJyZW50UGFnZSB9ID0gdGhpcy5zdGF0ZTtcclxuICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRQYWdlICE9PSBwYWdpbmF0aW9uLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRQYWdlOiBwYWdpbmF0aW9uLmN1cnJlbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICB7Li4udGFibGVQYXJhbXN9XHJcbiAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIHtlZGl0b3JGb3JtICYmIChcclxuICAgICAgICAgICAgPEVkaXRvckZvcm1cclxuICAgICAgICAgICAgICByZWY9e3RoaXMuZWRpdG9yUmVmfVxyXG4gICAgICAgICAgICAgIGNhbGxCYWNrPXt0aGlzLnRhYmxlUmVsb2FkLmJpbmQodGhpcyl9XHJcbiAgICAgICAgICAgICAgZm9ybVByb3BzPXtlZGl0b3JGb3Jtc31cclxuICAgICAgICAgICAgICBzdWJtaXRVcmw9e3N1Ym1pdFVybH1cclxuICAgICAgICAgICAgICBzdWJtaXRQYXJhbXM9e3N1Ym1pdFBhcmFtc31cclxuICAgICAgICAgICAgICBvblN1Ym1pdD17dGhpcy5wcm9wcy5vblN1Ym1pdH1cclxuICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU9e2RlZmF1bHRWYWx1ZX1cclxuICAgICAgICAgICAgICBvbkhpZGVGb3JtPXt0aGlzLnByb3BzLm9uSGlkZUZvcm19XHJcbiAgICAgICAgICAgICAgb25Gb3JtQ2hhbmdlPXt0aGlzLnByb3BzLm9uRm9ybUNoYW5nZX1cclxuICAgICAgICAgICAgICBmb3JtVHlwZT17dGhpcy5wcm9wcy5mb3JtVHlwZSB8fCBcImF1dG9cIn1cclxuICAgICAgICAgICAgICBjaGFuZ2VWYWxpZD17Zm9ybUNoYW5nZVZhbGlkfVxyXG4gICAgICAgICAgICAgIG90aGVyUHJvcHM9e3sgLi4uZm9ybVByb3BzIH19XHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICApfVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICk7XHJcbiAgfVxyXG59XHJcbmV4cG9ydCBkZWZhdWx0IEJhc2VQYWdlO1xyXG4iXX0=
|