@churchillliving/se-ui-toolkit 6.53.994 → 6.53.995
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.
|
@@ -191,20 +191,22 @@ export class FormComponent {
|
|
|
191
191
|
this.setFormSections(userSection, pageUrl);
|
|
192
192
|
}
|
|
193
193
|
}
|
|
194
|
-
else
|
|
194
|
+
else {
|
|
195
195
|
this.setFormSections(userSection, pageUrl);
|
|
196
196
|
}
|
|
197
197
|
}
|
|
198
198
|
}
|
|
199
199
|
setFormSections(userSection, pageUrl) {
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
200
|
+
if (userSection?.length > 0) {
|
|
201
|
+
this.form.formSections.forEach((section, index) => {
|
|
202
|
+
const pageSection = userSection?.find((pageSection) => pageSection?.section?.toLowerCase() === section?.name?.toLowerCase());
|
|
203
|
+
if (pageSection && pageSection.page && pageSection.page?.toLowerCase() === pageUrl?.toLowerCase()) {
|
|
204
|
+
const reOrderSection = { ...section };
|
|
205
|
+
this.form.formSections.splice(index, 1);
|
|
206
|
+
this.form.formSections.splice(pageSection?.order - 1, 0, reOrderSection);
|
|
207
|
+
}
|
|
208
|
+
});
|
|
209
|
+
}
|
|
208
210
|
}
|
|
209
211
|
checkFieldRequired(field) {
|
|
210
212
|
if (field.validations?.find(validation => validation.type === EValidator.REQUIRED)) {
|
|
@@ -1354,4 +1356,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.1", ngImpor
|
|
|
1354
1356
|
type: HostListener,
|
|
1355
1357
|
args: ['window:beforeunload', ['$event']]
|
|
1356
1358
|
}] } });
|
|
1357
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zZS11aS10b29sa2l0L3NyYy9saWIvY29tcG9uZW50cy9iYXNlL2Zvcm0vZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zZS11aS10b29sa2l0L3NyYy9saWIvY29tcG9uZW50cy9iYXNlL2Zvcm0vZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsWUFBWSxFQUErQyxZQUFZLEVBQStCLGdCQUFnQixFQUFjLFlBQVksR0FBc0IsTUFBTSxlQUFlLENBQUM7QUFJdk8sT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUEwQyxVQUFVLEVBQTZCLFdBQVcsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2xLLE9BQU8sRUFBRSxlQUFlLEVBQWUsTUFBTSxpQ0FBaUMsQ0FBQztBQUUvRSxPQUFPLEtBQUssU0FBUyxNQUFNLHFDQUFxQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQU83RCxPQUFPLEVBQWdCLFFBQVEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUU5QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDdEUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBT3RDLE1BQU0sT0FBTyxhQUFhO0lBVXhCLElBQWEsY0FBYyxDQUFDLEdBQVE7UUFDbEMsSUFBSSxHQUFHLEtBQUssSUFBSSxFQUFFO1lBQ2hCLFFBQVEsQ0FBQztTQUNWO0lBQ0gsQ0FBQztJQThCRCxZ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RCxXQUFXLENBQUMsSUFBSSxFQUFFLFdBQVc7UUFDM0IsSUFBRyxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFDO1lBQ3pDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUNoQjtJQUNILENBQUM7SUFDRCxhQUFhLENBQUMsR0FBUTtRQUNsQixPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxHQUFHLElBQUksRUFBRSxDQUFBO0lBQ3hELENBQUM7aUlBOTVDVSxhQUFhO3FIQUFiLGFBQWEseXBCQW1CMkIsZ0JBQWdCLGtEQzdDckUseXExQ0FncUJPOzsyRkR0b0JNLGFBQWE7a0JBTHpCLFNBQVM7K0JBQ0UsU0FBUzsyZUFLVixhQUFhO3NCQUFyQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFFTyxjQUFjO3NCQUExQixLQUFLO2dCQUtJLFFBQVE7c0JBQWpCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBQ0csbUJBQW1CO3NCQUE1QixNQUFNO2dCQUVQLHlCQUF5QjtzQkFEeEIsWUFBWTt1QkFBQywyQkFBMkIsRUFBRSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtnQkErQ3JFLG1CQUFtQjtzQkFEbEIsWUFBWTt1QkFBQyxxQkFBcUIsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlciwgQ2hhbmdlRGV0ZWN0b3JSZWYsIFZpZXdDaGlsZHJlbiwgUXVlcnlMaXN0LCBDb21wb25lbnRGYWN0b3J5LCBWaWV3Q29udGFpbmVyUmVmLCBFbGVtZW50UmVmLCBIb3N0TGlzdGVuZXIsIFJlbmRlcmVyMiwgTmdab25lLCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9mb3JtLnNlcnZpY2UnO1xuaW1wb3J0IHsgQWxlcnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYWxlcnQuc2VydmljZSc7XG5pbXBvcnQgeyBEaWFsb2dTZXJ2aWNlLCBEeW5hbWljRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAncHJpbWVuZy9keW5hbWljZGlhbG9nJztcbmltcG9ydCB7IE5vdGVzQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vc2hhcmVkL25vdGVzL25vdGVzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBFRm9ybUNvbnRyb2wsIEVIeXBlcmxpbmssIElGb3JtRmllbGQsIElEeW5hbWljRm9ybSwgSUZvcm1TZWN0aW9uLCBFVmFsaWRhdG9yLCBJRHluYW1pY0NhcmQsIElGb3JtQnV0dG9uLCBFRm9ybWF0VHlwZSB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9mb3JtLm1vZGVsJztcbmltcG9ydCB7IEVQZXJtaXNzaW9uVHlwZSwgSVBlcm1pc3Npb24gfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvdXNlci1pbmZvLm1vZGVsJztcbmltcG9ydCB7IEF1dGhlbnRpY2F0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2F1dGhlbnRpY2F0aW9uLnNlcnZpY2UnO1xuaW1wb3J0ICogYXMgdXRpbGl0aWVzIGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3V0aWxpdGllcy5zZXJ2aWNlJztcbmltcG9ydCB7IElmcmFtZUNvbXBvbmVudCB9IGZyb20gJy4uL2lmcmFtZS9pZnJhbWUuY29tcG9uZW50JztcbmltcG9ydCB7IElEaWN0aW9uYXJ5IH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2NvbW1vbi5tb2RlbCc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBHcmlkU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2dyaWQuc2VydmljZSc7XG5pbXBvcnQgeyBQYWdlTG9nZ2VyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3BhZ2UtbG9nZ2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uLCBpbnRlcnZhbCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgSHlwZXJsaW5rU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2h5cGVybGluay5zZXJ2aWNlJztcbmltcG9ydCB7IGRyYWdnYWJsZURpYWxvZyB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3V0aWxpdGllcy5zZXJ2aWNlJztcbmltcG9ydCB7IHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NlLWZvcm0nLFxuICB0ZW1wbGF0ZVVybDogJy4vZm9ybS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Zvcm0uY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgRm9ybUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIHN0aWNreUFjdGlvbnM6IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKSBmb3JtOiBJRHluYW1pY0Zvcm07XG4gIEBJbnB1dCgpIHNhdmVCdXR0b25MYWJlbDogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIGNhbmNlbEJ1dHRvbkxhYmVsOiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCkgaGlkZVNhdmVCdXR0b246IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgaGlkZUNhbmNlbEJ1dHRvbjogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBmb3JtQnV0dG9uczogSUZvcm1CdXR0b25bXSA9IFtdO1xuICBASW5wdXQoKSBsb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG4gXG4gIEBJbnB1dCgpIHNldCBhY3RpdmVUZXN0TW9kZSh2YWw6IGFueSkge1xuICAgIGlmICh2YWwgPT09IHRydWUpIHtcbiAgICAgIGRlYnVnZ2VyO1xuICAgIH1cbiAgfVxuICBAT3V0cHV0KCkgc2F2ZUZvcm06IEV2ZW50RW1pdHRlcjxJRm9ybVNlY3Rpb25bXT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBjYW5jZWxGb3JtOiBFdmVudEVtaXR0ZXI8SUZvcm1TZWN0aW9uW10+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgZHJvcERvd25DaGFuZ2VFdmVudDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBzZWN0aW9uQ2xpY2tlZEV2ZW50OiBFdmVudEVtaXR0ZXI8SUZvcm1TZWN0aW9uPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQFZpZXdDaGlsZHJlbignZHluYW1pY0NvbXBvbmVudENvbnRhaW5lcicsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KVxuICBkeW5hbWljQ29tcG9uZW50Q29udGFpbmVyOiBRdWVyeUxpc3Q8Vmlld0NvbnRhaW5lclJlZj47XG5cbiAgZHluYW1pY0Nhc2UgPSBFRm9ybUNvbnRyb2w7XG4gIHNhdmVGb3JtUGFnZTogU3Vic2NyaXB0aW9uO1xuICBwZXJtaXNzaW9uVHlwZSA9IEVQZXJtaXNzaW9uVHlwZTtcbiAgcm9sZXM6IHN0cmluZ1tdID0gW107XG4gIGlzRm9ybURpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG4gIGlzRm9ybUhpZGRlbjogYm9vbGVhbiA9IGZhbHNlO1xuICBjb21wb25lbnRzTGlzdDogSURpY3Rpb25hcnlbXSA9IFtdO1xuICBmaWxlVXBsb2FkVXJsczogYW55O1xuICBzaG93ZmlsZVVwbG9hZEVycm9yOiBib29sZWFuID0gZmFsc2U7XG4gIGNhcmRMaXN0OiBJRHluYW1pY0NhcmQ7XG4gIGNhbGVuZGFyUHJldmlvdXNWYWx1ZTogc3RyaW5nID0gJyc7XG4gIGRlZmF1bHREYXRlOiBzdHJpbmcgPSAnJztcbiAgbG9va3VwRm9jdXNPdXQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgY2FsZW5kYXJGb3JtYXQ6IHN0cmluZyA9ICdtbS9kZC95eSc7XG4gIHNldENhcmREYXRhOiBib29sZWFuID0gZmFsc2U7XG4gIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBkaWFsb2dSZWY6IGFueTtcblxuICAvLyBhcHBseSBjaGVja2VkL3VuQ2hlY2tlZCBwcm9wIGZvciBDaGVja0JveCBvZiB0aGUgRm9ybVxuICBjaGVja2VkOiBib29sZWFuID0gdHJ1ZTtcbiAgdW5DaGVja2VkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aGVudGljYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgZm9ybVNlcnZpY2U6IEZvcm1TZXJ2aWNlLFxuICAgIHByaXZhdGUgYWxlcnRTZXJ2aWNlOiBBbGVydFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplcixcbiAgICBwdWJsaWMgZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZSxcbiAgICBwcml2YXRlIGNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICAgIHByaXZhdGUgaHlwZXJsaW5rU2VydmljZSA6IEh5cGVybGlua1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBlbDogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIGRhdGVQaXBlOiBEYXRlUGlwZSxcbiAgICBwcml2YXRlIGdyaWRTZXJ2aWNlOiBHcmlkU2VydmljZSxcbiAgICBwcml2YXRlIHBhZ2VMb2dnZXJTZXJ2aWNlOiBQYWdlTG9nZ2VyU2VydmljZSxcbiAgICBwcml2YXRlIHJlbmRlcmVyMjogUmVuZGVyZXIyLFxuICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmUsXG4gICkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHt9XG5cbiAgLy8gYnJvd3NlciB0YWIgY2xvc2UgZXZlbnRcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OmJlZm9yZXVubG9hZCcsIFsnJGV2ZW50J10pXG4gIGJlZm9yZXVubG9hZEhhbmRsZXIoZXZlbnQ6IGFueSkge1xuICAgIGlmICh0aGlzLmZvcm1TZXJ2aWNlLmZpZWxkRm9jdXNlZE91dCB8fCB0aGlzLmdyaWRTZXJ2aWNlLmNvbHVtbkZvY3VzZWRPdXQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoKSB7XG4gICAgdGhpcy5mb3JtU2VydmljZS5zZXRUb29sdGlwKCk7XG4gICAgLy8gYXBwbHkgdXNlciByb2xlIHBlcm1pc3Npb25zIG9uIGZvcm1cbiAgICB0aGlzLnJvbGVzID0gdGhpcy5hdXRoU2VydmljZS5nZXRVc2VyUm9sZXMoKTtcbiAgICBpZiAoXG4gICAgICB0aGlzLmZvcm0gJiZcbiAgICAgIHRoaXMuZm9ybS5mb3JtU2VjdGlvbnMgJiZcbiAgICAgIHRoaXMuZm9ybS5mb3JtU2VjdGlvbnMubGVuZ3RoID4gMFxuICAgICkge1xuICAgICAgLy8gc3RhcnQgY2FyZExpc3QgcmVmZXJlbmNlIGJyZWFrIGZ1bmN0aW9uYWxpdHlcbiAgICAgIGxldCBmb3JtVmFsdWVzID0geyAuLi50aGlzLmZvcm0gfTtcblxuICAgICAgZm9ybVZhbHVlcy5mb3JtU2VjdGlvbnM/LmZvckVhY2goKGZvcm1TZWN0aW9uKSA9PiB7XG4gICAgICAgIGlmIChmb3JtU2VjdGlvbi5maWVsZHMpIHtcbiAgICAgICAgICBmb3JtU2VjdGlvbi5maWVsZHMuZm9yRWFjaCgoZmllbGQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jaGVja0ZpZWxkUmVxdWlyZWQoZmllbGQpO1xuICAgICAgICAgICAgaWYgKGZpZWxkLmlzUGFzc3dvcmQpIHtcbiAgICAgICAgICAgICAgZmllbGQudGV4dFR5cGUgPSAncGFzc3dvcmQnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gY29udmVydCBzdHJpbmcgdGltZSBpbnRvIGRhdGVcbiAgICAgICAgICAgIGlmIChmaWVsZD8uY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkNBTEVOREFSICYmIGZpZWxkPy5vbkNoYW5nZSkge1xuICAgICAgICAgICAgICBmaWVsZFsncHJldmlvdXNWYWx1ZSddID0gZmllbGQ/LnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBmaWVsZD8uY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkNBTEVOREFSICYmXG4gICAgICAgICAgICAgIGZpZWxkPy50aW1lT25seSAmJlxuICAgICAgICAgICAgICAoZmllbGQ/LnZhbHVlPy50b1N0cmluZygpLmluY2x1ZGVzKCdBTScpIHx8XG4gICAgICAgICAgICAgICAgZmllbGQ/LnZhbHVlPy50b1N0cmluZygpLmluY2x1ZGVzKCdQTScpKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGZpZWxkLnZhbHVlID0gdXRpbGl0aWVzLnNldFRpbWVJbkRhdGUoZmllbGQudmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBmaWVsZD8uY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkFVVE9DT01QTEVURSAmJlxuICAgICAgICAgICAgICBmaWVsZD8udmFsdWUgJiZcbiAgICAgICAgICAgICAgZmllbGQ/LnZhbHVlPy5sZW5ndGggPiAwXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBmaWVsZD8udmFsdWUubWFwKFxuICAgICAgICAgICAgICAgICh2YWx1ZTogYW55KSA9PiB2YWx1ZVtmaWVsZD8uZGlzcGxheUZpZWxkXVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgdmFsdWUgJiZcbiAgICAgICAgICAgICAgICAodmFsdWUudG9TdHJpbmcoKT8uaW5jbHVkZXMoJzsnKSB8fFxuICAgICAgICAgICAgICAgICAgdmFsdWUudG9TdHJpbmcoKT8uaW5jbHVkZXMoJywnKSlcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgZmllbGQudmFsdWUgPSB2YWx1ZVxuICAgICAgICAgICAgICAgICAgLnRvU3RyaW5nKClcbiAgICAgICAgICAgICAgICAgIC5yZXBsYWNlQWxsKCcsJywgJzsnKVxuICAgICAgICAgICAgICAgICAgPy5zcGxpdCgnOycpXG4gICAgICAgICAgICAgICAgICA/Lm1hcCgodmFsOiBhbnkpID0+ICh7IFtmaWVsZD8uZGlzcGxheUZpZWxkXTogdmFsIH0pKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gY29udmVydCB0aGUgbXVsdGlTZWxlY3Qgc3RyaW5nIHZhbHVlIGluIGFycmF5XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGZpZWxkPy5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuTVVMVElTRUxFQ1QgJiZcbiAgICAgICAgICAgICAgZmllbGQudmFsdWUgJiZcbiAgICAgICAgICAgICAgIUFycmF5LmlzQXJyYXkoZmllbGQudmFsdWUpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgaWYgKGZpZWxkLnZhbHVlPy50b1N0cmluZygpPy5pbmNsdWRlcygnLCcpKSB7XG4gICAgICAgICAgICAgICAgZmllbGQudmFsdWUgPSBmaWVsZC52YWx1ZS5yZXBsYWNlKC9cXHMqLFxccyovZywgXCIsXCIpPy50b1N0cmluZygpPy5zcGxpdCgnLCcpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZpZWxkLnZhbHVlID0gW2ZpZWxkLnZhbHVlXTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGZpZWxkPy5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuQ0FSRCkge1xuICAgICAgICAgICAgICB0aGlzLmZvcm0gPSB7fTtcbiAgICAgICAgICAgICAgZmllbGQ/LmNhcmQ/LmRhdGE/LmZvckVhY2goKHg6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgIGZpZWxkPy5jYXJkPy5mb3JtU2VjdGlvbnMgJiZcbiAgICAgICAgICAgICAgICAgIGZpZWxkPy5jYXJkPy5mb3JtU2VjdGlvbnM/Lmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIHguZHluYW1pY0Zvcm0gPSB7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1TZWN0aW9uczogSlNPTi5wYXJzZShcbiAgICAgICAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeShmaWVsZD8uY2FyZD8uZm9ybVNlY3Rpb25zKVxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB0aGlzLmZvcm0gPSBmb3JtVmFsdWVzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gRW5kIGNhcmRMaXN0IHJlZmVyZW5jZSBicmVhayBmdW5jdGlvbmFsaXR5XG4gICAgICAgICAgICBpZiAoZmllbGQ/LmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5DSEVDS0JPWCkge1xuICAgICAgICAgICAgICBmaWVsZC52YWx1ZSA9XG4gICAgICAgICAgICAgICAgZmllbGQ/LnZhbHVlPy50b1N0cmluZygpPy50b0xvd2VyQ2FzZSgpID09PSAndHJ1ZScgfHxcbiAgICAgICAgICAgICAgICAgIGZpZWxkPy52YWx1ZT8udG9TdHJpbmcoKT8udG9Mb3dlckNhc2UoKSA9PT0gJ3knIHx8XG4gICAgICAgICAgICAgICAgICBmaWVsZD8udmFsdWU/LnRvU3RyaW5nKCkgPT09ICcxJ1xuICAgICAgICAgICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgICAgICAgICA6IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMuYXBwbHlVc2VyUGVybWlzc2lvbnMoKTtcbiAgICAgIHRoaXMucmVtb3ZlV2hpdGVTcGFjZXMoKTtcbiAgICAgIHRoaXMuc2V0SHlwZXJsaW5rQ29tcG9uZW50Um91dGUoKTtcbiAgICAgIHRoaXMuc2V0Q2FsYW5kZXJXaWR0aCgpO1xuICAgICAgdGhpcy5yZU9yZGVyRm9ybVNlY3Rpb25zKCk7XG4gICAgfVxuICB9XG5cbiAgcmVPcmRlckZvcm1TZWN0aW9ucygpIHtcbiAgICBpZiAodGhpcy5mb3JtICYmIHRoaXMuZm9ybS5mb3JtU2VjdGlvbnM/Lmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRVc2VySW5mbyA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ0N1cnJlbnRVc2VySW5mbycpKTtcbiAgICAgIGxldCB1c2VyU2VjdGlvbiA9IGN1cnJlbnRVc2VySW5mbz8ucGFnZVNlY3Rpb25zPy5sZW5ndGggPiAwID8gY3VycmVudFVzZXJJbmZvLnBhZ2VTZWN0aW9ucyA6IFtdO1xuICAgICAgbGV0IHBhZ2VVcmwgPSB0aGlzLnJvdXRlci51cmw/LnN1YnN0cmluZygxKVxuICAgICAgaWYgKHBhZ2VVcmwuaW5jbHVkZXMoJz8nKSkge1xuICAgICAgICBwYWdlVXJsID0gcGFnZVVybC5zcGxpdCgnPycpWzBdO1xuICAgICAgfVxuICAgICAgaWYgKHVzZXJTZWN0aW9uICYmIHVzZXJTZWN0aW9uLnJvbGUpIHtcbiAgICAgICAgaWYgKHRoaXMucm9sZXM/Lmxlbmd0aCA+IDAgJiYgdGhpcy5yb2xlcy5pbmNsdWRlcyh1c2VyU2VjdGlvbi5yb2xlKSkge1xuICAgICAgICAgIHRoaXMuc2V0Rm9ybVNlY3Rpb25zKHVzZXJTZWN0aW9uLCBwYWdlVXJsKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh1c2VyU2VjdGlvbikge1xuICAgICAgICB0aGlzLnNldEZvcm1TZWN0aW9ucyh1c2VyU2VjdGlvbiwgcGFnZVVybCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc2V0Rm9ybVNlY3Rpb25zKHVzZXJTZWN0aW9uLCBwYWdlVXJsKSB7XG4gICAgdGhpcy5mb3JtLmZvcm1TZWN0aW9ucy5mb3JFYWNoKChzZWN0aW9uLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgcGFnZVNlY3Rpb246IGFueSA9IHVzZXJTZWN0aW9uPy5maW5kKChwYWdlU2VjdGlvbjogYW55KSA9PiBwYWdlU2VjdGlvbj8uc2VjdGlvbj8udG9Mb3dlckNhc2UoKSA9PT0gc2VjdGlvbj8ubmFtZT8udG9Mb3dlckNhc2UoKSk7XG4gICAgICBpZiAocGFnZVNlY3Rpb24gJiYgcGFnZVNlY3Rpb24ucGFnZSAmJiBwYWdlU2VjdGlvbi5wYWdlPy50b0xvd2VyQ2FzZSgpID09PSBwYWdlVXJsPy50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgIGNvbnN0IHJlT3JkZXJTZWN0aW9uID0geyAuLi5zZWN0aW9uIH07XG4gICAgICAgIHRoaXMuZm9ybS5mb3JtU2VjdGlvbnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgdGhpcy5mb3JtLmZvcm1TZWN0aW9ucy5zcGxpY2UocGFnZVNlY3Rpb24/Lm9yZGVyIC0gMSwgMCwgcmVPcmRlclNlY3Rpb24pO1xuICAgICAgfVxuICAgIH0pXG4gIH1cbiAgY2hlY2tGaWVsZFJlcXVpcmVkKGZpZWxkOiBhbnkpIHtcbiAgIGlmKGZpZWxkLnZhbGlkYXRpb25zPy5maW5kKHZhbGlkYXRpb249PnZhbGlkYXRpb24udHlwZT09PUVWYWxpZGF0b3IuUkVRVUlSRUQpKXtcbiAgICAgIGZpZWxkLnJlcXVpcmVkRmllbGQgPSB0cnVlO1xuICAgfVxuICB9XG5cbiAgLy8gc2V0IGNhbGVuZGFyIDIgT3IgNCBkaWdpdCB5ZWFyIGZvcm1hdFxuICBjYWxlbmRhcklucHV0VmFsdWUoZm9ybUZpZWxkOiBJRm9ybUZpZWxkKSB7XG4gICAgZG9jdW1lbnRcbiAgICAgIC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGZvcm1GaWVsZC5maWVsZClbMF1cbiAgICAgID8uYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLCAodmFsOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKCF2YWw/LnRhcmdldD8udmFsdWU/LmluY2x1ZGVzKCcvJykpIHtcbiAgICAgICAgICBpZiAodmFsPy50YXJnZXQ/LnZhbHVlPy5sZW5ndGggPT0gOCB8fCBmb3JtRmllbGQ/LmZvcm1hdD8udHlwZSA9PT0gRUZvcm1hdFR5cGUuU0hPUlREQVRFKSB7XG4gICAgICAgICAgICB2YWwudGFyZ2V0LnZhbHVlID0gdmFsPy50YXJnZXQ/LnZhbHVlPy5yZXBsYWNlKC8oXFxkezJ9KShcXGR7Mn0pKFxcZHs0fSkvLCAnJDEvJDIvJDMnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSBpZiAodmFsPy50YXJnZXQ/LnZhbHVlLmxlbmd0aCA9PSA2KSB7XG4gICAgICAgICAgICB2YWwudGFyZ2V0LnZhbHVlID0gdmFsPy50YXJnZXQ/LnZhbHVlPy5yZXBsYWNlKC8oXFxkezJ9KSg/PVxcZCkvZywgJyQxLycpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICBmb3JtRmllbGQudmFsdWUgPSB2YWw/LnRhcmdldD8udmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHllYXIgPSB2YWw/LnRhcmdldD8udmFsdWU/LnRvU3RyaW5nKCkuc3BsaXQoJy8nKVsyXTtcbiAgICAgICAgaWYgKHllYXI/Lmxlbmd0aCA9PT0gNCkge1xuICAgICAgICAgIHRoaXMuY2FsZW5kYXJGb3JtYXQgPSAnbW0vZGQveXknO1xuICAgICAgICAgIGZvcm1GaWVsZC52YWx1ZSA9IG5ldyBEYXRlKHZhbD8udGFyZ2V0Py52YWx1ZSk/LnRvTG9jYWxlRGF0ZVN0cmluZyhcbiAgICAgICAgICAgICdlbi1VUydcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKHllYXI/Lmxlbmd0aCkge1xuICAgICAgICAgIHRoaXMuY2FsZW5kYXJGb3JtYXQgPSAnbW0vZGQveSc7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgLy8gc2V0IHBlcmNlbnQgYW5kIGRlY2ltYWwgdmFsdWVzXG4gIHNldG51bWVyaWN2YWx1ZXMoKSB7XG4gICAgdGhpcy5mb3JtPy5mb3JtU2VjdGlvbnM/LmZvckVhY2goKGZvcm1TZWN0aW9uKSA9PiB7XG4gICAgICBpZiAoZm9ybVNlY3Rpb24uZmllbGRzKSB7XG4gICAgICAgIGZvcm1TZWN0aW9uLmZpZWxkcy5mb3JFYWNoKChmaWVsZDogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKGZpZWxkPy5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuTlVNRVJJQykge1xuICAgICAgICAgICAgY29uc3QgZGlnaXRzSW5mbyA9IGZpZWxkPy5mb3JtYXQ/LmZvcm1hdFBhcmFtcz8uZGlnaXRzSW5mbztcbiAgICAgICAgICAgIGlmIChmaWVsZC52YWx1ZSkge1xuICAgICAgICAgICAgICBpZiAoZmllbGQ/LmZvcm1hdD8udHlwZSA9PT0gJ3BlcmNlbnQnKSB7XG4gICAgICAgICAgICAgICAgaWYgKGZpZWxkLmZvcm1hdD8uZm9ybWF0UGFyYW1zPy5hbGxvd0NhbGN1bGF0ZSkge1xuICAgICAgICAgICAgICAgICAgaWYgKGRpZ2l0c0luZm8pIHtcbiAgICAgICAgICAgICAgICAgICAgZmllbGQudmFsdWUgPSBwYXJzZUZsb2F0KFxuICAgICAgICAgICAgICAgICAgICAgIChmaWVsZC52YWx1ZSAqIDEwMCk/LnRvU3RyaW5nKClcbiAgICAgICAgICAgICAgICAgICAgKS50b0ZpeGVkKGRpZ2l0c0luZm8pO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZmllbGQudmFsdWUgPSBmaWVsZC52YWx1ZSAqIDEwMDtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRpZ2l0c0luZm8pIHtcbiAgICAgICAgICAgICAgICAgIGZpZWxkLnZhbHVlID0gcGFyc2VGbG9hdChmaWVsZC52YWx1ZSkudG9GaXhlZChkaWdpdHNJbmZvKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoZmllbGQ/LmZvcm1hdD8udHlwZSA9PT0gJ2RlY2ltYWwnKSB7XG4gICAgICAgICAgICAgICAgZmllbGQudmFsdWUgPSBwYXJzZUZsb2F0KGZpZWxkLnZhbHVlKS50b0ZpeGVkKFxuICAgICAgICAgICAgICAgICAgZGlnaXRzSW5mbyA/IGRpZ2l0c0luZm8gOiAyXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgZm9ybSBoYXMgYW55IGZpZWxkIHdpdGggZHluYW1pYyBjb21wb25lbnQ7XG4gICAqIENyZWF0ZXMgY29tcG9uZW50IGluc3RhbmNlIHVzaW5nIGNvbXBvbmVudEZhY3RvcnlSZXNvbHZlclxuICAgKiBJbmplY3RzIGNvbXBvbmVudCB0aHJvdWdoIHZpZXdSZWYuY3JlYXRlQ29tcG9uZW50KClcbiAgICogUGFzc2VzIGRhdGEgdG8gY29tcG9uZW50XG4gICAqIFN1YnNjcmliZXMgdG8gdGhlIGV2ZW50cyBwYXNzZWQgdG8gdGhlIGNvbXBvbmVudHNcbiAgICogRmluYWxseSBmb3JjZXMgQW5ndWxhciB0byBkZXRlY2ggY2hhbmdlc1xuICAgKi9cbiAgbG9hZER5bmFtaWNDb21wb25lbnRzKCkge1xuICAgIHRoaXMuY29tcG9uZW50c0xpc3QgPSBbXTtcbiAgICB0aGlzLmZvcm0/LmZvcm1TZWN0aW9ucz8uZm9yRWFjaCgoZm9ybVNlY3Rpb24pID0+IHtcbiAgICAgIGZvcm1TZWN0aW9uLmZpZWxkcy5mb3JFYWNoKChmaWVsZDogYW55LCBmaWVsZEluZGV4KSA9PiB7XG4gICAgICAgIGlmIChmaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuQ09NUE9ORU5UKSB7XG4gICAgICAgICAgY29uc3Qgdmlld1JlZjogYW55ID0gdGhpcy5keW5hbWljQ29tcG9uZW50Q29udGFpbmVyLmZpbmQoXG4gICAgICAgICAgICAoeCkgPT5cbiAgICAgICAgICAgICAgeC5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuaWQgPT0gYCR7Zm9ybVNlY3Rpb24ubmFtZX0tJHtmaWVsZEluZGV4fWBcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIGNvbXBvbmVudDogQ29tcG9uZW50LFxuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIGhhbmRsZXJzLFxuICAgICAgICAgIH0gPSBmaWVsZC5jb21wb25lbnRDb250cm9sO1xuICAgICAgICAgIGNvbnN0IGNvbXBvbmVudEZhY3Rvcnk6IENvbXBvbmVudEZhY3Rvcnk8YW55PiA9XG4gICAgICAgICAgICB0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShDb21wb25lbnQpO1xuICAgICAgICAgIC8vIFBhc3NpbmcgZGF0YSB0byBjb21wb25lbnRcbiAgICAgICAgICBjb25zdCBjb21wb25lbnRSZWYgPSB2aWV3UmVmPy5jcmVhdGVDb21wb25lbnQoY29tcG9uZW50RmFjdG9yeSk7XG4gICAgICAgICAgaWYgKGNvbXBvbmVudFJlZikge1xuICAgICAgICAgICAgaWYoZmllbGQ/LmNvbXBvbmVudENvbnRyb2w/LmlkKXtcbiAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlcjIuYWRkQ2xhc3MoY29tcG9uZW50UmVmLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQsIGZpZWxkLmNvbXBvbmVudENvbnRyb2wuaWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMoZGF0YSA/PyB7fSkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZVtrZXldID0gdmFsdWU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuY29tcG9uZW50c0xpc3QucHVzaCh7XG4gICAgICAgICAgICAgIG5hbWU6IGZpZWxkLmNvbXBvbmVudENvbnRyb2w/LmlkLFxuICAgICAgICAgICAgICB2YWx1ZTogY29tcG9uZW50UmVmLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBTdWJzY3JpYmVzIHRvIHRoZSBldmVudHMgcGFzc2VkIHRvIHRoZSBjb21wb25lbnRzXG4gICAgICAgICAgICBpZiAoaGFuZGxlcnMpIHtcbiAgICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMoaGFuZGxlcnMpLmZvckVhY2goKFtldmVudCwgaGFuZGxlcl06IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIChjb21wb25lbnRSZWYuaW5zdGFuY2VbZXZlbnRdIGFzIEV2ZW50RW1pdHRlcjxhbnk+KT8uc3Vic2NyaWJlKFxuICAgICAgICAgICAgICAgICAgKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZXIocmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBpbnZva2UgY2hhbmdlIGRldGVjdGlvblxuICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvL2ludm9rZSB3aGVuIGZpbGUgdXBsb2FkIE9SIGRlbGV0ZSBhIGZpbGVcbiAgZmlsZU9uY2hhbmdlRXZlbnQoKSB7XG4gICAgdGhpcy5zZXRDYXJkRGF0YSA9ICF0aGlzLnNldENhcmREYXRhO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIC8vIGxvYWQgZHluYW1pYyBjb21wb25lbnRzIGlmIGV4aXN0IGluIGZvcm1cbiAgICB0aGlzLnNldG51bWVyaWN2YWx1ZXMoKTtcbiAgICB0aGlzLm9uRHluYW1pY0Zvcm1TdGF0ZUNoYW5nZSgpO1xuICAgIHRoaXMubG9hZER5bmFtaWNDb21wb25lbnRzKCk7XG4gICAgdGhpcy5zZXRDYXJkUmVzcG9uc2VJZCgpO1xuICB9XG5cbiAgc2V0Q2FyZFJlc3BvbnNlSWQoKSB7XG4gICAgdXRpbGl0aWVzLm9uRHluYW1pY0NhcmRTdGF0ZUNoYW5nZSgpLnN1YnNjcmliZSgocmVzKSA9PiB7XG4gICAgICBpZihyZXMuZGF0YT8uaXNTYXZlKXtcbiAgICAgICAgdGhpcy5zZXRDYXJkSWRzKHJlcy5kYXRhKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2V0RGVsZXRlQ2FyZElkKHJlcy5kYXRhPy5jYXJkRGF0YSwgcmVzLmRhdGE/LmR5bmFtaWNGb3JtKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHNldERlbGV0ZUNhcmRJZCh1cGRhdGVkQ2FyZERhdGE6YW55LCBkeW5hbWljRm9ybTogSUR5bmFtaWNGb3JtKXtcbiAgICB0aGlzLmZvcm0/LmZvcm1TZWN0aW9ucz8uZm9yRWFjaCgoc2VjdGlvbjpJRm9ybVNlY3Rpb24pPT57XG4gICAgICBjb25zdCBjYXJkQ29udHJvbCA9IHNlY3Rpb24uZmllbGRzLmZpbmQoKGZpZWxkOklGb3JtRmllbGQpPT4gZmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkNBUkQpO1xuICAgICAgaWYoY2FyZENvbnRyb2wpe1xuICAgICAgICBjYXJkQ29udHJvbC5jYXJkLmRhdGEgPSB1cGRhdGVkQ2FyZERhdGE7XG4gICAgICB9O1xuICAgIH0pO1xuICAgIGR5bmFtaWNGb3JtID0gdGhpcy5mb3JtO1xuICB9XG5cbiAgc2V0Q2FyZElkcyhyZXMpIHtcbiAgICByZXMucmVjb3JkcyA9IHRoaXMuZ3JpZFNlcnZpY2Uuc2V0RGF0YUZpZWxkcyhyZXMucmVjb3Jkcyk7XG4gICAgcmVzLnJlY29yZHM/LmZvckVhY2goKHJlY29yZDogYW55LCByZWNvcmRJbmRleDogYW55KSA9PiB7XG4gICAgICBjb25zdCBtYXRjaENhcmQgPSByZXMuY2FyZHNJbmZvPy5maW5kKFxuICAgICAgICAoaW5mbywgY2FyZEluZGV4KSA9PlxuICAgICAgICAgIHJlY29yZEluZGV4ID09PSBjYXJkSW5kZXggJiYgcmVjb3JkW3Jlcy5maWVsZE5hbWU/LnRvTG93ZXJDYXNlKCldXG4gICAgICApO1xuICAgICAgaWYgKG1hdGNoQ2FyZCAmJiBPYmplY3Qua2V5cyhtYXRjaENhcmQpPy5sZW5ndGggPiAwKSB7XG4gICAgICAgIG1hdGNoQ2FyZFtyZXMuZmllbGROYW1lXSA9IHJlY29yZFtyZXMuZmllbGROYW1lPy50b0xvd2VyQ2FzZSgpXTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAodGhpcy5mb3JtPy5mb3JtU2VjdGlvbnM/Lmxlbmd0aCA+IDApIHtcbiAgICAgIGxldCBmb3JtRmllbGQ6IElGb3JtRmllbGQ7XG4gICAgICB0aGlzLmZvcm0/LmZvcm1TZWN0aW9ucy5mb3JFYWNoKChmb3JtU2VjdGlvbikgPT4ge1xuICAgICAgICBpZihyZXMuY2FyZElkKXtcbiAgICAgICAgICBmb3JtRmllbGQgPSBmb3JtU2VjdGlvbi5maWVsZHM/LmZpbmQoXG4gICAgICAgICAgICAoZmllbGQpID0+IGZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5DQVJEICYmIGZpZWxkLmlkID09PSByZXMuY2FyZElkXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmb3JtRmllbGQgPSBmb3JtU2VjdGlvbi5maWVsZHM/LmZpbmQoXG4gICAgICAgICAgICAoZmllbGQpID0+IGZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5DQVJEXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgaWYgKGZvcm1GaWVsZCkge1xuICAgICAgICAgIGlmIChyZXMuY2FyZHNJbmZvPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICByZXMuY2FyZHNJbmZvPy5mb3JFYWNoKChjYXJkSWQpID0+IHtcbiAgICAgICAgICAgICAgY2FyZElkLmlkID0gbnVsbDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmb3JtRmllbGQuY2FyZC5kYXRhID0gcmVzLmNhcmRzSW5mbztcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMuc2V0Q2FyZERhdGEgPSAhdGhpcy5zZXRDYXJkRGF0YTtcbiAgfVxuXG4gIHJlbW92ZVdoaXRlU3BhY2VzKCkge1xuICAgIHRoaXMuZm9ybT8uZm9ybVNlY3Rpb25zPy5mb3JFYWNoKChzZWN0aW9uKSA9PiB7XG4gICAgICBpZiAoc2VjdGlvbi5jbGFzcykgc2VjdGlvbi5jbGFzcyA9IHNlY3Rpb24uY2xhc3MucmVwbGFjZSgvXFxzL2csICcnKTtcbiAgICB9KTtcbiAgfVxuXG4gIHNldEh5cGVybGlua0NvbXBvbmVudFJvdXRlKCkge1xuICAgIHRoaXMuZm9ybT8uZm9ybVNlY3Rpb25zPy5mb3JFYWNoKChmb3JtU2VjdGlvbikgPT4ge1xuICAgICAgZm9ybVNlY3Rpb24uZmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBmaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuSFlQRVJMSU5LICYmXG4gICAgICAgICAgZmllbGQuaHlwZXJsaW5rPy5jb21wb25lbnRcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5yb3V0ZXIucmVzZXRDb25maWcoW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBwYXRoOiAnaHlwZXJsaW5rJyArIGZpZWxkLmxhYmVsLFxuICAgICAgICAgICAgICBjb21wb25lbnQ6IGZpZWxkLmh5cGVybGluay5jb21wb25lbnQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLi4udGhpcy5yb3V0ZXIuY29uZmlnLFxuICAgICAgICAgIF0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGJyb3dzZXJUYWJDbG9zZUV2ZW50KGV2ZW50OiBib29sZWFuID0gZmFsc2UpIHtcbiAgICB0aGlzLmZvcm1TZXJ2aWNlLmZpZWxkRm9jdXNlZE91dCA9IGV2ZW50O1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKXtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMaXN0ZW5zIGFueSBjaGFuZ2UgaW4gRHluYW1pYyBGb3JtIGNvbXBvbmVudCBTdGF0ZVxuICAgKi9cbiAgb25EeW5hbWljRm9ybVN0YXRlQ2hhbmdlKCkge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gdXRpbGl0aWVzLm9uRHluYW1pY0Zvcm1TdGF0ZUNoYW5nZSgpLnN1YnNjcmliZSgocmVzcG9uc2UpID0+IHtcbiAgICAgIGlmIChyZXNwb25zZS5pZCAmJiByZXNwb25zZS5kYXRhKSB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudFJlZk9iaiA9IHRoaXMuY29tcG9uZW50c0xpc3QuZmluZChcbiAgICAgICAgICAoeCkgPT4geC5uYW1lID09PSByZXNwb25zZS5pZFxuICAgICAgICApO1xuICAgICAgICBpZiAoY29tcG9uZW50UmVmT2JqKSB7XG4gICAgICAgICAgT2JqZWN0LmVudHJpZXMocmVzcG9uc2UuZGF0YSA/PyB7fSkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgICBjb21wb25lbnRSZWZPYmoudmFsdWUuaW5zdGFuY2Vba2V5XSA9IHZhbHVlO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmKHJlc3BvbnNlPy5sb2FkQ29tcG9uZW50KXtcbiAgICAgICAgICAgIGNvbXBvbmVudFJlZk9iai52YWx1ZS5pbnN0YW5jZS5uZ09uSW5pdCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLy8gYXBwbHkgdXNlciByb2xlIHBlcm1pc3Npb25zXG4gIGFwcGx5VXNlclBlcm1pc3Npb25zKCkge1xuICAgIGlmICh0aGlzLmZvcm0gJiYgdGhpcy5mb3JtLmZvcm1TZWN0aW9ucykge1xuICAgICAgbGV0IHRvdGFsRmllbGRzOiBudW1iZXIgPSAwO1xuICAgICAgbGV0IGRpc2FibGVkRmllbGRzOiBudW1iZXIgPSAwO1xuICAgICAgbGV0IGhpZGRlbkZpZWxkczogbnVtYmVyID0gMDtcblxuICAgICAgdGhpcy5mb3JtLmZvcm1TZWN0aW9ucy5mb3JFYWNoKChmb3JtU2VjdGlvbikgPT4ge1xuICAgICAgICBpZiAoZm9ybVNlY3Rpb24uZmllbGRzKSB7XG4gICAgICAgICAgZm9ybVNlY3Rpb24uZmllbGRzLmZvckVhY2goKGZvcm1GaWVsZCkgPT4ge1xuICAgICAgICAgICAgbGV0IHBlcm1pc3Npb25zOiBhbnkgPSBmb3JtRmllbGQucGVybWlzc2lvbnM7XG4gICAgICAgICAgICBsZXQgc2VjdGlvblBlcm1pc3Npb25zOiBhbnkgPSBbXTtcbiAgICAgICAgICAgIGlmICghcGVybWlzc2lvbnMpIHNlY3Rpb25QZXJtaXNzaW9ucyA9IGZvcm1TZWN0aW9uLnBlcm1pc3Npb25zO1xuICAgICAgICAgICAgaWYgKCFwZXJtaXNzaW9ucykgcGVybWlzc2lvbnMgPSB0aGlzLmZvcm0ucGVybWlzc2lvbnM7XG4gICAgICAgICAgICBsZXQgaGFzVmFsaWRFZGl0UGVybWlzc2lvbiA9IGZhbHNlO1xuXG4gICAgICAgICAgICBpZiAoc2VjdGlvblBlcm1pc3Npb25zICYmIHNlY3Rpb25QZXJtaXNzaW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIHNlY3Rpb25QZXJtaXNzaW9ucy5mb3JFYWNoKChwZXJtaXNzaW9uOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgaXNWYWxpZDogYm9vbGVhbiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHBlcm1pc3Npb24ucm9sZXMuZm9yRWFjaCgocm9sZTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWQgJiYgdGhpcy5yb2xlcyAmJiB0aGlzLnJvbGVzLmluY2x1ZGVzKHJvbGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlzVmFsaWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBpZiAocGVybWlzc2lvbi50eXBlID09PSBFUGVybWlzc2lvblR5cGUuVklFVykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNWYWxpZCkge1xuICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5kaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgZm9ybVNlY3Rpb24uaGlkZGVuID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwZXJtaXNzaW9uLnR5cGUgPT09IEVQZXJtaXNzaW9uVHlwZS5FRElUKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1ZhbGlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgZm9ybVNlY3Rpb24uaGlkZGVuID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgZm9ybVNlY3Rpb24uYWNjb3JkaW9uRGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgIGZvcm1TZWN0aW9uLmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQuZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwZXJtaXNzaW9ucyAmJiBwZXJtaXNzaW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIHBlcm1pc3Npb25zLmZvckVhY2goKHBlcm1pc3Npb246IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBpc1ZhbGlkOiBib29sZWFuID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgaWYgKHBlcm1pc3Npb24ucm9sZXMgJiYgcGVybWlzc2lvbi5yb2xlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICBwZXJtaXNzaW9uLnJvbGVzLmZvckVhY2goKHJvbGU6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWQgJiYgdGhpcy5yb2xlcyAmJiB0aGlzLnJvbGVzLmluY2x1ZGVzKHJvbGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgaXNWYWxpZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICBwZXJtaXNzaW9uLnR5cGUgPT09IEVQZXJtaXNzaW9uVHlwZS5WSUVXICYmXG4gICAgICAgICAgICAgICAgICAgICFoYXNWYWxpZEVkaXRQZXJtaXNzaW9uXG4gICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzVmFsaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQuZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5oaWRkZW4gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBlcm1pc3Npb24udHlwZSA9PT0gRVBlcm1pc3Npb25UeXBlLkVESVQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzVmFsaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICBoYXNWYWxpZEVkaXRQZXJtaXNzaW9uID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQuZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQuaGlkZGVuID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLnBlcm1pc3Npb25zICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQucGVybWlzc2lvbnMubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYoZm9ybVNlY3Rpb24uZGlzYWJsZWQpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtU2VjdGlvbi5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybVNlY3Rpb24uYWNjb3JkaW9uRGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybVNlY3Rpb24uZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybVNlY3Rpb24uYWNjb3JkaW9uRGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0b3RhbEZpZWxkcysrO1xuXG4gICAgICAgICAgICBpZiAoZm9ybUZpZWxkLmRpc2FibGVkKSB7XG4gICAgICAgICAgICAgIGRpc2FibGVkRmllbGRzKys7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChmb3JtRmllbGQuaGlkZGVuKSB7XG4gICAgICAgICAgICAgIGhpZGRlbkZpZWxkcysrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5pc0Zvcm1EaXNhYmxlZCA9IHRvdGFsRmllbGRzID4gMCAmJiB0b3RhbEZpZWxkcyA9PT0gZGlzYWJsZWRGaWVsZHM7XG4gICAgICB0aGlzLmlzRm9ybUhpZGRlbiA9IHRvdGFsRmllbGRzID4gMCAmJiB0b3RhbEZpZWxkcyA9PT0gaGlkZGVuRmllbGRzO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBPcGVuIElGcmFtZSBpbiBoeXBlcmxpbmsgQ29udHJvbFxuICAgKi9cbiAgc2VjdGlvbkRpc2FibGVkKGZvcm1TZWN0aW9uOiBJRm9ybVNlY3Rpb24pIHtcbiAgICBpZiAoZm9ybVNlY3Rpb24uZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLmRpc2FibGVkU2VjdGlvbkZpZWxkcyhmb3JtU2VjdGlvbiwgdHJ1ZSk7XG4gICAgfSBlbHNlIGlmKGZvcm1TZWN0aW9uLmRpc2FibGVkID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuIHRoaXMuZGlzYWJsZWRTZWN0aW9uRmllbGRzKGZvcm1TZWN0aW9uLCBmYWxzZSk7XG4gICAgfWVsc2Uge1xuICAgICAgcmV0dXJuIGZvcm1TZWN0aW9uO1xuICAgIH1cbiAgfVxuXG4gIGRpc2FibGVkU2VjdGlvbkZpZWxkcyhmb3JtU2VjdGlvbjogSUZvcm1TZWN0aW9uLCBkaXNhYmxlZDogYm9vbGVhbil7XG4gICAgZm9ybVNlY3Rpb24uZmllbGRzLm1hcCgoZmllbGQ6IElGb3JtRmllbGQpID0+IHtcbiAgICAgIGZpZWxkLmRpc2FibGVkID0gZGlzYWJsZWQ7XG4gICAgfSk7XG4gICAgcmV0dXJuIGZvcm1TZWN0aW9uO1xuICB9XG5cbiAgbG9hZElGcmFtZShmb3JtRmllbGQ6IElGb3JtRmllbGQpIHtcbiAgICB0aGlzLmhhbmRsZUNsaWNrRXZlbnQoZm9ybUZpZWxkKTtcbiAgICBjb25zdCByZWYgPSB0aGlzLmRpYWxvZ1NlcnZpY2Uub3BlbihJZnJhbWVDb21wb25lbnQsIHtcbiAgICAgIGhlYWRlcjogJ0h5cGVybGluaycsXG4gICAgICB3aWR0aDogZm9ybUZpZWxkLmh5cGVybGluaz8ud2lkdGggPyBmb3JtRmllbGQuaHlwZXJsaW5rLndpZHRoIDogJzkwJScsXG4gICAgICBoZWlnaHQ6IGZvcm1GaWVsZC5oeXBlcmxpbms/LmhlaWdodCA/IGZvcm1GaWVsZC5oeXBlcmxpbmsuaGVpZ2h0IDogJzgwJScsXG4gICAgICBkYXRhOiB7IHZhbHVlOiBmb3JtRmllbGQuaHlwZXJsaW5rPy5saW5rLCBpRnJhbWVJZDogZm9ybUZpZWxkLmxhYmVsIH0sXG4gICAgfSk7XG4gICAgdGhpcy5zZXREeW5hbWljRGlhbG9nUmVmKHJlZik7XG4gICAgdGhpcy5uZ1pvbmUub25TdGFibGVcbiAgICAucGlwZSh0YWtlKDEpKSAvLyBFbWl0IG9ubHkgb25jZSB3aGVuIHRoZSB6b25lIGJlY29tZXMgc3RhYmxlXG4gICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICBkcmFnZ2FibGVEaWFsb2coZm9ybUZpZWxkPy5maWVsZCk7XG4gICAgfSk7XG4gICAgcmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKChyZXMpID0+IHtcbiAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgaWYgKGZvcm1GaWVsZC5vblJldHVybikge1xuICAgICAgICAgIGZvcm1GaWVsZC5vblJldHVybihyZXMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogb3BlbiBEaWFsb2cgaW4gaHlwZXJsaW5rIENvbnRyb2xcbiAgICovXG4gIGh5cGVybGlua0RpYWxvZyhmb3JtRmllbGQ6IElGb3JtRmllbGQsIGV2ZW50OiBhbnkpIHtcbiAgICBpZiAoZm9ybUZpZWxkLmh5cGVybGluaz8udGFyZ2V0ID09PSBFSHlwZXJsaW5rLkJMQU5LKSB7XG4gICAgICB2YXIgdmFsdWUgPSBmb3JtRmllbGQuaHlwZXJsaW5rLnBhcmFtcztcbiAgICAgIHdpbmRvdy5vcGVuKCdoeXBlcmxpbmsnICsgZm9ybUZpZWxkLmxhYmVsKTtcbiAgICB9IGVsc2UgaWYgKGZvcm1GaWVsZC5oeXBlcmxpbms/LnRhcmdldCA9PT0gRUh5cGVybGluay5TRUxGKSB7XG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJ2h5cGVybGluaycgKyBmb3JtRmllbGQubGFiZWxdLCB7XG4gICAgICAgIHF1ZXJ5UGFyYW1zOiBmb3JtRmllbGQuaHlwZXJsaW5rLnBhcmFtcyxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoZm9ybUZpZWxkLmh5cGVybGluaz8udGFyZ2V0ID09PSBFSHlwZXJsaW5rLkRJQUxPRykge1xuICAgICAgdGhpcy5vbkNsaWNrRXZlbnQoZm9ybUZpZWxkKTtcbiAgICAgIGlmIChldmVudCAmJiBldmVudC5jdHJsS2V5ICYmIGZvcm1GaWVsZC5oeXBlcmxpbmsuY29tcG9uZW50KSB7XG4gICAgICAgIHRoaXMuaHlwZXJsaW5rU2VydmljZS5vcGVuRGlhbG9nSW5OZXdUYWIoZm9ybUZpZWxkLmh5cGVybGluay5jb21wb25lbnQsIGZvcm1GaWVsZC5oeXBlcmxpbms/LnBhcmFtcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAgdGhpcy5kaWFsb2dSZWYgPSB0aGlzLmRpYWxvZ1NlcnZpY2Uub3Blbihmb3JtRmllbGQuaHlwZXJsaW5rLmNvbXBvbmVudCwge1xuICAgICAgICAgIGhlYWRlcjogZm9ybUZpZWxkLmh5cGVybGluay5kYXRhPy5oZWFkZXJcbiAgICAgICAgICAgID8gZm9ybUZpZWxkLmh5cGVybGluay5kYXRhPy5oZWFkZXJcbiAgICAgICAgICAgIDogJycsXG4gICAgICAgICAgd2lkdGg6IGZvcm1GaWVsZC5oeXBlcmxpbmsud2lkdGggPyBmb3JtRmllbGQuaHlwZXJsaW5rLndpZHRoIDogJycsXG4gICAgICAgICAgc3R5bGU6IGZvcm1GaWVsZC5oeXBlcmxpbmsud2lkdGggPyB7fSA6IHsgJ21heC13aWR0aCc6ICdmaXQtY29udGVudCcgfSxcbiAgICAgICAgICBoZWlnaHQ6IGZvcm1GaWVsZC5oeXBlcmxpbmsuaGVpZ2h0ID8gZm9ybUZpZWxkLmh5cGVybGluay5oZWlnaHQgOiAnODAlJyxcbiAgICAgICAgICBkYXRhOiBmb3JtRmllbGQuaHlwZXJsaW5rLnBhcmFtc1xuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIGlmKHRoaXMuZ3JpZFNlcnZpY2UuY29sdW1uRm9jdXNlZE91dCB8fCB0aGlzLmZvcm1TZXJ2aWNlLmZpZWxkRm9jdXNlZE91dCl7XG4gICAgICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UgPSB0aGlzLmludGVyY2VwdERpYWxvZ0Nsb3NlLmJpbmQodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXREeW5hbWljRGlhbG9nUmVmKHRoaXMuZGlhbG9nUmVmKTtcbiAgICAgICAgY29uc3QgY29tcG9uZW50TmFtZSA9IGZvcm1GaWVsZC5oeXBlcmxpbms/LmNvbXBvbmVudD8ubmFtZTtcbiAgICAgICAgaWYgKGNvbXBvbmVudE5hbWUpIHtcbiAgICAgICAgICB0aGlzLnBhZ2VMb2dnZXJTZXJ2aWNlLnNhdmVQYWdlTG9nZ2VySW5mbyhcbiAgICAgICAgICAgIHRoaXMucm91dGVyLnVybD8uc3Vic3RyaW5nKDEpLFxuICAgICAgICAgICAgY29tcG9uZW50TmFtZVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5uZ1pvbmUub25TdGFibGVcbiAgICAgICAgICAucGlwZSh0YWtlKDEpKSAvLyBFbWl0IG9ubHkgb25jZSB3aGVuIHRoZSB6b25lIGJlY29tZXMgc3RhYmxlXG4gICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICBkcmFnZ2FibGVEaWFsb2coZm9ybUZpZWxkPy5maWVsZCA/IGZvcm1GaWVsZD8uZmllbGQgOiBmb3JtRmllbGQ/LmxhYmVsKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5kaWFsb2dSZWYub25DbG9zZS5zdWJzY3JpYmUoKHJlcykgPT4ge1xuICAgICAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgICAgIGlmIChmb3JtRmllbGQub25SZXR1cm4pIHtcbiAgICAgICAgICAgICAgZm9ybUZpZWxkLm9uUmV0dXJuKHJlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogb3BlbiBJZnJhbWUgb24gTGFiZWxcbiAgICovXG4gIGxvYWRMYWJlbENvbnRyb2xJRnJhbWUoZm9ybUZpZWxkOiBhbnkpIHtcbiAgICBjb25zdCByZWYgPSB0aGlzLmRpYWxvZ1NlcnZpY2Uub3BlbihJZnJhbWVDb21wb25lbnQsIHtcbiAgICAgIGhlYWRlcjogZm9ybUZpZWxkLmxhYmVsLm5hbWUsXG4gICAgICB3aWR0aDogZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbC5oeXBlcmxpbmsud2lkdGhcbiAgICAgICAgPyBmb3JtRmllbGQuaHlwZXJsaW5rLndpZHRoXG4gICAgICAgIDogJzkwJScsXG4gICAgICBoZWlnaHQ6IGZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wuaHlwZXJsaW5rPy5oZWlnaHRcbiAgICAgICAgPyBmb3JtRmllbGQuaHlwZXJsaW5rLmhlaWdodFxuICAgICAgICA6ICc4MCUnLFxuICAgICAgZGF0YToge1xuICAgICAgICB2YWx1ZTogZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbC5oeXBlcmxpbms/LmxpbmtcbiAgICAgICAgICA/IGZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wuaHlwZXJsaW5rLmxpbmtcbiAgICAgICAgICA6ICcnLFxuICAgICAgICBpRnJhbWVJZDogZm9ybUZpZWxkLmxhYmVsLm5hbWUsXG4gICAgICB9LFxuICAgIH0pO1xuICAgIHRoaXMuc2V0RHluYW1pY0RpYWxvZ1JlZihyZWYpO1xuICAgIHRoaXMucGFnZUxvZ2dlclNlcnZpY2Uuc2F2ZVBhZ2VMb2dnZXJJbmZvKFxuICAgICAgdGhpcy5yb3V0ZXIudXJsPy5zdWJzdHJpbmcoMSksXG4gICAgICAnSWZyYW1lQ29tcG9uZW50J1xuICAgICk7XG4gICAgdGhpcy5uZ1pvbmUub25TdGFibGVcbiAgICAgIC5waXBlKHRha2UoMSkpIC8vIEVtaXQgb25seSBvbmNlIHdoZW4gdGhlIHpvbmUgYmVjb21lcyBzdGFibGVcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICBkcmFnZ2FibGVEaWFsb2coZm9ybUZpZWxkPy5maWVsZCA/IGZvcm1GaWVsZD8uZmllbGQgOiBmb3JtRmllbGQ/LmxhYmVsKTtcbiAgICAgIH0pO1xuICAgIHJlZi5vbkNsb3NlLnN1YnNjcmliZSgocmVzKSA9PiB7XG4gICAgICBpZiAocmVzKSB7XG4gICAgICAgIGlmIChmb3JtRmllbGQub25SZXR1cm4pIHtcbiAgICAgICAgICBmb3JtRmllbGQub25SZXR1cm4ocmVzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChmb3JtRmllbGQgJiYgZm9ybUZpZWxkLm9uQ2xpY2spIHtcbiAgICAgIGZvcm1GaWVsZC5vbkNsaWNrKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGZpbmQgdGhlIHJlcXVpcmVkIGZpZWxkIGluIGZvcm1cbiAgICovXG4vLyAgIGFwcGx5UmVxdWlyZWRGaWVsZFZhbGlkYXRpb24oKSB7XG4vLyBjb25zb2xlLmxvZygnYXBwbHlpbmcgcmVxdWlyZWRmaWxlZCB2YWxpZGF0aW9ucycpXG4vLyAgICAgaWYgKFxuLy8gICAgICAgdGhpcy5mb3JtICYmXG4vLyAgICAgICB0aGlzLmZvcm0uZm9ybVNlY3Rpb25zICYmXG4vLyAgICAgICB0aGlzLmZvcm0uZm9ybVNlY3Rpb25zLmxlbmd0aCA+IDBcbi8vICAgICApIHtcbi8vICAgICAgIHRoaXMuZm9ybS5mb3JtU2VjdGlvbnMuZm9yRWFjaCgoc2VjdGlvbikgPT4ge1xuLy8gICAgICAgICBzZWN0aW9uLmZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xuLy8gICAgICAgICAgIGNvbnNvbGUubG9nKCdmaWVsZCcsIGZpZWxkKVxuLy8gICAgICAgICAgIGlmIChmaWVsZC52YWxpZGF0aW9ucyAmJiBmaWVsZC52YWxpZGF0aW9ucy5sZW5ndGggPiAwKSB7XG4vLyAgICAgICAgICAgICBmaWVsZC52YWxpZGF0aW9ucy5mb3JFYWNoKCh2YWxpZCkgPT4ge1xuLy8gICAgICAgICAgICAgICBpZiAodmFsaWQudHlwZSA9PT0gRVZhbGlkYXRvci5SRVFVSVJFRCkge1xuLy8gICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdmaWVsZCcsZmllbGQsJ2lzIHJlcXVpcmVkJylcbi8vICAgICAgICAgICAgICAgICBmaWVsZC5yZXF1aXJlZEZpZWxkID0gdHJ1ZTtcbi8vICAgICAgICAgICAgICAgfVxuLy8gICAgICAgICAgICAgfSk7XG4vLyAgICAgICAgICAgfVxuLy8gICAgICAgICB9KTtcbi8vICAgICAgIH0pO1xuLy8gICAgIH1cbi8vICAgfVxuXG4gIHNldEZpbGVVcmxzKGZpbGVVcmxzOiBhbnkpIHtcbiAgICBpZiAoZmlsZVVybHMgJiYgZmlsZVVybHMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5maWxlVXBsb2FkVXJscyA9IGZpbGVVcmxzO1xuICAgICAgdGhpcy5zaG93ZmlsZVVwbG9hZEVycm9yID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgb25TYXZlRm9ybSgpIHtcbiAgICBsZXQgdmFsaWRpdHkgPSB0cnVlO1xuICAgIGxldCBlcnJvck1lc3NhZ2VEZXRhaWxzID0gJyc7XG4gICAgdGhpcy5mb3JtU2VydmljZS5maWVsZEZvY3VzZWRPdXQgPSBmYWxzZTtcbiAgICB0aGlzLmdyaWRTZXJ2aWNlLmNvbHVtbkZvY3VzZWRPdXQgPSBmYWxzZTtcbiAgICBsZXQgbXVsaVNlbGVjdFZhbHVlID0ge307XG4gICAgdGhpcy5mb3JtLmZvcm1TZWN0aW9ucz8uZm9yRWFjaCgoZm9ybVNlY3Rpb24pID0+IHtcbiAgICAgIGlmIChmb3JtU2VjdGlvbi5maWVsZHMpIHtcbiAgICAgICAgaWYgKCF0aGlzLmZvcm1TZXJ2aWNlLmNoZWNrVmFsaWRpdHkoZm9ybVNlY3Rpb24uZmllbGRzKSkge1xuICAgICAgICAgIGZvcm1TZWN0aW9uLmZpZWxkcz8uZm9yRWFjaCgoZm9ybUZpZWxkOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChmb3JtRmllbGQuZXJyb3JNZXNzYWdlKSB7XG4gICAgICAgICAgICAgIGVycm9yTWVzc2FnZURldGFpbHMgPSBlcnJvck1lc3NhZ2VEZXRhaWxzXG4gICAgICAgICAgICAgICAgPyBlcnJvck1lc3NhZ2VEZXRhaWxzICsgJyAsICcgKyBmb3JtRmllbGQuZXJyb3JNZXNzYWdlXG4gICAgICAgICAgICAgICAgOiBmb3JtRmllbGQuZXJyb3JNZXNzYWdlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGxldCBmaWVsZCA9IGZvcm1TZWN0aW9uLmZpZWxkcy5zb21lKFxuICAgICAgICAgICAgKGZpZWxkKSA9PiBmaWVsZC5yZXF1aXJlZEZpZWxkICYmIGZpZWxkLmVycm9yTWVzc2FnZSAmJiAhZmllbGQudmFsdWVcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmICh2YWxpZGl0eSAmJiBmaWVsZCkge1xuICAgICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoXG4gICAgICAgICAgICAgIGVycm9yTWVzc2FnZURldGFpbHMsXG4gICAgICAgICAgICAgIDUwMDAsXG4gICAgICAgICAgICAgICdSRVFVSVJFRCBGSUVMRCdcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKGVycm9yTWVzc2FnZURldGFpbHMsIDUwMDAsICdJTlZBTElEIEZJRUxEJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhbGlkaXR5ID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBmb3JtU2VjdGlvbi5maWVsZHMuZm9yRWFjaCgoZmllbGQ6IGFueSkgPT4ge1xuICAgICAgICAgIC8vIHNldCB1cGxvYWRGaWxlIFVSTCBpbiBGb3JtRmllbGQgaW4gY2FzZSBvZiBGSUxFX1VQTE9BRFxuICAgICAgICAgIGlmIChmaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuRklMRV9VUExPQUQpIHtcbiAgICAgICAgICAgIGZpZWxkLnZhbHVlID0gdGhpcy5maWxlVXBsb2FkVXJscztcblxuICAgICAgICAgICAgaWYgKGZpZWxkLnZhbGlkYXRpb25zICYmIGZpZWxkLnZhbGlkYXRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgZmllbGQudmFsaWRhdGlvbnMuZm9yRWFjaCgoeDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHgudHlwZSA9PT0gRVZhbGlkYXRvci5SRVFVSVJFRCAmJiAhZmllbGQudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd2ZpbGVVcGxvYWRFcnJvciA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkNBUkQpIHtcbiAgICAgICAgICAgIGlmIChmaWVsZC5jYXJkICYmIGZpZWxkLmNhcmQuZGF0YT8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICBsZXQgc2VsZWN0ZWREYXRhID0gZmllbGQuY2FyZC5kYXRhLmZpbHRlcihcbiAgICAgICAgICAgICAgICAoeDogYW55KSA9PiB4LnNlbGVjdGVkQ2FyZCAmJiB4LnNlbGVjdGVkQ2FyZC5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGlmIChzZWxlY3RlZERhdGEgJiYgc2VsZWN0ZWREYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBmaWVsZC5jYXJkLmRhdGEgPSBzZWxlY3RlZERhdGE7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmICh2YWxpZGl0eSkge1xuICAgICAgLy8gU2F2ZSBncmlkIG9uIGZvcm1TYXZlIEJ1dHRvblxuICAgICAgbGV0IGN1c3RvbUNvbXBvbmVudDogYm9vbGVhbiA9IGZhbHNlO1xuICAgICAgbGV0IHRlbXBWYWx1ZTogYW55ID0gW107XG4gICAgICBsZXQgc2F2ZUFsbEdyaWQ6IGFueSA9IFtdO1xuICAgICAgbGV0IGdldEJ0bnM6IGFueSA9IFtdO1xuICAgICAgLy8gc2V0IHZhbHVlIGFzIDEgb3IgMCBpbiBjYXNlIG9mIGNoZWNrYm94XG4gICAgICB0aGlzLmZvcm0uZm9ybVNlY3Rpb25zPy5mb3JFYWNoKChmb3JtU2VjdGlvbikgPT4ge1xuICAgICAgICBpZiAoZm9ybVNlY3Rpb24uZmllbGRzICYmIHZhbGlkaXR5KSB7XG4gICAgICAgICAgZm9ybVNlY3Rpb24uZmllbGRzLmZvckVhY2goKGZpZWxkOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChmaWVsZC52YWx1ZSA9PT0gJycgfHwgZmllbGQudmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICBmaWVsZC52YWx1ZSA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvL2NvbnZlcnQgZGF0ZSBpbnRvIHRpbWUgYXMgc3RyaW5nXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5DQUxFTkRBUiAmJlxuICAgICAgICAgICAgICBmaWVsZC50aW1lT25seSAmJlxuICAgICAgICAgICAgICBmaWVsZC52YWx1ZVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGlmIChmaWVsZC5zaG93VGltZSkge1xuICAgICAgICAgICAgICAgIGZpZWxkLnZhbHVlID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oZmllbGQudmFsdWUsICd5eXl5LU1NLWRkIEhIOm1tOnNzJyk7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWZpZWxkLnZhbHVlPy50b1N0cmluZygpPy5pbmNsdWRlcygnQU0nKSAmJlxuICAgICAgICAgICAgICAgICFmaWVsZC52YWx1ZT8udG9TdHJpbmcoKT8uaW5jbHVkZXMoJ1BNJykpIHtcbiAgICAgICAgICAgICAgICBmaWVsZC52YWx1ZSA9IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGZpZWxkLnZhbHVlLCAnaGg6bW0gYScpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZmllbGQ/LmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5OVU1FUklDKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGRpZ2l0c0luZm8gPSBmaWVsZD8uZm9ybWF0Py5mb3JtYXRQYXJhbXM/LmRpZ2l0c0luZm87XG4gICAgICAgICAgICAgIGlmIChmaWVsZC52YWx1ZSkge1xuICAgICAgICAgICAgICAgIGlmIChmaWVsZD8uZm9ybWF0Py50eXBlID09PSAncGVyY2VudCcpIHtcbiAgICAgICAgICAgICAgICAgIGlmIChmaWVsZC5mb3JtYXQ/LmZvcm1hdFBhcmFtcz8uYWxsb3dDYWxjdWxhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FsY3VsYXRlZFZhbHVlID0gZmllbGQudmFsdWU/LnRvU3RyaW5nKCk/LmluY2x1ZGVzKCcuJykgPyB0cnVlIDogZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkaWdpdHNJbmZvKSB7XG4gICAgICAgICAgICAgICAgICAgICAgZmllbGQudmFsdWUgPSBwYXJzZUZsb2F0KFxuICAgICAgICAgICAgICAgICAgICAgICAgKGNhbGN1bGF0ZWRWYWx1ZSA/IGZpZWxkLnZhbHVlIDogZmllbGQudmFsdWUgLyAxMDApPy50b1N0cmluZygpXG4gICAgICAgICAgICAgICAgICAgICAgKS50b0ZpeGVkKGRpZ2l0c0luZm8pO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFmaWVsZC52YWx1ZT8udG9TdHJpbmcoKT8uaW5jbHVkZXMoJy4nKSAmJiAhY2FsY3VsYXRlZFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgZmllbGQudmFsdWUgPSBmaWVsZC52YWx1ZSAvIDEwMDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkaWdpdHNJbmZvKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnZhbHVlID0gcGFyc2VGbG9hdChmaWVsZC52YWx1ZSkudG9GaXhlZChkaWdpdHNJbmZvKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gc2V0IHZhbHVlIG9mIGF1dG9Db21wbGV0ZSBhcyBzdHJpbmdzXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5BVVRPQ09NUExFVEUgJiZcbiAgICAgICAgICAgICAgIWZpZWxkLnNob3dBbGxWYWx1ZSAmJlxuICAgICAgICAgICAgICBmaWVsZC52YWx1ZSAmJlxuICAgICAgICAgICAgICBmaWVsZC52YWx1ZS5sZW5ndGggPiAwXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBmaWVsZC52YWx1ZS5tYXAoXG4gICAgICAgICAgICAgICAgKHZhbHVlOiBhbnkpID0+IHZhbHVlW2ZpZWxkLmRpc3BsYXlGaWVsZF1cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHZhbHVlICYmXG4gICAgICAgICAgICAgICAgKHZhbHVlLnRvU3RyaW5nKCk/LmluY2x1ZGVzKCc7JykgfHxcbiAgICAgICAgICAgICAgICAgIHZhbHVlLnRvU3RyaW5nKCk/LmluY2x1ZGVzKCcsJykpXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRlbXBWYWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIGZpZWxkLnZhbHVlID0gdmFsdWUudG9TdHJpbmcoKS5yZXBsYWNlQWxsKCcsJywgJzsnKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gY29udmVydCBtdWx0aVNlbGVjdCBhcnJheSBpbnRvIHN0cmluZ1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBmaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuTVVMVElTRUxFQ1QgJiZcbiAgICAgICAgICAgICAgZmllbGQudmFsdWUgJiZcbiAgICAgICAgICAgICAgQXJyYXkuaXNBcnJheShmaWVsZC52YWx1ZSkgJiZcbiAgICAgICAgICAgICAgZmllbGQuc2F2ZUFzU3RyaW5nICE9PSBmYWxzZVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIG11bGlTZWxlY3RWYWx1ZVtmaWVsZC5maWVsZF0gPSBmaWVsZC52YWx1ZVxuICAgICAgICAgICAgICBmaWVsZC52YWx1ZSA9IGZpZWxkLnZhbHVlPy50b1N0cmluZygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5DSEVDS0JPWCkge1xuICAgICAgICAgICAgICBmaWVsZC52YWx1ZSA9IGZpZWxkLnZhbHVlID8gMSA6IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBTYXZlIGdyaWQgb24gZm9ybVNhdmUgQnV0dG9uXG4gICAgICAgICAgICBpZiAoZmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkNPTVBPTkVOVCAmJiAhY3VzdG9tQ29tcG9uZW50KSB7XG4gICAgICAgICAgICAgIGN1c3RvbUNvbXBvbmVudCA9IHRydWU7XG4gICAgICAgICAgICAgIHNhdmVBbGxHcmlkID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLicgKyBmaWVsZD8uY29tcG9uZW50Q29udHJvbD8uaWQgKyAnICcgKyAnI3NhdmVBbGxHcmlkVmFsdWVzJyk7XG4gICAgICAgICAgICAgIGdldEJ0bnMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuJyArIGZpZWxkPy5jb21wb25lbnRDb250cm9sPy5pZCArICcgJyArICcuc2F2ZVJvdycpO1xuICAgICAgICAgICAgICBpZiAoc2F2ZUFsbEdyaWQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgc2F2ZUFsbEdyaWRbMF0uY2xpY2soKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNhdmVGb3JtUGFnZSA9IGludGVydmFsKDc1MCkuc3Vic2NyaWJlKCh4KSA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLnNhdmVGb3JtUGFnZS51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgICAgdGhpcy5zYXZlRm9ybS5lbWl0KHRoaXMuZm9ybS5mb3JtU2VjdGlvbnMpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGVsc2UgaWYgKGdldEJ0bnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IHNhdmVSb3dCdG4gb2YgZ2V0QnRucykge1xuICAgICAgICAgICAgICAgICAgc2F2ZVJvd0J0bj8uY2xpY2soKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5zYXZlRm9ybS5lbWl0KHRoaXMuZm9ybS5mb3JtU2VjdGlvbnMpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdGhpcy5icm93c2VyVGFiQ2xvc2VFdmVudChmYWxzZSk7XG4gICAgICBpZiAoIXNhdmVBbGxHcmlkLmxlbmd0aCAmJiAhZ2V0QnRucy5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5zYXZlRm9ybS5lbWl0KHRoaXMuZm9ybS5mb3JtU2VjdGlvbnMpO1xuICAgICAgfVxuICAgICAgdGhpcy5mb3JtLmZvcm1TZWN0aW9ucz8uZm9yRWFjaCgoZm9ybVNlY3Rpb24pID0+IHtcbiAgICAgICAgaWYgKGZvcm1TZWN0aW9uLmZpZWxkcykge1xuICAgICAgICAgIGZvcm1TZWN0aW9uLmZpZWxkcy5mb3JFYWNoKChmaWVsZDogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5DQUxFTkRBUiAmJlxuICAgICAgICAgICAgICBmaWVsZC50aW1lT25seSAmJiBmaWVsZC5zaG93VGltZVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGZpZWxkLnZhbHVlID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oZmllbGQudmFsdWUsICdoaDptbSBhJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5NVUxUSVNFTEVDVCAmJlxuICAgICAgICAgICAgICBmaWVsZC52YWx1ZVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGZpZWxkLnZhbHVlID0gbXVsaVNlbGVjdFZhbHVlW2ZpZWxkLmZpZWxkXTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgIGZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5BVVRPQ09NUExFVEUgJiZcbiAgICAgICAgICAgICAgIWZpZWxkLnNob3dBbGxWYWx1ZVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGZpZWxkLnZhbHVlID0gdGVtcFZhbHVlXG4gICAgICAgICAgICAgICAgLnRvU3RyaW5nKClcbiAgICAgICAgICAgICAgICAucmVwbGFjZUFsbCgnLCcsICc7JylcbiAgICAgICAgICAgICAgICA/LnNwbGl0KCc7JylcbiAgICAgICAgICAgICAgICA/Lm1hcCgodmFsOiBhbnkpID0+ICh7IFtmaWVsZC5kaXNwbGF5RmllbGRdOiB2YWwgfSkpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChmaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuQ0hFQ0tCT1gpIHtcbiAgICAgICAgICAgICAgZmllbGQudmFsdWUgPSBmaWVsZC52YWx1ZSA9PT0gMSA/IHRydWUgOiBmYWxzZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZmllbGQ/LmZvcm1hdD8udHlwZSA9PT0gJ3BlcmNlbnQnKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGRpZ2l0c0luZm8gPSBmaWVsZD8uZm9ybWF0Py5mb3JtYXRQYXJhbXM/LmRpZ2l0c0luZm87XG4gICAgICAgICAgICAgIGlmIChmaWVsZC52YWx1ZSkge1xuICAgICAgICAgICAgICAgIGlmIChmaWVsZC5mb3JtYXQ/LmZvcm1hdFBhcmFtcz8uYWxsb3dDYWxjdWxhdGUpIHtcbiAgICAgICAgICAgICAgICAgIGlmIChkaWdpdHNJbmZvKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnZhbHVlID0gcGFyc2VGbG9hdChcbiAgICAgICAgICAgICAgICAgICAgICAoZmllbGQudmFsdWUgKiAxMDApPy50b1N0cmluZygpXG4gICAgICAgICAgICAgICAgICAgICkudG9GaXhlZChkaWdpdHNJbmZvKTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnZhbHVlID0gZmllbGQudmFsdWUgKiAxMDA7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkaWdpdHNJbmZvKSB7XG4gICAgICAgICAgICAgICAgICBmaWVsZC52YWx1ZSA9IHBhcnNlRmxvYXQoZmllbGQudmFsdWUpLnRvRml4ZWQoZGlnaXRzSW5mbyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIG9uQ2FuY2VsRm9ybSgpIHtcbiAgICBpZiAodGhpcy5mb3JtU2VydmljZS5maWVsZEZvY3VzZWRPdXQgfHwgdGhpcy5ncmlkU2VydmljZS5jb2x1bW5Gb2N1c2VkT3V0KSB7XG4gICAgICB0aGlzLmFsZXJ0U2VydmljZVxuICAgICAgICAuY29uZmlybSh7XG4gICAgICAgICAga2V5OiAnY2FuY2VsQnV0dG9uJyxcbiAgICAgICAgICBtZXNzYWdlOiAnWW91IGhhdmUgdW5zYXZlZCBjaGFuZ2VzLiBXb3VsZCB5b3UgbGlrZSB0byBjb250aW51ZT8nLFxuICAgICAgICB9KVxuICAgICAgICAudGhlbigocmVzKSA9PiB7XG4gICAgICAgICAgaWYgKHJlc1swXS5kZXRhaWwgPT09ICdZZXMnKSB7XG4gICAgICAgICAgICB0aGlzLmJyb3dzZXJUYWJDbG9zZUV2ZW50KGZhbHNlKTtcbiAgICAgICAgICAgIHRoaXMuZ3JpZFNlcnZpY2UuY29sdW1uRm9jdXNlZE91dCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5jYW5jZWxGb3JtLmVtaXQodGhpcy5mb3JtLmZvcm1TZWN0aW9ucyk7XG4gICAgICAgICAgICB1dGlsaXRpZXMucmVtb3ZlQWN0aXZlSWNvbkNsYXNzKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jYW5jZWxGb3JtLmVtaXQodGhpcy5mb3JtLmZvcm1TZWN0aW9ucyk7XG4gICAgICB1dGlsaXRpZXMucmVtb3ZlQWN0aXZlSWNvbkNsYXNzKCk7XG4gICAgfVxuICB9XG5cbiAgbG9va3VwQ2xlYXJWYWx1ZShmb3JtRmllbGQ6IElGb3JtRmllbGQpIHtcbiAgICBpZiAoZm9ybUZpZWxkLnZhbHVlKSB7XG4gICAgICBmb3JtRmllbGQudmFsdWUgPSAnJztcbiAgICAgIHRoaXMuYnJvd3NlclRhYkNsb3NlRXZlbnQodHJ1ZSk7XG4gICAgfVxuICAgIGlmIChmb3JtRmllbGQub25DaGFuZ2UpIHtcbiAgICAgIGZvcm1GaWVsZC5vbkNoYW5nZShmb3JtRmllbGQpO1xuICAgIH1cbiAgIC8vIHRoaXMuZm9ybVNlcnZpY2UuY2hlY2tWYWxpZGl0eShbZm9ybUZpZWxkXSk7XG4gIH1cblxuICAvKipcbiAgICogc2V0IGNhbGVuZGFyIHdpZHRoXG4gICAqL1xuICBzZXRDYWxhbmRlcldpZHRoKCkge1xuICAgIGNvbnN0IGNhbGFuZGVyRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5wLWNhbGVuZGFyJyk7XG4gICAgbGV0IGZvcm06IGFueSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2Zvcm0nKTtcbiAgICBsZXQgd2lkdGggPSBmb3JtPy5jbGllbnRXaWR0aDtcbiAgICBjYWxhbmRlckVsZW1lbnQ/LmZvckVhY2goKGNhbGFuZGVyOiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IGNhbGFuZGVyT2ZzZXRMZWZ0ID0gY2FsYW5kZXIub2Zmc2V0TGVmdDtcbiAgICAgIGlmIChjYWxhbmRlck9mc2V0TGVmdCA8PSB3aWR0aCAvIDIpIHtcbiAgICAgICAgY2FsYW5kZXIuY2xhc3NMaXN0LmFkZCgnb3Blbi1yaWdodC1zaWRlJyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogc2V0IHRoZSBkeW5hbWljIGRpYWxvZyBkYXRhXG4gICAqL1xuICBzZXREaWFsb2dEYXRhKGZvcm1GaWVsZDogSUZvcm1GaWVsZCwgZGF0YTogYW55KTogYW55IHtcbiAgICBpZiAoZGF0YSAmJiBmb3JtRmllbGQpIHtcbiAgICAgIGxldCB2YWx1ZTogYW55O1xuICAgICAgZGF0YSA9IHV0aWxpdGllcy5vYmpDb252ZXJ0VG9Mb3dlcihkYXRhKTtcbiAgICAgIGxldCBzZWxlY3Rpb246IHN0cmluZyA9ICcnO1xuICAgICAgaWYgKGZvcm1GaWVsZC52YWx1ZSAmJiB0eXBlb2YgZm9ybUZpZWxkLnZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgZm9ybUZpZWxkLnZhbHVlICYmXG4gICAgICAgICAgZm9ybUZpZWxkLnZhbHVlLnRleHQgJiZcbiAgICAgICAgICBmb3JtRmllbGQudmFsdWUudGV4dC50b1N0cmluZygpLnRyaW0oKVxuICAgICAgICApIHtcbiAgICAgICAgICBzZWxlY3Rpb24gPSBmb3JtRmllbGQudmFsdWUudGV4dD8udG9TdHJpbmcoKT8udHJpbSgpO1xuICAgICAgICAgIGlmIChmb3JtRmllbGQuZGlzcGxheUZpZWxkKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IGZvcm1GaWVsZC52YWx1ZT8udmFsdWU/LnRvU3RyaW5nKCk/LnRyaW0oKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZm9ybUZpZWxkLnZhbHVlICYmIGZvcm1GaWVsZC52YWx1ZS50b1N0cmluZygpLnRyaW0oKSkge1xuICAgICAgICBzZWxlY3Rpb24gPSBmb3JtRmllbGQudmFsdWU/LnRvU3RyaW5nKCk/LnRyaW0oKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNvbXBvbmVudE5hbWUgPSBkYXRhLmNvbXBvbmVudD8ubmFtZTtcbiAgICAgIGlmIChjb21wb25lbnROYW1lKSB7XG4gICAgICAgIHRoaXMucGFnZUxvZ2dlclNlcnZpY2Uuc2F2ZVBhZ2VMb2dnZXJJbmZvKFxuICAgICAgICAgIHRoaXMucm91dGVyLnVybD8uc3Vic3RyaW5nKDEpLFxuICAgICAgICAgIGNvbXBvbmVudE5hbWVcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmRpYWxvZ1NlcnZpY2Uub3BlbihkYXRhLmNvbXBvbmVudCwge1xuICAgICAgICAuLi5kYXRhLmRhdGEsXG4gICAgICAgIHN0eWxlQ2xhc3M6ICdsb29rdXAtbW9kZWwnLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgc2VsZWN0aW9uOiBzZWxlY3Rpb24sXG4gICAgICAgICAgZmllbGQ6IGZvcm1GaWVsZC5maWVsZCxcbiAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgdmFsdWVGaWVsZDogZGF0YS5kYXRhPy52YWx1ZUZpZWxkLFxuICAgICAgICAgIC4uLmRhdGEuZGF0YS5kYXRhLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgdGFiRm9jdXNFdmVudChmb3JtRmllbGQ6IGFueSkge1xuICAgIGNvbnN0IGNsYXNzTmFtZSA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgJy4nICsgZm9ybUZpZWxkLmZpZWxkXG4gICAgKTtcbiAgICBpZiAoY2xhc3NOYW1lKSB7XG4gICAgICBjbGFzc05hbWUuY2xpY2soKTtcbiAgICB9XG4gIH1cblxuICBvbkNsaWNrRXZlbnQoZm9ybUZpZWxkOiBJRm9ybUZpZWxkKSB7XG4gICAgaWYgKGZvcm1GaWVsZC5vbkNsaWNrICYmIGZvcm1GaWVsZC5kaXNhYmxlZCAhPT0gdHJ1ZSkge1xuICAgICAgZm9ybUZpZWxkLm9uQ2xpY2soZm9ybUZpZWxkKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogb3BlbiBkaWFsb2cgb24gbG9va3VwQ29udHJvbCBsYWJlbFxuICAgKi9cbiAgc2VsZWN0TG9va3VwTGFiZWwoZm9ybUZpZWxkOiBhbnksIGV2ZW50PzogYW55KSB7XG4gICAgaWYgKFxuICAgICAgZm9ybUZpZWxkLmxhYmVsICYmXG4gICAgICBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sICYmXG4gICAgICBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sLmxvb2t1cENvbnRyb2xcbiAgICApIHtcbiAgICAgIGlmKGV2ZW50LmN0cmxLZXkgJiYgZm9ybUZpZWxkPy5sYWJlbD8ubGFiZWxDb250cm9sPy5sb29rdXBDb250cm9sPy5jb21wb25lbnQpe1xuICAgICAgICB0aGlzLmh5cGVybGlua1NlcnZpY2Uub3BlbkRpYWxvZ0luTmV3VGFiKGZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wubG9va3VwQ29udHJvbC5jb21wb25lbnQsIGZvcm1GaWVsZD8ubGFiZWw/LmxhYmVsQ29udHJvbD8ubG9va3VwQ29udHJvbD8uZGF0YS5kYXRhKTtcbiAgICAgIH1lbHNle1xuICAgICAgICBjb25zdCByZWY6IGFueSA9IHRoaXMuc2V0RGlhbG9nRGF0YShcbiAgICAgICAgICBmb3JtRmllbGQsXG4gICAgICAgICAgZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbC5sb29rdXBDb250cm9sXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuc2V0RHluYW1pY0RpYWxvZ1JlZihyZWYpO1xuICAgICAgICB0aGlzLm5nWm9uZS5vblN0YWJsZVxuICAgICAgICAgIC5waXBlKHRha2UoMSkpIC8vIEVtaXQgb25seSBvbmNlIHdoZW4gdGhlIHpvbmUgYmVjb21lcyBzdGFibGVcbiAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIGRyYWdnYWJsZURpYWxvZyhmb3JtRmllbGQ/LmZpZWxkID8gZm9ybUZpZWxkPy5maWVsZCA6IGZvcm1GaWVsZD8ubGFiZWwpO1xuICAgICAgICAgIH0pO1xuICAgICAgICByZWYub25DbG9zZS5zdWJzY3JpYmUoXG4gICAgICAgICAgKHJlczogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgICAgIGZvcm1GaWVsZC52YWx1ZSA9IHV0aWxpdGllcy5zZXREaWFsb2dSZXNwb25zZShcbiAgICAgICAgICAgICAgICBmb3JtRmllbGQsXG4gICAgICAgICAgICAgICAgZm9ybUZpZWxkPy5sYWJlbC5sYWJlbENvbnRyb2wubG9va3VwQ29udHJvbCxcbiAgICAgICAgICAgICAgICByZXNcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMub25Gb2N1c091dEV2ZW50KGZvcm1GaWVsZCk7XG4gICAgICAgICAgICBpZiAoZm9ybUZpZWxkLmxhYmVsLm9uUmV0dXJuKVxuICAgICAgICAgICAgICBmb3JtRmllbGQubGFiZWwub25SZXR1cm4oZm9ybUZpZWxkLnZhbHVlKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgICh7IGVycm9yIH06IGFueSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuYXBpRXJyb3IoZXJyb3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIH1cbiAgICB0aGlzLm9uQ2xpY2tFdmVudChmb3JtRmllbGQpO1xuICB9XG5cbiAgLyoqXG4gICAqIHNldCB0aGUgZGlhbG9nIHJlZiB3aGVuIHBvcHVwIG9wZW5cbiAgICovXG4gIHNldER5bmFtaWNEaWFsb2dSZWYocmVmOiBhbnkpe1xuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nU2VydmljZS5kaWFsb2dDb21wb25lbnRSZWZNYXAuZ2V0KHJlZik7XG4gICAgY29uc3QgZHluYW1pY0NvbXBvbmVudCA9IGRpYWxvZ1JlZj8uaW5zdGFuY2UgYXMgRHluYW1pY0RpYWxvZ0NvbXBvbmVudDtcbiAgICBjb25zdCBhcmlhTGFiZWxsZWRCeSA9IGR5bmFtaWNDb21wb25lbnQuZ2V0QXJpYUxhYmVsbGVkQnkoKTtcbiAgICBkeW5hbWljQ29tcG9uZW50LmdldEFyaWFMYWJlbGxlZEJ5ID0gKCkgPT4gYXJpYUxhYmVsbGVkQnk7XG4gIH1cblxuICBpbnRlcmNlcHREaWFsb2dDbG9zZShldmVudDogYW55KSB7XG4gICAgaWYgKHRoaXMuZ3JpZFNlcnZpY2UuY29sdW1uRm9jdXNlZE91dCB8fCB0aGlzLmZvcm1TZXJ2aWNlLmZpZWxkRm9jdXNlZE91dCkge1xuICAgICAgaWYgKGNvbmZpcm0oXCJZb3Ugd2lsbCBsb3NlIGNoYW5nZXMgbm90IHNhdmVkIG9uIHBhZ2UuIFdvdWxkIHlvdSBsaWtlIHRvIGNvbnRpbnVlP1wiKSA9PSB0cnVlKSB7XG4gICAgICAgIHRoaXMuZGlhbG9nUmVmLmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5ncmlkU2VydmljZS5jb2x1bW5Gb2N1c2VkT3V0ID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZm9ybVNlcnZpY2UuZmllbGRGb2N1c2VkT3V0ID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhpcy5kaWFsb2dSZWYuZGVzdHJveSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBvcGVuIGRpYWxvZyBvbiBsb29rdXBDb250cm9sIGZpZWxkXG4gICAqL1xuICBzZWxlY3RMb29rdXBGaWVsZChmb3JtRmllbGQ6IElGb3JtRmllbGQpIHtcbiAgICBpZiAoZm9ybUZpZWxkLmxvb2t1cENvbnRyb2wpIHtcbiAgICAgIHRoaXMuZm9ybVNlcnZpY2UuZmllbGRGb2N1c2VkT3V0ID0gZmFsc2U7XG4gICAgICB0aGlzLmxvb2t1cEZvY3VzT3V0ID0gdHJ1ZTtcbiAgICAgIGxldCB2YWx1ZSA9IGZvcm1GaWVsZC52YWx1ZTtcbiAgICAgIHRoaXMuZGlhbG9nUmVmID0gdGhpcy5zZXREaWFsb2dEYXRhKGZvcm1GaWVsZCwgZm9ybUZpZWxkLmxvb2t1cENvbnRyb2wpO1xuICAgICAgdGhpcy5zZXREeW5hbWljRGlhbG9nUmVmKHRoaXMuZGlhbG9nUmVmKTtcbiAgICAgIHRoaXMubmdab25lLm9uU3RhYmxlXG4gICAgICAgIC5waXBlKHRha2UoMSkpIC8vIEVtaXQgb25seSBvbmNlIHdoZW4gdGhlIHpvbmUgYmVjb21lcyBzdGFibGVcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgZHJhZ2dhYmxlRGlhbG9nKGZvcm1GaWVsZD8uZmllbGQgPyBmb3JtRmllbGQ/LmZpZWxkIDogZm9ybUZpZWxkPy5sYWJlbCk7XG4gICAgICAgIH0pO1xuICAgICAgaWYgKHRoaXMuZ3JpZFNlcnZpY2UuY29sdW1uRm9jdXNlZE91dCB8fCB0aGlzLmZvcm1TZXJ2aWNlLmZpZWxkRm9jdXNlZE91dCkge1xuICAgICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSA9IHRoaXMuaW50ZXJjZXB0RGlhbG9nQ2xvc2UuYmluZCh0aGlzKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZGlhbG9nUmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKFxuICAgICAgICAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAoZm9ybUZpZWxkLmZpZWxkKSB7XG4gICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChmb3JtRmllbGQuZmllbGQpPy5mb2N1cygpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgICBmb3JtRmllbGQudmFsdWUgPSB1dGlsaXRpZXMuc2V0RGlhbG9nUmVzcG9uc2UoXG4gICAgICAgICAgICAgIGZvcm1GaWVsZCxcbiAgICAgICAgICAgICAgZm9ybUZpZWxkLmxvb2t1cENvbnRyb2wsXG4gICAgICAgICAgICAgIHJlc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMubG9va3VwRm9jdXNPdXQgPSBmYWxzZTtcbiAgICAgICAgICAgIGlmIChmb3JtRmllbGQub25SZXR1cm4pIGZvcm1GaWVsZC5vblJldHVybihmb3JtRmllbGQudmFsdWUsIHJlcyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMub25Gb2N1c091dEV2ZW50KGZvcm1GaWVsZCk7XG4gICAgICAgICAgY29uc3QgZm9ybUZpZWxkVmFsdWUgPVxuICAgICAgICAgICAgdHlwZW9mIGZvcm1GaWVsZC52YWx1ZSA9PT0gJ29iamVjdCdcbiAgICAgICAgICAgICAgPyBmb3JtRmllbGQudmFsdWUudGV4dFxuICAgICAgICAgICAgICA6IGZvcm1GaWVsZC52YWx1ZTtcbiAgICAgICAgICB2YWx1ZSA9IHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgPyB2YWx1ZS50ZXh0IDogdmFsdWU7XG4gICAgICAgICAgaWYgKGZvcm1GaWVsZFZhbHVlICE9PSB2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5icm93c2VyVGFiQ2xvc2VFdmVudCh0cnVlKTtcbiAgICAgICAgICAgIGlmIChmb3JtRmllbGQub25DaGFuZ2UpIHtcbiAgICAgICAgICAgICAgZm9ybUZpZWxkLm9uQ2hhbmdlKGZvcm1GaWVsZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAoeyBlcnJvciB9OiBhbnkpID0+IHtcbiAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5hcGlFcnJvcihlcnJvcik7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIG9uQ2xpY2sgZXZlbnQgaW52b2tlZCAmJiBvcGVuIERpYWxvZyBvbiBsb29rdXBDb250cm9sIGZpZWxkL2xhYmVsXG4gICAqL1xuICBoYW5kbGVDbGlja0V2ZW50KGZvcm1GaWVsZDogSUZvcm1GaWVsZCkge1xuICAgIHRoaXMub25DbGlja0V2ZW50KGZvcm1GaWVsZCk7XG4gICAgaWYgKGZvcm1GaWVsZCAmJiBmb3JtRmllbGQubG9va3VwQ29udHJvbCkge1xuICAgICAgdGhpcy5zZWxlY3RMb29rdXBMYWJlbChmb3JtRmllbGQpO1xuICAgICAgdGhpcy5zZWxlY3RMb29rdXBGaWVsZChmb3JtRmllbGQpO1xuICAgIH1cbiAgfVxuXG4gIHNldE11bHRpU2VsZWN0Q2xhc3MoZm9ybUZpZWxkOiBJRm9ybUZpZWxkKSB7XG4gICAgbGV0IG11bHRpU2VsZWN0Q2xhc3MgPSAnJ1xuICAgIGlmIChmb3JtRmllbGQuZXJyb3JNZXNzYWdlKSB7XG4gICAgICBpZiAoZm9ybUZpZWxkLnZhbHVlICYmIGZvcm1GaWVsZC52YWx1ZT8ubGVuZ3RoID4gMikge1xuICAgICAgICBtdWx0aVNlbGVjdENsYXNzID0gJ25nLWludmFsaWQgbmctZGlydHkgd3JhcC1jaGlwcyc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtdWx0aVNlbGVjdENsYXNzID0gJ25nLWludmFsaWQgbmctZGlydHknO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoZm9ybUZpZWxkLnZhbHVlICYmIGZvcm1GaWVsZC52YWx1ZT8ubGVuZ3RoID4gMikge1xuICAgICAgICBtdWx0aVNlbGVjdENsYXNzID0gJ2Zvcm0tY29udHJvbCB3cmFwLWNoaXBzJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG11bHRpU2VsZWN0Q2xhc3MgPSAnZm9ybS1jb250cm9sIG5nLWRpcnR5JztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG11bHRpU2VsZWN0Q2xhc3M7XG4gIH1cblxuICAvKipcbiAgICogc2V0IENhbGVuZGFyIERhdGUgRm9ybWF0ICYmIHNldCBEYXRlIE1pbnV0ZSBpbnRlcnZhbFxuICAgKi9cbiAgc2V0Q2FsZW5kYXJEYXRlKGZvcm1GaWVsZDogSUZvcm1GaWVsZCkge1xuICAgIGlmIChmb3JtRmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkNBTEVOREFSKSB7XG4gICAgICAvLyBjb252ZXJ0IHRpbWUgaW50byBkYXRlIGZvcm1hdFxuICAgICAgaWYgKFxuICAgICAgICBmb3JtRmllbGQudGltZU9ubHkgJiZcbiAgICAgICAgKGZvcm1GaWVsZC52YWx1ZT8udG9TdHJpbmcoKS5pbmNsdWRlcygnQU0nKSB8fFxuICAgICAgICAgIGZvcm1GaWVsZC52YWx1ZT8udG9TdHJpbmcoKS5pbmNsdWRlcygnUE0nKSlcbiAgICAgICkge1xuICAgICAgICBmb3JtRmllbGQudmFsdWUgPSB1dGlsaXRpZXMuc2V0VGltZUluRGF0ZShmb3JtRmllbGQudmFsdWUpO1xuICAgICAgfWVsc2UgaWYgKFxuICAgICAgICAoZm9ybUZpZWxkLnNob3dUaW1lIHx8IGZvcm1GaWVsZC50aW1lT25seSkgJiZcbiAgICAgICAgZm9ybUZpZWxkLnZhbHVlICYmXG4gICAgICAgIGZvcm1GaWVsZC5taW51dGVzSW50ZXJ2YWxcbiAgICAgICkge1xuICAgICAgICBmb3JtRmllbGQudmFsdWUgPSBuZXcgRGF0ZShcbiAgICAgICAgICB1dGlsaXRpZXMuc2V0TWludXRlc0ludGVydmFsKGZvcm1GaWVsZC52YWx1ZSlcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIChmb3JtRmllbGQuc2hvd1RpbWUgfHwgZm9ybUZpZWxkLnRpbWVPbmx5KSAmJlxuICAgICAgICAhZm9ybUZpZWxkLnZhbHVlICYmXG4gICAgICAgIGZvcm1GaWVsZC5taW51dGVzSW50ZXJ2YWxcbiAgICAgICkge1xuICAgICAgICBmb3JtRmllbGQudmFsdWUgPSBuZXcgRGF0ZSh1dGlsaXRpZXMuc2V0TWludXRlc0ludGVydmFsKG5ldyBEYXRlKCkpKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY2FsZW5kYXJQcmV2aW91c1ZhbHVlID0gZm9ybUZpZWxkLnZhbHVlO1xuICAgIH1cbiAgfVxuICBjYWxlbmRhckNoYW5nZVZhbHVlKGZvcm1GaWVsZDogYW55KSB7XG4gICAgaWYgKGZvcm1GaWVsZC52YWx1ZSAhPT0gZm9ybUZpZWxkLnByZXZpb3VzVmFsdWUpIHtcbiAgICAgIHRoaXMuYnJvd3NlclRhYkNsb3NlRXZlbnQodHJ1ZSk7XG4gICAgICBpZiAoZm9ybUZpZWxkLm9uQ2hhbmdlKSB7XG4gICAgICAgIGZvcm1GaWVsZC5wcmV2aW91c1ZhbHVlID0gZm9ybUZpZWxkLnZhbHVlO1xuICAgICAgICBmb3JtRmllbGQub25DaGFuZ2UoZm9ybUZpZWxkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogaW52b2tlZCBzZWN0aW9uIENsaWNrZWQgZXZlbnRcbiAgICovXG4gIGNsaWNrZWRTZWN0aW9uKHNlY3Rpb246IElGb3JtU2VjdGlvbikge1xuICAgIHRoaXMuc2VjdGlvbkNsaWNrZWRFdmVudC5lbWl0KHNlY3Rpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIG9wZW4gZGlhbG9nIGluIE5vdGVfRmllbGQgY29ucnRyb2xcbiAgICovXG4gIGhhbmRsZU5vdGVGaWVsZERpYWxvZyhmb3JtZmllbGQ6IElGb3JtRmllbGQpIHtcbiAgICBjb25zdCByZWYgPSB0aGlzLmRpYWxvZ1NlcnZpY2Uub3BlbihOb3Rlc0NvbXBvbmVudCwge1xuICAgICAgaGVhZGVyOiBmb3JtZmllbGQubGFiZWwgYXMgc3RyaW5nLFxuICAgICAgd2lkdGg6ICc1MCUnLFxuICAgICAgZGF0YToge1xuICAgICAgICB2YWx1ZTogZm9ybWZpZWxkLnZhbHVlLFxuICAgICAgICBkaXNhYmxlZFRleHQ6IGZvcm1maWVsZC5kaXNhYmxlZFRleHQsXG4gICAgICB9LFxuICAgIH0pO1xuICAgIHRoaXMuc2V0RHluYW1pY0RpYWxvZ1JlZihyZWYpO1xuICAgIHRoaXMubmdab25lLm9uU3RhYmxlXG4gICAgICAucGlwZSh0YWtlKDEpKSAvLyBFbWl0IG9ubHkgb25jZSB3aGVuIHRoZSB6b25lIGJlY29tZXMgc3RhYmxlXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgZHJhZ2dhYmxlRGlhbG9nKGZvcm1maWVsZD8uZmllbGQgPyBmb3JtZmllbGQ/LmZpZWxkIDogZm9ybWZpZWxkPy5sYWJlbCk7XG4gICAgICB9KTtcbiAgICByZWYub25DbG9zZS5zdWJzY3JpYmUoXG4gICAgICAoZGF0YTogYW55KSA9PiB7XG4gICAgICAgIGlmIChkYXRhICYmIGZvcm1maWVsZC5vblJldHVybikge1xuICAgICAgICAgIGZvcm1maWVsZC5vblJldHVybihkYXRhKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgICh7IGVycm9yIH0pID0+IHtcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuYXBpRXJyb3IoZXJyb3IpO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBzZXRDbGFzc05hbWUoZm9ybUZpZWxkOiBJRm9ybUZpZWxkKTogc3RyaW5nIHtcbiAgICBpZiAoZm9ybUZpZWxkLmhpZGRlbikgcmV0dXJuICcgaGlkZGVuJztcbiAgICBlbHNlIHJldHVybiAnJztcbiAgfVxuXG4gIGF1dG9TZWFyY2goZXZlbnQ6IGFueSwgZm9ybUZpZWxkOiBhbnkpIHtcbiAgICBpZiAoZm9ybUZpZWxkICYmIGV2ZW50KSB7XG4gICAgICBmb3JtRmllbGQub25SZXR1cm4oZXZlbnQucXVlcnksIGZvcm1GaWVsZCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGludm9rZWQgb25Gb2N1c091dCBFdmVudFxuICAgKi9cbiAgb25Gb2N1c091dEV2ZW50KGZvcm1GaWVsZDogSUZvcm1GaWVsZCkge1xuICAgIGxldCByZWNvcmQ6IGFueSA9IHt9O1xuICAgIHRoaXMuZm9ybS5mb3JtU2VjdGlvbnM/LmZvckVhY2goKHNlY3Rpb24pID0+IHtcbiAgICAgIHNlY3Rpb24uZmllbGRzLmZvckVhY2goKGZvcm1GaWVsZCkgPT4ge1xuICAgICAgICBpZiAoZm9ybUZpZWxkLmZpZWxkKSB7XG4gICAgICAgICAgcmVjb3JkW2Zvcm1GaWVsZC5maWVsZF0gPSBmb3JtRmllbGQudmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHV0aWxpdGllcy5zZXRIeXBlcmxpbmtQYXJhbVZhbHVlKHJlY29yZCwgdGhpcy5mb3JtKTtcbiAgIC8vIHRoaXMuZm9ybVNlcnZpY2UuY2hlY2tWYWxpZGl0eShbZm9ybUZpZWxkXSk7XG4gICAgaWYgKGZvcm1GaWVsZCAmJiBmb3JtRmllbGQub25Gb2N1c091dCAmJiB0aGlzLmxvb2t1cEZvY3VzT3V0ID09PSBmYWxzZSkge1xuICAgICAgZm9ybUZpZWxkLm9uRm9jdXNPdXQoZm9ybUZpZWxkKTtcbiAgICB9XG4gIH1cblxuICBvbkJhY2tTcGFjZUV2ZW50KGZvcm1GaWVsZDogSUZvcm1GaWVsZCkge1xuICAgIGlmICh0eXBlb2YgZm9ybUZpZWxkLnZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgZm9ybUZpZWxkLnZhbHVlLnRleHQgPSBmb3JtRmllbGQudmFsdWUudGV4dC5zdWJzdHJpbmcoXG4gICAgICAgIDAsXG4gICAgICAgIGZvcm1GaWVsZC52YWx1ZS50ZXh0Lmxlbmd0aCAtIDFcbiAgICAgICk7XG4gICAgICBpZiAoZm9ybUZpZWxkLnZhbHVlLnRleHQubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIGZvcm1GaWVsZC52YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgLy90aGlzLmZvcm1TZXJ2aWNlLmNoZWNrVmFsaWRpdHkoW2Zvcm1GaWVsZF0pO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZm9ybUZpZWxkLnZhbHVlICYmIGZvcm1GaWVsZC52YWx1ZS5sZW5ndGggPT09IDEpIHtcbiAgICAgIGZvcm1GaWVsZC52YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgLy8gdGhpcy5mb3JtU2VydmljZS5jaGVja1ZhbGlkaXR5KFtmb3JtRmllbGRdKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogY2xlYXIgdGhlIGRyb3Bkb3duIHZhbHVlIHdoZW4gY2xpY2sgb24geFxuICAgKi9cbiAgb25DbGVhclZhbHVlKGZvcm1GaWVsZDogSUZvcm1GaWVsZCwgZXZlbnQ6IGFueSkge1xuICAgLy8gdGhpcy5mb3JtU2VydmljZS5jaGVja1ZhbGlkaXR5KFtmb3JtRmllbGRdKTtcbiAgICB0aGlzLm9uQ2hhbmdlRXZlbnQoZm9ybUZpZWxkKTtcbiAgICB0aGlzLmRyb3BEb3duQ2hhbmdlRXZlbnQuZW1pdChmb3JtRmllbGQpO1xuICAgIGlmICghZXZlbnQudmFsdWUpIHtcbiAgICAgIHRoaXMub25Gb2N1c091dEV2ZW50KGZvcm1GaWVsZCk7XG4gICAgfVxuICB9XG5cbiAgY2xlYXJEcm9wZG93blZhbHVlKGZvcm1GaWVsZDogYW55KSB7XG4gICAgdGhpcy5vbkNsaWNrRXZlbnQoZm9ybUZpZWxkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbnZva2Ugb25DaGFuZ2UgRXZlbnQgd2hlbiBWYWx1ZSBDaGFuZ2VkXG4gICAqL1xuICBvbkNoYW5nZUV2ZW50KGZvcm1GaWVsZDogSUZvcm1GaWVsZCkge1xuICAgIHRoaXMuYnJvd3NlclRhYkNsb3NlRXZlbnQodHJ1ZSk7XG4gICAgaWYgKGZvcm1GaWVsZC5vbkNoYW5nZSkge1xuICAgICAgZm9ybUZpZWxkLm9uQ2hhbmdlKGZvcm1GaWVsZCk7XG4gICAgfVxuICB9XG5cbiAgdHlwZU9mKHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIGNvbnZlcnQgdW5TYWZlIGxpbmsgaW50byBzYWZlIGxpbmtcbiAgICovXG4gIHNhbml0aXplVXJsKHVybDogc3RyaW5nKSB7XG4gICAgbGV0IGxpbmtVcmw6IGFueSA9IHVybDtcbiAgICBpZiAobGlua1VybCkge1xuICAgICAgbGlua1VybCA9IHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RVcmwobGlua1VybCk7XG4gICAgfVxuICAgIHJldHVybiBsaW5rVXJsO1xuICB9XG5cbiAgLyoqXG4gICAqIGludm9rZSBvbiBkeW5hbWljIGJ1dHRvbnMgY2xpY2tcbiAgICovXG4gIG9uTmV3QnV0dG9uQ2xpY2soYnV0dG9uKSB7XG4gICAgbGV0IHNhdmVBbGxHcmlkOiBhbnkgPSBbXTtcbiAgICBsZXQgZ2V0QnRuczogYW55ID0gW107XG4gICAgbGV0IHZhbGlkaXR5ID0gdHJ1ZTtcbiAgICBsZXQgZXJyb3JNZXNzYWdlRGV0YWlscyA9ICcnO1xuICAgIHRoaXMuZm9ybS5mb3JtU2VjdGlvbnMuZm9yRWFjaCgoZm9ybVNlY3Rpb24pID0+IHtcbiAgICAgIGlmICghdGhpcy5mb3JtU2VydmljZS5jaGVja1ZhbGlkaXR5KGZvcm1TZWN0aW9uLmZpZWxkcykpIHtcbiAgICAgICAgZm9ybVNlY3Rpb24uZmllbGRzPy5mb3JFYWNoKChmb3JtRmllbGQ6IGFueSkgPT4ge1xuICAgICAgICAgIGlmIChmb3JtRmllbGQuZXJyb3JNZXNzYWdlKSB7XG4gICAgICAgICAgICBlcnJvck1lc3NhZ2VEZXRhaWxzID0gZXJyb3JNZXNzYWdlRGV0YWlsc1xuICAgICAgICAgICAgICA/IGVycm9yTWVzc2FnZURldGFpbHMgKyAnICwgJyArIGZvcm1GaWVsZC5lcnJvck1lc3NhZ2VcbiAgICAgICAgICAgICAgOiBmb3JtRmllbGQuZXJyb3JNZXNzYWdlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGxldCBmaWVsZCA9IGZvcm1TZWN0aW9uLmZpZWxkcy5zb21lKFxuICAgICAgICAgIChmaWVsZCkgPT4gZmllbGQucmVxdWlyZWRGaWVsZCAmJiBmaWVsZC5lcnJvck1lc3NhZ2UgJiYgIWZpZWxkLnZhbHVlXG4gICAgICAgICk7XG4gICAgICAgIGlmICh2YWxpZGl0eSAmJiBmaWVsZCkge1xuICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKFxuICAgICAgICAgICAgZXJyb3JNZXNzYWdlRGV0YWlscyxcbiAgICAgICAgICAgIDUwMDAsXG4gICAgICAgICAgICAnUkVRVUlSRUQgRklFTEQnXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihlcnJvck1lc3NhZ2VEZXRhaWxzLCA1MDAwLCAnSU5WQUxJRCBGSUVMRCcpO1xuICAgICAgICB9XG4gICAgICAgIHZhbGlkaXR5ID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAodmFsaWRpdHkpIHtcbiAgICAgICAgZm9ybVNlY3Rpb24uZmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICAgICAgc2F2ZUFsbEdyaWQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuJyArIGZpZWxkPy5jb21wb25lbnRDb250cm9sPy5pZCArICcgJyArICcjc2F2ZUFsbEdyaWRWYWx1ZXMnKTtcbiAgICAgICAgICBnZXRCdG5zID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLicgKyBmaWVsZD8uY29tcG9uZW50Q29udHJvbD8uaWQgKyAnICcgKyAnLnNhdmVSb3cnKTtcbiAgICAgICAgICBpZiAoc2F2ZUFsbEdyaWQubGVuZ3RoKSB7XG4gICAgICAgICAgICBzYXZlQWxsR3JpZFswXS5jbGljaygpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIGlmIChnZXRCdG5zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGZvciAobGV0IHNhdmVSb3dCdG4gb2YgZ2V0QnRucykge1xuICAgICAgICAgICAgICBzYXZlUm93QnRuPy5jbGljaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9KVxuICAgIGJ1dHRvbi5mdW5jKCk7XG4gIH1cblxuICBzZWxlY3RlZENhcmRDbGlja0V2ZW50KGRhdGE6IGFueSkge1xuICAgIGlmIChcbiAgICAgIHRoaXMuZm9ybSAmJlxuICAgICAgdGhpcy5mb3JtLmZvcm1TZWN0aW9ucyAmJlxuICAgICAgdGhpcy5mb3JtLmZvcm1TZWN0aW9ucy5sZW5ndGggPiAwXG4gICAgKSB7XG4gICAgICB0aGlzLmZvcm0uZm9ybVNlY3Rpb25zLmZvckVhY2goKHNlY3Rpb246IGFueSkgPT4ge1xuICAgICAgICBzZWN0aW9uLmZpZWxkcy5mb3JFYWNoKChmaWVsZDogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKGZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5DQVJEKSB7XG4gICAgICAgICAgICBpZiAoZmllbGQuY2FyZCAmJiBmaWVsZC5jYXJkLmRhdGE/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgbGV0IG9iaiA9IGZpZWxkLmNhcmQuZGF0YVtkYXRhLmluZGV4XTtcbiAgICAgICAgICAgICAgaWYgKG9iaikge1xuICAgICAgICAgICAgICAgIGlmIChvYmouc2VsZWN0ZWRDYXJkKSB7XG4gICAgICAgICAgICAgICAgICBkZWxldGUgb2JqLnNlbGVjdGVkQ2FyZDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgb2JqWydzZWxlY3RlZENhcmQnXSA9ICdjYXJkLWFjdGl2ZSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoZGF0YS5zZWxlY3RlZENhcmQpIHtcbiAgICAgIGRhdGFbJ3NlbGVjdGVkQ2FyZCddID0gJyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRhdGFbJ3NlbGVjdGVkQ2FyZCddID0gJ2NhcmQtYWN0aXZlJztcbiAgICB9XG4gIH1cblxuICBjaGFuZ2VQYXNzd29yZFR5cGUoZm9ybUZpZWxkKSB7XG4gICAgaWYgKGZvcm1GaWVsZC50ZXh0VHlwZSA9PSAndGV4dCcpIHtcbiAgICAgIGZvcm1GaWVsZC50ZXh0VHlwZSA9ICdwYXNzd29yZCc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvcm1GaWVsZC50ZXh0VHlwZSA9ICd0ZXh0JztcbiAgICB9XG4gIH1cbiAgb25MaW5rQ2xpY2sobGluaywgZm9ybVNlY3Rpb24pe1xuICAgIGlmKCFsaW5rLmRpc2FibGVkICYmICFmb3JtU2VjdGlvbi5kaXNhYmxlZCl7XG4gICAgICBsaW5rLm9uQ2xpY2soKTtcbiAgICB9XG4gIH1cbiAgaXNWYWxpZENvbHVtbihjb2w6IGFueSl7XG4gICAgICByZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihjb2wpICYmIGNvbCA+IDAgJiYgY29sIDw9IDEyXG4gIH1cbn1cblxuIiwiPHAtY29uZmlybURpYWxvZyBbc3R5bGVdPVwieyB3aWR0aDogJzUwdncnIH1cIiBrZXk9XCJjYW5jZWxCdXR0b25cIj48L3AtY29uZmlybURpYWxvZz5cbjxmb3JtICpuZ0lmPVwiIWlzRm9ybUhpZGRlbiAmJiBmb3JtXCI+XG4gIDxkaXYgKm5nSWY9XCJsb2FkaW5nXCI+XG4gICAgPHAtcHJvZ3Jlc3NTcGlubmVyIGNsYXNzPVwicHJvZ3Jlc3Mtc3Bpbm5lciBwLXByb2dyZXNzLXNwaW5uZXItY2lyY2xlIGN1c3RvbS1zcGlubmVyXCI+PC9wLXByb2dyZXNzU3Bpbm5lcj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJmbGV4LXdyYXBcIj5cbiAgICA8c3BhbiBbbmdDbGFzc109XCJ7ICdmaXhlZC1oZWlnaHQnOiBzdGlja3lBY3Rpb25zIH1cIj5cbiAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGZvcm1TZWN0aW9uIG9mIGZvcm0uZm9ybVNlY3Rpb25zXCIgW2NsYXNzXT1cIiFmb3JtU2VjdGlvbi5oaWRkZW4gPyAnY2FyZCB3LTEwMCcgOiAnJ1wiPlxuICAgICAgICA8c3BhbiAoY2xpY2spPVwiY2xpY2tlZFNlY3Rpb24oZm9ybVNlY3Rpb24pXCI+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cIiFmb3JtU2VjdGlvbiA/ICcnIDogc2VjdGlvbkRpc2FibGVkKGZvcm1TZWN0aW9uKVwiPlxuICAgICAgICAgICAgPGRpdiBbY2xhc3NdPVwiZm9ybVNlY3Rpb24uaGlkZGVuID8gJ2hpZGRlbicgOiBmb3JtU2VjdGlvbi5jbGFzc1wiPlxuICAgICAgICAgICAgICA8cC1hY2NvcmRpb24+XG4gICAgICAgICAgICAgICAgPHAtYWNjb3JkaW9uVGFiIFtzZWxlY3RlZF09XCJmb3JtU2VjdGlvbi5leHBhbmRlZCA9PT0gZmFsc2UgPyBmYWxzZSA6IHRydWVcIlxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZvcm1TZWN0aW9uLmFjY29yZGlvbkRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIiFmb3JtU2VjdGlvbi5zaG93QWNjb3JkaW9uID8gJ2hpZGUtYWNjb3JkaWFuJyA6ICcnXCI+XG4gICAgICAgICAgICAgICAgICA8cC1oZWFkZXI+XG4gICAgICAgICAgICAgICAgICAgIDxpIFtjbGFzc109XCJmb3JtU2VjdGlvbi5pY29uXCIgW3RpdGxlXT1cImZvcm1TZWN0aW9uLm5hbWVcIiBjbGFzcz1cIm1yLTEgcGwtMlwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdWJzZWN0aW9uLWhlYWRlclwiPnt7IGZvcm1TZWN0aW9uLm5hbWVcbiAgICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvcC1oZWFkZXI+XG5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBwLWNvbCBmb3JtLWNvbXBvbmVudCBhY2NvcmRpb24taGVhZGVyLXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsICpuZ0lmPVwiIWZvcm1TZWN0aW9uLnNob3dBY2NvcmRpb25cIiBmb3I9XCJuYW1lXCIgY2xhc3M9XCJhY2NvcmRpb25IZWFkZXJOYW1lIGZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGkgW3RpdGxlXT1cImZvcm1TZWN0aW9uLm5hbWVcIiBbY2xhc3NdPVwiZm9ybVNlY3Rpb24uaWNvblwiIGNsYXNzPVwiXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXY+IHt7IGZvcm1TZWN0aW9uLm5hbWUgfX0gPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgbGluayBvZiBmb3JtU2VjdGlvbi5saW5rc1wiID5cbiAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJtci0zIGN1c3RvbS1saW5rXCIgZGF0YS10aXRsZS1lbGVtZW50PVwic2VsZlwiIFtjbGFzc109XCJsaW5rLm5hbWUgJiYhZm9ybVNlY3Rpb24uZGlzYWJsZWQmJiFsaW5rLmRpc2FibGVkICA/ICdjdXN0b20tbGluaycgOiAnZGlzYWJsZWQtbGluaydcIiAoY2xpY2spPVwib25MaW5rQ2xpY2sobGluaywgZm9ybVNlY3Rpb24pXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBsaW5rLm5hbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXdyYXAgZm9ybS1jb21wb25lbnQgZm9ybS1ib2R5LXdyYXBwZXJcIj4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IFtjbGFzc109XCIoZm9ybUZpZWxkLmNvbnRyb2w9PT0nYWRkX2J1dHRvbic/ICcgZm9ybS1idXR0b24tZmllbGQtd3JhcHBlciAnOicnKStcbiAgICAgICAgICAgICAgICAgICAgKCBpc1ZhbGlkQ29sdW1uKGZvcm1GaWVsZC5jb2x1bW4pXG4gICAgICAgICAgICAgICAgICAgID8gJ2NvbC0nICsgZm9ybUZpZWxkLmNvbHVtbiArIHNldENsYXNzTmFtZShmb3JtRmllbGQpXG4gICAgICAgICAgICAgICAgICAgIDogaXNWYWxpZENvbHVtbihmb3JtLmNvbHVtbilcbiAgICAgICAgICAgICAgICAgICAgPyAnY29sLScgKyBmb3JtLmNvbHVtbiArIHNldENsYXNzTmFtZShmb3JtRmllbGQpXG4gICAgICAgICAgICAgICAgICAgIDogZm9ybUZpZWxkLmNvbHVtbiB8fCBmb3JtLmNvbHVtblxuICAgICAgICAgICAgICAgICAgICA/ICcgY29sICdcbiAgICAgICAgICAgICAgICAgICAgOiAnY29sLTEyIG1kOmNvbC0zIGZsZXggZmxleC1jb2x1bW4nICsgc2V0Q2xhc3NOYW1lKGZvcm1GaWVsZCkpXCJcbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImZvcm1GaWVsZC5jb250cm9sID09PSAnYnJlYWtfbGluZScgPyAnYnJlYWstbGluZScgOiAnJ1wiXG4gICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgZm9ybUZpZWxkIG9mIGZvcm1TZWN0aW9uLmZpZWxkczsgbGV0IGZvcm1GaWVsZEluZGV4ID0gaW5kZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8IS0tIGxhYmVsQ29udHJvbCBIeXBlcmxpbmsgb24gbG9va3VwICBDb250cm9sIEZpZWxkLS0+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImZvcm1GaWVsZC5sYWJlbD8ubGFiZWxDb250cm9sXCIgY2xhc3M9XCJ0b0Zyb250Rm9yVG9vbHRpcFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxpbmstbGFiZWwgY3VzdG9tLWxpbmtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImZvcm1GaWVsZC5sYWJlbD8ubGFiZWxDb250cm9sLmh5cGVybGluayAmJiBmb3JtRmllbGQubGFiZWw/LmxhYmVsQ29udHJvbC5oeXBlcmxpbmsudGFyZ2V0ICE9PSAnX2lmcmFtZSdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGFiaW5kZXg9XCItMVwiIChjbGljayk9XCJmb3JtRmllbGQub25DbGljayA/IG9uQ2xpY2tFdmVudChmb3JtRmllbGQpIDogJycgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGFyZ2V0XT1cImZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2w/Lmh5cGVybGluaz8udGFyZ2V0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiZm9ybUZpZWxkLmRpc2FibGVkVGV4dCA/ICdkaXNhYmxlLWxhYmVsLWNvbnRyb2wnIDogJycgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaHJlZl09XCJmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sPy5oeXBlcmxpbms/LmxpbmtcIiBkYXRhLXRpdGxlLWVsZW1lbnQ9XCJzZWxmXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZm9ybUZpZWxkLmxhYmVsLm5hbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImZvcm1GaWVsZC5yZXF1aXJlZEZpZWxkXCIgW2NsYXNzXT1cIidyZXF1aXJlZC1zdGFyICcgKyAoZm9ybUZpZWxkPy5lcnJvck1lc3NhZ2UgPyAnIGludmFsaWQgJyA6ICcnKVwiPio8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxpbmstbGFiZWwgY3VzdG9tLWxpbmtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImZvcm1GaWVsZC5sYWJlbD8ubGFiZWxDb250cm9sLmh5cGVybGluayAmJiBmb3JtRmllbGQubGFiZWw/LmxhYmVsQ29udHJvbC5oeXBlcmxpbmsudGFyZ2V0ID09PSAnX2lmcmFtZSdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIHRhYmluZGV4PVwiLTFcIiAoY2xpY2spPVwibG9hZExhYmVsQ29udHJvbElGcmFtZShmb3JtRmllbGQpXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLXRpdGxlLWVsZW1lbnQ9XCJzZWxmXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZm9ybUZpZWxkLmxhYmVsLm5hbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImZvcm1GaWVsZC5yZXF1aXJlZEZpZWxkXCIgW2NsYXNzXT1cIidyZXF1aXJlZC1zdGFyICcgKyAoZm9ybUZpZWxkPy5lcnJvck1lc3NhZ2UgPyAnIGludmFsaWQgJyA6ICcnKVwiPio8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBsYWJlbENvbnRyb2wgb24gYWRkVGV4dGJveCwgY2FsZW5kYXIgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGluay1sYWJlbCBjdXN0b20tbGlua1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZm9ybUZpZWxkLmxhYmVsICYmIGZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wgJiYgZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbC5sb29rdXBDb250cm9sXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxhIHRhYmluZGV4PVwiLTFcIiBbY2xhc3NdPVwiZm9ybUZpZWxkLmxhYmVsLmRpc2FibGVkID8gJ2Rpc2FibGUtbGFiZWwtY29udHJvbCcgOiAnJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdExvb2t1cExhYmVsKGZvcm1GaWVsZCwgJGV2ZW50KVwiIGRhdGEtdGl0bGUtZWxlbWVudD1cInNlbGZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBmb3JtRmllbGQubGFiZWwubmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZm9ybUZpZWxkLnJlcXVpcmVkRmllbGRcIiBbY2xhc3NdPVwiJ3JlcXVpcmVkLXN0YXIgJyArIChmb3JtRmllbGQ/LmVycm9yTWVzc2FnZSA/ICcgaW52YWxpZCAnIDogJycpXCI+Kjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBbbmdTd2l0Y2hdPVwiZm9ybUZpZWxkLmNvbnRyb2xcIj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBTcGFjZXIgQ29udHJvbCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWZvcm1GaWVsZC5oaWRkZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2x1bW5cIiAqbmdTd2l0Y2hDYXNlPVwiZHluYW1pY0Nhc2UuU1BBQ0VSXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW2NsYXNzXT1cImZvcm1GaWVsZC5jb2x1bW4/ICdjb2wtJyArZm9ybUZpZWxkLmNvbHVtbiA6ICcnXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBJbnB1dCBUZXh0QXJlYSAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWZvcm1GaWVsZC5oaWRkZW5cIj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbHVtblwiICpuZ1N3aXRjaENhc2U9XCJkeW5hbWljQ2FzZS5URVhUQVJFQVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBbY2xhc3NdPVwiZm9ybUZpZWxkLmxhYmVsLm9uQ2xpY2sgPyAnY3VzdG9tLWxpbmsnIDogJydcIiAoY2xpY2spPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmxhYmVsLm9uQ2xpY2sgJiYgZm9ybUZpZWxkLmxhYmVsLm9uQ2xpY2soKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiIGRhdGEtdGl0bGUtZWxlbWVudD1cInNlbGZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGZvcm1GaWVsZC5sYWJlbC5vbkNsaWNrXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGZvcm1GaWVsZC5sYWJlbC5uYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGZvcm1GaWVsZC5sYWJlbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZm9ybUZpZWxkLnJlcXVpcmVkRmllbGRcIiBbY2xhc3NdPVwiJ3JlcXVpcmVkLXN0YXIgJyArIChmb3JtRmllbGQ/LmVycm9yTWVzc2FnZSA/ICcgaW52YWxpZCAnIDogJycpXCI+Kjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBkYXRhLXRpdGxlLWVsZW1lbnQ9XCJzZWxmXCIgW2NsYXNzXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQuZXJyb3JNZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnbmctaW52YWxpZCBuZy1kaXJ0eSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICdmb3JtLWNvbnRyb2wnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiBwSW5wdXRUZXh0YXJlYSBbcm93c109XCJmb3JtRmllbGQucm93ID8gZm9ybUZpZWxkLnJvdyA6IDEgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25DaGFuZ2VFdmVudChmb3JtRmllbGQpXCIgKGNsaWNrKT1cImhhbmRsZUNsaWNrRXZlbnQoZm9ybUZpZWxkKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZvcm1GaWVsZC52YWx1ZVwiIFtuYW1lXT1cImZvcm1GaWVsZC5maWVsZFwiIFtkaXNhYmxlZF09XCJmb3JtRmllbGQuZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwie2hlaWdodDogZm9ybUZpZWxkLmhlaWdodCA/IGZvcm1GaWVsZC5oZWlnaHQgOiAnJ31cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJsdXIpPVwib25Gb2N1c091dEV2ZW50KGZvcm1GaWVsZClcIj48L3RleHRhcmVhPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBUZXh0IElucHV0IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhZm9ybUZpZWxkLmhpZGRlblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbHVtblwiICpuZ1N3aXRjaENhc2U9XCJkeW5hbWljQ2FzZS5JTlBVVFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsICpuZ0lmPVwiIWZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmb3JtRmllbGQuZGlzYWJsZWQgJiYgIWZvcm1GaWVsZC5zaG93Qm90dG9tQm9yZGVyID8gJ2Rpc2FibGVkLWxhYmVsJyA6ICcnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmb3JtRmllbGQubGFiZWwub25DbGljayA/ICdjdXN0b20tbGFiZWwnIDogJycpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImZvcm1GaWVsZC5sYWJlbC5vbkNsaWNrICYmIGZvcm1GaWVsZC5sYWJlbC5vbkNsaWNrKClcIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS10aXRsZS1lbGVtZW50PVwic2VsZlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQubGFiZWwgJiYgdHlwZU9mKGZvcm1GaWVsZC5sYWJlbCkgPT09ICdvYmplY3QnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZm9ybUZpZWxkLmxhYmVsLm5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBmb3JtRmllbGQubGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJmb3JtRmllbGQucmVxdWlyZWRGaWVsZFwiIFtjbGFzc109XCIncmVxdWlyZWQtc3RhciAnICsgKGZvcm1GaWVsZD8uZXJyb3JNZXNzYWdlID8gJyBpbnZhbGlkICcgOiAnJylcIj4qPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImZvcm1GaWVsZC5pc1Bhc3N3b3JkXCI+Jm5ic3A7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJmb3JtRmllbGQudGV4dFR5cGU9PSdwYXNzd29yZCc7ZWxzZSBoaWRlQnV0dG9uXCIgdGl0bGU9XCJoaWRlXCIgY2xhc3M9XCJwaSBwaS1leWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNoYW5nZVBhc3N3b3JkVHlwZShmb3JtRmllbGQpXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjaGlkZUJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwicGkgcGktZXllLXNsYXNoXCIgdGl0bGU9XCJzaG93XCIgKGNsaWNrKT1cImNoYW5nZVBhc3N3b3JkVHlwZShmb3JtRmllbGQpXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLXRpdGxlLWVsZW1lbnQ9XCJzZWxmXCIgW2NsYXNzXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5lcnJvck1lc3NhZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ25nLWludmFsaWQgbmctZGlydHknXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICdmb3JtLWNvbnRyb2wnXCIgW2lkXT1cImZvcm1GaWVsZC5zaG93Qm90dG9tQm9yZGVyID8gJ3JlbW92ZS1ib2RlcicgOiAnJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0eXBlXT1cImZvcm1GaWVsZC50ZXh0VHlwZSA/IGZvcm1GaWVsZC50ZXh0VHlwZSA6ICd0ZXh0J1wiIHBJbnB1dFRleHQgWyhuZ01vZGVsKV09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQudmFsdWUgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVPZihmb3JtRmllbGQudmFsdWUpID09PSAnb2JqZWN0J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBmb3JtRmllbGQudmFsdWUudGV4dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBmb3JtRmllbGQudmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgKGNoYW5nZSk9XCJvbkNoYW5nZUV2ZW50KGZvcm1GaWVsZClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCJmb3JtRmllbGQuZmllbGQgPyBmb3JtRmllbGQuZmllbGQgOiBmb3JtRmllbGQubGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlQ2xpY2tFdmVudChmb3JtRmllbGQpXCIgW2Rpc2FibGVkXT1cImZvcm1GaWVsZC5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChibHVyKT1cIm9uRm9jdXNPdXRFdmVudChmb3JtRmllbGQpXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWZvcm1GaWVsZD8uaXNWYWxpZFwiIGNsYXNzPVwiZXJyb3JcIj57eyBmb3JtRmllbGQuZXJyb3JNZXNzYWdlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIE51bWJlciBJbnB1dCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWZvcm1GaWVsZC5oaWRkZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2x1bW5cIiAqbmdTd2l0Y2hDYXNlPVwiZHluYW1pY0Nhc2UuTlVNRVJJQ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWZvcm1GaWVsZD8ubGFiZWw/LmxhYmVsQ29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQubGFiZWwub25DbGljayA/ICdjdXN0b20tbGluaycgOiAnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQubGFiZWwub25DbGljayAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5sYWJlbC5vbkNsaWNrKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiIGRhdGEtdGl0bGUtZWxlbWVudD1cInNlbGZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGZvcm1GaWVsZC5sYWJlbC5vbkNsaWNrXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGZvcm1GaWVsZC5sYWJlbC5uYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGZvcm1GaWVsZC5sYWJlbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZm9ybUZpZWxkLnJlcXVpcmVkRmllbGRcIiBbY2xhc3NdPVwiJ3JlcXVpcmVkLXN0YXIgJyArIChmb3JtRmllbGQ/LmVycm9yTWVzc2FnZSA/ICcgaW52YWxpZCAnIDogJycpXCI+Kjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gZm9yIEN1cnJlbmN5ICYmIG51bWJlciAmJiBEZWNpbWFsICYmIFBlcmNlbnQgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbnB1dC1udW1iZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwLWlucHV0TnVtYmVyIGRhdGEtdGl0bGUtZWxlbWVudD1cImlucHV0LHNwYW5cIiBbY2xhc3NdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQuZXJyb3JNZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ25nLWludmFsaWQgbmctZGlydHknXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ2Zvcm0tY29udHJvbCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiBbKG5nTW9kZWwpXT1cImZvcm1GaWVsZC52YWx1ZVwiIFtuYW1lXT1cImZvcm1GaWVsZC5maWVsZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ2hhbmdlRXZlbnQoZm9ybUZpZWxkKVwiIChjbGljayk9XCJzZWxlY3RMb29rdXBGaWVsZChmb3JtRmllbGQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZvcm1GaWVsZC5kaXNhYmxlZFwiIChvbkJsdXIpPVwib25Gb2N1c091dEV2ZW50KGZvcm1GaWVsZClcIiBbbW9kZV09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQuZm9ybWF0ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmZvcm1hdC50eXBlID09PSAnY3VycmVuY3knXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdjdXJyZW5jeSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ2RlY2ltYWwnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiIFtjdXJyZW5jeV09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQuZm9ybWF0ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmZvcm1hdC50eXBlID09PSAnY3VycmVuY3knICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmZvcm1hdC5mb3JtYXRQYXJhbXMgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQuZm9ybWF0LmZvcm1hdFBhcmFtcy5jdXJyZW5jeVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBmb3JtRmllbGQuZm9ybWF0LmZvcm1hdFBhcmFtcy5jdXJyZW5jeVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnVVNEJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiBbbG9jYWxlXT1cImZvcm1GaWVsZC5mb3JtYXQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmZvcm1hdC50eXBlID09PSAnY3VycmVuY3knICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5mb3JtYXQuZm9ybWF0UGFyYW1zICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5mb3JtYXQuZm9ybWF0UGFyYW1zLmxvY2FsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZm9ybUZpZWxkLmZvcm1hdC5mb3JtYXRQYXJhbXMubG9jYWxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnZW4tVVMnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiBbbWluRnJhY3Rpb25EaWdpdHNdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmZvcm1hdCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5mb3JtYXQuZm9ybWF0UGFyYW1zICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmZvcm1hdC5mb3JtYXRQYXJhbXMuZGlnaXRzSW5mb1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBmb3JtRmllbGQuZm9ybWF0LmZvcm1hdFBhcmFtcy5kaWdpdHNJbmZvXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGZvcm1GaWVsZC5mb3JtYXQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZvcm1GaWVsZC5mb3JtYXQudHlwZSA9PT0gJ2RlY2ltYWwnIHx8IGZvcm1GaWVsZC5mb3JtYXQudHlwZSA9PT0gJ2N1cnJlbmN5JylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJzInXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICcwJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiBbc3VmZml4XT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5mb3JtYXQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQuZm9ybWF0LnR5cGUgPT09ICdwZXJjZW50JyAmJiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcC1pbnB1dE51bWJlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhZm9ybUZpZWxkPy5pc1ZhbGlkXCIgZGF0YS10aXRsZS1lbGVtZW50PVwic2VsZlwiIGNsYXNzPVwiZXJyb3JcIj57eyBmb3JtRmllbGQuZXJyb3JNZXNzYWdlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZm9ybUZpZWxkLnJlcXVpcmVkXCI+ICogPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4gXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gUGFzc3dvcmQgSW5wdXQgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFmb3JtRmllbGQuaGlkZGVuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sdW1uXCIgKm5nU3dpdGNoQ2FzZT1cImR5bmFtaWNDYXNlLlBBU1NXT1JEXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIFtjbGFzc109XCJmb3JtRmllbGQubGFiZWwub25DbGljayA/ICdjdXN0b20tbGluaycgOiAnJ1wiIChjbGljayk9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQubGFiZWwub25DbGljayAmJiBmb3JtRmllbGQubGFiZWwub25DbGljaygpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiIGRhdGEtdGl0bGUtZWxlbWVudD1cInNlbGZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQubGFiZWwub25DbGlja1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBmb3JtRmllbGQubGFiZWwubmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBmb3JtRmllbGQubGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImZvcm1GaWVsZC5yZXF1aXJlZEZpZWxkXCIgW2NsYXNzXT1cIidyZXF1aXJlZC1zdGFyICcgKyAoZm9ybUZpZWxkPy5lcnJvck1lc3NhZ2UgPyAnIGludmFsaWQgJyA6ICcnKVwiPio8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgZGF0YS10aXRsZS1lbGVtZW50PVwic2VsZlwiIFtjbGFzc109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmVycm9yTWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ25nLWludmFsaWQgbmctZGlydHknXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnZm9ybS1jb250cm9sJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgdHlwZT1cInBhc3N3b3JkXCIgKGNsaWNrKT1cImhhbmRsZUNsaWNrRXZlbnQoZm9ybUZpZWxkKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uQ2hhbmdlRXZlbnQoZm9ybUZpZWxkKVwiIHBJbnB1dFRleHQgWyhuZ01vZGVsKV09XCJmb3JtRmllbGQudmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25hbWVdPVwiZm9ybUZpZWxkLmZpZWxkXCIgKGJsdXIpPVwib25Gb2N1c091dEV2ZW50KGZvcm1GaWVsZClcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWZvcm1GaWVsZD8uaXNWYWxpZFwiIGNsYXNzPVwiZXJyb3JcIj57eyBmb3JtRmllbGQuZXJyb3JNZXNzYWdlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZm9ybUZpZWxkLnJlcXVpcmVkXCI+ICogPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBDaGVja2JveCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtjbGFzc109XCJmb3JtRmllbGQuY2xhc3NcIiAqbmdJZj1cIiFmb3JtRmllbGQuaGlkZGVuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLTAgZmxleCBmbGV4LWNvbHVtblwiICpuZ1N3aXRjaENhc2U9XCJkeW5hbWljQ2FzZS5DSEVDS0JPWFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCAqbmdJZj1cIiFmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJmb3JtRmllbGQubGFiZWwub25DbGljayA/ICdjdXN0b20tbGluaycgOiAnJ1wiIChjbGljayk9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmxhYmVsLm9uQ2xpY2sgJiYgZm9ybUZpZWxkLmxhYmVsLm9uQ2xpY2soKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtdGl0bGUtZWxlbWVudD1cInNlbGZcIj57e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmxhYmVsICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlT2YoZm9ybUZpZWxkLmxhYmVsKSA9PT0gJ29iamVjdCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZm9ybUZpZWxkLmxhYmVsLm5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZm9ybUZpZWxkLmxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJmb3JtRmllbGQucmVxdWlyZWRGaWVsZFwiIFtjbGFzc109XCIncmVxdWlyZWQtc3RhciAnICsgKGZvcm1GaWVsZD8uZXJyb3JNZXNzYWdlID8gJyBpbnZhbGlkICcgOiAnJylcIj4qPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAtY2hlY2tib3ggXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cIiAnZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgJytcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZvcm1GaWVsZC5lcnJvck1lc3NhZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICduZy1pbnZhbGlkIG5nLWRpcnR5J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ2Zvcm0tY29udHJvbCcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2JpbmFyeV09XCJ0cnVlXCIgW25hbWVdPVwiZm9ybUZpZWxkLmZpZWxkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkNsaWNrRXZlbnQoZm9ybUZpZWxkKVwiIChjaGFuZ2UpPVwib25DaGFuZ2VFdmVudChmb3JtRmllbGQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZm9ybUZpZWxkLnZhbHVlXCIgW2Rpc2FibGVkXT1cImZvcm1GaWVsZC5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25DaGFuZ2UpPVwib25Gb2N1c091dEV2ZW50KGZvcm1GaWVsZClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3AtY2hlY2tib3g+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhZm9ybUZpZWxkPy5pc1ZhbGlkXCIgY2xhc3M9XCJlcnJvclwiPnt7IGZvcm1GaWVsZC5lcnJvck1lc3NhZ2UgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIENhbGVuZGFyIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhZm9ybUZpZWxkLmhpZGRlblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbHVtblwiICpuZ1N3aXRjaENhc2U9XCJkeW5hbWljQ2FzZS5DQUxFTkRBUlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtjbGFzc109XCJmb3JtRmllbGQuZGlzYWJsZWQgPyAnZGlzYWJsZWQtY2FsZW5kYXItaGVhZGVyLXNwYW4nIDogJydcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImZvcm1GaWVsZC5sYWJlbC5vbkNsaWNrID8gJ2N1c3RvbS1saW5rJyA6ICcnXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZm9ybUZpZWxkLmxhYmVsLm9uQ2xpY2sgJiYgZm9ybUZpZWxkLmxhYmVsLm9uQ2xpY2soKVwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS10aXRsZS1lbGVtZW50PVwic2VsZlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBmb3JtRmllbGQubGFiZWwub25DbGlja1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGZvcm1GaWVsZC5sYWJlbC5uYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZm9ybUZpZWxkLmxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZm9ybUZpZWxkLnJlcXVpcmVkRmllbGRcIiBbY2xhc3NdPVwiJ3JlcXVpcmVkLXN0YXIgJyArIChmb3JtRmllbGQ/LmVycm9yTWVzc2FnZSA/ICcgaW52YWxpZCAnIDogJycpXCI+Kjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwLWNhbGVuZGFyIGRhdGEtdGl0bGUtZWxlbWVudD1cImlucHV0XCIgIFtjbGFzc109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmVycm9yTWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ25nLWludmFsaWQgbmctZGlydHkgJyArIGZvcm1GaWVsZC5maWVsZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ2Zvcm0tY29udHJvbCAnKyBmb3JtRmllbGQuZmllbGRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiIFtzaG93QnV0dG9uQmFyXT1cIiFmb3JtRmllbGQudGltZU9ubHlcIiBbKG5nTW9kZWwpXT1cImZvcm1GaWVsZC52YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCJmb3JtRmllbGQuZmllbGRcIiBbZGlzYWJsZWRdPVwiZm9ybUZpZWxkLmRpc2FibGVkXCIgaG91ckZvcm1hdD1cIjEyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkZWZhdWx0RGF0ZV09XCJkZWZhdWx0RGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3RlcE1pbnV0ZV09XCJmb3JtRmllbGQubWludXRlc0ludGVydmFsID8gZm9ybUZpZWxkLm1pbnV0ZXNJbnRlcnZhbCA6IDFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dUaW1lXT1cImZvcm1GaWVsZC5zaG93VGltZVwiIChvblNob3cpPVwic2V0Q2FsZW5kYXJEYXRlKGZvcm1GaWVsZClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RpbWVPbmx5XT1cImZvcm1GaWVsZC50aW1lT25seVwiIFt2aWV3XT1cImZvcm1GaWVsZC5tb250aE9ubHkgPyAnbW9udGgnIDogJ2RhdGUnIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlQ2xpY2tFdmVudChmb3JtRmllbGQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkYXRlRm9ybWF0XT1cImZvcm1GaWVsZD8uZm9ybWF0Py50eXBlID8gZm9ybUZpZWxkLmZvcm1hdD8udHlwZSA6IGNhbGVuZGFyRm9ybWF0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNhbGVuZGFyQ2hhbmdlVmFsdWUoZm9ybUZpZWxkKVwiIChvbklucHV0KT1cImNhbGVuZGFySW5wdXRWYWx1ZShmb3JtRmllbGQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvbkNsb3NlKT1cIm9uRm9jdXNPdXRFdmVudChmb3JtRmllbGQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wLWNhbGVuZGFyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gW3RvZGF5QnV0dG9uU3R5bGVDbGFzc109XCJjb2x1bW4udGltZU9ubHkgPyAnaGlkZS10b2RheS1idG4nIDogJ3Nob3ctdG9kYXktYnRuJ1wiIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWZvcm1GaWVsZD8uaXNWYWxpZFwiIGRhdGEtdGl0bGUtZWxlbWVudD1cInNlbGZcIiBjbGFzcz1cImVycm9yXCI+e3sgZm9ybUZpZWxkLmVycm9yTWVzc2FnZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gRHJvcGRvd24gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFmb3JtRmllbGQuaGlkZGVuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sdW1uXCIgKm5nU3dpdGNoQ2FzZT1cImR5bmFtaWNDYXNlLkRST1BET1dOXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsICpuZ0lmPVwiIWZvcm1GaWVsZC5sYWJlbD8ubGFiZWxDb250cm9sXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImZvcm1GaWVsZC5sYWJlbC5vbkNsaWNrID8gJ2N1c3RvbS1saW5rJyA6ICcnXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImZvcm1GaWVsZC5sYWJlbC5vbkNsaWNrICYmIGZvcm1GaWVsZC5sYWJlbC5vbkNsaWNrKClcIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLXRpdGxlLWVsZW1lbnQ9XCJzZWxmXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBmb3JtRmllbGQubGFiZWwub25DbGlja1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBmb3JtRmllbGQubGFiZWwubmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBmb3JtRmllbGQubGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImZvcm1GaWVsZC5yZXF1aXJlZEZpZWxkICYmICFmb3JtRmllbGQubGFiZWw/LmxhYmVsQ29udHJvbFwiIFtjbGFzc109XCIncmVxdWlyZWQtc3RhciAnICsgKGZvcm1GaWVsZD8uZXJyb3JNZXNzYWdlID8gJyBpbnZhbGlkICcgOiAnJylcIj4qPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAtZHJvcGRvd24gZGF0YS10aXRsZS1lbGVtZW50PVwiaW5wdXQsc3BhblwiIFtjbGFzc109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmVycm9yTWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ25nLWludmFsaWQgbmctZGlydHknXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgW3N0eWxlQ2xhc3NdPSdmb3JtRmllbGQuZmllbGQnIFtwbGFjZWhvbGRlcl09XCJmb3JtRmllbGQudmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwiZm9ybUZpZWxkLmRhdGFcIiBbZmlsdGVyXT1cImZvcm1GaWVsZC5hbGxvd1NlYXJjaFwiIFsobmdNb2RlbCldPVwiZm9ybUZpZWxkLnZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25MYWJlbF09XCJmb3JtRmllbGQub3B0aW9uTGFiZWxcIiBbb3B0aW9uVmFsdWVdPVwiZm9ybUZpZWxkLm9wdGlvblZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuYW1lXT1cImZvcm1GaWVsZC5maWVsZFwiIChrZXl1cC5UYWIpPVwidGFiRm9jdXNFdmVudChmb3JtRmllbGQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjbGVhckRyb3Bkb3duVmFsdWUoZm9ybUZpZWxkKVwiIFtkaXNhYmxlZF09XCJmb3JtRmllbGQuZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9uQmx1cik9XCJvbkZvY3VzT3V0RXZlbnQoZm9ybUZpZWxkKVwiIFtzaG93Q2xlYXJdPVwiZm9ybUZpZWxkLnZhbHVlID8gdHJ1ZSA6IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvbkNoYW5nZSk9XCJvbkNsZWFyVmFsdWUoZm9ybUZpZWxkLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdXRvRGlzcGxheUZpcnN0XT1cImZvcm1GaWVsZC52YWx1ZSA+IDAgPyB0cnVlIDogZmFsc2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3AtZHJvcGRvd24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFmb3JtRmllbGQ/LmlzVmFsaWQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFmb3JtRmllbGQuaGlkZGVuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgY2xhc3M9XCJlcnJvclwiIGRhdGEtdGl0bGUtZWxlbWVudD1cInNlbGZcIj57eyBmb3JtRmllbGQuZXJyb3JNZXNzYWdlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBBdXRvQ29tcGxldGUgU2VhcmNoIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhZm9ybUZpZWxkLmhpZGRlblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbHVtblwiICpuZ1N3aXRjaENhc2U9XCJkeW5hbWljQ2FzZS5BVVRPQ09NUExFVEVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgW2NsYXNzXT1cImZvcm1GaWVsZC5sYWJlbC5vbkNsaWNrID8gJ2N1c3RvbS1saW5rJyA6ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJmb3JtRmllbGQubGFiZWwub25DbGljayAmJiBmb3JtRmllbGQubGFiZWwub25DbGljaygpXCIgZGF0YS10aXRsZS1lbGVtZW50PVwic2VsZlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZm9ybUZpZWxkLmxhYmVsLm9uQ2xpY2tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZm9ybUZpZWxkLmxhYmVsLm5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZm9ybUZpZWxkLmxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJmb3JtRmllbGQucmVxdWlyZWRGaWVsZFwiIFtjbGFzc109XCIncmVxdWlyZWQtc3RhciAnICsgKGZvcm1GaWVsZD8uZXJyb3JNZXNzYWdlID8gJyBpbnZhbGlkICcgOiAnJylcIj4qPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwLWZsdWlkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cC1hdXRvQ29tcGxldGUgZGF0YS10aXRsZS1lbGVtZW50PVwiaW5wdXQsc3BhblwiIFtjbGFzc109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmVycm9yTWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ25nLWludmFsaWQgbmctZGlydHknXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnZm9ybS1jb250cm9sJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgW3N1Z2dlc3Rpb25zXT1cImZvcm1GaWVsZC5kYXRhXCIgWyhuZ01vZGVsKV09XCJmb3JtRmllbGQudmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25DaGFuZ2UpPVwib25DaGFuZ2VFdmVudChmb3JtRmllbGQpXCIgKGNsaWNrKT1cImhhbmRsZUNsaWNrRXZlbnQoZm9ybUZpZWxkKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb21wbGV0ZU1ldGhvZCk9XCJhdXRvU2VhcmNoKCRldmVudCwgZm9ybUZpZWxkKVwiIFtkcm9wZG93bl09XCJmb3JtRmllbGQuc2hvd09wdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmaWVsZF09XCJmb3JtRmllbGQuZGlzcGxheUZpZWxkXCIgW25hbWVdPVwiZm9ybUZpZWxkLmxhYmVsXCIgW211bHRpcGxlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZm9ybUZpZWxkLmRpc2FibGVkXCIgKG9uQmx1cik9XCJvbkZvY3VzT3V0RXZlbnQoZm9ybUZpZWxkKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wLWF1dG9Db21wbGV0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIE11bHRpLXNlbGVjdCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWZvcm1GaWVsZC5oaWRkZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2x1bW5cIiAqbmdTd2l0Y2hDYXNlPVwiZHluYW1pY0Nhc2UuTVVMVElTRUxFQ1RcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgW2NsYXNzXT1cImZvcm1GaWVsZC5sYWJlbC5vbkNsaWNrID8gJ2N1c3RvbS1saW5rJyA6ICcnXCIgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5sYWJlbC5vbkNsaWNrICYmIGZvcm1GaWVsZC5sYWJlbC5vbkNsaWNrKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgZGF0YS10aXRsZS1lbGVtZW50PVwic2VsZlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5sYWJlbC5vbkNsaWNrXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGZvcm1GaWVsZC5sYWJlbC5uYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGZvcm1GaWVsZC5sYWJlbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZm9ybUZpZWxkLnJlcXVpcmVkRmllbGRcIiBbY2xhc3NdPVwiJ3JlcXVpcmVkLXN0YXIgJyArIChmb3JtRmllbGQ/LmVycm9yTWVzc2FnZSA/ICcgaW52YWxpZCAnIDogJycpXCI+Kjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwLW11bHRpU2VsZWN0IGRhdGEtdGl0bGUtZWxlbWVudD1cImlucHV0LHNwYW5cIiBbY2xhc3NdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRNdWx0aVNlbGVjdENsYXNzKGZvcm1GaWVsZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiIFsobmdNb2RlbCldPVwiZm9ybUZpZWxkLnZhbHVlXCIgW29wdGlvbnNdPVwiZm9ybUZpZWxkLmRhdGFcIiBbb3B0aW9uTGFiZWxdPVwiZm9ybUZpZWxkLm9wdGlvbkxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25WYWx1ZV09XCJmb3JtRmllbGQub3B0aW9uVmFsdWVcIiBbYXBwZW5kVG9dPVwiJ2JvZHknXCIgW25hbWVdPVwiZm9ybUZpZWxkLmZpZWxkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvbkNoYW5nZSk9XCJvbkNoYW5nZUV2ZW50KGZvcm1GaWVsZClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImZvcm1GaWVsZC5vbkNsaWNrID8gZm9ybUZpZWxkLm9uQ2xpY2soKSA6ICcnXCIgW2Rpc2FibGVkXT1cImZvcm1GaWVsZC5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJvbkZvY3VzT3V0RXZlbnQoZm9ybUZpZWxkKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcC1tdWx0aVNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gSHlwZXJsaW5rLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFmb3JtRmllbGQuaGlkZGVuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW2NsYXNzXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmRpc2FibGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ2Rpc2FibGVkLWxpbmsnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ2xpbmstbGFiZWwgY3VzdG9tLWxpbmsnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgICpuZ1N3aXRjaENhc2U9XCJkeW5hbWljQ2FzZS5IWVBFUkxJTktcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtdGl0bGUtZWxlbWVudD1cInNlbGZcIiAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQuaHlwZXJsaW5rICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5oeXBlcmxpbmsuY29tcG9uZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiAoY2xpY2spPVwiaHlwZXJsaW5rRGlhbG9nKGZvcm1GaWVsZCwgJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZm9ybUZpZWxkLmxhYmVsIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBbY2xhc3NdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQuZGlzYWJsZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnZGlzYWJsZWQtbGluaydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnbGluay1sYWJlbCBjdXN0b20tbGluaydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQuaHlwZXJsaW5rICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5oeXBlcmxpbmsudGFyZ2V0ICE9PSAnX2lmcmFtZScgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIWZvcm1GaWVsZC5oeXBlcmxpbmsuY29tcG9uZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIHRhYmluZGV4PVwiLTFcIiBbaHJlZl09XCJmb3JtRmllbGQuZGlzYWJsZWQ/Jyc6c2FuaXRpemVVcmwoZm9ybUZpZWxkLmh5cGVybGluaz8ubGluaylcIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RhcmdldF09XCJmb3JtRmllbGQuaHlwZXJsaW5rPy50YXJnZXRcIiAoY2xpY2spPVwiaGFuZGxlQ2xpY2tFdmVudChmb3JtRmllbGQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS10aXRsZS1lbGVtZW50PVwic2VsZlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBmb3JtRmllbGQubGFiZWwgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJmb3JtRmllbGQucmVxdWlyZWRGaWVsZFwiIFtjbGFzc109XCIncmVxdWlyZWQtc3RhciAnICsgKGZvcm1GaWVsZD8uZXJyb3JNZXNzYWdlID8gJyBpbnZhbGlkICcgOiAnJylcIj4qPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmh5cGVybGluayAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQuaHlwZXJsaW5rLnRhcmdldCA9PT0gJ19pZnJhbWUnICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFmb3JtRmllbGQuaHlwZXJsaW5rLmNvbXBvbmVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cInBsLTJcIiAgZGF0YS10aXRsZS1lbGVtZW50PVwic2VsZlwiIHRhYmluZGV4PVwiLTFcIiAoY2xpY2spPVwibG9hZElGcmFtZShmb3JtRmllbGQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGZvcm1GaWVsZC5sYWJlbCB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImZvcm1GaWVsZC5yZXF1aXJlZEZpZWxkXCIgIFtjbGFzc109XCIncmVxdWlyZWQtc3RhciAnICsgKGZvcm1GaWVsZD8uZXJyb3JNZXNzYWdlID8gJyBpbnZhbGlkICcgOiAnJylcIj4qPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBMb29rdXAgQ29udHJvbCBGaWVsZCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWZvcm1GaWVsZC5oaWRkZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2x1bW5cIiAqbmdTd2l0Y2hDYXNlPVwiZHluYW1pY0Nhc2UuTE9PS1VQX0lOUFVUXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW2NsYXNzXT1cImZvcm1GaWVsZC5kaXNhYmxlZCA/ICdkaXNhYmxlZC1sb29rdXAtaGVhZGVyJyA6ICcnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgKm5nSWY9XCIhZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJmb3JtRmllbGQubGFiZWwub25DbGljayA/ICdjdXN0b20tbGluaycgOiAnJ1wiIChjbGljayk9XCJmb3JtRmllbGQubGFiZWwub25DbGljayAmJiBmb3JtRmllbGQubGFiZWwub25DbGljaygpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS10aXRsZS1lbGVtZW50PVwic2VsZlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlT2YoZm9ybUZpZWxkLmxhYmVsKSA9PT0gJ29iamVjdCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBmb3JtRmllbGQubGFiZWwubmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGZvcm1GaWVsZC5sYWJlbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImZvcm1GaWVsZC5yZXF1aXJlZEZpZWxkXCIgW2NsYXNzXT1cIidyZXF1aXJlZC1zdGFyICcgKyAoZm9ybUZpZWxkPy5lcnJvck1lc3NhZ2UgPyAnIGludmFsaWQgJyA6ICcnKVwiPio8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2xvc2UtaWNvbi13cmFwcGVyXCI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicC1pbnB1dC1pY29uLXJpZ2h0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwicGkgcGktY2hldnJvbi1yaWdodCBsb29rdXAtaW5wdXQtaWNvblwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtdGl0bGUtZWxlbWVudD1cInNlbGZcIiBbY2xhc3NdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5lcnJvck1lc3NhZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICduZy1pbnZhbGlkIG5nLWRpcnR5J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ2Zvcm0tY29udHJvbCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbXBvbmVudCBsb29rdXAtaW5wdXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcElucHV0VGV4dCBbKG5nTW9kZWwpXT1cImZvcm1GaWVsZC52YWx1ZSAmJiB0eXBlT2YoZm9ybUZpZWxkLnZhbHVlKSA9PT0gJ29iamVjdCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZm9ybUZpZWxkLnZhbHVlLnRleHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZm9ybUZpZWxkLnZhbHVlXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiZm9ybUZpZWxkLmZpZWxkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25hbWVdPVwiZm9ybUZpZWxkLmZpZWxkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdExvb2t1cEZpZWxkKGZvcm1GaWVsZClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZvcm1GaWVsZC5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5dXAuVGFiKT1cInNlbGVjdExvb2t1cEZpZWxkKGZvcm1GaWVsZClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZG9ubHlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdGFiaW5kZXg9XCItMVwiICpuZ0lmPVwiZm9ybUZpZWxkLnZhbHVlICYmICFmb3JtRmllbGQuZGlzYWJsZWRcIiBpY29uPVwicGkgcGktdGltZXNcIiBwQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJsb29rdXAtY2xlYXItaWNvbi1idXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwibG9va3VwQ2xlYXJWYWx1ZShmb3JtRmllbGQpXCI+PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWZvcm1GaWVsZD8uaXNWYWxpZFwiIGRhdGEtdGl0bGUtZWxlbWVudD1cInNlbGZcIiBjbGFzcz1cImVycm9yXCI+e3sgZm9ybUZpZWxkLmVycm9yTWVzc2FnZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gRmlsZSBVcGxvYWQgRmllbGQgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFmb3JtRmllbGQuaGlkZGVuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sdW1uXCIgKm5nU3dpdGNoQ2FzZT1cImR5bmFtaWNDYXNlLkZJTEVfVVBMT0FEXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW2NsYXNzXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQuZGlzYWJsZWQgPyAnZGlzYWJsZWQtbGluaycgOiAnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZGF0YS10aXRsZS1lbGVtZW50PVwic2VsZlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBmb3JtRmllbGQubGFiZWwgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJmb3JtRmllbGQucmVxdWlyZWRGaWVsZFwiIFtjbGFzc109XCIncmVxdWlyZWQtc3RhciAnICsgKGZvcm1GaWVsZD8uZXJyb3JNZXNzYWdlID8gJyBpbnZhbGlkICcgOiAnJylcIj4qPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlLWZpbGUtdXBsb2FkIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FsbG93TXVsdGlwbGVdPVwiZm9ybUZpZWxkLnNlbGVjdE11bHRpcGxlRmlsZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FjY2VwdEZpbGVUeXBlc109XCJmb3JtRmllbGQuU2V0ZmlsZVR5cGVzXCIgW2ZpZWxkc109XCJmb3JtRmllbGRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZpbGVVcmwpPVwic2V0RmlsZVVybHMoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodXBsb2FkRmlsZU9uUmV0dXJuKT1cImZpbGVPbmNoYW5nZUV2ZW50KClcIj48L3NlLWZpbGUtdXBsb2FkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwic2hvd2ZpbGVVcGxvYWRFcnJvclwiIGRhdGEtdGl0bGUtZWxlbWVudD1cInNlbGZcIiBjbGFzcz1cImVycm9yXCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5lcnJvck1lc3NhZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBTZWxlY3QgQnV0dG9uIEZpZWxkIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW2NsYXNzXT1cImZvcm1GaWVsZC5jbGFzc1wiICpuZ0lmPVwiIWZvcm1GaWVsZC5oaWRkZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInAtMCBmbGV4IGZsZXgtY29sdW1uXCIgKm5nU3dpdGNoQ2FzZT1cImR5bmFtaWNDYXNlLlNFTEVDVEJVVFRPTlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCAqbmdJZj1cIiFmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJmb3JtRmllbGQubGFiZWwub25DbGljayA/ICdjdXN0b20tbGluaycgOiAnJ1wiIChjbGljayk9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmxhYmVsLm9uQ2xpY2sgJiYgZm9ybUZpZWxkLmxhYmVsLm9uQ2xpY2soKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtdGl0bGUtZWxlbWVudD1cInNlbGZcIj57e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmxhYmVsICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlT2YoZm9ybUZpZWxkLmxhYmVsKSA9PT0gJ29iamVjdCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZm9ybUZpZWxkLmxhYmVsLm5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZm9ybUZpZWxkLmxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJmb3JtRmllbGQucmVxdWlyZWRGaWVsZFwiIFtjbGFzc109XCIncmVxdWlyZWQtc3RhciAnICsgKGZvcm1GaWVsZD8uZXJyb3JNZXNzYWdlID8gJyBpbnZhbGlkICcgOiAnJylcIj4qPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAtc2VsZWN0QnV0dG9uIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImZvcm1GaWVsZC5lcnJvck1lc3NhZ2UgPyAnbmctaW52YWxpZCBuZy1kaXJ0eScgOiAnJ1wiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCJmb3JtRmllbGQuZmllbGRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmb3JtRmllbGQudmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwiZm9ybUZpZWxkLmRhdGFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uVmFsdWU9XCJ2YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25MYWJlbD1cImxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmb3JtRmllbGQuZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW211bHRpcGxlXT1cImZvcm1GaWVsZC5kaXNwbGF5U3R5bGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9uQ2hhbmdlKT1cIm9uQ2hhbmdlRXZlbnQoZm9ybUZpZWxkKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcC1zZWxlY3RCdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhZm9ybUZpZWxkPy5pc1ZhbGlkXCIgY2xhc3M9XCJlcnJvclwiPnt7IGZvcm1GaWVsZC5lcnJvck1lc3NhZ2UgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gRGlzcGxheSAgQ2FyZCBmaWVsZCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWZvcm1GaWVsZC5oaWRkZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2x1bW5cIiAqbmdTd2l0Y2hDYXNlPVwiZHluYW1pY0Nhc2UuQ0FSRFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtjbGFzc109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmRpc2FibGVkID8gJ2Rpc2FibGVkLWxpbmsnIDogJydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGRhdGEtdGl0bGUtZWxlbWVudD1cInNlbGZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZm9ybUZpZWxkLmxhYmVsIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZm9ybUZpZWxkLnJlcXVpcmVkRmllbGRcIiBbY2xhc3NdPVwiJ3JlcXVpcmVkLXN0YXIgJyArIChmb3JtRmllbGQ/LmVycm9yTWVzc2FnZSA/ICcgaW52YWxpZCAnIDogJycpXCI+Kjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlLWNhcmQgW2NhcmRdPVwiZm9ybUZpZWxkLmNhcmRcIiBbc2V0Q2FyZERhdGFdPVwic2V0Q2FyZERhdGFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGVkQ2FyZCk9XCJzZWxlY3RlZENhcmRDbGlja0V2ZW50KCRldmVudClcIj48L3NlLWNhcmQ+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInNob3dmaWxlVXBsb2FkRXJyb3JcIiBkYXRhLXRpdGxlLWVsZW1lbnQ9XCJzZWxmXCIgY2xhc3M9XCJlcnJvclwiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQuZXJyb3JNZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gTm90ZSBEZXRhaWwgRmllbGQgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFmb3JtRmllbGQuaGlkZGVuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cImR5bmFtaWNDYXNlLk5PVEVfRklFTERcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtjbGFzc109XCJmb3JtRmllbGQuZGlzYWJsZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ2Rpc2FibGVkLWxpbmsnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICdsaW5rLWxhYmVsIGN1c3RvbS1saW5rJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIWZvcm1GaWVsZC5kaXNhYmxlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGhhbmRsZU5vdGVGaWVsZERpYWxvZyhmb3JtRmllbGQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiBkYXRhLXRpdGxlLWVsZW1lbnQ9XCJzZWxmXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3tmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBmb3JtRmllbGQubGFiZWwub25DbGlja1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGZvcm1GaWVsZC5sYWJlbC5uYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZm9ybUZpZWxkLmxhYmVsfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJmb3JtRmllbGQucmVxdWlyZWRGaWVsZFwiIGRhdGEtdGl0bGUtZWxlbWVudD1cInNlbGZcIiAgW2NsYXNzXT1cIidyZXF1aXJlZC1zdGFyICcgKyAoZm9ybUZpZWxkPy5lcnJvck1lc3NhZ2UgPyAnIGludmFsaWQgJyA6ICcnKVwiPio8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIER5bmFtaWMgQ29tcG9uZW50IENvbnRhaW5lci0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW2NsYXNzXT1cImZvcm1GaWVsZC5oaWRkZW4gPyAnaGlkZGVuJyA6ICcnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJ7e2Zvcm1TZWN0aW9uLm5hbWV9fS17e2Zvcm1GaWVsZEluZGV4fX1cIiAjZHluYW1pY0NvbXBvbmVudENvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCJkeW5hbWljQ2FzZS5DT01QT05FTlRcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBIZWFkZXIgY29tcG9uZW50LS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFmb3JtRmllbGQuaGlkZGVuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cImR5bmFtaWNDYXNlLlNFQ1RJT05fSEVBREVSXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIFtjbGFzc109XCJmb3JtRmllbGQuY2xhc3NcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiIGRhdGEtdGl0bGUtZWxlbWVudD1cInNlbGZcIiA+ICB7eyBmb3JtRmllbGQubGFiZWwgfX0gPC9iPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEFkZCBPbkNsaWNrIEJ1dHRvbiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWZvcm1GaWVsZC5oaWRkZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiZHluYW1pY0Nhc2UuQUREX0JVVFRPTlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gcEJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgW2ljb25dPVwiZm9ybUZpZWxkLmljb25cIiBbdGl0bGVdPVwiZm9ybUZpZWxkLmxhYmVsXCIgW2xhYmVsXT1cImZvcm1GaWVsZC5sYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZm9ybUZpZWxkLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cIntiYWNrZ3JvdW5kOiBmb3JtRmllbGQuY29sb3IgPyBmb3JtRmllbGQuY29sb3IgOiAnJ31cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2xpY2tFdmVudChmb3JtRmllbGQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJmb3JtRmllbGQuY2xhc3M/Zm9ybUZpZWxkLmNsYXNzOicnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gQWRkIEdlbmVyYXRlIFJlcG9ydCBCdXR0b24gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFmb3JtRmllbGQuaGlkZGVuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cImR5bmFtaWNDYXNlLlJFUE9SVFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZS1nZW5lcmF0ZS1yZXBvcnQtYnRuIFtyZXBJbmZvXT1cImZvcm1GaWVsZFwiIFtsYWJlbF09XCJmb3JtRmllbGQubGFiZWxcIiBbdGl0bGVdPVwiZm9ybUZpZWxkLmxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwYXJhbXNdPVwiZm9ybUZpZWxkLnBhcmFtc1wiIFtzaG93RGlhbG9nXT1cImZvcm1GaWVsZC5zaG93RGlhbG9nXCIgW3JlcG9ydFR5cGVdPVwiIGZvcm1GaWVsZC5yZXBvcnRUeXBlXCIgW3JlcG9ydEhlYWRlcl09XCJmb3JtRmllbGQucmVwb3J0SGVhZGVyXCIgW3JlcG9ydEZvb3Rlcl09XCJmb3JtRmllbGQucmVwb3J0Rm9vdGVyXCIgW2Zvcm1dPVwiZm9ybVwiIFtpY29uXT1cImZvcm1GaWVsZC5pY29uXCIgW2NsYXNzXT1cImZvcm1GaWVsZC5jbGFzc1wiPjwvc2UtZ2VuZXJhdGUtcmVwb3J0LWJ0bj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBBZGQgSW5wdXQgU3dpdGNoIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhZm9ybUZpZWxkLmhpZGRlblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCJkeW5hbWljQ2FzZS5TV0lUQ0hcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGRhdGEtdGl0bGUtZWxlbWVudD1cInNlbGZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZm9ybUZpZWxkLmxhYmVsIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwLWlucHV0U3dpdGNoIFtuYW1lXT1cImZvcm1GaWVsZC5sYWJlbCA/IGZvcm1GaWVsZC5sYWJlbDogJ3N3aXRjaCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmb3JtRmllbGQudmFsdWVcIiBbZGlzYWJsZWRdPVwiZm9ybUZpZWxkLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkNsaWNrRXZlbnQoZm9ybUZpZWxkKVwiPjwvcC1pbnB1dFN3aXRjaD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9wLWFjY29yZGlvblRhYj5cbiAgICAgICAgICAgICAgPC9wLWFjY29yZGlvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICA8L3NwYW4+XG5cbiAgICA8IS0tIHNhdmUgYW5kIGNsb3NlIGJ1dHRvbnMgLS0+XG4gICAgPGRpdiBjbGFzcz1cImNvbC0xMiBhY3Rpb25zLWJ1dHRvbnMtbWFpbi13cmFwcGVyIGZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiIFtuZ0NsYXNzXT1cInsgc3RpY2t5OiBzdGlja3lBY3Rpb25zIH1cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJpbm5lci1zdGlja3kgZm9ybS1jb21wb25lbnQgYWN0aW9ucy1idXR0b25zLXdyYXBwZXItZGl2XCI+XG4gICAgICAgIDwhLS0gc2F2ZSBidXR0b24gLS0+XG4gICAgICAgIDxidXR0b24gKm5nSWY9XCIhaGlkZVNhdmVCdXR0b25cIiBbZGlzYWJsZWRdPVwiaXNGb3JtRGlzYWJsZWRcIiBwQnV0dG9uIHR5cGU9XCJidXR0b25cIiBpY29uPVwicGkgcGktY2hlY2tcIlxuICAgICAgICAgIFtsYWJlbF09XCJzYXZlQnV0dG9uTGFiZWwgPyBzYXZlQnV0dG9uTGFiZWwgOiAnU2F2ZSdcIiBjbGFzcz1cInAtYnV0dG9uLXN1Y2Nlc3MgZm9ybS1zYXZlLWJ1dHRvblwiIChjbGljayk9XCJvblNhdmVGb3JtKClcIj48L2J1dHRvbj5cbiAgICAgICAgPCEtLSBjbG9zZSBidXR0b24gLS0+XG4gICAgICAgIDxidXR0b24gKm5nSWY9XCIhaGlkZUNhbmNlbEJ1dHRvblwiIFtkaXNhYmxlZF09XCJpc0Zvcm1EaXNhYmxlZFwiIChjbGljayk9XCJvbkNhbmNlbEZvcm0oKVwiIHBCdXR0b24gdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgaWNvbj1cInBpIHBpLXRpbWVzXCIgW2xhYmVsXT1cImNhbmNlbEJ1dHRvbkxhYmVsID8gY2FuY2VsQnV0dG9uTGFiZWwgOiAnQ2FuY2VsJ1wiIGNsYXNzPVwicC1idXR0b24tZGFuZ2VyIG1sLTNcIj48L2J1dHRvbj4gICAgICAgXG4gICAgICAgICA8IS0tIGR5bmFtaWMgYnV0dG9ucyAtLT5cbiAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGJ1dHRvbiBvZiBmb3JtQnV0dG9uc1wiPlxuICAgICAgICAgIDxidXR0b24gKm5nSWY9XCIhYnV0dG9uLmhpZGRlblwiIHBCdXR0b24gdHlwZT1cImJ1dHRvblwiIFtsYWJlbF09XCJidXR0b24ubGFiZWxcIiBbaWNvbl09XCJidXR0b24uaWNvbiA/IGJ1dHRvbi5pY29uIDogJydcIlxuICAgICAgICAgICAgY2xhc3M9XCJwLWJ1dHRvbi1zdWNjZXNzIG1sLTNcIiAoY2xpY2spPVwib25OZXdCdXR0b25DbGljayhidXR0b24pXCIgW2Rpc2FibGVkXT1cImJ1dHRvbi5kaXNhYmxlZCA/IGJ1dHRvbi5kaXNhYmxlZCA6IGZhbHNlXCI+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9mb3JtPiJdfQ==
|
|
1359
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zZS11aS10b29sa2l0L3NyYy9saWIvY29tcG9uZW50cy9iYXNlL2Zvcm0vZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zZS11aS10b29sa2l0L3NyYy9saWIvY29tcG9uZW50cy9iYXNlL2Zvcm0vZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsWUFBWSxFQUErQyxZQUFZLEVBQStCLGdCQUFnQixFQUFjLFlBQVksR0FBc0IsTUFBTSxlQUFlLENBQUM7QUFJdk8sT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUEwQyxVQUFVLEVBQTZCLFdBQVcsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2xLLE9BQU8sRUFBRSxlQUFlLEVBQWUsTUFBTSxpQ0FBaUMsQ0FBQztBQUUvRSxPQUFPLEtBQUssU0FBUyxNQUFNLHFDQUFxQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQU83RCxPQUFPLEVBQWdCLFFBQVEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUU5QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDdEUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBT3RDLE1BQU0sT0FBTyxhQUFhO0lBVXhCLElBQWEsY0FBYyxDQUFDLEdBQVE7UUFDbEMsSUFBSSxHQUFHLEtBQUssSUFBSSxFQUFFO1lBQ2hCLFFBQVEsQ0FBQztTQUNWO0lBQ0gsQ0FBQztJQThCRCxZ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QUFHLE1BQU0sQ0FBQztTQUM3QjtJQUNILENBQUM7SUFDRCxXQUFXLENBQUMsSUFBSSxFQUFFLFdBQVc7UUFDM0IsSUFBRyxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFDO1lBQ3pDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUNoQjtJQUNILENBQUM7SUFDRCxhQUFhLENBQUMsR0FBUTtRQUNsQixPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxHQUFHLElBQUksRUFBRSxDQUFBO0lBQ3hELENBQUM7aUlBaDZDVSxhQUFhO3FIQUFiLGFBQWEseXBCQW1CMkIsZ0JBQWdCLGtEQzdDckUseXExQ0FncUJPOzsyRkR0b0JNLGFBQWE7a0JBTHpCLFNBQVM7K0JBQ0UsU0FBUzsyZUFLVixhQUFhO3NCQUFyQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFFTyxjQUFjO3NCQUExQixLQUFLO2dCQUtJLFFBQVE7c0JBQWpCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBQ0csbUJBQW1CO3NCQUE1QixNQUFNO2dCQUVQLHlCQUF5QjtzQkFEeEIsWUFBWTt1QkFBQywyQkFBMkIsRUFBRSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtnQkErQ3JFLG1CQUFtQjtzQkFEbEIsWUFBWTt1QkFBQyxxQkFBcUIsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlciwgQ2hhbmdlRGV0ZWN0b3JSZWYsIFZpZXdDaGlsZHJlbiwgUXVlcnlMaXN0LCBDb21wb25lbnRGYWN0b3J5LCBWaWV3Q29udGFpbmVyUmVmLCBFbGVtZW50UmVmLCBIb3N0TGlzdGVuZXIsIFJlbmRlcmVyMiwgTmdab25lLCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9mb3JtLnNlcnZpY2UnO1xuaW1wb3J0IHsgQWxlcnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYWxlcnQuc2VydmljZSc7XG5pbXBvcnQgeyBEaWFsb2dTZXJ2aWNlLCBEeW5hbWljRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAncHJpbWVuZy9keW5hbWljZGlhbG9nJztcbmltcG9ydCB7IE5vdGVzQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vc2hhcmVkL25vdGVzL25vdGVzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBFRm9ybUNvbnRyb2wsIEVIeXBlcmxpbmssIElGb3JtRmllbGQsIElEeW5hbWljRm9ybSwgSUZvcm1TZWN0aW9uLCBFVmFsaWRhdG9yLCBJRHluYW1pY0NhcmQsIElGb3JtQnV0dG9uLCBFRm9ybWF0VHlwZSB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9mb3JtLm1vZGVsJztcbmltcG9ydCB7IEVQZXJtaXNzaW9uVHlwZSwgSVBlcm1pc3Npb24gfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvdXNlci1pbmZvLm1vZGVsJztcbmltcG9ydCB7IEF1dGhlbnRpY2F0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2F1dGhlbnRpY2F0aW9uLnNlcnZpY2UnO1xuaW1wb3J0ICogYXMgdXRpbGl0aWVzIGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3V0aWxpdGllcy5zZXJ2aWNlJztcbmltcG9ydCB7IElmcmFtZUNvbXBvbmVudCB9IGZyb20gJy4uL2lmcmFtZS9pZnJhbWUuY29tcG9uZW50JztcbmltcG9ydCB7IElEaWN0aW9uYXJ5IH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2NvbW1vbi5tb2RlbCc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBHcmlkU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2dyaWQuc2VydmljZSc7XG5pbXBvcnQgeyBQYWdlTG9nZ2VyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3BhZ2UtbG9nZ2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uLCBpbnRlcnZhbCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgSHlwZXJsaW5rU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2h5cGVybGluay5zZXJ2aWNlJztcbmltcG9ydCB7IGRyYWdnYWJsZURpYWxvZyB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3V0aWxpdGllcy5zZXJ2aWNlJztcbmltcG9ydCB7IHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NlLWZvcm0nLFxuICB0ZW1wbGF0ZVVybDogJy4vZm9ybS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Zvcm0uY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgRm9ybUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIHN0aWNreUFjdGlvbnM6IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKSBmb3JtOiBJRHluYW1pY0Zvcm07XG4gIEBJbnB1dCgpIHNhdmVCdXR0b25MYWJlbDogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIGNhbmNlbEJ1dHRvbkxhYmVsOiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCkgaGlkZVNhdmVCdXR0b246IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgaGlkZUNhbmNlbEJ1dHRvbjogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBmb3JtQnV0dG9uczogSUZvcm1CdXR0b25bXSA9IFtdO1xuICBASW5wdXQoKSBsb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG4gXG4gIEBJbnB1dCgpIHNldCBhY3RpdmVUZXN0TW9kZSh2YWw6IGFueSkge1xuICAgIGlmICh2YWwgPT09IHRydWUpIHtcbiAgICAgIGRlYnVnZ2VyO1xuICAgIH1cbiAgfVxuICBAT3V0cHV0KCkgc2F2ZUZvcm06IEV2ZW50RW1pdHRlcjxJRm9ybVNlY3Rpb25bXT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBjYW5jZWxGb3JtOiBFdmVudEVtaXR0ZXI8SUZvcm1TZWN0aW9uW10+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgZHJvcERvd25DaGFuZ2VFdmVudDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBzZWN0aW9uQ2xpY2tlZEV2ZW50OiBFdmVudEVtaXR0ZXI8SUZvcm1TZWN0aW9uPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQFZpZXdDaGlsZHJlbignZHluYW1pY0NvbXBvbmVudENvbnRhaW5lcicsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KVxuICBkeW5hbWljQ29tcG9uZW50Q29udGFpbmVyOiBRdWVyeUxpc3Q8Vmlld0NvbnRhaW5lclJlZj47XG5cbiAgZHluYW1pY0Nhc2UgPSBFRm9ybUNvbnRyb2w7XG4gIHNhdmVGb3JtUGFnZTogU3Vic2NyaXB0aW9uO1xuICBwZXJtaXNzaW9uVHlwZSA9IEVQZXJtaXNzaW9uVHlwZTtcbiAgcm9sZXM6IHN0cmluZ1tdID0gW107XG4gIGlzRm9ybURpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG4gIGlzRm9ybUhpZGRlbjogYm9vbGVhbiA9IGZhbHNlO1xuICBjb21wb25lbnRzTGlzdDogSURpY3Rpb25hcnlbXSA9IFtdO1xuICBmaWxlVXBsb2FkVXJsczogYW55O1xuICBzaG93ZmlsZVVwbG9hZEVycm9yOiBib29sZWFuID0gZmFsc2U7XG4gIGNhcmRMaXN0OiBJRHluYW1pY0NhcmQ7XG4gIGNhbGVuZGFyUHJldmlvdXNWYWx1ZTogc3RyaW5nID0gJyc7XG4gIGRlZmF1bHREYXRlOiBzdHJpbmcgPSAnJztcbiAgbG9va3VwRm9jdXNPdXQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgY2FsZW5kYXJGb3JtYXQ6IHN0cmluZyA9ICdtbS9kZC95eSc7XG4gIHNldENhcmREYXRhOiBib29sZWFuID0gZmFsc2U7XG4gIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBkaWFsb2dSZWY6IGFueTtcblxuICAvLyBhcHBseSBjaGVja2VkL3VuQ2hlY2tlZCBwcm9wIGZvciBDaGVja0JveCBvZiB0aGUgRm9ybVxuICBjaGVja2VkOiBib29sZWFuID0gdHJ1ZTtcbiAgdW5DaGVja2VkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aGVudGljYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgZm9ybVNlcnZpY2U6IEZvcm1TZXJ2aWNlLFxuICAgIHByaXZhdGUgYWxlcnRTZXJ2aWNlOiBBbGVydFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplcixcbiAgICBwdWJsaWMgZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZSxcbiAgICBwcml2YXRlIGNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICAgIHByaXZhdGUgaHlwZXJsaW5rU2VydmljZSA6IEh5cGVybGlua1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBlbDogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIGRhdGVQaXBlOiBEYXRlUGlwZSxcbiAgICBwcml2YXRlIGdyaWRTZXJ2aWNlOiBHcmlkU2VydmljZSxcbiAgICBwcml2YXRlIHBhZ2VMb2dnZXJTZXJ2aWNlOiBQYWdlTG9nZ2VyU2VydmljZSxcbiAgICBwcml2YXRlIHJlbmRlcmVyMjogUmVuZGVyZXIyLFxuICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmUsXG4gICkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHt9XG5cbiAgLy8gYnJvd3NlciB0YWIgY2xvc2UgZXZlbnRcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OmJlZm9yZXVubG9hZCcsIFsnJGV2ZW50J10pXG4gIGJlZm9yZXVubG9hZEhhbmRsZXIoZXZlbnQ6IGFueSkge1xuICAgIGlmICh0aGlzLmZvcm1TZXJ2aWNlLmZpZWxkRm9jdXNlZE91dCB8fCB0aGlzLmdyaWRTZXJ2aWNlLmNvbHVtbkZvY3VzZWRPdXQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoKSB7XG4gICAgdGhpcy5mb3JtU2VydmljZS5zZXRUb29sdGlwKCk7XG4gICAgLy8gYXBwbHkgdXNlciByb2xlIHBlcm1pc3Npb25zIG9uIGZvcm1cbiAgICB0aGlzLnJvbGVzID0gdGhpcy5hdXRoU2VydmljZS5nZXRVc2VyUm9sZXMoKTtcbiAgICBpZiAoXG4gICAgICB0aGlzLmZvcm0gJiZcbiAgICAgIHRoaXMuZm9ybS5mb3JtU2VjdGlvbnMgJiZcbiAgICAgIHRoaXMuZm9ybS5mb3JtU2VjdGlvbnMubGVuZ3RoID4gMFxuICAgICkge1xuICAgICAgLy8gc3RhcnQgY2FyZExpc3QgcmVmZXJlbmNlIGJyZWFrIGZ1bmN0aW9uYWxpdHlcbiAgICAgIGxldCBmb3JtVmFsdWVzID0geyAuLi50aGlzLmZvcm0gfTtcblxuICAgICAgZm9ybVZhbHVlcy5mb3JtU2VjdGlvbnM/LmZvckVhY2goKGZvcm1TZWN0aW9uKSA9PiB7XG4gICAgICAgIGlmIChmb3JtU2VjdGlvbi5maWVsZHMpIHtcbiAgICAgICAgICBmb3JtU2VjdGlvbi5maWVsZHMuZm9yRWFjaCgoZmllbGQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jaGVja0ZpZWxkUmVxdWlyZWQoZmllbGQpO1xuICAgICAgICAgICAgaWYgKGZpZWxkLmlzUGFzc3dvcmQpIHtcbiAgICAgICAgICAgICAgZmllbGQudGV4dFR5cGUgPSAncGFzc3dvcmQnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gY29udmVydCBzdHJpbmcgdGltZSBpbnRvIGRhdGVcbiAgICAgICAgICAgIGlmIChmaWVsZD8uY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkNBTEVOREFSICYmIGZpZWxkPy5vbkNoYW5nZSkge1xuICAgICAgICAgICAgICBmaWVsZFsncHJldmlvdXNWYWx1ZSddID0gZmllbGQ/LnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBmaWVsZD8uY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkNBTEVOREFSICYmXG4gICAgICAgICAgICAgIGZpZWxkPy50aW1lT25seSAmJlxuICAgICAgICAgICAgICAoZmllbGQ/LnZhbHVlPy50b1N0cmluZygpLmluY2x1ZGVzKCdBTScpIHx8XG4gICAgICAgICAgICAgICAgZmllbGQ/LnZhbHVlPy50b1N0cmluZygpLmluY2x1ZGVzKCdQTScpKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGZpZWxkLnZhbHVlID0gdXRpbGl0aWVzLnNldFRpbWVJbkRhdGUoZmllbGQudmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBmaWVsZD8uY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkFVVE9DT01QTEVURSAmJlxuICAgICAgICAgICAgICBmaWVsZD8udmFsdWUgJiZcbiAgICAgICAgICAgICAgZmllbGQ/LnZhbHVlPy5sZW5ndGggPiAwXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBmaWVsZD8udmFsdWUubWFwKFxuICAgICAgICAgICAgICAgICh2YWx1ZTogYW55KSA9PiB2YWx1ZVtmaWVsZD8uZGlzcGxheUZpZWxkXVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgdmFsdWUgJiZcbiAgICAgICAgICAgICAgICAodmFsdWUudG9TdHJpbmcoKT8uaW5jbHVkZXMoJzsnKSB8fFxuICAgICAgICAgICAgICAgICAgdmFsdWUudG9TdHJpbmcoKT8uaW5jbHVkZXMoJywnKSlcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgZmllbGQudmFsdWUgPSB2YWx1ZVxuICAgICAgICAgICAgICAgICAgLnRvU3RyaW5nKClcbiAgICAgICAgICAgICAgICAgIC5yZXBsYWNlQWxsKCcsJywgJzsnKVxuICAgICAgICAgICAgICAgICAgPy5zcGxpdCgnOycpXG4gICAgICAgICAgICAgICAgICA/Lm1hcCgodmFsOiBhbnkpID0+ICh7IFtmaWVsZD8uZGlzcGxheUZpZWxkXTogdmFsIH0pKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gY29udmVydCB0aGUgbXVsdGlTZWxlY3Qgc3RyaW5nIHZhbHVlIGluIGFycmF5XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGZpZWxkPy5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuTVVMVElTRUxFQ1QgJiZcbiAgICAgICAgICAgICAgZmllbGQudmFsdWUgJiZcbiAgICAgICAgICAgICAgIUFycmF5LmlzQXJyYXkoZmllbGQudmFsdWUpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgaWYgKGZpZWxkLnZhbHVlPy50b1N0cmluZygpPy5pbmNsdWRlcygnLCcpKSB7XG4gICAgICAgICAgICAgICAgZmllbGQudmFsdWUgPSBmaWVsZC52YWx1ZS5yZXBsYWNlKC9cXHMqLFxccyovZywgXCIsXCIpPy50b1N0cmluZygpPy5zcGxpdCgnLCcpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZpZWxkLnZhbHVlID0gW2ZpZWxkLnZhbHVlXTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGZpZWxkPy5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuQ0FSRCkge1xuICAgICAgICAgICAgICB0aGlzLmZvcm0gPSB7fTtcbiAgICAgICAgICAgICAgZmllbGQ/LmNhcmQ/LmRhdGE/LmZvckVhY2goKHg6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgIGZpZWxkPy5jYXJkPy5mb3JtU2VjdGlvbnMgJiZcbiAgICAgICAgICAgICAgICAgIGZpZWxkPy5jYXJkPy5mb3JtU2VjdGlvbnM/Lmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIHguZHluYW1pY0Zvcm0gPSB7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1TZWN0aW9uczogSlNPTi5wYXJzZShcbiAgICAgICAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeShmaWVsZD8uY2FyZD8uZm9ybVNlY3Rpb25zKVxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB0aGlzLmZvcm0gPSBmb3JtVmFsdWVzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gRW5kIGNhcmRMaXN0IHJlZmVyZW5jZSBicmVhayBmdW5jdGlvbmFsaXR5XG4gICAgICAgICAgICBpZiAoZmllbGQ/LmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5DSEVDS0JPWCkge1xuICAgICAgICAgICAgICBmaWVsZC52YWx1ZSA9XG4gICAgICAgICAgICAgICAgZmllbGQ/LnZhbHVlPy50b1N0cmluZygpPy50b0xvd2VyQ2FzZSgpID09PSAndHJ1ZScgfHxcbiAgICAgICAgICAgICAgICAgIGZpZWxkPy52YWx1ZT8udG9TdHJpbmcoKT8udG9Mb3dlckNhc2UoKSA9PT0gJ3knIHx8XG4gICAgICAgICAgICAgICAgICBmaWVsZD8udmFsdWU/LnRvU3RyaW5nKCkgPT09ICcxJ1xuICAgICAgICAgICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgICAgICAgICA6IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMuYXBwbHlVc2VyUGVybWlzc2lvbnMoKTtcbiAgICAgIHRoaXMucmVtb3ZlV2hpdGVTcGFjZXMoKTtcbiAgICAgIHRoaXMuc2V0SHlwZXJsaW5rQ29tcG9uZW50Um91dGUoKTtcbiAgICAgIHRoaXMuc2V0Q2FsYW5kZXJXaWR0aCgpO1xuICAgICAgdGhpcy5yZU9yZGVyRm9ybVNlY3Rpb25zKCk7XG4gICAgfVxuICB9XG5cbiAgcmVPcmRlckZvcm1TZWN0aW9ucygpIHtcbiAgICBpZiAodGhpcy5mb3JtICYmIHRoaXMuZm9ybS5mb3JtU2VjdGlvbnM/Lmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRVc2VySW5mbyA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ0N1cnJlbnRVc2VySW5mbycpKTtcbiAgICAgIGxldCB1c2VyU2VjdGlvbiA9IGN1cnJlbnRVc2VySW5mbz8ucGFnZVNlY3Rpb25zPy5sZW5ndGggPiAwID8gY3VycmVudFVzZXJJbmZvLnBhZ2VTZWN0aW9ucyA6IFtdO1xuICAgICAgbGV0IHBhZ2VVcmwgPSB0aGlzLnJvdXRlci51cmw/LnN1YnN0cmluZygxKVxuICAgICAgaWYgKHBhZ2VVcmwuaW5jbHVkZXMoJz8nKSkge1xuICAgICAgICBwYWdlVXJsID0gcGFnZVVybC5zcGxpdCgnPycpWzBdO1xuICAgICAgfVxuICAgICAgaWYgKHVzZXJTZWN0aW9uICYmIHVzZXJTZWN0aW9uLnJvbGUpIHtcbiAgICAgICAgaWYgKHRoaXMucm9sZXM/Lmxlbmd0aCA+IDAgJiYgdGhpcy5yb2xlcy5pbmNsdWRlcyh1c2VyU2VjdGlvbi5yb2xlKSkge1xuICAgICAgICAgIHRoaXMuc2V0Rm9ybVNlY3Rpb25zKHVzZXJTZWN0aW9uLCBwYWdlVXJsKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zZXRGb3JtU2VjdGlvbnModXNlclNlY3Rpb24sIHBhZ2VVcmwpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHNldEZvcm1TZWN0aW9ucyh1c2VyU2VjdGlvbiwgcGFnZVVybCkge1xuICAgIGlmICh1c2VyU2VjdGlvbj8ubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5mb3JtLmZvcm1TZWN0aW9ucy5mb3JFYWNoKChzZWN0aW9uLCBpbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBwYWdlU2VjdGlvbjogYW55ID0gdXNlclNlY3Rpb24/LmZpbmQoKHBhZ2VTZWN0aW9uOiBhbnkpID0+IHBhZ2VTZWN0aW9uPy5zZWN0aW9uPy50b0xvd2VyQ2FzZSgpID09PSBzZWN0aW9uPy5uYW1lPy50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgaWYgKHBhZ2VTZWN0aW9uICYmIHBhZ2VTZWN0aW9uLnBhZ2UgJiYgcGFnZVNlY3Rpb24ucGFnZT8udG9Mb3dlckNhc2UoKSA9PT0gcGFnZVVybD8udG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgIGNvbnN0IHJlT3JkZXJTZWN0aW9uID0geyAuLi5zZWN0aW9uIH07XG4gICAgICAgICAgdGhpcy5mb3JtLmZvcm1TZWN0aW9ucy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgIHRoaXMuZm9ybS5mb3JtU2VjdGlvbnMuc3BsaWNlKHBhZ2VTZWN0aW9uPy5vcmRlciAtIDEsIDAsIHJlT3JkZXJTZWN0aW9uKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cbiAgY2hlY2tGaWVsZFJlcXVpcmVkKGZpZWxkOiBhbnkpIHtcbiAgIGlmKGZpZWxkLnZhbGlkYXRpb25zPy5maW5kKHZhbGlkYXRpb249PnZhbGlkYXRpb24udHlwZT09PUVWYWxpZGF0b3IuUkVRVUlSRUQpKXtcbiAgICAgIGZpZWxkLnJlcXVpcmVkRmllbGQgPSB0cnVlO1xuICAgfVxuICB9XG5cbiAgLy8gc2V0IGNhbGVuZGFyIDIgT3IgNCBkaWdpdCB5ZWFyIGZvcm1hdFxuICBjYWxlbmRhcklucHV0VmFsdWUoZm9ybUZpZWxkOiBJRm9ybUZpZWxkKSB7XG4gICAgZG9jdW1lbnRcbiAgICAgIC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGZvcm1GaWVsZC5maWVsZClbMF1cbiAgICAgID8uYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLCAodmFsOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKCF2YWw/LnRhcmdldD8udmFsdWU/LmluY2x1ZGVzKCcvJykpIHtcbiAgICAgICAgICBpZiAodmFsPy50YXJnZXQ/LnZhbHVlPy5sZW5ndGggPT0gOCB8fCBmb3JtRmllbGQ/LmZvcm1hdD8udHlwZSA9PT0gRUZvcm1hdFR5cGUuU0hPUlREQVRFKSB7XG4gICAgICAgICAgICB2YWwudGFyZ2V0LnZhbHVlID0gdmFsPy50YXJnZXQ/LnZhbHVlPy5yZXBsYWNlKC8oXFxkezJ9KShcXGR7Mn0pKFxcZHs0fSkvLCAnJDEvJDIvJDMnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSBpZiAodmFsPy50YXJnZXQ/LnZhbHVlLmxlbmd0aCA9PSA2KSB7XG4gICAgICAgICAgICB2YWwudGFyZ2V0LnZhbHVlID0gdmFsPy50YXJnZXQ/LnZhbHVlPy5yZXBsYWNlKC8oXFxkezJ9KSg/PVxcZCkvZywgJyQxLycpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICBmb3JtRmllbGQudmFsdWUgPSB2YWw/LnRhcmdldD8udmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHllYXIgPSB2YWw/LnRhcmdldD8udmFsdWU/LnRvU3RyaW5nKCkuc3BsaXQoJy8nKVsyXTtcbiAgICAgICAgaWYgKHllYXI/Lmxlbmd0aCA9PT0gNCkge1xuICAgICAgICAgIHRoaXMuY2FsZW5kYXJGb3JtYXQgPSAnbW0vZGQveXknO1xuICAgICAgICAgIGZvcm1GaWVsZC52YWx1ZSA9IG5ldyBEYXRlKHZhbD8udGFyZ2V0Py52YWx1ZSk/LnRvTG9jYWxlRGF0ZVN0cmluZyhcbiAgICAgICAgICAgICdlbi1VUydcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKHllYXI/Lmxlbmd0aCkge1xuICAgICAgICAgIHRoaXMuY2FsZW5kYXJGb3JtYXQgPSAnbW0vZGQveSc7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgLy8gc2V0IHBlcmNlbnQgYW5kIGRlY2ltYWwgdmFsdWVzXG4gIHNldG51bWVyaWN2YWx1ZXMoKSB7XG4gICAgdGhpcy5mb3JtPy5mb3JtU2VjdGlvbnM/LmZvckVhY2goKGZvcm1TZWN0aW9uKSA9PiB7XG4gICAgICBpZiAoZm9ybVNlY3Rpb24uZmllbGRzKSB7XG4gICAgICAgIGZvcm1TZWN0aW9uLmZpZWxkcy5mb3JFYWNoKChmaWVsZDogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKGZpZWxkPy5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuTlVNRVJJQykge1xuICAgICAgICAgICAgY29uc3QgZGlnaXRzSW5mbyA9IGZpZWxkPy5mb3JtYXQ/LmZvcm1hdFBhcmFtcz8uZGlnaXRzSW5mbztcbiAgICAgICAgICAgIGlmIChmaWVsZC52YWx1ZSkge1xuICAgICAgICAgICAgICBpZiAoZmllbGQ/LmZvcm1hdD8udHlwZSA9PT0gJ3BlcmNlbnQnKSB7XG4gICAgICAgICAgICAgICAgaWYgKGZpZWxkLmZvcm1hdD8uZm9ybWF0UGFyYW1zPy5hbGxvd0NhbGN1bGF0ZSkge1xuICAgICAgICAgICAgICAgICAgaWYgKGRpZ2l0c0luZm8pIHtcbiAgICAgICAgICAgICAgICAgICAgZmllbGQudmFsdWUgPSBwYXJzZUZsb2F0KFxuICAgICAgICAgICAgICAgICAgICAgIChmaWVsZC52YWx1ZSAqIDEwMCk/LnRvU3RyaW5nKClcbiAgICAgICAgICAgICAgICAgICAgKS50b0ZpeGVkKGRpZ2l0c0luZm8pO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZmllbGQudmFsdWUgPSBmaWVsZC52YWx1ZSAqIDEwMDtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRpZ2l0c0luZm8pIHtcbiAgICAgICAgICAgICAgICAgIGZpZWxkLnZhbHVlID0gcGFyc2VGbG9hdChmaWVsZC52YWx1ZSkudG9GaXhlZChkaWdpdHNJbmZvKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoZmllbGQ/LmZvcm1hdD8udHlwZSA9PT0gJ2RlY2ltYWwnKSB7XG4gICAgICAgICAgICAgICAgZmllbGQudmFsdWUgPSBwYXJzZUZsb2F0KGZpZWxkLnZhbHVlKS50b0ZpeGVkKFxuICAgICAgICAgICAgICAgICAgZGlnaXRzSW5mbyA/IGRpZ2l0c0luZm8gOiAyXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgZm9ybSBoYXMgYW55IGZpZWxkIHdpdGggZHluYW1pYyBjb21wb25lbnQ7XG4gICAqIENyZWF0ZXMgY29tcG9uZW50IGluc3RhbmNlIHVzaW5nIGNvbXBvbmVudEZhY3RvcnlSZXNvbHZlclxuICAgKiBJbmplY3RzIGNvbXBvbmVudCB0aHJvdWdoIHZpZXdSZWYuY3JlYXRlQ29tcG9uZW50KClcbiAgICogUGFzc2VzIGRhdGEgdG8gY29tcG9uZW50XG4gICAqIFN1YnNjcmliZXMgdG8gdGhlIGV2ZW50cyBwYXNzZWQgdG8gdGhlIGNvbXBvbmVudHNcbiAgICogRmluYWxseSBmb3JjZXMgQW5ndWxhciB0byBkZXRlY2ggY2hhbmdlc1xuICAgKi9cbiAgbG9hZER5bmFtaWNDb21wb25lbnRzKCkge1xuICAgIHRoaXMuY29tcG9uZW50c0xpc3QgPSBbXTtcbiAgICB0aGlzLmZvcm0/LmZvcm1TZWN0aW9ucz8uZm9yRWFjaCgoZm9ybVNlY3Rpb24pID0+IHtcbiAgICAgIGZvcm1TZWN0aW9uLmZpZWxkcy5mb3JFYWNoKChmaWVsZDogYW55LCBmaWVsZEluZGV4KSA9PiB7XG4gICAgICAgIGlmIChmaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuQ09NUE9ORU5UKSB7XG4gICAgICAgICAgY29uc3Qgdmlld1JlZjogYW55ID0gdGhpcy5keW5hbWljQ29tcG9uZW50Q29udGFpbmVyLmZpbmQoXG4gICAgICAgICAgICAoeCkgPT5cbiAgICAgICAgICAgICAgeC5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuaWQgPT0gYCR7Zm9ybVNlY3Rpb24ubmFtZX0tJHtmaWVsZEluZGV4fWBcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIGNvbXBvbmVudDogQ29tcG9uZW50LFxuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIGhhbmRsZXJzLFxuICAgICAgICAgIH0gPSBmaWVsZC5jb21wb25lbnRDb250cm9sO1xuICAgICAgICAgIGNvbnN0IGNvbXBvbmVudEZhY3Rvcnk6IENvbXBvbmVudEZhY3Rvcnk8YW55PiA9XG4gICAgICAgICAgICB0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShDb21wb25lbnQpO1xuICAgICAgICAgIC8vIFBhc3NpbmcgZGF0YSB0byBjb21wb25lbnRcbiAgICAgICAgICBjb25zdCBjb21wb25lbnRSZWYgPSB2aWV3UmVmPy5jcmVhdGVDb21wb25lbnQoY29tcG9uZW50RmFjdG9yeSk7XG4gICAgICAgICAgaWYgKGNvbXBvbmVudFJlZikge1xuICAgICAgICAgICAgaWYoZmllbGQ/LmNvbXBvbmVudENvbnRyb2w/LmlkKXtcbiAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlcjIuYWRkQ2xhc3MoY29tcG9uZW50UmVmLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQsIGZpZWxkLmNvbXBvbmVudENvbnRyb2wuaWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMoZGF0YSA/PyB7fSkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZVtrZXldID0gdmFsdWU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuY29tcG9uZW50c0xpc3QucHVzaCh7XG4gICAgICAgICAgICAgIG5hbWU6IGZpZWxkLmNvbXBvbmVudENvbnRyb2w/LmlkLFxuICAgICAgICAgICAgICB2YWx1ZTogY29tcG9uZW50UmVmLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBTdWJzY3JpYmVzIHRvIHRoZSBldmVudHMgcGFzc2VkIHRvIHRoZSBjb21wb25lbnRzXG4gICAgICAgICAgICBpZiAoaGFuZGxlcnMpIHtcbiAgICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMoaGFuZGxlcnMpLmZvckVhY2goKFtldmVudCwgaGFuZGxlcl06IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIChjb21wb25lbnRSZWYuaW5zdGFuY2VbZXZlbnRdIGFzIEV2ZW50RW1pdHRlcjxhbnk+KT8uc3Vic2NyaWJlKFxuICAgICAgICAgICAgICAgICAgKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZXIocmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBpbnZva2UgY2hhbmdlIGRldGVjdGlvblxuICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvL2ludm9rZSB3aGVuIGZpbGUgdXBsb2FkIE9SIGRlbGV0ZSBhIGZpbGVcbiAgZmlsZU9uY2hhbmdlRXZlbnQoKSB7XG4gICAgdGhpcy5zZXRDYXJkRGF0YSA9ICF0aGlzLnNldENhcmREYXRhO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIC8vIGxvYWQgZHluYW1pYyBjb21wb25lbnRzIGlmIGV4aXN0IGluIGZvcm1cbiAgICB0aGlzLnNldG51bWVyaWN2YWx1ZXMoKTtcbiAgICB0aGlzLm9uRHluYW1pY0Zvcm1TdGF0ZUNoYW5nZSgpO1xuICAgIHRoaXMubG9hZER5bmFtaWNDb21wb25lbnRzKCk7XG4gICAgdGhpcy5zZXRDYXJkUmVzcG9uc2VJZCgpO1xuICB9XG5cbiAgc2V0Q2FyZFJlc3BvbnNlSWQoKSB7XG4gICAgdXRpbGl0aWVzLm9uRHluYW1pY0NhcmRTdGF0ZUNoYW5nZSgpLnN1YnNjcmliZSgocmVzKSA9PiB7XG4gICAgICBpZihyZXMuZGF0YT8uaXNTYXZlKXtcbiAgICAgICAgdGhpcy5zZXRDYXJkSWRzKHJlcy5kYXRhKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2V0RGVsZXRlQ2FyZElkKHJlcy5kYXRhPy5jYXJkRGF0YSwgcmVzLmRhdGE/LmR5bmFtaWNGb3JtKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHNldERlbGV0ZUNhcmRJZCh1cGRhdGVkQ2FyZERhdGE6YW55LCBkeW5hbWljRm9ybTogSUR5bmFtaWNGb3JtKXtcbiAgICB0aGlzLmZvcm0/LmZvcm1TZWN0aW9ucz8uZm9yRWFjaCgoc2VjdGlvbjpJRm9ybVNlY3Rpb24pPT57XG4gICAgICBjb25zdCBjYXJkQ29udHJvbCA9IHNlY3Rpb24uZmllbGRzLmZpbmQoKGZpZWxkOklGb3JtRmllbGQpPT4gZmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkNBUkQpO1xuICAgICAgaWYoY2FyZENvbnRyb2wpe1xuICAgICAgICBjYXJkQ29udHJvbC5jYXJkLmRhdGEgPSB1cGRhdGVkQ2FyZERhdGE7XG4gICAgICB9O1xuICAgIH0pO1xuICAgIGR5bmFtaWNGb3JtID0gdGhpcy5mb3JtO1xuICB9XG5cbiAgc2V0Q2FyZElkcyhyZXMpIHtcbiAgICByZXMucmVjb3JkcyA9IHRoaXMuZ3JpZFNlcnZpY2Uuc2V0RGF0YUZpZWxkcyhyZXMucmVjb3Jkcyk7XG4gICAgcmVzLnJlY29yZHM/LmZvckVhY2goKHJlY29yZDogYW55LCByZWNvcmRJbmRleDogYW55KSA9PiB7XG4gICAgICBjb25zdCBtYXRjaENhcmQgPSByZXMuY2FyZHNJbmZvPy5maW5kKFxuICAgICAgICAoaW5mbywgY2FyZEluZGV4KSA9PlxuICAgICAgICAgIHJlY29yZEluZGV4ID09PSBjYXJkSW5kZXggJiYgcmVjb3JkW3Jlcy5maWVsZE5hbWU/LnRvTG93ZXJDYXNlKCldXG4gICAgICApO1xuICAgICAgaWYgKG1hdGNoQ2FyZCAmJiBPYmplY3Qua2V5cyhtYXRjaENhcmQpPy5sZW5ndGggPiAwKSB7XG4gICAgICAgIG1hdGNoQ2FyZFtyZXMuZmllbGROYW1lXSA9IHJlY29yZFtyZXMuZmllbGROYW1lPy50b0xvd2VyQ2FzZSgpXTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAodGhpcy5mb3JtPy5mb3JtU2VjdGlvbnM/Lmxlbmd0aCA+IDApIHtcbiAgICAgIGxldCBmb3JtRmllbGQ6IElGb3JtRmllbGQ7XG4gICAgICB0aGlzLmZvcm0/LmZvcm1TZWN0aW9ucy5mb3JFYWNoKChmb3JtU2VjdGlvbikgPT4ge1xuICAgICAgICBpZihyZXMuY2FyZElkKXtcbiAgICAgICAgICBmb3JtRmllbGQgPSBmb3JtU2VjdGlvbi5maWVsZHM/LmZpbmQoXG4gICAgICAgICAgICAoZmllbGQpID0+IGZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5DQVJEICYmIGZpZWxkLmlkID09PSByZXMuY2FyZElkXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmb3JtRmllbGQgPSBmb3JtU2VjdGlvbi5maWVsZHM/LmZpbmQoXG4gICAgICAgICAgICAoZmllbGQpID0+IGZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5DQVJEXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgaWYgKGZvcm1GaWVsZCkge1xuICAgICAgICAgIGlmIChyZXMuY2FyZHNJbmZvPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICByZXMuY2FyZHNJbmZvPy5mb3JFYWNoKChjYXJkSWQpID0+IHtcbiAgICAgICAgICAgICAgY2FyZElkLmlkID0gbnVsbDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmb3JtRmllbGQuY2FyZC5kYXRhID0gcmVzLmNhcmRzSW5mbztcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMuc2V0Q2FyZERhdGEgPSAhdGhpcy5zZXRDYXJkRGF0YTtcbiAgfVxuXG4gIHJlbW92ZVdoaXRlU3BhY2VzKCkge1xuICAgIHRoaXMuZm9ybT8uZm9ybVNlY3Rpb25zPy5mb3JFYWNoKChzZWN0aW9uKSA9PiB7XG4gICAgICBpZiAoc2VjdGlvbi5jbGFzcykgc2VjdGlvbi5jbGFzcyA9IHNlY3Rpb24uY2xhc3MucmVwbGFjZSgvXFxzL2csICcnKTtcbiAgICB9KTtcbiAgfVxuXG4gIHNldEh5cGVybGlua0NvbXBvbmVudFJvdXRlKCkge1xuICAgIHRoaXMuZm9ybT8uZm9ybVNlY3Rpb25zPy5mb3JFYWNoKChmb3JtU2VjdGlvbikgPT4ge1xuICAgICAgZm9ybVNlY3Rpb24uZmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBmaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuSFlQRVJMSU5LICYmXG4gICAgICAgICAgZmllbGQuaHlwZXJsaW5rPy5jb21wb25lbnRcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5yb3V0ZXIucmVzZXRDb25maWcoW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBwYXRoOiAnaHlwZXJsaW5rJyArIGZpZWxkLmxhYmVsLFxuICAgICAgICAgICAgICBjb21wb25lbnQ6IGZpZWxkLmh5cGVybGluay5jb21wb25lbnQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLi4udGhpcy5yb3V0ZXIuY29uZmlnLFxuICAgICAgICAgIF0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGJyb3dzZXJUYWJDbG9zZUV2ZW50KGV2ZW50OiBib29sZWFuID0gZmFsc2UpIHtcbiAgICB0aGlzLmZvcm1TZXJ2aWNlLmZpZWxkRm9jdXNlZE91dCA9IGV2ZW50O1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKXtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMaXN0ZW5zIGFueSBjaGFuZ2UgaW4gRHluYW1pYyBGb3JtIGNvbXBvbmVudCBTdGF0ZVxuICAgKi9cbiAgb25EeW5hbWljRm9ybVN0YXRlQ2hhbmdlKCkge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gdXRpbGl0aWVzLm9uRHluYW1pY0Zvcm1TdGF0ZUNoYW5nZSgpLnN1YnNjcmliZSgocmVzcG9uc2UpID0+IHtcbiAgICAgIGlmIChyZXNwb25zZS5pZCAmJiByZXNwb25zZS5kYXRhKSB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudFJlZk9iaiA9IHRoaXMuY29tcG9uZW50c0xpc3QuZmluZChcbiAgICAgICAgICAoeCkgPT4geC5uYW1lID09PSByZXNwb25zZS5pZFxuICAgICAgICApO1xuICAgICAgICBpZiAoY29tcG9uZW50UmVmT2JqKSB7XG4gICAgICAgICAgT2JqZWN0LmVudHJpZXMocmVzcG9uc2UuZGF0YSA/PyB7fSkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgICBjb21wb25lbnRSZWZPYmoudmFsdWUuaW5zdGFuY2Vba2V5XSA9IHZhbHVlO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmKHJlc3BvbnNlPy5sb2FkQ29tcG9uZW50KXtcbiAgICAgICAgICAgIGNvbXBvbmVudFJlZk9iai52YWx1ZS5pbnN0YW5jZS5uZ09uSW5pdCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLy8gYXBwbHkgdXNlciByb2xlIHBlcm1pc3Npb25zXG4gIGFwcGx5VXNlclBlcm1pc3Npb25zKCkge1xuICAgIGlmICh0aGlzLmZvcm0gJiYgdGhpcy5mb3JtLmZvcm1TZWN0aW9ucykge1xuICAgICAgbGV0IHRvdGFsRmllbGRzOiBudW1iZXIgPSAwO1xuICAgICAgbGV0IGRpc2FibGVkRmllbGRzOiBudW1iZXIgPSAwO1xuICAgICAgbGV0IGhpZGRlbkZpZWxkczogbnVtYmVyID0gMDtcblxuICAgICAgdGhpcy5mb3JtLmZvcm1TZWN0aW9ucy5mb3JFYWNoKChmb3JtU2VjdGlvbikgPT4ge1xuICAgICAgICBpZiAoZm9ybVNlY3Rpb24uZmllbGRzKSB7XG4gICAgICAgICAgZm9ybVNlY3Rpb24uZmllbGRzLmZvckVhY2goKGZvcm1GaWVsZCkgPT4ge1xuICAgICAgICAgICAgbGV0IHBlcm1pc3Npb25zOiBhbnkgPSBmb3JtRmllbGQucGVybWlzc2lvbnM7XG4gICAgICAgICAgICBsZXQgc2VjdGlvblBlcm1pc3Npb25zOiBhbnkgPSBbXTtcbiAgICAgICAgICAgIGlmICghcGVybWlzc2lvbnMpIHNlY3Rpb25QZXJtaXNzaW9ucyA9IGZvcm1TZWN0aW9uLnBlcm1pc3Npb25zO1xuICAgICAgICAgICAgaWYgKCFwZXJtaXNzaW9ucykgcGVybWlzc2lvbnMgPSB0aGlzLmZvcm0ucGVybWlzc2lvbnM7XG4gICAgICAgICAgICBsZXQgaGFzVmFsaWRFZGl0UGVybWlzc2lvbiA9IGZhbHNlO1xuXG4gICAgICAgICAgICBpZiAoc2VjdGlvblBlcm1pc3Npb25zICYmIHNlY3Rpb25QZXJtaXNzaW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIHNlY3Rpb25QZXJtaXNzaW9ucy5mb3JFYWNoKChwZXJtaXNzaW9uOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgaXNWYWxpZDogYm9vbGVhbiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHBlcm1pc3Npb24ucm9sZXMuZm9yRWFjaCgocm9sZTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWQgJiYgdGhpcy5yb2xlcyAmJiB0aGlzLnJvbGVzLmluY2x1ZGVzKHJvbGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlzVmFsaWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBpZiAocGVybWlzc2lvbi50eXBlID09PSBFUGVybWlzc2lvblR5cGUuVklFVykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNWYWxpZCkge1xuICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5kaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgZm9ybVNlY3Rpb24uaGlkZGVuID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwZXJtaXNzaW9uLnR5cGUgPT09IEVQZXJtaXNzaW9uVHlwZS5FRElUKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1ZhbGlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgZm9ybVNlY3Rpb24uaGlkZGVuID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgZm9ybVNlY3Rpb24uYWNjb3JkaW9uRGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgIGZvcm1TZWN0aW9uLmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQuZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwZXJtaXNzaW9ucyAmJiBwZXJtaXNzaW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIHBlcm1pc3Npb25zLmZvckVhY2goKHBlcm1pc3Npb246IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBpc1ZhbGlkOiBib29sZWFuID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgaWYgKHBlcm1pc3Npb24ucm9sZXMgJiYgcGVybWlzc2lvbi5yb2xlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICBwZXJtaXNzaW9uLnJvbGVzLmZvckVhY2goKHJvbGU6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWQgJiYgdGhpcy5yb2xlcyAmJiB0aGlzLnJvbGVzLmluY2x1ZGVzKHJvbGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgaXNWYWxpZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICBwZXJtaXNzaW9uLnR5cGUgPT09IEVQZXJtaXNzaW9uVHlwZS5WSUVXICYmXG4gICAgICAgICAgICAgICAgICAgICFoYXNWYWxpZEVkaXRQZXJtaXNzaW9uXG4gICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzVmFsaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQuZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5oaWRkZW4gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBlcm1pc3Npb24udHlwZSA9PT0gRVBlcm1pc3Npb25UeXBlLkVESVQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzVmFsaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICBoYXNWYWxpZEVkaXRQZXJtaXNzaW9uID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQuZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQuaGlkZGVuID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLnBlcm1pc3Npb25zICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQucGVybWlzc2lvbnMubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYoZm9ybVNlY3Rpb24uZGlzYWJsZWQpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtU2VjdGlvbi5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybVNlY3Rpb24uYWNjb3JkaW9uRGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybVNlY3Rpb24uZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybVNlY3Rpb24uYWNjb3JkaW9uRGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0b3RhbEZpZWxkcysrO1xuXG4gICAgICAgICAgICBpZiAoZm9ybUZpZWxkLmRpc2FibGVkKSB7XG4gICAgICAgICAgICAgIGRpc2FibGVkRmllbGRzKys7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChmb3JtRmllbGQuaGlkZGVuKSB7XG4gICAgICAgICAgICAgIGhpZGRlbkZpZWxkcysrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5pc0Zvcm1EaXNhYmxlZCA9IHRvdGFsRmllbGRzID4gMCAmJiB0b3RhbEZpZWxkcyA9PT0gZGlzYWJsZWRGaWVsZHM7XG4gICAgICB0aGlzLmlzRm9ybUhpZGRlbiA9IHRvdGFsRmllbGRzID4gMCAmJiB0b3RhbEZpZWxkcyA9PT0gaGlkZGVuRmllbGRzO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBPcGVuIElGcmFtZSBpbiBoeXBlcmxpbmsgQ29udHJvbFxuICAgKi9cbiAgc2VjdGlvbkRpc2FibGVkKGZvcm1TZWN0aW9uOiBJRm9ybVNlY3Rpb24pIHtcbiAgICBpZiAoZm9ybVNlY3Rpb24uZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLmRpc2FibGVkU2VjdGlvbkZpZWxkcyhmb3JtU2VjdGlvbiwgdHJ1ZSk7XG4gICAgfSBlbHNlIGlmKGZvcm1TZWN0aW9uLmRpc2FibGVkID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuIHRoaXMuZGlzYWJsZWRTZWN0aW9uRmllbGRzKGZvcm1TZWN0aW9uLCBmYWxzZSk7XG4gICAgfWVsc2Uge1xuICAgICAgcmV0dXJuIGZvcm1TZWN0aW9uO1xuICAgIH1cbiAgfVxuXG4gIGRpc2FibGVkU2VjdGlvbkZpZWxkcyhmb3JtU2VjdGlvbjogSUZvcm1TZWN0aW9uLCBkaXNhYmxlZDogYm9vbGVhbil7XG4gICAgZm9ybVNlY3Rpb24uZmllbGRzLm1hcCgoZmllbGQ6IElGb3JtRmllbGQpID0+IHtcbiAgICAgIGZpZWxkLmRpc2FibGVkID0gZGlzYWJsZWQ7XG4gICAgfSk7XG4gICAgcmV0dXJuIGZvcm1TZWN0aW9uO1xuICB9XG5cbiAgbG9hZElGcmFtZShmb3JtRmllbGQ6IElGb3JtRmllbGQpIHtcbiAgICB0aGlzLmhhbmRsZUNsaWNrRXZlbnQoZm9ybUZpZWxkKTtcbiAgICBjb25zdCByZWYgPSB0aGlzLmRpYWxvZ1NlcnZpY2Uub3BlbihJZnJhbWVDb21wb25lbnQsIHtcbiAgICAgIGhlYWRlcjogJ0h5cGVybGluaycsXG4gICAgICB3aWR0aDogZm9ybUZpZWxkLmh5cGVybGluaz8ud2lkdGggPyBmb3JtRmllbGQuaHlwZXJsaW5rLndpZHRoIDogJzkwJScsXG4gICAgICBoZWlnaHQ6IGZvcm1GaWVsZC5oeXBlcmxpbms/LmhlaWdodCA/IGZvcm1GaWVsZC5oeXBlcmxpbmsuaGVpZ2h0IDogJzgwJScsXG4gICAgICBkYXRhOiB7IHZhbHVlOiBmb3JtRmllbGQuaHlwZXJsaW5rPy5saW5rLCBpRnJhbWVJZDogZm9ybUZpZWxkLmxhYmVsIH0sXG4gICAgfSk7XG4gICAgdGhpcy5zZXREeW5hbWljRGlhbG9nUmVmKHJlZik7XG4gICAgdGhpcy5uZ1pvbmUub25TdGFibGVcbiAgICAucGlwZSh0YWtlKDEpKSAvLyBFbWl0IG9ubHkgb25jZSB3aGVuIHRoZSB6b25lIGJlY29tZXMgc3RhYmxlXG4gICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICBkcmFnZ2FibGVEaWFsb2coZm9ybUZpZWxkPy5maWVsZCk7XG4gICAgfSk7XG4gICAgcmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKChyZXMpID0+IHtcbiAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgaWYgKGZvcm1GaWVsZC5vblJldHVybikge1xuICAgICAgICAgIGZvcm1GaWVsZC5vblJldHVybihyZXMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogb3BlbiBEaWFsb2cgaW4gaHlwZXJsaW5rIENvbnRyb2xcbiAgICovXG4gIGh5cGVybGlua0RpYWxvZyhmb3JtRmllbGQ6IElGb3JtRmllbGQsIGV2ZW50OiBhbnkpIHtcbiAgICBpZiAoZm9ybUZpZWxkLmh5cGVybGluaz8udGFyZ2V0ID09PSBFSHlwZXJsaW5rLkJMQU5LKSB7XG4gICAgICB2YXIgdmFsdWUgPSBmb3JtRmllbGQuaHlwZXJsaW5rLnBhcmFtcztcbiAgICAgIHdpbmRvdy5vcGVuKCdoeXBlcmxpbmsnICsgZm9ybUZpZWxkLmxhYmVsKTtcbiAgICB9IGVsc2UgaWYgKGZvcm1GaWVsZC5oeXBlcmxpbms/LnRhcmdldCA9PT0gRUh5cGVybGluay5TRUxGKSB7XG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJ2h5cGVybGluaycgKyBmb3JtRmllbGQubGFiZWxdLCB7XG4gICAgICAgIHF1ZXJ5UGFyYW1zOiBmb3JtRmllbGQuaHlwZXJsaW5rLnBhcmFtcyxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoZm9ybUZpZWxkLmh5cGVybGluaz8udGFyZ2V0ID09PSBFSHlwZXJsaW5rLkRJQUxPRykge1xuICAgICAgdGhpcy5vbkNsaWNrRXZlbnQoZm9ybUZpZWxkKTtcbiAgICAgIGlmIChldmVudCAmJiBldmVudC5jdHJsS2V5ICYmIGZvcm1GaWVsZC5oeXBlcmxpbmsuY29tcG9uZW50KSB7XG4gICAgICAgIHRoaXMuaHlwZXJsaW5rU2VydmljZS5vcGVuRGlhbG9nSW5OZXdUYWIoZm9ybUZpZWxkLmh5cGVybGluay5jb21wb25lbnQsIGZvcm1GaWVsZC5oeXBlcmxpbms/LnBhcmFtcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAgdGhpcy5kaWFsb2dSZWYgPSB0aGlzLmRpYWxvZ1NlcnZpY2Uub3Blbihmb3JtRmllbGQuaHlwZXJsaW5rLmNvbXBvbmVudCwge1xuICAgICAgICAgIGhlYWRlcjogZm9ybUZpZWxkLmh5cGVybGluay5kYXRhPy5oZWFkZXJcbiAgICAgICAgICAgID8gZm9ybUZpZWxkLmh5cGVybGluay5kYXRhPy5oZWFkZXJcbiAgICAgICAgICAgIDogJycsXG4gICAgICAgICAgd2lkdGg6IGZvcm1GaWVsZC5oeXBlcmxpbmsud2lkdGggPyBmb3JtRmllbGQuaHlwZXJsaW5rLndpZHRoIDogJycsXG4gICAgICAgICAgc3R5bGU6IGZvcm1GaWVsZC5oeXBlcmxpbmsud2lkdGggPyB7fSA6IHsgJ21heC13aWR0aCc6ICdmaXQtY29udGVudCcgfSxcbiAgICAgICAgICBoZWlnaHQ6IGZvcm1GaWVsZC5oeXBlcmxpbmsuaGVpZ2h0ID8gZm9ybUZpZWxkLmh5cGVybGluay5oZWlnaHQgOiAnODAlJyxcbiAgICAgICAgICBkYXRhOiBmb3JtRmllbGQuaHlwZXJsaW5rLnBhcmFtc1xuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIGlmKHRoaXMuZ3JpZFNlcnZpY2UuY29sdW1uRm9jdXNlZE91dCB8fCB0aGlzLmZvcm1TZXJ2aWNlLmZpZWxkRm9jdXNlZE91dCl7XG4gICAgICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UgPSB0aGlzLmludGVyY2VwdERpYWxvZ0Nsb3NlLmJpbmQodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXREeW5hbWljRGlhbG9nUmVmKHRoaXMuZGlhbG9nUmVmKTtcbiAgICAgICAgY29uc3QgY29tcG9uZW50TmFtZSA9IGZvcm1GaWVsZC5oeXBlcmxpbms/LmNvbXBvbmVudD8ubmFtZTtcbiAgICAgICAgaWYgKGNvbXBvbmVudE5hbWUpIHtcbiAgICAgICAgICB0aGlzLnBhZ2VMb2dnZXJTZXJ2aWNlLnNhdmVQYWdlTG9nZ2VySW5mbyhcbiAgICAgICAgICAgIHRoaXMucm91dGVyLnVybD8uc3Vic3RyaW5nKDEpLFxuICAgICAgICAgICAgY29tcG9uZW50TmFtZVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5uZ1pvbmUub25TdGFibGVcbiAgICAgICAgICAucGlwZSh0YWtlKDEpKSAvLyBFbWl0IG9ubHkgb25jZSB3aGVuIHRoZSB6b25lIGJlY29tZXMgc3RhYmxlXG4gICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICBkcmFnZ2FibGVEaWFsb2coZm9ybUZpZWxkPy5maWVsZCA/IGZvcm1GaWVsZD8uZmllbGQgOiBmb3JtRmllbGQ/LmxhYmVsKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5kaWFsb2dSZWYub25DbG9zZS5zdWJzY3JpYmUoKHJlcykgPT4ge1xuICAgICAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgICAgIGlmIChmb3JtRmllbGQub25SZXR1cm4pIHtcbiAgICAgICAgICAgICAgZm9ybUZpZWxkLm9uUmV0dXJuKHJlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogb3BlbiBJZnJhbWUgb24gTGFiZWxcbiAgICovXG4gIGxvYWRMYWJlbENvbnRyb2xJRnJhbWUoZm9ybUZpZWxkOiBhbnkpIHtcbiAgICBjb25zdCByZWYgPSB0aGlzLmRpYWxvZ1NlcnZpY2Uub3BlbihJZnJhbWVDb21wb25lbnQsIHtcbiAgICAgIGhlYWRlcjogZm9ybUZpZWxkLmxhYmVsLm5hbWUsXG4gICAgICB3aWR0aDogZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbC5oeXBlcmxpbmsud2lkdGhcbiAgICAgICAgPyBmb3JtRmllbGQuaHlwZXJsaW5rLndpZHRoXG4gICAgICAgIDogJzkwJScsXG4gICAgICBoZWlnaHQ6IGZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wuaHlwZXJsaW5rPy5oZWlnaHRcbiAgICAgICAgPyBmb3JtRmllbGQuaHlwZXJsaW5rLmhlaWdodFxuICAgICAgICA6ICc4MCUnLFxuICAgICAgZGF0YToge1xuICAgICAgICB2YWx1ZTogZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbC5oeXBlcmxpbms/LmxpbmtcbiAgICAgICAgICA/IGZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wuaHlwZXJsaW5rLmxpbmtcbiAgICAgICAgICA6ICcnLFxuICAgICAgICBpRnJhbWVJZDogZm9ybUZpZWxkLmxhYmVsLm5hbWUsXG4gICAgICB9LFxuICAgIH0pO1xuICAgIHRoaXMuc2V0RHluYW1pY0RpYWxvZ1JlZihyZWYpO1xuICAgIHRoaXMucGFnZUxvZ2dlclNlcnZpY2Uuc2F2ZVBhZ2VMb2dnZXJJbmZvKFxuICAgICAgdGhpcy5yb3V0ZXIudXJsPy5zdWJzdHJpbmcoMSksXG4gICAgICAnSWZyYW1lQ29tcG9uZW50J1xuICAgICk7XG4gICAgdGhpcy5uZ1pvbmUub25TdGFibGVcbiAgICAgIC5waXBlKHRha2UoMSkpIC8vIEVtaXQgb25seSBvbmNlIHdoZW4gdGhlIHpvbmUgYmVjb21lcyBzdGFibGVcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICBkcmFnZ2FibGVEaWFsb2coZm9ybUZpZWxkPy5maWVsZCA/IGZvcm1GaWVsZD8uZmllbGQgOiBmb3JtRmllbGQ/LmxhYmVsKTtcbiAgICAgIH0pO1xuICAgIHJlZi5vbkNsb3NlLnN1YnNjcmliZSgocmVzKSA9PiB7XG4gICAgICBpZiAocmVzKSB7XG4gICAgICAgIGlmIChmb3JtRmllbGQub25SZXR1cm4pIHtcbiAgICAgICAgICBmb3JtRmllbGQub25SZXR1cm4ocmVzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChmb3JtRmllbGQgJiYgZm9ybUZpZWxkLm9uQ2xpY2spIHtcbiAgICAgIGZvcm1GaWVsZC5vbkNsaWNrKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGZpbmQgdGhlIHJlcXVpcmVkIGZpZWxkIGluIGZvcm1cbiAgICovXG4vLyAgIGFwcGx5UmVxdWlyZWRGaWVsZFZhbGlkYXRpb24oKSB7XG4vLyBjb25zb2xlLmxvZygnYXBwbHlpbmcgcmVxdWlyZWRmaWxlZCB2YWxpZGF0aW9ucycpXG4vLyAgICAgaWYgKFxuLy8gICAgICAgdGhpcy5mb3JtICYmXG4vLyAgICAgICB0aGlzLmZvcm0uZm9ybVNlY3Rpb25zICYmXG4vLyAgICAgICB0aGlzLmZvcm0uZm9ybVNlY3Rpb25zLmxlbmd0aCA+IDBcbi8vICAgICApIHtcbi8vICAgICAgIHRoaXMuZm9ybS5mb3JtU2VjdGlvbnMuZm9yRWFjaCgoc2VjdGlvbikgPT4ge1xuLy8gICAgICAgICBzZWN0aW9uLmZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xuLy8gICAgICAgICAgIGNvbnNvbGUubG9nKCdmaWVsZCcsIGZpZWxkKVxuLy8gICAgICAgICAgIGlmIChmaWVsZC52YWxpZGF0aW9ucyAmJiBmaWVsZC52YWxpZGF0aW9ucy5sZW5ndGggPiAwKSB7XG4vLyAgICAgICAgICAgICBmaWVsZC52YWxpZGF0aW9ucy5mb3JFYWNoKCh2YWxpZCkgPT4ge1xuLy8gICAgICAgICAgICAgICBpZiAodmFsaWQudHlwZSA9PT0gRVZhbGlkYXRvci5SRVFVSVJFRCkge1xuLy8gICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdmaWVsZCcsZmllbGQsJ2lzIHJlcXVpcmVkJylcbi8vICAgICAgICAgICAgICAgICBmaWVsZC5yZXF1aXJlZEZpZWxkID0gdHJ1ZTtcbi8vICAgICAgICAgICAgICAgfVxuLy8gICAgICAgICAgICAgfSk7XG4vLyAgICAgICAgICAgfVxuLy8gICAgICAgICB9KTtcbi8vICAgICAgIH0pO1xuLy8gICAgIH1cbi8vICAgfVxuXG4gIHNldEZpbGVVcmxzKGZpbGVVcmxzOiBhbnkpIHtcbiAgICBpZiAoZmlsZVVybHMgJiYgZmlsZVVybHMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5maWxlVXBsb2FkVXJscyA9IGZpbGVVcmxzO1xuICAgICAgdGhpcy5zaG93ZmlsZVVwbG9hZEVycm9yID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgb25TYXZlRm9ybSgpIHtcbiAgICBsZXQgdmFsaWRpdHkgPSB0cnVlO1xuICAgIGxldCBlcnJvck1lc3NhZ2VEZXRhaWxzID0gJyc7XG4gICAgdGhpcy5mb3JtU2VydmljZS5maWVsZEZvY3VzZWRPdXQgPSBmYWxzZTtcbiAgICB0aGlzLmdyaWRTZXJ2aWNlLmNvbHVtbkZvY3VzZWRPdXQgPSBmYWxzZTtcbiAgICBsZXQgbXVsaVNlbGVjdFZhbHVlID0ge307XG4gICAgdGhpcy5mb3JtLmZvcm1TZWN0aW9ucz8uZm9yRWFjaCgoZm9ybVNlY3Rpb24pID0+IHtcbiAgICAgIGlmIChmb3JtU2VjdGlvbi5maWVsZHMpIHtcbiAgICAgICAgaWYgKCF0aGlzLmZvcm1TZXJ2aWNlLmNoZWNrVmFsaWRpdHkoZm9ybVNlY3Rpb24uZmllbGRzKSkge1xuICAgICAgICAgIGZvcm1TZWN0aW9uLmZpZWxkcz8uZm9yRWFjaCgoZm9ybUZpZWxkOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChmb3JtRmllbGQuZXJyb3JNZXNzYWdlKSB7XG4gICAgICAgICAgICAgIGVycm9yTWVzc2FnZURldGFpbHMgPSBlcnJvck1lc3NhZ2VEZXRhaWxzXG4gICAgICAgICAgICAgICAgPyBlcnJvck1lc3NhZ2VEZXRhaWxzICsgJyAsICcgKyBmb3JtRmllbGQuZXJyb3JNZXNzYWdlXG4gICAgICAgICAgICAgICAgOiBmb3JtRmllbGQuZXJyb3JNZXNzYWdlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGxldCBmaWVsZCA9IGZvcm1TZWN0aW9uLmZpZWxkcy5zb21lKFxuICAgICAgICAgICAgKGZpZWxkKSA9PiBmaWVsZC5yZXF1aXJlZEZpZWxkICYmIGZpZWxkLmVycm9yTWVzc2FnZSAmJiAhZmllbGQudmFsdWVcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmICh2YWxpZGl0eSAmJiBmaWVsZCkge1xuICAgICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoXG4gICAgICAgICAgICAgIGVycm9yTWVzc2FnZURldGFpbHMsXG4gICAgICAgICAgICAgIDUwMDAsXG4gICAgICAgICAgICAgICdSRVFVSVJFRCBGSUVMRCdcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKGVycm9yTWVzc2FnZURldGFpbHMsIDUwMDAsICdJTlZBTElEIEZJRUxEJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhbGlkaXR5ID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBmb3JtU2VjdGlvbi5maWVsZHMuZm9yRWFjaCgoZmllbGQ6IGFueSkgPT4ge1xuICAgICAgICAgIC8vIHNldCB1cGxvYWRGaWxlIFVSTCBpbiBGb3JtRmllbGQgaW4gY2FzZSBvZiBGSUxFX1VQTE9BRFxuICAgICAgICAgIGlmIChmaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuRklMRV9VUExPQUQpIHtcbiAgICAgICAgICAgIGZpZWxkLnZhbHVlID0gdGhpcy5maWxlVXBsb2FkVXJscztcblxuICAgICAgICAgICAgaWYgKGZpZWxkLnZhbGlkYXRpb25zICYmIGZpZWxkLnZhbGlkYXRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgZmllbGQudmFsaWRhdGlvbnMuZm9yRWFjaCgoeDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHgudHlwZSA9PT0gRVZhbGlkYXRvci5SRVFVSVJFRCAmJiAhZmllbGQudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd2ZpbGVVcGxvYWRFcnJvciA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkNBUkQpIHtcbiAgICAgICAgICAgIGlmIChmaWVsZC5jYXJkICYmIGZpZWxkLmNhcmQuZGF0YT8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICBsZXQgc2VsZWN0ZWREYXRhID0gZmllbGQuY2FyZC5kYXRhLmZpbHRlcihcbiAgICAgICAgICAgICAgICAoeDogYW55KSA9PiB4LnNlbGVjdGVkQ2FyZCAmJiB4LnNlbGVjdGVkQ2FyZC5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGlmIChzZWxlY3RlZERhdGEgJiYgc2VsZWN0ZWREYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBmaWVsZC5jYXJkLmRhdGEgPSBzZWxlY3RlZERhdGE7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmICh2YWxpZGl0eSkge1xuICAgICAgLy8gU2F2ZSBncmlkIG9uIGZvcm1TYXZlIEJ1dHRvblxuICAgICAgbGV0IGN1c3RvbUNvbXBvbmVudDogYm9vbGVhbiA9IGZhbHNlO1xuICAgICAgbGV0IHRlbXBWYWx1ZTogYW55ID0gW107XG4gICAgICBsZXQgc2F2ZUFsbEdyaWQ6IGFueSA9IFtdO1xuICAgICAgbGV0IGdldEJ0bnM6IGFueSA9IFtdO1xuICAgICAgLy8gc2V0IHZhbHVlIGFzIDEgb3IgMCBpbiBjYXNlIG9mIGNoZWNrYm94XG4gICAgICB0aGlzLmZvcm0uZm9ybVNlY3Rpb25zPy5mb3JFYWNoKChmb3JtU2VjdGlvbikgPT4ge1xuICAgICAgICBpZiAoZm9ybVNlY3Rpb24uZmllbGRzICYmIHZhbGlkaXR5KSB7XG4gICAgICAgICAgZm9ybVNlY3Rpb24uZmllbGRzLmZvckVhY2goKGZpZWxkOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChmaWVsZC52YWx1ZSA9PT0gJycgfHwgZmllbGQudmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICBmaWVsZC52YWx1ZSA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvL2NvbnZlcnQgZGF0ZSBpbnRvIHRpbWUgYXMgc3RyaW5nXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5DQUxFTkRBUiAmJlxuICAgICAgICAgICAgICBmaWVsZC50aW1lT25seSAmJlxuICAgICAgICAgICAgICBmaWVsZC52YWx1ZVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGlmIChmaWVsZC5zaG93VGltZSkge1xuICAgICAgICAgICAgICAgIGZpZWxkLnZhbHVlID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oZmllbGQudmFsdWUsICd5eXl5LU1NLWRkIEhIOm1tOnNzJyk7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWZpZWxkLnZhbHVlPy50b1N0cmluZygpPy5pbmNsdWRlcygnQU0nKSAmJlxuICAgICAgICAgICAgICAgICFmaWVsZC52YWx1ZT8udG9TdHJpbmcoKT8uaW5jbHVkZXMoJ1BNJykpIHtcbiAgICAgICAgICAgICAgICBmaWVsZC52YWx1ZSA9IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGZpZWxkLnZhbHVlLCAnaGg6bW0gYScpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZmllbGQ/LmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5OVU1FUklDKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGRpZ2l0c0luZm8gPSBmaWVsZD8uZm9ybWF0Py5mb3JtYXRQYXJhbXM/LmRpZ2l0c0luZm87XG4gICAgICAgICAgICAgIGlmIChmaWVsZC52YWx1ZSkge1xuICAgICAgICAgICAgICAgIGlmIChmaWVsZD8uZm9ybWF0Py50eXBlID09PSAncGVyY2VudCcpIHtcbiAgICAgICAgICAgICAgICAgIGlmIChmaWVsZC5mb3JtYXQ/LmZvcm1hdFBhcmFtcz8uYWxsb3dDYWxjdWxhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FsY3VsYXRlZFZhbHVlID0gZmllbGQudmFsdWU/LnRvU3RyaW5nKCk/LmluY2x1ZGVzKCcuJykgPyB0cnVlIDogZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkaWdpdHNJbmZvKSB7XG4gICAgICAgICAgICAgICAgICAgICAgZmllbGQudmFsdWUgPSBwYXJzZUZsb2F0KFxuICAgICAgICAgICAgICAgICAgICAgICAgKGNhbGN1bGF0ZWRWYWx1ZSA/IGZpZWxkLnZhbHVlIDogZmllbGQudmFsdWUgLyAxMDApPy50b1N0cmluZygpXG4gICAgICAgICAgICAgICAgICAgICAgKS50b0ZpeGVkKGRpZ2l0c0luZm8pO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFmaWVsZC52YWx1ZT8udG9TdHJpbmcoKT8uaW5jbHVkZXMoJy4nKSAmJiAhY2FsY3VsYXRlZFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgZmllbGQudmFsdWUgPSBmaWVsZC52YWx1ZSAvIDEwMDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkaWdpdHNJbmZvKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnZhbHVlID0gcGFyc2VGbG9hdChmaWVsZC52YWx1ZSkudG9GaXhlZChkaWdpdHNJbmZvKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gc2V0IHZhbHVlIG9mIGF1dG9Db21wbGV0ZSBhcyBzdHJpbmdzXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5BVVRPQ09NUExFVEUgJiZcbiAgICAgICAgICAgICAgIWZpZWxkLnNob3dBbGxWYWx1ZSAmJlxuICAgICAgICAgICAgICBmaWVsZC52YWx1ZSAmJlxuICAgICAgICAgICAgICBmaWVsZC52YWx1ZS5sZW5ndGggPiAwXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBmaWVsZC52YWx1ZS5tYXAoXG4gICAgICAgICAgICAgICAgKHZhbHVlOiBhbnkpID0+IHZhbHVlW2ZpZWxkLmRpc3BsYXlGaWVsZF1cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHZhbHVlICYmXG4gICAgICAgICAgICAgICAgKHZhbHVlLnRvU3RyaW5nKCk/LmluY2x1ZGVzKCc7JykgfHxcbiAgICAgICAgICAgICAgICAgIHZhbHVlLnRvU3RyaW5nKCk/LmluY2x1ZGVzKCcsJykpXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRlbXBWYWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIGZpZWxkLnZhbHVlID0gdmFsdWUudG9TdHJpbmcoKS5yZXBsYWNlQWxsKCcsJywgJzsnKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gY29udmVydCBtdWx0aVNlbGVjdCBhcnJheSBpbnRvIHN0cmluZ1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBmaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuTVVMVElTRUxFQ1QgJiZcbiAgICAgICAgICAgICAgZmllbGQudmFsdWUgJiZcbiAgICAgICAgICAgICAgQXJyYXkuaXNBcnJheShmaWVsZC52YWx1ZSkgJiZcbiAgICAgICAgICAgICAgZmllbGQuc2F2ZUFzU3RyaW5nICE9PSBmYWxzZVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIG11bGlTZWxlY3RWYWx1ZVtmaWVsZC5maWVsZF0gPSBmaWVsZC52YWx1ZVxuICAgICAgICAgICAgICBmaWVsZC52YWx1ZSA9IGZpZWxkLnZhbHVlPy50b1N0cmluZygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5DSEVDS0JPWCkge1xuICAgICAgICAgICAgICBmaWVsZC52YWx1ZSA9IGZpZWxkLnZhbHVlID8gMSA6IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBTYXZlIGdyaWQgb24gZm9ybVNhdmUgQnV0dG9uXG4gICAgICAgICAgICBpZiAoZmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkNPTVBPTkVOVCAmJiAhY3VzdG9tQ29tcG9uZW50KSB7XG4gICAgICAgICAgICAgIGN1c3RvbUNvbXBvbmVudCA9IHRydWU7XG4gICAgICAgICAgICAgIHNhdmVBbGxHcmlkID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLicgKyBmaWVsZD8uY29tcG9uZW50Q29udHJvbD8uaWQgKyAnICcgKyAnI3NhdmVBbGxHcmlkVmFsdWVzJyk7XG4gICAgICAgICAgICAgIGdldEJ0bnMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuJyArIGZpZWxkPy5jb21wb25lbnRDb250cm9sPy5pZCArICcgJyArICcuc2F2ZVJvdycpO1xuICAgICAgICAgICAgICBpZiAoc2F2ZUFsbEdyaWQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgc2F2ZUFsbEdyaWRbMF0uY2xpY2soKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNhdmVGb3JtUGFnZSA9IGludGVydmFsKDc1MCkuc3Vic2NyaWJlKCh4KSA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLnNhdmVGb3JtUGFnZS51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgICAgdGhpcy5zYXZlRm9ybS5lbWl0KHRoaXMuZm9ybS5mb3JtU2VjdGlvbnMpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGVsc2UgaWYgKGdldEJ0bnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IHNhdmVSb3dCdG4gb2YgZ2V0QnRucykge1xuICAgICAgICAgICAgICAgICAgc2F2ZVJvd0J0bj8uY2xpY2soKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5zYXZlRm9ybS5lbWl0KHRoaXMuZm9ybS5mb3JtU2VjdGlvbnMpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdGhpcy5icm93c2VyVGFiQ2xvc2VFdmVudChmYWxzZSk7XG4gICAgICBpZiAoIXNhdmVBbGxHcmlkLmxlbmd0aCAmJiAhZ2V0QnRucy5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5zYXZlRm9ybS5lbWl0KHRoaXMuZm9ybS5mb3JtU2VjdGlvbnMpO1xuICAgICAgfVxuICAgICAgdGhpcy5mb3JtLmZvcm1TZWN0aW9ucz8uZm9yRWFjaCgoZm9ybVNlY3Rpb24pID0+IHtcbiAgICAgICAgaWYgKGZvcm1TZWN0aW9uLmZpZWxkcykge1xuICAgICAgICAgIGZvcm1TZWN0aW9uLmZpZWxkcy5mb3JFYWNoKChmaWVsZDogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5DQUxFTkRBUiAmJlxuICAgICAgICAgICAgICBmaWVsZC50aW1lT25seSAmJiBmaWVsZC5zaG93VGltZVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGZpZWxkLnZhbHVlID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oZmllbGQudmFsdWUsICdoaDptbSBhJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5NVUxUSVNFTEVDVCAmJlxuICAgICAgICAgICAgICBmaWVsZC52YWx1ZVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGZpZWxkLnZhbHVlID0gbXVsaVNlbGVjdFZhbHVlW2ZpZWxkLmZpZWxkXTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgIGZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5BVVRPQ09NUExFVEUgJiZcbiAgICAgICAgICAgICAgIWZpZWxkLnNob3dBbGxWYWx1ZVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGZpZWxkLnZhbHVlID0gdGVtcFZhbHVlXG4gICAgICAgICAgICAgICAgLnRvU3RyaW5nKClcbiAgICAgICAgICAgICAgICAucmVwbGFjZUFsbCgnLCcsICc7JylcbiAgICAgICAgICAgICAgICA/LnNwbGl0KCc7JylcbiAgICAgICAgICAgICAgICA/Lm1hcCgodmFsOiBhbnkpID0+ICh7IFtmaWVsZC5kaXNwbGF5RmllbGRdOiB2YWwgfSkpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChmaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuQ0hFQ0tCT1gpIHtcbiAgICAgICAgICAgICAgZmllbGQudmFsdWUgPSBmaWVsZC52YWx1ZSA9PT0gMSA/IHRydWUgOiBmYWxzZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZmllbGQ/LmZvcm1hdD8udHlwZSA9PT0gJ3BlcmNlbnQnKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGRpZ2l0c0luZm8gPSBmaWVsZD8uZm9ybWF0Py5mb3JtYXRQYXJhbXM/LmRpZ2l0c0luZm87XG4gICAgICAgICAgICAgIGlmIChmaWVsZC52YWx1ZSkge1xuICAgICAgICAgICAgICAgIGlmIChmaWVsZC5mb3JtYXQ/LmZvcm1hdFBhcmFtcz8uYWxsb3dDYWxjdWxhdGUpIHtcbiAgICAgICAgICAgICAgICAgIGlmIChkaWdpdHNJbmZvKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnZhbHVlID0gcGFyc2VGbG9hdChcbiAgICAgICAgICAgICAgICAgICAgICAoZmllbGQudmFsdWUgKiAxMDApPy50b1N0cmluZygpXG4gICAgICAgICAgICAgICAgICAgICkudG9GaXhlZChkaWdpdHNJbmZvKTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnZhbHVlID0gZmllbGQudmFsdWUgKiAxMDA7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkaWdpdHNJbmZvKSB7XG4gICAgICAgICAgICAgICAgICBmaWVsZC52YWx1ZSA9IHBhcnNlRmxvYXQoZmllbGQudmFsdWUpLnRvRml4ZWQoZGlnaXRzSW5mbyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIG9uQ2FuY2VsRm9ybSgpIHtcbiAgICBpZiAodGhpcy5mb3JtU2VydmljZS5maWVsZEZvY3VzZWRPdXQgfHwgdGhpcy5ncmlkU2VydmljZS5jb2x1bW5Gb2N1c2VkT3V0KSB7XG4gICAgICB0aGlzLmFsZXJ0U2VydmljZVxuICAgICAgICAuY29uZmlybSh7XG4gICAgICAgICAga2V5OiAnY2FuY2VsQnV0dG9uJyxcbiAgICAgICAgICBtZXNzYWdlOiAnWW91IGhhdmUgdW5zYXZlZCBjaGFuZ2VzLiBXb3VsZCB5b3UgbGlrZSB0byBjb250aW51ZT8nLFxuICAgICAgICB9KVxuICAgICAgICAudGhlbigocmVzKSA9PiB7XG4gICAgICAgICAgaWYgKHJlc1swXS5kZXRhaWwgPT09ICdZZXMnKSB7XG4gICAgICAgICAgICB0aGlzLmJyb3dzZXJUYWJDbG9zZUV2ZW50KGZhbHNlKTtcbiAgICAgICAgICAgIHRoaXMuZ3JpZFNlcnZpY2UuY29sdW1uRm9jdXNlZE91dCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5jYW5jZWxGb3JtLmVtaXQodGhpcy5mb3JtLmZvcm1TZWN0aW9ucyk7XG4gICAgICAgICAgICB1dGlsaXRpZXMucmVtb3ZlQWN0aXZlSWNvbkNsYXNzKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jYW5jZWxGb3JtLmVtaXQodGhpcy5mb3JtLmZvcm1TZWN0aW9ucyk7XG4gICAgICB1dGlsaXRpZXMucmVtb3ZlQWN0aXZlSWNvbkNsYXNzKCk7XG4gICAgfVxuICB9XG5cbiAgbG9va3VwQ2xlYXJWYWx1ZShmb3JtRmllbGQ6IElGb3JtRmllbGQpIHtcbiAgICBpZiAoZm9ybUZpZWxkLnZhbHVlKSB7XG4gICAgICBmb3JtRmllbGQudmFsdWUgPSAnJztcbiAgICAgIHRoaXMuYnJvd3NlclRhYkNsb3NlRXZlbnQodHJ1ZSk7XG4gICAgfVxuICAgIGlmIChmb3JtRmllbGQub25DaGFuZ2UpIHtcbiAgICAgIGZvcm1GaWVsZC5vbkNoYW5nZShmb3JtRmllbGQpO1xuICAgIH1cbiAgIC8vIHRoaXMuZm9ybVNlcnZpY2UuY2hlY2tWYWxpZGl0eShbZm9ybUZpZWxkXSk7XG4gIH1cblxuICAvKipcbiAgICogc2V0IGNhbGVuZGFyIHdpZHRoXG4gICAqL1xuICBzZXRDYWxhbmRlcldpZHRoKCkge1xuICAgIGNvbnN0IGNhbGFuZGVyRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5wLWNhbGVuZGFyJyk7XG4gICAgbGV0IGZvcm06IGFueSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2Zvcm0nKTtcbiAgICBsZXQgd2lkdGggPSBmb3JtPy5jbGllbnRXaWR0aDtcbiAgICBjYWxhbmRlckVsZW1lbnQ/LmZvckVhY2goKGNhbGFuZGVyOiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IGNhbGFuZGVyT2ZzZXRMZWZ0ID0gY2FsYW5kZXIub2Zmc2V0TGVmdDtcbiAgICAgIGlmIChjYWxhbmRlck9mc2V0TGVmdCA8PSB3aWR0aCAvIDIpIHtcbiAgICAgICAgY2FsYW5kZXIuY2xhc3NMaXN0LmFkZCgnb3Blbi1yaWdodC1zaWRlJyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogc2V0IHRoZSBkeW5hbWljIGRpYWxvZyBkYXRhXG4gICAqL1xuICBzZXREaWFsb2dEYXRhKGZvcm1GaWVsZDogSUZvcm1GaWVsZCwgZGF0YTogYW55KTogYW55IHtcbiAgICBpZiAoZGF0YSAmJiBmb3JtRmllbGQpIHtcbiAgICAgIGxldCB2YWx1ZTogYW55O1xuICAgICAgZGF0YSA9IHV0aWxpdGllcy5vYmpDb252ZXJ0VG9Mb3dlcihkYXRhKTtcbiAgICAgIGxldCBzZWxlY3Rpb246IHN0cmluZyA9ICcnO1xuICAgICAgaWYgKGZvcm1GaWVsZC52YWx1ZSAmJiB0eXBlb2YgZm9ybUZpZWxkLnZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgZm9ybUZpZWxkLnZhbHVlICYmXG4gICAgICAgICAgZm9ybUZpZWxkLnZhbHVlLnRleHQgJiZcbiAgICAgICAgICBmb3JtRmllbGQudmFsdWUudGV4dC50b1N0cmluZygpLnRyaW0oKVxuICAgICAgICApIHtcbiAgICAgICAgICBzZWxlY3Rpb24gPSBmb3JtRmllbGQudmFsdWUudGV4dD8udG9TdHJpbmcoKT8udHJpbSgpO1xuICAgICAgICAgIGlmIChmb3JtRmllbGQuZGlzcGxheUZpZWxkKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IGZvcm1GaWVsZC52YWx1ZT8udmFsdWU/LnRvU3RyaW5nKCk/LnRyaW0oKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZm9ybUZpZWxkLnZhbHVlICYmIGZvcm1GaWVsZC52YWx1ZS50b1N0cmluZygpLnRyaW0oKSkge1xuICAgICAgICBzZWxlY3Rpb24gPSBmb3JtRmllbGQudmFsdWU/LnRvU3RyaW5nKCk/LnRyaW0oKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNvbXBvbmVudE5hbWUgPSBkYXRhLmNvbXBvbmVudD8ubmFtZTtcbiAgICAgIGlmIChjb21wb25lbnROYW1lKSB7XG4gICAgICAgIHRoaXMucGFnZUxvZ2dlclNlcnZpY2Uuc2F2ZVBhZ2VMb2dnZXJJbmZvKFxuICAgICAgICAgIHRoaXMucm91dGVyLnVybD8uc3Vic3RyaW5nKDEpLFxuICAgICAgICAgIGNvbXBvbmVudE5hbWVcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmRpYWxvZ1NlcnZpY2Uub3BlbihkYXRhLmNvbXBvbmVudCwge1xuICAgICAgICAuLi5kYXRhLmRhdGEsXG4gICAgICAgIHN0eWxlQ2xhc3M6ICdsb29rdXAtbW9kZWwnLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgc2VsZWN0aW9uOiBzZWxlY3Rpb24sXG4gICAgICAgICAgZmllbGQ6IGZvcm1GaWVsZC5maWVsZCxcbiAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgdmFsdWVGaWVsZDogZGF0YS5kYXRhPy52YWx1ZUZpZWxkLFxuICAgICAgICAgIC4uLmRhdGEuZGF0YS5kYXRhLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgdGFiRm9jdXNFdmVudChmb3JtRmllbGQ6IGFueSkge1xuICAgIGNvbnN0IGNsYXNzTmFtZSA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgJy4nICsgZm9ybUZpZWxkLmZpZWxkXG4gICAgKTtcbiAgICBpZiAoY2xhc3NOYW1lKSB7XG4gICAgICBjbGFzc05hbWUuY2xpY2soKTtcbiAgICB9XG4gIH1cblxuICBvbkNsaWNrRXZlbnQoZm9ybUZpZWxkOiBJRm9ybUZpZWxkKSB7XG4gICAgaWYgKGZvcm1GaWVsZC5vbkNsaWNrICYmIGZvcm1GaWVsZC5kaXNhYmxlZCAhPT0gdHJ1ZSkge1xuICAgICAgZm9ybUZpZWxkLm9uQ2xpY2soZm9ybUZpZWxkKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogb3BlbiBkaWFsb2cgb24gbG9va3VwQ29udHJvbCBsYWJlbFxuICAgKi9cbiAgc2VsZWN0TG9va3VwTGFiZWwoZm9ybUZpZWxkOiBhbnksIGV2ZW50PzogYW55KSB7XG4gICAgaWYgKFxuICAgICAgZm9ybUZpZWxkLmxhYmVsICYmXG4gICAgICBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sICYmXG4gICAgICBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sLmxvb2t1cENvbnRyb2xcbiAgICApIHtcbiAgICAgIGlmKGV2ZW50LmN0cmxLZXkgJiYgZm9ybUZpZWxkPy5sYWJlbD8ubGFiZWxDb250cm9sPy5sb29rdXBDb250cm9sPy5jb21wb25lbnQpe1xuICAgICAgICB0aGlzLmh5cGVybGlua1NlcnZpY2Uub3BlbkRpYWxvZ0luTmV3VGFiKGZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wubG9va3VwQ29udHJvbC5jb21wb25lbnQsIGZvcm1GaWVsZD8ubGFiZWw/LmxhYmVsQ29udHJvbD8ubG9va3VwQ29udHJvbD8uZGF0YS5kYXRhKTtcbiAgICAgIH1lbHNle1xuICAgICAgICBjb25zdCByZWY6IGFueSA9IHRoaXMuc2V0RGlhbG9nRGF0YShcbiAgICAgICAgICBmb3JtRmllbGQsXG4gICAgICAgICAgZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbC5sb29rdXBDb250cm9sXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuc2V0RHluYW1pY0RpYWxvZ1JlZihyZWYpO1xuICAgICAgICB0aGlzLm5nWm9uZS5vblN0YWJsZVxuICAgICAgICAgIC5waXBlKHRha2UoMSkpIC8vIEVtaXQgb25seSBvbmNlIHdoZW4gdGhlIHpvbmUgYmVjb21lcyBzdGFibGVcbiAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIGRyYWdnYWJsZURpYWxvZyhmb3JtRmllbGQ/LmZpZWxkID8gZm9ybUZpZWxkPy5maWVsZCA6IGZvcm1GaWVsZD8ubGFiZWwpO1xuICAgICAgICAgIH0pO1xuICAgICAgICByZWYub25DbG9zZS5zdWJzY3JpYmUoXG4gICAgICAgICAgKHJlczogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgICAgIGZvcm1GaWVsZC52YWx1ZSA9IHV0aWxpdGllcy5zZXREaWFsb2dSZXNwb25zZShcbiAgICAgICAgICAgICAgICBmb3JtRmllbGQsXG4gICAgICAgICAgICAgICAgZm9ybUZpZWxkPy5sYWJlbC5sYWJlbENvbnRyb2wubG9va3VwQ29udHJvbCxcbiAgICAgICAgICAgICAgICByZXNcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMub25Gb2N1c091dEV2ZW50KGZvcm1GaWVsZCk7XG4gICAgICAgICAgICBpZiAoZm9ybUZpZWxkLmxhYmVsLm9uUmV0dXJuKVxuICAgICAgICAgICAgICBmb3JtRmllbGQubGFiZWwub25SZXR1cm4oZm9ybUZpZWxkLnZhbHVlKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgICh7IGVycm9yIH06IGFueSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuYXBpRXJyb3IoZXJyb3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIH1cbiAgICB0aGlzLm9uQ2xpY2tFdmVudChmb3JtRmllbGQpO1xuICB9XG5cbiAgLyoqXG4gICAqIHNldCB0aGUgZGlhbG9nIHJlZiB3aGVuIHBvcHVwIG9wZW5cbiAgICovXG4gIHNldER5bmFtaWNEaWFsb2dSZWYocmVmOiBhbnkpe1xuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nU2VydmljZS5kaWFsb2dDb21wb25lbnRSZWZNYXAuZ2V0KHJlZik7XG4gICAgY29uc3QgZHluYW1pY0NvbXBvbmVudCA9IGRpYWxvZ1JlZj8uaW5zdGFuY2UgYXMgRHluYW1pY0RpYWxvZ0NvbXBvbmVudDtcbiAgICBjb25zdCBhcmlhTGFiZWxsZWRCeSA9IGR5bmFtaWNDb21wb25lbnQuZ2V0QXJpYUxhYmVsbGVkQnkoKTtcbiAgICBkeW5hbWljQ29tcG9uZW50LmdldEFyaWFMYWJlbGxlZEJ5ID0gKCkgPT4gYXJpYUxhYmVsbGVkQnk7XG4gIH1cblxuICBpbnRlcmNlcHREaWFsb2dDbG9zZShldmVudDogYW55KSB7XG4gICAgaWYgKHRoaXMuZ3JpZFNlcnZpY2UuY29sdW1uRm9jdXNlZE91dCB8fCB0aGlzLmZvcm1TZXJ2aWNlLmZpZWxkRm9jdXNlZE91dCkge1xuICAgICAgaWYgKGNvbmZpcm0oXCJZb3Ugd2lsbCBsb3NlIGNoYW5nZXMgbm90IHNhdmVkIG9uIHBhZ2UuIFdvdWxkIHlvdSBsaWtlIHRvIGNvbnRpbnVlP1wiKSA9PSB0cnVlKSB7XG4gICAgICAgIHRoaXMuZGlhbG9nUmVmLmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5ncmlkU2VydmljZS5jb2x1bW5Gb2N1c2VkT3V0ID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZm9ybVNlcnZpY2UuZmllbGRGb2N1c2VkT3V0ID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhpcy5kaWFsb2dSZWYuZGVzdHJveSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBvcGVuIGRpYWxvZyBvbiBsb29rdXBDb250cm9sIGZpZWxkXG4gICAqL1xuICBzZWxlY3RMb29rdXBGaWVsZChmb3JtRmllbGQ6IElGb3JtRmllbGQpIHtcbiAgICBpZiAoZm9ybUZpZWxkLmxvb2t1cENvbnRyb2wpIHtcbiAgICAgIHRoaXMuZm9ybVNlcnZpY2UuZmllbGRGb2N1c2VkT3V0ID0gZmFsc2U7XG4gICAgICB0aGlzLmxvb2t1cEZvY3VzT3V0ID0gdHJ1ZTtcbiAgICAgIGxldCB2YWx1ZSA9IGZvcm1GaWVsZC52YWx1ZTtcbiAgICAgIHRoaXMuZGlhbG9nUmVmID0gdGhpcy5zZXREaWFsb2dEYXRhKGZvcm1GaWVsZCwgZm9ybUZpZWxkLmxvb2t1cENvbnRyb2wpO1xuICAgICAgdGhpcy5zZXREeW5hbWljRGlhbG9nUmVmKHRoaXMuZGlhbG9nUmVmKTtcbiAgICAgIHRoaXMubmdab25lLm9uU3RhYmxlXG4gICAgICAgIC5waXBlKHRha2UoMSkpIC8vIEVtaXQgb25seSBvbmNlIHdoZW4gdGhlIHpvbmUgYmVjb21lcyBzdGFibGVcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgZHJhZ2dhYmxlRGlhbG9nKGZvcm1GaWVsZD8uZmllbGQgPyBmb3JtRmllbGQ/LmZpZWxkIDogZm9ybUZpZWxkPy5sYWJlbCk7XG4gICAgICAgIH0pO1xuICAgICAgaWYgKHRoaXMuZ3JpZFNlcnZpY2UuY29sdW1uRm9jdXNlZE91dCB8fCB0aGlzLmZvcm1TZXJ2aWNlLmZpZWxkRm9jdXNlZE91dCkge1xuICAgICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSA9IHRoaXMuaW50ZXJjZXB0RGlhbG9nQ2xvc2UuYmluZCh0aGlzKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZGlhbG9nUmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKFxuICAgICAgICAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAoZm9ybUZpZWxkLmZpZWxkKSB7XG4gICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChmb3JtRmllbGQuZmllbGQpPy5mb2N1cygpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgICBmb3JtRmllbGQudmFsdWUgPSB1dGlsaXRpZXMuc2V0RGlhbG9nUmVzcG9uc2UoXG4gICAgICAgICAgICAgIGZvcm1GaWVsZCxcbiAgICAgICAgICAgICAgZm9ybUZpZWxkLmxvb2t1cENvbnRyb2wsXG4gICAgICAgICAgICAgIHJlc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMubG9va3VwRm9jdXNPdXQgPSBmYWxzZTtcbiAgICAgICAgICAgIGlmIChmb3JtRmllbGQub25SZXR1cm4pIGZvcm1GaWVsZC5vblJldHVybihmb3JtRmllbGQudmFsdWUsIHJlcyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMub25Gb2N1c091dEV2ZW50KGZvcm1GaWVsZCk7XG4gICAgICAgICAgY29uc3QgZm9ybUZpZWxkVmFsdWUgPVxuICAgICAgICAgICAgdHlwZW9mIGZvcm1GaWVsZC52YWx1ZSA9PT0gJ29iamVjdCdcbiAgICAgICAgICAgICAgPyBmb3JtRmllbGQudmFsdWUudGV4dFxuICAgICAgICAgICAgICA6IGZvcm1GaWVsZC52YWx1ZTtcbiAgICAgICAgICB2YWx1ZSA9IHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgPyB2YWx1ZS50ZXh0IDogdmFsdWU7XG4gICAgICAgICAgaWYgKGZvcm1GaWVsZFZhbHVlICE9PSB2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5icm93c2VyVGFiQ2xvc2VFdmVudCh0cnVlKTtcbiAgICAgICAgICAgIGlmIChmb3JtRmllbGQub25DaGFuZ2UpIHtcbiAgICAgICAgICAgICAgZm9ybUZpZWxkLm9uQ2hhbmdlKGZvcm1GaWVsZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAoeyBlcnJvciB9OiBhbnkpID0+IHtcbiAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5hcGlFcnJvcihlcnJvcik7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIG9uQ2xpY2sgZXZlbnQgaW52b2tlZCAmJiBvcGVuIERpYWxvZyBvbiBsb29rdXBDb250cm9sIGZpZWxkL2xhYmVsXG4gICAqL1xuICBoYW5kbGVDbGlja0V2ZW50KGZvcm1GaWVsZDogSUZvcm1GaWVsZCkge1xuICAgIHRoaXMub25DbGlja0V2ZW50KGZvcm1GaWVsZCk7XG4gICAgaWYgKGZvcm1GaWVsZCAmJiBmb3JtRmllbGQubG9va3VwQ29udHJvbCkge1xuICAgICAgdGhpcy5zZWxlY3RMb29rdXBMYWJlbChmb3JtRmllbGQpO1xuICAgICAgdGhpcy5zZWxlY3RMb29rdXBGaWVsZChmb3JtRmllbGQpO1xuICAgIH1cbiAgfVxuXG4gIHNldE11bHRpU2VsZWN0Q2xhc3MoZm9ybUZpZWxkOiBJRm9ybUZpZWxkKSB7XG4gICAgbGV0IG11bHRpU2VsZWN0Q2xhc3MgPSAnJ1xuICAgIGlmIChmb3JtRmllbGQuZXJyb3JNZXNzYWdlKSB7XG4gICAgICBpZiAoZm9ybUZpZWxkLnZhbHVlICYmIGZvcm1GaWVsZC52YWx1ZT8ubGVuZ3RoID4gMikge1xuICAgICAgICBtdWx0aVNlbGVjdENsYXNzID0gJ25nLWludmFsaWQgbmctZGlydHkgd3JhcC1jaGlwcyc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtdWx0aVNlbGVjdENsYXNzID0gJ25nLWludmFsaWQgbmctZGlydHknO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoZm9ybUZpZWxkLnZhbHVlICYmIGZvcm1GaWVsZC52YWx1ZT8ubGVuZ3RoID4gMikge1xuICAgICAgICBtdWx0aVNlbGVjdENsYXNzID0gJ2Zvcm0tY29udHJvbCB3cmFwLWNoaXBzJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG11bHRpU2VsZWN0Q2xhc3MgPSAnZm9ybS1jb250cm9sIG5nLWRpcnR5JztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG11bHRpU2VsZWN0Q2xhc3M7XG4gIH1cblxuICAvKipcbiAgICogc2V0IENhbGVuZGFyIERhdGUgRm9ybWF0ICYmIHNldCBEYXRlIE1pbnV0ZSBpbnRlcnZhbFxuICAgKi9cbiAgc2V0Q2FsZW5kYXJEYXRlKGZvcm1GaWVsZDogSUZvcm1GaWVsZCkge1xuICAgIGlmIChmb3JtRmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkNBTEVOREFSKSB7XG4gICAgICAvLyBjb252ZXJ0IHRpbWUgaW50byBkYXRlIGZvcm1hdFxuICAgICAgaWYgKFxuICAgICAgICBmb3JtRmllbGQudGltZU9ubHkgJiZcbiAgICAgICAgKGZvcm1GaWVsZC52YWx1ZT8udG9TdHJpbmcoKS5pbmNsdWRlcygnQU0nKSB8fFxuICAgICAgICAgIGZvcm1GaWVsZC52YWx1ZT8udG9TdHJpbmcoKS5pbmNsdWRlcygnUE0nKSlcbiAgICAgICkge1xuICAgICAgICBmb3JtRmllbGQudmFsdWUgPSB1dGlsaXRpZXMuc2V0VGltZUluRGF0ZShmb3JtRmllbGQudmFsdWUpO1xuICAgICAgfWVsc2UgaWYgKFxuICAgICAgICAoZm9ybUZpZWxkLnNob3dUaW1lIHx8IGZvcm1GaWVsZC50aW1lT25seSkgJiZcbiAgICAgICAgZm9ybUZpZWxkLnZhbHVlICYmXG4gICAgICAgIGZvcm1GaWVsZC5taW51dGVzSW50ZXJ2YWxcbiAgICAgICkge1xuICAgICAgICBmb3JtRmllbGQudmFsdWUgPSBuZXcgRGF0ZShcbiAgICAgICAgICB1dGlsaXRpZXMuc2V0TWludXRlc0ludGVydmFsKGZvcm1GaWVsZC52YWx1ZSlcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIChmb3JtRmllbGQuc2hvd1RpbWUgfHwgZm9ybUZpZWxkLnRpbWVPbmx5KSAmJlxuICAgICAgICAhZm9ybUZpZWxkLnZhbHVlICYmXG4gICAgICAgIGZvcm1GaWVsZC5taW51dGVzSW50ZXJ2YWxcbiAgICAgICkge1xuICAgICAgICBmb3JtRmllbGQudmFsdWUgPSBuZXcgRGF0ZSh1dGlsaXRpZXMuc2V0TWludXRlc0ludGVydmFsKG5ldyBEYXRlKCkpKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY2FsZW5kYXJQcmV2aW91c1ZhbHVlID0gZm9ybUZpZWxkLnZhbHVlO1xuICAgIH1cbiAgfVxuICBjYWxlbmRhckNoYW5nZVZhbHVlKGZvcm1GaWVsZDogYW55KSB7XG4gICAgaWYgKGZvcm1GaWVsZC52YWx1ZSAhPT0gZm9ybUZpZWxkLnByZXZpb3VzVmFsdWUpIHtcbiAgICAgIHRoaXMuYnJvd3NlclRhYkNsb3NlRXZlbnQodHJ1ZSk7XG4gICAgICBpZiAoZm9ybUZpZWxkLm9uQ2hhbmdlKSB7XG4gICAgICAgIGZvcm1GaWVsZC5wcmV2aW91c1ZhbHVlID0gZm9ybUZpZWxkLnZhbHVlO1xuICAgICAgICBmb3JtRmllbGQub25DaGFuZ2UoZm9ybUZpZWxkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogaW52b2tlZCBzZWN0aW9uIENsaWNrZWQgZXZlbnRcbiAgICovXG4gIGNsaWNrZWRTZWN0aW9uKHNlY3Rpb246IElGb3JtU2VjdGlvbikge1xuICAgIHRoaXMuc2VjdGlvbkNsaWNrZWRFdmVudC5lbWl0KHNlY3Rpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIG9wZW4gZGlhbG9nIGluIE5vdGVfRmllbGQgY29ucnRyb2xcbiAgICovXG4gIGhhbmRsZU5vdGVGaWVsZERpYWxvZyhmb3JtZmllbGQ6IElGb3JtRmllbGQpIHtcbiAgICBjb25zdCByZWYgPSB0aGlzLmRpYWxvZ1NlcnZpY2Uub3BlbihOb3Rlc0NvbXBvbmVudCwge1xuICAgICAgaGVhZGVyOiBmb3JtZmllbGQubGFiZWwgYXMgc3RyaW5nLFxuICAgICAgd2lkdGg6ICc1MCUnLFxuICAgICAgZGF0YToge1xuICAgICAgICB2YWx1ZTogZm9ybWZpZWxkLnZhbHVlLFxuICAgICAgICBkaXNhYmxlZFRleHQ6IGZvcm1maWVsZC5kaXNhYmxlZFRleHQsXG4gICAgICB9LFxuICAgIH0pO1xuICAgIHRoaXMuc2V0RHluYW1pY0RpYWxvZ1JlZihyZWYpO1xuICAgIHRoaXMubmdab25lLm9uU3RhYmxlXG4gICAgICAucGlwZSh0YWtlKDEpKSAvLyBFbWl0IG9ubHkgb25jZSB3aGVuIHRoZSB6b25lIGJlY29tZXMgc3RhYmxlXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgZHJhZ2dhYmxlRGlhbG9nKGZvcm1maWVsZD8uZmllbGQgPyBmb3JtZmllbGQ/LmZpZWxkIDogZm9ybWZpZWxkPy5sYWJlbCk7XG4gICAgICB9KTtcbiAgICByZWYub25DbG9zZS5zdWJzY3JpYmUoXG4gICAgICAoZGF0YTogYW55KSA9PiB7XG4gICAgICAgIGlmIChkYXRhICYmIGZvcm1maWVsZC5vblJldHVybikge1xuICAgICAgICAgIGZvcm1maWVsZC5vblJldHVybihkYXRhKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgICh7IGVycm9yIH0pID0+IHtcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuYXBpRXJyb3IoZXJyb3IpO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBzZXRDbGFzc05hbWUoZm9ybUZpZWxkOiBJRm9ybUZpZWxkKTogc3RyaW5nIHtcbiAgICBpZiAoZm9ybUZpZWxkLmhpZGRlbikgcmV0dXJuICcgaGlkZGVuJztcbiAgICBlbHNlIHJldHVybiAnJztcbiAgfVxuXG4gIGF1dG9TZWFyY2goZXZlbnQ6IGFueSwgZm9ybUZpZWxkOiBhbnkpIHtcbiAgICBpZiAoZm9ybUZpZWxkICYmIGV2ZW50KSB7XG4gICAgICBmb3JtRmllbGQub25SZXR1cm4oZXZlbnQucXVlcnksIGZvcm1GaWVsZCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGludm9rZWQgb25Gb2N1c091dCBFdmVudFxuICAgKi9cbiAgb25Gb2N1c091dEV2ZW50KGZvcm1GaWVsZDogSUZvcm1GaWVsZCkge1xuICAgIGxldCByZWNvcmQ6IGFueSA9IHt9O1xuICAgIHRoaXMuZm9ybS5mb3JtU2VjdGlvbnM/LmZvckVhY2goKHNlY3Rpb24pID0+IHtcbiAgICAgIHNlY3Rpb24uZmllbGRzLmZvckVhY2goKGZvcm1GaWVsZCkgPT4ge1xuICAgICAgICBpZiAoZm9ybUZpZWxkLmZpZWxkKSB7XG4gICAgICAgICAgcmVjb3JkW2Zvcm1GaWVsZC5maWVsZF0gPSBmb3JtRmllbGQudmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHV0aWxpdGllcy5zZXRIeXBlcmxpbmtQYXJhbVZhbHVlKHJlY29yZCwgdGhpcy5mb3JtKTtcbiAgIC8vIHRoaXMuZm9ybVNlcnZpY2UuY2hlY2tWYWxpZGl0eShbZm9ybUZpZWxkXSk7XG4gICAgaWYgKGZvcm1GaWVsZCAmJiBmb3JtRmllbGQub25Gb2N1c091dCAmJiB0aGlzLmxvb2t1cEZvY3VzT3V0ID09PSBmYWxzZSkge1xuICAgICAgZm9ybUZpZWxkLm9uRm9jdXNPdXQoZm9ybUZpZWxkKTtcbiAgICB9XG4gIH1cblxuICBvbkJhY2tTcGFjZUV2ZW50KGZvcm1GaWVsZDogSUZvcm1GaWVsZCkge1xuICAgIGlmICh0eXBlb2YgZm9ybUZpZWxkLnZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgZm9ybUZpZWxkLnZhbHVlLnRleHQgPSBmb3JtRmllbGQudmFsdWUudGV4dC5zdWJzdHJpbmcoXG4gICAgICAgIDAsXG4gICAgICAgIGZvcm1GaWVsZC52YWx1ZS50ZXh0Lmxlbmd0aCAtIDFcbiAgICAgICk7XG4gICAgICBpZiAoZm9ybUZpZWxkLnZhbHVlLnRleHQubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIGZvcm1GaWVsZC52YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgLy90aGlzLmZvcm1TZXJ2aWNlLmNoZWNrVmFsaWRpdHkoW2Zvcm1GaWVsZF0pO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZm9ybUZpZWxkLnZhbHVlICYmIGZvcm1GaWVsZC52YWx1ZS5sZW5ndGggPT09IDEpIHtcbiAgICAgIGZvcm1GaWVsZC52YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgLy8gdGhpcy5mb3JtU2VydmljZS5jaGVja1ZhbGlkaXR5KFtmb3JtRmllbGRdKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogY2xlYXIgdGhlIGRyb3Bkb3duIHZhbHVlIHdoZW4gY2xpY2sgb24geFxuICAgKi9cbiAgb25DbGVhclZhbHVlKGZvcm1GaWVsZDogSUZvcm1GaWVsZCwgZXZlbnQ6IGFueSkge1xuICAgLy8gdGhpcy5mb3JtU2VydmljZS5jaGVja1ZhbGlkaXR5KFtmb3JtRmllbGRdKTtcbiAgICB0aGlzLm9uQ2hhbmdlRXZlbnQoZm9ybUZpZWxkKTtcbiAgICB0aGlzLmRyb3BEb3duQ2hhbmdlRXZlbnQuZW1pdChmb3JtRmllbGQpO1xuICAgIGlmICghZXZlbnQudmFsdWUpIHtcbiAgICAgIHRoaXMub25Gb2N1c091dEV2ZW50KGZvcm1GaWVsZCk7XG4gICAgfVxuICB9XG5cbiAgY2xlYXJEcm9wZG93blZhbHVlKGZvcm1GaWVsZDogYW55KSB7XG4gICAgdGhpcy5vbkNsaWNrRXZlbnQoZm9ybUZpZWxkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbnZva2Ugb25DaGFuZ2UgRXZlbnQgd2hlbiBWYWx1ZSBDaGFuZ2VkXG4gICAqL1xuICBvbkNoYW5nZUV2ZW50KGZvcm1GaWVsZDogSUZvcm1GaWVsZCkge1xuICAgIHRoaXMuYnJvd3NlclRhYkNsb3NlRXZlbnQodHJ1ZSk7XG4gICAgaWYgKGZvcm1GaWVsZC5vbkNoYW5nZSkge1xuICAgICAgZm9ybUZpZWxkLm9uQ2hhbmdlKGZvcm1GaWVsZCk7XG4gICAgfVxuICB9XG5cbiAgdHlwZU9mKHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIGNvbnZlcnQgdW5TYWZlIGxpbmsgaW50byBzYWZlIGxpbmtcbiAgICovXG4gIHNhbml0aXplVXJsKHVybDogc3RyaW5nKSB7XG4gICAgbGV0IGxpbmtVcmw6IGFueSA9IHVybDtcbiAgICBpZiAobGlua1VybCkge1xuICAgICAgbGlua1VybCA9IHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RVcmwobGlua1VybCk7XG4gICAgfVxuICAgIHJldHVybiBsaW5rVXJsO1xuICB9XG5cbiAgLyoqXG4gICAqIGludm9rZSBvbiBkeW5hbWljIGJ1dHRvbnMgY2xpY2tcbiAgICovXG4gIG9uTmV3QnV0dG9uQ2xpY2soYnV0dG9uKSB7XG4gICAgbGV0IHNhdmVBbGxHcmlkOiBhbnkgPSBbXTtcbiAgICBsZXQgZ2V0QnRuczogYW55ID0gW107XG4gICAgbGV0IHZhbGlkaXR5ID0gdHJ1ZTtcbiAgICBsZXQgZXJyb3JNZXNzYWdlRGV0YWlscyA9ICcnO1xuICAgIHRoaXMuZm9ybS5mb3JtU2VjdGlvbnMuZm9yRWFjaCgoZm9ybVNlY3Rpb24pID0+IHtcbiAgICAgIGlmICghdGhpcy5mb3JtU2VydmljZS5jaGVja1ZhbGlkaXR5KGZvcm1TZWN0aW9uLmZpZWxkcykpIHtcbiAgICAgICAgZm9ybVNlY3Rpb24uZmllbGRzPy5mb3JFYWNoKChmb3JtRmllbGQ6IGFueSkgPT4ge1xuICAgICAgICAgIGlmIChmb3JtRmllbGQuZXJyb3JNZXNzYWdlKSB7XG4gICAgICAgICAgICBlcnJvck1lc3NhZ2VEZXRhaWxzID0gZXJyb3JNZXNzYWdlRGV0YWlsc1xuICAgICAgICAgICAgICA/IGVycm9yTWVzc2FnZURldGFpbHMgKyAnICwgJyArIGZvcm1GaWVsZC5lcnJvck1lc3NhZ2VcbiAgICAgICAgICAgICAgOiBmb3JtRmllbGQuZXJyb3JNZXNzYWdlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGxldCBmaWVsZCA9IGZvcm1TZWN0aW9uLmZpZWxkcy5zb21lKFxuICAgICAgICAgIChmaWVsZCkgPT4gZmllbGQucmVxdWlyZWRGaWVsZCAmJiBmaWVsZC5lcnJvck1lc3NhZ2UgJiYgIWZpZWxkLnZhbHVlXG4gICAgICAgICk7XG4gICAgICAgIGlmICh2YWxpZGl0eSAmJiBmaWVsZCkge1xuICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKFxuICAgICAgICAgICAgZXJyb3JNZXNzYWdlRGV0YWlscyxcbiAgICAgICAgICAgIDUwMDAsXG4gICAgICAgICAgICAnUkVRVUlSRUQgRklFTEQnXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihlcnJvck1lc3NhZ2VEZXRhaWxzLCA1MDAwLCAnSU5WQUxJRCBGSUVMRCcpO1xuICAgICAgICB9XG4gICAgICAgIHZhbGlkaXR5ID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAodmFsaWRpdHkpIHtcbiAgICAgICAgZm9ybVNlY3Rpb24uZmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICAgICAgc2F2ZUFsbEdyaWQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuJyArIGZpZWxkPy5jb21wb25lbnRDb250cm9sPy5pZCArICcgJyArICcjc2F2ZUFsbEdyaWRWYWx1ZXMnKTtcbiAgICAgICAgICBnZXRCdG5zID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLicgKyBmaWVsZD8uY29tcG9uZW50Q29udHJvbD8uaWQgKyAnICcgKyAnLnNhdmVSb3cnKTtcbiAgICAgICAgICBpZiAoc2F2ZUFsbEdyaWQubGVuZ3RoKSB7XG4gICAgICAgICAgICBzYXZlQWxsR3JpZFswXS5jbGljaygpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIGlmIChnZXRCdG5zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGZvciAobGV0IHNhdmVSb3dCdG4gb2YgZ2V0QnRucykge1xuICAgICAgICAgICAgICBzYXZlUm93QnRuPy5jbGljaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9KVxuICAgIGJ1dHRvbi5mdW5jKCk7XG4gIH1cblxuICBzZWxlY3RlZENhcmRDbGlja0V2ZW50KGRhdGE6IGFueSkge1xuICAgIGlmIChcbiAgICAgIHRoaXMuZm9ybSAmJlxuICAgICAgdGhpcy5mb3JtLmZvcm1TZWN0aW9ucyAmJlxuICAgICAgdGhpcy5mb3JtLmZvcm1TZWN0aW9ucy5sZW5ndGggPiAwXG4gICAgKSB7XG4gICAgICB0aGlzLmZvcm0uZm9ybVNlY3Rpb25zLmZvckVhY2goKHNlY3Rpb246IGFueSkgPT4ge1xuICAgICAgICBzZWN0aW9uLmZpZWxkcy5mb3JFYWNoKChmaWVsZDogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKGZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5DQVJEKSB7XG4gICAgICAgICAgICBpZiAoZmllbGQuY2FyZCAmJiBmaWVsZC5jYXJkLmRhdGE/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgbGV0IG9iaiA9IGZpZWxkLmNhcmQuZGF0YVtkYXRhLmluZGV4XTtcbiAgICAgICAgICAgICAgaWYgKG9iaikge1xuICAgICAgICAgICAgICAgIGlmIChvYmouc2VsZWN0ZWRDYXJkKSB7XG4gICAgICAgICAgICAgICAgICBkZWxldGUgb2JqLnNlbGVjdGVkQ2FyZDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgb2JqWydzZWxlY3RlZENhcmQnXSA9ICdjYXJkLWFjdGl2ZSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoZGF0YS5zZWxlY3RlZENhcmQpIHtcbiAgICAgIGRhdGFbJ3NlbGVjdGVkQ2FyZCddID0gJyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRhdGFbJ3NlbGVjdGVkQ2FyZCddID0gJ2NhcmQtYWN0aXZlJztcbiAgICB9XG4gIH1cblxuICBjaGFuZ2VQYXNzd29yZFR5cGUoZm9ybUZpZWxkKSB7XG4gICAgaWYgKGZvcm1GaWVsZC50ZXh0VHlwZSA9PSAndGV4dCcpIHtcbiAgICAgIGZvcm1GaWVsZC50ZXh0VHlwZSA9ICdwYXNzd29yZCc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvcm1GaWVsZC50ZXh0VHlwZSA9ICd0ZXh0JztcbiAgICB9XG4gIH1cbiAgb25MaW5rQ2xpY2sobGluaywgZm9ybVNlY3Rpb24pe1xuICAgIGlmKCFsaW5rLmRpc2FibGVkICYmICFmb3JtU2VjdGlvbi5kaXNhYmxlZCl7XG4gICAgICBsaW5rLm9uQ2xpY2soKTtcbiAgICB9XG4gIH1cbiAgaXNWYWxpZENvbHVtbihjb2w6IGFueSl7XG4gICAgICByZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihjb2wpICYmIGNvbCA+IDAgJiYgY29sIDw9IDEyXG4gIH1cbn1cblxuIiwiPHAtY29uZmlybURpYWxvZyBbc3R5bGVdPVwieyB3aWR0aDogJzUwdncnIH1cIiBrZXk9XCJjYW5jZWxCdXR0b25cIj48L3AtY29uZmlybURpYWxvZz5cbjxmb3JtICpuZ0lmPVwiIWlzRm9ybUhpZGRlbiAmJiBmb3JtXCI+XG4gIDxkaXYgKm5nSWY9XCJsb2FkaW5nXCI+XG4gICAgPHAtcHJvZ3Jlc3NTcGlubmVyIGNsYXNzPVwicHJvZ3Jlc3Mtc3Bpbm5lciBwLXByb2dyZXNzLXNwaW5uZXItY2lyY2xlIGN1c3RvbS1zcGlubmVyXCI+PC9wLXByb2dyZXNzU3Bpbm5lcj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJmbGV4LXdyYXBcIj5cbiAgICA8c3BhbiBbbmdDbGFzc109XCJ7ICdmaXhlZC1oZWlnaHQnOiBzdGlja3lBY3Rpb25zIH1cIj5cbiAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGZvcm1TZWN0aW9uIG9mIGZvcm0uZm9ybVNlY3Rpb25zXCIgW2NsYXNzXT1cIiFmb3JtU2VjdGlvbi5oaWRkZW4gPyAnY2FyZCB3LTEwMCcgOiAnJ1wiPlxuICAgICAgICA8c3BhbiAoY2xpY2spPVwiY2xpY2tlZFNlY3Rpb24oZm9ybVNlY3Rpb24pXCI+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cIiFmb3JtU2VjdGlvbiA/ICcnIDogc2VjdGlvbkRpc2FibGVkKGZvcm1TZWN0aW9uKVwiPlxuICAgICAgICAgICAgPGRpdiBbY2xhc3NdPVwiZm9ybVNlY3Rpb24uaGlkZGVuID8gJ2hpZGRlbicgOiBmb3JtU2VjdGlvbi5jbGFzc1wiPlxuICAgICAgICAgICAgICA8cC1hY2NvcmRpb24+XG4gICAgICAgICAgICAgICAgPHAtYWNjb3JkaW9uVGFiIFtzZWxlY3RlZF09XCJmb3JtU2VjdGlvbi5leHBhbmRlZCA9PT0gZmFsc2UgPyBmYWxzZSA6IHRydWVcIlxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZvcm1TZWN0aW9uLmFjY29yZGlvbkRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIiFmb3JtU2VjdGlvbi5zaG93QWNjb3JkaW9uID8gJ2hpZGUtYWNjb3JkaWFuJyA6ICcnXCI+XG4gICAgICAgICAgICAgICAgICA8cC1oZWFkZXI+XG4gICAgICAgICAgICAgICAgICAgIDxpIFtjbGFzc109XCJmb3JtU2VjdGlvbi5pY29uXCIgW3RpdGxlXT1cImZvcm1TZWN0aW9uLm5hbWVcIiBjbGFzcz1cIm1yLTEgcGwtMlwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdWJzZWN0aW9uLWhlYWRlclwiPnt7IGZvcm1TZWN0aW9uLm5hbWVcbiAgICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvcC1oZWFkZXI+XG5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBwLWNvbCBmb3JtLWNvbXBvbmVudCBhY2NvcmRpb24taGVhZGVyLXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsICpuZ0lmPVwiIWZvcm1TZWN0aW9uLnNob3dBY2NvcmRpb25cIiBmb3I9XCJuYW1lXCIgY2xhc3M9XCJhY2NvcmRpb25IZWFkZXJOYW1lIGZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGkgW3RpdGxlXT1cImZvcm1TZWN0aW9uLm5hbWVcIiBbY2xhc3NdPVwiZm9ybVNlY3Rpb24uaWNvblwiIGNsYXNzPVwiXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXY+IHt7IGZvcm1TZWN0aW9uLm5hbWUgfX0gPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgbGluayBvZiBmb3JtU2VjdGlvbi5saW5rc1wiID5cbiAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJtci0zIGN1c3RvbS1saW5rXCIgZGF0YS10aXRsZS1lbGVtZW50PVwic2VsZlwiIFtjbGFzc109XCJsaW5rLm5hbWUgJiYhZm9ybVNlY3Rpb24uZGlzYWJsZWQmJiFsaW5rLmRpc2FibGVkICA/ICdjdXN0b20tbGluaycgOiAnZGlzYWJsZWQtbGluaydcIiAoY2xpY2spPVwib25MaW5rQ2xpY2sobGluaywgZm9ybVNlY3Rpb24pXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBsaW5rLm5hbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXdyYXAgZm9ybS1jb21wb25lbnQgZm9ybS1ib2R5LXdyYXBwZXJcIj4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IFtjbGFzc109XCIoZm9ybUZpZWxkLmNvbnRyb2w9PT0nYWRkX2J1dHRvbic/ICcgZm9ybS1idXR0b24tZmllbGQtd3JhcHBlciAnOicnKStcbiAgICAgICAgICAgICAgICAgICAgKCBpc1ZhbGlkQ29sdW1uKGZvcm1GaWVsZC5jb2x1bW4pXG4gICAgICAgICAgICAgICAgICAgID8gJ2NvbC0nICsgZm9ybUZpZWxkLmNvbHVtbiArIHNldENsYXNzTmFtZShmb3JtRmllbGQpXG4gICAgICAgICAgICAgICAgICAgIDogaXNWYWxpZENvbHVtbihmb3JtLmNvbHVtbilcbiAgICAgICAgICAgICAgICAgICAgPyAnY29sLScgKyBmb3JtLmNvbHVtbiArIHNldENsYXNzTmFtZShmb3JtRmllbGQpXG4gICAgICAgICAgICAgICAgICAgIDogZm9ybUZpZWxkLmNvbHVtbiB8fCBmb3JtLmNvbHVtblxuICAgICAgICAgICAgICAgICAgICA/ICcgY29sICdcbiAgICAgICAgICAgICAgICAgICAgOiAnY29sLTEyIG1kOmNvbC0zIGZsZXggZmxleC1jb2x1bW4nICsgc2V0Q2xhc3NOYW1lKGZvcm1GaWVsZCkpXCJcbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImZvcm1GaWVsZC5jb250cm9sID09PSAnYnJlYWtfbGluZScgPyAnYnJlYWstbGluZScgOiAnJ1wiXG4gICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgZm9ybUZpZWxkIG9mIGZvcm1TZWN0aW9uLmZpZWxkczsgbGV0IGZvcm1GaWVsZEluZGV4ID0gaW5kZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8IS0tIGxhYmVsQ29udHJvbCBIeXBlcmxpbmsgb24gbG9va3VwICBDb250cm9sIEZpZWxkLS0+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImZvcm1GaWVsZC5sYWJlbD8ubGFiZWxDb250cm9sXCIgY2xhc3M9XCJ0b0Zyb250Rm9yVG9vbHRpcFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxpbmstbGFiZWwgY3VzdG9tLWxpbmtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImZvcm1GaWVsZC5sYWJlbD8ubGFiZWxDb250cm9sLmh5cGVybGluayAmJiBmb3JtRmllbGQubGFiZWw/LmxhYmVsQ29udHJvbC5oeXBlcmxpbmsudGFyZ2V0ICE9PSAnX2lmcmFtZSdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGFiaW5kZXg9XCItMVwiIChjbGljayk9XCJmb3JtRmllbGQub25DbGljayA/IG9uQ2xpY2tFdmVudChmb3JtRmllbGQpIDogJycgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGFyZ2V0XT1cImZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2w/Lmh5cGVybGluaz8udGFyZ2V0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiZm9ybUZpZWxkLmRpc2FibGVkVGV4dCA/ICdkaXNhYmxlLWxhYmVsLWNvbnRyb2wnIDogJycgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaHJlZl09XCJmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sPy5oeXBlcmxpbms/LmxpbmtcIiBkYXRhLXRpdGxlLWVsZW1lbnQ9XCJzZWxmXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZm9ybUZpZWxkLmxhYmVsLm5hbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImZvcm1GaWVsZC5yZXF1aXJlZEZpZWxkXCIgW2NsYXNzXT1cIidyZXF1aXJlZC1zdGFyICcgKyAoZm9ybUZpZWxkPy5lcnJvck1lc3NhZ2UgPyAnIGludmFsaWQgJyA6ICcnKVwiPio8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxpbmstbGFiZWwgY3VzdG9tLWxpbmtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImZvcm1GaWVsZC5sYWJlbD8ubGFiZWxDb250cm9sLmh5cGVybGluayAmJiBmb3JtRmllbGQubGFiZWw/LmxhYmVsQ29udHJvbC5oeXBlcmxpbmsudGFyZ2V0ID09PSAnX2lmcmFtZSdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIHRhYmluZGV4PVwiLTFcIiAoY2xpY2spPVwibG9hZExhYmVsQ29udHJvbElGcmFtZShmb3JtRmllbGQpXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLXRpdGxlLWVsZW1lbnQ9XCJzZWxmXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZm9ybUZpZWxkLmxhYmVsLm5hbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImZvcm1GaWVsZC5yZXF1aXJlZEZpZWxkXCIgW2NsYXNzXT1cIidyZXF1aXJlZC1zdGFyICcgKyAoZm9ybUZpZWxkPy5lcnJvck1lc3NhZ2UgPyAnIGludmFsaWQgJyA6ICcnKVwiPio8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBsYWJlbENvbnRyb2wgb24gYWRkVGV4dGJveCwgY2FsZW5kYXIgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGluay1sYWJlbCBjdXN0b20tbGlua1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZm9ybUZpZWxkLmxhYmVsICYmIGZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wgJiYgZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbC5sb29rdXBDb250cm9sXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxhIHRhYmluZGV4PVwiLTFcIiBbY2xhc3NdPVwiZm9ybUZpZWxkLmxhYmVsLmRpc2FibGVkID8gJ2Rpc2FibGUtbGFiZWwtY29udHJvbCcgOiAnJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdExvb2t1cExhYmVsKGZvcm1GaWVsZCwgJGV2ZW50KVwiIGRhdGEtdGl0bGUtZWxlbWVudD1cInNlbGZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBmb3JtRmllbGQubGFiZWwubmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZm9ybUZpZWxkLnJlcXVpcmVkRmllbGRcIiBbY2xhc3NdPVwiJ3JlcXVpcmVkLXN0YXIgJyArIChmb3JtRmllbGQ/LmVycm9yTWVzc2FnZSA/ICcgaW52YWxpZCAnIDogJycpXCI+Kjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBbbmdTd2l0Y2hdPVwiZm9ybUZpZWxkLmNvbnRyb2xcIj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBTcGFjZXIgQ29udHJvbCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWZvcm1GaWVsZC5oaWRkZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2x1bW5cIiAqbmdTd2l0Y2hDYXNlPVwiZHluYW1pY0Nhc2UuU1BBQ0VSXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW2NsYXNzXT1cImZvcm1GaWVsZC5jb2x1bW4/ICdjb2wtJyArZm9ybUZpZWxkLmNvbHVtbiA6ICcnXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBJbnB1dCBUZXh0QXJlYSAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWZvcm1GaWVsZC5oaWRkZW5cIj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbHVtblwiICpuZ1N3aXRjaENhc2U9XCJkeW5hbWljQ2FzZS5URVhUQVJFQVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBbY2xhc3NdPVwiZm9ybUZpZWxkLmxhYmVsLm9uQ2xpY2sgPyAnY3VzdG9tLWxpbmsnIDogJydcIiAoY2xpY2spPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmxhYmVsLm9uQ2xpY2sgJiYgZm9ybUZpZWxkLmxhYmVsLm9uQ2xpY2soKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiIGRhdGEtdGl0bGUtZWxlbWVudD1cInNlbGZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGZvcm1GaWVsZC5sYWJlbC5vbkNsaWNrXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGZvcm1GaWVsZC5sYWJlbC5uYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGZvcm1GaWVsZC5sYWJlbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZm9ybUZpZWxkLnJlcXVpcmVkRmllbGRcIiBbY2xhc3NdPVwiJ3JlcXVpcmVkLXN0YXIgJyArIChmb3JtRmllbGQ/LmVycm9yTWVzc2FnZSA/ICcgaW52YWxpZCAnIDogJycpXCI+Kjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBkYXRhLXRpdGxlLWVsZW1lbnQ9XCJzZWxmXCIgW2NsYXNzXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQuZXJyb3JNZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnbmctaW52YWxpZCBuZy1kaXJ0eSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICdmb3JtLWNvbnRyb2wnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiBwSW5wdXRUZXh0YXJlYSBbcm93c109XCJmb3JtRmllbGQucm93ID8gZm9ybUZpZWxkLnJvdyA6IDEgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25DaGFuZ2VFdmVudChmb3JtRmllbGQpXCIgKGNsaWNrKT1cImhhbmRsZUNsaWNrRXZlbnQoZm9ybUZpZWxkKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZvcm1GaWVsZC52YWx1ZVwiIFtuYW1lXT1cImZvcm1GaWVsZC5maWVsZFwiIFtkaXNhYmxlZF09XCJmb3JtRmllbGQuZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwie2hlaWdodDogZm9ybUZpZWxkLmhlaWdodCA/IGZvcm1GaWVsZC5oZWlnaHQgOiAnJ31cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJsdXIpPVwib25Gb2N1c091dEV2ZW50KGZvcm1GaWVsZClcIj48L3RleHRhcmVhPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBUZXh0IElucHV0IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhZm9ybUZpZWxkLmhpZGRlblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbHVtblwiICpuZ1N3aXRjaENhc2U9XCJkeW5hbWljQ2FzZS5JTlBVVFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsICpuZ0lmPVwiIWZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmb3JtRmllbGQuZGlzYWJsZWQgJiYgIWZvcm1GaWVsZC5zaG93Qm90dG9tQm9yZGVyID8gJ2Rpc2FibGVkLWxhYmVsJyA6ICcnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmb3JtRmllbGQubGFiZWwub25DbGljayA/ICdjdXN0b20tbGFiZWwnIDogJycpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImZvcm1GaWVsZC5sYWJlbC5vbkNsaWNrICYmIGZvcm1GaWVsZC5sYWJlbC5vbkNsaWNrKClcIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS10aXRsZS1lbGVtZW50PVwic2VsZlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQubGFiZWwgJiYgdHlwZU9mKGZvcm1GaWVsZC5sYWJlbCkgPT09ICdvYmplY3QnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZm9ybUZpZWxkLmxhYmVsLm5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBmb3JtRmllbGQubGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJmb3JtRmllbGQucmVxdWlyZWRGaWVsZFwiIFtjbGFzc109XCIncmVxdWlyZWQtc3RhciAnICsgKGZvcm1GaWVsZD8uZXJyb3JNZXNzYWdlID8gJyBpbnZhbGlkICcgOiAnJylcIj4qPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImZvcm1GaWVsZC5pc1Bhc3N3b3JkXCI+Jm5ic3A7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJmb3JtRmllbGQudGV4dFR5cGU9PSdwYXNzd29yZCc7ZWxzZSBoaWRlQnV0dG9uXCIgdGl0bGU9XCJoaWRlXCIgY2xhc3M9XCJwaSBwaS1leWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNoYW5nZVBhc3N3b3JkVHlwZShmb3JtRmllbGQpXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjaGlkZUJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwicGkgcGktZXllLXNsYXNoXCIgdGl0bGU9XCJzaG93XCIgKGNsaWNrKT1cImNoYW5nZVBhc3N3b3JkVHlwZShmb3JtRmllbGQpXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLXRpdGxlLWVsZW1lbnQ9XCJzZWxmXCIgW2NsYXNzXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5lcnJvck1lc3NhZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ25nLWludmFsaWQgbmctZGlydHknXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICdmb3JtLWNvbnRyb2wnXCIgW2lkXT1cImZvcm1GaWVsZC5zaG93Qm90dG9tQm9yZGVyID8gJ3JlbW92ZS1ib2RlcicgOiAnJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0eXBlXT1cImZvcm1GaWVsZC50ZXh0VHlwZSA/IGZvcm1GaWVsZC50ZXh0VHlwZSA6ICd0ZXh0J1wiIHBJbnB1dFRleHQgWyhuZ01vZGVsKV09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQudmFsdWUgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVPZihmb3JtRmllbGQudmFsdWUpID09PSAnb2JqZWN0J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBmb3JtRmllbGQudmFsdWUudGV4dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBmb3JtRmllbGQudmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgKGNoYW5nZSk9XCJvbkNoYW5nZUV2ZW50KGZvcm1GaWVsZClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCJmb3JtRmllbGQuZmllbGQgPyBmb3JtRmllbGQuZmllbGQgOiBmb3JtRmllbGQubGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlQ2xpY2tFdmVudChmb3JtRmllbGQpXCIgW2Rpc2FibGVkXT1cImZvcm1GaWVsZC5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChibHVyKT1cIm9uRm9jdXNPdXRFdmVudChmb3JtRmllbGQpXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWZvcm1GaWVsZD8uaXNWYWxpZFwiIGNsYXNzPVwiZXJyb3JcIj57eyBmb3JtRmllbGQuZXJyb3JNZXNzYWdlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIE51bWJlciBJbnB1dCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWZvcm1GaWVsZC5oaWRkZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2x1bW5cIiAqbmdTd2l0Y2hDYXNlPVwiZHluYW1pY0Nhc2UuTlVNRVJJQ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWZvcm1GaWVsZD8ubGFiZWw/LmxhYmVsQ29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQubGFiZWwub25DbGljayA/ICdjdXN0b20tbGluaycgOiAnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQubGFiZWwub25DbGljayAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5sYWJlbC5vbkNsaWNrKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiIGRhdGEtdGl0bGUtZWxlbWVudD1cInNlbGZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGZvcm1GaWVsZC5sYWJlbC5vbkNsaWNrXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGZvcm1GaWVsZC5sYWJlbC5uYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGZvcm1GaWVsZC5sYWJlbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZm9ybUZpZWxkLnJlcXVpcmVkRmllbGRcIiBbY2xhc3NdPVwiJ3JlcXVpcmVkLXN0YXIgJyArIChmb3JtRmllbGQ/LmVycm9yTWVzc2FnZSA/ICcgaW52YWxpZCAnIDogJycpXCI+Kjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gZm9yIEN1cnJlbmN5ICYmIG51bWJlciAmJiBEZWNpbWFsICYmIFBlcmNlbnQgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbnB1dC1udW1iZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwLWlucHV0TnVtYmVyIGRhdGEtdGl0bGUtZWxlbWVudD1cImlucHV0LHNwYW5cIiBbY2xhc3NdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQuZXJyb3JNZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ25nLWludmFsaWQgbmctZGlydHknXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ2Zvcm0tY29udHJvbCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiBbKG5nTW9kZWwpXT1cImZvcm1GaWVsZC52YWx1ZVwiIFtuYW1lXT1cImZvcm1GaWVsZC5maWVsZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ2hhbmdlRXZlbnQoZm9ybUZpZWxkKVwiIChjbGljayk9XCJzZWxlY3RMb29rdXBGaWVsZChmb3JtRmllbGQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZvcm1GaWVsZC5kaXNhYmxlZFwiIChvbkJsdXIpPVwib25Gb2N1c091dEV2ZW50KGZvcm1GaWVsZClcIiBbbW9kZV09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQuZm9ybWF0ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmZvcm1hdC50eXBlID09PSAnY3VycmVuY3knXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdjdXJyZW5jeSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ2RlY2ltYWwnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiIFtjdXJyZW5jeV09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQuZm9ybWF0ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmZvcm1hdC50eXBlID09PSAnY3VycmVuY3knICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmZvcm1hdC5mb3JtYXRQYXJhbXMgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQuZm9ybWF0LmZvcm1hdFBhcmFtcy5jdXJyZW5jeVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBmb3JtRmllbGQuZm9ybWF0LmZvcm1hdFBhcmFtcy5jdXJyZW5jeVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnVVNEJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiBbbG9jYWxlXT1cImZvcm1GaWVsZC5mb3JtYXQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmZvcm1hdC50eXBlID09PSAnY3VycmVuY3knICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5mb3JtYXQuZm9ybWF0UGFyYW1zICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5mb3JtYXQuZm9ybWF0UGFyYW1zLmxvY2FsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZm9ybUZpZWxkLmZvcm1hdC5mb3JtYXRQYXJhbXMubG9jYWxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnZW4tVVMnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiBbbWluRnJhY3Rpb25EaWdpdHNdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmZvcm1hdCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5mb3JtYXQuZm9ybWF0UGFyYW1zICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmZvcm1hdC5mb3JtYXRQYXJhbXMuZGlnaXRzSW5mb1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBmb3JtRmllbGQuZm9ybWF0LmZvcm1hdFBhcmFtcy5kaWdpdHNJbmZvXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGZvcm1GaWVsZC5mb3JtYXQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZvcm1GaWVsZC5mb3JtYXQudHlwZSA9PT0gJ2RlY2ltYWwnIHx8IGZvcm1GaWVsZC5mb3JtYXQudHlwZSA9PT0gJ2N1cnJlbmN5JylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJzInXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICcwJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiBbc3VmZml4XT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5mb3JtYXQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQuZm9ybWF0LnR5cGUgPT09ICdwZXJjZW50JyAmJiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcC1pbnB1dE51bWJlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhZm9ybUZpZWxkPy5pc1ZhbGlkXCIgZGF0YS10aXRsZS1lbGVtZW50PVwic2VsZlwiIGNsYXNzPVwiZXJyb3JcIj57eyBmb3JtRmllbGQuZXJyb3JNZXNzYWdlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZm9ybUZpZWxkLnJlcXVpcmVkXCI+ICogPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4gXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gUGFzc3dvcmQgSW5wdXQgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFmb3JtRmllbGQuaGlkZGVuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sdW1uXCIgKm5nU3dpdGNoQ2FzZT1cImR5bmFtaWNDYXNlLlBBU1NXT1JEXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIFtjbGFzc109XCJmb3JtRmllbGQubGFiZWwub25DbGljayA/ICdjdXN0b20tbGluaycgOiAnJ1wiIChjbGljayk9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQubGFiZWwub25DbGljayAmJiBmb3JtRmllbGQubGFiZWwub25DbGljaygpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiIGRhdGEtdGl0bGUtZWxlbWVudD1cInNlbGZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQubGFiZWwub25DbGlja1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBmb3JtRmllbGQubGFiZWwubmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBmb3JtRmllbGQubGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImZvcm1GaWVsZC5yZXF1aXJlZEZpZWxkXCIgW2NsYXNzXT1cIidyZXF1aXJlZC1zdGFyICcgKyAoZm9ybUZpZWxkPy5lcnJvck1lc3NhZ2UgPyAnIGludmFsaWQgJyA6ICcnKVwiPio8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgZGF0YS10aXRsZS1lbGVtZW50PVwic2VsZlwiIFtjbGFzc109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmVycm9yTWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ25nLWludmFsaWQgbmctZGlydHknXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnZm9ybS1jb250cm9sJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgdHlwZT1cInBhc3N3b3JkXCIgKGNsaWNrKT1cImhhbmRsZUNsaWNrRXZlbnQoZm9ybUZpZWxkKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uQ2hhbmdlRXZlbnQoZm9ybUZpZWxkKVwiIHBJbnB1dFRleHQgWyhuZ01vZGVsKV09XCJmb3JtRmllbGQudmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25hbWVdPVwiZm9ybUZpZWxkLmZpZWxkXCIgKGJsdXIpPVwib25Gb2N1c091dEV2ZW50KGZvcm1GaWVsZClcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWZvcm1GaWVsZD8uaXNWYWxpZFwiIGNsYXNzPVwiZXJyb3JcIj57eyBmb3JtRmllbGQuZXJyb3JNZXNzYWdlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZm9ybUZpZWxkLnJlcXVpcmVkXCI+ICogPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBDaGVja2JveCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtjbGFzc109XCJmb3JtRmllbGQuY2xhc3NcIiAqbmdJZj1cIiFmb3JtRmllbGQuaGlkZGVuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLTAgZmxleCBmbGV4LWNvbHVtblwiICpuZ1N3aXRjaENhc2U9XCJkeW5hbWljQ2FzZS5DSEVDS0JPWFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCAqbmdJZj1cIiFmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJmb3JtRmllbGQubGFiZWwub25DbGljayA/ICdjdXN0b20tbGluaycgOiAnJ1wiIChjbGljayk9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmxhYmVsLm9uQ2xpY2sgJiYgZm9ybUZpZWxkLmxhYmVsLm9uQ2xpY2soKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtdGl0bGUtZWxlbWVudD1cInNlbGZcIj57e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmxhYmVsICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlT2YoZm9ybUZpZWxkLmxhYmVsKSA9PT0gJ29iamVjdCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZm9ybUZpZWxkLmxhYmVsLm5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZm9ybUZpZWxkLmxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJmb3JtRmllbGQucmVxdWlyZWRGaWVsZFwiIFtjbGFzc109XCIncmVxdWlyZWQtc3RhciAnICsgKGZvcm1GaWVsZD8uZXJyb3JNZXNzYWdlID8gJyBpbnZhbGlkICcgOiAnJylcIj4qPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAtY2hlY2tib3ggXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cIiAnZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgJytcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZvcm1GaWVsZC5lcnJvck1lc3NhZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICduZy1pbnZhbGlkIG5nLWRpcnR5J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ2Zvcm0tY29udHJvbCcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2JpbmFyeV09XCJ0cnVlXCIgW25hbWVdPVwiZm9ybUZpZWxkLmZpZWxkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkNsaWNrRXZlbnQoZm9ybUZpZWxkKVwiIChjaGFuZ2UpPVwib25DaGFuZ2VFdmVudChmb3JtRmllbGQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZm9ybUZpZWxkLnZhbHVlXCIgW2Rpc2FibGVkXT1cImZvcm1GaWVsZC5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25DaGFuZ2UpPVwib25Gb2N1c091dEV2ZW50KGZvcm1GaWVsZClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3AtY2hlY2tib3g+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhZm9ybUZpZWxkPy5pc1ZhbGlkXCIgY2xhc3M9XCJlcnJvclwiPnt7IGZvcm1GaWVsZC5lcnJvck1lc3NhZ2UgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIENhbGVuZGFyIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhZm9ybUZpZWxkLmhpZGRlblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbHVtblwiICpuZ1N3aXRjaENhc2U9XCJkeW5hbWljQ2FzZS5DQUxFTkRBUlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtjbGFzc109XCJmb3JtRmllbGQuZGlzYWJsZWQgPyAnZGlzYWJsZWQtY2FsZW5kYXItaGVhZGVyLXNwYW4nIDogJydcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImZvcm1GaWVsZC5sYWJlbC5vbkNsaWNrID8gJ2N1c3RvbS1saW5rJyA6ICcnXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZm9ybUZpZWxkLmxhYmVsLm9uQ2xpY2sgJiYgZm9ybUZpZWxkLmxhYmVsLm9uQ2xpY2soKVwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS10aXRsZS1lbGVtZW50PVwic2VsZlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBmb3JtRmllbGQubGFiZWwub25DbGlja1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGZvcm1GaWVsZC5sYWJlbC5uYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZm9ybUZpZWxkLmxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZm9ybUZpZWxkLnJlcXVpcmVkRmllbGRcIiBbY2xhc3NdPVwiJ3JlcXVpcmVkLXN0YXIgJyArIChmb3JtRmllbGQ/LmVycm9yTWVzc2FnZSA/ICcgaW52YWxpZCAnIDogJycpXCI+Kjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwLWNhbGVuZGFyIGRhdGEtdGl0bGUtZWxlbWVudD1cImlucHV0XCIgIFtjbGFzc109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmVycm9yTWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ25nLWludmFsaWQgbmctZGlydHkgJyArIGZvcm1GaWVsZC5maWVsZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ2Zvcm0tY29udHJvbCAnKyBmb3JtRmllbGQuZmllbGRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiIFtzaG93QnV0dG9uQmFyXT1cIiFmb3JtRmllbGQudGltZU9ubHlcIiBbKG5nTW9kZWwpXT1cImZvcm1GaWVsZC52YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCJmb3JtRmllbGQuZmllbGRcIiBbZGlzYWJsZWRdPVwiZm9ybUZpZWxkLmRpc2FibGVkXCIgaG91ckZvcm1hdD1cIjEyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkZWZhdWx0RGF0ZV09XCJkZWZhdWx0RGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3RlcE1pbnV0ZV09XCJmb3JtRmllbGQubWludXRlc0ludGVydmFsID8gZm9ybUZpZWxkLm1pbnV0ZXNJbnRlcnZhbCA6IDFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dUaW1lXT1cImZvcm1GaWVsZC5zaG93VGltZVwiIChvblNob3cpPVwic2V0Q2FsZW5kYXJEYXRlKGZvcm1GaWVsZClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RpbWVPbmx5XT1cImZvcm1GaWVsZC50aW1lT25seVwiIFt2aWV3XT1cImZvcm1GaWVsZC5tb250aE9ubHkgPyAnbW9udGgnIDogJ2RhdGUnIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlQ2xpY2tFdmVudChmb3JtRmllbGQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkYXRlRm9ybWF0XT1cImZvcm1GaWVsZD8uZm9ybWF0Py50eXBlID8gZm9ybUZpZWxkLmZvcm1hdD8udHlwZSA6IGNhbGVuZGFyRm9ybWF0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNhbGVuZGFyQ2hhbmdlVmFsdWUoZm9ybUZpZWxkKVwiIChvbklucHV0KT1cImNhbGVuZGFySW5wdXRWYWx1ZShmb3JtRmllbGQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvbkNsb3NlKT1cIm9uRm9jdXNPdXRFdmVudChmb3JtRmllbGQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wLWNhbGVuZGFyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gW3RvZGF5QnV0dG9uU3R5bGVDbGFzc109XCJjb2x1bW4udGltZU9ubHkgPyAnaGlkZS10b2RheS1idG4nIDogJ3Nob3ctdG9kYXktYnRuJ1wiIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWZvcm1GaWVsZD8uaXNWYWxpZFwiIGRhdGEtdGl0bGUtZWxlbWVudD1cInNlbGZcIiBjbGFzcz1cImVycm9yXCI+e3sgZm9ybUZpZWxkLmVycm9yTWVzc2FnZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gRHJvcGRvd24gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFmb3JtRmllbGQuaGlkZGVuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sdW1uXCIgKm5nU3dpdGNoQ2FzZT1cImR5bmFtaWNDYXNlLkRST1BET1dOXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsICpuZ0lmPVwiIWZvcm1GaWVsZC5sYWJlbD8ubGFiZWxDb250cm9sXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImZvcm1GaWVsZC5sYWJlbC5vbkNsaWNrID8gJ2N1c3RvbS1saW5rJyA6ICcnXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImZvcm1GaWVsZC5sYWJlbC5vbkNsaWNrICYmIGZvcm1GaWVsZC5sYWJlbC5vbkNsaWNrKClcIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLXRpdGxlLWVsZW1lbnQ9XCJzZWxmXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBmb3JtRmllbGQubGFiZWwub25DbGlja1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBmb3JtRmllbGQubGFiZWwubmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBmb3JtRmllbGQubGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImZvcm1GaWVsZC5yZXF1aXJlZEZpZWxkICYmICFmb3JtRmllbGQubGFiZWw/LmxhYmVsQ29udHJvbFwiIFtjbGFzc109XCIncmVxdWlyZWQtc3RhciAnICsgKGZvcm1GaWVsZD8uZXJyb3JNZXNzYWdlID8gJyBpbnZhbGlkICcgOiAnJylcIj4qPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAtZHJvcGRvd24gZGF0YS10aXRsZS1lbGVtZW50PVwiaW5wdXQsc3BhblwiIFtjbGFzc109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmVycm9yTWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ25nLWludmFsaWQgbmctZGlydHknXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgW3N0eWxlQ2xhc3NdPSdmb3JtRmllbGQuZmllbGQnIFtwbGFjZWhvbGRlcl09XCJmb3JtRmllbGQudmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwiZm9ybUZpZWxkLmRhdGFcIiBbZmlsdGVyXT1cImZvcm1GaWVsZC5hbGxvd1NlYXJjaFwiIFsobmdNb2RlbCldPVwiZm9ybUZpZWxkLnZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25MYWJlbF09XCJmb3JtRmllbGQub3B0aW9uTGFiZWxcIiBbb3B0aW9uVmFsdWVdPVwiZm9ybUZpZWxkLm9wdGlvblZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuYW1lXT1cImZvcm1GaWVsZC5maWVsZFwiIChrZXl1cC5UYWIpPVwidGFiRm9jdXNFdmVudChmb3JtRmllbGQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjbGVhckRyb3Bkb3duVmFsdWUoZm9ybUZpZWxkKVwiIFtkaXNhYmxlZF09XCJmb3JtRmllbGQuZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9uQmx1cik9XCJvbkZvY3VzT3V0RXZlbnQoZm9ybUZpZWxkKVwiIFtzaG93Q2xlYXJdPVwiZm9ybUZpZWxkLnZhbHVlID8gdHJ1ZSA6IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvbkNoYW5nZSk9XCJvbkNsZWFyVmFsdWUoZm9ybUZpZWxkLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdXRvRGlzcGxheUZpcnN0XT1cImZvcm1GaWVsZC52YWx1ZSA+IDAgPyB0cnVlIDogZmFsc2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3AtZHJvcGRvd24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFmb3JtRmllbGQ/LmlzVmFsaWQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFmb3JtRmllbGQuaGlkZGVuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgY2xhc3M9XCJlcnJvclwiIGRhdGEtdGl0bGUtZWxlbWVudD1cInNlbGZcIj57eyBmb3JtRmllbGQuZXJyb3JNZXNzYWdlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBBdXRvQ29tcGxldGUgU2VhcmNoIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhZm9ybUZpZWxkLmhpZGRlblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbHVtblwiICpuZ1N3aXRjaENhc2U9XCJkeW5hbWljQ2FzZS5BVVRPQ09NUExFVEVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgW2NsYXNzXT1cImZvcm1GaWVsZC5sYWJlbC5vbkNsaWNrID8gJ2N1c3RvbS1saW5rJyA6ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJmb3JtRmllbGQubGFiZWwub25DbGljayAmJiBmb3JtRmllbGQubGFiZWwub25DbGljaygpXCIgZGF0YS10aXRsZS1lbGVtZW50PVwic2VsZlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZm9ybUZpZWxkLmxhYmVsLm9uQ2xpY2tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZm9ybUZpZWxkLmxhYmVsLm5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZm9ybUZpZWxkLmxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJmb3JtRmllbGQucmVxdWlyZWRGaWVsZFwiIFtjbGFzc109XCIncmVxdWlyZWQtc3RhciAnICsgKGZvcm1GaWVsZD8uZXJyb3JNZXNzYWdlID8gJyBpbnZhbGlkICcgOiAnJylcIj4qPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwLWZsdWlkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cC1hdXRvQ29tcGxldGUgZGF0YS10aXRsZS1lbGVtZW50PVwiaW5wdXQsc3BhblwiIFtjbGFzc109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmVycm9yTWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ25nLWludmFsaWQgbmctZGlydHknXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnZm9ybS1jb250cm9sJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgW3N1Z2dlc3Rpb25zXT1cImZvcm1GaWVsZC5kYXRhXCIgWyhuZ01vZGVsKV09XCJmb3JtRmllbGQudmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25DaGFuZ2UpPVwib25DaGFuZ2VFdmVudChmb3JtRmllbGQpXCIgKGNsaWNrKT1cImhhbmRsZUNsaWNrRXZlbnQoZm9ybUZpZWxkKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb21wbGV0ZU1ldGhvZCk9XCJhdXRvU2VhcmNoKCRldmVudCwgZm9ybUZpZWxkKVwiIFtkcm9wZG93bl09XCJmb3JtRmllbGQuc2hvd09wdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmaWVsZF09XCJmb3JtRmllbGQuZGlzcGxheUZpZWxkXCIgW25hbWVdPVwiZm9ybUZpZWxkLmxhYmVsXCIgW211bHRpcGxlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZm9ybUZpZWxkLmRpc2FibGVkXCIgKG9uQmx1cik9XCJvbkZvY3VzT3V0RXZlbnQoZm9ybUZpZWxkKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wLWF1dG9Db21wbGV0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIE11bHRpLXNlbGVjdCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWZvcm1GaWVsZC5oaWRkZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2x1bW5cIiAqbmdTd2l0Y2hDYXNlPVwiZHluYW1pY0Nhc2UuTVVMVElTRUxFQ1RcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgW2NsYXNzXT1cImZvcm1GaWVsZC5sYWJlbC5vbkNsaWNrID8gJ2N1c3RvbS1saW5rJyA6ICcnXCIgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5sYWJlbC5vbkNsaWNrICYmIGZvcm1GaWVsZC5sYWJlbC5vbkNsaWNrKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgZGF0YS10aXRsZS1lbGVtZW50PVwic2VsZlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5sYWJlbC5vbkNsaWNrXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGZvcm1GaWVsZC5sYWJlbC5uYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGZvcm1GaWVsZC5sYWJlbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZm9ybUZpZWxkLnJlcXVpcmVkRmllbGRcIiBbY2xhc3NdPVwiJ3JlcXVpcmVkLXN0YXIgJyArIChmb3JtRmllbGQ/LmVycm9yTWVzc2FnZSA/ICcgaW52YWxpZCAnIDogJycpXCI+Kjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwLW11bHRpU2VsZWN0IGRhdGEtdGl0bGUtZWxlbWVudD1cImlucHV0LHNwYW5cIiBbY2xhc3NdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRNdWx0aVNlbGVjdENsYXNzKGZvcm1GaWVsZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiIFsobmdNb2RlbCldPVwiZm9ybUZpZWxkLnZhbHVlXCIgW29wdGlvbnNdPVwiZm9ybUZpZWxkLmRhdGFcIiBbb3B0aW9uTGFiZWxdPVwiZm9ybUZpZWxkLm9wdGlvbkxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25WYWx1ZV09XCJmb3JtRmllbGQub3B0aW9uVmFsdWVcIiBbYXBwZW5kVG9dPVwiJ2JvZHknXCIgW25hbWVdPVwiZm9ybUZpZWxkLmZpZWxkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvbkNoYW5nZSk9XCJvbkNoYW5nZUV2ZW50KGZvcm1GaWVsZClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImZvcm1GaWVsZC5vbkNsaWNrID8gZm9ybUZpZWxkLm9uQ2xpY2soKSA6ICcnXCIgW2Rpc2FibGVkXT1cImZvcm1GaWVsZC5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJvbkZvY3VzT3V0RXZlbnQoZm9ybUZpZWxkKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcC1tdWx0aVNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gSHlwZXJsaW5rLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFmb3JtRmllbGQuaGlkZGVuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW2NsYXNzXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmRpc2FibGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ2Rpc2FibGVkLWxpbmsnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ2xpbmstbGFiZWwgY3VzdG9tLWxpbmsnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgICpuZ1N3aXRjaENhc2U9XCJkeW5hbWljQ2FzZS5IWVBFUkxJTktcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtdGl0bGUtZWxlbWVudD1cInNlbGZcIiAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQuaHlwZXJsaW5rICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5oeXBlcmxpbmsuY29tcG9uZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiAoY2xpY2spPVwiaHlwZXJsaW5rRGlhbG9nKGZvcm1GaWVsZCwgJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZm9ybUZpZWxkLmxhYmVsIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBbY2xhc3NdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQuZGlzYWJsZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnZGlzYWJsZWQtbGluaydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnbGluay1sYWJlbCBjdXN0b20tbGluaydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQuaHlwZXJsaW5rICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5oeXBlcmxpbmsudGFyZ2V0ICE9PSAnX2lmcmFtZScgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIWZvcm1GaWVsZC5oeXBlcmxpbmsuY29tcG9uZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIHRhYmluZGV4PVwiLTFcIiBbaHJlZl09XCJmb3JtRmllbGQuZGlzYWJsZWQ/Jyc6c2FuaXRpemVVcmwoZm9ybUZpZWxkLmh5cGVybGluaz8ubGluaylcIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RhcmdldF09XCJmb3JtRmllbGQuaHlwZXJsaW5rPy50YXJnZXRcIiAoY2xpY2spPVwiaGFuZGxlQ2xpY2tFdmVudChmb3JtRmllbGQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS10aXRsZS1lbGVtZW50PVwic2VsZlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBmb3JtRmllbGQubGFiZWwgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJmb3JtRmllbGQucmVxdWlyZWRGaWVsZFwiIFtjbGFzc109XCIncmVxdWlyZWQtc3RhciAnICsgKGZvcm1GaWVsZD8uZXJyb3JNZXNzYWdlID8gJyBpbnZhbGlkICcgOiAnJylcIj4qPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmh5cGVybGluayAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQuaHlwZXJsaW5rLnRhcmdldCA9PT0gJ19pZnJhbWUnICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFmb3JtRmllbGQuaHlwZXJsaW5rLmNvbXBvbmVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cInBsLTJcIiAgZGF0YS10aXRsZS1lbGVtZW50PVwic2VsZlwiIHRhYmluZGV4PVwiLTFcIiAoY2xpY2spPVwibG9hZElGcmFtZShmb3JtRmllbGQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGZvcm1GaWVsZC5sYWJlbCB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImZvcm1GaWVsZC5yZXF1aXJlZEZpZWxkXCIgIFtjbGFzc109XCIncmVxdWlyZWQtc3RhciAnICsgKGZvcm1GaWVsZD8uZXJyb3JNZXNzYWdlID8gJyBpbnZhbGlkICcgOiAnJylcIj4qPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBMb29rdXAgQ29udHJvbCBGaWVsZCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWZvcm1GaWVsZC5oaWRkZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2x1bW5cIiAqbmdTd2l0Y2hDYXNlPVwiZHluYW1pY0Nhc2UuTE9PS1VQX0lOUFVUXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW2NsYXNzXT1cImZvcm1GaWVsZC5kaXNhYmxlZCA/ICdkaXNhYmxlZC1sb29rdXAtaGVhZGVyJyA6ICcnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgKm5nSWY9XCIhZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJmb3JtRmllbGQubGFiZWwub25DbGljayA/ICdjdXN0b20tbGluaycgOiAnJ1wiIChjbGljayk9XCJmb3JtRmllbGQubGFiZWwub25DbGljayAmJiBmb3JtRmllbGQubGFiZWwub25DbGljaygpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS10aXRsZS1lbGVtZW50PVwic2VsZlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlT2YoZm9ybUZpZWxkLmxhYmVsKSA9PT0gJ29iamVjdCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBmb3JtRmllbGQubGFiZWwubmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGZvcm1GaWVsZC5sYWJlbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImZvcm1GaWVsZC5yZXF1aXJlZEZpZWxkXCIgW2NsYXNzXT1cIidyZXF1aXJlZC1zdGFyICcgKyAoZm9ybUZpZWxkPy5lcnJvck1lc3NhZ2UgPyAnIGludmFsaWQgJyA6ICcnKVwiPio8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2xvc2UtaWNvbi13cmFwcGVyXCI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicC1pbnB1dC1pY29uLXJpZ2h0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwicGkgcGktY2hldnJvbi1yaWdodCBsb29rdXAtaW5wdXQtaWNvblwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtdGl0bGUtZWxlbWVudD1cInNlbGZcIiBbY2xhc3NdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5lcnJvck1lc3NhZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICduZy1pbnZhbGlkIG5nLWRpcnR5J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ2Zvcm0tY29udHJvbCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbXBvbmVudCBsb29rdXAtaW5wdXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcElucHV0VGV4dCBbKG5nTW9kZWwpXT1cImZvcm1GaWVsZC52YWx1ZSAmJiB0eXBlT2YoZm9ybUZpZWxkLnZhbHVlKSA9PT0gJ29iamVjdCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZm9ybUZpZWxkLnZhbHVlLnRleHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZm9ybUZpZWxkLnZhbHVlXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiZm9ybUZpZWxkLmZpZWxkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25hbWVdPVwiZm9ybUZpZWxkLmZpZWxkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdExvb2t1cEZpZWxkKGZvcm1GaWVsZClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZvcm1GaWVsZC5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5dXAuVGFiKT1cInNlbGVjdExvb2t1cEZpZWxkKGZvcm1GaWVsZClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZG9ubHlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdGFiaW5kZXg9XCItMVwiICpuZ0lmPVwiZm9ybUZpZWxkLnZhbHVlICYmICFmb3JtRmllbGQuZGlzYWJsZWRcIiBpY29uPVwicGkgcGktdGltZXNcIiBwQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJsb29rdXAtY2xlYXItaWNvbi1idXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwibG9va3VwQ2xlYXJWYWx1ZShmb3JtRmllbGQpXCI+PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWZvcm1GaWVsZD8uaXNWYWxpZFwiIGRhdGEtdGl0bGUtZWxlbWVudD1cInNlbGZcIiBjbGFzcz1cImVycm9yXCI+e3sgZm9ybUZpZWxkLmVycm9yTWVzc2FnZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gRmlsZSBVcGxvYWQgRmllbGQgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFmb3JtRmllbGQuaGlkZGVuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sdW1uXCIgKm5nU3dpdGNoQ2FzZT1cImR5bmFtaWNDYXNlLkZJTEVfVVBMT0FEXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW2NsYXNzXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQuZGlzYWJsZWQgPyAnZGlzYWJsZWQtbGluaycgOiAnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZGF0YS10aXRsZS1lbGVtZW50PVwic2VsZlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBmb3JtRmllbGQubGFiZWwgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJmb3JtRmllbGQucmVxdWlyZWRGaWVsZFwiIFtjbGFzc109XCIncmVxdWlyZWQtc3RhciAnICsgKGZvcm1GaWVsZD8uZXJyb3JNZXNzYWdlID8gJyBpbnZhbGlkICcgOiAnJylcIj4qPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlLWZpbGUtdXBsb2FkIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FsbG93TXVsdGlwbGVdPVwiZm9ybUZpZWxkLnNlbGVjdE11bHRpcGxlRmlsZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FjY2VwdEZpbGVUeXBlc109XCJmb3JtRmllbGQuU2V0ZmlsZVR5cGVzXCIgW2ZpZWxkc109XCJmb3JtRmllbGRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZpbGVVcmwpPVwic2V0RmlsZVVybHMoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodXBsb2FkRmlsZU9uUmV0dXJuKT1cImZpbGVPbmNoYW5nZUV2ZW50KClcIj48L3NlLWZpbGUtdXBsb2FkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwic2hvd2ZpbGVVcGxvYWRFcnJvclwiIGRhdGEtdGl0bGUtZWxlbWVudD1cInNlbGZcIiBjbGFzcz1cImVycm9yXCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5lcnJvck1lc3NhZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBTZWxlY3QgQnV0dG9uIEZpZWxkIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW2NsYXNzXT1cImZvcm1GaWVsZC5jbGFzc1wiICpuZ0lmPVwiIWZvcm1GaWVsZC5oaWRkZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInAtMCBmbGV4IGZsZXgtY29sdW1uXCIgKm5nU3dpdGNoQ2FzZT1cImR5bmFtaWNDYXNlLlNFTEVDVEJVVFRPTlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCAqbmdJZj1cIiFmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJmb3JtRmllbGQubGFiZWwub25DbGljayA/ICdjdXN0b20tbGluaycgOiAnJ1wiIChjbGljayk9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmxhYmVsLm9uQ2xpY2sgJiYgZm9ybUZpZWxkLmxhYmVsLm9uQ2xpY2soKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtdGl0bGUtZWxlbWVudD1cInNlbGZcIj57e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmxhYmVsICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlT2YoZm9ybUZpZWxkLmxhYmVsKSA9PT0gJ29iamVjdCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZm9ybUZpZWxkLmxhYmVsLm5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZm9ybUZpZWxkLmxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJmb3JtRmllbGQucmVxdWlyZWRGaWVsZFwiIFtjbGFzc109XCIncmVxdWlyZWQtc3RhciAnICsgKGZvcm1GaWVsZD8uZXJyb3JNZXNzYWdlID8gJyBpbnZhbGlkICcgOiAnJylcIj4qPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAtc2VsZWN0QnV0dG9uIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImZvcm1GaWVsZC5lcnJvck1lc3NhZ2UgPyAnbmctaW52YWxpZCBuZy1kaXJ0eScgOiAnJ1wiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCJmb3JtRmllbGQuZmllbGRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmb3JtRmllbGQudmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwiZm9ybUZpZWxkLmRhdGFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uVmFsdWU9XCJ2YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25MYWJlbD1cImxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmb3JtRmllbGQuZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW211bHRpcGxlXT1cImZvcm1GaWVsZC5kaXNwbGF5U3R5bGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9uQ2hhbmdlKT1cIm9uQ2hhbmdlRXZlbnQoZm9ybUZpZWxkKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcC1zZWxlY3RCdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhZm9ybUZpZWxkPy5pc1ZhbGlkXCIgY2xhc3M9XCJlcnJvclwiPnt7IGZvcm1GaWVsZC5lcnJvck1lc3NhZ2UgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gRGlzcGxheSAgQ2FyZCBmaWVsZCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWZvcm1GaWVsZC5oaWRkZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2x1bW5cIiAqbmdTd2l0Y2hDYXNlPVwiZHluYW1pY0Nhc2UuQ0FSRFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtjbGFzc109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmRpc2FibGVkID8gJ2Rpc2FibGVkLWxpbmsnIDogJydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGRhdGEtdGl0bGUtZWxlbWVudD1cInNlbGZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZm9ybUZpZWxkLmxhYmVsIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZm9ybUZpZWxkLnJlcXVpcmVkRmllbGRcIiBbY2xhc3NdPVwiJ3JlcXVpcmVkLXN0YXIgJyArIChmb3JtRmllbGQ/LmVycm9yTWVzc2FnZSA/ICcgaW52YWxpZCAnIDogJycpXCI+Kjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlLWNhcmQgW2NhcmRdPVwiZm9ybUZpZWxkLmNhcmRcIiBbc2V0Q2FyZERhdGFdPVwic2V0Q2FyZERhdGFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGVkQ2FyZCk9XCJzZWxlY3RlZENhcmRDbGlja0V2ZW50KCRldmVudClcIj48L3NlLWNhcmQ+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInNob3dmaWxlVXBsb2FkRXJyb3JcIiBkYXRhLXRpdGxlLWVsZW1lbnQ9XCJzZWxmXCIgY2xhc3M9XCJlcnJvclwiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQuZXJyb3JNZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gTm90ZSBEZXRhaWwgRmllbGQgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFmb3JtRmllbGQuaGlkZGVuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cImR5bmFtaWNDYXNlLk5PVEVfRklFTERcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtjbGFzc109XCJmb3JtRmllbGQuZGlzYWJsZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ2Rpc2FibGVkLWxpbmsnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICdsaW5rLWxhYmVsIGN1c3RvbS1saW5rJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIWZvcm1GaWVsZC5kaXNhYmxlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGhhbmRsZU5vdGVGaWVsZERpYWxvZyhmb3JtRmllbGQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiBkYXRhLXRpdGxlLWVsZW1lbnQ9XCJzZWxmXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3tmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBmb3JtRmllbGQubGFiZWwub25DbGlja1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGZvcm1GaWVsZC5sYWJlbC5uYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZm9ybUZpZWxkLmxhYmVsfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJmb3JtRmllbGQucmVxdWlyZWRGaWVsZFwiIGRhdGEtdGl0bGUtZWxlbWVudD1cInNlbGZcIiAgW2NsYXNzXT1cIidyZXF1aXJlZC1zdGFyICcgKyAoZm9ybUZpZWxkPy5lcnJvck1lc3NhZ2UgPyAnIGludmFsaWQgJyA6ICcnKVwiPio8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIER5bmFtaWMgQ29tcG9uZW50IENvbnRhaW5lci0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW2NsYXNzXT1cImZvcm1GaWVsZC5oaWRkZW4gPyAnaGlkZGVuJyA6ICcnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJ7e2Zvcm1TZWN0aW9uLm5hbWV9fS17e2Zvcm1GaWVsZEluZGV4fX1cIiAjZHluYW1pY0NvbXBvbmVudENvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCJkeW5hbWljQ2FzZS5DT01QT05FTlRcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBIZWFkZXIgY29tcG9uZW50LS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFmb3JtRmllbGQuaGlkZGVuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cImR5bmFtaWNDYXNlLlNFQ1RJT05fSEVBREVSXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIFtjbGFzc109XCJmb3JtRmllbGQuY2xhc3NcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiIGRhdGEtdGl0bGUtZWxlbWVudD1cInNlbGZcIiA+ICB7eyBmb3JtRmllbGQubGFiZWwgfX0gPC9iPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEFkZCBPbkNsaWNrIEJ1dHRvbiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWZvcm1GaWVsZC5oaWRkZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiZHluYW1pY0Nhc2UuQUREX0JVVFRPTlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gcEJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgW2ljb25dPVwiZm9ybUZpZWxkLmljb25cIiBbdGl0bGVdPVwiZm9ybUZpZWxkLmxhYmVsXCIgW2xhYmVsXT1cImZvcm1GaWVsZC5sYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZm9ybUZpZWxkLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cIntiYWNrZ3JvdW5kOiBmb3JtRmllbGQuY29sb3IgPyBmb3JtRmllbGQuY29sb3IgOiAnJ31cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2xpY2tFdmVudChmb3JtRmllbGQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJmb3JtRmllbGQuY2xhc3M/Zm9ybUZpZWxkLmNsYXNzOicnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gQWRkIEdlbmVyYXRlIFJlcG9ydCBCdXR0b24gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFmb3JtRmllbGQuaGlkZGVuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cImR5bmFtaWNDYXNlLlJFUE9SVFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZS1nZW5lcmF0ZS1yZXBvcnQtYnRuIFtyZXBJbmZvXT1cImZvcm1GaWVsZFwiIFtsYWJlbF09XCJmb3JtRmllbGQubGFiZWxcIiBbdGl0bGVdPVwiZm9ybUZpZWxkLmxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwYXJhbXNdPVwiZm9ybUZpZWxkLnBhcmFtc1wiIFtzaG93RGlhbG9nXT1cImZvcm1GaWVsZC5zaG93RGlhbG9nXCIgW3JlcG9ydFR5cGVdPVwiIGZvcm1GaWVsZC5yZXBvcnRUeXBlXCIgW3JlcG9ydEhlYWRlcl09XCJmb3JtRmllbGQucmVwb3J0SGVhZGVyXCIgW3JlcG9ydEZvb3Rlcl09XCJmb3JtRmllbGQucmVwb3J0Rm9vdGVyXCIgW2Zvcm1dPVwiZm9ybVwiIFtpY29uXT1cImZvcm1GaWVsZC5pY29uXCIgW2NsYXNzXT1cImZvcm1GaWVsZC5jbGFzc1wiPjwvc2UtZ2VuZXJhdGUtcmVwb3J0LWJ0bj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBBZGQgSW5wdXQgU3dpdGNoIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhZm9ybUZpZWxkLmhpZGRlblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCJkeW5hbWljQ2FzZS5TV0lUQ0hcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGRhdGEtdGl0bGUtZWxlbWVudD1cInNlbGZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZm9ybUZpZWxkLmxhYmVsIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwLWlucHV0U3dpdGNoIFtuYW1lXT1cImZvcm1GaWVsZC5sYWJlbCA/IGZvcm1GaWVsZC5sYWJlbDogJ3N3aXRjaCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmb3JtRmllbGQudmFsdWVcIiBbZGlzYWJsZWRdPVwiZm9ybUZpZWxkLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkNsaWNrRXZlbnQoZm9ybUZpZWxkKVwiPjwvcC1pbnB1dFN3aXRjaD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9wLWFjY29yZGlvblRhYj5cbiAgICAgICAgICAgICAgPC9wLWFjY29yZGlvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICA8L3NwYW4+XG5cbiAgICA8IS0tIHNhdmUgYW5kIGNsb3NlIGJ1dHRvbnMgLS0+XG4gICAgPGRpdiBjbGFzcz1cImNvbC0xMiBhY3Rpb25zLWJ1dHRvbnMtbWFpbi13cmFwcGVyIGZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiIFtuZ0NsYXNzXT1cInsgc3RpY2t5OiBzdGlja3lBY3Rpb25zIH1cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJpbm5lci1zdGlja3kgZm9ybS1jb21wb25lbnQgYWN0aW9ucy1idXR0b25zLXdyYXBwZXItZGl2XCI+XG4gICAgICAgIDwhLS0gc2F2ZSBidXR0b24gLS0+XG4gICAgICAgIDxidXR0b24gKm5nSWY9XCIhaGlkZVNhdmVCdXR0b25cIiBbZGlzYWJsZWRdPVwiaXNGb3JtRGlzYWJsZWRcIiBwQnV0dG9uIHR5cGU9XCJidXR0b25cIiBpY29uPVwicGkgcGktY2hlY2tcIlxuICAgICAgICAgIFtsYWJlbF09XCJzYXZlQnV0dG9uTGFiZWwgPyBzYXZlQnV0dG9uTGFiZWwgOiAnU2F2ZSdcIiBjbGFzcz1cInAtYnV0dG9uLXN1Y2Nlc3MgZm9ybS1zYXZlLWJ1dHRvblwiIChjbGljayk9XCJvblNhdmVGb3JtKClcIj48L2J1dHRvbj5cbiAgICAgICAgPCEtLSBjbG9zZSBidXR0b24gLS0+XG4gICAgICAgIDxidXR0b24gKm5nSWY9XCIhaGlkZUNhbmNlbEJ1dHRvblwiIFtkaXNhYmxlZF09XCJpc0Zvcm1EaXNhYmxlZFwiIChjbGljayk9XCJvbkNhbmNlbEZvcm0oKVwiIHBCdXR0b24gdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgaWNvbj1cInBpIHBpLXRpbWVzXCIgW2xhYmVsXT1cImNhbmNlbEJ1dHRvbkxhYmVsID8gY2FuY2VsQnV0dG9uTGFiZWwgOiAnQ2FuY2VsJ1wiIGNsYXNzPVwicC1idXR0b24tZGFuZ2VyIG1sLTNcIj48L2J1dHRvbj4gICAgICAgXG4gICAgICAgICA8IS0tIGR5bmFtaWMgYnV0dG9ucyAtLT5cbiAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGJ1dHRvbiBvZiBmb3JtQnV0dG9uc1wiPlxuICAgICAgICAgIDxidXR0b24gKm5nSWY9XCIhYnV0dG9uLmhpZGRlblwiIHBCdXR0b24gdHlwZT1cImJ1dHRvblwiIFtsYWJlbF09XCJidXR0b24ubGFiZWxcIiBbaWNvbl09XCJidXR0b24uaWNvbiA/IGJ1dHRvbi5pY29uIDogJydcIlxuICAgICAgICAgICAgY2xhc3M9XCJwLWJ1dHRvbi1zdWNjZXNzIG1sLTNcIiAoY2xpY2spPVwib25OZXdCdXR0b25DbGljayhidXR0b24pXCIgW2Rpc2FibGVkXT1cImJ1dHRvbi5kaXNhYmxlZCA/IGJ1dHRvbi5kaXNhYmxlZCA6IGZhbHNlXCI+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9mb3JtPiJdfQ==
|