@wizishop/wizi-block 4.2.29-beta → 4.2.32-beta
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/bundles/wizishop-wizi-block.umd.js +27 -19
- package/bundles/wizishop-wizi-block.umd.js.map +1 -1
- package/bundles/wizishop-wizi-block.umd.min.js +1 -1
- package/bundles/wizishop-wizi-block.umd.min.js.map +1 -1
- package/esm2015/lib/shared/components/editorjs/tools/inline/tool-type/inline-style-tool.component.js +13 -6
- package/esm2015/lib/shared/components/editorjs/tools/paragraph/tool-type/text-edition.component.js +13 -11
- package/fesm2015/wizishop-wizi-block.js +24 -14
- package/fesm2015/wizishop-wizi-block.js.map +1 -1
- package/package.json +5 -1
package/esm2015/lib/shared/components/editorjs/tools/inline/tool-type/inline-style-tool.component.js
CHANGED
|
@@ -36,6 +36,8 @@ export class InlineStyleTool extends EditorJSTool {
|
|
|
36
36
|
: anchorNode.parentElement;
|
|
37
37
|
const sameSelection = container && container.innerText === selection.toString();
|
|
38
38
|
yield this.saveInlineSelection(container, true);
|
|
39
|
+
console.log('here');
|
|
40
|
+
console.log(this.hasStyle(container));
|
|
39
41
|
try {
|
|
40
42
|
// Link delete exception
|
|
41
43
|
if (this.linkDeletion) {
|
|
@@ -46,9 +48,11 @@ export class InlineStyleTool extends EditorJSTool {
|
|
|
46
48
|
!this.isContainer(this.textContainers, container) &&
|
|
47
49
|
this.hasStyle(container) &&
|
|
48
50
|
selection.toString() === this.hasStyle(container).innerText) {
|
|
51
|
+
console.log('update');
|
|
49
52
|
yield this.updateSelection(selection, this.hasStyle(container), action, this.textContainers);
|
|
50
53
|
}
|
|
51
54
|
else {
|
|
55
|
+
console.log('replace');
|
|
52
56
|
yield this.replaceSelection(this.getMostDescendantChild(container), action, selection, this.textContainers);
|
|
53
57
|
}
|
|
54
58
|
}
|
|
@@ -112,6 +116,7 @@ export class InlineStyleTool extends EditorJSTool {
|
|
|
112
116
|
parentContainer === offsetParentContainer &&
|
|
113
117
|
((parentContainer.children.length > 0 && parentContainer.innerText !== parentContainer.children[0].textContent) ||
|
|
114
118
|
parentContainer.innerText !== selection.toString())) {
|
|
119
|
+
console.log('if');
|
|
115
120
|
const range = this.getRangeObject(selection);
|
|
116
121
|
const currentFragment = range.extractContents();
|
|
117
122
|
const currentElement = document.createElement('span');
|
|
@@ -134,6 +139,8 @@ export class InlineStyleTool extends EditorJSTool {
|
|
|
134
139
|
let currentParentElement = container;
|
|
135
140
|
if (parentContainer.contains(currentParentElement)) {
|
|
136
141
|
while (currentParentElement !== parentContainer) {
|
|
142
|
+
console.warn('currentParentElement');
|
|
143
|
+
console.log(currentParentElement);
|
|
137
144
|
let tmpElement = document.createElement(currentParentElement.tagName);
|
|
138
145
|
tmpElement = this.setInlineStyle(currentParentElement, tmpElement);
|
|
139
146
|
tmpElement.appendChild(currentElementToAppend);
|
|
@@ -153,9 +160,13 @@ export class InlineStyleTool extends EditorJSTool {
|
|
|
153
160
|
newElement.appendChild(preFragment);
|
|
154
161
|
parentContainer.parentElement.insertBefore(currentElementToAppend, parentContainer);
|
|
155
162
|
parentContainer.parentElement.insertBefore(newElement, currentElementToAppend);
|
|
163
|
+
if (!parentContainer.textContent || parentContainer.textContent.length === 0) {
|
|
164
|
+
parentContainer.parentElement.removeChild(parentContainer);
|
|
165
|
+
}
|
|
156
166
|
selection.selectAllChildren(currentElementToAppend);
|
|
157
167
|
}
|
|
158
168
|
else {
|
|
169
|
+
console.log('else');
|
|
159
170
|
const range = this.getRangeObject(selection);
|
|
160
171
|
const fragment = range.extractContents();
|
|
161
172
|
let fragmentElement = document.createElement('div');
|
|
@@ -333,7 +344,7 @@ export class InlineStyleTool extends EditorJSTool {
|
|
|
333
344
|
});
|
|
334
345
|
}
|
|
335
346
|
cleanupContainer(selection, container, firstTimeCall) {
|
|
336
|
-
var _a
|
|
347
|
+
var _a;
|
|
337
348
|
return __awaiter(this, void 0, void 0, function* () {
|
|
338
349
|
let parentContainer;
|
|
339
350
|
let parentFound = false;
|
|
@@ -358,10 +369,6 @@ export class InlineStyleTool extends EditorJSTool {
|
|
|
358
369
|
const children = Array.from(parentContainer.childNodes);
|
|
359
370
|
if ((children === null || children === void 0 ? void 0 : children.length) > 0) {
|
|
360
371
|
for (var currentNode = children[0]; currentNode; currentNode = currentNode.nextSibling) {
|
|
361
|
-
console.log('currentNode');
|
|
362
|
-
console.log(currentNode);
|
|
363
|
-
console.log(currentNode.textContent);
|
|
364
|
-
console.log((_b = currentNode.textContent) === null || _b === void 0 ? void 0 : _b.length);
|
|
365
372
|
if (!currentNode.textContent || currentNode.textContent.length === 0) {
|
|
366
373
|
parentContainer.removeChild(currentNode);
|
|
367
374
|
}
|
|
@@ -554,4 +561,4 @@ export class InlineStyleTool extends EditorJSTool {
|
|
|
554
561
|
return element;
|
|
555
562
|
}
|
|
556
563
|
}
|
|
557
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5saW5lLXN0eWxlLXRvb2wuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Ii9ob21lL3BhdWxpbmUvRG9jdW1lbnRzL3dvcmtzcGFjZS93aXppLWJsb2NrL3Byb2plY3RzL3dpemktYmxvY2svc3JjLyIsInNvdXJjZXMiOlsibGliL3NoYXJlZC9jb21wb25lbnRzL2VkaXRvcmpzL3Rvb2xzL2lubGluZS90b29sLXR5cGUvaW5saW5lLXN0eWxlLXRvb2wuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQW1CLFlBQVksRUFBZSxNQUFNLHFDQUFxQyxDQUFDO0FBRWpHLE1BQU0sT0FBZ0IsZUFBZ0IsU0FBUSxZQUFZO0lBQTFEOztRQUdJLGNBQVMsR0FBRyxXQUFXLENBQUM7UUFJeEIsc0JBQWlCLEdBQVcsQ0FBQyxDQUFDO1FBRTlCLHFCQUFnQixHQUFXLENBQUMsQ0FBQztRQUU3QixvQkFBZSxHQUFZLEtBQUssQ0FBQztRQUVqQyxtQkFBYyxHQUFZLEtBQUssQ0FBQztRQUVoQyxjQUFTLEdBQVcsQ0FBQyxDQUFDO1FBTXRCLG9CQUFlLEdBQVksS0FBSyxDQUFDO1FBTWpDLGlCQUFZLEdBQVksS0FBSyxDQUFDO1FBRTlCLGFBQVEsR0FBRztZQUNQLEdBQUcsRUFBRSxLQUFLO1lBQ1YsS0FBSyxFQUFFLEtBQUs7WUFDWixLQUFLLEVBQUUsS0FBSztZQUNaLFNBQVMsRUFBRSxLQUFLO1NBQ25CLENBQUM7SUFva0JOLENBQUM7SUFsa0JTLGdCQUFnQixDQUFDLE1BQWM7O1lBQ2pDLE1BQU0sU0FBUyxHQUFxQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3hHLElBQUksQ0FBQyxTQUFTLEVBQUU7Z0JBQ1osT0FBTzthQUNWO1lBQ0QsSUFBSSxVQUFVLEdBQVMsU0FBUyxDQUFDLFVBQVUsQ0FBQztZQUM1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VyxDQUFDLE1BQU0sQ0FBQztpQkFDeEQ7Z0JBQ0QsSUFBSSxRQUFRLENBQUMsVUFBVSxFQUFFO29CQUNyQixNQUFNLElBQUksQ0FBQyxvQkFBb0IsQ0FBYyxRQUFRLENBQUMsQ0FBQztpQkFDMUQ7Z0JBQ0QsUUFBUSxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUM7YUFDbkM7WUFDRCxJQUFJLGFBQWEsRUFBRTtnQkFDZixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQzthQUM3QjtRQUNMLENBQUM7S0FBQTtJQUVPLHNCQUFzQixDQUFDLE9BQW9COztRQUMvQyxPQUFPLE9BQU8sQ0FBQyxRQUFRLElBQUksT0FBTyxDQUFDLFNBQVMsWUFBbUIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUUsMENBQUUsU0FBUyxDQUFBLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQzdILE9BQU8sR0FBZ0IsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUM5QztRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ25CLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEF0dHJpYnV0ZU9iamVjdCwgRWRpdG9ySlNUb29sLCBTdHlsZU9iamVjdCB9IGZyb20gJy4uLy4uL3V0aWxzL2VkaXRvcmpzLXRvb2wuY29tcG9uZW50JztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIElubGluZVN0eWxlVG9vbCBleHRlbmRzIEVkaXRvckpTVG9vbCB7XG4gICAgdGFnOiBzdHJpbmc7XG5cbiAgICBtb2RpZmllcnMgPSAnc3Ryb25nLGVtJztcblxuICAgIHN0eWxlPzogU3R5bGVPYmplY3Q7XG5cbiAgICBmb3VuZEFuY2hvck9mZnNldDogbnVtYmVyID0gMDtcblxuICAgIGZvdW5kRm9jdXNPZmZzZXQ6IG51bWJlciA9IDA7XG5cbiAgICBmb3VuZEFuY2hvck5vZGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIGZvdW5kRm9jdXNOb2RlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICB0bXBPZmZzZXQ6IG51bWJlciA9IDA7XG5cbiAgICBjbGFzc1RvQXBwbHk/OiBzdHJpbmc7XG5cbiAgICBjbGFzc2VzPzogc3RyaW5nO1xuXG4gICAgbW9kaWZpZWRDb250ZW50OiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBhdHRyaWJ1dGVOYW1lPzogc3RyaW5nO1xuXG4gICAgYXR0cmlidXRlc1RvQXBwbHk/OiBBcnJheTxBdHRyaWJ1dGVPYmplY3Q+O1xuXG4gICAgbGlua0RlbGV0aW9uOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBtb2RpZmllcyA9IHtcbiAgICAgICAgdGFnOiBmYWxzZSxcbiAgICAgICAgc3R5bGU6IGZhbHNlLFxuICAgICAgICBjbGFzczogZmFsc2UsXG4gICAgICAgIGF0dHJpYnV0ZTogZmFsc2UsXG4gICAgfTtcblxuICAgIGFzeW5jIGV4ZWNDb21tYW5kU3R5bGUoYWN0aW9uOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0aW9uOiBTZWxlY3Rpb24gfCBudWxsID0gdGhpcy5jdXJyZW50U2VsZWN0aW9uID8gdGhpcy5jdXJyZW50U2VsZWN0aW9uIDogdGhpcy5nZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgaWYgKCFzZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgYW5jaG9yTm9kZTogTm9kZSA9IHNlbGVjdGlvbi5hbmNob3JOb2RlO1xuICAgICAgICBpZiAoIXRoaXMucGFyZW50RWRpdG9yKSB7XG4gICAgICAgICAgICB0aGlzLnBhcmVudEVkaXRvciA9IHRoaXMuZmluZFBhcmVudEVkaXRvcigpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFhbmNob3JOb2RlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGNvbnRhaW5lcjogSFRNTEVsZW1lbnQgPVxuICAgICAgICAgICAgYW5jaG9yTm9kZS5ub2RlVHlwZSAhPT0gTm9kZS5URVhUX05PREUgJiYgYW5jaG9yTm9kZS5ub2RlVHlwZSAhPT0gTm9kZS5DT01NRU5UX05PREVcbiAgICAgICAgICAgICAgICA/IChhbmNob3JOb2RlIGFzIEhUTUxFbGVtZW50KVxuICAgICAgICAgICAgICAgIDogYW5jaG9yTm9kZS5wYXJlbnRFbGVtZW50O1xuICAgICAgICBjb25zdCBzYW1lU2VsZWN0aW9uOiBib29sZWFuID0gY29udGFpbmVyICYmIGNvbnRhaW5lci5pbm5lclRleHQgPT09IHNlbGVjdGlvbi50b1N0cmluZygpO1xuICAgICAgICBhd2FpdCB0aGlzLnNhdmVJbmxpbmVTZWxlY3Rpb24oY29udGFpbmVyLCB0cnVlKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIExpbmsgZGVsZXRlIGV4Y2VwdGlvblxuICAgICAgICAgICAgaWYgKHRoaXMubGlua0RlbGV0aW9uKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5yZXBsYWNlTGluayhzZWxlY3Rpb24sIHRoaXMuaGFzU3R5bGUoY29udGFpbmVyKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgc2FtZVNlbGVjdGlvbiAmJlxuICAgICAgICAgICAgICAgICAgICAhdGhpcy5pc0NvbnRhaW5lcih0aGlzLnRleHRDb250YWluZXJzLCBjb250YWluZXIpICYmXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGFzU3R5bGUoY29udGFpbmVyKSAmJlxuICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb24udG9TdHJpbmcoKSA9PT0gdGhpcy5oYXNTdHlsZShjb250YWluZXIpLmlubmVyVGV4dFxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZVNlbGVjdGlvbihzZWxlY3Rpb24sIHRoaXMuaGFzU3R5bGUoY29udGFpbmVyKSwgYWN0aW9uLCB0aGlzLnRleHRDb250YWluZXJzKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJlcGxhY2VTZWxlY3Rpb24odGhpcy5nZXRNb3N0RGVzY2VuZGFudENoaWxkKGNvbnRhaW5lciksIGFjdGlvbiwgc2VsZWN0aW9uLCB0aGlzLnRleHRDb250YWluZXJzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNsZWFudXBDb250YWluZXIoc2VsZWN0aW9uLCBjb250YWluZXIsIHRydWUpO1xuICAgICAgICAgICAgaWYgKHRoaXMubW9kaWZpZWRDb250ZW50KSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5yZXNldElubGluZVNlbGVjdGlvbihjb250YWluZXIsIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdJbmxpbmUgVG9vbCBFcnJvciA6ICcgKyBlcnJvcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIHVwZGF0ZVNlbGVjdGlvbihzZWxlY3Rpb246IFNlbGVjdGlvbiwgY29udGFpbmVyOiBIVE1MRWxlbWVudCwgYWN0aW9uOiBzdHJpbmcsIGNvbnRhaW5lcnM6IHN0cmluZykge1xuICAgICAgICBpZiAodGhpcy5tb2RpZmllcy5zdHlsZSkge1xuICAgICAgICAgICAgY29uc3QgY3NzID0gdGhpcy5zdHlsZS5wcm9wZXJ0eTtcbiAgICAgICAgICAgIGxldCB2YWx1ZSA9IGF3YWl0IHRoaXMuZ2V0U3R5bGVWYWx1ZShjb250YWluZXIsIGFjdGlvbiwgY29udGFpbmVycyk7XG4gICAgICAgICAgICBpZiAodmFsdWUgIT09IHRoaXMuc3R5bGUuZGVmYXVsdCkge1xuICAgICAgICAgICAgICAgIGNvbnRhaW5lci5zdHlsZVtjc3NdID0gdmFsdWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0aGlzLnN0eWxlLnByb3BlcnR5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHJhbmdlOiBSYW5nZSA9IHRoaXMuZ2V0UmFuZ2VPYmplY3Qoc2VsZWN0aW9uKTtcbiAgICAgICAgICAgIGxldCBuZXdFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0aGlzLmhhc1N0eWxlKGNvbnRhaW5lcikgPyAnc3BhbicgOiB0aGlzLnRhZyk7XG4gICAgICAgICAgICBpZiAodGhpcy5tb2RpZmllcy5jbGFzcykge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmVtb3ZlQ2hpbGRyZW5DbGFzc2VzKG5ld0VsZW1lbnQpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNsYXNzVG9BcHBseSAhPT0gJycpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3RWxlbWVudC5jbGFzc0xpc3QuYWRkKHRoaXMuY2xhc3NUb0FwcGx5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5tb2RpZmllcy5hdHRyaWJ1dGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXNUb0FwcGx5LmZvckVhY2goKGF0dHJpYnV0ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBuZXdFbGVtZW50LnNldEF0dHJpYnV0ZShhdHRyaWJ1dGUubmFtZSwgYXR0cmlidXRlLnZhbHVlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG5ld0VsZW1lbnQgPSB0aGlzLnNldElubGluZVN0eWxlKGNvbnRhaW5lciwgbmV3RWxlbWVudCk7XG5cbiAgICAgICAgICAgIHdoaWxlIChjb250YWluZXIuZmlyc3RDaGlsZCkge1xuICAgICAgICAgICAgICAgIGxldCBlbGVtZW50Q2xvbmUgPSBjb250YWluZXIuZmlyc3RDaGlsZC5jbG9uZU5vZGUodHJ1ZSk7XG4gICAgICAgICAgICAgICAgbmV3RWxlbWVudC5hcHBlbmRDaGlsZChlbGVtZW50Q2xvbmUpO1xuICAgICAgICAgICAgICAgIGNvbnRhaW5lci5maXJzdENoaWxkLnJlbW92ZSgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb250YWluZXIucGFyZW50RWxlbWVudC5yZXBsYWNlQ2hpbGQobmV3RWxlbWVudCwgY29udGFpbmVyKTtcblxuICAgICAgICAgICAgcmFuZ2UuaW5zZXJ0Tm9kZShuZXdFbGVtZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgcmVwbGFjZVNlbGVjdGlvbihjb250YWluZXI6IEhUTUxFbGVtZW50LCBhY3Rpb246IHN0cmluZywgc2VsZWN0aW9uOiBTZWxlY3Rpb24sIGNvbnRhaW5lcnM6IHN0cmluZykge1xuICAgICAgICBsZXQgcGFyZW50Q29udGFpbmVyID0gdGhpcy5oYXNTdHlsZShjb250YWluZXIpO1xuXG4gICAgICAgIGNvbnN0IGZvY3VzTm9kZTogTm9kZSA9IHNlbGVjdGlvbi5mb2N1c05vZGU7XG4gICAgICAgIGxldCBvZmZzZXRDb250YWluZXI6IEhUTUxFbGVtZW50ID1cbiAgICAgICAgICAgIGZvY3VzTm9kZS5ub2RlVHlwZSAhPT0gTm9kZS5URVhUX05PREUgJiYgZm9jdXNOb2RlLm5vZGVUeXBlICE9PSBOb2RlLkNPTU1FTlRfTk9ERVxuICAgICAgICAgICAgICAgID8gKGZvY3VzTm9kZSBhcyBIVE1MRWxlbWVudClcbiAgICAgICAgICAgICAgICA6IGZvY3VzTm9kZS5wYXJlbnRFbGVtZW50O1xuICAgICAgICBsZXQgb2Zmc2V0UGFyZW50Q29udGFpbmVyID0gdGhpcy5oYXNTdHlsZShvZmZzZXRDb250YWluZXIpO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICBwYXJlbnRDb250YWluZXIgJiZcbiAgICAgICAgICAgIHBhcmVudENvbnRhaW5lciA9PT0gb2Zmc2V0UGFyZW50Q29udGFpbmVyICYmXG4gICAgICAgICAgICAoKHBhcmVudENvbnRhaW5lci5jaGlsZHJlbi5sZW5ndGggPiAwICYmIHBhcmVudENvbnRhaW5lci5pbm5lclRleHQgIT09IHBhcmVudENvbnRhaW5lci5jaGlsZHJlblswXS50ZXh0Q29udGVudCkgfHxcbiAgICAgICAgICAgICAgICBwYXJlbnRDb250YWluZXIuaW5uZXJUZXh0ICE9PSBzZWxlY3Rpb24udG9TdHJpbmcoKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25zdCByYW5nZTogUmFuZ2UgPSB0aGlzLmdldFJhbmdlT2JqZWN0KHNlbGVjdGlvbik7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50RnJhZ21lbnQ6IERvY3VtZW50RnJhZ21lbnQgPSByYW5nZS5leHRyYWN0Q29udGVudHMoKTtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRFbGVtZW50OiBIVE1MU3BhbkVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG4gICAgICAgICAgICBjdXJyZW50RWxlbWVudC5hcHBlbmRDaGlsZChjdXJyZW50RnJhZ21lbnQpO1xuICAgICAgICAgICAgaWYgKHRoaXMubW9kaWZpZXMuc3R5bGUgJiYgdGhpcy5zdHlsZS52YWx1ZS5pbmRleE9mKCckMScpID4gLTEpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50RWxlbWVudC5zdHlsZVt0aGlzLnN0eWxlLnByb3BlcnR5XSA9IHRoaXMuc3R5bGUudmFsdWUucmVwbGFjZSgnJDEnLCB0aGlzLnN0eWxlLmlucHV0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLm1vZGlmaWVzLmNsYXNzKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5yZW1vdmVDaGlsZHJlbkNsYXNzZXMoY3VycmVudEVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNsYXNzVG9BcHBseSAhPT0gJycpIHtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudEVsZW1lbnQuY2xhc3NMaXN0LmFkZCh0aGlzLmNsYXNzVG9BcHBseSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMubW9kaWZpZXMuYXR0cmlidXRlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzVG9BcHBseS5mb3JFYWNoKChhdHRyaWJ1dGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudEVsZW1lbnQuc2V0QXR0cmlidXRlKGF0dHJpYnV0ZS5uYW1lLCBhdHRyaWJ1dGUudmFsdWUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IGN1cnJlbnRFbGVtZW50VG9BcHBlbmQgPSBjdXJyZW50RWxlbWVudDtcbiAgICAgICAgICAgIGxldCBjdXJyZW50UGFyZW50RWxlbWVudCA9IGNvbnRhaW5lcjtcbiAgICAgICAgICAgIGlmIChwYXJlbnRDb250YWluZXIuY29udGFpbnMoY3VycmVudFBhcmVudEVsZW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgd2hpbGUgKGN1cnJlbnRQYXJlbnRFbGVtZW50ICE9PSBwYXJlbnRDb250YWluZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHRtcEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGN1cnJlbnRQYXJlbnRFbGVtZW50LnRhZ05hbWUpO1xuICAgICAgICAgICAgICAgICAgICB0bXBFbGVtZW50ID0gdGhpcy5zZXRJbmxpbmVTdHlsZShjdXJyZW50UGFyZW50RWxlbWVudCwgdG1wRWxlbWVudCk7XG5cbiAgICAgICAgICAgICAgICAgICAgdG1wRWxlbWVudC5hcHBlbmRDaGlsZChjdXJyZW50RWxlbWVudFRvQXBwZW5kKTtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudEVsZW1lbnRUb0FwcGVuZCA9IHRtcEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRQYXJlbnRFbGVtZW50ID0gY3VycmVudFBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGlzTFRSID0gdGhpcy5pc0FuY2hvckJlZm9yZUZvY3VzKFxuICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5hbmNob3JOb2RlLFxuICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5hbmNob3JPZmZzZXQsXG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uLmZvY3VzTm9kZSxcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb24uZm9jdXNPZmZzZXRcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGxldCBzZWxlY3Rpb25Gb2N1c09mZnNldCA9IGlzTFRSID8gc2VsZWN0aW9uLmFuY2hvck9mZnNldCA6IHNlbGVjdGlvbi5mb2N1c09mZnNldDtcbiAgICAgICAgICAgIGxldCBzZWxlY3Rpb25Gb2N1c05vZGUgPSBpc0xUUiA/IHNlbGVjdGlvbi5hbmNob3JOb2RlIDogc2VsZWN0aW9uLmZvY3VzTm9kZTtcblxuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0U2VsZWN0aW9uKCkuc2V0QmFzZUFuZEV4dGVudChwYXJlbnRDb250YWluZXIsIDAsIHNlbGVjdGlvbkZvY3VzTm9kZSwgc2VsZWN0aW9uRm9jdXNPZmZzZXQpO1xuICAgICAgICAgICAgY29uc3QgbmV3U2VsZWN0aW9uID0gdGhpcy5nZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgIGxldCBwcmVSYW5nZTogUmFuZ2UgPSB0aGlzLmdldFJhbmdlT2JqZWN0KG5ld1NlbGVjdGlvbik7XG5cbiAgICAgICAgICAgIGNvbnN0IHByZUZyYWdtZW50OiBEb2N1bWVudEZyYWdtZW50ID0gcHJlUmFuZ2UuZXh0cmFjdENvbnRlbnRzKCk7XG5cbiAgICAgICAgICAgIGxldCBuZXdFbGVtZW50OiBIVE1MRWxlbWVudCA9IDxIVE1MRWxlbWVudD5wYXJlbnRDb250YWluZXIuY2xvbmVOb2RlKCk7XG4gICAgICAgICAgICBuZXdFbGVtZW50LmlubmVySFRNTCA9ICcnO1xuICAgICAgICAgICAgbmV3RWxlbWVudC5hcHBlbmRDaGlsZChwcmVGcmFnbWVudCk7XG5cbiAgICAgICAgICAgIHBhcmVudENvbnRhaW5lci5wYXJlbnRFbGVtZW50Lmluc2VydEJlZm9yZShjdXJyZW50RWxlbWVudFRvQXBwZW5kLCBwYXJlbnRDb250YWluZXIpO1xuICAgICAgICAgICAgcGFyZW50Q29udGFpbmVyLnBhcmVudEVsZW1lbnQuaW5zZXJ0QmVmb3JlKG5ld0VsZW1lbnQsIGN1cnJlbnRFbGVtZW50VG9BcHBlbmQpO1xuICAgICAgICAgICAgc2VsZWN0aW9uLnNlbGVjdEFsbENoaWxkcmVuKGN1cnJlbnRFbGVtZW50VG9BcHBlbmQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgcmFuZ2U6IFJhbmdlID0gdGhpcy5nZXRSYW5nZU9iamVjdChzZWxlY3Rpb24pO1xuICAgICAgICAgICAgY29uc3QgZnJhZ21lbnQ6IERvY3VtZW50RnJhZ21lbnQgPSByYW5nZS5leHRyYWN0Q29udGVudHMoKTtcbiAgICAgICAgICAgIGxldCBmcmFnbWVudEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcblxuICAgICAgICAgICAgbGV0IG5ld0VsZW1lbnQ6IEhUTUxFbGVtZW50IHwgbnVsbCA9IGF3YWl0IHRoaXMuY3JlYXRlRWxlbWVudChjb250YWluZXIsIGFjdGlvbiwgY29udGFpbmVycyk7XG4gICAgICAgICAgICBsZXQgZWxlbWVudFRvQXBwZW5kID0gbmV3RWxlbWVudDtcblxuICAgICAgICAgICAgZnJhZ21lbnRFbGVtZW50LmFwcGVuZChmcmFnbWVudCk7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgZnJhZ21lbnRFbGVtZW50LmNoaWxkcmVuPy5sZW5ndGggPT09IDEgJiZcbiAgICAgICAgICAgICAgICB0aGlzLnRleHRDb250YWluZXJzLnNwbGl0KCcsJykuaW5kZXhPZihmcmFnbWVudEVsZW1lbnQuY2hpbGRyZW5bMF0udGFnTmFtZS50b0xvd2VyQ2FzZSgpKSA+IC0xXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50VG9BcHBlbmQgPSA8SFRNTEVsZW1lbnQ+ZnJhZ21lbnRFbGVtZW50LmNoaWxkcmVuWzBdO1xuICAgICAgICAgICAgICAgIG5ld0VsZW1lbnQuaW5uZXJIVE1MID0gKDxIVE1MRWxlbWVudD5mcmFnbWVudEVsZW1lbnQuY2hpbGRyZW5bMF0pLmlubmVySFRNTDtcbiAgICAgICAgICAgICAgICBlbGVtZW50VG9BcHBlbmQuaW5uZXJIVE1MID0gJyc7XG4gICAgICAgICAgICAgICAgZWxlbWVudFRvQXBwZW5kLmFwcGVuZChuZXdFbGVtZW50KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbmV3RWxlbWVudC5pbm5lckhUTUwgPSBmcmFnbWVudEVsZW1lbnQuaW5uZXJIVE1MO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMubW9kaWZpZXMuY2xhc3MpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJlbW92ZUNoaWxkcmVuQ2xhc3NlcyhuZXdFbGVtZW50KTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jbGFzc1RvQXBwbHkgIT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld0VsZW1lbnQuY2xhc3NMaXN0LmFkZCh0aGlzLmNsYXNzVG9BcHBseSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMubW9kaWZpZXMuYXR0cmlidXRlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzVG9BcHBseS5mb3JFYWNoKChhdHRyaWJ1dGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbmV3RWxlbWVudC5zZXRBdHRyaWJ1dGUoYXR0cmlidXRlLm5hbWUsIGF0dHJpYnV0ZS52YWx1ZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJhbmdlLmluc2VydE5vZGUoZWxlbWVudFRvQXBwZW5kKTtcbiAgICAgICAgICAgIHNlbGVjdGlvbi5zZWxlY3RBbGxDaGlsZHJlbihlbGVtZW50VG9BcHBlbmQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyByZXBsYWNlTGluayhzZWxlY3Rpb246IFNlbGVjdGlvbiwgY29udGFpbmVyOiBIVE1MRWxlbWVudCkge1xuICAgICAgICBsZXQgbmV3RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcbiAgICAgICAgbmV3RWxlbWVudC5pbm5lckhUTUwgPSBjb250YWluZXIuaW5uZXJIVE1MO1xuXG4gICAgICAgIGNvbnRhaW5lci5wYXJlbnRFbGVtZW50LnJlcGxhY2VDaGlsZChuZXdFbGVtZW50LCBjb250YWluZXIpO1xuICAgICAgICBzZWxlY3Rpb24uc2VsZWN0QWxsQ2hpbGRyZW4obmV3RWxlbWVudCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0FuY2hvckJlZm9yZUZvY3VzKGFuY2hvck5vZGU6IE5vZGUsIGFuY2hvck9mZnNldDogbnVtYmVyLCBmb2N1c05vZGU6IE5vZGUsIGZvY3VzT2Zmc2V0OiBudW1iZXIpIHtcbiAgICAgICAgbGV0IGFuY2hvclJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcbiAgICAgICAgbGV0IGZvY3VzUmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuICAgICAgICBhbmNob3JSYW5nZS5zZXRTdGFydChhbmNob3JOb2RlLCBhbmNob3JPZmZzZXQpO1xuICAgICAgICBhbmNob3JSYW5nZS5zZXRFbmQoYW5jaG9yTm9kZSwgYW5jaG9yT2Zmc2V0KTtcbiAgICAgICAgZm9jdXNSYW5nZS5zZXRTdGFydChmb2N1c05vZGUsIGZvY3VzT2Zmc2V0KTtcbiAgICAgICAgZm9jdXNSYW5nZS5zZXRFbmQoZm9jdXNOb2RlLCBmb2N1c09mZnNldCk7XG4gICAgICAgIGlmIChhbmNob3JSYW5nZS5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2UuU1RBUlRfVE9fU1RBUlQsIGZvY3VzUmFuZ2UpID09PSAtMSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGhhc1N0eWxlKGVsZW1lbnQ6IEhUTUxFbGVtZW50LCBmaXJzdFRpbWVDYWxsOiBib29sZWFuID0gdHJ1ZSk6IEhUTUxFbGVtZW50IHwgbnVsbCB7XG4gICAgICAgIGlmIChmaXJzdFRpbWVDYWxsICYmIGVsZW1lbnQuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgIGVsZW1lbnQgPSB0aGlzLmdldE1vc3REZXNjZW5kYW50Q2hpbGQoPEhUTUxFbGVtZW50PmVsZW1lbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZm91bmRFbGVtZW50IHdhcyBhZGRlZCBiZWNhdXNlIG9mIGEgcmV0dXJuIGlzc3VlIHdoZW4gYSBjbGFzcyBpcyBhcHBsaWVkXG4gICAgICAgIGxldCBmb3VuZEVsZW1lbnQ6IEhUTUxFbGVtZW50IHwgbnVsbCA9IG51bGw7XG5cbiAgICAgICAgaWYgKCFlbGVtZW50IHx8IGVsZW1lbnQuY2xhc3NMaXN0Py5jb250YWlucygnY2UtcGFyYWdyYXBoJykpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm1vZGlmaWVzLnN0eWxlKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgZWxlbWVudC5zdHlsZSAmJlxuICAgICAgICAgICAgICAgIGVsZW1lbnQuc3R5bGVbdGhpcy5zdHlsZS5wcm9wZXJ0eV0gJiZcbiAgICAgICAgICAgICAgICAodGhpcy5zdHlsZS52YWx1ZS5pbmRleE9mKCckMScpID4gLTEgPyB0cnVlIDogZWxlbWVudC5zdHlsZVt0aGlzLnN0eWxlLnByb3BlcnR5XSA9PT0gdGhpcy5zdHlsZS52YWx1ZSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGZvdW5kRWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5tb2RpZmllcy5jbGFzcykge1xuICAgICAgICAgICAgdGhpcy5jbGFzc2VzLnNwbGl0KCcsJykuZm9yRWFjaCgoY2xhc3NOYW1lKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuY2xhc3NMaXN0Py5jb250YWlucyhjbGFzc05hbWUpID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvdW5kRWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMubW9kaWZpZXMudGFnKSB7XG4gICAgICAgICAgICBpZiAoZWxlbWVudC50YWdOYW1lPy50b0xvd2VyQ2FzZSgpID09PSB0aGlzLnRhZy50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5tb2RpZmllcy5hdHRyaWJ1dGUpIHtcbiAgICAgICAgICAgIGxldCBhdHRyaWJ1dGVzID0gdGhpcy5hdHRyaWJ1dGVOYW1lLnNwbGl0KCcsJyk7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJpYnV0ZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGVsZW1lbnQuZ2V0QXR0cmlidXRlID09PSAnZnVuY3Rpb24nICYmIGVsZW1lbnQuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZXNbaV0pKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvdW5kRWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZm91bmRFbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gZm91bmRFbGVtZW50O1xuICAgICAgICB9XG4gICAgICAgIGlmICghZm91bmRFbGVtZW50ICYmIGVsZW1lbnQucGFyZW50RWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGFzU3R5bGUoZWxlbWVudC5wYXJlbnRFbGVtZW50LCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBnZXRTdHlsZVZhbHVlKGNvbnRhaW5lcjogSFRNTEVsZW1lbnQsIGFjdGlvbjogc3RyaW5nLCBjb250YWluZXJzOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZyB8IG51bGw+IHtcbiAgICAgICAgaWYgKCFjb250YWluZXIpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN0eWxlLnZhbHVlLmluZGV4T2YoJyQxJykgPiAtMSA/IHRoaXMuc3R5bGUudmFsdWUucmVwbGFjZSgnJDEnLCB0aGlzLnN0eWxlLmlucHV0KSA6IHRoaXMuc3R5bGUudmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5oYXNTdHlsZShjb250YWluZXIpICYmIHRoaXMuc3R5bGUudmFsdWUuaW5kZXhPZignJDEnKSA9PT0gLTEpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN0eWxlLmRlZmF1bHQ7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzdHlsZTogTm9kZSB8IG51bGwgPSBhd2FpdCB0aGlzLmZpbmRTdHlsZU5vZGUoY29udGFpbmVyLCBhY3Rpb24sIGNvbnRhaW5lcnMpO1xuICAgICAgICBpZiAoc3R5bGUgJiYgdGhpcy5oYXNTdHlsZShzdHlsZSBhcyBIVE1MRWxlbWVudCkgJiYgdGhpcy5zdHlsZS52YWx1ZS5pbmRleE9mKCckMScpID09PSAtMSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3R5bGUuZGVmYXVsdDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLnN0eWxlLnZhbHVlLmluZGV4T2YoJyQxJykgPiAtMSA/IHRoaXMuc3R5bGUudmFsdWUucmVwbGFjZSgnJDEnLCB0aGlzLnN0eWxlLmlucHV0KSA6IHRoaXMuc3R5bGUudmFsdWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBmaW5kU3R5bGVOb2RlKG5vZGU6IE5vZGUsIHN0eWxlOiBzdHJpbmcsIGNvbnRhaW5lcnM6IHN0cmluZyk6IFByb21pc2U8Tm9kZSB8IG51bGw+IHtcbiAgICAgICAgaWYgKG5vZGUubm9kZU5hbWUudG9VcHBlckNhc2UoKSA9PT0gJ0hUTUwnIHx8IG5vZGUubm9kZU5hbWUudG9VcHBlckNhc2UoKSA9PT0gJ0JPRFknKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghbm9kZS5wYXJlbnROb2RlKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmlzQ29udGFpbmVyKGNvbnRhaW5lcnMsIG5vZGUpKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGhhc1N0eWxlOiBib29sZWFuID1cbiAgICAgICAgICAgIChub2RlIGFzIEhUTUxFbGVtZW50KS5zdHlsZVtzdHlsZV0gIT09IG51bGwgJiZcbiAgICAgICAgICAgIChub2RlIGFzIEhUTUxFbGVtZW50KS5zdHlsZVtzdHlsZV0gIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgKG5vZGUgYXMgSFRNTEVsZW1lbnQpLnN0eWxlW3N0eWxlXSAhPT0gJyc7XG5cbiAgICAgICAgaWYgKGhhc1N0eWxlKSB7XG4gICAgICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmZpbmRTdHlsZU5vZGUobm9kZS5wYXJlbnROb2RlLCBzdHlsZSwgY29udGFpbmVycyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBjcmVhdGVFbGVtZW50KGNvbnRhaW5lcjogSFRNTEVsZW1lbnQsIGFjdGlvbjogc3RyaW5nLCBjb250YWluZXJzOiBzdHJpbmcpOiBQcm9taXNlPEhUTUxFbGVtZW50PiB7XG4gICAgICAgIGxldCBuZXdFbGVtZW50OiBIVE1MRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGhpcy50YWcpO1xuICAgICAgICBpZiAodGhpcy5tb2RpZmllcy5zdHlsZSkge1xuICAgICAgICAgICAgY29uc3QgcHJvcGVydHkgPSB0aGlzLnN0eWxlLnByb3BlcnR5O1xuICAgICAgICAgICAgbGV0IHZhbHVlID0gYXdhaXQgdGhpcy5nZXRTdHlsZVZhbHVlKGNvbnRhaW5lciwgYWN0aW9uLCBjb250YWluZXJzKTtcbiAgICAgICAgICAgIGlmICh2YWx1ZSAhPT0gdGhpcy5zdHlsZS5kZWZhdWx0KSB7XG4gICAgICAgICAgICAgICAgbmV3RWxlbWVudC5zdHlsZVtwcm9wZXJ0eV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbmV3RWxlbWVudC5zdHlsZS5yZW1vdmVQcm9wZXJ0eShwcm9wZXJ0eSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3RWxlbWVudDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIHJlbW92ZUNoaWxkcmVuQ2xhc3NlcyhlbGVtZW50OiBIVE1MRWxlbWVudCkge1xuICAgICAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuOiBIVE1MQ29sbGVjdGlvbiA9IGVsZW1lbnQuY2hpbGRyZW47XG4gICAgICAgIGZvciAodmFyIGN1cnJlbnRFbGVtZW50ID0gY2hpbGRyZW5bMF07IGN1cnJlbnRFbGVtZW50OyBjdXJyZW50RWxlbWVudCA9IGN1cnJlbnRFbGVtZW50Lm5leHRFbGVtZW50U2libGluZykge1xuICAgICAgICAgICAgdGhpcy5jbGFzc2VzLnNwbGl0KCcsJykuZm9yRWFjaCgoY2xhc3NOYW1lKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRFbGVtZW50LmNsYXNzTGlzdD8uY29udGFpbnMoY2xhc3NOYW1lKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudEVsZW1lbnQuY2xhc3NMaXN0Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdjbGFzcycpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShjbGFzc05hbWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoY3VycmVudEVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmVtb3ZlQ2hpbGRyZW5DbGFzc2VzKDxIVE1MRWxlbWVudD5jdXJyZW50RWxlbWVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGNsZWFudXBDb250YWluZXIoc2VsZWN0aW9uOiBTZWxlY3Rpb24sIGNvbnRhaW5lciwgZmlyc3RUaW1lQ2FsbDogQm9vbGVhbikge1xuICAgICAgICBsZXQgcGFyZW50Q29udGFpbmVyOiBIVE1MRWxlbWVudDtcbiAgICAgICAgbGV0IHBhcmVudEZvdW5kOiBCb29sZWFuID0gZmFsc2U7XG4gICAgICAgIGlmIChmaXJzdFRpbWVDYWxsKSB7XG4gICAgICAgICAgICBwYXJlbnRDb250YWluZXIgPSA8SFRNTEVsZW1lbnQ+c2VsZWN0aW9uLmFuY2hvck5vZGU7XG4gICAgICAgICAgICB3aGlsZSAocGFyZW50Q29udGFpbmVyICYmICFwYXJlbnRGb3VuZCkge1xuICAgICAgICAgICAgICAgIGlmIChwYXJlbnRDb250YWluZXIubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFICYmIHBhcmVudENvbnRhaW5lci5jbGFzc0xpc3Q/LmNvbnRhaW5zKCdjZS1wYXJhZ3JhcGgnKSkge1xuICAgICAgICAgICAgICAgICAgICBwYXJlbnRGb3VuZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50Q29udGFpbmVyID0gcGFyZW50Q29udGFpbmVyLnBhcmVudEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGFyZW50Q29udGFpbmVyID0gY29udGFpbmVyO1xuICAgICAgICB9XG4gICAgICAgIGlmICghcGFyZW50Q29udGFpbmVyIHx8ICFwYXJlbnRDb250YWluZXIuaGFzQ2hpbGROb2RlcygpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBwYXJlbnRDb250YWluZXIubm9ybWFsaXplKCk7XG5cbiAgICAgICAgY29uc3QgY2hpbGRyZW46IE5vZGVbXSA9IEFycmF5LmZyb20ocGFyZW50Q29udGFpbmVyLmNoaWxkTm9kZXMpO1xuICAgICAgICBpZiAoY2hpbGRyZW4/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGZvciAodmFyIGN1cnJlbnROb2RlID0gY2hpbGRyZW5bMF07IGN1cnJlbnROb2RlOyBjdXJyZW50Tm9kZSA9IGN1cnJlbnROb2RlLm5leHRTaWJsaW5nKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ2N1cnJlbnROb2RlJyk7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coY3VycmVudE5vZGUpO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGN1cnJlbnROb2RlLnRleHRDb250ZW50KTtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhjdXJyZW50Tm9kZS50ZXh0Q29udGVudD8ubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICBpZiAoIWN1cnJlbnROb2RlLnRleHRDb250ZW50IHx8IGN1cnJlbnROb2RlLnRleHRDb250ZW50Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBwYXJlbnRDb250YWluZXIucmVtb3ZlQ2hpbGQoY3VycmVudE5vZGUpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50Tm9kZS5jaGlsZE5vZGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuY2xlYW51cENvbnRhaW5lcihzZWxlY3Rpb24sIGN1cnJlbnROb2RlLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbGV0IGlkZW50aWNhbEVsZW1lbnRzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKFxuICAgICAgICAgICAgICAgICAgICAgICAgaWRlbnRpY2FsRWxlbWVudHMgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnROb2RlLm5leHRTaWJsaW5nICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Tm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnROb2RlLm5leHRTaWJsaW5nLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERVxuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjdXJyZW50RWxlbWVudCA9IDxFbGVtZW50PmN1cnJlbnROb2RlO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG5leHRFbGVtZW50ID0gPEVsZW1lbnQ+Y3VycmVudE5vZGUubmV4dFNpYmxpbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pZGVudGljYWxJbmxpbmVTdHlsZShjdXJyZW50RWxlbWVudCwgbmV4dEVsZW1lbnQpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSBuZXh0RWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlkZW50aWNhbENsYXNzTGlzdChjdXJyZW50RWxlbWVudCwgbmV4dEVsZW1lbnQpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgISg8RWxlbWVudD5jdXJyZW50RWxlbWVudCkuaGFzQXR0cmlidXRlcygpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgISg8RWxlbWVudD5uZXh0RWxlbWVudCkuaGFzQXR0cmlidXRlcygpXG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50RWxlbWVudC5pbm5lckhUTUwgKz0gbmV4dEVsZW1lbnQuaW5uZXJIVE1MO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRFbGVtZW50LnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubW9kaWZpZWRDb250ZW50ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRlbnRpY2FsRWxlbWVudHMgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Tm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICg8RWxlbWVudD5jdXJyZW50Tm9kZSkudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnc3BhbicgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKHRoaXMuZ2V0SW5saW5lU3R5bGUoPEVsZW1lbnQ+Y3VycmVudE5vZGUpKS5sZW5ndGggPT09IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICghKDxFbGVtZW50PmN1cnJlbnROb2RlKS5jbGFzc0xpc3QgfHwgKDxFbGVtZW50PmN1cnJlbnROb2RlKS5jbGFzc0xpc3QubGVuZ3RoID09PSAwKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oYXNOb0F0dHJpYnV0ZXMoPEVsZW1lbnQ+Y3VycmVudE5vZGUpXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGN1cnJlbnROb2RlRmlyc3RDaGlsZCA9IGN1cnJlbnROb2RlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoY3VycmVudE5vZGUuZmlyc3RDaGlsZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8RWxlbWVudD5jdXJyZW50Tm9kZUZpcnN0Q2hpbGQucGFyZW50RWxlbWVudCkuaW5zZXJ0QmVmb3JlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Tm9kZS5maXJzdENoaWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Tm9kZUZpcnN0Q2hpbGQubmV4dFNpYmxpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnROb2RlRmlyc3RDaGlsZCA9IGN1cnJlbnROb2RlRmlyc3RDaGlsZC5uZXh0U2libGluZztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICg8RWxlbWVudD5jdXJyZW50Tm9kZSkucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1vZGlmaWVkQ29udGVudCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY3VycmVudE5vZGUubm9ybWFsaXplKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYXNOb0F0dHJpYnV0ZXMobm9kZTogRWxlbWVudCk6IGJvb2xlYW4ge1xuICAgICAgICBsZXQgbm9kZVN0eWxlID0gT2JqZWN0LmtleXModGhpcy5nZXRJbmxpbmVTdHlsZShub2RlKSk7XG4gICAgICAgIGxldCBub2RlQXR0cmlidXRlcyA9IE9iamVjdC5rZXlzKFxuICAgICAgICAgICAgbm9kZS5nZXRBdHRyaWJ1dGVOYW1lcygpLnJlZHVjZSgoYWNjLCBuYW1lKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgLi4uYWNjLCBbbmFtZV06IG5vZGUuZ2V0QXR0cmlidXRlKG5hbWUpIH07XG4gICAgICAgICAgICB9LCB7fSlcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAobm9kZUF0dHJpYnV0ZXMubGVuZ3RoID09PSAwIHx8IChub2RlQXR0cmlidXRlcy5sZW5ndGggPT09IDEgJiYgbm9kZVN0eWxlLmxlbmd0aCA9PT0gMCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlkZW50aWNhbENsYXNzTGlzdChjdXJyZW50RWxlbWVudCwgbmV4dEVsZW1lbnQpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIFsuLi5jdXJyZW50RWxlbWVudC5jbGFzc0xpc3RdLmV2ZXJ5KChjbGFzc0xpc3QpID0+IG5leHRFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhjbGFzc0xpc3QpKSAmJlxuICAgICAgICAgICAgWy4uLm5leHRFbGVtZW50LmNsYXNzTGlzdF0uZXZlcnkoKGNsYXNzTGlzdCkgPT4gY3VycmVudEVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKGNsYXNzTGlzdCkpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpZGVudGljYWxJbmxpbmVTdHlsZShjdXJyZW50RWxlbWVudCwgbmV4dEVsZW1lbnQpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgY3VycmVudEVsZW1lbnRJbmxpbmVTdHlsZSA9IHRoaXMuZ2V0SW5saW5lU3R5bGUoY3VycmVudEVsZW1lbnQpO1xuICAgICAgICBjb25zdCBuZXh0RWxlbWVudElubGluZVN0eWxlID0gdGhpcy5nZXRJbmxpbmVTdHlsZShuZXh0RWxlbWVudCk7XG4gICAgICAgIGxldCBjdXJyZW50RWxlbWVudElubGluZVN0eWxlU29ydGVkID0gdGhpcy5zb3J0SW5saW5lU3R5bGUoY3VycmVudEVsZW1lbnRJbmxpbmVTdHlsZSk7XG4gICAgICAgIGxldCBuZXh0RWxlbWVudElubGluZVN0eWxlU29ydGVkID0gdGhpcy5zb3J0SW5saW5lU3R5bGUobmV4dEVsZW1lbnRJbmxpbmVTdHlsZSk7XG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShjdXJyZW50RWxlbWVudElubGluZVN0eWxlU29ydGVkKSA9PT0gSlNPTi5zdHJpbmdpZnkobmV4dEVsZW1lbnRJbmxpbmVTdHlsZVNvcnRlZCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzb3J0SW5saW5lU3R5bGUoY3VycmVudEVsZW1lbnQpOiBPYmplY3Qge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMoY3VycmVudEVsZW1lbnQpXG4gICAgICAgICAgICAuc29ydCgoWywgYV06IGFueSwgWywgYl06IGFueSkgPT4gYSAtIGIpXG4gICAgICAgICAgICAucmVkdWNlKChyLCBbaywgdl0pID0+ICh7IC4uLnIsIFtrXTogdiB9KSwge30pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0SW5saW5lU3R5bGUoY3VycmVudEVsZW1lbnQpOiBPYmplY3Qge1xuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbShjdXJyZW50RWxlbWVudC5zdHlsZSkucmVkdWNlKChzdHlsZTogc3RyaW5nLCBuYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIHN0eWxlW25hbWVdID0gY3VycmVudEVsZW1lbnQuc3R5bGVbbmFtZV07XG4gICAgICAgICAgICByZXR1cm4gc3R5bGU7XG4gICAgICAgIH0sIHt9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldElubGluZVN0eWxlKGN1cnJlbnRFbGVtZW50LCBuZXh0RWxlbWVudCk6IEhUTUxFbGVtZW50IHtcbiAgICAgICAgY29uc3QgY3VycmVudEVsZW1lbnRJbmxpbmVTdHlsZTogT2JqZWN0ID0gQXJyYXkuZnJvbShjdXJyZW50RWxlbWVudC5zdHlsZSkucmVkdWNlKChzdHlsZTogc3RyaW5nLCBuYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIHN0eWxlW25hbWVdID0gY3VycmVudEVsZW1lbnQuc3R5bGVbbmFtZV07XG4gICAgICAgICAgICByZXR1cm4gc3R5bGU7XG4gICAgICAgIH0sIHt9KTtcbiAgICAgICAgZm9yIChjb25zdCBwcm9wZXJ0eSBpbiBjdXJyZW50RWxlbWVudElubGluZVN0eWxlKSB7XG4gICAgICAgICAgICBuZXh0RWxlbWVudC5zdHlsZVtwcm9wZXJ0eV0gPSBjdXJyZW50RWxlbWVudElubGluZVN0eWxlW3Byb3BlcnR5XTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV4dEVsZW1lbnQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0NvbnRhaW5lcihjb250YWluZXJzOiBzdHJpbmcsIG5vZGU6IE5vZGUpOiBCb29sZWFuIHtcbiAgICAgICAgaWYgKGNvbnRhaW5lcnMuc3BsaXQoJywnKS5pbmRleE9mKG5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSkgPT09IC0xKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBzYXZlSW5saW5lU2VsZWN0aW9uKGNvbnRhaW5lcjogSFRNTEVsZW1lbnQsIGZpcnN0VGltZUNhbGw6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgICAgICBpZiAoZmlyc3RUaW1lQ2FsbCkge1xuICAgICAgICAgICAgY29udGFpbmVyID0gPEhUTUxFbGVtZW50PnRoaXMucGFyZW50RWRpdG9yLnF1ZXJ5U2VsZWN0b3IoJy5jZS1wYXJhZ3JhcGgnKS5maXJzdEVsZW1lbnRDaGlsZDtcbiAgICAgICAgICAgIHRoaXMuZm91bmRBbmNob3JOb2RlID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmZvdW5kRm9jdXNOb2RlID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmZvdW5kQW5jaG9yT2Zmc2V0ID0gMDtcbiAgICAgICAgICAgIHRoaXMuZm91bmRGb2N1c09mZnNldCA9IDA7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmdldFNlbGVjdGlvbigpLnRvU3RyaW5nKCkgPT09ICg8SFRNTEVsZW1lbnQ+dGhpcy5wYXJlbnRFZGl0b3IucXVlcnlTZWxlY3RvcignLmNlLXBhcmFncmFwaCcpKS50ZXh0Q29udGVudCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZm91bmRBbmNob3JPZmZzZXQgPSAwO1xuICAgICAgICAgICAgICAgIHRoaXMuZm91bmRBbmNob3JOb2RlID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgIHRoaXMuZm91bmRGb2N1c09mZnNldCA9IHRoaXMuZ2V0U2VsZWN0aW9uKCkudG9TdHJpbmcoKS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3VuZEZvY3VzTm9kZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxldCBuZXh0Tm9kZSA9IGNvbnRhaW5lci5maXJzdENoaWxkO1xuICAgICAgICB3aGlsZSAobmV4dE5vZGUgJiYgKCF0aGlzLmZvdW5kQW5jaG9yTm9kZSB8fCAhdGhpcy5mb3VuZEZvY3VzTm9kZSkpIHtcbiAgICAgICAgICAgIGlmIChuZXh0Tm9kZSA9PT0gdGhpcy5zZWxlY3RlZEFuY2hvck5vZGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvdW5kQW5jaG9yTm9kZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3VuZEFuY2hvck9mZnNldCArPSB0aGlzLmFuY2hvck9mZnNldDtcbiAgICAgICAgICAgICAgICBsZXQgc2VsZWN0aW9uID0gdGhpcy5nZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgICAgICBsZXQgcmFuZ2UgPSB0aGlzLmdldFJhbmdlT2JqZWN0KHNlbGVjdGlvbik7XG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudEZyYWdtZW50OiBEb2N1bWVudEZyYWdtZW50ID0gcmFuZ2UuY2xvbmVDb250ZW50cygpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRFbGVtZW50OiBIVE1MU3BhbkVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG4gICAgICAgICAgICAgICAgY3VycmVudEVsZW1lbnQuYXBwZW5kQ2hpbGQoY3VycmVudEZyYWdtZW50KTtcblxuICAgICAgICAgICAgICAgIHRoaXMuZm91bmRGb2N1c09mZnNldCA9IHRoaXMuZm91bmRBbmNob3JPZmZzZXQgKyBjdXJyZW50RWxlbWVudC5pbm5lclRleHQubGVuZ3RoO1xuICAgICAgICAgICAgICAgIHRoaXMuZm91bmRGb2N1c05vZGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGN1cnJlbnRFbGVtZW50LnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChuZXh0Tm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5URVhUX05PREUpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZm91bmRBbmNob3JOb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm91bmRBbmNob3JPZmZzZXQgKz0gbmV4dE5vZGUudGV4dENvbnRlbnQubGVuZ3RoO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZm91bmRGb2N1c05vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3VuZEZvY3VzT2Zmc2V0ICs9IG5leHROb2RlLnRleHRDb250ZW50Lmxlbmd0aDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobmV4dE5vZGUuZmlyc3RDaGlsZCkge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuc2F2ZUlubGluZVNlbGVjdGlvbig8SFRNTEVsZW1lbnQ+bmV4dE5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbmV4dE5vZGUgPSBuZXh0Tm9kZS5uZXh0U2libGluZztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgcmVzZXRJbmxpbmVTZWxlY3Rpb24oY29udGFpbmVyOiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsLCBmaXJzdFRpbWVDYWxsOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICAgICAgaWYgKGZpcnN0VGltZUNhbGwpIHtcbiAgICAgICAgICAgIGNvbnRhaW5lciA9IDxIVE1MRWxlbWVudD50aGlzLnBhcmVudEVkaXRvci5xdWVyeVNlbGVjdG9yKCcuY2UtcGFyYWdyYXBoJykuZmlyc3RFbGVtZW50Q2hpbGQ7XG4gICAgICAgICAgICB0aGlzLmZvdW5kQW5jaG9yTm9kZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5mb3VuZEZvY3VzTm9kZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy50bXBPZmZzZXQgPSAwO1xuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgdGhpcy5mb3VuZEFuY2hvck9mZnNldCA9PT0gMCAmJlxuICAgICAgICAgICAgICAgICg8SFRNTEVsZW1lbnQ+dGhpcy5wYXJlbnRFZGl0b3IucXVlcnlTZWxlY3RvcignLmNlLXBhcmFncmFwaCcpKS50ZXh0Q29udGVudC5sZW5ndGggPT09IHRoaXMuZm91bmRGb2N1c09mZnNldFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEFuY2hvck5vZGUgPSAoPEhUTUxFbGVtZW50PnRoaXMucGFyZW50RWRpdG9yLnF1ZXJ5U2VsZWN0b3IoJy5jZS1wYXJhZ3JhcGgnKSkuZmlyc3RFbGVtZW50Q2hpbGQ7XG4gICAgICAgICAgICAgICAgdGhpcy5hbmNob3JPZmZzZXQgPSAwO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGb2N1c05vZGUgPSAoPEhUTUxFbGVtZW50PnRoaXMucGFyZW50RWRpdG9yLnF1ZXJ5U2VsZWN0b3IoJy5jZS1wYXJhZ3JhcGgnKSkuZmlyc3RFbGVtZW50Q2hpbGQ7XG4gICAgICAgICAgICAgICAgdGhpcy5mb2N1c09mZnNldCA9IDE7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNldFVzZXJTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbGV0IG5leHROb2RlID0gY29udGFpbmVyLmZpcnN0Q2hpbGQ7XG4gICAgICAgIHdoaWxlIChuZXh0Tm9kZSAmJiAoIXRoaXMuZm91bmRBbmNob3JOb2RlIHx8ICF0aGlzLmZvdW5kRm9jdXNOb2RlKSkge1xuICAgICAgICAgICAgaWYgKG5leHROb2RlLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5mb3VuZEFuY2hvck5vZGUgJiYgdGhpcy5mb3VuZEFuY2hvck9mZnNldCAtIG5leHROb2RlLnRleHRDb250ZW50Lmxlbmd0aCA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3VuZEFuY2hvck5vZGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFuY2hvck9mZnNldCA9IHRoaXMuZm91bmRBbmNob3JPZmZzZXQ7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRBbmNob3JOb2RlID0gbmV4dE5vZGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5mb3VuZEZvY3VzTm9kZSAmJiB0aGlzLmZvdW5kRm9jdXNPZmZzZXQgLSBuZXh0Tm9kZS50ZXh0Q29udGVudC5sZW5ndGggPD0gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvdW5kRm9jdXNOb2RlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb2N1c09mZnNldCA9IHRoaXMuZm91bmRGb2N1c09mZnNldDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZvY3VzTm9kZSA9IG5leHROb2RlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnRtcE9mZnNldCArPSBuZXh0Tm9kZS50ZXh0Q29udGVudC5sZW5ndGg7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3VuZEFuY2hvck9mZnNldCAtPSBuZXh0Tm9kZS50ZXh0Q29udGVudC5sZW5ndGg7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3VuZEZvY3VzT2Zmc2V0IC09IG5leHROb2RlLnRleHRDb250ZW50Lmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChuZXh0Tm9kZS5maXJzdENoaWxkKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5yZXNldElubGluZVNlbGVjdGlvbig8SFRNTEVsZW1lbnQ+bmV4dE5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbmV4dE5vZGUgPSBuZXh0Tm9kZS5uZXh0U2libGluZztcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmlyc3RUaW1lQ2FsbCkge1xuICAgICAgICAgICAgdGhpcy5yZXNldFVzZXJTZWxlY3Rpb24oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0TW9zdERlc2NlbmRhbnRDaGlsZChlbGVtZW50OiBIVE1MRWxlbWVudCkge1xuICAgICAgICB3aGlsZSAoZWxlbWVudC5jaGlsZHJlbiAmJiBlbGVtZW50LmlubmVyVGV4dCA9PT0gKDxIVE1MRWxlbWVudD5lbGVtZW50LmNoaWxkcmVuWzBdKT8uaW5uZXJUZXh0ICYmIGVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICBlbGVtZW50ID0gPEhUTUxFbGVtZW50PmVsZW1lbnQuY2hpbGRyZW5bMF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfVxufVxuIl19
|
|
564
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5saW5lLXN0eWxlLXRvb2wuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Ii9ob21lL3BhdWxpbmUvRG9jdW1lbnRzL3dvcmtzcGFjZS93aXppLWJsb2NrL3Byb2plY3RzL3dpemktYmxvY2svc3JjLyIsInNvdXJjZXMiOlsibGliL3NoYXJlZC9jb21wb25lbnRzL2VkaXRvcmpzL3Rvb2xzL2lubGluZS90b29sLXR5cGUvaW5saW5lLXN0eWxlLXRvb2wuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQW1CLFlBQVksRUFBZSxNQUFNLHFDQUFxQyxDQUFDO0FBRWpHLE1BQU0sT0FBZ0IsZUFBZ0IsU0FBUSxZQUFZO0lBQTFEOztRQUdJLGNBQVMsR0FBRyxXQUFXLENBQUM7UUFJeEIsc0JBQWlCLEdBQVcsQ0FBQyxDQUFDO1FBRTlCLHFCQUFnQixHQUFXLENBQUMsQ0FBQztRQUU3QixvQkFBZSxHQUFZLEtBQUssQ0FBQztRQUVqQyxtQkFBYyxHQUFZLEtBQUssQ0FBQztRQUVoQyxjQUFTLEdBQVcsQ0FBQyxDQUFDO1FBTXRCLG9CQUFlLEdBQVksS0FBSyxDQUFDO1FBTWpDLGlCQUFZLEdBQVksS0FBSyxDQUFDO1FBRTlCLGFBQVEsR0FBRztZQUNQLEdBQUcsRUFBRSxLQUFLO1lBQ1YsS0FBSyxFQUFFLEtBQUs7WUFDWixLQUFLLEVBQUUsS0FBSztZQUNaLFNBQVMsRUFBRSxLQUFLO1NBQ25CLENBQUM7SUEya0JOLENBQUM7SUF6a0JTLGdCQUFnQixDQUFDLE1BQWM7O1lBQ2pDLE1BQU0sU0FBUyxHQUFxQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3hHLElBQUksQ0FBQyxTQUFTLEVBQUU7Z0JBQ1osT0FBTzthQUNWO1lBQ0QsSUFBSSxVQUFVLEdBQVMsU0FBUyxDQUFDLFVBQVUsQ0FBQztZQUM1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Q0FBQyxFQUFFO3dCQUNsRixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQzt3QkFDM0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7d0JBQ3pDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxRQUFRLENBQUM7cUJBQ3JDO29CQUNELElBQUksQ0FBQyxTQUFTLElBQUksUUFBUSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUM7b0JBQzlDLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxRQUFRLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQztvQkFDdEQsSUFBSSxDQUFDLGdCQUFnQixJQUFJLFFBQVEsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDO2lCQUN4RDtnQkFDRCxJQUFJLFFBQVEsQ0FBQyxVQUFVLEVBQUU7b0JBQ3JCLE1BQU0sSUFBSSxDQUFDLG9CQUFvQixDQUFjLFFBQVEsQ0FBQyxDQUFDO2lCQUMxRDtnQkFDRCxRQUFRLEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQzthQUNuQztZQUNELElBQUksYUFBYSxFQUFFO2dCQUNmLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO2FBQzdCO1FBQ0wsQ0FBQztLQUFBO0lBRU8sc0JBQXNCLENBQUMsT0FBb0I7O1FBQy9DLE9BQU8sT0FBTyxDQUFDLFFBQVEsSUFBSSxPQUFPLENBQUMsU0FBUyxZQUFtQixPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBRSwwQ0FBRSxTQUFTLENBQUEsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDN0gsT0FBTyxHQUFnQixPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzlDO1FBQ0QsT0FBTyxPQUFPLENBQUM7SUFDbkIsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXR0cmlidXRlT2JqZWN0LCBFZGl0b3JKU1Rvb2wsIFN0eWxlT2JqZWN0IH0gZnJvbSAnLi4vLi4vdXRpbHMvZWRpdG9yanMtdG9vbC5jb21wb25lbnQnO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgSW5saW5lU3R5bGVUb29sIGV4dGVuZHMgRWRpdG9ySlNUb29sIHtcbiAgICB0YWc6IHN0cmluZztcblxuICAgIG1vZGlmaWVycyA9ICdzdHJvbmcsZW0nO1xuXG4gICAgc3R5bGU/OiBTdHlsZU9iamVjdDtcblxuICAgIGZvdW5kQW5jaG9yT2Zmc2V0OiBudW1iZXIgPSAwO1xuXG4gICAgZm91bmRGb2N1c09mZnNldDogbnVtYmVyID0gMDtcblxuICAgIGZvdW5kQW5jaG9yTm9kZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgZm91bmRGb2N1c05vZGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIHRtcE9mZnNldDogbnVtYmVyID0gMDtcblxuICAgIGNsYXNzVG9BcHBseT86IHN0cmluZztcblxuICAgIGNsYXNzZXM/OiBzdHJpbmc7XG5cbiAgICBtb2RpZmllZENvbnRlbnQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIGF0dHJpYnV0ZU5hbWU/OiBzdHJpbmc7XG5cbiAgICBhdHRyaWJ1dGVzVG9BcHBseT86IEFycmF5PEF0dHJpYnV0ZU9iamVjdD47XG5cbiAgICBsaW5rRGVsZXRpb246IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIG1vZGlmaWVzID0ge1xuICAgICAgICB0YWc6IGZhbHNlLFxuICAgICAgICBzdHlsZTogZmFsc2UsXG4gICAgICAgIGNsYXNzOiBmYWxzZSxcbiAgICAgICAgYXR0cmlidXRlOiBmYWxzZSxcbiAgICB9O1xuXG4gICAgYXN5bmMgZXhlY0NvbW1hbmRTdHlsZShhY3Rpb246IHN0cmluZykge1xuICAgICAgICBjb25zdCBzZWxlY3Rpb246IFNlbGVjdGlvbiB8IG51bGwgPSB0aGlzLmN1cnJlbnRTZWxlY3Rpb24gPyB0aGlzLmN1cnJlbnRTZWxlY3Rpb24gOiB0aGlzLmdldFNlbGVjdGlvbigpO1xuICAgICAgICBpZiAoIXNlbGVjdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGxldCBhbmNob3JOb2RlOiBOb2RlID0gc2VsZWN0aW9uLmFuY2hvck5vZGU7XG4gICAgICAgIGlmICghdGhpcy5wYXJlbnRFZGl0b3IpIHtcbiAgICAgICAgICAgIHRoaXMucGFyZW50RWRpdG9yID0gdGhpcy5maW5kUGFyZW50RWRpdG9yKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWFuY2hvck5vZGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgY29udGFpbmVyOiBIVE1MRWxlbWVudCA9XG4gICAgICAgICAgICBhbmNob3JOb2RlLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERSAmJiBhbmNob3JOb2RlLm5vZGVUeXBlICE9PSBOb2RlLkNPTU1FTlRfTk9ERVxuICAgICAgICAgICAgICAgID8gKGFuY2hvck5vZGUgYXMgSFRNTEVsZW1lbnQpXG4gICAgICAgICAgICAgICAgOiBhbmNob3JOb2RlLnBhcmVudEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IHNhbWVTZWxlY3Rpb246IGJvb2xlYW4gPSBjb250YWluZXIgJiYgY29udGFpbmVyLmlubmVyVGV4dCA9PT0gc2VsZWN0aW9uLnRvU3RyaW5nKCk7XG4gICAgICAgIGF3YWl0IHRoaXMuc2F2ZUlubGluZVNlbGVjdGlvbihjb250YWluZXIsIHRydWUpO1xuICAgICAgICBjb25zb2xlLmxvZygnaGVyZScpO1xuICAgICAgICBjb25zb2xlLmxvZyh0aGlzLmhhc1N0eWxlKGNvbnRhaW5lcikpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gTGluayBkZWxldGUgZXhjZXB0aW9uXG4gICAgICAgICAgICBpZiAodGhpcy5saW5rRGVsZXRpb24pIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJlcGxhY2VMaW5rKHNlbGVjdGlvbiwgdGhpcy5oYXNTdHlsZShjb250YWluZXIpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICBzYW1lU2VsZWN0aW9uICYmXG4gICAgICAgICAgICAgICAgICAgICF0aGlzLmlzQ29udGFpbmVyKHRoaXMudGV4dENvbnRhaW5lcnMsIGNvbnRhaW5lcikgJiZcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oYXNTdHlsZShjb250YWluZXIpICYmXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbi50b1N0cmluZygpID09PSB0aGlzLmhhc1N0eWxlKGNvbnRhaW5lcikuaW5uZXJUZXh0XG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCd1cGRhdGUnKTtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVTZWxlY3Rpb24oc2VsZWN0aW9uLCB0aGlzLmhhc1N0eWxlKGNvbnRhaW5lciksIGFjdGlvbiwgdGhpcy50ZXh0Q29udGFpbmVycyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ3JlcGxhY2UnKTtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5yZXBsYWNlU2VsZWN0aW9uKHRoaXMuZ2V0TW9zdERlc2NlbmRhbnRDaGlsZChjb250YWluZXIpLCBhY3Rpb24sIHNlbGVjdGlvbiwgdGhpcy50ZXh0Q29udGFpbmVycyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXdhaXQgdGhpcy5jbGVhbnVwQ29udGFpbmVyKHNlbGVjdGlvbiwgY29udGFpbmVyLCB0cnVlKTtcbiAgICAgICAgICAgIGlmICh0aGlzLm1vZGlmaWVkQ29udGVudCkge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmVzZXRJbmxpbmVTZWxlY3Rpb24oY29udGFpbmVyLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignSW5saW5lIFRvb2wgRXJyb3IgOiAnICsgZXJyb3IpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyB1cGRhdGVTZWxlY3Rpb24oc2VsZWN0aW9uOiBTZWxlY3Rpb24sIGNvbnRhaW5lcjogSFRNTEVsZW1lbnQsIGFjdGlvbjogc3RyaW5nLCBjb250YWluZXJzOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKHRoaXMubW9kaWZpZXMuc3R5bGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGNzcyA9IHRoaXMuc3R5bGUucHJvcGVydHk7XG4gICAgICAgICAgICBsZXQgdmFsdWUgPSBhd2FpdCB0aGlzLmdldFN0eWxlVmFsdWUoY29udGFpbmVyLCBhY3Rpb24sIGNvbnRhaW5lcnMpO1xuICAgICAgICAgICAgaWYgKHZhbHVlICE9PSB0aGlzLnN0eWxlLmRlZmF1bHQpIHtcbiAgICAgICAgICAgICAgICBjb250YWluZXIuc3R5bGVbY3NzXSA9IHZhbHVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb250YWluZXIuc3R5bGUucmVtb3ZlUHJvcGVydHkodGhpcy5zdHlsZS5wcm9wZXJ0eSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCByYW5nZTogUmFuZ2UgPSB0aGlzLmdldFJhbmdlT2JqZWN0KHNlbGVjdGlvbik7XG4gICAgICAgICAgICBsZXQgbmV3RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGhpcy5oYXNTdHlsZShjb250YWluZXIpID8gJ3NwYW4nIDogdGhpcy50YWcpO1xuICAgICAgICAgICAgaWYgKHRoaXMubW9kaWZpZXMuY2xhc3MpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJlbW92ZUNoaWxkcmVuQ2xhc3NlcyhuZXdFbGVtZW50KTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jbGFzc1RvQXBwbHkgIT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld0VsZW1lbnQuY2xhc3NMaXN0LmFkZCh0aGlzLmNsYXNzVG9BcHBseSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMubW9kaWZpZXMuYXR0cmlidXRlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzVG9BcHBseS5mb3JFYWNoKChhdHRyaWJ1dGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbmV3RWxlbWVudC5zZXRBdHRyaWJ1dGUoYXR0cmlidXRlLm5hbWUsIGF0dHJpYnV0ZS52YWx1ZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBuZXdFbGVtZW50ID0gdGhpcy5zZXRJbmxpbmVTdHlsZShjb250YWluZXIsIG5ld0VsZW1lbnQpO1xuXG4gICAgICAgICAgICB3aGlsZSAoY29udGFpbmVyLmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgICAgICAgICBsZXQgZWxlbWVudENsb25lID0gY29udGFpbmVyLmZpcnN0Q2hpbGQuY2xvbmVOb2RlKHRydWUpO1xuICAgICAgICAgICAgICAgIG5ld0VsZW1lbnQuYXBwZW5kQ2hpbGQoZWxlbWVudENsb25lKTtcbiAgICAgICAgICAgICAgICBjb250YWluZXIuZmlyc3RDaGlsZC5yZW1vdmUoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29udGFpbmVyLnBhcmVudEVsZW1lbnQucmVwbGFjZUNoaWxkKG5ld0VsZW1lbnQsIGNvbnRhaW5lcik7XG5cbiAgICAgICAgICAgIHJhbmdlLmluc2VydE5vZGUobmV3RWxlbWVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIHJlcGxhY2VTZWxlY3Rpb24oY29udGFpbmVyOiBIVE1MRWxlbWVudCwgYWN0aW9uOiBzdHJpbmcsIHNlbGVjdGlvbjogU2VsZWN0aW9uLCBjb250YWluZXJzOiBzdHJpbmcpIHtcbiAgICAgICAgbGV0IHBhcmVudENvbnRhaW5lciA9IHRoaXMuaGFzU3R5bGUoY29udGFpbmVyKTtcblxuICAgICAgICBjb25zdCBmb2N1c05vZGU6IE5vZGUgPSBzZWxlY3Rpb24uZm9jdXNOb2RlO1xuICAgICAgICBsZXQgb2Zmc2V0Q29udGFpbmVyOiBIVE1MRWxlbWVudCA9XG4gICAgICAgICAgICBmb2N1c05vZGUubm9kZVR5cGUgIT09IE5vZGUuVEVYVF9OT0RFICYmIGZvY3VzTm9kZS5ub2RlVHlwZSAhPT0gTm9kZS5DT01NRU5UX05PREVcbiAgICAgICAgICAgICAgICA/IChmb2N1c05vZGUgYXMgSFRNTEVsZW1lbnQpXG4gICAgICAgICAgICAgICAgOiBmb2N1c05vZGUucGFyZW50RWxlbWVudDtcbiAgICAgICAgbGV0IG9mZnNldFBhcmVudENvbnRhaW5lciA9IHRoaXMuaGFzU3R5bGUob2Zmc2V0Q29udGFpbmVyKTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgcGFyZW50Q29udGFpbmVyICYmXG4gICAgICAgICAgICBwYXJlbnRDb250YWluZXIgPT09IG9mZnNldFBhcmVudENvbnRhaW5lciAmJlxuICAgICAgICAgICAgKChwYXJlbnRDb250YWluZXIuY2hpbGRyZW4ubGVuZ3RoID4gMCAmJiBwYXJlbnRDb250YWluZXIuaW5uZXJUZXh0ICE9PSBwYXJlbnRDb250YWluZXIuY2hpbGRyZW5bMF0udGV4dENvbnRlbnQpIHx8XG4gICAgICAgICAgICAgICAgcGFyZW50Q29udGFpbmVyLmlubmVyVGV4dCAhPT0gc2VsZWN0aW9uLnRvU3RyaW5nKCkpXG4gICAgICAgICkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ2lmJyk7XG4gICAgICAgICAgICBjb25zdCByYW5nZTogUmFuZ2UgPSB0aGlzLmdldFJhbmdlT2JqZWN0KHNlbGVjdGlvbik7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50RnJhZ21lbnQ6IERvY3VtZW50RnJhZ21lbnQgPSByYW5nZS5leHRyYWN0Q29udGVudHMoKTtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRFbGVtZW50OiBIVE1MU3BhbkVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG4gICAgICAgICAgICBjdXJyZW50RWxlbWVudC5hcHBlbmRDaGlsZChjdXJyZW50RnJhZ21lbnQpO1xuICAgICAgICAgICAgaWYgKHRoaXMubW9kaWZpZXMuc3R5bGUgJiYgdGhpcy5zdHlsZS52YWx1ZS5pbmRleE9mKCckMScpID4gLTEpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50RWxlbWVudC5zdHlsZVt0aGlzLnN0eWxlLnByb3BlcnR5XSA9IHRoaXMuc3R5bGUudmFsdWUucmVwbGFjZSgnJDEnLCB0aGlzLnN0eWxlLmlucHV0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLm1vZGlmaWVzLmNsYXNzKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5yZW1vdmVDaGlsZHJlbkNsYXNzZXMoY3VycmVudEVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNsYXNzVG9BcHBseSAhPT0gJycpIHtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudEVsZW1lbnQuY2xhc3NMaXN0LmFkZCh0aGlzLmNsYXNzVG9BcHBseSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMubW9kaWZpZXMuYXR0cmlidXRlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzVG9BcHBseS5mb3JFYWNoKChhdHRyaWJ1dGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudEVsZW1lbnQuc2V0QXR0cmlidXRlKGF0dHJpYnV0ZS5uYW1lLCBhdHRyaWJ1dGUudmFsdWUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IGN1cnJlbnRFbGVtZW50VG9BcHBlbmQgPSBjdXJyZW50RWxlbWVudDtcbiAgICAgICAgICAgIGxldCBjdXJyZW50UGFyZW50RWxlbWVudCA9IGNvbnRhaW5lcjtcbiAgICAgICAgICAgIGlmIChwYXJlbnRDb250YWluZXIuY29udGFpbnMoY3VycmVudFBhcmVudEVsZW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgd2hpbGUgKGN1cnJlbnRQYXJlbnRFbGVtZW50ICE9PSBwYXJlbnRDb250YWluZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdjdXJyZW50UGFyZW50RWxlbWVudCcpO1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhjdXJyZW50UGFyZW50RWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIGxldCB0bXBFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChjdXJyZW50UGFyZW50RWxlbWVudC50YWdOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgdG1wRWxlbWVudCA9IHRoaXMuc2V0SW5saW5lU3R5bGUoY3VycmVudFBhcmVudEVsZW1lbnQsIHRtcEVsZW1lbnQpO1xuXG4gICAgICAgICAgICAgICAgICAgIHRtcEVsZW1lbnQuYXBwZW5kQ2hpbGQoY3VycmVudEVsZW1lbnRUb0FwcGVuZCk7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRFbGVtZW50VG9BcHBlbmQgPSB0bXBFbGVtZW50O1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50UGFyZW50RWxlbWVudCA9IGN1cnJlbnRQYXJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBpc0xUUiA9IHRoaXMuaXNBbmNob3JCZWZvcmVGb2N1cyhcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb24uYW5jaG9yTm9kZSxcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb24uYW5jaG9yT2Zmc2V0LFxuICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5mb2N1c05vZGUsXG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uLmZvY3VzT2Zmc2V0XG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBsZXQgc2VsZWN0aW9uRm9jdXNPZmZzZXQgPSBpc0xUUiA/IHNlbGVjdGlvbi5hbmNob3JPZmZzZXQgOiBzZWxlY3Rpb24uZm9jdXNPZmZzZXQ7XG4gICAgICAgICAgICBsZXQgc2VsZWN0aW9uRm9jdXNOb2RlID0gaXNMVFIgPyBzZWxlY3Rpb24uYW5jaG9yTm9kZSA6IHNlbGVjdGlvbi5mb2N1c05vZGU7XG5cbiAgICAgICAgICAgIGRvY3VtZW50LmdldFNlbGVjdGlvbigpLnNldEJhc2VBbmRFeHRlbnQocGFyZW50Q29udGFpbmVyLCAwLCBzZWxlY3Rpb25Gb2N1c05vZGUsIHNlbGVjdGlvbkZvY3VzT2Zmc2V0KTtcbiAgICAgICAgICAgIGNvbnN0IG5ld1NlbGVjdGlvbiA9IHRoaXMuZ2V0U2VsZWN0aW9uKCk7XG4gICAgICAgICAgICBsZXQgcHJlUmFuZ2U6IFJhbmdlID0gdGhpcy5nZXRSYW5nZU9iamVjdChuZXdTZWxlY3Rpb24pO1xuXG4gICAgICAgICAgICBjb25zdCBwcmVGcmFnbWVudDogRG9jdW1lbnRGcmFnbWVudCA9IHByZVJhbmdlLmV4dHJhY3RDb250ZW50cygpO1xuXG4gICAgICAgICAgICBsZXQgbmV3RWxlbWVudDogSFRNTEVsZW1lbnQgPSA8SFRNTEVsZW1lbnQ+cGFyZW50Q29udGFpbmVyLmNsb25lTm9kZSgpO1xuICAgICAgICAgICAgbmV3RWxlbWVudC5pbm5lckhUTUwgPSAnJztcbiAgICAgICAgICAgIG5ld0VsZW1lbnQuYXBwZW5kQ2hpbGQocHJlRnJhZ21lbnQpO1xuXG4gICAgICAgICAgICBwYXJlbnRDb250YWluZXIucGFyZW50RWxlbWVudC5pbnNlcnRCZWZvcmUoY3VycmVudEVsZW1lbnRUb0FwcGVuZCwgcGFyZW50Q29udGFpbmVyKTtcbiAgICAgICAgICAgIHBhcmVudENvbnRhaW5lci5wYXJlbnRFbGVtZW50Lmluc2VydEJlZm9yZShuZXdFbGVtZW50LCBjdXJyZW50RWxlbWVudFRvQXBwZW5kKTtcbiAgICAgICAgICAgIGlmICghcGFyZW50Q29udGFpbmVyLnRleHRDb250ZW50IHx8IHBhcmVudENvbnRhaW5lci50ZXh0Q29udGVudC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICBwYXJlbnRDb250YWluZXIucGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZChwYXJlbnRDb250YWluZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2VsZWN0aW9uLnNlbGVjdEFsbENoaWxkcmVuKGN1cnJlbnRFbGVtZW50VG9BcHBlbmQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ2Vsc2UnKTtcbiAgICAgICAgICAgIGNvbnN0IHJhbmdlOiBSYW5nZSA9IHRoaXMuZ2V0UmFuZ2VPYmplY3Qoc2VsZWN0aW9uKTtcbiAgICAgICAgICAgIGNvbnN0IGZyYWdtZW50OiBEb2N1bWVudEZyYWdtZW50ID0gcmFuZ2UuZXh0cmFjdENvbnRlbnRzKCk7XG4gICAgICAgICAgICBsZXQgZnJhZ21lbnRFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cbiAgICAgICAgICAgIGxldCBuZXdFbGVtZW50OiBIVE1MRWxlbWVudCB8IG51bGwgPSBhd2FpdCB0aGlzLmNyZWF0ZUVsZW1lbnQoY29udGFpbmVyLCBhY3Rpb24sIGNvbnRhaW5lcnMpO1xuICAgICAgICAgICAgbGV0IGVsZW1lbnRUb0FwcGVuZCA9IG5ld0VsZW1lbnQ7XG5cbiAgICAgICAgICAgIGZyYWdtZW50RWxlbWVudC5hcHBlbmQoZnJhZ21lbnQpO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGZyYWdtZW50RWxlbWVudC5jaGlsZHJlbj8ubGVuZ3RoID09PSAxICYmXG4gICAgICAgICAgICAgICAgdGhpcy50ZXh0Q29udGFpbmVycy5zcGxpdCgnLCcpLmluZGV4T2YoZnJhZ21lbnRFbGVtZW50LmNoaWxkcmVuWzBdLnRhZ05hbWUudG9Mb3dlckNhc2UoKSkgPiAtMVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgZWxlbWVudFRvQXBwZW5kID0gPEhUTUxFbGVtZW50PmZyYWdtZW50RWxlbWVudC5jaGlsZHJlblswXTtcbiAgICAgICAgICAgICAgICBuZXdFbGVtZW50LmlubmVySFRNTCA9ICg8SFRNTEVsZW1lbnQ+ZnJhZ21lbnRFbGVtZW50LmNoaWxkcmVuWzBdKS5pbm5lckhUTUw7XG4gICAgICAgICAgICAgICAgZWxlbWVudFRvQXBwZW5kLmlubmVySFRNTCA9ICcnO1xuICAgICAgICAgICAgICAgIGVsZW1lbnRUb0FwcGVuZC5hcHBlbmQobmV3RWxlbWVudCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG5ld0VsZW1lbnQuaW5uZXJIVE1MID0gZnJhZ21lbnRFbGVtZW50LmlubmVySFRNTDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLm1vZGlmaWVzLmNsYXNzKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5yZW1vdmVDaGlsZHJlbkNsYXNzZXMobmV3RWxlbWVudCk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY2xhc3NUb0FwcGx5ICE9PSAnJykge1xuICAgICAgICAgICAgICAgICAgICBuZXdFbGVtZW50LmNsYXNzTGlzdC5hZGQodGhpcy5jbGFzc1RvQXBwbHkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLm1vZGlmaWVzLmF0dHJpYnV0ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYXR0cmlidXRlc1RvQXBwbHkuZm9yRWFjaCgoYXR0cmlidXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIG5ld0VsZW1lbnQuc2V0QXR0cmlidXRlKGF0dHJpYnV0ZS5uYW1lLCBhdHRyaWJ1dGUudmFsdWUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByYW5nZS5pbnNlcnROb2RlKGVsZW1lbnRUb0FwcGVuZCk7XG4gICAgICAgICAgICBzZWxlY3Rpb24uc2VsZWN0QWxsQ2hpbGRyZW4oZWxlbWVudFRvQXBwZW5kKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgcmVwbGFjZUxpbmsoc2VsZWN0aW9uOiBTZWxlY3Rpb24sIGNvbnRhaW5lcjogSFRNTEVsZW1lbnQpIHtcbiAgICAgICAgbGV0IG5ld0VsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG4gICAgICAgIG5ld0VsZW1lbnQuaW5uZXJIVE1MID0gY29udGFpbmVyLmlubmVySFRNTDtcblxuICAgICAgICBjb250YWluZXIucGFyZW50RWxlbWVudC5yZXBsYWNlQ2hpbGQobmV3RWxlbWVudCwgY29udGFpbmVyKTtcbiAgICAgICAgc2VsZWN0aW9uLnNlbGVjdEFsbENoaWxkcmVuKG5ld0VsZW1lbnQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNBbmNob3JCZWZvcmVGb2N1cyhhbmNob3JOb2RlOiBOb2RlLCBhbmNob3JPZmZzZXQ6IG51bWJlciwgZm9jdXNOb2RlOiBOb2RlLCBmb2N1c09mZnNldDogbnVtYmVyKSB7XG4gICAgICAgIGxldCBhbmNob3JSYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG4gICAgICAgIGxldCBmb2N1c1JhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcbiAgICAgICAgYW5jaG9yUmFuZ2Uuc2V0U3RhcnQoYW5jaG9yTm9kZSwgYW5jaG9yT2Zmc2V0KTtcbiAgICAgICAgYW5jaG9yUmFuZ2Uuc2V0RW5kKGFuY2hvck5vZGUsIGFuY2hvck9mZnNldCk7XG4gICAgICAgIGZvY3VzUmFuZ2Uuc2V0U3RhcnQoZm9jdXNOb2RlLCBmb2N1c09mZnNldCk7XG4gICAgICAgIGZvY3VzUmFuZ2Uuc2V0RW5kKGZvY3VzTm9kZSwgZm9jdXNPZmZzZXQpO1xuICAgICAgICBpZiAoYW5jaG9yUmFuZ2UuY29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlLlNUQVJUX1RPX1NUQVJULCBmb2N1c1JhbmdlKSA9PT0gLTEpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBoYXNTdHlsZShlbGVtZW50OiBIVE1MRWxlbWVudCwgZmlyc3RUaW1lQ2FsbDogYm9vbGVhbiA9IHRydWUpOiBIVE1MRWxlbWVudCB8IG51bGwge1xuICAgICAgICBpZiAoZmlyc3RUaW1lQ2FsbCAmJiBlbGVtZW50LmNoaWxkcmVuKSB7XG4gICAgICAgICAgICBlbGVtZW50ID0gdGhpcy5nZXRNb3N0RGVzY2VuZGFudENoaWxkKDxIVE1MRWxlbWVudD5lbGVtZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGZvdW5kRWxlbWVudCB3YXMgYWRkZWQgYmVjYXVzZSBvZiBhIHJldHVybiBpc3N1ZSB3aGVuIGEgY2xhc3MgaXMgYXBwbGllZFxuICAgICAgICBsZXQgZm91bmRFbGVtZW50OiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xuXG4gICAgICAgIGlmICghZWxlbWVudCB8fCBlbGVtZW50LmNsYXNzTGlzdD8uY29udGFpbnMoJ2NlLXBhcmFncmFwaCcpKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5tb2RpZmllcy5zdHlsZSkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGVsZW1lbnQuc3R5bGUgJiZcbiAgICAgICAgICAgICAgICBlbGVtZW50LnN0eWxlW3RoaXMuc3R5bGUucHJvcGVydHldICYmXG4gICAgICAgICAgICAgICAgKHRoaXMuc3R5bGUudmFsdWUuaW5kZXhPZignJDEnKSA+IC0xID8gdHJ1ZSA6IGVsZW1lbnQuc3R5bGVbdGhpcy5zdHlsZS5wcm9wZXJ0eV0gPT09IHRoaXMuc3R5bGUudmFsdWUpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBmb3VuZEVsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMubW9kaWZpZXMuY2xhc3MpIHtcbiAgICAgICAgICAgIHRoaXMuY2xhc3Nlcy5zcGxpdCgnLCcpLmZvckVhY2goKGNsYXNzTmFtZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LmNsYXNzTGlzdD8uY29udGFpbnMoY2xhc3NOYW1lKSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICBmb3VuZEVsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLm1vZGlmaWVzLnRhZykge1xuICAgICAgICAgICAgaWYgKGVsZW1lbnQudGFnTmFtZT8udG9Mb3dlckNhc2UoKSA9PT0gdGhpcy50YWcudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMubW9kaWZpZXMuYXR0cmlidXRlKSB7XG4gICAgICAgICAgICBsZXQgYXR0cmlidXRlcyA9IHRoaXMuYXR0cmlidXRlTmFtZS5zcGxpdCgnLCcpO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRyaWJ1dGVzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBlbGVtZW50LmdldEF0dHJpYnV0ZSA9PT0gJ2Z1bmN0aW9uJyAmJiBlbGVtZW50LmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVzW2ldKSkge1xuICAgICAgICAgICAgICAgICAgICBmb3VuZEVsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZvdW5kRWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIGZvdW5kRWxlbWVudDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWZvdW5kRWxlbWVudCAmJiBlbGVtZW50LnBhcmVudEVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmhhc1N0eWxlKGVsZW1lbnQucGFyZW50RWxlbWVudCwgZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgZ2V0U3R5bGVWYWx1ZShjb250YWluZXI6IEhUTUxFbGVtZW50LCBhY3Rpb246IHN0cmluZywgY29udGFpbmVyczogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XG4gICAgICAgIGlmICghY29udGFpbmVyKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdHlsZS52YWx1ZS5pbmRleE9mKCckMScpID4gLTEgPyB0aGlzLnN0eWxlLnZhbHVlLnJlcGxhY2UoJyQxJywgdGhpcy5zdHlsZS5pbnB1dCkgOiB0aGlzLnN0eWxlLnZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaGFzU3R5bGUoY29udGFpbmVyKSAmJiB0aGlzLnN0eWxlLnZhbHVlLmluZGV4T2YoJyQxJykgPT09IC0xKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdHlsZS5kZWZhdWx0O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc3R5bGU6IE5vZGUgfCBudWxsID0gYXdhaXQgdGhpcy5maW5kU3R5bGVOb2RlKGNvbnRhaW5lciwgYWN0aW9uLCBjb250YWluZXJzKTtcbiAgICAgICAgaWYgKHN0eWxlICYmIHRoaXMuaGFzU3R5bGUoc3R5bGUgYXMgSFRNTEVsZW1lbnQpICYmIHRoaXMuc3R5bGUudmFsdWUuaW5kZXhPZignJDEnKSA9PT0gLTEpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN0eWxlLmRlZmF1bHQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5zdHlsZS52YWx1ZS5pbmRleE9mKCckMScpID4gLTEgPyB0aGlzLnN0eWxlLnZhbHVlLnJlcGxhY2UoJyQxJywgdGhpcy5zdHlsZS5pbnB1dCkgOiB0aGlzLnN0eWxlLnZhbHVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgZmluZFN0eWxlTm9kZShub2RlOiBOb2RlLCBzdHlsZTogc3RyaW5nLCBjb250YWluZXJzOiBzdHJpbmcpOiBQcm9taXNlPE5vZGUgfCBudWxsPiB7XG4gICAgICAgIGlmIChub2RlLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCkgPT09ICdIVE1MJyB8fCBub2RlLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCkgPT09ICdCT0RZJykge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIW5vZGUucGFyZW50Tm9kZSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pc0NvbnRhaW5lcihjb250YWluZXJzLCBub2RlKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBoYXNTdHlsZTogYm9vbGVhbiA9XG4gICAgICAgICAgICAobm9kZSBhcyBIVE1MRWxlbWVudCkuc3R5bGVbc3R5bGVdICE9PSBudWxsICYmXG4gICAgICAgICAgICAobm9kZSBhcyBIVE1MRWxlbWVudCkuc3R5bGVbc3R5bGVdICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgIChub2RlIGFzIEhUTUxFbGVtZW50KS5zdHlsZVtzdHlsZV0gIT09ICcnO1xuXG4gICAgICAgIGlmIChoYXNTdHlsZSkge1xuICAgICAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5maW5kU3R5bGVOb2RlKG5vZGUucGFyZW50Tm9kZSwgc3R5bGUsIGNvbnRhaW5lcnMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgY3JlYXRlRWxlbWVudChjb250YWluZXI6IEhUTUxFbGVtZW50LCBhY3Rpb246IHN0cmluZywgY29udGFpbmVyczogc3RyaW5nKTogUHJvbWlzZTxIVE1MRWxlbWVudD4ge1xuICAgICAgICBsZXQgbmV3RWxlbWVudDogSFRNTEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRoaXMudGFnKTtcbiAgICAgICAgaWYgKHRoaXMubW9kaWZpZXMuc3R5bGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHByb3BlcnR5ID0gdGhpcy5zdHlsZS5wcm9wZXJ0eTtcbiAgICAgICAgICAgIGxldCB2YWx1ZSA9IGF3YWl0IHRoaXMuZ2V0U3R5bGVWYWx1ZShjb250YWluZXIsIGFjdGlvbiwgY29udGFpbmVycyk7XG4gICAgICAgICAgICBpZiAodmFsdWUgIT09IHRoaXMuc3R5bGUuZGVmYXVsdCkge1xuICAgICAgICAgICAgICAgIG5ld0VsZW1lbnQuc3R5bGVbcHJvcGVydHldID0gdmFsdWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG5ld0VsZW1lbnQuc3R5bGUucmVtb3ZlUHJvcGVydHkocHJvcGVydHkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ld0VsZW1lbnQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyByZW1vdmVDaGlsZHJlbkNsYXNzZXMoZWxlbWVudDogSFRNTEVsZW1lbnQpIHtcbiAgICAgICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjaGlsZHJlbjogSFRNTENvbGxlY3Rpb24gPSBlbGVtZW50LmNoaWxkcmVuO1xuICAgICAgICBmb3IgKHZhciBjdXJyZW50RWxlbWVudCA9IGNoaWxkcmVuWzBdOyBjdXJyZW50RWxlbWVudDsgY3VycmVudEVsZW1lbnQgPSBjdXJyZW50RWxlbWVudC5uZXh0RWxlbWVudFNpYmxpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuY2xhc3Nlcy5zcGxpdCgnLCcpLmZvckVhY2goKGNsYXNzTmFtZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50RWxlbWVudC5jbGFzc0xpc3Q/LmNvbnRhaW5zKGNsYXNzTmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRFbGVtZW50LmNsYXNzTGlzdC5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRFbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnY2xhc3MnKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoY2xhc3NOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRFbGVtZW50LmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJlbW92ZUNoaWxkcmVuQ2xhc3Nlcyg8SFRNTEVsZW1lbnQ+Y3VycmVudEVsZW1lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBjbGVhbnVwQ29udGFpbmVyKHNlbGVjdGlvbjogU2VsZWN0aW9uLCBjb250YWluZXIsIGZpcnN0VGltZUNhbGw6IEJvb2xlYW4pIHtcbiAgICAgICAgbGV0IHBhcmVudENvbnRhaW5lcjogSFRNTEVsZW1lbnQ7XG4gICAgICAgIGxldCBwYXJlbnRGb3VuZDogQm9vbGVhbiA9IGZhbHNlO1xuICAgICAgICBpZiAoZmlyc3RUaW1lQ2FsbCkge1xuICAgICAgICAgICAgcGFyZW50Q29udGFpbmVyID0gPEhUTUxFbGVtZW50PnNlbGVjdGlvbi5hbmNob3JOb2RlO1xuICAgICAgICAgICAgd2hpbGUgKHBhcmVudENvbnRhaW5lciAmJiAhcGFyZW50Rm91bmQpIHtcbiAgICAgICAgICAgICAgICBpZiAocGFyZW50Q29udGFpbmVyLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSAmJiBwYXJlbnRDb250YWluZXIuY2xhc3NMaXN0Py5jb250YWlucygnY2UtcGFyYWdyYXBoJykpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50Rm91bmQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmVudENvbnRhaW5lciA9IHBhcmVudENvbnRhaW5lci5wYXJlbnRFbGVtZW50O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBhcmVudENvbnRhaW5lciA9IGNvbnRhaW5lcjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXBhcmVudENvbnRhaW5lciB8fCAhcGFyZW50Q29udGFpbmVyLmhhc0NoaWxkTm9kZXMoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcGFyZW50Q29udGFpbmVyLm5vcm1hbGl6ZSgpO1xuXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuOiBOb2RlW10gPSBBcnJheS5mcm9tKHBhcmVudENvbnRhaW5lci5jaGlsZE5vZGVzKTtcbiAgICAgICAgaWYgKGNoaWxkcmVuPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBjdXJyZW50Tm9kZSA9IGNoaWxkcmVuWzBdOyBjdXJyZW50Tm9kZTsgY3VycmVudE5vZGUgPSBjdXJyZW50Tm9kZS5uZXh0U2libGluZykge1xuICAgICAgICAgICAgICAgIGlmICghY3VycmVudE5vZGUudGV4dENvbnRlbnQgfHwgY3VycmVudE5vZGUudGV4dENvbnRlbnQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmVudENvbnRhaW5lci5yZW1vdmVDaGlsZChjdXJyZW50Tm9kZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnROb2RlLmNoaWxkTm9kZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5jbGVhbnVwQ29udGFpbmVyKHNlbGVjdGlvbiwgY3VycmVudE5vZGUsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBsZXQgaWRlbnRpY2FsRWxlbWVudHMgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSAoXG4gICAgICAgICAgICAgICAgICAgICAgICBpZGVudGljYWxFbGVtZW50cyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudE5vZGUubmV4dFNpYmxpbmcgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnROb2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudE5vZGUubmV4dFNpYmxpbmcubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGN1cnJlbnRFbGVtZW50ID0gPEVsZW1lbnQ+Y3VycmVudE5vZGU7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbmV4dEVsZW1lbnQgPSA8RWxlbWVudD5jdXJyZW50Tm9kZS5uZXh0U2libGluZztcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlkZW50aWNhbElubGluZVN0eWxlKGN1cnJlbnRFbGVtZW50LCBuZXh0RWxlbWVudCkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50RWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09IG5leHRFbGVtZW50LnRhZ05hbWUudG9Mb3dlckNhc2UoKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaWRlbnRpY2FsQ2xhc3NMaXN0KGN1cnJlbnRFbGVtZW50LCBuZXh0RWxlbWVudCkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhKDxFbGVtZW50PmN1cnJlbnRFbGVtZW50KS5oYXNBdHRyaWJ1dGVzKCkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhKDxFbGVtZW50Pm5leHRFbGVtZW50KS5oYXNBdHRyaWJ1dGVzKClcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRFbGVtZW50LmlubmVySFRNTCArPSBuZXh0RWxlbWVudC5pbm5lckhUTUw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dEVsZW1lbnQucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tb2RpZmllZENvbnRlbnQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZGVudGljYWxFbGVtZW50cyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnROb2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgKDxFbGVtZW50PmN1cnJlbnROb2RlKS50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdzcGFuJyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmtleXModGhpcy5nZXRJbmxpbmVTdHlsZSg8RWxlbWVudD5jdXJyZW50Tm9kZSkpLmxlbmd0aCA9PT0gMCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgKCEoPEVsZW1lbnQ+Y3VycmVudE5vZGUpLmNsYXNzTGlzdCB8fCAoPEVsZW1lbnQ+Y3VycmVudE5vZGUpLmNsYXNzTGlzdC5sZW5ndGggPT09IDApICYmXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhhc05vQXR0cmlidXRlcyg8RWxlbWVudD5jdXJyZW50Tm9kZSlcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgY3VycmVudE5vZGVGaXJzdENoaWxkID0gY3VycmVudE5vZGU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChjdXJyZW50Tm9kZS5maXJzdENoaWxkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxFbGVtZW50PmN1cnJlbnROb2RlRmlyc3RDaGlsZC5wYXJlbnRFbGVtZW50KS5pbnNlcnRCZWZvcmUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnROb2RlLmZpcnN0Q2hpbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnROb2RlRmlyc3RDaGlsZC5uZXh0U2libGluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudE5vZGVGaXJzdENoaWxkID0gY3VycmVudE5vZGVGaXJzdENoaWxkLm5leHRTaWJsaW5nO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgKDxFbGVtZW50PmN1cnJlbnROb2RlKS5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubW9kaWZpZWRDb250ZW50ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50Tm9kZS5ub3JtYWxpemUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGhhc05vQXR0cmlidXRlcyhub2RlOiBFbGVtZW50KTogYm9vbGVhbiB7XG4gICAgICAgIGxldCBub2RlU3R5bGUgPSBPYmplY3Qua2V5cyh0aGlzLmdldElubGluZVN0eWxlKG5vZGUpKTtcbiAgICAgICAgbGV0IG5vZGVBdHRyaWJ1dGVzID0gT2JqZWN0LmtleXMoXG4gICAgICAgICAgICBub2RlLmdldEF0dHJpYnV0ZU5hbWVzKCkucmVkdWNlKChhY2MsIG5hbWUpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyAuLi5hY2MsIFtuYW1lXTogbm9kZS5nZXRBdHRyaWJ1dGUobmFtZSkgfTtcbiAgICAgICAgICAgIH0sIHt9KVxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChub2RlQXR0cmlidXRlcy5sZW5ndGggPT09IDAgfHwgKG5vZGVBdHRyaWJ1dGVzLmxlbmd0aCA9PT0gMSAmJiBub2RlU3R5bGUubGVuZ3RoID09PSAwKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgaWRlbnRpY2FsQ2xhc3NMaXN0KGN1cnJlbnRFbGVtZW50LCBuZXh0RWxlbWVudCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgWy4uLmN1cnJlbnRFbGVtZW50LmNsYXNzTGlzdF0uZXZlcnkoKGNsYXNzTGlzdCkgPT4gbmV4dEVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKGNsYXNzTGlzdCkpICYmXG4gICAgICAgICAgICBbLi4ubmV4dEVsZW1lbnQuY2xhc3NMaXN0XS5ldmVyeSgoY2xhc3NMaXN0KSA9PiBjdXJyZW50RWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NMaXN0KSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlkZW50aWNhbElubGluZVN0eWxlKGN1cnJlbnRFbGVtZW50LCBuZXh0RWxlbWVudCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBjdXJyZW50RWxlbWVudElubGluZVN0eWxlID0gdGhpcy5nZXRJbmxpbmVTdHlsZShjdXJyZW50RWxlbWVudCk7XG4gICAgICAgIGNvbnN0IG5leHRFbGVtZW50SW5saW5lU3R5bGUgPSB0aGlzLmdldElubGluZVN0eWxlKG5leHRFbGVtZW50KTtcbiAgICAgICAgbGV0IGN1cnJlbnRFbGVtZW50SW5saW5lU3R5bGVTb3J0ZWQgPSB0aGlzLnNvcnRJbmxpbmVTdHlsZShjdXJyZW50RWxlbWVudElubGluZVN0eWxlKTtcbiAgICAgICAgbGV0IG5leHRFbGVtZW50SW5saW5lU3R5bGVTb3J0ZWQgPSB0aGlzLnNvcnRJbmxpbmVTdHlsZShuZXh0RWxlbWVudElubGluZVN0eWxlKTtcbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGN1cnJlbnRFbGVtZW50SW5saW5lU3R5bGVTb3J0ZWQpID09PSBKU09OLnN0cmluZ2lmeShuZXh0RWxlbWVudElubGluZVN0eWxlU29ydGVkKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNvcnRJbmxpbmVTdHlsZShjdXJyZW50RWxlbWVudCk6IE9iamVjdCB7XG4gICAgICAgIHJldHVybiBPYmplY3QuZW50cmllcyhjdXJyZW50RWxlbWVudClcbiAgICAgICAgICAgIC5zb3J0KChbLCBhXTogYW55LCBbLCBiXTogYW55KSA9PiBhIC0gYilcbiAgICAgICAgICAgIC5yZWR1Y2UoKHIsIFtrLCB2XSkgPT4gKHsgLi4uciwgW2tdOiB2IH0pLCB7fSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRJbmxpbmVTdHlsZShjdXJyZW50RWxlbWVudCk6IE9iamVjdCB7XG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKGN1cnJlbnRFbGVtZW50LnN0eWxlKS5yZWR1Y2UoKHN0eWxlOiBzdHJpbmcsIG5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgc3R5bGVbbmFtZV0gPSBjdXJyZW50RWxlbWVudC5zdHlsZVtuYW1lXTtcbiAgICAgICAgICAgIHJldHVybiBzdHlsZTtcbiAgICAgICAgfSwge30pO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0SW5saW5lU3R5bGUoY3VycmVudEVsZW1lbnQsIG5leHRFbGVtZW50KTogSFRNTEVsZW1lbnQge1xuICAgICAgICBjb25zdCBjdXJyZW50RWxlbWVudElubGluZVN0eWxlOiBPYmplY3QgPSBBcnJheS5mcm9tKGN1cnJlbnRFbGVtZW50LnN0eWxlKS5yZWR1Y2UoKHN0eWxlOiBzdHJpbmcsIG5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgc3R5bGVbbmFtZV0gPSBjdXJyZW50RWxlbWVudC5zdHlsZVtuYW1lXTtcbiAgICAgICAgICAgIHJldHVybiBzdHlsZTtcbiAgICAgICAgfSwge30pO1xuICAgICAgICBmb3IgKGNvbnN0IHByb3BlcnR5IGluIGN1cnJlbnRFbGVtZW50SW5saW5lU3R5bGUpIHtcbiAgICAgICAgICAgIG5leHRFbGVtZW50LnN0eWxlW3Byb3BlcnR5XSA9IGN1cnJlbnRFbGVtZW50SW5saW5lU3R5bGVbcHJvcGVydHldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXh0RWxlbWVudDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzQ29udGFpbmVyKGNvbnRhaW5lcnM6IHN0cmluZywgbm9kZTogTm9kZSk6IEJvb2xlYW4ge1xuICAgICAgICBpZiAoY29udGFpbmVycy5zcGxpdCgnLCcpLmluZGV4T2Yobm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKSA9PT0gLTEpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIHNhdmVJbmxpbmVTZWxlY3Rpb24oY29udGFpbmVyOiBIVE1MRWxlbWVudCwgZmlyc3RUaW1lQ2FsbDogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgICAgIGlmIChmaXJzdFRpbWVDYWxsKSB7XG4gICAgICAgICAgICBjb250YWluZXIgPSA8SFRNTEVsZW1lbnQ+dGhpcy5wYXJlbnRFZGl0b3IucXVlcnlTZWxlY3RvcignLmNlLXBhcmFncmFwaCcpLmZpcnN0RWxlbWVudENoaWxkO1xuICAgICAgICAgICAgdGhpcy5mb3VuZEFuY2hvck5vZGUgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZm91bmRGb2N1c05vZGUgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZm91bmRBbmNob3JPZmZzZXQgPSAwO1xuICAgICAgICAgICAgdGhpcy5mb3VuZEZvY3VzT2Zmc2V0ID0gMDtcblxuICAgICAgICAgICAgaWYgKHRoaXMuZ2V0U2VsZWN0aW9uKCkudG9TdHJpbmcoKSA9PT0gKDxIVE1MRWxlbWVudD50aGlzLnBhcmVudEVkaXRvci5xdWVyeVNlbGVjdG9yKCcuY2UtcGFyYWdyYXBoJykpLnRleHRDb250ZW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3VuZEFuY2hvck9mZnNldCA9IDA7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3VuZEFuY2hvck5vZGUgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5mb3VuZEZvY3VzT2Zmc2V0ID0gdGhpcy5nZXRTZWxlY3Rpb24oKS50b1N0cmluZygpLmxlbmd0aDtcbiAgICAgICAgICAgICAgICB0aGlzLmZvdW5kRm9jdXNOb2RlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbGV0IG5leHROb2RlID0gY29udGFpbmVyLmZpcnN0Q2hpbGQ7XG4gICAgICAgIHdoaWxlIChuZXh0Tm9kZSAmJiAoIXRoaXMuZm91bmRBbmNob3JOb2RlIHx8ICF0aGlzLmZvdW5kRm9jdXNOb2RlKSkge1xuICAgICAgICAgICAgaWYgKG5leHROb2RlID09PSB0aGlzLnNlbGVjdGVkQW5jaG9yTm9kZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZm91bmRBbmNob3JOb2RlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmZvdW5kQW5jaG9yT2Zmc2V0ICs9IHRoaXMuYW5jaG9yT2Zmc2V0O1xuICAgICAgICAgICAgICAgIGxldCBzZWxlY3Rpb24gPSB0aGlzLmdldFNlbGVjdGlvbigpO1xuICAgICAgICAgICAgICAgIGxldCByYW5nZSA9IHRoaXMuZ2V0UmFuZ2VPYmplY3Qoc2VsZWN0aW9uKTtcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50RnJhZ21lbnQ6IERvY3VtZW50RnJhZ21lbnQgPSByYW5nZS5jbG9uZUNvbnRlbnRzKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudEVsZW1lbnQ6IEhUTUxTcGFuRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcbiAgICAgICAgICAgICAgICBjdXJyZW50RWxlbWVudC5hcHBlbmRDaGlsZChjdXJyZW50RnJhZ21lbnQpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5mb3VuZEZvY3VzT2Zmc2V0ID0gdGhpcy5mb3VuZEFuY2hvck9mZnNldCArIGN1cnJlbnRFbGVtZW50LmlubmVyVGV4dC5sZW5ndGg7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3VuZEZvY3VzTm9kZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgY3VycmVudEVsZW1lbnQucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG5leHROb2RlLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5mb3VuZEFuY2hvck5vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3VuZEFuY2hvck9mZnNldCArPSBuZXh0Tm9kZS50ZXh0Q29udGVudC5sZW5ndGg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5mb3VuZEZvY3VzTm9kZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvdW5kRm9jdXNPZmZzZXQgKz0gbmV4dE5vZGUudGV4dENvbnRlbnQubGVuZ3RoO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChuZXh0Tm9kZS5maXJzdENoaWxkKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zYXZlSW5saW5lU2VsZWN0aW9uKDxIVE1MRWxlbWVudD5uZXh0Tm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBuZXh0Tm9kZSA9IG5leHROb2RlLm5leHRTaWJsaW5nO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyByZXNldElubGluZVNlbGVjdGlvbihjb250YWluZXI6IEhUTUxFbGVtZW50IHwgbnVsbCA9IG51bGwsIGZpcnN0VGltZUNhbGw6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgICAgICBpZiAoZmlyc3RUaW1lQ2FsbCkge1xuICAgICAgICAgICAgY29udGFpbmVyID0gPEhUTUxFbGVtZW50PnRoaXMucGFyZW50RWRpdG9yLnF1ZXJ5U2VsZWN0b3IoJy5jZS1wYXJhZ3JhcGgnKS5maXJzdEVsZW1lbnRDaGlsZDtcbiAgICAgICAgICAgIHRoaXMuZm91bmRBbmNob3JOb2RlID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmZvdW5kRm9jdXNOb2RlID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnRtcE9mZnNldCA9IDA7XG5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICB0aGlzLmZvdW5kQW5jaG9yT2Zmc2V0ID09PSAwICYmXG4gICAgICAgICAgICAgICAgKDxIVE1MRWxlbWVudD50aGlzLnBhcmVudEVkaXRvci5xdWVyeVNlbGVjdG9yKCcuY2UtcGFyYWdyYXBoJykpLnRleHRDb250ZW50Lmxlbmd0aCA9PT0gdGhpcy5mb3VuZEZvY3VzT2Zmc2V0XG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkQW5jaG9yTm9kZSA9ICg8SFRNTEVsZW1lbnQ+dGhpcy5wYXJlbnRFZGl0b3IucXVlcnlTZWxlY3RvcignLmNlLXBhcmFncmFwaCcpKS5maXJzdEVsZW1lbnRDaGlsZDtcbiAgICAgICAgICAgICAgICB0aGlzLmFuY2hvck9mZnNldCA9IDA7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZvY3VzTm9kZSA9ICg8SFRNTEVsZW1lbnQ+dGhpcy5wYXJlbnRFZGl0b3IucXVlcnlTZWxlY3RvcignLmNlLXBhcmFncmFwaCcpKS5maXJzdEVsZW1lbnRDaGlsZDtcbiAgICAgICAgICAgICAgICB0aGlzLmZvY3VzT2Zmc2V0ID0gMTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc2V0VXNlclNlbGVjdGlvbigpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsZXQgbmV4dE5vZGUgPSBjb250YWluZXIuZmlyc3RDaGlsZDtcbiAgICAgICAgd2hpbGUgKG5leHROb2RlICYmICghdGhpcy5mb3VuZEFuY2hvck5vZGUgfHwgIXRoaXMuZm91bmRGb2N1c05vZGUpKSB7XG4gICAgICAgICAgICBpZiAobmV4dE5vZGUubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmZvdW5kQW5jaG9yTm9kZSAmJiB0aGlzLmZvdW5kQW5jaG9yT2Zmc2V0IC0gbmV4dE5vZGUudGV4dENvbnRlbnQubGVuZ3RoIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvdW5kQW5jaG9yTm9kZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYW5jaG9yT2Zmc2V0ID0gdGhpcy5mb3VuZEFuY2hvck9mZnNldDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEFuY2hvck5vZGUgPSBuZXh0Tm9kZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmZvdW5kRm9jdXNOb2RlICYmIHRoaXMuZm91bmRGb2N1c09mZnNldCAtIG5leHROb2RlLnRleHRDb250ZW50Lmxlbmd0aCA8PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm91bmRGb2N1c05vZGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvY3VzT2Zmc2V0ID0gdGhpcy5mb3VuZEZvY3VzT2Zmc2V0O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRm9jdXNOb2RlID0gbmV4dE5vZGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMudG1wT2Zmc2V0ICs9IG5leHROb2RlLnRleHRDb250ZW50Lmxlbmd0aDtcbiAgICAgICAgICAgICAgICB0aGlzLmZvdW5kQW5jaG9yT2Zmc2V0IC09IG5leHROb2RlLnRleHRDb250ZW50Lmxlbmd0aDtcbiAgICAgICAgICAgICAgICB0aGlzLmZvdW5kRm9jdXNPZmZzZXQgLT0gbmV4dE5vZGUudGV4dENvbnRlbnQubGVuZ3RoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG5leHROb2RlLmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJlc2V0SW5saW5lU2VsZWN0aW9uKDxIVE1MRWxlbWVudD5uZXh0Tm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBuZXh0Tm9kZSA9IG5leHROb2RlLm5leHRTaWJsaW5nO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmaXJzdFRpbWVDYWxsKSB7XG4gICAgICAgICAgICB0aGlzLnJlc2V0VXNlclNlbGVjdGlvbigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRNb3N0RGVzY2VuZGFudENoaWxkKGVsZW1lbnQ6IEhUTUxFbGVtZW50KSB7XG4gICAgICAgIHdoaWxlIChlbGVtZW50LmNoaWxkcmVuICYmIGVsZW1lbnQuaW5uZXJUZXh0ID09PSAoPEhUTUxFbGVtZW50PmVsZW1lbnQuY2hpbGRyZW5bMF0pPy5pbm5lclRleHQgJiYgZWxlbWVudC5jaGlsZHJlbi5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIGVsZW1lbnQgPSA8SFRNTEVsZW1lbnQ+ZWxlbWVudC5jaGlsZHJlblswXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9XG59XG4iXX0=
|
package/esm2015/lib/shared/components/editorjs/tools/paragraph/tool-type/text-edition.component.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { ParagraphStyleTool } from './paragraph-style-tool.component';
|
|
2
|
-
import * as monaco from 'monaco-editor';
|
|
3
2
|
import { LIST_EDIT_KEY_CODES } from '../../utils/colors.component';
|
|
4
3
|
import { editorJSI18nDictionnary } from '../../utils/editorjs-translation.service';
|
|
4
|
+
import { EditorView, basicSetup } from 'codemirror';
|
|
5
|
+
import { EditorState } from '@codemirror/state';
|
|
6
|
+
import { html } from '@codemirror/lang-html';
|
|
5
7
|
export class TextEditionTool extends ParagraphStyleTool {
|
|
6
8
|
constructor() {
|
|
7
9
|
super(...arguments);
|
|
@@ -70,16 +72,16 @@ export class TextEditionTool extends ParagraphStyleTool {
|
|
|
70
72
|
modal.appendChild(editorContainer);
|
|
71
73
|
modal.appendChild(buttonContainer);
|
|
72
74
|
container.appendChild(modal);
|
|
73
|
-
document.
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
ariaContainerElement: container
|
|
75
|
+
document.body.appendChild(container);
|
|
76
|
+
let state = EditorState.create({
|
|
77
|
+
doc: content,
|
|
78
|
+
extensions: [basicSetup, html()],
|
|
78
79
|
});
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
}
|
|
80
|
+
let view = new EditorView({
|
|
81
|
+
state: state,
|
|
82
|
+
parent: editorContainer,
|
|
83
|
+
});
|
|
84
|
+
saveButton.addEventListener('click', () => saveCodeEditModal(view.state.doc.toString()), true);
|
|
83
85
|
buttonContainer.appendChild(saveButton);
|
|
84
86
|
}
|
|
85
87
|
getSavedEditorContent(name) {
|
|
@@ -263,4 +265,4 @@ function onEditList(event) {
|
|
|
263
265
|
}
|
|
264
266
|
}
|
|
265
267
|
}
|
|
266
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC1lZGl0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIvaG9tZS9wYXVsaW5lL0RvY3VtZW50cy93b3Jrc3BhY2Uvd2l6aS1ibG9jay9wcm9qZWN0cy93aXppLWJsb2NrL3NyYy8iLCJzb3VyY2VzIjpbImxpYi9zaGFyZWQvY29tcG9uZW50cy9lZGl0b3Jqcy90b29scy9wYXJhZ3JhcGgvdG9vbC10eXBlL3RleHQtZWRpdGlvbi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDdEUsT0FBTyxLQUFLLE1BQU0sTUFBTSxlQUFlLENBQUM7QUFDeEMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbkUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFFbkYsTUFBTSxPQUFnQixlQUFnQixTQUFRLGtCQUFrQjtJQUFoRTs7UUFLSSxtQkFBYyxHQUFHLHFCQUFxQixDQUFDO1FBQ3ZDLGVBQVUsR0FBRyw0QkFBNEIsQ0FBQztRQUMxQyxnQkFBVyxHQUFHLG9DQUFvQyxDQUFDO1FBQ25ELGdCQUFXLEdBQUcscUNBQXFDLENBQUM7SUF5S3hELENBQUM7SUF2S0csSUFBSTtRQUNBLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3JDLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdEQsSUFBSSxjQUFjLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsUUFBUSxDQUFDO1lBQ2pFLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsUUFBUSxDQUFDLENBQUM7WUFDNUQsQ0FBQyxDQUFDLENBQUMsQ0FBQyxD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Jy4vcGFyYWdyYXBoLXN0eWxlLXRvb2wuY29tcG9uZW50JztcbmltcG9ydCAqIGFzIG1vbmFjbyBmcm9tICdtb25hY28tZWRpdG9yJztcbmltcG9ydCB7IExJU1RfRURJVF9LRVlfQ09ERVMgfSBmcm9tICcuLi8uLi91dGlscy9jb2xvcnMuY29tcG9uZW50JztcbmltcG9ydCB7IGVkaXRvckpTSTE4bkRpY3Rpb25uYXJ5IH0gZnJvbSAnLi4vLi4vdXRpbHMvZWRpdG9yanMtdHJhbnNsYXRpb24uc2VydmljZSc7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBUZXh0RWRpdGlvblRvb2wgZXh0ZW5kcyBQYXJhZ3JhcGhTdHlsZVRvb2wge1xuICAgIG5vZGVzOiB7IGJ1dHRvbjogSFRNTEJ1dHRvbkVsZW1lbnQgfTtcblxuICAgIENTUzogYW55O1xuXG4gICAgY29udGFpbmVyQ2xhc3MgPSAnY29kZUVkaXRfX2NvbnRhaW5lcic7XG4gICAgbW9kYWxDbGFzcyA9ICdjb2RlRWRpdF9fY29udGFpbmVyX19tb2RhbCc7XG4gICAgZWRpdG9yQ2xhc3MgPSAnY29kZUVkaXRfX2NvbnRhaW5lcl9fbW9kYWxfX2VkaXRvcic7XG4gICAgYnV0dG9uQ2xhc3MgPSAnY29kZUVkaXRfX2NvbnRhaW5lcl9fbW9kYWxfX2J1dHRvbnMnO1xuXG4gICAgdW5kbygpIHtcbiAgICAgICAgbGV0IGVkaXRvciA9IHRoaXMuZmluZFBhcmVudEVkaXRvcigpO1xuICAgICAgICBsZXQgc2F2ZWREYXRhID0gdGhpcy5nZXRTYXZlZEVkaXRvckNvbnRlbnQoZWRpdG9yLmlkKTtcbiAgICAgICAgbGV0IHNhdmVkRGF0YUluZGV4ID0gdGhpcy5nZXRTYXZlZEVkaXRvckNvbnRlbnQoZWRpdG9yLmlkICsgJy1pbmRleCcpXG4gICAgICAgICAgICA/IHBhcnNlSW50KHRoaXMuZ2V0U2F2ZWRFZGl0b3JDb250ZW50KGVkaXRvci5pZCArICctaW5kZXgnKSlcbiAgICAgICAgICAgIDogLTE7XG4gICAgICAgIGxldCBwYXJzZWRTYXZlZERhdGE6IEFycmF5PHN0cmluZz4gPSBbXTtcbiAgICAgICAgaWYgKCFzYXZlZERhdGEpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBwYXJzZWRTYXZlZERhdGEgPSBKU09OLnBhcnNlKHNhdmVkRGF0YSk7XG4gICAgICAgIC0tc2F2ZWREYXRhSW5kZXg7XG4gICAgICAgIHNhdmVkRGF0YUluZGV4ID0gc2F2ZWREYXRhSW5kZXggPCAwID8gMCA6IHNhdmVkRGF0YUluZGV4O1xuICAgICAgICBjb2RlRWRpdEVkaXRvciA9IHRoaXMuZmluZFBhcmVudEVkaXRvcigpO1xuICAgICAgICBjb2RlRWRpdEFwaSA9IHRoaXMuYXBpO1xuICAgICAgICBzYXZlQ29kZUVkaXRNb2RhbChwYXJzZWRTYXZlZERhdGFbc2F2ZWREYXRhSW5kZXhdKTtcbiAgICAgICAgdGhpcy5zZXRTYXZlZEVkaXRvckNvbnRlbnQoZWRpdG9yLmlkICsgJy1pbmRleCcsIHNhdmVkRGF0YUluZGV4LnRvU3RyaW5nKCkpO1xuICAgIH1cblxuICAgIHJlZG8oKSB7XG4gICAgICAgIGxldCBlZGl0b3IgPSB0aGlzLmZpbmRQYXJlbnRFZGl0b3IoKTtcblxuICAgICAgICBsZXQgc2F2ZWREYXRhID0gdGhpcy5nZXRTYXZlZEVkaXRvckNvbnRlbnQoZWRpdG9yLmlkKTtcbiAgICAgICAgbGV0IHNhdmVkRGF0YUluZGV4ID0gdGhpcy5nZXRTYXZlZEVkaXRvckNvbnRlbnQoZWRpdG9yLmlkICsgJy1pbmRleCcpXG4gICAgICAgICAgICA/IHBhcnNlSW50KHRoaXMuZ2V0U2F2ZWRFZGl0b3JDb250ZW50KGVkaXRvci5pZCArICctaW5kZXgnKSlcbiAgICAgICAgICAgIDogLTE7XG4gICAgICAgIGxldCBwYXJzZWRTYXZlZERhdGE6IEFycmF5PHN0cmluZz4gPSBbXTtcbiAgICAgICAgaWYgKCFzYXZlZERhdGEpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBwYXJzZWRTYXZlZERhdGEgPSBKU09OLnBhcnNlKHNhdmVkRGF0YSk7XG4gICAgICAgICsrc2F2ZWREYXRhSW5kZXg7XG4gICAgICAgIHNhdmVkRGF0YUluZGV4ID0gc2F2ZWREYXRhSW5kZXggPiBwYXJzZWRTYXZlZERhdGEubGVuZ3RoID8gcGFyc2VkU2F2ZWREYXRhLmxlbmd0aCA6IHNhdmVkRGF0YUluZGV4O1xuICAgICAgICBjb2RlRWRpdEVkaXRvciA9IHRoaXMuZmluZFBhcmVudEVkaXRvcigpO1xuICAgICAgICBjb2RlRWRpdEFwaSA9IHRoaXMuYXBpO1xuICAgICAgICBzYXZlQ29kZUVkaXRNb2RhbChwYXJzZWRTYXZlZERhdGFbc2F2ZWREYXRhSW5kZXhdKTtcbiAgICAgICAgdGhpcy5zZXRTYXZlZEVkaXRvckNvbnRlbnQoZWRpdG9yLmlkICsgJy1pbmRleCcsIHNhdmVkRGF0YUluZGV4LnRvU3RyaW5nKCkpO1xuICAgIH1cblxuICAgIGVkaXRIVE1MKCkge1xuICAgICAgICBsZXQgY29udGVudCA9IHRoaXMuZ2V0RWRpdG9yQ29udGVudCgpO1xuICAgICAgICB0aGlzLmNyZWF0ZUhUTUxFZGl0TW9kYWwoY29udGVudCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVIVE1MRWRpdE1vZGFsKGNvbnRlbnQ6IHN0cmluZykge1xuICAgICAgICBsZXQgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIGNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKHRoaXMuY29udGFpbmVyQ2xhc3MpO1xuICAgICAgICBsZXQgbW9kYWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgbW9kYWwuY2xhc3NMaXN0LmFkZCh0aGlzLm1vZGFsQ2xhc3MpO1xuICAgICAgICBsZXQgZWRpdG9yQ29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIGVkaXRvckNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKHRoaXMuZWRpdG9yQ2xhc3MpO1xuICAgICAgICBjb2RlRWRpdEVkaXRvciA9IHRoaXMuZmluZFBhcmVudEVkaXRvcigpO1xuICAgICAgICBjb2RlRWRpdEFwaSA9IHRoaXMuYXBpO1xuXG4gICAgICAgIGxldCBidXR0b25Db250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgbGV0IGNhbmNlbEJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xuICAgICAgICBsZXQgc2F2ZUJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xuICAgICAgICBjYW5jZWxCdXR0b24uaW5uZXJUZXh0ID0gZWRpdG9ySlNJMThuRGljdGlvbm5hcnkubWVzc2FnZXMudG9vbHMuY29kZUVkaXRbJ0NhbmNlbCddO1xuICAgICAgICBzYXZlQnV0dG9uLmlubmVyVGV4dCA9IGVkaXRvckpTSTE4bkRpY3Rpb25uYXJ5Lm1lc3NhZ2VzLnRvb2xzLmNvZGVFZGl0WydTYXZlJ107XG4gICAgICAgIGNhbmNlbEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGNsb3NlQ29kZUVkaXRNb2RhbCwgdHJ1ZSk7XG4gICAgICAgIGJ1dHRvbkNvbnRhaW5lci5hcHBlbmRDaGlsZChjYW5jZWxCdXR0b24pO1xuICAgICAgICBidXR0b25Db250YWluZXIuY2xhc3NMaXN0LmFkZCh0aGlzLmJ1dHRvbkNsYXNzKTtcblxuICAgICAgICBtb2RhbC5hcHBlbmRDaGlsZChlZGl0b3JDb250YWluZXIpO1xuICAgICAgICBtb2RhbC5hcHBlbmRDaGlsZChidXR0b25Db250YWluZXIpO1xuICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQobW9kYWwpO1xuICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdib2R5JykuYXBwZW5kQ2hpbGQoY29udGFpbmVyKTtcblxuICAgICAgICB2YXIgbW9uYWNvRWRpdG9yID0gbW9uYWNvLmVkaXRvci5jcmVhdGUoZWRpdG9yQ29udGFpbmVyLCB7XG4gICAgICAgICAgICB2YWx1ZTogY29udGVudCxcbiAgICAgICAgICAgIGxhbmd1YWdlOiAnaHRtbCcsXG4gICAgICAgICAgICBhcmlhQ29udGFpbmVyRWxlbWVudDogY29udGFpbmVyXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHNhdmVCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgICAgICdjbGljaycsXG4gICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IGNvbnRlbnQgPSBtb25hY29FZGl0b3IuZ2V0VmFsdWUoKTtcbiAgICAgICAgICAgICAgICBzYXZlQ29kZUVkaXRNb2RhbChjb250ZW50KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0cnVlXG4gICAgICAgICk7XG4gICAgICAgIGJ1dHRvbkNvbnRhaW5lci5hcHBlbmRDaGlsZChzYXZlQnV0dG9uKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFNhdmVkRWRpdG9yQ29udGVudChuYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsU3RvcmFnZS5nZXRJdGVtKG5hbWUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0U2F2ZWRFZGl0b3JDb250ZW50KG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZykge1xuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShuYW1lLCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRFZGl0b3JDb250ZW50KCk6IHN0cmluZyB7XG4gICAgICAgIGxldCBjdXJyZW50RWRpdG9yID0gdGhpcy5maW5kUGFyZW50RWRpdG9yKCk7XG4gICAgICAgIGxldCBlZGl0b3JCbG9ja3MgPSBjdXJyZW50RWRpdG9yLnF1ZXJ5U2VsZWN0b3JBbGwoJy5jb2RleC1lZGl0b3JfX3JlZGFjdG9yIC5jZS1wYXJhZ3JhcGgnKTtcbiAgICAgICAgbGV0IGNvbnRlbnQgPSAnJztcbiAgICAgICAgZWRpdG9yQmxvY2tzLmZvckVhY2goKGJsb2NrKSA9PiB7XG4gICAgICAgICAgICBsZXQgY2xvc2luZ1RhZyA9ICc8LycgKyBibG9jay5jaGlsZHJlblswXT8udGFnTmFtZS50b0xvd2VyQ2FzZSgpICsgJz4nO1xuICAgICAgICAgICAgbGV0IHJlZ2V4cCA9IC8oKDxcXC8pXFx3Kyg+KSkoPyFbXFxzXFxTXSooKDxcXC8pXFx3Kyg+KSlbXFxzXFxTXSokKS9pO1xuICAgICAgICAgICAgbGV0IGxhc3RDb250ZW50Q2xvc2luZ1RhZyA9IGNvbnRlbnQubWF0Y2gocmVnZXhwKSA/IGNvbnRlbnQubWF0Y2gocmVnZXhwKVswXSA6ICcnO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIChibG9jay5jaGlsZHJlblswXT8udGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSAndWwnIHx8IGJsb2NrLmNoaWxkcmVuWzBdPy50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdvbCcpICYmXG4gICAgICAgICAgICAgICAgbGFzdENvbnRlbnRDbG9zaW5nVGFnID09PSBjbG9zaW5nVGFnXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBjb250ZW50ID0gY29udGVudC5zdWJzdHJpbmcoMCwgY29udGVudC5sZW5ndGggLSBjbG9zaW5nVGFnLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgY29udGVudCArPSBibG9jay5pbm5lckhUTUwuc3Vic3RyaW5nKGNsb3NpbmdUYWcucmVwbGFjZSgnLycsICcnKS5sZW5ndGgsIGJsb2NrLmlubmVySFRNTC5sZW5ndGgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb250ZW50ICs9IGJsb2NrLmlubmVySFRNTDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLkZvcm1hdEhUTUxTdHJpbmdJbmRlbnRhdGlvbihjb250ZW50KTtcbiAgICB9XG5cbiAgICAvLyBBZGFwdGVkIEZST00ganNmaWRkbGUgaGVyZTogaHR0cHM6Ly9qc2ZpZGRsZS5uZXQvYnVrc3kvcnh1Y2cxZ2QvXG4gICAgcHJpdmF0ZSBGb3JtYXRIVE1MU3RyaW5nSW5kZW50YXRpb24oY29kZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgbGV0IHN0cmlwV2hpdGVTcGFjZXMgPSB0cnVlO1xuICAgICAgICBsZXQgc3RyaXBFbXB0eUxpbmVzID0gdHJ1ZTtcbiAgICAgICAgY29uc3Qgd2hpdGVzcGFjZSA9ICcgJy5yZXBlYXQoMik7IC8vIERlZmF1bHQgaW5kZW50aW5nIDQgd2hpdGVzcGFjZXNcbiAgICAgICAgbGV0IGN1cnJlbnRJbmRlbnQgPSAwO1xuICAgICAgICBjb25zdCBuZXdsaW5lQ2hhciA9ICdcXG4nO1xuICAgICAgICBsZXQgcHJldkNoYXIgPSBudWxsO1xuICAgICAgICBsZXQgY2hhciA9IG51bGw7XG4gICAgICAgIGxldCBuZXh0Q2hhciA9IG51bGw7XG5cbiAgICAgICAgbGV0IHJlc3VsdCA9ICcnO1xuICAgICAgICBmb3IgKGxldCBwb3MgPSAwOyBwb3MgPD0gY29kZS5sZW5ndGg7IHBvcysrKSB7XG4gICAgICAgICAgICBwcmV2Q2hhciA9IGNoYXI7XG4gICAgICAgICAgICBjaGFyID0gY29kZS5zdWJzdHIocG9zLCAxKTtcbiAgICAgICAgICAgIG5leHRDaGFyID0gY29kZS5zdWJzdHIocG9zICsgMSwgMSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGlzQnJUYWcgPSBjb2RlLnN1YnN0cihwb3MsIDQpID09PSAnPGJyPic7XG4gICAgICAgICAgICBjb25zdCBpc09wZW5pbmdUYWcgPSBjaGFyID09PSAnPCcgJiYgbmV4dENoYXIgIT09ICcvJyAmJiAhaXNCclRhZztcbiAgICAgICAgICAgIGNvbnN0IGlzQ2xvc2luZ1RhZyA9IGNoYXIgPT09ICc8JyAmJiBuZXh0Q2hhciA9PT0gJy8nICYmICFpc0JyVGFnO1xuICAgICAgICAgICAgY29uc3QgaXNUYWdFbmQgPSBwcmV2Q2hhciA9PT0gJz4nICYmIGNoYXIgIT09ICc8JyAmJiBjdXJyZW50SW5kZW50ID4gMDtcbiAgICAgICAgICAgIGNvbnN0IGlzVGFnTmV4dCA9XG4gICAgICAgICAgICAgICAgIWlzQnJUYWcgJiYgIWlzT3BlbmluZ1RhZyAmJiAhaXNDbG9zaW5nVGFnICYmIGlzVGFnRW5kICYmIGNvZGUuc3Vic3RyKHBvcywgY29kZS5zdWJzdHIocG9zKS5pbmRleE9mKCc8JykpLnRyaW0oKSA9PT0gJyc7XG4gICAgICAgICAgICBpZiAoaXNCclRhZykge1xuICAgICAgICAgICAgICAgIC8vIElmIG9wZW5pbmcgdGFnLCBhZGQgbmV3bGluZSBjaGFyYWN0ZXIgYW5kIGluZGVudGlvblxuICAgICAgICAgICAgICAgIHJlc3VsdCArPSBuZXdsaW5lQ2hhciArIHdoaXRlc3BhY2UucmVwZWF0KGN1cnJlbnRJbmRlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzT3BlbmluZ1RhZykge1xuICAgICAgICAgICAgICAgIC8vIElmIG9wZW5pbmcgdGFnLCBhZGQgbmV3bGluZSBjaGFyYWN0ZXIgYW5kIGluZGVudGlvblxuICAgICAgICAgICAgICAgIHJlc3VsdCArPSAocG9zID09PSAwID8gJycgOiBuZXdsaW5lQ2hhcikgKyB3aGl0ZXNwYWNlLnJlcGVhdChjdXJyZW50SW5kZW50KTtcbiAgICAgICAgICAgICAgICBjdXJyZW50SW5kZW50Kys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBpZiBDbG9zaW5nIHRhZywgYWRkIG5ld2xpbmUgYW5kIGluZGVudGlvblxuICAgICAgICAgICAgZWxzZSBpZiAoaXNDbG9zaW5nVGFnKSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlcmUncmUgbW9yZSBjbG9zaW5nIHRhZ3MgdGhhbiBvcGVuaW5nXG4gICAgICAgICAgICAgICAgaWYgKC0tY3VycmVudEluZGVudCA8IDApIGN1cnJlbnRJbmRlbnQgPSAwO1xuICAgICAgICAgICAgICAgIHJlc3VsdCArPSBuZXdsaW5lQ2hhciArIHdoaXRlc3BhY2UucmVwZWF0KGN1cnJlbnRJbmRlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gcmVtb3ZlIG11bHRpcGxlIHdoaXRlc3BhY2VzXG4gICAgICAgICAgICBlbHNlIGlmIChzdHJpcFdoaXRlU3BhY2VzID09PSB0cnVlICYmIGNoYXIgPT09ICcgJyAmJiBuZXh0Q2hhciA9PT0gJyAnKSBjaGFyID0gJyc7XG4gICAgICAgICAgICAvLyByZW1vdmUgZW1wdHkgbGluZXNcbiAgICAgICAgICAgIGVsc2UgaWYgKHN0cmlwRW1wdHlMaW5lcyA9PT0gdHJ1ZSAmJiBjaGFyID09PSBuZXdsaW5lQ2hhcikge1xuICAgICAgICAgICAgICAgIC8vZGVidWdnZXI7XG4gICAgICAgICAgICAgICAgaWYgKGNvZGUuc3Vic3RyKHBvcywgY29kZS5zdWJzdHIocG9zKS5pbmRleE9mKCc8JykpLnRyaW0oKSA9PT0gJycpIGNoYXIgPSAnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc1RhZ0VuZCAmJiAhaXNUYWdOZXh0KSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IG5ld2xpbmVDaGFyICsgd2hpdGVzcGFjZS5yZXBlYXQoY3VycmVudEluZGVudCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJlc3VsdCArPSBjaGFyO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuXG52YXIgY29kZUVkaXRFZGl0b3IgPSBudWxsO1xudmFyIGNvZGVFZGl0QXBpID0gbnVsbDtcblxuZnVuY3Rpb24gY2xvc2VDb2RlRWRpdE1vZGFsKCkge1xuICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5jb2RlRWRpdF9fY29udGFpbmVyJyk/LnJlbW92ZSgpO1xufVxuXG5mdW5jdGlvbiBzYXZlQ29kZUVkaXRNb2RhbChjb250ZW50KSB7XG4gICAgbGV0IHRtcEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICB0bXBFbGVtZW50LmlubmVySFRNTCA9IGNvbnRlbnQ7XG5cbiAgICBjb2RlRWRpdEFwaS5ibG9ja3MuY2xlYXIoKTtcbiAgICBsZXQgcGFyYWdyYXBoID0gY29kZUVkaXRFZGl0b3IucXVlcnlTZWxlY3RvckFsbCgnLmNlLXBhcmFncmFwaCcpO1xuICAgIGxldCBpID0gMDtcblxuICAgIHdoaWxlICh0bXBFbGVtZW50LmZpcnN0RWxlbWVudENoaWxkKSB7XG4gICAgICAgIGlmICh0bXBFbGVtZW50LmZpcnN0RWxlbWVudENoaWxkLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ3VsJyB8fCB0bXBFbGVtZW50LmZpcnN0RWxlbWVudENoaWxkLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ29sJykge1xuICAgICAgICAgICAgbGV0IGxpc3RNYXJrZXIgPSAxO1xuICAgICAgICAgICAgbGV0IHByZXZpb3VzQ29udGFpbmVyV2FzT2wgPSBmYWxzZTtcbiAgICAgICAgICAgIHdoaWxlICh0bXBFbGVtZW50LmZpcnN0RWxlbWVudENoaWxkLmZpcnN0RWxlbWVudENoaWxkKSB7XG4gICAgICAgICAgICAgICAgbGV0IGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodG1wRWxlbWVudC5maXJzdEVsZW1lbnRDaGlsZC50YWdOYW1lKTtcbiAgICAgICAgICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQodG1wRWxlbWVudC5maXJzdEVsZW1lbnRDaGlsZC5maXJzdEVsZW1lbnRDaGlsZC5jbG9uZU5vZGUodHJ1ZSkpO1xuICAgICAgICAgICAgICAgIGlmIChjb250YWluZXIudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnb2wnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghcHJldmlvdXNDb250YWluZXJXYXNPbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdE1hcmtlciA9IDE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyLmZpcnN0RWxlbWVudENoaWxkLnNldEF0dHJpYnV0ZSgndmFsdWUnLCBsaXN0TWFya2VyLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgICAgICAgICBwcmV2aW91c0NvbnRhaW5lcldhc09sID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgKytsaXN0TWFya2VyO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHByZXZpb3VzQ29udGFpbmVyV2FzT2wgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGkgPj0gcGFyYWdyYXBoLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBjb2RlRWRpdEFwaS5ibG9ja3MuaW5zZXJ0KCk7XG4gICAgICAgICAgICAgICAgICAgIGxldCB0bXBQYXJhZ3JhcGggPSBjb2RlRWRpdEVkaXRvci5xdWVyeVNlbGVjdG9yQWxsKCcuY2UtcGFyYWdyYXBoJyk7XG4gICAgICAgICAgICAgICAgICAgIHRtcFBhcmFncmFwaFt0bXBQYXJhZ3JhcGgubGVuZ3RoIC0gMV0uaW5uZXJIVE1MID0gJyc7XG4gICAgICAgICAgICAgICAgICAgIHRtcFBhcmFncmFwaFt0bXBQYXJhZ3JhcGgubGVuZ3RoIC0gMV0uYXBwZW5kQ2hpbGQoY29udGFpbmVyKTtcbiAgICAgICAgICAgICAgICAgICAgdG1wUGFyYWdyYXBoW3RtcFBhcmFncmFwaC5sZW5ndGggLSAxXS5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgb25FZGl0TGlzdCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyYWdyYXBoW2ldLmlubmVySFRNTCA9ICcnO1xuICAgICAgICAgICAgICAgICAgICBwYXJhZ3JhcGhbaV0uYXBwZW5kQ2hpbGQoY29udGFpbmVyKTtcbiAgICAgICAgICAgICAgICAgICAgcGFyYWdyYXBoW2ldLmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBvbkVkaXRMaXN0LCB0cnVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdG1wRWxlbWVudC5maXJzdEVsZW1lbnRDaGlsZC5maXJzdEVsZW1lbnRDaGlsZC5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICArK2k7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoaSA+PSBwYXJhZ3JhcGgubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgY29kZUVkaXRBcGkuYmxvY2tzLmluc2VydCgpO1xuICAgICAgICAgICAgICAgIGxldCB0bXBQYXJhZ3JhcGggPSBjb2RlRWRpdEVkaXRvci5xdWVyeVNlbGVjdG9yQWxsKCcuY2UtcGFyYWdyYXBoJyk7XG4gICAgICAgICAgICAgICAgdG1wUGFyYWdyYXBoW3RtcFBhcmFncmFwaC5sZW5ndGggLSAxXS5pbm5lckhUTUwgPSAnJztcbiAgICAgICAgICAgICAgICB0bXBQYXJhZ3JhcGhbdG1wUGFyYWdyYXBoLmxlbmd0aCAtIDFdLmFwcGVuZENoaWxkKHRtcEVsZW1lbnQuZmlyc3RFbGVtZW50Q2hpbGQuY2xvbmVOb2RlKHRydWUpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcGFyYWdyYXBoW2ldLmlubmVySFRNTCA9ICcnO1xuICAgICAgICAgICAgICAgIHBhcmFncmFwaFtpXS5hcHBlbmRDaGlsZCh0bXBFbGVtZW50LmZpcnN0RWxlbWVudENoaWxkLmNsb25lTm9kZSh0cnVlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICArK2k7XG4gICAgICAgIH1cbiAgICAgICAgdG1wRWxlbWVudC5maXJzdEVsZW1lbnRDaGlsZC5yZW1vdmUoKTtcbiAgICB9XG5cbiAgICBjbG9zZUNvZGVFZGl0TW9kYWwoKTtcbn1cblxuZnVuY3Rpb24gb25FZGl0TGlzdChldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGxldCBmb2N1c2VkQmxvY2sgPSA8SFRNTEVsZW1lbnQ+ZXZlbnQudGFyZ2V0O1xuICAgIGlmIChMSVNUX0VESVRfS0VZX0NPREVTLmluZGV4T2YoZXZlbnQuY29kZSkgPiAtMSkge1xuICAgICAgICBpZiAoZXZlbnQuY29kZSA9PT0gJ0JhY2tzcGFjZScpIHtcbiAgICAgICAgICAgIGlmIChmb2N1c2VkQmxvY2suaW5uZXJUZXh0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGxldCBjdXJyZW50UGFyYWdyYXBoID0gY29kZUVkaXRFZGl0b3IucXVlcnlTZWxlY3RvckFsbCgnLmNlLXBhcmFncmFwaCcpW2NvZGVFZGl0QXBpLmJsb2Nrcy5nZXRDdXJyZW50QmxvY2tJbmRleCgpXTtcbiAgICAgICAgICAgICAgICBjdXJyZW50UGFyYWdyYXBoLmlubmVySFRNTCA9ICcnO1xuICAgICAgICAgICAgICAgIGN1cnJlbnRQYXJhZ3JhcGguYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgncCcpKTtcbiAgICAgICAgICAgICAgICBjdXJyZW50UGFyYWdyYXBoLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBvbkVkaXRMaXN0LCB0cnVlKTtcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRTZWxlY3Rpb24oKS5zZXRCYXNlQW5kRXh0ZW50KGN1cnJlbnRQYXJhZ3JhcGgucXVlcnlTZWxlY3RvcigncCcpLCAwLCBjdXJyZW50UGFyYWdyYXBoLnF1ZXJ5U2VsZWN0b3IoJ3AnKSwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICBpZiAoZm9jdXNlZEJsb2NrLmlubmVyVGV4dCAhPT0gJycpIHtcbiAgICAgICAgICAgICAgICBjb2RlRWRpdEFwaS5ibG9ja3MuaW5zZXJ0KCdwYXJhZ3JhcGgnLCBjb2RlRWRpdEFwaS5ibG9ja3MuZ2V0Q3VycmVudEJsb2NrSW5kZXgoKSk7XG4gICAgICAgICAgICAgICAgbGV0IGN1cnJlbnRCbG9jayA9IGNvZGVFZGl0RWRpdG9yLnF1ZXJ5U2VsZWN0b3JBbGwoJy5jZS1ibG9jaycpW2NvZGVFZGl0QXBpLmJsb2Nrcy5nZXRDdXJyZW50QmxvY2tJbmRleCgpXTtcbiAgICAgICAgICAgICAgICBsZXQgcHJldmlvdXNCbG9jayA9IGNvZGVFZGl0RWRpdG9yLnF1ZXJ5U2VsZWN0b3JBbGwoJy5jZS1ibG9jaycpW2NvZGVFZGl0QXBpLmJsb2Nrcy5nZXRDdXJyZW50QmxvY2tJbmRleCgpIC0gMV07XG4gICAgICAgICAgICAgICAgbGV0IGN1cnJlbnRQYXJhZ3JhcGggPSBjdXJyZW50QmxvY2sucXVlcnlTZWxlY3RvcignLmNlLXBhcmFncmFwaCcpO1xuICAgICAgICAgICAgICAgIGxldCBsaXN0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQocHJldmlvdXNCbG9jay5xdWVyeVNlbGVjdG9yKCcuY2UtcGFyYWdyYXBoJykuZmlyc3RFbGVtZW50Q2hpbGQudGFnTmFtZSk7XG4gICAgICAgICAgICAgICAgbGlzdEVsZW1lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGknKSk7XG4gICAgICAgICAgICAgICAgaWYgKGxpc3RFbGVtZW50LnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ29sJykge1xuICAgICAgICAgICAgICAgICAgICBsaXN0RWxlbWVudC5maXJzdEVsZW1lbnRDaGlsZC5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAndmFsdWUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgKHBhcnNlSW50KHByZXZpb3VzQmxvY2sucXVlcnlTZWxlY3RvcignbGknKS5nZXRBdHRyaWJ1dGUoJ3ZhbHVlJykpICsgMSkudG9TdHJpbmcoKVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjdXJyZW50UGFyYWdyYXBoLmFwcGVuZENoaWxkKGxpc3RFbGVtZW50KTtcbiAgICAgICAgICAgICAgICBjdXJyZW50UGFyYWdyYXBoLmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBvbkVkaXRMaXN0LCB0cnVlKTtcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRTZWxlY3Rpb24oKS5zZXRCYXNlQW5kRXh0ZW50KGN1cnJlbnRQYXJhZ3JhcGgucXVlcnlTZWxlY3RvcignbGknKSwgMCwgY3VycmVudFBhcmFncmFwaC5xdWVyeVNlbGVjdG9yKCdsaScpLCAwKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbGV0IGN1cnJlbnRQYXJhZ3JhcGggPSBjb2RlRWRpdEVkaXRvci5xdWVyeVNlbGVjdG9yQWxsKCcuY2UtcGFyYWdyYXBoJylbY29kZUVkaXRBcGkuYmxvY2tzLmdldEN1cnJlbnRCbG9ja0luZGV4KCldO1xuICAgICAgICAgICAgICAgIGN1cnJlbnRQYXJhZ3JhcGguaW5uZXJIVE1MID0gJyc7XG4gICAgICAgICAgICAgICAgY3VycmVudFBhcmFncmFwaC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdwJykpO1xuICAgICAgICAgICAgICAgIGN1cnJlbnRQYXJhZ3JhcGgucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIG9uRWRpdExpc3QsIHRydWUpO1xuICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldFNlbGVjdGlvbigpLnNldEJhc2VBbmRFeHRlbnQoY3VycmVudFBhcmFncmFwaC5xdWVyeVNlbGVjdG9yKCdwJyksIDAsIGN1cnJlbnRQYXJhZ3JhcGgucXVlcnlTZWxlY3RvcigncCcpLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
|
|
268
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC1lZGl0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIvaG9tZS9wYXVsaW5lL0RvY3VtZW50cy93b3Jrc3BhY2Uvd2l6aS1ibG9jay9wcm9qZWN0cy93aXppLWJsb2NrL3NyYy8iLCJzb3VyY2VzIjpbImxpYi9zaGFyZWQvY29tcG9uZW50cy9lZGl0b3Jqcy90b29scy9wYXJhZ3JhcGgvdG9vbC10eXBlL3RleHQtZWRpdGlvbi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDdEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbkUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDbkYsT0FBTyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDcEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUU3QyxNQUFNLE9BQWdCLGVBQWdCLFNBQVEsa0JBQWtCO0lBQWhFOztRQUtJLG1CQUFjLEdBQUcscUJBQXFCLENBQUM7UUFDdkMsZUFBVSxHQUFHLDRCQUE0QixDQUFDO1FBQzFDLGdCQUFXLEdBQUcsb0NBQW9DLENBQUM7UUFDbkQsZ0JBQVcsR0FBRyxxQ0FBcUMsQ0FBQztJQXlLeEQsQ0FBQztJQXZLRyxJQUFJO1FBQ0EsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDckMsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN0RCxJQUFJLGNBQWMsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxRQUFRLENBQUM7WUFDakUsQ0FB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LGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQzthQUM1SDtTQUNKO0tBQ0o7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGFyYWdyYXBoU3R5bGVUb29sIH0gZnJvbSAnLi9wYXJhZ3JhcGgtc3R5bGUtdG9vbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgTElTVF9FRElUX0tFWV9DT0RFUyB9IGZyb20gJy4uLy4uL3V0aWxzL2NvbG9ycy5jb21wb25lbnQnO1xuaW1wb3J0IHsgZWRpdG9ySlNJMThuRGljdGlvbm5hcnkgfSBmcm9tICcuLi8uLi91dGlscy9lZGl0b3Jqcy10cmFuc2xhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IEVkaXRvclZpZXcsIGJhc2ljU2V0dXAgfSBmcm9tICdjb2RlbWlycm9yJztcbmltcG9ydCB7IEVkaXRvclN0YXRlIH0gZnJvbSAnQGNvZGVtaXJyb3Ivc3RhdGUnO1xuaW1wb3J0IHsgaHRtbCB9IGZyb20gJ0Bjb2RlbWlycm9yL2xhbmctaHRtbCc7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBUZXh0RWRpdGlvblRvb2wgZXh0ZW5kcyBQYXJhZ3JhcGhTdHlsZVRvb2wge1xuICAgIG5vZGVzOiB7IGJ1dHRvbjogSFRNTEJ1dHRvbkVsZW1lbnQgfTtcblxuICAgIENTUzogYW55O1xuXG4gICAgY29udGFpbmVyQ2xhc3MgPSAnY29kZUVkaXRfX2NvbnRhaW5lcic7XG4gICAgbW9kYWxDbGFzcyA9ICdjb2RlRWRpdF9fY29udGFpbmVyX19tb2RhbCc7XG4gICAgZWRpdG9yQ2xhc3MgPSAnY29kZUVkaXRfX2NvbnRhaW5lcl9fbW9kYWxfX2VkaXRvcic7XG4gICAgYnV0dG9uQ2xhc3MgPSAnY29kZUVkaXRfX2NvbnRhaW5lcl9fbW9kYWxfX2J1dHRvbnMnO1xuXG4gICAgdW5kbygpIHtcbiAgICAgICAgbGV0IGVkaXRvciA9IHRoaXMuZmluZFBhcmVudEVkaXRvcigpO1xuICAgICAgICBsZXQgc2F2ZWREYXRhID0gdGhpcy5nZXRTYXZlZEVkaXRvckNvbnRlbnQoZWRpdG9yLmlkKTtcbiAgICAgICAgbGV0IHNhdmVkRGF0YUluZGV4ID0gdGhpcy5nZXRTYXZlZEVkaXRvckNvbnRlbnQoZWRpdG9yLmlkICsgJy1pbmRleCcpXG4gICAgICAgICAgICA/IHBhcnNlSW50KHRoaXMuZ2V0U2F2ZWRFZGl0b3JDb250ZW50KGVkaXRvci5pZCArICctaW5kZXgnKSlcbiAgICAgICAgICAgIDogLTE7XG4gICAgICAgIGxldCBwYXJzZWRTYXZlZERhdGE6IEFycmF5PHN0cmluZz4gPSBbXTtcbiAgICAgICAgaWYgKCFzYXZlZERhdGEpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBwYXJzZWRTYXZlZERhdGEgPSBKU09OLnBhcnNlKHNhdmVkRGF0YSk7XG4gICAgICAgIC0tc2F2ZWREYXRhSW5kZXg7XG4gICAgICAgIHNhdmVkRGF0YUluZGV4ID0gc2F2ZWREYXRhSW5kZXggPCAwID8gMCA6IHNhdmVkRGF0YUluZGV4O1xuICAgICAgICBjb2RlRWRpdEVkaXRvciA9IHRoaXMuZmluZFBhcmVudEVkaXRvcigpO1xuICAgICAgICBjb2RlRWRpdEFwaSA9IHRoaXMuYXBpO1xuICAgICAgICBzYXZlQ29kZUVkaXRNb2RhbChwYXJzZWRTYXZlZERhdGFbc2F2ZWREYXRhSW5kZXhdKTtcbiAgICAgICAgdGhpcy5zZXRTYXZlZEVkaXRvckNvbnRlbnQoZWRpdG9yLmlkICsgJy1pbmRleCcsIHNhdmVkRGF0YUluZGV4LnRvU3RyaW5nKCkpO1xuICAgIH1cblxuICAgIHJlZG8oKSB7XG4gICAgICAgIGxldCBlZGl0b3IgPSB0aGlzLmZpbmRQYXJlbnRFZGl0b3IoKTtcblxuICAgICAgICBsZXQgc2F2ZWREYXRhID0gdGhpcy5nZXRTYXZlZEVkaXRvckNvbnRlbnQoZWRpdG9yLmlkKTtcbiAgICAgICAgbGV0IHNhdmVkRGF0YUluZGV4ID0gdGhpcy5nZXRTYXZlZEVkaXRvckNvbnRlbnQoZWRpdG9yLmlkICsgJy1pbmRleCcpXG4gICAgICAgICAgICA/IHBhcnNlSW50KHRoaXMuZ2V0U2F2ZWRFZGl0b3JDb250ZW50KGVkaXRvci5pZCArICctaW5kZXgnKSlcbiAgICAgICAgICAgIDogLTE7XG4gICAgICAgIGxldCBwYXJzZWRTYXZlZERhdGE6IEFycmF5PHN0cmluZz4gPSBbXTtcbiAgICAgICAgaWYgKCFzYXZlZERhdGEpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBwYXJzZWRTYXZlZERhdGEgPSBKU09OLnBhcnNlKHNhdmVkRGF0YSk7XG4gICAgICAgICsrc2F2ZWREYXRhSW5kZXg7XG4gICAgICAgIHNhdmVkRGF0YUluZGV4ID0gc2F2ZWREYXRhSW5kZXggPiBwYXJzZWRTYXZlZERhdGEubGVuZ3RoID8gcGFyc2VkU2F2ZWREYXRhLmxlbmd0aCA6IHNhdmVkRGF0YUluZGV4O1xuICAgICAgICBjb2RlRWRpdEVkaXRvciA9IHRoaXMuZmluZFBhcmVudEVkaXRvcigpO1xuICAgICAgICBjb2RlRWRpdEFwaSA9IHRoaXMuYXBpO1xuICAgICAgICBzYXZlQ29kZUVkaXRNb2RhbChwYXJzZWRTYXZlZERhdGFbc2F2ZWREYXRhSW5kZXhdKTtcbiAgICAgICAgdGhpcy5zZXRTYXZlZEVkaXRvckNvbnRlbnQoZWRpdG9yLmlkICsgJy1pbmRleCcsIHNhdmVkRGF0YUluZGV4LnRvU3RyaW5nKCkpO1xuICAgIH1cblxuICAgIGVkaXRIVE1MKCkge1xuICAgICAgICBsZXQgY29udGVudCA9IHRoaXMuZ2V0RWRpdG9yQ29udGVudCgpO1xuICAgICAgICB0aGlzLmNyZWF0ZUhUTUxFZGl0TW9kYWwoY29udGVudCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVIVE1MRWRpdE1vZGFsKGNvbnRlbnQ6IHN0cmluZykge1xuICAgICAgICBsZXQgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIGNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKHRoaXMuY29udGFpbmVyQ2xhc3MpO1xuICAgICAgICBsZXQgbW9kYWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgbW9kYWwuY2xhc3NMaXN0LmFkZCh0aGlzLm1vZGFsQ2xhc3MpO1xuICAgICAgICBsZXQgZWRpdG9yQ29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIGVkaXRvckNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKHRoaXMuZWRpdG9yQ2xhc3MpO1xuICAgICAgICBjb2RlRWRpdEVkaXRvciA9IHRoaXMuZmluZFBhcmVudEVkaXRvcigpO1xuICAgICAgICBjb2RlRWRpdEFwaSA9IHRoaXMuYXBpO1xuXG4gICAgICAgIGxldCBidXR0b25Db250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgbGV0IGNhbmNlbEJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xuICAgICAgICBsZXQgc2F2ZUJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xuICAgICAgICBjYW5jZWxCdXR0b24uaW5uZXJUZXh0ID0gZWRpdG9ySlNJMThuRGljdGlvbm5hcnkubWVzc2FnZXMudG9vbHMuY29kZUVkaXRbJ0NhbmNlbCddO1xuICAgICAgICBzYXZlQnV0dG9uLmlubmVyVGV4dCA9IGVkaXRvckpTSTE4bkRpY3Rpb25uYXJ5Lm1lc3NhZ2VzLnRvb2xzLmNvZGVFZGl0WydTYXZlJ107XG4gICAgICAgIGNhbmNlbEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGNsb3NlQ29kZUVkaXRNb2RhbCwgdHJ1ZSk7XG4gICAgICAgIGJ1dHRvbkNvbnRhaW5lci5hcHBlbmRDaGlsZChjYW5jZWxCdXR0b24pO1xuICAgICAgICBidXR0b25Db250YWluZXIuY2xhc3NMaXN0LmFkZCh0aGlzLmJ1dHRvbkNsYXNzKTtcblxuICAgICAgICBtb2RhbC5hcHBlbmRDaGlsZChlZGl0b3JDb250YWluZXIpO1xuICAgICAgICBtb2RhbC5hcHBlbmRDaGlsZChidXR0b25Db250YWluZXIpO1xuICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQobW9kYWwpO1xuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGNvbnRhaW5lcik7XG5cbiAgICAgICAgbGV0IHN0YXRlID0gRWRpdG9yU3RhdGUuY3JlYXRlKHtcbiAgICAgICAgICAgIGRvYzogY29udGVudCxcbiAgICAgICAgICAgIGV4dGVuc2lvbnM6IFtiYXNpY1NldHVwLCBodG1sKCldLFxuICAgICAgICB9KTtcbiAgICAgICAgbGV0IHZpZXcgPSBuZXcgRWRpdG9yVmlldyh7XG4gICAgICAgICAgICBzdGF0ZTogc3RhdGUsXG4gICAgICAgICAgICBwYXJlbnQ6IGVkaXRvckNvbnRhaW5lcixcbiAgICAgICAgfSk7XG5cbiAgICAgICAgc2F2ZUJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICAgICAgJ2NsaWNrJyxcbiAgICAgICAgICAgICgpID0+IHNhdmVDb2RlRWRpdE1vZGFsKHZpZXcuc3RhdGUuZG9jLnRvU3RyaW5nKCkpLFxuICAgICAgICAgICAgdHJ1ZVxuICAgICAgICApO1xuICAgICAgICBidXR0b25Db250YWluZXIuYXBwZW5kQ2hpbGQoc2F2ZUJ1dHRvbik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRTYXZlZEVkaXRvckNvbnRlbnQobmFtZTogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShuYW1lKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldFNhdmVkRWRpdG9yQ29udGVudChuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0obmFtZSwgdmFsdWUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RWRpdG9yQ29udGVudCgpOiBzdHJpbmcge1xuICAgICAgICBsZXQgY3VycmVudEVkaXRvciA9IHRoaXMuZmluZFBhcmVudEVkaXRvcigpO1xuICAgICAgICBsZXQgZWRpdG9yQmxvY2tzID0gY3VycmVudEVkaXRvci5xdWVyeVNlbGVjdG9yQWxsKCcuY29kZXgtZWRpdG9yX19yZWRhY3RvciAuY2UtcGFyYWdyYXBoJyk7XG4gICAgICAgIGxldCBjb250ZW50ID0gJyc7XG4gICAgICAgIGVkaXRvckJsb2Nrcy5mb3JFYWNoKChibG9jaykgPT4ge1xuICAgICAgICAgICAgbGV0IGNsb3NpbmdUYWcgPSAnPC8nICsgYmxvY2suY2hpbGRyZW5bMF0/LnRhZ05hbWUudG9Mb3dlckNhc2UoKSArICc+JztcbiAgICAgICAgICAgIGxldCByZWdleHAgPSAvKCg8XFwvKVxcdysoPikpKD8hW1xcc1xcU10qKCg8XFwvKVxcdysoPikpW1xcc1xcU10qJCkvaTtcbiAgICAgICAgICAgIGxldCBsYXN0Q29udGVudENsb3NpbmdUYWcgPSBjb250ZW50Lm1hdGNoKHJlZ2V4cCkgPyBjb250ZW50Lm1hdGNoKHJlZ2V4cClbMF0gOiAnJztcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAoYmxvY2suY2hpbGRyZW5bMF0/LnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ3VsJyB8fCBibG9jay5jaGlsZHJlblswXT8udGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnb2wnKSAmJlxuICAgICAgICAgICAgICAgIGxhc3RDb250ZW50Q2xvc2luZ1RhZyA9PT0gY2xvc2luZ1RhZ1xuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgY29udGVudCA9IGNvbnRlbnQuc3Vic3RyaW5nKDAsIGNvbnRlbnQubGVuZ3RoIC0gY2xvc2luZ1RhZy5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIGNvbnRlbnQgKz0gYmxvY2suaW5uZXJIVE1MLnN1YnN0cmluZyhjbG9zaW5nVGFnLnJlcGxhY2UoJy8nLCAnJykubGVuZ3RoLCBibG9jay5pbm5lckhUTUwubGVuZ3RoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29udGVudCArPSBibG9jay5pbm5lckhUTUw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5Gb3JtYXRIVE1MU3RyaW5nSW5kZW50YXRpb24oY29udGVudCk7XG4gICAgfVxuXG4gICAgLy8gQWRhcHRlZCBGUk9NIGpzZmlkZGxlIGhlcmU6IGh0dHBzOi8vanNmaWRkbGUubmV0L2J1a3N5L3J4dWNnMWdkL1xuICAgIHByaXZhdGUgRm9ybWF0SFRNTFN0cmluZ0luZGVudGF0aW9uKGNvZGU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGxldCBzdHJpcFdoaXRlU3BhY2VzID0gdHJ1ZTtcbiAgICAgICAgbGV0IHN0cmlwRW1wdHlMaW5lcyA9IHRydWU7XG4gICAgICAgIGNvbnN0IHdoaXRlc3BhY2UgPSAnICcucmVwZWF0KDIpOyAvLyBEZWZhdWx0IGluZGVudGluZyA0IHdoaXRlc3BhY2VzXG4gICAgICAgIGxldCBjdXJyZW50SW5kZW50ID0gMDtcbiAgICAgICAgY29uc3QgbmV3bGluZUNoYXIgPSAnXFxuJztcbiAgICAgICAgbGV0IHByZXZDaGFyID0gbnVsbDtcbiAgICAgICAgbGV0IGNoYXIgPSBudWxsO1xuICAgICAgICBsZXQgbmV4dENoYXIgPSBudWxsO1xuXG4gICAgICAgIGxldCByZXN1bHQgPSAnJztcbiAgICAgICAgZm9yIChsZXQgcG9zID0gMDsgcG9zIDw9IGNvZGUubGVuZ3RoOyBwb3MrKykge1xuICAgICAgICAgICAgcHJldkNoYXIgPSBjaGFyO1xuICAgICAgICAgICAgY2hhciA9IGNvZGUuc3Vic3RyKHBvcywgMSk7XG4gICAgICAgICAgICBuZXh0Q2hhciA9IGNvZGUuc3Vic3RyKHBvcyArIDEsIDEpO1xuXG4gICAgICAgICAgICBjb25zdCBpc0JyVGFnID0gY29kZS5zdWJzdHIocG9zLCA0KSA9PT0gJzxicj4nO1xuICAgICAgICAgICAgY29uc3QgaXNPcGVuaW5nVGFnID0gY2hhciA9PT0gJzwnICYmIG5leHRDaGFyICE9PSAnLycgJiYgIWlzQnJUYWc7XG4gICAgICAgICAgICBjb25zdCBpc0Nsb3NpbmdUYWcgPSBjaGFyID09PSAnPCcgJiYgbmV4dENoYXIgPT09ICcvJyAmJiAhaXNCclRhZztcbiAgICAgICAgICAgIGNvbnN0IGlzVGFnRW5kID0gcHJldkNoYXIgPT09ICc+JyAmJiBjaGFyICE9PSAnPCcgJiYgY3VycmVudEluZGVudCA+IDA7XG4gICAgICAgICAgICBjb25zdCBpc1RhZ05leHQgPVxuICAgICAgICAgICAgICAgICFpc0JyVGFnICYmICFpc09wZW5pbmdUYWcgJiYgIWlzQ2xvc2luZ1RhZyAmJiBpc1RhZ0VuZCAmJiBjb2RlLnN1YnN0cihwb3MsIGNvZGUuc3Vic3RyKHBvcykuaW5kZXhPZignPCcpKS50cmltKCkgPT09ICcnO1xuICAgICAgICAgICAgaWYgKGlzQnJUYWcpIHtcbiAgICAgICAgICAgICAgICAvLyBJZiBvcGVuaW5nIHRhZywgYWRkIG5ld2xpbmUgY2hhcmFjdGVyIGFuZCBpbmRlbnRpb25cbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gbmV3bGluZUNoYXIgKyB3aGl0ZXNwYWNlLnJlcGVhdChjdXJyZW50SW5kZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc09wZW5pbmdUYWcpIHtcbiAgICAgICAgICAgICAgICAvLyBJZiBvcGVuaW5nIHRhZywgYWRkIG5ld2xpbmUgY2hhcmFjdGVyIGFuZCBpbmRlbnRpb25cbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gKHBvcyA9PT0gMCA/ICcnIDogbmV3bGluZUNoYXIpICsgd2hpdGVzcGFjZS5yZXBlYXQoY3VycmVudEluZGVudCk7XG4gICAgICAgICAgICAgICAgY3VycmVudEluZGVudCsrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaWYgQ2xvc2luZyB0YWcsIGFkZCBuZXdsaW5lIGFuZCBpbmRlbnRpb25cbiAgICAgICAgICAgIGVsc2UgaWYgKGlzQ2xvc2luZ1RhZykge1xuICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlJ3JlIG1vcmUgY2xvc2luZyB0YWdzIHRoYW4gb3BlbmluZ1xuICAgICAgICAgICAgICAgIGlmICgtLWN1cnJlbnRJbmRlbnQgPCAwKSBjdXJyZW50SW5kZW50ID0gMDtcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gbmV3bGluZUNoYXIgKyB3aGl0ZXNwYWNlLnJlcGVhdChjdXJyZW50SW5kZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHJlbW92ZSBtdWx0aXBsZSB3aGl0ZXNwYWNlc1xuICAgICAgICAgICAgZWxzZSBpZiAoc3RyaXBXaGl0ZVNwYWNlcyA9PT0gdHJ1ZSAmJiBjaGFyID09PSAnICcgJiYgbmV4dENoYXIgPT09ICcgJykgY2hhciA9ICcnO1xuICAgICAgICAgICAgLy8gcmVtb3ZlIGVtcHR5IGxpbmVzXG4gICAgICAgICAgICBlbHNlIGlmIChzdHJpcEVtcHR5TGluZXMgPT09IHRydWUgJiYgY2hhciA9PT0gbmV3bGluZUNoYXIpIHtcbiAgICAgICAgICAgICAgICAvL2RlYnVnZ2VyO1xuICAgICAgICAgICAgICAgIGlmIChjb2RlLnN1YnN0cihwb3MsIGNvZGUuc3Vic3RyKHBvcykuaW5kZXhPZignPCcpKS50cmltKCkgPT09ICcnKSBjaGFyID0gJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNUYWdFbmQgJiYgIWlzVGFnTmV4dCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCArPSBuZXdsaW5lQ2hhciArIHdoaXRlc3BhY2UucmVwZWF0KGN1cnJlbnRJbmRlbnQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXN1bHQgKz0gY2hhcjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxudmFyIGNvZGVFZGl0RWRpdG9yID0gbnVsbDtcbnZhciBjb2RlRWRpdEFwaSA9IG51bGw7XG5cbmZ1bmN0aW9uIGNsb3NlQ29kZUVkaXRNb2RhbCgpIHtcbiAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuY29kZUVkaXRfX2NvbnRhaW5lcicpPy5yZW1vdmUoKTtcbn1cblxuZnVuY3Rpb24gc2F2ZUNvZGVFZGl0TW9kYWwoY29udGVudCkge1xuICAgIGxldCB0bXBFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgdG1wRWxlbWVudC5pbm5lckhUTUwgPSBjb250ZW50O1xuXG4gICAgY29kZUVkaXRBcGkuYmxvY2tzLmNsZWFyKCk7XG4gICAgbGV0IHBhcmFncmFwaCA9IGNvZGVFZGl0RWRpdG9yLnF1ZXJ5U2VsZWN0b3JBbGwoJy5jZS1wYXJhZ3JhcGgnKTtcbiAgICBsZXQgaSA9IDA7XG5cbiAgICB3aGlsZSAodG1wRWxlbWVudC5maXJzdEVsZW1lbnRDaGlsZCkge1xuICAgICAgICBpZiAodG1wRWxlbWVudC5maXJzdEVsZW1lbnRDaGlsZC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICd1bCcgfHwgdG1wRWxlbWVudC5maXJzdEVsZW1lbnRDaGlsZC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdvbCcpIHtcbiAgICAgICAgICAgIGxldCBsaXN0TWFya2VyID0gMTtcbiAgICAgICAgICAgIGxldCBwcmV2aW91c0NvbnRhaW5lcldhc09sID0gZmFsc2U7XG4gICAgICAgICAgICB3aGlsZSAodG1wRWxlbWVudC5maXJzdEVsZW1lbnRDaGlsZC5maXJzdEVsZW1lbnRDaGlsZCkge1xuICAgICAgICAgICAgICAgIGxldCBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRtcEVsZW1lbnQuZmlyc3RFbGVtZW50Q2hpbGQudGFnTmFtZSk7XG4gICAgICAgICAgICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKHRtcEVsZW1lbnQuZmlyc3RFbGVtZW50Q2hpbGQuZmlyc3RFbGVtZW50Q2hpbGQuY2xvbmVOb2RlKHRydWUpKTtcbiAgICAgICAgICAgICAgICBpZiAoY29udGFpbmVyLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ29sJykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXByZXZpb3VzQ29udGFpbmVyV2FzT2wpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RNYXJrZXIgPSAxO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5maXJzdEVsZW1lbnRDaGlsZC5zZXRBdHRyaWJ1dGUoJ3ZhbHVlJywgbGlzdE1hcmtlci50b1N0cmluZygpKTtcbiAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNDb250YWluZXJXYXNPbCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICsrbGlzdE1hcmtlcjtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBwcmV2aW91c0NvbnRhaW5lcldhc09sID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpID49IHBhcmFncmFwaC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29kZUVkaXRBcGkuYmxvY2tzLmluc2VydCgpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgdG1wUGFyYWdyYXBoID0gY29kZUVkaXRFZGl0b3IucXVlcnlTZWxlY3RvckFsbCgnLmNlLXBhcmFncmFwaCcpO1xuICAgICAgICAgICAgICAgICAgICB0bXBQYXJhZ3JhcGhbdG1wUGFyYWdyYXBoLmxlbmd0aCAtIDFdLmlubmVySFRNTCA9ICcnO1xuICAgICAgICAgICAgICAgICAgICB0bXBQYXJhZ3JhcGhbdG1wUGFyYWdyYXBoLmxlbmd0aCAtIDFdLmFwcGVuZENoaWxkKGNvbnRhaW5lcik7XG4gICAgICAgICAgICAgICAgICAgIHRtcFBhcmFncmFwaFt0bXBQYXJhZ3JhcGgubGVuZ3RoIC0gMV0uYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIG9uRWRpdExpc3QsIHRydWUpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmFncmFwaFtpXS5pbm5lckhUTUwgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgcGFyYWdyYXBoW2ldLmFwcGVuZENoaWxkKGNvbnRhaW5lcik7XG4gICAgICAgICAgICAgICAgICAgIHBhcmFncmFwaFtpXS5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgb25FZGl0TGlzdCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRtcEVsZW1lbnQuZmlyc3RFbGVtZW50Q2hpbGQuZmlyc3RFbGVtZW50Q2hpbGQucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgKytpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGkgPj0gcGFyYWdyYXBoLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGNvZGVFZGl0QXBpLmJsb2Nrcy5pbnNlcnQoKTtcbiAgICAgICAgICAgICAgICBsZXQgdG1wUGFyYWdyYXBoID0gY29kZUVkaXRFZGl0b3IucXVlcnlTZWxlY3RvckFsbCgnLmNlLXBhcmFncmFwaCcpO1xuICAgICAgICAgICAgICAgIHRtcFBhcmFncmFwaFt0bXBQYXJhZ3JhcGgubGVuZ3RoIC0gMV0uaW5uZXJIVE1MID0gJyc7XG4gICAgICAgICAgICAgICAgdG1wUGFyYWdyYXBoW3RtcFBhcmFncmFwaC5sZW5ndGggLSAxXS5hcHBlbmRDaGlsZCh0bXBFbGVtZW50LmZpcnN0RWxlbWVudENoaWxkLmNsb25lTm9kZSh0cnVlKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHBhcmFncmFwaFtpXS5pbm5lckhUTUwgPSAnJztcbiAgICAgICAgICAgICAgICBwYXJhZ3JhcGhbaV0uYXBwZW5kQ2hpbGQodG1wRWxlbWVudC5maXJzdEVsZW1lbnRDaGlsZC5jbG9uZU5vZGUodHJ1ZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgKytpO1xuICAgICAgICB9XG4gICAgICAgIHRtcEVsZW1lbnQuZmlyc3RFbGVtZW50Q2hpbGQucmVtb3ZlKCk7XG4gICAgfVxuXG4gICAgY2xvc2VDb2RlRWRpdE1vZGFsKCk7XG59XG5cbmZ1bmN0aW9uIG9uRWRpdExpc3QoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBsZXQgZm9jdXNlZEJsb2NrID0gPEhUTUxFbGVtZW50PmV2ZW50LnRhcmdldDtcbiAgICBpZiAoTElTVF9FRElUX0tFWV9DT0RFUy5pbmRleE9mKGV2ZW50LmNvZGUpID4gLTEpIHtcbiAgICAgICAgaWYgKGV2ZW50LmNvZGUgPT09ICdCYWNrc3BhY2UnKSB7XG4gICAgICAgICAgICBpZiAoZm9jdXNlZEJsb2NrLmlubmVyVGV4dC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICBsZXQgY3VycmVudFBhcmFncmFwaCA9IGNvZGVFZGl0RWRpdG9yLnF1ZXJ5U2VsZWN0b3JBbGwoJy5jZS1wYXJhZ3JhcGgnKVtjb2RlRWRpdEFwaS5ibG9ja3MuZ2V0Q3VycmVudEJsb2NrSW5kZXgoKV07XG4gICAgICAgICAgICAgICAgY3VycmVudFBhcmFncmFwaC5pbm5lckhUTUwgPSAnJztcbiAgICAgICAgICAgICAgICBjdXJyZW50UGFyYWdyYXBoLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3AnKSk7XG4gICAgICAgICAgICAgICAgY3VycmVudFBhcmFncmFwaC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgb25FZGl0TGlzdCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0U2VsZWN0aW9uKCkuc2V0QmFzZUFuZEV4dGVudChjdXJyZW50UGFyYWdyYXBoLnF1ZXJ5U2VsZWN0b3IoJ3AnKSwgMCwgY3VycmVudFBhcmFncmFwaC5xdWVyeVNlbGVjdG9yKCdwJyksIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgaWYgKGZvY3VzZWRCbG9jay5pbm5lclRleHQgIT09ICcnKSB7XG4gICAgICAgICAgICAgICAgY29kZUVkaXRBcGkuYmxvY2tzLmluc2VydCgncGFyYWdyYXBoJywgY29kZUVkaXRBcGkuYmxvY2tzLmdldEN1cnJlbnRCbG9ja0luZGV4KCkpO1xuICAgICAgICAgICAgICAgIGxldCBjdXJyZW50QmxvY2sgPSBjb2RlRWRpdEVkaXRvci5xdWVyeVNlbGVjdG9yQWxsKCcuY2UtYmxvY2snKVtjb2RlRWRpdEFwaS5ibG9ja3MuZ2V0Q3VycmVudEJsb2NrSW5kZXgoKV07XG4gICAgICAgICAgICAgICAgbGV0IHByZXZpb3VzQmxvY2sgPSBjb2RlRWRpdEVkaXRvci5xdWVyeVNlbGVjdG9yQWxsKCcuY2UtYmxvY2snKVtjb2RlRWRpdEFwaS5ibG9ja3MuZ2V0Q3VycmVudEJsb2NrSW5kZXgoKSAtIDFdO1xuICAgICAgICAgICAgICAgIGxldCBjdXJyZW50UGFyYWdyYXBoID0gY3VycmVudEJsb2NrLnF1ZXJ5U2VsZWN0b3IoJy5jZS1wYXJhZ3JhcGgnKTtcbiAgICAgICAgICAgICAgICBsZXQgbGlzdEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHByZXZpb3VzQmxvY2sucXVlcnlTZWxlY3RvcignLmNlLXBhcmFncmFwaCcpLmZpcnN0RWxlbWVudENoaWxkLnRhZ05hbWUpO1xuICAgICAgICAgICAgICAgIGxpc3RFbGVtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpJykpO1xuICAgICAgICAgICAgICAgIGlmIChsaXN0RWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdvbCcpIHtcbiAgICAgICAgICAgICAgICAgICAgbGlzdEVsZW1lbnQuZmlyc3RFbGVtZW50Q2hpbGQuc2V0QXR0cmlidXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3ZhbHVlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIChwYXJzZUludChwcmV2aW91c0Jsb2NrLnF1ZXJ5U2VsZWN0b3IoJ2xpJykuZ2V0QXR0cmlidXRlKCd2YWx1ZScpKSArIDEpLnRvU3RyaW5nKClcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY3VycmVudFBhcmFncmFwaC5hcHBlbmRDaGlsZChsaXN0RWxlbWVudCk7XG4gICAgICAgICAgICAgICAgY3VycmVudFBhcmFncmFwaC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgb25FZGl0TGlzdCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0U2VsZWN0aW9uKCkuc2V0QmFzZUFuZEV4dGVudChjdXJyZW50UGFyYWdyYXBoLnF1ZXJ5U2VsZWN0b3IoJ2xpJyksIDAsIGN1cnJlbnRQYXJhZ3JhcGgucXVlcnlTZWxlY3RvcignbGknKSwgMCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGxldCBjdXJyZW50UGFyYWdyYXBoID0gY29kZUVkaXRFZGl0b3IucXVlcnlTZWxlY3RvckFsbCgnLmNlLXBhcmFncmFwaCcpW2NvZGVFZGl0QXBpLmJsb2Nrcy5nZXRDdXJyZW50QmxvY2tJbmRleCgpXTtcbiAgICAgICAgICAgICAgICBjdXJyZW50UGFyYWdyYXBoLmlubmVySFRNTCA9ICcnO1xuICAgICAgICAgICAgICAgIGN1cnJlbnRQYXJhZ3JhcGguYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgncCcpKTtcbiAgICAgICAgICAgICAgICBjdXJyZW50UGFyYWdyYXBoLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBvbkVkaXRMaXN0LCB0cnVlKTtcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRTZWxlY3Rpb24oKS5zZXRCYXNlQW5kRXh0ZW50KGN1cnJlbnRQYXJhZ3JhcGgucXVlcnlTZWxlY3RvcigncCcpLCAwLCBjdXJyZW50UGFyYWdyYXBoLnF1ZXJ5U2VsZWN0b3IoJ3AnKSwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
|