@hotstaq/admin-panel 0.3.4 → 0.3.5
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/.vscode/settings.json +5 -0
- package/build/components/admin-edit.d.ts +2 -2
- package/build/components/admin-edit.d.ts.map +1 -1
- package/build/components/admin-edit.js +17 -4
- package/build/components/admin-edit.js.map +1 -1
- package/build/components/admin-table.d.ts +9 -0
- package/build/components/admin-table.d.ts.map +1 -1
- package/build/components/admin-table.js +8 -0
- package/build/components/admin-table.js.map +1 -1
- package/build-web/AdminPanelComponents.js +2 -2
- package/build-web/AdminPanelWeb_AppAPI.js +37 -60
- package/package.json +2 -2
- package/src/components/admin-edit.ts +22 -4
- package/src/components/admin-table.ts +20 -0
|
@@ -102,7 +102,7 @@ export declare class AdminEdit extends HotComponent {
|
|
|
102
102
|
/**
|
|
103
103
|
* Executes when the add button is clicked.
|
|
104
104
|
*/
|
|
105
|
-
addClicked(): Promise<void>;
|
|
105
|
+
addClicked(selectedFields?: any[]): Promise<void>;
|
|
106
106
|
/**
|
|
107
107
|
* The event that can be called when the edit button is clicked.
|
|
108
108
|
* This is called before the edit modal opens.
|
|
@@ -111,7 +111,7 @@ export declare class AdminEdit extends HotComponent {
|
|
|
111
111
|
/**
|
|
112
112
|
* Executes when the edit button is clicked.
|
|
113
113
|
*/
|
|
114
|
-
editClicked(): Promise<void>;
|
|
114
|
+
editClicked(selectedFields?: any[]): Promise<void>;
|
|
115
115
|
/**
|
|
116
116
|
* The event that can be called when the remove button is clicked.
|
|
117
117
|
* This is called before the remove modal opens.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin-edit.d.ts","sourceRoot":"","sources":["../../src/components/admin-edit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAO,MAAM,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAEjF,OAAO,SAAS,MAAM,WAAW,CAAC;AAIlC,qBAAa,SAAU,SAAQ,YAAY;IAE1C;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,YAAY,EAAE,MAAM,CAAC;IACrB;;OAEG;IACH,aAAa,EAAE,MAAM,CAAC;IACtB;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB;;OAEG;IACH,cAAc,EAAE,MAAM,CAAC;IACvB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,eAAe,EAAE,MAAM,CAAC;IACxB;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IACpB;;OAEG;IACH,iBAAiB,EAAE,MAAM,CAAC;IAC1B;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,KAAK,EAAE,SAAS,CAAC,KAAK,CAAC;IACvB;;OAEG;IACH,WAAW,EAAE,OAAO,CAAC;IACrB;;;;;OAKG;IACH,SAAS,CAAC,SAAS,EAAE,MAAM,CAAC;IAC5B;;OAEG;IACH,SAAS,CAAC,cAAc,EAAE,GAAG,EAAE,CAAC;IAChC;;;OAGG;IACH,MAAM,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,cAAc,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACpF;;OAEG;IACH,KAAK,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACtE;;OAEG;IACH,MAAM,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACvE;;OAEG;IACH,QAAQ,EAAE,CAAC,aAAa,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;gBAEnC,IAAI,EAAE,YAAY,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM;IA2BtD;;OAEG;IACG,gBAAgB,CAAE,OAAO,EAAE,CAAC,WAAW,EAAE,OAAO,EACrD,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBxF;;;OAGG;IACH,YAAY,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAQ;IAE5C;;OAEG;IACG,UAAU,
|
|
1
|
+
{"version":3,"file":"admin-edit.d.ts","sourceRoot":"","sources":["../../src/components/admin-edit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAO,MAAM,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAEjF,OAAO,SAAS,MAAM,WAAW,CAAC;AAIlC,qBAAa,SAAU,SAAQ,YAAY;IAE1C;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,YAAY,EAAE,MAAM,CAAC;IACrB;;OAEG;IACH,aAAa,EAAE,MAAM,CAAC;IACtB;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB;;OAEG;IACH,cAAc,EAAE,MAAM,CAAC;IACvB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,eAAe,EAAE,MAAM,CAAC;IACxB;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IACpB;;OAEG;IACH,iBAAiB,EAAE,MAAM,CAAC;IAC1B;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,KAAK,EAAE,SAAS,CAAC,KAAK,CAAC;IACvB;;OAEG;IACH,WAAW,EAAE,OAAO,CAAC;IACrB;;;;;OAKG;IACH,SAAS,CAAC,SAAS,EAAE,MAAM,CAAC;IAC5B;;OAEG;IACH,SAAS,CAAC,cAAc,EAAE,GAAG,EAAE,CAAC;IAChC;;;OAGG;IACH,MAAM,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,cAAc,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACpF;;OAEG;IACH,KAAK,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACtE;;OAEG;IACH,MAAM,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACvE;;OAEG;IACH,QAAQ,EAAE,CAAC,aAAa,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;gBAEnC,IAAI,EAAE,YAAY,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM;IA2BtD;;OAEG;IACG,gBAAgB,CAAE,OAAO,EAAE,CAAC,WAAW,EAAE,OAAO,EACrD,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBxF;;;OAGG;IACH,YAAY,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAQ;IAE5C;;OAEG;IACG,UAAU,CAAE,cAAc,GAAE,GAAG,EAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAqC5D;;;OAGG;IACH,aAAa,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAQ;IAE7C;;OAEG;IACG,WAAW,CAAE,cAAc,GAAE,GAAG,EAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAiE7D;;;OAGG;IACH,eAAe,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAQ;IAE/C;;OAEG;IACG,aAAa,IAAK,OAAO,CAAC,IAAI,CAAC;IAwGrC;;OAEG;IACG,MAAM;IA8GZ;;OAEG;IACH,WAAW,CAAE,iBAAiB,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,GAAG,WAAW;IAyBnF,MAAM,IAAK,MAAM,GAAG,kBAAkB,EAAE;CAyDxC"}
|
|
@@ -76,7 +76,7 @@ class AdminEdit extends hotstaq_1.HotComponent {
|
|
|
76
76
|
/**
|
|
77
77
|
* Executes when the add button is clicked.
|
|
78
78
|
*/
|
|
79
|
-
addClicked() {
|
|
79
|
+
addClicked(selectedFields = []) {
|
|
80
80
|
return __awaiter(this, void 0, void 0, function* () {
|
|
81
81
|
if (this.onAddClicked != null) {
|
|
82
82
|
let result = yield this.onAddClicked();
|
|
@@ -87,7 +87,7 @@ class AdminEdit extends hotstaq_1.HotComponent {
|
|
|
87
87
|
yield this.processHotFields((htmlElement, field) => __awaiter(this, void 0, void 0, function* () {
|
|
88
88
|
$(htmlElement).val("");
|
|
89
89
|
}));
|
|
90
|
-
this.selectedFields =
|
|
90
|
+
this.selectedFields = selectedFields;
|
|
91
91
|
if (this.onadd != null) {
|
|
92
92
|
if (typeof (this.onadd) === "string")
|
|
93
93
|
this.onadd = new Function(this.onadd);
|
|
@@ -103,7 +103,7 @@ class AdminEdit extends hotstaq_1.HotComponent {
|
|
|
103
103
|
/**
|
|
104
104
|
* Executes when the edit button is clicked.
|
|
105
105
|
*/
|
|
106
|
-
editClicked() {
|
|
106
|
+
editClicked(selectedFields = []) {
|
|
107
107
|
return __awaiter(this, void 0, void 0, function* () {
|
|
108
108
|
if (this.onEditClicked != null) {
|
|
109
109
|
let result = yield this.onEditClicked();
|
|
@@ -111,11 +111,12 @@ class AdminEdit extends hotstaq_1.HotComponent {
|
|
|
111
111
|
return;
|
|
112
112
|
}
|
|
113
113
|
this.modalType = "edit";
|
|
114
|
-
this.selectedFields =
|
|
114
|
+
this.selectedFields = selectedFields;
|
|
115
115
|
if (this.attached_list !== "") {
|
|
116
116
|
let attachedList = document.getElementById(this.attached_list);
|
|
117
117
|
// @ts-ignore
|
|
118
118
|
let hotComponent = attachedList.hotComponent;
|
|
119
|
+
hotComponent.attachedEdit = this;
|
|
119
120
|
let selectedField = hotComponent.getSelected();
|
|
120
121
|
if (selectedField != null) {
|
|
121
122
|
yield this.processHotFields((htmlElement, field) => __awaiter(this, void 0, void 0, function* () {
|
|
@@ -162,6 +163,7 @@ class AdminEdit extends hotstaq_1.HotComponent {
|
|
|
162
163
|
let attachedList = document.getElementById(this.attached_list);
|
|
163
164
|
// @ts-ignore
|
|
164
165
|
hotComponent = attachedList.hotComponent;
|
|
166
|
+
hotComponent.attachedEdit = this;
|
|
165
167
|
let checkedRows = hotComponent.getCheckedRows();
|
|
166
168
|
if (checkedRows.length > 0) {
|
|
167
169
|
for (let i = 0; i < checkedRows.length; i++) {
|
|
@@ -286,6 +288,7 @@ class AdminEdit extends hotstaq_1.HotComponent {
|
|
|
286
288
|
let attachedList = document.getElementById(this.attached_list);
|
|
287
289
|
// @ts-ignore
|
|
288
290
|
let table = attachedList.hotComponent;
|
|
291
|
+
table.attachedEdit = this;
|
|
289
292
|
yield table.refreshList();
|
|
290
293
|
}
|
|
291
294
|
if (this.closeOnSave === true) {
|
|
@@ -302,6 +305,16 @@ class AdminEdit extends hotstaq_1.HotComponent {
|
|
|
302
305
|
"keyboard": true,
|
|
303
306
|
"focus": true
|
|
304
307
|
});
|
|
308
|
+
/// @todo Fix this temporary hack. I dont like it.
|
|
309
|
+
setTimeout(() => {
|
|
310
|
+
if (this.attached_list !== "") {
|
|
311
|
+
let attachedList = document.getElementById(this.attached_list);
|
|
312
|
+
// @ts-ignore
|
|
313
|
+
let table = attachedList.hotComponent;
|
|
314
|
+
if (table != null)
|
|
315
|
+
table.attachedEdit = this;
|
|
316
|
+
}
|
|
317
|
+
}, 50);
|
|
305
318
|
return (null);
|
|
306
319
|
}
|
|
307
320
|
output() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin-edit.js","sourceRoot":"","sources":["../../src/components/admin-edit.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"admin-edit.js","sourceRoot":"","sources":["../../src/components/admin-edit.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { HotStaq, HotAPI, HotComponent, HotComponentOutput } from "hotstaq";
|
|
2
2
|
import { AdminTableField } from "./admin-table-field";
|
|
3
|
+
import { AdminEdit } from "./admin-edit";
|
|
3
4
|
export declare class AdminTable extends HotComponent {
|
|
4
5
|
/**
|
|
5
6
|
* The title of this table.
|
|
@@ -71,11 +72,19 @@ export declare class AdminTable extends HotComponent {
|
|
|
71
72
|
* @default true
|
|
72
73
|
*/
|
|
73
74
|
checkbox: boolean;
|
|
75
|
+
/**
|
|
76
|
+
* If set to true, a single click will allow the user to edit the row.
|
|
77
|
+
*/
|
|
78
|
+
singleclickedit: boolean;
|
|
74
79
|
/**
|
|
75
80
|
* Executes this event when a row is selected. The potential item to be selected
|
|
76
81
|
* will also be passed. If this returns false, the row will not be selected.
|
|
77
82
|
*/
|
|
78
83
|
onselectedrow: (rowIndex: number, item: any[]) => Promise<boolean>;
|
|
84
|
+
/**
|
|
85
|
+
* The attached edit form, if any.
|
|
86
|
+
*/
|
|
87
|
+
attachedEdit: AdminEdit;
|
|
79
88
|
constructor(copy: HotComponent | HotStaq, api: HotAPI);
|
|
80
89
|
/**
|
|
81
90
|
* Add a header to the table.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin-table.d.ts","sourceRoot":"","sources":["../../src/components/admin-table.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAO,MAAM,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AACjF,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"admin-table.d.ts","sourceRoot":"","sources":["../../src/components/admin-table.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAO,MAAM,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AACjF,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,qBAAa,UAAW,SAAQ,YAAY;IAE3C;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE;QACR;;WAEG;QACH,MAAM,EAAE;YAAE,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,CAAC;SAAE,CAAC;QAC7C;;;;WAIG;QACH,QAAQ,EAAE;YAAE,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAAC;SAAE,CAAC;QACnC;;;;WAIG;QACH,QAAQ,EAAE,MAAM,EAAE,CAAC;KACnB,CAAC;IACF;;;;;;;;;;;;;OAaG;IACH,WAAW,EAAE;QAAE,MAAM,EAAE,GAAG,EAAE,CAAC;QAAC,OAAO,EAAE,WAAW,CAAC;KAAE,EAAE,CAAM;IAC7D;;;;OAIG;IAEH;;OAEG;IACH,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC3B;;OAEG;IACH,MAAM,EAAE,MAAM,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAC7B;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,QAAQ,EAAE,OAAO,CAAC;IAClB;;OAEG;IACH,eAAe,EAAE,OAAO,CAAC;IACzB;;;OAGG;IACH,aAAa,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACnE;;OAEG;IACH,YAAY,EAAE,SAAS,CAAC;gBAEX,IAAI,EAAE,YAAY,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM;IAuBtD;;OAEG;IACH,SAAS,CAAE,iBAAiB,EAAE,WAAW;IAYzC;;OAEG;IACH,iBAAiB,CAAE,UAAU,EAAE,eAAe,EAAE,WAAW,EAAE,WAAW;IAUxE;;OAEG;IACH,YAAY,CAAE,SAAS,EAAE,MAAM,GAAG,MAAM;IAaxC;;OAEG;IACG,SAAS,CAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAsE3E;;OAEG;IACH,WAAW,IAAK,GAAG,EAAE;IAUrB;;OAEG;IAcH;;OAEG;IACH,cAAc,IAAK,GAAG,EAAE;IA4BxB;;OAEG;IACH,MAAM,CAAE,KAAK,EAAE,MAAM,GAAG,GAAG,EAAE;IAK7B;;;;OAIG;IACH,MAAM,CAAE,MAAM,EAAE;QAAE,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,EAAE;IAkGzC;;OAEG;IACG,SAAS;IASf;;OAEG;IACG,WAAW,CAAE,IAAI,GAAE,GAAG,EAAS;IAqCrC;;OAEG;IACH,WAAW,CAAE,iBAAiB,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,GAAG,WAAW;IAUnF,MAAM,IAAK,MAAM,GAAG,kBAAkB,EAAE;CAqBxC"}
|
|
@@ -43,7 +43,9 @@ class AdminTable extends hotstaq_1.HotComponent {
|
|
|
43
43
|
this.onlist = null;
|
|
44
44
|
this.listurl = "";
|
|
45
45
|
this.checkbox = true;
|
|
46
|
+
this.singleclickedit = false;
|
|
46
47
|
this.onselectedrow = null;
|
|
48
|
+
this.attachedEdit = null;
|
|
47
49
|
this.selected = -1;
|
|
48
50
|
}
|
|
49
51
|
/**
|
|
@@ -106,6 +108,12 @@ class AdminTable extends hotstaq_1.HotComponent {
|
|
|
106
108
|
htmlElement.classList.add("table-primary");
|
|
107
109
|
}
|
|
108
110
|
this.selected = rowIndex;
|
|
111
|
+
if (typeof (this.singleclickedit) === "string")
|
|
112
|
+
this.singleclickedit = hotstaq_1.HotStaq.parseBoolean(this.singleclickedit);
|
|
113
|
+
if (this.singleclickedit === true) {
|
|
114
|
+
if (this.attachedEdit != null)
|
|
115
|
+
yield this.attachedEdit.editClicked();
|
|
116
|
+
}
|
|
109
117
|
/*this.selectedRows = [];
|
|
110
118
|
let tbody = this.htmlElements[1].getElementsByTagName ("tbody")[0];
|
|
111
119
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin-table.js","sourceRoot":"","sources":["../../src/components/admin-table.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qCAAiF;
|
|
1
|
+
{"version":3,"file":"admin-table.js","sourceRoot":"","sources":["../../src/components/admin-table.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var AdminPanelComponentsWeb;(()=>{"use strict";var t={176:function(t,e,n){var i=this&&this.__awaiter||function(t,e,n,i){return new(n||(n=Promise))((function(l,s){function o(t){try{a(i.next(t))}catch(t){s(t)}}function d(t){try{a(i.throw(t))}catch(t){s(t)}}function a(t){var e;t.done?l(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(o,d)}a((i=i.apply(t,e||[])).next())}))};Object.defineProperty(e,"__esModule",{value:!0}),e.AdminButton=void 0;const l=n(607);class s extends l.HotComponent{constructor(t,e){super(t,e),this.tag="admin-button",this.css_class="btn btn-sm btn-outline-secondary",this.onclick=null}buttonClicked(){return i(this,void 0,void 0,(function*(){}))}onPostPlace(t,e){let n=t.querySelectorAll('hot-place-here[type="modal"]');if(n.length>0){let i=n[0];t.removeChild(e),i.appendChild(e)}return null!=this.onclick&&("string"==typeof this.onclick&&(this.onclick=new Function(this.onclick)),e.addEventListener("click",this.onclick)),null}output(){return`<button id = "${this.htmlElements[0].id}" class = "${this.css_class}" onclick = "this.buttonClicked ();">${this.inner}</button>`}}e.AdminButton=s},50:(t,e,n)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.AdminDashboard=void 0;const i=n(607);class l extends i.HotComponent{constructor(t,e){super(t,e),this.tag="admin-dashboard",this.title="",this.base=""}onPostPlace(t,e){return null==i.Hot.Data.AdminPanel&&(i.Hot.Data.AdminPanel={}),null==i.Hot.Data.AdminPanel.baseUrl&&(i.Hot.Data.AdminPanel.baseUrl=this.base),null==i.Hot.Data.AdminPanel.addUrl&&(i.Hot.Data.AdminPanel.addUrl=`${i.Hot.Data.AdminPanel.baseUrl}/v1/data/add`),null==i.Hot.Data.AdminPanel.editUrl&&(i.Hot.Data.AdminPanel.editUrl=`${i.Hot.Data.AdminPanel.baseUrl}/v1/data/edit`),null==i.Hot.Data.AdminPanel.removeUrl&&(i.Hot.Data.AdminPanel.removeUrl=`${i.Hot.Data.AdminPanel.baseUrl}/v1/data/remove`),null==i.Hot.Data.AdminPanel.listUrl&&(i.Hot.Data.AdminPanel.listUrl=`${i.Hot.Data.AdminPanel.baseUrl}/v1/data/list`),null}output(){return`\n\t\t<main class="col-md-9 ms-sm-auto col-lg-10 px-md-4">\n\t\t\t<div class="d-flex justify-content-between flex-wrap flex-md-nowrap align-items-center pt-3 pb-2 mb-3 border-bottom">\n\t\t\t\t<h1 class="h2">${this.title}</h1>\n\t\t\t\t<div class="btn-toolbar mb-2 mb-md-0">\n\t\t\t\t\t<div class="btn-group me-2">\n\t\t\t\t\t\t<hot-place-here name = "dashboardHeader"></hot-place-here>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<hot-place-here name = "body"></hot-place-here>\n\t\t</main>`}}e.AdminDashboard=l},988:function(t,e,n){var i=this&&this.__awaiter||function(t,e,n,i){return new(n||(n=Promise))((function(l,s){function o(t){try{a(i.next(t))}catch(t){s(t)}}function d(t){try{a(i.throw(t))}catch(t){s(t)}}function a(t){var e;t.done?l(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(o,d)}a((i=i.apply(t,e||[])).next())}))};Object.defineProperty(e,"__esModule",{value:!0}),e.AdminDropdown=void 0;const l=n(607);class s extends l.HotComponent{constructor(t,e){super(t,e),this.tag="admin-dropdown",this.placeholder="Search",this.onsearch=null,this.onselect=null}onPostPlace(t,e){let n=t.querySelectorAll('hot-place-here[type="modal"]');if(n.length>0){let i=n[0];t.removeChild(e),i.appendChild(e)}return null!=this.onsearch&&("string"==typeof this.onsearch&&(this.onsearch=new Function(this.onsearch)),e.querySelector("input").addEventListener("keyup",(t=>i(this,void 0,void 0,(function*(){const e=t.currentTarget.value;let n=yield this.onsearch(e,t),i=$(this.htmlElements[1]).find(".searchResults");i.empty();for(let t=0;t<n.length;t++){const e=n[t];let l=e.url,s=e.value,o=e.text;i.append($(`<li><a class="dropdown-item" href="${l}" data-value = "${s}" onclick = "this.parentNode.parentNode.parentNode.parentNode.hotComponent.selected (${t});">${o}</a></li>`))}}))))),null}selected(t){return i(this,void 0,void 0,(function*(){if(null!=this.onselect){"string"==typeof this.onselect&&(this.onselect=new Function(this.onselect));const e=this.htmlElements[1].querySelectorAll("a")[t].getAttribute("href"),n=this.htmlElements[1].querySelectorAll("a")[t].getAttribute("data-value"),i=this.htmlElements[1].querySelectorAll("a")[t].innerHTML;yield this.onselect(e,n,i)}}))}output(){return`<div class="dropdown">\n\t\t<button class="btn btn-primary dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">\n\t\t ${this.inner}\n\t\t</button>\n\t\t<ul class="dropdown-menu">\n\t\t\t<li>\n\t\t\t\t<div class = "input-group">\n\t\t\t\t\t<input type = "text" class = "form-control" placeholder = "${this.placeholder}" value = "" />\n\t\t\t\t</div>\n\t\t\t</li>\n\t\t\t<div class = "searchResults">\n\t\t\t</div>\n\t\t</ul>\n\t</div>`}}e.AdminDropdown=s},703:function(t,e,n){var i=this&&this.__awaiter||function(t,e,n,i){return new(n||(n=Promise))((function(l,s){function o(t){try{a(i.next(t))}catch(t){s(t)}}function d(t){try{a(i.throw(t))}catch(t){s(t)}}function a(t){var e;t.done?l(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(o,d)}a((i=i.apply(t,e||[])).next())}))},l=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.AdminEdit=void 0;const s=n(607),o=l(n(685));class d extends s.HotComponent{constructor(t,e){super(t,e),this.onAddClicked=null,this.onEditClicked=null,this.onRemoveClicked=null,this.tag="admin-edit",this.title="",this.button_title="Save",this.attached_list="",this.schema="",this.modalId="",this.add_text="Add",this.add_place_here="dashboardHeader",this.edit_text="Edit",this.edit_place_here="dashboardHeader",this.remove_text="Remove",this.remove_place_here="dashboardHeader",this.css_class="",this.modal=null,this.modalType="add",this.closeOnSave=!0,this.selectedFields=[],this.onsave=null,this.onedit=null,this.ondelete=null}processHotFields(t){return i(this,void 0,void 0,(function*(){const e=this.htmlElements[1].querySelectorAll("[hot-field]");for(let n=0;n<e.length;n++){const i=e[n],l=$(i).attr("hot-field");let s=$(i).attr("hot-field-type"),o=$(i).attr("hot-field-input");null!=s&&""!==s||(s="text"),i.fieldType=s,yield t(i,{name:l,type:s,input:o})}}))}addClicked(){return i(this,void 0,void 0,(function*(){if(null==this.onAddClicked||!1!==(yield this.onAddClicked())){if(this.modalType="add",yield this.processHotFields(((t,e)=>i(this,void 0,void 0,(function*(){$(t).val("")})))),this.selectedFields=[],null!=this.onadd){"string"==typeof this.onadd&&(this.onadd=new Function(this.onadd));let t=yield this.onadd(this.modalType,this.selectedFields);if(null!=t&&!1===t)return}o.default.Modal.getInstance(`#${this.modalId}`).show()}}))}editClicked(){return i(this,void 0,void 0,(function*(){if(null==this.onEditClicked||!1!==(yield this.onEditClicked())){if(this.modalType="edit",this.selectedFields=[],""!==this.attached_list){let t=document.getElementById(this.attached_list).hotComponent.getSelected();null!=t&&(yield this.processHotFields(((e,n)=>i(this,void 0,void 0,(function*(){let i=t[n.name];if(null!=n.input&&""!==n.input){let t=new Function(n.input);i=yield t.call(this,i)}null!=i&&$(e).val(i)})))),this.selectedFields=[t])}if(null!=this.onedit){"string"==typeof this.onedit&&(this.onedit=new Function(this.onedit));let t=yield this.onedit(this.modalType,this.selectedFields);if(null!=t&&!1===t)return}o.default.Modal.getInstance(`#${this.modalId}`).show()}}))}removeClicked(){return i(this,void 0,void 0,(function*(){if(null!=this.onRemoveClicked&&!1===(yield this.onRemoveClicked()))return;this.modalType="remove";let t=[],e=null;if(""!==this.attached_list){e=document.getElementById(this.attached_list).hotComponent;let n=e.getCheckedRows();if(n.length>0)for(let e=0;e<n.length;e++){let i=n[e];t.push(i)}let i=e.getSelected();null!=i&&(t=[i])}if(!0===confirm("Are you sure you want to remove this item?")){for(let n=0;n<t.length;n++){let i=t[n];if(null!=e)for(let t in i){let n=e.getFieldType(t);null!=n&&"remove"===n&&delete i[t]}if(null!=this.ondelete)"string"==typeof this.ondelete&&(this.ondelete=new Function(this.ondelete)),yield this.ondelete(i);else{let t=s.Hot.Data.AdminPanel.removeUrl;yield s.Hot.jsonRequest(t,{schema:this.schema,whereFields:i})}}if(0===t.length)if(null!=this.ondelete)"string"==typeof this.ondelete&&(this.ondelete=new Function(this.ondelete)),yield this.ondelete(null);else{let t=s.Hot.Data.AdminPanel.removeUrl;yield s.Hot.jsonRequest(t,{schema:this.schema,whereFields:null})}null!=e&&(yield e.refreshList())}}))}onSave(){return i(this,void 0,void 0,(function*(){let t={};if(yield this.processHotFields(((e,n)=>i(this,void 0,void 0,(function*(){if("remove"===n.type)return;let i=$(e).val();if(null!=$(e).attr("hot-value")&&(i=$(e).attr("hot-value")),"array"===n.type)return null==t[n.name]&&(t[n.name]=[]),void t[n.name].push(i);t[n.name]=i})))),null!=this.onsave){if("string"==typeof this.onsave&&(this.onsave=new Function(this.onsave)),!1===(yield this.onsave(this.modalType,t,this.selectedFields)))return}else{if("add"===this.modalType){let e=s.Hot.Data.AdminPanel.addUrl;yield s.Hot.jsonRequest(e,{schema:this.schema,fields:t})}if("edit"===this.modalType){if(0===this.selectedFields.length)return void alert("No item(s) selected!");let e={};yield this.processHotFields(((t,n)=>i(this,void 0,void 0,(function*(){if("remove"===n.type)return;let i=$(t).val();if(null!=$(t).attr("hot-value")&&(i=$(t).attr("hot-value")),"array"===n.type)return null==e[n.name]&&(e[n.name]=[]),void e[n.name].push(i);e[n.name]=i}))));let n=s.Hot.Data.AdminPanel.editUrl;yield s.Hot.jsonRequest(n,{schema:this.schema,whereFields:e,fields:t})}}if(""!==this.attached_list){let t=document.getElementById(this.attached_list).hotComponent;yield t.refreshList()}!0===this.closeOnSave&&o.default.Modal.getInstance(`#${this.modalId}`).hide()}))}onPostPlace(t,e){return this.modal=new o.default.Modal($(`#${this.modalId}`)[0],{backdrop:!0,keyboard:!0,focus:!0}),null}output(){if(""===this.name)throw new Error("You must specify a name for each admin-edit element!");this.modalId=`${this.name}Modal`;let t=[{html:`\n\t\t\t\x3c!-- ${this.title} Modal Start --\x3e\n\t\t\t<div class="modal fade ${this.css_class}" id="${this.modalId}" tabindex="-1" aria-labelledby="${this.name}ModalLabel" aria-hidden="true">\n\t\t\t\t<div class="modal-dialog">\n\t\t\t\t\t<div class="modal-content">\n\t\t\t\t\t<div class="modal-header">\n\t\t\t\t\t\t<h5 class="modal-title" id="${this.name}ModalLabel">${this.title}</h5>\n\t\t\t\t\t\t<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="modal-body">\n\t\t\t\t\t\t<hot-place-here name = "modalBody" type = "modal"></hot-place-here>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="modal-footer">\n\t\t\t\t\t\t<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Cancel</button>\n\t\t\t\t\t\t<button type="button" class="btn btn-primary" onclick = "document.getElementById('${this.modalId}').onSave ();">${this.button_title}</button>\n\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t\x3c!-- ${this.title} Modal End --\x3e`,documentSelector:"body"}];return""!==this.add_place_here&&t.push({html:`<button id = "${this.modalId}-add-btn" type="button" class="btn btn-sm btn-outline-secondary" onclick = "this.addClicked ();">${this.add_text}</button>`,documentSelector:`hot-place-here[name="${this.add_place_here}"]`}),""!==this.edit_place_here&&t.push({html:`<button id = "${this.modalId}-edit-btn" type="button" class="btn btn-sm btn-outline-secondary" onclick = "this.editClicked ();">${this.edit_text}</button>`,documentSelector:`hot-place-here[name="${this.edit_place_here}"]`}),""!==this.remove_place_here&&t.push({html:`<button id = "${this.modalId}-remove-btn" type="button" class="btn btn-sm btn-outline-secondary" onclick = "this.removeClicked ();">${this.remove_text}</button>`,documentSelector:`hot-place-here[name="${this.remove_place_here}"]`}),t}}e.AdminEdit=d},505:(t,e,n)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.AdminTableField=void 0;const i=n(607);class l extends i.HotComponent{constructor(t,e){super(t,e),this.tag="admin-table-field",this.field=0,this.field_type="text",this.no_output="0",this.oninput=null,this.onoutput=null}onPostPlace(t,e){let n=null;return n=null!=t.parentNode.parentNode.hotComponent?t.parentNode.parentNode.hotComponent:t.parentNode.parentNode.parentNode.parentNode.hotComponent,null!=n&&n.addHeaderDataOnly(this,e),null}output(){return"1"===this.no_output?[{html:"<div></div>",placeHereParent:"afterTable"}]:[{html:`<th>${this.inner}</th>`,placeHereParent:"header"}]}}e.AdminTableField=l},412:(t,e,n)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.AdminTableRow=void 0;const i=n(607);class l extends i.HotComponent{constructor(t,e){super(t,e),this.tag="admin-table-row",this.fields=[]}onPostPlace(t,e){return t.parentNode.parentNode.parentNode.hotComponent.rowElements.push({fields:this.fields,element:e}),null}output(){let t="";this.fields.length>0&&(t+='<td><input type = "checkbox" /></td>');for(let e=0;e<this.fields.length;e++){let n=this.fields[e];for(let e in n)t+=`<td>${n[e]}</td>`}return[{html:`<tr>${t}</tr>`,placeHereParent:"results"}]}}e.AdminTableRow=l},952:function(t,e,n){var i=this&&this.__awaiter||function(t,e,n,i){return new(n||(n=Promise))((function(l,s){function o(t){try{a(i.next(t))}catch(t){s(t)}}function d(t){try{a(i.throw(t))}catch(t){s(t)}}function a(t){var e;t.done?l(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(o,d)}a((i=i.apply(t,e||[])).next())}))};Object.defineProperty(e,"__esModule",{value:!0}),e.AdminTable=void 0;const l=n(607);class s extends l.HotComponent{constructor(t,e){super(t,e),this.rowElements=[],this.tag="admin-table",this.title="",this.schema="",this.headers={fields:{},elements:{},indicies:[]},this.rowElements=[],this.onlist=null,this.listurl="",this.checkbox=!0,this.onselectedrow=null,this.selected=-1}addHeader(t){let e=this.htmlElements[0].getElementsByTagName("thead")[0];this.headers.indicies.length<1&&this.headers.indicies.push(null),this.headers.indicies.push(t.hotComponent.field),e.appendChild(t)}addHeaderDataOnly(t,e){this.headers.indicies.length<1&&this.headers.indicies.push(null),this.headers.indicies.push(t.field),this.headers.fields[t.field]=t,this.headers.elements[t.field]=e}getFieldType(t){if(null!=this.headers.elements[t]){let e=this.headers.elements[t].hotComponent;if(null!=e)return e.field_type}return null}selectRow(t,e){return i(this,void 0,void 0,(function*(){if(null!=this.onselectedrow){"string"==typeof this.onselectedrow&&(this.onselectedrow=new Function(this.onselectedrow));let t=null;if(null!=this.rowElements[e]&&(t=this.rowElements[e].fields),!1===(yield this.onselectedrow(e,t)))return}{let e=this.htmlElements[1].getElementsByTagName("tbody")[0].getElementsByTagName("tr");for(let t=0;t<e.length;t++){let n=e[t];!0===n.classList.contains("table-primary")&&n.classList.remove("table-primary")}t.classList.add("table-primary")}this.selected=e}))}getSelected(){let t=this.selected;return t<0?null:this.rowElements[t].fields}getCheckedRows(){let t=[],e=this.htmlElements[1].getElementsByTagName("tbody")[0].getElementsByTagName("input");for(let n=0;n<e.length;n++){let i=e[n];if(null!=i.checked&&!0===i.checked){let e=i.parentElement.parentElement.getAttribute("data-index"),n=parseInt(e);t.push(this.rowElements[n].fields)}}return t}getRow(t){return this.rowElements[t].fields}addRow(t){if(null==t)return;if(0==t.length)return;let e=this.htmlElements[1].getElementsByTagName("tbody")[0],n=this.rowElements.length,i=`<tr onclick = "this.parentNode.parentNode.parentNode.parentNode.hotComponent.selectRow (this, ${n});">`;"string"==typeof this.checkbox&&(this.checkbox=l.HotStaq.parseBoolean(this.checkbox)),!0===this.checkbox?i+='<td><input type = "checkbox" /></td>':i+="<td></td>";for(let e=0;e<this.headers.indicies.length;e++){let l=this.headers.indicies[e];if(null==l)continue;let s=t[l],o=l.split(".");if(o.length>1){let e=t[o[0]];for(let t=1;t<o.length;t++)e=e[o[t]];s=e}if(null!=this.headers.elements[l]){let t=this.getFieldType(l);if(null==t&&(t="text"),"remove"!==t){const t=this.headers.fields[l];let e=!0;null!=t&&(null!=t.oninput&&("string"==typeof t.oninput&&(this.headers.fields[l].oninput=new Function(t.oninput)),s=t.oninput(s)),null!=t.onoutput)&&("string"==typeof t.onoutput&&(this.headers.fields[l].onoutput=new Function(t.onoutput)),e=!1,i+=t.onoutput(n,s)),!0===e&&(i+=`<td data-index = "${n}">${s}</td>`)}}}i+="</tr>";let s=l.HotStaq.addHtml(e,i);this.rowElements.push({fields:t,element:s})}clearRows(){return i(this,void 0,void 0,(function*(){this.rowElements=[],this.htmlElements[1].getElementsByTagName("tbody")[0].innerHTML=""}))}refreshList(t=null){return i(this,void 0,void 0,(function*(){if(null!=this.onlist)"string"==typeof this.onlist&&(this.onlist=new Function(this.onlist)),t=yield this.onlist();else{let e="";""!==this.listurl&&(e=this.listurl),""!==e&&(t=yield l.Hot.jsonRequest(e,{schema:this.schema}))}if(this.clearRows(),null!=t)for(let e=0;e<t.length;e++){let n=t[e];this.addRow(n)}}))}onPostPlace(t,e){return setTimeout((()=>i(this,void 0,void 0,(function*(){yield this.refreshList()}))),50),null}output(){return`\n\t\t<div id = "${this.htmlElements[0].id}">\n\t\t\t<h2>${this.title}</h2>\n\t\t\t<div class="table-responsive">\n\t\t\t<table id = "${this.htmlElements[0].id}Table" class="table table-striped table-sm">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr hot-place-here = "header">\n\t\t\t\t\t\t<th></th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\t\t\t\t<tbody hot-place-here = "results">\n\t\t\t\t</tbody>\n\t\t\t</table>\n\t\t\t<hot-place-here name = "afterTable"></hot-place-here>\n\t\t\t</div>\n\t\t</div>`}}e.AdminTable=s},80:(t,e,n)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.AdminText=void 0;const i=n(607);class l extends i.HotComponent{constructor(t,e){super(t,e),this.tag="admin-text",this.no_output="0",this.css_class="form-control"}onPostPlace(t,e){let n=t.querySelectorAll('hot-place-here[type="modal"]');if(n.length>0){let i=n[0];t.removeChild(e),i.appendChild(e)}return null}output(){let t="";if(null!=this.value&&(t=this.value),"1"===this.no_output)return`<div><input class="${this.css_class}" type = "hidden" value = "${t}" /></div>`;const e=this.htmlElements[0].getAttribute("hot-field");let n=this.htmlElements[0].getAttribute("hot-field-type");return null==n&&(n="text"),`<div>\n\t\t\t<label class="form-label">${this.inner}</label>\n\t\t\t<input class="${this.css_class}" type = "text" hot-field = "${e}" hot-field-type = "${n}" value = "${t}" />\n\t\t</div>`}}e.AdminText=l},607:t=>{t.exports=HotStaqWeb},685:t=>{t.exports=bootstrap}},e={};function n(i){var l=e[i];if(void 0!==l)return l.exports;var s=e[i]={exports:{}};return t[i].call(s.exports,s,s.exports,n),s.exports}var i={};(()=>{var t=i;Object.defineProperty(t,"__esModule",{value:!0}),t.AdminText=t.AdminTableRow=t.AdminTableField=t.AdminTable=t.AdminEdit=t.AdminDashboard=t.AdminDropdown=t.AdminButton=void 0;const e=n(176);Object.defineProperty(t,"AdminButton",{enumerable:!0,get:function(){return e.AdminButton}});const l=n(988);Object.defineProperty(t,"AdminDropdown",{enumerable:!0,get:function(){return l.AdminDropdown}});const s=n(50);Object.defineProperty(t,"AdminDashboard",{enumerable:!0,get:function(){return s.AdminDashboard}});const o=n(703);Object.defineProperty(t,"AdminEdit",{enumerable:!0,get:function(){return o.AdminEdit}});const d=n(952);Object.defineProperty(t,"AdminTable",{enumerable:!0,get:function(){return d.AdminTable}});const a=n(505);Object.defineProperty(t,"AdminTableField",{enumerable:!0,get:function(){return a.AdminTableField}});const r=n(412);Object.defineProperty(t,"AdminTableRow",{enumerable:!0,get:function(){return r.AdminTableRow}});const h=n(80);Object.defineProperty(t,"AdminText",{enumerable:!0,get:function(){return h.AdminText}})})(),AdminPanelComponentsWeb=i})();
|
|
2
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFTSSxHQUdwRUwsRUFBT0MsT0FDZixDLHFNQ3RCQSxlQVVFLDJFQVZPLEVBQUE3TCxXQUFXLElBQ3BCLGVBVUUsNkVBVk8sRUFBQXFDLGFBQWEsSUFDdEIsY0FVRSw4RUFWTyxFQUFBWCxjQUFjLElBQ3ZCLGVBVUUseUVBVk8sRUFBQWtDLFNBQVMsSUFDbEIsZUFVRSwwRUFWTyxFQUFBa0YsVUFBVSxJQUNuQixlQVVFLCtFQVZPLEVBQUFiLGVBQWUsSUFDeEIsZUFVRSw2RUFWTyxFQUFBUSxhQUFhLElBQ3RCLGNBVUUseUVBVk8sRUFBQWtELFNBQVMsRyIsInNvdXJjZXMiOlsid2VicGFjazovL0FkbWluUGFuZWxDb21wb25lbnRzV2ViLy4vc3JjL2NvbXBvbmVudHMvYWRtaW4tYnV0dG9uLnRzIiwid2VicGFjazovL0FkbWluUGFuZWxDb21wb25lbnRzV2ViLy4vc3JjL2NvbXBvbmVudHMvYWRtaW4tZGFzaGJvYXJkLnRzIiwid2VicGFjazovL0FkbWluUGFuZWxDb21wb25lbnRzV2ViLy4vc3JjL2NvbXBvbmVudHMvYWRtaW4tZHJvcGRvd24udHMiLCJ3ZWJwYWNrOi8vQWRtaW5QYW5lbENvbXBvbmVudHNXZWIvLi9zcmMvY29tcG9uZW50cy9hZG1pbi1lZGl0LnRzIiwid2VicGFjazovL0FkbWluUGFuZWxDb21wb25lbnRzV2ViLy4vc3JjL2NvbXBvbmVudHMvYWRtaW4tdGFibGUtZmllbGQudHMiLCJ3ZWJwYWNrOi8vQWRtaW5QYW5lbENvbXBvbmVudHNXZWIvLi9zcmMvY29tcG9uZW50cy9hZG1pbi10YWJsZS1yb3cudHMiLCJ3ZWJwYWNrOi8vQWRtaW5QYW5lbENvbXBvbmVudHNXZWIvLi9zcmMvY29tcG9uZW50cy9hZG1pbi10YWJsZS50cyIsIndlYnBhY2s6Ly9BZG1pblBhbmVsQ29tcG9uZW50c1dlYi8uL3NyYy9jb21wb25lbnRzL2FkbWluLXRleHQudHMiLCJ3ZWJwYWNrOi8vQWRtaW5QYW5lbENvbXBvbmVudHNXZWIvZXh0ZXJuYWwgdmFyIFwiSG90U3RhcVdlYlwiIiwid2VicGFjazovL0FkbWluUGFuZWxDb21wb25lbnRzV2ViL2V4dGVybmFsIHZhciBcImJvb3RzdHJhcFwiIiwid2VicGFjazovL0FkbWluUGFuZWxDb21wb25lbnRzV2ViL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL0FkbWluUGFuZWxDb21wb25lbnRzV2ViLy4vc3JjL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEhvdFN0YXEsIEhvdCwgSG90QVBJLCBIb3RDb21wb25lbnQgfSBmcm9tIFwiaG90c3RhcVwiO1xuXG5leHBvcnQgY2xhc3MgQWRtaW5CdXR0b24gZXh0ZW5kcyBIb3RDb21wb25lbnRcbntcblx0LyoqXG5cdCAqIFRoZSBDU1MgY2xhc3MgdG8gYXBwbHkgdG8gdGhlIGJ1dHRvbi5cblx0ICovXG5cdGNzc19jbGFzczogc3RyaW5nO1xuXHQvKipcblx0ICogRXhlY3V0ZXMgd2hlbiB0aGUgYnV0dG9uIGlzIGNsaWNrZWQuXG5cdCAqL1xuXHRvbmNsaWNrOiAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IFByb21pc2U8YW55PjtcblxuXHRjb25zdHJ1Y3RvciAoY29weTogSG90Q29tcG9uZW50IHwgSG90U3RhcSwgYXBpOiBIb3RBUEkpXG5cdHtcblx0XHRzdXBlciAoY29weSwgYXBpKTtcblxuXHRcdHRoaXMudGFnID0gXCJhZG1pbi1idXR0b25cIjtcblx0XHR0aGlzLmNzc19jbGFzcyA9IFwiYnRuIGJ0bi1zbSBidG4tb3V0bGluZS1zZWNvbmRhcnlcIjtcblx0XHR0aGlzLm9uY2xpY2sgPSBudWxsO1xuXHR9XG5cblx0YXN5bmMgYnV0dG9uQ2xpY2tlZCAoKTogUHJvbWlzZTx2b2lkPlxuXHR7XG5cdH1cblxuXHQvKipcblx0ICogQ29ycmVjdHMgdGhlIHBsYWNlbWVudCBvZiB0aGUgdGV4dCBlbGVtZW50cyBmb3IgbW9kYWxzLlxuXHQgKi9cblx0b25Qb3N0UGxhY2UgKHBhcmVudEh0bWxFbGVtZW50OiBIVE1MRWxlbWVudCwgaHRtbEVsZW1lbnQ6IEhUTUxFbGVtZW50KTogSFRNTEVsZW1lbnRcblx0e1xuXHRcdGxldCBwbGFjZUhlcmVBcnJheSA9IHBhcmVudEh0bWxFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwgKGBob3QtcGxhY2UtaGVyZVt0eXBlPVwibW9kYWxcIl1gKTtcblxuXHRcdGlmIChwbGFjZUhlcmVBcnJheS5sZW5ndGggPiAwKVxuXHRcdHtcblx0XHRcdGxldCBwbGFjZUhlcmUgPSBwbGFjZUhlcmVBcnJheVswXTtcblx0XHRcdHBhcmVudEh0bWxFbGVtZW50LnJlbW92ZUNoaWxkIChodG1sRWxlbWVudCk7XG5cdFx0XHRwbGFjZUhlcmUuYXBwZW5kQ2hpbGQgKGh0bWxFbGVtZW50KTtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5vbmNsaWNrICE9IG51bGwpXG5cdFx0e1xuXHRcdFx0aWYgKHR5cGVvZiAodGhpcy5vbmNsaWNrKSA9PT0gXCJzdHJpbmdcIilcblx0XHRcdFx0dGhpcy5vbmNsaWNrID0gKDwoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IFByb21pc2U8YW55Pj5uZXcgRnVuY3Rpb24gKHRoaXMub25jbGljaykpO1xuXG5cdFx0XHRodG1sRWxlbWVudC5hZGRFdmVudExpc3RlbmVyIChcImNsaWNrXCIsIHRoaXMub25jbGljayk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIChudWxsKTtcblx0fVxuXG5cdG91dHB1dCAoKTogc3RyaW5nXG5cdHtcblx0XHRyZXR1cm4gKGA8YnV0dG9uIGlkID0gXCIke3RoaXMuaHRtbEVsZW1lbnRzWzBdLmlkfVwiIGNsYXNzID0gXCIke3RoaXMuY3NzX2NsYXNzfVwiIG9uY2xpY2sgPSBcInRoaXMuYnV0dG9uQ2xpY2tlZCAoKTtcIj4ke3RoaXMuaW5uZXJ9PC9idXR0b24+YCk7XG5cdH1cbn1cbiIsImltcG9ydCB7IEhvdFN0YXEsIEhvdCwgSG90QVBJLCBIb3RDb21wb25lbnQgfSBmcm9tIFwiaG90c3RhcVwiO1xuXG5leHBvcnQgY2xhc3MgQWRtaW5EYXNoYm9hcmQgZXh0ZW5kcyBIb3RDb21wb25lbnRcbntcblx0LyoqXG5cdCAqIFRoZSB0aXRsZSBvZiB0aGlzIGRhc2hib2FyZC5cblx0ICovXG5cdHRpdGxlOiBzdHJpbmc7XG5cdC8qKlxuXHQgKiBUaGUgYmFzZSB1cmwgdG8gdXNlIGZvciB0aGlzIGRhc2hib2FyZC5cblx0ICovXG5cdGJhc2U6IHN0cmluZztcblxuXHRjb25zdHJ1Y3RvciAoY29weTogSG90Q29tcG9uZW50IHwgSG90U3RhcSwgYXBpOiBIb3RBUEkpXG5cdHtcblx0XHRzdXBlciAoY29weSwgYXBpKTtcblxuXHRcdHRoaXMudGFnID0gXCJhZG1pbi1kYXNoYm9hcmRcIjtcblx0XHR0aGlzLnRpdGxlID0gXCJcIjtcblx0XHR0aGlzLmJhc2UgPSBcIlwiO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkZCB0aGlzIHRhYmxlIGZpZWxkIHRvIHRoZSB0YWJsZVxuXHQgKi9cblx0b25Qb3N0UGxhY2UgKHBhcmVudEh0bWxFbGVtZW50OiBIVE1MRWxlbWVudCwgaHRtbEVsZW1lbnQ6IEhUTUxFbGVtZW50KTogSFRNTEVsZW1lbnRcblx0e1xuXHRcdGlmIChIb3QuRGF0YS5BZG1pblBhbmVsID09IG51bGwpXG5cdFx0XHRIb3QuRGF0YS5BZG1pblBhbmVsID0ge307XG5cblx0XHRpZiAoSG90LkRhdGEuQWRtaW5QYW5lbC5iYXNlVXJsID09IG51bGwpXG5cdFx0XHRIb3QuRGF0YS5BZG1pblBhbmVsLmJhc2VVcmwgPSB0aGlzLmJhc2U7XG5cblx0XHRpZiAoSG90LkRhdGEuQWRtaW5QYW5lbC5hZGRVcmwgPT0gbnVsbClcblx0XHRcdEhvdC5EYXRhLkFkbWluUGFuZWwuYWRkVXJsID0gYCR7SG90LkRhdGEuQWRtaW5QYW5lbC5iYXNlVXJsfS92MS9kYXRhL2FkZGA7XG5cblx0XHRpZiAoSG90LkRhdGEuQWRtaW5QYW5lbC5lZGl0VXJsID09IG51bGwpXG5cdFx0XHRIb3QuRGF0YS5BZG1pblBhbmVsLmVkaXRVcmwgPSBgJHtIb3QuRGF0YS5BZG1pblBhbmVsLmJhc2VVcmx9L3YxL2RhdGEvZWRpdGA7XG5cblx0XHRpZiAoSG90LkRhdGEuQWRtaW5QYW5lbC5yZW1vdmVVcmwgPT0gbnVsbClcblx0XHRcdEhvdC5EYXRhLkFkbWluUGFuZWwucmVtb3ZlVXJsID0gYCR7SG90LkRhdGEuQWRtaW5QYW5lbC5iYXNlVXJsfS92MS9kYXRhL3JlbW92ZWA7XG5cblx0XHRpZiAoSG90LkRhdGEuQWRtaW5QYW5lbC5saXN0VXJsID09IG51bGwpXG5cdFx0XHRIb3QuRGF0YS5BZG1pblBhbmVsLmxpc3RVcmwgPSBgJHtIb3QuRGF0YS5BZG1pblBhbmVsLmJhc2VVcmx9L3YxL2RhdGEvbGlzdGA7XG5cblx0XHRyZXR1cm4gKG51bGwpO1xuXHR9XG5cblx0b3V0cHV0ICgpOiBzdHJpbmdcblx0e1xuXHRcdHJldHVybiAoYFxuXHRcdDxtYWluIGNsYXNzPVwiY29sLW1kLTkgbXMtc20tYXV0byBjb2wtbGctMTAgcHgtbWQtNFwiPlxuXHRcdFx0PGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBmbGV4LXdyYXAgZmxleC1tZC1ub3dyYXAgYWxpZ24taXRlbXMtY2VudGVyIHB0LTMgcGItMiBtYi0zIGJvcmRlci1ib3R0b21cIj5cblx0XHRcdFx0PGgxIGNsYXNzPVwiaDJcIj4ke3RoaXMudGl0bGV9PC9oMT5cblx0XHRcdFx0PGRpdiBjbGFzcz1cImJ0bi10b29sYmFyIG1iLTIgbWItbWQtMFwiPlxuXHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJidG4tZ3JvdXAgbWUtMlwiPlxuXHRcdFx0XHRcdFx0PGhvdC1wbGFjZS1oZXJlIG5hbWUgPSBcImRhc2hib2FyZEhlYWRlclwiPjwvaG90LXBsYWNlLWhlcmU+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0PC9kaXY+XG5cdFx0XHQ8aG90LXBsYWNlLWhlcmUgbmFtZSA9IFwiYm9keVwiPjwvaG90LXBsYWNlLWhlcmU+XG5cdFx0PC9tYWluPmApO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBIb3RTdGFxLCBIb3QsIEhvdEFQSSwgSG90Q29tcG9uZW50IH0gZnJvbSBcImhvdHN0YXFcIjtcblxuZXhwb3J0IGNsYXNzIEFkbWluRHJvcGRvd24gZXh0ZW5kcyBIb3RDb21wb25lbnRcbntcblx0LyoqXG5cdCAqIFRoZSBzZWFyY2ggc3RyaW5nIHBsYWNlaG9sZGVyIHRvIHNob3cuXG5cdCAqL1xuXHRwbGFjZWhvbGRlcjogc3RyaW5nO1xuXHQvKipcblx0ICogRXhlY3V0ZXMgd2hlbiB0aGUga2V5Ym9hcmQgdXAgYnV0dG9uIGlzIHRyaWdnZXJlZC5cblx0ICovXG5cdG9uc2VhcmNoOiAoc2VhcmNoVGV4dDogc3RyaW5nLCBldmVudDogS2V5Ym9hcmRFdmVudCkgPT4gUHJvbWlzZTx7IHVybDogc3RyaW5nOyB2YWx1ZTogc3RyaW5nOyB0ZXh0OiBzdHJpbmc7IH1bXT47XG5cdC8qKlxuXHQgKiBFeGVjdXRlcyB3aGVuIGFuIHNlYXJjaCByZXN1bHQgaGFzIGJlZW4gc2VsZWN0ZWQuXG5cdCAqL1xuXHRvbnNlbGVjdDogKHVybDogc3RyaW5nLCB2YWx1ZTogc3RyaW5nLCB0ZXh0OiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD47XG5cblx0Y29uc3RydWN0b3IgKGNvcHk6IEhvdENvbXBvbmVudCB8IEhvdFN0YXEsIGFwaTogSG90QVBJKVxuXHR7XG5cdFx0c3VwZXIgKGNvcHksIGFwaSk7XG5cblx0XHR0aGlzLnRhZyA9IFwiYWRtaW4tZHJvcGRvd25cIjtcblx0XHR0aGlzLnBsYWNlaG9sZGVyID0gXCJTZWFyY2hcIjtcblx0XHR0aGlzLm9uc2VhcmNoID0gbnVsbDtcblx0XHR0aGlzLm9uc2VsZWN0ID0gbnVsbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb3JyZWN0cyB0aGUgcGxhY2VtZW50IG9mIHRoZSB0ZXh0IGVsZW1lbnRzIGZvciBtb2RhbHMuXG5cdCAqL1xuXHRvblBvc3RQbGFjZSAocGFyZW50SHRtbEVsZW1lbnQ6IEhUTUxFbGVtZW50LCBodG1sRWxlbWVudDogSFRNTEVsZW1lbnQpOiBIVE1MRWxlbWVudFxuXHR7XG5cdFx0bGV0IHBsYWNlSGVyZUFycmF5ID0gcGFyZW50SHRtbEVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCAoYGhvdC1wbGFjZS1oZXJlW3R5cGU9XCJtb2RhbFwiXWApO1xuXG5cdFx0aWYgKHBsYWNlSGVyZUFycmF5Lmxlbmd0aCA+IDApXG5cdFx0e1xuXHRcdFx0bGV0IHBsYWNlSGVyZSA9IHBsYWNlSGVyZUFycmF5WzBdO1xuXHRcdFx0cGFyZW50SHRtbEVsZW1lbnQucmVtb3ZlQ2hpbGQgKGh0bWxFbGVtZW50KTtcblx0XHRcdHBsYWNlSGVyZS5hcHBlbmRDaGlsZCAoaHRtbEVsZW1lbnQpO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLm9uc2VhcmNoICE9IG51bGwpXG5cdFx0e1xuXHRcdFx0aWYgKHR5cGVvZiAodGhpcy5vbnNlYXJjaCkgPT09IFwic3RyaW5nXCIpXG5cdFx0XHRcdHRoaXMub25zZWFyY2ggPSAoPChzZWFyY2hUZXh0OiBzdHJpbmcsIGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiBQcm9taXNlPHsgdXJsOiBzdHJpbmc7IHZhbHVlOiBzdHJpbmc7IHRleHQ6IHN0cmluZzsgfVtdPj5uZXcgRnVuY3Rpb24gKHRoaXMub25zZWFyY2gpKTtcblxuXHRcdFx0aHRtbEVsZW1lbnQucXVlcnlTZWxlY3RvciAoXCJpbnB1dFwiKS5hZGRFdmVudExpc3RlbmVyIChcImtleXVwXCIsIFxuXHRcdFx0XHRhc3luYyAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+XG5cdFx0XHRcdHtcblx0XHRcdFx0XHQvLyBAdHMtaWdub3JlXG5cdFx0XHRcdFx0Y29uc3Qgc2VhcmNoVGV4dCA9IGV2ZW50LmN1cnJlbnRUYXJnZXQudmFsdWU7XG5cblx0XHRcdFx0XHRsZXQgcmVzdWx0cyA9IGF3YWl0IHRoaXMub25zZWFyY2ggKHNlYXJjaFRleHQsIGV2ZW50KTtcblxuXHRcdFx0XHRcdGxldCBzZWFyY2hSZXN1bHRzRGl2ID0gJCh0aGlzLmh0bWxFbGVtZW50c1sxXSkuZmluZCAoXCIuc2VhcmNoUmVzdWx0c1wiKTtcblxuXHRcdFx0XHRcdHNlYXJjaFJlc3VsdHNEaXYuZW1wdHkgKCk7XG5cblx0XHRcdFx0XHRmb3IgKGxldCBpSWR4ID0gMDsgaUlkeCA8IHJlc3VsdHMubGVuZ3RoOyBpSWR4KyspXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0Y29uc3QgcmVzdWx0ID0gcmVzdWx0c1tpSWR4XTtcblx0XHRcdFx0XHRcdGxldCB1cmw6IHN0cmluZyA9IHJlc3VsdC51cmw7XG5cdFx0XHRcdFx0XHRsZXQgdmFsdWU6IHN0cmluZyA9IHJlc3VsdC52YWx1ZTtcblx0XHRcdFx0XHRcdGxldCB0ZXh0OiBzdHJpbmcgPSByZXN1bHQudGV4dDtcblxuXHRcdFx0XHRcdFx0c2VhcmNoUmVzdWx0c0Rpdi5hcHBlbmQgKCQoYDxsaT48YSBjbGFzcz1cXFwiZHJvcGRvd24taXRlbVxcXCIgaHJlZj1cXFwiJHt1cmx9XFxcIiBkYXRhLXZhbHVlID0gXCIke3ZhbHVlfVwiIG9uY2xpY2sgPSBcXFwidGhpcy5wYXJlbnROb2RlLnBhcmVudE5vZGUucGFyZW50Tm9kZS5wYXJlbnROb2RlLmhvdENvbXBvbmVudC5zZWxlY3RlZCAoJHtpSWR4fSk7XFxcIj4ke3RleHR9PC9hPjwvbGk+YCkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIChudWxsKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBFeGVjdXRlZCB3aGVuIGFuIGl0ZW0gaXMgc2VsZWN0ZWQuXG5cdCAqL1xuXHRhc3luYyBzZWxlY3RlZCAoaW5kZXg6IG51bWJlcik6IFByb21pc2U8dm9pZD5cblx0e1xuXHRcdGlmICh0aGlzLm9uc2VsZWN0ICE9IG51bGwpXG5cdFx0e1xuXHRcdFx0aWYgKHR5cGVvZiAodGhpcy5vbnNlbGVjdCkgPT09IFwic3RyaW5nXCIpXG5cdFx0XHRcdHRoaXMub25zZWxlY3QgPSAoPCh1cmw6IHN0cmluZywgdmFsdWU6IHN0cmluZywgdGV4dDogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+Pm5ldyBGdW5jdGlvbiAodGhpcy5vbnNlbGVjdCkpO1xuXG5cdFx0XHRjb25zdCB1cmwgPSB0aGlzLmh0bWxFbGVtZW50c1sxXS5xdWVyeVNlbGVjdG9yQWxsIChcImFcIilbaW5kZXhdLmdldEF0dHJpYnV0ZSAoXCJocmVmXCIpO1xuXHRcdFx0Y29uc3QgdmFsdWUgPSB0aGlzLmh0bWxFbGVtZW50c1sxXS5xdWVyeVNlbGVjdG9yQWxsIChcImFcIilbaW5kZXhdLmdldEF0dHJpYnV0ZSAoXCJkYXRhLXZhbHVlXCIpO1xuXHRcdFx0Y29uc3QgdGV4dCA9IHRoaXMuaHRtbEVsZW1lbnRzWzFdLnF1ZXJ5U2VsZWN0b3JBbGwgKFwiYVwiKVtpbmRleF0uaW5uZXJIVE1MO1xuXG5cdFx0XHRhd2FpdCB0aGlzLm9uc2VsZWN0ICh1cmwsIHZhbHVlLCB0ZXh0KTtcblx0XHR9XG5cdH1cblxuXHRvdXRwdXQgKCk6IHN0cmluZ1xuXHR7XG5cdFx0cmV0dXJuIChcblx0YDxkaXYgY2xhc3M9XCJkcm9wZG93blwiPlxuXHRcdDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgZHJvcGRvd24tdG9nZ2xlXCIgdHlwZT1cImJ1dHRvblwiIGRhdGEtYnMtdG9nZ2xlPVwiZHJvcGRvd25cIiBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIj5cblx0XHQgICR7dGhpcy5pbm5lcn1cblx0XHQ8L2J1dHRvbj5cblx0XHQ8dWwgY2xhc3M9XCJkcm9wZG93bi1tZW51XCI+XG5cdFx0XHQ8bGk+XG5cdFx0XHRcdDxkaXYgY2xhc3MgPSBcImlucHV0LWdyb3VwXCI+XG5cdFx0XHRcdFx0PGlucHV0IHR5cGUgPSBcInRleHRcIiBjbGFzcyA9IFwiZm9ybS1jb250cm9sXCIgcGxhY2Vob2xkZXIgPSBcIiR7dGhpcy5wbGFjZWhvbGRlcn1cIiB2YWx1ZSA9IFwiXCIgLz5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQ8L2xpPlxuXHRcdFx0PGRpdiBjbGFzcyA9IFwic2VhcmNoUmVzdWx0c1wiPlxuXHRcdFx0PC9kaXY+XG5cdFx0PC91bD5cblx0PC9kaXY+YCk7XG5cdH1cbn1cbiIsImltcG9ydCB7IEhvdFN0YXEsIEhvdCwgSG90QVBJLCBIb3RDb21wb25lbnQsIEhvdENvbXBvbmVudE91dHB1dCB9IGZyb20gXCJob3RzdGFxXCI7XG5cbmltcG9ydCBib290c3RyYXAgZnJvbSBcImJvb3RzdHJhcFwiO1xuXG5pbXBvcnQgeyBBZG1pblRhYmxlIH0gZnJvbSBcIi4vYWRtaW4tdGFibGVcIjtcblxuZXhwb3J0IGNsYXNzIEFkbWluRWRpdCBleHRlbmRzIEhvdENvbXBvbmVudFxue1xuXHQvKipcblx0ICogVGhlIHRpdGxlIG9mIHRoaXMgZWRpdCBtb2RhbC5cblx0ICovXG5cdHRpdGxlOiBzdHJpbmc7XG5cdC8qKlxuXHQgKiBUaGUgYnV0dG9uIHRpdGxlLlxuXHQgKi9cblx0YnV0dG9uX3RpdGxlOiBzdHJpbmc7XG5cdC8qKlxuXHQgKiBUaGUgYXR0YWNoZWQgbGlzdC5cblx0ICovXG5cdGF0dGFjaGVkX2xpc3Q6IHN0cmluZztcblx0LyoqXG5cdCAqIFRoZSBhdHRhY2hlZCBzY2hlbWEuXG5cdCAqL1xuXHRzY2hlbWE6IHN0cmluZztcblx0LyoqXG5cdCAqIFRoZSBtb2RhbCBpZC5cblx0ICovXG5cdG1vZGFsSWQ6IHN0cmluZztcblx0LyoqXG5cdCAqIFRoZSB0ZXh0IGZvciB0aGUgYWRkIGJ1dHRvbi5cblx0ICovXG5cdGFkZF90ZXh0OiBzdHJpbmc7XG5cdC8qKlxuXHQgKiBUaGUgbG9jYXRpb24gdG8gcHV0IHRoZSBhZGQgYnV0dG9uLlxuXHQgKi9cblx0YWRkX3BsYWNlX2hlcmU6IHN0cmluZztcblx0LyoqXG5cdCAqIFRoZSB0ZXh0IGZvciB0aGUgZWRpdCBidXR0b24uXG5cdCAqL1xuXHRlZGl0X3RleHQ6IHN0cmluZztcblx0LyoqXG5cdCAqIFRoZSBsb2NhdGlvbiB0byBwdXQgdGhlIGVkaXQgYnV0dG9uLlxuXHQgKi9cblx0ZWRpdF9wbGFjZV9oZXJlOiBzdHJpbmc7XG5cdC8qKlxuXHQgKiBUaGUgdGV4dCBmb3IgdGhlIHJlbW92ZSBidXR0b24uXG5cdCAqL1xuXHRyZW1vdmVfdGV4dDogc3RyaW5nO1xuXHQvKipcblx0ICogVGhlIGxvY2F0aW9uIHRvIHB1dCB0aGUgcmVtb3ZlIGJ1dHRvbi5cblx0ICovXG5cdHJlbW92ZV9wbGFjZV9oZXJlOiBzdHJpbmc7XG5cdC8qKlxuXHQgKiBUaGUgaG90LWNsYXNzIGF0dHJpYnV0ZSB0byBwYXNzIHRvIGFkZCB0byB0aGUgbW9kYWwncyBjbGFzc2VzLlxuXHQgKi9cblx0Y3NzX2NsYXNzOiBzdHJpbmc7XG5cdC8qKlxuXHQgKiBUaGUgYm9vdHN0cmFwIG1vZGFsIGluc3RhbmNlLlxuXHQgKi9cblx0bW9kYWw6IGJvb3RzdHJhcC5Nb2RhbDtcblx0LyoqXG5cdCAqIElmIHNldCB0byB0cnVlLCB0aGlzIHdpbGwgY2xvc2UgdGhlIG1vZGFsIHdoZW4gc2F2ZSBpcyBjbGlja2VkLlxuXHQgKi9cblx0Y2xvc2VPblNhdmU6IGJvb2xlYW47XG5cdC8qKlxuXHQgKiBUaGUgdHlwZSBvZiBtb2RhbCB0byBvcGVuLiBDYW4gYmU6XG5cdCAqICogYWRkXG5cdCAqICogZWRpdFxuXHQgKiAqIHJlbW92ZVxuXHQgKi9cblx0cHJvdGVjdGVkIG1vZGFsVHlwZTogc3RyaW5nO1xuXHQvKipcblx0ICogVGhlIHNlbGVjdGVkIGZpZWxkcy5cblx0ICovXG5cdHByb3RlY3RlZCBzZWxlY3RlZEZpZWxkczogYW55W107XG5cdC8qKlxuXHQgKiBXaGF0IHRvIGV4ZWN1dGUgd2hlbiB0aGUgc2F2ZSBidXR0b24gaXMgY2xpY2tlZC4gSWYgdGhpcyByZXR1cm5zIHRydWUsIHRoZSBtb2RhbCB3aWxsIGNsb3NlLlxuXHQgKiBJZiB0aGlzIHJldHVybnMgZmFsc2UsIHRoZSBtb2RhbCB3aWxsIG5vdCBjbG9zZS5cblx0ICovXG5cdG9uc2F2ZTogKG1vZGFsVHlwZTogc3RyaW5nLCB2YWx1ZXM6IGFueSwgc2VsZWN0ZWRGaWVsZHM6IGFueVtdKSA9PiBQcm9taXNlPGJvb2xlYW4+O1xuXHQvKipcblx0ICogV2hhdCB0byBleGVjdXRlIHdoZW4gdGhlIGVkaXQgYnV0dG9uIGlzIGNsaWNrZWQuXG5cdCAqL1xuXHRvbmFkZDogKG1vZGFsVHlwZTogc3RyaW5nLCBzZWxlY3RlZEZpZWxkczogYW55W10pID0+IFByb21pc2U8Ym9vbGVhbj47XG5cdC8qKlxuXHQgKiBXaGF0IHRvIGV4ZWN1dGUgd2hlbiB0aGUgZWRpdCBidXR0b24gaXMgY2xpY2tlZC5cblx0ICovXG5cdG9uZWRpdDogKG1vZGFsVHlwZTogc3RyaW5nLCBzZWxlY3RlZEZpZWxkczogYW55W10pID0+IFByb21pc2U8Ym9vbGVhbj47XG5cdC8qKlxuXHQgKiBXaGF0IHRvIGV4ZWN1dGUgd2hlbiB0aGUgZGVsZXRlIGJ1dHRvbiBpcyBjbGlja2VkLlxuXHQgKi9cblx0b25kZWxldGU6IChzZWxlY3RlZEZpZWxkOiBhbnkpID0+IFByb21pc2U8dm9pZD47XG5cblx0Y29uc3RydWN0b3IgKGNvcHk6IEhvdENvbXBvbmVudCB8IEhvdFN0YXEsIGFwaTogSG90QVBJKVxuXHR7XG5cdFx0c3VwZXIgKGNvcHksIGFwaSk7XG5cblx0XHR0aGlzLnRhZyA9IFwiYWRtaW4tZWRpdFwiO1xuXHRcdHRoaXMudGl0bGUgPSBcIlwiO1xuXHRcdHRoaXMuYnV0dG9uX3RpdGxlID0gXCJTYXZlXCI7XG5cdFx0dGhpcy5hdHRhY2hlZF9saXN0ID0gXCJcIjtcblx0XHR0aGlzLnNjaGVtYSA9IFwiXCI7XG5cblx0XHR0aGlzLm1vZGFsSWQgPSBcIlwiO1xuXHRcdHRoaXMuYWRkX3RleHQgPSBcIkFkZFwiO1xuXHRcdHRoaXMuYWRkX3BsYWNlX2hlcmUgPSBcImRhc2hib2FyZEhlYWRlclwiO1xuXHRcdHRoaXMuZWRpdF90ZXh0ID0gXCJFZGl0XCI7XG5cdFx0dGhpcy5lZGl0X3BsYWNlX2hlcmUgPSBcImRhc2hib2FyZEhlYWRlclwiO1xuXHRcdHRoaXMucmVtb3ZlX3RleHQgPSBcIlJlbW92ZVwiO1xuXHRcdHRoaXMucmVtb3ZlX3BsYWNlX2hlcmUgPSBcImRhc2hib2FyZEhlYWRlclwiO1xuXHRcdHRoaXMuY3NzX2NsYXNzID0gXCJcIjtcblx0XHR0aGlzLm1vZGFsID0gbnVsbDtcblx0XHR0aGlzLm1vZGFsVHlwZSA9IFwiYWRkXCI7XG5cdFx0dGhpcy5jbG9zZU9uU2F2ZSA9IHRydWU7XG5cdFx0dGhpcy5zZWxlY3RlZEZpZWxkcyA9IFtdO1xuXHRcdHRoaXMub25zYXZlID0gbnVsbDtcblx0XHR0aGlzLm9uZWRpdCA9IG51bGw7XG5cdFx0dGhpcy5vbmRlbGV0ZSA9IG51bGw7XG5cdH1cblxuXHQvKipcblx0ICogUHJvY2VzcyB0aGUgaG90IGZpZWxkcy5cblx0ICovXG5cdGFzeW5jIHByb2Nlc3NIb3RGaWVsZHMgKG9uRmllbGQ6IChodG1sRWxlbWVudDogRWxlbWVudCwgXG5cdFx0ZmllbGQ6IHsgbmFtZTogc3RyaW5nOyB0eXBlOiBzdHJpbmc7IGlucHV0OiBzdHJpbmc7IH0pID0+IFByb21pc2U8dm9pZD4pOiBQcm9taXNlPHZvaWQ+XG5cdHtcblx0XHRjb25zdCBlbG1zID0gdGhpcy5odG1sRWxlbWVudHNbMV0ucXVlcnlTZWxlY3RvckFsbCAoXCJbaG90LWZpZWxkXVwiKTtcblxuXHRcdGZvciAobGV0IGlJZHggPSAwOyBpSWR4IDwgZWxtcy5sZW5ndGg7IGlJZHgrKylcblx0XHR7XG5cdFx0XHRjb25zdCBlbG0gPSBlbG1zW2lJZHhdO1xuXHRcdFx0Y29uc3QgZmllbGQgPSAkKGVsbSkuYXR0ciAoXCJob3QtZmllbGRcIik7XG5cdFx0XHRsZXQgZmllbGRUeXBlID0gJChlbG0pLmF0dHIgKFwiaG90LWZpZWxkLXR5cGVcIik7XG5cdFx0XHRsZXQgZmllbGRJbnB1dCA9ICQoZWxtKS5hdHRyIChcImhvdC1maWVsZC1pbnB1dFwiKTtcblxuXHRcdFx0aWYgKChmaWVsZFR5cGUgPT0gbnVsbCkgfHwgKGZpZWxkVHlwZSA9PT0gXCJcIikpXG5cdFx0XHRcdGZpZWxkVHlwZSA9IFwidGV4dFwiO1xuXG5cdFx0XHQvLyBAdHMtaWdub3JlXG5cdFx0XHRlbG0uZmllbGRUeXBlID0gZmllbGRUeXBlO1xuXG5cdFx0XHRhd2FpdCBvbkZpZWxkIChlbG0sIHsgbmFtZTogZmllbGQsIHR5cGU6IGZpZWxkVHlwZSwgaW5wdXQ6IGZpZWxkSW5wdXQgfSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBldmVudCB0aGF0IGNhbiBiZSBjYWxsZWQgd2hlbiB0aGUgYWRkIGJ1dHRvbiBpcyBjbGlja2VkLlxuXHQgKiBUaGlzIGlzIGNhbGxlZCBiZWZvcmUgdGhlIGFkZCBtb2RhbCBvcGVucy5cblx0ICovXG5cdG9uQWRkQ2xpY2tlZDogKCkgPT4gUHJvbWlzZTxib29sZWFuPiA9IG51bGw7XG5cblx0LyoqXG5cdCAqIEV4ZWN1dGVzIHdoZW4gdGhlIGFkZCBidXR0b24gaXMgY2xpY2tlZC5cblx0ICovXG5cdGFzeW5jIGFkZENsaWNrZWQgKCk6IFByb21pc2U8dm9pZD5cblx0e1xuXHRcdGlmICh0aGlzLm9uQWRkQ2xpY2tlZCAhPSBudWxsKVxuXHRcdHtcblx0XHRcdGxldCByZXN1bHQgPSBhd2FpdCB0aGlzLm9uQWRkQ2xpY2tlZCAoKTtcblxuXHRcdFx0aWYgKHJlc3VsdCA9PT0gZmFsc2UpXG5cdFx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR0aGlzLm1vZGFsVHlwZSA9IFwiYWRkXCI7XG5cblx0XHRhd2FpdCB0aGlzLnByb2Nlc3NIb3RGaWVsZHMgKFxuXHRcdFx0YXN5bmMgKGh0bWxFbGVtZW50OiBFbGVtZW50LCBmaWVsZDogeyBuYW1lOiBzdHJpbmc7IHR5cGU6IHN0cmluZzsgfSkgPT5cblx0XHRcdHtcblx0XHRcdFx0JChodG1sRWxlbWVudCkudmFsIChcIlwiKTtcblx0XHRcdH0pO1xuXG5cdFx0dGhpcy5zZWxlY3RlZEZpZWxkcyA9IFtdO1xuXG5cdFx0aWYgKHRoaXMub25hZGQgIT0gbnVsbClcblx0XHR7XG5cdFx0XHRpZiAodHlwZW9mICh0aGlzLm9uYWRkKSA9PT0gXCJzdHJpbmdcIilcblx0XHRcdFx0dGhpcy5vbmFkZCA9ICg8KG1vZGFsVHlwZTogc3RyaW5nLCBzZWxlY3RlZEZpZWxkczogYW55W10pID0+IFByb21pc2U8Ym9vbGVhbj4+bmV3IEZ1bmN0aW9uICh0aGlzLm9uYWRkKSk7XG5cblx0XHRcdGxldCByZXN1bHQgPSBhd2FpdCB0aGlzLm9uYWRkICh0aGlzLm1vZGFsVHlwZSwgdGhpcy5zZWxlY3RlZEZpZWxkcyk7XG5cblx0XHRcdGlmIChyZXN1bHQgIT0gbnVsbClcblx0XHRcdHtcblx0XHRcdFx0aWYgKHJlc3VsdCA9PT0gZmFsc2UpXG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGJvb3RzdHJhcC5Nb2RhbC5nZXRJbnN0YW5jZSAoYCMke3RoaXMubW9kYWxJZH1gKS5zaG93ICgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBldmVudCB0aGF0IGNhbiBiZSBjYWxsZWQgd2hlbiB0aGUgZWRpdCBidXR0b24gaXMgY2xpY2tlZC5cblx0ICogVGhpcyBpcyBjYWxsZWQgYmVmb3JlIHRoZSBlZGl0IG1vZGFsIG9wZW5zLlxuXHQgKi9cblx0b25FZGl0Q2xpY2tlZDogKCkgPT4gUHJvbWlzZTxib29sZWFuPiA9IG51bGw7XG5cblx0LyoqXG5cdCAqIEV4ZWN1dGVzIHdoZW4gdGhlIGVkaXQgYnV0dG9uIGlzIGNsaWNrZWQuXG5cdCAqL1xuXHRhc3luYyBlZGl0Q2xpY2tlZCAoKTogUHJvbWlzZTx2b2lkPlxuXHR7XG5cdFx0aWYgKHRoaXMub25FZGl0Q2xpY2tlZCAhPSBudWxsKVxuXHRcdHtcblx0XHRcdGxldCByZXN1bHQgPSBhd2FpdCB0aGlzLm9uRWRpdENsaWNrZWQgKCk7XG5cblx0XHRcdGlmIChyZXN1bHQgPT09IGZhbHNlKVxuXHRcdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dGhpcy5tb2RhbFR5cGUgPSBcImVkaXRcIjtcblxuXHRcdHRoaXMuc2VsZWN0ZWRGaWVsZHMgPSBbXTtcblxuXHRcdGlmICh0aGlzLmF0dGFjaGVkX2xpc3QgIT09IFwiXCIpXG5cdFx0e1xuXHRcdFx0bGV0IGF0dGFjaGVkTGlzdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkICh0aGlzLmF0dGFjaGVkX2xpc3QpO1xuXG5cdFx0XHQvLyBAdHMtaWdub3JlXG5cdFx0XHRsZXQgaG90Q29tcG9uZW50OiBBZG1pblRhYmxlID0gYXR0YWNoZWRMaXN0LmhvdENvbXBvbmVudDtcblx0XHRcdGxldCBzZWxlY3RlZEZpZWxkID0gaG90Q29tcG9uZW50LmdldFNlbGVjdGVkICgpO1xuXG5cdFx0XHRpZiAoc2VsZWN0ZWRGaWVsZCAhPSBudWxsKVxuXHRcdFx0e1xuXHRcdFx0XHRhd2FpdCB0aGlzLnByb2Nlc3NIb3RGaWVsZHMgKFxuXHRcdFx0XHRcdGFzeW5jIChodG1sRWxlbWVudDogRWxlbWVudCwgZmllbGQ6IHsgbmFtZTogc3RyaW5nOyB0eXBlOiBzdHJpbmc7IGlucHV0OiBzdHJpbmc7IH0pID0+XG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdFx0XHRcdFx0bGV0IHZhbHVlID0gc2VsZWN0ZWRGaWVsZFtmaWVsZC5uYW1lXTtcblxuXHRcdFx0XHRcdFx0aWYgKGZpZWxkLmlucHV0ICE9IG51bGwpXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdGlmIChmaWVsZC5pbnB1dCAhPT0gXCJcIilcblx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdGxldCBmdW5jID0gbmV3IEZ1bmN0aW9uIChmaWVsZC5pbnB1dCk7XG5cdFx0XHRcdFx0XHRcdFx0dmFsdWUgPSBhd2FpdCBmdW5jLmNhbGwgKHRoaXMsIHZhbHVlKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZiAodmFsdWUgIT0gbnVsbClcblx0XHRcdFx0XHRcdFx0JChodG1sRWxlbWVudCkudmFsICh2YWx1ZSk7XG5cdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0dGhpcy5zZWxlY3RlZEZpZWxkcyA9IFtzZWxlY3RlZEZpZWxkXTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAodGhpcy5vbmVkaXQgIT0gbnVsbClcblx0XHR7XG5cdFx0XHRpZiAodHlwZW9mICh0aGlzLm9uZWRpdCkgPT09IFwic3RyaW5nXCIpXG5cdFx0XHRcdHRoaXMub25lZGl0ID0gKDwobW9kYWxUeXBlOiBzdHJpbmcsIHNlbGVjdGVkRmllbGRzOiBhbnlbXSkgPT4gUHJvbWlzZTxib29sZWFuPj5uZXcgRnVuY3Rpb24gKHRoaXMub25lZGl0KSk7XG5cblx0XHRcdGxldCByZXN1bHQgPSBhd2FpdCB0aGlzLm9uZWRpdCAodGhpcy5tb2RhbFR5cGUsIHRoaXMuc2VsZWN0ZWRGaWVsZHMpO1xuXG5cdFx0XHRpZiAocmVzdWx0ICE9IG51bGwpXG5cdFx0XHR7XG5cdFx0XHRcdGlmIChyZXN1bHQgPT09IGZhbHNlKVxuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRib290c3RyYXAuTW9kYWwuZ2V0SW5zdGFuY2UgKGAjJHt0aGlzLm1vZGFsSWR9YCkuc2hvdyAoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgZXZlbnQgdGhhdCBjYW4gYmUgY2FsbGVkIHdoZW4gdGhlIHJlbW92ZSBidXR0b24gaXMgY2xpY2tlZC5cblx0ICogVGhpcyBpcyBjYWxsZWQgYmVmb3JlIHRoZSByZW1vdmUgbW9kYWwgb3BlbnMuXG5cdCAqL1xuXHRvblJlbW92ZUNsaWNrZWQ6ICgpID0+IFByb21pc2U8Ym9vbGVhbj4gPSBudWxsO1xuXG5cdC8qKlxuXHQgKiBFeGVjdXRlcyB3aGVuIHRoZSByZW1vdmUgYnV0dG9uIGlzIGNsaWNrZWQuXG5cdCAqL1xuXHRhc3luYyByZW1vdmVDbGlja2VkICgpOiBQcm9taXNlPHZvaWQ+XG5cdHtcblx0XHRpZiAodGhpcy5vblJlbW92ZUNsaWNrZWQgIT0gbnVsbClcblx0XHR7XG5cdFx0XHRsZXQgcmVzdWx0ID0gYXdhaXQgdGhpcy5vblJlbW92ZUNsaWNrZWQgKCk7XG5cblx0XHRcdGlmIChyZXN1bHQgPT09IGZhbHNlKVxuXHRcdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dGhpcy5tb2RhbFR5cGUgPSBcInJlbW92ZVwiO1xuXG5cdFx0bGV0IHdoZXJlRmllbGRzOiBhbnlbXSA9IFtdO1xuXHRcdGxldCBob3RDb21wb25lbnQ6IEFkbWluVGFibGUgPSBudWxsO1xuXG5cdFx0aWYgKHRoaXMuYXR0YWNoZWRfbGlzdCAhPT0gXCJcIilcblx0XHR7XG5cdFx0XHRsZXQgYXR0YWNoZWRMaXN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQgKHRoaXMuYXR0YWNoZWRfbGlzdCk7XG5cdFx0XHQvLyBAdHMtaWdub3JlXG5cdFx0XHRob3RDb21wb25lbnQgPSBhdHRhY2hlZExpc3QuaG90Q29tcG9uZW50O1xuXHRcdFx0bGV0IGNoZWNrZWRSb3dzID0gaG90Q29tcG9uZW50LmdldENoZWNrZWRSb3dzICgpO1xuXG5cdFx0XHRpZiAoY2hlY2tlZFJvd3MubGVuZ3RoID4gMClcblx0XHRcdHtcblx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBjaGVja2VkUm93cy5sZW5ndGg7IGkrKylcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGxldCBjaGVja2VkUm93ID0gY2hlY2tlZFJvd3NbaV07XG5cdFx0XHRcdFx0d2hlcmVGaWVsZHMucHVzaCAoY2hlY2tlZFJvdyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0bGV0IHNlbGVjdGVkRmllbGQgPSBob3RDb21wb25lbnQuZ2V0U2VsZWN0ZWQgKCk7XG5cblx0XHRcdGlmIChzZWxlY3RlZEZpZWxkICE9IG51bGwpXG5cdFx0XHRcdHdoZXJlRmllbGRzID0gW3NlbGVjdGVkRmllbGRdO1xuXHRcdH1cblxuXHRcdGNvbnN0IGNvbmZpcm1lZDogYm9vbGVhbiA9IGNvbmZpcm0gKFwiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHJlbW92ZSB0aGlzIGl0ZW0/XCIpO1xuXG5cdFx0aWYgKGNvbmZpcm1lZCA9PT0gdHJ1ZSlcblx0XHR7XG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHdoZXJlRmllbGRzLmxlbmd0aDsgaSsrKVxuXHRcdFx0e1xuXHRcdFx0XHRsZXQgd2hlcmVGaWVsZCA9IHdoZXJlRmllbGRzW2ldO1xuXG5cdFx0XHRcdGlmIChob3RDb21wb25lbnQgIT0gbnVsbClcblx0XHRcdFx0e1xuXHRcdFx0XHRcdC8vIFJlbW92ZSBhbnkgZmllbGRzIHRoYXQgYXJlIG1hcmtlZCBhcyByZW1vdmUuXG5cdFx0XHRcdFx0Zm9yIChsZXQga2V5IGluIHdoZXJlRmllbGQpXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0bGV0IGZpZWxkVHlwZSA9IGhvdENvbXBvbmVudC5nZXRGaWVsZFR5cGUgKGtleSk7XG5cblx0XHRcdFx0XHRcdGlmIChmaWVsZFR5cGUgIT0gbnVsbClcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0aWYgKGZpZWxkVHlwZSA9PT0gXCJyZW1vdmVcIilcblx0XHRcdFx0XHRcdFx0XHRkZWxldGUgd2hlcmVGaWVsZFtrZXldO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICh0aGlzLm9uZGVsZXRlICE9IG51bGwpXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRpZiAodHlwZW9mICh0aGlzLm9uZGVsZXRlKSA9PT0gXCJzdHJpbmdcIilcblx0XHRcdFx0XHRcdHRoaXMub25kZWxldGUgPSAoPChzZWxlY3RlZEZpZWxkOiBhbnkpID0+IFByb21pc2U8dm9pZD4+bmV3IEZ1bmN0aW9uICh0aGlzLm9uZGVsZXRlKSk7XG5cblx0XHRcdFx0XHRhd2FpdCB0aGlzLm9uZGVsZXRlICh3aGVyZUZpZWxkKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRlbHNlXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRsZXQgcmVtb3ZlVXJsOiBzdHJpbmcgPSBIb3QuRGF0YS5BZG1pblBhbmVsLnJlbW92ZVVybDtcblxuXHRcdFx0XHRcdGF3YWl0IEhvdC5qc29uUmVxdWVzdCAocmVtb3ZlVXJsLCB7XG5cdFx0XHRcdFx0XHRcdHNjaGVtYTogdGhpcy5zY2hlbWEsXG5cdFx0XHRcdFx0XHRcdHdoZXJlRmllbGRzOiB3aGVyZUZpZWxkXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAod2hlcmVGaWVsZHMubGVuZ3RoID09PSAwKVxuXHRcdFx0e1xuXHRcdFx0XHRpZiAodGhpcy5vbmRlbGV0ZSAhPSBudWxsKVxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0aWYgKHR5cGVvZiAodGhpcy5vbmRlbGV0ZSkgPT09IFwic3RyaW5nXCIpXG5cdFx0XHRcdFx0XHR0aGlzLm9uZGVsZXRlID0gKDwoc2VsZWN0ZWRGaWVsZDogYW55KSA9PiBQcm9taXNlPHZvaWQ+Pm5ldyBGdW5jdGlvbiAodGhpcy5vbmRlbGV0ZSkpO1xuXG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5vbmRlbGV0ZSAobnVsbCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZVxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bGV0IHJlbW92ZVVybDogc3RyaW5nID0gSG90LkRhdGEuQWRtaW5QYW5lbC5yZW1vdmVVcmw7XG5cblx0XHRcdFx0XHRhd2FpdCBIb3QuanNvblJlcXVlc3QgKHJlbW92ZVVybCwge1xuXHRcdFx0XHRcdFx0XHRzY2hlbWE6IHRoaXMuc2NoZW1hLFxuXHRcdFx0XHRcdFx0XHR3aGVyZUZpZWxkczogbnVsbFxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XG5cdFx0XHRpZiAoaG90Q29tcG9uZW50ICE9IG51bGwpXG5cdFx0XHRcdGF3YWl0IGhvdENvbXBvbmVudC5yZWZyZXNoTGlzdCAoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogU2F2ZSB0aGlzIGZvcm0uXG5cdCAqL1xuXHRhc3luYyBvblNhdmUgKClcblx0e1xuXHRcdGxldCB2YWx1ZXM6IGFueSA9IHt9O1xuXG5cdFx0YXdhaXQgdGhpcy5wcm9jZXNzSG90RmllbGRzIChhc3luYyAoaHRtbEVsZW1lbnQ6IEVsZW1lbnQsIGZpZWxkOiB7IG5hbWU6IHN0cmluZzsgdHlwZTogc3RyaW5nOyB9KSA9PlxuXHRcdFx0e1xuXHRcdFx0XHRpZiAoZmllbGQudHlwZSA9PT0gXCJyZW1vdmVcIilcblx0XHRcdFx0XHRyZXR1cm47XG5cblx0XHRcdFx0bGV0IHZhbHVlID0gJChodG1sRWxlbWVudCkudmFsICgpO1xuXG5cdFx0XHRcdGlmICgkKGh0bWxFbGVtZW50KS5hdHRyIChcImhvdC12YWx1ZVwiKSAhPSBudWxsKVxuXHRcdFx0XHRcdHZhbHVlID0gJChodG1sRWxlbWVudCkuYXR0ciAoXCJob3QtdmFsdWVcIik7XG5cblx0XHRcdFx0aWYgKGZpZWxkLnR5cGUgPT09IFwiYXJyYXlcIilcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGlmICh2YWx1ZXNbZmllbGQubmFtZV0gPT0gbnVsbClcblx0XHRcdFx0XHRcdHZhbHVlc1tmaWVsZC5uYW1lXSA9IFtdO1xuXG5cdFx0XHRcdFx0dmFsdWVzW2ZpZWxkLm5hbWVdLnB1c2ggKHZhbHVlKTtcblxuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHZhbHVlc1tmaWVsZC5uYW1lXSA9IHZhbHVlO1xuXHRcdFx0fSk7XG5cblx0XHRpZiAodGhpcy5vbnNhdmUgIT0gbnVsbClcblx0XHR7XG5cdFx0XHRpZiAodHlwZW9mICh0aGlzLm9uc2F2ZSkgPT09IFwic3RyaW5nXCIpXG5cdFx0XHRcdHRoaXMub25zYXZlID0gKDwobW9kYWxUeXBlOiBzdHJpbmcsIHZhbHVlczogYW55LCBzZWxlY3RlZEZpZWxkczogYW55W10pID0+IFByb21pc2U8Ym9vbGVhbj4+bmV3IEZ1bmN0aW9uICh0aGlzLm9uc2F2ZSkpO1xuXG5cdFx0XHRsZXQgcmVzdWx0ID0gYXdhaXQgdGhpcy5vbnNhdmUgKHRoaXMubW9kYWxUeXBlLCB2YWx1ZXMsIHRoaXMuc2VsZWN0ZWRGaWVsZHMpO1xuXG5cdFx0XHRpZiAocmVzdWx0ID09PSBmYWxzZSlcblx0XHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRlbHNlXG5cdFx0e1xuXHRcdFx0aWYgKHRoaXMubW9kYWxUeXBlID09PSBcImFkZFwiKVxuXHRcdFx0e1xuXHRcdFx0XHRsZXQgYWRkVXJsOiBzdHJpbmcgPSBIb3QuRGF0YS5BZG1pblBhbmVsLmFkZFVybDtcblxuXHRcdFx0XHRhd2FpdCBIb3QuanNvblJlcXVlc3QgKGFkZFVybCwge1xuXHRcdFx0XHRcdFx0c2NoZW1hOiB0aGlzLnNjaGVtYSxcblx0XHRcdFx0XHRcdGZpZWxkczogdmFsdWVzXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0aGlzLm1vZGFsVHlwZSA9PT0gXCJlZGl0XCIpXG5cdFx0XHR7XG5cdFx0XHRcdGlmICh0aGlzLnNlbGVjdGVkRmllbGRzLmxlbmd0aCA9PT0gMClcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGFsZXJ0IChcIk5vIGl0ZW0ocykgc2VsZWN0ZWQhXCIpO1xuXG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0bGV0IHdoZXJlRmllbGRzOiBhbnkgPSB7fTtcblxuXHRcdFx0XHRhd2FpdCB0aGlzLnByb2Nlc3NIb3RGaWVsZHMgKGFzeW5jIChodG1sRWxlbWVudDogRWxlbWVudCwgZmllbGQ6IHsgbmFtZTogc3RyaW5nOyB0eXBlOiBzdHJpbmc7IH0pID0+XG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0aWYgKGZpZWxkLnR5cGUgPT09IFwicmVtb3ZlXCIpXG5cdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcblx0XHRcdFx0XHRcdGxldCB2YWx1ZSA9ICQoaHRtbEVsZW1lbnQpLnZhbCAoKTtcblx0XHRcblx0XHRcdFx0XHRcdGlmICgkKGh0bWxFbGVtZW50KS5hdHRyIChcImhvdC12YWx1ZVwiKSAhPSBudWxsKVxuXHRcdFx0XHRcdFx0XHR2YWx1ZSA9ICQoaHRtbEVsZW1lbnQpLmF0dHIgKFwiaG90LXZhbHVlXCIpO1xuXHRcdFxuXHRcdFx0XHRcdFx0aWYgKGZpZWxkLnR5cGUgPT09IFwiYXJyYXlcIilcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0aWYgKHdoZXJlRmllbGRzW2ZpZWxkLm5hbWVdID09IG51bGwpXG5cdFx0XHRcdFx0XHRcdFx0d2hlcmVGaWVsZHNbZmllbGQubmFtZV0gPSBbXTtcblx0XHRcblx0XHRcdFx0XHRcdFx0d2hlcmVGaWVsZHNbZmllbGQubmFtZV0ucHVzaCAodmFsdWUpO1xuXHRcdFxuXHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHR9XG5cdFx0XG5cdFx0XHRcdFx0XHR3aGVyZUZpZWxkc1tmaWVsZC5uYW1lXSA9IHZhbHVlO1xuXHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdGxldCBlZGl0VXJsOiBzdHJpbmcgPSBIb3QuRGF0YS5BZG1pblBhbmVsLmVkaXRVcmw7XG5cblx0XHRcdFx0YXdhaXQgSG90Lmpzb25SZXF1ZXN0IChlZGl0VXJsLCB7XG5cdFx0XHRcdFx0XHRzY2hlbWE6IHRoaXMuc2NoZW1hLFxuXHRcdFx0XHRcdFx0d2hlcmVGaWVsZHM6IHdoZXJlRmllbGRzLFxuXHRcdFx0XHRcdFx0ZmllbGRzOiB2YWx1ZXNcblx0XHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAodGhpcy5hdHRhY2hlZF9saXN0ICE9PSBcIlwiKVxuXHRcdHtcblx0XHRcdGxldCBhdHRhY2hlZExpc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCAodGhpcy5hdHRhY2hlZF9saXN0KTtcblx0XHRcdC8vIEB0cy1pZ25vcmVcblx0XHRcdGxldCB0YWJsZTogQWRtaW5UYWJsZSA9IGF0dGFjaGVkTGlzdC5ob3RDb21wb25lbnQ7XG5cblx0XHRcdGF3YWl0IHRhYmxlLnJlZnJlc2hMaXN0ICgpO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLmNsb3NlT25TYXZlID09PSB0cnVlKVxuXHRcdHtcblx0XHRcdGJvb3RzdHJhcC5Nb2RhbC5nZXRJbnN0YW5jZSAoYCMke3RoaXMubW9kYWxJZH1gKS5oaWRlICgpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIGxpc3Qgb2YgZGF0YSBmcm9tIHRoZSBzZXJ2ZXIuXG5cdCAqL1xuXHRvblBvc3RQbGFjZSAocGFyZW50SHRtbEVsZW1lbnQ6IEhUTUxFbGVtZW50LCBodG1sRWxlbWVudDogSFRNTEVsZW1lbnQpOiBIVE1MRWxlbWVudFxuXHR7XG5cdFx0dGhpcy5tb2RhbCA9IG5ldyBib290c3RyYXAuTW9kYWwgKCQoYCMke3RoaXMubW9kYWxJZH1gKVswXSwge1xuXHRcdFx0XHRcImJhY2tkcm9wXCI6IHRydWUsXG5cdFx0XHRcdFwia2V5Ym9hcmRcIjogdHJ1ZSxcblx0XHRcdFx0XCJmb2N1c1wiOiB0cnVlXG5cdFx0XHR9KTtcblxuXHRcdHJldHVybiAobnVsbCk7XG5cdH1cblxuXHRvdXRwdXQgKCk6IHN0cmluZyB8IEhvdENvbXBvbmVudE91dHB1dFtdXG5cdHtcblx0XHRpZiAodGhpcy5uYW1lID09PSBcIlwiKVxuXHRcdFx0dGhyb3cgbmV3IEVycm9yIChgWW91IG11c3Qgc3BlY2lmeSBhIG5hbWUgZm9yIGVhY2ggYWRtaW4tZWRpdCBlbGVtZW50IWApO1xuXG5cdFx0dGhpcy5tb2RhbElkID0gYCR7dGhpcy5uYW1lfU1vZGFsYDtcblxuXHRcdGxldCBvdXRwdXRPYmogPSBbe1xuXHRcdFx0aHRtbDogYFxuXHRcdFx0PCEtLSAke3RoaXMudGl0bGV9IE1vZGFsIFN0YXJ0IC0tPlxuXHRcdFx0PGRpdiBjbGFzcz1cIm1vZGFsIGZhZGUgJHt0aGlzLmNzc19jbGFzc31cIiBpZD1cIiR7dGhpcy5tb2RhbElkfVwiIHRhYmluZGV4PVwiLTFcIiBhcmlhLWxhYmVsbGVkYnk9XCIke3RoaXMubmFtZX1Nb2RhbExhYmVsXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG5cdFx0XHRcdDxkaXYgY2xhc3M9XCJtb2RhbC1kaWFsb2dcIj5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwibW9kYWwtY29udGVudFwiPlxuXHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cblx0XHRcdFx0XHRcdDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlXCIgaWQ9XCIke3RoaXMubmFtZX1Nb2RhbExhYmVsXCI+JHt0aGlzLnRpdGxlfTwvaDU+XG5cdFx0XHRcdFx0XHQ8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0bi1jbG9zZVwiIGRhdGEtYnMtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCI+PC9idXR0b24+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0PGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIj5cblx0XHRcdFx0XHRcdDxob3QtcGxhY2UtaGVyZSBuYW1lID0gXCJtb2RhbEJvZHlcIiB0eXBlID0gXCJtb2RhbFwiPjwvaG90LXBsYWNlLWhlcmU+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0PGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxuXHRcdFx0XHRcdFx0PGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeVwiIGRhdGEtYnMtZGlzbWlzcz1cIm1vZGFsXCI+Q2FuY2VsPC9idXR0b24+XG5cdFx0XHRcdFx0XHQ8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIG9uY2xpY2sgPSBcImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCcke3RoaXMubW9kYWxJZH0nKS5vblNhdmUgKCk7XCI+JHt0aGlzLmJ1dHRvbl90aXRsZX08L2J1dHRvbj5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQ8L2Rpdj5cblx0XHRcdDwhLS0gJHt0aGlzLnRpdGxlfSBNb2RhbCBFbmQgLS0+YCxcblx0XHRcdGRvY3VtZW50U2VsZWN0b3I6IFwiYm9keVwiXG5cdFx0fV07XG5cblx0XHRpZiAodGhpcy5hZGRfcGxhY2VfaGVyZSAhPT0gXCJcIilcblx0XHR7XG5cdFx0XHRvdXRwdXRPYmoucHVzaCAoe1xuXHRcdFx0XHRodG1sOiBgPGJ1dHRvbiBpZCA9IFwiJHt0aGlzLm1vZGFsSWR9LWFkZC1idG5cIiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1vdXRsaW5lLXNlY29uZGFyeVwiIG9uY2xpY2sgPSBcInRoaXMuYWRkQ2xpY2tlZCAoKTtcIj4ke3RoaXMuYWRkX3RleHR9PC9idXR0b24+YCxcblx0XHRcdFx0ZG9jdW1lbnRTZWxlY3RvcjogYGhvdC1wbGFjZS1oZXJlW25hbWU9XCIke3RoaXMuYWRkX3BsYWNlX2hlcmV9XCJdYFxuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuZWRpdF9wbGFjZV9oZXJlICE9PSBcIlwiKVxuXHRcdHtcblx0XHRcdG91dHB1dE9iai5wdXNoICh7XG5cdFx0XHRcdGh0bWw6IGA8YnV0dG9uIGlkID0gXCIke3RoaXMubW9kYWxJZH0tZWRpdC1idG5cIiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1vdXRsaW5lLXNlY29uZGFyeVwiIG9uY2xpY2sgPSBcInRoaXMuZWRpdENsaWNrZWQgKCk7XCI+JHt0aGlzLmVkaXRfdGV4dH08L2J1dHRvbj5gLFxuXHRcdFx0XHRkb2N1bWVudFNlbGVjdG9yOiBgaG90LXBsYWNlLWhlcmVbbmFtZT1cIiR7dGhpcy5lZGl0X3BsYWNlX2hlcmV9XCJdYFxuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMucmVtb3ZlX3BsYWNlX2hlcmUgIT09IFwiXCIpXG5cdFx0e1xuXHRcdFx0b3V0cHV0T2JqLnB1c2ggKHtcblx0XHRcdFx0aHRtbDogYDxidXR0b24gaWQgPSBcIiR7dGhpcy5tb2RhbElkfS1yZW1vdmUtYnRuXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tb3V0bGluZS1zZWNvbmRhcnlcIiBvbmNsaWNrID0gXCJ0aGlzLnJlbW92ZUNsaWNrZWQgKCk7XCI+JHt0aGlzLnJlbW92ZV90ZXh0fTwvYnV0dG9uPmAsXG5cdFx0XHRcdGRvY3VtZW50U2VsZWN0b3I6IGBob3QtcGxhY2UtaGVyZVtuYW1lPVwiJHt0aGlzLnJlbW92ZV9wbGFjZV9oZXJlfVwiXWBcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdHJldHVybiAob3V0cHV0T2JqKTtcblx0fVxufVxuIiwiaW1wb3J0IHsgSG90U3RhcSwgSG90LCBIb3RBUEksIEhvdENvbXBvbmVudCwgSG90Q29tcG9uZW50T3V0cHV0IH0gZnJvbSBcImhvdHN0YXFcIjtcbmltcG9ydCB7IEFkbWluVGFibGUgfSBmcm9tIFwiLi9hZG1pbi10YWJsZVwiO1xuXG5leHBvcnQgY2xhc3MgQWRtaW5UYWJsZUZpZWxkIGV4dGVuZHMgSG90Q29tcG9uZW50XG57XG5cdC8qKlxuXHQgKiBUaGUgdGFibGUgZmllbGQuXG5cdCAqL1xuXHRmaWVsZDogbnVtYmVyO1xuXHQvKipcblx0ICogVGhlIHR5cGUgb2YgZmllbGQuIENhbiBiZTpcblx0ICogKiB0ZXh0XG5cdCAqICogcmVtb3ZlXG5cdCAqIFxuXHQgKiBEZWZhdWx0OiB0ZXh0XG5cdCAqL1xuXHRmaWVsZF90eXBlOiBzdHJpbmc7XG5cdC8qKlxuXHQgKiBJZiBzZXQgdG8gMSwgdGhpcyB3aWxsIG5vdCBvdXRwdXQgdGhlIGZpZWxkLlxuXHQgKi9cblx0bm9fb3V0cHV0OiBzdHJpbmc7XG5cdC8qKlxuXHQgKiBUaGUgb25pbnB1dCBldmVudCBpcyBmaXJlZCB3aGVuIGFuIGl0ZW0gaXMgYWJvdXQgdG8gYmUgcGxhY2VkIGludG8gdGhlIHRhYmxlLlxuXHQgKi9cblx0b25pbnB1dDogKGl0ZW06IGFueSkgPT4gYW55O1xuXHQvKipcblx0ICogVGhlIG91dHB1dCB0byBkaXNwbGF5LlxuXHQgKi9cblx0b25vdXRwdXQ6IChpbmRleDogbnVtYmVyLCB2YWx1ZTogc3RyaW5nKSA9PiBzdHJpbmc7XG5cblx0Y29uc3RydWN0b3IgKGNvcHk6IEhvdENvbXBvbmVudCB8IEhvdFN0YXEsIGFwaTogSG90QVBJKVxuXHR7XG5cdFx0c3VwZXIgKGNvcHksIGFwaSk7XG5cblx0XHR0aGlzLnRhZyA9IFwiYWRtaW4tdGFibGUtZmllbGRcIjtcblx0XHR0aGlzLmZpZWxkID0gMDtcblx0XHR0aGlzLmZpZWxkX3R5cGUgPSBcInRleHRcIjtcblx0XHR0aGlzLm5vX291dHB1dCA9IFwiMFwiO1xuXHRcdHRoaXMub25pbnB1dCA9IG51bGw7XG5cdFx0dGhpcy5vbm91dHB1dCA9IG51bGw7XG5cdH1cblxuXHQvKipcblx0ICogQWRkIHRoaXMgdGFibGUgZmllbGQgdG8gdGhlIHRhYmxlXG5cdCAqL1xuXHRvblBvc3RQbGFjZSAocGFyZW50SHRtbEVsZW1lbnQ6IEhUTUxFbGVtZW50LCBodG1sRWxlbWVudDogSFRNTEVsZW1lbnQpOiBIVE1MRWxlbWVudFxuXHR7XG5cdFx0bGV0IGhvdENvbXBvbmVudDogQWRtaW5UYWJsZSA9IG51bGw7XG5cblx0XHQvLyBAdHMtaWdub3JlXG5cdFx0aWYgKHBhcmVudEh0bWxFbGVtZW50LnBhcmVudE5vZGUucGFyZW50Tm9kZS5ob3RDb21wb25lbnQgIT0gbnVsbClcblx0XHR7XG5cdFx0XHQvLyBAdHMtaWdub3JlXG5cdFx0XHRob3RDb21wb25lbnQgPSBwYXJlbnRIdG1sRWxlbWVudC5wYXJlbnROb2RlLnBhcmVudE5vZGUuaG90Q29tcG9uZW50O1xuXHRcdH1cblx0XHRlbHNlXG5cdFx0e1xuXHRcdFx0Ly8gQHRzLWlnbm9yZSAtIGxvb29vbC4gQWRkIGEgYmV0dGVyIHdheSB0byBnZXQgdGhlIHBhcmVudCBIb3RDb21wb25lbnQuXG5cdFx0XHRob3RDb21wb25lbnQgPSBwYXJlbnRIdG1sRWxlbWVudC5wYXJlbnROb2RlLnBhcmVudE5vZGUucGFyZW50Tm9kZS5wYXJlbnROb2RlLmhvdENvbXBvbmVudDtcblx0XHR9XG5cblx0XHRpZiAoaG90Q29tcG9uZW50ICE9IG51bGwpXG5cdFx0XHRob3RDb21wb25lbnQuYWRkSGVhZGVyRGF0YU9ubHkgKHRoaXMsIGh0bWxFbGVtZW50KTtcblxuXHRcdHJldHVybiAobnVsbCk7XG5cdH1cblxuXHRvdXRwdXQgKCk6IHN0cmluZyB8IEhvdENvbXBvbmVudE91dHB1dFtdXG5cdHtcblx0XHRpZiAodGhpcy5ub19vdXRwdXQgPT09IFwiMVwiKVxuXHRcdHtcblx0XHRcdHJldHVybiAoW3tcblx0XHRcdFx0aHRtbDogYDxkaXY+PC9kaXY+YCxcblx0XHRcdFx0cGxhY2VIZXJlUGFyZW50OiBcImFmdGVyVGFibGVcIlxuXHRcdFx0fV0pO1xuXHRcdH1cblxuXHRcdHJldHVybiAoW3tcblx0XHRcdGh0bWw6IGA8dGg+JHt0aGlzLmlubmVyfTwvdGg+YCxcblx0XHRcdHBsYWNlSGVyZVBhcmVudDogXCJoZWFkZXJcIlxuXHRcdH1dKTtcblx0fVxufVxuIiwiaW1wb3J0IHsgSG90U3RhcSwgSG90LCBIb3RBUEksIEhvdENvbXBvbmVudCwgSG90Q29tcG9uZW50T3V0cHV0IH0gZnJvbSBcImhvdHN0YXFcIjtcblxuZXhwb3J0IGNsYXNzIEFkbWluVGFibGVSb3cgZXh0ZW5kcyBIb3RDb21wb25lbnRcbntcblx0LyoqXG5cdCAqIFRoZSBmaWVsZHMgYXJlIHN0b3JlZCBpbiBhIGtleS92YWx1ZSBvYmplY3QuXG5cdCAqIFxuXHQgKiBAZXhhbXBsZSB7IFwibmFtZVwiOiBcIkpvaG4gU21pdGhcIiwgXCJlbWFpbFwiOiBcImpvaG4uc21pdGhAZW1haWwuY29tXCIgfVxuXHQgKi9cblx0ZmllbGRzOiBhbnlbXTtcblxuXHRjb25zdHJ1Y3RvciAoY29weTogSG90Q29tcG9uZW50IHwgSG90U3RhcSwgYXBpOiBIb3RBUEkpXG5cdHtcblx0XHRzdXBlciAoY29weSwgYXBpKTtcblxuXHRcdHRoaXMudGFnID0gXCJhZG1pbi10YWJsZS1yb3dcIjtcblx0XHR0aGlzLmZpZWxkcyA9IFtdO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkZCB0aGlzIHRhYmxlIHJvdyB0byB0aGUgdGFibGVcblx0ICovXG5cdG9uUG9zdFBsYWNlIChwYXJlbnRIdG1sRWxlbWVudDogSFRNTEVsZW1lbnQsIGh0bWxFbGVtZW50OiBIVE1MRWxlbWVudCk6IEhUTUxFbGVtZW50XG5cdHtcblx0XHQvLyBAdHMtaWdub3JlXG5cdFx0cGFyZW50SHRtbEVsZW1lbnQucGFyZW50Tm9kZS5wYXJlbnROb2RlLnBhcmVudE5vZGUuaG90Q29tcG9uZW50LnJvd0VsZW1lbnRzLnB1c2ggKHsgZmllbGRzOiB0aGlzLmZpZWxkcywgZWxlbWVudDogaHRtbEVsZW1lbnR9KTtcblxuXHRcdHJldHVybiAobnVsbCk7XG5cdH1cblxuXHRvdXRwdXQgKCk6IHN0cmluZyB8IEhvdENvbXBvbmVudE91dHB1dFtdXG5cdHtcblx0XHRsZXQgcm93SHRtbCA9IFwiXCI7XG5cblx0XHRpZiAodGhpcy5maWVsZHMubGVuZ3RoID4gMClcblx0XHRcdHJvd0h0bWwgKz0gYDx0ZD48aW5wdXQgdHlwZSA9IFwiY2hlY2tib3hcIiAvPjwvdGQ+YDtcblxuXHRcdGZvciAobGV0IGlJZHggPSAwOyBpSWR4IDwgdGhpcy5maWVsZHMubGVuZ3RoOyBpSWR4KyspXG5cdFx0e1xuXHRcdFx0bGV0IGZpZWxkT2JqID0gdGhpcy5maWVsZHNbaUlkeF07XG5cblx0XHRcdGZvciAobGV0IGtleSBpbiBmaWVsZE9iailcblx0XHRcdHtcblx0XHRcdFx0bGV0IHZhbHVlID0gZmllbGRPYmpba2V5XTtcblxuXHRcdFx0XHRyb3dIdG1sICs9IGA8dGQ+JHt2YWx1ZX08L3RkPmA7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIChbe1xuXHRcdFx0aHRtbDogYDx0cj4ke3Jvd0h0bWx9PC90cj5gLFxuXHRcdFx0cGxhY2VIZXJlUGFyZW50OiBcInJlc3VsdHNcIlxuXHRcdH1dKTtcblx0fVxufVxuIiwiaW1wb3J0IHsgSG90U3RhcSwgSG90LCBIb3RBUEksIEhvdENvbXBvbmVudCwgSG90Q29tcG9uZW50T3V0cHV0IH0gZnJvbSBcImhvdHN0YXFcIjtcbmltcG9ydCB7IEFkbWluVGFibGVGaWVsZCB9IGZyb20gXCIuL2FkbWluLXRhYmxlLWZpZWxkXCI7XG5cbmV4cG9ydCBjbGFzcyBBZG1pblRhYmxlIGV4dGVuZHMgSG90Q29tcG9uZW50XG57XG5cdC8qKlxuXHQgKiBUaGUgdGl0bGUgb2YgdGhpcyB0YWJsZS5cblx0ICovXG5cdHRpdGxlOiBzdHJpbmc7XG5cdC8qKlxuXHQgKiBUaGUgYXR0YWNoZWQgc2NoZW1hLlxuXHQgKi9cblx0c2NoZW1hOiBzdHJpbmc7XG5cdGhlYWRlcnM6IHtcblx0XHQvKipcblx0XHQgKiBUaGUgc3RvcmVkIGhlYWRlciBmaWVsZHMuXG5cdFx0ICovXG5cdFx0ZmllbGRzOiB7IFtuYW1lOiBzdHJpbmddOiBBZG1pblRhYmxlRmllbGQ7IH07XG5cdFx0LyoqXG5cdFx0ICogVGhlIGhlYWRlcnMgYXJlIHN0b3JlZCBpbiBhIGtleS92YWx1ZSBvYmplY3QuXG5cdFx0ICogXG5cdFx0ICogQGV4YW1wbGUgeyBcIm5hbWVcIjogXCI8dGg+TmFtZTwvdGg+XCIsIFwiZW1haWxcIjogXCI8dGg+RW1haWw8L3RoPlwiIH1cblx0XHQgKi9cblx0XHRlbGVtZW50czogeyBbbmFtZTogc3RyaW5nXTogYW55OyB9O1xuXHRcdC8qKlxuXHRcdCAqIFRoZSBoZWFkZXIgaW5kaWNpZXMgYXJlIHN0b3JlZCBpbiBhIGtleS92YWx1ZSBvYmplY3QuXG5cdFx0ICogXG5cdFx0ICogQGV4YW1wbGUgY29uc29sZS5sb2cgKHRoaXMuaGVhZGVySW5kaWNpZXNbXCJuYW1lXCJdKTsgLy8gT3V0cHV0cyAwXG5cdFx0ICovXG5cdFx0aW5kaWNpZXM6IG51bWJlcltdO1xuXHR9O1xuXHQvKipcblx0ICogVGhlIHJvdyBlbGVtZW50cyBhcmUgc3RvcmVkIGluIGFuIGFycmF5IHdpdGgga2V5L3ZhbHVlIGZpZWxkcyBhbmQgaXQncyBhdHRhY2hlZCBodG1sIGVsZW1lbnQuXG5cdCAqIFxuXHQgKiBAZXhhbXBsZVxuXHQgKiB7XG5cdCAqICAgXCJmaWVsZHNcIjogW1xuXHQgKiAgICAgICB7XG5cdCAqICAgICAgICAgXCJuYW1lXCI6IFwiSm9obiBTbWl0aFwiLFxuXHQgKiAgICAgICAgIFwiZW1haWxcIjogXCJqb2huLnNtaXRoQHRlc3QuY29tXCJcblx0ICogICAgICAgfVxuXHQgKiAgICAgXSxcblx0ICogICBcImh0bWxcIjogXCI8dHI+PHRkPkpvaG4gU21pdGg8L3RkPjx0ZD5qb2huLnNtaXRoQHRlc3QuY29tPC90ZD48L3RyPlwiXG5cdCAqIH1cblx0ICovXG5cdHJvd0VsZW1lbnRzOiB7IGZpZWxkczogYW55W107IGVsZW1lbnQ6IEhUTUxFbGVtZW50OyB9W10gPSBbXTtcblx0LyoqXG5cdCAqIFRoZSBzZWxlY3RlZCByb3cgaW5kaWNpZXMuIEVhY2ggaW5kZXggbWFwcyB0byB0aGUgcm93RWxlbWVudHMgYXJyYXkuXG5cdCAqIFxuXHQgKiBAZml4bWUgQWRkIHN1cHBvcnQgZm9yIHRoaXMgaW4gdGhlIGZ1dHVyZS5cblx0ICovXG5cdC8vcHJvdGVjdGVkIHNlbGVjdGVkUm93czogbnVtYmVyW107XG5cdC8qKlxuXHQgKiBUaGUgbW9zdCByZWNlbnRseSBzZWxlY3RlZCByb3cgaW5kZXguIFRoZSBpbmRleCBtYXBzIHRvIHRoZSByb3dFbGVtZW50cyBhcnJheS5cblx0ICovXG5cdHByb3RlY3RlZCBzZWxlY3RlZDogbnVtYmVyO1xuXHQvKipcblx0ICogVGhlIGxpc3QgZnVuY3Rpb24gdG8gZXhlY3V0ZSB0byByZXRyaWV2ZSBkYXRhLlxuXHQgKi9cblx0b25saXN0OiAoKSA9PiBQcm9taXNlPGFueVtdPjs7XG5cdC8qKlxuXHQgKiBUaGUgbGlzdCB1cmwgdG8gdXNlIGZvciB0aGlzIHRhYmxlLiBIb3QuRGF0YS5BZG1pblBhbmVsLmxpc3RVcmwgd2lsbCBub3QgYmUgdXNlZCBpbiB0aGlzIGNhc2UuXG5cdCAqL1xuXHRsaXN0dXJsOiBzdHJpbmc7XG5cdC8qKlxuXHQgKiBJZiBzZXQgdG8gdHJ1ZSwgZWFjaCByb3cgd2lsbCBoYXZlIGEgY2hlY2tib3guXG5cdCAqIEBkZWZhdWx0IHRydWVcblx0ICovXG5cdGNoZWNrYm94OiBib29sZWFuO1xuXHQvKipcblx0ICogRXhlY3V0ZXMgdGhpcyBldmVudCB3aGVuIGEgcm93IGlzIHNlbGVjdGVkLiBUaGUgcG90ZW50aWFsIGl0ZW0gdG8gYmUgc2VsZWN0ZWQgXG5cdCAqIHdpbGwgYWxzbyBiZSBwYXNzZWQuIElmIHRoaXMgcmV0dXJucyBmYWxzZSwgdGhlIHJvdyB3aWxsIG5vdCBiZSBzZWxlY3RlZC5cblx0ICovXG5cdG9uc2VsZWN0ZWRyb3c6IChyb3dJbmRleDogbnVtYmVyLCBpdGVtOiBhbnlbXSkgPT4gUHJvbWlzZTxib29sZWFuPjtcblxuXHRjb25zdHJ1Y3RvciAoY29weTogSG90Q29tcG9uZW50IHwgSG90U3RhcSwgYXBpOiBIb3RBUEkpXG5cdHtcblx0XHRzdXBlciAoY29weSwgYXBpKTtcblxuXHRcdHRoaXMudGFnID0gXCJhZG1pbi10YWJsZVwiO1xuXHRcdHRoaXMudGl0bGUgPSBcIlwiO1xuXHRcdHRoaXMuc2NoZW1hID0gXCJcIjtcblx0XHR0aGlzLmhlYWRlcnMgPSB7XG5cdFx0XHRcdGZpZWxkczoge30sXG5cdFx0XHRcdGVsZW1lbnRzOiB7fSxcblx0XHRcdFx0aW5kaWNpZXM6IFtdXG5cdFx0XHR9O1xuXHRcdHRoaXMucm93RWxlbWVudHMgPSBbXTtcblx0XHQvL3RoaXMuc2VsZWN0ZWRSb3dzID0gW107XG5cdFx0dGhpcy5vbmxpc3QgPSBudWxsO1xuXHRcdHRoaXMubGlzdHVybCA9IFwiXCI7XG5cdFx0dGhpcy5jaGVja2JveCA9IHRydWU7XG5cdFx0dGhpcy5vbnNlbGVjdGVkcm93ID0gbnVsbDtcblx0XHR0aGlzLnNlbGVjdGVkID0gLTE7XG5cdH1cblxuXHQvKipcblx0ICogQWRkIGEgaGVhZGVyIHRvIHRoZSB0YWJsZS5cblx0ICovXG5cdGFkZEhlYWRlciAodGFibGVGaWVsZEVsZW1lbnQ6IEhUTUxFbGVtZW50KVxuXHR7XG5cdFx0bGV0IGhlYWRlciA9IHRoaXMuaHRtbEVsZW1lbnRzWzBdLmdldEVsZW1lbnRzQnlUYWdOYW1lIChcInRoZWFkXCIpWzBdO1xuXG5cdFx0aWYgKHRoaXMuaGVhZGVycy5pbmRpY2llcy5sZW5ndGggPCAxKVxuXHRcdFx0dGhpcy5oZWFkZXJzLmluZGljaWVzLnB1c2ggKG51bGwpO1xuXG5cdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdHRoaXMuaGVhZGVycy5pbmRpY2llcy5wdXNoICh0YWJsZUZpZWxkRWxlbWVudC5ob3RDb21wb25lbnQuZmllbGQpO1xuXHRcdGhlYWRlci5hcHBlbmRDaGlsZCAodGFibGVGaWVsZEVsZW1lbnQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkZCBhIGhlYWRlciB0byB0aGUgdGFibGUuXG5cdCAqL1xuXHRhZGRIZWFkZXJEYXRhT25seSAodGFibGVGaWVsZDogQWRtaW5UYWJsZUZpZWxkLCBodG1sRWxlbWVudDogSFRNTEVsZW1lbnQpXG5cdHtcblx0XHRpZiAodGhpcy5oZWFkZXJzLmluZGljaWVzLmxlbmd0aCA8IDEpXG5cdFx0XHR0aGlzLmhlYWRlcnMuaW5kaWNpZXMucHVzaCAobnVsbCk7XG5cblx0XHR0aGlzLmhlYWRlcnMuaW5kaWNpZXMucHVzaCAodGFibGVGaWVsZC5maWVsZCk7XG5cdFx0dGhpcy5oZWFkZXJzLmZpZWxkc1t0YWJsZUZpZWxkLmZpZWxkXSA9IHRhYmxlRmllbGQ7XG5cdFx0dGhpcy5oZWFkZXJzLmVsZW1lbnRzW3RhYmxlRmllbGQuZmllbGRdID0gaHRtbEVsZW1lbnQ7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBmaWVsZCB0eXBlIG9mIGEgZmllbGQuXG5cdCAqL1xuXHRnZXRGaWVsZFR5cGUgKGZpZWxkTmFtZTogc3RyaW5nKTogc3RyaW5nXG5cdHtcblx0XHRpZiAodGhpcy5oZWFkZXJzLmVsZW1lbnRzW2ZpZWxkTmFtZV0gIT0gbnVsbClcblx0XHR7XG5cdFx0XHRsZXQgaG90Q29tcG9uZW50OiBBZG1pblRhYmxlRmllbGQgPSB0aGlzLmhlYWRlcnMuZWxlbWVudHNbZmllbGROYW1lXS5ob3RDb21wb25lbnQ7XG5cblx0XHRcdGlmIChob3RDb21wb25lbnQgIT0gbnVsbClcblx0XHRcdFx0cmV0dXJuIChob3RDb21wb25lbnQuZmllbGRfdHlwZSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIChudWxsKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBFeGVjdXRlcyB3aGVuIGEgcm93IGlzIHNlbGVjdGVkLlxuXHQgKi9cblx0YXN5bmMgc2VsZWN0Um93IChodG1sRWxlbWVudDogSFRNTEVsZW1lbnQsIHJvd0luZGV4OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+XG5cdHtcblx0XHRpZiAodGhpcy5vbnNlbGVjdGVkcm93ICE9IG51bGwpXG5cdFx0e1xuXHRcdFx0aWYgKHR5cGVvZiAodGhpcy5vbnNlbGVjdGVkcm93KSA9PT0gXCJzdHJpbmdcIilcblx0XHRcdFx0dGhpcy5vbnNlbGVjdGVkcm93ID0gKDwocm93SW5kZXg6IG51bWJlciwgaXRlbTogYW55W10pID0+IFByb21pc2U8Ym9vbGVhbj4+bmV3IEZ1bmN0aW9uICh0aGlzLm9uc2VsZWN0ZWRyb3cpKTtcblxuXHRcdFx0bGV0IGl0ZW06IGFueVtdID0gbnVsbDtcblxuXHRcdFx0aWYgKHRoaXMucm93RWxlbWVudHNbcm93SW5kZXhdICE9IG51bGwpXG5cdFx0XHRcdGl0ZW0gPSB0aGlzLnJvd0VsZW1lbnRzW3Jvd0luZGV4XS5maWVsZHM7XG5cblx0XHRcdGxldCByZXN1bHQgPSBhd2FpdCB0aGlzLm9uc2VsZWN0ZWRyb3cgKHJvd0luZGV4LCBpdGVtKTtcblxuXHRcdFx0aWYgKHJlc3VsdCA9PT0gZmFsc2UpXG5cdFx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBJbiB0aGUgZnV0dXJlLCB3ZSB3aWxsIHN1cHBvcnQgbXVsdGlwbGUgcm93cyBiZWluZyBzZWxlY3RlZC4gRm9yIG5vdyBcblx0XHQvLyB0aGlzIHdpbGwgZW5zdXJlIHRoYXQgb25seSBvbmUgcm93IGlzIHNlbGVjdGVkIGF0IGEgdGltZS5cblx0XHR7XG5cdFx0XHRsZXQgdGJvZHkgPSB0aGlzLmh0bWxFbGVtZW50c1sxXS5nZXRFbGVtZW50c0J5VGFnTmFtZSAoXCJ0Ym9keVwiKVswXTtcblx0XHRcdGxldCByb3dzID0gdGJvZHkuZ2V0RWxlbWVudHNCeVRhZ05hbWUgKFwidHJcIik7XG5cblx0XHRcdGZvciAobGV0IGlJZHggPSAwOyBpSWR4IDwgcm93cy5sZW5ndGg7IGlJZHgrKylcblx0XHRcdHtcblx0XHRcdFx0bGV0IHJvdzogSFRNTFRhYmxlUm93RWxlbWVudCA9IHJvd3NbaUlkeF07XG5cblx0XHRcdFx0aWYgKHJvdy5jbGFzc0xpc3QuY29udGFpbnMgKFwidGFibGUtcHJpbWFyeVwiKSA9PT0gdHJ1ZSlcblx0XHRcdFx0XHRyb3cuY2xhc3NMaXN0LnJlbW92ZSAoXCJ0YWJsZS1wcmltYXJ5XCIpO1xuXHRcdFx0fVxuXG5cdFx0XHRodG1sRWxlbWVudC5jbGFzc0xpc3QuYWRkIChcInRhYmxlLXByaW1hcnlcIik7XG5cdFx0fVxuXG5cdFx0dGhpcy5zZWxlY3RlZCA9IHJvd0luZGV4O1xuXG5cdFx0Lyp0aGlzLnNlbGVjdGVkUm93cyA9IFtdO1xuXHRcdGxldCB0Ym9keSA9IHRoaXMuaHRtbEVsZW1lbnRzWzFdLmdldEVsZW1lbnRzQnlUYWdOYW1lIChcInRib2R5XCIpWzBdO1xuXG5cdFx0Ly8gRmluZCBhbGwgdGhlIGNoZWNrYm94ZXMgaW4gdGJvZHkuXG5cdFx0bGV0IGNoZWNrYm94ZXMgPSB0Ym9keS5nZXRFbGVtZW50c0J5VGFnTmFtZSAoXCJpbnB1dFwiKTtcblxuXHRcdGZvciAobGV0IGlJZHggPSAwOyBpSWR4IDwgY2hlY2tib3hlcy5sZW5ndGg7IGlJZHgrKylcblx0XHR7XG5cdFx0XHRsZXQgY2hlY2tib3g6IEhUTUxJbnB1dEVsZW1lbnQgPSBjaGVja2JveGVzW2lJZHhdO1xuXG5cdFx0XHRpZiAoY2hlY2tib3guY2hlY2tlZCAhPSBudWxsKVxuXHRcdFx0e1xuXHRcdFx0XHRpZiAoY2hlY2tib3guY2hlY2tlZCA9PT0gdHJ1ZSlcblx0XHRcdFx0e1xuXHRcdFx0XHRcdC8vIEdldCB0aGUgZGF0YS1pbmRleCBhdHRyaWJ1dGUuXG5cdFx0XHRcdFx0bGV0IGRhdGFJbmRleFN0cjogc3RyaW5nID0gY2hlY2tib3gucGFyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50LmdldEF0dHJpYnV0ZSAoXCJkYXRhLWluZGV4XCIpO1xuXHRcdFx0XHRcdGxldCBkYXRhSW5kZXg6IG51bWJlciA9ICBwYXJzZUludCAoZGF0YUluZGV4U3RyKTtcblxuXHRcdFx0XHRcdHRoaXMuc2VsZWN0ZWRSb3dzLnB1c2ggKGRhdGFJbmRleCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9Ki9cblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIHNlbGVjdGVkIGRhdGEuXG5cdCAqL1xuXHRnZXRTZWxlY3RlZCAoKTogYW55W11cblx0e1xuXHRcdGxldCBpbmRleDogbnVtYmVyID0gdGhpcy5zZWxlY3RlZDtcblxuXHRcdGlmIChpbmRleCA8IDApXG5cdFx0XHRyZXR1cm4gKG51bGwpO1xuXG5cdFx0cmV0dXJuICh0aGlzLnJvd0VsZW1lbnRzW2luZGV4XS5maWVsZHMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgc2VsZWN0ZWQgZGF0YS5cblx0ICovXG5cdC8qZ2V0U2VsZWN0ZWRSb3dzICgpOiBhbnlbXVxuXHR7XG5cdFx0bGV0IHJvd3M6IGFueVtdID0gW107XG5cblx0XHRmb3IgKGxldCBpSWR4ID0gMDsgaUlkeCA8IHRoaXMuc2VsZWN0ZWRSb3dzLmxlbmd0aDsgaUlkeCsrKVxuXHRcdHtcblx0XHRcdGxldCBpbmRleDogbnVtYmVyID0gdGhpcy5zZWxlY3RlZFJvd3NbaUlkeF07XG5cdFx0XHRyb3dzLnB1c2ggKHRoaXMucm93RWxlbWVudHNbaW5kZXhdLmZpZWxkcyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIChyb3dzKTtcblx0fSovXG5cblx0LyoqXG5cdCAqIEdldCB0aGUgZGF0YSBmb3IgZWFjaCByb3cgdGhhdCBoYXMgYmVlbiBjaGVja2VkLlxuXHQgKi9cblx0Z2V0Q2hlY2tlZFJvd3MgKCk6IGFueVtdXG5cdHtcblx0XHRsZXQgcm93czogYW55W10gPSBbXTtcblx0XHRsZXQgdGJvZHkgPSB0aGlzLmh0bWxFbGVtZW50c1sxXS5nZXRFbGVtZW50c0J5VGFnTmFtZSAoXCJ0Ym9keVwiKVswXTtcblxuXHRcdC8vIEZpbmQgYWxsIHRoZSBjaGVja2JveGVzIGluIHRib2R5LlxuXHRcdGxldCBjaGVja2JveGVzID0gdGJvZHkuZ2V0RWxlbWVudHNCeVRhZ05hbWUgKFwiaW5wdXRcIik7XG5cblx0XHRmb3IgKGxldCBpSWR4ID0gMDsgaUlkeCA8IGNoZWNrYm94ZXMubGVuZ3RoOyBpSWR4KyspXG5cdFx0e1xuXHRcdFx0bGV0IGNoZWNrYm94OiBIVE1MSW5wdXRFbGVtZW50ID0gY2hlY2tib3hlc1tpSWR4XTtcblxuXHRcdFx0aWYgKGNoZWNrYm94LmNoZWNrZWQgIT0gbnVsbClcblx0XHRcdHtcblx0XHRcdFx0aWYgKGNoZWNrYm94LmNoZWNrZWQgPT09IHRydWUpXG5cdFx0XHRcdHtcblx0XHRcdFx0XHQvLyBHZXQgdGhlIGRhdGEtaW5kZXggYXR0cmlidXRlLlxuXHRcdFx0XHRcdGxldCBkYXRhSW5kZXhTdHI6IHN0cmluZyA9IGNoZWNrYm94LnBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudC5nZXRBdHRyaWJ1dGUgKFwiZGF0YS1pbmRleFwiKTtcblx0XHRcdFx0XHRsZXQgZGF0YUluZGV4OiBudW1iZXIgPSAgcGFyc2VJbnQgKGRhdGFJbmRleFN0cik7XG5cblx0XHRcdFx0XHRyb3dzLnB1c2ggKHRoaXMucm93RWxlbWVudHNbZGF0YUluZGV4XS5maWVsZHMpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIChyb3dzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgYSByb3cncyBkYXRhLlxuXHQgKi9cblx0Z2V0Um93IChpbmRleDogbnVtYmVyKTogYW55W11cblx0e1xuXHRcdHJldHVybiAodGhpcy5yb3dFbGVtZW50c1tpbmRleF0uZmllbGRzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGQgYSByb3cgdG8gdGhlIHRhYmxlLlxuXHQgKiBcblx0ICogQHBhcmFtIHtBcnJheX0gZmllbGRzIEEgbGlzdCBvZiB2YWx1ZXMgdG8gYXBwZW5kLlxuXHQgKi9cblx0YWRkUm93IChmaWVsZHM6IHsgW25hbWU6IHN0cmluZ106IGFueSB9W10pXG5cdHtcblx0XHRpZiAoZmllbGRzID09IG51bGwpXG5cdFx0XHRyZXR1cm47XG5cblx0XHRpZiAoZmllbGRzLmxlbmd0aCA9PSAwKVxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0bGV0IHRib2R5ID0gdGhpcy5odG1sRWxlbWVudHNbMV0uZ2V0RWxlbWVudHNCeVRhZ05hbWUgKFwidGJvZHlcIilbMF07XG5cdFx0bGV0IGluZGV4OiBudW1iZXIgPSB0aGlzLnJvd0VsZW1lbnRzLmxlbmd0aDtcblx0XHRsZXQgcm93U3RyID0gYDx0ciBvbmNsaWNrID0gXCJ0aGlzLnBhcmVudE5vZGUucGFyZW50Tm9kZS5wYXJlbnROb2RlLnBhcmVudE5vZGUuaG90Q29tcG9uZW50LnNlbGVjdFJvdyAodGhpcywgJHtpbmRleH0pO1wiPmA7XG5cblx0XHRpZiAodHlwZW9mICh0aGlzLmNoZWNrYm94KSA9PT0gXCJzdHJpbmdcIilcblx0XHRcdHRoaXMuY2hlY2tib3ggPSBIb3RTdGFxLnBhcnNlQm9vbGVhbiAodGhpcy5jaGVja2JveCk7XG5cblx0XHRpZiAodGhpcy5jaGVja2JveCA9PT0gdHJ1ZSlcblx0XHRcdHJvd1N0ciArPSBgPHRkPjxpbnB1dCB0eXBlID0gXCJjaGVja2JveFwiIC8+PC90ZD5gO1xuXHRcdGVsc2Vcblx0XHRcdHJvd1N0ciArPSBgPHRkPjwvdGQ+YDtcblxuXHRcdGZvciAobGV0IGlJZHggPSAwOyBpSWR4IDwgdGhpcy5oZWFkZXJzLmluZGljaWVzLmxlbmd0aDsgaUlkeCsrKVxuXHRcdHtcblx0XHRcdC8vIEB0cy1pZ25vcmUgLSBAZml4bWUgSSBtZXNzZWQgdGhpcyB1cCwgd2lsbCBmaXguXG5cdFx0XHRsZXQga2V5OiBzdHJpbmcgPSB0aGlzLmhlYWRlcnMuaW5kaWNpZXNbaUlkeF07XG5cblx0XHRcdGlmIChrZXkgPT0gbnVsbClcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdC8vIEB0cy1pZ25vcmVcblx0XHRcdGxldCB2YWx1ZSA9IGZpZWxkc1trZXldO1xuXHRcdFx0Ly8gRm9yIGVhY2ggLiBpbiBrZXkgd2UgbmVlZCB0byBnZXQgdGhlIG5leHQgb2JqZWN0LlxuXHRcdFx0bGV0IGtleVBhcnRzOiBzdHJpbmdbXSA9IGtleS5zcGxpdCAoXCIuXCIpO1xuXHRcdFx0XG5cdFx0XHRpZiAoa2V5UGFydHMubGVuZ3RoID4gMSlcblx0XHRcdHtcblx0XHRcdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdFx0XHRsZXQgdGVtcFZhbHVlOiBhbnkgPSBmaWVsZHNba2V5UGFydHNbMF1dO1xuXG5cdFx0XHRcdGZvciAobGV0IGlJZHggPSAxOyBpSWR4IDwga2V5UGFydHMubGVuZ3RoOyBpSWR4KyspXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRjb25zdCBwYXJ0OiBzdHJpbmcgPSBrZXlQYXJ0c1tpSWR4XTtcblxuXHRcdFx0XHRcdHRlbXBWYWx1ZSA9IHRlbXBWYWx1ZVtwYXJ0XTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHZhbHVlID0gdGVtcFZhbHVlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodGhpcy5oZWFkZXJzLmVsZW1lbnRzW2tleV0gIT0gbnVsbClcblx0XHRcdHtcblx0XHRcdFx0Ly8gQHRzLWlnbm9yZSAtIEBmaXhtZSBJIG1lc3NlZCB0aGlzIHVwLCB3aWxsIGZpeC5cblx0XHRcdFx0bGV0IGZpZWxkVHlwZTogc3RyaW5nID0gdGhpcy5nZXRGaWVsZFR5cGUgKGtleSk7XG5cblx0XHRcdFx0aWYgKGZpZWxkVHlwZSA9PSBudWxsKVxuXHRcdFx0XHRcdGZpZWxkVHlwZSA9IFwidGV4dFwiO1xuXG5cdFx0XHRcdGlmIChmaWVsZFR5cGUgIT09IFwicmVtb3ZlXCIpXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRjb25zdCBvcmdGaWVsZCA9IHRoaXMuaGVhZGVycy5maWVsZHNba2V5XTtcblx0XHRcdFx0XHRsZXQgZGVmYXVsdE91dHB1dDogYm9vbGVhbiA9IHRydWU7XG5cblx0XHRcdFx0XHRpZiAob3JnRmllbGQgIT0gbnVsbClcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRpZiAob3JnRmllbGQub25pbnB1dCAhPSBudWxsKVxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRpZiAodHlwZW9mIChvcmdGaWVsZC5vbmlucHV0KSA9PT0gXCJzdHJpbmdcIilcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmhlYWRlcnMuZmllbGRzW2tleV0ub25pbnB1dCA9ICg8KGl0ZW06IGFueSkgPT4gYW55Pm5ldyBGdW5jdGlvbiAob3JnRmllbGQub25pbnB1dCkpO1xuXG5cdFx0XHRcdFx0XHRcdHZhbHVlID0gb3JnRmllbGQub25pbnB1dCAodmFsdWUpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZiAob3JnRmllbGQub25vdXRwdXQgIT0gbnVsbClcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0aWYgKHR5cGVvZiAob3JnRmllbGQub25vdXRwdXQpID09PSBcInN0cmluZ1wiKVxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuaGVhZGVycy5maWVsZHNba2V5XS5vbm91dHB1dCA9ICg8KGluZGV4OiBudW1iZXIsIHZhbHVlOiBzdHJpbmcpID0+IHN0cmluZz5uZXcgRnVuY3Rpb24gKG9yZ0ZpZWxkLm9ub3V0cHV0KSk7XG5cblx0XHRcdFx0XHRcdFx0ZGVmYXVsdE91dHB1dCA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBuZXdPdXRwdXQ6IHN0cmluZyA9IG9yZ0ZpZWxkLm9ub3V0cHV0IChpbmRleCwgdmFsdWUpO1xuXHRcdFx0XHRcdFx0XHRyb3dTdHIgKz0gbmV3T3V0cHV0O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmIChkZWZhdWx0T3V0cHV0ID09PSB0cnVlKVxuXHRcdFx0XHRcdFx0cm93U3RyICs9IGA8dGQgZGF0YS1pbmRleCA9IFwiJHtpbmRleH1cIj4ke3ZhbHVlfTwvdGQ+YDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJvd1N0ciArPSBcIjwvdHI+XCI7XG5cblx0XHRsZXQgbmV3T2JqID0gSG90U3RhcS5hZGRIdG1sICh0Ym9keSwgcm93U3RyKTtcblxuXHRcdHRoaXMucm93RWxlbWVudHMucHVzaCAoe1xuXHRcdFx0XHRmaWVsZHM6IGZpZWxkcyxcblx0XHRcdFx0ZWxlbWVudDogKDxIVE1MRWxlbWVudD5uZXdPYmopXG5cdFx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDbGVhciB0aGUgbGlzdCBvZiByb3dzLlxuXHQgKi9cblx0YXN5bmMgY2xlYXJSb3dzICgpXG5cdHtcblx0XHR0aGlzLnJvd0VsZW1lbnRzID0gW107XG5cblx0XHRsZXQgdGJvZHkgPSB0aGlzLmh0bWxFbGVtZW50c1sxXS5nZXRFbGVtZW50c0J5VGFnTmFtZSAoXCJ0Ym9keVwiKVswXTtcblxuXHRcdHRib2R5LmlubmVySFRNTCA9IFwiXCI7XG5cdH1cblxuXHQvKipcblx0ICogUmVmcmVzaCB0aGUgbGlzdC5cblx0ICovXG5cdGFzeW5jIHJlZnJlc2hMaXN0IChsaXN0OiBhbnlbXSA9IG51bGwpXG5cdHtcblx0XHRpZiAodGhpcy5vbmxpc3QgIT0gbnVsbClcblx0XHR7XG5cdFx0XHRpZiAodHlwZW9mICh0aGlzLm9ubGlzdCkgPT09IFwic3RyaW5nXCIpXG5cdFx0XHRcdHRoaXMub25saXN0ID0gKDwoKSA9PiBQcm9taXNlPGFueVtdPj5uZXcgRnVuY3Rpb24gKHRoaXMub25saXN0KSk7XG5cblx0XHRcdGxpc3QgPSBhd2FpdCB0aGlzLm9ubGlzdCAoKTtcblx0XHR9XG5cdFx0ZWxzZVxuXHRcdHtcblx0XHRcdGxldCBsaXN0VXJsOiBzdHJpbmcgPSBcIlwiO1xuXG5cdFx0XHRpZiAodGhpcy5saXN0dXJsICE9PSBcIlwiKVxuXHRcdFx0XHRsaXN0VXJsID0gdGhpcy5saXN0dXJsO1xuXG5cdFx0XHRpZiAobGlzdFVybCAhPT0gXCJcIilcblx0XHRcdHtcblx0XHRcdFx0bGlzdCA9IGF3YWl0IEhvdC5qc29uUmVxdWVzdCAobGlzdFVybCwge1xuXHRcdFx0XHRcdFx0c2NoZW1hOiB0aGlzLnNjaGVtYVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRoaXMuY2xlYXJSb3dzICgpO1xuXG5cdFx0aWYgKGxpc3QgIT0gbnVsbClcblx0XHR7XG5cdFx0XHRmb3IgKGxldCBpSWR4ID0gMDsgaUlkeCA8IGxpc3QubGVuZ3RoOyBpSWR4KyspXG5cdFx0XHR7XG5cdFx0XHRcdGxldCBmaWVsZHMgPSBsaXN0W2lJZHhdO1xuXG5cdFx0XHRcdHRoaXMuYWRkUm93IChmaWVsZHMpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIGxpc3Qgb2YgZGF0YSBmcm9tIHRoZSBzZXJ2ZXIuXG5cdCAqL1xuXHRvblBvc3RQbGFjZSAocGFyZW50SHRtbEVsZW1lbnQ6IEhUTUxFbGVtZW50LCBodG1sRWxlbWVudDogSFRNTEVsZW1lbnQpOiBIVE1MRWxlbWVudFxuXHR7XG5cdFx0c2V0VGltZW91dCAoYXN5bmMgKCkgPT5cblx0XHRcdHtcblx0XHRcdFx0YXdhaXQgdGhpcy5yZWZyZXNoTGlzdCAoKTtcblx0XHRcdH0sIDUwKTtcblxuXHRcdHJldHVybiAobnVsbCk7XG5cdH1cblxuXHRvdXRwdXQgKCk6IHN0cmluZyB8IEhvdENvbXBvbmVudE91dHB1dFtdXG5cdHtcblx0XHRsZXQgZW1wdHlDaGVja2JveEhlYWRlcjogc3RyaW5nID0gXCI8dGg+PC90aD5cIjtcblxuXHRcdHJldHVybiAoYFxuXHRcdDxkaXYgaWQgPSBcIiR7dGhpcy5odG1sRWxlbWVudHNbMF0uaWR9XCI+XG5cdFx0XHQ8aDI+JHt0aGlzLnRpdGxlfTwvaDI+XG5cdFx0XHQ8ZGl2IGNsYXNzPVwidGFibGUtcmVzcG9uc2l2ZVwiPlxuXHRcdFx0PHRhYmxlIGlkID0gXCIke3RoaXMuaHRtbEVsZW1lbnRzWzBdLmlkfVRhYmxlXCIgY2xhc3M9XCJ0YWJsZSB0YWJsZS1zdHJpcGVkIHRhYmxlLXNtXCI+XG5cdFx0XHRcdDx0aGVhZD5cblx0XHRcdFx0XHQ8dHIgaG90LXBsYWNlLWhlcmUgPSBcImhlYWRlclwiPlxuXHRcdFx0XHRcdFx0JHtlbXB0eUNoZWNrYm94SGVhZGVyfVxuXHRcdFx0XHRcdDwvdHI+XG5cdFx0XHRcdDwvdGhlYWQ+XG5cdFx0XHRcdDx0Ym9keSBob3QtcGxhY2UtaGVyZSA9IFwicmVzdWx0c1wiPlxuXHRcdFx0XHQ8L3Rib2R5PlxuXHRcdFx0PC90YWJsZT5cblx0XHRcdDxob3QtcGxhY2UtaGVyZSBuYW1lID0gXCJhZnRlclRhYmxlXCI+PC9ob3QtcGxhY2UtaGVyZT5cblx0XHRcdDwvZGl2PlxuXHRcdDwvZGl2PmApO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBIb3RTdGFxLCBIb3QsIEhvdEFQSSwgSG90Q29tcG9uZW50LCBIb3RDb21wb25lbnRPdXRwdXQgfSBmcm9tIFwiaG90c3RhcVwiO1xuXG5leHBvcnQgY2xhc3MgQWRtaW5UZXh0IGV4dGVuZHMgSG90Q29tcG9uZW50XG57XG5cdC8qKlxuXHQgKiBJZiBzZXQgdG8gMSwgdGhpcyB3aWxsIG5vdCBvdXRwdXQgdGhlIGZpZWxkLlxuXHQgKi9cblx0bm9fb3V0cHV0OiBzdHJpbmc7XG5cdC8qKlxuXHQgKiBUaGUgY2xhc3NlcyB0byBzZXQgZm9yIHRoZSBpbnB1dC5cblx0ICogQGRlZmF1bHQgXCJmb3JtLWNvbnRyb2xcIlxuXHQgKi9cblx0Y3NzX2NsYXNzOiBzdHJpbmc7XG5cblx0Y29uc3RydWN0b3IgKGNvcHk6IEhvdENvbXBvbmVudCB8IEhvdFN0YXEsIGFwaTogSG90QVBJKVxuXHR7XG5cdFx0c3VwZXIgKGNvcHksIGFwaSk7XG5cblx0XHR0aGlzLnRhZyA9IFwiYWRtaW4tdGV4dFwiO1xuXHRcdHRoaXMubm9fb3V0cHV0ID0gXCIwXCI7XG5cdFx0dGhpcy5jc3NfY2xhc3MgPSBcImZvcm0tY29udHJvbFwiXG5cdH1cblxuXHQvKipcblx0ICogQ29ycmVjdHMgdGhlIHBsYWNlbWVudCBvZiB0aGUgdGV4dCBlbGVtZW50cyBmb3IgbW9kYWxzLlxuXHQgKi9cblx0b25Qb3N0UGxhY2UgKHBhcmVudEh0bWxFbGVtZW50OiBIVE1MRWxlbWVudCwgaHRtbEVsZW1lbnQ6IEhUTUxFbGVtZW50KTogSFRNTEVsZW1lbnRcblx0e1xuXHRcdGxldCBwbGFjZUhlcmVBcnJheSA9IHBhcmVudEh0bWxFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwgKGBob3QtcGxhY2UtaGVyZVt0eXBlPVwibW9kYWxcIl1gKTtcblxuXHRcdGlmIChwbGFjZUhlcmVBcnJheS5sZW5ndGggPiAwKVxuXHRcdHtcblx0XHRcdGxldCBwbGFjZUhlcmUgPSBwbGFjZUhlcmVBcnJheVswXTtcblx0XHRcdHBhcmVudEh0bWxFbGVtZW50LnJlbW92ZUNoaWxkIChodG1sRWxlbWVudCk7XG5cdFx0XHRwbGFjZUhlcmUuYXBwZW5kQ2hpbGQgKGh0bWxFbGVtZW50KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gKG51bGwpO1xuXHR9XG5cblx0b3V0cHV0ICgpOiBzdHJpbmcgfCBIb3RDb21wb25lbnRPdXRwdXRbXVxuXHR7XG5cdFx0bGV0IHZhbHVlOiBzdHJpbmcgPSBcIlwiO1xuXG5cdFx0aWYgKHRoaXMudmFsdWUgIT0gbnVsbClcblx0XHRcdHZhbHVlID0gdGhpcy52YWx1ZTtcblxuXHRcdGlmICh0aGlzLm5vX291dHB1dCA9PT0gXCIxXCIpXG5cdFx0XHRyZXR1cm4gKGA8ZGl2PjxpbnB1dCBjbGFzcz1cIiR7dGhpcy5jc3NfY2xhc3N9XCIgdHlwZSA9IFwiaGlkZGVuXCIgdmFsdWUgPSBcIiR7dmFsdWV9XCIgLz48L2Rpdj5gKTtcblxuXHRcdGNvbnN0IGZpZWxkID0gdGhpcy5odG1sRWxlbWVudHNbMF0uZ2V0QXR0cmlidXRlIChcImhvdC1maWVsZFwiKTtcblx0XHRsZXQgZmllbGRfdHlwZSA9IHRoaXMuaHRtbEVsZW1lbnRzWzBdLmdldEF0dHJpYnV0ZSAoXCJob3QtZmllbGQtdHlwZVwiKTtcblxuXHRcdGlmIChmaWVsZF90eXBlID09IG51bGwpXG5cdFx0XHRmaWVsZF90eXBlID0gXCJ0ZXh0XCI7XG5cblx0XHRyZXR1cm4gKGA8ZGl2PlxuXHRcdFx0PGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiPiR7dGhpcy5pbm5lcn08L2xhYmVsPlxuXHRcdFx0PGlucHV0IGNsYXNzPVwiJHt0aGlzLmNzc19jbGFzc31cIiB0eXBlID0gXCJ0ZXh0XCIgaG90LWZpZWxkID0gXCIke2ZpZWxkfVwiIGhvdC1maWVsZC10eXBlID0gXCIke2ZpZWxkX3R5cGV9XCIgdmFsdWUgPSBcIiR7dmFsdWV9XCIgLz5cblx0XHQ8L2Rpdj5gKTtcblx0fVxufVxuIiwibW9kdWxlLmV4cG9ydHMgPSBIb3RTdGFxV2ViOyIsIm1vZHVsZS5leHBvcnRzID0gYm9vdHN0cmFwOyIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCJpbXBvcnQgeyBBZG1pbkJ1dHRvbiB9IGZyb20gXCIuL2NvbXBvbmVudHMvYWRtaW4tYnV0dG9uXCI7XG5pbXBvcnQgeyBBZG1pbkRyb3Bkb3duIH0gZnJvbSBcIi4vY29tcG9uZW50cy9hZG1pbi1kcm9wZG93blwiO1xuaW1wb3J0IHsgQWRtaW5EYXNoYm9hcmQgfSBmcm9tIFwiLi9jb21wb25lbnRzL2FkbWluLWRhc2hib2FyZFwiO1xuaW1wb3J0IHsgQWRtaW5FZGl0IH0gZnJvbSBcIi4vY29tcG9uZW50cy9hZG1pbi1lZGl0XCI7XG5pbXBvcnQgeyBBZG1pblRhYmxlIH0gZnJvbSBcIi4vY29tcG9uZW50cy9hZG1pbi10YWJsZVwiO1xuaW1wb3J0IHsgQWRtaW5UYWJsZUZpZWxkIH0gZnJvbSBcIi4vY29tcG9uZW50cy9hZG1pbi10YWJsZS1maWVsZFwiO1xuaW1wb3J0IHsgQWRtaW5UYWJsZVJvdyB9IGZyb20gXCIuL2NvbXBvbmVudHMvYWRtaW4tdGFibGUtcm93XCI7XG5pbXBvcnQgeyBBZG1pblRleHQgfSBmcm9tIFwiLi9jb21wb25lbnRzL2FkbWluLXRleHRcIjtcblxuZXhwb3J0IHtcblx0XHRBZG1pbkJ1dHRvbixcblx0XHRBZG1pbkRyb3Bkb3duLFxuXHRcdEFkbWluRGFzaGJvYXJkLFxuXHRcdEFkbWluRWRpdCxcblx0XHRBZG1pblRhYmxlLFxuXHRcdEFkbWluVGFibGVGaWVsZCxcblx0XHRBZG1pblRhYmxlUm93LFxuXHRcdEFkbWluVGV4dFxuXHR9OyJdLCJuYW1lcyI6WyJBZG1pbkJ1dHRvbiIsIkhvdENvbXBvbmVudCIsImNvbnN0cnVjdG9yIiwiY29weSIsImFwaSIsInN1cGVyIiwidGhpcyIsInRhZyIsImNzc19jbGFzcyIsIm9uY2xpY2siLCJidXR0b25DbGlja2VkIiwib25Qb3N0UGxhY2UiLCJwYXJlbnRIdG1sRWxlbWVudCIsImh0bWxFbGVtZW50IiwicGxhY2VIZXJlQXJyYXkiLCJxdWVyeVNlbGVjdG9yQWxsIiwibGVuZ3RoIiwicGxhY2VIZXJlIiwicmVtb3ZlQ2hpbGQiLCJhcHBlbmRDaGlsZCIsIkZ1bmN0aW9uIiwiYWRkRXZlbnRMaXN0ZW5lciIsIm91dHB1dCIsImh0bWxFbGVtZW50cyIsImlkIiwiaW5uZXIiLCJBZG1pbkRhc2hib2FyZCIsInRpdGxlIiwiYmFzZSIsIkhvdCIsIkRhdGEiLCJBZG1pblBhbmVsIiwiYmFzZVVybCIsImFkZFVybCIsImVkaXRVcmwiLCJyZW1vdmVVcmwiLCJsaXN0VXJsIiwiQWRtaW5Ecm9wZG93biIsInBsYWNlaG9sZGVyIiwib25zZWFyY2giLCJvbnNlbGVjdCIsInF1ZXJ5U2VsZWN0b3IiLCJldmVudCIsInNlYXJjaFRleHQiLCJjdXJyZW50VGFyZ2V0IiwidmFsdWUiLCJyZXN1bHRzIiwic2VhcmNoUmVzdWx0c0RpdiIsIiQiLCJmaW5kIiwiZW1wdHkiLCJpSWR4IiwicmVzdWx0IiwidXJsIiwidGV4dCIsImFwcGVuZCIsInNlbGVjdGVkIiwiaW5kZXgiLCJnZXRBdHRyaWJ1dGUiLCJpbm5lckhUTUwiLCJBZG1pbkVkaXQiLCJvbkFkZENsaWNrZWQiLCJvbkVkaXRDbGlja2VkIiwib25SZW1vdmVDbGlja2VkIiwiYnV0dG9uX3RpdGxlIiwiYXR0YWNoZWRfbGlzdCIsInNjaGVtYSIsIm1vZGFsSWQiLCJhZGRfdGV4dCIsImFkZF9wbGFjZV9oZXJlIiwiZWRpdF90ZXh0IiwiZWRpdF9wbGFjZV9oZXJlIiwicmVtb3ZlX3RleHQiLCJyZW1vdmVfcGxhY2VfaGVyZSIsIm1vZGFsIiwibW9kYWxUeXBlIiwiY2xvc2VPblNhdmUiLCJzZWxlY3RlZEZpZWxkcyIsIm9uc2F2ZSIsIm9uZWRpdCIsIm9uZGVsZXRlIiwicHJvY2Vzc0hvdEZpZWxkcyIsIm9uRmllbGQiLCJlbG1zIiwiZWxtIiwiZmllbGQiLCJhdHRyIiwiZmllbGRUeXBlIiwiZmllbGRJbnB1dCIsIm5hbWUiLCJ0eXBlIiwiaW5wdXQiLCJhZGRDbGlja2VkIiwidmFsIiwib25hZGQiLCJNb2RhbCIsImdldEluc3RhbmNlIiwic2hvdyIsImVkaXRDbGlja2VkIiwic2VsZWN0ZWRGaWVsZCIsImRvY3VtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJob3RDb21wb25lbnQiLCJnZXRTZWxlY3RlZCIsImZ1bmMiLCJjYWxsIiwicmVtb3ZlQ2xpY2tlZCIsIndoZXJlRmllbGRzIiwiY2hlY2tlZFJvd3MiLCJnZXRDaGVja2VkUm93cyIsImkiLCJjaGVja2VkUm93IiwicHVzaCIsImNvbmZpcm0iLCJ3aGVyZUZpZWxkIiwia2V5IiwiZ2V0RmllbGRUeXBlIiwianNvblJlcXVlc3QiLCJyZWZyZXNoTGlzdCIsIm9uU2F2ZSIsInZhbHVlcyIsImZpZWxkcyIsImFsZXJ0IiwidGFibGUiLCJoaWRlIiwiRXJyb3IiLCJvdXRwdXRPYmoiLCJodG1sIiwiZG9jdW1lbnRTZWxlY3RvciIsIkFkbWluVGFibGVGaWVsZCIsImZpZWxkX3R5cGUiLCJub19vdXRwdXQiLCJvbmlucHV0Iiwib25vdXRwdXQiLCJwYXJlbnROb2RlIiwiYWRkSGVhZGVyRGF0YU9ubHkiLCJwbGFjZUhlcmVQYXJlbnQiLCJBZG1pblRhYmxlUm93Iiwicm93RWxlbWVudHMiLCJlbGVtZW50Iiwicm93SHRtbCIsImZpZWxkT2JqIiwiQWRtaW5UYWJsZSIsImhlYWRlcnMiLCJlbGVtZW50cyIsImluZGljaWVzIiwib25saXN0IiwibGlzdHVybCIsImNoZWNrYm94Iiwib25zZWxlY3RlZHJvdyIsImFkZEhlYWRlciIsInRhYmxlRmllbGRFbGVtZW50IiwiaGVhZGVyIiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJ0YWJsZUZpZWxkIiwiZmllbGROYW1lIiwic2VsZWN0Um93Iiwicm93SW5kZXgiLCJpdGVtIiwicm93cyIsInJvdyIsImNsYXNzTGlzdCIsImNvbnRhaW5zIiwicmVtb3ZlIiwiYWRkIiwiY2hlY2tib3hlcyIsImNoZWNrZWQiLCJkYXRhSW5kZXhTdHIiLCJwYXJlbnRFbGVtZW50IiwiZGF0YUluZGV4IiwicGFyc2VJbnQiLCJnZXRSb3ciLCJhZGRSb3ciLCJ0Ym9keSIsInJvd1N0ciIsIkhvdFN0YXEiLCJwYXJzZUJvb2xlYW4iLCJrZXlQYXJ0cyIsInNwbGl0IiwidGVtcFZhbHVlIiwib3JnRmllbGQiLCJkZWZhdWx0T3V0cHV0IiwibmV3T2JqIiwiYWRkSHRtbCIsImNsZWFyUm93cyIsImxpc3QiLCJzZXRUaW1lb3V0IiwiQWRtaW5UZXh0IiwibW9kdWxlIiwiZXhwb3J0cyIsIkhvdFN0YXFXZWIiLCJib290c3RyYXAiLCJfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18iLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJjYWNoZWRNb2R1bGUiLCJ1bmRlZmluZWQiLCJfX3dlYnBhY2tfbW9kdWxlc19fIl0sInNvdXJjZVJvb3QiOiIifQ==
|
|
1
|
+
var AdminPanelComponentsWeb;(()=>{"use strict";var t={594:function(t,e,n){var i=this&&this.__awaiter||function(t,e,n,i){return new(n||(n=Promise))((function(l,s){function o(t){try{a(i.next(t))}catch(t){s(t)}}function d(t){try{a(i.throw(t))}catch(t){s(t)}}function a(t){var e;t.done?l(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(o,d)}a((i=i.apply(t,e||[])).next())}))};Object.defineProperty(e,"__esModule",{value:!0}),e.AdminButton=void 0;const l=n(79);class s extends l.HotComponent{constructor(t,e){super(t,e),this.tag="admin-button",this.css_class="btn btn-sm btn-outline-secondary",this.onclick=null}buttonClicked(){return i(this,void 0,void 0,(function*(){}))}onPostPlace(t,e){let n=t.querySelectorAll('hot-place-here[type="modal"]');if(n.length>0){let i=n[0];t.removeChild(e),i.appendChild(e)}return null!=this.onclick&&("string"==typeof this.onclick&&(this.onclick=new Function(this.onclick)),e.addEventListener("click",this.onclick)),null}output(){return`<button id = "${this.htmlElements[0].id}" class = "${this.css_class}" onclick = "this.buttonClicked ();">${this.inner}</button>`}}e.AdminButton=s},924:(t,e,n)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.AdminDashboard=void 0;const i=n(79);class l extends i.HotComponent{constructor(t,e){super(t,e),this.tag="admin-dashboard",this.title="",this.base=""}onPostPlace(t,e){return null==i.Hot.Data.AdminPanel&&(i.Hot.Data.AdminPanel={}),null==i.Hot.Data.AdminPanel.baseUrl&&(i.Hot.Data.AdminPanel.baseUrl=this.base),null==i.Hot.Data.AdminPanel.addUrl&&(i.Hot.Data.AdminPanel.addUrl=`${i.Hot.Data.AdminPanel.baseUrl}/v1/data/add`),null==i.Hot.Data.AdminPanel.editUrl&&(i.Hot.Data.AdminPanel.editUrl=`${i.Hot.Data.AdminPanel.baseUrl}/v1/data/edit`),null==i.Hot.Data.AdminPanel.removeUrl&&(i.Hot.Data.AdminPanel.removeUrl=`${i.Hot.Data.AdminPanel.baseUrl}/v1/data/remove`),null==i.Hot.Data.AdminPanel.listUrl&&(i.Hot.Data.AdminPanel.listUrl=`${i.Hot.Data.AdminPanel.baseUrl}/v1/data/list`),null}output(){return`\n\t\t<main class="col-md-9 ms-sm-auto col-lg-10 px-md-4">\n\t\t\t<div class="d-flex justify-content-between flex-wrap flex-md-nowrap align-items-center pt-3 pb-2 mb-3 border-bottom">\n\t\t\t\t<h1 class="h2">${this.title}</h1>\n\t\t\t\t<div class="btn-toolbar mb-2 mb-md-0">\n\t\t\t\t\t<div class="btn-group me-2">\n\t\t\t\t\t\t<hot-place-here name = "dashboardHeader"></hot-place-here>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<hot-place-here name = "body"></hot-place-here>\n\t\t</main>`}}e.AdminDashboard=l},91:function(t,e,n){var i=this&&this.__awaiter||function(t,e,n,i){return new(n||(n=Promise))((function(l,s){function o(t){try{a(i.next(t))}catch(t){s(t)}}function d(t){try{a(i.throw(t))}catch(t){s(t)}}function a(t){var e;t.done?l(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(o,d)}a((i=i.apply(t,e||[])).next())}))};Object.defineProperty(e,"__esModule",{value:!0}),e.AdminDropdown=void 0;const l=n(79);class s extends l.HotComponent{constructor(t,e){super(t,e),this.tag="admin-dropdown",this.placeholder="Search",this.onsearch=null,this.onselect=null}onPostPlace(t,e){let n=t.querySelectorAll('hot-place-here[type="modal"]');if(n.length>0){let i=n[0];t.removeChild(e),i.appendChild(e)}return null!=this.onsearch&&("string"==typeof this.onsearch&&(this.onsearch=new Function(this.onsearch)),e.querySelector("input").addEventListener("keyup",(t=>i(this,void 0,void 0,(function*(){const e=t.currentTarget.value;let n=yield this.onsearch(e,t),i=$(this.htmlElements[1]).find(".searchResults");i.empty();for(let t=0;t<n.length;t++){const e=n[t];let l=e.url,s=e.value,o=e.text;i.append($(`<li><a class="dropdown-item" href="${l}" data-value = "${s}" onclick = "this.parentNode.parentNode.parentNode.parentNode.hotComponent.selected (${t});">${o}</a></li>`))}}))))),null}selected(t){return i(this,void 0,void 0,(function*(){if(null!=this.onselect){"string"==typeof this.onselect&&(this.onselect=new Function(this.onselect));const e=this.htmlElements[1].querySelectorAll("a")[t].getAttribute("href"),n=this.htmlElements[1].querySelectorAll("a")[t].getAttribute("data-value"),i=this.htmlElements[1].querySelectorAll("a")[t].innerHTML;yield this.onselect(e,n,i)}}))}output(){return`<div class="dropdown">\n\t\t<button class="btn btn-primary dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">\n\t\t ${this.inner}\n\t\t</button>\n\t\t<ul class="dropdown-menu">\n\t\t\t<li>\n\t\t\t\t<div class = "input-group">\n\t\t\t\t\t<input type = "text" class = "form-control" placeholder = "${this.placeholder}" value = "" />\n\t\t\t\t</div>\n\t\t\t</li>\n\t\t\t<div class = "searchResults">\n\t\t\t</div>\n\t\t</ul>\n\t</div>`}}e.AdminDropdown=s},494:function(t,e,n){var i=this&&this.__awaiter||function(t,e,n,i){return new(n||(n=Promise))((function(l,s){function o(t){try{a(i.next(t))}catch(t){s(t)}}function d(t){try{a(i.throw(t))}catch(t){s(t)}}function a(t){var e;t.done?l(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(o,d)}a((i=i.apply(t,e||[])).next())}))},l=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.AdminEdit=void 0;const s=n(79),o=l(n(383));class d extends s.HotComponent{constructor(t,e){super(t,e),this.onAddClicked=null,this.onEditClicked=null,this.onRemoveClicked=null,this.tag="admin-edit",this.title="",this.button_title="Save",this.attached_list="",this.schema="",this.modalId="",this.add_text="Add",this.add_place_here="dashboardHeader",this.edit_text="Edit",this.edit_place_here="dashboardHeader",this.remove_text="Remove",this.remove_place_here="dashboardHeader",this.css_class="",this.modal=null,this.modalType="add",this.closeOnSave=!0,this.selectedFields=[],this.onsave=null,this.onedit=null,this.ondelete=null}processHotFields(t){return i(this,void 0,void 0,(function*(){const e=this.htmlElements[1].querySelectorAll("[hot-field]");for(let n=0;n<e.length;n++){const i=e[n],l=$(i).attr("hot-field");let s=$(i).attr("hot-field-type"),o=$(i).attr("hot-field-input");null!=s&&""!==s||(s="text"),i.fieldType=s,yield t(i,{name:l,type:s,input:o})}}))}addClicked(t=[]){return i(this,void 0,void 0,(function*(){if(null==this.onAddClicked||!1!==(yield this.onAddClicked())){if(this.modalType="add",yield this.processHotFields(((t,e)=>i(this,void 0,void 0,(function*(){$(t).val("")})))),this.selectedFields=t,null!=this.onadd){"string"==typeof this.onadd&&(this.onadd=new Function(this.onadd));let t=yield this.onadd(this.modalType,this.selectedFields);if(null!=t&&!1===t)return}o.default.Modal.getInstance(`#${this.modalId}`).show()}}))}editClicked(t=[]){return i(this,void 0,void 0,(function*(){if(null==this.onEditClicked||!1!==(yield this.onEditClicked())){if(this.modalType="edit",this.selectedFields=t,""!==this.attached_list){let t=document.getElementById(this.attached_list).hotComponent;t.attachedEdit=this;let e=t.getSelected();null!=e&&(yield this.processHotFields(((t,n)=>i(this,void 0,void 0,(function*(){let i=e[n.name];if(null!=n.input&&""!==n.input){let t=new Function(n.input);i=yield t.call(this,i)}null!=i&&$(t).val(i)})))),this.selectedFields=[e])}if(null!=this.onedit){"string"==typeof this.onedit&&(this.onedit=new Function(this.onedit));let t=yield this.onedit(this.modalType,this.selectedFields);if(null!=t&&!1===t)return}o.default.Modal.getInstance(`#${this.modalId}`).show()}}))}removeClicked(){return i(this,void 0,void 0,(function*(){if(null!=this.onRemoveClicked&&!1===(yield this.onRemoveClicked()))return;this.modalType="remove";let t=[],e=null;if(""!==this.attached_list){e=document.getElementById(this.attached_list).hotComponent,e.attachedEdit=this;let n=e.getCheckedRows();if(n.length>0)for(let e=0;e<n.length;e++){let i=n[e];t.push(i)}let i=e.getSelected();null!=i&&(t=[i])}if(!0===confirm("Are you sure you want to remove this item?")){for(let n=0;n<t.length;n++){let i=t[n];if(null!=e)for(let t in i){let n=e.getFieldType(t);null!=n&&"remove"===n&&delete i[t]}if(null!=this.ondelete)"string"==typeof this.ondelete&&(this.ondelete=new Function(this.ondelete)),yield this.ondelete(i);else{let t=s.Hot.Data.AdminPanel.removeUrl;yield s.Hot.jsonRequest(t,{schema:this.schema,whereFields:i})}}if(0===t.length)if(null!=this.ondelete)"string"==typeof this.ondelete&&(this.ondelete=new Function(this.ondelete)),yield this.ondelete(null);else{let t=s.Hot.Data.AdminPanel.removeUrl;yield s.Hot.jsonRequest(t,{schema:this.schema,whereFields:null})}null!=e&&(yield e.refreshList())}}))}onSave(){return i(this,void 0,void 0,(function*(){let t={};if(yield this.processHotFields(((e,n)=>i(this,void 0,void 0,(function*(){if("remove"===n.type)return;let i=$(e).val();if(null!=$(e).attr("hot-value")&&(i=$(e).attr("hot-value")),"array"===n.type)return null==t[n.name]&&(t[n.name]=[]),void t[n.name].push(i);t[n.name]=i})))),null!=this.onsave){if("string"==typeof this.onsave&&(this.onsave=new Function(this.onsave)),!1===(yield this.onsave(this.modalType,t,this.selectedFields)))return}else{if("add"===this.modalType){let e=s.Hot.Data.AdminPanel.addUrl;yield s.Hot.jsonRequest(e,{schema:this.schema,fields:t})}if("edit"===this.modalType){if(0===this.selectedFields.length)return void alert("No item(s) selected!");let e={};yield this.processHotFields(((t,n)=>i(this,void 0,void 0,(function*(){if("remove"===n.type)return;let i=$(t).val();if(null!=$(t).attr("hot-value")&&(i=$(t).attr("hot-value")),"array"===n.type)return null==e[n.name]&&(e[n.name]=[]),void e[n.name].push(i);e[n.name]=i}))));let n=s.Hot.Data.AdminPanel.editUrl;yield s.Hot.jsonRequest(n,{schema:this.schema,whereFields:e,fields:t})}}if(""!==this.attached_list){let t=document.getElementById(this.attached_list).hotComponent;t.attachedEdit=this,yield t.refreshList()}!0===this.closeOnSave&&o.default.Modal.getInstance(`#${this.modalId}`).hide()}))}onPostPlace(t,e){return this.modal=new o.default.Modal($(`#${this.modalId}`)[0],{backdrop:!0,keyboard:!0,focus:!0}),setTimeout((()=>{if(""!==this.attached_list){let t=document.getElementById(this.attached_list).hotComponent;null!=t&&(t.attachedEdit=this)}}),50),null}output(){if(""===this.name)throw new Error("You must specify a name for each admin-edit element!");this.modalId=`${this.name}Modal`;let t=[{html:`\n\t\t\t\x3c!-- ${this.title} Modal Start --\x3e\n\t\t\t<div class="modal fade ${this.css_class}" id="${this.modalId}" tabindex="-1" aria-labelledby="${this.name}ModalLabel" aria-hidden="true">\n\t\t\t\t<div class="modal-dialog">\n\t\t\t\t\t<div class="modal-content">\n\t\t\t\t\t<div class="modal-header">\n\t\t\t\t\t\t<h5 class="modal-title" id="${this.name}ModalLabel">${this.title}</h5>\n\t\t\t\t\t\t<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="modal-body">\n\t\t\t\t\t\t<hot-place-here name = "modalBody" type = "modal"></hot-place-here>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="modal-footer">\n\t\t\t\t\t\t<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Cancel</button>\n\t\t\t\t\t\t<button type="button" class="btn btn-primary" onclick = "document.getElementById('${this.modalId}').onSave ();">${this.button_title}</button>\n\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t\x3c!-- ${this.title} Modal End --\x3e`,documentSelector:"body"}];return""!==this.add_place_here&&t.push({html:`<button id = "${this.modalId}-add-btn" type="button" class="btn btn-sm btn-outline-secondary" onclick = "this.addClicked ();">${this.add_text}</button>`,documentSelector:`hot-place-here[name="${this.add_place_here}"]`}),""!==this.edit_place_here&&t.push({html:`<button id = "${this.modalId}-edit-btn" type="button" class="btn btn-sm btn-outline-secondary" onclick = "this.editClicked ();">${this.edit_text}</button>`,documentSelector:`hot-place-here[name="${this.edit_place_here}"]`}),""!==this.remove_place_here&&t.push({html:`<button id = "${this.modalId}-remove-btn" type="button" class="btn btn-sm btn-outline-secondary" onclick = "this.removeClicked ();">${this.remove_text}</button>`,documentSelector:`hot-place-here[name="${this.remove_place_here}"]`}),t}}e.AdminEdit=d},837:(t,e,n)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.AdminTableField=void 0;const i=n(79);class l extends i.HotComponent{constructor(t,e){super(t,e),this.tag="admin-table-field",this.field=0,this.field_type="text",this.no_output="0",this.oninput=null,this.onoutput=null}onPostPlace(t,e){let n=null;return n=null!=t.parentNode.parentNode.hotComponent?t.parentNode.parentNode.hotComponent:t.parentNode.parentNode.parentNode.parentNode.hotComponent,null!=n&&n.addHeaderDataOnly(this,e),null}output(){return"1"===this.no_output?[{html:"<div></div>",placeHereParent:"afterTable"}]:[{html:`<th>${this.inner}</th>`,placeHereParent:"header"}]}}e.AdminTableField=l},877:(t,e,n)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.AdminTableRow=void 0;const i=n(79);class l extends i.HotComponent{constructor(t,e){super(t,e),this.tag="admin-table-row",this.fields=[]}onPostPlace(t,e){return t.parentNode.parentNode.parentNode.hotComponent.rowElements.push({fields:this.fields,element:e}),null}output(){let t="";this.fields.length>0&&(t+='<td><input type = "checkbox" /></td>');for(let e=0;e<this.fields.length;e++){let n=this.fields[e];for(let e in n)t+=`<td>${n[e]}</td>`}return[{html:`<tr>${t}</tr>`,placeHereParent:"results"}]}}e.AdminTableRow=l},620:function(t,e,n){var i=this&&this.__awaiter||function(t,e,n,i){return new(n||(n=Promise))((function(l,s){function o(t){try{a(i.next(t))}catch(t){s(t)}}function d(t){try{a(i.throw(t))}catch(t){s(t)}}function a(t){var e;t.done?l(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(o,d)}a((i=i.apply(t,e||[])).next())}))};Object.defineProperty(e,"__esModule",{value:!0}),e.AdminTable=void 0;const l=n(79);class s extends l.HotComponent{constructor(t,e){super(t,e),this.rowElements=[],this.tag="admin-table",this.title="",this.schema="",this.headers={fields:{},elements:{},indicies:[]},this.rowElements=[],this.onlist=null,this.listurl="",this.checkbox=!0,this.singleclickedit=!1,this.onselectedrow=null,this.attachedEdit=null,this.selected=-1}addHeader(t){let e=this.htmlElements[0].getElementsByTagName("thead")[0];this.headers.indicies.length<1&&this.headers.indicies.push(null),this.headers.indicies.push(t.hotComponent.field),e.appendChild(t)}addHeaderDataOnly(t,e){this.headers.indicies.length<1&&this.headers.indicies.push(null),this.headers.indicies.push(t.field),this.headers.fields[t.field]=t,this.headers.elements[t.field]=e}getFieldType(t){if(null!=this.headers.elements[t]){let e=this.headers.elements[t].hotComponent;if(null!=e)return e.field_type}return null}selectRow(t,e){return i(this,void 0,void 0,(function*(){if(null!=this.onselectedrow){"string"==typeof this.onselectedrow&&(this.onselectedrow=new Function(this.onselectedrow));let t=null;if(null!=this.rowElements[e]&&(t=this.rowElements[e].fields),!1===(yield this.onselectedrow(e,t)))return}{let e=this.htmlElements[1].getElementsByTagName("tbody")[0].getElementsByTagName("tr");for(let t=0;t<e.length;t++){let n=e[t];!0===n.classList.contains("table-primary")&&n.classList.remove("table-primary")}t.classList.add("table-primary")}this.selected=e,"string"==typeof this.singleclickedit&&(this.singleclickedit=l.HotStaq.parseBoolean(this.singleclickedit)),!0===this.singleclickedit&&null!=this.attachedEdit&&(yield this.attachedEdit.editClicked())}))}getSelected(){let t=this.selected;return t<0?null:this.rowElements[t].fields}getCheckedRows(){let t=[],e=this.htmlElements[1].getElementsByTagName("tbody")[0].getElementsByTagName("input");for(let n=0;n<e.length;n++){let i=e[n];if(null!=i.checked&&!0===i.checked){let e=i.parentElement.parentElement.getAttribute("data-index"),n=parseInt(e);t.push(this.rowElements[n].fields)}}return t}getRow(t){return this.rowElements[t].fields}addRow(t){if(null==t)return;if(0==t.length)return;let e=this.htmlElements[1].getElementsByTagName("tbody")[0],n=this.rowElements.length,i=`<tr onclick = "this.parentNode.parentNode.parentNode.parentNode.hotComponent.selectRow (this, ${n});">`;"string"==typeof this.checkbox&&(this.checkbox=l.HotStaq.parseBoolean(this.checkbox)),!0===this.checkbox?i+='<td><input type = "checkbox" /></td>':i+="<td></td>";for(let e=0;e<this.headers.indicies.length;e++){let l=this.headers.indicies[e];if(null==l)continue;let s=t[l],o=l.split(".");if(o.length>1){let e=t[o[0]];for(let t=1;t<o.length;t++)e=e[o[t]];s=e}if(null!=this.headers.elements[l]){let t=this.getFieldType(l);if(null==t&&(t="text"),"remove"!==t){const t=this.headers.fields[l];let e=!0;null!=t&&(null!=t.oninput&&("string"==typeof t.oninput&&(this.headers.fields[l].oninput=new Function(t.oninput)),s=t.oninput(s)),null!=t.onoutput)&&("string"==typeof t.onoutput&&(this.headers.fields[l].onoutput=new Function(t.onoutput)),e=!1,i+=t.onoutput(n,s)),!0===e&&(i+=`<td data-index = "${n}">${s}</td>`)}}}i+="</tr>";let s=l.HotStaq.addHtml(e,i);this.rowElements.push({fields:t,element:s})}clearRows(){return i(this,void 0,void 0,(function*(){this.rowElements=[],this.htmlElements[1].getElementsByTagName("tbody")[0].innerHTML=""}))}refreshList(t=null){return i(this,void 0,void 0,(function*(){if(null!=this.onlist)"string"==typeof this.onlist&&(this.onlist=new Function(this.onlist)),t=yield this.onlist();else{let e="";""!==this.listurl&&(e=this.listurl),""!==e&&(t=yield l.Hot.jsonRequest(e,{schema:this.schema}))}if(this.clearRows(),null!=t)for(let e=0;e<t.length;e++){let n=t[e];this.addRow(n)}}))}onPostPlace(t,e){return setTimeout((()=>i(this,void 0,void 0,(function*(){yield this.refreshList()}))),50),null}output(){return`\n\t\t<div id = "${this.htmlElements[0].id}">\n\t\t\t<h2>${this.title}</h2>\n\t\t\t<div class="table-responsive">\n\t\t\t<table id = "${this.htmlElements[0].id}Table" class="table table-striped table-sm">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr hot-place-here = "header">\n\t\t\t\t\t\t<th></th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\t\t\t\t<tbody hot-place-here = "results">\n\t\t\t\t</tbody>\n\t\t\t</table>\n\t\t\t<hot-place-here name = "afterTable"></hot-place-here>\n\t\t\t</div>\n\t\t</div>`}}e.AdminTable=s},741:(t,e,n)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.AdminText=void 0;const i=n(79);class l extends i.HotComponent{constructor(t,e){super(t,e),this.tag="admin-text",this.no_output="0",this.css_class="form-control"}onPostPlace(t,e){let n=t.querySelectorAll('hot-place-here[type="modal"]');if(n.length>0){let i=n[0];t.removeChild(e),i.appendChild(e)}return null}output(){let t="";if(null!=this.value&&(t=this.value),"1"===this.no_output)return`<div><input class="${this.css_class}" type = "hidden" value = "${t}" /></div>`;const e=this.htmlElements[0].getAttribute("hot-field");let n=this.htmlElements[0].getAttribute("hot-field-type");return null==n&&(n="text"),`<div>\n\t\t\t<label class="form-label">${this.inner}</label>\n\t\t\t<input class="${this.css_class}" type = "text" hot-field = "${e}" hot-field-type = "${n}" value = "${t}" />\n\t\t</div>`}}e.AdminText=l},79:t=>{t.exports=HotStaqWeb},383:t=>{t.exports=bootstrap}},e={};function n(i){var l=e[i];if(void 0!==l)return l.exports;var s=e[i]={exports:{}};return t[i].call(s.exports,s,s.exports,n),s.exports}var i={};(()=>{var t=i;Object.defineProperty(t,"__esModule",{value:!0}),t.AdminText=t.AdminTableRow=t.AdminTableField=t.AdminTable=t.AdminEdit=t.AdminDashboard=t.AdminDropdown=t.AdminButton=void 0;const e=n(594);Object.defineProperty(t,"AdminButton",{enumerable:!0,get:function(){return e.AdminButton}});const l=n(91);Object.defineProperty(t,"AdminDropdown",{enumerable:!0,get:function(){return l.AdminDropdown}});const s=n(924);Object.defineProperty(t,"AdminDashboard",{enumerable:!0,get:function(){return s.AdminDashboard}});const o=n(494);Object.defineProperty(t,"AdminEdit",{enumerable:!0,get:function(){return o.AdminEdit}});const d=n(620);Object.defineProperty(t,"AdminTable",{enumerable:!0,get:function(){return d.AdminTable}});const a=n(837);Object.defineProperty(t,"AdminTableField",{enumerable:!0,get:function(){return a.AdminTableField}});const r=n(877);Object.defineProperty(t,"AdminTableRow",{enumerable:!0,get:function(){return r.AdminTableRow}});const h=n(741);Object.defineProperty(t,"AdminText",{enumerable:!0,get:function(){return h.AdminText}})})(),AdminPanelComponentsWeb=i})();
|
|
2
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,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YnBhY2s6Ly9BZG1pblBhbmVsQ29tcG9uZW50c1dlYi8uL3NyYy9jb21wb25lbnRzL2FkbWluLWJ1dHRvbi50cyIsIndlYnBhY2s6Ly9BZG1pblBhbmVsQ29tcG9uZW50c1dlYi8uL3NyYy9jb21wb25lbnRzL2FkbWluLWRhc2hib2FyZC50cyIsIndlYnBhY2s6Ly9BZG1pblBhbmVsQ29tcG9uZW50c1dlYi8uL3NyYy9jb21wb25lbnRzL2FkbWluLWRyb3Bkb3duLnRzIiwid2VicGFjazovL0FkbWluUGFuZWxDb21wb25lbnRzV2ViLy4vc3JjL2NvbXBvbmVudHMvYWRtaW4tZWRpdC50cyIsIndlYnBhY2s6Ly9BZG1pblBhbmVsQ29tcG9uZW50c1dlYi8uL3NyYy9jb21wb25lbnRzL2FkbWluLXRhYmxlLWZpZWxkLnRzIiwid2VicGFjazovL0FkbWluUGFuZWxDb21wb25lbnRzV2ViLy4vc3JjL2NvbXBvbmVudHMvYWRtaW4tdGFibGUtcm93LnRzIiwid2VicGFjazovL0FkbWluUGFuZWxDb21wb25lbnRzV2ViLy4vc3JjL2NvbXBvbmVudHMvYWRtaW4tdGFibGUudHMiLCJ3ZWJwYWNrOi8vQWRtaW5QYW5lbENvbXBvbmVudHNXZWIvLi9zcmMvY29tcG9uZW50cy9hZG1pbi10ZXh0LnRzIiwid2VicGFjazovL0FkbWluUGFuZWxDb21wb25lbnRzV2ViL2V4dGVybmFsIHZhciBcIkhvdFN0YXFXZWJcIiIsIndlYnBhY2s6Ly9BZG1pblBhbmVsQ29tcG9uZW50c1dlYi9leHRlcm5hbCB2YXIgXCJib290c3RyYXBcIiIsIndlYnBhY2s6Ly9BZG1pblBhbmVsQ29tcG9uZW50c1dlYi93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9BZG1pblBhbmVsQ29tcG9uZW50c1dlYi8uL3NyYy9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIb3RTdGFxLCBIb3QsIEhvdEFQSSwgSG90Q29tcG9uZW50IH0gZnJvbSBcImhvdHN0YXFcIjtcblxuZXhwb3J0IGNsYXNzIEFkbWluQnV0dG9uIGV4dGVuZHMgSG90Q29tcG9uZW50XG57XG5cdC8qKlxuXHQgKiBUaGUgQ1NTIGNsYXNzIHRvIGFwcGx5IHRvIHRoZSBidXR0b24uXG5cdCAqL1xuXHRjc3NfY2xhc3M6IHN0cmluZztcblx0LyoqXG5cdCAqIEV4ZWN1dGVzIHdoZW4gdGhlIGJ1dHRvbiBpcyBjbGlja2VkLlxuXHQgKi9cblx0b25jbGljazogKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiBQcm9taXNlPGFueT47XG5cblx0Y29uc3RydWN0b3IgKGNvcHk6IEhvdENvbXBvbmVudCB8IEhvdFN0YXEsIGFwaTogSG90QVBJKVxuXHR7XG5cdFx0c3VwZXIgKGNvcHksIGFwaSk7XG5cblx0XHR0aGlzLnRhZyA9IFwiYWRtaW4tYnV0dG9uXCI7XG5cdFx0dGhpcy5jc3NfY2xhc3MgPSBcImJ0biBidG4tc20gYnRuLW91dGxpbmUtc2Vjb25kYXJ5XCI7XG5cdFx0dGhpcy5vbmNsaWNrID0gbnVsbDtcblx0fVxuXG5cdGFzeW5jIGJ1dHRvbkNsaWNrZWQgKCk6IFByb21pc2U8dm9pZD5cblx0e1xuXHR9XG5cblx0LyoqXG5cdCAqIENvcnJlY3RzIHRoZSBwbGFjZW1lbnQgb2YgdGhlIHRleHQgZWxlbWVudHMgZm9yIG1vZGFscy5cblx0ICovXG5cdG9uUG9zdFBsYWNlIChwYXJlbnRIdG1sRWxlbWVudDogSFRNTEVsZW1lbnQsIGh0bWxFbGVtZW50OiBIVE1MRWxlbWVudCk6IEhUTUxFbGVtZW50XG5cdHtcblx0XHRsZXQgcGxhY2VIZXJlQXJyYXkgPSBwYXJlbnRIdG1sRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsIChgaG90LXBsYWNlLWhlcmVbdHlwZT1cIm1vZGFsXCJdYCk7XG5cblx0XHRpZiAocGxhY2VIZXJlQXJyYXkubGVuZ3RoID4gMClcblx0XHR7XG5cdFx0XHRsZXQgcGxhY2VIZXJlID0gcGxhY2VIZXJlQXJyYXlbMF07XG5cdFx0XHRwYXJlbnRIdG1sRWxlbWVudC5yZW1vdmVDaGlsZCAoaHRtbEVsZW1lbnQpO1xuXHRcdFx0cGxhY2VIZXJlLmFwcGVuZENoaWxkIChodG1sRWxlbWVudCk7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMub25jbGljayAhPSBudWxsKVxuXHRcdHtcblx0XHRcdGlmICh0eXBlb2YgKHRoaXMub25jbGljaykgPT09IFwic3RyaW5nXCIpXG5cdFx0XHRcdHRoaXMub25jbGljayA9ICg8KGV2ZW50OiBNb3VzZUV2ZW50KSA9PiBQcm9taXNlPGFueT4+bmV3IEZ1bmN0aW9uICh0aGlzLm9uY2xpY2spKTtcblxuXHRcdFx0aHRtbEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lciAoXCJjbGlja1wiLCB0aGlzLm9uY2xpY2spO1xuXHRcdH1cblxuXHRcdHJldHVybiAobnVsbCk7XG5cdH1cblxuXHRvdXRwdXQgKCk6IHN0cmluZ1xuXHR7XG5cdFx0cmV0dXJuIChgPGJ1dHRvbiBpZCA9IFwiJHt0aGlzLmh0bWxFbGVtZW50c1swXS5pZH1cIiBjbGFzcyA9IFwiJHt0aGlzLmNzc19jbGFzc31cIiBvbmNsaWNrID0gXCJ0aGlzLmJ1dHRvbkNsaWNrZWQgKCk7XCI+JHt0aGlzLmlubmVyfTwvYnV0dG9uPmApO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBIb3RTdGFxLCBIb3QsIEhvdEFQSSwgSG90Q29tcG9uZW50IH0gZnJvbSBcImhvdHN0YXFcIjtcblxuZXhwb3J0IGNsYXNzIEFkbWluRGFzaGJvYXJkIGV4dGVuZHMgSG90Q29tcG9uZW50XG57XG5cdC8qKlxuXHQgKiBUaGUgdGl0bGUgb2YgdGhpcyBkYXNoYm9hcmQuXG5cdCAqL1xuXHR0aXRsZTogc3RyaW5nO1xuXHQvKipcblx0ICogVGhlIGJhc2UgdXJsIHRvIHVzZSBmb3IgdGhpcyBkYXNoYm9hcmQuXG5cdCAqL1xuXHRiYXNlOiBzdHJpbmc7XG5cblx0Y29uc3RydWN0b3IgKGNvcHk6IEhvdENvbXBvbmVudCB8IEhvdFN0YXEsIGFwaTogSG90QVBJKVxuXHR7XG5cdFx0c3VwZXIgKGNvcHksIGFwaSk7XG5cblx0XHR0aGlzLnRhZyA9IFwiYWRtaW4tZGFzaGJvYXJkXCI7XG5cdFx0dGhpcy50aXRsZSA9IFwiXCI7XG5cdFx0dGhpcy5iYXNlID0gXCJcIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGQgdGhpcyB0YWJsZSBmaWVsZCB0byB0aGUgdGFibGVcblx0ICovXG5cdG9uUG9zdFBsYWNlIChwYXJlbnRIdG1sRWxlbWVudDogSFRNTEVsZW1lbnQsIGh0bWxFbGVtZW50OiBIVE1MRWxlbWVudCk6IEhUTUxFbGVtZW50XG5cdHtcblx0XHRpZiAoSG90LkRhdGEuQWRtaW5QYW5lbCA9PSBudWxsKVxuXHRcdFx0SG90LkRhdGEuQWRtaW5QYW5lbCA9IHt9O1xuXG5cdFx0aWYgKEhvdC5EYXRhLkFkbWluUGFuZWwuYmFzZVVybCA9PSBudWxsKVxuXHRcdFx0SG90LkRhdGEuQWRtaW5QYW5lbC5iYXNlVXJsID0gdGhpcy5iYXNlO1xuXG5cdFx0aWYgKEhvdC5EYXRhLkFkbWluUGFuZWwuYWRkVXJsID09IG51bGwpXG5cdFx0XHRIb3QuRGF0YS5BZG1pblBhbmVsLmFkZFVybCA9IGAke0hvdC5EYXRhLkFkbWluUGFuZWwuYmFzZVVybH0vdjEvZGF0YS9hZGRgO1xuXG5cdFx0aWYgKEhvdC5EYXRhLkFkbWluUGFuZWwuZWRpdFVybCA9PSBudWxsKVxuXHRcdFx0SG90LkRhdGEuQWRtaW5QYW5lbC5lZGl0VXJsID0gYCR7SG90LkRhdGEuQWRtaW5QYW5lbC5iYXNlVXJsfS92MS9kYXRhL2VkaXRgO1xuXG5cdFx0aWYgKEhvdC5EYXRhLkFkbWluUGFuZWwucmVtb3ZlVXJsID09IG51bGwpXG5cdFx0XHRIb3QuRGF0YS5BZG1pblBhbmVsLnJlbW92ZVVybCA9IGAke0hvdC5EYXRhLkFkbWluUGFuZWwuYmFzZVVybH0vdjEvZGF0YS9yZW1vdmVgO1xuXG5cdFx0aWYgKEhvdC5EYXRhLkFkbWluUGFuZWwubGlzdFVybCA9PSBudWxsKVxuXHRcdFx0SG90LkRhdGEuQWRtaW5QYW5lbC5saXN0VXJsID0gYCR7SG90LkRhdGEuQWRtaW5QYW5lbC5iYXNlVXJsfS92MS9kYXRhL2xpc3RgO1xuXG5cdFx0cmV0dXJuIChudWxsKTtcblx0fVxuXG5cdG91dHB1dCAoKTogc3RyaW5nXG5cdHtcblx0XHRyZXR1cm4gKGBcblx0XHQ8bWFpbiBjbGFzcz1cImNvbC1tZC05IG1zLXNtLWF1dG8gY29sLWxnLTEwIHB4LW1kLTRcIj5cblx0XHRcdDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gZmxleC13cmFwIGZsZXgtbWQtbm93cmFwIGFsaWduLWl0ZW1zLWNlbnRlciBwdC0zIHBiLTIgbWItMyBib3JkZXItYm90dG9tXCI+XG5cdFx0XHRcdDxoMSBjbGFzcz1cImgyXCI+JHt0aGlzLnRpdGxlfTwvaDE+XG5cdFx0XHRcdDxkaXYgY2xhc3M9XCJidG4tdG9vbGJhciBtYi0yIG1iLW1kLTBcIj5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwIG1lLTJcIj5cblx0XHRcdFx0XHRcdDxob3QtcGxhY2UtaGVyZSBuYW1lID0gXCJkYXNoYm9hcmRIZWFkZXJcIj48L2hvdC1wbGFjZS1oZXJlPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdDwvZGl2PlxuXHRcdFx0PGhvdC1wbGFjZS1oZXJlIG5hbWUgPSBcImJvZHlcIj48L2hvdC1wbGFjZS1oZXJlPlxuXHRcdDwvbWFpbj5gKTtcblx0fVxufVxuIiwiaW1wb3J0IHsgSG90U3RhcSwgSG90LCBIb3RBUEksIEhvdENvbXBvbmVudCB9IGZyb20gXCJob3RzdGFxXCI7XG5cbmV4cG9ydCBjbGFzcyBBZG1pbkRyb3Bkb3duIGV4dGVuZHMgSG90Q29tcG9uZW50XG57XG5cdC8qKlxuXHQgKiBUaGUgc2VhcmNoIHN0cmluZyBwbGFjZWhvbGRlciB0byBzaG93LlxuXHQgKi9cblx0cGxhY2Vob2xkZXI6IHN0cmluZztcblx0LyoqXG5cdCAqIEV4ZWN1dGVzIHdoZW4gdGhlIGtleWJvYXJkIHVwIGJ1dHRvbiBpcyB0cmlnZ2VyZWQuXG5cdCAqL1xuXHRvbnNlYXJjaDogKHNlYXJjaFRleHQ6IHN0cmluZywgZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IFByb21pc2U8eyB1cmw6IHN0cmluZzsgdmFsdWU6IHN0cmluZzsgdGV4dDogc3RyaW5nOyB9W10+O1xuXHQvKipcblx0ICogRXhlY3V0ZXMgd2hlbiBhbiBzZWFyY2ggcmVzdWx0IGhhcyBiZWVuIHNlbGVjdGVkLlxuXHQgKi9cblx0b25zZWxlY3Q6ICh1cmw6IHN0cmluZywgdmFsdWU6IHN0cmluZywgdGV4dDogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+O1xuXG5cdGNvbnN0cnVjdG9yIChjb3B5OiBIb3RDb21wb25lbnQgfCBIb3RTdGFxLCBhcGk6IEhvdEFQSSlcblx0e1xuXHRcdHN1cGVyIChjb3B5LCBhcGkpO1xuXG5cdFx0dGhpcy50YWcgPSBcImFkbWluLWRyb3Bkb3duXCI7XG5cdFx0dGhpcy5wbGFjZWhvbGRlciA9IFwiU2VhcmNoXCI7XG5cdFx0dGhpcy5vbnNlYXJjaCA9IG51bGw7XG5cdFx0dGhpcy5vbnNlbGVjdCA9IG51bGw7XG5cdH1cblxuXHQvKipcblx0ICogQ29ycmVjdHMgdGhlIHBsYWNlbWVudCBvZiB0aGUgdGV4dCBlbGVtZW50cyBmb3IgbW9kYWxzLlxuXHQgKi9cblx0b25Qb3N0UGxhY2UgKHBhcmVudEh0bWxFbGVtZW50OiBIVE1MRWxlbWVudCwgaHRtbEVsZW1lbnQ6IEhUTUxFbGVtZW50KTogSFRNTEVsZW1lbnRcblx0e1xuXHRcdGxldCBwbGFjZUhlcmVBcnJheSA9IHBhcmVudEh0bWxFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwgKGBob3QtcGxhY2UtaGVyZVt0eXBlPVwibW9kYWxcIl1gKTtcblxuXHRcdGlmIChwbGFjZUhlcmVBcnJheS5sZW5ndGggPiAwKVxuXHRcdHtcblx0XHRcdGxldCBwbGFjZUhlcmUgPSBwbGFjZUhlcmVBcnJheVswXTtcblx0XHRcdHBhcmVudEh0bWxFbGVtZW50LnJlbW92ZUNoaWxkIChodG1sRWxlbWVudCk7XG5cdFx0XHRwbGFjZUhlcmUuYXBwZW5kQ2hpbGQgKGh0bWxFbGVtZW50KTtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5vbnNlYXJjaCAhPSBudWxsKVxuXHRcdHtcblx0XHRcdGlmICh0eXBlb2YgKHRoaXMub25zZWFyY2gpID09PSBcInN0cmluZ1wiKVxuXHRcdFx0XHR0aGlzLm9uc2VhcmNoID0gKDwoc2VhcmNoVGV4dDogc3RyaW5nLCBldmVudDogS2V5Ym9hcmRFdmVudCkgPT4gUHJvbWlzZTx7IHVybDogc3RyaW5nOyB2YWx1ZTogc3RyaW5nOyB0ZXh0OiBzdHJpbmc7IH1bXT4+bmV3IEZ1bmN0aW9uICh0aGlzLm9uc2VhcmNoKSk7XG5cblx0XHRcdGh0bWxFbGVtZW50LnF1ZXJ5U2VsZWN0b3IgKFwiaW5wdXRcIikuYWRkRXZlbnRMaXN0ZW5lciAoXCJrZXl1cFwiLCBcblx0XHRcdFx0YXN5bmMgKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PlxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdFx0XHRcdGNvbnN0IHNlYXJjaFRleHQgPSBldmVudC5jdXJyZW50VGFyZ2V0LnZhbHVlO1xuXG5cdFx0XHRcdFx0bGV0IHJlc3VsdHMgPSBhd2FpdCB0aGlzLm9uc2VhcmNoIChzZWFyY2hUZXh0LCBldmVudCk7XG5cblx0XHRcdFx0XHRsZXQgc2VhcmNoUmVzdWx0c0RpdiA9ICQodGhpcy5odG1sRWxlbWVudHNbMV0pLmZpbmQgKFwiLnNlYXJjaFJlc3VsdHNcIik7XG5cblx0XHRcdFx0XHRzZWFyY2hSZXN1bHRzRGl2LmVtcHR5ICgpO1xuXG5cdFx0XHRcdFx0Zm9yIChsZXQgaUlkeCA9IDA7IGlJZHggPCByZXN1bHRzLmxlbmd0aDsgaUlkeCsrKVxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdGNvbnN0IHJlc3VsdCA9IHJlc3VsdHNbaUlkeF07XG5cdFx0XHRcdFx0XHRsZXQgdXJsOiBzdHJpbmcgPSByZXN1bHQudXJsO1xuXHRcdFx0XHRcdFx0bGV0IHZhbHVlOiBzdHJpbmcgPSByZXN1bHQudmFsdWU7XG5cdFx0XHRcdFx0XHRsZXQgdGV4dDogc3RyaW5nID0gcmVzdWx0LnRleHQ7XG5cblx0XHRcdFx0XHRcdHNlYXJjaFJlc3VsdHNEaXYuYXBwZW5kICgkKGA8bGk+PGEgY2xhc3M9XFxcImRyb3Bkb3duLWl0ZW1cXFwiIGhyZWY9XFxcIiR7dXJsfVxcXCIgZGF0YS12YWx1ZSA9IFwiJHt2YWx1ZX1cIiBvbmNsaWNrID0gXFxcInRoaXMucGFyZW50Tm9kZS5wYXJlbnROb2RlLnBhcmVudE5vZGUucGFyZW50Tm9kZS5ob3RDb21wb25lbnQuc2VsZWN0ZWQgKCR7aUlkeH0pO1xcXCI+JHt0ZXh0fTwvYT48L2xpPmApKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdHJldHVybiAobnVsbCk7XG5cdH1cblxuXHQvKipcblx0ICogRXhlY3V0ZWQgd2hlbiBhbiBpdGVtIGlzIHNlbGVjdGVkLlxuXHQgKi9cblx0YXN5bmMgc2VsZWN0ZWQgKGluZGV4OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+XG5cdHtcblx0XHRpZiAodGhpcy5vbnNlbGVjdCAhPSBudWxsKVxuXHRcdHtcblx0XHRcdGlmICh0eXBlb2YgKHRoaXMub25zZWxlY3QpID09PSBcInN0cmluZ1wiKVxuXHRcdFx0XHR0aGlzLm9uc2VsZWN0ID0gKDwodXJsOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcsIHRleHQ6IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPj5uZXcgRnVuY3Rpb24gKHRoaXMub25zZWxlY3QpKTtcblxuXHRcdFx0Y29uc3QgdXJsID0gdGhpcy5odG1sRWxlbWVudHNbMV0ucXVlcnlTZWxlY3RvckFsbCAoXCJhXCIpW2luZGV4XS5nZXRBdHRyaWJ1dGUgKFwiaHJlZlwiKTtcblx0XHRcdGNvbnN0IHZhbHVlID0gdGhpcy5odG1sRWxlbWVudHNbMV0ucXVlcnlTZWxlY3RvckFsbCAoXCJhXCIpW2luZGV4XS5nZXRBdHRyaWJ1dGUgKFwiZGF0YS12YWx1ZVwiKTtcblx0XHRcdGNvbnN0IHRleHQgPSB0aGlzLmh0bWxFbGVtZW50c1sxXS5xdWVyeVNlbGVjdG9yQWxsIChcImFcIilbaW5kZXhdLmlubmVySFRNTDtcblxuXHRcdFx0YXdhaXQgdGhpcy5vbnNlbGVjdCAodXJsLCB2YWx1ZSwgdGV4dCk7XG5cdFx0fVxuXHR9XG5cblx0b3V0cHV0ICgpOiBzdHJpbmdcblx0e1xuXHRcdHJldHVybiAoXG5cdGA8ZGl2IGNsYXNzPVwiZHJvcGRvd25cIj5cblx0XHQ8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGRyb3Bkb3duLXRvZ2dsZVwiIHR5cGU9XCJidXR0b25cIiBkYXRhLWJzLXRvZ2dsZT1cImRyb3Bkb3duXCIgYXJpYS1leHBhbmRlZD1cImZhbHNlXCI+XG5cdFx0ICAke3RoaXMuaW5uZXJ9XG5cdFx0PC9idXR0b24+XG5cdFx0PHVsIGNsYXNzPVwiZHJvcGRvd24tbWVudVwiPlxuXHRcdFx0PGxpPlxuXHRcdFx0XHQ8ZGl2IGNsYXNzID0gXCJpbnB1dC1ncm91cFwiPlxuXHRcdFx0XHRcdDxpbnB1dCB0eXBlID0gXCJ0ZXh0XCIgY2xhc3MgPSBcImZvcm0tY29udHJvbFwiIHBsYWNlaG9sZGVyID0gXCIke3RoaXMucGxhY2Vob2xkZXJ9XCIgdmFsdWUgPSBcIlwiIC8+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0PC9saT5cblx0XHRcdDxkaXYgY2xhc3MgPSBcInNlYXJjaFJlc3VsdHNcIj5cblx0XHRcdDwvZGl2PlxuXHRcdDwvdWw+XG5cdDwvZGl2PmApO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBIb3RTdGFxLCBIb3QsIEhvdEFQSSwgSG90Q29tcG9uZW50LCBIb3RDb21wb25lbnRPdXRwdXQgfSBmcm9tIFwiaG90c3RhcVwiO1xuXG5pbXBvcnQgYm9vdHN0cmFwIGZyb20gXCJib290c3RyYXBcIjtcblxuaW1wb3J0IHsgQWRtaW5UYWJsZSB9IGZyb20gXCIuL2FkbWluLXRhYmxlXCI7XG5cbmV4cG9ydCBjbGFzcyBBZG1pbkVkaXQgZXh0ZW5kcyBIb3RDb21wb25lbnRcbntcblx0LyoqXG5cdCAqIFRoZSB0aXRsZSBvZiB0aGlzIGVkaXQgbW9kYWwuXG5cdCAqL1xuXHR0aXRsZTogc3RyaW5nO1xuXHQvKipcblx0ICogVGhlIGJ1dHRvbiB0aXRsZS5cblx0ICovXG5cdGJ1dHRvbl90aXRsZTogc3RyaW5nO1xuXHQvKipcblx0ICogVGhlIGF0dGFjaGVkIGxpc3QuXG5cdCAqL1xuXHRhdHRhY2hlZF9saXN0OiBzdHJpbmc7XG5cdC8qKlxuXHQgKiBUaGUgYXR0YWNoZWQgc2NoZW1hLlxuXHQgKi9cblx0c2NoZW1hOiBzdHJpbmc7XG5cdC8qKlxuXHQgKiBUaGUgbW9kYWwgaWQuXG5cdCAqL1xuXHRtb2RhbElkOiBzdHJpbmc7XG5cdC8qKlxuXHQgKiBUaGUgdGV4dCBmb3IgdGhlIGFkZCBidXR0b24uXG5cdCAqL1xuXHRhZGRfdGV4dDogc3RyaW5nO1xuXHQvKipcblx0ICogVGhlIGxvY2F0aW9uIHRvIHB1dCB0aGUgYWRkIGJ1dHRvbi5cblx0ICovXG5cdGFkZF9wbGFjZV9oZXJlOiBzdHJpbmc7XG5cdC8qKlxuXHQgKiBUaGUgdGV4dCBmb3IgdGhlIGVkaXQgYnV0dG9uLlxuXHQgKi9cblx0ZWRpdF90ZXh0OiBzdHJpbmc7XG5cdC8qKlxuXHQgKiBUaGUgbG9jYXRpb24gdG8gcHV0IHRoZSBlZGl0IGJ1dHRvbi5cblx0ICovXG5cdGVkaXRfcGxhY2VfaGVyZTogc3RyaW5nO1xuXHQvKipcblx0ICogVGhlIHRleHQgZm9yIHRoZSByZW1vdmUgYnV0dG9uLlxuXHQgKi9cblx0cmVtb3ZlX3RleHQ6IHN0cmluZztcblx0LyoqXG5cdCAqIFRoZSBsb2NhdGlvbiB0byBwdXQgdGhlIHJlbW92ZSBidXR0b24uXG5cdCAqL1xuXHRyZW1vdmVfcGxhY2VfaGVyZTogc3RyaW5nO1xuXHQvKipcblx0ICogVGhlIGhvdC1jbGFzcyBhdHRyaWJ1dGUgdG8gcGFzcyB0byBhZGQgdG8gdGhlIG1vZGFsJ3MgY2xhc3Nlcy5cblx0ICovXG5cdGNzc19jbGFzczogc3RyaW5nO1xuXHQvKipcblx0ICogVGhlIGJvb3RzdHJhcCBtb2RhbCBpbnN0YW5jZS5cblx0ICovXG5cdG1vZGFsOiBib290c3RyYXAuTW9kYWw7XG5cdC8qKlxuXHQgKiBJZiBzZXQgdG8gdHJ1ZSwgdGhpcyB3aWxsIGNsb3NlIHRoZSBtb2RhbCB3aGVuIHNhdmUgaXMgY2xpY2tlZC5cblx0ICovXG5cdGNsb3NlT25TYXZlOiBib29sZWFuO1xuXHQvKipcblx0ICogVGhlIHR5cGUgb2YgbW9kYWwgdG8gb3Blbi4gQ2FuIGJlOlxuXHQgKiAqIGFkZFxuXHQgKiAqIGVkaXRcblx0ICogKiByZW1vdmVcblx0ICovXG5cdHByb3RlY3RlZCBtb2RhbFR5cGU6IHN0cmluZztcblx0LyoqXG5cdCAqIFRoZSBzZWxlY3RlZCBmaWVsZHMuXG5cdCAqL1xuXHRwcm90ZWN0ZWQgc2VsZWN0ZWRGaWVsZHM6IGFueVtdO1xuXHQvKipcblx0ICogV2hhdCB0byBleGVjdXRlIHdoZW4gdGhlIHNhdmUgYnV0dG9uIGlzIGNsaWNrZWQuIElmIHRoaXMgcmV0dXJucyB0cnVlLCB0aGUgbW9kYWwgd2lsbCBjbG9zZS5cblx0ICogSWYgdGhpcyByZXR1cm5zIGZhbHNlLCB0aGUgbW9kYWwgd2lsbCBub3QgY2xvc2UuXG5cdCAqL1xuXHRvbnNhdmU6IChtb2RhbFR5cGU6IHN0cmluZywgdmFsdWVzOiBhbnksIHNlbGVjdGVkRmllbGRzOiBhbnlbXSkgPT4gUHJvbWlzZTxib29sZWFuPjtcblx0LyoqXG5cdCAqIFdoYXQgdG8gZXhlY3V0ZSB3aGVuIHRoZSBlZGl0IGJ1dHRvbiBpcyBjbGlja2VkLlxuXHQgKi9cblx0b25hZGQ6IChtb2RhbFR5cGU6IHN0cmluZywgc2VsZWN0ZWRGaWVsZHM6IGFueVtdKSA9PiBQcm9taXNlPGJvb2xlYW4+O1xuXHQvKipcblx0ICogV2hhdCB0byBleGVjdXRlIHdoZW4gdGhlIGVkaXQgYnV0dG9uIGlzIGNsaWNrZWQuXG5cdCAqL1xuXHRvbmVkaXQ6IChtb2RhbFR5cGU6IHN0cmluZywgc2VsZWN0ZWRGaWVsZHM6IGFueVtdKSA9PiBQcm9taXNlPGJvb2xlYW4+O1xuXHQvKipcblx0ICogV2hhdCB0byBleGVjdXRlIHdoZW4gdGhlIGRlbGV0ZSBidXR0b24gaXMgY2xpY2tlZC5cblx0ICovXG5cdG9uZGVsZXRlOiAoc2VsZWN0ZWRGaWVsZDogYW55KSA9PiBQcm9taXNlPHZvaWQ+O1xuXG5cdGNvbnN0cnVjdG9yIChjb3B5OiBIb3RDb21wb25lbnQgfCBIb3RTdGFxLCBhcGk6IEhvdEFQSSlcblx0e1xuXHRcdHN1cGVyIChjb3B5LCBhcGkpO1xuXG5cdFx0dGhpcy50YWcgPSBcImFkbWluLWVkaXRcIjtcblx0XHR0aGlzLnRpdGxlID0gXCJcIjtcblx0XHR0aGlzLmJ1dHRvbl90aXRsZSA9IFwiU2F2ZVwiO1xuXHRcdHRoaXMuYXR0YWNoZWRfbGlzdCA9IFwiXCI7XG5cdFx0dGhpcy5zY2hlbWEgPSBcIlwiO1xuXG5cdFx0dGhpcy5tb2RhbElkID0gXCJcIjtcblx0XHR0aGlzLmFkZF90ZXh0ID0gXCJBZGRcIjtcblx0XHR0aGlzLmFkZF9wbGFjZV9oZXJlID0gXCJkYXNoYm9hcmRIZWFkZXJcIjtcblx0XHR0aGlzLmVkaXRfdGV4dCA9IFwiRWRpdFwiO1xuXHRcdHRoaXMuZWRpdF9wbGFjZV9oZXJlID0gXCJkYXNoYm9hcmRIZWFkZXJcIjtcblx0XHR0aGlzLnJlbW92ZV90ZXh0ID0gXCJSZW1vdmVcIjtcblx0XHR0aGlzLnJlbW92ZV9wbGFjZV9oZXJlID0gXCJkYXNoYm9hcmRIZWFkZXJcIjtcblx0XHR0aGlzLmNzc19jbGFzcyA9IFwiXCI7XG5cdFx0dGhpcy5tb2RhbCA9IG51bGw7XG5cdFx0dGhpcy5tb2RhbFR5cGUgPSBcImFkZFwiO1xuXHRcdHRoaXMuY2xvc2VPblNhdmUgPSB0cnVlO1xuXHRcdHRoaXMuc2VsZWN0ZWRGaWVsZHMgPSBbXTtcblx0XHR0aGlzLm9uc2F2ZSA9IG51bGw7XG5cdFx0dGhpcy5vbmVkaXQgPSBudWxsO1xuXHRcdHRoaXMub25kZWxldGUgPSBudWxsO1xuXHR9XG5cblx0LyoqXG5cdCAqIFByb2Nlc3MgdGhlIGhvdCBmaWVsZHMuXG5cdCAqL1xuXHRhc3luYyBwcm9jZXNzSG90RmllbGRzIChvbkZpZWxkOiAoaHRtbEVsZW1lbnQ6IEVsZW1lbnQsIFxuXHRcdGZpZWxkOiB7IG5hbWU6IHN0cmluZzsgdHlwZTogc3RyaW5nOyBpbnB1dDogc3RyaW5nOyB9KSA9PiBQcm9taXNlPHZvaWQ+KTogUHJvbWlzZTx2b2lkPlxuXHR7XG5cdFx0Y29uc3QgZWxtcyA9IHRoaXMuaHRtbEVsZW1lbnRzWzFdLnF1ZXJ5U2VsZWN0b3JBbGwgKFwiW2hvdC1maWVsZF1cIik7XG5cblx0XHRmb3IgKGxldCBpSWR4ID0gMDsgaUlkeCA8IGVsbXMubGVuZ3RoOyBpSWR4KyspXG5cdFx0e1xuXHRcdFx0Y29uc3QgZWxtID0gZWxtc1tpSWR4XTtcblx0XHRcdGNvbnN0IGZpZWxkID0gJChlbG0pLmF0dHIgKFwiaG90LWZpZWxkXCIpO1xuXHRcdFx0bGV0IGZpZWxkVHlwZSA9ICQoZWxtKS5hdHRyIChcImhvdC1maWVsZC10eXBlXCIpO1xuXHRcdFx0bGV0IGZpZWxkSW5wdXQgPSAkKGVsbSkuYXR0ciAoXCJob3QtZmllbGQtaW5wdXRcIik7XG5cblx0XHRcdGlmICgoZmllbGRUeXBlID09IG51bGwpIHx8IChmaWVsZFR5cGUgPT09IFwiXCIpKVxuXHRcdFx0XHRmaWVsZFR5cGUgPSBcInRleHRcIjtcblxuXHRcdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdFx0ZWxtLmZpZWxkVHlwZSA9IGZpZWxkVHlwZTtcblxuXHRcdFx0YXdhaXQgb25GaWVsZCAoZWxtLCB7IG5hbWU6IGZpZWxkLCB0eXBlOiBmaWVsZFR5cGUsIGlucHV0OiBmaWVsZElucHV0IH0pO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgZXZlbnQgdGhhdCBjYW4gYmUgY2FsbGVkIHdoZW4gdGhlIGFkZCBidXR0b24gaXMgY2xpY2tlZC5cblx0ICogVGhpcyBpcyBjYWxsZWQgYmVmb3JlIHRoZSBhZGQgbW9kYWwgb3BlbnMuXG5cdCAqL1xuXHRvbkFkZENsaWNrZWQ6ICgpID0+IFByb21pc2U8Ym9vbGVhbj4gPSBudWxsO1xuXG5cdC8qKlxuXHQgKiBFeGVjdXRlcyB3aGVuIHRoZSBhZGQgYnV0dG9uIGlzIGNsaWNrZWQuXG5cdCAqL1xuXHRhc3luYyBhZGRDbGlja2VkIChzZWxlY3RlZEZpZWxkczogYW55W10gPSBbXSk6IFByb21pc2U8dm9pZD5cblx0e1xuXHRcdGlmICh0aGlzLm9uQWRkQ2xpY2tlZCAhPSBudWxsKVxuXHRcdHtcblx0XHRcdGxldCByZXN1bHQgPSBhd2FpdCB0aGlzLm9uQWRkQ2xpY2tlZCAoKTtcblxuXHRcdFx0aWYgKHJlc3VsdCA9PT0gZmFsc2UpXG5cdFx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR0aGlzLm1vZGFsVHlwZSA9IFwiYWRkXCI7XG5cblx0XHRhd2FpdCB0aGlzLnByb2Nlc3NIb3RGaWVsZHMgKFxuXHRcdFx0YXN5bmMgKGh0bWxFbGVtZW50OiBFbGVtZW50LCBmaWVsZDogeyBuYW1lOiBzdHJpbmc7IHR5cGU6IHN0cmluZzsgfSkgPT5cblx0XHRcdHtcblx0XHRcdFx0JChodG1sRWxlbWVudCkudmFsIChcIlwiKTtcblx0XHRcdH0pO1xuXG5cdFx0dGhpcy5zZWxlY3RlZEZpZWxkcyA9IHNlbGVjdGVkRmllbGRzO1xuXG5cdFx0aWYgKHRoaXMub25hZGQgIT0gbnVsbClcblx0XHR7XG5cdFx0XHRpZiAodHlwZW9mICh0aGlzLm9uYWRkKSA9PT0gXCJzdHJpbmdcIilcblx0XHRcdFx0dGhpcy5vbmFkZCA9ICg8KG1vZGFsVHlwZTogc3RyaW5nLCBzZWxlY3RlZEZpZWxkczogYW55W10pID0+IFByb21pc2U8Ym9vbGVhbj4+bmV3IEZ1bmN0aW9uICh0aGlzLm9uYWRkKSk7XG5cblx0XHRcdGxldCByZXN1bHQgPSBhd2FpdCB0aGlzLm9uYWRkICh0aGlzLm1vZGFsVHlwZSwgdGhpcy5zZWxlY3RlZEZpZWxkcyk7XG5cblx0XHRcdGlmIChyZXN1bHQgIT0gbnVsbClcblx0XHRcdHtcblx0XHRcdFx0aWYgKHJlc3VsdCA9PT0gZmFsc2UpXG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGJvb3RzdHJhcC5Nb2RhbC5nZXRJbnN0YW5jZSAoYCMke3RoaXMubW9kYWxJZH1gKS5zaG93ICgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBldmVudCB0aGF0IGNhbiBiZSBjYWxsZWQgd2hlbiB0aGUgZWRpdCBidXR0b24gaXMgY2xpY2tlZC5cblx0ICogVGhpcyBpcyBjYWxsZWQgYmVmb3JlIHRoZSBlZGl0IG1vZGFsIG9wZW5zLlxuXHQgKi9cblx0b25FZGl0Q2xpY2tlZDogKCkgPT4gUHJvbWlzZTxib29sZWFuPiA9IG51bGw7XG5cblx0LyoqXG5cdCAqIEV4ZWN1dGVzIHdoZW4gdGhlIGVkaXQgYnV0dG9uIGlzIGNsaWNrZWQuXG5cdCAqL1xuXHRhc3luYyBlZGl0Q2xpY2tlZCAoc2VsZWN0ZWRGaWVsZHM6IGFueVtdID0gW10pOiBQcm9taXNlPHZvaWQ+XG5cdHtcblx0XHRpZiAodGhpcy5vbkVkaXRDbGlja2VkICE9IG51bGwpXG5cdFx0e1xuXHRcdFx0bGV0IHJlc3VsdCA9IGF3YWl0IHRoaXMub25FZGl0Q2xpY2tlZCAoKTtcblxuXHRcdFx0aWYgKHJlc3VsdCA9PT0gZmFsc2UpXG5cdFx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR0aGlzLm1vZGFsVHlwZSA9IFwiZWRpdFwiO1xuXG5cdFx0dGhpcy5zZWxlY3RlZEZpZWxkcyA9IHNlbGVjdGVkRmllbGRzO1xuXG5cdFx0aWYgKHRoaXMuYXR0YWNoZWRfbGlzdCAhPT0gXCJcIilcblx0XHR7XG5cdFx0XHRsZXQgYXR0YWNoZWRMaXN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQgKHRoaXMuYXR0YWNoZWRfbGlzdCk7XG5cblx0XHRcdC8vIEB0cy1pZ25vcmVcblx0XHRcdGxldCBob3RDb21wb25lbnQ6IEFkbWluVGFibGUgPSBhdHRhY2hlZExpc3QuaG90Q29tcG9uZW50O1xuXHRcdFx0aG90Q29tcG9uZW50LmF0dGFjaGVkRWRpdCA9IHRoaXM7XG5cdFx0XHRsZXQgc2VsZWN0ZWRGaWVsZCA9IGhvdENvbXBvbmVudC5nZXRTZWxlY3RlZCAoKTtcblxuXHRcdFx0aWYgKHNlbGVjdGVkRmllbGQgIT0gbnVsbClcblx0XHRcdHtcblx0XHRcdFx0YXdhaXQgdGhpcy5wcm9jZXNzSG90RmllbGRzIChcblx0XHRcdFx0XHRhc3luYyAoaHRtbEVsZW1lbnQ6IEVsZW1lbnQsIGZpZWxkOiB7IG5hbWU6IHN0cmluZzsgdHlwZTogc3RyaW5nOyBpbnB1dDogc3RyaW5nOyB9KSA9PlxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdC8vIEB0cy1pZ25vcmVcblx0XHRcdFx0XHRcdGxldCB2YWx1ZSA9IHNlbGVjdGVkRmllbGRbZmllbGQubmFtZV07XG5cblx0XHRcdFx0XHRcdGlmIChmaWVsZC5pbnB1dCAhPSBudWxsKVxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRpZiAoZmllbGQuaW5wdXQgIT09IFwiXCIpXG5cdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRsZXQgZnVuYyA9IG5ldyBGdW5jdGlvbiAoZmllbGQuaW5wdXQpO1xuXHRcdFx0XHRcdFx0XHRcdHZhbHVlID0gYXdhaXQgZnVuYy5jYWxsICh0aGlzLCB2YWx1ZSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYgKHZhbHVlICE9IG51bGwpXG5cdFx0XHRcdFx0XHRcdCQoaHRtbEVsZW1lbnQpLnZhbCAodmFsdWUpO1xuXHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdHRoaXMuc2VsZWN0ZWRGaWVsZHMgPSBbc2VsZWN0ZWRGaWVsZF07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMub25lZGl0ICE9IG51bGwpXG5cdFx0e1xuXHRcdFx0aWYgKHR5cGVvZiAodGhpcy5vbmVkaXQpID09PSBcInN0cmluZ1wiKVxuXHRcdFx0XHR0aGlzLm9uZWRpdCA9ICg8KG1vZGFsVHlwZTogc3RyaW5nLCBzZWxlY3RlZEZpZWxkczogYW55W10pID0+IFByb21pc2U8Ym9vbGVhbj4+bmV3IEZ1bmN0aW9uICh0aGlzLm9uZWRpdCkpO1xuXG5cdFx0XHRsZXQgcmVzdWx0ID0gYXdhaXQgdGhpcy5vbmVkaXQgKHRoaXMubW9kYWxUeXBlLCB0aGlzLnNlbGVjdGVkRmllbGRzKTtcblxuXHRcdFx0aWYgKHJlc3VsdCAhPSBudWxsKVxuXHRcdFx0e1xuXHRcdFx0XHRpZiAocmVzdWx0ID09PSBmYWxzZSlcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ym9vdHN0cmFwLk1vZGFsLmdldEluc3RhbmNlIChgIyR7dGhpcy5tb2RhbElkfWApLnNob3cgKCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGV2ZW50IHRoYXQgY2FuIGJlIGNhbGxlZCB3aGVuIHRoZSByZW1vdmUgYnV0dG9uIGlzIGNsaWNrZWQuXG5cdCAqIFRoaXMgaXMgY2FsbGVkIGJlZm9yZSB0aGUgcmVtb3ZlIG1vZGFsIG9wZW5zLlxuXHQgKi9cblx0b25SZW1vdmVDbGlja2VkOiAoKSA9PiBQcm9taXNlPGJvb2xlYW4+ID0gbnVsbDtcblxuXHQvKipcblx0ICogRXhlY3V0ZXMgd2hlbiB0aGUgcmVtb3ZlIGJ1dHRvbiBpcyBjbGlja2VkLlxuXHQgKi9cblx0YXN5bmMgcmVtb3ZlQ2xpY2tlZCAoKTogUHJvbWlzZTx2b2lkPlxuXHR7XG5cdFx0aWYgKHRoaXMub25SZW1vdmVDbGlja2VkICE9IG51bGwpXG5cdFx0e1xuXHRcdFx0bGV0IHJlc3VsdCA9IGF3YWl0IHRoaXMub25SZW1vdmVDbGlja2VkICgpO1xuXG5cdFx0XHRpZiAocmVzdWx0ID09PSBmYWxzZSlcblx0XHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRoaXMubW9kYWxUeXBlID0gXCJyZW1vdmVcIjtcblxuXHRcdGxldCB3aGVyZUZpZWxkczogYW55W10gPSBbXTtcblx0XHRsZXQgaG90Q29tcG9uZW50OiBBZG1pblRhYmxlID0gbnVsbDtcblxuXHRcdGlmICh0aGlzLmF0dGFjaGVkX2xpc3QgIT09IFwiXCIpXG5cdFx0e1xuXHRcdFx0bGV0IGF0dGFjaGVkTGlzdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkICh0aGlzLmF0dGFjaGVkX2xpc3QpO1xuXHRcdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdFx0aG90Q29tcG9uZW50ID0gYXR0YWNoZWRMaXN0LmhvdENvbXBvbmVudDtcblx0XHRcdGhvdENvbXBvbmVudC5hdHRhY2hlZEVkaXQgPSB0aGlzO1xuXHRcdFx0bGV0IGNoZWNrZWRSb3dzID0gaG90Q29tcG9uZW50LmdldENoZWNrZWRSb3dzICgpO1xuXG5cdFx0XHRpZiAoY2hlY2tlZFJvd3MubGVuZ3RoID4gMClcblx0XHRcdHtcblx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBjaGVja2VkUm93cy5sZW5ndGg7IGkrKylcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGxldCBjaGVja2VkUm93ID0gY2hlY2tlZFJvd3NbaV07XG5cdFx0XHRcdFx0d2hlcmVGaWVsZHMucHVzaCAoY2hlY2tlZFJvdyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0bGV0IHNlbGVjdGVkRmllbGQgPSBob3RDb21wb25lbnQuZ2V0U2VsZWN0ZWQgKCk7XG5cblx0XHRcdGlmIChzZWxlY3RlZEZpZWxkICE9IG51bGwpXG5cdFx0XHRcdHdoZXJlRmllbGRzID0gW3NlbGVjdGVkRmllbGRdO1xuXHRcdH1cblxuXHRcdGNvbnN0IGNvbmZpcm1lZDogYm9vbGVhbiA9IGNvbmZpcm0gKFwiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHJlbW92ZSB0aGlzIGl0ZW0/XCIpO1xuXG5cdFx0aWYgKGNvbmZpcm1lZCA9PT0gdHJ1ZSlcblx0XHR7XG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHdoZXJlRmllbGRzLmxlbmd0aDsgaSsrKVxuXHRcdFx0e1xuXHRcdFx0XHRsZXQgd2hlcmVGaWVsZCA9IHdoZXJlRmllbGRzW2ldO1xuXG5cdFx0XHRcdGlmIChob3RDb21wb25lbnQgIT0gbnVsbClcblx0XHRcdFx0e1xuXHRcdFx0XHRcdC8vIFJlbW92ZSBhbnkgZmllbGRzIHRoYXQgYXJlIG1hcmtlZCBhcyByZW1vdmUuXG5cdFx0XHRcdFx0Zm9yIChsZXQga2V5IGluIHdoZXJlRmllbGQpXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0bGV0IGZpZWxkVHlwZSA9IGhvdENvbXBvbmVudC5nZXRGaWVsZFR5cGUgKGtleSk7XG5cblx0XHRcdFx0XHRcdGlmIChmaWVsZFR5cGUgIT0gbnVsbClcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0aWYgKGZpZWxkVHlwZSA9PT0gXCJyZW1vdmVcIilcblx0XHRcdFx0XHRcdFx0XHRkZWxldGUgd2hlcmVGaWVsZFtrZXldO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICh0aGlzLm9uZGVsZXRlICE9IG51bGwpXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRpZiAodHlwZW9mICh0aGlzLm9uZGVsZXRlKSA9PT0gXCJzdHJpbmdcIilcblx0XHRcdFx0XHRcdHRoaXMub25kZWxldGUgPSAoPChzZWxlY3RlZEZpZWxkOiBhbnkpID0+IFByb21pc2U8dm9pZD4+bmV3IEZ1bmN0aW9uICh0aGlzLm9uZGVsZXRlKSk7XG5cblx0XHRcdFx0XHRhd2FpdCB0aGlzLm9uZGVsZXRlICh3aGVyZUZpZWxkKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRlbHNlXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRsZXQgcmVtb3ZlVXJsOiBzdHJpbmcgPSBIb3QuRGF0YS5BZG1pblBhbmVsLnJlbW92ZVVybDtcblxuXHRcdFx0XHRcdGF3YWl0IEhvdC5qc29uUmVxdWVzdCAocmVtb3ZlVXJsLCB7XG5cdFx0XHRcdFx0XHRcdHNjaGVtYTogdGhpcy5zY2hlbWEsXG5cdFx0XHRcdFx0XHRcdHdoZXJlRmllbGRzOiB3aGVyZUZpZWxkXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAod2hlcmVGaWVsZHMubGVuZ3RoID09PSAwKVxuXHRcdFx0e1xuXHRcdFx0XHRpZiAodGhpcy5vbmRlbGV0ZSAhPSBudWxsKVxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0aWYgKHR5cGVvZiAodGhpcy5vbmRlbGV0ZSkgPT09IFwic3RyaW5nXCIpXG5cdFx0XHRcdFx0XHR0aGlzLm9uZGVsZXRlID0gKDwoc2VsZWN0ZWRGaWVsZDogYW55KSA9PiBQcm9taXNlPHZvaWQ+Pm5ldyBGdW5jdGlvbiAodGhpcy5vbmRlbGV0ZSkpO1xuXG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5vbmRlbGV0ZSAobnVsbCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZVxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bGV0IHJlbW92ZVVybDogc3RyaW5nID0gSG90LkRhdGEuQWRtaW5QYW5lbC5yZW1vdmVVcmw7XG5cblx0XHRcdFx0XHRhd2FpdCBIb3QuanNvblJlcXVlc3QgKHJlbW92ZVVybCwge1xuXHRcdFx0XHRcdFx0XHRzY2hlbWE6IHRoaXMuc2NoZW1hLFxuXHRcdFx0XHRcdFx0XHR3aGVyZUZpZWxkczogbnVsbFxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XG5cdFx0XHRpZiAoaG90Q29tcG9uZW50ICE9IG51bGwpXG5cdFx0XHRcdGF3YWl0IGhvdENvbXBvbmVudC5yZWZyZXNoTGlzdCAoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogU2F2ZSB0aGlzIGZvcm0uXG5cdCAqL1xuXHRhc3luYyBvblNhdmUgKClcblx0e1xuXHRcdGxldCB2YWx1ZXM6IGFueSA9IHt9O1xuXG5cdFx0YXdhaXQgdGhpcy5wcm9jZXNzSG90RmllbGRzIChhc3luYyAoaHRtbEVsZW1lbnQ6IEVsZW1lbnQsIGZpZWxkOiB7IG5hbWU6IHN0cmluZzsgdHlwZTogc3RyaW5nOyB9KSA9PlxuXHRcdFx0e1xuXHRcdFx0XHRpZiAoZmllbGQudHlwZSA9PT0gXCJyZW1vdmVcIilcblx0XHRcdFx0XHRyZXR1cm47XG5cblx0XHRcdFx0bGV0IHZhbHVlID0gJChodG1sRWxlbWVudCkudmFsICgpO1xuXG5cdFx0XHRcdGlmICgkKGh0bWxFbGVtZW50KS5hdHRyIChcImhvdC12YWx1ZVwiKSAhPSBudWxsKVxuXHRcdFx0XHRcdHZhbHVlID0gJChodG1sRWxlbWVudCkuYXR0ciAoXCJob3QtdmFsdWVcIik7XG5cblx0XHRcdFx0aWYgKGZpZWxkLnR5cGUgPT09IFwiYXJyYXlcIilcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGlmICh2YWx1ZXNbZmllbGQubmFtZV0gPT0gbnVsbClcblx0XHRcdFx0XHRcdHZhbHVlc1tmaWVsZC5uYW1lXSA9IFtdO1xuXG5cdFx0XHRcdFx0dmFsdWVzW2ZpZWxkLm5hbWVdLnB1c2ggKHZhbHVlKTtcblxuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHZhbHVlc1tmaWVsZC5uYW1lXSA9IHZhbHVlO1xuXHRcdFx0fSk7XG5cblx0XHRpZiAodGhpcy5vbnNhdmUgIT0gbnVsbClcblx0XHR7XG5cdFx0XHRpZiAodHlwZW9mICh0aGlzLm9uc2F2ZSkgPT09IFwic3RyaW5nXCIpXG5cdFx0XHRcdHRoaXMub25zYXZlID0gKDwobW9kYWxUeXBlOiBzdHJpbmcsIHZhbHVlczogYW55LCBzZWxlY3RlZEZpZWxkczogYW55W10pID0+IFByb21pc2U8Ym9vbGVhbj4+bmV3IEZ1bmN0aW9uICh0aGlzLm9uc2F2ZSkpO1xuXG5cdFx0XHRsZXQgcmVzdWx0ID0gYXdhaXQgdGhpcy5vbnNhdmUgKHRoaXMubW9kYWxUeXBlLCB2YWx1ZXMsIHRoaXMuc2VsZWN0ZWRGaWVsZHMpO1xuXG5cdFx0XHRpZiAocmVzdWx0ID09PSBmYWxzZSlcblx0XHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRlbHNlXG5cdFx0e1xuXHRcdFx0aWYgKHRoaXMubW9kYWxUeXBlID09PSBcImFkZFwiKVxuXHRcdFx0e1xuXHRcdFx0XHRsZXQgYWRkVXJsOiBzdHJpbmcgPSBIb3QuRGF0YS5BZG1pblBhbmVsLmFkZFVybDtcblxuXHRcdFx0XHRhd2FpdCBIb3QuanNvblJlcXVlc3QgKGFkZFVybCwge1xuXHRcdFx0XHRcdFx0c2NoZW1hOiB0aGlzLnNjaGVtYSxcblx0XHRcdFx0XHRcdGZpZWxkczogdmFsdWVzXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0aGlzLm1vZGFsVHlwZSA9PT0gXCJlZGl0XCIpXG5cdFx0XHR7XG5cdFx0XHRcdGlmICh0aGlzLnNlbGVjdGVkRmllbGRzLmxlbmd0aCA9PT0gMClcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGFsZXJ0IChcIk5vIGl0ZW0ocykgc2VsZWN0ZWQhXCIpO1xuXG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0bGV0IHdoZXJlRmllbGRzOiBhbnkgPSB7fTtcblxuXHRcdFx0XHRhd2FpdCB0aGlzLnByb2Nlc3NIb3RGaWVsZHMgKGFzeW5jIChodG1sRWxlbWVudDogRWxlbWVudCwgZmllbGQ6IHsgbmFtZTogc3RyaW5nOyB0eXBlOiBzdHJpbmc7IH0pID0+XG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0aWYgKGZpZWxkLnR5cGUgPT09IFwicmVtb3ZlXCIpXG5cdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcblx0XHRcdFx0XHRcdGxldCB2YWx1ZSA9ICQoaHRtbEVsZW1lbnQpLnZhbCAoKTtcblx0XHRcblx0XHRcdFx0XHRcdGlmICgkKGh0bWxFbGVtZW50KS5hdHRyIChcImhvdC12YWx1ZVwiKSAhPSBudWxsKVxuXHRcdFx0XHRcdFx0XHR2YWx1ZSA9ICQoaHRtbEVsZW1lbnQpLmF0dHIgKFwiaG90LXZhbHVlXCIpO1xuXHRcdFxuXHRcdFx0XHRcdFx0aWYgKGZpZWxkLnR5cGUgPT09IFwiYXJyYXlcIilcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0aWYgKHdoZXJlRmllbGRzW2ZpZWxkLm5hbWVdID09IG51bGwpXG5cdFx0XHRcdFx0XHRcdFx0d2hlcmVGaWVsZHNbZmllbGQubmFtZV0gPSBbXTtcblx0XHRcblx0XHRcdFx0XHRcdFx0d2hlcmVGaWVsZHNbZmllbGQubmFtZV0ucHVzaCAodmFsdWUpO1xuXHRcdFxuXHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHR9XG5cdFx0XG5cdFx0XHRcdFx0XHR3aGVyZUZpZWxkc1tmaWVsZC5uYW1lXSA9IHZhbHVlO1xuXHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdGxldCBlZGl0VXJsOiBzdHJpbmcgPSBIb3QuRGF0YS5BZG1pblBhbmVsLmVkaXRVcmw7XG5cblx0XHRcdFx0YXdhaXQgSG90Lmpzb25SZXF1ZXN0IChlZGl0VXJsLCB7XG5cdFx0XHRcdFx0XHRzY2hlbWE6IHRoaXMuc2NoZW1hLFxuXHRcdFx0XHRcdFx0d2hlcmVGaWVsZHM6IHdoZXJlRmllbGRzLFxuXHRcdFx0XHRcdFx0ZmllbGRzOiB2YWx1ZXNcblx0XHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAodGhpcy5hdHRhY2hlZF9saXN0ICE9PSBcIlwiKVxuXHRcdHtcblx0XHRcdGxldCBhdHRhY2hlZExpc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCAodGhpcy5hdHRhY2hlZF9saXN0KTtcblx0XHRcdC8vIEB0cy1pZ25vcmVcblx0XHRcdGxldCB0YWJsZTogQWRtaW5UYWJsZSA9IGF0dGFjaGVkTGlzdC5ob3RDb21wb25lbnQ7XG5cblx0XHRcdHRhYmxlLmF0dGFjaGVkRWRpdCA9IHRoaXM7XG5cblx0XHRcdGF3YWl0IHRhYmxlLnJlZnJlc2hMaXN0ICgpO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLmNsb3NlT25TYXZlID09PSB0cnVlKVxuXHRcdHtcblx0XHRcdGJvb3RzdHJhcC5Nb2RhbC5nZXRJbnN0YW5jZSAoYCMke3RoaXMubW9kYWxJZH1gKS5oaWRlICgpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIGxpc3Qgb2YgZGF0YSBmcm9tIHRoZSBzZXJ2ZXIuXG5cdCAqL1xuXHRvblBvc3RQbGFjZSAocGFyZW50SHRtbEVsZW1lbnQ6IEhUTUxFbGVtZW50LCBodG1sRWxlbWVudDogSFRNTEVsZW1lbnQpOiBIVE1MRWxlbWVudFxuXHR7XG5cdFx0dGhpcy5tb2RhbCA9IG5ldyBib290c3RyYXAuTW9kYWwgKCQoYCMke3RoaXMubW9kYWxJZH1gKVswXSwge1xuXHRcdFx0XHRcImJhY2tkcm9wXCI6IHRydWUsXG5cdFx0XHRcdFwia2V5Ym9hcmRcIjogdHJ1ZSxcblx0XHRcdFx0XCJmb2N1c1wiOiB0cnVlXG5cdFx0XHR9KTtcblxuXHRcdC8vLyBAdG9kbyBGaXggdGhpcyB0ZW1wb3JhcnkgaGFjay4gSSBkb250IGxpa2UgaXQuXG5cdFx0c2V0VGltZW91dCAoKCkgPT5cblx0XHRcdHtcblx0XHRcdFx0aWYgKHRoaXMuYXR0YWNoZWRfbGlzdCAhPT0gXCJcIilcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGxldCBhdHRhY2hlZExpc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCAodGhpcy5hdHRhY2hlZF9saXN0KTtcblx0XHRcdFx0XHQvLyBAdHMtaWdub3JlXG5cdFx0XHRcdFx0bGV0IHRhYmxlOiBBZG1pblRhYmxlID0gYXR0YWNoZWRMaXN0LmhvdENvbXBvbmVudDtcblxuXHRcdFx0XHRcdGlmICh0YWJsZSAhPSBudWxsKVxuXHRcdFx0XHRcdFx0dGFibGUuYXR0YWNoZWRFZGl0ID0gdGhpcztcblx0XHRcdFx0fVxuXHRcdFx0fSwgNTApO1xuXG5cdFx0cmV0dXJuIChudWxsKTtcblx0fVxuXG5cdG91dHB1dCAoKTogc3RyaW5nIHwgSG90Q29tcG9uZW50T3V0cHV0W11cblx0e1xuXHRcdGlmICh0aGlzLm5hbWUgPT09IFwiXCIpXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IgKGBZb3UgbXVzdCBzcGVjaWZ5IGEgbmFtZSBmb3IgZWFjaCBhZG1pbi1lZGl0IGVsZW1lbnQhYCk7XG5cblx0XHR0aGlzLm1vZGFsSWQgPSBgJHt0aGlzLm5hbWV9TW9kYWxgO1xuXG5cdFx0bGV0IG91dHB1dE9iaiA9IFt7XG5cdFx0XHRodG1sOiBgXG5cdFx0XHQ8IS0tICR7dGhpcy50aXRsZX0gTW9kYWwgU3RhcnQgLS0+XG5cdFx0XHQ8ZGl2IGNsYXNzPVwibW9kYWwgZmFkZSAke3RoaXMuY3NzX2NsYXNzfVwiIGlkPVwiJHt0aGlzLm1vZGFsSWR9XCIgdGFiaW5kZXg9XCItMVwiIGFyaWEtbGFiZWxsZWRieT1cIiR7dGhpcy5uYW1lfU1vZGFsTGFiZWxcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cblx0XHRcdFx0PGRpdiBjbGFzcz1cIm1vZGFsLWRpYWxvZ1wiPlxuXHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJtb2RhbC1jb250ZW50XCI+XG5cdFx0XHRcdFx0PGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxuXHRcdFx0XHRcdFx0PGg1IGNsYXNzPVwibW9kYWwtdGl0bGVcIiBpZD1cIiR7dGhpcy5uYW1lfU1vZGFsTGFiZWxcIj4ke3RoaXMudGl0bGV9PC9oNT5cblx0XHRcdFx0XHRcdDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuLWNsb3NlXCIgZGF0YS1icy1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIj48L2J1dHRvbj5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxuXHRcdFx0XHRcdFx0PGhvdC1wbGFjZS1oZXJlIG5hbWUgPSBcIm1vZGFsQm9keVwiIHR5cGUgPSBcIm1vZGFsXCI+PC9ob3QtcGxhY2UtaGVyZT5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCI+XG5cdFx0XHRcdFx0XHQ8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5XCIgZGF0YS1icy1kaXNtaXNzPVwibW9kYWxcIj5DYW5jZWw8L2J1dHRvbj5cblx0XHRcdFx0XHRcdDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgb25jbGljayA9IFwiZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJyR7dGhpcy5tb2RhbElkfScpLm9uU2F2ZSAoKTtcIj4ke3RoaXMuYnV0dG9uX3RpdGxlfTwvYnV0dG9uPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdDwvZGl2PlxuXHRcdFx0PCEtLSAke3RoaXMudGl0bGV9IE1vZGFsIEVuZCAtLT5gLFxuXHRcdFx0ZG9jdW1lbnRTZWxlY3RvcjogXCJib2R5XCJcblx0XHR9XTtcblxuXHRcdGlmICh0aGlzLmFkZF9wbGFjZV9oZXJlICE9PSBcIlwiKVxuXHRcdHtcblx0XHRcdG91dHB1dE9iai5wdXNoICh7XG5cdFx0XHRcdGh0bWw6IGA8YnV0dG9uIGlkID0gXCIke3RoaXMubW9kYWxJZH0tYWRkLWJ0blwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLW91dGxpbmUtc2Vjb25kYXJ5XCIgb25jbGljayA9IFwidGhpcy5hZGRDbGlja2VkICgpO1wiPiR7dGhpcy5hZGRfdGV4dH08L2J1dHRvbj5gLFxuXHRcdFx0XHRkb2N1bWVudFNlbGVjdG9yOiBgaG90LXBsYWNlLWhlcmVbbmFtZT1cIiR7dGhpcy5hZGRfcGxhY2VfaGVyZX1cIl1gXG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5lZGl0X3BsYWNlX2hlcmUgIT09IFwiXCIpXG5cdFx0e1xuXHRcdFx0b3V0cHV0T2JqLnB1c2ggKHtcblx0XHRcdFx0aHRtbDogYDxidXR0b24gaWQgPSBcIiR7dGhpcy5tb2RhbElkfS1lZGl0LWJ0blwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLW91dGxpbmUtc2Vjb25kYXJ5XCIgb25jbGljayA9IFwidGhpcy5lZGl0Q2xpY2tlZCAoKTtcIj4ke3RoaXMuZWRpdF90ZXh0fTwvYnV0dG9uPmAsXG5cdFx0XHRcdGRvY3VtZW50U2VsZWN0b3I6IGBob3QtcGxhY2UtaGVyZVtuYW1lPVwiJHt0aGlzLmVkaXRfcGxhY2VfaGVyZX1cIl1gXG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5yZW1vdmVfcGxhY2VfaGVyZSAhPT0gXCJcIilcblx0XHR7XG5cdFx0XHRvdXRwdXRPYmoucHVzaCAoe1xuXHRcdFx0XHRodG1sOiBgPGJ1dHRvbiBpZCA9IFwiJHt0aGlzLm1vZGFsSWR9LXJlbW92ZS1idG5cIiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1vdXRsaW5lLXNlY29uZGFyeVwiIG9uY2xpY2sgPSBcInRoaXMucmVtb3ZlQ2xpY2tlZCAoKTtcIj4ke3RoaXMucmVtb3ZlX3RleHR9PC9idXR0b24+YCxcblx0XHRcdFx0ZG9jdW1lbnRTZWxlY3RvcjogYGhvdC1wbGFjZS1oZXJlW25hbWU9XCIke3RoaXMucmVtb3ZlX3BsYWNlX2hlcmV9XCJdYFxuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIChvdXRwdXRPYmopO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBIb3RTdGFxLCBIb3QsIEhvdEFQSSwgSG90Q29tcG9uZW50LCBIb3RDb21wb25lbnRPdXRwdXQgfSBmcm9tIFwiaG90c3RhcVwiO1xuaW1wb3J0IHsgQWRtaW5UYWJsZSB9IGZyb20gXCIuL2FkbWluLXRhYmxlXCI7XG5cbmV4cG9ydCBjbGFzcyBBZG1pblRhYmxlRmllbGQgZXh0ZW5kcyBIb3RDb21wb25lbnRcbntcblx0LyoqXG5cdCAqIFRoZSB0YWJsZSBmaWVsZC5cblx0ICovXG5cdGZpZWxkOiBudW1iZXI7XG5cdC8qKlxuXHQgKiBUaGUgdHlwZSBvZiBmaWVsZC4gQ2FuIGJlOlxuXHQgKiAqIHRleHRcblx0ICogKiByZW1vdmVcblx0ICogXG5cdCAqIERlZmF1bHQ6IHRleHRcblx0ICovXG5cdGZpZWxkX3R5cGU6IHN0cmluZztcblx0LyoqXG5cdCAqIElmIHNldCB0byAxLCB0aGlzIHdpbGwgbm90IG91dHB1dCB0aGUgZmllbGQuXG5cdCAqL1xuXHRub19vdXRwdXQ6IHN0cmluZztcblx0LyoqXG5cdCAqIFRoZSBvbmlucHV0IGV2ZW50IGlzIGZpcmVkIHdoZW4gYW4gaXRlbSBpcyBhYm91dCB0byBiZSBwbGFjZWQgaW50byB0aGUgdGFibGUuXG5cdCAqL1xuXHRvbmlucHV0OiAoaXRlbTogYW55KSA9PiBhbnk7XG5cdC8qKlxuXHQgKiBUaGUgb3V0cHV0IHRvIGRpc3BsYXkuXG5cdCAqL1xuXHRvbm91dHB1dDogKGluZGV4OiBudW1iZXIsIHZhbHVlOiBzdHJpbmcpID0+IHN0cmluZztcblxuXHRjb25zdHJ1Y3RvciAoY29weTogSG90Q29tcG9uZW50IHwgSG90U3RhcSwgYXBpOiBIb3RBUEkpXG5cdHtcblx0XHRzdXBlciAoY29weSwgYXBpKTtcblxuXHRcdHRoaXMudGFnID0gXCJhZG1pbi10YWJsZS1maWVsZFwiO1xuXHRcdHRoaXMuZmllbGQgPSAwO1xuXHRcdHRoaXMuZmllbGRfdHlwZSA9IFwidGV4dFwiO1xuXHRcdHRoaXMubm9fb3V0cHV0ID0gXCIwXCI7XG5cdFx0dGhpcy5vbmlucHV0ID0gbnVsbDtcblx0XHR0aGlzLm9ub3V0cHV0ID0gbnVsbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGQgdGhpcyB0YWJsZSBmaWVsZCB0byB0aGUgdGFibGVcblx0ICovXG5cdG9uUG9zdFBsYWNlIChwYXJlbnRIdG1sRWxlbWVudDogSFRNTEVsZW1lbnQsIGh0bWxFbGVtZW50OiBIVE1MRWxlbWVudCk6IEhUTUxFbGVtZW50XG5cdHtcblx0XHRsZXQgaG90Q29tcG9uZW50OiBBZG1pblRhYmxlID0gbnVsbDtcblxuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHRpZiAocGFyZW50SHRtbEVsZW1lbnQucGFyZW50Tm9kZS5wYXJlbnROb2RlLmhvdENvbXBvbmVudCAhPSBudWxsKVxuXHRcdHtcblx0XHRcdC8vIEB0cy1pZ25vcmVcblx0XHRcdGhvdENvbXBvbmVudCA9IHBhcmVudEh0bWxFbGVtZW50LnBhcmVudE5vZGUucGFyZW50Tm9kZS5ob3RDb21wb25lbnQ7XG5cdFx0fVxuXHRcdGVsc2Vcblx0XHR7XG5cdFx0XHQvLyBAdHMtaWdub3JlIC0gbG9vb29sLiBBZGQgYSBiZXR0ZXIgd2F5IHRvIGdldCB0aGUgcGFyZW50IEhvdENvbXBvbmVudC5cblx0XHRcdGhvdENvbXBvbmVudCA9IHBhcmVudEh0bWxFbGVtZW50LnBhcmVudE5vZGUucGFyZW50Tm9kZS5wYXJlbnROb2RlLnBhcmVudE5vZGUuaG90Q29tcG9uZW50O1xuXHRcdH1cblxuXHRcdGlmIChob3RDb21wb25lbnQgIT0gbnVsbClcblx0XHRcdGhvdENvbXBvbmVudC5hZGRIZWFkZXJEYXRhT25seSAodGhpcywgaHRtbEVsZW1lbnQpO1xuXG5cdFx0cmV0dXJuIChudWxsKTtcblx0fVxuXG5cdG91dHB1dCAoKTogc3RyaW5nIHwgSG90Q29tcG9uZW50T3V0cHV0W11cblx0e1xuXHRcdGlmICh0aGlzLm5vX291dHB1dCA9PT0gXCIxXCIpXG5cdFx0e1xuXHRcdFx0cmV0dXJuIChbe1xuXHRcdFx0XHRodG1sOiBgPGRpdj48L2Rpdj5gLFxuXHRcdFx0XHRwbGFjZUhlcmVQYXJlbnQ6IFwiYWZ0ZXJUYWJsZVwiXG5cdFx0XHR9XSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIChbe1xuXHRcdFx0aHRtbDogYDx0aD4ke3RoaXMuaW5uZXJ9PC90aD5gLFxuXHRcdFx0cGxhY2VIZXJlUGFyZW50OiBcImhlYWRlclwiXG5cdFx0fV0pO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBIb3RTdGFxLCBIb3QsIEhvdEFQSSwgSG90Q29tcG9uZW50LCBIb3RDb21wb25lbnRPdXRwdXQgfSBmcm9tIFwiaG90c3RhcVwiO1xuXG5leHBvcnQgY2xhc3MgQWRtaW5UYWJsZVJvdyBleHRlbmRzIEhvdENvbXBvbmVudFxue1xuXHQvKipcblx0ICogVGhlIGZpZWxkcyBhcmUgc3RvcmVkIGluIGEga2V5L3ZhbHVlIG9iamVjdC5cblx0ICogXG5cdCAqIEBleGFtcGxlIHsgXCJuYW1lXCI6IFwiSm9obiBTbWl0aFwiLCBcImVtYWlsXCI6IFwiam9obi5zbWl0aEBlbWFpbC5jb21cIiB9XG5cdCAqL1xuXHRmaWVsZHM6IGFueVtdO1xuXG5cdGNvbnN0cnVjdG9yIChjb3B5OiBIb3RDb21wb25lbnQgfCBIb3RTdGFxLCBhcGk6IEhvdEFQSSlcblx0e1xuXHRcdHN1cGVyIChjb3B5LCBhcGkpO1xuXG5cdFx0dGhpcy50YWcgPSBcImFkbWluLXRhYmxlLXJvd1wiO1xuXHRcdHRoaXMuZmllbGRzID0gW107XG5cdH1cblxuXHQvKipcblx0ICogQWRkIHRoaXMgdGFibGUgcm93IHRvIHRoZSB0YWJsZVxuXHQgKi9cblx0b25Qb3N0UGxhY2UgKHBhcmVudEh0bWxFbGVtZW50OiBIVE1MRWxlbWVudCwgaHRtbEVsZW1lbnQ6IEhUTUxFbGVtZW50KTogSFRNTEVsZW1lbnRcblx0e1xuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHRwYXJlbnRIdG1sRWxlbWVudC5wYXJlbnROb2RlLnBhcmVudE5vZGUucGFyZW50Tm9kZS5ob3RDb21wb25lbnQucm93RWxlbWVudHMucHVzaCAoeyBmaWVsZHM6IHRoaXMuZmllbGRzLCBlbGVtZW50OiBodG1sRWxlbWVudH0pO1xuXG5cdFx0cmV0dXJuIChudWxsKTtcblx0fVxuXG5cdG91dHB1dCAoKTogc3RyaW5nIHwgSG90Q29tcG9uZW50T3V0cHV0W11cblx0e1xuXHRcdGxldCByb3dIdG1sID0gXCJcIjtcblxuXHRcdGlmICh0aGlzLmZpZWxkcy5sZW5ndGggPiAwKVxuXHRcdFx0cm93SHRtbCArPSBgPHRkPjxpbnB1dCB0eXBlID0gXCJjaGVja2JveFwiIC8+PC90ZD5gO1xuXG5cdFx0Zm9yIChsZXQgaUlkeCA9IDA7IGlJZHggPCB0aGlzLmZpZWxkcy5sZW5ndGg7IGlJZHgrKylcblx0XHR7XG5cdFx0XHRsZXQgZmllbGRPYmogPSB0aGlzLmZpZWxkc1tpSWR4XTtcblxuXHRcdFx0Zm9yIChsZXQga2V5IGluIGZpZWxkT2JqKVxuXHRcdFx0e1xuXHRcdFx0XHRsZXQgdmFsdWUgPSBmaWVsZE9ialtrZXldO1xuXG5cdFx0XHRcdHJvd0h0bWwgKz0gYDx0ZD4ke3ZhbHVlfTwvdGQ+YDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gKFt7XG5cdFx0XHRodG1sOiBgPHRyPiR7cm93SHRtbH08L3RyPmAsXG5cdFx0XHRwbGFjZUhlcmVQYXJlbnQ6IFwicmVzdWx0c1wiXG5cdFx0fV0pO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBIb3RTdGFxLCBIb3QsIEhvdEFQSSwgSG90Q29tcG9uZW50LCBIb3RDb21wb25lbnRPdXRwdXQgfSBmcm9tIFwiaG90c3RhcVwiO1xuaW1wb3J0IHsgQWRtaW5UYWJsZUZpZWxkIH0gZnJvbSBcIi4vYWRtaW4tdGFibGUtZmllbGRcIjtcbmltcG9ydCB7IEFkbWluRWRpdCB9IGZyb20gXCIuL2FkbWluLWVkaXRcIjtcblxuZXhwb3J0IGNsYXNzIEFkbWluVGFibGUgZXh0ZW5kcyBIb3RDb21wb25lbnRcbntcblx0LyoqXG5cdCAqIFRoZSB0aXRsZSBvZiB0aGlzIHRhYmxlLlxuXHQgKi9cblx0dGl0bGU6IHN0cmluZztcblx0LyoqXG5cdCAqIFRoZSBhdHRhY2hlZCBzY2hlbWEuXG5cdCAqL1xuXHRzY2hlbWE6IHN0cmluZztcblx0aGVhZGVyczoge1xuXHRcdC8qKlxuXHRcdCAqIFRoZSBzdG9yZWQgaGVhZGVyIGZpZWxkcy5cblx0XHQgKi9cblx0XHRmaWVsZHM6IHsgW25hbWU6IHN0cmluZ106IEFkbWluVGFibGVGaWVsZDsgfTtcblx0XHQvKipcblx0XHQgKiBUaGUgaGVhZGVycyBhcmUgc3RvcmVkIGluIGEga2V5L3ZhbHVlIG9iamVjdC5cblx0XHQgKiBcblx0XHQgKiBAZXhhbXBsZSB7IFwibmFtZVwiOiBcIjx0aD5OYW1lPC90aD5cIiwgXCJlbWFpbFwiOiBcIjx0aD5FbWFpbDwvdGg+XCIgfVxuXHRcdCAqL1xuXHRcdGVsZW1lbnRzOiB7IFtuYW1lOiBzdHJpbmddOiBhbnk7IH07XG5cdFx0LyoqXG5cdFx0ICogVGhlIGhlYWRlciBpbmRpY2llcyBhcmUgc3RvcmVkIGluIGEga2V5L3ZhbHVlIG9iamVjdC5cblx0XHQgKiBcblx0XHQgKiBAZXhhbXBsZSBjb25zb2xlLmxvZyAodGhpcy5oZWFkZXJJbmRpY2llc1tcIm5hbWVcIl0pOyAvLyBPdXRwdXRzIDBcblx0XHQgKi9cblx0XHRpbmRpY2llczogbnVtYmVyW107XG5cdH07XG5cdC8qKlxuXHQgKiBUaGUgcm93IGVsZW1lbnRzIGFyZSBzdG9yZWQgaW4gYW4gYXJyYXkgd2l0aCBrZXkvdmFsdWUgZmllbGRzIGFuZCBpdCdzIGF0dGFjaGVkIGh0bWwgZWxlbWVudC5cblx0ICogXG5cdCAqIEBleGFtcGxlXG5cdCAqIHtcblx0ICogICBcImZpZWxkc1wiOiBbXG5cdCAqICAgICAgIHtcblx0ICogICAgICAgICBcIm5hbWVcIjogXCJKb2huIFNtaXRoXCIsXG5cdCAqICAgICAgICAgXCJlbWFpbFwiOiBcImpvaG4uc21pdGhAdGVzdC5jb21cIlxuXHQgKiAgICAgICB9XG5cdCAqICAgICBdLFxuXHQgKiAgIFwiaHRtbFwiOiBcIjx0cj48dGQ+Sm9obiBTbWl0aDwvdGQ+PHRkPmpvaG4uc21pdGhAdGVzdC5jb208L3RkPjwvdHI+XCJcblx0ICogfVxuXHQgKi9cblx0cm93RWxlbWVudHM6IHsgZmllbGRzOiBhbnlbXTsgZWxlbWVudDogSFRNTEVsZW1lbnQ7IH1bXSA9IFtdO1xuXHQvKipcblx0ICogVGhlIHNlbGVjdGVkIHJvdyBpbmRpY2llcy4gRWFjaCBpbmRleCBtYXBzIHRvIHRoZSByb3dFbGVtZW50cyBhcnJheS5cblx0ICogXG5cdCAqIEBmaXhtZSBBZGQgc3VwcG9ydCBmb3IgdGhpcyBpbiB0aGUgZnV0dXJlLlxuXHQgKi9cblx0Ly9wcm90ZWN0ZWQgc2VsZWN0ZWRSb3dzOiBudW1iZXJbXTtcblx0LyoqXG5cdCAqIFRoZSBtb3N0IHJlY2VudGx5IHNlbGVjdGVkIHJvdyBpbmRleC4gVGhlIGluZGV4IG1hcHMgdG8gdGhlIHJvd0VsZW1lbnRzIGFycmF5LlxuXHQgKi9cblx0cHJvdGVjdGVkIHNlbGVjdGVkOiBudW1iZXI7XG5cdC8qKlxuXHQgKiBUaGUgbGlzdCBmdW5jdGlvbiB0byBleGVjdXRlIHRvIHJldHJpZXZlIGRhdGEuXG5cdCAqL1xuXHRvbmxpc3Q6ICgpID0+IFByb21pc2U8YW55W10+Oztcblx0LyoqXG5cdCAqIFRoZSBsaXN0IHVybCB0byB1c2UgZm9yIHRoaXMgdGFibGUuIEhvdC5EYXRhLkFkbWluUGFuZWwubGlzdFVybCB3aWxsIG5vdCBiZSB1c2VkIGluIHRoaXMgY2FzZS5cblx0ICovXG5cdGxpc3R1cmw6IHN0cmluZztcblx0LyoqXG5cdCAqIElmIHNldCB0byB0cnVlLCBlYWNoIHJvdyB3aWxsIGhhdmUgYSBjaGVja2JveC5cblx0ICogQGRlZmF1bHQgdHJ1ZVxuXHQgKi9cblx0Y2hlY2tib3g6IGJvb2xlYW47XG5cdC8qKlxuXHQgKiBJZiBzZXQgdG8gdHJ1ZSwgYSBzaW5nbGUgY2xpY2sgd2lsbCBhbGxvdyB0aGUgdXNlciB0byBlZGl0IHRoZSByb3cuXG5cdCAqL1xuXHRzaW5nbGVjbGlja2VkaXQ6IGJvb2xlYW47XG5cdC8qKlxuXHQgKiBFeGVjdXRlcyB0aGlzIGV2ZW50IHdoZW4gYSByb3cgaXMgc2VsZWN0ZWQuIFRoZSBwb3RlbnRpYWwgaXRlbSB0byBiZSBzZWxlY3RlZCBcblx0ICogd2lsbCBhbHNvIGJlIHBhc3NlZC4gSWYgdGhpcyByZXR1cm5zIGZhbHNlLCB0aGUgcm93IHdpbGwgbm90IGJlIHNlbGVjdGVkLlxuXHQgKi9cblx0b25zZWxlY3RlZHJvdzogKHJvd0luZGV4OiBudW1iZXIsIGl0ZW06IGFueVtdKSA9PiBQcm9taXNlPGJvb2xlYW4+O1xuXHQvKipcblx0ICogVGhlIGF0dGFjaGVkIGVkaXQgZm9ybSwgaWYgYW55LlxuXHQgKi9cblx0YXR0YWNoZWRFZGl0OiBBZG1pbkVkaXQ7XG5cblx0Y29uc3RydWN0b3IgKGNvcHk6IEhvdENvbXBvbmVudCB8IEhvdFN0YXEsIGFwaTogSG90QVBJKVxuXHR7XG5cdFx0c3VwZXIgKGNvcHksIGFwaSk7XG5cblx0XHR0aGlzLnRhZyA9IFwiYWRtaW4tdGFibGVcIjtcblx0XHR0aGlzLnRpdGxlID0gXCJcIjtcblx0XHR0aGlzLnNjaGVtYSA9IFwiXCI7XG5cdFx0dGhpcy5oZWFkZXJzID0ge1xuXHRcdFx0XHRmaWVsZHM6IHt9LFxuXHRcdFx0XHRlbGVtZW50czoge30sXG5cdFx0XHRcdGluZGljaWVzOiBbXVxuXHRcdFx0fTtcblx0XHR0aGlzLnJvd0VsZW1lbnRzID0gW107XG5cdFx0Ly90aGlzLnNlbGVjdGVkUm93cyA9IFtdO1xuXHRcdHRoaXMub25saXN0ID0gbnVsbDtcblx0XHR0aGlzLmxpc3R1cmwgPSBcIlwiO1xuXHRcdHRoaXMuY2hlY2tib3ggPSB0cnVlO1xuXHRcdHRoaXMuc2luZ2xlY2xpY2tlZGl0ID0gZmFsc2U7XG5cdFx0dGhpcy5vbnNlbGVjdGVkcm93ID0gbnVsbDtcblx0XHR0aGlzLmF0dGFjaGVkRWRpdCA9IG51bGw7XG5cdFx0dGhpcy5zZWxlY3RlZCA9IC0xO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkZCBhIGhlYWRlciB0byB0aGUgdGFibGUuXG5cdCAqL1xuXHRhZGRIZWFkZXIgKHRhYmxlRmllbGRFbGVtZW50OiBIVE1MRWxlbWVudClcblx0e1xuXHRcdGxldCBoZWFkZXIgPSB0aGlzLmh0bWxFbGVtZW50c1swXS5nZXRFbGVtZW50c0J5VGFnTmFtZSAoXCJ0aGVhZFwiKVswXTtcblxuXHRcdGlmICh0aGlzLmhlYWRlcnMuaW5kaWNpZXMubGVuZ3RoIDwgMSlcblx0XHRcdHRoaXMuaGVhZGVycy5pbmRpY2llcy5wdXNoIChudWxsKTtcblxuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHR0aGlzLmhlYWRlcnMuaW5kaWNpZXMucHVzaCAodGFibGVGaWVsZEVsZW1lbnQuaG90Q29tcG9uZW50LmZpZWxkKTtcblx0XHRoZWFkZXIuYXBwZW5kQ2hpbGQgKHRhYmxlRmllbGRFbGVtZW50KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGQgYSBoZWFkZXIgdG8gdGhlIHRhYmxlLlxuXHQgKi9cblx0YWRkSGVhZGVyRGF0YU9ubHkgKHRhYmxlRmllbGQ6IEFkbWluVGFibGVGaWVsZCwgaHRtbEVsZW1lbnQ6IEhUTUxFbGVtZW50KVxuXHR7XG5cdFx0aWYgKHRoaXMuaGVhZGVycy5pbmRpY2llcy5sZW5ndGggPCAxKVxuXHRcdFx0dGhpcy5oZWFkZXJzLmluZGljaWVzLnB1c2ggKG51bGwpO1xuXG5cdFx0dGhpcy5oZWFkZXJzLmluZGljaWVzLnB1c2ggKHRhYmxlRmllbGQuZmllbGQpO1xuXHRcdHRoaXMuaGVhZGVycy5maWVsZHNbdGFibGVGaWVsZC5maWVsZF0gPSB0YWJsZUZpZWxkO1xuXHRcdHRoaXMuaGVhZGVycy5lbGVtZW50c1t0YWJsZUZpZWxkLmZpZWxkXSA9IGh0bWxFbGVtZW50O1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgZmllbGQgdHlwZSBvZiBhIGZpZWxkLlxuXHQgKi9cblx0Z2V0RmllbGRUeXBlIChmaWVsZE5hbWU6IHN0cmluZyk6IHN0cmluZ1xuXHR7XG5cdFx0aWYgKHRoaXMuaGVhZGVycy5lbGVtZW50c1tmaWVsZE5hbWVdICE9IG51bGwpXG5cdFx0e1xuXHRcdFx0bGV0IGhvdENvbXBvbmVudDogQWRtaW5UYWJsZUZpZWxkID0gdGhpcy5oZWFkZXJzLmVsZW1lbnRzW2ZpZWxkTmFtZV0uaG90Q29tcG9uZW50O1xuXG5cdFx0XHRpZiAoaG90Q29tcG9uZW50ICE9IG51bGwpXG5cdFx0XHRcdHJldHVybiAoaG90Q29tcG9uZW50LmZpZWxkX3R5cGUpO1xuXHRcdH1cblxuXHRcdHJldHVybiAobnVsbCk7XG5cdH1cblxuXHQvKipcblx0ICogRXhlY3V0ZXMgd2hlbiBhIHJvdyBpcyBzZWxlY3RlZC5cblx0ICovXG5cdGFzeW5jIHNlbGVjdFJvdyAoaHRtbEVsZW1lbnQ6IEhUTUxFbGVtZW50LCByb3dJbmRleDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPlxuXHR7XG5cdFx0aWYgKHRoaXMub25zZWxlY3RlZHJvdyAhPSBudWxsKVxuXHRcdHtcblx0XHRcdGlmICh0eXBlb2YgKHRoaXMub25zZWxlY3RlZHJvdykgPT09IFwic3RyaW5nXCIpXG5cdFx0XHRcdHRoaXMub25zZWxlY3RlZHJvdyA9ICg8KHJvd0luZGV4OiBudW1iZXIsIGl0ZW06IGFueVtdKSA9PiBQcm9taXNlPGJvb2xlYW4+Pm5ldyBGdW5jdGlvbiAodGhpcy5vbnNlbGVjdGVkcm93KSk7XG5cblx0XHRcdGxldCBpdGVtOiBhbnlbXSA9IG51bGw7XG5cblx0XHRcdGlmICh0aGlzLnJvd0VsZW1lbnRzW3Jvd0luZGV4XSAhPSBudWxsKVxuXHRcdFx0XHRpdGVtID0gdGhpcy5yb3dFbGVtZW50c1tyb3dJbmRleF0uZmllbGRzO1xuXG5cdFx0XHRsZXQgcmVzdWx0ID0gYXdhaXQgdGhpcy5vbnNlbGVjdGVkcm93IChyb3dJbmRleCwgaXRlbSk7XG5cblx0XHRcdGlmIChyZXN1bHQgPT09IGZhbHNlKVxuXHRcdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gSW4gdGhlIGZ1dHVyZSwgd2Ugd2lsbCBzdXBwb3J0IG11bHRpcGxlIHJvd3MgYmVpbmcgc2VsZWN0ZWQuIEZvciBub3cgXG5cdFx0Ly8gdGhpcyB3aWxsIGVuc3VyZSB0aGF0IG9ubHkgb25lIHJvdyBpcyBzZWxlY3RlZCBhdCBhIHRpbWUuXG5cdFx0e1xuXHRcdFx0bGV0IHRib2R5ID0gdGhpcy5odG1sRWxlbWVudHNbMV0uZ2V0RWxlbWVudHNCeVRhZ05hbWUgKFwidGJvZHlcIilbMF07XG5cdFx0XHRsZXQgcm93cyA9IHRib2R5LmdldEVsZW1lbnRzQnlUYWdOYW1lIChcInRyXCIpO1xuXG5cdFx0XHRmb3IgKGxldCBpSWR4ID0gMDsgaUlkeCA8IHJvd3MubGVuZ3RoOyBpSWR4KyspXG5cdFx0XHR7XG5cdFx0XHRcdGxldCByb3c6IEhUTUxUYWJsZVJvd0VsZW1lbnQgPSByb3dzW2lJZHhdO1xuXG5cdFx0XHRcdGlmIChyb3cuY2xhc3NMaXN0LmNvbnRhaW5zIChcInRhYmxlLXByaW1hcnlcIikgPT09IHRydWUpXG5cdFx0XHRcdFx0cm93LmNsYXNzTGlzdC5yZW1vdmUgKFwidGFibGUtcHJpbWFyeVwiKTtcblx0XHRcdH1cblxuXHRcdFx0aHRtbEVsZW1lbnQuY2xhc3NMaXN0LmFkZCAoXCJ0YWJsZS1wcmltYXJ5XCIpO1xuXHRcdH1cblxuXHRcdHRoaXMuc2VsZWN0ZWQgPSByb3dJbmRleDtcblxuXHRcdGlmICh0eXBlb2YgKHRoaXMuc2luZ2xlY2xpY2tlZGl0KSA9PT0gXCJzdHJpbmdcIilcblx0XHRcdHRoaXMuc2luZ2xlY2xpY2tlZGl0ID0gSG90U3RhcS5wYXJzZUJvb2xlYW4gKHRoaXMuc2luZ2xlY2xpY2tlZGl0KTtcblxuXHRcdGlmICh0aGlzLnNpbmdsZWNsaWNrZWRpdCA9PT0gdHJ1ZSlcblx0XHR7XG5cdFx0XHRpZiAodGhpcy5hdHRhY2hlZEVkaXQgIT0gbnVsbClcblx0XHRcdFx0YXdhaXQgdGhpcy5hdHRhY2hlZEVkaXQuZWRpdENsaWNrZWQgKCk7XG5cdFx0fVxuXG5cdFx0Lyp0aGlzLnNlbGVjdGVkUm93cyA9IFtdO1xuXHRcdGxldCB0Ym9keSA9IHRoaXMuaHRtbEVsZW1lbnRzWzFdLmdldEVsZW1lbnRzQnlUYWdOYW1lIChcInRib2R5XCIpWzBdO1xuXG5cdFx0Ly8gRmluZCBhbGwgdGhlIGNoZWNrYm94ZXMgaW4gdGJvZHkuXG5cdFx0bGV0IGNoZWNrYm94ZXMgPSB0Ym9keS5nZXRFbGVtZW50c0J5VGFnTmFtZSAoXCJpbnB1dFwiKTtcblxuXHRcdGZvciAobGV0IGlJZHggPSAwOyBpSWR4IDwgY2hlY2tib3hlcy5sZW5ndGg7IGlJZHgrKylcblx0XHR7XG5cdFx0XHRsZXQgY2hlY2tib3g6IEhUTUxJbnB1dEVsZW1lbnQgPSBjaGVja2JveGVzW2lJZHhdO1xuXG5cdFx0XHRpZiAoY2hlY2tib3guY2hlY2tlZCAhPSBudWxsKVxuXHRcdFx0e1xuXHRcdFx0XHRpZiAoY2hlY2tib3guY2hlY2tlZCA9PT0gdHJ1ZSlcblx0XHRcdFx0e1xuXHRcdFx0XHRcdC8vIEdldCB0aGUgZGF0YS1pbmRleCBhdHRyaWJ1dGUuXG5cdFx0XHRcdFx0bGV0IGRhdGFJbmRleFN0cjogc3RyaW5nID0gY2hlY2tib3gucGFyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50LmdldEF0dHJpYnV0ZSAoXCJkYXRhLWluZGV4XCIpO1xuXHRcdFx0XHRcdGxldCBkYXRhSW5kZXg6IG51bWJlciA9ICBwYXJzZUludCAoZGF0YUluZGV4U3RyKTtcblxuXHRcdFx0XHRcdHRoaXMuc2VsZWN0ZWRSb3dzLnB1c2ggKGRhdGFJbmRleCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9Ki9cblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIHNlbGVjdGVkIGRhdGEuXG5cdCAqL1xuXHRnZXRTZWxlY3RlZCAoKTogYW55W11cblx0e1xuXHRcdGxldCBpbmRleDogbnVtYmVyID0gdGhpcy5zZWxlY3RlZDtcblxuXHRcdGlmIChpbmRleCA8IDApXG5cdFx0XHRyZXR1cm4gKG51bGwpO1xuXG5cdFx0cmV0dXJuICh0aGlzLnJvd0VsZW1lbnRzW2luZGV4XS5maWVsZHMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgc2VsZWN0ZWQgZGF0YS5cblx0ICovXG5cdC8qZ2V0U2VsZWN0ZWRSb3dzICgpOiBhbnlbXVxuXHR7XG5cdFx0bGV0IHJvd3M6IGFueVtdID0gW107XG5cblx0XHRmb3IgKGxldCBpSWR4ID0gMDsgaUlkeCA8IHRoaXMuc2VsZWN0ZWRSb3dzLmxlbmd0aDsgaUlkeCsrKVxuXHRcdHtcblx0XHRcdGxldCBpbmRleDogbnVtYmVyID0gdGhpcy5zZWxlY3RlZFJvd3NbaUlkeF07XG5cdFx0XHRyb3dzLnB1c2ggKHRoaXMucm93RWxlbWVudHNbaW5kZXhdLmZpZWxkcyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIChyb3dzKTtcblx0fSovXG5cblx0LyoqXG5cdCAqIEdldCB0aGUgZGF0YSBmb3IgZWFjaCByb3cgdGhhdCBoYXMgYmVlbiBjaGVja2VkLlxuXHQgKi9cblx0Z2V0Q2hlY2tlZFJvd3MgKCk6IGFueVtdXG5cdHtcblx0XHRsZXQgcm93czogYW55W10gPSBbXTtcblx0XHRsZXQgdGJvZHkgPSB0aGlzLmh0bWxFbGVtZW50c1sxXS5nZXRFbGVtZW50c0J5VGFnTmFtZSAoXCJ0Ym9keVwiKVswXTtcblxuXHRcdC8vIEZpbmQgYWxsIHRoZSBjaGVja2JveGVzIGluIHRib2R5LlxuXHRcdGxldCBjaGVja2JveGVzID0gdGJvZHkuZ2V0RWxlbWVudHNCeVRhZ05hbWUgKFwiaW5wdXRcIik7XG5cblx0XHRmb3IgKGxldCBpSWR4ID0gMDsgaUlkeCA8IGNoZWNrYm94ZXMubGVuZ3RoOyBpSWR4KyspXG5cdFx0e1xuXHRcdFx0bGV0IGNoZWNrYm94OiBIVE1MSW5wdXRFbGVtZW50ID0gY2hlY2tib3hlc1tpSWR4XTtcblxuXHRcdFx0aWYgKGNoZWNrYm94LmNoZWNrZWQgIT0gbnVsbClcblx0XHRcdHtcblx0XHRcdFx0aWYgKGNoZWNrYm94LmNoZWNrZWQgPT09IHRydWUpXG5cdFx0XHRcdHtcblx0XHRcdFx0XHQvLyBHZXQgdGhlIGRhdGEtaW5kZXggYXR0cmlidXRlLlxuXHRcdFx0XHRcdGxldCBkYXRhSW5kZXhTdHI6IHN0cmluZyA9IGNoZWNrYm94LnBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudC5nZXRBdHRyaWJ1dGUgKFwiZGF0YS1pbmRleFwiKTtcblx0XHRcdFx0XHRsZXQgZGF0YUluZGV4OiBudW1iZXIgPSAgcGFyc2VJbnQgKGRhdGFJbmRleFN0cik7XG5cblx0XHRcdFx0XHRyb3dzLnB1c2ggKHRoaXMucm93RWxlbWVudHNbZGF0YUluZGV4XS5maWVsZHMpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIChyb3dzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgYSByb3cncyBkYXRhLlxuXHQgKi9cblx0Z2V0Um93IChpbmRleDogbnVtYmVyKTogYW55W11cblx0e1xuXHRcdHJldHVybiAodGhpcy5yb3dFbGVtZW50c1tpbmRleF0uZmllbGRzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGQgYSByb3cgdG8gdGhlIHRhYmxlLlxuXHQgKiBcblx0ICogQHBhcmFtIHtBcnJheX0gZmllbGRzIEEgbGlzdCBvZiB2YWx1ZXMgdG8gYXBwZW5kLlxuXHQgKi9cblx0YWRkUm93IChmaWVsZHM6IHsgW25hbWU6IHN0cmluZ106IGFueSB9W10pXG5cdHtcblx0XHRpZiAoZmllbGRzID09IG51bGwpXG5cdFx0XHRyZXR1cm47XG5cblx0XHRpZiAoZmllbGRzLmxlbmd0aCA9PSAwKVxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0bGV0IHRib2R5ID0gdGhpcy5odG1sRWxlbWVudHNbMV0uZ2V0RWxlbWVudHNCeVRhZ05hbWUgKFwidGJvZHlcIilbMF07XG5cdFx0bGV0IGluZGV4OiBudW1iZXIgPSB0aGlzLnJvd0VsZW1lbnRzLmxlbmd0aDtcblx0XHRsZXQgcm93U3RyID0gYDx0ciBvbmNsaWNrID0gXCJ0aGlzLnBhcmVudE5vZGUucGFyZW50Tm9kZS5wYXJlbnROb2RlLnBhcmVudE5vZGUuaG90Q29tcG9uZW50LnNlbGVjdFJvdyAodGhpcywgJHtpbmRleH0pO1wiPmA7XG5cblx0XHRpZiAodHlwZW9mICh0aGlzLmNoZWNrYm94KSA9PT0gXCJzdHJpbmdcIilcblx0XHRcdHRoaXMuY2hlY2tib3ggPSBIb3RTdGFxLnBhcnNlQm9vbGVhbiAodGhpcy5jaGVja2JveCk7XG5cblx0XHRpZiAodGhpcy5jaGVja2JveCA9PT0gdHJ1ZSlcblx0XHRcdHJvd1N0ciArPSBgPHRkPjxpbnB1dCB0eXBlID0gXCJjaGVja2JveFwiIC8+PC90ZD5gO1xuXHRcdGVsc2Vcblx0XHRcdHJvd1N0ciArPSBgPHRkPjwvdGQ+YDtcblxuXHRcdGZvciAobGV0IGlJZHggPSAwOyBpSWR4IDwgdGhpcy5oZWFkZXJzLmluZGljaWVzLmxlbmd0aDsgaUlkeCsrKVxuXHRcdHtcblx0XHRcdC8vIEB0cy1pZ25vcmUgLSBAZml4bWUgSSBtZXNzZWQgdGhpcyB1cCwgd2lsbCBmaXguXG5cdFx0XHRsZXQga2V5OiBzdHJpbmcgPSB0aGlzLmhlYWRlcnMuaW5kaWNpZXNbaUlkeF07XG5cblx0XHRcdGlmIChrZXkgPT0gbnVsbClcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdC8vIEB0cy1pZ25vcmVcblx0XHRcdGxldCB2YWx1ZSA9IGZpZWxkc1trZXldO1xuXHRcdFx0Ly8gRm9yIGVhY2ggLiBpbiBrZXkgd2UgbmVlZCB0byBnZXQgdGhlIG5leHQgb2JqZWN0LlxuXHRcdFx0bGV0IGtleVBhcnRzOiBzdHJpbmdbXSA9IGtleS5zcGxpdCAoXCIuXCIpO1xuXHRcdFx0XG5cdFx0XHRpZiAoa2V5UGFydHMubGVuZ3RoID4gMSlcblx0XHRcdHtcblx0XHRcdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdFx0XHRsZXQgdGVtcFZhbHVlOiBhbnkgPSBmaWVsZHNba2V5UGFydHNbMF1dO1xuXG5cdFx0XHRcdGZvciAobGV0IGlJZHggPSAxOyBpSWR4IDwga2V5UGFydHMubGVuZ3RoOyBpSWR4KyspXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRjb25zdCBwYXJ0OiBzdHJpbmcgPSBrZXlQYXJ0c1tpSWR4XTtcblxuXHRcdFx0XHRcdHRlbXBWYWx1ZSA9IHRlbXBWYWx1ZVtwYXJ0XTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHZhbHVlID0gdGVtcFZhbHVlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodGhpcy5oZWFkZXJzLmVsZW1lbnRzW2tleV0gIT0gbnVsbClcblx0XHRcdHtcblx0XHRcdFx0Ly8gQHRzLWlnbm9yZSAtIEBmaXhtZSBJIG1lc3NlZCB0aGlzIHVwLCB3aWxsIGZpeC5cblx0XHRcdFx0bGV0IGZpZWxkVHlwZTogc3RyaW5nID0gdGhpcy5nZXRGaWVsZFR5cGUgKGtleSk7XG5cblx0XHRcdFx0aWYgKGZpZWxkVHlwZSA9PSBudWxsKVxuXHRcdFx0XHRcdGZpZWxkVHlwZSA9IFwidGV4dFwiO1xuXG5cdFx0XHRcdGlmIChmaWVsZFR5cGUgIT09IFwicmVtb3ZlXCIpXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRjb25zdCBvcmdGaWVsZCA9IHRoaXMuaGVhZGVycy5maWVsZHNba2V5XTtcblx0XHRcdFx0XHRsZXQgZGVmYXVsdE91dHB1dDogYm9vbGVhbiA9IHRydWU7XG5cblx0XHRcdFx0XHRpZiAob3JnRmllbGQgIT0gbnVsbClcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRpZiAob3JnRmllbGQub25pbnB1dCAhPSBudWxsKVxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRpZiAodHlwZW9mIChvcmdGaWVsZC5vbmlucHV0KSA9PT0gXCJzdHJpbmdcIilcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmhlYWRlcnMuZmllbGRzW2tleV0ub25pbnB1dCA9ICg8KGl0ZW06IGFueSkgPT4gYW55Pm5ldyBGdW5jdGlvbiAob3JnRmllbGQub25pbnB1dCkpO1xuXG5cdFx0XHRcdFx0XHRcdHZhbHVlID0gb3JnRmllbGQub25pbnB1dCAodmFsdWUpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZiAob3JnRmllbGQub25vdXRwdXQgIT0gbnVsbClcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0aWYgKHR5cGVvZiAob3JnRmllbGQub25vdXRwdXQpID09PSBcInN0cmluZ1wiKVxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuaGVhZGVycy5maWVsZHNba2V5XS5vbm91dHB1dCA9ICg8KGluZGV4OiBudW1iZXIsIHZhbHVlOiBzdHJpbmcpID0+IHN0cmluZz5uZXcgRnVuY3Rpb24gKG9yZ0ZpZWxkLm9ub3V0cHV0KSk7XG5cblx0XHRcdFx0XHRcdFx0ZGVmYXVsdE91dHB1dCA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBuZXdPdXRwdXQ6IHN0cmluZyA9IG9yZ0ZpZWxkLm9ub3V0cHV0IChpbmRleCwgdmFsdWUpO1xuXHRcdFx0XHRcdFx0XHRyb3dTdHIgKz0gbmV3T3V0cHV0O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmIChkZWZhdWx0T3V0cHV0ID09PSB0cnVlKVxuXHRcdFx0XHRcdFx0cm93U3RyICs9IGA8dGQgZGF0YS1pbmRleCA9IFwiJHtpbmRleH1cIj4ke3ZhbHVlfTwvdGQ+YDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJvd1N0ciArPSBcIjwvdHI+XCI7XG5cblx0XHRsZXQgbmV3T2JqID0gSG90U3RhcS5hZGRIdG1sICh0Ym9keSwgcm93U3RyKTtcblxuXHRcdHRoaXMucm93RWxlbWVudHMucHVzaCAoe1xuXHRcdFx0XHRmaWVsZHM6IGZpZWxkcyxcblx0XHRcdFx0ZWxlbWVudDogKDxIVE1MRWxlbWVudD5uZXdPYmopXG5cdFx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDbGVhciB0aGUgbGlzdCBvZiByb3dzLlxuXHQgKi9cblx0YXN5bmMgY2xlYXJSb3dzICgpXG5cdHtcblx0XHR0aGlzLnJvd0VsZW1lbnRzID0gW107XG5cblx0XHRsZXQgdGJvZHkgPSB0aGlzLmh0bWxFbGVtZW50c1sxXS5nZXRFbGVtZW50c0J5VGFnTmFtZSAoXCJ0Ym9keVwiKVswXTtcblxuXHRcdHRib2R5LmlubmVySFRNTCA9IFwiXCI7XG5cdH1cblxuXHQvKipcblx0ICogUmVmcmVzaCB0aGUgbGlzdC5cblx0ICovXG5cdGFzeW5jIHJlZnJlc2hMaXN0IChsaXN0OiBhbnlbXSA9IG51bGwpXG5cdHtcblx0XHRpZiAodGhpcy5vbmxpc3QgIT0gbnVsbClcblx0XHR7XG5cdFx0XHRpZiAodHlwZW9mICh0aGlzLm9ubGlzdCkgPT09IFwic3RyaW5nXCIpXG5cdFx0XHRcdHRoaXMub25saXN0ID0gKDwoKSA9PiBQcm9taXNlPGFueVtdPj5uZXcgRnVuY3Rpb24gKHRoaXMub25saXN0KSk7XG5cblx0XHRcdGxpc3QgPSBhd2FpdCB0aGlzLm9ubGlzdCAoKTtcblx0XHR9XG5cdFx0ZWxzZVxuXHRcdHtcblx0XHRcdGxldCBsaXN0VXJsOiBzdHJpbmcgPSBcIlwiO1xuXG5cdFx0XHRpZiAodGhpcy5saXN0dXJsICE9PSBcIlwiKVxuXHRcdFx0XHRsaXN0VXJsID0gdGhpcy5saXN0dXJsO1xuXG5cdFx0XHRpZiAobGlzdFVybCAhPT0gXCJcIilcblx0XHRcdHtcblx0XHRcdFx0bGlzdCA9IGF3YWl0IEhvdC5qc29uUmVxdWVzdCAobGlzdFVybCwge1xuXHRcdFx0XHRcdFx0c2NoZW1hOiB0aGlzLnNjaGVtYVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRoaXMuY2xlYXJSb3dzICgpO1xuXG5cdFx0aWYgKGxpc3QgIT0gbnVsbClcblx0XHR7XG5cdFx0XHRmb3IgKGxldCBpSWR4ID0gMDsgaUlkeCA8IGxpc3QubGVuZ3RoOyBpSWR4KyspXG5cdFx0XHR7XG5cdFx0XHRcdGxldCBmaWVsZHMgPSBsaXN0W2lJZHhdO1xuXG5cdFx0XHRcdHRoaXMuYWRkUm93IChmaWVsZHMpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIGxpc3Qgb2YgZGF0YSBmcm9tIHRoZSBzZXJ2ZXIuXG5cdCAqL1xuXHRvblBvc3RQbGFjZSAocGFyZW50SHRtbEVsZW1lbnQ6IEhUTUxFbGVtZW50LCBodG1sRWxlbWVudDogSFRNTEVsZW1lbnQpOiBIVE1MRWxlbWVudFxuXHR7XG5cdFx0c2V0VGltZW91dCAoYXN5bmMgKCkgPT5cblx0XHRcdHtcblx0XHRcdFx0YXdhaXQgdGhpcy5yZWZyZXNoTGlzdCAoKTtcblx0XHRcdH0sIDUwKTtcblxuXHRcdHJldHVybiAobnVsbCk7XG5cdH1cblxuXHRvdXRwdXQgKCk6IHN0cmluZyB8IEhvdENvbXBvbmVudE91dHB1dFtdXG5cdHtcblx0XHRsZXQgZW1wdHlDaGVja2JveEhlYWRlcjogc3RyaW5nID0gXCI8dGg+PC90aD5cIjtcblxuXHRcdHJldHVybiAoYFxuXHRcdDxkaXYgaWQgPSBcIiR7dGhpcy5odG1sRWxlbWVudHNbMF0uaWR9XCI+XG5cdFx0XHQ8aDI+JHt0aGlzLnRpdGxlfTwvaDI+XG5cdFx0XHQ8ZGl2IGNsYXNzPVwidGFibGUtcmVzcG9uc2l2ZVwiPlxuXHRcdFx0PHRhYmxlIGlkID0gXCIke3RoaXMuaHRtbEVsZW1lbnRzWzBdLmlkfVRhYmxlXCIgY2xhc3M9XCJ0YWJsZSB0YWJsZS1zdHJpcGVkIHRhYmxlLXNtXCI+XG5cdFx0XHRcdDx0aGVhZD5cblx0XHRcdFx0XHQ8dHIgaG90LXBsYWNlLWhlcmUgPSBcImhlYWRlclwiPlxuXHRcdFx0XHRcdFx0JHtlbXB0eUNoZWNrYm94SGVhZGVyfVxuXHRcdFx0XHRcdDwvdHI+XG5cdFx0XHRcdDwvdGhlYWQ+XG5cdFx0XHRcdDx0Ym9keSBob3QtcGxhY2UtaGVyZSA9IFwicmVzdWx0c1wiPlxuXHRcdFx0XHQ8L3Rib2R5PlxuXHRcdFx0PC90YWJsZT5cblx0XHRcdDxob3QtcGxhY2UtaGVyZSBuYW1lID0gXCJhZnRlclRhYmxlXCI+PC9ob3QtcGxhY2UtaGVyZT5cblx0XHRcdDwvZGl2PlxuXHRcdDwvZGl2PmApO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBIb3RTdGFxLCBIb3QsIEhvdEFQSSwgSG90Q29tcG9uZW50LCBIb3RDb21wb25lbnRPdXRwdXQgfSBmcm9tIFwiaG90c3RhcVwiO1xuXG5leHBvcnQgY2xhc3MgQWRtaW5UZXh0IGV4dGVuZHMgSG90Q29tcG9uZW50XG57XG5cdC8qKlxuXHQgKiBJZiBzZXQgdG8gMSwgdGhpcyB3aWxsIG5vdCBvdXRwdXQgdGhlIGZpZWxkLlxuXHQgKi9cblx0bm9fb3V0cHV0OiBzdHJpbmc7XG5cdC8qKlxuXHQgKiBUaGUgY2xhc3NlcyB0byBzZXQgZm9yIHRoZSBpbnB1dC5cblx0ICogQGRlZmF1bHQgXCJmb3JtLWNvbnRyb2xcIlxuXHQgKi9cblx0Y3NzX2NsYXNzOiBzdHJpbmc7XG5cblx0Y29uc3RydWN0b3IgKGNvcHk6IEhvdENvbXBvbmVudCB8IEhvdFN0YXEsIGFwaTogSG90QVBJKVxuXHR7XG5cdFx0c3VwZXIgKGNvcHksIGFwaSk7XG5cblx0XHR0aGlzLnRhZyA9IFwiYWRtaW4tdGV4dFwiO1xuXHRcdHRoaXMubm9fb3V0cHV0ID0gXCIwXCI7XG5cdFx0dGhpcy5jc3NfY2xhc3MgPSBcImZvcm0tY29udHJvbFwiXG5cdH1cblxuXHQvKipcblx0ICogQ29ycmVjdHMgdGhlIHBsYWNlbWVudCBvZiB0aGUgdGV4dCBlbGVtZW50cyBmb3IgbW9kYWxzLlxuXHQgKi9cblx0b25Qb3N0UGxhY2UgKHBhcmVudEh0bWxFbGVtZW50OiBIVE1MRWxlbWVudCwgaHRtbEVsZW1lbnQ6IEhUTUxFbGVtZW50KTogSFRNTEVsZW1lbnRcblx0e1xuXHRcdGxldCBwbGFjZUhlcmVBcnJheSA9IHBhcmVudEh0bWxFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwgKGBob3QtcGxhY2UtaGVyZVt0eXBlPVwibW9kYWxcIl1gKTtcblxuXHRcdGlmIChwbGFjZUhlcmVBcnJheS5sZW5ndGggPiAwKVxuXHRcdHtcblx0XHRcdGxldCBwbGFjZUhlcmUgPSBwbGFjZUhlcmVBcnJheVswXTtcblx0XHRcdHBhcmVudEh0bWxFbGVtZW50LnJlbW92ZUNoaWxkIChodG1sRWxlbWVudCk7XG5cdFx0XHRwbGFjZUhlcmUuYXBwZW5kQ2hpbGQgKGh0bWxFbGVtZW50KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gKG51bGwpO1xuXHR9XG5cblx0b3V0cHV0ICgpOiBzdHJpbmcgfCBIb3RDb21wb25lbnRPdXRwdXRbXVxuXHR7XG5cdFx0bGV0IHZhbHVlOiBzdHJpbmcgPSBcIlwiO1xuXG5cdFx0aWYgKHRoaXMudmFsdWUgIT0gbnVsbClcblx0XHRcdHZhbHVlID0gdGhpcy52YWx1ZTtcblxuXHRcdGlmICh0aGlzLm5vX291dHB1dCA9PT0gXCIxXCIpXG5cdFx0XHRyZXR1cm4gKGA8ZGl2PjxpbnB1dCBjbGFzcz1cIiR7dGhpcy5jc3NfY2xhc3N9XCIgdHlwZSA9IFwiaGlkZGVuXCIgdmFsdWUgPSBcIiR7dmFsdWV9XCIgLz48L2Rpdj5gKTtcblxuXHRcdGNvbnN0IGZpZWxkID0gdGhpcy5odG1sRWxlbWVudHNbMF0uZ2V0QXR0cmlidXRlIChcImhvdC1maWVsZFwiKTtcblx0XHRsZXQgZmllbGRfdHlwZSA9IHRoaXMuaHRtbEVsZW1lbnRzWzBdLmdldEF0dHJpYnV0ZSAoXCJob3QtZmllbGQtdHlwZVwiKTtcblxuXHRcdGlmIChmaWVsZF90eXBlID09IG51bGwpXG5cdFx0XHRmaWVsZF90eXBlID0gXCJ0ZXh0XCI7XG5cblx0XHRyZXR1cm4gKGA8ZGl2PlxuXHRcdFx0PGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiPiR7dGhpcy5pbm5lcn08L2xhYmVsPlxuXHRcdFx0PGlucHV0IGNsYXNzPVwiJHt0aGlzLmNzc19jbGFzc31cIiB0eXBlID0gXCJ0ZXh0XCIgaG90LWZpZWxkID0gXCIke2ZpZWxkfVwiIGhvdC1maWVsZC10eXBlID0gXCIke2ZpZWxkX3R5cGV9XCIgdmFsdWUgPSBcIiR7dmFsdWV9XCIgLz5cblx0XHQ8L2Rpdj5gKTtcblx0fVxufVxuIiwibW9kdWxlLmV4cG9ydHMgPSBIb3RTdGFxV2ViOyIsIm1vZHVsZS5leHBvcnRzID0gYm9vdHN0cmFwOyIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCJpbXBvcnQgeyBBZG1pbkJ1dHRvbiB9IGZyb20gXCIuL2NvbXBvbmVudHMvYWRtaW4tYnV0dG9uXCI7XG5pbXBvcnQgeyBBZG1pbkRyb3Bkb3duIH0gZnJvbSBcIi4vY29tcG9uZW50cy9hZG1pbi1kcm9wZG93blwiO1xuaW1wb3J0IHsgQWRtaW5EYXNoYm9hcmQgfSBmcm9tIFwiLi9jb21wb25lbnRzL2FkbWluLWRhc2hib2FyZFwiO1xuaW1wb3J0IHsgQWRtaW5FZGl0IH0gZnJvbSBcIi4vY29tcG9uZW50cy9hZG1pbi1lZGl0XCI7XG5pbXBvcnQgeyBBZG1pblRhYmxlIH0gZnJvbSBcIi4vY29tcG9uZW50cy9hZG1pbi10YWJsZVwiO1xuaW1wb3J0IHsgQWRtaW5UYWJsZUZpZWxkIH0gZnJvbSBcIi4vY29tcG9uZW50cy9hZG1pbi10YWJsZS1maWVsZFwiO1xuaW1wb3J0IHsgQWRtaW5UYWJsZVJvdyB9IGZyb20gXCIuL2NvbXBvbmVudHMvYWRtaW4tdGFibGUtcm93XCI7XG5pbXBvcnQgeyBBZG1pblRleHQgfSBmcm9tIFwiLi9jb21wb25lbnRzL2FkbWluLXRleHRcIjtcblxuZXhwb3J0IHtcblx0XHRBZG1pbkJ1dHRvbixcblx0XHRBZG1pbkRyb3Bkb3duLFxuXHRcdEFkbWluRGFzaGJvYXJkLFxuXHRcdEFkbWluRWRpdCxcblx0XHRBZG1pblRhYmxlLFxuXHRcdEFkbWluVGFibGVGaWVsZCxcblx0XHRBZG1pblRhYmxlUm93LFxuXHRcdEFkbWluVGV4dFxuXHR9OyJdLCJuYW1lcyI6WyJBZG1pbkJ1dHRvbiIsIkhvdENvbXBvbmVudCIsImNvbnN0cnVjdG9yIiwiY29weSIsImFwaSIsInN1cGVyIiwidGhpcyIsInRhZyIsImNzc19jbGFzcyIsIm9uY2xpY2siLCJidXR0b25DbGlja2VkIiwib25Qb3N0UGxhY2UiLCJwYXJlbnRIdG1sRWxlbWVudCIsImh0bWxFbGVtZW50IiwicGxhY2VIZXJlQXJyYXkiLCJxdWVyeVNlbGVjdG9yQWxsIiwibGVuZ3RoIiwicGxhY2VIZXJlIiwicmVtb3ZlQ2hpbGQiLCJhcHBlbmRDaGlsZCIsIkZ1bmN0aW9uIiwiYWRkRXZlbnRMaXN0ZW5lciIsIm91dHB1dCIsImh0bWxFbGVtZW50cyIsImlkIiwiaW5uZXIiLCJBZG1pbkRhc2hib2FyZCIsInRpdGxlIiwiYmFzZSIsIkhvdCIsIkRhdGEiLCJBZG1pblBhbmVsIiwiYmFzZVVybCIsImFkZFVybCIsImVkaXRVcmwiLCJyZW1vdmVVcmwiLCJsaXN0VXJsIiwiQWRtaW5Ecm9wZG93biIsInBsYWNlaG9sZGVyIiwib25zZWFyY2giLCJvbnNlbGVjdCIsInF1ZXJ5U2VsZWN0b3IiLCJldmVudCIsInNlYXJjaFRleHQiLCJjdXJyZW50VGFyZ2V0IiwidmFsdWUiLCJyZXN1bHRzIiwic2VhcmNoUmVzdWx0c0RpdiIsIiQiLCJmaW5kIiwiZW1wdHkiLCJpSWR4IiwicmVzdWx0IiwidXJsIiwidGV4dCIsImFwcGVuZCIsInNlbGVjdGVkIiwiaW5kZXgiLCJnZXRBdHRyaWJ1dGUiLCJpbm5lckhUTUwiLCJBZG1pbkVkaXQiLCJvbkFkZENsaWNrZWQiLCJvbkVkaXRDbGlja2VkIiwib25SZW1vdmVDbGlja2VkIiwiYnV0dG9uX3RpdGxlIiwiYXR0YWNoZWRfbGlzdCIsInNjaGVtYSIsIm1vZGFsSWQiLCJhZGRfdGV4dCIsImFkZF9wbGFjZV9oZXJlIiwiZWRpdF90ZXh0IiwiZWRpdF9wbGFjZV9oZXJlIiwicmVtb3ZlX3RleHQiLCJyZW1vdmVfcGxhY2VfaGVyZSIsIm1vZGFsIiwibW9kYWxUeXBlIiwiY2xvc2VPblNhdmUiLCJzZWxlY3RlZEZpZWxkcyIsIm9uc2F2ZSIsIm9uZWRpdCIsIm9uZGVsZXRlIiwicHJvY2Vzc0hvdEZpZWxkcyIsIm9uRmllbGQiLCJlbG1zIiwiZWxtIiwiZmllbGQiLCJhdHRyIiwiZmllbGRUeXBlIiwiZmllbGRJbnB1dCIsIm5hbWUiLCJ0eXBlIiwiaW5wdXQiLCJhZGRDbGlja2VkIiwidmFsIiwib25hZGQiLCJNb2RhbCIsImdldEluc3RhbmNlIiwic2hvdyIsImVkaXRDbGlja2VkIiwiaG90Q29tcG9uZW50IiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsImF0dGFjaGVkRWRpdCIsInNlbGVjdGVkRmllbGQiLCJnZXRTZWxlY3RlZCIsImZ1bmMiLCJjYWxsIiwicmVtb3ZlQ2xpY2tlZCIsIndoZXJlRmllbGRzIiwiY2hlY2tlZFJvd3MiLCJnZXRDaGVja2VkUm93cyIsImkiLCJjaGVja2VkUm93IiwicHVzaCIsImNvbmZpcm0iLCJ3aGVyZUZpZWxkIiwia2V5IiwiZ2V0RmllbGRUeXBlIiwianNvblJlcXVlc3QiLCJyZWZyZXNoTGlzdCIsIm9uU2F2ZSIsInZhbHVlcyIsImZpZWxkcyIsImFsZXJ0IiwidGFibGUiLCJoaWRlIiwic2V0VGltZW91dCIsIkVycm9yIiwib3V0cHV0T2JqIiwiaHRtbCIsImRvY3VtZW50U2VsZWN0b3IiLCJBZG1pblRhYmxlRmllbGQiLCJmaWVsZF90eXBlIiwibm9fb3V0cHV0Iiwib25pbnB1dCIsIm9ub3V0cHV0IiwicGFyZW50Tm9kZSIsImFkZEhlYWRlckRhdGFPbmx5IiwicGxhY2VIZXJlUGFyZW50IiwiQWRtaW5UYWJsZVJvdyIsInJvd0VsZW1lbnRzIiwiZWxlbWVudCIsInJvd0h0bWwiLCJmaWVsZE9iaiIsIkFkbWluVGFibGUiLCJoZWFkZXJzIiwiZWxlbWVudHMiLCJpbmRpY2llcyIsIm9ubGlzdCIsImxpc3R1cmwiLCJjaGVja2JveCIsInNpbmdsZWNsaWNrZWRpdCIsIm9uc2VsZWN0ZWRyb3ciLCJhZGRIZWFkZXIiLCJ0YWJsZUZpZWxkRWxlbWVudCIsImhlYWRlciIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwidGFibGVGaWVsZCIsImZpZWxkTmFtZSIsInNlbGVjdFJvdyIsInJvd0luZGV4IiwiaXRlbSIsInJvd3MiLCJyb3ciLCJjbGFzc0xpc3QiLCJjb250YWlucyIsInJlbW92ZSIsImFkZCIsIkhvdFN0YXEiLCJwYXJzZUJvb2xlYW4iLCJjaGVja2JveGVzIiwiY2hlY2tlZCIsImRhdGFJbmRleFN0ciIsInBhcmVudEVsZW1lbnQiLCJkYXRhSW5kZXgiLCJwYXJzZUludCIsImdldFJvdyIsImFkZFJvdyIsInRib2R5Iiwicm93U3RyIiwia2V5UGFydHMiLCJzcGxpdCIsInRlbXBWYWx1ZSIsIm9yZ0ZpZWxkIiwiZGVmYXVsdE91dHB1dCIsIm5ld09iaiIsImFkZEh0bWwiLCJjbGVhclJvd3MiLCJsaXN0IiwiQWRtaW5UZXh0IiwibW9kdWxlIiwiZXhwb3J0cyIsIkhvdFN0YXFXZWIiLCJib290c3RyYXAiLCJfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18iLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJjYWNoZWRNb2R1bGUiLCJ1bmRlZmluZWQiLCJfX3dlYnBhY2tfbW9kdWxlc19fIl0sInNvdXJjZVJvb3QiOiIifQ==
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
if (typeof (AdminPanelWeb) === "undefined")
|
|
2
|
-
AdminPanelWeb = {};
|
|
2
|
+
var AdminPanelWeb = {};
|
|
3
3
|
|
|
4
4
|
var HotAPIGlobal = undefined;
|
|
5
5
|
|
|
@@ -12,60 +12,11 @@ if (typeof (window) !== "undefined")
|
|
|
12
12
|
HotAPIGlobal = window.HotAPI;
|
|
13
13
|
}
|
|
14
14
|
|
|
15
|
-
/**
|
|
16
|
-
* Get the authorization header string.
|
|
17
|
-
*/
|
|
18
|
-
function HotStaqGetAuthorizationHeaderString ()
|
|
19
|
-
{
|
|
20
|
-
const auth = null;
|
|
21
|
-
|
|
22
|
-
if (this.authorization != null)
|
|
23
|
-
{
|
|
24
|
-
if (this.authorization.toAuthorizationHeaderString != null)
|
|
25
|
-
auth = this.authorization.toAuthorizationHeaderString ();
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
if (auth == null)
|
|
29
|
-
{
|
|
30
|
-
if (Hot != null)
|
|
31
|
-
{
|
|
32
|
-
if (Hot.API != null)
|
|
33
|
-
{
|
|
34
|
-
if (Hot.API.authCredentials != null)
|
|
35
|
-
{
|
|
36
|
-
if (Hot.API.authCredentials.toAuthorizationHeaderString != null)
|
|
37
|
-
auth = Hot.API.authCredentials.toAuthorizationHeaderString ();
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
return (auth);
|
|
44
|
-
}
|
|
45
|
-
|
|
46
15
|
/**
|
|
47
16
|
* Process a JSON object, and get it ready to make a request.
|
|
48
17
|
*/
|
|
49
18
|
function HotStaqProcessJSONObject (jsonObj)
|
|
50
19
|
{
|
|
51
|
-
if (jsonObj != null)
|
|
52
|
-
{
|
|
53
|
-
if (Hot != null)
|
|
54
|
-
{
|
|
55
|
-
if (Hot.API != null)
|
|
56
|
-
{
|
|
57
|
-
if (Hot.API.authCredentials != null)
|
|
58
|
-
{
|
|
59
|
-
for (let key in Hot.API.authCredentials)
|
|
60
|
-
{
|
|
61
|
-
if (jsonObj[key] == null)
|
|
62
|
-
jsonObj[key] = Hot.API.authCredentials[key];
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
|
|
69
20
|
return (jsonObj);
|
|
70
21
|
}
|
|
71
22
|
|
|
@@ -80,7 +31,7 @@ function HotStaqPostJSONObject (methodType, url, jsonObj, auth)
|
|
|
80
31
|
};
|
|
81
32
|
|
|
82
33
|
if (auth != null)
|
|
83
|
-
headers["Authorization"] = auth;
|
|
34
|
+
headers["Authorization"] = "Bearer " + auth;
|
|
84
35
|
|
|
85
36
|
let promise = fetch (url, {
|
|
86
37
|
"method": methodType,
|
|
@@ -98,6 +49,8 @@ class data
|
|
|
98
49
|
{
|
|
99
50
|
constructor (baseUrl, connection, db)
|
|
100
51
|
{
|
|
52
|
+
|
|
53
|
+
|
|
101
54
|
if (baseUrl == null)
|
|
102
55
|
baseUrl = "http://127.0.0.1:3243";
|
|
103
56
|
|
|
@@ -116,22 +69,46 @@ class data
|
|
|
116
69
|
*/
|
|
117
70
|
this.connection = connection;
|
|
118
71
|
/**
|
|
119
|
-
* The
|
|
72
|
+
* The bearer token used to connect to the server.
|
|
120
73
|
*/
|
|
121
|
-
this.
|
|
74
|
+
this.bearerToken = null;
|
|
122
75
|
/**
|
|
123
76
|
* The database connection, if any.
|
|
124
77
|
*/
|
|
125
78
|
this.db = db;
|
|
79
|
+
}
|
|
126
80
|
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
81
|
+
/**
|
|
82
|
+
* Make a call to the API. THIS CANNOT upload files yet.
|
|
83
|
+
*/
|
|
84
|
+
makeCall (route, data, httpMethod = "post", files = {}, bearer = "")
|
|
85
|
+
{
|
|
86
|
+
var promise = new Promise ((resolve, reject) =>
|
|
130
87
|
{
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
88
|
+
let url = this.baseUrl;
|
|
89
|
+
|
|
90
|
+
if (url[(url.length - 1)] === "/")
|
|
91
|
+
url = url.substr (0, (url.length - 1));
|
|
92
|
+
|
|
93
|
+
if (route[0] !== "/")
|
|
94
|
+
url += "/";
|
|
95
|
+
|
|
96
|
+
url += route;
|
|
97
|
+
|
|
98
|
+
if (bearer === "")
|
|
99
|
+
{
|
|
100
|
+
if (Hot.BearerToken != null)
|
|
101
|
+
bearer = Hot.BearerToken;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
HotStaqPostJSONObject (httpMethod, url, data, bearer).then (
|
|
105
|
+
function (response)
|
|
106
|
+
{
|
|
107
|
+
var result = response.json ();
|
|
108
|
+
resolve (result);
|
|
109
|
+
});
|
|
110
|
+
});
|
|
111
|
+
return (promise);
|
|
135
112
|
}
|
|
136
113
|
|
|
137
114
|
/**
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hotstaq/admin-panel",
|
|
3
3
|
"description": "",
|
|
4
|
-
"version": "0.3.
|
|
4
|
+
"version": "0.3.5",
|
|
5
5
|
"main": "build/index.js",
|
|
6
6
|
"scripts": {
|
|
7
7
|
"start": "hotstaq --hotsite ./HotSite.json --env-file ./.env run --server-type web-api",
|
|
@@ -44,6 +44,6 @@
|
|
|
44
44
|
"webpack-cli": "^5.0.1"
|
|
45
45
|
},
|
|
46
46
|
"peerDependencies": {
|
|
47
|
-
"hotstaq": "^0.8.
|
|
47
|
+
"hotstaq": "^0.8.93"
|
|
48
48
|
}
|
|
49
49
|
}
|
|
@@ -152,7 +152,7 @@ export class AdminEdit extends HotComponent
|
|
|
152
152
|
/**
|
|
153
153
|
* Executes when the add button is clicked.
|
|
154
154
|
*/
|
|
155
|
-
async addClicked (): Promise<void>
|
|
155
|
+
async addClicked (selectedFields: any[] = []): Promise<void>
|
|
156
156
|
{
|
|
157
157
|
if (this.onAddClicked != null)
|
|
158
158
|
{
|
|
@@ -170,7 +170,7 @@ export class AdminEdit extends HotComponent
|
|
|
170
170
|
$(htmlElement).val ("");
|
|
171
171
|
});
|
|
172
172
|
|
|
173
|
-
this.selectedFields =
|
|
173
|
+
this.selectedFields = selectedFields;
|
|
174
174
|
|
|
175
175
|
if (this.onadd != null)
|
|
176
176
|
{
|
|
@@ -198,7 +198,7 @@ export class AdminEdit extends HotComponent
|
|
|
198
198
|
/**
|
|
199
199
|
* Executes when the edit button is clicked.
|
|
200
200
|
*/
|
|
201
|
-
async editClicked (): Promise<void>
|
|
201
|
+
async editClicked (selectedFields: any[] = []): Promise<void>
|
|
202
202
|
{
|
|
203
203
|
if (this.onEditClicked != null)
|
|
204
204
|
{
|
|
@@ -210,7 +210,7 @@ export class AdminEdit extends HotComponent
|
|
|
210
210
|
|
|
211
211
|
this.modalType = "edit";
|
|
212
212
|
|
|
213
|
-
this.selectedFields =
|
|
213
|
+
this.selectedFields = selectedFields;
|
|
214
214
|
|
|
215
215
|
if (this.attached_list !== "")
|
|
216
216
|
{
|
|
@@ -218,6 +218,7 @@ export class AdminEdit extends HotComponent
|
|
|
218
218
|
|
|
219
219
|
// @ts-ignore
|
|
220
220
|
let hotComponent: AdminTable = attachedList.hotComponent;
|
|
221
|
+
hotComponent.attachedEdit = this;
|
|
221
222
|
let selectedField = hotComponent.getSelected ();
|
|
222
223
|
|
|
223
224
|
if (selectedField != null)
|
|
@@ -291,6 +292,7 @@ export class AdminEdit extends HotComponent
|
|
|
291
292
|
let attachedList = document.getElementById (this.attached_list);
|
|
292
293
|
// @ts-ignore
|
|
293
294
|
hotComponent = attachedList.hotComponent;
|
|
295
|
+
hotComponent.attachedEdit = this;
|
|
294
296
|
let checkedRows = hotComponent.getCheckedRows ();
|
|
295
297
|
|
|
296
298
|
if (checkedRows.length > 0)
|
|
@@ -476,6 +478,8 @@ export class AdminEdit extends HotComponent
|
|
|
476
478
|
// @ts-ignore
|
|
477
479
|
let table: AdminTable = attachedList.hotComponent;
|
|
478
480
|
|
|
481
|
+
table.attachedEdit = this;
|
|
482
|
+
|
|
479
483
|
await table.refreshList ();
|
|
480
484
|
}
|
|
481
485
|
|
|
@@ -496,6 +500,20 @@ export class AdminEdit extends HotComponent
|
|
|
496
500
|
"focus": true
|
|
497
501
|
});
|
|
498
502
|
|
|
503
|
+
/// @todo Fix this temporary hack. I dont like it.
|
|
504
|
+
setTimeout (() =>
|
|
505
|
+
{
|
|
506
|
+
if (this.attached_list !== "")
|
|
507
|
+
{
|
|
508
|
+
let attachedList = document.getElementById (this.attached_list);
|
|
509
|
+
// @ts-ignore
|
|
510
|
+
let table: AdminTable = attachedList.hotComponent;
|
|
511
|
+
|
|
512
|
+
if (table != null)
|
|
513
|
+
table.attachedEdit = this;
|
|
514
|
+
}
|
|
515
|
+
}, 50);
|
|
516
|
+
|
|
499
517
|
return (null);
|
|
500
518
|
}
|
|
501
519
|
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { HotStaq, Hot, HotAPI, HotComponent, HotComponentOutput } from "hotstaq";
|
|
2
2
|
import { AdminTableField } from "./admin-table-field";
|
|
3
|
+
import { AdminEdit } from "./admin-edit";
|
|
3
4
|
|
|
4
5
|
export class AdminTable extends HotComponent
|
|
5
6
|
{
|
|
@@ -67,11 +68,19 @@ export class AdminTable extends HotComponent
|
|
|
67
68
|
* @default true
|
|
68
69
|
*/
|
|
69
70
|
checkbox: boolean;
|
|
71
|
+
/**
|
|
72
|
+
* If set to true, a single click will allow the user to edit the row.
|
|
73
|
+
*/
|
|
74
|
+
singleclickedit: boolean;
|
|
70
75
|
/**
|
|
71
76
|
* Executes this event when a row is selected. The potential item to be selected
|
|
72
77
|
* will also be passed. If this returns false, the row will not be selected.
|
|
73
78
|
*/
|
|
74
79
|
onselectedrow: (rowIndex: number, item: any[]) => Promise<boolean>;
|
|
80
|
+
/**
|
|
81
|
+
* The attached edit form, if any.
|
|
82
|
+
*/
|
|
83
|
+
attachedEdit: AdminEdit;
|
|
75
84
|
|
|
76
85
|
constructor (copy: HotComponent | HotStaq, api: HotAPI)
|
|
77
86
|
{
|
|
@@ -90,7 +99,9 @@ export class AdminTable extends HotComponent
|
|
|
90
99
|
this.onlist = null;
|
|
91
100
|
this.listurl = "";
|
|
92
101
|
this.checkbox = true;
|
|
102
|
+
this.singleclickedit = false;
|
|
93
103
|
this.onselectedrow = null;
|
|
104
|
+
this.attachedEdit = null;
|
|
94
105
|
this.selected = -1;
|
|
95
106
|
}
|
|
96
107
|
|
|
@@ -178,6 +189,15 @@ export class AdminTable extends HotComponent
|
|
|
178
189
|
|
|
179
190
|
this.selected = rowIndex;
|
|
180
191
|
|
|
192
|
+
if (typeof (this.singleclickedit) === "string")
|
|
193
|
+
this.singleclickedit = HotStaq.parseBoolean (this.singleclickedit);
|
|
194
|
+
|
|
195
|
+
if (this.singleclickedit === true)
|
|
196
|
+
{
|
|
197
|
+
if (this.attachedEdit != null)
|
|
198
|
+
await this.attachedEdit.editClicked ();
|
|
199
|
+
}
|
|
200
|
+
|
|
181
201
|
/*this.selectedRows = [];
|
|
182
202
|
let tbody = this.htmlElements[1].getElementsByTagName ("tbody")[0];
|
|
183
203
|
|