tnx-shared 5.3.286 → 5.3.288
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/tnx-shared.umd.js +68 -3
- package/bundles/tnx-shared.umd.js.map +1 -1
- package/bundles/tnx-shared.umd.min.js +1 -1
- package/bundles/tnx-shared.umd.min.js.map +1 -1
- package/classes/base/data-form-base.d.ts.map +1 -1
- package/classes/base/i-list-component.d.ts +2 -0
- package/classes/base/i-list-component.d.ts.map +1 -1
- package/classes/base/list-base.d.ts +2 -2
- package/classes/base/list-base.d.ts.map +1 -1
- package/classes/base/list-component-base.d.ts +5 -0
- package/classes/base/list-component-base.d.ts.map +1 -1
- package/classes/base/validators.d.ts.map +1 -1
- package/esm2015/classes/base/data-form-base.js +4 -3
- package/esm2015/classes/base/i-list-component.js +1 -1
- package/esm2015/classes/base/list-base.js +9 -4
- package/esm2015/classes/base/list-component-base.js +34 -1
- package/esm2015/classes/base/validators.js +4 -2
- package/esm2015/components/crud/crud-list/crud-list.component.js +2 -2
- package/esm2015/services/common.service.js +13 -1
- package/fesm2015/tnx-shared.js +57 -4
- package/fesm2015/tnx-shared.js.map +1 -1
- package/package.json +2 -2
- package/services/common.service.d.ts +1 -0
- package/services/common.service.d.ts.map +1 -1
- package/tnx-shared.metadata.json +1 -1
|
@@ -59,7 +59,9 @@ export class RequiredValidator {
|
|
|
59
59
|
var _a;
|
|
60
60
|
this._label = (_a = event.control.errorLabel) !== null && _a !== void 0 ? _a : event.control.label;
|
|
61
61
|
if (event.control.isHtmlLabel) {
|
|
62
|
-
|
|
62
|
+
const element = document.createElement('div');
|
|
63
|
+
element.innerHTML = this._label;
|
|
64
|
+
this._label = element.innerText;
|
|
63
65
|
}
|
|
64
66
|
return isNotEmpty(event.value, event.control);
|
|
65
67
|
}
|
|
@@ -822,4 +824,4 @@ export class PasswordValidator {
|
|
|
822
824
|
return this._message;
|
|
823
825
|
}
|
|
824
826
|
}
|
|
825
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RueC1zaGFyZWQvc3JjL2xpYi9jbGFzc2VzL2Jhc2UvdmFsaWRhdG9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBSzVCLE9BQU8sRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDakUsT0FBTyxFQUFhLHdCQUF3QixFQUFFLHVCQUF1QixFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hHLE9BQU8sRUFBRSxvQkFBb0IsRUFBbUIsV0FBVyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFPdEYsU0FBUyxVQUFVLENBQUMsS0FBVSxFQUFFLE9BQXdCO0lBQ3BELElBQUksQ0FBQyxDQUFDLEtBQUssSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksUUFBUSxFQUFFO1FBQ3ZDLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7S0FDeEI7SUFDRCxJQUFJLE9BQU8sWUFBWSx1QkFBdUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUU7UUFDaEUsT0FBTyxLQUFLLENBQUM7S0FDaEI7SUFFRCxJQUFJLE9BQU8sWUFBWSxvQkFBb0IsRUFBRTtRQUN6QyxJQUFJLEtBQUssSUFBSSxJQUFJLElBQUksS0FBSyxLQUFLLEVBQUU7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUVoRCxNQUFNLGNBQWMsR0FBeUIsT0FBTyxDQUFDO1FBQ3JELElBQUksY0FBYyxDQUFDLGdCQUFnQixFQUFFO1lBQ2pDLElBQUksS0FBSyxDQUFDLFVBQVUsSUFBSSxJQUFJLElBQUksS0FBSyxDQUFDLFVBQVUsS0FBSyxFQUFFO2dCQUFFLE9BQU8sS0FBSyxDQUFDO1NBQ3pFO1FBRUQsSUFBSSxjQUFjLENBQUMsZ0JBQWdCLEVBQUU7WUFDakMsSUFBSSxL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QjtJQUcxQjtJQUVBLENBQUM7SUFDRCxjQUFjLENBQUMsV0FBd0I7UUFDbkMsSUFBSSxDQUFDLFlBQVksR0FBRyxXQUFXLENBQUM7SUFDcEMsQ0FBQztJQUVLLFFBQVEsQ0FBQyxLQUFnQjs7WUFDM0IsSUFBSSxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQ2pCLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7WUFDMUIsSUFBSSxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsTUFBTSxFQUFFO2dCQUNmLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDL0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUU7b0JBQ2pCLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDO2lCQUM1QjthQUNKO1lBQ0QsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUM7WUFDeEIsT0FBTyxDQUFDLE9BQU8sQ0FBQztRQUNwQixDQUFDO0tBQUE7SUFFRCxRQUFRO1FBQ0osT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3pCLENBQUM7Q0FFSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IENvbnRyb2xUcmVlTm9kZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvY3J1ZC9jcnVkLWZvcm0vY3J1ZC1mb3JtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGaWx0ZXIgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ3JpZC1pbmZvJztcbmltcG9ydCB7IFVzZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vcHVibGljLWFwaSc7XG5pbXBvcnQgeyBCYXNlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Jhc2Uuc2VydmljZSc7XG5pbXBvcnQgeyBpc0FycmF5LCBpc0xpdGVyYWxPYmplY3QgfSBmcm9tICcuLi9lbnZpcm9ubWVudC1zY2hlbWEnO1xuaW1wb3J0IHsgRXZlbnREYXRhLCBGaWxlTWFuYWdlckNvbnRyb2xTY2hlbWEsIEZpbGVVcGxvYWRDb250cm9sU2NoZW1hLCBPcGVyYXRvciB9IGZyb20gJy4uL2Zvcm0tc2NoZW1hJztcbmltcG9ydCB7IEFkZHJlc3NDb250cm9sU2NoZW1hLCBGb3JtQ29udHJvbEJhc2UsIFRhYmxlU2NoZW1hIH0gZnJvbSAnLi8uLi9mb3JtLXNjaGVtYSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVZhbGlkYXRvciB7XG4gICAgdmFsaWRhdGUoZXZlbnQ6IEV2ZW50RGF0YSk6IFByb21pc2U8Ym9vbGVhbj4gfCBib29sZWFuO1xuICAgIGdldEVycm9yKCk6IHN0cmluZztcbn1cblxuZnVuY3Rpb24gaXNOb3RFbXB0eSh2YWx1ZTogYW55LCBjb250cm9sOiBGb3JtQ29udHJvbEJhc2UpOiBib29sZWFuIHtcbiAgICBpZiAoISF2YWx1ZSAmJiB0eXBlb2YgKHZhbHVlKSA9PSAnc3RyaW5nJykge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlLnRyaW0oKTtcbiAgICB9XG4gICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBGaWxlVXBsb2FkQ29udHJvbFNjaGVtYSAmJiAhY29udHJvbC5oYXNGaWxlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEFkZHJlc3NDb250cm9sU2NoZW1hKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PSBudWxsIHx8IHZhbHVlID09PSAnJykgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIGNvbnN0IGFkZHJlc3NDb250cm9sID0gPEFkZHJlc3NDb250cm9sU2NoZW1hPmNvbnRyb2w7XG4gICAgICAgIGlmIChhZGRyZXNzQ29udHJvbC5yZXF1aXJlZFByb3ZpbmNlKSB7XG4gICAgICAgICAgICBpZiAodmFsdWUuaWRQcm92aW5jZSA9PSBudWxsIHx8IHZhbHVlLmlkUHJvdmluY2UgPT09ICcnKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYWRkcmVzc0NvbnRyb2wucmVxdWlyZWREaXN0cmljdCkge1xuICAgICAgICAgICAgaWYgKHZhbHVlLmlkRGlzdHJpY3QgPT0gbnVsbCB8fCB2YWx1ZS5pZERpc3RyaWN0ID09PSAnJykgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFkZHJlc3NDb250cm9sLnJlcXVpcmVkV2FyZCkge1xuICAgICAgICAgICAgaWYgKHZhbHVlLmlkV2FyZCA9PSBudWxsIHx8IHZhbHVlLmlkV2FyZCA9PT0gJycpIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhZGRyZXNzQ29udHJvbC5yZXF1aXJlZFN0cmVldCkge1xuICAgICAgICAgICAgaWYgKHZhbHVlLnN0cmVldCA9PSBudWxsIHx8IHZhbHVlLnN0cmVldCA9PT0gJycpIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhZGRyZXNzQ29udHJvbC5yZXF1aXJlZE5vKSB7XG4gICAgICAgICAgICBpZiAodmFsdWUubm8gPT0gbnVsbCB8fCB2YWx1ZS5ubyA9PT0gJycpIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmIChjb250cm9sIGluc3RhbmNlb2YgRmlsZU1hbmFnZXJDb250cm9sU2NoZW1hKSB7XG4gICAgICAgIGlmICghY29udHJvbC5fY29tcG9uZW50Ll92YWx1ZSB8fCBjb250cm9sLl9jb21wb25lbnQuX3ZhbHVlLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuICAgIGVsc2Uge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh2YWx1ZSA9PT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGNsYXNzIFJlcXVpcmVkVmFsaWRhdG9yIGltcGxlbWVudHMgSVZhbGlkYXRvciB7XG4gICAgcHJpdmF0ZSBfbGFiZWw7XG5cbiAgICB2YWxpZGF0ZShldmVudDogRXZlbnREYXRhKTogYm9vbGVhbiB7XG4gICAgICAgIHRoaXMuX2xhYmVsID0gZXZlbnQuY29udHJvbC5lcnJvckxhYmVsID8/IGV2ZW50LmNvbnRyb2wubGFiZWw7XG4gICAgICAgIGlmIChldmVudC5jb250cm9sLmlzSHRtbExhYmVsKSB7XG4gICAgICAgICAgICB0aGlzLl9sYWJlbCA9IGV2ZW50LmNvbnRyb2wuZnVsbExhYmVsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc05vdEVtcHR5KGV2ZW50LnZhbHVlLCBldmVudC5jb250cm9sKTtcbiAgICB9XG5cbiAgICBnZXRFcnJvcigpIHtcbiAgICAgICAgaWYgKHRoaXMuX2xhYmVsKSB7XG4gICAgICAgICAgICByZXR1cm4gYCR7dGhpcy5fbGFiZWx9IGLhuq90IGJ14buZYyBuaOG6rXBgO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuICdUcsaw4budbmcgdGjDtG5nIHRpbiBi4bqvdCBideG7mWMgbmjhuq1wJztcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJlcXVpcmVkRmllbGRzVmFsaWRhdG9yIGltcGxlbWVudHMgSVZhbGlkYXRvciB7XG4gICAgX3JlcXVpcmVkRmllbGRzOiBzdHJpbmdbXTtcbiAgICBfbWVzc2FnZTogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IocmVxdWlyZWRGaWVsZHM6IHN0cmluZ1tdLCBtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fcmVxdWlyZWRGaWVsZHMgPSByZXF1aXJlZEZpZWxkcztcbiAgICAgICAgaWYgKHRoaXMuX3JlcXVpcmVkRmllbGRzLmxlbmd0aCA9PSAwKSBhbGVydCgnQ+G6pXUgaMOsbmggUmVxdWlyZWRGaWVsZHNWYWxpZGF0b3Igc2FpJyk7XG4gICAgICAgIHRoaXMuX21lc3NhZ2UgPSBtZXNzYWdlO1xuICAgIH1cblxuICAgIGdldFJlcXVpcmVkRmllbGRzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVxdWlyZWRGaWVsZHM7XG4gICAgfVxuXG4gICAgZ2V0TWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21lc3NhZ2U7XG4gICAgfVxuXG4gICAgdmFsaWRhdGUoZXZlbnQ6IEV2ZW50RGF0YSkge1xuICAgICAgICBjb25zdCBhbGxSZXF1aXJlZEZpZWxkcyA9IFsuLi50aGlzLl9yZXF1aXJlZEZpZWxkcywgZXZlbnQuY29udHJvbC5maWVsZF07XG4gICAgICAgIGxldCBoYXNFcnJvciA9IHRydWU7XG4gICAgICAgIGNvbnN0IHBhcmVudE1vZGVsID0gZXZlbnQuY3VycmVudE5vZGUucGFyZW50Tm9kZS5tb2RlbDtcbiAgICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiBhbGxSZXF1aXJlZEZpZWxkcykge1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBwYXJlbnRNb2RlbC5fZXJyb3JzW2ZpZWxkXS5pbmRleE9mKHRoaXMuX21lc3NhZ2UpO1xuICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgICAgICBwYXJlbnRNb2RlbC5fZXJyb3JzW2ZpZWxkXS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50Tm9kZSA9IGV2ZW50LmN1cnJlbnROb2RlLmdldE5vZGVCeVBhdGgoZmllbGQpO1xuICAgICAgICAgICAgaWYgKGlzTm90RW1wdHkoY3VycmVudE5vZGUubW9kZWwsIGN1cnJlbnROb2RlLmNvbnRyb2wpKSB7XG4gICAgICAgICAgICAgICAgaGFzRXJyb3IgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChoYXNFcnJvcikge1xuICAgICAgICAgICAgdGhpcy5fcmVxdWlyZWRGaWVsZHMuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICAgICAgICAgICAgcGFyZW50TW9kZWwuX2Vycm9yc1tmaWVsZF0ucHVzaCh0aGlzLl9tZXNzYWdlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICFoYXNFcnJvcjtcbiAgICB9XG5cbiAgICBnZXRFcnJvcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21lc3NhZ2U7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRW1haWxWYWxpZGF0b3IgaW1wbGVtZW50cyBJVmFsaWRhdG9yIHtcbiAgICB2YWxpZGF0ZShldmVudDogRXZlbnREYXRhKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gZXZlbnQudmFsdWU7XG4gICAgICAgIGlmICh2YWx1ZSA9PSBudWxsIHx8IHZhbHVlID09PSAnJykgcmV0dXJuIHRydWU7XG5cbiAgICAgICAgY29uc3QgcmUgPSAvXigoW148PigpXFxbXFxdXFxcXC4sOzpcXHNAXCJdKyhcXC5bXjw+KClcXFtcXF1cXFxcLiw7Olxcc0BcIl0rKSopfChcIi4rXCIpKUAoKFxcW1swLTldezEsM31cXC5bMC05XXsxLDN9XFwuWzAtOV17MSwzfVxcLlswLTldezEsM31cXF0pfCgoW2EtekEtWlxcLTAtOV0rXFwuKStbYS16QS1aXXsyLH0pKSQvO1xuICAgICAgICByZXR1cm4gcmUudGVzdChTdHJpbmcodmFsdWUpLnRvTG93ZXJDYXNlKCkpO1xuICAgIH1cblxuICAgIGdldEVycm9yKCkge1xuICAgICAgICByZXR1cm4gJ0tow7RuZyDEkcO6bmcgxJHhu4tuaCBk4bqhbmcgdGjGsCDEkWnhu4duIHThu60nO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBMc3RFbWFpbFZhbGlkYXRvciBpbXBsZW1lbnRzIElWYWxpZGF0b3Ige1xuICAgIHZhbGlkYXRlKGV2ZW50OiBFdmVudERhdGEpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBldmVudC52YWx1ZTtcbiAgICAgICAgaWYgKCFpc0FycmF5KHZhbHVlKSB8fCAhdmFsdWU/Lmxlbmd0aCkgcmV0dXJuIHRydWU7XG4gICAgICAgIGNvbnN0IHN0clZhbHVlID0gdmFsdWUuam9pbignLCcpLnJlcGxhY2VBbGwoJyAnLCAnJyk7XG4gICAgICAgIGNvbnN0IHJlID0gL14oKFthLXpBLVowLTlfXFwtXFwuXSspQChbYS16QS1aMC05X1xcLVxcLl0rKVxcLihbYS16QS1aXXsyLDV9KXsxLDI1fSkrKFs7LC5dKChbYS16QS1aMC05X1xcLVxcLl0rKUAoW2EtekEtWjAtOV9cXC1cXC5dKylcXC4oW2EtekEtWl17Miw1fSl7MSwyNX0pKykqJC87XG4gICAgICAgIHJldHVybiByZS50ZXN0KHN0clZhbHVlKTtcbiAgICB9XG5cbiAgICBnZXRFcnJvcigpIHtcbiAgICAgICAgcmV0dXJuICdDw7MgcGjhuqduIHThu60ga2jDtG5nIMSRw7puZyDEkeG7i25oIGThuqFuZyB0aMawIMSRaeG7h24gdOG7rSc7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTmFtZVZhbGlkYXRvciBpbXBsZW1lbnRzIElWYWxpZGF0b3Ige1xuICAgIHZhbGlkYXRlKGV2ZW50OiBFdmVudERhdGEpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBldmVudC52YWx1ZTtcbiAgICAgICAgaWYgKHZhbHVlID09IG51bGwgfHwgdmFsdWUgPT09ICcnKSByZXR1cm4gdHJ1ZTtcblxuICAgICAgICAvLyBjb25zdCByZSA9IC9eW0EtWsOAw4HhuqDhuqLDg8OC4bqm4bqk4bqs4bqo4bqqxILhurDhuq7hurbhurLhurTDiMOJ4bq44bq64bq8w4rhu4Dhur7hu4bhu4Lhu4TDjMON4buK4buIxKjDksOT4buM4buOw5XDlOG7kuG7kOG7mOG7lOG7lsag4buc4bua4bui4bue4bugw5nDmuG7pOG7psWoxq/hu6rhu6jhu7Dhu6zhu67hu7LDneG7tOG7tuG7uMSQXVthLXrDoMOh4bqh4bqjw6PDouG6p+G6peG6reG6qeG6q8SD4bqx4bqv4bq34bqz4bq1w6jDqeG6ueG6u+G6vcOq4buB4bq/4buH4buD4buFw6zDreG7i+G7icSpw7LDs+G7jeG7j8O1w7Thu5Phu5Hhu5nhu5Xhu5fGoeG7neG7m+G7o+G7n+G7ocO5w7rhu6Xhu6fFqcaw4bur4bup4bux4but4buv4buzw73hu7Xhu7fhu7nEkV0qKD86WyBdW0EtWsOAw4HhuqDhuqLDg8OC4bqm4bqk4bqs4bqo4bqqxILhurDhuq7hurbhurLhurTDiMOJ4bq44bq64bq8w4rhu4Dhur7hu4bhu4Lhu4TDjMON4buK4buIxKjDksOT4buM4buOw5XDlOG7kuG7kOG7mOG7lOG7lsag4buc4bua4bui4bue4bugw5nDmuG7pOG7psWoxq/hu6rhu6jhu7Dhu6zhu67hu7LDneG7tOG7tuG7uMSQXVthLXrDoMOh4bqh4bqjw6PDouG6p+G6peG6reG6qeG6q8SD4bqx4bqv4bq34bqz4bq1w6jDqeG6ueG6u+G6vcOq4buB4bq/4buH4buD4buFw6zDreG7i+G7icSpw7LDs+G7jeG7j8O1w7Thu5Phu5Hhu5nhu5Xhu5fGoeG7neG7m+G7o+G7n+G7ocO5w7rhu6Xhu6fFqcaw4bur4bup4bux4but4buv4buzw73hu7Xhu7fhu7nEkV0qKSokfF5bQS1aw4DDgeG6oOG6osODw4LhuqbhuqThuqzhuqjhuqrEguG6sOG6ruG6tuG6suG6tMOIw4nhurjhurrhurzDiuG7gOG6vuG7huG7guG7hMOMw43hu4rhu4jEqMOSw5Phu4zhu47DlcOU4buS4buQ4buY4buU4buWxqDhu5zhu5rhu6Lhu57hu6DDmcOa4buk4bumxajGr+G7quG7qOG7sOG7rOG7ruG7ssOd4bu04bu24bu4xJBdKig/OlsgXVtBLVrDgMOB4bqg4bqiw4PDguG6puG6pOG6rOG6qOG6qsSC4bqw4bqu4bq24bqy4bq0w4jDieG6uOG6uuG6vMOK4buA4bq+4buG4buC4buEw4zDjeG7iuG7iMSow5LDk+G7jOG7jsOVw5Thu5Lhu5Dhu5jhu5Thu5bGoOG7nOG7muG7ouG7nuG7oMOZw5rhu6Thu6bFqMav4buq4buo4buw4bus4buu4buyw53hu7Thu7bhu7jEkF0qKSokfF4oW2EtekEtWl17Mix9XFxzW2EtekEtWl17MSx9Jz8tP1thLXpBLVpdezIsfVxccz8oW2EtekEtWl17MSx9KT8pLztcbiAgICAgICAgY29uc3QgcmUgPSAvW0EtWsOAw4HhuqDhuqLDg8OC4bqm4bqk4bqs4bqo4bqqxILhurDhuq7hurbhurLhurTDiMOJ4bq44bq64bq8w4rhu4Dhur7hu4bhu4Lhu4TDjMON4buK4buIxKjDksOT4buM4buOw5XDlOG7kuG7kOG7mOG7lOG7lsag4buc4bua4bui4bue4bugw5nDmuG7pOG7psWoxq/hu6rhu6jhu7Dhu6zhu67hu7LDneG7tOG7tuG7uMSQXVthLXrDoMOh4bqh4bqjw6PDouG6p+G6peG6reG6qeG6q8SD4bqx4bqv4bq34bqz4bq1w6jDqeG6ueG6u+G6vcOq4buB4bq/4buH4buD4buFw6zDreG7i+G7icSpw7LDs+G7jeG7j8O1w7Thu5Phu5Hhu5nhu5Xhu5fGoeG7neG7m+G7o+G7n+G7ocO5w7rhu6Xhu6fFqcaw4bur4bup4bux4but4buv4buzw73hu7Xhu7fhu7nEkV0qKD86WyBdW0EtWsOAw4HhuqDhuqLDg8OC4bqm4bqk4bqs4bqo4bqqxILhurDhuq7hurbhurLhurTDiMOJ4bq44bq64bq8w4rhu4Dhur7hu4bhu4Lhu4TDjMON4buK4buIxKjDksOT4buM4buOw5XDlOG7kuG7kOG7mOG7lOG7lsag4buc4bua4bui4bue4bugw5nDmuG7pOG7psWoxq/hu6rhu6jhu7Dhu6zhu67hu7LDneG7tOG7tuG7uMSQXVthLXrDoMOh4bqh4bqjw6PDouG6p+G6peG6reG6qeG6q8SD4bqx4bqv4bq34bqz4bq1w6jDqeG6ueG6u+G6vcOq4buB4bq/4buH4buD4buFw6zDreG7i+G7icSpw7LDs+G7jeG7j8O1w7Thu5Phu5Hhu5nhu5Xhu5fGoeG7neG7m+G7o+G7n+G7ocO5w7rhu6Xhu6fFqcaw4bur4bup4bux4but4buv4buzw73hu7Xhu7fhu7nEkV0qKSokfF5bQS1aw4DDgeG6oOG6osODw4LhuqbhuqThuqzhuqjhuqrEguG6sOG6ruG6tuG6suG6tMOIw4nhurjhurrhurzDiuG7gOG6vuG7huG7guG7hMOMw43hu4rhu4jEqMOSw5Phu4zhu47DlcOU4buS4buQ4buY4buU4buWxqDhu5zhu5rhu6Lhu57hu6DDmcOa4buk4bumxajGr+G7quG7qOG7sOG7rOG7ruG7ssOd4bu04bu24bu4xJBdKig/OlsgXVtBLVrDgMOB4bqg4bqiw4PDguG6puG6pOG6rOG6qOG6qsSC4bqw4bqu4bq24bqy4bq0w4jDieG6uOG6uuG6vMOK4buA4bq+4buG4buC4buEw4zDjeG7iuG7iMSow5LDk+G7jOG7jsOVw5Thu5Lhu5Dhu5jhu5Thu5bGoOG7nOG7muG7ouG7nuG7oMOZw5rhu6Thu6bFqMav4buq4buo4buw4bus4buu4buyw53hu7Thu7bhu7jEkF0qKSokfFsgXXxeKFthLXpBLVpdezIsfVxcc1thLXpBLVpdezEsfSc/LT9bYS16QS1aXXsyLH1cXHM/KFthLXpBLVpdezEsfSk/KS87XG4gICAgICAgIHJldHVybiByZS50ZXN0KFN0cmluZyh2YWx1ZSkpO1xuICAgIH1cblxuICAgIGdldEVycm9yKCkge1xuICAgICAgICByZXR1cm4gJ0tow7RuZyDEkcO6bmcgxJHhu4tuaCBk4bqhbmcgdMOqbic7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgUGhvbmVWYWxpZGF0b3IgaW1wbGVtZW50cyBJVmFsaWRhdG9yIHtcbiAgICB2YWxpZGF0ZShldmVudDogRXZlbnREYXRhKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gZXZlbnQudmFsdWU7XG4gICAgICAgIGlmICh2YWx1ZSA9PSBudWxsIHx8IHZhbHVlID09PSAnJykgcmV0dXJuIHRydWU7XG5cbiAgICAgICAgY29uc3QgcmUgPSAvXjBbMS05XVswLTldezgsOX0kLztcbiAgICAgICAgcmV0dXJuIHJlLnRlc3QodmFsdWUpO1xuICAgIH1cblxuICAgIGdldEVycm9yKCkge1xuICAgICAgICByZXR1cm4gJ0tow7RuZyDEkcO6bmcgxJHhu4tuaCBk4bqhbmcgc+G7kSDEkWnhu4duIHRob+G6oWknO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIENjY2RWYWxpZGF0b3IgaW1wbGVtZW50cyBJVmFsaWRhdG9yIHtcbiAgICB2YWxpZGF0ZShldmVudDogRXZlbnREYXRhKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gZXZlbnQudmFsdWU7XG4gICAgICAgIGlmICh2YWx1ZSA9PSBudWxsIHx8IHZhbHVlID09PSAnJykgcmV0dXJuIHRydWU7XG5cbiAgICAgICAgY29uc3QgcmUgPSAvXlxcZHs5fSR8XlxcZHsxMn0kLztcbiAgICAgICAgcmV0dXJuIHJlLnRlc3QodmFsdWUpO1xuICAgIH1cblxuICAgIGdldEVycm9yKCkge1xuICAgICAgICByZXR1cm4gJ0tow7RuZyDEkcO6bmcgxJHhu4tuaCBk4bqhbmcgQ0NDRC9DTU5EJztcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBQYXNzcG9ydFZhbGlkYXRvciBpbXBsZW1lbnRzIElWYWxpZGF0b3Ige1xuICAgIG1lc3NhZ2UgPSAnS2jDtG5nIMSRw7puZyDEkeG7i25oIGThuqFuZyBT4buRIGjhu5kgY2hp4bq/dSBob+G6t2MgU+G7kSBDQ0NEIGhv4bq3YyBjaOG7qW5nIG1pbmggbmjDom4gZMOibic7XG4gICAgY29uc3RydWN0b3IobWVzc2FnZT86IHN0cmluZykge1xuICAgICAgICBpZiAobWVzc2FnZSkge1xuICAgICAgICAgICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2YWxpZGF0ZShldmVudDogRXZlbnREYXRhKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gZXZlbnQudmFsdWU7XG4gICAgICAgIGlmICh2YWx1ZSA9PSBudWxsIHx8IHZhbHVlID09PSAnJykgcmV0dXJuIHRydWU7XG5cbiAgICAgICAgY29uc3QgcmUgPSAvXlxcZHswLDEyfSQvO1xuICAgICAgICByZXR1cm4gcmUudGVzdCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgZ2V0RXJyb3IoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1lc3NhZ2U7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTGVuZ3RoVmFsaWRhdG9yIGltcGxlbWVudHMgSVZhbGlkYXRvciB7XG4gICAgcHJpdmF0ZSBfZXJyb3I6IGFueSA9ICcnO1xuICAgIHByaXZhdGUgX21pbiA9IDA7XG4gICAgcHJpdmF0ZSBfbWF4ID0gMTAwO1xuXG4gICAgY29uc3RydWN0b3IobWF4LCBtaW4gPSAwKSB7XG4gICAgICAgIHRoaXMuX21heCA9IG1heDtcbiAgICAgICAgdGhpcy5fbWluID0gbWluO1xuICAgIH1cblxuICAgIHZhbGlkYXRlKGV2ZW50OiBFdmVudERhdGEpOiBib29sZWFuIHtcbiAgICAgICAgbGV0IHZhbHVlID0gZXZlbnQudmFsdWU7XG4gICAgICAgIGlmICh2YWx1ZSA9PSBudWxsIHx8IHZhbHVlID09PSAnJykge1xuICAgICAgICAgICAgaWYgKHRoaXMuX21pbiA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnJvciA9IGDEkOG7mSBkw6BpIHThu5FpIHRoaeG7g3UgJHt0aGlzLl9taW59IGvDvSB04buxYDtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhbHVlID0gdmFsdWUgKyAnJztcbiAgICAgICAgY29uc3QgbGVuID0gdmFsdWUubGVuZ3RoO1xuICAgICAgICBpZiAobGVuIDwgdGhpcy5fbWluKSB7XG4gICAgICAgICAgICB0aGlzLl9lcnJvciA9IGDEkOG7mSBkw6BpIHThu5FpIHRoaeG7g3UgJHt0aGlzLl9taW59IGvDvSB04buxYDtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobGVuID4gdGhpcy5fbWF4KSB7XG4gICAgICAgICAgICB0aGlzLl9lcnJvciA9IGDEkOG7mSBkw6BpIHThu5FpIMSRYSAke3RoaXMuX21heH0ga8O9IHThu7FgO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZ2V0RXJyb3IoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lcnJvcjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBQaG9uZU51bWJlclZhbGlkYXRvciBpbXBsZW1lbnRzIElWYWxpZGF0b3Ige1xuICAgIHZhbGlkYXRlKGV2ZW50OiBFdmVudERhdGEpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBldmVudC52YWx1ZTtcbiAgICAgICAgaWYgKHZhbHVlID09IG51bGwgfHwgdmFsdWUgPT09ICcnKSByZXR1cm4gdHJ1ZTtcblxuICAgICAgICBjb25zdCByZSA9IC9eKFsgXXxbKyhdKlswLTldezEsNH1bKV17MCwxfVstXFxzXFwuLzAtOV0qKSQvZztcbiAgICAgICAgcmV0dXJuIHJlLnRlc3QoU3RyaW5nKHZhbHVlKS50b0xvd2VyQ2FzZSgpKTtcbiAgICB9XG5cbiAgICBnZXRFcnJvcigpIHtcbiAgICAgICAgcmV0dXJuICdLaMO0bmcgxJHDum5nIMSR4buLbmggZOG6oW5nIHPhu5EgxJFp4buHbiB0aG/huqFpJztcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBOdW1iZXJPbmx5VmFsaWRhdG9yIGltcGxlbWVudHMgSVZhbGlkYXRvciB7XG4gICAgdmFsaWRhdGUoZXZlbnQ6IEV2ZW50RGF0YSk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGV2ZW50LnZhbHVlO1xuICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSA9PT0gJycpIHJldHVybiB0cnVlO1xuXG4gICAgICAgIGNvbnN0IHJlID0gL15cXC0/KFswLTldKSokLztcbiAgICAgICAgcmV0dXJuIHJlLnRlc3QoU3RyaW5nKHZhbHVlKS50b0xvd2VyQ2FzZSgpKTtcbiAgICB9XG5cbiAgICBnZXRFcnJvcigpIHtcbiAgICAgICAgcmV0dXJuICdLaMO0bmcgxJHDum5nIMSR4buLbmggZOG6oW5nIHPhu5EnO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEF0TGVhc3RPbmVSb3dUYWJsZVZhbGlkYXRvciBpbXBsZW1lbnRzIElWYWxpZGF0b3Ige1xuICAgIHZhbGlkYXRlKGV2ZW50OiBFdmVudERhdGEpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKGV2ZW50LmN1cnJlbnROb2RlLmNoaWxkTm9kZXMubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBnZXRFcnJvcigpIHtcbiAgICAgICAgcmV0dXJuICdC4bqjbmcgYuG6r3QgYnXhu5ljIG5o4bqtcCc7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVGF4Q29kZVZhbGlkYXRvciBpbXBsZW1lbnRzIElWYWxpZGF0b3Ige1xuICAgIHZhbGlkYXRlKGV2ZW50OiBFdmVudERhdGEpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBldmVudC52YWx1ZTtcbiAgICAgICAgaWYgKHZhbHVlID09IG51bGwgfHwgdmFsdWUgPT09ICcnKSByZXR1cm4gdHJ1ZTtcblxuICAgICAgICBjb25zdCByZSA9IC9eKFswLTldKXsxMH0kfF4oWzAtOV0pezEwfSgtKShbMC05XSl7M30kLztcbiAgICAgICAgcmV0dXJuIHJlLnRlc3QoU3RyaW5nKHZhbHVlKS50b0xvd2VyQ2FzZSgpKTtcbiAgICB9XG5cbiAgICBnZXRFcnJvcigpIHtcbiAgICAgICAgcmV0dXJuICdLaMO0bmcgxJHDum5nIMSR4buLbmggZOG6oW5nIG3DoyBz4buRIHRodeG6vyc7XG4gICAgfVxufVxuXG5jb25zdCB2YWxpZEZ1bmN0aW9uID0ge1xuICAgIFtPcGVyYXRvci5ncmVhdGVyXTogKHZhbHVlMTogYW55LCB2YWx1ZTI6IGFueSkgPT4gdmFsdWUxID4gdmFsdWUyLFxuICAgIFtPcGVyYXRvci5ncmVhdGVyVGhhbkVxdWFsXTogKHZhbHVlMTogYW55LCB2YWx1ZTI6IGFueSkgPT4gdmFsdWUxID49IHZhbHVlMixcbiAgICBbT3BlcmF0b3IubG93ZXJdOiAodmFsdWUxOiBhbnksIHZhbHVlMjogYW55KSA9PiB2YWx1ZTEgPCB2YWx1ZTIsXG4gICAgW09wZXJhdG9yLmxvd2VyVGhhbkVxdWFsXTogKHZhbHVlMTogYW55LCB2YWx1ZTI6IGFueSkgPT4gdmFsdWUxIDw9IHZhbHVlMixcbiAgICBbT3BlcmF0b3IuZXF1YWxdOiAodmFsdWUxOiBhbnksIHZhbHVlMjogYW55KSA9PiB2YWx1ZTEgPT0gdmFsdWUyXG59O1xuXG5jb25zdCBvcGVyYXRvck1lYW5pbmcgPSB7XG4gICAgW09wZXJhdG9yLmdyZWF0ZXJdOiAnbOG7m24gaMahbicsXG4gICAgW09wZXJhdG9yLmdyZWF0ZXJUaGFuRXF1YWxdOiAnbOG7m24gaMahbiBob+G6t2MgYuG6sW5nJyxcbiAgICBbT3BlcmF0b3IubG93ZXJdOiAnbmjhu48gaMahbicsXG4gICAgW09wZXJhdG9yLmxvd2VyVGhhbkVxdWFsXTogJ25o4buPIGjGoW4gaG/hurdjIGLhurFuZycsXG4gICAgW09wZXJhdG9yLmVxdWFsXTogJ2LhurFuZydcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUNvbXBhcmVWYWxpZGF0b3Ige1xuICAgIGNvbXBhcmVVbmlxdWVGaWVsZDogc3RyaW5nO1xuICAgIGdldE9wZXJhdG9yQ29tcGFyZSgpOiBPcGVyYXRvcjtcbn1cblxuLyoqXG4gKiBTbyBzYW5oIDIgdGh14buZYyB0w61uaCB0cm9uZyBmb3JtLlxuICovXG5leHBvcnQgY2xhc3MgQ29tcGFyZVZhbGlkYXRvciBpbXBsZW1lbnRzIElWYWxpZGF0b3IsIElDb21wYXJlVmFsaWRhdG9yIHtcbiAgICBwcml2YXRlIF9vcGVyYXRvcjogT3BlcmF0b3I7XG4gICAgcHJpdmF0ZSBfY29tcGFyZUNvbnRyb2w6IEZvcm1Db250cm9sQmFzZTtcbiAgICBjb21wYXJlVW5pcXVlRmllbGQ6IHN0cmluZztcblxuICAgIGNvbnN0cnVjdG9yKG9wZXJhdG9yOiBPcGVyYXRvciwgY29tcGFyZVVuaXF1ZUZpZWxkOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fb3BlcmF0b3IgPSBvcGVyYXRvcjtcbiAgICAgICAgdGhpcy5jb21wYXJlVW5pcXVlRmllbGQgPSBjb21wYXJlVW5pcXVlRmllbGQ7XG4gICAgfVxuXG4gICAgZ2V0T3BlcmF0b3JDb21wYXJlKCk6IE9wZXJhdG9yIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX29wZXJhdG9yO1xuICAgIH1cblxuICAgIGdldEZpZWxkT3BlcmF0b3IoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9vcGVyYXRvcjtcbiAgICB9XG5cbiAgICBnZXRWYWx1ZUNvbXBhcmUodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIHZhbGlkYXRlKGV2ZW50OiBFdmVudERhdGEpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgY29tcGFyZU5vZGUgPSBldmVudC5jdXJyZW50Tm9kZS5nZXROb2RlQnlQYXRoKHRoaXMuY29tcGFyZVVuaXF1ZUZpZWxkKTtcbiAgICAgICAgdGhpcy5fY29tcGFyZUNvbnRyb2wgPSBjb21wYXJlTm9kZS5jb250cm9sO1xuICAgICAgICBjb25zdCBjb21wYXJlRmllbGQgPSB0aGlzLl9jb21wYXJlQ29udHJvbC5maWVsZDtcbiAgICAgICAgY29uc3QgY29tcGFyZVZhbHVlID0gY29tcGFyZU5vZGUubW9kZWw7XG4gICAgICAgIGNvbnN0IGNvbXBhcmVQYXJlbnRNb2RlbCA9IGNvbXBhcmVOb2RlLnBhcmVudE5vZGUubW9kZWw7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gZXZlbnQudmFsdWU7XG4gICAgICAgIGxldCBlcnJvck1lcztcblxuICAgICAgICBmb3IgKGNvbnN0IHZhbGlkYXRvciBvZiB0aGlzLl9jb21wYXJlQ29udHJvbC52YWxpZGF0b3JzKSB7XG4gICAgICAgICAgICBpZiAodmFsaWRhdG9yIGluc3RhbmNlb2YgQ29tcGFyZVZhbGlkYXRvciAmJiB2YWxpZGF0b3IuY29tcGFyZVVuaXF1ZUZpZWxkID09IGV2ZW50LmN1cnJlbnROb2RlLmNvbnRyb2wudW5pcXVlRmllbGQpIHtcbiAgICAgICAgICAgICAgICBlcnJvck1lcyA9IHZhbGlkYXRvci5nZXRFcnJvcihldmVudC5jdXJyZW50Tm9kZSk7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSBjb21wYXJlUGFyZW50TW9kZWwuX2Vycm9yc1tjb21wYXJlRmllbGRdLmluZGV4T2YoZXJyb3JNZXMpO1xuICAgICAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBhcmVQYXJlbnRNb2RlbC5fZXJyb3JzW2NvbXBhcmVGaWVsZF0uc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsdWUgPT0gbnVsbFxuICAgICAgICAgICAgfHwgdmFsdWUgPT09ICcnXG4gICAgICAgICAgICB8fCBjb21wYXJlVmFsdWUgPT0gbnVsbFxuICAgICAgICAgICAgfHwgY29tcGFyZVZhbHVlID09ICcnXG4gICAgICAgICkgcmV0dXJuIHRydWU7XG5cbiAgICAgICAgY29uc3QgcmUgPSB2YWxpZEZ1bmN0aW9uW3RoaXMuX29wZXJhdG9yXSAmJiB2YWxpZEZ1bmN0aW9uW3RoaXMuX29wZXJhdG9yXShcbiAgICAgICAgICAgIHRoaXMuZ2V0VmFsdWVDb21wYXJlKHZhbHVlKSwgdGhpcy5nZXRWYWx1ZUNvbXBhcmUoY29tcGFyZVZhbHVlKVxuICAgICAgICApO1xuXG5cbiAgICAgICAgaWYgKCFyZSAmJiBlcnJvck1lcykge1xuICAgICAgICAgICAgY29tcGFyZVBhcmVudE1vZGVsLl9lcnJvcnNbY29tcGFyZUZpZWxkXS5wdXNoKGVycm9yTWVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZTtcbiAgICB9XG5cbiAgICBnZXRFcnJvcihjb250cm9sVHJlZU5vZGU/OiBDb250cm9sVHJlZU5vZGUpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9jb21wYXJlQ29udHJvbCAmJiBjb250cm9sVHJlZU5vZGUpIHtcbiAgICAgICAgICAgIHRoaXMuX2NvbXBhcmVDb250cm9sID0gY29udHJvbFRyZWVOb2RlLmdldE5vZGVCeVBhdGgodGhpcy5jb21wYXJlVW5pcXVlRmllbGQpLmNvbnRyb2w7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGBQaOG6o2kgJHtvcGVyYXRvck1lYW5pbmdbdGhpcy5fb3BlcmF0b3JdfSAke3RoaXMuX2NvbXBhcmVDb250cm9sPy5mdWxsTGFiZWx9YDtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEYXRlQ29tcGFyZVZhbGlkYXRvciBleHRlbmRzIENvbXBhcmVWYWxpZGF0b3Ige1xuICAgIGNvbnN0cnVjdG9yKG9wZXJhdG9yOiBPcGVyYXRvciwgZmllbGQ6IHN0cmluZykge1xuICAgICAgICBzdXBlcihvcGVyYXRvciwgZmllbGQpO1xuICAgIH1cblxuICAgIGdldFZhbHVlQ29tcGFyZSh2YWx1ZSkge1xuICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHZhbHVlKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBOdW1iZXJDb21wYXJlVmFsaWRhdG9yIGV4dGVuZHMgQ29tcGFyZVZhbGlkYXRvciB7XG4gICAgY29uc3RydWN0b3Iob3BlcmF0b3I6IE9wZXJhdG9yLCBmaWVsZDogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKG9wZXJhdG9yLCBmaWVsZCk7XG4gICAgfVxuXG4gICAgZ2V0VmFsdWVDb21wYXJlKHZhbHVlKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PSB1bmRlZmluZWQgfHwgdmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSA9PSAnJykge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIE51bWJlcih2YWx1ZSk7XG4gICAgfVxufVxuXG4vKipcbiAqIEtp4buDbSB0cmEgZ2nDoSB0cuG7iyBt4buZdCBj4buZdCDEkcOjIHThu5NuIHThuqFpIHRyb25nIGRiLlxuICovXG5leHBvcnQgY2xhc3MgQ2hlY2tEdXBsaWNhdGVWYWxpZGF0b3IgaW1wbGVtZW50cyBJVmFsaWRhdG9yIHtcbiAgICBwcml2YXRlIF9sYWJlbDogc3RyaW5nO1xuICAgIHByaXZhdGUgX3ZhbHVlOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfYmFzZVNlcnZpY2U6IEJhc2VTZXJ2aWNlO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2RlZmF1bHRGaWx0ZXJzOiBGaWx0ZXJbXTtcblxuICAgIGNvbnN0cnVjdG9yKGRlZmF1bHRGaWx0ZXJzPzogRmlsdGVyW10pIHtcbiAgICAgICAgdGhpcy5fZGVmYXVsdEZpbHRlcnMgPSBkZWZhdWx0RmlsdGVycztcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0QmFzZVNlcnZpY2UoYmFzZVNlcnZpY2U6IEJhc2VTZXJ2aWNlKSB7XG4gICAgICAgIHRoaXMuX2Jhc2VTZXJ2aWNlID0gYmFzZVNlcnZpY2U7XG4gICAgfVxuXG4gICAgYXN5bmMgdmFsaWRhdGUoZXZlbnQ6IEV2ZW50RGF0YSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICBsZXQgdmFsdWVGaWx0ZXI6IGFueTtcbiAgICAgICAgaWYgKGV2ZW50LmN1cnJlbnROb2RlLmNvbnRyb2wuZnVsbExhYmVsKSB7XG4gICAgICAgICAgICB0aGlzLl9sYWJlbCA9IGV2ZW50LmN1cnJlbnROb2RlLmNvbnRyb2wuZnVsbExhYmVsO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fbGFiZWwgPSBldmVudC5jdXJyZW50Tm9kZS5jb250cm9sLmxhYmVsO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgZXZlbnQuY3VycmVudE5vZGUudmFsdWUgPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGV2ZW50LmN1cnJlbnROb2RlLnZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gZXZlbnQuY3VycmVudE5vZGUudmFsdWUubWFwKHggPT4geFtldmVudC5jdXJyZW50Tm9kZS5jb250cm9sWydkaXNwbGF5RmllbGQnXV0pLmpvaW4oJywgJyk7XG4gICAgICAgICAgICAgICAgdmFsdWVGaWx0ZXIgPSBldmVudC5jdXJyZW50Tm9kZS52YWx1ZS5tYXAoeCA9PiB4W2V2ZW50LmN1cnJlbnROb2RlLmNvbnRyb2xbJ3ZhbHVlRmllbGQnXV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSBldmVudC5jdXJyZW50Tm9kZS52YWx1ZVtldmVudC5jdXJyZW50Tm9kZS5jb250cm9sWydkaXNwbGF5RmllbGQnXV0udG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICB2YWx1ZUZpbHRlciA9IGV2ZW50LmN1cnJlbnROb2RlLnZhbHVlW2V2ZW50LmN1cnJlbnROb2RlLmNvbnRyb2xbJ3ZhbHVlRmllbGQnXV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl92YWx1ZSA9IGV2ZW50LmN1cnJlbnROb2RlLnZhbHVlLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICB2YWx1ZUZpbHRlciA9IGV2ZW50LmN1cnJlbnROb2RlLnZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZpbHRlcnM6IEZpbHRlcltdID0gW3tcbiAgICAgICAgICAgIGZpZWxkOiBldmVudC5jdXJyZW50Tm9kZS5jb250cm9sLmZpZWxkLFxuICAgICAgICAgICAgb3BlcmF0b3I6IEFycmF5LmlzQXJyYXkodmFsdWVGaWx0ZXIpID8gT3BlcmF0b3IuaW4gOiBPcGVyYXRvci5lcXVhbCxcbiAgICAgICAgICAgIHZhbHVlOiBKU09OLnN0cmluZ2lmeSh2YWx1ZUZpbHRlcilcbiAgICAgICAgfV07XG4gICAgICAgIGlmIChldmVudC5yb290TW9kZWwuaWQpIHtcbiAgICAgICAgICAgIGZpbHRlcnMudW5zaGlmdCh7XG4gICAgICAgICAgICAgICAgZmllbGQ6ICdpZCcsXG4gICAgICAgICAgICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yLm5vdEVxdWFsLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBKU09OLnN0cmluZ2lmeShldmVudC5yb290TW9kZWwuaWQpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fZGVmYXVsdEZpbHRlcnMpIHtcbiAgICAgICAgICAgIGZpbHRlcnMucHVzaCguLi50aGlzLl9kZWZhdWx0RmlsdGVycyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzdWx0Q2hlY2tFeGlzdCA9IGF3YWl0IHRoaXMuX2Jhc2VTZXJ2aWNlLmNoZWNrRXhpc3RCeUZpbHRlcihmaWx0ZXJzKTtcbiAgICAgICAgaWYgKCFyZXN1bHRDaGVja0V4aXN0LnN1Y2Nlc3MgfHwgcmVzdWx0Q2hlY2tFeGlzdC5kYXRhKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZ2V0RXJyb3IoKSB7XG4gICAgICAgIHJldHVybiBgVHLGsOG7nW5nICR7dGhpcy5fbGFiZWx9IGPDsyBnacOhIHRy4buLICR7dGhpcy5fdmFsdWV9IMSRw6MgdOG7k24gdOG6oWlgO1xuICAgIH1cbn1cblxuLyoqXG4gKiBLaeG7g20gdHJhIGLhu5kgZ8OhaSB0cuG7iyBj4bunYSBuaGnhu4F1IGPhu5l0IMSRw6MgdOG7k24gdOG6oWkgdHJvbmcgZGIuXG4gKi9cbmV4cG9ydCBjbGFzcyBDaGVja0R1cGxpY2F0ZUZpZWxkc1ZhbGlkYXRvciBpbXBsZW1lbnRzIElWYWxpZGF0b3Ige1xuICAgIF9kdXBsaWNhdGVGaWVsZHM6IHN0cmluZ1tdO1xuICAgIF9tZXNzYWdlOiBzdHJpbmc7XG4gICAgX29sZE1lc3NhZ2U6IHN0cmluZztcbiAgICBfYmFzZVNlcnZpY2U6IEJhc2VTZXJ2aWNlO1xuICAgIF9kaWNWYWx1ZTogYW55ID0ge307XG4gICAgcHJpdmF0ZSByZWFkb25seSBfZGVmYXVsdEZpbHRlcnM6IEZpbHRlcltdO1xuXG4gICAgY29uc3RydWN0b3IoZHVwbGljYXRlRmllbGRzOiBzdHJpbmdbXSwgbWVzc2FnZTogc3RyaW5nLCBkZWZhdWx0RmlsdGVycz86IEZpbHRlcltdKSB7XG4gICAgICAgIHRoaXMuX2R1cGxpY2F0ZUZpZWxkcyA9IGR1cGxpY2F0ZUZpZWxkcztcbiAgICAgICAgaWYgKHRoaXMuX2R1cGxpY2F0ZUZpZWxkcy5sZW5ndGggPT0gMCkgYWxlcnQoJ0PhuqV1IGjDrG5oIENoZWNrRHVwbGljYXRlRmllbGRzVmFsaWRhdG9yIHNhaScpO1xuICAgICAgICB0aGlzLl9tZXNzYWdlID0gbWVzc2FnZTtcbiAgICAgICAgdGhpcy5fZGVmYXVsdEZpbHRlcnMgPSBkZWZhdWx0RmlsdGVycztcbiAgICB9XG5cbiAgICBzZXRCYXNlU2VydmljZShiYXNlU2VydmljZTogQmFzZVNlcnZpY2UpIHtcbiAgICAgICAgdGhpcy5fYmFzZVNlcnZpY2UgPSBiYXNlU2VydmljZTtcbiAgICB9XG5cbiAgICBnZXREdXBsaWNhdGVGaWVsZHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kdXBsaWNhdGVGaWVsZHM7XG4gICAgfVxuXG4gICAgZ2V0RGVmYXVsdEZpbHRlcnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWZhdWx0RmlsdGVycztcbiAgICB9XG5cbiAgICBnZXRNZXNzYWdlKCkge1xuICAgICAgICAvLyBjb25zdCByZWcgPSBuZXcgUmVnRXhwKCcoPzw9e3spW159XSsoPz19KScsICdnJyk7XG4gICAgICAgIGNvbnN0IHJlZyA9IC97eyhbXn1dKyl9fS9nO1xuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLl9tZXNzYWdlLm1hdGNoKHJlZyk7XG4gICAgICAgIGxldCBuZXdNZXNzYWdlID0gdGhpcy5fbWVzc2FnZTtcbiAgICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICAgICAgICBjb25zdCBkaWNWYWx1ZSA9IHRoaXMuX2RpY1ZhbHVlO1xuICAgICAgICAgICAgcmVzdWx0LmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGV2YWwoYHZhbHVlID0gZGljVmFsdWUuJHtmaWVsZH1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGV4KSB7XG5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gbmV3TWVzc2FnZSA9IG5ld01lc3NhZ2UucmVwbGFjZShge3ske2ZpZWxkfX19YCwgdmFsdWUpO1xuICAgICAgICAgICAgICAgIG5ld01lc3NhZ2UgPSBuZXdNZXNzYWdlLnJlcGxhY2UoZmllbGQsIHZhbHVlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX29sZE1lc3NhZ2UgPSBuZXdNZXNzYWdlO1xuICAgICAgICByZXR1cm4gbmV3TWVzc2FnZTtcbiAgICB9XG5cbiAgICBhc3luYyB2YWxpZGF0ZShldmVudDogRXZlbnREYXRhKSB7XG4gICAgICAgIGNvbnN0IGFsbER1cGxpY2F0ZUZpZWxkcyA9IFsuLi50aGlzLl9kdXBsaWNhdGVGaWVsZHMsIGV2ZW50LmNvbnRyb2wuZmllbGRdO1xuICAgICAgICBjb25zdCBmaWx0ZXJzOiBGaWx0ZXJbXSA9IFtdO1xuICAgICAgICBsZXQgaGFzTnVsbFZhbHVlID0gZmFsc2U7XG5cbiAgICAgICAgY29uc3QgcGFyZW50TW9kZWwgPSBldmVudC5jdXJyZW50Tm9kZS5wYXJlbnROb2RlLm1vZGVsO1xuICAgICAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGFsbER1cGxpY2F0ZUZpZWxkcykge1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBwYXJlbnRNb2RlbC5fZXJyb3JzW2ZpZWxkXS5pbmRleE9mKHRoaXMuX29sZE1lc3NhZ2UpO1xuICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgICAgICBwYXJlbnRNb2RlbC5fZXJyb3JzW2ZpZWxkXS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50Tm9kZSA9IGV2ZW50LmN1cnJlbnROb2RlLmdldE5vZGVCeVBhdGgoZmllbGQpO1xuICAgICAgICAgICAgaWYgKGN1cnJlbnROb2RlLnZhbHVlICE9IG51bGwgJiYgY3VycmVudE5vZGUudmFsdWUgIT0gJycpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9kaWNWYWx1ZVtmaWVsZF0gPSBjdXJyZW50Tm9kZS52YWx1ZTtcbiAgICAgICAgICAgICAgICBmaWx0ZXJzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yLmVxdWFsLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogSlNPTi5zdHJpbmdpZnkodGhpcy5nZXRWYWx1ZSh0aGlzLl9kaWNWYWx1ZVtmaWVsZF0pKVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBoYXNOdWxsVmFsdWUgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTuG6v3UgY8OzIDEgdHLGsOG7nW5nIGLhu4sgdHLhu5FuZyAoa2jDtG5nIGPDsyBk4buvIGxp4buHdSkgdGjDrCB0cuG6oyB24buBIHRydWVcbiAgICAgICAgaWYgKGhhc051bGxWYWx1ZSkgcmV0dXJuIHRydWU7XG4gICAgICAgIGlmIChldmVudC5yb290TW9kZWwuaWQpIHtcbiAgICAgICAgICAgIGZpbHRlcnMudW5zaGlmdCh7XG4gICAgICAgICAgICAgICAgZmllbGQ6ICdpZCcsXG4gICAgICAgICAgICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yLm5vdEVxdWFsLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBKU09OLnN0cmluZ2lmeShldmVudC5yb290TW9kZWwuaWQpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fZGVmYXVsdEZpbHRlcnMpIHtcbiAgICAgICAgICAgIGZpbHRlcnMucHVzaCguLi50aGlzLl9kZWZhdWx0RmlsdGVycyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzdWx0Q2hlY2tFeGlzdCA9IGF3YWl0IHRoaXMuX2Jhc2VTZXJ2aWNlLmNoZWNrRXhpc3RCeUZpbHRlcihmaWx0ZXJzKTtcbiAgICAgICAgaWYgKCFyZXN1bHRDaGVja0V4aXN0LnN1Y2Nlc3MgfHwgcmVzdWx0Q2hlY2tFeGlzdC5kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLl9kdXBsaWNhdGVGaWVsZHMuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICAgICAgICAgICAgcGFyZW50TW9kZWwuX2Vycm9yc1tmaWVsZF0ucHVzaCh0aGlzLmdldE1lc3NhZ2UoKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0VmFsdWUocmF3VmFsdWUpIHtcbiAgICAgICAgaWYgKGlzTGl0ZXJhbE9iamVjdChyYXdWYWx1ZSkpIHtcbiAgICAgICAgICAgIGlmIChyYXdWYWx1ZS5fZHJvcGRvd252YWx1ZSAhPSBudWxsICYmIHJhd1ZhbHVlLl9kcm9wZG93bnZhbHVlICE9PSAnJykge1xuICAgICAgICAgICAgICAgIHJldHVybiByYXdWYWx1ZVtyYXdWYWx1ZS5fZHJvcGRvd252YWx1ZV0gfHwgcmF3VmFsdWVbJ3ZhbHVlJ107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmF3VmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNBcnJheShyYXdWYWx1ZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGFyciA9IFtdO1xuICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHJhd1ZhbHVlKSB7XG4gICAgICAgICAgICAgICAgYXJyLnB1c2godGhpcy5nZXRWYWx1ZShpdGVtKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYXJyO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByYXdWYWx1ZTtcbiAgICB9XG5cbiAgICBnZXRFcnJvcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX29sZE1lc3NhZ2U7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVW5pcXVlRmllbGRJblRhYmxlVmFsaWRhdG9yIGltcGxlbWVudHMgSVZhbGlkYXRvciB7XG4gICAgcHJpdmF0ZSBfZmllbGQ7XG5cbiAgICBjb25zdHJ1Y3RvcihmaWVsZCkge1xuICAgICAgICB0aGlzLl9maWVsZCA9IGZpZWxkO1xuICAgIH1cblxuICAgIHZhbGlkYXRlKGV2ZW50OiBFdmVudERhdGEpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKCEoZXZlbnQuY3VycmVudE5vZGUuY29udHJvbCBpbnN0YW5jZW9mIFRhYmxlU2NoZW1hKSkgcmV0dXJuIHRydWU7XG4gICAgICAgIGNvbnN0IGRpYyA9IHt9O1xuICAgICAgICBjb25zdCBjb250cm9sID0gZXZlbnQuY3VycmVudE5vZGUuY29udHJvbC5yb3dUZW1wbGF0ZS5maW5kKGl0ZW0gPT4gaXRlbS5maWVsZCA9PSB0aGlzLl9maWVsZCk7XG4gICAgICAgIGlmICghY29udHJvbCkgcmV0dXJuIHRydWU7XG5cbiAgICAgICAgY29uc3QgZXJyb3JNZXMgPSAnVHLGsOG7nW5nICcgKyBjb250cm9sLmxhYmVsICsgJyBraMO0bmcgxJHGsOG7o2MgdHLDuW5nIG5oYXUnO1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgZXZlbnQudmFsdWUpIHtcbiAgICAgICAgICAgIGlmIChpdGVtW3RoaXMuX2ZpZWxkXSAhPSBudWxsICYmIGl0ZW1bdGhpcy5fZmllbGRdICE9PSAnJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gaXRlbS5fZXJyb3JzW3RoaXMuX2ZpZWxkXS5pbmRleE9mKGVycm9yTWVzKTtcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkgaXRlbS5fZXJyb3JzW3RoaXMuX2ZpZWxkXS5zcGxpY2UoaW5kZXgsIDEpO1xuXG4gICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gaXRlbVt0aGlzLl9maWVsZF07XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlLmhhc093blByb3BlcnR5KCdfZHJvcGRvd252YWx1ZScpKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWVbdmFsdWVbJ19kcm9wZG93bnZhbHVlJ11dO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICghZGljW3ZhbHVlXSkge1xuICAgICAgICAgICAgICAgICAgICBkaWNbdmFsdWVdID0gW2l0ZW1dO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZGljW3ZhbHVlXS5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBoYXNFcnJvciA9IGZhbHNlO1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBkaWMpIHtcbiAgICAgICAgICAgIGlmIChkaWNba2V5XS5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgaGFzRXJyb3IgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBkaWNba2V5XSkge1xuICAgICAgICAgICAgICAgICAgICBpdGVtLl9lcnJvcnNbdGhpcy5fZmllbGRdLnB1c2goZXJyb3JNZXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gIWhhc0Vycm9yO1xuICAgIH1cblxuICAgIGdldEVycm9yKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbn1cblxuZXhwb3J0IGNsYXNzIEV4YWN0T25lVmFsdWVJblRhYmxlVmFsaWRhdG9yIGltcGxlbWVudHMgSVZhbGlkYXRvciB7XG4gICAgcHJpdmF0ZSBfZmllbGQ7XG4gICAgcHJpdmF0ZSBfdmFsdWU7XG4gICAgcHJpdmF0ZSBfbGFiZWw7XG5cbiAgICBjb25zdHJ1Y3RvcihmaWVsZCwgdmFsdWUsIGxhYmVsPykge1xuICAgICAgICB0aGlzLl9maWVsZCA9IGZpZWxkO1xuICAgICAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLl9sYWJlbCA9IGxhYmVsID8gbGFiZWwgOiB2YWx1ZTtcbiAgICB9XG5cbiAgICB2YWxpZGF0ZShldmVudDogRXZlbnREYXRhKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICghKGV2ZW50LmN1cnJlbnROb2RlLmNvbnRyb2wgaW5zdGFuY2VvZiBUYWJsZVNjaGVtYSkpIHJldHVybiB0cnVlO1xuICAgICAgICBjb25zdCBkaWMgPSB7fTtcbiAgICAgICAgY29uc3QgY29udHJvbCA9IGV2ZW50LmN1cnJlbnROb2RlLmNvbnRyb2wucm93VGVtcGxhdGUuZmluZChpdGVtID0+IGl0ZW0uZmllbGQgPT0gdGhpcy5fZmllbGQpO1xuICAgICAgICBpZiAoIWNvbnRyb2wpIHJldHVybiB0cnVlO1xuXG4gICAgICAgIGNvbnN0IGVycm9yTWVzID0gJ0No4buJIMSRxrDhu6NjIG5o4bqtcCBt4buZdCBnacOhIHRy4buLICcgKyB0aGlzLl9sYWJlbDtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGV2ZW50LnZhbHVlKSB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IGl0ZW0uX2Vycm9yc1t0aGlzLl9maWVsZF0uaW5kZXhPZihlcnJvck1lcyk7XG4gICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkgaXRlbS5fZXJyb3JzW3RoaXMuX2ZpZWxkXS5zcGxpY2UoaW5kZXgsIDEpO1xuXG4gICAgICAgICAgICBsZXQgdmFsdWUgPSBpdGVtW3RoaXMuX2ZpZWxkXTtcbiAgICAgICAgICAgIGlmICh2YWx1ZS5oYXNPd25Qcm9wZXJ0eSgnX2Ryb3Bkb3dudmFsdWUnKSkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWVbdmFsdWVbJ19kcm9wZG93bnZhbHVlJ11dO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodmFsdWUgPT0gdGhpcy5fdmFsdWUpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWRpY1t2YWx1ZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgZGljW3ZhbHVlXSA9IFtpdGVtXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGRpY1t2YWx1ZV0ucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgaGFzRXJyb3IgPSBmYWxzZTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZGljKSB7XG4gICAgICAgICAgICBpZiAoZGljW2tleV0ubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgIGhhc0Vycm9yID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgZGljW2tleV0pIHtcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5fZXJyb3JzW3RoaXMuX2ZpZWxkXS5wdXNoKGVycm9yTWVzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICFoYXNFcnJvcjtcbiAgICB9XG5cbiAgICBnZXRFcnJvcigpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG59XG5cbmV4cG9ydCBjbGFzcyBTYW1lVmFsdWVWYWxpZGF0b3IgaW1wbGVtZW50cyBJVmFsaWRhdG9yIHtcbiAgICBfc2FtZUZpZWxkczogc3RyaW5nW107XG4gICAgX21lc3NhZ2U6IHN0cmluZztcblxuICAgIGNvbnN0cnVjdG9yKGR1cGxpY2F0ZUZpZWxkczogc3RyaW5nW10sIG1lc3NhZ2U6IHN0cmluZykge1xuICAgICAgICB0aGlzLl9zYW1lRmllbGRzID0gZHVwbGljYXRlRmllbGRzO1xuICAgICAgICBpZiAodGhpcy5fc2FtZUZpZWxkcy5sZW5ndGggPT0gMCkgYWxlcnQoJ0PhuqV1IGjDrG5oIFNhbWVWYWxpZGF0b3Igc2FpJyk7XG4gICAgICAgIHRoaXMuX21lc3NhZ2UgPSBtZXNzYWdlO1xuICAgIH1cblxuICAgIGdldFNhbWVGaWVsZHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zYW1lRmllbGRzO1xuICAgIH1cblxuICAgIGdldE1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tZXNzYWdlO1xuICAgIH1cblxuICAgIGFzeW5jIHZhbGlkYXRlKGV2ZW50OiBFdmVudERhdGEpIHtcbiAgICAgICAgY29uc3QgYWxsRHVwbGljYXRlRmllbGRzID0gWy4uLnRoaXMuX3NhbWVGaWVsZHMsIGV2ZW50LmNvbnRyb2wuZmllbGRdO1xuXG4gICAgICAgIGNvbnN0IHBhcmVudE1vZGVsID0gZXZlbnQuY3VycmVudE5vZGUucGFyZW50Tm9kZS5tb2RlbDtcbiAgICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiBhbGxEdXBsaWNhdGVGaWVsZHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gcGFyZW50TW9kZWwuX2Vycm9yc1tmaWVsZF0uaW5kZXhPZih0aGlzLl9tZXNzYWdlKTtcbiAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgICAgICAgICAgcGFyZW50TW9kZWwuX2Vycm9yc1tmaWVsZF0uc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsZXQgZXJyb3IgPSBmYWxzZTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhbGxEdXBsaWNhdGVGaWVsZHMubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBmaWVsZCA9IGFsbER1cGxpY2F0ZUZpZWxkc1tpXTtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnROb2RlID0gZXZlbnQuY3VycmVudE5vZGUuZ2V0Tm9kZUJ5UGF0aChmaWVsZCk7XG4gICAgICAgICAgICBpZiAoY3VycmVudE5vZGUudmFsdWUgIT0gZXZlbnQudmFsdWUpIHtcbiAgICAgICAgICAgICAgICBlcnJvciA9IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICB0aGlzLl9zYW1lRmllbGRzLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgICAgICAgICAgIHBhcmVudE1vZGVsLl9lcnJvcnNbZmllbGRdLnB1c2godGhpcy5fbWVzc2FnZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGdldEVycm9yKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWVzc2FnZTtcbiAgICB9XG59XG5cbmV4cG9ydCBlbnVtIFZhbHVlVHlwZSB7XG4gICAgZGF0ZSA9ICdkYXRlJyxcbiAgICBkYXRldGltZSA9ICdkYXRldGltZScsXG4gICAgaW50ID0gJ2ludCcsXG4gICAgZGVjaW1hbCA9ICdkZWNpbWFsJyxcbiAgICBib29sZWFuID0gJ2Jvb2xlYW4nLFxuICAgIHN0cmluZyA9ICdzdHJpbmcnLFxufVxuXG5leHBvcnQgY2xhc3MgQ29kZVZhbGlkYXRvciBpbXBsZW1lbnRzIElWYWxpZGF0b3Ige1xuICAgIHZhbGlkYXRlKGV2ZW50OiBFdmVudERhdGEpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBldmVudC52YWx1ZTtcbiAgICAgICAgaWYgKHZhbHVlID09IG51bGwgfHwgdmFsdWUgPT09ICcnKSByZXR1cm4gdHJ1ZTtcblxuICAgICAgICBjb25zdCByZSA9IC9eW1xcdyYuXFwtXSskLztcbiAgICAgICAgcmV0dXJuIHJlLnRlc3QoU3RyaW5nKHZhbHVlKSk7XG4gICAgfVxuXG4gICAgZ2V0RXJyb3IoKSB7XG4gICAgICAgIHJldHVybiAnS2jDtG5nIMSRw7puZyDEkeG7i25oIGThuqFuZyBtw6MnO1xuICAgIH1cbn1cblxuXG5leHBvcnQgY2xhc3MgU2NhbGFyVmFsdWVWYWxpZGF0b3IgaW1wbGVtZW50cyBJVmFsaWRhdG9yIHtcbiAgICBwcml2YXRlIF9vcGVyYXRvclRleHQ6IHN0cmluZyA9ICcnO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgX29wZXJhdG9yOiBPcGVyYXRvcixcbiAgICAgICAgcHJpdmF0ZSBfc2NhbGFyVmFsdWU6IGFueSxcbiAgICAgICAgcHJpdmF0ZSBfdHlwZTogVmFsdWVUeXBlID0gVmFsdWVUeXBlLnN0cmluZyxcbiAgICApIHtcbiAgICB9XG5cbiAgICBnZXRFcnJvcigpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYFBo4bqjaSAke3RoaXMuX29wZXJhdG9yVGV4dH0gJHt0aGlzLl9zY2FsYXJWYWx1ZX1gO1xuICAgIH1cblxuICAgIHZhbGlkYXRlKGV2ZW50OiBFdmVudERhdGEpOiBQcm9taXNlPGJvb2xlYW4+IHwgYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGxlZnQgPSB0aGlzLmdldFZhbHVlKGV2ZW50LnZhbHVlKTtcbiAgICAgICAgY29uc3QgcmlnaHQgPSB0aGlzLmdldFZhbHVlKHRoaXMuX3NjYWxhclZhbHVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29tcGFyZVZhbHVlKGxlZnQsIHJpZ2h0KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbXBhcmVWYWx1ZShsZWZ0OiBhbnksIHJpZ2h0OiBhbnkpIHtcbiAgICAgICAgc3dpdGNoICh0aGlzLl9vcGVyYXRvcikge1xuICAgICAgICAgICAgY2FzZSBPcGVyYXRvci5lcXVhbDpcbiAgICAgICAgICAgICAgICB0aGlzLl9vcGVyYXRvclRleHQgPSAnYuG6sW5nJztcbiAgICAgICAgICAgICAgICByZXR1cm4gbGVmdCA9PSByaWdodDtcbiAgICAgICAgICAgIGNhc2UgT3BlcmF0b3Iubm90RXF1YWw6XG4gICAgICAgICAgICAgICAgdGhpcy5fb3BlcmF0b3JUZXh0ID0gJ2tow7RuZyBi4bqxbmcnO1xuICAgICAgICAgICAgICAgIHJldHVybiBsZWZ0ICE9IHJpZ2h0O1xuICAgICAgICAgICAgY2FzZSBPcGVyYXRvci5ncmVhdGVyOlxuICAgICAgICAgICAgICAgIHRoaXMuX29wZXJhdG9yVGV4dCA9ICds4bubbiBoxqFuJztcbiAgICAgICAgICAgICAgICByZXR1cm4gbGVmdCA+IHJpZ2h0O1xuICAgICAgICAgICAgY2FzZSBPcGVyYXRvci5ncmVhdGVyVGhhbkVxdWFsOlxuICAgICAgICAgICAgICAgIHRoaXMuX29wZXJhdG9yVGV4dCA9ICds4bubbiBoxqFuIGhv4bq3YyBi4bqxbmcnO1xuICAgICAgICAgICAgICAgIHJldHVybiBsZWZ0ID49IHJpZ2h0O1xuICAgICAgICAgICAgY2FzZSBPcGVyYXRvci5sb3dlcjpcbiAgICAgICAgICAgICAgICB0aGlzLl9vcGVyYXRvclRleHQgPSAnbmjhu48gaMahbic7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxlZnQgPCByaWdodDtcbiAgICAgICAgICAgIGNhc2UgT3BlcmF0b3IubG93ZXJUaGFuRXF1YWw6XG4gICAgICAgICAgICAgICAgdGhpcy5fb3BlcmF0b3JUZXh0ID0gJ25o4buPIGjGoW4gaG/hurdjIGLhurFuZyc7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxlZnQgPD0gcmlnaHQ7XG4gICAgICAgICAgICBjYXNlIE9wZXJhdG9yLmluOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGlzdDogYW55W10gPSBsZWZ0O1xuICAgICAgICAgICAgICAgIHRoaXMuX29wZXJhdG9yVGV4dCA9ICdu4bqxbSB0cm9uZyc7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxpc3Quc29tZSh4ID0+IHggPT0gbGVmdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIE9wZXJhdG9yLm5vdEluOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGlzdDogYW55W10gPSBsZWZ0O1xuICAgICAgICAgICAgICAgIHRoaXMuX29wZXJhdG9yVGV4dCA9ICdu4bqxbSBuZ2/DoGknO1xuICAgICAgICAgICAgICAgIHJldHVybiBsaXN0LmV2ZXJ5KHggPT4geCAhPSBsZWZ0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgT3BlcmF0b3Iuc3RhcnRXaXRoOiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RyOiBzdHJpbmcgPSBsZWZ0O1xuICAgICAgICAgICAgICAgIHRoaXMuX29wZXJhdG9yVGV4dCA9ICdi4bqvdCDEkeG6p3UgYuG6sW5nJztcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RyLnN0YXJ0c1dpdGgocmlnaHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBPcGVyYXRvci5ub3RTdGFydFdpdGg6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdHI6IHN0cmluZyA9IGxlZnQ7XG4gICAgICAgICAgICAgICAgdGhpcy5fb3BlcmF0b3JUZXh0ID0gJ2tow7RuZyBi4bqvdCDEkeG6p3UgYuG6sW5nJztcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RyLnN0YXJ0c1dpdGgocmlnaHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBPcGVyYXRvci5lbmRXaXRoOiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RyOiBzdHJpbmcgPSBsZWZ0O1xuICAgICAgICAgICAgICAgIHRoaXMuX29wZXJhdG9yVGV4dCA9ICdr4bq/dCB0aMO6YyBi4bqxbmcnO1xuICAgICAgICAgICAgICAgIHJldHVybiBzdHIuZW5kc1dpdGgocmlnaHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBPcGVyYXRvci5ub3RFbmRXaXRoOiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RyOiBzdHJpbmcgPSBsZWZ0O1xuICAgICAgICAgICAgICAgIHRoaXMuX29wZXJhdG9yVGV4dCA9ICdraMO0bmcga+G6v3QgdGjDumMgYuG6sW5nJztcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RyLmVuZHNXaXRoKHJpZ2h0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgT3BlcmF0b3IuY29udGFpbjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0cjogc3RyaW5nID0gbGVmdDtcbiAgICAgICAgICAgICAgICB0aGlzLl9vcGVyYXRvclRleHQgPSAnY8OzIGNo4bupYSc7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0ci5pbmNsdWRlcyhyaWdodCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIE9wZXJhdG9yLm5vdENvbnRhaW46IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdHI6IHN0cmluZyA9IGxlZnQ7XG4gICAgICAgICAgICAgICAgdGhpcy5fb3BlcmF0b3JUZXh0ID0gJ2tow7RuZyBjaOG7qWEnO1xuICAgICAgICAgICAgICAgIHJldHVybiAhc3RyLmluY2x1ZGVzKHJpZ2h0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgT3BlcmF0b3IuaXNOdWxsOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fb3BlcmF0b3JUZXh0ID0gJ8SR4buDIHRy4buRbmcnO1xuICAgICAgICAgICAgICAgIHJldHVybiBsZWZ0ID09IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIE9wZXJhdG9yLmlzTm90TnVsbDoge1xuICAgICAgICAgICAgICAgIHRoaXMuX29wZXJhdG9yVGV4dCA9ICdraMO0bmcgxJHhu4MgdHLhu5FuZyc7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxlZnQgIT0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgT3BlcmF0b3IuaW5Sb2xlOlxuICAgICAgICAgICAgY2FzZSBPcGVyYXRvci5ub3RJblJvbGU6XG4gICAgICAgICAgICBjYXNlIE9wZXJhdG9yLmluQ2F0ZWdvcnk6XG4gICAgICAgICAgICBjYXNlIE9wZXJhdG9yLm5vdEluQ2F0ZWdvcnk6XG4gICAgICAgICAgICBjYXNlIE9wZXJhdG9yLmluUG9zaXRpb246XG4gICAgICAgICAgICBjYXNlIE9wZXJhdG9yLm5vdEluUG9zaXRpb246XG4gICAgICAgICAgICBjYXNlIE9wZXJhdG9yLmluTGlzdFVzZXI6XG4gICAgICAgICAgICBjYXNlIE9wZXJhdG9yLm5vdEluTGlzdFVzZXI6XG4gICAgICAgICAgICBjYXNlIE9wZXJhdG9yLmluTGlzdEdyb3VwOlxuICAgICAgICAgICAgY2FzZSBPcGVyYXRvci5ub3RJbkxpc3RHcm91cDpcbiAgICAgICAgICAgIGNhc2UgT3BlcmF0b3IuaXNDdXJyZW50VXNlcjpcbiAgICAgICAgICAgIGNhc2UgT3BlcmF0b3IuaXNDdXJyZW50Q2FuQm86XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRWYWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgICAgIHN3aXRjaCAodGhpcy5fdHlwZSkge1xuICAgICAgICAgICAgY2FzZSBWYWx1ZVR5cGUuZGF0ZTpcbiAgICAgICAgICAgIGNhc2UgVmFsdWVUeXBlLmRhdGV0aW1lOlxuICAgICAgICAgICAgICAgIHJldHVybiBtb21lbnQodmFsdWUsICdERC9NTS9ZWVlZIGhoOm1tOnNzJyk7XG4gICAgICAgICAgICBjYXNlIFZhbHVlVHlwZS5pbnQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50KHZhbHVlKTtcbiAgICAgICAgICAgIGNhc2UgVmFsdWVUeXBlLmRlY2ltYWw6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQodmFsdWUpO1xuICAgICAgICAgICAgY2FzZSBWYWx1ZVR5cGUuYm9vbGVhbjpcbiAgICAgICAgICAgICAgICByZXR1cm4gQm9vbGVhbih2YWx1ZSk7XG4gICAgICAgICAgICBjYXNlIFZhbHVlVHlwZS5zdHJpbmc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIFBhc3N3b3JkVmFsaWRhdG9yIGltcGxlbWVudHMgSVZhbGlkYXRvciB7XG4gICAgcHJpdmF0ZSBfbWVzc2FnZTogc3RyaW5nO1xuICAgIHByaXZhdGUgX3VzZXJTZXJ2aWNlOiBVc2VyU2VydmljZVxuICAgIGNvbnN0cnVjdG9yKCkge1xuXG4gICAgfVxuICAgIHNldEJhc2VTZXJ2aWNlKHVzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSkge1xuICAgICAgICB0aGlzLl91c2VyU2VydmljZSA9IHVzZXJTZXJ2aWNlO1xuICAgIH1cblxuICAgIGFzeW5jIHZhbGlkYXRlKGV2ZW50OiBFdmVudERhdGEpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgbGV0IG1lc3NhZ2UgPSAnJztcbiAgICAgICAgY29uc3QgdmFsdWUgPSBldmVudC52YWx1ZTtcbiAgICAgICAgaWYgKHZhbHVlPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuX3VzZXJTZXJ2aWNlLnZhbGlkYXRlUGFzc3dvcmQodmFsdWUpO1xuICAgICAgICAgICAgaWYgKCFyZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSByZXN1bHQubWVzc2FnZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9tZXNzYWdlID0gbWVzc2FnZTtcbiAgICAgICAgcmV0dXJuICFtZXNzYWdlO1xuICAgIH1cblxuICAgIGdldEVycm9yKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWVzc2FnZTtcbiAgICB9XG5cbn1cblxuIl19
|
|
827
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RueC1zaGFyZWQvc3JjL2xpYi9jbGFzc2VzL2Jhc2UvdmFsaWRhdG9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBSzVCLE9BQU8sRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDakUsT0FBTyxFQUFhLHdCQUF3QixFQUFFLHVCQUF1QixFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hHLE9BQU8sRUFBRSxvQkFBb0IsRUFBbUIsV0FBVyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFPdEYsU0FBUyxVQUFVLENBQUMsS0FBVSxFQUFFLE9BQXdCO0lBQ3BELElBQUksQ0FBQyxDQUFDLEtBQUssSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksUUFBUSxFQUFFO1FBQ3ZDLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7S0FDeEI7SUFDRCxJQUFJLE9BQU8sWUFBWSx1QkFBdUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUU7UUFDaEUsT0FBTyxLQUFLLENBQUM7S0FDaEI7SUFFRCxJQUFJLE9BQU8sWUFBWSxvQkFBb0IsRUFBRTtRQUN6QyxJQUFJLEtBQUssSUFBSSxJQUFJLElBQUksS0FBSyxLQUFLLEVBQUU7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUVoRCxNQUFNLGNBQWMsR0FBeUIsT0FBTyxDQUFDO1FBQ3JELElBQUksY0FBYyxDQUFDLGdCQUFnQixFQUFFO1lBQ2pDLElBQUksS0FBSyxDQUFDLFVBQVUsSUFBSSxJQUFJLElBQUksS0FBSyxDQUFDLFVBQVUsS0FBSyxFQUFFO2dCQUFFLE9BQU8sS0FBSyxDQUFDO1NBQ3pFO1FBRUQsSUFBSSxjQUFjLENBQUMsZ0JBQWdCLEVBQUU7WUFDakMsSUFBSSxL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QUM7WUFDMUIsS0FBSyxTQUFTLENBQUMsTUFBTTtnQkFDakIsT0FBTyxLQUFLLENBQUM7U0FDcEI7SUFDTCxDQUFDO0NBQ0o7QUFDRCxNQUFNLE9BQU8saUJBQWlCO0lBRzFCO0lBRUEsQ0FBQztJQUNELGNBQWMsQ0FBQyxXQUF3QjtRQUNuQyxJQUFJLENBQUMsWUFBWSxHQUFHLFdBQVcsQ0FBQztJQUNwQyxDQUFDO0lBRUssUUFBUSxDQUFDLEtBQWdCOztZQUMzQixJQUFJLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDakIsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztZQUMxQixJQUFJLEtBQUssYUFBTCxLQUFLLHVCQUFMLEtBQUssQ0FBRSxNQUFNLEVBQUU7Z0JBQ2YsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUMvRCxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRTtvQkFDakIsT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUM7aUJBQzVCO2FBQ0o7WUFDRCxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQztZQUN4QixPQUFPLENBQUMsT0FBTyxDQUFDO1FBQ3BCLENBQUM7S0FBQTtJQUVELFFBQVE7UUFDSixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDekIsQ0FBQztDQUVKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHsgQ29udHJvbFRyZWVOb2RlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9jcnVkL2NydWQtZm9ybS9jcnVkLWZvcm0uY29tcG9uZW50JztcbmltcG9ydCB7IEZpbHRlciB9IGZyb20gJy4uLy4uL21vZGVscy9ncmlkLWluZm8nO1xuaW1wb3J0IHsgVXNlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9wdWJsaWMtYXBpJztcbmltcG9ydCB7IEJhc2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYmFzZS5zZXJ2aWNlJztcbmltcG9ydCB7IGlzQXJyYXksIGlzTGl0ZXJhbE9iamVjdCB9IGZyb20gJy4uL2Vudmlyb25tZW50LXNjaGVtYSc7XG5pbXBvcnQgeyBFdmVudERhdGEsIEZpbGVNYW5hZ2VyQ29udHJvbFNjaGVtYSwgRmlsZVVwbG9hZENvbnRyb2xTY2hlbWEsIE9wZXJhdG9yIH0gZnJvbSAnLi4vZm9ybS1zY2hlbWEnO1xuaW1wb3J0IHsgQWRkcmVzc0NvbnRyb2xTY2hlbWEsIEZvcm1Db250cm9sQmFzZSwgVGFibGVTY2hlbWEgfSBmcm9tICcuLy4uL2Zvcm0tc2NoZW1hJztcblxuZXhwb3J0IGludGVyZmFjZSBJVmFsaWRhdG9yIHtcbiAgICB2YWxpZGF0ZShldmVudDogRXZlbnREYXRhKTogUHJvbWlzZTxib29sZWFuPiB8IGJvb2xlYW47XG4gICAgZ2V0RXJyb3IoKTogc3RyaW5nO1xufVxuXG5mdW5jdGlvbiBpc05vdEVtcHR5KHZhbHVlOiBhbnksIGNvbnRyb2w6IEZvcm1Db250cm9sQmFzZSk6IGJvb2xlYW4ge1xuICAgIGlmICghIXZhbHVlICYmIHR5cGVvZiAodmFsdWUpID09ICdzdHJpbmcnKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUudHJpbSgpO1xuICAgIH1cbiAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEZpbGVVcGxvYWRDb250cm9sU2NoZW1hICYmICFjb250cm9sLmhhc0ZpbGUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgQWRkcmVzc0NvbnRyb2xTY2hlbWEpIHtcbiAgICAgICAgaWYgKHZhbHVlID09IG51bGwgfHwgdmFsdWUgPT09ICcnKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgY29uc3QgYWRkcmVzc0NvbnRyb2wgPSA8QWRkcmVzc0NvbnRyb2xTY2hlbWE+Y29udHJvbDtcbiAgICAgICAgaWYgKGFkZHJlc3NDb250cm9sLnJlcXVpcmVkUHJvdmluY2UpIHtcbiAgICAgICAgICAgIGlmICh2YWx1ZS5pZFByb3ZpbmNlID09IG51bGwgfHwgdmFsdWUuaWRQcm92aW5jZSA9PT0gJycpIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhZGRyZXNzQ29udHJvbC5yZXF1aXJlZERpc3RyaWN0KSB7XG4gICAgICAgICAgICBpZiAodmFsdWUuaWREaXN0cmljdCA9PSBudWxsIHx8IHZhbHVlLmlkRGlzdHJpY3QgPT09ICcnKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYWRkcmVzc0NvbnRyb2wucmVxdWlyZWRXYXJkKSB7XG4gICAgICAgICAgICBpZiAodmFsdWUuaWRXYXJkID09IG51bGwgfHwgdmFsdWUuaWRXYXJkID09PSAnJykgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFkZHJlc3NDb250cm9sLnJlcXVpcmVkU3RyZWV0KSB7XG4gICAgICAgICAgICBpZiAodmFsdWUuc3RyZWV0ID09IG51bGwgfHwgdmFsdWUuc3RyZWV0ID09PSAnJykgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFkZHJlc3NDb250cm9sLnJlcXVpcmVkTm8pIHtcbiAgICAgICAgICAgIGlmICh2YWx1ZS5ubyA9PSBudWxsIHx8IHZhbHVlLm5vID09PSAnJykgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBGaWxlTWFuYWdlckNvbnRyb2xTY2hlbWEpIHtcbiAgICAgICAgaWYgKCFjb250cm9sLl9jb21wb25lbnQuX3ZhbHVlIHx8IGNvbnRyb2wuX2NvbXBvbmVudC5fdmFsdWUubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gZmFsc2U7XG4gICAgZWxzZSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHZhbHVlID09PSAnJykge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgY2xhc3MgUmVxdWlyZWRWYWxpZGF0b3IgaW1wbGVtZW50cyBJVmFsaWRhdG9yIHtcbiAgICBwcml2YXRlIF9sYWJlbDtcblxuICAgIHZhbGlkYXRlKGV2ZW50OiBFdmVudERhdGEpOiBib29sZWFuIHtcbiAgICAgICAgdGhpcy5fbGFiZWwgPSBldmVudC5jb250cm9sLmVycm9yTGFiZWwgPz8gZXZlbnQuY29udHJvbC5sYWJlbDtcbiAgICAgICAgaWYgKGV2ZW50LmNvbnRyb2wuaXNIdG1sTGFiZWwpIHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIGVsZW1lbnQuaW5uZXJIVE1MID0gdGhpcy5fbGFiZWw7XG4gICAgICAgICAgICB0aGlzLl9sYWJlbCA9IGVsZW1lbnQuaW5uZXJUZXh0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc05vdEVtcHR5KGV2ZW50LnZhbHVlLCBldmVudC5jb250cm9sKTtcbiAgICB9XG5cbiAgICBnZXRFcnJvcigpIHtcbiAgICAgICAgaWYgKHRoaXMuX2xhYmVsKSB7XG4gICAgICAgICAgICByZXR1cm4gYCR7dGhpcy5fbGFiZWx9IGLhuq90IGJ14buZYyBuaOG6rXBgO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuICdUcsaw4budbmcgdGjDtG5nIHRpbiBi4bqvdCBideG7mWMgbmjhuq1wJztcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJlcXVpcmVkRmllbGRzVmFsaWRhdG9yIGltcGxlbWVudHMgSVZhbGlkYXRvciB7XG4gICAgX3JlcXVpcmVkRmllbGRzOiBzdHJpbmdbXTtcbiAgICBfbWVzc2FnZTogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IocmVxdWlyZWRGaWVsZHM6IHN0cmluZ1tdLCBtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fcmVxdWlyZWRGaWVsZHMgPSByZXF1aXJlZEZpZWxkcztcbiAgICAgICAgaWYgKHRoaXMuX3JlcXVpcmVkRmllbGRzLmxlbmd0aCA9PSAwKSBhbGVydCgnQ+G6pXUgaMOsbmggUmVxdWlyZWRGaWVsZHNWYWxpZGF0b3Igc2FpJyk7XG4gICAgICAgIHRoaXMuX21lc3NhZ2UgPSBtZXNzYWdlO1xuICAgIH1cblxuICAgIGdldFJlcXVpcmVkRmllbGRzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVxdWlyZWRGaWVsZHM7XG4gICAgfVxuXG4gICAgZ2V0TWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21lc3NhZ2U7XG4gICAgfVxuXG4gICAgdmFsaWRhdGUoZXZlbnQ6IEV2ZW50RGF0YSkge1xuICAgICAgICBjb25zdCBhbGxSZXF1aXJlZEZpZWxkcyA9IFsuLi50aGlzLl9yZXF1aXJlZEZpZWxkcywgZXZlbnQuY29udHJvbC5maWVsZF07XG4gICAgICAgIGxldCBoYXNFcnJvciA9IHRydWU7XG4gICAgICAgIGNvbnN0IHBhcmVudE1vZGVsID0gZXZlbnQuY3VycmVudE5vZGUucGFyZW50Tm9kZS5tb2RlbDtcbiAgICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiBhbGxSZXF1aXJlZEZpZWxkcykge1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBwYXJlbnRNb2RlbC5fZXJyb3JzW2ZpZWxkXS5pbmRleE9mKHRoaXMuX21lc3NhZ2UpO1xuICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgICAgICBwYXJlbnRNb2RlbC5fZXJyb3JzW2ZpZWxkXS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50Tm9kZSA9IGV2ZW50LmN1cnJlbnROb2RlLmdldE5vZGVCeVBhdGgoZmllbGQpO1xuICAgICAgICAgICAgaWYgKGlzTm90RW1wdHkoY3VycmVudE5vZGUubW9kZWwsIGN1cnJlbnROb2RlLmNvbnRyb2wpKSB7XG4gICAgICAgICAgICAgICAgaGFzRXJyb3IgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChoYXNFcnJvcikge1xuICAgICAgICAgICAgdGhpcy5fcmVxdWlyZWRGaWVsZHMuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICAgICAgICAgICAgcGFyZW50TW9kZWwuX2Vycm9yc1tmaWVsZF0ucHVzaCh0aGlzLl9tZXNzYWdlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICFoYXNFcnJvcjtcbiAgICB9XG5cbiAgICBnZXRFcnJvcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21lc3NhZ2U7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRW1haWxWYWxpZGF0b3IgaW1wbGVtZW50cyBJVmFsaWRhdG9yIHtcbiAgICB2YWxpZGF0ZShldmVudDogRXZlbnREYXRhKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gZXZlbnQudmFsdWU7XG4gICAgICAgIGlmICh2YWx1ZSA9PSBudWxsIHx8IHZhbHVlID09PSAnJykgcmV0dXJuIHRydWU7XG5cbiAgICAgICAgY29uc3QgcmUgPSAvXigoW148PigpXFxbXFxdXFxcXC4sOzpcXHNAXCJdKyhcXC5bXjw+KClcXFtcXF1cXFxcLiw7Olxcc0BcIl0rKSopfChcIi4rXCIpKUAoKFxcW1swLTldezEsM31cXC5bMC05XXsxLDN9XFwuWzAtOV17MSwzfVxcLlswLTldezEsM31cXF0pfCgoW2EtekEtWlxcLTAtOV0rXFwuKStbYS16QS1aXXsyLH0pKSQvO1xuICAgICAgICByZXR1cm4gcmUudGVzdChTdHJpbmcodmFsdWUpLnRvTG93ZXJDYXNlKCkpO1xuICAgIH1cblxuICAgIGdldEVycm9yKCkge1xuICAgICAgICByZXR1cm4gJ0tow7RuZyDEkcO6bmcgxJHhu4tuaCBk4bqhbmcgdGjGsCDEkWnhu4duIHThu60nO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBMc3RFbWFpbFZhbGlkYXRvciBpbXBsZW1lbnRzIElWYWxpZGF0b3Ige1xuICAgIHZhbGlkYXRlKGV2ZW50OiBFdmVudERhdGEpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBldmVudC52YWx1ZTtcbiAgICAgICAgaWYgKCFpc0FycmF5KHZhbHVlKSB8fCAhdmFsdWU/Lmxlbmd0aCkgcmV0dXJuIHRydWU7XG4gICAgICAgIGNvbnN0IHN0clZhbHVlID0gdmFsdWUuam9pbignLCcpLnJlcGxhY2VBbGwoJyAnLCAnJyk7XG4gICAgICAgIGNvbnN0IHJlID0gL14oKFthLXpBLVowLTlfXFwtXFwuXSspQChbYS16QS1aMC05X1xcLVxcLl0rKVxcLihbYS16QS1aXXsyLDV9KXsxLDI1fSkrKFs7LC5dKChbYS16QS1aMC05X1xcLVxcLl0rKUAoW2EtekEtWjAtOV9cXC1cXC5dKylcXC4oW2EtekEtWl17Miw1fSl7MSwyNX0pKykqJC87XG4gICAgICAgIHJldHVybiByZS50ZXN0KHN0clZhbHVlKTtcbiAgICB9XG5cbiAgICBnZXRFcnJvcigpIHtcbiAgICAgICAgcmV0dXJuICdDw7MgcGjhuqduIHThu60ga2jDtG5nIMSRw7puZyDEkeG7i25oIGThuqFuZyB0aMawIMSRaeG7h24gdOG7rSc7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTmFtZVZhbGlkYXRvciBpbXBsZW1lbnRzIElWYWxpZGF0b3Ige1xuICAgIHZhbGlkYXRlKGV2ZW50OiBFdmVudERhdGEpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBldmVudC52YWx1ZTtcbiAgICAgICAgaWYgKHZhbHVlID09IG51bGwgfHwgdmFsdWUgPT09ICcnKSByZXR1cm4gdHJ1ZTtcblxuICAgICAgICAvLyBjb25zdCByZSA9IC9eW0EtWsOAw4HhuqDhuqLDg8OC4bqm4bqk4bqs4bqo4bqqxILhurDhuq7hurbhurLhurTDiMOJ4bq44bq64bq8w4rhu4Dhur7hu4bhu4Lhu4TDjMON4buK4buIxKjDksOT4buM4buOw5XDlOG7kuG7kOG7mOG7lOG7lsag4buc4bua4bui4bue4bugw5nDmuG7pOG7psWoxq/hu6rhu6jhu7Dhu6zhu67hu7LDneG7tOG7tuG7uMSQXVthLXrDoMOh4bqh4bqjw6PDouG6p+G6peG6reG6qeG6q8SD4bqx4bqv4bq34bqz4bq1w6jDqeG6ueG6u+G6vcOq4buB4bq/4buH4buD4buFw6zDreG7i+G7icSpw7LDs+G7jeG7j8O1w7Thu5Phu5Hhu5nhu5Xhu5fGoeG7neG7m+G7o+G7n+G7ocO5w7rhu6Xhu6fFqcaw4bur4bup4bux4but4buv4buzw73hu7Xhu7fhu7nEkV0qKD86WyBdW0EtWsOAw4HhuqDhuqLDg8OC4bqm4bqk4bqs4bqo4bqqxILhurDhuq7hurbhurLhurTDiMOJ4bq44bq64bq8w4rhu4Dhur7hu4bhu4Lhu4TDjMON4buK4buIxKjDksOT4buM4buOw5XDlOG7kuG7kOG7mOG7lOG7lsag4buc4bua4bui4bue4bugw5nDmuG7pOG7psWoxq/hu6rhu6jhu7Dhu6zhu67hu7LDneG7tOG7tuG7uMSQXVthLXrDoMOh4bqh4bqjw6PDouG6p+G6peG6reG6qeG6q8SD4bqx4bqv4bq34bqz4bq1w6jDqeG6ueG6u+G6vcOq4buB4bq/4buH4buD4buFw6zDreG7i+G7icSpw7LDs+G7jeG7j8O1w7Thu5Phu5Hhu5nhu5Xhu5fGoeG7neG7m+G7o+G7n+G7ocO5w7rhu6Xhu6fFqcaw4bur4bup4bux4but4buv4buzw73hu7Xhu7fhu7nEkV0qKSokfF5bQS1aw4DDgeG6oOG6osODw4LhuqbhuqThuqzhuqjhuqrEguG6sOG6ruG6tuG6suG6tMOIw4nhurjhurrhurzDiuG7gOG6vuG7huG7guG7hMOMw43hu4rhu4jEqMOSw5Phu4zhu47DlcOU4buS4buQ4buY4buU4buWxqDhu5zhu5rhu6Lhu57hu6DDmcOa4buk4bumxajGr+G7quG7qOG7sOG7rOG7ruG7ssOd4bu04bu24bu4xJBdKig/OlsgXVtBLVrDgMOB4bqg4bqiw4PDguG6puG6pOG6rOG6qOG6qsSC4bqw4bqu4bq24bqy4bq0w4jDieG6uOG6uuG6vMOK4buA4bq+4buG4buC4buEw4zDjeG7iuG7iMSow5LDk+G7jOG7jsOVw5Thu5Lhu5Dhu5jhu5Thu5bGoOG7nOG7muG7ouG7nuG7oMOZw5rhu6Thu6bFqMav4buq4buo4buw4bus4buu4buyw53hu7Thu7bhu7jEkF0qKSokfF4oW2EtekEtWl17Mix9XFxzW2EtekEtWl17MSx9Jz8tP1thLXpBLVpdezIsfVxccz8oW2EtekEtWl17MSx9KT8pLztcbiAgICAgICAgY29uc3QgcmUgPSAvW0EtWsOAw4HhuqDhuqLDg8OC4bqm4bqk4bqs4bqo4bqqxILhurDhuq7hurbhurLhurTDiMOJ4bq44bq64bq8w4rhu4Dhur7hu4bhu4Lhu4TDjMON4buK4buIxKjDksOT4buM4buOw5XDlOG7kuG7kOG7mOG7lOG7lsag4buc4bua4bui4bue4bugw5nDmuG7pOG7psWoxq/hu6rhu6jhu7Dhu6zhu67hu7LDneG7tOG7tuG7uMSQXVthLXrDoMOh4bqh4bqjw6PDouG6p+G6peG6reG6qeG6q8SD4bqx4bqv4bq34bqz4bq1w6jDqeG6ueG6u+G6vcOq4buB4bq/4buH4buD4buFw6zDreG7i+G7icSpw7LDs+G7jeG7j8O1w7Thu5Phu5Hhu5nhu5Xhu5fGoeG7neG7m+G7o+G7n+G7ocO5w7rhu6Xhu6fFqcaw4bur4bup4bux4but4buv4buzw73hu7Xhu7fhu7nEkV0qKD86WyBdW0EtWsOAw4HhuqDhuqLDg8OC4bqm4bqk4bqs4bqo4bqqxILhurDhuq7hurbhurLhurTDiMOJ4bq44bq64bq8w4rhu4Dhur7hu4bhu4Lhu4TDjMON4buK4buIxKjDksOT4buM4buOw5XDlOG7kuG7kOG7mOG7lOG7lsag4buc4bua4bui4bue4bugw5nDmuG7pOG7psWoxq/hu6rhu6jhu7Dhu6zhu67hu7LDneG7tOG7tuG7uMSQXVthLXrDoMOh4bqh4bqjw6PDouG6p+G6peG6reG6qeG6q8SD4bqx4bqv4bq34bqz4bq1w6jDqeG6ueG6u+G6vcOq4buB4bq/4buH4buD4buFw6zDreG7i+G7icSpw7LDs+G7jeG7j8O1w7Thu5Phu5Hhu5nhu5Xhu5fGoeG7neG7m+G7o+G7n+G7ocO5w7rhu6Xhu6fFqcaw4bur4bup4bux4but4buv4buzw73hu7Xhu7fhu7nEkV0qKSokfF5bQS1aw4DDgeG6oOG6osODw4LhuqbhuqThuqzhuqjhuqrEguG6sOG6ruG6tuG6suG6tMOIw4nhurjhurrhurzDiuG7gOG6vuG7huG7guG7hMOMw43hu4rhu4jEqMOSw5Phu4zhu47DlcOU4buS4buQ4buY4buU4buWxqDhu5zhu5rhu6Lhu57hu6DDmcOa4buk4bumxajGr+G7quG7qOG7sOG7rOG7ruG7ssOd4bu04bu24bu4xJBdKig/OlsgXVtBLVrDgMOB4bqg4bqiw4PDguG6puG6pOG6rOG6qOG6qsSC4bqw4bqu4bq24bqy4bq0w4jDieG6uOG6uuG6vMOK4buA4bq+4buG4buC4buEw4zDjeG7iuG7iMSow5LDk+G7jOG7jsOVw5Thu5Lhu5Dhu5jhu5Thu5bGoOG7nOG7muG7ouG7nuG7oMOZw5rhu6Thu6bFqMav4buq4buo4buw4bus4buu4buyw53hu7Thu7bhu7jEkF0qKSokfFsgXXxeKFthLXpBLVpdezIsfVxcc1thLXpBLVpdezEsfSc/LT9bYS16QS1aXXsyLH1cXHM/KFthLXpBLVpdezEsfSk/KS87XG4gICAgICAgIHJldHVybiByZS50ZXN0KFN0cmluZyh2YWx1ZSkpO1xuICAgIH1cblxuICAgIGdldEVycm9yKCkge1xuICAgICAgICByZXR1cm4gJ0tow7RuZyDEkcO6bmcgxJHhu4tuaCBk4bqhbmcgdMOqbic7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgUGhvbmVWYWxpZGF0b3IgaW1wbGVtZW50cyBJVmFsaWRhdG9yIHtcbiAgICB2YWxpZGF0ZShldmVudDogRXZlbnREYXRhKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gZXZlbnQudmFsdWU7XG4gICAgICAgIGlmICh2YWx1ZSA9PSBudWxsIHx8IHZhbHVlID09PSAnJykgcmV0dXJuIHRydWU7XG5cbiAgICAgICAgY29uc3QgcmUgPSAvXjBbMS05XVswLTldezgsOX0kLztcbiAgICAgICAgcmV0dXJuIHJlLnRlc3QodmFsdWUpO1xuICAgIH1cblxuICAgIGdldEVycm9yKCkge1xuICAgICAgICByZXR1cm4gJ0tow7RuZyDEkcO6bmcgxJHhu4tuaCBk4bqhbmcgc+G7kSDEkWnhu4duIHRob+G6oWknO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIENjY2RWYWxpZGF0b3IgaW1wbGVtZW50cyBJVmFsaWRhdG9yIHtcbiAgICB2YWxpZGF0ZShldmVudDogRXZlbnREYXRhKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gZXZlbnQudmFsdWU7XG4gICAgICAgIGlmICh2YWx1ZSA9PSBudWxsIHx8IHZhbHVlID09PSAnJykgcmV0dXJuIHRydWU7XG5cbiAgICAgICAgY29uc3QgcmUgPSAvXlxcZHs5fSR8XlxcZHsxMn0kLztcbiAgICAgICAgcmV0dXJuIHJlLnRlc3QodmFsdWUpO1xuICAgIH1cblxuICAgIGdldEVycm9yKCkge1xuICAgICAgICByZXR1cm4gJ0tow7RuZyDEkcO6bmcgxJHhu4tuaCBk4bqhbmcgQ0NDRC9DTU5EJztcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBQYXNzcG9ydFZhbGlkYXRvciBpbXBsZW1lbnRzIElWYWxpZGF0b3Ige1xuICAgIG1lc3NhZ2UgPSAnS2jDtG5nIMSRw7puZyDEkeG7i25oIGThuqFuZyBT4buRIGjhu5kgY2hp4bq/dSBob+G6t2MgU+G7kSBDQ0NEIGhv4bq3YyBjaOG7qW5nIG1pbmggbmjDom4gZMOibic7XG4gICAgY29uc3RydWN0b3IobWVzc2FnZT86IHN0cmluZykge1xuICAgICAgICBpZiAobWVzc2FnZSkge1xuICAgICAgICAgICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2YWxpZGF0ZShldmVudDogRXZlbnREYXRhKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gZXZlbnQudmFsdWU7XG4gICAgICAgIGlmICh2YWx1ZSA9PSBudWxsIHx8IHZhbHVlID09PSAnJykgcmV0dXJuIHRydWU7XG5cbiAgICAgICAgY29uc3QgcmUgPSAvXlxcZHswLDEyfSQvO1xuICAgICAgICByZXR1cm4gcmUudGVzdCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgZ2V0RXJyb3IoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1lc3NhZ2U7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTGVuZ3RoVmFsaWRhdG9yIGltcGxlbWVudHMgSVZhbGlkYXRvciB7XG4gICAgcHJpdmF0ZSBfZXJyb3I6IGFueSA9ICcnO1xuICAgIHByaXZhdGUgX21pbiA9IDA7XG4gICAgcHJpdmF0ZSBfbWF4ID0gMTAwO1xuXG4gICAgY29uc3RydWN0b3IobWF4LCBtaW4gPSAwKSB7XG4gICAgICAgIHRoaXMuX21heCA9IG1heDtcbiAgICAgICAgdGhpcy5fbWluID0gbWluO1xuICAgIH1cblxuICAgIHZhbGlkYXRlKGV2ZW50OiBFdmVudERhdGEpOiBib29sZWFuIHtcbiAgICAgICAgbGV0IHZhbHVlID0gZXZlbnQudmFsdWU7XG4gICAgICAgIGlmICh2YWx1ZSA9PSBudWxsIHx8IHZhbHVlID09PSAnJykge1xuICAgICAgICAgICAgaWYgKHRoaXMuX21pbiA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnJvciA9IGDEkOG7mSBkw6BpIHThu5FpIHRoaeG7g3UgJHt0aGlzLl9taW59IGvDvSB04buxYDtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhbHVlID0gdmFsdWUgKyAnJztcbiAgICAgICAgY29uc3QgbGVuID0gdmFsdWUubGVuZ3RoO1xuICAgICAgICBpZiAobGVuIDwgdGhpcy5fbWluKSB7XG4gICAgICAgICAgICB0aGlzLl9lcnJvciA9IGDEkOG7mSBkw6BpIHThu5FpIHRoaeG7g3UgJHt0aGlzLl9taW59IGvDvSB04buxYDtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobGVuID4gdGhpcy5fbWF4KSB7XG4gICAgICAgICAgICB0aGlzLl9lcnJvciA9IGDEkOG7mSBkw6BpIHThu5FpIMSRYSAke3RoaXMuX21heH0ga8O9IHThu7FgO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZ2V0RXJyb3IoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lcnJvcjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBQaG9uZU51bWJlclZhbGlkYXRvciBpbXBsZW1lbnRzIElWYWxpZGF0b3Ige1xuICAgIHZhbGlkYXRlKGV2ZW50OiBFdmVudERhdGEpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBldmVudC52YWx1ZTtcbiAgICAgICAgaWYgKHZhbHVlID09IG51bGwgfHwgdmFsdWUgPT09ICcnKSByZXR1cm4gdHJ1ZTtcblxuICAgICAgICBjb25zdCByZSA9IC9eKFsgXXxbKyhdKlswLTldezEsNH1bKV17MCwxfVstXFxzXFwuLzAtOV0qKSQvZztcbiAgICAgICAgcmV0dXJuIHJlLnRlc3QoU3RyaW5nKHZhbHVlKS50b0xvd2VyQ2FzZSgpKTtcbiAgICB9XG5cbiAgICBnZXRFcnJvcigpIHtcbiAgICAgICAgcmV0dXJuICdLaMO0bmcgxJHDum5nIMSR4buLbmggZOG6oW5nIHPhu5EgxJFp4buHbiB0aG/huqFpJztcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBOdW1iZXJPbmx5VmFsaWRhdG9yIGltcGxlbWVudHMgSVZhbGlkYXRvciB7XG4gICAgdmFsaWRhdGUoZXZlbnQ6IEV2ZW50RGF0YSk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGV2ZW50LnZhbHVlO1xuICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSA9PT0gJycpIHJldHVybiB0cnVlO1xuXG4gICAgICAgIGNvbnN0IHJlID0gL15cXC0/KFswLTldKSokLztcbiAgICAgICAgcmV0dXJuIHJlLnRlc3QoU3RyaW5nKHZhbHVlKS50b0xvd2VyQ2FzZSgpKTtcbiAgICB9XG5cbiAgICBnZXRFcnJvcigpIHtcbiAgICAgICAgcmV0dXJuICdLaMO0bmcgxJHDum5nIMSR4buLbmggZOG6oW5nIHPhu5EnO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEF0TGVhc3RPbmVSb3dUYWJsZVZhbGlkYXRvciBpbXBsZW1lbnRzIElWYWxpZGF0b3Ige1xuICAgIHZhbGlkYXRlKGV2ZW50OiBFdmVudERhdGEpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKGV2ZW50LmN1cnJlbnROb2RlLmNoaWxkTm9kZXMubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBnZXRFcnJvcigpIHtcbiAgICAgICAgcmV0dXJuICdC4bqjbmcgYuG6r3QgYnXhu5ljIG5o4bqtcCc7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVGF4Q29kZVZhbGlkYXRvciBpbXBsZW1lbnRzIElWYWxpZGF0b3Ige1xuICAgIHZhbGlkYXRlKGV2ZW50OiBFdmVudERhdGEpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBldmVudC52YWx1ZTtcbiAgICAgICAgaWYgKHZhbHVlID09IG51bGwgfHwgdmFsdWUgPT09ICcnKSByZXR1cm4gdHJ1ZTtcblxuICAgICAgICBjb25zdCByZSA9IC9eKFswLTldKXsxMH0kfF4oWzAtOV0pezEwfSgtKShbMC05XSl7M30kLztcbiAgICAgICAgcmV0dXJuIHJlLnRlc3QoU3RyaW5nKHZhbHVlKS50b0xvd2VyQ2FzZSgpKTtcbiAgICB9XG5cbiAgICBnZXRFcnJvcigpIHtcbiAgICAgICAgcmV0dXJuICdLaMO0bmcgxJHDum5nIMSR4buLbmggZOG6oW5nIG3DoyBz4buRIHRodeG6vyc7XG4gICAgfVxufVxuXG5jb25zdCB2YWxpZEZ1bmN0aW9uID0ge1xuICAgIFtPcGVyYXRvci5ncmVhdGVyXTogKHZhbHVlMTogYW55LCB2YWx1ZTI6IGFueSkgPT4gdmFsdWUxID4gdmFsdWUyLFxuICAgIFtPcGVyYXRvci5ncmVhdGVyVGhhbkVxdWFsXTogKHZhbHVlMTogYW55LCB2YWx1ZTI6IGFueSkgPT4gdmFsdWUxID49IHZhbHVlMixcbiAgICBbT3BlcmF0b3IubG93ZXJdOiAodmFsdWUxOiBhbnksIHZhbHVlMjogYW55KSA9PiB2YWx1ZTEgPCB2YWx1ZTIsXG4gICAgW09wZXJhdG9yLmxvd2VyVGhhbkVxdWFsXTogKHZhbHVlMTogYW55LCB2YWx1ZTI6IGFueSkgPT4gdmFsdWUxIDw9IHZhbHVlMixcbiAgICBbT3BlcmF0b3IuZXF1YWxdOiAodmFsdWUxOiBhbnksIHZhbHVlMjogYW55KSA9PiB2YWx1ZTEgPT0gdmFsdWUyXG59O1xuXG5jb25zdCBvcGVyYXRvck1lYW5pbmcgPSB7XG4gICAgW09wZXJhdG9yLmdyZWF0ZXJdOiAnbOG7m24gaMahbicsXG4gICAgW09wZXJhdG9yLmdyZWF0ZXJUaGFuRXF1YWxdOiAnbOG7m24gaMahbiBob+G6t2MgYuG6sW5nJyxcbiAgICBbT3BlcmF0b3IubG93ZXJdOiAnbmjhu48gaMahbicsXG4gICAgW09wZXJhdG9yLmxvd2VyVGhhbkVxdWFsXTogJ25o4buPIGjGoW4gaG/hurdjIGLhurFuZycsXG4gICAgW09wZXJhdG9yLmVxdWFsXTogJ2LhurFuZydcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUNvbXBhcmVWYWxpZGF0b3Ige1xuICAgIGNvbXBhcmVVbmlxdWVGaWVsZDogc3RyaW5nO1xuICAgIGdldE9wZXJhdG9yQ29tcGFyZSgpOiBPcGVyYXRvcjtcbn1cblxuLyoqXG4gKiBTbyBzYW5oIDIgdGh14buZYyB0w61uaCB0cm9uZyBmb3JtLlxuICovXG5leHBvcnQgY2xhc3MgQ29tcGFyZVZhbGlkYXRvciBpbXBsZW1lbnRzIElWYWxpZGF0b3IsIElDb21wYXJlVmFsaWRhdG9yIHtcbiAgICBwcml2YXRlIF9vcGVyYXRvcjogT3BlcmF0b3I7XG4gICAgcHJpdmF0ZSBfY29tcGFyZUNvbnRyb2w6IEZvcm1Db250cm9sQmFzZTtcbiAgICBjb21wYXJlVW5pcXVlRmllbGQ6IHN0cmluZztcblxuICAgIGNvbnN0cnVjdG9yKG9wZXJhdG9yOiBPcGVyYXRvciwgY29tcGFyZVVuaXF1ZUZpZWxkOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fb3BlcmF0b3IgPSBvcGVyYXRvcjtcbiAgICAgICAgdGhpcy5jb21wYXJlVW5pcXVlRmllbGQgPSBjb21wYXJlVW5pcXVlRmllbGQ7XG4gICAgfVxuXG4gICAgZ2V0T3BlcmF0b3JDb21wYXJlKCk6IE9wZXJhdG9yIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX29wZXJhdG9yO1xuICAgIH1cblxuICAgIGdldEZpZWxkT3BlcmF0b3IoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9vcGVyYXRvcjtcbiAgICB9XG5cbiAgICBnZXRWYWx1ZUNvbXBhcmUodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIHZhbGlkYXRlKGV2ZW50OiBFdmVudERhdGEpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgY29tcGFyZU5vZGUgPSBldmVudC5jdXJyZW50Tm9kZS5nZXROb2RlQnlQYXRoKHRoaXMuY29tcGFyZVVuaXF1ZUZpZWxkKTtcbiAgICAgICAgdGhpcy5fY29tcGFyZUNvbnRyb2wgPSBjb21wYXJlTm9kZS5jb250cm9sO1xuICAgICAgICBjb25zdCBjb21wYXJlRmllbGQgPSB0aGlzLl9jb21wYXJlQ29udHJvbC5maWVsZDtcbiAgICAgICAgY29uc3QgY29tcGFyZVZhbHVlID0gY29tcGFyZU5vZGUubW9kZWw7XG4gICAgICAgIGNvbnN0IGNvbXBhcmVQYXJlbnRNb2RlbCA9IGNvbXBhcmVOb2RlLnBhcmVudE5vZGUubW9kZWw7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gZXZlbnQudmFsdWU7XG4gICAgICAgIGxldCBlcnJvck1lcztcblxuICAgICAgICBmb3IgKGNvbnN0IHZhbGlkYXRvciBvZiB0aGlzLl9jb21wYXJlQ29udHJvbC52YWxpZGF0b3JzKSB7XG4gICAgICAgICAgICBpZiAodmFsaWRhdG9yIGluc3RhbmNlb2YgQ29tcGFyZVZhbGlkYXRvciAmJiB2YWxpZGF0b3IuY29tcGFyZVVuaXF1ZUZpZWxkID09IGV2ZW50LmN1cnJlbnROb2RlLmNvbnRyb2wudW5pcXVlRmllbGQpIHtcbiAgICAgICAgICAgICAgICBlcnJvck1lcyA9IHZhbGlkYXRvci5nZXRFcnJvcihldmVudC5jdXJyZW50Tm9kZSk7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSBjb21wYXJlUGFyZW50TW9kZWwuX2Vycm9yc1tjb21wYXJlRmllbGRdLmluZGV4T2YoZXJyb3JNZXMpO1xuICAgICAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBhcmVQYXJlbnRNb2RlbC5fZXJyb3JzW2NvbXBhcmVGaWVsZF0uc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsdWUgPT0gbnVsbFxuICAgICAgICAgICAgfHwgdmFsdWUgPT09ICcnXG4gICAgICAgICAgICB8fCBjb21wYXJlVmFsdWUgPT0gbnVsbFxuICAgICAgICAgICAgfHwgY29tcGFyZVZhbHVlID09ICcnXG4gICAgICAgICkgcmV0dXJuIHRydWU7XG5cbiAgICAgICAgY29uc3QgcmUgPSB2YWxpZEZ1bmN0aW9uW3RoaXMuX29wZXJhdG9yXSAmJiB2YWxpZEZ1bmN0aW9uW3RoaXMuX29wZXJhdG9yXShcbiAgICAgICAgICAgIHRoaXMuZ2V0VmFsdWVDb21wYXJlKHZhbHVlKSwgdGhpcy5nZXRWYWx1ZUNvbXBhcmUoY29tcGFyZVZhbHVlKVxuICAgICAgICApO1xuXG5cbiAgICAgICAgaWYgKCFyZSAmJiBlcnJvck1lcykge1xuICAgICAgICAgICAgY29tcGFyZVBhcmVudE1vZGVsLl9lcnJvcnNbY29tcGFyZUZpZWxkXS5wdXNoKGVycm9yTWVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZTtcbiAgICB9XG5cbiAgICBnZXRFcnJvcihjb250cm9sVHJlZU5vZGU/OiBDb250cm9sVHJlZU5vZGUpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9jb21wYXJlQ29udHJvbCAmJiBjb250cm9sVHJlZU5vZGUpIHtcbiAgICAgICAgICAgIHRoaXMuX2NvbXBhcmVDb250cm9sID0gY29udHJvbFRyZWVOb2RlLmdldE5vZGVCeVBhdGgodGhpcy5jb21wYXJlVW5pcXVlRmllbGQpLmNvbnRyb2w7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGBQaOG6o2kgJHtvcGVyYXRvck1lYW5pbmdbdGhpcy5fb3BlcmF0b3JdfSAke3RoaXMuX2NvbXBhcmVDb250cm9sPy5mdWxsTGFiZWx9YDtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEYXRlQ29tcGFyZVZhbGlkYXRvciBleHRlbmRzIENvbXBhcmVWYWxpZGF0b3Ige1xuICAgIGNvbnN0cnVjdG9yKG9wZXJhdG9yOiBPcGVyYXRvciwgZmllbGQ6IHN0cmluZykge1xuICAgICAgICBzdXBlcihvcGVyYXRvciwgZmllbGQpO1xuICAgIH1cblxuICAgIGdldFZhbHVlQ29tcGFyZSh2YWx1ZSkge1xuICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHZhbHVlKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBOdW1iZXJDb21wYXJlVmFsaWRhdG9yIGV4dGVuZHMgQ29tcGFyZVZhbGlkYXRvciB7XG4gICAgY29uc3RydWN0b3Iob3BlcmF0b3I6IE9wZXJhdG9yLCBmaWVsZDogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKG9wZXJhdG9yLCBmaWVsZCk7XG4gICAgfVxuXG4gICAgZ2V0VmFsdWVDb21wYXJlKHZhbHVlKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PSB1bmRlZmluZWQgfHwgdmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSA9PSAnJykge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIE51bWJlcih2YWx1ZSk7XG4gICAgfVxufVxuXG4vKipcbiAqIEtp4buDbSB0cmEgZ2nDoSB0cuG7iyBt4buZdCBj4buZdCDEkcOjIHThu5NuIHThuqFpIHRyb25nIGRiLlxuICovXG5leHBvcnQgY2xhc3MgQ2hlY2tEdXBsaWNhdGVWYWxpZGF0b3IgaW1wbGVtZW50cyBJVmFsaWRhdG9yIHtcbiAgICBwcml2YXRlIF9sYWJlbDogc3RyaW5nO1xuICAgIHByaXZhdGUgX3ZhbHVlOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfYmFzZVNlcnZpY2U6IEJhc2VTZXJ2aWNlO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2RlZmF1bHRGaWx0ZXJzOiBGaWx0ZXJbXTtcblxuICAgIGNvbnN0cnVjdG9yKGRlZmF1bHRGaWx0ZXJzPzogRmlsdGVyW10pIHtcbiAgICAgICAgdGhpcy5fZGVmYXVsdEZpbHRlcnMgPSBkZWZhdWx0RmlsdGVycztcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0QmFzZVNlcnZpY2UoYmFzZVNlcnZpY2U6IEJhc2VTZXJ2aWNlKSB7XG4gICAgICAgIHRoaXMuX2Jhc2VTZXJ2aWNlID0gYmFzZVNlcnZpY2U7XG4gICAgfVxuXG4gICAgYXN5bmMgdmFsaWRhdGUoZXZlbnQ6IEV2ZW50RGF0YSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICBsZXQgdmFsdWVGaWx0ZXI6IGFueTtcbiAgICAgICAgaWYgKGV2ZW50LmN1cnJlbnROb2RlLmNvbnRyb2wuZnVsbExhYmVsKSB7XG4gICAgICAgICAgICB0aGlzLl9sYWJlbCA9IGV2ZW50LmN1cnJlbnROb2RlLmNvbnRyb2wuZnVsbExhYmVsO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fbGFiZWwgPSBldmVudC5jdXJyZW50Tm9kZS5jb250cm9sLmxhYmVsO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgZXZlbnQuY3VycmVudE5vZGUudmFsdWUgPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGV2ZW50LmN1cnJlbnROb2RlLnZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gZXZlbnQuY3VycmVudE5vZGUudmFsdWUubWFwKHggPT4geFtldmVudC5jdXJyZW50Tm9kZS5jb250cm9sWydkaXNwbGF5RmllbGQnXV0pLmpvaW4oJywgJyk7XG4gICAgICAgICAgICAgICAgdmFsdWVGaWx0ZXIgPSBldmVudC5jdXJyZW50Tm9kZS52YWx1ZS5tYXAoeCA9PiB4W2V2ZW50LmN1cnJlbnROb2RlLmNvbnRyb2xbJ3ZhbHVlRmllbGQnXV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSBldmVudC5jdXJyZW50Tm9kZS52YWx1ZVtldmVudC5jdXJyZW50Tm9kZS5jb250cm9sWydkaXNwbGF5RmllbGQnXV0udG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICB2YWx1ZUZpbHRlciA9IGV2ZW50LmN1cnJlbnROb2RlLnZhbHVlW2V2ZW50LmN1cnJlbnROb2RlLmNvbnRyb2xbJ3ZhbHVlRmllbGQnXV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl92YWx1ZSA9IGV2ZW50LmN1cnJlbnROb2RlLnZhbHVlLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICB2YWx1ZUZpbHRlciA9IGV2ZW50LmN1cnJlbnROb2RlLnZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZpbHRlcnM6IEZpbHRlcltdID0gW3tcbiAgICAgICAgICAgIGZpZWxkOiBldmVudC5jdXJyZW50Tm9kZS5jb250cm9sLmZpZWxkLFxuICAgICAgICAgICAgb3BlcmF0b3I6IEFycmF5LmlzQXJyYXkodmFsdWVGaWx0ZXIpID8gT3BlcmF0b3IuaW4gOiBPcGVyYXRvci5lcXVhbCxcbiAgICAgICAgICAgIHZhbHVlOiBKU09OLnN0cmluZ2lmeSh2YWx1ZUZpbHRlcilcbiAgICAgICAgfV07XG4gICAgICAgIGlmIChldmVudC5yb290TW9kZWwuaWQpIHtcbiAgICAgICAgICAgIGZpbHRlcnMudW5zaGlmdCh7XG4gICAgICAgICAgICAgICAgZmllbGQ6ICdpZCcsXG4gICAgICAgICAgICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yLm5vdEVxdWFsLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBKU09OLnN0cmluZ2lmeShldmVudC5yb290TW9kZWwuaWQpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fZGVmYXVsdEZpbHRlcnMpIHtcbiAgICAgICAgICAgIGZpbHRlcnMucHVzaCguLi50aGlzLl9kZWZhdWx0RmlsdGVycyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzdWx0Q2hlY2tFeGlzdCA9IGF3YWl0IHRoaXMuX2Jhc2VTZXJ2aWNlLmNoZWNrRXhpc3RCeUZpbHRlcihmaWx0ZXJzKTtcbiAgICAgICAgaWYgKCFyZXN1bHRDaGVja0V4aXN0LnN1Y2Nlc3MgfHwgcmVzdWx0Q2hlY2tFeGlzdC5kYXRhKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZ2V0RXJyb3IoKSB7XG4gICAgICAgIHJldHVybiBgVHLGsOG7nW5nICR7dGhpcy5fbGFiZWx9IGPDsyBnacOhIHRy4buLICR7dGhpcy5fdmFsdWV9IMSRw6MgdOG7k24gdOG6oWlgO1xuICAgIH1cbn1cblxuLyoqXG4gKiBLaeG7g20gdHJhIGLhu5kgZ8OhaSB0cuG7iyBj4bunYSBuaGnhu4F1IGPhu5l0IMSRw6MgdOG7k24gdOG6oWkgdHJvbmcgZGIuXG4gKi9cbmV4cG9ydCBjbGFzcyBDaGVja0R1cGxpY2F0ZUZpZWxkc1ZhbGlkYXRvciBpbXBsZW1lbnRzIElWYWxpZGF0b3Ige1xuICAgIF9kdXBsaWNhdGVGaWVsZHM6IHN0cmluZ1tdO1xuICAgIF9tZXNzYWdlOiBzdHJpbmc7XG4gICAgX29sZE1lc3NhZ2U6IHN0cmluZztcbiAgICBfYmFzZVNlcnZpY2U6IEJhc2VTZXJ2aWNlO1xuICAgIF9kaWNWYWx1ZTogYW55ID0ge307XG4gICAgcHJpdmF0ZSByZWFkb25seSBfZGVmYXVsdEZpbHRlcnM6IEZpbHRlcltdO1xuXG4gICAgY29uc3RydWN0b3IoZHVwbGljYXRlRmllbGRzOiBzdHJpbmdbXSwgbWVzc2FnZTogc3RyaW5nLCBkZWZhdWx0RmlsdGVycz86IEZpbHRlcltdKSB7XG4gICAgICAgIHRoaXMuX2R1cGxpY2F0ZUZpZWxkcyA9IGR1cGxpY2F0ZUZpZWxkcztcbiAgICAgICAgaWYgKHRoaXMuX2R1cGxpY2F0ZUZpZWxkcy5sZW5ndGggPT0gMCkgYWxlcnQoJ0PhuqV1IGjDrG5oIENoZWNrRHVwbGljYXRlRmllbGRzVmFsaWRhdG9yIHNhaScpO1xuICAgICAgICB0aGlzLl9tZXNzYWdlID0gbWVzc2FnZTtcbiAgICAgICAgdGhpcy5fZGVmYXVsdEZpbHRlcnMgPSBkZWZhdWx0RmlsdGVycztcbiAgICB9XG5cbiAgICBzZXRCYXNlU2VydmljZShiYXNlU2VydmljZTogQmFzZVNlcnZpY2UpIHtcbiAgICAgICAgdGhpcy5fYmFzZVNlcnZpY2UgPSBiYXNlU2VydmljZTtcbiAgICB9XG5cbiAgICBnZXREdXBsaWNhdGVGaWVsZHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kdXBsaWNhdGVGaWVsZHM7XG4gICAgfVxuXG4gICAgZ2V0RGVmYXVsdEZpbHRlcnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWZhdWx0RmlsdGVycztcbiAgICB9XG5cbiAgICBnZXRNZXNzYWdlKCkge1xuICAgICAgICAvLyBjb25zdCByZWcgPSBuZXcgUmVnRXhwKCcoPzw9e3spW159XSsoPz19KScsICdnJyk7XG4gICAgICAgIGNvbnN0IHJlZyA9IC97eyhbXn1dKyl9fS9nO1xuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLl9tZXNzYWdlLm1hdGNoKHJlZyk7XG4gICAgICAgIGxldCBuZXdNZXNzYWdlID0gdGhpcy5fbWVzc2FnZTtcbiAgICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICAgICAgICBjb25zdCBkaWNWYWx1ZSA9IHRoaXMuX2RpY1ZhbHVlO1xuICAgICAgICAgICAgcmVzdWx0LmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGV2YWwoYHZhbHVlID0gZGljVmFsdWUuJHtmaWVsZH1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGV4KSB7XG5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gbmV3TWVzc2FnZSA9IG5ld01lc3NhZ2UucmVwbGFjZShge3ske2ZpZWxkfX19YCwgdmFsdWUpO1xuICAgICAgICAgICAgICAgIG5ld01lc3NhZ2UgPSBuZXdNZXNzYWdlLnJlcGxhY2UoZmllbGQsIHZhbHVlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX29sZE1lc3NhZ2UgPSBuZXdNZXNzYWdlO1xuICAgICAgICByZXR1cm4gbmV3TWVzc2FnZTtcbiAgICB9XG5cbiAgICBhc3luYyB2YWxpZGF0ZShldmVudDogRXZlbnREYXRhKSB7XG4gICAgICAgIGNvbnN0IGFsbER1cGxpY2F0ZUZpZWxkcyA9IFsuLi50aGlzLl9kdXBsaWNhdGVGaWVsZHMsIGV2ZW50LmNvbnRyb2wuZmllbGRdO1xuICAgICAgICBjb25zdCBmaWx0ZXJzOiBGaWx0ZXJbXSA9IFtdO1xuICAgICAgICBsZXQgaGFzTnVsbFZhbHVlID0gZmFsc2U7XG5cbiAgICAgICAgY29uc3QgcGFyZW50TW9kZWwgPSBldmVudC5jdXJyZW50Tm9kZS5wYXJlbnROb2RlLm1vZGVsO1xuICAgICAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGFsbER1cGxpY2F0ZUZpZWxkcykge1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBwYXJlbnRNb2RlbC5fZXJyb3JzW2ZpZWxkXS5pbmRleE9mKHRoaXMuX29sZE1lc3NhZ2UpO1xuICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgICAgICBwYXJlbnRNb2RlbC5fZXJyb3JzW2ZpZWxkXS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50Tm9kZSA9IGV2ZW50LmN1cnJlbnROb2RlLmdldE5vZGVCeVBhdGgoZmllbGQpO1xuICAgICAgICAgICAgaWYgKGN1cnJlbnROb2RlLnZhbHVlICE9IG51bGwgJiYgY3VycmVudE5vZGUudmFsdWUgIT0gJycpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9kaWNWYWx1ZVtmaWVsZF0gPSBjdXJyZW50Tm9kZS52YWx1ZTtcbiAgICAgICAgICAgICAgICBmaWx0ZXJzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yLmVxdWFsLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogSlNPTi5zdHJpbmdpZnkodGhpcy5nZXRWYWx1ZSh0aGlzLl9kaWNWYWx1ZVtmaWVsZF0pKVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBoYXNOdWxsVmFsdWUgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTuG6v3UgY8OzIDEgdHLGsOG7nW5nIGLhu4sgdHLhu5FuZyAoa2jDtG5nIGPDsyBk4buvIGxp4buHdSkgdGjDrCB0cuG6oyB24buBIHRydWVcbiAgICAgICAgaWYgKGhhc051bGxWYWx1ZSkgcmV0dXJuIHRydWU7XG4gICAgICAgIGlmIChldmVudC5yb290TW9kZWwuaWQpIHtcbiAgICAgICAgICAgIGZpbHRlcnMudW5zaGlmdCh7XG4gICAgICAgICAgICAgICAgZmllbGQ6ICdpZCcsXG4gICAgICAgICAgICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yLm5vdEVxdWFsLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBKU09OLnN0cmluZ2lmeShldmVudC5yb290TW9kZWwuaWQpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fZGVmYXVsdEZpbHRlcnMpIHtcbiAgICAgICAgICAgIGZpbHRlcnMucHVzaCguLi50aGlzLl9kZWZhdWx0RmlsdGVycyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzdWx0Q2hlY2tFeGlzdCA9IGF3YWl0IHRoaXMuX2Jhc2VTZXJ2aWNlLmNoZWNrRXhpc3RCeUZpbHRlcihmaWx0ZXJzKTtcbiAgICAgICAgaWYgKCFyZXN1bHRDaGVja0V4aXN0LnN1Y2Nlc3MgfHwgcmVzdWx0Q2hlY2tFeGlzdC5kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLl9kdXBsaWNhdGVGaWVsZHMuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICAgICAgICAgICAgcGFyZW50TW9kZWwuX2Vycm9yc1tmaWVsZF0ucHVzaCh0aGlzLmdldE1lc3NhZ2UoKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0VmFsdWUocmF3VmFsdWUpIHtcbiAgICAgICAgaWYgKGlzTGl0ZXJhbE9iamVjdChyYXdWYWx1ZSkpIHtcbiAgICAgICAgICAgIGlmIChyYXdWYWx1ZS5fZHJvcGRvd252YWx1ZSAhPSBudWxsICYmIHJhd1ZhbHVlLl9kcm9wZG93bnZhbHVlICE9PSAnJykge1xuICAgICAgICAgICAgICAgIHJldHVybiByYXdWYWx1ZVtyYXdWYWx1ZS5fZHJvcGRvd252YWx1ZV0gfHwgcmF3VmFsdWVbJ3ZhbHVlJ107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmF3VmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNBcnJheShyYXdWYWx1ZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGFyciA9IFtdO1xuICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHJhd1ZhbHVlKSB7XG4gICAgICAgICAgICAgICAgYXJyLnB1c2godGhpcy5nZXRWYWx1ZShpdGVtKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYXJyO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByYXdWYWx1ZTtcbiAgICB9XG5cbiAgICBnZXRFcnJvcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX29sZE1lc3NhZ2U7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVW5pcXVlRmllbGRJblRhYmxlVmFsaWRhdG9yIGltcGxlbWVudHMgSVZhbGlkYXRvciB7XG4gICAgcHJpdmF0ZSBfZmllbGQ7XG5cbiAgICBjb25zdHJ1Y3RvcihmaWVsZCkge1xuICAgICAgICB0aGlzLl9maWVsZCA9IGZpZWxkO1xuICAgIH1cblxuICAgIHZhbGlkYXRlKGV2ZW50OiBFdmVudERhdGEpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKCEoZXZlbnQuY3VycmVudE5vZGUuY29udHJvbCBpbnN0YW5jZW9mIFRhYmxlU2NoZW1hKSkgcmV0dXJuIHRydWU7XG4gICAgICAgIGNvbnN0IGRpYyA9IHt9O1xuICAgICAgICBjb25zdCBjb250cm9sID0gZXZlbnQuY3VycmVudE5vZGUuY29udHJvbC5yb3dUZW1wbGF0ZS5maW5kKGl0ZW0gPT4gaXRlbS5maWVsZCA9PSB0aGlzLl9maWVsZCk7XG4gICAgICAgIGlmICghY29udHJvbCkgcmV0dXJuIHRydWU7XG5cbiAgICAgICAgY29uc3QgZXJyb3JNZXMgPSAnVHLGsOG7nW5nICcgKyBjb250cm9sLmxhYmVsICsgJyBraMO0bmcgxJHGsOG7o2MgdHLDuW5nIG5oYXUnO1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgZXZlbnQudmFsdWUpIHtcbiAgICAgICAgICAgIGlmIChpdGVtW3RoaXMuX2ZpZWxkXSAhPSBudWxsICYmIGl0ZW1bdGhpcy5fZmllbGRdICE9PSAnJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gaXRlbS5fZXJyb3JzW3RoaXMuX2ZpZWxkXS5pbmRleE9mKGVycm9yTWVzKTtcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkgaXRlbS5fZXJyb3JzW3RoaXMuX2ZpZWxkXS5zcGxpY2UoaW5kZXgsIDEpO1xuXG4gICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gaXRlbVt0aGlzLl9maWVsZF07XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlLmhhc093blByb3BlcnR5KCdfZHJvcGRvd252YWx1ZScpKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWVbdmFsdWVbJ19kcm9wZG93bnZhbHVlJ11dO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICghZGljW3ZhbHVlXSkge1xuICAgICAgICAgICAgICAgICAgICBkaWNbdmFsdWVdID0gW2l0ZW1dO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZGljW3ZhbHVlXS5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBoYXNFcnJvciA9IGZhbHNlO1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBkaWMpIHtcbiAgICAgICAgICAgIGlmIChkaWNba2V5XS5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgaGFzRXJyb3IgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBkaWNba2V5XSkge1xuICAgICAgICAgICAgICAgICAgICBpdGVtLl9lcnJvcnNbdGhpcy5fZmllbGRdLnB1c2goZXJyb3JNZXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gIWhhc0Vycm9yO1xuICAgIH1cblxuICAgIGdldEVycm9yKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbn1cblxuZXhwb3J0IGNsYXNzIEV4YWN0T25lVmFsdWVJblRhYmxlVmFsaWRhdG9yIGltcGxlbWVudHMgSVZhbGlkYXRvciB7XG4gICAgcHJpdmF0ZSBfZmllbGQ7XG4gICAgcHJpdmF0ZSBfdmFsdWU7XG4gICAgcHJpdmF0ZSBfbGFiZWw7XG5cbiAgICBjb25zdHJ1Y3RvcihmaWVsZCwgdmFsdWUsIGxhYmVsPykge1xuICAgICAgICB0aGlzLl9maWVsZCA9IGZpZWxkO1xuICAgICAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLl9sYWJlbCA9IGxhYmVsID8gbGFiZWwgOiB2YWx1ZTtcbiAgICB9XG5cbiAgICB2YWxpZGF0ZShldmVudDogRXZlbnREYXRhKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICghKGV2ZW50LmN1cnJlbnROb2RlLmNvbnRyb2wgaW5zdGFuY2VvZiBUYWJsZVNjaGVtYSkpIHJldHVybiB0cnVlO1xuICAgICAgICBjb25zdCBkaWMgPSB7fTtcbiAgICAgICAgY29uc3QgY29udHJvbCA9IGV2ZW50LmN1cnJlbnROb2RlLmNvbnRyb2wucm93VGVtcGxhdGUuZmluZChpdGVtID0+IGl0ZW0uZmllbGQgPT0gdGhpcy5fZmllbGQpO1xuICAgICAgICBpZiAoIWNvbnRyb2wpIHJldHVybiB0cnVlO1xuXG4gICAgICAgIGNvbnN0IGVycm9yTWVzID0gJ0No4buJIMSRxrDhu6NjIG5o4bqtcCBt4buZdCBnacOhIHRy4buLICcgKyB0aGlzLl9sYWJlbDtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGV2ZW50LnZhbHVlKSB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IGl0ZW0uX2Vycm9yc1t0aGlzLl9maWVsZF0uaW5kZXhPZihlcnJvck1lcyk7XG4gICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkgaXRlbS5fZXJyb3JzW3RoaXMuX2ZpZWxkXS5zcGxpY2UoaW5kZXgsIDEpO1xuXG4gICAgICAgICAgICBsZXQgdmFsdWUgPSBpdGVtW3RoaXMuX2ZpZWxkXTtcbiAgICAgICAgICAgIGlmICh2YWx1ZS5oYXNPd25Qcm9wZXJ0eSgnX2Ryb3Bkb3dudmFsdWUnKSkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWVbdmFsdWVbJ19kcm9wZG93bnZhbHVlJ11dO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodmFsdWUgPT0gdGhpcy5fdmFsdWUpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWRpY1t2YWx1ZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgZGljW3ZhbHVlXSA9IFtpdGVtXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGRpY1t2YWx1ZV0ucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgaGFzRXJyb3IgPSBmYWxzZTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZGljKSB7XG4gICAgICAgICAgICBpZiAoZGljW2tleV0ubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgIGhhc0Vycm9yID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgZGljW2tleV0pIHtcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5fZXJyb3JzW3RoaXMuX2ZpZWxkXS5wdXNoKGVycm9yTWVzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICFoYXNFcnJvcjtcbiAgICB9XG5cbiAgICBnZXRFcnJvcigpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG59XG5cbmV4cG9ydCBjbGFzcyBTYW1lVmFsdWVWYWxpZGF0b3IgaW1wbGVtZW50cyBJVmFsaWRhdG9yIHtcbiAgICBfc2FtZUZpZWxkczogc3RyaW5nW107XG4gICAgX21lc3NhZ2U6IHN0cmluZztcblxuICAgIGNvbnN0cnVjdG9yKGR1cGxpY2F0ZUZpZWxkczogc3RyaW5nW10sIG1lc3NhZ2U6IHN0cmluZykge1xuICAgICAgICB0aGlzLl9zYW1lRmllbGRzID0gZHVwbGljYXRlRmllbGRzO1xuICAgICAgICBpZiAodGhpcy5fc2FtZUZpZWxkcy5sZW5ndGggPT0gMCkgYWxlcnQoJ0PhuqV1IGjDrG5oIFNhbWVWYWxpZGF0b3Igc2FpJyk7XG4gICAgICAgIHRoaXMuX21lc3NhZ2UgPSBtZXNzYWdlO1xuICAgIH1cblxuICAgIGdldFNhbWVGaWVsZHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zYW1lRmllbGRzO1xuICAgIH1cblxuICAgIGdldE1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tZXNzYWdlO1xuICAgIH1cblxuICAgIGFzeW5jIHZhbGlkYXRlKGV2ZW50OiBFdmVudERhdGEpIHtcbiAgICAgICAgY29uc3QgYWxsRHVwbGljYXRlRmllbGRzID0gWy4uLnRoaXMuX3NhbWVGaWVsZHMsIGV2ZW50LmNvbnRyb2wuZmllbGRdO1xuXG4gICAgICAgIGNvbnN0IHBhcmVudE1vZGVsID0gZXZlbnQuY3VycmVudE5vZGUucGFyZW50Tm9kZS5tb2RlbDtcbiAgICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiBhbGxEdXBsaWNhdGVGaWVsZHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gcGFyZW50TW9kZWwuX2Vycm9yc1tmaWVsZF0uaW5kZXhPZih0aGlzLl9tZXNzYWdlKTtcbiAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgICAgICAgICAgcGFyZW50TW9kZWwuX2Vycm9yc1tmaWVsZF0uc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsZXQgZXJyb3IgPSBmYWxzZTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhbGxEdXBsaWNhdGVGaWVsZHMubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBmaWVsZCA9IGFsbER1cGxpY2F0ZUZpZWxkc1tpXTtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnROb2RlID0gZXZlbnQuY3VycmVudE5vZGUuZ2V0Tm9kZUJ5UGF0aChmaWVsZCk7XG4gICAgICAgICAgICBpZiAoY3VycmVudE5vZGUudmFsdWUgIT0gZXZlbnQudmFsdWUpIHtcbiAgICAgICAgICAgICAgICBlcnJvciA9IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICB0aGlzLl9zYW1lRmllbGRzLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgICAgICAgICAgIHBhcmVudE1vZGVsLl9lcnJvcnNbZmllbGRdLnB1c2godGhpcy5fbWVzc2FnZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGdldEVycm9yKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWVzc2FnZTtcbiAgICB9XG59XG5cbmV4cG9ydCBlbnVtIFZhbHVlVHlwZSB7XG4gICAgZGF0ZSA9ICdkYXRlJyxcbiAgICBkYXRldGltZSA9ICdkYXRldGltZScsXG4gICAgaW50ID0gJ2ludCcsXG4gICAgZGVjaW1hbCA9ICdkZWNpbWFsJyxcbiAgICBib29sZWFuID0gJ2Jvb2xlYW4nLFxuICAgIHN0cmluZyA9ICdzdHJpbmcnLFxufVxuXG5leHBvcnQgY2xhc3MgQ29kZVZhbGlkYXRvciBpbXBsZW1lbnRzIElWYWxpZGF0b3Ige1xuICAgIHZhbGlkYXRlKGV2ZW50OiBFdmVudERhdGEpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBldmVudC52YWx1ZTtcbiAgICAgICAgaWYgKHZhbHVlID09IG51bGwgfHwgdmFsdWUgPT09ICcnKSByZXR1cm4gdHJ1ZTtcblxuICAgICAgICBjb25zdCByZSA9IC9eW1xcdyYuXFwtXSskLztcbiAgICAgICAgcmV0dXJuIHJlLnRlc3QoU3RyaW5nKHZhbHVlKSk7XG4gICAgfVxuXG4gICAgZ2V0RXJyb3IoKSB7XG4gICAgICAgIHJldHVybiAnS2jDtG5nIMSRw7puZyDEkeG7i25oIGThuqFuZyBtw6MnO1xuICAgIH1cbn1cblxuXG5leHBvcnQgY2xhc3MgU2NhbGFyVmFsdWVWYWxpZGF0b3IgaW1wbGVtZW50cyBJVmFsaWRhdG9yIHtcbiAgICBwcml2YXRlIF9vcGVyYXRvclRleHQ6IHN0cmluZyA9ICcnO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgX29wZXJhdG9yOiBPcGVyYXRvcixcbiAgICAgICAgcHJpdmF0ZSBfc2NhbGFyVmFsdWU6IGFueSxcbiAgICAgICAgcHJpdmF0ZSBfdHlwZTogVmFsdWVUeXBlID0gVmFsdWVUeXBlLnN0cmluZyxcbiAgICApIHtcbiAgICB9XG5cbiAgICBnZXRFcnJvcigpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYFBo4bqjaSAke3RoaXMuX29wZXJhdG9yVGV4dH0gJHt0aGlzLl9zY2FsYXJWYWx1ZX1gO1xuICAgIH1cblxuICAgIHZhbGlkYXRlKGV2ZW50OiBFdmVudERhdGEpOiBQcm9taXNlPGJvb2xlYW4+IHwgYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGxlZnQgPSB0aGlzLmdldFZhbHVlKGV2ZW50LnZhbHVlKTtcbiAgICAgICAgY29uc3QgcmlnaHQgPSB0aGlzLmdldFZhbHVlKHRoaXMuX3NjYWxhclZhbHVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29tcGFyZVZhbHVlKGxlZnQsIHJpZ2h0KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbXBhcmVWYWx1ZShsZWZ0OiBhbnksIHJpZ2h0OiBhbnkpIHtcbiAgICAgICAgc3dpdGNoICh0aGlzLl9vcGVyYXRvcikge1xuICAgICAgICAgICAgY2FzZSBPcGVyYXRvci5lcXVhbDpcbiAgICAgICAgICAgICAgICB0aGlzLl9vcGVyYXRvclRleHQgPSAnYuG6sW5nJztcbiAgICAgICAgICAgICAgICByZXR1cm4gbGVmdCA9PSByaWdodDtcbiAgICAgICAgICAgIGNhc2UgT3BlcmF0b3Iubm90RXF1YWw6XG4gICAgICAgICAgICAgICAgdGhpcy5fb3BlcmF0b3JUZXh0ID0gJ2tow7RuZyBi4bqxbmcnO1xuICAgICAgICAgICAgICAgIHJldHVybiBsZWZ0ICE9IHJpZ2h0O1xuICAgICAgICAgICAgY2FzZSBPcGVyYXRvci5ncmVhdGVyOlxuICAgICAgICAgICAgICAgIHRoaXMuX29wZXJhdG9yVGV4dCA9ICds4bubbiBoxqFuJztcbiAgICAgICAgICAgICAgICByZXR1cm4gbGVmdCA+IHJpZ2h0O1xuICAgICAgICAgICAgY2FzZSBPcGVyYXRvci5ncmVhdGVyVGhhbkVxdWFsOlxuICAgICAgICAgICAgICAgIHRoaXMuX29wZXJhdG9yVGV4dCA9ICds4bubbiBoxqFuIGhv4bq3YyBi4bqxbmcnO1xuICAgICAgICAgICAgICAgIHJldHVybiBsZWZ0ID49IHJpZ2h0O1xuICAgICAgICAgICAgY2FzZSBPcGVyYXRvci5sb3dlcjpcbiAgICAgICAgICAgICAgICB0aGlzLl9vcGVyYXRvclRleHQgPSAnbmjhu48gaMahbic7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxlZnQgPCByaWdodDtcbiAgICAgICAgICAgIGNhc2UgT3BlcmF0b3IubG93ZXJUaGFuRXF1YWw6XG4gICAgICAgICAgICAgICAgdGhpcy5fb3BlcmF0b3JUZXh0ID0gJ25o4buPIGjGoW4gaG/hurdjIGLhurFuZyc7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxlZnQgPD0gcmlnaHQ7XG4gICAgICAgICAgICBjYXNlIE9wZXJhdG9yLmluOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGlzdDogYW55W10gPSBsZWZ0O1xuICAgICAgICAgICAgICAgIHRoaXMuX29wZXJhdG9yVGV4dCA9ICdu4bqxbSB0cm9uZyc7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxpc3Quc29tZSh4ID0+IHggPT0gbGVmdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIE9wZXJhdG9yLm5vdEluOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGlzdDogYW55W10gPSBsZWZ0O1xuICAgICAgICAgICAgICAgIHRoaXMuX29wZXJhdG9yVGV4dCA9ICdu4bqxbSBuZ2/DoGknO1xuICAgICAgICAgICAgICAgIHJldHVybiBsaXN0LmV2ZXJ5KHggPT4geCAhPSBsZWZ0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgT3BlcmF0b3Iuc3RhcnRXaXRoOiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RyOiBzdHJpbmcgPSBsZWZ0O1xuICAgICAgICAgICAgICAgIHRoaXMuX29wZXJhdG9yVGV4dCA9ICdi4bqvdCDEkeG6p3UgYuG6sW5nJztcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RyLnN0YXJ0c1dpdGgocmlnaHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBPcGVyYXRvci5ub3RTdGFydFdpdGg6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdHI6IHN0cmluZyA9IGxlZnQ7XG4gICAgICAgICAgICAgICAgdGhpcy5fb3BlcmF0b3JUZXh0ID0gJ2tow7RuZyBi4bqvdCDEkeG6p3UgYuG6sW5nJztcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RyLnN0YXJ0c1dpdGgocmlnaHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBPcGVyYXRvci5lbmRXaXRoOiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RyOiBzdHJpbmcgPSBsZWZ0O1xuICAgICAgICAgICAgICAgIHRoaXMuX29wZXJhdG9yVGV4dCA9ICdr4bq/dCB0aMO6YyBi4bqxbmcnO1xuICAgICAgICAgICAgICAgIHJldHVybiBzdHIuZW5kc1dpdGgocmlnaHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBPcGVyYXRvci5ub3RFbmRXaXRoOiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RyOiBzdHJpbmcgPSBsZWZ0O1xuICAgICAgICAgICAgICAgIHRoaXMuX29wZXJhdG9yVGV4dCA9ICdraMO0bmcga+G6v3QgdGjDumMgYuG6sW5nJztcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RyLmVuZHNXaXRoKHJpZ2h0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgT3BlcmF0b3IuY29udGFpbjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0cjogc3RyaW5nID0gbGVmdDtcbiAgICAgICAgICAgICAgICB0aGlzLl9vcGVyYXRvclRleHQgPSAnY8OzIGNo4bupYSc7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0ci5pbmNsdWRlcyhyaWdodCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIE9wZXJhdG9yLm5vdENvbnRhaW46IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdHI6IHN0cmluZyA9IGxlZnQ7XG4gICAgICAgICAgICAgICAgdGhpcy5fb3BlcmF0b3JUZXh0ID0gJ2tow7RuZyBjaOG7qWEnO1xuICAgICAgICAgICAgICAgIHJldHVybiAhc3RyLmluY2x1ZGVzKHJpZ2h0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgT3BlcmF0b3IuaXNOdWxsOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fb3BlcmF0b3JUZXh0ID0gJ8SR4buDIHRy4buRbmcnO1xuICAgICAgICAgICAgICAgIHJldHVybiBsZWZ0ID09IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIE9wZXJhdG9yLmlzTm90TnVsbDoge1xuICAgICAgICAgICAgICAgIHRoaXMuX29wZXJhdG9yVGV4dCA9ICdraMO0bmcgxJHhu4MgdHLhu5FuZyc7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxlZnQgIT0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgT3BlcmF0b3IuaW5Sb2xlOlxuICAgICAgICAgICAgY2FzZSBPcGVyYXRvci5ub3RJblJvbGU6XG4gICAgICAgICAgICBjYXNlIE9wZXJhdG9yLmluQ2F0ZWdvcnk6XG4gICAgICAgICAgICBjYXNlIE9wZXJhdG9yLm5vdEluQ2F0ZWdvcnk6XG4gICAgICAgICAgICBjYXNlIE9wZXJhdG9yLmluUG9zaXRpb246XG4gICAgICAgICAgICBjYXNlIE9wZXJhdG9yLm5vdEluUG9zaXRpb246XG4gICAgICAgICAgICBjYXNlIE9wZXJhdG9yLmluTGlzdFVzZXI6XG4gICAgICAgICAgICBjYXNlIE9wZXJhdG9yLm5vdEluTGlzdFVzZXI6XG4gICAgICAgICAgICBjYXNlIE9wZXJhdG9yLmluTGlzdEdyb3VwOlxuICAgICAgICAgICAgY2FzZSBPcGVyYXRvci5ub3RJbkxpc3RHcm91cDpcbiAgICAgICAgICAgIGNhc2UgT3BlcmF0b3IuaXNDdXJyZW50VXNlcjpcbiAgICAgICAgICAgIGNhc2UgT3BlcmF0b3IuaXNDdXJyZW50Q2FuQm86XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRWYWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgICAgIHN3aXRjaCAodGhpcy5fdHlwZSkge1xuICAgICAgICAgICAgY2FzZSBWYWx1ZVR5cGUuZGF0ZTpcbiAgICAgICAgICAgIGNhc2UgVmFsdWVUeXBlLmRhdGV0aW1lOlxuICAgICAgICAgICAgICAgIHJldHVybiBtb21lbnQodmFsdWUsICdERC9NTS9ZWVlZIGhoOm1tOnNzJyk7XG4gICAgICAgICAgICBjYXNlIFZhbHVlVHlwZS5pbnQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50KHZhbHVlKTtcbiAgICAgICAgICAgIGNhc2UgVmFsdWVUeXBlLmRlY2ltYWw6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQodmFsdWUpO1xuICAgICAgICAgICAgY2FzZSBWYWx1ZVR5cGUuYm9vbGVhbjpcbiAgICAgICAgICAgICAgICByZXR1cm4gQm9vbGVhbih2YWx1ZSk7XG4gICAgICAgICAgICBjYXNlIFZhbHVlVHlwZS5zdHJpbmc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIFBhc3N3b3JkVmFsaWRhdG9yIGltcGxlbWVudHMgSVZhbGlkYXRvciB7XG4gICAgcHJpdmF0ZSBfbWVzc2FnZTogc3RyaW5nO1xuICAgIHByaXZhdGUgX3VzZXJTZXJ2aWNlOiBVc2VyU2VydmljZVxuICAgIGNvbnN0cnVjdG9yKCkge1xuXG4gICAgfVxuICAgIHNldEJhc2VTZXJ2aWNlKHVzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSkge1xuICAgICAgICB0aGlzLl91c2VyU2VydmljZSA9IHVzZXJTZXJ2aWNlO1xuICAgIH1cblxuICAgIGFzeW5jIHZhbGlkYXRlKGV2ZW50OiBFdmVudERhdGEpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgbGV0IG1lc3NhZ2UgPSAnJztcbiAgICAgICAgY29uc3QgdmFsdWUgPSBldmVudC52YWx1ZTtcbiAgICAgICAgaWYgKHZhbHVlPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuX3VzZXJTZXJ2aWNlLnZhbGlkYXRlUGFzc3dvcmQodmFsdWUpO1xuICAgICAgICAgICAgaWYgKCFyZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSByZXN1bHQubWVzc2FnZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9tZXNzYWdlID0gbWVzc2FnZTtcbiAgICAgICAgcmV0dXJuICFtZXNzYWdlO1xuICAgIH1cblxuICAgIGdldEVycm9yKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWVzc2FnZTtcbiAgICB9XG5cbn1cblxuIl19
|