@huntsman-cancer-institute/cod 17.10.4 → 17.11.1
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/esm2022/components/attribute-absolute.component.mjs +35 -35
- package/esm2022/components/attribute-base.mjs +2 -2
- package/esm2022/components/attribute-edit.component.mjs +41 -27
- package/esm2022/components/attribute-flex.component.mjs +47 -47
- package/fesm2022/huntsman-cancer-institute-cod.mjs +121 -107
- package/fesm2022/huntsman-cancer-institute-cod.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -493,7 +493,7 @@ export class AttributeBase {
|
|
|
493
493
|
}
|
|
494
494
|
editGridRow(modal, idGroupAttribute, event) {
|
|
495
495
|
//EditInline is actually the ONLY way this can be editable, so this is really whether the grid is editable, at all
|
|
496
|
-
if (this.editInline) {
|
|
496
|
+
if (this.editInline && !(this.attribute.isActive === 'N')) {
|
|
497
497
|
this.editGroupAttributeRowId = event.data.groupAttributeRowId;
|
|
498
498
|
this.editGroupRowAttributes = this.childAttributes;
|
|
499
499
|
this.modalService.open(modal, { windowClass: "modal-lg" }).result.then((result) => {
|
|
@@ -561,4 +561,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
561
561
|
type: ViewChild,
|
|
562
562
|
args: ["nativeSelectRef", { static: false }]
|
|
563
563
|
}] } });
|
|
564
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0cmlidXRlLWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb2Qvc3JjL2NvbXBvbmVudHMvYXR0cmlidXRlLWJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFVBQVUsRUFBZSxZQUFZLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBMkMsU0FBUyxFQUMxSSxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0saUJBQWlCLENBQUE7QUFFeEMsT0FBTyxFQUFtQixZQUFZLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDcEQsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRXJDLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBTy9ELE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUMzQyxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUN2RSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sNEJBQTRCLENBQUM7Ozs7QUFHcEQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7QUFLSCxNQUFNLE9BQU8sYUFBYTtJQStDeEIsWUFBWSxnQkFBa0MsRUFBRSxVQUFzQixFQUFFLFFBQW1CLEVBQVUsWUFBc0I7UUFBdEIsaUJBQVksR0FBWixZQUFZLENBQVU7UUE1Q2xILG1CQUFjLEdBQVksS0FBSyxDQUFDO1FBQ2hDLGVBQVUsR0FBWSxJQUFJLENBQUM7UUFDM0Isd0JBQW1CLEdBQVcsU0FBUyxDQUFDO1FBRXZDLGtCQUFhLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7UUFLckUsb0JBQWUsR0FBcUIsRUFBRSxDQUFDO1FBYXZDLFVBQUssR0FBVyxDQUFDLENBQUM7UUFRbEIsZ0JBQVcsR0FBRztZQUNWLFlB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QUM7UUFFcEUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBRUQsa0JBQWtCLENBQUMsS0FBVTtRQUMzQixJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDN0MsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQSxDQUFDLENBQUEsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFBLENBQUMsQ0FBQSxTQUFTLENBQUM7UUFFbkUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBRUQsa0JBQWtCLENBQUMsS0FBVTtRQUMzQixJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDN0MsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQSxDQUFDLENBQUEsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFBLENBQUMsQ0FBQSxTQUFTLENBQUM7UUFFbkUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBRUQsZUFBZSxDQUFDLEtBQVU7UUFDeEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFDbEQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQSxDQUFDLENBQUEsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFBLENBQUMsQ0FBQSxTQUFTLENB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UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LCBpc0Rldk1vZGUsIE91dHB1dCwgUmVuZGVyZXIyLCBWaWV3Q2hpbGQsIFZpZXdDaGlsZHJlbiwgT25Jbml0LCBPbkRlc3Ryb3ksIEluamVjdCwgRGlyZWN0aXZlLCBRdWVyeUxpc3RcclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuaW1wb3J0IHtEYXRlUGlwZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJ1xyXG5cclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBTdWJzY3JpcHRpb259IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7Zmlyc3R9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xyXG5cclxuaW1wb3J0IHtBdHRyaWJ1dGVTZXJ2aWNlfSBmcm9tIFwiLi4vc2VydmljZXMvYXR0cmlidXRlLnNlcnZpY2VcIjtcclxuaW1wb3J0IHtBdHRyaWJ1dGV9IGZyb20gXCIuLi9tb2RlbC9hdHRyaWJ1dGUuZW50aXR5XCI7XHJcbmltcG9ydCB7QXR0cmlidXRlVmFsdWV9IGZyb20gXCIuLi9tb2RlbC9hdHRyaWJ1dGUtdmFsdWUuZW50aXR5XCI7XHJcbmltcG9ydCB7QXR0cmlidXRlQ2hvaWNlfSBmcm9tIFwiLi4vbW9kZWwvYXR0cmlidXRlLWNob2ljZS5lbnRpdHlcIjtcclxuaW1wb3J0IHtBdHRyaWJ1dGVMb25nVGV4dH0gZnJvbSBcIi4uL21vZGVsL2F0dHJpYnV0ZS1sb25nLXRleHQuZW50aXR5XCI7XHJcbmltcG9ydCB7R3JhcGhpY2FsQXR0cmlidXRlfSBmcm9tIFwiLi4vbW9kZWwvZ3JhcGhpY2FsLWF0dHJpYnV0ZS5lbnRpdHlcIjtcclxuaW1wb3J0IHtEaWN0aW9uYXJ5RW50cmllc0RUT30gZnJvbSBcIi4uL21vZGVsL2RpY3Rpb25hcnktZW50cmllcy5kdG9cIjtcclxuaW1wb3J0IHtEYXRlVXRpbH0gZnJvbSBcIi4uL2RhdGUvZGF0ZS11dGlsXCI7XHJcbmltcG9ydCB7TmF0aXZlU2VsZWN0Q29tcG9uZW50fSBmcm9tIFwiQGh1bnRzbWFuLWNhbmNlci1pbnN0aXR1dGUvaW5wdXRcIjtcclxuaW1wb3J0IHtOZ2JNb2RhbH0gZnJvbSBcIkBuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwXCI7XHJcbmltcG9ydCB7R3JpZEFwaSwgUm93RG91YmxlQ2xpY2tlZEV2ZW50LCBSb3dOb2RlLCBSb3dTZWxlY3RlZEV2ZW50LCBBZ0dyaWRFdmVudCwgR3JpZFNpemVDaGFuZ2VkRXZlbnQsIE1vZGVsVXBkYXRlZEV2ZW50fSBmcm9tIFwiYWctZ3JpZC1jb21tdW5pdHlcIjtcclxuXHJcbi8qKlxyXG4gKiBUaGUgYmFzZSBjbGFzcyBmb3IgYW4gYXR0cmlidXRlLiAgQXR0cmlidXRlcyBhcmUgaXRlcmF0ZWQgb3ZlciBieSBjb250YWluZXIuICBUaGVzZSBtYXkgYmUgaW4gdHJhZGl0aW9uYWwgYWJzb2x1dGVcclxuICogcG9zaXRpb25pbmcsIGZsZXggcG9zaXRpb25pbmcsIG9yIGFuIGVkaXQgbW9kZSBhcyBhIGNvbHVtbiBpbiBhIG1vZGFsLiAgUmVnYXJkbGVzcyBvZiB0aGUgdGVtcGxhdGUsIHRoZSBmdW5kYW1lbnRhbFxyXG4gKiBuZWVkcyBvZiBzZXR0aW5nIHVwIHRoZSBhdHRyaWJ1dGUgdmFsdWVzIGFuZCBwZXJzaXN0aW5nIGRhdGEgYXJlIHRoZSBzYW1lLiAgU28gdGhpcyBjbGFzcyBwcm92aWRlcyBiYXNlIGZ1bmN0aW9uYWxpdHlcclxuICogYW5kIHRoZSBjb21wb25lbnRzIHRoYXQgZXh0ZW5kIGl0IHByb3ZpZGUgdGhlIHRlbXBsYXRlIGFuZCBtYXkgYWxzbyBleHRlbmQgdGhlIGZ1bmN0aW9uYWxpdHkuXHJcbiAqXHJcbiAqIFR5cGVzOlxyXG4gKiBMSU5FXHJcbiAqIE5MUF9MSU5LXHJcbiAqIERJQ1RcclxuICogR0FcclxuICogTEFCRUxcclxuICogRFRcclxuICogQUNcclxuICogVFhUXHJcbiAqIERcclxuICogU1xyXG4gKiBJXHJcbiAqIENCXHJcbiAqIEJcclxuICogTlxyXG4gKiBFQlxyXG4gKi9cclxuQERpcmVjdGl2ZSh7XHJcbiAgICBzZWxlY3RvcjogXCJoY2ktYXR0cmlidXRlLWJhc2VcIlxyXG4gIH1cclxuKVxyXG5leHBvcnQgY2xhc3MgQXR0cmlidXRlQmFzZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuXHJcbiAgQElucHV0KCkgYXR0cmlidXRlOiBHcmFwaGljYWxBdHRyaWJ1dGU7XHJcbiAgQElucHV0KCkgaW50ZXJuYWxWYWx1ZXM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBlZGl0SW5saW5lOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBncm91cEF0dHJpYnV0ZVJvd0lkOiBudW1iZXIgPSB1bmRlZmluZWQ7XHJcblxyXG4gIEBPdXRwdXQoKSByZXNvcnRDb2x1bW5zOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICBAVmlld0NoaWxkKFwiaW5wdXRSZWZcIiwge3N0YXRpYzogZmFsc2V9KSBpbnB1dFJlZjogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKFwibmF0aXZlU2VsZWN0UmVmXCIsIHtzdGF0aWM6IGZhbHNlfSkgbmF0aXZlU2VsZWN0UmVmOiBOYXRpdmVTZWxlY3RDb21wb25lbnQ7XHJcblxyXG4gIGF0dHJpYnV0ZVZhbHVlczogQXR0cmlidXRlVmFsdWVbXSA9IFtdO1xyXG4gIGF0dHJpYnV0ZUNob2ljZXM6IEF0dHJpYnV0ZUNob2ljZVtdO1xyXG5cclxuICBjaGlsZEF0dHJpYnV0ZXM6IEdyYXBoaWNhbEF0dHJpYnV0ZVtdO1xyXG4gIGdyaWREYXRhOiBhbnlbXTtcclxuICBncmlkQ29sdW1uczogYW55W107XHJcblxyXG4gIC8vVXNlZCBmb3IgdGhlIGVkaXQgZ3JvdXAgcm93IHRlbXBsYXRlXHJcbiAgZWRpdEdyb3VwQXR0cmlidXRlUm93SWQ6IG51bWJlcjtcclxuICBlZGl0R3JvdXBSb3dBdHRyaWJ1dGVzOiBHcmFwaGljYWxBdHRyaWJ1dGVbXTtcclxuXHJcbiAgZGljdGlvbmFyeUVudHJpZXM6IGFueVtdO1xyXG5cclxuICB3aWR0aDogbnVtYmVyID0gMDtcclxuXHJcbiAgYXR0cmlidXRlU2VydmljZTogQXR0cmlidXRlU2VydmljZTtcclxuICBlbGVtZW50UmVmOiBFbGVtZW50UmVmO1xyXG4gIHJlbmRlcmVyOiBSZW5kZXJlcjI7XHJcblxyXG4gIGdyaWRBcGk6IEdyaWRBcGk7XHJcblxyXG4gIGdyaWRPcHRpb25zID0ge1xyXG4gICAgICBoZWFkZXJIZWlnaHQ6IDIzLFxyXG4gICAgICByb3dIZWlnaHQ6IDIzLFxyXG4gICAgICByb3dTdHlsZToge1xyXG4gICAgICAgICAgJ2ZvbnQtZmFtaWx5JzogJ1Byb21wdCwgc2Fucy1zZXJpZicsXHJcbiAgICAgICAgICAnY29sb3InOiAnIzNkN2E5OSdcclxuICAgICAgfSxcclxuICAgICAgZW5hYmxlQ2VsbFRleHRTZWxlY3Rpb246IHRydWUsXHJcbiAgICAgIGVuc3VyZURvbU9yZGVyOiB0cnVlLFxyXG4gICAgICBzdXBwcmVzc0NvbHVtblZpcnR1YWxpc2F0aW9uOiBmYWxzZVxyXG4gICAgfTtcclxuXHJcbiAgc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xyXG5cclxuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVTZXJ2aWNlOiBBdHRyaWJ1dGVTZXJ2aWNlLCBlbGVtZW50UmVmOiBFbGVtZW50UmVmLCByZW5kZXJlcjogUmVuZGVyZXIyLCBwcml2YXRlIG1vZGFsU2VydmljZTogTmdiTW9kYWwpIHtcclxuICAgIHRoaXMuYXR0cmlidXRlU2VydmljZSA9IGF0dHJpYnV0ZVNlcnZpY2U7XHJcbiAgICB0aGlzLmVsZW1lbnRSZWYgPSBlbGVtZW50UmVmO1xyXG4gICAgdGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IGFueSBhdHRyaWJ1dGUgdmFsdWVzIGZvciB0aGlzIGF0dHJpYnV0ZS4gIElmIGEgY29tcGxleCBhdHRyaWJ1dGUgbGlrZSBhIGdyaWQsIHNldCBpdCB1cC5cclxuICAgKi9cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLmdldENvbnRhaW5lclVwZGF0ZWQoKS5zdWJzY3JpYmUoKHVwZGF0ZWQ6IGJvb2xlYW4pID0+IHtcclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuICAgIH0pKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBvbkdyaWRSZWFkeShwYXJhbXMgOiBhbnkpIHtcclxuICAgIHRoaXMuZ3JpZEFwaSA9IHBhcmFtcy5hcGk7XHJcbiAgICB0aGlzLmdyaWRBcGkuc2l6ZUNvbHVtbnNUb0ZpdCgpO1xyXG4gIH1cclxuXHJcbiAgb25Nb2RlbFVwZGF0ZWQoX2V2ZW50OiBNb2RlbFVwZGF0ZWRFdmVudCkge1xyXG4gICAgaWYgKHRoaXMuZ3JpZEFwaSkge1xyXG4gICAgICB0aGlzLmdyaWRBcGkuc2l6ZUNvbHVtbnNUb0ZpdCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25HcmlkU2l6ZUNoYW5nZWQoX2V2ZW50OiBHcmlkU2l6ZUNoYW5nZWRFdmVudCkge1xyXG4gICAgaWYgKHRoaXMuZ3JpZEFwaSkge1xyXG4gICAgICB0aGlzLmdyaWRBcGkuc2l6ZUNvbHVtbnNUb0ZpdCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUHVsbHMgdGhlIGF0dHJpYnV0ZSB2YWx1ZXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgYXR0cmlidXRlIGFuZCBwZXJmb3JtcyBhbnkgc3BlY2lhbGl6ZWQgaW5pdGlhbGl6YXRpb24gc3VjaCBhcyBmb3JcclxuICAgKiB0aGUgZ3JpZCBvciBtdWx0aSBjaG9pY2UuXHJcbiAgICovXHJcbiAgaW5pdCgpOiB2b2lkIHtcclxuICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICBjb25zb2xlLmRlYnVnKFwiQXR0cmlidXRlLmluaXQ6IFwiICsgdGhpcy5hdHRyaWJ1dGUuaWRBdHRyaWJ1dGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZ3JpZERhdGEgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLmdyaWRDb2x1bW5zID0gdW5kZWZpbmVkO1xyXG4gICAgdGhpcy5hdHRyaWJ1dGVDaG9pY2VzID0gdW5kZWZpbmVkO1xyXG4gICAgdGhpcy53aWR0aCA9IHRoaXMuYXR0cmlidXRlU2VydmljZS5nZXRXaWR0aCgpO1xyXG5cclxuICAgIGlmICghdGhpcy5pbnRlcm5hbFZhbHVlcykge1xyXG4gICAgICB0aGlzLmF0dHJpYnV0ZVZhbHVlcyA9IHRoaXMuYXR0cmlidXRlU2VydmljZS5nZXRBdHRyaWJ1dGVWYWx1ZXModGhpcy5hdHRyaWJ1dGUuaWRBdHRyaWJ1dGUsIHRoaXMuZ3JvdXBBdHRyaWJ1dGVSb3dJZCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuYXR0cmlidXRlVmFsdWVzLmxlbmd0aCA9PT0gMCAmJiB0aGlzLmF0dHJpYnV0ZS5jb2RlQXR0cmlidXRlRGF0YVR5cGUgIT09IFwiR0FcIiAmJiB0aGlzLmF0dHJpYnV0ZS5pc011bHRpVmFsdWUgIT09IFwiWVwiKSB7XHJcbiAgICAgIC8vIFRPRE86IERlY2lkZSB3aGVuIHRvIHBlcnNpc3QgdGhpcyB0byBnZXQgdGhlIGlkQXR0cmlidXRlVmFsdWUuXHJcbiAgICAgIHRoaXMuYXR0cmlidXRlVmFsdWVzLnB1c2goPEF0dHJpYnV0ZVZhbHVlPntcclxuICAgICAgICBjb2RlQXR0cmlidXRlRGF0YVR5cGU6IHRoaXMuYXR0cmlidXRlLmNvZGVBdHRyaWJ1dGVEYXRhVHlwZSxcclxuICAgICAgICBpZEF0dHJpYnV0ZVZhbHVlOiB0aGlzLmF0dHJpYnV0ZVNlcnZpY2UuZ2V0VW5pcXVlSWQoKSxcclxuICAgICAgICBpZEF0dHJpYnV0ZTogdGhpcy5hdHRyaWJ1dGUuaWRBdHRyaWJ1dGUsXHJcbiAgICAgICAgaWRHcm91cEF0dHJpYnV0ZTogdGhpcy5hdHRyaWJ1dGUuaWRHcm91cEF0dHJpYnV0ZSxcclxuICAgICAgICBncm91cEF0dHJpYnV0ZVJvd0lkOiB0aGlzLmdyb3VwQXR0cmlidXRlUm93SWRcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuYXR0cmlidXRlLmNvZGVBdHRyaWJ1dGVEYXRhVHlwZSA9PT0gXCJHQVwiKSB7XHJcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZUdyaWQoKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5hdHRyaWJ1dGUuY29kZUF0dHJpYnV0ZURhdGFUeXBlID09PSBcIkFDXCIpIHtcclxuICAgICAgdGhpcy5pbml0aWFsaXplQXR0cmlidXRlQ2hvaWNlcygpO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmF0dHJpYnV0ZS5jb2RlQXR0cmlidXRlRGF0YVR5cGUgPT09IFwiVFhUXCIgJiYgIXRoaXMuYXR0cmlidXRlVmFsdWVzWzBdLnZhbHVlTG9uZ1RleHQpIHtcclxuICAgICAgdGhpcy5hdHRyaWJ1dGVWYWx1ZXNbMF0udmFsdWVMb25nVGV4dCA9IDxBdHRyaWJ1dGVMb25nVGV4dD57XHJcbiAgICAgICAgaWRMb25nVGV4dDogdW5kZWZpbmVkLFxyXG4gICAgICAgIHRleHREYXRhOiB1bmRlZmluZWRcclxuICAgICAgfTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRoaXMuYXR0cmlidXRlLmNvZGVBdHRyaWJ1dGVEYXRhVHlwZSA9PT0gXCJESUNUXCIpIHtcclxuICAgICAgdGhpcy5sb2FkRGljdGlvbmFyeUVudHJpZXModGhpcy5hdHRyaWJ1dGUsIHRoaXMuYXR0cmlidXRlVmFsdWVzLCB0aGlzLmdyb3VwQXR0cmlidXRlUm93SWQpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodGhpcy5hdHRyaWJ1dGUuY29kZUF0dHJpYnV0ZURhdGFUeXBlID09PSBcIkRUXCIpIHtcclxuICAgICAgLy9NYWtlIGEgcHJvcGVyIGRhdGUgZm9yIHRoZSBkYXRlIHRpbWUgY29tcG9uZW50XHJcbiAgICAgIHRoaXMuYXR0cmlidXRlVmFsdWVzWzBdLmRhdGUgPSBuZXcgRGF0ZSh0aGlzLmF0dHJpYnV0ZVZhbHVlc1swXS52YWx1ZURhdGVUaW1lKTtcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuXHJcbiAgbG9hZERpY3Rpb25hcnlFbnRyaWVzKGF0dHJpYnV0ZTogQXR0cmlidXRlLCB2YWx1ZXM6IEF0dHJpYnV0ZVZhbHVlW10sIGdyb3VwQXR0cmlidXRlUm93SWQ6IG51bWJlcikge1xyXG4gICAgLy9BZGRpbmcgdGhpcyB0byBzdWJzY3JpcHRpb25zIGlzIHByb2JhYmx5IHVubmVjZXNzYXJ5LCBzaW5jZSB0aGUgZmlyc3QoKSB3aWxsIHVuc3Vic2NyaWJlLiBXZSBvbmx5IGdldCBvbmUgdmFsdWUuXHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHRoaXMuYXR0cmlidXRlU2VydmljZS5nZXREaWN0aW9uYXJ5RW50cmllcyhhdHRyaWJ1dGUsIHZhbHVlcywgZ3JvdXBBdHRyaWJ1dGVSb3dJZCkucGlwZShmaXJzdCgpKS5zdWJzY3JpYmUoKGR0bzogRGljdGlvbmFyeUVudHJpZXNEVE8pID0+IHtcclxuICAgICAgdGhpcy5kaWN0aW9uYXJ5RW50cmllcyA9IGR0by5lbnRyaWVzO1xyXG5cclxuICAgICAgaWYgKHRoaXMuYXR0cmlidXRlLmlzTXVsdGlWYWx1ZSA9PT0gJ1knKSB7XHJcbiAgICAgICAgdGhpcy5pbml0aWFsaXplTXVsdGlEaWN0RW50cmllcygpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvL0lmIHRoZXJlIGlzIGEgcmVmZXJlbmNlZCBhdHRyaWJ1dGUgdGhpcyBtZWFucyB0aGlzIGF0dHJpYnV0ZSBpcyBmaWx0ZXJlZCBieSBhbm90aGVyIGF0dHJpYnV0ZS5cclxuICAgICAgaWYgKGR0by5yZWZlcmVuY2VkQXR0cmlidXRlKSB7XHJcbiAgICAgICAgLy9OZWVkIHRvIHN1YnNjcmliZSB0byBhdHRyaWJ1dGUgcHVzaGVzLCBpbiBvcmRlciB0byB1cGRhdGUgb3VyIEZJTFRFUkVEIERJQ1RJT05BUlkgd2hlbiB0aGUgcmVmZXJlbmNlZCBhdHRyaWJ1dGUgd2FzIGNoYW5nZWRcclxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHRoaXMuYXR0cmlidXRlU2VydmljZS5nZXRBdHRyaWJ1dGVWYWx1ZVB1c2hlZFN1YmplY3QoKS5zdWJzY3JpYmUoKGF2OiBBdHRyaWJ1dGVWYWx1ZSkgPT4ge1xyXG4gICAgICAgICAgLy9JZiBpdCBpcyB0aGUgcmVmZXJlbmNlZCBhdHRyaWJ1dGUsIChhbmQgZm9yIHRoZSBzYW1lIHJvdyBpZiB0aGlzIGlzIGEgZ3JpZCByb3cpIHdlIG5lZWQgdG8gdXBkYXRlIHRoZSBkaWN0aW9uYXJ5IGVudHJpZXNcclxuICAgICAgICAgIGlmIChhdi5pZEF0dHJpYnV0ZSA9PT0gZHRvLnJlZmVyZW5jZWRBdHRyaWJ1dGUuaWRBdHRyaWJ1dGVcclxuICAgICAgICAgICAgICAmJiAoKGF2Lmdyb3VwQXR0cmlidXRlUm93SWQgPT0gbnVsbCAmJiB0aGlzLmdyb3VwQXR0cmlidXRlUm93SWQgPT0gbnVsbCkgfHwgYXYuZ3JvdXBBdHRyaWJ1dGVSb3dJZCA9PT0gdGhpcy5ncm91cEF0dHJpYnV0ZVJvd0lkKSkge1xyXG5cclxuICAgICAgICAgICAgLy9NYWtlIGFub3RoZXIgY2FsbCB0byBnZXQgdGhlIGRpY3Rpb25hcnkgZW50cmllc1xyXG4gICAgICAgICAgICAvL05vdGUgdGhhdCB3aGVuIHBhc3NpbmcgaW4gdGhlIHJlZmVyZW5jZUF0dHJpYnV0ZVZhbHVlLCB0aGUgcmVzdWx0aW5nIERUTyB3b24ndCBjb250YWluIGEgcmVmZXJlbmNlZEF0dHJpYnV0ZS4gQSBzZWNvbmQgc3Vic2NyaXB0aW9uIHdvbid0IGJlIGNyZWF0ZWQuXHJcbiAgICAgICAgICAgIHRoaXMucmVsb2FkRmlsdGVyZWREaWN0aW9uYXJ5RW50cmllcyhhdHRyaWJ1dGUsIHZhbHVlcywgZ3JvdXBBdHRyaWJ1dGVSb3dJZCwgYXYpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pKTtcclxuICAgICAgfVxyXG4gICAgfSkpO1xyXG4gIH1cclxuXHJcbiAgcmVsb2FkRmlsdGVyZWREaWN0aW9uYXJ5RW50cmllcyhhdHRyaWJ1dGU6IEF0dHJpYnV0ZSwgdmFsdWVzOiBBdHRyaWJ1dGVWYWx1ZVtdLCBncm91cEF0dHJpYnV0ZVJvd0lkOiBudW1iZXIsIHJlZmVyZW5jZWRBdHRyaWJ1dGVWYWx1ZTogQXR0cmlidXRlVmFsdWUpIHtcclxuICAgIC8vQWRkaW5nIHRoaXMgdG8gc3Vic2NyaXB0aW9ucyBpcyBwcm9iYWJseSB1bm5lY2Vzc2FyeSwgc2luY2UgdGhlIGZpcnN0KCkgd2lsbCB1bnN1YnNjcmliZS4gV2Ugb25seSBnZXQgb25lIHZhbHVlLlxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZCh0aGlzLmF0dHJpYnV0ZVNlcnZpY2UuZ2V0RGljdGlvbmFyeUVudHJpZXMoYXR0cmlidXRlLCB2YWx1ZXMsIGdyb3VwQXR0cmlidXRlUm93SWQsIHJlZmVyZW5jZWRBdHRyaWJ1dGVWYWx1ZSkucGlwZShmaXJzdCgpKS5zdWJzY3JpYmUoKGR0bzogRGljdGlvbmFyeUVudHJpZXNEVE8pID0+IHtcclxuICAgICAgdGhpcy5kaWN0aW9uYXJ5RW50cmllcyA9IGR0by5lbnRyaWVzO1xyXG5cclxuICAgICAgLy9NdWx0aVxyXG4gICAgICBpZiAodGhpcy5hdHRyaWJ1dGUuaXNNdWx0aVZhbHVlID09PSAnWScpIHtcclxuICAgICAgICB0aGlzLmluaXRpYWxpemVNdWx0aURpY3RFbnRyaWVzKCk7XHJcblxyXG4gICAgICAgIC8vUHJvYmFibHkgbmVlZCB0byBzbGljZSBvdXQgbXVsdGkgdmFsdWVzIHRoYXQgZG9uJ3QgYXBwbHlcclxuICAgICAgICB0aGlzLmRlbGV0ZUZpbHRlcmVkT3V0RGljdGlvbmFyeVZhbHVlcygpO1xyXG4gICAgICB9XHJcbiAgICAgIC8vU2luZ2xlXHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIC8vTWF5YmUgbmVlZCB0byBjbGVhciBvdXQgdGhlIHZhbHVlIGlmIGl0IG5vIGxvbmdlciBhcHBsaWVzXHJcbiAgICAgICAgaWYgKCEgZHRvLmVudHJpZXNJbmNsdWRlU2VsZWN0ZWRWYWx1ZSkge1xyXG4gICAgICAgICAgdGhpcy52YWx1ZURpY3RDaGFuZ2UodW5kZWZpbmVkKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pKTtcclxuICB9XHJcblxyXG4gIGRlbGV0ZUZpbHRlcmVkT3V0RGljdGlvbmFyeVZhbHVlcygpIHtcclxuICAgIC8vSXRlcmF0ZSBleGlzdGluZyB2YWx1ZXNcclxuICAgIGZvciAobGV0IGF0dHJpYnV0ZVZhbHVlIG9mIHRoaXMuYXR0cmlidXRlVmFsdWVzKSB7XHJcbiAgICAgIGxldCBhcHBsaWNhYmxlOmJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICAgIC8vRG9lcyBpdCBleGlzdCBpbiBuZXcgZGljYXRpb25yeUVudHJpZXM/XHJcbiAgICAgIGZvciAobGV0IGVudHJ5IG9mIHRoaXMuZGljdGlvbmFyeUVudHJpZXMpIHtcclxuICAgICAgICBpZiAoYXR0cmlidXRlVmFsdWUudmFsdWVJZERpY3Rpb25hcnkgJiYgZW50cnkudmFsdWUgPT09IGF0dHJpYnV0ZVZhbHVlLnZhbHVlSWREaWN0aW9uYXJ5KSB7XHJcbiAgICAgICAgICAvL2tlZXBcclxuICAgICAgICAgIGFwcGxpY2FibGUgPSB0cnVlO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoISBhcHBsaWNhYmxlKSB7XHJcbiAgICAgICAgLy9HZXQgcmlkIG9mIHZhbHVlcyB0aGF0IG5vIGxvbmdlciBhcHBseVxyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlU2VydmljZS5zcGxpY2VBdHRyaWJ1dGVWYWx1ZURpY3QodGhpcy5hdHRyaWJ1dGUsIGF0dHJpYnV0ZVZhbHVlLnZhbHVlSWREaWN0aW9uYXJ5KVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpbml0aWFsaXplTXVsdGlEaWN0RW50cmllcygpIHtcclxuICAgIGZvciAobGV0IGVudHJ5IG9mIHRoaXMuZGljdGlvbmFyeUVudHJpZXMpIHtcclxuICAgICAgZW50cnkuY2hlY2tlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgZm9yIChsZXQgYXR0cmlidXRlVmFsdWUgb2YgdGhpcy5hdHRyaWJ1dGVWYWx1ZXMpIHtcclxuICAgICAgICBpZiAoYXR0cmlidXRlVmFsdWUudmFsdWVJZERpY3Rpb25hcnkgJiYgZW50cnkudmFsdWUgPT09IGF0dHJpYnV0ZVZhbHVlLnZhbHVlSWREaWN0aW9uYXJ5KSB7XHJcbiAgICAgICAgICBlbnRyeS5jaGVja2VkID0gdHJ1ZTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0IGEgdHJhbnNpZW50IHZhbHVlIG9uIHRoZSBhdHRyaWJ1dGVDaG9pY2UgdG8ga2VlcCB0cmFjayBvZiBzZWxlY3RlZCB2YWx1ZXMuXHJcbiAgICovXHJcbiAgaW5pdGlhbGl6ZUF0dHJpYnV0ZUNob2ljZXMoKSB7XHJcbiAgICB0aGlzLmF0dHJpYnV0ZUNob2ljZXMgPSB0aGlzLmF0dHJpYnV0ZS5hdHRyaWJ1dGVDaG9pY2VzLnNsaWNlKCk7XHJcblxyXG4gICAgZm9yIChsZXQgYXR0cmlidXRlQ2hvaWNlIG9mIHRoaXMuYXR0cmlidXRlQ2hvaWNlcykge1xyXG4gICAgICBhdHRyaWJ1dGVDaG9pY2UudmFsdWUgPSBmYWxzZTtcclxuXHJcbiAgICAgIGZvciAobGV0IGF0dHJpYnV0ZVZhbHVlIG9mIHRoaXMuYXR0cmlidXRlVmFsdWVzKSB7XHJcbiAgICAgICAgaWYgKGF0dHJpYnV0ZVZhbHVlLnZhbHVlQXR0cmlidXRlQ2hvaWNlICYmIGF0dHJpYnV0ZUNob2ljZS5pZEF0dHJpYnV0ZUNob2ljZSA9PT0gYXR0cmlidXRlVmFsdWUudmFsdWVBdHRyaWJ1dGVDaG9pY2UuaWRBdHRyaWJ1dGVDaG9pY2UpIHtcclxuICAgICAgICAgIGF0dHJpYnV0ZUNob2ljZS52YWx1ZSA9IHRydWU7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIElmIHRoZSBhdHRyaWJ1dGUgaXMgYSBncmlkLCBmaW5kIGl0cyBjaGlsZHJlbiBhdHRyaWJ1dGVzIHdoaWNoIG1ha2UgdXAgdGhlIGNvbHVtbnMgYW5kIGdlbmVyYXRlIGRhdGEgYmFzZWQgb24gYWxsXHJcbiAgICogdGhlIGF0dHJpYnV0ZSB2YWx1ZXMgYnkgdGhlaXIgZ3JvdXBBdHRyaWJ1dGVSb3dJZC5cclxuICAgKi9cclxuICBpbml0aWFsaXplR3JpZCgpOiB2b2lkIHtcclxuICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICBjb25zb2xlLmRlYnVnKFwiQXR0cmlidXRlQ29tcG9uZW50LmluaXRpYWxpemVHcmlkXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBjb2x1bW5zOiBhbnlbXSA9IFtdO1xyXG4gICAgbGV0IGRhdGE6IGFueVtdID0gW107XHJcblxyXG4gICAgaWYgKCF0aGlzLmF0dHJpYnV0ZS5hdHRyaWJ1dGVzKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNoaWxkQXR0cmlidXRlcyA9IDxHcmFwaGljYWxBdHRyaWJ1dGVbXT50aGlzLmF0dHJpYnV0ZS5hdHRyaWJ1dGVzLmZpbHRlcigoYXR0cmlidXRlOiBHcmFwaGljYWxBdHRyaWJ1dGUpID0+IHtcclxuICAgICAgcmV0dXJuIGF0dHJpYnV0ZVtcInRhYk9yZGVyXCJdICE9PSB1bmRlZmluZWQgfHwgYXR0cmlidXRlW1wid1wiXSAhPT0gdW5kZWZpbmVkO1xyXG4gICAgfSkuc29ydCgoYTogR3JhcGhpY2FsQXR0cmlidXRlLCBiOiBHcmFwaGljYWxBdHRyaWJ1dGUpID0+IHtcclxuICAgICAgaWYgKGEudGFiT3JkZXIgPCBiLnRhYk9yZGVyKSB7XHJcbiAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICB9IGVsc2UgaWYgKGEudGFiT3JkZXIgPiBiLnRhYk9yZGVyKSB7XHJcbiAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICBjb25zb2xlLmRlYnVnKFwiQXR0cmlidXRlQ29tcG9uZW50LmluaXRpYWxpemVHcmlkOiBuIEdyaWQgQXR0cmlidXRlczogXCIgKyB0aGlzLmNoaWxkQXR0cmlidXRlcy5sZW5ndGgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaW5pdGlhbGl6ZUdyaWRDb2x1bW5zKHRoaXMuY2hpbGRBdHRyaWJ1dGVzLCBjb2x1bW5zKTtcclxuXHJcbiAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgY29uc29sZS5kZWJ1ZyhcIkF0dHJpYnV0ZUNvbXBvbmVudC5pbml0aWFsaXplR3JpZDogbiBDb2x1bW5zOiBcIiArIGNvbHVtbnMubGVuZ3RoKTtcclxuICAgICAgY29uc29sZS5kZWJ1Zyhjb2x1bW5zKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgY29uc29sZS5kZWJ1ZyhcIkF0dHJpYnV0ZUNvbXBvbmVudC5pbml0aWFsaXplR3JpZDogbiBhdHRyaWJ1dGVWYWx1ZXM6IFwiICsgdGhpcy5hdHRyaWJ1dGVWYWx1ZXMubGVuZ3RoKTtcclxuICAgICAgY29uc29sZS5kZWJ1Zyh0aGlzLmF0dHJpYnV0ZVZhbHVlcyk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGxldCBzb3J0ZWRSb3dWYWx1ZXMgPSB0aGlzLmF0dHJpYnV0ZVZhbHVlcy5maWx0ZXIoKGF0dHJpYnV0ZVZhbHVlKSA9PiBhdHRyaWJ1dGVWYWx1ZS5pZEdyb3VwQXR0cmlidXRlID0gdGhpcy5hdHRyaWJ1dGUuaWRBdHRyaWJ1dGUpXHJcbiAgICAgIC5zb3J0KChhOiBBdHRyaWJ1dGVWYWx1ZSwgYjogQXR0cmlidXRlVmFsdWUpID0+IHtcclxuICAgICAgaWYgKGEuZ3JvdXBBdHRyaWJ1dGVSb3dJZCA8IGIuZ3JvdXBBdHRyaWJ1dGVSb3dJZCkge1xyXG4gICAgICAgIHJldHVybiAtMTtcclxuICAgICAgfSBlbHNlIGlmIChhLmdyb3VwQXR0cmlidXRlUm93SWQgPiBiLmdyb3VwQXR0cmlidXRlUm93SWQpIHtcclxuICAgICAgICByZXR1cm4gMTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gMDtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgbGV0IG46IG51bWJlciA9IDA7XHJcbiAgICBmb3IgKGxldCBkYXR1bSBvZiBzb3J0ZWRSb3dWYWx1ZXMpIHtcclxuICAgICAgaWYgKGRhdHVtLmdyb3VwQXR0cmlidXRlUm93SWQgPiBuKSB7XHJcbiAgICAgICAgbiA9IGRhdHVtLmdyb3VwQXR0cmlidXRlUm93SWQ7XHJcbiAgICAgICAgZGF0YS5wdXNoKHtcclxuICAgICAgICAgIGdyb3VwQXR0cmlidXRlUm93SWQ6IGRhdHVtLmdyb3VwQXR0cmlidXRlUm93SWRcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICBjb25zb2xlLmRlYnVnKFwiQXR0cmlidXRlQ29tcG9uZW50LmluaXRpYWxpemVHcmlkOiBuIERhdGE6IFwiICsgZGF0YS5sZW5ndGgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaW5pdGlhbGl6ZUdyaWRWYWx1ZXMoZGF0YSwgc29ydGVkUm93VmFsdWVzKTtcclxuXHJcbiAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgY29uc29sZS5kZWJ1ZyhcIkF0dHJpYnV0ZUNvbXBvbmVudC5pbml0aWFsaXplR3JpZDogRGF0YVwiKTtcclxuICAgICAgY29uc29sZS5kZWJ1ZyhkYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmdyaWRDb2x1bW5zID0gY29sdW1ucztcclxuICAgIHRoaXMuZ3JpZERhdGEgPSBkYXRhO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2VuZXJhdGUgYSBjb2x1bW4gYXJyYXkgYmFzZWQgb24gdGhlIGdyb3VwZWQgYXR0cmlidXRlcyB3aXRoaW4gdGhlIGdyaWQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0F0dHJpYnV0ZVtdfSBhdHRyaWJ1dGVzXHJcbiAgICogQHBhcmFtIHthbnlbXX0gY29sdW1uc1xyXG4gICAqL1xyXG4gIGluaXRpYWxpemVHcmlkQ29sdW1ucyhhdHRyaWJ1dGVzOiBHcmFwaGljYWxBdHRyaWJ1dGVbXSwgY29sdW1uczogYW55W10pIHtcclxuXHJcbiAgICAvKlxyXG4gICAgY29sdW1ucy5wdXNoKHtcclxuICAgICAgZmllbGQ6IFwiZ3JvdXBBdHRyaWJ1dGVSb3dJZFwiLCBpc0tleTogdHJ1ZSwgdmlzaWJsZTogZmFsc2VcclxuICAgIH0pOyovXHJcblxyXG4gICAgZm9yIChjb25zdCBbaSwgYXR0cmlidXRlXSBvZiBhdHRyaWJ1dGVzLmVudHJpZXMoKSkge1xyXG4gICAgICBsZXQgY29sdW1uOiBhbnkgPSB7XHJcbiAgICAgICAgZmllbGQ6IGF0dHJpYnV0ZS5hdHRyaWJ1dGVOYW1lLFxyXG4gICAgICAgIGhlYWRlck5hbWU6IGF0dHJpYnV0ZS5kaXNwbGF5TmFtZSxcclxuICAgICAgICBlZGl0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgc29ydGFibGU6IHRydWUsXHJcbiAgICAgICAgcmVzaXphYmxlOiB0cnVlLFxyXG4gICAgICAgIGZpbHRlcjogZmFsc2UsXHJcbiAgICAgICAgd2lkdGg6IGF0dHJpYnV0ZS53LFxyXG4gICAgICB9O1xyXG5cclxuICAgICAgLy8gdGhlIGxhc3QgY29sdW1uIHNob3VsZCBhdXRvIGZpbGwgdGhlIHJlbWFpbmluZyBzcGFjZVxyXG4gICAgICBpZiAoYXR0cmlidXRlLncgJiYgaSA8IGF0dHJpYnV0ZXMubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgIGNvbHVtbi5zdXBwcmVzc1NpemVUb0ZpdCA9IHRydWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChhdHRyaWJ1dGUuY29kZUF0dHJpYnV0ZURhdGFUeXBlID09PSBcIkRcIikge1xyXG4gICAgICAgIGNvbHVtbi5jb21wYXJhdG9yID0gRGF0ZVV0aWwuZGF0ZUNvbXBhcmF0b3I7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAoYXR0cmlidXRlLmNvZGVBdHRyaWJ1dGVEYXRhVHlwZSA9PT0gXCJEVFwiKSB7XHJcbiAgICAgICAgY29sdW1uLmNvbXBhcmF0b3IgPSBEYXRlVXRpbC5kYXRlVGltZUNvbXBhcmF0b3I7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbHVtbnMucHVzaChjb2x1bW4pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWZ0ZXIgdGhlIGNvbHVtbnMgYXJlIGNyZWF0ZWQsIGFzc2lnbmVkXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge2FueVtdfSBkYXRhXHJcbiAgICovXHJcbiAgaW5pdGlhbGl6ZUdyaWRWYWx1ZXMoZGF0YTogYW55W10sIGF0dHJpYnV0ZVZhbHVlczogQXR0cmlidXRlVmFsdWVbXSk6IHZvaWQge1xyXG4gICAgZm9yIChsZXQgZGF0dW0gb2YgYXR0cmlidXRlVmFsdWVzKSB7XHJcbiAgICAgIGxldCBhdHRyaWJ1dGU6IEF0dHJpYnV0ZSA9IHRoaXMuY2hpbGRBdHRyaWJ1dGVzLmZpbHRlcigoYXR0cmlidXRlOiBBdHRyaWJ1dGUpID0+IHtcclxuICAgICAgICByZXR1cm4gYXR0cmlidXRlLmlkQXR0cmlidXRlID09PSBkYXR1bS5pZEF0dHJpYnV0ZTtcclxuICAgICAgfSlbMF07XHJcblxyXG4gICAgICAvL01ha2UgYSByb3dWYWx1ZSBvYmplY3Qgd2l0aCB2YWx1ZXMgZm9yIGVhY2ggYXR0cmlidXRlIG9mIHRoZSByb3dcclxuICAgICAgbGV0IHJvd1ZhbHVlOiBhbnkgPSBkYXRhLmZpbmQoKHJvdykgPT4gcm93Lmdyb3VwQXR0cmlidXRlUm93SWQgPT09IGRhdHVtLmdyb3VwQXR0cmlidXRlUm93SWQpO1xyXG4gICAgICBpZiAoISByb3dWYWx1ZSkge1xyXG4gICAgICAgIHJvd1ZhbHVlID0ge2dyb3VwQXR0cmlidXRlUm93SWQ6IGRhdHVtLmdyb3VwQXR0cmlidXRlUm93SWR9O1xyXG4gICAgICAgIGRhdGEucHVzaChyb3dWYWx1ZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICghYXR0cmlidXRlKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkF0dHJpYnV0ZS5pbml0aWFsaXplR3JpZDogaWRBdHRyaWJ1dGUgXCIgKyBkYXR1bS5pZEF0dHJpYnV0ZSArIFwiIG5vdCBmb3VuZC5cIik7XHJcbiAgICAgICAgY29udGludWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChhdHRyaWJ1dGUuY29kZUF0dHJpYnV0ZURhdGFUeXBlID09PSBcIkRUXCIpIHtcclxuICAgICAgICByb3dWYWx1ZVthdHRyaWJ1dGUuYXR0cmlidXRlTmFtZV0gPSBuZXcgRGF0ZVBpcGUoXCJlbi1VU1wiKS50cmFuc2Zvcm0obmV3IERhdGUoZGF0dW0udmFsdWVEYXRlVGltZSksIFwiTS9kL3l5LCBoOm1tOnNzIGFcIik7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAoYXR0cmlidXRlLmNvZGVBdHRyaWJ1dGVEYXRhVHlwZSA9PT0gXCJBQ1wiICYmIGF0dHJpYnV0ZS5pc011bHRpVmFsdWUgPT09IFwiTlwiKSB7XHJcbiAgICAgICAgaWYgKGRhdHVtLnZhbHVlQXR0cmlidXRlQ2hvaWNlKSB7XHJcbiAgICAgICAgICByb3dWYWx1ZVthdHRyaWJ1dGUuYXR0cmlidXRlTmFtZV0gPSBkYXR1bS52YWx1ZUF0dHJpYnV0ZUNob2ljZS5jaG9pY2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKGF0dHJpYnV0ZS5jb2RlQXR0cmlidXRlRGF0YVR5cGUgPT09IFwiQUNcIiAmJiBhdHRyaWJ1dGUuaXNNdWx0aVZhbHVlID09PSBcIllcIikge1xyXG4gICAgICAgIC8vQ29uY2F0ZW5hdGVkIGRpc3BsYXlcclxuICAgICAgICBpZiAocm93VmFsdWVbYXR0cmlidXRlLmF0dHJpYnV0ZU5hbWVdKSB7XHJcbiAgICAgICAgICByb3dWYWx1ZVthdHRyaWJ1dGUuYXR0cmlidXRlTmFtZV0gPSByb3dWYWx1ZVthdHRyaWJ1dGUuYXR0cmlidXRlTmFtZV0gKyBcIiwgXCIgKyBkYXR1bS52YWx1ZUF0dHJpYnV0ZUNob2ljZS5jaG9pY2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJvd1ZhbHVlW2F0dHJpYnV0ZS5hdHRyaWJ1dGVOYW1lXSA9IGRhdHVtLnZhbHVlQXR0cmlidXRlQ2hvaWNlLmNob2ljZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAoYXR0cmlidXRlLmNvZGVBdHRyaWJ1dGVEYXRhVHlwZSA9PT0gXCJESUNUXCIpIHtcclxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHRoaXMuYXR0cmlidXRlU2VydmljZS5nZXREaWN0aW9uYXJ5RW50cmllcyhhdHRyaWJ1dGUsIGF0dHJpYnV0ZVZhbHVlcywgZGF0dW0uZ3JvdXBBdHRyaWJ1dGVSb3dJZCkucGlwZShmaXJzdCgpKS5zdWJzY3JpYmUoKGR0bzogRGljdGlvbmFyeUVudHJpZXNEVE8pID0+IHtcclxuICAgICAgICAgIGxldCBlbnRyeSA9IGR0by5lbnRyaWVzLmZpbmQoKGVudHJ5OmFueSkgPT4gZW50cnkudmFsdWUgPT09IGRhdHVtLnZhbHVlSWREaWN0aW9uYXJ5KTtcclxuXHJcbiAgICAgICAgICBpZiAoZW50cnkpIHtcclxuICAgICAgICAgICAgcm93VmFsdWVbYXR0cmlidXRlLmF0dHJpYnV0ZU5hbWVdID0gZHRvLmVudHJpZXMuZmluZCgoZW50cnk6YW55KSA9PiBlbnRyeS52YWx1ZSA9PT0gZGF0dW0udmFsdWVJZERpY3Rpb25hcnkpLmRpc3BsYXk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmdyaWRBcGkpIHtcclxuICAgICAgICAgICAgICB0aGlzLmdyaWRBcGkucmVmcmVzaENlbGxzKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAoYXR0cmlidXRlLmNvZGVBdHRyaWJ1dGVEYXRhVHlwZSA9PT0gXCJTXCIgfHwgYXR0cmlidXRlLmNvZGVBdHRyaWJ1dGVEYXRhVHlwZSA9PT0gXCJCXCIgfHwgYXR0cmlidXRlLmNvZGVBdHRyaWJ1dGVEYXRhVHlwZSA9PT0gXCJFQlwiIHx8IGF0dHJpYnV0ZS5jb2RlQXR0cmlidXRlRGF0YVR5cGUgPT09IFwiQ0JcIikge1xyXG4gICAgICAgIHJvd1ZhbHVlW2F0dHJpYnV0ZS5hdHRyaWJ1dGVOYW1lXSA9IGRhdHVtLnZhbHVlU3RyaW5nO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHJvd1ZhbHVlW2F0dHJpYnV0ZS5hdHRyaWJ1dGVOYW1lXSA9IGRhdHVtLnZhbHVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGb3Igb3ZlcnJpZGUuXHJcbiAgICovXHJcbiAgcmVmcmVzaCgpOiB2b2lkIHtcclxuICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICBjb25zb2xlLmRlYnVnKFwiQXR0cmlidXRlLnJlZnJlc2g6IFwiICsgdGhpcy5hdHRyaWJ1dGUuaWRBdHRyaWJ1dGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG5cclxuICB2YWx1ZVN0cmluZ0NoYW5nZSh2YWx1ZTogYW55KTogdm9pZCB7XHJcbiAgICBpZiAodmFsdWUgPT09IFwiXCIpIHtcclxuICAgICAgdmFsdWUgPSB1bmRlZmluZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5hdHRyaWJ1dGVWYWx1ZXNbMF0udmFsdWVTdHJpbmcgPSB2YWx1ZTtcclxuICAgIHRoaXMuYXR0cmlidXRlVmFsdWVzWzBdLnZhbHVlID0gdmFsdWU7XHJcblxyXG4gICAgdGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLnB1c2hBdHRyaWJ1dGVWYWx1ZSh0aGlzLmF0dHJpYnV0ZVZhbHVlc1swXSk7XHJcbiAgfVxyXG5cclxuICB2YWx1ZUNoZWNrYm94Q2hhbmdlKGV2ZW50OiBhbnkpIHtcclxuICAgIGlmIChldmVudC50YXJnZXQuY2hlY2tlZCkge1xyXG4gICAgICB0aGlzLmF0dHJpYnV0ZVZhbHVlc1swXS52YWx1ZVN0cmluZyA9IFwiWVwiO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuYXR0cmlidXRlVmFsdWVzWzBdLnZhbHVlU3RyaW5nID0gXCJOXCI7XHJcbiAgICB9XHJcbiAgICB0aGlzLmF0dHJpYnV0ZVZhbHVlc1swXS52YWx1ZSA9IHRoaXMuYXR0cmlidXRlVmFsdWVzWzBdLnZhbHVlU3RyaW5nO1xyXG5cclxuICAgIHRoaXMuYXR0cmlidXRlU2VydmljZS5wdXNoQXR0cmlidXRlVmFsdWUodGhpcy5hdHRyaWJ1dGVWYWx1ZXNbMF0pO1xyXG4gIH1cclxuXHJcbiAgdmFsdWVJbnRlZ2VyQ2hhbmdlKHZhbHVlOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMuYXR0cmlidXRlVmFsdWVzWzBdLnZhbHVlSW50ZWdlciA9IHZhbHVlO1xyXG4gICAgdGhpcy5hdHRyaWJ1dGVWYWx1ZXNbMF0udmFsdWUgPSAodmFsdWUpP3ZhbHVlLnRvU3RyaW5nKCk6dW5kZWZpbmVkO1xyXG5cclxuICAgIHRoaXMuYXR0cmlidXRlU2VydmljZS5wdXNoQXR0cmlidXRlVmFsdWUodGhpcy5hdHRyaWJ1dGVWYWx1ZXNbMF0pO1xyXG4gIH1cclxuXHJcbiAgdmFsdWVOdW1lcmljQ2hhbmdlKHZhbHVlOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMuYXR0cmlidXRlVmFsdWVzWzBdLnZhbHVlTnVtZXJpYyA9IHZhbHVlO1xyXG4gICAgdGhpcy5hdHRyaWJ1dGVWYWx1ZXNbMF0udmFsdWUgPSAodmFsdWUpP3ZhbHVlLnRvU3RyaW5nKCk6dW5kZWZpbmVkO1xyXG5cclxuICAgIHRoaXMuYXR0cmlidXRlU2VydmljZS5wdXNoQXR0cmlidXRlVmFsdWUodGhpcy5hdHRyaWJ1dGVWYWx1ZXNbMF0pO1xyXG4gIH1cclxuXHJcbiAgdmFsdWVEaWN0Q2hhbmdlKHZhbHVlOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMuYXR0cmlidXRlVmFsdWVzWzBdLnZhbHVlSWREaWN0aW9uYXJ5ID0gdmFsdWU7XHJcbiAgICB0aGlzLmF0dHJpYnV0ZVZhbHVlc1swXS52YWx1ZSA9ICh2YWx1ZSk/dmFsdWUudG9TdHJpbmcoKTp1bmRlZmluZWQ7XHJcblxyXG4gICAgdGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLnB1c2hBdHRyaWJ1dGVWYWx1ZSh0aGlzLmF0dHJpYnV0ZVZhbHVlc1swXSk7XHJcbiAgfVxyXG5cclxuICB2YWx1ZURhdGVDaGFuZ2UodmFsdWU6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5hdHRyaWJ1dGVWYWx1ZXNbMF0udmFsdWVEYXRlVGltZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5hdHRyaWJ1dGVWYWx1ZXNbMF0udmFsdWUgPSAodmFsdWUpP3ZhbHVlLnRvU3RyaW5nKCk6dW5kZWZpbmVkO1xyXG5cclxuICAgIHRoaXMuYXR0cmlidXRlU2VydmljZS5wdXNoQXR0cmlidXRlVmFsdWUodGhpcy5hdHRyaWJ1dGVWYWx1ZXNbMF0pO1xyXG4gIH1cclxuXHJcbiAgdmFsdWVUZXh0Q2hhbmdlKHZhbHVlOiBhbnkpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmF0dHJpYnV0ZVZhbHVlc1swXS52YWx1ZUxvbmdUZXh0KSB7XHJcbiAgICAgIHRoaXMuYXR0cmlidXRlVmFsdWVzWzBdLnZhbHVlTG9uZ1RleHQudGV4dERhdGEgPSB2YWx1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuYXR0cmlidXRlVmFsdWVzWzBdLnZhbHVlTG9uZ1RleHQgPSA8QXR0cmlidXRlTG9uZ1RleHQ+e1xyXG4gICAgICAgIGlkTG9uZ1RleHQ6IHVuZGVmaW5lZCxcclxuICAgICAgICB0ZXh0RGF0YTogdmFsdWVcclxuICAgICAgfTtcclxuICAgIH1cclxuICAgIHRoaXMuYXR0cmlidXRlVmFsdWVzWzBdLnZhbHVlID0gKHZhbHVlKT92YWx1ZS50b1N0cmluZygpOnVuZGVmaW5lZDtcclxuXHJcbiAgICB0aGlzLmF0dHJpYnV0ZVNlcnZpY2UucHVzaEF0dHJpYnV0ZVZhbHVlKHRoaXMuYXR0cmlidXRlVmFsdWVzWzBdKTtcclxuICB9XHJcblxyXG4gIHZhbHVlQ2hvaWNlQ2hhbmdlKHZhbHVlOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMuYXR0cmlidXRlVmFsdWVzWzBdLnZhbHVlQXR0cmlidXRlQ2hvaWNlID0gdGhpcy5hdHRyaWJ1dGVDaG9pY2VzLmZpbmQoKGF0dHIpID0+IGF0dHIuaWRBdHRyaWJ1dGVDaG9pY2UgPT09IHZhbHVlKTtcclxuICAgIHRoaXMuYXR0cmlidXRlVmFsdWVzWzBdLnZhbHVlID0gKHZhbHVlKT92YWx1ZS50b1N0cmluZygpOnVuZGVmaW5lZDtcclxuXHJcbiAgICB0aGlzLmF0dHJpYnV0ZVNlcnZpY2UucHVzaEF0dHJpYnV0ZVZhbHVlKHRoaXMuYXR0cmlidXRlVmFsdWVzWzBdKTtcclxuICB9XHJcblxyXG4gIHZhbHVlTXVsdGlDaG9pY2VDaGFuZ2UoYXR0cmlidXRlQ2hvaWNlOiBhbnkpOiB2b2lkIHtcclxuICAgIGF0dHJpYnV0ZUNob2ljZS52YWx1ZSA9ICFhdHRyaWJ1dGVDaG9pY2UudmFsdWU7XHJcblxyXG4gICAgLy9SZW1vdmVcclxuICAgIGlmICghYXR0cmlidXRlQ2hvaWNlLnZhbHVlKSB7XHJcbiAgICAgIHRoaXMuYXR0cmlidXRlU2VydmljZS5zcGxpY2VBdHRyaWJ1dGVWYWx1ZUNob2ljZSh0aGlzLmF0dHJpYnV0ZSwgYXR0cmlidXRlQ2hvaWNlKTtcclxuICAgIH1cclxuICAgIC8vQWRkXHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5hdHRyaWJ1dGVWYWx1ZXMucHVzaCg8QXR0cmlidXRlVmFsdWU+e1xyXG4gICAgICAgIGNvZGVBdHRyaWJ1dGVEYXRhVHlwZTogXCJBQ1wiLFxyXG4gICAgICAgIGlkQXR0cmlidXRlVmFsdWU6IHRoaXMuYXR0cmlidXRlU2VydmljZS5nZXRVbmlxdWVJZCgpLFxyXG4gICAgICAgIGlkQXR0cmlidXRlVmFsdWVTZXQ6IHRoaXMuYXR0cmlidXRlU2VydmljZS5nZXRBdHRyaWJ1dGVWYWx1ZVNldCgpLmdldFZhbHVlKCkuaWRBdHRyaWJ1dGVWYWx1ZVNldCxcclxuICAgICAgICBpZEF0dHJpYnV0ZTogdGhpcy5hdHRyaWJ1dGUuaWRBdHRyaWJ1dGUsXHJcbiAgICAgICAgdmFsdWVBdHRyaWJ1dGVDaG9pY2U6IGF0dHJpYnV0ZUNob2ljZSxcclxuICAgICAgICBncm91cEF0dHJpYnV0ZVJvd0lkOiB0aGlzLmdyb3VwQXR0cmlidXRlUm93SWQsXHJcbiAgICAgICAgaWRHcm91cEF0dHJpYnV0ZTogdGhpcy5hdHRyaWJ1dGUuaWRHcm91cEF0dHJpYnV0ZVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMuYXR0cmlidXRlU2VydmljZS5wdXNoQXR0cmlidXRlVmFsdWVNdWx0aUNob2ljZSh0aGlzLmF0dHJpYnV0ZVZhbHVlc1t0aGlzLmF0dHJpYnV0ZVZhbHVlcy5sZW5ndGggLSAxXSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB2YWx1ZU11bHRpRGljdENoYW5nZShlbnRyeTogYW55KTogdm9pZCB7XHJcbiAgICBlbnRyeS5jaGVja2VkID0gIWVudHJ5LmNoZWNrZWQ7XHJcblxyXG4gICAgLy9SZW1vdmVcclxuICAgIGlmICghZW50cnkuY2hlY2tlZCkge1xyXG4gICAgICB0aGlzLmF0dHJpYnV0ZVNlcnZpY2Uuc3BsaWNlQXR0cmlidXRlVmFsdWVEaWN0KHRoaXMuYXR0cmlidXRlLCBlbnRyeS52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICAvL0FkZFxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuYXR0cmlidXRlVmFsdWVzLnB1c2goPEF0dHJpYnV0ZVZhbHVlPntcclxuICAgICAgICBjb2RlQXR0cmlidXRlRGF0YVR5cGU6IFwiRElDVFwiLFxyXG4gICAgICAgIGlkQXR0cmlidXRlVmFsdWU6IHRoaXMuYXR0cmlidXRlU2VydmljZS5nZXRVbmlxdWVJZCgpLFxyXG4gICAgICAgIGlkQXR0cmlidXRlVmFsdWVTZXQ6IHRoaXMuYXR0cmlidXRlU2VydmljZS5nZXRBdHRyaWJ1dGVWYWx1ZVNldCgpLmdldFZhbHVlKCkuaWRBdHRyaWJ1dGVWYWx1ZVNldCxcclxuICAgICAgICBpZEF0dHJpYnV0ZTogdGhpcy5hdHRyaWJ1dGUuaWRBdHRyaWJ1dGUsXHJcbiAgICAgICAgdmFsdWVJZERpY3Rpb25hcnk6IGVudHJ5LnZhbHVlLFxyXG4gICAgICAgIGdyb3VwQXR0cmlidXRlUm93SWQ6IHRoaXMuZ3JvdXBBdHRyaWJ1dGVSb3dJZCxcclxuICAgICAgICBpZEdyb3VwQXR0cmlidXRlOiB0aGlzLmF0dHJpYnV0ZS5pZEdyb3VwQXR0cmlidXRlXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgdGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLnB1c2hBdHRyaWJ1dGVWYWx1ZU11bHRpRGljdCh0aGlzLmF0dHJpYnV0ZVZhbHVlc1t0aGlzLmF0dHJpYnV0ZVZhbHVlcy5sZW5ndGggLSAxXSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgYWRkR3JpZFJvdyhtb2RhbDogVGVtcGxhdGVSZWY8YW55PiwgaWRHcm91cEF0dHJpYnV0ZTogbnVtYmVyKSB7XHJcbiAgICBjb25zb2xlLmxvZyhcImFkZCBncmlkIHJvdzogXCIgKyBpZEdyb3VwQXR0cmlidXRlKTtcclxuXHJcbiAgICAvL0dldCBhIG5lZ2F0aXZlIElELCBzbyB3ZSBrbm93IHRoaXMgaXMgYSBuZXcgcm93XHJcbiAgICB0aGlzLmVkaXRHcm91cEF0dHJpYnV0ZVJvd0lkID0gdGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLmdldFVuaXF1ZUlkKCk7XHJcbiAgICB0aGlzLmVkaXRHcm91cFJvd0F0dHJpYnV0ZXMgPSB0aGlzLmNoaWxkQXR0cmlidXRlcztcclxuXHJcblxyXG4gICAgdGhpcy5tb2RhbFNlcnZpY2Uub3Blbihtb2RhbCwge3dpbmRvd0NsYXNzOiBcIm1vZGFsLWxnXCJ9KS5yZXN1bHQudGhlbigocmVzdWx0KSA9PiB7XHJcbiAgICAgIGlmIChyZXN1bHQgPT09IFwiU2F2ZVwiKSB7XHJcbiAgICAgICAgdGhpcy5zYXZlR3JpZFJvdyhpZEdyb3VwQXR0cmlidXRlKTtcclxuICAgICAgfSBlbHNlIGlmIChyZXN1bHQgPT09IFwiQ2FuY2VsXCIpIHtcclxuICAgICAgICB0aGlzLmNhbmNlbEVkaXRDb2RHcmlkUm93KCk7XHJcbiAgICAgIH1cclxuICAgIH0sIChyZWFzb24pID0+IHt9KTtcclxuICB9XHJcblxyXG4gIGVkaXRHcmlkUm93KG1vZGFsOiBUZW1wbGF0ZVJlZjxhbnk+LCBpZEdyb3VwQXR0cmlidXRlOiBudW1iZXIsIGV2ZW50OiBSb3dEb3VibGVDbGlja2VkRXZlbnQpIHtcclxuICAgIC8vRWRpdElubGluZSBpcyBhY3R1YWxseSB0aGUgT05MWSB3YXkgdGhpcyBjYW4gYmUgZWRpdGFibGUsIHNvIHRoaXMgaXMgcmVhbGx5IHdoZXRoZXIgdGhlIGdyaWQgaXMgZWRpdGFibGUsIGF0IGFsbFxyXG4gICAgaWYgKHRoaXMuZWRpdElubGluZSkge1xyXG4gICAgICB0aGlzLmVkaXRHcm91cEF0dHJpYnV0ZVJvd0lkID0gZXZlbnQuZGF0YS5ncm91cEF0dHJpYnV0ZVJvd0lkO1xyXG4gICAgICB0aGlzLmVkaXRHcm91cFJvd0F0dHJpYnV0ZXMgPSB0aGlzLmNoaWxkQXR0cmlidXRlcztcclxuXHJcblxyXG4gICAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuKG1vZGFsLCB7d2luZG93Q2xhc3M6IFwibW9kYWwtbGdcIn0pLnJlc3VsdC50aGVuKChyZXN1bHQpID0+IHtcclxuICAgICAgICBpZiAocmVzdWx0ID09PSBcIlNhdmVcIikge1xyXG4gICAgICAgICAgdGhpcy5zYXZlR3JpZFJvdyhpZEdyb3VwQXR0cmlidXRlKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdCA9PT0gXCJDYW5jZWxcIikge1xyXG4gICAgICAgICAgdGhpcy5jYW5jZWxFZGl0Q29kR3JpZFJvdygpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSwgKHJlYXNvbikgPT4ge30pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVtb3ZlR3JpZFJvdyhpZEdyb3VwQXR0cmlidXRlOiBudW1iZXIpIHtcclxuICAgIGNvbnNvbGUubG9nKFwicmVtb3ZlIGdyaWQgcm93OiBcIiArIGlkR3JvdXBBdHRyaWJ1dGUpO1xyXG4gICAgbGV0IHNlbGVjdGVkQ29sdW1uczogUm93Tm9kZVtdID0gdGhpcy5ncmlkQXBpLmdldFNlbGVjdGVkTm9kZXMoKTtcclxuXHJcbiAgICBpZiAoc2VsZWN0ZWRDb2x1bW5zLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLmRlbGV0ZUdyaWRSb3dBdHRyaWJ1dGVWYWx1ZXMoaWRHcm91cEF0dHJpYnV0ZSwgc2VsZWN0ZWRDb2x1bW5zWzBdLmRhdGEuZ3JvdXBBdHRyaWJ1dGVSb3dJZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjYW5jZWxFZGl0Q29kR3JpZFJvdygpIHtcclxuICAgIHRoaXMuYXR0cmlidXRlU2VydmljZS5jbGVhclVwZGF0ZWRHcmlkUm93QXR0cmlidXRlVmFsdWVzKHRoaXMuZWRpdEdyb3VwQXR0cmlidXRlUm93SWQpO1xyXG4gICAgdGhpcy5lZGl0R3JvdXBSb3dBdHRyaWJ1dGVzID0gW107XHJcbiAgICB0aGlzLmVkaXRHcm91cEF0dHJpYnV0ZVJvd0lkID0gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIFZhbHVlcyBmb3IgYSBuZXcgZ3JpZCByb3cgYXJlIHN0b3JlZCBzZXBhcmF0ZWx5LiAgVGhpcyBmdW5jdGlvbiB3aWxsIGFkZCB0aGF0IGRhdGEgdG8gdGhlIGN1cnJlbnQgZ3JpZCBkYXRhIGFuZFxyXG4gICAqIHB1c2ggdGhlIHZhbHVlcyB0byB0aGUgc2VydmljZS5cclxuICAgKi9cclxuICBzYXZlR3JpZFJvdyhpZEdyb3VwQXR0cmlidXRlOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGNvbnNvbGUubG9nKFwic2F2ZSBncmlkIHJvd1wiKTtcclxuXHJcbiAgICB0aGlzLmF0dHJpYnV0ZVNlcnZpY2Uuc2F2ZUdyaWRSb3dBdHRyaWJ1dGVWYWx1ZXMoaWRHcm91cEF0dHJpYnV0ZSwgdGhpcy5lZGl0R3JvdXBBdHRyaWJ1dGVSb3dJZCk7XHJcblxyXG4gICAgdGhpcy5lZGl0R3JvdXBBdHRyaWJ1dGVSb3dJZCA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMuZWRpdEdyb3VwUm93QXR0cmlidXRlcyA9IFtdO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjb21ib0ZpbHRlclZhbHVlR2V0dGVyKHBhcmFtcyk6IGFueSB7XHJcbiAgICBsZXQgdmFsdWUgPSBwYXJhbXMuZGF0YVtwYXJhbXMuY29sRGVmLmZpZWxkXTtcclxuICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICBsZXQgb3B0aW9uID0gKChwYXJhbXMuY29sRGVmIGFzIGFueSkuc2VsZWN0T3B0aW9ucyBhcyBhbnlbXSkuZmluZCgoZW50cnkpID0+IChlbnRyeVtwYXJhbXMuY29sRGVmLnNlbGVjdE9wdGlvbnNWYWx1ZUZpZWxkXSA9PT0gdmFsdWUpKTtcclxuICAgICAgcmV0dXJuIG9wdGlvbiA/IG9wdGlvbltwYXJhbXMuY29sRGVmLnNlbGVjdE9wdGlvbnNEaXNwbGF5RmllbGRdIDogXCJcIjtcclxuICAgIH1cclxuICAgIHJldHVybiBcIlwiO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
564
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0cmlidXRlLWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb2Qvc3JjL2NvbXBvbmVudHMvYXR0cmlidXRlLWJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFVBQVUsRUFBZSxZQUFZLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBMkMsU0FBUyxFQUMxSSxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0saUJBQWlCLENBQUE7QUFFeEMsT0FBTyxFQUFtQixZQUFZLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDcEQsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRXJDLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBTy9ELE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUMzQyxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUN2RSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sNEJBQTRCLENBQUM7Ozs7QUFHcEQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7QUFLSCxNQUFNLE9BQU8sYUFBYTtJQStDeEIsWUFBWSxnQkFBa0MsRUFBRSxVQUFzQixFQUFFLFFBQW1CLEVBQVUsWUFBc0I7UUFBdEIsaUJBQVksR0FBWixZQUFZLENBQVU7UUE1Q2xILG1CQUFjLEdBQVksS0FBSyxDQUFDO1FBQ2hDLGVBQVUsR0FBWSxJQUFJLENBQUM7UUFDM0Isd0JBQW1CLEdBQVcsU0FBUyxDQUFDO1FBRXZDLGtCQUFhLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7UUFLckUsb0JBQWUsR0FBcUIsRUFBRSxDQUFDO1FBYXZDLFVBQUssR0FBVyxDQUFDLENBQUM7UUFRbEIsZ0JBQVcsR0FBRztZQUNWLFlB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QUM7UUFFcEUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBRUQsa0JBQWtCLENBQUMsS0FBVTtRQUMzQixJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDN0MsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQSxDQUFDLENBQUEsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFBLENBQUMsQ0FBQSxTQUFTLENBQUM7UUFFbkUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBRUQsa0JBQWtCLENBQUMsS0FBVTtRQUMzQixJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDN0MsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQSxDQUFDLENBQUEsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFBLENBQUMsQ0FBQSxTQUFTLENBQUM7UUFFbkUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBRUQsZUFBZSxDQUFDLEtBQVU7UUFDeEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFDbEQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQSxDQUFDLENBQUEsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFBLENBQUMsQ0FBQSxTQUFTLENB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Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBFbGVtZW50UmVmLCBUZW1wbGF0ZVJlZiwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgaXNEZXZNb2RlLCBPdXRwdXQsIFJlbmRlcmVyMiwgVmlld0NoaWxkLCBWaWV3Q2hpbGRyZW4sIE9uSW5pdCwgT25EZXN0cm95LCBJbmplY3QsIERpcmVjdGl2ZSwgUXVlcnlMaXN0XHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuXHJcbmltcG9ydCB7RGF0ZVBpcGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbidcclxuXHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgU3Vic2NyaXB0aW9ufSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQge2ZpcnN0fSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcclxuXHJcbmltcG9ydCB7QXR0cmlidXRlU2VydmljZX0gZnJvbSBcIi4uL3NlcnZpY2VzL2F0dHJpYnV0ZS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7QXR0cmlidXRlfSBmcm9tIFwiLi4vbW9kZWwvYXR0cmlidXRlLmVudGl0eVwiO1xyXG5pbXBvcnQge0F0dHJpYnV0ZVZhbHVlfSBmcm9tIFwiLi4vbW9kZWwvYXR0cmlidXRlLXZhbHVlLmVudGl0eVwiO1xyXG5pbXBvcnQge0F0dHJpYnV0ZUNob2ljZX0gZnJvbSBcIi4uL21vZGVsL2F0dHJpYnV0ZS1jaG9pY2UuZW50aXR5XCI7XHJcbmltcG9ydCB7QXR0cmlidXRlTG9uZ1RleHR9IGZyb20gXCIuLi9tb2RlbC9hdHRyaWJ1dGUtbG9uZy10ZXh0LmVudGl0eVwiO1xyXG5pbXBvcnQge0dyYXBoaWNhbEF0dHJpYnV0ZX0gZnJvbSBcIi4uL21vZGVsL2dyYXBoaWNhbC1hdHRyaWJ1dGUuZW50aXR5XCI7XHJcbmltcG9ydCB7RGljdGlvbmFyeUVudHJpZXNEVE99IGZyb20gXCIuLi9tb2RlbC9kaWN0aW9uYXJ5LWVudHJpZXMuZHRvXCI7XHJcbmltcG9ydCB7RGF0ZVV0aWx9IGZyb20gXCIuLi9kYXRlL2RhdGUtdXRpbFwiO1xyXG5pbXBvcnQge05hdGl2ZVNlbGVjdENvbXBvbmVudH0gZnJvbSBcIkBodW50c21hbi1jYW5jZXItaW5zdGl0dXRlL2lucHV0XCI7XHJcbmltcG9ydCB7TmdiTW9kYWx9IGZyb20gXCJAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcFwiO1xyXG5pbXBvcnQge0dyaWRBcGksIFJvd0RvdWJsZUNsaWNrZWRFdmVudCwgUm93Tm9kZSwgUm93U2VsZWN0ZWRFdmVudCwgQWdHcmlkRXZlbnQsIEdyaWRTaXplQ2hhbmdlZEV2ZW50LCBNb2RlbFVwZGF0ZWRFdmVudH0gZnJvbSBcImFnLWdyaWQtY29tbXVuaXR5XCI7XHJcblxyXG4vKipcclxuICogVGhlIGJhc2UgY2xhc3MgZm9yIGFuIGF0dHJpYnV0ZS4gIEF0dHJpYnV0ZXMgYXJlIGl0ZXJhdGVkIG92ZXIgYnkgY29udGFpbmVyLiAgVGhlc2UgbWF5IGJlIGluIHRyYWRpdGlvbmFsIGFic29sdXRlXHJcbiAqIHBvc2l0aW9uaW5nLCBmbGV4IHBvc2l0aW9uaW5nLCBvciBhbiBlZGl0IG1vZGUgYXMgYSBjb2x1bW4gaW4gYSBtb2RhbC4gIFJlZ2FyZGxlc3Mgb2YgdGhlIHRlbXBsYXRlLCB0aGUgZnVuZGFtZW50YWxcclxuICogbmVlZHMgb2Ygc2V0dGluZyB1cCB0aGUgYXR0cmlidXRlIHZhbHVlcyBhbmQgcGVyc2lzdGluZyBkYXRhIGFyZSB0aGUgc2FtZS4gIFNvIHRoaXMgY2xhc3MgcHJvdmlkZXMgYmFzZSBmdW5jdGlvbmFsaXR5XHJcbiAqIGFuZCB0aGUgY29tcG9uZW50cyB0aGF0IGV4dGVuZCBpdCBwcm92aWRlIHRoZSB0ZW1wbGF0ZSBhbmQgbWF5IGFsc28gZXh0ZW5kIHRoZSBmdW5jdGlvbmFsaXR5LlxyXG4gKlxyXG4gKiBUeXBlczpcclxuICogTElORVxyXG4gKiBOTFBfTElOS1xyXG4gKiBESUNUXHJcbiAqIEdBXHJcbiAqIExBQkVMXHJcbiAqIERUXHJcbiAqIEFDXHJcbiAqIFRYVFxyXG4gKiBEXHJcbiAqIFNcclxuICogSVxyXG4gKiBDQlxyXG4gKiBCXHJcbiAqIE5cclxuICogRUJcclxuICovXHJcbkBEaXJlY3RpdmUoe1xyXG4gICAgc2VsZWN0b3I6IFwiaGNpLWF0dHJpYnV0ZS1iYXNlXCJcclxuICB9XHJcbilcclxuZXhwb3J0IGNsYXNzIEF0dHJpYnV0ZUJhc2UgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcblxyXG4gIEBJbnB1dCgpIGF0dHJpYnV0ZTogR3JhcGhpY2FsQXR0cmlidXRlO1xyXG4gIEBJbnB1dCgpIGludGVybmFsVmFsdWVzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgZWRpdElubGluZTogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgZ3JvdXBBdHRyaWJ1dGVSb3dJZDogbnVtYmVyID0gdW5kZWZpbmVkO1xyXG5cclxuICBAT3V0cHV0KCkgcmVzb3J0Q29sdW1uczogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgQFZpZXdDaGlsZChcImlucHV0UmVmXCIsIHtzdGF0aWM6IGZhbHNlfSkgaW5wdXRSZWY6IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZChcIm5hdGl2ZVNlbGVjdFJlZlwiLCB7c3RhdGljOiBmYWxzZX0pIG5hdGl2ZVNlbGVjdFJlZjogTmF0aXZlU2VsZWN0Q29tcG9uZW50O1xyXG5cclxuICBhdHRyaWJ1dGVWYWx1ZXM6IEF0dHJpYnV0ZVZhbHVlW10gPSBbXTtcclxuICBhdHRyaWJ1dGVDaG9pY2VzOiBBdHRyaWJ1dGVDaG9pY2VbXTtcclxuXHJcbiAgY2hpbGRBdHRyaWJ1dGVzOiBHcmFwaGljYWxBdHRyaWJ1dGVbXTtcclxuICBncmlkRGF0YTogYW55W107XHJcbiAgZ3JpZENvbHVtbnM6IGFueVtdO1xyXG5cclxuICAvL1VzZWQgZm9yIHRoZSBlZGl0IGdyb3VwIHJvdyB0ZW1wbGF0ZVxyXG4gIGVkaXRHcm91cEF0dHJpYnV0ZVJvd0lkOiBudW1iZXI7XHJcbiAgZWRpdEdyb3VwUm93QXR0cmlidXRlczogR3JhcGhpY2FsQXR0cmlidXRlW107XHJcblxyXG4gIGRpY3Rpb25hcnlFbnRyaWVzOiBhbnlbXTtcclxuXHJcbiAgd2lkdGg6IG51bWJlciA9IDA7XHJcblxyXG4gIGF0dHJpYnV0ZVNlcnZpY2U6IEF0dHJpYnV0ZVNlcnZpY2U7XHJcbiAgZWxlbWVudFJlZjogRWxlbWVudFJlZjtcclxuICByZW5kZXJlcjogUmVuZGVyZXIyO1xyXG5cclxuICBncmlkQXBpOiBHcmlkQXBpO1xyXG5cclxuICBncmlkT3B0aW9ucyA9IHtcclxuICAgICAgaGVhZGVySGVpZ2h0OiAyMyxcclxuICAgICAgcm93SGVpZ2h0OiAyMyxcclxuICAgICAgcm93U3R5bGU6IHtcclxuICAgICAgICAgICdmb250LWZhbWlseSc6ICdQcm9tcHQsIHNhbnMtc2VyaWYnLFxyXG4gICAgICAgICAgJ2NvbG9yJzogJyMzZDdhOTknXHJcbiAgICAgIH0sXHJcbiAgICAgIGVuYWJsZUNlbGxUZXh0U2VsZWN0aW9uOiB0cnVlLFxyXG4gICAgICBlbnN1cmVEb21PcmRlcjogdHJ1ZSxcclxuICAgICAgc3VwcHJlc3NDb2x1bW5WaXJ0dWFsaXNhdGlvbjogZmFsc2VcclxuICAgIH07XHJcblxyXG4gIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcclxuXHJcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlU2VydmljZTogQXR0cmlidXRlU2VydmljZSwgZWxlbWVudFJlZjogRWxlbWVudFJlZiwgcmVuZGVyZXI6IFJlbmRlcmVyMiwgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE5nYk1vZGFsKSB7XHJcbiAgICB0aGlzLmF0dHJpYnV0ZVNlcnZpY2UgPSBhdHRyaWJ1dGVTZXJ2aWNlO1xyXG4gICAgdGhpcy5lbGVtZW50UmVmID0gZWxlbWVudFJlZjtcclxuICAgIHRoaXMucmVuZGVyZXIgPSByZW5kZXJlcjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCBhbnkgYXR0cmlidXRlIHZhbHVlcyBmb3IgdGhpcyBhdHRyaWJ1dGUuICBJZiBhIGNvbXBsZXggYXR0cmlidXRlIGxpa2UgYSBncmlkLCBzZXQgaXQgdXAuXHJcbiAgICovXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHRoaXMuYXR0cmlidXRlU2VydmljZS5nZXRDb250YWluZXJVcGRhdGVkKCkuc3Vic2NyaWJlKCh1cGRhdGVkOiBib29sZWFuKSA9PiB7XHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcbiAgICB9KSk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgb25HcmlkUmVhZHkocGFyYW1zIDogYW55KSB7XHJcbiAgICB0aGlzLmdyaWRBcGkgPSBwYXJhbXMuYXBpO1xyXG4gICAgdGhpcy5ncmlkQXBpLnNpemVDb2x1bW5zVG9GaXQoKTtcclxuICB9XHJcblxyXG4gIG9uTW9kZWxVcGRhdGVkKF9ldmVudDogTW9kZWxVcGRhdGVkRXZlbnQpIHtcclxuICAgIGlmICh0aGlzLmdyaWRBcGkpIHtcclxuICAgICAgdGhpcy5ncmlkQXBpLnNpemVDb2x1bW5zVG9GaXQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uR3JpZFNpemVDaGFuZ2VkKF9ldmVudDogR3JpZFNpemVDaGFuZ2VkRXZlbnQpIHtcclxuICAgIGlmICh0aGlzLmdyaWRBcGkpIHtcclxuICAgICAgdGhpcy5ncmlkQXBpLnNpemVDb2x1bW5zVG9GaXQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFB1bGxzIHRoZSBhdHRyaWJ1dGUgdmFsdWVzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGF0dHJpYnV0ZSBhbmQgcGVyZm9ybXMgYW55IHNwZWNpYWxpemVkIGluaXRpYWxpemF0aW9uIHN1Y2ggYXMgZm9yXHJcbiAgICogdGhlIGdyaWQgb3IgbXVsdGkgY2hvaWNlLlxyXG4gICAqL1xyXG4gIGluaXQoKTogdm9pZCB7XHJcbiAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgY29uc29sZS5kZWJ1ZyhcIkF0dHJpYnV0ZS5pbml0OiBcIiArIHRoaXMuYXR0cmlidXRlLmlkQXR0cmlidXRlKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmdyaWREYXRhID0gdW5kZWZpbmVkO1xyXG4gICAgdGhpcy5ncmlkQ29sdW1ucyA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMuYXR0cmlidXRlQ2hvaWNlcyA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMud2lkdGggPSB0aGlzLmF0dHJpYnV0ZVNlcnZpY2UuZ2V0V2lkdGgoKTtcclxuXHJcbiAgICBpZiAoIXRoaXMuaW50ZXJuYWxWYWx1ZXMpIHtcclxuICAgICAgdGhpcy5hdHRyaWJ1dGVWYWx1ZXMgPSB0aGlzLmF0dHJpYnV0ZVNlcnZpY2UuZ2V0QXR0cmlidXRlVmFsdWVzKHRoaXMuYXR0cmlidXRlLmlkQXR0cmlidXRlLCB0aGlzLmdyb3VwQXR0cmlidXRlUm93SWQpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmF0dHJpYnV0ZVZhbHVlcy5sZW5ndGggPT09IDAgJiYgdGhpcy5hdHRyaWJ1dGUuY29kZUF0dHJpYnV0ZURhdGFUeXBlICE9PSBcIkdBXCIgJiYgdGhpcy5hdHRyaWJ1dGUuaXNNdWx0aVZhbHVlICE9PSBcIllcIikge1xyXG4gICAgICAvLyBUT0RPOiBEZWNpZGUgd2hlbiB0byBwZXJzaXN0IHRoaXMgdG8gZ2V0IHRoZSBpZEF0dHJpYnV0ZVZhbHVlLlxyXG4gICAgICB0aGlzLmF0dHJpYnV0ZVZhbHVlcy5wdXNoKDxBdHRyaWJ1dGVWYWx1ZT57XHJcbiAgICAgICAgY29kZUF0dHJpYnV0ZURhdGFUeXBlOiB0aGlzLmF0dHJpYnV0ZS5jb2RlQXR0cmlidXRlRGF0YVR5cGUsXHJcbiAgICAgICAgaWRBdHRyaWJ1dGVWYWx1ZTogdGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLmdldFVuaXF1ZUlkKCksXHJcbiAgICAgICAgaWRBdHRyaWJ1dGU6IHRoaXMuYXR0cmlidXRlLmlkQXR0cmlidXRlLFxyXG4gICAgICAgIGlkR3JvdXBBdHRyaWJ1dGU6IHRoaXMuYXR0cmlidXRlLmlkR3JvdXBBdHRyaWJ1dGUsXHJcbiAgICAgICAgZ3JvdXBBdHRyaWJ1dGVSb3dJZDogdGhpcy5ncm91cEF0dHJpYnV0ZVJvd0lkXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmF0dHJpYnV0ZS5jb2RlQXR0cmlidXRlRGF0YVR5cGUgPT09IFwiR0FcIikge1xyXG4gICAgICB0aGlzLmluaXRpYWxpemVHcmlkKCk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuYXR0cmlidXRlLmNvZGVBdHRyaWJ1dGVEYXRhVHlwZSA9PT0gXCJBQ1wiKSB7XHJcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZUF0dHJpYnV0ZUNob2ljZXMoKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5hdHRyaWJ1dGUuY29kZUF0dHJpYnV0ZURhdGFUeXBlID09PSBcIlRYVFwiICYmICF0aGlzLmF0dHJpYnV0ZVZhbHVlc1swXS52YWx1ZUxvbmdUZXh0KSB7XHJcbiAgICAgIHRoaXMuYXR0cmlidXRlVmFsdWVzWzBdLnZhbHVlTG9uZ1RleHQgPSA8QXR0cmlidXRlTG9uZ1RleHQ+e1xyXG4gICAgICAgIGlkTG9uZ1RleHQ6IHVuZGVmaW5lZCxcclxuICAgICAgICB0ZXh0RGF0YTogdW5kZWZpbmVkXHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0aGlzLmF0dHJpYnV0ZS5jb2RlQXR0cmlidXRlRGF0YVR5cGUgPT09IFwiRElDVFwiKSB7XHJcbiAgICAgIHRoaXMubG9hZERpY3Rpb25hcnlFbnRyaWVzKHRoaXMuYXR0cmlidXRlLCB0aGlzLmF0dHJpYnV0ZVZhbHVlcywgdGhpcy5ncm91cEF0dHJpYnV0ZVJvd0lkKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRoaXMuYXR0cmlidXRlLmNvZGVBdHRyaWJ1dGVEYXRhVHlwZSA9PT0gXCJEVFwiKSB7XHJcbiAgICAgIC8vTWFrZSBhIHByb3BlciBkYXRlIGZvciB0aGUgZGF0ZSB0aW1lIGNvbXBvbmVudFxyXG4gICAgICB0aGlzLmF0dHJpYnV0ZVZhbHVlc1swXS5kYXRlID0gbmV3IERhdGUodGhpcy5hdHRyaWJ1dGVWYWx1ZXNbMF0udmFsdWVEYXRlVGltZSk7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcblxyXG4gIGxvYWREaWN0aW9uYXJ5RW50cmllcyhhdHRyaWJ1dGU6IEF0dHJpYnV0ZSwgdmFsdWVzOiBBdHRyaWJ1dGVWYWx1ZVtdLCBncm91cEF0dHJpYnV0ZVJvd0lkOiBudW1iZXIpIHtcclxuICAgIC8vQWRkaW5nIHRoaXMgdG8gc3Vic2NyaXB0aW9ucyBpcyBwcm9iYWJseSB1bm5lY2Vzc2FyeSwgc2luY2UgdGhlIGZpcnN0KCkgd2lsbCB1bnN1YnNjcmliZS4gV2Ugb25seSBnZXQgb25lIHZhbHVlLlxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZCh0aGlzLmF0dHJpYnV0ZVNlcnZpY2UuZ2V0RGljdGlvbmFyeUVudHJpZXMoYXR0cmlidXRlLCB2YWx1ZXMsIGdyb3VwQXR0cmlidXRlUm93SWQpLnBpcGUoZmlyc3QoKSkuc3Vic2NyaWJlKChkdG86IERpY3Rpb25hcnlFbnRyaWVzRFRPKSA9PiB7XHJcbiAgICAgIHRoaXMuZGljdGlvbmFyeUVudHJpZXMgPSBkdG8uZW50cmllcztcclxuXHJcbiAgICAgIGlmICh0aGlzLmF0dHJpYnV0ZS5pc011bHRpVmFsdWUgPT09ICdZJykge1xyXG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZU11bHRpRGljdEVudHJpZXMoKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy9JZiB0aGVyZSBpcyBhIHJlZmVyZW5jZWQgYXR0cmlidXRlIHRoaXMgbWVhbnMgdGhpcyBhdHRyaWJ1dGUgaXMgZmlsdGVyZWQgYnkgYW5vdGhlciBhdHRyaWJ1dGUuXHJcbiAgICAgIGlmIChkdG8ucmVmZXJlbmNlZEF0dHJpYnV0ZSkge1xyXG4gICAgICAgIC8vTmVlZCB0byBzdWJzY3JpYmUgdG8gYXR0cmlidXRlIHB1c2hlcywgaW4gb3JkZXIgdG8gdXBkYXRlIG91ciBGSUxURVJFRCBESUNUSU9OQVJZIHdoZW4gdGhlIHJlZmVyZW5jZWQgYXR0cmlidXRlIHdhcyBjaGFuZ2VkXHJcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZCh0aGlzLmF0dHJpYnV0ZVNlcnZpY2UuZ2V0QXR0cmlidXRlVmFsdWVQdXNoZWRTdWJqZWN0KCkuc3Vic2NyaWJlKChhdjogQXR0cmlidXRlVmFsdWUpID0+IHtcclxuICAgICAgICAgIC8vSWYgaXQgaXMgdGhlIHJlZmVyZW5jZWQgYXR0cmlidXRlLCAoYW5kIGZvciB0aGUgc2FtZSByb3cgaWYgdGhpcyBpcyBhIGdyaWQgcm93KSB3ZSBuZWVkIHRvIHVwZGF0ZSB0aGUgZGljdGlvbmFyeSBlbnRyaWVzXHJcbiAgICAgICAgICBpZiAoYXYuaWRBdHRyaWJ1dGUgPT09IGR0by5yZWZlcmVuY2VkQXR0cmlidXRlLmlkQXR0cmlidXRlXHJcbiAgICAgICAgICAgICAgJiYgKChhdi5ncm91cEF0dHJpYnV0ZVJvd0lkID09IG51bGwgJiYgdGhpcy5ncm91cEF0dHJpYnV0ZVJvd0lkID09IG51bGwpIHx8IGF2Lmdyb3VwQXR0cmlidXRlUm93SWQgPT09IHRoaXMuZ3JvdXBBdHRyaWJ1dGVSb3dJZCkpIHtcclxuXHJcbiAgICAgICAgICAgIC8vTWFrZSBhbm90aGVyIGNhbGwgdG8gZ2V0IHRoZSBkaWN0aW9uYXJ5IGVudHJpZXNcclxuICAgICAgICAgICAgLy9Ob3RlIHRoYXQgd2hlbiBwYXNzaW5nIGluIHRoZSByZWZlcmVuY2VBdHRyaWJ1dGVWYWx1ZSwgdGhlIHJlc3VsdGluZyBEVE8gd29uJ3QgY29udGFpbiBhIHJlZmVyZW5jZWRBdHRyaWJ1dGUuIEEgc2Vjb25kIHN1YnNjcmlwdGlvbiB3b24ndCBiZSBjcmVhdGVkLlxyXG4gICAgICAgICAgICB0aGlzLnJlbG9hZEZpbHRlcmVkRGljdGlvbmFyeUVudHJpZXMoYXR0cmlidXRlLCB2YWx1ZXMsIGdyb3VwQXR0cmlidXRlUm93SWQsIGF2KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KSk7XHJcbiAgICAgIH1cclxuICAgIH0pKTtcclxuICB9XHJcblxyXG4gIHJlbG9hZEZpbHRlcmVkRGljdGlvbmFyeUVudHJpZXMoYXR0cmlidXRlOiBBdHRyaWJ1dGUsIHZhbHVlczogQXR0cmlidXRlVmFsdWVbXSwgZ3JvdXBBdHRyaWJ1dGVSb3dJZDogbnVtYmVyLCByZWZlcmVuY2VkQXR0cmlidXRlVmFsdWU6IEF0dHJpYnV0ZVZhbHVlKSB7XHJcbiAgICAvL0FkZGluZyB0aGlzIHRvIHN1YnNjcmlwdGlvbnMgaXMgcHJvYmFibHkgdW5uZWNlc3NhcnksIHNpbmNlIHRoZSBmaXJzdCgpIHdpbGwgdW5zdWJzY3JpYmUuIFdlIG9ubHkgZ2V0IG9uZSB2YWx1ZS5cclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLmdldERpY3Rpb25hcnlFbnRyaWVzKGF0dHJpYnV0ZSwgdmFsdWVzLCBncm91cEF0dHJpYnV0ZVJvd0lkLCByZWZlcmVuY2VkQXR0cmlidXRlVmFsdWUpLnBpcGUoZmlyc3QoKSkuc3Vic2NyaWJlKChkdG86IERpY3Rpb25hcnlFbnRyaWVzRFRPKSA9PiB7XHJcbiAgICAgIHRoaXMuZGljdGlvbmFyeUVudHJpZXMgPSBkdG8uZW50cmllcztcclxuXHJcbiAgICAgIC8vTXVsdGlcclxuICAgICAgaWYgKHRoaXMuYXR0cmlidXRlLmlzTXVsdGlWYWx1ZSA9PT0gJ1knKSB7XHJcbiAgICAgICAgdGhpcy5pbml0aWFsaXplTXVsdGlEaWN0RW50cmllcygpO1xyXG5cclxuICAgICAgICAvL1Byb2JhYmx5IG5lZWQgdG8gc2xpY2Ugb3V0IG11bHRpIHZhbHVlcyB0aGF0IGRvbid0IGFwcGx5XHJcbiAgICAgICAgdGhpcy5kZWxldGVGaWx0ZXJlZE91dERpY3Rpb25hcnlWYWx1ZXMoKTtcclxuICAgICAgfVxyXG4gICAgICAvL1NpbmdsZVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICAvL01heWJlIG5lZWQgdG8gY2xlYXIgb3V0IHRoZSB2YWx1ZSBpZiBpdCBubyBsb25nZXIgYXBwbGllc1xyXG4gICAgICAgIGlmICghIGR0by5lbnRyaWVzSW5jbHVkZVNlbGVjdGVkVmFsdWUpIHtcclxuICAgICAgICAgIHRoaXMudmFsdWVEaWN0Q2hhbmdlKHVuZGVmaW5lZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KSk7XHJcbiAgfVxyXG5cclxuICBkZWxldGVGaWx0ZXJlZE91dERpY3Rpb25hcnlWYWx1ZXMoKSB7XHJcbiAgICAvL0l0ZXJhdGUgZXhpc3RpbmcgdmFsdWVzXHJcbiAgICBmb3IgKGxldCBhdHRyaWJ1dGVWYWx1ZSBvZiB0aGlzLmF0dHJpYnV0ZVZhbHVlcykge1xyXG4gICAgICBsZXQgYXBwbGljYWJsZTpib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgICAvL0RvZXMgaXQgZXhpc3QgaW4gbmV3IGRpY2F0aW9ucnlFbnRyaWVzP1xyXG4gICAgICBmb3IgKGxldCBlbnRyeSBvZiB0aGlzLmRpY3Rpb25hcnlFbnRyaWVzKSB7XHJcbiAgICAgICAgaWYgKGF0dHJpYnV0ZVZhbHVlLnZhbHVlSWREaWN0aW9uYXJ5ICYmIGVudHJ5LnZhbHVlID09PSBhdHRyaWJ1dGVWYWx1ZS52YWx1ZUlkRGljdGlvbmFyeSkge1xyXG4gICAgICAgICAgLy9rZWVwXHJcbiAgICAgICAgICBhcHBsaWNhYmxlID0gdHJ1ZTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKCEgYXBwbGljYWJsZSkge1xyXG4gICAgICAgIC8vR2V0IHJpZCBvZiB2YWx1ZXMgdGhhdCBubyBsb25nZXIgYXBwbHlcclxuICAgICAgICB0aGlzLmF0dHJpYnV0ZVNlcnZpY2Uuc3BsaWNlQXR0cmlidXRlVmFsdWVEaWN0KHRoaXMuYXR0cmlidXRlLCBhdHRyaWJ1dGVWYWx1ZS52YWx1ZUlkRGljdGlvbmFyeSlcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaW5pdGlhbGl6ZU11bHRpRGljdEVudHJpZXMoKSB7XHJcbiAgICBmb3IgKGxldCBlbnRyeSBvZiB0aGlzLmRpY3Rpb25hcnlFbnRyaWVzKSB7XHJcbiAgICAgIGVudHJ5LmNoZWNrZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgIGZvciAobGV0IGF0dHJpYnV0ZVZhbHVlIG9mIHRoaXMuYXR0cmlidXRlVmFsdWVzKSB7XHJcbiAgICAgICAgaWYgKGF0dHJpYnV0ZVZhbHVlLnZhbHVlSWREaWN0aW9uYXJ5ICYmIGVudHJ5LnZhbHVlID09PSBhdHRyaWJ1dGVWYWx1ZS52YWx1ZUlkRGljdGlvbmFyeSkge1xyXG4gICAgICAgICAgZW50cnkuY2hlY2tlZCA9IHRydWU7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCBhIHRyYW5zaWVudCB2YWx1ZSBvbiB0aGUgYXR0cmlidXRlQ2hvaWNlIHRvIGtlZXAgdHJhY2sgb2Ygc2VsZWN0ZWQgdmFsdWVzLlxyXG4gICAqL1xyXG4gIGluaXRpYWxpemVBdHRyaWJ1dGVDaG9pY2VzKCkge1xyXG4gICAgdGhpcy5hdHRyaWJ1dGVDaG9pY2VzID0gdGhpcy5hdHRyaWJ1dGUuYXR0cmlidXRlQ2hvaWNlcy5zbGljZSgpO1xyXG5cclxuICAgIGZvciAobGV0IGF0dHJpYnV0ZUNob2ljZSBvZiB0aGlzLmF0dHJpYnV0ZUNob2ljZXMpIHtcclxuICAgICAgYXR0cmlidXRlQ2hvaWNlLnZhbHVlID0gZmFsc2U7XHJcblxyXG4gICAgICBmb3IgKGxldCBhdHRyaWJ1dGVWYWx1ZSBvZiB0aGlzLmF0dHJpYnV0ZVZhbHVlcykge1xyXG4gICAgICAgIGlmIChhdHRyaWJ1dGVWYWx1ZS52YWx1ZUF0dHJpYnV0ZUNob2ljZSAmJiBhdHRyaWJ1dGVDaG9pY2UuaWRBdHRyaWJ1dGVDaG9pY2UgPT09IGF0dHJpYnV0ZVZhbHVlLnZhbHVlQXR0cmlidXRlQ2hvaWNlLmlkQXR0cmlidXRlQ2hvaWNlKSB7XHJcbiAgICAgICAgICBhdHRyaWJ1dGVDaG9pY2UudmFsdWUgPSB0cnVlO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJZiB0aGUgYXR0cmlidXRlIGlzIGEgZ3JpZCwgZmluZCBpdHMgY2hpbGRyZW4gYXR0cmlidXRlcyB3aGljaCBtYWtlIHVwIHRoZSBjb2x1bW5zIGFuZCBnZW5lcmF0ZSBkYXRhIGJhc2VkIG9uIGFsbFxyXG4gICAqIHRoZSBhdHRyaWJ1dGUgdmFsdWVzIGJ5IHRoZWlyIGdyb3VwQXR0cmlidXRlUm93SWQuXHJcbiAgICovXHJcbiAgaW5pdGlhbGl6ZUdyaWQoKTogdm9pZCB7XHJcbiAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgY29uc29sZS5kZWJ1ZyhcIkF0dHJpYnV0ZUNvbXBvbmVudC5pbml0aWFsaXplR3JpZFwiKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgY29sdW1uczogYW55W10gPSBbXTtcclxuICAgIGxldCBkYXRhOiBhbnlbXSA9IFtdO1xyXG5cclxuICAgIGlmICghdGhpcy5hdHRyaWJ1dGUuYXR0cmlidXRlcykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jaGlsZEF0dHJpYnV0ZXMgPSA8R3JhcGhpY2FsQXR0cmlidXRlW10+dGhpcy5hdHRyaWJ1dGUuYXR0cmlidXRlcy5maWx0ZXIoKGF0dHJpYnV0ZTogR3JhcGhpY2FsQXR0cmlidXRlKSA9PiB7XHJcbiAgICAgIHJldHVybiBhdHRyaWJ1dGVbXCJ0YWJPcmRlclwiXSAhPT0gdW5kZWZpbmVkIHx8IGF0dHJpYnV0ZVtcIndcIl0gIT09IHVuZGVmaW5lZDtcclxuICAgIH0pLnNvcnQoKGE6IEdyYXBoaWNhbEF0dHJpYnV0ZSwgYjogR3JhcGhpY2FsQXR0cmlidXRlKSA9PiB7XHJcbiAgICAgIGlmIChhLnRhYk9yZGVyIDwgYi50YWJPcmRlcikge1xyXG4gICAgICAgIHJldHVybiAtMTtcclxuICAgICAgfSBlbHNlIGlmIChhLnRhYk9yZGVyID4gYi50YWJPcmRlcikge1xyXG4gICAgICAgIHJldHVybiAxO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiAwO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgY29uc29sZS5kZWJ1ZyhcIkF0dHJpYnV0ZUNvbXBvbmVudC5pbml0aWFsaXplR3JpZDogbiBHcmlkIEF0dHJpYnV0ZXM6IFwiICsgdGhpcy5jaGlsZEF0dHJpYnV0ZXMubGVuZ3RoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmluaXRpYWxpemVHcmlkQ29sdW1ucyh0aGlzLmNoaWxkQXR0cmlidXRlcywgY29sdW1ucyk7XHJcblxyXG4gICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgIGNvbnNvbGUuZGVidWcoXCJBdHRyaWJ1dGVDb21wb25lbnQuaW5pdGlhbGl6ZUdyaWQ6IG4gQ29sdW1uczogXCIgKyBjb2x1bW5zLmxlbmd0aCk7XHJcbiAgICAgIGNvbnNvbGUuZGVidWcoY29sdW1ucyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgIGNvbnNvbGUuZGVidWcoXCJBdHRyaWJ1dGVDb21wb25lbnQuaW5pdGlhbGl6ZUdyaWQ6IG4gYXR0cmlidXRlVmFsdWVzOiBcIiArIHRoaXMuYXR0cmlidXRlVmFsdWVzLmxlbmd0aCk7XHJcbiAgICAgIGNvbnNvbGUuZGVidWcodGhpcy5hdHRyaWJ1dGVWYWx1ZXMpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBsZXQgc29ydGVkUm93VmFsdWVzID0gdGhpcy5hdHRyaWJ1dGVWYWx1ZXMuZmlsdGVyKChhdHRyaWJ1dGVWYWx1ZSkgPT4gYXR0cmlidXRlVmFsdWUuaWRHcm91cEF0dHJpYnV0ZSA9IHRoaXMuYXR0cmlidXRlLmlkQXR0cmlidXRlKVxyXG4gICAgICAuc29ydCgoYTogQXR0cmlidXRlVmFsdWUsIGI6IEF0dHJpYnV0ZVZhbHVlKSA9PiB7XHJcbiAgICAgIGlmIChhLmdyb3VwQXR0cmlidXRlUm93SWQgPCBiLmdyb3VwQXR0cmlidXRlUm93SWQpIHtcclxuICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgIH0gZWxzZSBpZiAoYS5ncm91cEF0dHJpYnV0ZVJvd0lkID4gYi5ncm91cEF0dHJpYnV0ZVJvd0lkKSB7XHJcbiAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGxldCBuOiBudW1iZXIgPSAwO1xyXG4gICAgZm9yIChsZXQgZGF0dW0gb2Ygc29ydGVkUm93VmFsdWVzKSB7XHJcbiAgICAgIGlmIChkYXR1bS5ncm91cEF0dHJpYnV0ZVJvd0lkID4gbikge1xyXG4gICAgICAgIG4gPSBkYXR1bS5ncm91cEF0dHJpYnV0ZVJvd0lkO1xyXG4gICAgICAgIGRhdGEucHVzaCh7XHJcbiAgICAgICAgICBncm91cEF0dHJpYnV0ZVJvd0lkOiBkYXR1bS5ncm91cEF0dHJpYnV0ZVJvd0lkXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgY29uc29sZS5kZWJ1ZyhcIkF0dHJpYnV0ZUNvbXBvbmVudC5pbml0aWFsaXplR3JpZDogbiBEYXRhOiBcIiArIGRhdGEubGVuZ3RoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmluaXRpYWxpemVHcmlkVmFsdWVzKGRhdGEsIHNvcnRlZFJvd1ZhbHVlcyk7XHJcblxyXG4gICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgIGNvbnNvbGUuZGVidWcoXCJBdHRyaWJ1dGVDb21wb25lbnQuaW5pdGlhbGl6ZUdyaWQ6IERhdGFcIik7XHJcbiAgICAgIGNvbnNvbGUuZGVidWcoZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5ncmlkQ29sdW1ucyA9IGNvbHVtbnM7XHJcbiAgICB0aGlzLmdyaWREYXRhID0gZGF0YTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdlbmVyYXRlIGEgY29sdW1uIGFycmF5IGJhc2VkIG9uIHRoZSBncm91cGVkIGF0dHJpYnV0ZXMgd2l0aGluIHRoZSBncmlkLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtBdHRyaWJ1dGVbXX0gYXR0cmlidXRlc1xyXG4gICAqIEBwYXJhbSB7YW55W119IGNvbHVtbnNcclxuICAgKi9cclxuICBpbml0aWFsaXplR3JpZENvbHVtbnMoYXR0cmlidXRlczogR3JhcGhpY2FsQXR0cmlidXRlW10sIGNvbHVtbnM6IGFueVtdKSB7XHJcblxyXG4gICAgLypcclxuICAgIGNvbHVtbnMucHVzaCh7XHJcbiAgICAgIGZpZWxkOiBcImdyb3VwQXR0cmlidXRlUm93SWRcIiwgaXNLZXk6IHRydWUsIHZpc2libGU6IGZhbHNlXHJcbiAgICB9KTsqL1xyXG5cclxuICAgIGZvciAoY29uc3QgW2ksIGF0dHJpYnV0ZV0gb2YgYXR0cmlidXRlcy5lbnRyaWVzKCkpIHtcclxuICAgICAgbGV0IGNvbHVtbjogYW55ID0ge1xyXG4gICAgICAgIGZpZWxkOiBhdHRyaWJ1dGUuYXR0cmlidXRlTmFtZSxcclxuICAgICAgICBoZWFkZXJOYW1lOiBhdHRyaWJ1dGUuZGlzcGxheU5hbWUsXHJcbiAgICAgICAgZWRpdGFibGU6IGZhbHNlLFxyXG4gICAgICAgIHNvcnRhYmxlOiB0cnVlLFxyXG4gICAgICAgIHJlc2l6YWJsZTogdHJ1ZSxcclxuICAgICAgICBmaWx0ZXI6IGZhbHNlLFxyXG4gICAgICAgIHdpZHRoOiBhdHRyaWJ1dGUudyxcclxuICAgICAgfTtcclxuXHJcbiAgICAgIC8vIHRoZSBsYXN0IGNvbHVtbiBzaG91bGQgYXV0byBmaWxsIHRoZSByZW1haW5pbmcgc3BhY2VcclxuICAgICAgaWYgKGF0dHJpYnV0ZS53ICYmIGkgPCBhdHRyaWJ1dGVzLmxlbmd0aCAtIDEpIHtcclxuICAgICAgICBjb2x1bW4uc3VwcHJlc3NTaXplVG9GaXQgPSB0cnVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoYXR0cmlidXRlLmNvZGVBdHRyaWJ1dGVEYXRhVHlwZSA9PT0gXCJEXCIpIHtcclxuICAgICAgICBjb2x1bW4uY29tcGFyYXRvciA9IERhdGVVdGlsLmRhdGVDb21wYXJhdG9yO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKGF0dHJpYnV0ZS5jb2RlQXR0cmlidXRlRGF0YVR5cGUgPT09IFwiRFRcIikge1xyXG4gICAgICAgIGNvbHVtbi5jb21wYXJhdG9yID0gRGF0ZVV0aWwuZGF0ZVRpbWVDb21wYXJhdG9yO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb2x1bW5zLnB1c2goY29sdW1uKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFmdGVyIHRoZSBjb2x1bW5zIGFyZSBjcmVhdGVkLCBhc3NpZ25lZFxyXG4gICAqXHJcbiAgICogQHBhcmFtIHthbnlbXX0gZGF0YVxyXG4gICAqL1xyXG4gIGluaXRpYWxpemVHcmlkVmFsdWVzKGRhdGE6IGFueVtdLCBhdHRyaWJ1dGVWYWx1ZXM6IEF0dHJpYnV0ZVZhbHVlW10pOiB2b2lkIHtcclxuICAgIGZvciAobGV0IGRhdHVtIG9mIGF0dHJpYnV0ZVZhbHVlcykge1xyXG4gICAgICBsZXQgYXR0cmlidXRlOiBBdHRyaWJ1dGUgPSB0aGlzLmNoaWxkQXR0cmlidXRlcy5maWx0ZXIoKGF0dHJpYnV0ZTogQXR0cmlidXRlKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZS5pZEF0dHJpYnV0ZSA9PT0gZGF0dW0uaWRBdHRyaWJ1dGU7XHJcbiAgICAgIH0pWzBdO1xyXG5cclxuICAgICAgLy9NYWtlIGEgcm93VmFsdWUgb2JqZWN0IHdpdGggdmFsdWVzIGZvciBlYWNoIGF0dHJpYnV0ZSBvZiB0aGUgcm93XHJcbiAgICAgIGxldCByb3dWYWx1ZTogYW55ID0gZGF0YS5maW5kKChyb3cpID0+IHJvdy5ncm91cEF0dHJpYnV0ZVJvd0lkID09PSBkYXR1bS5ncm91cEF0dHJpYnV0ZVJvd0lkKTtcclxuICAgICAgaWYgKCEgcm93VmFsdWUpIHtcclxuICAgICAgICByb3dWYWx1ZSA9IHtncm91cEF0dHJpYnV0ZVJvd0lkOiBkYXR1bS5ncm91cEF0dHJpYnV0ZVJvd0lkfTtcclxuICAgICAgICBkYXRhLnB1c2gocm93VmFsdWUpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoIWF0dHJpYnV0ZSkge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJBdHRyaWJ1dGUuaW5pdGlhbGl6ZUdyaWQ6IGlkQXR0cmlidXRlIFwiICsgZGF0dW0uaWRBdHRyaWJ1dGUgKyBcIiBub3QgZm91bmQuXCIpO1xyXG4gICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoYXR0cmlidXRlLmNvZGVBdHRyaWJ1dGVEYXRhVHlwZSA9PT0gXCJEVFwiKSB7XHJcbiAgICAgICAgcm93VmFsdWVbYXR0cmlidXRlLmF0dHJpYnV0ZU5hbWVdID0gbmV3IERhdGVQaXBlKFwiZW4tVVNcIikudHJhbnNmb3JtKG5ldyBEYXRlKGRhdHVtLnZhbHVlRGF0ZVRpbWUpLCBcIk0vZC95eSwgaDptbTpzcyBhXCIpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKGF0dHJpYnV0ZS5jb2RlQXR0cmlidXRlRGF0YVR5cGUgPT09IFwiQUNcIiAmJiBhdHRyaWJ1dGUuaXNNdWx0aVZhbHVlID09PSBcIk5cIikge1xyXG4gICAgICAgIGlmIChkYXR1bS52YWx1ZUF0dHJpYnV0ZUNob2ljZSkge1xyXG4gICAgICAgICAgcm93VmFsdWVbYXR0cmlidXRlLmF0dHJpYnV0ZU5hbWVdID0gZGF0dW0udmFsdWVBdHRyaWJ1dGVDaG9pY2UuY2hvaWNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmIChhdHRyaWJ1dGUuY29kZUF0dHJpYnV0ZURhdGFUeXBlID09PSBcIkFDXCIgJiYgYXR0cmlidXRlLmlzTXVsdGlWYWx1ZSA9PT0gXCJZXCIpIHtcclxuICAgICAgICAvL0NvbmNhdGVuYXRlZCBkaXNwbGF5XHJcbiAgICAgICAgaWYgKHJvd1ZhbHVlW2F0dHJpYnV0ZS5hdHRyaWJ1dGVOYW1lXSkge1xyXG4gICAgICAgICAgcm93VmFsdWVbYXR0cmlidXRlLmF0dHJpYnV0ZU5hbWVdID0gcm93VmFsdWVbYXR0cmlidXRlLmF0dHJpYnV0ZU5hbWVdICsgXCIsIFwiICsgZGF0dW0udmFsdWVBdHRyaWJ1dGVDaG9pY2UuY2hvaWNlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByb3dWYWx1ZVthdHRyaWJ1dGUuYXR0cmlidXRlTmFtZV0gPSBkYXR1bS52YWx1ZUF0dHJpYnV0ZUNob2ljZS5jaG9pY2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKGF0dHJpYnV0ZS5jb2RlQXR0cmlidXRlRGF0YVR5cGUgPT09IFwiRElDVFwiKSB7XHJcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZCh0aGlzLmF0dHJpYnV0ZVNlcnZpY2UuZ2V0RGljdGlvbmFyeUVudHJpZXMoYXR0cmlidXRlLCBhdHRyaWJ1dGVWYWx1ZXMsIGRhdHVtLmdyb3VwQXR0cmlidXRlUm93SWQpLnBpcGUoZmlyc3QoKSkuc3Vic2NyaWJlKChkdG86IERpY3Rpb25hcnlFbnRyaWVzRFRPKSA9PiB7XHJcbiAgICAgICAgICBsZXQgZW50cnkgPSBkdG8uZW50cmllcy5maW5kKChlbnRyeTphbnkpID0+IGVudHJ5LnZhbHVlID09PSBkYXR1bS52YWx1ZUlkRGljdGlvbmFyeSk7XHJcblxyXG4gICAgICAgICAgaWYgKGVudHJ5KSB7XHJcbiAgICAgICAgICAgIHJvd1ZhbHVlW2F0dHJpYnV0ZS5hdHRyaWJ1dGVOYW1lXSA9IGR0by5lbnRyaWVzLmZpbmQoKGVudHJ5OmFueSkgPT4gZW50cnkudmFsdWUgPT09IGRhdHVtLnZhbHVlSWREaWN0aW9uYXJ5KS5kaXNwbGF5O1xyXG4gICAgICAgICAgICBpZiAodGhpcy5ncmlkQXBpKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5ncmlkQXBpLnJlZnJlc2hDZWxscygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSkpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKGF0dHJpYnV0ZS5jb2RlQXR0cmlidXRlRGF0YVR5cGUgPT09IFwiU1wiIHx8IGF0dHJpYnV0ZS5jb2RlQXR0cmlidXRlRGF0YVR5cGUgPT09IFwiQlwiIHx8IGF0dHJpYnV0ZS5jb2RlQXR0cmlidXRlRGF0YVR5cGUgPT09IFwiRUJcIiB8fCBhdHRyaWJ1dGUuY29kZUF0dHJpYnV0ZURhdGFUeXBlID09PSBcIkNCXCIpIHtcclxuICAgICAgICByb3dWYWx1ZVthdHRyaWJ1dGUuYXR0cmlidXRlTmFtZV0gPSBkYXR1bS52YWx1ZVN0cmluZztcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICByb3dWYWx1ZVthdHRyaWJ1dGUuYXR0cmlidXRlTmFtZV0gPSBkYXR1bS52YWx1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRm9yIG92ZXJyaWRlLlxyXG4gICAqL1xyXG4gIHJlZnJlc2goKTogdm9pZCB7XHJcbiAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgY29uc29sZS5kZWJ1ZyhcIkF0dHJpYnV0ZS5yZWZyZXNoOiBcIiArIHRoaXMuYXR0cmlidXRlLmlkQXR0cmlidXRlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuXHJcbiAgdmFsdWVTdHJpbmdDaGFuZ2UodmFsdWU6IGFueSk6IHZvaWQge1xyXG4gICAgaWYgKHZhbHVlID09PSBcIlwiKSB7XHJcbiAgICAgIHZhbHVlID0gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuYXR0cmlidXRlVmFsdWVzWzBdLnZhbHVlU3RyaW5nID0gdmFsdWU7XHJcbiAgICB0aGlzLmF0dHJpYnV0ZVZhbHVlc1swXS52YWx1ZSA9IHZhbHVlO1xyXG5cclxuICAgIHRoaXMuYXR0cmlidXRlU2VydmljZS5wdXNoQXR0cmlidXRlVmFsdWUodGhpcy5hdHRyaWJ1dGVWYWx1ZXNbMF0pO1xyXG4gIH1cclxuXHJcbiAgdmFsdWVDaGVja2JveENoYW5nZShldmVudDogYW55KSB7XHJcbiAgICBpZiAoZXZlbnQudGFyZ2V0LmNoZWNrZWQpIHtcclxuICAgICAgdGhpcy5hdHRyaWJ1dGVWYWx1ZXNbMF0udmFsdWVTdHJpbmcgPSBcIllcIjtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLmF0dHJpYnV0ZVZhbHVlc1swXS52YWx1ZVN0cmluZyA9IFwiTlwiO1xyXG4gICAgfVxyXG4gICAgdGhpcy5hdHRyaWJ1dGVWYWx1ZXNbMF0udmFsdWUgPSB0aGlzLmF0dHJpYnV0ZVZhbHVlc1swXS52YWx1ZVN0cmluZztcclxuXHJcbiAgICB0aGlzLmF0dHJpYnV0ZVNlcnZpY2UucHVzaEF0dHJpYnV0ZVZhbHVlKHRoaXMuYXR0cmlidXRlVmFsdWVzWzBdKTtcclxuICB9XHJcblxyXG4gIHZhbHVlSW50ZWdlckNoYW5nZSh2YWx1ZTogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLmF0dHJpYnV0ZVZhbHVlc1swXS52YWx1ZUludGVnZXIgPSB2YWx1ZTtcclxuICAgIHRoaXMuYXR0cmlidXRlVmFsdWVzWzBdLnZhbHVlID0gKHZhbHVlKT92YWx1ZS50b1N0cmluZygpOnVuZGVmaW5lZDtcclxuXHJcbiAgICB0aGlzLmF0dHJpYnV0ZVNlcnZpY2UucHVzaEF0dHJpYnV0ZVZhbHVlKHRoaXMuYXR0cmlidXRlVmFsdWVzWzBdKTtcclxuICB9XHJcblxyXG4gIHZhbHVlTnVtZXJpY0NoYW5nZSh2YWx1ZTogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLmF0dHJpYnV0ZVZhbHVlc1swXS52YWx1ZU51bWVyaWMgPSB2YWx1ZTtcclxuICAgIHRoaXMuYXR0cmlidXRlVmFsdWVzWzBdLnZhbHVlID0gKHZhbHVlKT92YWx1ZS50b1N0cmluZygpOnVuZGVmaW5lZDtcclxuXHJcbiAgICB0aGlzLmF0dHJpYnV0ZVNlcnZpY2UucHVzaEF0dHJpYnV0ZVZhbHVlKHRoaXMuYXR0cmlidXRlVmFsdWVzWzBdKTtcclxuICB9XHJcblxyXG4gIHZhbHVlRGljdENoYW5nZSh2YWx1ZTogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLmF0dHJpYnV0ZVZhbHVlc1swXS52YWx1ZUlkRGljdGlvbmFyeSA9IHZhbHVlO1xyXG4gICAgdGhpcy5hdHRyaWJ1dGVWYWx1ZXNbMF0udmFsdWUgPSAodmFsdWUpP3ZhbHVlLnRvU3RyaW5nKCk6dW5kZWZpbmVkO1xyXG5cclxuICAgIHRoaXMuYXR0cmlidXRlU2VydmljZS5wdXNoQXR0cmlidXRlVmFsdWUodGhpcy5hdHRyaWJ1dGVWYWx1ZXNbMF0pO1xyXG4gIH1cclxuXHJcbiAgdmFsdWVEYXRlQ2hhbmdlKHZhbHVlOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMuYXR0cmlidXRlVmFsdWVzWzBdLnZhbHVlRGF0ZVRpbWUgPSB2YWx1ZTtcclxuICAgIHRoaXMuYXR0cmlidXRlVmFsdWVzWzBdLnZhbHVlID0gKHZhbHVlKT92YWx1ZS50b1N0cmluZygpOnVuZGVmaW5lZDtcclxuXHJcbiAgICB0aGlzLmF0dHJpYnV0ZVNlcnZpY2UucHVzaEF0dHJpYnV0ZVZhbHVlKHRoaXMuYXR0cmlidXRlVmFsdWVzWzBdKTtcclxuICB9XHJcblxyXG4gIHZhbHVlVGV4dENoYW5nZSh2YWx1ZTogYW55KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5hdHRyaWJ1dGVWYWx1ZXNbMF0udmFsdWVMb25nVGV4dCkge1xyXG4gICAgICB0aGlzLmF0dHJpYnV0ZVZhbHVlc1swXS52YWx1ZUxvbmdUZXh0LnRleHREYXRhID0gdmFsdWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmF0dHJpYnV0ZVZhbHVlc1swXS52YWx1ZUxvbmdUZXh0ID0gPEF0dHJpYnV0ZUxvbmdUZXh0PntcclxuICAgICAgICBpZExvbmdUZXh0OiB1bmRlZmluZWQsXHJcbiAgICAgICAgdGV4dERhdGE6IHZhbHVlXHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgICB0aGlzLmF0dHJpYnV0ZVZhbHVlc1swXS52YWx1ZSA9ICh2YWx1ZSk/dmFsdWUudG9TdHJpbmcoKTp1bmRlZmluZWQ7XHJcblxyXG4gICAgdGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLnB1c2hBdHRyaWJ1dGVWYWx1ZSh0aGlzLmF0dHJpYnV0ZVZhbHVlc1swXSk7XHJcbiAgfVxyXG5cclxuICB2YWx1ZUNob2ljZUNoYW5nZSh2YWx1ZTogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLmF0dHJpYnV0ZVZhbHVlc1swXS52YWx1ZUF0dHJpYnV0ZUNob2ljZSA9IHRoaXMuYXR0cmlidXRlQ2hvaWNlcy5maW5kKChhdHRyKSA9PiBhdHRyLmlkQXR0cmlidXRlQ2hvaWNlID09PSB2YWx1ZSk7XHJcbiAgICB0aGlzLmF0dHJpYnV0ZVZhbHVlc1swXS52YWx1ZSA9ICh2YWx1ZSk/dmFsdWUudG9TdHJpbmcoKTp1bmRlZmluZWQ7XHJcblxyXG4gICAgdGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLnB1c2hBdHRyaWJ1dGVWYWx1ZSh0aGlzLmF0dHJpYnV0ZVZhbHVlc1swXSk7XHJcbiAgfVxyXG5cclxuICB2YWx1ZU11bHRpQ2hvaWNlQ2hhbmdlKGF0dHJpYnV0ZUNob2ljZTogYW55KTogdm9pZCB7XHJcbiAgICBhdHRyaWJ1dGVDaG9pY2UudmFsdWUgPSAhYXR0cmlidXRlQ2hvaWNlLnZhbHVlO1xyXG5cclxuICAgIC8vUmVtb3ZlXHJcbiAgICBpZiAoIWF0dHJpYnV0ZUNob2ljZS52YWx1ZSkge1xyXG4gICAgICB0aGlzLmF0dHJpYnV0ZVNlcnZpY2Uuc3BsaWNlQXR0cmlidXRlVmFsdWVDaG9pY2UodGhpcy5hdHRyaWJ1dGUsIGF0dHJpYnV0ZUNob2ljZSk7XHJcbiAgICB9XHJcbiAgICAvL0FkZFxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuYXR0cmlidXRlVmFsdWVzLnB1c2goPEF0dHJpYnV0ZVZhbHVlPntcclxuICAgICAgICBjb2RlQXR0cmlidXRlRGF0YVR5cGU6IFwiQUNcIixcclxuICAgICAgICBpZEF0dHJpYnV0ZVZhbHVlOiB0aGlzLmF0dHJpYnV0ZVNlcnZpY2UuZ2V0VW5pcXVlSWQoKSxcclxuICAgICAgICBpZEF0dHJpYnV0ZVZhbHVlU2V0OiB0aGlzLmF0dHJpYnV0ZVNlcnZpY2UuZ2V0QXR0cmlidXRlVmFsdWVTZXQoKS5nZXRWYWx1ZSgpLmlkQXR0cmlidXRlVmFsdWVTZXQsXHJcbiAgICAgICAgaWRBdHRyaWJ1dGU6IHRoaXMuYXR0cmlidXRlLmlkQXR0cmlidXRlLFxyXG4gICAgICAgIHZhbHVlQXR0cmlidXRlQ2hvaWNlOiBhdHRyaWJ1dGVDaG9pY2UsXHJcbiAgICAgICAgZ3JvdXBBdHRyaWJ1dGVSb3dJZDogdGhpcy5ncm91cEF0dHJpYnV0ZVJvd0lkLFxyXG4gICAgICAgIGlkR3JvdXBBdHRyaWJ1dGU6IHRoaXMuYXR0cmlidXRlLmlkR3JvdXBBdHRyaWJ1dGVcclxuICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLmF0dHJpYnV0ZVNlcnZpY2UucHVzaEF0dHJpYnV0ZVZhbHVlTXVsdGlDaG9pY2UodGhpcy5hdHRyaWJ1dGVWYWx1ZXNbdGhpcy5hdHRyaWJ1dGVWYWx1ZXMubGVuZ3RoIC0gMV0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdmFsdWVNdWx0aURpY3RDaGFuZ2UoZW50cnk6IGFueSk6IHZvaWQge1xyXG4gICAgZW50cnkuY2hlY2tlZCA9ICFlbnRyeS5jaGVja2VkO1xyXG5cclxuICAgIC8vUmVtb3ZlXHJcbiAgICBpZiAoIWVudHJ5LmNoZWNrZWQpIHtcclxuICAgICAgdGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLnNwbGljZUF0dHJpYnV0ZVZhbHVlRGljdCh0aGlzLmF0dHJpYnV0ZSwgZW50cnkudmFsdWUpO1xyXG4gICAgfVxyXG4gICAgLy9BZGRcclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLmF0dHJpYnV0ZVZhbHVlcy5wdXNoKDxBdHRyaWJ1dGVWYWx1ZT57XHJcbiAgICAgICAgY29kZUF0dHJpYnV0ZURhdGFUeXBlOiBcIkRJQ1RcIixcclxuICAgICAgICBpZEF0dHJpYnV0ZVZhbHVlOiB0aGlzLmF0dHJpYnV0ZVNlcnZpY2UuZ2V0VW5pcXVlSWQoKSxcclxuICAgICAgICBpZEF0dHJpYnV0ZVZhbHVlU2V0OiB0aGlzLmF0dHJpYnV0ZVNlcnZpY2UuZ2V0QXR0cmlidXRlVmFsdWVTZXQoKS5nZXRWYWx1ZSgpLmlkQXR0cmlidXRlVmFsdWVTZXQsXHJcbiAgICAgICAgaWRBdHRyaWJ1dGU6IHRoaXMuYXR0cmlidXRlLmlkQXR0cmlidXRlLFxyXG4gICAgICAgIHZhbHVlSWREaWN0aW9uYXJ5OiBlbnRyeS52YWx1ZSxcclxuICAgICAgICBncm91cEF0dHJpYnV0ZVJvd0lkOiB0aGlzLmdyb3VwQXR0cmlidXRlUm93SWQsXHJcbiAgICAgICAgaWRHcm91cEF0dHJpYnV0ZTogdGhpcy5hdHRyaWJ1dGUuaWRHcm91cEF0dHJpYnV0ZVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMuYXR0cmlidXRlU2VydmljZS5wdXNoQXR0cmlidXRlVmFsdWVNdWx0aURpY3QodGhpcy5hdHRyaWJ1dGVWYWx1ZXNbdGhpcy5hdHRyaWJ1dGVWYWx1ZXMubGVuZ3RoIC0gMV0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIGFkZEdyaWRSb3cobW9kYWw6IFRlbXBsYXRlUmVmPGFueT4sIGlkR3JvdXBBdHRyaWJ1dGU6IG51bWJlcikge1xyXG4gICAgY29uc29sZS5sb2coXCJhZGQgZ3JpZCByb3c6IFwiICsgaWRHcm91cEF0dHJpYnV0ZSk7XHJcblxyXG4gICAgLy9HZXQgYSBuZWdhdGl2ZSBJRCwgc28gd2Uga25vdyB0aGlzIGlzIGEgbmV3IHJvd1xyXG4gICAgdGhpcy5lZGl0R3JvdXBBdHRyaWJ1dGVSb3dJZCA9IHRoaXMuYXR0cmlidXRlU2VydmljZS5nZXRVbmlxdWVJZCgpO1xyXG4gICAgdGhpcy5lZGl0R3JvdXBSb3dBdHRyaWJ1dGVzID0gdGhpcy5jaGlsZEF0dHJpYnV0ZXM7XHJcblxyXG5cclxuICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4obW9kYWwsIHt3aW5kb3dDbGFzczogXCJtb2RhbC1sZ1wifSkucmVzdWx0LnRoZW4oKHJlc3VsdCkgPT4ge1xyXG4gICAgICBpZiAocmVzdWx0ID09PSBcIlNhdmVcIikge1xyXG4gICAgICAgIHRoaXMuc2F2ZUdyaWRSb3coaWRHcm91cEF0dHJpYnV0ZSk7XHJcbiAgICAgIH0gZWxzZSBpZiAocmVzdWx0ID09PSBcIkNhbmNlbFwiKSB7XHJcbiAgICAgICAgdGhpcy5jYW5jZWxFZGl0Q29kR3JpZFJvdygpO1xyXG4gICAgICB9XHJcbiAgICB9LCAocmVhc29uKSA9PiB7fSk7XHJcbiAgfVxyXG5cclxuICBlZGl0R3JpZFJvdyhtb2RhbDogVGVtcGxhdGVSZWY8YW55PiwgaWRHcm91cEF0dHJpYnV0ZTogbnVtYmVyLCBldmVudDogUm93RG91YmxlQ2xpY2tlZEV2ZW50KSB7XHJcbiAgICAvL0VkaXRJbmxpbmUgaXMgYWN0dWFsbHkgdGhlIE9OTFkgd2F5IHRoaXMgY2FuIGJlIGVkaXRhYmxlLCBzbyB0aGlzIGlzIHJlYWxseSB3aGV0aGVyIHRoZSBncmlkIGlzIGVkaXRhYmxlLCBhdCBhbGxcclxuICAgIGlmICh0aGlzLmVkaXRJbmxpbmUgJiYgISh0aGlzLmF0dHJpYnV0ZS5pc0FjdGl2ZSA9PT0gJ04nKSkge1xyXG4gICAgICB0aGlzLmVkaXRHcm91cEF0dHJpYnV0ZVJvd0lkID0gZXZlbnQuZGF0YS5ncm91cEF0dHJpYnV0ZVJvd0lkO1xyXG4gICAgICB0aGlzLmVkaXRHcm91cFJvd0F0dHJpYnV0ZXMgPSB0aGlzLmNoaWxkQXR0cmlidXRlcztcclxuXHJcblxyXG4gICAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuKG1vZGFsLCB7d2luZG93Q2xhc3M6IFwibW9kYWwtbGdcIn0pLnJlc3VsdC50aGVuKChyZXN1bHQpID0+IHtcclxuICAgICAgICBpZiAocmVzdWx0ID09PSBcIlNhdmVcIikge1xyXG4gICAgICAgICAgdGhpcy5zYXZlR3JpZFJvdyhpZEdyb3VwQXR0cmlidXRlKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdCA9PT0gXCJDYW5jZWxcIikge1xyXG4gICAgICAgICAgdGhpcy5jYW5jZWxFZGl0Q29kR3JpZFJvdygpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSwgKHJlYXNvbikgPT4ge30pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVtb3ZlR3JpZFJvdyhpZEdyb3VwQXR0cmlidXRlOiBudW1iZXIpIHtcclxuICAgIGNvbnNvbGUubG9nKFwicmVtb3ZlIGdyaWQgcm93OiBcIiArIGlkR3JvdXBBdHRyaWJ1dGUpO1xyXG4gICAgbGV0IHNlbGVjdGVkQ29sdW1uczogUm93Tm9kZVtdID0gdGhpcy5ncmlkQXBpLmdldFNlbGVjdGVkTm9kZXMoKTtcclxuXHJcbiAgICBpZiAoc2VsZWN0ZWRDb2x1bW5zLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLmRlbGV0ZUdyaWRSb3dBdHRyaWJ1dGVWYWx1ZXMoaWRHcm91cEF0dHJpYnV0ZSwgc2VsZWN0ZWRDb2x1bW5zWzBdLmRhdGEuZ3JvdXBBdHRyaWJ1dGVSb3dJZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjYW5jZWxFZGl0Q29kR3JpZFJvdygpIHtcclxuICAgIHRoaXMuYXR0cmlidXRlU2VydmljZS5jbGVhclVwZGF0ZWRHcmlkUm93QXR0cmlidXRlVmFsdWVzKHRoaXMuZWRpdEdyb3VwQXR0cmlidXRlUm93SWQpO1xyXG4gICAgdGhpcy5lZGl0R3JvdXBSb3dBdHRyaWJ1dGVzID0gW107XHJcbiAgICB0aGlzLmVkaXRHcm91cEF0dHJpYnV0ZVJvd0lkID0gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIFZhbHVlcyBmb3IgYSBuZXcgZ3JpZCByb3cgYXJlIHN0b3JlZCBzZXBhcmF0ZWx5LiAgVGhpcyBmdW5jdGlvbiB3aWxsIGFkZCB0aGF0IGRhdGEgdG8gdGhlIGN1cnJlbnQgZ3JpZCBkYXRhIGFuZFxyXG4gICAqIHB1c2ggdGhlIHZhbHVlcyB0byB0aGUgc2VydmljZS5cclxuICAgKi9cclxuICBzYXZlR3JpZFJvdyhpZEdyb3VwQXR0cmlidXRlOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGNvbnNvbGUubG9nKFwic2F2ZSBncmlkIHJvd1wiKTtcclxuXHJcbiAgICB0aGlzLmF0dHJpYnV0ZVNlcnZpY2Uuc2F2ZUdyaWRSb3dBdHRyaWJ1dGVWYWx1ZXMoaWRHcm91cEF0dHJpYnV0ZSwgdGhpcy5lZGl0R3JvdXBBdHRyaWJ1dGVSb3dJZCk7XHJcblxyXG4gICAgdGhpcy5lZGl0R3JvdXBBdHRyaWJ1dGVSb3dJZCA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMuZWRpdEdyb3VwUm93QXR0cmlidXRlcyA9IFtdO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjb21ib0ZpbHRlclZhbHVlR2V0dGVyKHBhcmFtcyk6IGFueSB7XHJcbiAgICBsZXQgdmFsdWUgPSBwYXJhbXMuZGF0YVtwYXJhbXMuY29sRGVmLmZpZWxkXTtcclxuICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICBsZXQgb3B0aW9uID0gKChwYXJhbXMuY29sRGVmIGFzIGFueSkuc2VsZWN0T3B0aW9ucyBhcyBhbnlbXSkuZmluZCgoZW50cnkpID0+IChlbnRyeVtwYXJhbXMuY29sRGVmLnNlbGVjdE9wdGlvbnNWYWx1ZUZpZWxkXSA9PT0gdmFsdWUpKTtcclxuICAgICAgcmV0dXJuIG9wdGlvbiA/IG9wdGlvbltwYXJhbXMuY29sRGVmLnNlbGVjdE9wdGlvbnNEaXNwbGF5RmllbGRdIDogXCJcIjtcclxuICAgIH1cclxuICAgIHJldHVybiBcIlwiO1xyXG4gIH1cclxufVxyXG4iXX0=
|