ontimize-web-ngx 18.0.0-next.2 → 18.0.0-next.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/form/o-form.component.mjs +8 -4
- package/esm2022/lib/components/form/toolbar/o-form-toolbar.component.mjs +3 -3
- package/esm2022/lib/components/input/date-range/o-daterange-input.component.mjs +3 -3
- package/esm2022/lib/components/input/search-input/o-search-input.component.mjs +3 -3
- package/esm2022/lib/components/o-data-toolbar/o-data-toolbar.component.mjs +3 -3
- package/esm2022/lib/layouts/form-layout/o-form-layout-manager.component.mjs +11 -17
- package/fesm2022/ontimize-web-ngx.mjs +25 -27
- package/fesm2022/ontimize-web-ngx.mjs.map +1 -1
- package/lib/components/form/o-form.component.d.ts +2 -1
- package/lib/layouts/form-layout/o-form-layout-manager.component.d.ts +2 -1
- package/ontimize.scss +2 -8
- package/package.json +1 -1
- package/src/lib/components/button/o-button.component.scss +3 -1
- package/src/lib/components/button-toggle/o-button-toggle-theme.scss +0 -1
- package/src/lib/components/form/toolbar/o-form-toolbar.component.scss +0 -2
- package/src/lib/components/input/input.scss +2 -8
- package/src/lib/components/input/search-input/o-search-input.component.scss +0 -2
- package/src/lib/components/o-data-toolbar/o-data-toolbar.component.scss +0 -1
- package/src/lib/components/theming/app-global.theme.scss +53 -57
- package/src/lib/theming/ontimize-base-style.scss +1 -1
- package/src/lib/theming/ontimize-style.scss +41 -47
- package/src/lib/theming/ontimize-tokens.scss +0 -74
- package/src/lib/theming/themes/oxygen.scss +195 -83
- package/theme.scss +80 -85
- package/theming/ontimize-base-style.scss +1 -1
- package/theming/ontimize-style.scss +41 -47
- package/theming/ontimize-tokens.scss +0 -74
- package/theming/themes/oxygen.scss +195 -83
- package/src/lib/theming/styles/density.scss +0 -91
- package/theming/styles/density.scss +0 -91
|
@@ -454,13 +454,17 @@ export class OFormComponent {
|
|
|
454
454
|
const canDeactivateArray = (this.actRoute.routeConfig.canDeactivate || []);
|
|
455
455
|
let previouslyAdded = false;
|
|
456
456
|
for (let i = 0, len = canDeactivateArray.length; i < len; i++) {
|
|
457
|
-
previouslyAdded = (
|
|
457
|
+
previouslyAdded = (canDeactivateArray[i].hasOwnProperty('CLASSNAME') && canDeactivateArray[i].CLASSNAME) === OFormComponent.guardClassName
|
|
458
|
+
|| (canDeactivateArray[i] === this._canDeactivateFn);
|
|
458
459
|
if (previouslyAdded) {
|
|
459
460
|
break;
|
|
460
461
|
}
|
|
461
462
|
}
|
|
462
463
|
if (!previouslyAdded) {
|
|
463
|
-
|
|
464
|
+
const guard = this.deactivateGuard;
|
|
465
|
+
this._canDeactivateFn = (component, curr, state, future) => guard.canDeactivate(component, curr, state, future);
|
|
466
|
+
this._canDeactivateFn.CLASSNAME = OFormComponent.guardClassName;
|
|
467
|
+
canDeactivateArray.push(this._canDeactivateFn);
|
|
464
468
|
this.actRoute.routeConfig.canDeactivate = canDeactivateArray;
|
|
465
469
|
}
|
|
466
470
|
}
|
|
@@ -475,7 +479,7 @@ export class OFormComponent {
|
|
|
475
479
|
if (!this.actRoute || !this.actRoute.routeConfig || !this.actRoute.routeConfig.canDeactivate) {
|
|
476
480
|
return;
|
|
477
481
|
}
|
|
478
|
-
const guardIndex = this.actRoute.routeConfig.canDeactivate.findIndex((canDeactivate) => canDeactivate
|
|
482
|
+
const guardIndex = this.actRoute.routeConfig.canDeactivate.findIndex((canDeactivate) => canDeactivate === this._canDeactivateFn);
|
|
479
483
|
if (guardIndex >= 0) {
|
|
480
484
|
this.actRoute.routeConfig.canDeactivate.splice(guardIndex, 1);
|
|
481
485
|
}
|
|
@@ -1436,4 +1440,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
1436
1440
|
type: ViewChild,
|
|
1437
1441
|
args: ['innerForm']
|
|
1438
1442
|
}] } });
|
|
1439
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9jb21wb25lbnRzL2Zvcm0vby1mb3JtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9jb21wb25lbnRzL2Zvcm0vby1mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBRUwsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxzQkFBc0IsRUFDdEIsVUFBVSxFQUNWLFlBQVksRUFDWixVQUFVLEVBQ1YsUUFBUSxFQUNSLE1BQU0sRUFJTixTQUFTLEVBQ1QsaUJBQWlCLEVBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFdEUsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDMUYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDM0UsT0FBTyxFQUFlLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFjLE1BQU0saUJBQWlCLENBQUM7QUFDckUsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUVoRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQU8zRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0s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QUFpQixDQUFDLE1BQVc7UUFDckMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyx1QkFBdUIsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxDQUFDLENBQUM7UUFDcEcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVTLG1CQUFtQixDQUFDLE1BQVc7UUFDdkMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVTLG1CQUFtQixDQUFDLE1BQVc7UUFDdkMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVTLG1CQUFtQixDQUFDLE1BQVc7UUFDdkMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVTLGlCQUFpQixDQUFDLE1BQVc7UUFDckMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyx1QkFBdUIsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxDQUFDLENBQUM7UUFDcEcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVTLGlCQUFpQixDQUFDLE1BQVc7UUFDckMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyx1QkFBdUIsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxDQUFDLENBQUM7UUFDcEcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVTLDZCQUE2QjtRQUNyQyxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUNoRCxJQUFJLElBQUksQ0FB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LEdBQUcsRUFBRSxDQUFDLGNBQWMsQ0FBQyxFQUFFO1lBQ3JFLHVCQUF1QjtZQUN2QixtQkFBbUI7U0FDcEIsb0lDNU1ILHF1R0E2REEsa2hCRHdJWSxTQUFTLDhDQUFFLE9BQU8sb0ZBQUUsZ0JBQWdCLG1KQUFFLG1CQUFtQixvYkFBRSxvQkFBb0IseU5BQUUsMEJBQTBCLHNIQUFFLHFCQUFxQjs7QUFzQzVJO0lBREMscUJBQXFCLEVBQUU7OzZEQUNlO0FBZTdCO0lBRFQscUJBQXFCLEVBQUU7O3NEQUNpQjtBQUd6QztJQURDLHFCQUFxQixFQUFFOztrREFDRztBQU0zQjtJQURDLHFCQUFxQixFQUFFOzt5REFDVztBQUVuQztJQURDLHFCQUFxQixFQUFFOzsyREFDWTtBQW9CN0I7SUFETixxQkFBcUIsRUFBRTs7K0RBQ3dCOzRGQW5FckMsY0FBYztrQkFuQjFCLFNBQVM7aUNBQ0ksSUFBSSxXQUNQLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxtQkFBbUIsRUFBRSxvQkFBb0IsRUFBRSwwQkFBMEIsRUFBRSxxQkFBcUIsQ0FBQyxXQUNwSSxDQUFDLHNCQUFzQixDQUFDLFlBQ3ZCLFFBQVEsYUFDUDt3QkFDVCxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsZUFBZSxDQUFDLEVBQUU7d0JBQ3JFLHVCQUF1Qjt3QkFDdkIsbUJBQW1CO3FCQUNwQixVQUdPLHFCQUFxQixXQUNwQixzQkFBc0IsaUJBQ2hCLGlCQUFpQixDQUFDLElBQUksUUFDL0I7d0JBQ0osZ0JBQWdCLEVBQUUsTUFBTTtxQkFDekI7Nk1BdUJELHFCQUFxQixNQWVYLGNBQWMsTUFHeEIsVUFBVSxNQU1WLGlCQUFpQixNQUVqQixtQkFBbUIsTUFvQlosdUJBQXVCLE1BMEVOLFdBQVc7c0JBQWxDLFNBQVM7dUJBQUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIENVU1RPTV9FTEVNRU5UU19TQ0hFTUEsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgZm9yd2FyZFJlZixcbiAgSW5qZWN0b3IsXG4gIE5nWm9uZSxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIFR5cGUsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBc3luY1BpcGUsIE5nQ2xhc3MsIE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdFByb2dyZXNzQmFyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcHJvZ3Jlc3MtYmFyJztcblxuaW1wb3J0IHsgT0tleWJvYXJkTGlzdGVuZXJEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL2tleWJvYXJkLWxpc3RlbmVyLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBPRm9ybVRvb2xiYXJDb21wb25lbnQgfSBmcm9tICcuL3Rvb2xiYXIvby1mb3JtLXRvb2xiYXIuY29tcG9uZW50JztcbmltcG9ydCB7IEZvcm1Db250cm9sLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyLCBVcmxTZWdtZW50IH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IEJvb2xlYW5Db252ZXJ0ZXIsIEJvb2xlYW5JbnB1dENvbnZlcnRlciB9IGZyb20gJy4uLy4uL2RlY29yYXRvcnMvaW5wdXQtY29udmVydGVyJztcbmltcG9ydCB7IElDb21wb25lbnQgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2NvbXBvbmVudC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSUZvcm1EYXRhQ29tcG9uZW50SGFzaCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvZm9ybS1kYXRhLWNvbXBvbmVudC1oYXNoLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJRm9ybURhdGFDb21wb25lbnQgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2Zvcm0tZGF0YS1jb21wb25lbnQuaW50ZXJmYWNlJztcbmltcG9ydCB7IElGb3JtRGF0YVR5cGVDb21wb25lbnQgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2Zvcm0tZGF0YS10eXBlLWNvbXBvbmVudC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgU2VydmljZVJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9zZXJ2aWNlLXJlc3BvbnNlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBPRm9ybUxheW91dE1hbmFnZXJCYXNlIH0gZnJvbSAnLi4vLi4vbGF5b3V0cy9mb3JtLWxheW91dC9vLWZvcm0tbGF5b3V0LW1hbmFnZXItYmFzZS5jbGFzcyc7XG5pbXBvcnQgeyBEaWFsb2dTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZGlhbG9nLnNlcnZpY2UnO1xuaW1wb3J0IHsgT250aW1pemVTZXJ2aWNlUHJvdmlkZXIgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9mYWN0b3JpZXMnO1xuaW1wb3J0IHsgTmF2aWdhdGlvblNlcnZpY2UsIE9OYXZpZ2F0aW9uSXRlbSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL25hdmlnYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBPbnRpbWl6ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9vbnRpbWl6ZS9vbnRpbWl6ZS5zZXJ2aWNlJztcbmltcG9ydCB7IFBlcm1pc3Npb25zU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Blcm1pc3Npb25zL3Blcm1pc3Npb25zLnNlcnZpY2UnO1xuaW1wb3J0IHsgU25hY2tCYXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc25hY2tiYXIuc2VydmljZSc7XG5pbXBvcnQgeyBPQ29uZmlndXJlTWVzc2FnZVNlcnZpY2VBcmdzIH0gZnJvbSAnLi4vLi4vdHlwZXMvY29uZmlndXJlLW1lc3NhZ2Utc2VydmljZS1hcmdzLnR5cGUnO1xuaW1wb3J0IHsgT0NvbmZpZ3VyZVNlcnZpY2VBcmdzIH0gZnJvbSAnLi4vLi4vdHlwZXMvY29uZmlndXJlLXNlcnZpY2UtYXJncy50eXBlJztcbmltcG9ydCB7IE9Gb3JtVmFsaWRhdGlvbiB9IGZyb20gJy4uLy4uL3R5cGVzL2Vycm9yLWZvcm0tdmFsaWRhdGlvbi50eXBlJztcbmltcG9ydCB7IEZvcm1MYXlvdXRDbG9zZURldGFpbE9wdGlvbnMgfSBmcm9tICcuLi8uLi90eXBlcy9mb3JtLWxheW91dC1kZXRhaWwtY29tcG9uZW50LWRhdGEudHlwZSc7XG5pbXBvcnQgeyBGb3JtVmFsdWVPcHRpb25zIH0gZnJvbSAnLi4vLi4vdHlwZXMvZm9ybS12YWx1ZS1vcHRpb25zLnR5cGUnO1xuaW1wb3J0IHsgT0Zvcm1Jbml0aWFsaXphdGlvbk9wdGlvbnMgfSBmcm9tICcuLi8uLi90eXBlcy9vLWZvcm0taW5pdGlhbGl6YXRpb24tb3B0aW9ucy50eXBlJztcbmltcG9ydCB7IE9Gb3JtUGVybWlzc2lvbnMgfSBmcm9tICcuLi8uLi90eXBlcy9vLWZvcm0tcGVybWlzc2lvbnMudHlwZSc7XG5pbXBvcnQgeyBPUGVybWlzc2lvbnMgfSBmcm9tICcuLi8uLi90eXBlcy9vLXBlcm1pc3Npb25zLnR5cGUnO1xuaW1wb3J0IHsgT1F1ZXJ5UGFyYW1zIH0gZnJvbSAnLi4vLi4vdHlwZXMvcXVlcnktcGFyYW1zLnR5cGUnO1xuaW1wb3J0IHsgQ29kZXMgfSBmcm9tICcuLi8uLi91dGlsL2NvZGVzJztcbmltcG9ydCB7IFNRTFR5cGVzIH0gZnJvbSAnLi4vLi4vdXRpbC9zcWx0eXBlcyc7XG5pbXBvcnQgeyBVdGlsIH0gZnJvbSAnLi4vLi4vdXRpbC91dGlsJztcbmltcG9ydCB7IE9Gb3JtQ29udGFpbmVyQ29tcG9uZW50IH0gZnJvbSAnLi4vZm9ybS1jb250YWluZXIvby1mb3JtLWNvbnRhaW5lci5jb21wb25lbnQnO1xuaW1wb3J0IHsgT0Zvcm1Db250cm9sIH0gZnJvbSAnLi4vaW5wdXQvby1mb3JtLWNvbnRyb2wuY2xhc3MnO1xuaW1wb3J0IHsgT0Zvcm1DYWNoZUNsYXNzIH0gZnJvbSAnLi9jYWNoZS9vLWZvcm0uY2FjaGUuY2xhc3MnO1xuaW1wb3J0IHsgQ2FuQ29tcG9uZW50RGVhY3RpdmF0ZSwgQ2FuRGVhY3RpdmF0ZUZvcm1HdWFyZCB9IGZyb20gJy4vZ3VhcmRzL28tZm9ybS1jYW4tZGVhY3RpdmF0ZS5ndWFyZCc7XG5pbXBvcnQgeyBPRm9ybU5hdmlnYXRpb25DbGFzcyB9IGZyb20gJy4vbmF2aWdhdGlvbi9vLWZvcm0ubmF2aWdhdGlvbi5jbGFzcyc7XG5pbXBvcnQgeyBPRm9ybUJhc2UgfSBmcm9tICcuL28tZm9ybS1iYXNlLmNsYXNzJztcbmltcG9ydCB7IE9fRk9STV9HTE9CQUxfQ09ORklHIH0gZnJvbSAnLi9vLWZvcm0tdG9rZW5zJztcbmltcG9ydCB7IE9Gb3JtVmFsdWUgfSBmcm9tICcuL28tZm9ybS12YWx1ZSc7XG5pbXBvcnQgeyBPRm9ybU1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9vLWZvcm0tbWVzc2FnZS5zZXJ2aWNlJztcbmltcG9ydCB7IE9Gb3JtVG9vbGJhckJhc2UgfSBmcm9tICcuL3Rvb2xiYXIvby1mb3JtLXRvb2xiYXItYmFzZS5jbGFzcyc7XG5pbXBvcnQgeyBCYXNlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Jhc2Utc2VydmljZS5jbGFzcyc7XG5pbXBvcnQgeyBGYWN0b3J5VXRpbCB9IGZyb20gJy4uLy4uL3V0aWwvZmFjdG9yeS51dGlsJztcblxuXG5leHBvcnQgY29uc3QgREVGQVVMVF9JTlBVVFNfT19GT1JNID0gW1xuICAvLyBzaG93LWhlYWRlciBbYm9vbGVhbl06IHZpc2liaWxpdHkgb2YgZm9ybSB0b29sYmFyLiBEZWZhdWx0OiB5ZXMuXG4gICdzaG93SGVhZGVyOiBzaG93LWhlYWRlcicsXG5cbiAgLy8gaGVhZGVyLW1vZGUgW3N0cmluZ11bIG5vbmUgfCBmbG9hdGluZyBdOiBwYWludGluZyBtb2RlIG9mIGZvcm0gdG9vbGJhci4gRGVmYXVsdDogJ2Zsb2F0aW5nJ1xuICAnaGVhZGVyTW9kZTogaGVhZGVyLW1vZGUnLFxuXG4gIC8vIGhlYWRlci1wb3NpdGlvbiBbIHRvcCB8IGJvdHRvbSBdOiBwb3NpdGlvbiBvZiB0aGUgZm9ybSB0b29sYmFyLiBEZWZhdWx0OiAndG9wJ1xuICAnaGVhZGVyUG9zaXRpb246IGhlYWRlci1wb3NpdGlvbicsXG5cbiAgLy8gbGFiZWwtaGVhZGVyIFtzdHJpbmddOiBkaXNwbGF5YWJsZSB0ZXh0IG9uIGZvcm0gdG9vbGJhci4gRGVmYXVsdDogJycuXG4gICdsYWJlbGhlYWRlcjogbGFiZWwtaGVhZGVyJyxcblxuICAvLyBsYWJlbC1oZWFkZXItYWxpZ24gW3N0cmluZ11bc3RhcnQgfCBjZW50ZXIgfCBlbmRdOiBhbGlnbm1lbnQgb2YgZm9ybSB0b29sYmFyIHRleHQuIERlZmF1bHQ6ICdjZW50ZXInXG4gICdsYWJlbEhlYWRlckFsaWduOiBsYWJlbC1oZWFkZXItYWxpZ24nLFxuXG4gIC8vIGhlYWRlci1hY3Rpb25zIFtzdHJpbmddOiBhdmFpbGFibGUgYWN0aW9uIGJ1dHRvbnMgb24gZm9ybSB0b29sYmFyIG9mIHN0YW5kYXJkIENSVUQgb3BlcmF0aW9ucywgc2VwYXJhdGVkIGJ5ICc7Jy4gQXZhaWxhYmxlIG9wdGlvbnMgYXJlIFI7STtVO0QgKFJlZnJlc2gsIEluc2VydCwgVXBkYXRlLCBEZWxldGUpLiBEZWZhdWx0OiBSO0k7VTtEXG4gICdoZWFkZXJhY3Rpb25zOiBoZWFkZXItYWN0aW9ucycsXG5cbiAgLy8gc2hvdy1oZWFkZXItYWN0aW9ucy10ZXh0IFtzdHJpbmddW3llc3xub3x0cnVlfGZhbHNlXTogc2hvdyB0ZXh0IG9mIGZvcm0gdG9vbGJhciBidXR0b25zLiBEZWZhdWx0IHllc1xuICAnc2hvd0hlYWRlckFjdGlvbnNUZXh0OiBzaG93LWhlYWRlci1hY3Rpb25zLXRleHQnLFxuXG4gIC8vIGVudGl0eSBbc3RyaW5nXTogZW50aXR5IG9mIHRoZSBzZXJ2aWNlLiBEZWZhdWx0OiBubyB2YWx1ZS5cbiAgJ2VudGl0eScsXG5cbiAgLy8ga2V5cyBbc3RyaW5nXTogZW50aXR5IGtleXMsIHNlcGFyYXRlZCBieSAnOycuIERlZmF1bHQ6IG5vIHZhbHVlLlxuICAna2V5cycsXG5cbiAgLy8gY29sdW1ucyBbc3RyaW5nXTogY29sdW1ucyBvZiB0aGUgZW50aXR5LCBzZXBhcmF0ZWQgYnkgJzsnLiBEZWZhdWx0OiBubyB2YWx1ZS5cbiAgJ2NvbHVtbnMnLFxuXG4gIC8vIHNlcnZpY2UgW3N0cmluZ106IEpFRSBzZXJ2aWNlIHBhdGguIERlZmF1bHQ6IG5vIHZhbHVlLlxuICAnc2VydmljZScsXG5cbiAgLy8gc3RheS1pbi1yZWNvcmQtYWZ0ZXItZWRpdCBbc3RyaW5nXVt5ZXN8bm98dHJ1ZXxmYWxzZV06IHNob3dzIGVkaXQgZm9ybSBhZnRlciBlZGl0IGEgcmVjb3JkLiBEZWZhdWx0OiBmYWxzZTtcbiAgJ3N0YXlJblJlY29yZEFmdGVyRWRpdDogc3RheS1pbi1yZWNvcmQtYWZ0ZXItZWRpdCcsXG5cbiAgLy8gW3N0cmluZ11bbmV3IHwgZGV0YWlsXTogc2hvd3MgcmVzZXRlZCBmb3JtIGFmdGVyIGluc2VydCBhIG5ldyByZWNvcmQgKG5ldykgb3Igc2hvd3MgdGhlIGluc2VydGVkIHJlY29yZCBhZnRlciAoZGV0YWlsKVxuICAnYWZ0ZXJJbnNlcnRNb2RlOiBhZnRlci1pbnNlcnQtbW9kZScsXG5cbiAgJ3NlcnZpY2VUeXBlIDogc2VydmljZS10eXBlJyxcblxuICAncXVlcnlPbkluaXQgOiBxdWVyeS1vbi1pbml0JyxcblxuICAncGFyZW50S2V5czogcGFyZW50LWtleXMnLFxuXG4gIC8vIHF1ZXJ5LW1ldGhvZCBbc3RyaW5nXTogbmFtZSBvZiB0aGUgc2VydmljZSBtZXRob2QgdG8gcGVyZm9ybSBxdWVyaWVzLiBEZWZhdWx0OiBxdWVyeS5cbiAgJ3F1ZXJ5TWV0aG9kOiBxdWVyeS1tZXRob2QnLFxuXG4gIC8vIGluc2VydC1tZXRob2QgW3N0cmluZ106IG5hbWUgb2YgdGhlIHNlcnZpY2UgbWV0aG9kIHRvIHBlcmZvcm0gaW5zZXJ0cy4gRGVmYXVsdDogaW5zZXJ0LlxuICAnaW5zZXJ0TWV0aG9kOiBpbnNlcnQtbWV0aG9kJyxcblxuICAvLyB1cGRhdGUtbWV0aG9kIFtzdHJpbmddOiBuYW1lIG9mIHRoZSBzZXJ2aWNlIG1ldGhvZCB0byBwZXJmb3JtIHVwZGF0ZXMuIERlZmF1bHQ6IHVwZGF0ZS5cbiAgJ3VwZGF0ZU1ldGhvZDogdXBkYXRlLW1ldGhvZCcsXG5cbiAgLy8gZGVsZXRlLW1ldGhvZCBbc3RyaW5nXTogbmFtZSBvZiB0aGUgc2VydmljZSBtZXRob2QgdG8gcGVyZm9ybSBkZWxldGlvbnMuIERlZmF1bHQ6IGRlbGV0ZS5cbiAgJ2RlbGV0ZU1ldGhvZDogZGVsZXRlLW1ldGhvZCcsXG5cbiAgLy8gbGF5b3V0LWRpcmVjdGlvbiBbc3RyaW5nXVtjb2x1bW58cm93XTogRGVmYXVsdDogY29sdW1uXG4gICdsYXlvdXREaXJlY3Rpb246IGxheW91dC1kaXJlY3Rpb24nLFxuXG4gIC8vIGZ4TGF5b3V0QWxpZ24gdmFsdWUuIERlZmF1bHQ6ICdzdGFydCBzdGFydCdcbiAgJ2xheW91dEFsaWduOiBsYXlvdXQtYWxpZ24nLFxuXG4gIC8vIGVkaXRhYmxlLWRldGFpbCBbc3RyaW5nXVt5ZXN8bm98dHJ1ZXxmYWxzZV06IERlZmF1bHQ6IHRydWU7XG4gICdlZGl0YWJsZURldGFpbDogZWRpdGFibGUtZGV0YWlsJyxcblxuICAvLyBrZXlzLXNxbC10eXBlcyBbc3RyaW5nXTogZW50aXR5IGtleXMgdHlwZXMsIHNlcGFyYXRlZCBieSAnOycuIERlZmF1bHQ6IG5vIHZhbHVlLlxuICAna2V5c1NxbFR5cGVzOiBrZXlzLXNxbC10eXBlcycsXG5cbiAgLy8gdW5kby1idXR0b24gW3N0cmluZ11beWVzfG5vfHRydWV8ZmFsc2VdOiBJbmNsdWRlIHVuZG8gYnV0dG9uIGluIGZvcm0tdG9vbGJhci4gRGVmYXVsdDogdHJ1ZTtcbiAgJ3VuZG9CdXR0b246IHVuZG8tYnV0dG9uJyxcblxuICAvLyBzaG93LWhlYWRlci1uYXZpZ2F0aW9uIFtzdHJpbmddW3llc3xub3x0cnVlfGZhbHNlXTogSW5jbHVkZSBuYXZpZ2F0aW9ucyBidXR0b25zIGluIGZvcm0tdG9vbGJhci4gRGVmYXVsdDogZmFsc2U7XG4gICdzaG93SGVhZGVyTmF2aWdhdGlvbjogc2hvdy1oZWFkZXItbmF2aWdhdGlvbicsXG5cbiAgLy8gYXR0clxuICAnb2F0dHI6YXR0cicsXG5cbiAgJ2luY2x1ZGVCcmVhZGNydW1iOiBpbmNsdWRlLWJyZWFkY3J1bWInLFxuXG4gICdkZXRlY3RDaGFuZ2VzT25CbHVyOiBkZXRlY3QtY2hhbmdlcy1vbi1ibHVyJyxcblxuICAnY29uZmlybUV4aXQ6IGNvbmZpcm0tZXhpdCcsXG5cbiAgLy8gaWdub3JlLW9uLWV4aXQgW3N0cmluZ106IGZpZWxkcyBhdHRyJ3MgdGhhdCB3aWxsIGJlIGlnbm9yZWQgd2hlbiB0aGUgZm9ybSBpcyBjbG9zZWQsIHNlcGFyYXRlZCBieSAnOycuIERlZmF1bHQ6IG5vIHZhbHVlLlxuICAnaWdub3JlT25FeGl0OiBpZ25vcmUtb24tZXhpdCcsXG5cbiAgLy8gW2Z1bmN0aW9uXTogZnVuY3Rpb24gdG8gZXhlY3V0ZSBvbiBxdWVyeSBlcnJvci4gRGVmYXVsdDogbm8gdmFsdWUuXG4gICdxdWVyeUZhbGxiYWNrRnVuY3Rpb246IHF1ZXJ5LWZhbGxiYWNrLWZ1bmN0aW9uJyxcblxuICAvLyAnaW5zZXJ0RmFsbGJhY2tGdW5jdGlvbjogaW5zZXJ0LWZhbGxiYWNrLWZ1bmN0aW9uJyxcblxuICAvLyAndXBkYXRlRmFsbGJhY2tGdW5jdGlvbjogdXBkYXRlLWZhbGxiYWNrLWZ1bmN0aW9uJyxcblxuICAvLyAnZGVsZXRlRmFsbGJhY2tGdW5jdGlvbjogZGVsZXRlLWZhbGxiYWNrLWZ1bmN0aW9uJ1xuXG4gIC8vIGlnbm9yZS1kZWZhdWx0LW5hdmlnYXRpb24gW3N0cmluZ11beWVzfG5vfHRydWV8ZmFsc2VdOiBpZ25vcmUgZGVmYXVsdCBuYXZpZ2F0aW9uIHdoZW4gdXNlciBjbGljayB0aGUgdG9vbGJhciBidXR0b25zLiBEZWZhdWx0OiBuby5cbiAgJ2lnbm9yZURlZmF1bHROYXZpZ2F0aW9uOiBpZ25vcmUtZGVmYXVsdC1uYXZpZ2F0aW9uJyxcblxuICAnbWVzc2FnZVNlcnZpY2VUeXBlIDogbWVzc2FnZS1zZXJ2aWNlLXR5cGUnLFxuICAvLyAgY29uZmlndXJlLXNlcnZpY2UtYXJncyBbT0NvbmZpZ3VyZVNlcnZpY2VBcmdzXTogQWxsb3dzIGNvbmZpZ3VyZSBzZXJ2aWNlIC5cbiAgJ2NvbmZpZ3VyZVNlcnZpY2VBcmdzOiBjb25maWd1cmUtc2VydmljZS1hcmdzJyxcbiAgLy9zZXQtdmFsdWUtb3JkZXI6IG9yZGVyIG9mIHRoZSBmaWVsZCBhdHRyaWJ1dGVzIGJ5IHdoaWNoIHRoZSB2YWx1ZSB3aWxsIGJlIHNldCwgc2VwYXJhdGVkIGJ5ICc7ICcuIERlZmF1bHQ6IG5vIHZhbHVlLlxuICAnc2V0VmFsdWVPcmRlcjogc2V0LXZhbHVlLW9yZGVyJyxcblxuICAvL2Zvcm0tZGF0YS12YWxpZGF0aW9uOiBFeGVjdXRlcyB0aGUgYmVmb3JlLXNhdmUgdmFsaWRhdGlvbiBjYWxsYmFjayBmb3IgaW5zZXJ0IGFuZCB1cGRhdGUgb3BlcmF0aW9uc1xuICAnZm9ybURhdGFWYWxpZGF0aW9uRnVuY3Rpb246IGZvcm0tZGF0YS12YWxpZGF0aW9uLWZ1bmN0aW9uJ1xuXTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfT1VUUFVUU19PX0ZPUk0gPSBbXG4gICdvbkRhdGFMb2FkZWQnLFxuICAnYmVmb3JlQ2xvc2VEZXRhaWwnLFxuICAnYmVmb3JlR29FZGl0TW9kZScsXG4gICdvbkZvcm1Nb2RlQ2hhbmdlJyxcbiAgJ29uQmVmb3JlSW5zZXJ0JyxcbiAgJ29uQmVmb3JlVXBkYXRlJyxcbiAgJ29uQmVmb3JlRGVsZXRlJyxcbiAgJ29uSW5zZXJ0JyxcbiAgJ29uVXBkYXRlJyxcbiAgJ29uRGVsZXRlJyxcbiAgJ2JlZm9yZUluc2VydE1vZGUnLFxuICAnYmVmb3JlVXBkYXRlTW9kZScsXG4gICdiZWZvcmVJbml0aWFsTW9kZScsXG4gICdvbkluc2VydE1vZGUnLFxuICAnb25VcGRhdGVNb2RlJyxcbiAgJ29uSW5pdGlhbE1vZGUnLFxuICAnb25DYW5jZWwnXG5dO1xuXG5AQ29tcG9uZW50KHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0FzeW5jUGlwZSwgTmdDbGFzcywgTmdUZW1wbGF0ZU91dGxldCwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgTWF0UHJvZ3Jlc3NCYXJNb2R1bGUsIE9LZXlib2FyZExpc3RlbmVyRGlyZWN0aXZlLCBPRm9ybVRvb2xiYXJDb21wb25lbnRdLFxuICBzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV0sXG4gIHNlbGVjdG9yOiAnby1mb3JtJyxcbiAgcHJvdmlkZXJzOiBbXG4gICAgeyBwcm92aWRlOiBPRm9ybUJhc2UsIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IE9Gb3JtQ29tcG9uZW50KSB9LFxuICAgIE9udGltaXplU2VydmljZVByb3ZpZGVyLFxuICAgIE9Gb3JtTWVzc2FnZVNlcnZpY2VcbiAgXSxcbiAgdGVtcGxhdGVVcmw6ICcuL28tZm9ybS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL28tZm9ybS5jb21wb25lbnQuc2NzcyddLFxuICBpbnB1dHM6IERFRkFVTFRfSU5QVVRTX09fRk9STSxcbiAgb3V0cHV0czogREVGQVVMVF9PVVRQVVRTX09fRk9STSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgaG9zdDoge1xuICAgICdbY2xhc3Muby1mb3JtXSc6ICd0cnVlJ1xuICB9XG59KVxuZXhwb3J0IGNsYXNzIE9Gb3JtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIENhbkNvbXBvbmVudERlYWN0aXZhdGUsIEFmdGVyVmlld0luaXQge1xuXG4gIHB1YmxpYyBzdGF0aWMgREVGQVVMVF9MQVlPVVRfRElSRUNUSU9OID0gJ2NvbHVtbic7XG4gIHB1YmxpYyBzdGF0aWMgZ3VhcmRDbGFzc05hbWUgPSAnQ2FuRGVhY3RpdmF0ZUZvcm1HdWFyZCc7XG5cbiAgLyogaW5wdXRzIHZhcmlhYmxlcyAqL1xuICBnZXQgc2hvd0hlYWRlcigpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuX3Nob3dIZWFkZXI7IH1cbiAgc2V0IHNob3dIZWFkZXIodmFsOiBib29sZWFuIHwgc3RyaW5nKSB7IHRoaXMuX3Nob3dIZWFkZXIgPSBCb29sZWFuQ29udmVydGVyKHZhbCk7IH1cbiAgcHJvdGVjdGVkIF9zaG93SGVhZGVyOiBib29sZWFuID0gdHJ1ZTtcbiAgaGVhZGVyTW9kZTogc3RyaW5nID0gJ2Zsb2F0aW5nJztcbiAgaGVhZGVyUG9zaXRpb246ICd0b3AnIHwgJ2JvdHRvbScgPSAndG9wJztcbiAgbGFiZWxoZWFkZXI6IHN0cmluZyA9ICcnO1xuICBsYWJlbEhlYWRlckFsaWduOiBzdHJpbmcgPSAnY2VudGVyJztcbiAgaGVhZGVyYWN0aW9uczogc3RyaW5nID0gJ2FsbCc7XG4gIHNob3dIZWFkZXJBY3Rpb25zVGV4dDogc3RyaW5nID0gJ3llcyc7XG4gIGVudGl0eTogc3RyaW5nO1xuICBrZXlzOiBzdHJpbmcgPSAnJztcbiAgY29sdW1uczogc3RyaW5nID0gJyc7XG4gIHNldFZhbHVlT3JkZXI6IHN0cmluZyA9ICcnO1xuICBzZXJ2aWNlOiBzdHJpbmc7XG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBzdGF5SW5SZWNvcmRBZnRlckVkaXQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgYWZ0ZXJJbnNlcnRNb2RlOiAnbmV3JyB8ICdkZXRhaWwnIHwgJ2Nsb3NlJyA9ICdjbG9zZSc7XG4gIHNlcnZpY2VUeXBlOiBzdHJpbmc7XG4gIGdldCBxdWVyeU9uSW5pdCgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuX3F1ZXJ5T25Jbml0OyB9XG4gIHNldCBxdWVyeU9uSW5pdCh2YWw6IGJvb2xlYW4gfCBzdHJpbmcpIHsgdGhpcy5fcXVlcnlPbkluaXQgPSBCb29sZWFuQ29udmVydGVyKHZhbCk7IH1cbiAgcHJpdmF0ZSBfcXVlcnlPbkluaXQ6IGJvb2xlYW4gPSB0cnVlO1xuICBwcm90ZWN0ZWQgcGFyZW50S2V5czogc3RyaW5nO1xuICBwcm90ZWN0ZWQgZ2V0TWV0aG9kOiBzdHJpbmcgPSBcIlwiXG4gIHByb3RlY3RlZCBxdWVyeU1ldGhvZDogc3RyaW5nID0gQ29kZXMuUVVFUllCWUlEX01FVEhPRDtcbiAgcHJvdGVjdGVkIGluc2VydE1ldGhvZDogc3RyaW5nID0gQ29kZXMuSU5TRVJUX01FVEhPRDtcbiAgcHJvdGVjdGVkIHVwZGF0ZU1ldGhvZDogc3RyaW5nID0gQ29kZXMuVVBEQVRFX01FVEhPRDtcbiAgcHJvdGVjdGVkIGRlbGV0ZU1ldGhvZDogc3RyaW5nID0gQ29kZXMuREVMRVRFX01FVEhPRDtcbiAgcHJvdGVjdGVkIF9sYXlvdXREaXJlY3Rpb246IHN0cmluZyA9IE9Gb3JtQ29tcG9uZW50LkRFRkFVTFRfTEFZT1VUX0RJUkVDVElPTjtcbiAgcHJvdGVjdGVkIF9sYXlvdXRBbGlnbjogc3RyaW5nID0gJ3N0YXJ0IHN0cmV0Y2gnO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgcHJvdGVjdGVkIGVkaXRhYmxlRGV0YWlsOiBib29sZWFuID0gdHJ1ZTtcbiAgcHJvdGVjdGVkIGtleXNTcWxUeXBlczogc3RyaW5nO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgdW5kb0J1dHRvbjogYm9vbGVhbiA9IHRydWU7XG4gIGdldCBzaG93SGVhZGVyTmF2aWdhdGlvbigpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuX3Nob3dIZWFkZXJOYXZpZ2F0aW9uOyB9XG4gIHNldCBzaG93SGVhZGVyTmF2aWdhdGlvbih2YWw6IGJvb2xlYW4gfCBzdHJpbmcpIHsgdGhpcy5fc2hvd0hlYWRlck5hdmlnYXRpb24gPSBCb29sZWFuQ29udmVydGVyKHZhbCk7IH1cbiAgcHJpdmF0ZSBfc2hvd0hlYWRlck5hdmlnYXRpb246IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIG9hdHRyOiBzdHJpbmcgPSAnJztcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIGluY2x1ZGVCcmVhZGNydW1iOiBib29sZWFuID0gZmFsc2U7XG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBkZXRlY3RDaGFuZ2VzT25CbHVyOiBib29sZWFuID0gdHJ1ZTtcbiAgZ2V0IGNvbmZpcm1FeGl0KCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5fY29uZmlybUV4aXQ7IH1cbiAgc2V0IGNvbmZpcm1FeGl0KHZhbDogYm9vbGVhbiB8IHN0cmluZykgeyB0aGlzLl9jb25maXJtRXhpdCA9IEJvb2xlYW5Db252ZXJ0ZXIodmFsKTsgfVxuICBwcml2YXRlIF9jb25maXJtRXhpdDogYm9vbGVhbiA9IHRydWU7XG5cbiAgc2V0VmFsdWVPcmRlckFycmF5OiBzdHJpbmdbXTtcblxuICBzZXQgaWdub3JlT25FeGl0KHZhbDogc3RyaW5nW10pIHtcbiAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHZhbCA9IFV0aWwucGFyc2VBcnJheSh2YWwsIHRydWUpO1xuICAgIH1cbiAgICB0aGlzLl9pZ25vcmVPbkV4aXQgPSB2YWw7XG4gIH1cbiAgZ2V0IGlnbm9yZU9uRXhpdCgpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuX2lnbm9yZU9uRXhpdDtcbiAgfVxuICBwcm90ZWN0ZWQgX2lnbm9yZU9uRXhpdDogc3RyaW5nW107XG4gIHB1YmxpYyBxdWVyeUZhbGxiYWNrRnVuY3Rpb246IChlcnJvcjogYW55KSA9PiB2b2lkO1xuXG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBwdWJsaWMgaWdub3JlRGVmYXVsdE5hdmlnYXRpb246IGJvb2xlYW4gPSBmYWxzZTtcbiAgbWVzc2FnZVNlcnZpY2VUeXBlOiBzdHJpbmc7XG4gIHB1YmxpYyBmb3JtRGF0YVZhbGlkYXRpb25GdW5jdGlvbjogKGRhdGE6IGFueSkgPT4gT0Zvcm1WYWxpZGF0aW9uO1xuXG4gIC8qIGVuZCBvZiBpbnB1dHMgdmFyaWFibGVzICovXG5cbiAgLypwYXJzZWQgaW5wdXRzIHZhcmlhYmxlcyAqL1xuICBpc0RldGFpbEZvcm06IGJvb2xlYW4gPSBmYWxzZTtcbiAga2V5c0FycmF5OiBzdHJpbmdbXSA9IFtdO1xuICBjb2xzQXJyYXk6IHN0cmluZ1tdID0gW107XG4gIGRhdGFTZXJ2aWNlOiBCYXNlU2VydmljZTxTZXJ2aWNlUmVzcG9uc2U+O1xuICBfcEtleXNFcXVpdiA9IHt9O1xuICBrZXlzU3FsVHlwZXNBcnJheTogQXJyYXk8c3RyaW5nPiA9IFtdO1xuICBwcm90ZWN0ZWQgX21lc3NhZ2VTZXJ2aWNlOiBPRm9ybU1lc3NhZ2VTZXJ2aWNlO1xuICAvKiBlbmQgb2YgcGFyc2VkIGlucHV0cyB2YXJpYWJsZXMgKi9cblxuICBmb3JtR3JvdXA6IEZvcm1Hcm91cDtcbiAgb25EYXRhTG9hZGVkOiBFdmVudEVtaXR0ZXI8b2JqZWN0PiA9IG5ldyBFdmVudEVtaXR0ZXI8b2JqZWN0PigpO1xuICBiZWZvcmVDbG9zZURldGFpbDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFVzZSBgYmVmb3JlVXBkYXRlTW9kZWAgaW5zdGVhZFxuICAgKi9cbiAgYmVmb3JlR29FZGl0TW9kZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgYmVmb3JlSW5zZXJ0TW9kZSA9IG5ldyBFdmVudEVtaXR0ZXI8bnVsbD4oKTtcbiAgYmVmb3JlVXBkYXRlTW9kZSA9IG5ldyBFdmVudEVtaXR0ZXI8bnVsbD4oKTtcbiAgYmVmb3JlSW5pdGlhbE1vZGUgPSBuZXcgRXZlbnRFbWl0dGVyPG51bGw+KCk7XG4gIG9uSW5zZXJ0TW9kZSA9IG5ldyBFdmVudEVtaXR0ZXI8bnVsbD4oKTtcbiAgb25VcGRhdGVNb2RlID0gbmV3IEV2ZW50RW1pdHRlcjxudWxsPigpO1xuICBvbkluaXRpYWxNb2RlID0gbmV3IEV2ZW50RW1pdHRlcjxudWxsPigpO1xuICBvbkZvcm1Nb2RlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8bnVtYmVyPiA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuICBwdWJsaWMgb25CZWZvcmVJbnNlcnQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBwdWJsaWMgb25CZWZvcmVVcGRhdGU6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBwdWJsaWMgb25CZWZvcmVEZWxldGU6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBwdWJsaWMgb25JbnNlcnQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBwdWJsaWMgb25VcGRhdGU6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBwdWJsaWMgb25EZWxldGU6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBwdWJsaWMgb25DYW5jZWw6IEV2ZW50RW1pdHRlcjxudWxsPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBwcm90ZWN0ZWQgbG9hZGluZ1N1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHVibGljIGxvYWRpbmc6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLmxvYWRpbmdTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICBwdWJsaWMgZm9ybURhdGE6IG9iamVjdCA9IHt9O1xuICBwdWJsaWMgbmF2aWdhdGlvbkRhdGE6IEFycmF5PGFueT4gPSBbXTtcbiAgcHVibGljIGN1cnJlbnRJbmRleCA9IDA7XG4gIHB1YmxpYyBtb2RlOiBudW1iZXIgPSBPRm9ybUNvbXBvbmVudC5Nb2RlKCkuSU5JVElBTDtcblxuICBwcm90ZWN0ZWQgZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZTtcbiAgcHJvdGVjdGVkIG5hdmlnYXRpb25TZXJ2aWNlOiBOYXZpZ2F0aW9uU2VydmljZTtcbiAgcHJvdGVjdGVkIHNuYWNrQmFyU2VydmljZTogU25hY2tCYXJTZXJ2aWNlO1xuXG4gIHByb3RlY3RlZCBfZm9ybVRvb2xiYXI6IE9Gb3JtVG9vbGJhckJhc2U7XG5cbiAgcHJvdGVjdGVkIF9jb21wb25lbnRzOiBJRm9ybURhdGFDb21wb25lbnRIYXNoID0ge307XG4gIHByb3RlY3RlZCBfY29tcFNRTFR5cGVzOiBvYmplY3QgPSB7fTtcblxuICBmb3JtUGFyZW50S2V5c1ZhbHVlczogb2JqZWN0O1xuXG4gIHB1YmxpYyBvbkZvcm1Jbml0U3RyZWFtOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gIHByb3RlY3RlZCByZWxvYWRTdHJlYW06IE9ic2VydmFibGU8YW55PjtcbiAgcHJvdGVjdGVkIHJlbG9hZFN0cmVhbVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gIHByb3RlY3RlZCBxdWVyeVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBwcm90ZWN0ZWQgbG9hZGVyU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHByb3RlY3RlZCBkeW5hbWljRm9ybVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gIHByb3RlY3RlZCBkZWFjdGl2YXRlR3VhcmQ6IENhbkRlYWN0aXZhdGVGb3JtR3VhcmQ7XG4gIHB1YmxpYyBkZWFjdGl2YXRlR3VhcmRJZDogc3RyaW5nO1xuICBwcm90ZWN0ZWQgZm9ybUNhY2hlOiBPRm9ybUNhY2hlQ2xhc3M7XG4gIHByb3RlY3RlZCBmb3JtTmF2aWdhdGlvbjogT0Zvcm1OYXZpZ2F0aW9uQ2xhc3M7XG5cbiAgcHVibGljIGZvcm1Db250YWluZXI6IE9Gb3JtQ29udGFpbmVyQ29tcG9uZW50O1xuXG4gIHByb3RlY3RlZCBwZXJtaXNzaW9uc1NlcnZpY2U6IFBlcm1pc3Npb25zU2VydmljZTtcbiAgcHJvdGVjdGVkIHBlcm1pc3Npb25zOiBPRm9ybVBlcm1pc3Npb25zO1xuXG4gIEBWaWV3Q2hpbGQoJ2lubmVyRm9ybScpIGlubmVyRm9ybUVsOiBFbGVtZW50UmVmO1xuXG4gIGlnbm9yZUZvcm1DYWNoZUtleXM6IEFycmF5PGFueT4gPSBbXTtcbiAgY2FuRGlzY2FyZENoYW5nZXM6IGJvb2xlYW47XG5cbiAgcHVibGljIHN0YXRpYyBNb2RlKCk6IGFueSB7XG4gICAgZW51bSBtIHtcbiAgICAgIFFVRVJZLFxuICAgICAgSU5TRVJULFxuICAgICAgVVBEQVRFLFxuICAgICAgSU5JVElBTFxuICAgIH1cbiAgICByZXR1cm4gbTtcbiAgfVxuICBwcm90ZWN0ZWQgY29uZmlndXJlU2VydmljZUFyZ3M6IE9Db25maWd1cmVTZXJ2aWNlQXJncztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJvdGVjdGVkIGFjdFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcm90ZWN0ZWQgem9uZTogTmdab25lLFxuICAgIHByb3RlY3RlZCBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJvdGVjdGVkIGluamVjdG9yOiBJbmplY3RvcixcbiAgICBwcm90ZWN0ZWQgZWxSZWY6IEVsZW1lbnRSZWZcbiAgKSB7XG5cbiAgICB0aGlzLmZvcm1DYWNoZSA9IG5ldyBPRm9ybUNhY2hlQ2xhc3ModGhpcyk7XG4gICAgdGhpcy5mb3JtTmF2aWdhdGlvbiA9IG5ldyBPRm9ybU5hdmlnYXRpb25DbGFzcyh0aGlzLmluamVjdG9yLCB0aGlzLCB0aGlzLnJvdXRlciwgdGhpcy5hY3RSb3V0ZSk7XG5cbiAgICB0aGlzLmRpYWxvZ1NlcnZpY2UgPSBpbmplY3Rvci5nZXQ8RGlhbG9nU2VydmljZT4oRGlhbG9nU2VydmljZSBhcyBUeXBlPERpYWxvZ1NlcnZpY2U+KTtcbiAgICB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlID0gaW5qZWN0b3IuZ2V0PE5hdmlnYXRpb25TZXJ2aWNlPihOYXZpZ2F0aW9uU2VydmljZSBhcyBUeXBlPE5hdmlnYXRpb25TZXJ2aWNlPik7XG4gICAgdGhpcy5zbmFja0JhclNlcnZpY2UgPSBpbmplY3Rvci5nZXQ8U25hY2tCYXJTZXJ2aWNlPihTbmFja0JhclNlcnZpY2UgYXMgVHlwZTxTbmFja0JhclNlcnZpY2U+KTtcbiAgICB0aGlzLnBlcm1pc3Npb25zU2VydmljZSA9IHRoaXMuaW5qZWN0b3IuZ2V0PFBlcm1pc3Npb25zU2VydmljZT4oUGVybWlzc2lvbnNTZXJ2aWNlIGFzIFR5cGU8UGVybWlzc2lvbnNTZXJ2aWNlPik7XG5cbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICB0aGlzLnJlbG9hZFN0cmVhbSA9IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgc2VsZi5vbkZvcm1Jbml0U3RyZWFtLmFzT2JzZXJ2YWJsZSgpLFxuICAgICAgc2VsZi5mb3JtTmF2aWdhdGlvbi5uYXZpZ2F0aW9uU3RyZWFtLmFzT2JzZXJ2YWJsZSgpXG4gICAgXSk7XG5cbiAgICB0aGlzLnJlbG9hZFN0cmVhbVN1YnNjcmlwdGlvbiA9IHRoaXMucmVsb2FkU3RyZWFtLnN1YnNjcmliZSh2YWxBcnIgPT4ge1xuICAgICAgaWYgKFV0aWwuaXNBcnJheSh2YWxBcnIpICYmIHZhbEFyci5sZW5ndGggPT09IDIgJiYgIXNlbGYuaXNJbkluc2VydE1vZGUoKSkge1xuICAgICAgICBjb25zdCB2YWxBcnJWYWx1ZXMgPSB2YWxBcnJbMF0gPT09IHRydWUgJiYgdmFsQXJyWzFdID09PSB0cnVlO1xuICAgICAgICBpZiAoc2VsZi5xdWVyeU9uSW5pdCAmJiB2YWxBcnJWYWx1ZXMpIHtcbiAgICAgICAgICBzZWxmLnJlbG9hZCh0cnVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZWxmLmluaXRpYWxpemVGaWVsZHMoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuZm9ybUNvbnRhaW5lciA9IGluamVjdG9yLmdldChPRm9ybUNvbnRhaW5lckNvbXBvbmVudCk7XG4gICAgICB0aGlzLmZvcm1Db250YWluZXIuc2V0Rm9ybSh0aGlzKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvL1xuICAgIH1cbiAgICB0aGlzLmdldEdsb2JhbENvbmZpZygpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRHbG9iYWxDb25maWcoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG9Gb3JtR2xvYmFsQ29uZmlnID0gdGhpcy5pbmplY3Rvci5nZXQoT19GT1JNX0dMT0JBTF9DT05GSUcpO1xuICAgICAgaWYgKFV0aWwuaXNEZWZpbmVkKG9Gb3JtR2xvYmFsQ29uZmlnLmhlYWRlckFjdGlvbnMpKSB7XG4gICAgICAgIHRoaXMuaGVhZGVyYWN0aW9ucyA9IG9Gb3JtR2xvYmFsQ29uZmlnLmhlYWRlckFjdGlvbnM7XG4gICAgICB9O1xuXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIERvIG5vdGhpbmcgYmVjYXVzZSBpcyBvcHRpb25hbFxuICAgIH1cbiAgfVxuXG4gIHJlZ2lzdGVyRm9ybUNvbXBvbmVudChjb21wOiBhbnkpIHtcbiAgICBpZiAoY29tcCkge1xuICAgICAgY29uc3QgYXR0ciA9IGNvbXAuZ2V0QXR0cmlidXRlKCk7XG4gICAgICBpZiAoYXR0ciAmJiBhdHRyLmxlbmd0aCA+IDApIHtcblxuICAgICAgICBpZiAoIWNvbXAuaXNBdXRvbWF0aWNSZWdpc3RlcmluZygpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX2NvbXBvbmVudHMuaGFzT3duUHJvcGVydHkoYXR0cikpIHtcbiAgICAgICAgICBjb21wLnJlcGVhdGVkQXR0ciA9IHRydWU7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignVGhlcmUgaXMgYWxyZWFkeSBhIGNvbXBvbmVudCByZWdpc3RlcmVkIGluIHRoZSBmb3JtIHdpdGggdGhlIGF0dHI6ICcgKyBhdHRyKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jb21wb25lbnRzW2F0dHJdID0gY29tcDtcbiAgICAgICAgLy8gU2V0dGluZyBwYXJlbnQga2V5IHZhbHVlcy4uLlxuICAgICAgICBpZiAodGhpcy5mb3JtUGFyZW50S2V5c1ZhbHVlcyAmJiB0aGlzLmZvcm1QYXJlbnRLZXlzVmFsdWVzW2F0dHJdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBjb25zdCB2YWwgPSB0aGlzLmZvcm1QYXJlbnRLZXlzVmFsdWVzW2F0dHJdO1xuICAgICAgICAgIHRoaXMuX2NvbXBvbmVudHNbYXR0cl0uc2V0VmFsdWUodmFsLCB7XG4gICAgICAgICAgICBlbWl0TW9kZWxUb1ZpZXdDaGFuZ2U6IGZhbHNlLFxuICAgICAgICAgICAgZW1pdEV2ZW50OiBmYWxzZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8qXG4gICAgICAgICogVE9ETy4gQ2hlY2sgaXQhISFcbiAgICAgICAgKiBFbiB1biBmb3JtdWxhcmlvIGNvbiB0YWJzLCBjdWFuZG8gc2UgY2FtYmlhIGRlIHVubyBhIG90cm8sIHNlIGRlc3RydXllbiBsYXMgdmlzdGFzXG4gICAgICAgICogZGUgbG9zIGNvbXBvbmVudGVzIGhpam8gZGVsIGZvcm11bGFyaW8uXG4gICAgICAgICogZm9ybURhdGFDYWNoZSBjb250aWVuZSBsb3MgdmFsb3JlcyAob3JpZ2luYWxlcyDDsyBlZGl0YWRvcykgZGUgbG9zIGNhbXBvcyBkZWwgZm9ybXVsYXJpby5cbiAgICAgICAgKiBMYSBpZGVhIGVzIGFzaWduYXIgZXNlIHZhbG9yIGFsIGNhbXBvIGN1YW5kbyBzZSByZWdpc3RyZSBkZSBudWV2byAoSGF5IHF1ZSBhc2VndXJhciBlbCBwcm9jZXNvXG4gICAgICAgICogcGFyYSBxdWUgc8OzbG8gc2VhIGN1YW5kbyBzZSByZWdpc3RyYSBkZSBudWV2byA7KSApXG4gICAgICAgICovXG4gICAgICAgIGNvbnN0IGNhY2hlZFZhbHVlID0gdGhpcy5mb3JtQ2FjaGUuZ2V0Q2FjaGVkVmFsdWUoYXR0cik7XG4gICAgICAgIGlmIChVdGlsLmlzRGVmaW5lZChjYWNoZWRWYWx1ZSkgJiYgdGhpcy5nZXREYXRhVmFsdWVzKCkgJiYgdGhpcy5fY29tcG9uZW50cy5oYXNPd25Qcm9wZXJ0eShhdHRyKSkge1xuICAgICAgICAgIHRoaXMuX2NvbXBvbmVudHNbYXR0cl0uc2V0VmFsdWUoY2FjaGVkVmFsdWUsIHtcbiAgICAgICAgICAgIGVtaXRNb2RlbFRvVmlld0NoYW5nZTogZmFsc2UsXG4gICAgICAgICAgICBlbWl0RXZlbnQ6IGZhbHNlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZWdpc3RlclNRTFR5cGVGb3JtQ29tcG9uZW50KGNvbXA6IElGb3JtRGF0YVR5cGVDb21wb25lbnQpIHtcbiAgICBpZiAoKGNvbXAgYXMgYW55KS5yZXBlYXRlZEF0dHIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGNvbXApIHtcbiAgICAgIGNvbnN0IHR5cGUgPSBjb21wLmdldFNRTFR5cGUoKTtcbiAgICAgIGNvbnN0IGF0dHIgPSBjb21wLmdldEF0dHJpYnV0ZSgpO1xuICAgICAgaWYgKHR5cGUgIT09IFNRTFR5cGVzLk9USEVSICYmIGF0dHIgJiYgYXR0ci5sZW5ndGggPiAwICYmIHRoaXMuaWdub3JlRm9ybUNhY2hlS2V5cy5pbmRleE9mKGF0dHIpID09PSAtMSkge1xuICAgICAgICAvLyBSaWdodCBub3cganVzdCBzdG9yZSB2YWx1ZXMgZGlmZmVyZW50IG9mICdPVEhFUidcbiAgICAgICAgdGhpcy5fY29tcFNRTFR5cGVzW2F0dHJdID0gdHlwZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZWdpc3RlckZvcm1Db250cm9sQ29tcG9uZW50KGNvbXA6IElGb3JtRGF0YUNvbXBvbmVudCkge1xuICAgIGlmICgoY29tcCBhcyBhbnkpLnJlcGVhdGVkQXR0cikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoY29tcCkge1xuICAgICAgY29uc3QgYXR0ciA9IGNvbXAuZ2V0QXR0cmlidXRlKCk7XG4gICAgICBpZiAoYXR0ciAmJiBhdHRyLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgY29udHJvbDogRm9ybUNvbnRyb2wgPSBjb21wLmdldENvbnRyb2woKTtcbiAgICAgICAgaWYgKGNvbnRyb2wpIHtcbiAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5yZWdpc3RlckNvbnRyb2woYXR0ciwgY29udHJvbCk7XG4gICAgICAgICAgaWYgKCFjb21wLmlzQXV0b21hdGljUmVnaXN0ZXJpbmcoKSkge1xuICAgICAgICAgICAgdGhpcy5pZ25vcmVGb3JtQ2FjaGVLZXlzLnB1c2goY29tcC5nZXRBdHRyaWJ1dGUoKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdW5yZWdpc3RlckZvcm1Db21wb25lbnQoY29tcDogSUNvbXBvbmVudCkge1xuICAgIGlmIChjb21wKSB7XG4gICAgICBjb25zdCBhdHRyID0gY29tcC5nZXRBdHRyaWJ1dGUoKTtcbiAgICAgIGlmIChhdHRyICYmIGF0dHIubGVuZ3RoID4gMCAmJiB0aGlzLl9jb21wb25lbnRzLmhhc093blByb3BlcnR5KGF0dHIpKSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLl9jb21wb25lbnRzW2F0dHJdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldEF0dHJpYnV0ZSgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLm9hdHRyKSB7XG4gICAgICByZXR1cm4gdGhpcy5vYXR0cjtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHVucmVnaXN0ZXJGb3JtQ29udHJvbENvbXBvbmVudChjb21wOiBJRm9ybURhdGFDb21wb25lbnQpIHtcbiAgICBpZiAoY29tcCAmJiBjb21wLmlzQXV0b21hdGljUmVnaXN0ZXJpbmcoKSkge1xuICAgICAgY29uc3QgY29udHJvbDogRm9ybUNvbnRyb2wgPSBjb21wLmdldENvbnRyb2woKTtcbiAgICAgIGNvbnN0IGF0dHIgPSBjb21wLmdldEF0dHJpYnV0ZSgpO1xuICAgICAgaWYgKGNvbnRyb2wgJiYgYXR0ciAmJiBhdHRyLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAucmVtb3ZlQ29udHJvbChhdHRyKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB1bnJlZ2lzdGVyU1FMVHlwZUZvcm1Db21wb25lbnQoY29tcDogSUZvcm1EYXRhVHlwZUNvbXBvbmVudCkge1xuICAgIGlmIChjb21wKSB7XG4gICAgICBjb25zdCBhdHRyID0gY29tcC5nZXRBdHRyaWJ1dGUoKTtcbiAgICAgIGlmIChhdHRyICYmIGF0dHIubGVuZ3RoID4gMCkge1xuICAgICAgICBkZWxldGUgdGhpcy5fY29tcFNRTFR5cGVzW2F0dHJdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJlZ2lzdGVyVG9vbGJhcihmVG9vbGJhcjogT0Zvcm1Ub29sYmFyQ29tcG9uZW50KSB7XG4gICAgaWYgKGZUb29sYmFyKSB7XG4gICAgICB0aGlzLl9mb3JtVG9vbGJhciA9IGZUb29sYmFyO1xuICAgICAgdGhpcy5fZm9ybVRvb2xiYXIuaXNEZXRhaWwgPSB0aGlzLmlzRGV0YWlsRm9ybTtcbiAgICB9XG4gIH1cblxuICBnZXRDb21wb25lbnRzKCk6IElGb3JtRGF0YUNvbXBvbmVudEhhc2gge1xuICAgIHJldHVybiB0aGlzLl9jb21wb25lbnRzO1xuICB9XG5cbiAgZ2V0Q29tcG9uZW50QnlBdHRyKGF0dHI6c3RyaW5nKTogSUZvcm1EYXRhQ29tcG9uZW50IHtcbiAgICByZXR1cm4gdGhpcy5fY29tcG9uZW50c1thdHRyXTtcbiAgfVxuXG5cbiAgcHVibGljIGxvYWQoKTogYW55IHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBjb25zdCB6b25lID0gdGhpcy5pbmplY3Rvci5nZXQoTmdab25lKTtcbiAgICBjb25zdCBsb2FkT2JzZXJ2YWJsZSA9IG5ldyBPYnNlcnZhYmxlKG9ic2VydmVyID0+IHtcbiAgICAgIGNvbnN0IHRpbWVyID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBvYnNlcnZlci5uZXh0KHRydWUpO1xuICAgICAgfSwgMjUwKTtcblxuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgd2luZG93LmNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICAgIHpvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICBzZWxmLmxvYWRpbmdTdWJqZWN0Lm5leHQoZmFsc2UpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG5cbiAgICB9KTtcbiAgICBjb25zdCBzdWJzY3JpcHRpb24gPSBsb2FkT2JzZXJ2YWJsZS5zdWJzY3JpYmUodmFsID0+IHtcbiAgICAgIHpvbmUucnVuKCgpID0+IHtcbiAgICAgICAgc2VsZi5sb2FkaW5nU3ViamVjdC5uZXh0KHZhbCBhcyBib29sZWFuKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiBzdWJzY3JpcHRpb247XG4gIH1cblxuICBnZXREYXRhVmFsdWUoYXR0cjogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMuaXNJbkluc2VydE1vZGUoKSkge1xuICAgICAgY29uc3QgdXJsUGFyYW1zID0gdGhpcy5mb3JtTmF2aWdhdGlvbi5nZXRGaWx0ZXJGcm9tVXJsUGFyYW1zKCk7XG4gICAgICBjb25zdCB2YWwgPSB0aGlzLmZvcm1Hcm91cC52YWx1ZVthdHRyXSB8fCB1cmxQYXJhbXNbYXR0cl07XG4gICAgICByZXR1cm4gbmV3IE9Gb3JtVmFsdWUodmFsKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNJbkluaXRpYWxNb2RlKCkgJiYgIXRoaXMuaXNFZGl0YWJsZURldGFpbCgpKSB7XG4gICAgICBjb25zdCBkYXRhID0gdGhpcy5mb3JtRGF0YTtcbiAgICAgIGlmIChkYXRhICYmIGRhdGEuaGFzT3duUHJvcGVydHkoYXR0cikpIHtcbiAgICAgICAgcmV0dXJuIGRhdGFbYXR0cl07XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLmlzSW5VcGRhdGVNb2RlKCkgfHwgdGhpcy5pc0VkaXRhYmxlRGV0YWlsKCkpIHtcbiAgICAgIGlmICh0aGlzLmZvcm1EYXRhICYmIE9iamVjdC5rZXlzKHRoaXMuZm9ybURhdGEpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgdmFsID0gdGhpcy5mb3JtQ2FjaGUuZ2V0Q2FjaGVkVmFsdWUoYXR0cik7XG4gICAgICAgIGlmICh0aGlzLmZvcm1Hcm91cC5kaXJ0eSAmJiB2YWwpIHtcbiAgICAgICAgICBpZiAodmFsIGluc3RhbmNlb2YgT0Zvcm1WYWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbDtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG5ldyBPRm9ybVZhbHVlKHZhbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gUmV0dXJuIG9yaWdpbmFsIHZhbHVlIHN0b3JlZCBpbnRvIGZvcm0gZGF0YS4uLlxuICAgICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmZvcm1EYXRhO1xuICAgICAgICAgIGlmIChkYXRhICYmIGRhdGEuaGFzT3duUHJvcGVydHkoYXR0cikpIHtcbiAgICAgICAgICAgIHJldHVybiBkYXRhW2F0dHJdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3IE9Gb3JtVmFsdWUoKTtcbiAgfVxuXG4gIGdldERhdGFWYWx1ZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybURhdGE7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXJzIHRoZSBmb3JtIGRhdGEuIFRoZSBkYXRhIHJlbGF0ZWQgdG8gdXJsIHBhcmFtcyBhbmQgcGFyZW50IGtleXMgcmVtYWluIHVuY2hhbmdlZC5cbiAgICovXG4gIGNsZWFyRGF0YSgpIHtcbiAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLmZvcm1OYXZpZ2F0aW9uLmdldEZpbHRlckZyb21VcmxQYXJhbXMoKTtcbiAgICB0aGlzLmZvcm1Hcm91cC5yZXNldCh7fSwge1xuICAgICAgZW1pdEV2ZW50OiBmYWxzZVxuICAgIH0pO1xuICAgIHRoaXMuc2V0RGF0YShmaWx0ZXIpO1xuICB9XG5cbiAgY2FuRGVhY3RpdmF0ZSgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHwgUHJvbWlzZTxib29sZWFuPiB8IGJvb2xlYW4ge1xuICAgIGNvbnN0IHJlYWRPbmx5ID0gdGhpcy5pc0luSW5pdGlhbE1vZGUoKSAmJiAhdGhpcy5pc0VkaXRhYmxlRGV0YWlsKCk7XG4gICAgY29uc3QgY2FuY2VsbGVkRWRpdGlvbiA9IHRoaXMuaXNJblVwZGF0ZU1vZGUoKSAmJiB0aGlzLl9mb3JtVG9vbGJhciAmJiAhdGhpcy5fZm9ybVRvb2xiYXIuZWRpdE1vZGU7XG4gICAgaWYgKHJlYWRPbmx5IHx8IGNhbmNlbGxlZEVkaXRpb24pIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5jb25maXJtRXhpdCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNvbnN0IGNhbkRpc2NhcmRDaGFuZ2VzID0gISF0aGlzLmNhbkRpc2NhcmRDaGFuZ2VzO1xuICAgIHRoaXMuY2FuRGlzY2FyZENoYW5nZXMgPSBmYWxzZTtcbiAgICByZXR1cm4gY2FuRGlzY2FyZENoYW5nZXMgfHwgdGhpcy5zaG93Q29uZmlybURpc2NhcmRDaGFuZ2VzKCk7XG4gIH1cblxuICBzaG93Q29uZmlybURpc2NhcmRDaGFuZ2VzKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLmZvcm1OYXZpZ2F0aW9uLnNob3dDb25maXJtRGlzY2FyZENoYW5nZXModGhpcy5pZ25vcmVPbkV4aXQpO1xuICB9XG5cbiAgZXhlY3V0ZVRvb2xiYXJBY3Rpb24oYWN0aW9uOiBzdHJpbmcsIG9wdGlvbnM/OiBhbnkpIHtcbiAgICBzd2l0Y2ggKGFjdGlvbikge1xuICAgICAgY2FzZSBDb2Rlcy5CQUNLX0FDVElPTjogdGhpcy5iYWNrKG9wdGlvbnMpOyBicmVhaztcbiAgICAgIGNhc2UgQ29kZXMuQ0xPU0VfREVUQUlMX0FDVElPTjogdGhpcy5jbG9zZURldGFpbChvcHRpb25zKTsgYnJlYWs7XG4gICAgICBjYXNlIENvZGVzLlJFTE9BRF9BQ1RJT046IHRoaXMucmVsb2FkKHRydWUpOyBicmVhaztcbiAgICAgIGNhc2UgQ29kZXMuR09fSU5TRVJUX0FDVElPTjogdGhpcy5nb0luc2VydE1vZGUob3B0aW9ucyk7IGJyZWFrO1xuICAgICAgY2FzZSBDb2Rlcy5JTlNFUlRfQUNUSU9OOiB0aGlzLmluc2VydCgpOyBicmVhaztcbiAgICAgIGNhc2UgQ29kZXMuR09fRURJVF9BQ1RJT046IHRoaXMuZ29FZGl0TW9kZSgpOyBicmVhaztcbiAgICAgIGNhc2UgQ29kZXMuRURJVF9BQ1RJT046IHRoaXMudXBkYXRlKCk7IGJyZWFrO1xuICAgICAgY2FzZSBDb2Rlcy5VTkRPX0xBU1RfQ0hBTkdFX0FDVElPTjogdGhpcy51bmRvKCk7IGJyZWFrO1xuICAgICAgY2FzZSBDb2Rlcy5ERUxFVEVfQUNUSU9OOiByZXR1cm4gdGhpcy5kZWxldGUoKTtcbiAgICAgIGRlZmF1bHQ6IGJyZWFrO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5hZGREZWFjdGl2YXRlR3VhcmQoKTtcblxuICAgIHRoaXMuZm9ybUdyb3VwID0gbmV3IEZvcm1Hcm91cCh7fSk7XG5cbiAgICB0aGlzLmZvcm1OYXZpZ2F0aW9uLmluaXRpYWxpemUoKTtcblxuICAgIHRoaXMuaW5pdGlhbGl6ZSgpO1xuICB9XG5cbiAgYWRkRGVhY3RpdmF0ZUd1YXJkKCkge1xuICAgIGlmICghdGhpcy5hY3RSb3V0ZSB8fCAhdGhpcy5hY3RSb3V0ZS5yb3V0ZUNvbmZpZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmRlYWN0aXZhdGVHdWFyZCA9IHRoaXMuaW5qZWN0b3IuZ2V0KENhbkRlYWN0aXZhdGVGb3JtR3VhcmQpO1xuICAgIHRoaXMuZGVhY3RpdmF0ZUd1YXJkLmFkZEZvcm0odGhpcyk7XG4gICAgY29uc3QgY2FuRGVhY3RpdmF0ZUFycmF5ID0gKHRoaXMuYWN0Um91dGUucm91dGVDb25maWcuY2FuRGVhY3RpdmF0ZSB8fCBbXSk7XG4gICAgbGV0IHByZXZpb3VzbHlBZGRlZCA9IGZhbHNlO1xuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBjYW5EZWFjdGl2YXRlQXJyYXkubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIHByZXZpb3VzbHlBZGRlZCA9ICgoY2FuRGVhY3RpdmF0ZUFycmF5W2ldLmhhc093blByb3BlcnR5KCdDTEFTU05BTUUnKSAmJiBjYW5EZWFjdGl2YXRlQXJyYXlbaV0uQ0xBU1NOQU1FKSA9PT0gT0Zvcm1Db21wb25lbnQuZ3VhcmRDbGFzc05hbWUpO1xuICAgICAgaWYgKHByZXZpb3VzbHlBZGRlZCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFwcmV2aW91c2x5QWRkZWQpIHtcbiAgICAgIGNhbkRlYWN0aXZhdGVBcnJheS5wdXNoKHRoaXMuZGVhY3RpdmF0ZUd1YXJkLmNvbnN0cnVjdG9yKTtcbiAgICAgIHRoaXMuYWN0Um91dGUucm91dGVDb25maWcuY2FuRGVhY3RpdmF0ZSA9IGNhbkRlYWN0aXZhdGVBcnJheTtcbiAgICB9XG4gIH1cblxuICBkZXN0cm95RGVhY3RpdmF0ZUd1YXJkKCkge1xuICAgIHRyeSB7XG4gICAgICBpZiAodGhpcy5oYXNEZWFjdGl2YXRlR3VhcmQoKSkge1xuICAgICAgICB0aGlzLmRlYWN0aXZhdGVHdWFyZC5yZW1vdmVGb3JtKHRoaXMpO1xuICAgICAgICBpZiAoIXRoaXMuZGVhY3RpdmF0ZUd1YXJkLmlzRm9ybXNDYWNoZUVtcHR5KCkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy5hY3RSb3V0ZSB8fCAhdGhpcy5hY3RSb3V0ZS5yb3V0ZUNvbmZpZyB8fCAhdGhpcy5hY3RSb3V0ZS5yb3V0ZUNvbmZpZy5jYW5EZWFjdGl2YXRlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGd1YXJkSW5kZXggPSB0aGlzLmFjdFJvdXRlLnJvdXRlQ29uZmlnLmNhbkRlYWN0aXZhdGUuZmluZEluZGV4KChjYW5EZWFjdGl2YXRlKSA9PiBjYW5EZWFjdGl2YXRlLm5hbWUgPT09IE9Gb3JtQ29tcG9uZW50Lmd1YXJkQ2xhc3NOYW1lKVxuICAgICAgaWYgKGd1YXJkSW5kZXggPj0gMCkge1xuICAgICAgICB0aGlzLmFjdFJvdXRlLnJvdXRlQ29uZmlnLmNhbkRlYWN0aXZhdGUuc3BsaWNlKGd1YXJkSW5kZXgsIDEpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuYWN0Um91dGUucm91dGVDb25maWcuY2FuRGVhY3RpdmF0ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgZGVsZXRlIHRoaXMuYWN0Um91dGUucm91dGVDb25maWcuY2FuRGVhY3RpdmF0ZTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvL1xuICAgIH1cbiAgfVxuXG4gIGhhc0RlYWN0aXZhdGVHdWFyZCgpIHtcbiAgICByZXR1cm4gVXRpbC5pc0RlZmluZWQodGhpcy5kZWFjdGl2YXRlR3VhcmQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFuZ3VsYXIgbWV0aG9kc1xuICAgKi9cblxuICBpbml0aWFsaXplKCkge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIGlmICh0aGlzLmhlYWRlcmFjdGlvbnMgPT09ICdhbGwnKSB7XG4gICAgICB0aGlzLmhlYWRlcmFjdGlvbnMgPSAnUjtJO1U7RCc7XG4gICAgfVxuICAgIHRoaXMua2V5c0FycmF5ID0gVXRpbC5wYXJzZUFycmF5KHRoaXMua2V5cywgdHJ1ZSk7XG4gICAgdGhpcy5jb2xzQXJyYXkgPSBVdGlsLnBhcnNlQXJyYXkodGhpcy5jb2x1bW5zLCB0cnVlKTtcbiAgICBjb25zdCBwa0FycmF5ID0gVXRpbC5wYXJzZUFycmF5KHRoaXMucGFyZW50S2V5cyk7XG4gICAgdGhpcy5fcEtleXNFcXVpdiA9IFV0aWwucGFyc2VQYXJlbnRLZXlzRXF1aXZhbGVuY2VzKHBrQXJyYXkpO1xuICAgIHRoaXMua2V5c1NxbFR5cGVzQXJyYXkgPSBVdGlsLnBhcnNlQXJyYXkodGhpcy5rZXlzU3FsVHlwZXMpO1xuICAgIHRoaXMuc2V0VmFsdWVPcmRlckFycmF5ID0gVXRpbC5wYXJzZUFycmF5KHRoaXMuc2V0VmFsdWVPcmRlcik7XG5cbiAgICB0aGlzLmNvbmZpZ3VyZVNlcnZpY2UoKTtcblxuICAgIHRoaXMuZm9ybU5hdmlnYXRpb24uc3Vic2NyaWJlVG9RdWVyeVBhcmFtcygpO1xuICAgIHRoaXMuZm9ybU5hdmlnYXRpb24uc3Vic2NyaWJlVG9VcmxQYXJhbXMoKTtcbiAgICB0aGlzLmZvcm1OYXZpZ2F0aW9uLnN1YnNjcmliZVRvVXJsKCk7XG4gICAgdGhpcy5mb3JtTmF2aWdhdGlvbi5zdWJzY3JpYmVUb0NhY2hlQ2hhbmdlcygpO1xuXG4gICAgaWYgKHRoaXMubmF2aWdhdGlvblNlcnZpY2UpIHtcbiAgICAgIHRoaXMubmF2aWdhdGlvblNlcnZpY2Uub25WaXNpYmxlQ2hhbmdlKHZpc2libGUgPT4ge1xuICAgICAgICBzZWxmLnNob3dIZWFkZXIgPSB2aXNpYmxlO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5tb2RlID0gT0Zvcm1Db21wb25lbnQuTW9kZSgpLklOSVRJQUw7XG5cbiAgICB0aGlzLnBlcm1pc3Npb25zID0gdGhpcy5wZXJtaXNzaW9uc1NlcnZpY2UuZ2V0Rm9ybVBlcm1pc3Npb25zKHRoaXMub2F0dHIsIHRoaXMuYWN0Um91dGUpO1xuXG4gICAgaWYgKHR5cGVvZiB0aGlzLnF1ZXJ5RmFsbGJhY2tGdW5jdGlvbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpcy5xdWVyeUZhbGxiYWNrRnVuY3Rpb24gPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIC8vIGlmICh0eXBlb2YgdGhpcy5pbnNlcnRGYWxsYmFja0Z1bmN0aW9uICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gICB0aGlzLmluc2VydEZhbGxiYWNrRnVuY3Rpb24gPSB1bmRlZmluZWQ7XG4gICAgLy8gfVxuICAgIC8vIGlmICh0eXBlb2YgdGhpcy51cGRhdGVGYWxsYmFja0Z1bmN0aW9uICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gICB0aGlzLnVwZGF0ZUZhbGxiYWNrRnVuY3Rpb24gPSB1bmRlZmluZWQ7XG4gICAgLy8gfVxuICAgIC8vIGlmICh0eXBlb2YgdGhpcy5kZWxldGVGYWxsYmFja0Z1bmN0aW9uICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gICB0aGlzLmRlbGV0ZUZhbGxiYWNrRnVuY3Rpb24gPSB1bmRlZmluZWQ7XG4gICAgLy8gfVxuICB9XG5cblxuICAvKipcbiAgICogUmVpbml0aWFsaXplIGZvcm0gYWRkaW5nIG9wdGlvbnNcbiAgICogQHBhcmFtIG9wdGlvbnNcbiAgICovXG4gIHJlaW5pdGlhbGl6ZShvcHRpb25zOiBPRm9ybUluaXRpYWxpemF0aW9uT3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zICYmIE9iamVjdC5rZXlzKG9wdGlvbnMpLmxlbmd0aCkge1xuICAgICAgY29uc3QgY2xvbmVkT3B0cyA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMpO1xuICAgICAgZm9yIChjb25zdCBwcm9wIGluIGNsb25lZE9wdHMpIHtcbiAgICAgICAgaWYgKGNsb25lZE9wdHMuaGFzT3duUHJvcGVydHkocHJvcCkpIHtcbiAgICAgICAgICB0aGlzW3Byb3BdID0gY2xvbmVkT3B0c1twcm9wXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5kZXN0cm95KCk7XG4gICAgICB0aGlzLmluaXRpYWxpemUoKTtcbiAgICB9XG4gIH1cblxuICBjb25maWd1cmVTZXJ2aWNlKCkge1xuICAgIGNvbnN0IG1zZ0NvbmZpZ3VyZVNlcnZpY2VBcmdzOiBPQ29uZmlndXJlTWVzc2FnZVNlcnZpY2VBcmdzID0geyBpbmplY3RvcjogdGhpcy5pbmplY3RvciwgYmFzZVNlcnZpY2U6IE9Gb3JtTWVzc2FnZVNlcnZpY2UsIHNlcnZpY2VUeXBlOiB0aGlzLm1lc3NhZ2VTZXJ2aWNlVHlwZSB9O1xuICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlID0gVXRpbC5jb25maWd1cmVNZXNzYWdlU2VydmljZShtc2dDb25maWd1cmVTZXJ2aWNlQXJncyk7XG5cbiAgICBsZXQgY29uZmlndXJlU2VydmljZUFyZ3M6IE9Db25maWd1cmVTZXJ2aWNlQXJncyA9IHsgaW5qZWN0b3I6IHRoaXMuaW5qZWN0b3IsIGJhc2VTZXJ2aWNlOiBPbnRpbWl6ZVNlcnZpY2UsIGVudGl0eTogdGhpcy5lbnRpdHksIHNlcnZpY2U6IHRoaXMuc2VydmljZSwgc2VydmljZVR5cGU6IHRoaXMuc2VydmljZVR5cGUgfTtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQodGhpcy5jb25maWd1cmVTZXJ2aWNlQXJncykpIHtcbiAgICAgIGNvbmZpZ3VyZVNlcnZpY2VBcmdzID0geyAuLi5jb25maWd1cmVTZXJ2aWNlQXJncywgLi4udGhpcy5jb25maWd1cmVTZXJ2aWNlQXJncyB9O1xuICAgIH1cbiAgICB0aGlzLmRhdGFTZXJ2aWNlID0gRmFjdG9yeVV0aWwuY29uZmlndXJlU2VydmljZShjb25maWd1cmVTZXJ2aWNlQXJncyk7XG4gIH1cblxuICBnZXQgbWVzc2FnZVNlcnZpY2UoKTogT0Zvcm1NZXNzYWdlU2VydmljZSB7XG4gICAgcmV0dXJuIHRoaXMuX21lc3NhZ2VTZXJ2aWNlO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5kZXN0cm95KCk7XG4gIH1cblxuICBkZXN0cm95KCkge1xuICAgIGlmICh0aGlzLnJlbG9hZFN0cmVhbVN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5yZWxvYWRTdHJlYW1TdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMucXVlcnlTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMucXVlcnlTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMubG9hZGVyU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLmxvYWRlclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICB0aGlzLmZvcm1DYWNoZS5kZXN0cm95KCk7XG4gICAgdGhpcy5mb3JtTmF2aWdhdGlvbi5kZXN0cm95KCk7XG4gICAgdGhpcy5kZXN0cm95RGVhY3RpdmF0ZUd1YXJkKCk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmRldGVybWluYXRlRm9ybU1vZGUoKTtcbiAgICAgIHRoaXMub25Gb3JtSW5pdFN0cmVhbS5lbWl0KHRydWUpO1xuICAgIH0sIDApO1xuICB9XG5cbiAgLypcbiAgICogSW5uZXIgbWV0aG9kc1xuICAgKi9cblxuICBfc2V0Q29tcG9uZW50c0VkaXRhYmxlKHN0YXRlOiBib29sZWFuKSB7XG4gICAgY29uc3QgY29tcG9uZW50czogYW55ID0gdGhpcy5nZXRDb21wb25lbnRzKCk7XG4gICAgT2JqZWN0LmtleXMoY29tcG9uZW50cykuZm9yRWFjaChjb21wS2V5ID0+IHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGNvbXBvbmVudHNbY29tcEtleV07XG4gICAgICBjb21wb25lbnQuaXNSZWFkT25seSA9ICFzdGF0ZTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIGZvcm0gb3BlcmF0aW9uIG1vZGUuXG4gICAqIEBwYXJhbSBtb2RlIFRoZSBtb2RlIHRvIGJlIGVzdGFibGlzaGVkXG4gICAqL1xuICBzZXRGb3JtTW9kZShtb2RlOiBudW1iZXIpIHtcbiAgICBzd2l0Y2ggKG1vZGUpIHtcbiAgICAgIGNhc2UgT0Zvcm1Db21wb25lbnQuTW9kZSgpLklOSVRJQUw6XG4gICAgICAgIHRoaXMuYmVmb3JlSW5pdGlhbE1vZGUuZW1pdCgpO1xuICAgICAgICB0aGlzLm1vZGUgPSBtb2RlO1xuICAgICAgICBpZiAodGhpcy5fZm9ybVRvb2xiYXIpIHtcbiAgICAgICAgICB0aGlzLl9mb3JtVG9vbGJhci5zZXRJbml0aWFsTW9kZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3NldENvbXBvbmVudHNFZGl0YWJsZSh0aGlzLmlzRWRpdGFibGVEZXRhaWwoKSk7XG4gICAgICAgIHRoaXMub25Gb3JtTW9kZUNoYW5nZS5lbWl0KHRoaXMubW9kZSk7XG4gICAgICAgIHRoaXMub25Jbml0aWFsTW9kZS5lbWl0KCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBPRm9ybUNvbXBvbmVudC5Nb2RlKCkuSU5TRVJUOlxuICAgICAgICB0aGlzLmJlZm9yZUluc2VydE1vZGUuZW1pdCgpO1xuICAgICAgICB0aGlzLm1vZGUgPSBtb2RlO1xuICAgICAgICBpZiAodGhpcy5fZm9ybVRvb2xiYXIpIHtcbiAgICAgICAgICB0aGlzLl9mb3JtVG9vbGJhci5zZXRJbnNlcnRNb2RlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jbGVhckRhdGEoKTtcbiAgICAgICAgdGhpcy5fc2V0Q29tcG9uZW50c0VkaXRhYmxlKHRydWUpO1xuICAgICAgICB0aGlzLm9uRm9ybU1vZGVDaGFuZ2UuZW1pdCh0aGlzLm1vZGUpO1xuICAgICAgICB0aGlzLm9uSW5zZXJ0TW9kZS5lbWl0KCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBPRm9ybUNvbXBvbmVudC5Nb2RlKCkuVVBEQVRFOlxuICAgICAgICB0aGlzLmJlZm9yZVVwZGF0ZU1vZGUuZW1pdCgpO1xuICAgICAgICB0aGlzLm1vZGUgPSBtb2RlO1xuICAgICAgICBpZiAodGhpcy5fZm9ybVRvb2xiYXIpIHtcbiAgICAgICAgICB0aGlzLl9mb3JtVG9vbGJhci5zZXRFZGl0TW9kZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3NldENvbXBvbmVudHNFZGl0YWJsZSh0cnVlKTtcbiAgICAgICAgdGhpcy5vbkZvcm1Nb2RlQ2hhbmdlLmVtaXQodGhpcy5tb2RlKTtcbiAgICAgICAgdGhpcy5vblVwZGF0ZU1vZGUuZW1pdCgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgT0Zvcm1Db21wb25lbnQuTW9kZSgpLlFVRVJZOlxuICAgICAgICBjb25zb2xlLmVycm9yKCdGb3JtIFFVRVJZIG1vZGUgaXMgbm90IGltcGxlbWVudGVkJyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cblxuICAvKipcbiAgICogU2V0cyBuZXcgZGF0YSBmb3IgdGhlIGZvcm1cbiAgICogQHBhcmFtIGRhdGFcbiAgICovXG4gIHNldERhdGEoZGF0YSk6IHZvaWQge1xuICAgIGlmIChVdGlsLmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgIGlmIChkYXRhLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdbT0Zvcm1Db21wb25lbnRdIEZvcm0gZGF0YSBoYXMgbW9yZSB0aGFuIGEgc2luZ2xlIHJlY29yZC4gU3RvcmluZyBlbXB0eSBkYXRhJyk7XG4gICAgICB9XG4gICAgICBjb25zdCBjdXJyZW50RGF0YSA9IGRhdGEubGVuZ3RoID09PSAxID8gZGF0YVswXSA6IHt9O1xuICAgICAgdGhpcy5fdXBkYXRlRm9ybURhdGEodGhpcy50b0Zvcm1WYWx1ZURhdGEoY3VycmVudERhdGEpKTtcbiAgICAgIHRoaXMuX2VtaXREYXRhKGN1cnJlbnREYXRhKTtcbiAgICB9IGVsc2UgaWYgKFV0aWwuaXNPYmplY3QoZGF0YSkpIHtcbiAgICAgIHRoaXMuX3VwZGF0ZUZvcm1EYXRhKHRoaXMudG9Gb3JtVmFsdWVEYXRhKGRhdGEpKTtcbiAgICAgIHRoaXMuX2VtaXREYXRhKGRhdGEpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLndhcm4oJ0Zvcm0gaGFzIHJlY2VpdmVkIG5vdCBzdXBwb3J0ZWQgc2VydmljZSBkYXRhLiBTdXBwb3J0ZWQgZGF0YSBhcmUgQXJyYXkgb3IgT2JqZWN0Jyk7XG4gICAgICB0aGlzLl91cGRhdGVGb3JtRGF0YSh7fSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFVzZSBgc2V0RGF0YShkYXRhKWAgaW5zdGVhZFxuICAgKi9cbiAgX3NldERhdGEoZGF0YSkge1xuICAgIGNvbnNvbGUud2FybignTWV0aG9kIGBPRm9ybUNvbXBvbmVudC5fc2V0RGF0YWAgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXJ1dGUuIFVzZSBgc2V0RGF0YWAgaW5zdGVhZCcpO1xuICAgIHRoaXMuc2V0RGF0YShkYXRhKTtcbiAgfVxuXG4gIF9lbWl0RGF0YShkYXRhKSB7XG4gICAgdGhpcy5vbkRhdGFMb2FkZWQuZW1pdChkYXRhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgYGJhY2soKWAgaW5zdGVhZFxuICAgKi9cbiAgX2JhY2tBY3Rpb24oKSB7XG4gICAgY29uc29sZS53YXJuKCdNZXRob2QgYE9Gb3JtQ29tcG9uZW50Ll9iYWNrQWN0aW9uYCBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1cnV0ZS4gVXNlIGBiYWNrYCBpbnN0ZWFkJyk7XG4gICAgdGhpcy5iYWNrKCk7XG4gIH1cblxuICAvKipcbiAgICogTmF2aWdhdGUgYmFja1xuICAgKi9cbiAgYmFjayhvcHRpb25zPzogYW55KSB7XG4gICAgY29uc3QgYWxsT3B0aW9ucyA9IE9iamVjdC5hc3NpZ24ob3B0aW9ucyB8fCB7fSwgeyBpZ25vcmVOYXZpZ2F0aW9uOiB0aGlzLmlnbm9yZURlZmF1bHROYXZpZ2F0aW9uIH0pO1xuICAgIHRoaXMuZm9ybU5hdmlnYXRpb24ubmF2aWdhdGVCYWNrKGFsbE9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFVzZSBgY2xvc2VEZXRhaWwob3B0aW9ucz86IGFueSlgIGluc3RlYWRcbiAgICovXG4gIF9jbG9zZURldGFpbEFjdGlvbihvcHRpb25zPzogYW55KSB7XG4gICAgY29uc29sZS53YXJuKCdNZXRob2QgYE9Gb3JtQ29tcG9uZW50Ll9jbG9zZURldGFpbEFjdGlvbmAgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXJ1dGUuIFVzZSBgY2xvc2VEZXRhaWxgIGluc3RlYWQnKTtcbiAgICB0aGlzLmNsb3NlRGV0YWlsKG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENsb3NlIGN1cnJlbnQgZGV0YWlsIGZvcm1cbiAgICovXG4gIGNsb3NlRGV0YWlsKG9wdGlvbnM/OiBhbnkpIHtcbiAgICBvcHRpb25zID0gVXRpbC5pc0RlZmluZWQob3B0aW9ucykgPyBvcHRpb25zIDoge307XG4gICAgb3B0aW9ucy5pZ25vcmVOYXZpZ2F0aW9uID0gdGhpcy5pZ25vcmVEZWZhdWx0TmF2aWdhdGlvbjtcbiAgICB0aGlzLmZvcm1OYXZpZ2F0aW9uLmNsb3NlRGV0YWlsQWN0aW9uKG9wdGlvbnMpO1xuICB9XG5cbiAgX3N0YXlJblJlY29yZEFmdGVySW5zZXJ0KGluc2VydGVkS2V5czogb2JqZWN0KSB7XG4gICAgdGhpcy5mb3JtTmF2aWdhdGlvbi5zdGF5SW5SZWNvcmRBZnRlckluc2VydChpbnNlcnRlZEtleXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFVzZSBgcmVsb2FkKHVzZUZpbHRlcjogYm9vbGVhbiA9IGZhbHNlKWAgaW5zdGVhZFxuICAgKi9cbiAgX3JlbG9hZEFjdGlvbih1c2VGaWx0ZXI6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIGNvbnNvbGUud2FybignTWV0aG9kIGBPRm9ybUNvbXBvbmVudC5fcmVsb2FkQWN0aW9uYCBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1cnV0ZS4gVXNlIGByZWxvYWRgIGluc3RlYWQnKTtcbiAgICB0aGlzLnJlbG9hZCh1c2VGaWx0ZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbG9hZCB0aGUgZm9ybSBkYXRhXG4gICAqL1xuICByZWxvYWQodXNlRmlsdGVyOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICBsZXQgcXVlcnlBcmd1bWVudHMgPSB0aGlzLmdldFF1ZXJ5QXJndW1lbnRzKHVzZUZpbHRlcik7XG4gICAgdGhpcy5xdWVyeURhdGEocXVlcnlBcmd1bWVudHMuZmlsdGVyKTtcbiAgfVxuXG4gIGdldFF1ZXJ5QXJndW1lbnRzKHVzZUZpbHRlcjogYm9vbGVhbiwgZmlsdGVyOiBhbnkgPSB7fSk6IE9RdWVyeVBhcmFtcyB7XG4gICAgY29uc3QgYXYgPSB0aGlzLmdldEF0dHJpYnV0ZXNUb1F1ZXJ5KCk7XG4gICAgY29uc3Qgc3FsVHlwZXMgPSB0aGlzLmdldEF0dHJpYnV0ZXNTUUxUeXBlcygpO1xuXG4gICAgaWYgKHVzZUZpbHRlcikge1xuICAgICAgZmlsdGVyID0gdGhpcy5nZXRDdXJyZW50S2V5c1ZhbHVlcygpO1xuICAgIH1cblxuICAgIHJldHVybiB7IGZpbHRlcjogZmlsdGVyLCBjb2x1bW5zOiBhdiwgZW50aXR5OiB0aGlzLmVudGl0eSwgc3FsVHlwZXM6IHNxbFR5cGVzIH07XG4gIH1cblxuICAvKipcbiAgICogTmF2aWdhdGVzIHRvICdpbnNlcnQnIG1vZGVcbiAgICogQGRlcHJlY2F0ZWQgVXNlIGBnb0luc2VydE1vZGUob3B0aW9ucz86IGFueSlgIGluc3RlYWRcbiAgICovXG4gIF9nb0luc2VydE1vZGUob3B0aW9ucz86IGFueSkge1xuICAgIGNvbnNvbGUud2FybignTWV0aG9kIGBPRm9ybUNvbXBvbmVudC5fZ29JbnNlcnRNb2RlYCBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1cnV0ZS4gVXNlIGBnb0luc2VydE1vZGVgIGluc3RlYWQnKTtcbiAgICB0aGlzLmdvSW5zZXJ0TW9kZShvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBOYXZpZ2F0ZXMgdG8gJ2luc2VydCcgbW9kZVxuICAgKi9cbiAgZ29JbnNlcnRNb2RlKG9wdGlvbnM/OiBhbnkpIHtcbiAgICB0aGlzLmZvcm1OYXZpZ2F0aW9uLmdvSW5zZXJ0TW9kZShvcHRpb25zKTtcbiAgfVxuXG4gIF9jbGVhckZvcm1BZnRlckluc2VydCgpIHtcbiAgICB0aGlzLmNsZWFyRGF0YSgpO1xuICAgIHRoaXMuX3NldENvbXBvbmVudHNFZGl0YWJsZSh0cnVlKTtcbiAgfVxuXG4gIF9jbGVhckFuZENsb3NlRm9ybUFmdGVySW5zZXJ0KCkge1xuICAgIGNvbnN0IGNsb3NlT3B0czogRm9ybUxheW91dENsb3NlRGV0YWlsT3B0aW9ucyA9IHsgZXhpdFdpdGhvdXRDb25maXJtYXRpb246IHRydWUgfTtcbiAgICB0aGlzLmNsb3NlRGV0YWlsKGNsb3NlT3B0cyk7XG4gIH1cblxuICAvKipcbiAgICogUGVyZm9ybXMgaW5zZXJ0IGFjdGlvbi5cbiAgICogQGRlcHJlY2F0ZWQgVXNlIGBpbnNlcnQoKWAgaW5zdGVhZFxuICAgKi9cbiAgX2luc2VydEFjdGlvbigpIHtcbiAgICBjb25zb2xlLndhcm4oJ01ldGhvZCBgT0Zvcm1Db21wb25lbnQuX2luc2VydEFjdGlvbmAgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXJ1dGUuIFVzZSBgaW5zZXJ0YCBpbnN0ZWFkJyk7XG4gICAgdGhpcy5pbnNlcnQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQZXJmb3JtcyBpbnNlcnQgYWN0aW9uLlxuICAgKi9cbiAgaW5zZXJ0KCkge1xuICAgIE9iamVjdC5rZXlzKHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzKS5mb3JFYWNoKChjb250cm9sKSA9PiB7XG4gICAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tjb250cm9sXS5tYXJrQXNUb3VjaGVkKCk7XG4gICAgfSk7XG5cbiAgICBpZiAoIXRoaXMuZm9ybUdyb3VwLnZhbGlkKSB7XG4gICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuYWxlcnQodGhpcy5fbWVzc2FnZVNlcnZpY2UuZ2V0VmFsaWRhdGlvbkVycm9yRGlhbG9nVGl0bGUoKSwgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZ2V0VmFsaWRhdGlvbkVycm9yKCkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuZ2V0QXR0cmlidXRlc1ZhbHVlc1RvSW5zZXJ0KCk7XG4gICAgY29uc3Qgc3FsVHlwZXMgPSB0aGlzLmdldEF0dHJpYnV0ZXNTUUxUeXBlcygpO1xuXG4gICAgLy8gdmFsaWRhdGlvbiBiZWZvcmUgaW5zZXJ0XG4gICAgaWYgKCEodGhpcy52YWxpZGF0ZUJlZm9yZUFjdGlvbih2YWx1ZXMpKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMub25CZWZvcmVJbnNlcnQuZW1pdCh2YWx1ZXMpO1xuICAgIHRoaXMuaW5zZXJ0RGF0YSh2YWx1ZXMsIHNxbFR5cGVzKS5zdWJzY3JpYmUocmVzcCA9PiB7XG4gICAgICBzZWxmLnBvc3RDb3JyZWN0SW5zZXJ0KHJlc3ApO1xuICAgICAgc2VsZi5mb3JtQ2FjaGUuc2V0Q2FjaGVTbmFwc2hvdCgpO1xuICAgICAgc2VsZi5tYXJrRm9ybUxheW91dE1hbmFnZXJUb1VwZGF0ZSgpO1xuICAgICAgaWYgKHNlbGYuYWZ0ZXJJbnNlcnRNb2RlID09PSAnZGV0YWlsJykge1xuICAgICAgICBzZWxmLl9zdGF5SW5SZWNvcmRBZnRlckluc2VydChyZXNwKTtcbiAgICAgIH0gZWxzZSBpZiAoc2VsZi5hZnRlckluc2VydE1vZGUgPT09ICduZXcnKSB7XG4gICAgICAgIHRoaXMuX2NsZWFyRm9ybUFmdGVySW5zZXJ0KCk7XG4gICAgICB9IGVsc2UgaWYgKHNlbGYuYWZ0ZXJJbnNlcnRNb2RlID09PSAnY2xvc2UnKSB7XG4gICAgICAgIHRoaXMuX2NsZWFyQW5kQ2xvc2VGb3JtQWZ0ZXJJbnNlcnQoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNlbGYuY2xvc2VEZXRhaWwoKTtcbiAgICAgIH1cbiAgICB9LCBlcnJvciA9PiB7XG4gICAgICBzZWxmLnBvc3RJbmNvcnJlY3RJbnNlcnQoZXJyb3IpO1xuICAgIH0pO1xuICB9XG5cbiAgdmFsaWRhdGVCZWZvcmVBY3Rpb24odmFsdWVzOiBvYmplY3QpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5mb3JtRGF0YVZhbGlkYXRpb25GdW5jdGlvbikge1xuICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5mb3JtRGF0YVZhbGlkYXRpb25GdW5jdGlvbih2YWx1ZXMpO1xuICAgICAgaWYgKCFyZXN1bHQudmFsaWQpIHtcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmFsZXJ0KFxuICAgICAgICAgIHJlc3VsdC50aXRsZSA/PyB0aGlzLl9tZXNzYWdlU2VydmljZS5nZXRWYWxpZGF0aW9uRXJyb3JEaWFsb2dUaXRsZSgpLFxuICAgICAgICAgIHJlc3VsdC5tZXNzYWdlcyA/IHJlc3VsdC5tZXNzYWdlcy5qb2luKCc8L2JyPicpIDogdGhpcy5fbWVzc2FnZVNlcnZpY2UuZ2V0VmFsaWRhdGlvbkVycm9yKCkpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIE5hdmlnYXRlcyB0byAnZWRpdCcgbW9kZVxuICAgKiBAZGVwcmVjYXRlZCBVc2UgYGdvRWRpdE1vZGUoKWAgaW5zdGVhZFxuICAgKi9cbiAgX2dvRWRpdE1vZGUoKSB7XG4gICAgY29uc29sZS53YXJuKCdNZXRob2QgYE9Gb3JtQ29tcG9uZW50Ll9nb0VkaXRNb2RlYCBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1cnV0ZS4gVXNlIGBnb0VkaXRNb2RlYCBpbnN0ZWFkJyk7XG4gICAgdGhpcy5nb0VkaXRNb2RlKCk7XG4gIH1cblxuICAvKipcbiAgICogTmF2aWdhdGVzIHRvICdlZGl0JyBtb2RlXG4gICAqL1xuICBnb0VkaXRNb2RlKCkge1xuICAgIHRoaXMuZm9ybU5hdmlnYXRpb24uZ29FZGl0TW9kZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFBlcmZvcm1zICdlZGl0JyBhY3Rpb25cbiAgICogQGRlcHJlY2F0ZWQgVXNlIGB1cGRhdGUoKWAgaW5zdGVhZFxuICAgKi9cbiAgX2VkaXRBY3Rpb24oKSB7XG4gICAgY29uc29sZS53YXJuKCdNZXRob2QgYE9Gb3JtQ29tcG9uZW50Ll9lZGl0QWN0aW9uYCBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1cnV0ZS4gVXNlIGB1cGRhdGVgIGluc3RlYWQnKTtcbiAgICB0aGlzLnVwZGF0ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFBlcmZvcm1zICdlZGl0JyBhY3Rpb25cbiAgICovXG4gIHVwZGF0ZSgpIHtcbiAgICBPYmplY3Qua2V5cyh0aGlzLmZvcm1Hcm91cC5jb250cm9scykuZm9yRWFjaChcbiAgICAgIChjb250cm9sKSA9PiB7XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2NvbnRyb2xdLm1hcmtBc1RvdWNoZWQoKTtcbiAgICAgIH1cbiAgICApO1xuXG4gICAgaWYgKCF0aGlzLmZvcm1Hcm91cC52YWxpZCkge1xuICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmFsZXJ0KCdFUlJPUicsIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmdldFZhbGlkYXRpb25FcnJvcigpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyByZXRyaWV2aW5nIGtleXMuLi5cbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLmdldEtleXNWYWx1ZXMoKTtcblxuICAgIC8vIHJldHJpZXZpbmcgdmFsdWVzIHRvIHVwZGF0ZS4uLlxuICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuZ2V0QXR0cmlidXRlc1ZhbHVlc1RvVXBkYXRlKCk7XG4gICAgY29uc3Qgc3FsVHlwZXMgPSB0aGlzLmdldEF0dHJpYnV0ZXNTUUxUeXBlcygpO1xuXG4gICAgaWYgKE9iamVjdC5rZXlzKHZhbHVlcykubGVuZ3RoID09PSAwKSB7XG4gICAgICAvLyBOb3RoaW5nIHRvIHVwZGF0ZVxuICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmFsZXJ0KCdJTkZPJywgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZ2V0Tm90aGluZ1RvVXBkYXRlTWVzc2FnZSgpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyB2YWxpZGF0aW9uIGJlZm9yZSB1cGRhdGVcbiAgICBpZiAoISh0aGlzLnZhbGlkYXRlQmVmb3JlQWN0aW9uKHZhbHVlcykpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5vbkJlZm9yZVVwZGF0ZS5lbWl0KHZhbHVlcyk7XG4gICAgLy8gaW52b2tlIHVwZGF0ZSBtZXRob2QuLi5cbiAgICB0aGlzLnVwZGF0ZURhdGEoZmlsdGVyLCB2YWx1ZXMsIHNxbFR5cGVzKS5zdWJzY3JpYmUocmVzcCA9PiB7XG4gICAgICBzZWxmLnBvc3RDb3JyZWN0VXBkYXRlKHJlc3ApO1xuICAgICAgc2VsZi5mb3JtQ2FjaGUuc2V0Q2FjaGVTbmFwc2hvdCgpO1xuICAgICAgc2VsZi5tYXJrRm9ybUxheW91dE1hbmFnZXJUb1VwZGF0ZSgpO1xuICAgICAgaWYgKHNlbGYuc3RheUluUmVjb3JkQWZ0ZXJFZGl0KSB7XG4gICAgICAgIHNlbGYucmVsb2FkKHRydWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2VsZi5jbG9zZURldGFpbCgpO1xuICAgICAgfVxuICAgIH0sIGVycm9yID0+IHtcbiAgICAgIHNlbGYucG9zdEluY29ycmVjdFVwZGF0ZShlcnJvcik7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUGVyZm9ybXMgJ2RlbGV0ZScgYWN0aW9uXG4gICAqIEBkZXByZWNhdGVkIFVzZSBgZGVsZXRlKClgIGluc3RlYWRcbiAgICovXG4gIF9kZWxldGVBY3Rpb24oKSB7XG4gICAgY29uc29sZS53YXJuKCdNZXRob2QgYE9Gb3JtQ29tcG9uZW50Ll9kZWxldGVBY3Rpb25gIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnVydXRlLiBVc2UgYGRlbGV0ZWAgaW5zdGVhZCcpO1xuICAgIHJldHVybiB0aGlzLmRlbGV0ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFBlcmZvcm1zICdkZWxldGUnIGFjdGlvblxuICAgKi9cbiAgZGVsZXRlKCkge1xuICAgIGNvbnN0IGZpbHRlciA9IHRoaXMuZ2V0S2V5c1ZhbHVlcygpO1xuICAgIHRoaXMub25CZWZvcmVEZWxldGUuZW1pdChmaWx0ZXIpO1xuICAgIHJldHVybiB0aGlzLmRlbGV0ZURhdGEoZmlsdGVyKTtcbiAgfVxuXG5cbiAgcXVlcnlEYXRhKGZpbHRlcjogYW55KSB7XG4gICAgaWYgKCFVdGlsLmlzRGVmaW5lZCh0aGlzLmRhdGFTZXJ2aWNlKSkge1xuICAgICAgY29uc29sZS53YXJuKCdPRm9ybUNvbXBvbmVudDogbm8gc2VydmljZSBjb25maWd1cmVkISBhYm9ydGluZyBxdWVyeScpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghVXRpbC5pc0RlZmluZWQoZmlsdGVyKSB8fCBPYmplY3Qua2V5cyhmaWx0ZXIpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgY29uc29sZS53YXJuKCdPRm9ybUNvbXBvbmVudDogbm8gZmlsdGVyIGNvbmZpZ3VyZWQhIGFib3J0aW5nIHF1ZXJ5Jyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuZm9ybUNhY2hlLnJlc3RhcnRDYWNoZSgpO1xuICAgIHRoaXMuY2xlYXJDb21wb25lbnRzT2xkVmFsdWUoKTtcbiAgICBpZiAodGhpcy5xdWVyeVN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5xdWVyeVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5sb2FkZXJTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMubG9hZGVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIHRoaXMubG9hZGVyU3Vic2NyaXB0aW9uID0gdGhpcy5sb2FkKCk7XG5cbiAgICBjb25zdCBxdWVyeVBhcmFtZXRlciA9IHRoaXMuZ2V0UXVlcnlBcmd1bWVudHMoZmFsc2UsIGZpbHRlcik7XG5cbiAgICB0aGlzLnF1ZXJ5U3Vic2NyaXB0aW9uID0gdGhpcy5kYXRhU2VydmljZVt0aGlzLnF1ZXJ5TWV0aG9kXSguLi50aGlzLmRhdGFTZXJ2aWNlLnJlcXVlc3RBcmd1bWVudEFkYXB0ZXIucGFyc2VRdWVyeVBhcmFtZXRlcnMocXVlcnlQYXJhbWV0ZXIpKVxuICAgICAgLnN1YnNjcmliZSgocmVzcDogU2VydmljZVJlc3BvbnNlKSA9PiB7XG4gICAgICAgIGlmIChyZXNwLmlzU3VjY2Vzc2Z1bCgpKSB7XG4gICAgICAgICAgdGhpcy5zZXREYXRhKHJlc3AuZGF0YSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5fdXBkYXRlRm9ybURhdGEoe30pO1xuICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5hbGVydCgnRVJST1InLCB0aGlzLl9tZXNzYWdlU2VydmljZS5nZXRRdWVyeUVycm9yTWVzc2FnZSgpKTtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFUlJPUjogJyArIHJlc3AubWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5sb2FkZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgIH0sIGVyciA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgdGhpcy5fdXBkYXRlRm9ybURhdGEoe30pO1xuICAgICAgICBpZiAoVXRpbC5pc0RlZmluZWQodGhpcy5xdWVyeUZhbGxiYWNrRnVuY3Rpb24pKSB7XG4gICAgICAgICAgdGhpcy5xdWVyeUZhbGxiYWNrRnVuY3Rpb24oZXJyKTtcbiAgICAgICAgfSBlbHNlIGlmIChlcnIgJiYgZXJyLnN0YXR1c1RleHQpIHtcbiAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuYWxlcnQoJ0VSUk9SJywgZXJyLnN0YXR1c1RleHQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5hbGVydCgnRVJST1InLCB0aGlzLl9tZXNzYWdlU2VydmljZS5nZXRRdWVyeUVycm9yTWVzc2FnZSgpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmxvYWRlclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgfSk7XG4gIH1cblxuICBnZXRBdHRyaWJ1dGVzVG9RdWVyeSgpOiBBcnJheTxhbnk+IHtcbiAgICBsZXQgYXR0cmlidXRlczogQXJyYXk8YW55PiA9IFtdO1xuICAgIC8vIGFkZCBmb3JtIGtleXMuLi5cbiAgICBpZiAodGhpcy5rZXlzQXJyYXkgJiYgdGhpcy5rZXlzQXJyYXkubGVuZ3RoID4gMCkge1xuICAgICAgYXR0cmlidXRlcy5wdXNoKC4uLnRoaXMua2V5c0FycmF5KTtcbiAgICB9XG4gICAgY29uc3QgY29tcG9uZW50czogYW55ID0gdGhpcy5nZXRDb21wb25lbnRzKCk7XG4gICAgLy8gYWRkIG9ubHkgdGhlIGZpZWxkcyBjb250YWluZWQgaW50byB0aGUgZm9ybS4uLlxuICAgIE9iamVjdC5rZXlzKGNvbXBvbmVudHMpLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICBpZiAoYXR0cmlidXRlcy5pbmRleE9mKGl0ZW0pIDwgMCAmJlxuICAgICAgICBjb21wb25lbnRzW2l0ZW1dLmlzQXV0b21hdGljUmVnaXN0ZXJpbmcoKSAmJiBjb21wb25lbnRzW2l0ZW1dLmlzQXV0b21hdGljQmluZGluZygpKSB7XG4gICAgICAgIGF0dHJpYnV0ZXMucHVzaChpdGVtKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIGFkZCBmaWVsZHMgc3RvcmVkIGludG8gZm9ybSBjYWNoZS4uLlxuICAgIGNvbnN0IGRhdGFDYWNoZSA9IHRoaXMuZm9ybUNhY2hlLmdldERhdGFDYWNoZSgpO1xuICAgIGlmIChkYXRhQ2FjaGUpIHtcbiAgICAgIE9iamVjdC5rZXlzKGRhdGFDYWNoZSkuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgaWYgKGl0ZW0gIT09IHVuZGVmaW5lZCAmJiBhdHRyaWJ1dGVzLmluZGV4T2YoaXRlbSkgPT09IC0xKSB7XG4gICAgICAgICAgYXR0cmlidXRlcy5wdXNoKGl0ZW0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXMuY29uY2F0KHRoaXMuY29sc0FycmF5LmZpbHRlcihjb2wgPT4gYXR0cmlidXRlcy5pbmRleE9mKGNvbCkgPCAwKSk7XG4gICAgcmV0dXJuIGF0dHJpYnV0ZXM7XG4gIH1cblxuXG4gIC8qKlxuICAgKiBBbGxvdyB0byBtYW5hZ2UgdGhlIGNhbGwgdG8gdGhlIGluc2VydCBzZXJ2aWNlXG4gICAqIEBwYXJhbSB2YWx1ZXNcbiAgICogQHBhcmFtIFtzcWxUeXBlc11cbiAgICogQHJldHVybnMgT2JzZXJ2YWJsZTxhbnk+XG4gICAqL1xuICBpbnNlcnREYXRhKHZhbHVlcywgc3FsVHlwZXM/OiBvYmplY3QpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGlmICh0aGlzLmxvYWRlclN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5sb2FkZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgdGhpcy5sb2FkZXJTdWJzY3JpcHRpb24gPSB0aGlzLmxvYWQoKTtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBjb25zdCBvYnNlcnZhYmxlID0gbmV3IE9ic2VydmFibGUob2JzZXJ2ZXIgPT4ge1xuICAgICAgdGhpcy5kYXRhU2VydmljZVt0aGlzLmluc2VydE1ldGhvZF0odmFsdWVzLCB0aGlzLmVudGl0eSwgc3FsVHlwZXMpLnN1YnNjcmliZShcbiAgICAgICAgcmVzcCA9PiB7XG4gICAgICAgICAgaWYgKHJlc3AuaXNTdWNjZXNzZnVsKCkpIHtcbiAgICAgICAgICAgIG9ic2VydmVyLm5leHQocmVzcC5kYXRhKTtcbiAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKHJlc3AubWVzc2FnZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHNlbGYubG9hZGVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVyciA9PiB7XG4gICAgICAgICAgb2JzZXJ2ZXIuZXJyb3IoZXJyKTtcbiAgICAgICAgICBzZWxmLmxvYWRlclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gb2JzZXJ2YWJsZTtcbiAgfVxuXG4gIGdldEF0dHJpYnV0ZXNWYWx1ZXNUb0luc2VydCgpOiBvYmplY3Qge1xuICAgIGNvbnN0IGF0dHJWYWx1ZXMgPSB7fTtcbiAgICBpZiAodGhpcy5mb3JtUGFyZW50S2V5c1ZhbHVlcykge1xuICAgICAgT2JqZWN0LmFzc2lnbihhdHRyVmFsdWVzLCB0aGlzLmZvcm1QYXJlbnRLZXlzVmFsdWVzKTtcbiAgICB9XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oYXR0clZhbHVlcywgdGhpcy5nZXRSZWdpc3RlcmVkRmllbGRzVmFsdWVzKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gb2JqZWN0IHdpdGggdGhlIHNxbCB0eXBlcyBmcm9tIHRoZSBmb3JtIGNvbXBvbmVudHMgYW5kIHRoZSBmb3JtIGtleXNcbiAgICovXG4gIHB1YmxpYyBnZXRBdHRyaWJ1dGVzU1FMVHlwZXMoKTogb2JqZWN0IHtcbiAgICBjb25zdCB0eXBlczogb2JqZWN0ID0ge307XG4gICAgLy8gQWRkIGZvcm0ga2V5cyBzcWwgdHlwZXNcbiAgICB0aGlzLmtleXNTcWxUeXBlc0FycmF5LmZvckVhY2goKGtzdCwgaSkgPT4gdHlwZXNbdGhpcy5rZXlzQXJyYXlbaV1dID0gU1FMVHlwZXMuZ2V0U1FMVHlwZVZhbHVlKGtzdCkpO1xuICAgIC8vIEFkZCBmb3JtIGNvbXBvbmVudHMgc3FsIHR5cGVzXG4gICAgaWYgKHRoaXMuX2NvbXBTUUxUeXBlcyAmJiBPYmplY3Qua2V5cyh0aGlzLl9jb21wU1FMVHlwZXMpLmxlbmd0aCA+IDApIHtcbiAgICAgIE9iamVjdC5hc3NpZ24odHlwZXMsIHRoaXMuX2NvbXBTUUxUeXBlcyk7XG4gICAgfVxuICAgIHJldHVybiB0eXBlcztcbiAgfVxuXG5cbiAgLyoqXG4gICAqIEFsbG93IHRvIG1hbmFnZSB0aGUgY2FsbCB0byB0aGUgdXBkYXRlIHNlcnZpY2VcbiAgICogQHBhcmFtIGZpbHRlclxuICAgKiBAcGFyYW0gdmFsdWVzXG4gICAqIEBwYXJhbSBbc3FsVHlwZXNdXG4gICAqIEByZXR1cm5zICBPYnNlcnZhYmxlPGFueT5cbiAgICovXG4gIHVwZGF0ZURhdGEoZmlsdGVyLCB2YWx1ZXMsIHNxbFR5cGVzPzogb2JqZWN0KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBpZiAodGhpcy5sb2FkZXJTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMubG9hZGVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIHRoaXMubG9hZGVyU3Vic2NyaXB0aW9uID0gdGhpcy5sb2FkKCk7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgY29uc3Qgb2JzZXJ2YWJsZSA9IG5ldyBPYnNlcnZhYmxlKG9ic2VydmVyID0+IHtcbiAgICAgIHRoaXMuZGF0YVNlcnZpY2VbdGhpcy51cGRhdGVNZXRob2RdKGZpbHRlciwgdmFsdWVzLCB0aGlzLmVudGl0eSwgc3FsVHlwZXMpLnN1YnNjcmliZShcbiAgICAgICAgcmVzcCA9PiB7XG4gICAgICAgICAgaWYgKHJlc3AuaXNTdWNjZXNzZnVsKCkpIHtcbiAgICAgICAgICAgIG9ic2VydmVyLm5leHQocmVzcC5kYXRhKTtcbiAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKHJlc3AubWVzc2FnZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHNlbGYubG9hZGVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVyciA9PiB7XG4gICAgICAgICAgb2JzZXJ2ZXIuZXJyb3IoZXJyKTtcbiAgICAgICAgICBzZWxmLmxvYWRlclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gb2JzZXJ2YWJsZTtcbiAgfVxuXG4gIGdldEF0dHJpYnV0ZXNWYWx1ZXNUb1VwZGF0ZSgpOiBvYmplY3Qge1xuICAgIGNvbnN0IHZhbHVlcyA9IHt9O1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIGNvbnN0IGNoYW5nZWRBdHRycyA9IHRoaXMuZm9ybUNhY2hlLmdldENoYW5nZWRGb3JtQ29udHJvbHNBdHRyKCk7XG4gICAgT2JqZWN0LmtleXModGhpcy5mb3JtR3JvdXAuY29udHJvbHMpLmZpbHRlcihjb250cm9sTmFtZSA9PlxuICAgICAgc2VsZi5pZ25vcmVGb3JtQ2FjaGVLZXlzLmluZGV4T2YoY29udHJvbE5hbWUpID09PSAtMSAmJlxuICAgICAgY2hhbmdlZEF0dHJzLmluZGV4T2YoY29udHJvbE5hbWUpICE9PSAtMVxuICAgICkuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgY29uc3QgY29udHJvbCA9IHNlbGYuZm9ybUdyb3VwLmNvbnRyb2xzW2l0ZW1dO1xuICAgICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBPRm9ybUNvbnRyb2wpIHtcbiAgICAgICAgY29uc3QgY29tcCA9IHRoaXMuZ2V0Q29tcG9uZW50QnlBdHRyKGl0ZW0pO1xuICAgICAgICAvKiogUGFyc2UgdGhlIHZhbHVlcyDigIvigIt0byB0aGUgZm9ybWF0IGFjY29yZGluZyB0byB0aGVpciBzcWx0eXBlIHRvIHNlbmQgdG8gdGhlIHVwZGF0ZSByZXF1ZXN0ICovXG4gICAgICAgIHZhbHVlc1tpdGVtXSA9IFNRTFR5cGVzLnBhcnNlVXNpbmdTUUxUeXBlKGNvbnRyb2wuZ2V0VmFsdWUoKSwgU1FMVHlwZXMuZ2V0U1FMVHlwZUtleShjb21wLmdldFNRTFR5cGUoKSkpOyA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWx1ZXNbaXRlbV0gPSBjb250cm9sLnZhbHVlO1xuICAgICAgfVxuICAgICAgaWYgKHZhbHVlc1tpdGVtXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHZhbHVlc1tpdGVtXSA9IG51bGw7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHZhbHVlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBBbGxvdyB0byBtYW5hZ2UgdGhlIGNhbGwgdG8gdGhlIGRlbGV0ZSBzZXJ2aWNlXG4gICAqIEBwYXJhbSBmaWx0ZXJcbiAgICogQHJldHVybnMgT2JzZXJ2YWJsZTxhbnk+XG4gICAqL1xuICBkZWxldGVEYXRhKGZpbHRlcjogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBpZiAodGhpcy5sb2FkZXJTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMubG9hZGVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIHRoaXMubG9hZGVyU3Vic2NyaXB0aW9uID0gdGhpcy5sb2FkKCk7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgY29uc3Qgc3FsVHlwZXMgPSB0aGlzLmdldEF0dHJpYnV0ZXNTUUxUeXBlcygpO1xuICAgIGNvbnN0IG9ic2VydmFibGUgPSBuZXcgT2JzZXJ2YWJsZShvYnNlcnZlciA9PiB7XG4gICAgICB0aGlzLmNhbkRpc2NhcmRDaGFuZ2VzID0gdHJ1ZTtcbiAgICAgIHRoaXMuZGF0YVNlcnZpY2VbdGhpcy5kZWxldGVNZXRob2RdKGZpbHRlciwgdGhpcy5lbnRpdHksIHNxbFR5cGVzKS5zdWJzY3JpYmUoXG4gICAgICAgIHJlc3AgPT4ge1xuICAgICAgICAgIGlmIChyZXNwLmlzU3VjY2Vzc2Z1bCgpKSB7XG4gICAgICAgICAgICBzZWxmLmZvcm1DYWNoZS5zZXRDYWNoZVNuYXBzaG90KCk7XG4gICAgICAgICAgICBzZWxmLm1hcmtGb3JtTGF5b3V0TWFuYWdlclRvVXBkYXRlKCk7XG4gICAgICAgICAgICBzZWxmLnBvc3RDb3JyZWN0RGVsZXRlKHJlc3ApO1xuICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChyZXNwLmRhdGEpO1xuICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2VsZi5wb3N0SW5jb3JyZWN0RGVsZXRlKHJlc3ApO1xuICAgICAgICAgICAgb2JzZXJ2ZXIuZXJyb3IocmVzcC5tZXNzYWdlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgc2VsZi5sb2FkZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyID0+IHtcbiAgICAgICAgICBzZWxmLnBvc3RJbmNvcnJlY3REZWxldGUoZXJyKTtcbiAgICAgICAgICBvYnNlcnZlci5lcnJvcihlcnIpO1xuICAgICAgICAgIHNlbGYubG9hZGVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiBvYnNlcnZhYmxlO1xuICB9XG5cbiAgdG9KU09ORGF0YShkYXRhKSB7XG4gICAgaWYgKCFkYXRhKSB7XG4gICAgICBkYXRhID0ge307XG4gICAgfVxuICAgIGNvbnN0IHZhbHVlRGF0YSA9IHt9O1xuICAgIE9iamVjdC5rZXlzKGRhdGEpLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgIHZhbHVlRGF0YVtpdGVtXSA9IGRhdGFbaXRlbV0udmFsdWU7XG4gICAgfSk7XG4gICAgcmV0dXJuIHZhbHVlRGF0YTtcbiAgfVxuXG4gIHRvRm9ybVZhbHVlRGF0YShkYXRhKSB7XG4gICAgaWYgKGRhdGEgJiYgVXRpbC5pc0FycmF5KGRhdGEpKSB7XG4gICAgICBjb25zdCB2YWx1ZURhdGE6IEFycmF5PG9iamVjdD4gPSBbXTtcbiAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgZGF0YS5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICB2YWx1ZURhdGEucHVzaChzZWxmLm9iamVjdFRvRm9ybVZhbHVlRGF0YShpdGVtKSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiB2YWx1ZURhdGE7XG4gICAgfSBlbHNlIGlmIChkYXRhICYmIFV0aWwuaXNPYmplY3QoZGF0YSkpIHtcbiAgICAgIHJldHVybiB0aGlzLm9iamVjdFRvRm9ybVZhbHVlRGF0YShkYXRhKTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGtleXMgdmFsdWVzXG4gICAqIEByZXR1cm5zIGtleXNcbiAgICovXG4gIGdldEtleXNWYWx1ZXMoKTogYW55IHtcbiAgICBjb25zdCBmaWx0ZXIgPSB7fTtcbiAgICBjb25zdCBjdXJyZW50UmVjb3JkID0gdGhpcy5mb3JtRGF0YTtcbiAgICBpZiAoIXRoaXMua2V5c0FycmF5KSB7XG4gICAgICByZXR1cm4gZmlsdGVyO1xuICAgIH1cbiAgICB0aGlzLmtleXNBcnJheS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBpZiAoY3VycmVudFJlY29yZFtrZXldICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IGN1cnJlbnREYXRhID0gY3VycmVudFJlY29yZFtrZXldO1xuICAgICAgICBpZiAoY3VycmVudERhdGEgaW5zdGFuY2VvZiBPRm9ybVZhbHVlKSB7XG4gICAgICAgICAgY3VycmVudERhdGEgPSBjdXJyZW50RGF0YS52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBmaWx0ZXJba2V5XSA9IGN1cnJlbnREYXRhO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBmaWx0ZXI7XG4gIH1cblxuICBpc0luUXVlcnlNb2RlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm1vZGUgPT09IE9Gb3JtQ29tcG9uZW50Lk1vZGUoKS5RVUVSWTtcbiAgfVxuXG4gIGlzSW5JbnNlcnRNb2RlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm1vZGUgPT09IE9Gb3JtQ29tcG9uZW50Lk1vZGUoKS5JTlNFUlQ7XG4gIH1cblxuICBpc0luVXBkYXRlTW9kZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlID09PSBPRm9ybUNvbXBvbmVudC5Nb2RlKCkuVVBEQVRFO1xuICB9XG5cbiAgaXNJbkluaXRpYWxNb2RlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm1vZGUgPT09IE9Gb3JtQ29tcG9uZW50Lk1vZGUoKS5JTklUSUFMO1xuICB9XG5cbiAgc2V0UXVlcnlNb2RlKCkge1xuICAgIHRoaXMuc2V0Rm9ybU1vZGUoT0Zvcm1Db21wb25lbnQuTW9kZSgpLlFVRVJZKTtcbiAgfVxuXG4gIHNldEluc2VydE1vZGUoKSB7XG4gICAgdGhpcy5zZXRGb3JtTW9kZShPRm9ybUNvbXBvbmVudC5Nb2RlKCkuSU5TRVJUKTtcbiAgfVxuXG4gIHNldFVwZGF0ZU1vZGUoKSB7XG4gICAgdGhpcy5zZXRGb3JtTW9kZShPRm9ybUNvbXBvbmVudC5Nb2RlKCkuVVBEQVRFKTtcbiAgfVxuXG4gIHNldEluaXRpYWxNb2RlKCkge1xuICAgIHRoaXMuc2V0Rm9ybU1vZGUoT0Zvcm1Db21wb25lbnQuTW9kZSgpLklOSVRJQUwpO1xuICB9XG5cbiAgcmVnaXN0ZXJEeW5hbWljRm9ybUNvbXBvbmVudChkeW5hbWljRm9ybSkge1xuICAgIGlmICghVXRpbC5pc0RlZmluZWQoZHluYW1pY0Zvcm0pKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIHRoaXMuZHluYW1pY0Zvcm1TdWJzY3JpcHRpb24gPSBkeW5hbWljRm9ybS5yZW5kZXIuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICBpZiAocmVzKSB7XG4gICAgICAgIHNlbGYucmVmcmVzaENvbXBvbmVudHNFZGl0YWJsZVN0YXRlKCk7XG4gICAgICAgIGlmICghc2VsZi5pc0luSW5zZXJ0TW9kZSgpICYmIHNlbGYucXVlcnlPbkluaXQpIHtcbiAgICAgICAgICBzZWxmLnJlbG9hZCh0cnVlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2VsZi5mb3JtUGFyZW50S2V5c1ZhbHVlcykge1xuICAgICAgICAgIE9iamVjdC5rZXlzKHNlbGYuZm9ybVBhcmVudEtleXNWYWx1ZXMpLmZvckVhY2gocGFyZW50S2V5ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gc2VsZi5mb3JtUGFyZW50S2V5c1ZhbHVlc1twYXJlbnRLZXldO1xuICAgICAgICAgICAgY29uc3QgY29tcCA9IHNlbGYuZ2V0RmllbGRSZWZlcmVuY2UocGFyZW50S2V5KTtcbiAgICAgICAgICAgIGlmIChVdGlsLmlzRm9ybURhdGFDb21wb25lbnQoY29tcCkgJiYgY29tcC5pc0F1dG9tYXRpY0JpbmRpbmcoKSkge1xuICAgICAgICAgICAgICBjb21wLnNldFZhbHVlKHZhbHVlLCB7XG4gICAgICAgICAgICAgICAgZW1pdE1vZGVsVG9WaWV3Q2hhbmdlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBlbWl0RXZlbnQ6IGZhbHNlXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICB1bnJlZ2lzdGVyRHluYW1pY0Zvcm1Db21wb25lbnQoZHluYW1pY0Zvcm0pIHtcbiAgICBpZiAoZHluYW1pY0Zvcm0gJiYgdGhpcy5keW5hbWljRm9ybVN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5keW5hbWljRm9ybVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIGdldFJlcXVpcmVkQ29tcG9uZW50cygpOiBvYmplY3Qge1xuICAgIGNvbnN0IHJlcXVpcmVkQ29tcG9udGVudHM6IG9iamVjdCA9IHt9O1xuICAgIGNvbnN0IGNvbXBvbmVudHMgPSB0aGlzLmdldENvbXBvbmVudHMoKTtcbiAgICBpZiAoY29tcG9uZW50cykge1xuICAgICAgT2JqZWN0LmtleXMoY29tcG9uZW50cykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICBjb25zdCBjb21wID0gY29tcG9uZW50c1trZXldO1xuICAgICAgICBjb25zdCBhdHRyID0gY29tcC5nZXRBdHRyaWJ1dGUoKTtcbiAgICAgICAgaWYgKChjb21wIGFzIGFueSkuaXNSZXF1aXJlZCAmJiBhdHRyICYmIGF0dHIubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHJlcXVpcmVkQ29tcG9udGVudHNbYXR0cl0gPSBjb21wO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcXVpcmVkQ29tcG9udGVudHM7XG4gIH1cblxuICBnZXQgbGF5b3V0RGlyZWN0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2xheW91dERpcmVjdGlvbjtcbiAgfVxuXG4gIHNldCBsYXlvdXREaXJlY3Rpb24odmFsOiBzdHJpbmcpIHtcbiAgICBjb25zdCBwYXJzZWRWYWwgPSAodmFsIHx8ICcnKS50b0xvd2VyQ2FzZSgpO1xuICAgIHRoaXMuX2xheW91dERpcmVjdGlvbiA9IFsncm93JywgJ2NvbHVtbicsICdyb3ctcmV2ZXJzZScsICdjb2x1bW4tcmV2ZXJzZSddLmluZGV4T2YocGFyc2VkVmFsKSAhPT0gLTEgPyBwYXJzZWRWYWwgOiBPRm9ybUNvbXBvbmVudC5ERUZBVUxUX0xBWU9VVF9ESVJFQ1RJT047XG4gIH1cblxuICBnZXQgbGF5b3V0QWxpZ24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fbGF5b3V0QWxpZ247XG4gIH1cblxuICBzZXQgbGF5b3V0QWxpZ24odmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9sYXlvdXRBbGlnbiA9IHZhbDtcbiAgfVxuXG4gIGdldCBsYXlvdXRDbGFzc2VzKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBkaXJDbGFzcyA9IHRoaXMuX2xheW91dERpcmVjdGlvbiA9PT0gJ2NvbHVtbicgPyAnby1mbGV4LWNvbHVtbicgOiAnby1mbGV4LXJvdyc7XG4gICAgY29uc3QgYWxpZ25NYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICAnc3RhcnQgc3RyZXRjaCc6ICdvLWxheW91dC1hbGlnbi1zdGFydC1zdHJldGNoJyxcbiAgICAgICdzdGFydCBjZW50ZXInOiAnby1sYXlvdXQtYWxpZ24tc3RhcnQtY2VudGVyJyxcbiAgICAgICdzdGFydCBzdGFydCc6ICdvLWxheW91dC1hbGlnbi1zdGFydC1zdGFydCcsXG4gICAgICAnY2VudGVyIGNlbnRlcic6ICdvLWxheW91dC1hbGlnbi1jZW50ZXItY2VudGVyJyxcbiAgICAgICdjZW50ZXIgc3RyZXRjaCc6ICdvLWxheW91dC1hbGlnbi1jZW50ZXItc3RyZXRjaCcsXG4gICAgICAnY2VudGVyIHN0YXJ0JzogJ28tbGF5b3V0LWFsaWduLWNlbnRlci1zdGFydCcsXG4gICAgICAnY2VudGVyIGVuZCc6ICdvLWxheW91dC1hbGlnbi1jZW50ZXItZW5kJyxcbiAgICAgICdlbmQgY2VudGVyJzogJ28tbGF5b3V0LWFsaWduLWVuZC1jZW50ZXInLFxuICAgICAgJ2VuZCBzdHJldGNoJzogJ28tbGF5b3V0LWFsaWduLWVuZC1zdHJldGNoJyxcbiAgICAgICdzcGFjZS1iZXR3ZWVuIGNlbnRlcic6ICdvLWxheW91dC1hbGlnbi1zYi1jZW50ZXInLFxuICAgICAgJ3NwYWNlLWJldHdlZW4gc3RyZXRjaCc6ICdvLWxheW91dC1hbGlnbi1zYi1zdHJldGNoJyxcbiAgICAgICdzcGFjZS1iZXR3ZWVuIHN0YXJ0JzogJ28tbGF5b3V0LWFsaWduLXNiLXN0YXJ0JyxcbiAgICAgICdzcGFjZS1hcm91bmQgY2VudGVyJzogJ28tbGF5b3V0LWFsaWduLXNhLWNlbnRlcicsXG4gICAgfTtcbiAgICBjb25zdCBhbGlnbkNsYXNzID0gYWxpZ25NYXBbdGhpcy5fbGF5b3V0QWxpZ25dIHx8ICcnO1xuICAgIHJldHVybiBhbGlnbkNsYXNzID8gW2RpckNsYXNzLCBhbGlnbkNsYXNzXSA6IFtkaXJDbGFzc107XG4gIH1cblxuICBnZXQgc2hvd0Zsb2F0aW5nVG9vbGJhcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zaG93SGVhZGVyICYmIHRoaXMuaGVhZGVyTW9kZSA9PT0gJ2Zsb2F0aW5nJztcbiAgfVxuXG4gIGdldCBzaG93Tm90RmxvYXRpbmdUb29sYmFyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNob3dIZWFkZXIgJiYgdGhpcy5oZWFkZXJNb2RlICE9PSAnZmxvYXRpbmcnO1xuICB9XG5cbiAgaXNFZGl0YWJsZURldGFpbCgpIHtcbiAgICByZXR1cm4gdGhpcy5lZGl0YWJsZURldGFpbDtcbiAgfVxuXG4gIGlzSW5pdGlhbFN0YXRlQ2hhbmdlZChpZ25vcmVBdHRyczogc3RyaW5nW10gPSBbXSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmZvcm1DYWNoZS5pc0luaXRpYWxTdGF0ZUNoYW5nZWQoaWdub3JlQXR0cnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFVzZSBgdW5kbygpYCBpbnN0ZWFkXG4gICAqL1xuICBfdW5kb0xhc3RDaGFuZ2VBY3Rpb24oKSB7XG4gICAgY29uc29sZS53YXJuKCdNZXRob2QgYE9Gb3JtQ29tcG9uZW50Ll91bmRvTGFzdENoYW5nZUFjdGlvbmAgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXJ1dGUuIFVzZSBgdW5kb2AgaW5zdGVhZCcpO1xuICAgIHRoaXMudW5kbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVuZG8gbGFzdCBjaGFuZ2VcbiAgICovXG4gIHVuZG8oKSB7XG4gICAgdGhpcy5mb3JtQ2FjaGUudW5kb0xhc3RDaGFuZ2UoKTtcbiAgfVxuXG4gIGdldCBpc0NhY2hlU3RhY2tFbXB0eSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtQ2FjaGUuaXNDYWNoZVN0YWNrRW1wdHk7XG4gIH1cblxuICB1bmRvS2V5Ym9hcmRQcmVzc2VkKCkge1xuICAgIHRoaXMuZm9ybUNhY2hlLnVuZG9MYXN0Q2hhbmdlKCk7XG4gIH1cblxuICBnZXRGb3JtVG9vbGJhcigpOiBPRm9ybVRvb2xiYXJCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybVRvb2xiYXI7XG4gIH1cblxuICBnZXRGb3JtTWFuYWdlcigpOiBPRm9ybUxheW91dE1hbmFnZXJCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtTmF2aWdhdGlvbi5mb3JtTGF5b3V0TWFuYWdlcjtcbiAgfVxuXG4gIGdldEZvcm1OYXZpZ2F0aW9uKCk6IE9Gb3JtTmF2aWdhdGlvbkNsYXNzIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtTmF2aWdhdGlvbjtcbiAgfVxuXG4gIGdldEZvcm1DYWNoZSgpOiBPRm9ybUNhY2hlQ2xhc3Mge1xuICAgIHJldHVybiB0aGlzLmZvcm1DYWNoZTtcbiAgfVxuXG4gIGdldFVybFBhcmFtKGFyZzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Rm9ybU5hdmlnYXRpb24oKS5nZXRVcmxQYXJhbXMoKVthcmddO1xuICB9XG5cbiAgZ2V0VXJsUGFyYW1zKCkge1xuICAgIHJldHVybiB0aGlzLmdldEZvcm1OYXZpZ2F0aW9uKCkuZ2V0VXJsUGFyYW1zKCk7XG4gIH1cblxuICBzZXRVcmxQYXJhbXNBbmRSZWxvYWQodmFsOiBvYmplY3QpIHtcbiAgICB0aGlzLmZvcm1OYXZpZ2F0aW9uLnNldFVybFBhcmFtcyh2YWwpO1xuICAgIHRoaXMucmVsb2FkKHRydWUpO1xuICB9XG5cbiAgZ2V0UmVnaXN0ZXJlZEZpZWxkc1ZhbHVlcygpIHtcbiAgICBjb25zdCB2YWx1ZXMgPSB7fTtcbiAgICBjb25zdCBjb21wb25lbnRzOiBJRm9ybURhdGFDb21wb25lbnRIYXNoID0gdGhpcy5nZXRDb21wb25lbnRzKCk7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgY29uc3QgY29tcG9uZW50c0tleXMgPSBPYmplY3Qua2V5cyhjb21wb25lbnRzKS5maWx0ZXIoa2V5ID0+IHNlbGYuaWdub3JlRm9ybUNhY2hlS2V5cy5pbmRleE9mKGtleSkgPT09IC0xKTtcbiAgICBjb21wb25lbnRzS2V5cy5mb3JFYWNoKGNvbXBLZXkgPT4ge1xuICAgICAgY29uc3QgY29tcDogSUZvcm1EYXRhQ29tcG9uZW50ID0gY29tcG9uZW50c1tjb21wS2V5XTtcbiAgICAgIC8qKiBQYXJzZSB0aGUgdmFsdWVzIOKAi+KAi3RvIHRoZSBmb3JtYXQgYWNjb3JkaW5nIHRvIHRoZWlyIHNxbHR5cGUgdG8gc2VuZCB0byB0aGUgaW5zZXJ0IHJlcXVlc3QgKi9cbiAgICAgIHZhbHVlc1tjb21wS2V5XSA9IFNRTFR5cGVzLnBhcnNlVXNpbmdTUUxUeXBlKGNvbXAuZ2V0VmFsdWUoKSwgU1FMVHlwZXMuZ2V0U1FMVHlwZUtleShjb21wLmdldFNRTFR5cGUoKSkpO1xuICAgIH0pO1xuICAgIHJldHVybiB2YWx1ZXM7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBjb250cm9sIGluIHRoZSBmb3JtXG4gICAqIEBwYXJhbSBhdHRyIHRoZSBhdHRyIG9mIHRoZSBmb3JtIGZpZWxkXG4gICAqL1xuICBnZXRGaWVsZFZhbHVlKGF0dHI6IHN0cmluZyk6IGFueSB7XG4gICAgbGV0IHZhbHVlID0gbnVsbDtcbiAgICBjb25zdCBjb21wID0gdGhpcy5nZXRGaWVsZFJlZmVyZW5jZShhdHRyKTtcbiAgICBpZiAoY29tcCkge1xuICAgICAgdmFsdWUgPSBjb21wLmdldFZhbHVlKCk7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYW4gb2JqZWN0IHdpdGggdGhlIHZhbHVlcyBvZiBlYWNoIGF0dHJpYnV0ZVxuICAgKiBAcGFyYW0gYXR0cnMgdGhlIGF0dHIncyBvZiB0aGUgZm9ybSBmaWVsZHNcbiAgICovXG4gIGdldEZpZWxkVmFsdWVzKGF0dHJzOiBzdHJpbmdbXSk6IGFueSB7XG4gICAgY29uc3QgYXJyID0ge307XG4gICAgYXR0cnMuZm9yRWFjaChrZXkgPT4gYXJyW2tleV0gPSB0aGlzLmdldEZpZWxkVmFsdWUoa2V5KSk7XG4gICAgcmV0dXJuIGFycjtcblxuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSBjb250cm9sIGluIHRoZSBmb3JtLlxuICAgKiBAcGFyYW0gYXR0ciBhdHRyaWJ1dGUgb2YgY29udHJvbFxuICAgKiBAcGFyYW0gdmFsdWUgdmFsdWVcbiAgICovXG4gIHNldEZpZWxkVmFsdWUoYXR0cjogc3RyaW5nLCB2YWx1ZTogYW55LCBvcHRpb25zPzogRm9ybVZhbHVlT3B0aW9ucykge1xuICAgIGNvbnN0IGNvbXAgPSB0aGlzLmdldEZpZWxkUmVmZXJlbmNlKGF0dHIpO1xuICAgIGlmIChjb21wKSB7XG4gICAgICBjb21wLnNldFZhbHVlKHZhbHVlLCBvcHRpb25zKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgdmFsdWUgb2YgZWFjaCBjb250cm9sIGluIHRoZSBmb3JtLlxuICAgKiBAcGFyYW0gdmFsdWVzIHRoZSB2YWx1ZXNcbiAgICovXG4gIHNldEZpZWxkVmFsdWVzKHZhbHVlczogYW55LCBvcHRpb25zPzogRm9ybVZhbHVlT3B0aW9ucykge1xuICAgIGZvciAoY29uc3Qga2V5IGluIHZhbHVlcykge1xuICAgICAgaWYgKHZhbHVlcy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgIHRoaXMuc2V0RmllbGRWYWx1ZShrZXksIHZhbHVlc1trZXldLCBvcHRpb25zKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXIgdGhlIHZhbHVlIG9mIGVhY2ggY29udHJvbCBpbiB0aGUgZm9ybVxuICAgKiBAcGFyYW0gYXR0ciB0aGUgYXR0ciBvZiB0aGUgZm9ybSBmaWVsZFxuICAgKi9cbiAgY2xlYXJGaWVsZFZhbHVlKGF0dHI6IHN0cmluZywgb3B0aW9ucz86IEZvcm1WYWx1ZU9wdGlvbnMpIHtcbiAgICBjb25zdCBjb21wID0gdGhpcy5nZXRGaWVsZFJlZmVyZW5jZShhdHRyKTtcbiAgICBpZiAoY29tcCkge1xuICAgICAgY29tcC5jbGVhclZhbHVlKG9wdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldCB0aGUgdmFsdWUgb2YgZWFjaCBjb250cm9sIGluIHRoZSBmb3JtXG4gICAqIEBwYXJhbSBhdHRycyB0aGUgYXR0cidzIG9mIHRoZSBmb3JtIGZpZWxkc1xuICAgKi9cbiAgY2xlYXJGaWVsZFZhbHVlcyhhdHRyczogc3RyaW5nW10sIG9wdGlvbnM/OiBGb3JtVmFsdWVPcHRpb25zKSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgYXR0cnMuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICBzZWxmLmNsZWFyRmllbGRWYWx1ZShrZXksIG9wdGlvbnMpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgcmVmZXJlbmNlIG9mIHRoZSBjb250cm9sIGluIHRoZSBmb3JtLlxuICAgKiBAcGFyYW0gYXR0ciB0aGUgYXR0ciBvZiB0aGUgZm9ybSBmaWVsZFxuICAgKi9cbiAgZ2V0RmllbGRSZWZlcmVuY2UoYXR0cjogc3RyaW5nKTogSUZvcm1EYXRhQ29tcG9uZW50IHtcbiAgICByZXR1cm4gdGhpcy5fY29tcG9uZW50c1thdHRyXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIHJlZmVyZW5jZSBvZiBlYWNoIGNvbnRyb2wgaW4gdGhlIGZvcm1cbiAgICogQHBhcmFtIGF0dHJzIHRoZSBhdHRyJ3Mgb2YgdGhlIGZvcm0gZmlsZWRzXG4gICAqL1xuICBnZXRGaWVsZFJlZmVyZW5jZXMoYXR0cnM6IHN0cmluZ1tdKTogSUZvcm1EYXRhQ29tcG9uZW50SGFzaCB7XG4gICAgY29uc3QgYXJyOiBJRm9ybURhdGFDb21wb25lbnRIYXNoID0ge307XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgYXR0cnMuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICBhcnJba2V5XSA9IHNlbGYuZ2V0RmllbGRSZWZlcmVuY2Uoa2V5KTtcbiAgICB9KTtcbiAgICByZXR1cm4gYXJyO1xuICB9XG5cbiAgZ2V0Rm9ybUNvbXBvbmVudFBlcm1pc3Npb25zKGF0dHI6IHN0cmluZyk6IE9QZXJtaXNzaW9ucyB7XG4gICAgbGV0IHBlcm1pc3Npb25zOiBPUGVybWlzc2lvbnM7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKHRoaXMucGVybWlzc2lvbnMpKSB7XG4gICAgICBwZXJtaXNzaW9ucyA9ICh0aGlzLnBlcm1pc3Npb25zLmNvbXBvbmVudHMgfHwgW10pLmZpbmQoY29tcCA9PiBjb21wLmF0dHIgPT09IGF0dHIpO1xuICAgIH1cbiAgICByZXR1cm4gcGVybWlzc2lvbnM7XG4gIH1cblxuICBnZXRBY3Rpb25zUGVybWlzc2lvbnMoKTogT1Blcm1pc3Npb25zW10ge1xuICAgIGxldCBwZXJtaXNzaW9uczogT1Blcm1pc3Npb25zW107XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKHRoaXMucGVybWlzc2lvbnMpKSB7XG4gICAgICBwZXJtaXNzaW9ucyA9ICh0aGlzLnBlcm1pc3Npb25zLmFjdGlvbnMgfHwgW10pO1xuICAgIH1cbiAgICByZXR1cm4gcGVybWlzc2lvbnM7XG4gIH1cblxuICBwcm90ZWN0ZWQgZGV0ZXJtaW5hdGVGb3JtTW9kZSgpOiB2b2lkIHtcbiAgICBjb25zdCB1cmxTZWdtZW50cyA9IHRoaXMuZm9ybU5hdmlnYXRpb24uZ2V0VXJsU2VnbWVudHMoKTtcbiAgICBpZiAodXJsU2VnbWVudHMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3Qgc2VnbWVudCA9IHVybFNlZ21lbnRzW3VybFNlZ21lbnRzLmxlbmd0aCAtIDFdO1xuICAgICAgdGhpcy5kZXRlcm1pbmF0ZU1vZGVGcm9tVXJsU2VnbWVudChzZWdtZW50KTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuYWN0Um91dGUucGFyZW50KSB7XG4gICAgICB0aGlzLmFjdFJvdXRlLnBhcmVudC51cmwuc3Vic2NyaWJlKHNlZ21lbnRzID0+IHtcbiAgICAgICAgY29uc3Qgc2VnbWVudCA9IHNlZ21lbnRzW3NlZ21lbnRzLmxlbmd0aCAtIDFdO1xuICAgICAgICB0aGlzLmRldGVybWluYXRlTW9kZUZyb21VcmxTZWdtZW50KHNlZ21lbnQpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2V0Rm9ybU1vZGUoT0Zvcm1Db21wb25lbnQuTW9kZSgpLklOSVRJQUwpO1xuICAgIH1cbiAgICAvLyBzdGF5SW5SZWNvcmRBZnRlckVkaXQgaXMgdHJ1ZSBpZiBmb3JtIGhhcyBlZGl0YWJsZSBkZXRhaWwgPSB0cnVlXG4gICAgdGhpcy5zdGF5SW5SZWNvcmRBZnRlckVkaXQgPSB0aGlzLnN0YXlJblJlY29yZEFmdGVyRWRpdCB8fCB0aGlzLmlzRWRpdGFibGVEZXRhaWwoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBkZXRlcm1pbmF0ZU1vZGVGcm9tVXJsU2VnbWVudChzZWdtZW50OiBVcmxTZWdtZW50KTogdm9pZCB7XG4gICAgY29uc3QgX3BhdGggPSBzZWdtZW50ID8gc2VnbWVudC5wYXRoIDogJyc7XG4gICAgaWYgKHRoaXMuaXNJbnNlcnRNb2RlUGF0aChfcGF0aCkpIHtcbiAgICAgIHRoaXMuc2V0SW5zZXJ0TW9kZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSBpZiAodGhpcy5pc1VwZGF0ZU1vZGVQYXRoKF9wYXRoKSkge1xuICAgICAgdGhpcy5zZXRVcGRhdGVNb2RlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2V0SW5pdGlhbE1vZGUoKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgX3VwZGF0ZUZvcm1EYXRhKG5ld0Zvcm1EYXRhOiBvYmplY3QpOiB2b2lkIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICB0aGlzLnpvbmUucnVuKCgpID0+IHtcbiAgICAgIHRoaXMuZm9ybURhdGEgPSBuZXdGb3JtRGF0YTtcbiAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSB0aGlzLmdldENvbXBvbmVudHMoKTtcbiAgICAgIGNvbnN0IGtleUNvbXBvbmVudHMgPSBbLi4uT2JqZWN0LmtleXMoY29tcG9uZW50cyldO1xuICAgICAgaWYgKCFVdGlsLmlzQXJyYXlFbXB0eSh0aGlzLnNldFZhbHVlT3JkZXJBcnJheSkpIHtcbiAgICAgICAga2V5Q29tcG9uZW50cy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgY29uc3QgaW5kZXhBID0gdGhpcy5zZXRWYWx1ZU9yZGVyQXJyYXkuaW5kZXhPZihhKSA9PT0gLTEgPyAxIDogMDtcbiAgICAgICAgICBjb25zdCBpbmRleEIgPSB0aGlzLnNldFZhbHVlT3JkZXJBcnJheS5pbmRleE9mKGIpID09PSAtMSA/IDEgOiAwO1xuICAgICAgICAgIHJldHVybiBpbmRleEEgLSBpbmRleEI7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoIVV0aWwuaXNBcnJheUVtcHR5KGtleUNvbXBvbmVudHMpKSB7XG4gICAgICAgIGtleUNvbXBvbmVudHMuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgIGNvbnN0IGNvbXAgPSBjb21wb25lbnRzW2tleV07XG4gICAgICAgICAgdGhpcy5zZXREYXRhSW5Gb3JtRGF0YUNvbXBvbmVudChjb21wLCBrZXkpO1xuICAgICAgICB9KTtcbiAgICAgICAgc2VsZi5pbml0aWFsaXplRmllbGRzKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHNldERhdGFJbkZvcm1EYXRhQ29tcG9uZW50KGNvbXA6IElGb3JtRGF0YUNvbXBvbmVudCwgYXR0cjogc3RyaW5nKSB7XG4gICAgaWYgKFV0aWwuaXNGb3JtRGF0YUNvbXBvbmVudChjb21wKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKGNvbXAuaXNBdXRvbWF0aWNCaW5kaW5nKCkpIHtcbiAgICAgICAgICBjb21wLmRhdGEgPSB0aGlzLmdldERhdGFWYWx1ZShhdHRyKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGluaXRpYWxpemVGaWVsZHMoKTogdm9pZCB7XG4gICAgT2JqZWN0LmtleXModGhpcy5mb3JtR3JvdXAuY29udHJvbHMpLmZvckVhY2goY29udHJvbCA9PiB7XG4gICAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tjb250cm9sXS5tYXJrQXNQcmlzdGluZSgpO1xuICAgIH0pO1xuICAgIHRoaXMuZm9ybUNhY2hlLnJlZ2lzdGVyQ2FjaGUoKTtcbiAgICB0aGlzLmZvcm1OYXZpZ2F0aW9uLnVwZGF0ZU5hdmlnYXRpb24oKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjbGVhckNvbXBvbmVudHNPbGRWYWx1ZSgpOiB2b2lkIHtcbiAgICBjb25zdCBjb21wb25lbnRzOiBJRm9ybURhdGFDb21wb25lbnRIYXNoID0gdGhpcy5nZXRDb21wb25lbnRzKCk7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgY29uc3QgY29tcG9uZW50c0tleXMgPSBPYmplY3Qua2V5cyhjb21wb25lbnRzKS5maWx0ZXIoa2V5ID0+IHNlbGYuaWdub3JlRm9ybUNhY2hlS2V5cy5pbmRleE9mKGtleSkgPT09IC0xKTtcbiAgICBjb21wb25lbnRzS2V5cy5mb3JFYWNoKGNvbXBLZXkgPT4ge1xuICAgICAgY29uc3QgY29tcDogSUZvcm1EYXRhQ29tcG9uZW50ID0gY29tcG9uZW50c1tjb21wS2V5XTtcbiAgICAgIChjb21wIGFzIGFueSkub2xkVmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICBjb21wLmdldEZvcm1Db250cm9sKCkuc2V0VmFsdWUodW5kZWZpbmVkKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBwb3N0Q29ycmVjdEluc2VydChyZXN1bHQ6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuc25hY2tCYXJTZXJ2aWNlLm9wZW4odGhpcy5fbWVzc2FnZVNlcnZpY2UuZ2V0SW5zZXJ0U3VjY2Vzc01lc3NhZ2UoKSwgeyBpY29uOiAnY2hlY2tfY2lyY2xlJyB9KTtcbiAgICB0aGlzLm9uSW5zZXJ0LmVtaXQocmVzdWx0KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBwb3N0SW5jb3JyZWN0SW5zZXJ0KHJlc3VsdDogYW55KTogdm9pZCB7XG4gICAgdGhpcy5zaG93RXJyb3IoJ2luc2VydCcsIHJlc3VsdCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcG9zdEluY29ycmVjdERlbGV0ZShyZXN1bHQ6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuc2hvd0Vycm9yKCdkZWxldGUnLCByZXN1bHQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHBvc3RJbmNvcnJlY3RVcGRhdGUocmVzdWx0OiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLnNob3dFcnJvcigndXBkYXRlJywgcmVzdWx0KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBwb3N0Q29ycmVjdFVwZGF0ZShyZXN1bHQ6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuc25hY2tCYXJTZXJ2aWNlLm9wZW4odGhpcy5fbWVzc2FnZVNlcnZpY2UuZ2V0VXBkYXRlU3VjY2Vzc01lc3NhZ2UoKSwgeyBpY29uOiAnY2hlY2tfY2lyY2xlJyB9KTtcbiAgICB0aGlzLm9uVXBkYXRlLmVtaXQocmVzdWx0KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBwb3N0Q29ycmVjdERlbGV0ZShyZXN1bHQ6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuc25hY2tCYXJTZXJ2aWNlLm9wZW4odGhpcy5fbWVzc2FnZVNlcnZpY2UuZ2V0RGVsZXRlU3VjY2Vzc01lc3NhZ2UoKSwgeyBpY29uOiAnY2hlY2tfY2lyY2xlJyB9KTtcbiAgICB0aGlzLm9uRGVsZXRlLmVtaXQocmVzdWx0KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBtYXJrRm9ybUxheW91dE1hbmFnZXJUb1VwZGF0ZSgpOiB2b2lkIHtcbiAgICBjb25zdCBmb3JtTGF5b3V0TWFuYWdlciA9IHRoaXMuZ2V0Rm9ybU1hbmFnZXIoKTtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQoZm9ybUxheW91dE1hbmFnZXIpKSB7XG4gICAgICBmb3JtTGF5b3V0TWFuYWdlci5tYXJrRm9yVXBkYXRlID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgb2JqZWN0VG9Gb3JtVmFsdWVEYXRhKGRhdGE6IG9iamVjdCA9IHt9KTogb2JqZWN0IHtcbiAgICBjb25zdCB2YWx1ZURhdGEgPSB7fTtcbiAgICBPYmplY3Qua2V5cyhkYXRhKS5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICB2YWx1ZURhdGFbaXRlbV0gPSBuZXcgT0Zvcm1WYWx1ZShkYXRhW2l0ZW1dKTtcbiAgICB9KTtcbiAgICByZXR1cm4gdmFsdWVEYXRhO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldEN1cnJlbnRLZXlzVmFsdWVzKCk6IG9iamVjdCB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybU5hdmlnYXRpb24uZ2V0Q3VycmVudEtleXNWYWx1ZXMoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZWZyZXNoQ29tcG9uZW50c0VkaXRhYmxlU3RhdGUoKTogdm9pZCB7XG4gICAgc3dpdGNoICh0aGlzLm1vZGUpIHtcbiAgICAgIGNhc2UgT0Zvcm1Db21wb25lbnQuTW9kZSgpLklOSVRJQUw6XG4gICAgICAgIHRoaXMuX3NldENvbXBvbmVudHNFZGl0YWJsZSh0aGlzLmlzRWRpdGFibGVEZXRhaWwoKSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBPRm9ybUNvbXBvbmVudC5Nb2RlKCkuSU5TRVJUOlxuICAgICAgY2FzZSBPRm9ybUNvbXBvbmVudC5Nb2RlKCkuVVBEQVRFOlxuICAgICAgICB0aGlzLl9zZXRDb21wb25lbnRzRWRpdGFibGUodHJ1ZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGlzSW5zZXJ0TW9kZVBhdGgocGF0aDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3QgbmF2RGF0YTogT05hdmlnYXRpb25JdGVtID0gdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5nZXRMYXN0SXRlbSgpO1xuICAgIC8vIFRPRE86IHNvbHZlIGlzc3VlICM3Mjcgd2hlbiBgaW5zZXJ0LWZvcm0tcm91dGVgIGlzIHByZXNlbnRcbiAgICByZXR1cm4gVXRpbC5pc0RlZmluZWQobmF2RGF0YSkgPyBwYXRoID09PSBuYXZEYXRhLmdldEluc2VydEZvcm1Sb3V0ZSgpIDogQ29kZXMuREVGQVVMVF9JTlNFUlRfUk9VVEUgPT09IHBhdGg7XG4gIH1cblxuICBwcm90ZWN0ZWQgaXNVcGRhdGVNb2RlUGF0aChwYXRoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBuYXZEYXRhOiBPTmF2aWdhdGlvbkl0ZW0gPSB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmdldFByZXZpb3VzUm91dGVEYXRhKCk7XG4gICAgcmV0dXJuIFV0aWwuaXNEZWZpbmVkKG5hdkRhdGEpICYmIHBhdGggPT09IG5hdkRhdGEuZ2V0RWRpdEZvcm1Sb3V0ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzaG93RXJyb3Iob3BlcmF0aW9uOiBzdHJpbmcsIHJlc3VsdDogYW55KTogdm9pZCB7XG4gICAgaWYgKHJlc3VsdCAmJiB0eXBlb2YgcmVzdWx0ICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmFsZXJ0KCdFUlJPUicsIHJlc3VsdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBtZXNzYWdlID0gJydcbiAgICAgIHN3aXRjaCAob3BlcmF0aW9uKSB7XG4gICAgICAgIGNhc2UgJ3VwZGF0ZSc6XG4gICAgICAgICAgbWVzc2FnZSA9IHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmdldFVwZGF0ZUVycm9yTWVzc2FnZSgpXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2luc2VydCc6XG4gICAgICAgICAgbWVzc2FnZSA9IHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmdldEluc2VydEVycm9yTWVzc2FnZSgpXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2RlbGV0ZSc6XG4gICAgICAgICAgbWVzc2FnZSA9IHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmdldERlbGV0ZUVycm9yTWVzc2FnZSgpXG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuYWxlcnQoJ0VSUk9SJywgbWVzc2FnZSk7XG4gICAgfVxuICB9XG5cbn1cbiIsIjxuZy10ZW1wbGF0ZSAjY3VzdG9tRm9ybVRvb2xiYXJCdXR0b25zPlxuICA8bmctY29udGVudCBzZWxlY3Q9XCJbby1mb3JtLXRvb2xiYXItYnV0dG9uc11cIj48L25nLWNvbnRlbnQ+XG48L25nLXRlbXBsYXRlPlxuXG5AaWYgKHNob3dGbG9hdGluZ1Rvb2xiYXIgJiYgaGVhZGVyUG9zaXRpb249PT0ndG9wJykge1xuICA8by1mb3JtLXRvb2xiYXIgW2xhYmVsLWhlYWRlcl09XCJsYWJlbGhlYWRlclwiIFtsYWJlbC1oZWFkZXItYWxpZ25dPVwibGFiZWxIZWFkZXJBbGlnblwiXG4gICAgW2hlYWRlci1hY3Rpb25zXT1cImhlYWRlcmFjdGlvbnNcIiBbc2hvdy1oZWFkZXItbmF2aWdhdGlvbl09XCJzaG93SGVhZGVyTmF2aWdhdGlvblwiIFtzaG93LWhlYWRlci1hY3Rpb25zLXRleHRdPVwic2hvd0hlYWRlckFjdGlvbnNUZXh0XCJcbiAgICAob25DYW5jZWwpPVwib25DYW5jZWwuZW1pdCgkZXZlbnQpXCIgbGF5b3V0LXBhZGRpbmc+XG4gICAgPGRpdiBvLWN1c3RvbS1mb3JtLXRvb2xiYXItYnV0dG9ucy13cmFwcGVyIGNsYXNzPVwiby1mbGV4LXJvdyBvLWxheW91dC1hbGlnbi1lbmQtY2VudGVyXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY3VzdG9tRm9ybVRvb2xiYXJCdXR0b25zXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIDwvby1mb3JtLXRvb2xiYXI+XG59XG5cbjxuZy1ob3N0IG9LZXlib2FyZExpc3RlbmVyIGtleWJvYXJkS2V5cz1cIjE3OzkwXCIgKG9uS2V5c1ByZXNzZWQpPVwidW5kb0tleWJvYXJkUHJlc3NlZCgpXCIgY2xhc3M9XCJzY3JvbGxpbmcgby1zY3JvbGxcIj5cbiAgPGRpdiBjbGFzcz1cIm8tZmxleC1ncm93XCI+XG4gICAgQGlmIChzaG93Tm90RmxvYXRpbmdUb29sYmFyICYmIGhlYWRlclBvc2l0aW9uPT09J3RvcCcpIHtcbiAgICAgIDxvLWZvcm0tdG9vbGJhciBbbGFiZWwtaGVhZGVyXT1cImxhYmVsaGVhZGVyXCIgW2xhYmVsLWhlYWRlci1hbGlnbl09XCJsYWJlbEhlYWRlckFsaWduXCJcbiAgICAgICAgW2hlYWRlci1hY3Rpb25zXT1cImhlYWRlcmFjdGlvbnNcIiBbc2hvdy1oZWFkZXItbmF2aWdhdGlvbl09XCJzaG93SGVhZGVyTmF2aWdhdGlvblwiIFtzaG93LWhlYWRlci1hY3Rpb25zLXRleHRdPVwic2hvd0hlYWRlckFjdGlvbnNUZXh0XCJcbiAgICAgICAgKG9uQ2FuY2VsKT1cIm9uQ2FuY2VsLmVtaXQoJGV2ZW50KVwiIGxheW91dC1wYWRkaW5nPlxuICAgICAgICA8ZGl2IG8tY3VzdG9tLWZvcm0tdG9vbGJhci1idXR0b25zLXdyYXBwZXIgY2xhc3M9XCJvLWZsZXgtcm93IG8tbGF5b3V0LWFsaWduLWVuZC1jZW50ZXJcIj5cbiAgICAgICAgICA8ZGl2IG8tY3VzdG9tLWZvcm0tdG9vbGJhci1idXR0b25zLXdyYXBwZXIgY2xhc3M9XCJvLWZsZXgtcm93IG8tbGF5b3V0LWFsaWduLWVuZC1jZW50ZXJcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjdXN0b21Gb3JtVG9vbGJhckJ1dHRvbnNcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L28tZm9ybS10b29sYmFyPlxuICAgIH1cblxuICAgIDxmb3JtICNpbm5lckZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtR3JvdXBcIiBjbGFzcz1cImlubmVyLWZvcm1cIiBbY2xhc3MuZm9ybS1uby10b29sYmFyXT1cIiFzaG93SGVhZGVyXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgYXV0b2NvcnJlY3Q9XCJvZmZcIlxuICAgICAgYXV0b2NhcGl0YWxpemU9XCJvZmZcIiBzcGVsbGNoZWNrPVwiZmFsc2VcIj5cbiAgICAgIEBpZiAobG9hZGluZyB8IGFzeW5jKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwcm9ncmVzcy1iYXItY29udGFpbmVyXCI+XG4gICAgICAgICAgPG1hdC1wcm9ncmVzcy1iYXIgbW9kZT1cImluZGV0ZXJtaW5hdGVcIj48L21hdC1wcm9ncmVzcy1iYXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgICAgPGRpdiBsYXlvdXQtcGFkZGluZyBbbmdDbGFzc109XCJsYXlvdXRDbGFzc2VzXCIgY2xhc3M9XCJvLWZvcm0tY29udGVudC13cmFwcGVyXCI+XG4gICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZm9ybT5cblxuICAgIEBpZiAoc2hvd05vdEZsb2F0aW5nVG9vbGJhciAmJiBoZWFkZXJQb3NpdGlvbj09PSdib3R0b20nKSB7XG4gICAgICA8by1mb3JtLXRvb2xiYXIgW2xhYmVsLWhlYWRlcl09XCJsYWJlbGhlYWRlclwiIFtsYWJlbC1oZWFkZXItYWxpZ25dPVwibGFiZWxIZWFkZXJBbGlnblwiXG4gICAgICAgIFtoZWFkZXItYWN0aW9uc109XCJoZWFkZXJhY3Rpb25zXCIgW3Nob3ctaGVhZGVyLW5hdmlnYXRpb25dPVwic2hvd0hlYWRlck5hdmlnYXRpb25cIiBbc2hvdy1oZWFkZXItYWN0aW9ucy10ZXh0XT1cInNob3dIZWFkZXJBY3Rpb25zVGV4dFwiXG4gICAgICAgIChvbkNhbmNlbCk9XCJvbkNhbmNlbC5lbWl0KCRldmVudClcIiBsYXlvdXQtcGFkZGluZz5cbiAgICAgICAgPGRpdiBvLWN1c3RvbS1mb3JtLXRvb2xiYXItYnV0dG9ucy13cmFwcGVyIGNsYXNzPVwiby1mbGV4LXJvdyBvLWxheW91dC1hbGlnbi1lbmQtY2VudGVyXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImN1c3RvbUZvcm1Ub29sYmFyQnV0dG9uc1wiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvby1mb3JtLXRvb2xiYXI+XG4gICAgfVxuICA8L2Rpdj5cbjwvbmctaG9zdD5cblxuQGlmIChzaG93RmxvYXRpbmdUb29sYmFyICYmIGhlYWRlclBvc2l0aW9uPT09J2JvdHRvbScpIHtcbiAgPG8tZm9ybS10b29sYmFyIFtsYWJlbC1oZWFkZXJdPVwibGFiZWxoZWFkZXJcIiBbbGFiZWwtaGVhZGVyLWFsaWduXT1cImxhYmVsSGVhZGVyQWxpZ25cIlxuICAgIFtoZWFkZXItYWN0aW9uc109XCJoZWFkZXJhY3Rpb25zXCIgW3Nob3ctaGVhZGVyLW5hdmlnYXRpb25dPVwic2hvd0hlYWRlck5hdmlnYXRpb25cIiBbc2hvdy1oZWFkZXItYWN0aW9ucy10ZXh0XT1cInNob3dIZWFkZXJBY3Rpb25zVGV4dFwiXG4gICAgKG9uQ2FuY2VsKT1cIm9uQ2FuY2VsLmVtaXQoJGV2ZW50KVwiIGxheW91dC1wYWRkaW5nPlxuICAgIDxkaXYgby1jdXN0b20tZm9ybS10b29sYmFyLWJ1dHRvbnMtd3JhcHBlciBjbGFzcz1cIm8tZmxleC1yb3cgby1sYXlvdXQtYWxpZ24tZW5kLWNlbnRlclwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImN1c3RvbUZvcm1Ub29sYmFyQnV0dG9uc1wiPjwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICA8L28tZm9ybS10b29sYmFyPlxufVxuIl19
|
|
1443
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9jb21wb25lbnRzL2Zvcm0vby1mb3JtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9jb21wb25lbnRzL2Zvcm0vby1mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBRUwsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxzQkFBc0IsRUFDdEIsVUFBVSxFQUNWLFlBQVksRUFDWixVQUFVLEVBQ1YsUUFBUSxFQUNSLE1BQU0sRUFJTixTQUFTLEVBQ1QsaUJBQWlCLEVBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFdEUsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDMUYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDM0UsT0FBTyxFQUFlLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxjQUFjLEVBQTBCLE1BQU0sRUFBbUMsTUFBTSxpQkFBaUIsQ0FBQztBQUNsSCxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBRWhGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBTzNGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFB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Q3ZCLG1CQUFtQjtxQkFDcEIsVUFHTyxxQkFBcUIsV0FDcEIsc0JBQXNCLGlCQUNoQixpQkFBaUIsQ0FBQyxJQUFJLFFBQy9CO3dCQUNKLGdCQUFnQixFQUFFLE1BQU07cUJBQ3pCOzZNQXVCRCxxQkFBcUIsTUFlWCxjQUFjLE1BR3hCLFVBQVUsTUFNVixpQkFBaUIsTUFFakIsbUJBQW1CLE1Bb0JaLHVCQUF1QixNQTJFTixXQUFXO3NCQUFsQyxTQUFTO3VCQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBDVVNUT01fRUxFTUVOVFNfU0NIRU1BLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIGZvcndhcmRSZWYsXG4gIEluamVjdG9yLFxuICBOZ1pvbmUsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBUeXBlLFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQXN5bmNQaXBlLCBOZ0NsYXNzLCBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXRQcm9ncmVzc0Jhck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Byb2dyZXNzLWJhcic7XG5cbmltcG9ydCB7IE9LZXlib2FyZExpc3RlbmVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9rZXlib2FyZC1saXN0ZW5lci5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgT0Zvcm1Ub29sYmFyQ29tcG9uZW50IH0gZnJvbSAnLi90b29sYmFyL28tZm9ybS10b29sYmFyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIEFjdGl2YXRlZFJvdXRlU25hcHNob3QsIFJvdXRlciwgUm91dGVyU3RhdGVTbmFwc2hvdCwgVXJsU2VnbWVudCB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBCb29sZWFuQ29udmVydGVyLCBCb29sZWFuSW5wdXRDb252ZXJ0ZXIgfSBmcm9tICcuLi8uLi9kZWNvcmF0b3JzL2lucHV0LWNvbnZlcnRlcic7XG5pbXBvcnQgeyBJQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9jb21wb25lbnQuaW50ZXJmYWNlJztcbmltcG9ydCB7IElGb3JtRGF0YUNvbXBvbmVudEhhc2ggfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2Zvcm0tZGF0YS1jb21wb25lbnQtaGFzaC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSUZvcm1EYXRhQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9mb3JtLWRhdGEtY29tcG9uZW50LmludGVyZmFjZSc7XG5pbXBvcnQgeyBJRm9ybURhdGFUeXBlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9mb3JtLWRhdGEtdHlwZS1jb21wb25lbnQuaW50ZXJmYWNlJztcbmltcG9ydCB7IFNlcnZpY2VSZXNwb25zZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvc2VydmljZS1yZXNwb25zZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgT0Zvcm1MYXlvdXRNYW5hZ2VyQmFzZSB9IGZyb20gJy4uLy4uL2xheW91dHMvZm9ybS1sYXlvdXQvby1mb3JtLWxheW91dC1tYW5hZ2VyLWJhc2UuY2xhc3MnO1xuaW1wb3J0IHsgRGlhbG9nU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RpYWxvZy5zZXJ2aWNlJztcbmltcG9ydCB7IE9udGltaXplU2VydmljZVByb3ZpZGVyIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZmFjdG9yaWVzJztcbmltcG9ydCB7IE5hdmlnYXRpb25TZXJ2aWNlLCBPTmF2aWdhdGlvbkl0ZW0gfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9uYXZpZ2F0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgT250aW1pemVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvb250aW1pemUvb250aW1pemUuc2VydmljZSc7XG5pbXBvcnQgeyBQZXJtaXNzaW9uc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wZXJtaXNzaW9ucy9wZXJtaXNzaW9ucy5zZXJ2aWNlJztcbmltcG9ydCB7IFNuYWNrQmFyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3NuYWNrYmFyLnNlcnZpY2UnO1xuaW1wb3J0IHsgT0NvbmZpZ3VyZU1lc3NhZ2VTZXJ2aWNlQXJncyB9IGZyb20gJy4uLy4uL3R5cGVzL2NvbmZpZ3VyZS1tZXNzYWdlLXNlcnZpY2UtYXJncy50eXBlJztcbmltcG9ydCB7IE9Db25maWd1cmVTZXJ2aWNlQXJncyB9IGZyb20gJy4uLy4uL3R5cGVzL2NvbmZpZ3VyZS1zZXJ2aWNlLWFyZ3MudHlwZSc7XG5pbXBvcnQgeyBPRm9ybVZhbGlkYXRpb24gfSBmcm9tICcuLi8uLi90eXBlcy9lcnJvci1mb3JtLXZhbGlkYXRpb24udHlwZSc7XG5pbXBvcnQgeyBGb3JtTGF5b3V0Q2xvc2VEZXRhaWxPcHRpb25zIH0gZnJvbSAnLi4vLi4vdHlwZXMvZm9ybS1sYXlvdXQtZGV0YWlsLWNvbXBvbmVudC1kYXRhLnR5cGUnO1xuaW1wb3J0IHsgRm9ybVZhbHVlT3B0aW9ucyB9IGZyb20gJy4uLy4uL3R5cGVzL2Zvcm0tdmFsdWUtb3B0aW9ucy50eXBlJztcbmltcG9ydCB7IE9Gb3JtSW5pdGlhbGl6YXRpb25PcHRpb25zIH0gZnJvbSAnLi4vLi4vdHlwZXMvby1mb3JtLWluaXRpYWxpemF0aW9uLW9wdGlvbnMudHlwZSc7XG5pbXBvcnQgeyBPRm9ybVBlcm1pc3Npb25zIH0gZnJvbSAnLi4vLi4vdHlwZXMvby1mb3JtLXBlcm1pc3Npb25zLnR5cGUnO1xuaW1wb3J0IHsgT1Blcm1pc3Npb25zIH0gZnJvbSAnLi4vLi4vdHlwZXMvby1wZXJtaXNzaW9ucy50eXBlJztcbmltcG9ydCB7IE9RdWVyeVBhcmFtcyB9IGZyb20gJy4uLy4uL3R5cGVzL3F1ZXJ5LXBhcmFtcy50eXBlJztcbmltcG9ydCB7IENvZGVzIH0gZnJvbSAnLi4vLi4vdXRpbC9jb2Rlcyc7XG5pbXBvcnQgeyBTUUxUeXBlcyB9IGZyb20gJy4uLy4uL3V0aWwvc3FsdHlwZXMnO1xuaW1wb3J0IHsgVXRpbCB9IGZyb20gJy4uLy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQgeyBPRm9ybUNvbnRhaW5lckNvbXBvbmVudCB9IGZyb20gJy4uL2Zvcm0tY29udGFpbmVyL28tZm9ybS1jb250YWluZXIuY29tcG9uZW50JztcbmltcG9ydCB7IE9Gb3JtQ29udHJvbCB9IGZyb20gJy4uL2lucHV0L28tZm9ybS1jb250cm9sLmNsYXNzJztcbmltcG9ydCB7IE9Gb3JtQ2FjaGVDbGFzcyB9IGZyb20gJy4vY2FjaGUvby1mb3JtLmNhY2hlLmNsYXNzJztcbmltcG9ydCB7IENhbkNvbXBvbmVudERlYWN0aXZhdGUsIENhbkRlYWN0aXZhdGVGb3JtR3VhcmQgfSBmcm9tICcuL2d1YXJkcy9vLWZvcm0tY2FuLWRlYWN0aXZhdGUuZ3VhcmQnO1xuaW1wb3J0IHsgT0Zvcm1OYXZpZ2F0aW9uQ2xhc3MgfSBmcm9tICcuL25hdmlnYXRpb24vby1mb3JtLm5hdmlnYXRpb24uY2xhc3MnO1xuaW1wb3J0IHsgT0Zvcm1CYXNlIH0gZnJvbSAnLi9vLWZvcm0tYmFzZS5jbGFzcyc7XG5pbXBvcnQgeyBPX0ZPUk1fR0xPQkFMX0NPTkZJRyB9IGZyb20gJy4vby1mb3JtLXRva2Vucyc7XG5pbXBvcnQgeyBPRm9ybVZhbHVlIH0gZnJvbSAnLi9vLWZvcm0tdmFsdWUnO1xuaW1wb3J0IHsgT0Zvcm1NZXNzYWdlU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvby1mb3JtLW1lc3NhZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyBPRm9ybVRvb2xiYXJCYXNlIH0gZnJvbSAnLi90b29sYmFyL28tZm9ybS10b29sYmFyLWJhc2UuY2xhc3MnO1xuaW1wb3J0IHsgQmFzZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9iYXNlLXNlcnZpY2UuY2xhc3MnO1xuaW1wb3J0IHsgRmFjdG9yeVV0aWwgfSBmcm9tICcuLi8uLi91dGlsL2ZhY3RvcnkudXRpbCc7XG5cblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfSU5QVVRTX09fRk9STSA9IFtcbiAgLy8gc2hvdy1oZWFkZXIgW2Jvb2xlYW5dOiB2aXNpYmlsaXR5IG9mIGZvcm0gdG9vbGJhci4gRGVmYXVsdDogeWVzLlxuICAnc2hvd0hlYWRlcjogc2hvdy1oZWFkZXInLFxuXG4gIC8vIGhlYWRlci1tb2RlIFtzdHJpbmddWyBub25lIHwgZmxvYXRpbmcgXTogcGFpbnRpbmcgbW9kZSBvZiBmb3JtIHRvb2xiYXIuIERlZmF1bHQ6ICdmbG9hdGluZydcbiAgJ2hlYWRlck1vZGU6IGhlYWRlci1tb2RlJyxcblxuICAvLyBoZWFkZXItcG9zaXRpb24gWyB0b3AgfCBib3R0b20gXTogcG9zaXRpb24gb2YgdGhlIGZvcm0gdG9vbGJhci4gRGVmYXVsdDogJ3RvcCdcbiAgJ2hlYWRlclBvc2l0aW9uOiBoZWFkZXItcG9zaXRpb24nLFxuXG4gIC8vIGxhYmVsLWhlYWRlciBbc3RyaW5nXTogZGlzcGxheWFibGUgdGV4dCBvbiBmb3JtIHRvb2xiYXIuIERlZmF1bHQ6ICcnLlxuICAnbGFiZWxoZWFkZXI6IGxhYmVsLWhlYWRlcicsXG5cbiAgLy8gbGFiZWwtaGVhZGVyLWFsaWduIFtzdHJpbmddW3N0YXJ0IHwgY2VudGVyIHwgZW5kXTogYWxpZ25tZW50IG9mIGZvcm0gdG9vbGJhciB0ZXh0LiBEZWZhdWx0OiAnY2VudGVyJ1xuICAnbGFiZWxIZWFkZXJBbGlnbjogbGFiZWwtaGVhZGVyLWFsaWduJyxcblxuICAvLyBoZWFkZXItYWN0aW9ucyBbc3RyaW5nXTogYXZhaWxhYmxlIGFjdGlvbiBidXR0b25zIG9uIGZvcm0gdG9vbGJhciBvZiBzdGFuZGFyZCBDUlVEIG9wZXJhdGlvbnMsIHNlcGFyYXRlZCBieSAnOycuIEF2YWlsYWJsZSBvcHRpb25zIGFyZSBSO0k7VTtEIChSZWZyZXNoLCBJbnNlcnQsIFVwZGF0ZSwgRGVsZXRlKS4gRGVmYXVsdDogUjtJO1U7RFxuICAnaGVhZGVyYWN0aW9uczogaGVhZGVyLWFjdGlvbnMnLFxuXG4gIC8vIHNob3ctaGVhZGVyLWFjdGlvbnMtdGV4dCBbc3RyaW5nXVt5ZXN8bm98dHJ1ZXxmYWxzZV06IHNob3cgdGV4dCBvZiBmb3JtIHRvb2xiYXIgYnV0dG9ucy4gRGVmYXVsdCB5ZXNcbiAgJ3Nob3dIZWFkZXJBY3Rpb25zVGV4dDogc2hvdy1oZWFkZXItYWN0aW9ucy10ZXh0JyxcblxuICAvLyBlbnRpdHkgW3N0cmluZ106IGVudGl0eSBvZiB0aGUgc2VydmljZS4gRGVmYXVsdDogbm8gdmFsdWUuXG4gICdlbnRpdHknLFxuXG4gIC8vIGtleXMgW3N0cmluZ106IGVudGl0eSBrZXlzLCBzZXBhcmF0ZWQgYnkgJzsnLiBEZWZhdWx0OiBubyB2YWx1ZS5cbiAgJ2tleXMnLFxuXG4gIC8vIGNvbHVtbnMgW3N0cmluZ106IGNvbHVtbnMgb2YgdGhlIGVudGl0eSwgc2VwYXJhdGVkIGJ5ICc7Jy4gRGVmYXVsdDogbm8gdmFsdWUuXG4gICdjb2x1bW5zJyxcblxuICAvLyBzZXJ2aWNlIFtzdHJpbmddOiBKRUUgc2VydmljZSBwYXRoLiBEZWZhdWx0OiBubyB2YWx1ZS5cbiAgJ3NlcnZpY2UnLFxuXG4gIC8vIHN0YXktaW4tcmVjb3JkLWFmdGVyLWVkaXQgW3N0cmluZ11beWVzfG5vfHRydWV8ZmFsc2VdOiBzaG93cyBlZGl0IGZvcm0gYWZ0ZXIgZWRpdCBhIHJlY29yZC4gRGVmYXVsdDogZmFsc2U7XG4gICdzdGF5SW5SZWNvcmRBZnRlckVkaXQ6IHN0YXktaW4tcmVjb3JkLWFmdGVyLWVkaXQnLFxuXG4gIC8vIFtzdHJpbmddW25ldyB8IGRldGFpbF06IHNob3dzIHJlc2V0ZWQgZm9ybSBhZnRlciBpbnNlcnQgYSBuZXcgcmVjb3JkIChuZXcpIG9yIHNob3dzIHRoZSBpbnNlcnRlZCByZWNvcmQgYWZ0ZXIgKGRldGFpbClcbiAgJ2FmdGVySW5zZXJ0TW9kZTogYWZ0ZXItaW5zZXJ0LW1vZGUnLFxuXG4gICdzZXJ2aWNlVHlwZSA6IHNlcnZpY2UtdHlwZScsXG5cbiAgJ3F1ZXJ5T25Jbml0IDogcXVlcnktb24taW5pdCcsXG5cbiAgJ3BhcmVudEtleXM6IHBhcmVudC1rZXlzJyxcblxuICAvLyBxdWVyeS1tZXRob2QgW3N0cmluZ106IG5hbWUgb2YgdGhlIHNlcnZpY2UgbWV0aG9kIHRvIHBlcmZvcm0gcXVlcmllcy4gRGVmYXVsdDogcXVlcnkuXG4gICdxdWVyeU1ldGhvZDogcXVlcnktbWV0aG9kJyxcblxuICAvLyBpbnNlcnQtbWV0aG9kIFtzdHJpbmddOiBuYW1lIG9mIHRoZSBzZXJ2aWNlIG1ldGhvZCB0byBwZXJmb3JtIGluc2VydHMuIERlZmF1bHQ6IGluc2VydC5cbiAgJ2luc2VydE1ldGhvZDogaW5zZXJ0LW1ldGhvZCcsXG5cbiAgLy8gdXBkYXRlLW1ldGhvZCBbc3RyaW5nXTogbmFtZSBvZiB0aGUgc2VydmljZSBtZXRob2QgdG8gcGVyZm9ybSB1cGRhdGVzLiBEZWZhdWx0OiB1cGRhdGUuXG4gICd1cGRhdGVNZXRob2Q6IHVwZGF0ZS1tZXRob2QnLFxuXG4gIC8vIGRlbGV0ZS1tZXRob2QgW3N0cmluZ106IG5hbWUgb2YgdGhlIHNlcnZpY2UgbWV0aG9kIHRvIHBlcmZvcm0gZGVsZXRpb25zLiBEZWZhdWx0OiBkZWxldGUuXG4gICdkZWxldGVNZXRob2Q6IGRlbGV0ZS1tZXRob2QnLFxuXG4gIC8vIGxheW91dC1kaXJlY3Rpb24gW3N0cmluZ11bY29sdW1ufHJvd106IERlZmF1bHQ6IGNvbHVtblxuICAnbGF5b3V0RGlyZWN0aW9uOiBsYXlvdXQtZGlyZWN0aW9uJyxcblxuICAvLyBmeExheW91dEFsaWduIHZhbHVlLiBEZWZhdWx0OiAnc3RhcnQgc3RhcnQnXG4gICdsYXlvdXRBbGlnbjogbGF5b3V0LWFsaWduJyxcblxuICAvLyBlZGl0YWJsZS1kZXRhaWwgW3N0cmluZ11beWVzfG5vfHRydWV8ZmFsc2VdOiBEZWZhdWx0OiB0cnVlO1xuICAnZWRpdGFibGVEZXRhaWw6IGVkaXRhYmxlLWRldGFpbCcsXG5cbiAgLy8ga2V5cy1zcWwtdHlwZXMgW3N0cmluZ106IGVudGl0eSBrZXlzIHR5cGVzLCBzZXBhcmF0ZWQgYnkgJzsnLiBEZWZhdWx0OiBubyB2YWx1ZS5cbiAgJ2tleXNTcWxUeXBlczoga2V5cy1zcWwtdHlwZXMnLFxuXG4gIC8vIHVuZG8tYnV0dG9uIFtzdHJpbmddW3llc3xub3x0cnVlfGZhbHNlXTogSW5jbHVkZSB1bmRvIGJ1dHRvbiBpbiBmb3JtLXRvb2xiYXIuIERlZmF1bHQ6IHRydWU7XG4gICd1bmRvQnV0dG9uOiB1bmRvLWJ1dHRvbicsXG5cbiAgLy8gc2hvdy1oZWFkZXItbmF2aWdhdGlvbiBbc3RyaW5nXVt5ZXN8bm98dHJ1ZXxmYWxzZV06IEluY2x1ZGUgbmF2aWdhdGlvbnMgYnV0dG9ucyBpbiBmb3JtLXRvb2xiYXIuIERlZmF1bHQ6IGZhbHNlO1xuICAnc2hvd0hlYWRlck5hdmlnYXRpb246IHNob3ctaGVhZGVyLW5hdmlnYXRpb24nLFxuXG4gIC8vIGF0dHJcbiAgJ29hdHRyOmF0dHInLFxuXG4gICdpbmNsdWRlQnJlYWRjcnVtYjogaW5jbHVkZS1icmVhZGNydW1iJyxcblxuICAnZGV0ZWN0Q2hhbmdlc09uQmx1cjogZGV0ZWN0LWNoYW5nZXMtb24tYmx1cicsXG5cbiAgJ2NvbmZpcm1FeGl0OiBjb25maXJtLWV4aXQnLFxuXG4gIC8vIGlnbm9yZS1vbi1leGl0IFtzdHJpbmddOiBmaWVsZHMgYXR0cidzIHRoYXQgd2lsbCBiZSBpZ25vcmVkIHdoZW4gdGhlIGZvcm0gaXMgY2xvc2VkLCBzZXBhcmF0ZWQgYnkgJzsnLiBEZWZhdWx0OiBubyB2YWx1ZS5cbiAgJ2lnbm9yZU9uRXhpdDogaWdub3JlLW9uLWV4aXQnLFxuXG4gIC8vIFtmdW5jdGlvbl06IGZ1bmN0aW9uIHRvIGV4ZWN1dGUgb24gcXVlcnkgZXJyb3IuIERlZmF1bHQ6IG5vIHZhbHVlLlxuICAncXVlcnlGYWxsYmFja0Z1bmN0aW9uOiBxdWVyeS1mYWxsYmFjay1mdW5jdGlvbicsXG5cbiAgLy8gJ2luc2VydEZhbGxiYWNrRnVuY3Rpb246IGluc2VydC1mYWxsYmFjay1mdW5jdGlvbicsXG5cbiAgLy8gJ3VwZGF0ZUZhbGxiYWNrRnVuY3Rpb246IHVwZGF0ZS1mYWxsYmFjay1mdW5jdGlvbicsXG5cbiAgLy8gJ2RlbGV0ZUZhbGxiYWNrRnVuY3Rpb246IGRlbGV0ZS1mYWxsYmFjay1mdW5jdGlvbidcblxuICAvLyBpZ25vcmUtZGVmYXVsdC1uYXZpZ2F0aW9uIFtzdHJpbmddW3llc3xub3x0cnVlfGZhbHNlXTogaWdub3JlIGRlZmF1bHQgbmF2aWdhdGlvbiB3aGVuIHVzZXIgY2xpY2sgdGhlIHRvb2xiYXIgYnV0dG9ucy4gRGVmYXVsdDogbm8uXG4gICdpZ25vcmVEZWZhdWx0TmF2aWdhdGlvbjogaWdub3JlLWRlZmF1bHQtbmF2aWdhdGlvbicsXG5cbiAgJ21lc3NhZ2VTZXJ2aWNlVHlwZSA6IG1lc3NhZ2Utc2VydmljZS10eXBlJyxcbiAgLy8gIGNvbmZpZ3VyZS1zZXJ2aWNlLWFyZ3MgW09Db25maWd1cmVTZXJ2aWNlQXJnc106IEFsbG93cyBjb25maWd1cmUgc2VydmljZSAuXG4gICdjb25maWd1cmVTZXJ2aWNlQXJnczogY29uZmlndXJlLXNlcnZpY2UtYXJncycsXG4gIC8vc2V0LXZhbHVlLW9yZGVyOiBvcmRlciBvZiB0aGUgZmllbGQgYXR0cmlidXRlcyBieSB3aGljaCB0aGUgdmFsdWUgd2lsbCBiZSBzZXQsIHNlcGFyYXRlZCBieSAnOyAnLiBEZWZhdWx0OiBubyB2YWx1ZS5cbiAgJ3NldFZhbHVlT3JkZXI6IHNldC12YWx1ZS1vcmRlcicsXG5cbiAgLy9mb3JtLWRhdGEtdmFsaWRhdGlvbjogRXhlY3V0ZXMgdGhlIGJlZm9yZS1zYXZlIHZhbGlkYXRpb24gY2FsbGJhY2sgZm9yIGluc2VydCBhbmQgdXBkYXRlIG9wZXJhdGlvbnNcbiAgJ2Zvcm1EYXRhVmFsaWRhdGlvbkZ1bmN0aW9uOiBmb3JtLWRhdGEtdmFsaWRhdGlvbi1mdW5jdGlvbidcbl07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX09VVFBVVFNfT19GT1JNID0gW1xuICAnb25EYXRhTG9hZGVkJyxcbiAgJ2JlZm9yZUNsb3NlRGV0YWlsJyxcbiAgJ2JlZm9yZUdvRWRpdE1vZGUnLFxuICAnb25Gb3JtTW9kZUNoYW5nZScsXG4gICdvbkJlZm9yZUluc2VydCcsXG4gICdvbkJlZm9yZVVwZGF0ZScsXG4gICdvbkJlZm9yZURlbGV0ZScsXG4gICdvbkluc2VydCcsXG4gICdvblVwZGF0ZScsXG4gICdvbkRlbGV0ZScsXG4gICdiZWZvcmVJbnNlcnRNb2RlJyxcbiAgJ2JlZm9yZVVwZGF0ZU1vZGUnLFxuICAnYmVmb3JlSW5pdGlhbE1vZGUnLFxuICAnb25JbnNlcnRNb2RlJyxcbiAgJ29uVXBkYXRlTW9kZScsXG4gICdvbkluaXRpYWxNb2RlJyxcbiAgJ29uQ2FuY2VsJ1xuXTtcblxuQENvbXBvbmVudCh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtBc3luY1BpcGUsIE5nQ2xhc3MsIE5nVGVtcGxhdGVPdXRsZXQsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIE1hdFByb2dyZXNzQmFyTW9kdWxlLCBPS2V5Ym9hcmRMaXN0ZW5lckRpcmVjdGl2ZSwgT0Zvcm1Ub29sYmFyQ29tcG9uZW50XSxcbiAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxuICBzZWxlY3RvcjogJ28tZm9ybScsXG4gIHByb3ZpZGVyczogW1xuICAgIHsgcHJvdmlkZTogT0Zvcm1CYXNlLCB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBPRm9ybUNvbXBvbmVudCkgfSxcbiAgICBPbnRpbWl6ZVNlcnZpY2VQcm92aWRlcixcbiAgICBPRm9ybU1lc3NhZ2VTZXJ2aWNlXG4gIF0sXG4gIHRlbXBsYXRlVXJsOiAnLi9vLWZvcm0uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9vLWZvcm0uY29tcG9uZW50LnNjc3MnXSxcbiAgaW5wdXRzOiBERUZBVUxUX0lOUFVUU19PX0ZPUk0sXG4gIG91dHB1dHM6IERFRkFVTFRfT1VUUFVUU19PX0ZPUk0sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGhvc3Q6IHtcbiAgICAnW2NsYXNzLm8tZm9ybV0nOiAndHJ1ZSdcbiAgfVxufSlcbmV4cG9ydCBjbGFzcyBPRm9ybUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBDYW5Db21wb25lbnREZWFjdGl2YXRlLCBBZnRlclZpZXdJbml0IHtcblxuICBwdWJsaWMgc3RhdGljIERFRkFVTFRfTEFZT1VUX0RJUkVDVElPTiA9ICdjb2x1bW4nO1xuICBwdWJsaWMgc3RhdGljIGd1YXJkQ2xhc3NOYW1lID0gJ0NhbkRlYWN0aXZhdGVGb3JtR3VhcmQnO1xuXG4gIC8qIGlucHV0cyB2YXJpYWJsZXMgKi9cbiAgZ2V0IHNob3dIZWFkZXIoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLl9zaG93SGVhZGVyOyB9XG4gIHNldCBzaG93SGVhZGVyKHZhbDogYm9vbGVhbiB8IHN0cmluZykgeyB0aGlzLl9zaG93SGVhZGVyID0gQm9vbGVhbkNvbnZlcnRlcih2YWwpOyB9XG4gIHByb3RlY3RlZCBfc2hvd0hlYWRlcjogYm9vbGVhbiA9IHRydWU7XG4gIGhlYWRlck1vZGU6IHN0cmluZyA9ICdmbG9hdGluZyc7XG4gIGhlYWRlclBvc2l0aW9uOiAndG9wJyB8ICdib3R0b20nID0gJ3RvcCc7XG4gIGxhYmVsaGVhZGVyOiBzdHJpbmcgPSAnJztcbiAgbGFiZWxIZWFkZXJBbGlnbjogc3RyaW5nID0gJ2NlbnRlcic7XG4gIGhlYWRlcmFjdGlvbnM6IHN0cmluZyA9ICdhbGwnO1xuICBzaG93SGVhZGVyQWN0aW9uc1RleHQ6IHN0cmluZyA9ICd5ZXMnO1xuICBlbnRpdHk6IHN0cmluZztcbiAga2V5czogc3RyaW5nID0gJyc7XG4gIGNvbHVtbnM6IHN0cmluZyA9ICcnO1xuICBzZXRWYWx1ZU9yZGVyOiBzdHJpbmcgPSAnJztcbiAgc2VydmljZTogc3RyaW5nO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgc3RheUluUmVjb3JkQWZ0ZXJFZGl0OiBib29sZWFuID0gZmFsc2U7XG4gIGFmdGVySW5zZXJ0TW9kZTogJ25ldycgfCAnZGV0YWlsJyB8ICdjbG9zZScgPSAnY2xvc2UnO1xuICBzZXJ2aWNlVHlwZTogc3RyaW5nO1xuICBnZXQgcXVlcnlPbkluaXQoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLl9xdWVyeU9uSW5pdDsgfVxuICBzZXQgcXVlcnlPbkluaXQodmFsOiBib29sZWFuIHwgc3RyaW5nKSB7IHRoaXMuX3F1ZXJ5T25Jbml0ID0gQm9vbGVhbkNvbnZlcnRlcih2YWwpOyB9XG4gIHByaXZhdGUgX3F1ZXJ5T25Jbml0OiBib29sZWFuID0gdHJ1ZTtcbiAgcHJvdGVjdGVkIHBhcmVudEtleXM6IHN0cmluZztcbiAgcHJvdGVjdGVkIGdldE1ldGhvZDogc3RyaW5nID0gXCJcIlxuICBwcm90ZWN0ZWQgcXVlcnlNZXRob2Q6IHN0cmluZyA9IENvZGVzLlFVRVJZQllJRF9NRVRIT0Q7XG4gIHByb3RlY3RlZCBpbnNlcnRNZXRob2Q6IHN0cmluZyA9IENvZGVzLklOU0VSVF9NRVRIT0Q7XG4gIHByb3RlY3RlZCB1cGRhdGVNZXRob2Q6IHN0cmluZyA9IENvZGVzLlVQREFURV9NRVRIT0Q7XG4gIHByb3RlY3RlZCBkZWxldGVNZXRob2Q6IHN0cmluZyA9IENvZGVzLkRFTEVURV9NRVRIT0Q7XG4gIHByb3RlY3RlZCBfbGF5b3V0RGlyZWN0aW9uOiBzdHJpbmcgPSBPRm9ybUNvbXBvbmVudC5ERUZBVUxUX0xBWU9VVF9ESVJFQ1RJT047XG4gIHByb3RlY3RlZCBfbGF5b3V0QWxpZ246IHN0cmluZyA9ICdzdGFydCBzdHJldGNoJztcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHByb3RlY3RlZCBlZGl0YWJsZURldGFpbDogYm9vbGVhbiA9IHRydWU7XG4gIHByb3RlY3RlZCBrZXlzU3FsVHlwZXM6IHN0cmluZztcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHVuZG9CdXR0b246IGJvb2xlYW4gPSB0cnVlO1xuICBnZXQgc2hvd0hlYWRlck5hdmlnYXRpb24oKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLl9zaG93SGVhZGVyTmF2aWdhdGlvbjsgfVxuICBzZXQgc2hvd0hlYWRlck5hdmlnYXRpb24odmFsOiBib29sZWFuIHwgc3RyaW5nKSB7IHRoaXMuX3Nob3dIZWFkZXJOYXZpZ2F0aW9uID0gQm9vbGVhbkNvbnZlcnRlcih2YWwpOyB9XG4gIHByaXZhdGUgX3Nob3dIZWFkZXJOYXZpZ2F0aW9uOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBvYXR0cjogc3RyaW5nID0gJyc7XG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBpbmNsdWRlQnJlYWRjcnVtYjogYm9vbGVhbiA9IGZhbHNlO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgZGV0ZWN0Q2hhbmdlc09uQmx1cjogYm9vbGVhbiA9IHRydWU7XG4gIGdldCBjb25maXJtRXhpdCgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuX2NvbmZpcm1FeGl0OyB9XG4gIHNldCBjb25maXJtRXhpdCh2YWw6IGJvb2xlYW4gfCBzdHJpbmcpIHsgdGhpcy5fY29uZmlybUV4aXQgPSBCb29sZWFuQ29udmVydGVyKHZhbCk7IH1cbiAgcHJpdmF0ZSBfY29uZmlybUV4aXQ6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIHNldFZhbHVlT3JkZXJBcnJheTogc3RyaW5nW107XG5cbiAgc2V0IGlnbm9yZU9uRXhpdCh2YWw6IHN0cmluZ1tdKSB7XG4gICAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgICB2YWwgPSBVdGlsLnBhcnNlQXJyYXkodmFsLCB0cnVlKTtcbiAgICB9XG4gICAgdGhpcy5faWdub3JlT25FeGl0ID0gdmFsO1xuICB9XG4gIGdldCBpZ25vcmVPbkV4aXQoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLl9pZ25vcmVPbkV4aXQ7XG4gIH1cbiAgcHJvdGVjdGVkIF9pZ25vcmVPbkV4aXQ6IHN0cmluZ1tdO1xuICBwdWJsaWMgcXVlcnlGYWxsYmFja0Z1bmN0aW9uOiAoZXJyb3I6IGFueSkgPT4gdm9pZDtcblxuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgcHVibGljIGlnbm9yZURlZmF1bHROYXZpZ2F0aW9uOiBib29sZWFuID0gZmFsc2U7XG4gIG1lc3NhZ2VTZXJ2aWNlVHlwZTogc3RyaW5nO1xuICBwdWJsaWMgZm9ybURhdGFWYWxpZGF0aW9uRnVuY3Rpb246IChkYXRhOiBhbnkpID0+IE9Gb3JtVmFsaWRhdGlvbjtcblxuICAvKiBlbmQgb2YgaW5wdXRzIHZhcmlhYmxlcyAqL1xuXG4gIC8qcGFyc2VkIGlucHV0cyB2YXJpYWJsZXMgKi9cbiAgaXNEZXRhaWxGb3JtOiBib29sZWFuID0gZmFsc2U7XG4gIGtleXNBcnJheTogc3RyaW5nW10gPSBbXTtcbiAgY29sc0FycmF5OiBzdHJpbmdbXSA9IFtdO1xuICBkYXRhU2VydmljZTogQmFzZVNlcnZpY2U8U2VydmljZVJlc3BvbnNlPjtcbiAgX3BLZXlzRXF1aXYgPSB7fTtcbiAga2V5c1NxbFR5cGVzQXJyYXk6IEFycmF5PHN0cmluZz4gPSBbXTtcbiAgcHJvdGVjdGVkIF9tZXNzYWdlU2VydmljZTogT0Zvcm1NZXNzYWdlU2VydmljZTtcbiAgLyogZW5kIG9mIHBhcnNlZCBpbnB1dHMgdmFyaWFibGVzICovXG5cbiAgZm9ybUdyb3VwOiBGb3JtR3JvdXA7XG4gIG9uRGF0YUxvYWRlZDogRXZlbnRFbWl0dGVyPG9iamVjdD4gPSBuZXcgRXZlbnRFbWl0dGVyPG9iamVjdD4oKTtcbiAgYmVmb3JlQ2xvc2VEZXRhaWw6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgYGJlZm9yZVVwZGF0ZU1vZGVgIGluc3RlYWRcbiAgICovXG4gIGJlZm9yZUdvRWRpdE1vZGU6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIGJlZm9yZUluc2VydE1vZGUgPSBuZXcgRXZlbnRFbWl0dGVyPG51bGw+KCk7XG4gIGJlZm9yZVVwZGF0ZU1vZGUgPSBuZXcgRXZlbnRFbWl0dGVyPG51bGw+KCk7XG4gIGJlZm9yZUluaXRpYWxNb2RlID0gbmV3IEV2ZW50RW1pdHRlcjxudWxsPigpO1xuICBvbkluc2VydE1vZGUgPSBuZXcgRXZlbnRFbWl0dGVyPG51bGw+KCk7XG4gIG9uVXBkYXRlTW9kZSA9IG5ldyBFdmVudEVtaXR0ZXI8bnVsbD4oKTtcbiAgb25Jbml0aWFsTW9kZSA9IG5ldyBFdmVudEVtaXR0ZXI8bnVsbD4oKTtcbiAgb25Gb3JtTW9kZUNoYW5nZTogRXZlbnRFbWl0dGVyPG51bWJlcj4gPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcbiAgcHVibGljIG9uQmVmb3JlSW5zZXJ0OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgcHVibGljIG9uQmVmb3JlVXBkYXRlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgcHVibGljIG9uQmVmb3JlRGVsZXRlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgcHVibGljIG9uSW5zZXJ0OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgcHVibGljIG9uVXBkYXRlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgcHVibGljIG9uRGVsZXRlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgcHVibGljIG9uQ2FuY2VsOiBFdmVudEVtaXR0ZXI8bnVsbD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgcHJvdGVjdGVkIGxvYWRpbmdTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHB1YmxpYyBsb2FkaW5nOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5sb2FkaW5nU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgcHVibGljIGZvcm1EYXRhOiBvYmplY3QgPSB7fTtcbiAgcHVibGljIG5hdmlnYXRpb25EYXRhOiBBcnJheTxhbnk+ID0gW107XG4gIHB1YmxpYyBjdXJyZW50SW5kZXggPSAwO1xuICBwdWJsaWMgbW9kZTogbnVtYmVyID0gT0Zvcm1Db21wb25lbnQuTW9kZSgpLklOSVRJQUw7XG5cbiAgcHJvdGVjdGVkIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2U7XG4gIHByb3RlY3RlZCBuYXZpZ2F0aW9uU2VydmljZTogTmF2aWdhdGlvblNlcnZpY2U7XG4gIHByb3RlY3RlZCBzbmFja0JhclNlcnZpY2U6IFNuYWNrQmFyU2VydmljZTtcblxuICBwcm90ZWN0ZWQgX2Zvcm1Ub29sYmFyOiBPRm9ybVRvb2xiYXJCYXNlO1xuXG4gIHByb3RlY3RlZCBfY29tcG9uZW50czogSUZvcm1EYXRhQ29tcG9uZW50SGFzaCA9IHt9O1xuICBwcm90ZWN0ZWQgX2NvbXBTUUxUeXBlczogb2JqZWN0ID0ge307XG5cbiAgZm9ybVBhcmVudEtleXNWYWx1ZXM6IG9iamVjdDtcblxuICBwdWJsaWMgb25Gb3JtSW5pdFN0cmVhbTogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICBwcm90ZWN0ZWQgcmVsb2FkU3RyZWFtOiBPYnNlcnZhYmxlPGFueT47XG4gIHByb3RlY3RlZCByZWxvYWRTdHJlYW1TdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICBwcm90ZWN0ZWQgcXVlcnlTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgcHJvdGVjdGVkIGxvYWRlclN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBwcm90ZWN0ZWQgZHluYW1pY0Zvcm1TdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICBwcm90ZWN0ZWQgZGVhY3RpdmF0ZUd1YXJkOiBDYW5EZWFjdGl2YXRlRm9ybUd1YXJkO1xuICBwcm90ZWN0ZWQgX2NhbkRlYWN0aXZhdGVGbjogKGNvbXBvbmVudDogQ2FuQ29tcG9uZW50RGVhY3RpdmF0ZSwgY3VycjogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgc3RhdGU6IFJvdXRlclN0YXRlU25hcHNob3QsIGZ1dHVyZTogUm91dGVyU3RhdGVTbmFwc2hvdCkgPT4gYW55O1xuICBwdWJsaWMgZGVhY3RpdmF0ZUd1YXJkSWQ6IHN0cmluZztcbiAgcHJvdGVjdGVkIGZvcm1DYWNoZTogT0Zvcm1DYWNoZUNsYXNzO1xuICBwcm90ZWN0ZWQgZm9ybU5hdmlnYXRpb246IE9Gb3JtTmF2aWdhdGlvbkNsYXNzO1xuXG4gIHB1YmxpYyBmb3JtQ29udGFpbmVyOiBPRm9ybUNvbnRhaW5lckNvbXBvbmVudDtcblxuICBwcm90ZWN0ZWQgcGVybWlzc2lvbnNTZXJ2aWNlOiBQZXJtaXNzaW9uc1NlcnZpY2U7XG4gIHByb3RlY3RlZCBwZXJtaXNzaW9uczogT0Zvcm1QZXJtaXNzaW9ucztcblxuICBAVmlld0NoaWxkKCdpbm5lckZvcm0nKSBpbm5lckZvcm1FbDogRWxlbWVudFJlZjtcblxuICBpZ25vcmVGb3JtQ2FjaGVLZXlzOiBBcnJheTxhbnk+ID0gW107XG4gIGNhbkRpc2NhcmRDaGFuZ2VzOiBib29sZWFuO1xuXG4gIHB1YmxpYyBzdGF0aWMgTW9kZSgpOiBhbnkge1xuICAgIGVudW0gbSB7XG4gICAgICBRVUVSWSxcbiAgICAgIElOU0VSVCxcbiAgICAgIFVQREFURSxcbiAgICAgIElOSVRJQUxcbiAgICB9XG4gICAgcmV0dXJuIG07XG4gIH1cbiAgcHJvdGVjdGVkIGNvbmZpZ3VyZVNlcnZpY2VBcmdzOiBPQ29uZmlndXJlU2VydmljZUFyZ3M7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIHJvdXRlcjogUm91dGVyLFxuICAgIHByb3RlY3RlZCBhY3RSb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJvdGVjdGVkIHpvbmU6IE5nWm9uZSxcbiAgICBwcm90ZWN0ZWQgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByb3RlY3RlZCBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgcHJvdGVjdGVkIGVsUmVmOiBFbGVtZW50UmVmXG4gICkge1xuXG4gICAgdGhpcy5mb3JtQ2FjaGUgPSBuZXcgT0Zvcm1DYWNoZUNsYXNzKHRoaXMpO1xuICAgIHRoaXMuZm9ybU5hdmlnYXRpb24gPSBuZXcgT0Zvcm1OYXZpZ2F0aW9uQ2xhc3ModGhpcy5pbmplY3RvciwgdGhpcywgdGhpcy5yb3V0ZXIsIHRoaXMuYWN0Um91dGUpO1xuXG4gICAgdGhpcy5kaWFsb2dTZXJ2aWNlID0gaW5qZWN0b3IuZ2V0PERpYWxvZ1NlcnZpY2U+KERpYWxvZ1NlcnZpY2UgYXMgVHlwZTxEaWFsb2dTZXJ2aWNlPik7XG4gICAgdGhpcy5uYXZpZ2F0aW9uU2VydmljZSA9IGluamVjdG9yLmdldDxOYXZpZ2F0aW9uU2VydmljZT4oTmF2aWdhdGlvblNlcnZpY2UgYXMgVHlwZTxOYXZpZ2F0aW9uU2VydmljZT4pO1xuICAgIHRoaXMuc25hY2tCYXJTZXJ2aWNlID0gaW5qZWN0b3IuZ2V0PFNuYWNrQmFyU2VydmljZT4oU25hY2tCYXJTZXJ2aWNlIGFzIFR5cGU8U25hY2tCYXJTZXJ2aWNlPik7XG4gICAgdGhpcy5wZXJtaXNzaW9uc1NlcnZpY2UgPSB0aGlzLmluamVjdG9yLmdldDxQZXJtaXNzaW9uc1NlcnZpY2U+KFBlcm1pc3Npb25zU2VydmljZSBhcyBUeXBlPFBlcm1pc3Npb25zU2VydmljZT4pO1xuXG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgdGhpcy5yZWxvYWRTdHJlYW0gPSBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIHNlbGYub25Gb3JtSW5pdFN0cmVhbS5hc09ic2VydmFibGUoKSxcbiAgICAgIHNlbGYuZm9ybU5hdmlnYXRpb24ubmF2aWdhdGlvblN0cmVhbS5hc09ic2VydmFibGUoKVxuICAgIF0pO1xuXG4gICAgdGhpcy5yZWxvYWRTdHJlYW1TdWJzY3JpcHRpb24gPSB0aGlzLnJlbG9hZFN0cmVhbS5zdWJzY3JpYmUodmFsQXJyID0+IHtcbiAgICAgIGlmIChVdGlsLmlzQXJyYXkodmFsQXJyKSAmJiB2YWxBcnIubGVuZ3RoID09PSAyICYmICFzZWxmLmlzSW5JbnNlcnRNb2RlKCkpIHtcbiAgICAgICAgY29uc3QgdmFsQXJyVmFsdWVzID0gdmFsQXJyWzBdID09PSB0cnVlICYmIHZhbEFyclsxXSA9PT0gdHJ1ZTtcbiAgICAgICAgaWYgKHNlbGYucXVlcnlPbkluaXQgJiYgdmFsQXJyVmFsdWVzKSB7XG4gICAgICAgICAgc2VsZi5yZWxvYWQodHJ1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2VsZi5pbml0aWFsaXplRmllbGRzKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRyeSB7XG4gICAgICB0aGlzLmZvcm1Db250YWluZXIgPSBpbmplY3Rvci5nZXQoT0Zvcm1Db250YWluZXJDb21wb25lbnQpO1xuICAgICAgdGhpcy5mb3JtQ29udGFpbmVyLnNldEZvcm0odGhpcyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy9cbiAgICB9XG4gICAgdGhpcy5nZXRHbG9iYWxDb25maWcoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0R2xvYmFsQ29uZmlnKCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBvRm9ybUdsb2JhbENvbmZpZyA9IHRoaXMuaW5qZWN0b3IuZ2V0KE9fRk9STV9HTE9CQUxfQ09ORklHKTtcbiAgICAgIGlmIChVdGlsLmlzRGVmaW5lZChvRm9ybUdsb2JhbENvbmZpZy5oZWFkZXJBY3Rpb25zKSkge1xuICAgICAgICB0aGlzLmhlYWRlcmFjdGlvbnMgPSBvRm9ybUdsb2JhbENvbmZpZy5oZWFkZXJBY3Rpb25zO1xuICAgICAgfTtcblxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBEbyBub3RoaW5nIGJlY2F1c2UgaXMgb3B0aW9uYWxcbiAgICB9XG4gIH1cblxuICByZWdpc3RlckZvcm1Db21wb25lbnQoY29tcDogYW55KSB7XG4gICAgaWYgKGNvbXApIHtcbiAgICAgIGNvbnN0IGF0dHIgPSBjb21wLmdldEF0dHJpYnV0ZSgpO1xuICAgICAgaWYgKGF0dHIgJiYgYXR0ci5sZW5ndGggPiAwKSB7XG5cbiAgICAgICAgaWYgKCFjb21wLmlzQXV0b21hdGljUmVnaXN0ZXJpbmcoKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9jb21wb25lbnRzLmhhc093blByb3BlcnR5KGF0dHIpKSB7XG4gICAgICAgICAgY29tcC5yZXBlYXRlZEF0dHIgPSB0cnVlO1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZXJlIGlzIGFscmVhZHkgYSBjb21wb25lbnQgcmVnaXN0ZXJlZCBpbiB0aGUgZm9ybSB3aXRoIHRoZSBhdHRyOiAnICsgYXR0cik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY29tcG9uZW50c1thdHRyXSA9IGNvbXA7XG4gICAgICAgIC8vIFNldHRpbmcgcGFyZW50IGtleSB2YWx1ZXMuLi5cbiAgICAgICAgaWYgKHRoaXMuZm9ybVBhcmVudEtleXNWYWx1ZXMgJiYgdGhpcy5mb3JtUGFyZW50S2V5c1ZhbHVlc1thdHRyXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY29uc3QgdmFsID0gdGhpcy5mb3JtUGFyZW50S2V5c1ZhbHVlc1thdHRyXTtcbiAgICAgICAgICB0aGlzLl9jb21wb25lbnRzW2F0dHJdLnNldFZhbHVlKHZhbCwge1xuICAgICAgICAgICAgZW1pdE1vZGVsVG9WaWV3Q2hhbmdlOiBmYWxzZSxcbiAgICAgICAgICAgIGVtaXRFdmVudDogZmFsc2VcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvKlxuICAgICAgICAqIFRPRE8uIENoZWNrIGl0ISEhXG4gICAgICAgICogRW4gdW4gZm9ybXVsYXJpbyBjb24gdGFicywgY3VhbmRvIHNlIGNhbWJpYSBkZSB1bm8gYSBvdHJvLCBzZSBkZXN0cnV5ZW4gbGFzIHZpc3Rhc1xuICAgICAgICAqIGRlIGxvcyBjb21wb25lbnRlcyBoaWpvIGRlbCBmb3JtdWxhcmlvLlxuICAgICAgICAqIGZvcm1EYXRhQ2FjaGUgY29udGllbmUgbG9zIHZhbG9yZXMgKG9yaWdpbmFsZXMgw7MgZWRpdGFkb3MpIGRlIGxvcyBjYW1wb3MgZGVsIGZvcm11bGFyaW8uXG4gICAgICAgICogTGEgaWRlYSBlcyBhc2lnbmFyIGVzZSB2YWxvciBhbCBjYW1wbyBjdWFuZG8gc2UgcmVnaXN0cmUgZGUgbnVldm8gKEhheSBxdWUgYXNlZ3VyYXIgZWwgcHJvY2Vzb1xuICAgICAgICAqIHBhcmEgcXVlIHPDs2xvIHNlYSBjdWFuZG8gc2UgcmVnaXN0cmEgZGUgbnVldm8gOykgKVxuICAgICAgICAqL1xuICAgICAgICBjb25zdCBjYWNoZWRWYWx1ZSA9IHRoaXMuZm9ybUNhY2hlLmdldENhY2hlZFZhbHVlKGF0dHIpO1xuICAgICAgICBpZiAoVXRpbC5pc0RlZmluZWQoY2FjaGVkVmFsdWUpICYmIHRoaXMuZ2V0RGF0YVZhbHVlcygpICYmIHRoaXMuX2NvbXBvbmVudHMuaGFzT3duUHJvcGVydHkoYXR0cikpIHtcbiAgICAgICAgICB0aGlzLl9jb21wb25lbnRzW2F0dHJdLnNldFZhbHVlKGNhY2hlZFZhbHVlLCB7XG4gICAgICAgICAgICBlbWl0TW9kZWxUb1ZpZXdDaGFuZ2U6IGZhbHNlLFxuICAgICAgICAgICAgZW1pdEV2ZW50OiBmYWxzZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmVnaXN0ZXJTUUxUeXBlRm9ybUNvbXBvbmVudChjb21wOiBJRm9ybURhdGFUeXBlQ29tcG9uZW50KSB7XG4gICAgaWYgKChjb21wIGFzIGFueSkucmVwZWF0ZWRBdHRyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChjb21wKSB7XG4gICAgICBjb25zdCB0eXBlID0gY29tcC5nZXRTUUxUeXBlKCk7XG4gICAgICBjb25zdCBhdHRyID0gY29tcC5nZXRBdHRyaWJ1dGUoKTtcbiAgICAgIGlmICh0eXBlICE9PSBTUUxUeXBlcy5PVEhFUiAmJiBhdHRyICYmIGF0dHIubGVuZ3RoID4gMCAmJiB0aGlzLmlnbm9yZUZvcm1DYWNoZUtleXMuaW5kZXhPZihhdHRyKSA9PT0gLTEpIHtcbiAgICAgICAgLy8gUmlnaHQgbm93IGp1c3Qgc3RvcmUgdmFsdWVzIGRpZmZlcmVudCBvZiAnT1RIRVInXG4gICAgICAgIHRoaXMuX2NvbXBTUUxUeXBlc1thdHRyXSA9IHR5cGU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmVnaXN0ZXJGb3JtQ29udHJvbENvbXBvbmVudChjb21wOiBJRm9ybURhdGFDb21wb25lbnQpIHtcbiAgICBpZiAoKGNvbXAgYXMgYW55KS5yZXBlYXRlZEF0dHIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGNvbXApIHtcbiAgICAgIGNvbnN0IGF0dHIgPSBjb21wLmdldEF0dHJpYnV0ZSgpO1xuICAgICAgaWYgKGF0dHIgJiYgYXR0ci5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IGNvbnRyb2w6IEZvcm1Db250cm9sID0gY29tcC5nZXRDb250cm9sKCk7XG4gICAgICAgIGlmIChjb250cm9sKSB7XG4gICAgICAgICAgdGhpcy5mb3JtR3JvdXAucmVnaXN0ZXJDb250cm9sKGF0dHIsIGNvbnRyb2wpO1xuICAgICAgICAgIGlmICghY29tcC5pc0F1dG9tYXRpY1JlZ2lzdGVyaW5nKCkpIHtcbiAgICAgICAgICAgIHRoaXMuaWdub3JlRm9ybUNhY2hlS2V5cy5wdXNoKGNvbXAuZ2V0QXR0cmlidXRlKCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHVucmVnaXN0ZXJGb3JtQ29tcG9uZW50KGNvbXA6IElDb21wb25lbnQpIHtcbiAgICBpZiAoY29tcCkge1xuICAgICAgY29uc3QgYXR0ciA9IGNvbXAuZ2V0QXR0cmlidXRlKCk7XG4gICAgICBpZiAoYXR0ciAmJiBhdHRyLmxlbmd0aCA+IDAgJiYgdGhpcy5fY29tcG9uZW50cy5oYXNPd25Qcm9wZXJ0eShhdHRyKSkge1xuICAgICAgICBkZWxldGUgdGhpcy5fY29tcG9uZW50c1thdHRyXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXRBdHRyaWJ1dGUoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5vYXR0cikge1xuICAgICAgcmV0dXJuIHRoaXMub2F0dHI7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICB1bnJlZ2lzdGVyRm9ybUNvbnRyb2xDb21wb25lbnQoY29tcDogSUZvcm1EYXRhQ29tcG9uZW50KSB7XG4gICAgaWYgKGNvbXAgJiYgY29tcC5pc0F1dG9tYXRpY1JlZ2lzdGVyaW5nKCkpIHtcbiAgICAgIGNvbnN0IGNvbnRyb2w6IEZvcm1Db250cm9sID0gY29tcC5nZXRDb250cm9sKCk7XG4gICAgICBjb25zdCBhdHRyID0gY29tcC5nZXRBdHRyaWJ1dGUoKTtcbiAgICAgIGlmIChjb250cm9sICYmIGF0dHIgJiYgYXR0ci5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLnJlbW92ZUNvbnRyb2woYXR0cik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdW5yZWdpc3RlclNRTFR5cGVGb3JtQ29tcG9uZW50KGNvbXA6IElGb3JtRGF0YVR5cGVDb21wb25lbnQpIHtcbiAgICBpZiAoY29tcCkge1xuICAgICAgY29uc3QgYXR0ciA9IGNvbXAuZ2V0QXR0cmlidXRlKCk7XG4gICAgICBpZiAoYXR0ciAmJiBhdHRyLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZGVsZXRlIHRoaXMuX2NvbXBTUUxUeXBlc1thdHRyXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZWdpc3RlclRvb2xiYXIoZlRvb2xiYXI6IE9Gb3JtVG9vbGJhckNvbXBvbmVudCkge1xuICAgIGlmIChmVG9vbGJhcikge1xuICAgICAgdGhpcy5fZm9ybVRvb2xiYXIgPSBmVG9vbGJhcjtcbiAgICAgIHRoaXMuX2Zvcm1Ub29sYmFyLmlzRGV0YWlsID0gdGhpcy5pc0RldGFpbEZvcm07XG4gICAgfVxuICB9XG5cbiAgZ2V0Q29tcG9uZW50cygpOiBJRm9ybURhdGFDb21wb25lbnRIYXNoIHtcbiAgICByZXR1cm4gdGhpcy5fY29tcG9uZW50cztcbiAgfVxuXG4gIGdldENvbXBvbmVudEJ5QXR0cihhdHRyOnN0cmluZyk6IElGb3JtRGF0YUNvbXBvbmVudCB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbXBvbmVudHNbYXR0cl07XG4gIH1cblxuXG4gIHB1YmxpYyBsb2FkKCk6IGFueSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgY29uc3Qgem9uZSA9IHRoaXMuaW5qZWN0b3IuZ2V0KE5nWm9uZSk7XG4gICAgY29uc3QgbG9hZE9ic2VydmFibGUgPSBuZXcgT2JzZXJ2YWJsZShvYnNlcnZlciA9PiB7XG4gICAgICBjb25zdCB0aW1lciA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgb2JzZXJ2ZXIubmV4dCh0cnVlKTtcbiAgICAgIH0sIDI1MCk7XG5cbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgICB6b25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgc2VsZi5sb2FkaW5nU3ViamVjdC5uZXh0KGZhbHNlKTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuXG4gICAgfSk7XG4gICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gbG9hZE9ic2VydmFibGUuc3Vic2NyaWJlKHZhbCA9PiB7XG4gICAgICB6b25lLnJ1bigoKSA9PiB7XG4gICAgICAgIHNlbGYubG9hZGluZ1N1YmplY3QubmV4dCh2YWwgYXMgYm9vbGVhbik7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gc3Vic2NyaXB0aW9uO1xuICB9XG5cbiAgZ2V0RGF0YVZhbHVlKGF0dHI6IHN0cmluZykge1xuICAgIGlmICh0aGlzLmlzSW5JbnNlcnRNb2RlKCkpIHtcbiAgICAgIGNvbnN0IHVybFBhcmFtcyA9IHRoaXMuZm9ybU5hdmlnYXRpb24uZ2V0RmlsdGVyRnJvbVVybFBhcmFtcygpO1xuICAgICAgY29uc3QgdmFsID0gdGhpcy5mb3JtR3JvdXAudmFsdWVbYXR0cl0gfHwgdXJsUGFyYW1zW2F0dHJdO1xuICAgICAgcmV0dXJuIG5ldyBPRm9ybVZhbHVlKHZhbCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmlzSW5Jbml0aWFsTW9kZSgpICYmICF0aGlzLmlzRWRpdGFibGVEZXRhaWwoKSkge1xuICAgICAgY29uc3QgZGF0YSA9IHRoaXMuZm9ybURhdGE7XG4gICAgICBpZiAoZGF0YSAmJiBkYXRhLmhhc093blByb3BlcnR5KGF0dHIpKSB7XG4gICAgICAgIHJldHVybiBkYXRhW2F0dHJdO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5pc0luVXBkYXRlTW9kZSgpIHx8IHRoaXMuaXNFZGl0YWJsZURldGFpbCgpKSB7XG4gICAgICBpZiAodGhpcy5mb3JtRGF0YSAmJiBPYmplY3Qua2V5cyh0aGlzLmZvcm1EYXRhKS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IHZhbCA9IHRoaXMuZm9ybUNhY2hlLmdldENhY2hlZFZhbHVlKGF0dHIpO1xuICAgICAgICBpZiAodGhpcy5mb3JtR3JvdXAuZGlydHkgJiYgdmFsKSB7XG4gICAgICAgICAgaWYgKHZhbCBpbnN0YW5jZW9mIE9Gb3JtVmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWw7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBuZXcgT0Zvcm1WYWx1ZSh2YWwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFJldHVybiBvcmlnaW5hbCB2YWx1ZSBzdG9yZWQgaW50byBmb3JtIGRhdGEuLi5cbiAgICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5mb3JtRGF0YTtcbiAgICAgICAgICBpZiAoZGF0YSAmJiBkYXRhLmhhc093blByb3BlcnR5KGF0dHIpKSB7XG4gICAgICAgICAgICByZXR1cm4gZGF0YVthdHRyXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5ldyBPRm9ybVZhbHVlKCk7XG4gIH1cblxuICBnZXREYXRhVmFsdWVzKCkge1xuICAgIHJldHVybiB0aGlzLmZvcm1EYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFycyB0aGUgZm9ybSBkYXRhLiBUaGUgZGF0YSByZWxhdGVkIHRvIHVybCBwYXJhbXMgYW5kIHBhcmVudCBrZXlzIHJlbWFpbiB1bmNoYW5nZWQuXG4gICAqL1xuICBjbGVhckRhdGEoKSB7XG4gICAgY29uc3QgZmlsdGVyID0gdGhpcy5mb3JtTmF2aWdhdGlvbi5nZXRGaWx0ZXJGcm9tVXJsUGFyYW1zKCk7XG4gICAgdGhpcy5mb3JtR3JvdXAucmVzZXQoe30sIHtcbiAgICAgIGVtaXRFdmVudDogZmFsc2VcbiAgICB9KTtcbiAgICB0aGlzLnNldERhdGEoZmlsdGVyKTtcbiAgfVxuXG4gIGNhbkRlYWN0aXZhdGUoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB8IFByb21pc2U8Ym9vbGVhbj4gfCBib29sZWFuIHtcbiAgICBjb25zdCByZWFkT25seSA9IHRoaXMuaXNJbkluaXRpYWxNb2RlKCkgJiYgIXRoaXMuaXNFZGl0YWJsZURldGFpbCgpO1xuICAgIGNvbnN0IGNhbmNlbGxlZEVkaXRpb24gPSB0aGlzLmlzSW5VcGRhdGVNb2RlKCkgJiYgdGhpcy5fZm9ybVRvb2xiYXIgJiYgIXRoaXMuX2Zvcm1Ub29sYmFyLmVkaXRNb2RlO1xuICAgIGlmIChyZWFkT25seSB8fCBjYW5jZWxsZWRFZGl0aW9uKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuY29uZmlybUV4aXQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBjb25zdCBjYW5EaXNjYXJkQ2hhbmdlcyA9ICEhdGhpcy5jYW5EaXNjYXJkQ2hhbmdlcztcbiAgICB0aGlzLmNhbkRpc2NhcmRDaGFuZ2VzID0gZmFsc2U7XG4gICAgcmV0dXJuIGNhbkRpc2NhcmRDaGFuZ2VzIHx8IHRoaXMuc2hvd0NvbmZpcm1EaXNjYXJkQ2hhbmdlcygpO1xuICB9XG5cbiAgc2hvd0NvbmZpcm1EaXNjYXJkQ2hhbmdlcygpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5mb3JtTmF2aWdhdGlvbi5zaG93Q29uZmlybURpc2NhcmRDaGFuZ2VzKHRoaXMuaWdub3JlT25FeGl0KTtcbiAgfVxuXG4gIGV4ZWN1dGVUb29sYmFyQWN0aW9uKGFjdGlvbjogc3RyaW5nLCBvcHRpb25zPzogYW55KSB7XG4gICAgc3dpdGNoIChhY3Rpb24pIHtcbiAgICAgIGNhc2UgQ29kZXMuQkFDS19BQ1RJT046IHRoaXMuYmFjayhvcHRpb25zKTsgYnJlYWs7XG4gICAgICBjYXNlIENvZGVzLkNMT1NFX0RFVEFJTF9BQ1RJT046IHRoaXMuY2xvc2VEZXRhaWwob3B0aW9ucyk7IGJyZWFrO1xuICAgICAgY2FzZSBDb2Rlcy5SRUxPQURfQUNUSU9OOiB0aGlzLnJlbG9hZCh0cnVlKTsgYnJlYWs7XG4gICAgICBjYXNlIENvZGVzLkdPX0lOU0VSVF9BQ1RJT046IHRoaXMuZ29JbnNlcnRNb2RlKG9wdGlvbnMpOyBicmVhaztcbiAgICAgIGNhc2UgQ29kZXMuSU5TRVJUX0FDVElPTjogdGhpcy5pbnNlcnQoKTsgYnJlYWs7XG4gICAgICBjYXNlIENvZGVzLkdPX0VESVRfQUNUSU9OOiB0aGlzLmdvRWRpdE1vZGUoKTsgYnJlYWs7XG4gICAgICBjYXNlIENvZGVzLkVESVRfQUNUSU9OOiB0aGlzLnVwZGF0ZSgpOyBicmVhaztcbiAgICAgIGNhc2UgQ29kZXMuVU5ET19MQVNUX0NIQU5HRV9BQ1RJT046IHRoaXMudW5kbygpOyBicmVhaztcbiAgICAgIGNhc2UgQ29kZXMuREVMRVRFX0FDVElPTjogcmV0dXJuIHRoaXMuZGVsZXRlKCk7XG4gICAgICBkZWZhdWx0OiBicmVhaztcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuYWRkRGVhY3RpdmF0ZUd1YXJkKCk7XG5cbiAgICB0aGlzLmZvcm1Hcm91cCA9IG5ldyBGb3JtR3JvdXAoe30pO1xuXG4gICAgdGhpcy5mb3JtTmF2aWdhdGlvbi5pbml0aWFsaXplKCk7XG5cbiAgICB0aGlzLmluaXRpYWxpemUoKTtcbiAgfVxuXG4gIGFkZERlYWN0aXZhdGVHdWFyZCgpIHtcbiAgICBpZiAoIXRoaXMuYWN0Um91dGUgfHwgIXRoaXMuYWN0Um91dGUucm91dGVDb25maWcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5kZWFjdGl2YXRlR3VhcmQgPSB0aGlzLmluamVjdG9yLmdldChDYW5EZWFjdGl2YXRlRm9ybUd1YXJkKTtcbiAgICB0aGlzLmRlYWN0aXZhdGVHdWFyZC5hZGRGb3JtKHRoaXMpO1xuICAgIGNvbnN0IGNhbkRlYWN0aXZhdGVBcnJheSA9ICh0aGlzLmFjdFJvdXRlLnJvdXRlQ29uZmlnLmNhbkRlYWN0aXZhdGUgfHwgW10pO1xuICAgIGxldCBwcmV2aW91c2x5QWRkZWQgPSBmYWxzZTtcbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gY2FuRGVhY3RpdmF0ZUFycmF5Lmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBwcmV2aW91c2x5QWRkZWQgPSAoY2FuRGVhY3RpdmF0ZUFycmF5W2ldLmhhc093blByb3BlcnR5KCdDTEFTU05BTUUnKSAmJiBjYW5EZWFjdGl2YXRlQXJyYXlbaV0uQ0xBU1NOQU1FKSA9PT0gT0Zvcm1Db21wb25lbnQuZ3VhcmRDbGFzc05hbWVcbiAgICAgICAgfHwgKGNhbkRlYWN0aXZhdGVBcnJheVtpXSA9PT0gdGhpcy5fY2FuRGVhY3RpdmF0ZUZuKTtcbiAgICAgIGlmIChwcmV2aW91c2x5QWRkZWQpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghcHJldmlvdXNseUFkZGVkKSB7XG4gICAgICBjb25zdCBndWFyZCA9IHRoaXMuZGVhY3RpdmF0ZUd1YXJkO1xuICAgICAgdGhpcy5fY2FuRGVhY3RpdmF0ZUZuID0gKGNvbXBvbmVudDogQ2FuQ29tcG9uZW50RGVhY3RpdmF0ZSwgY3VycjogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgc3RhdGU6IFJvdXRlclN0YXRlU25hcHNob3QsIGZ1dHVyZTogUm91dGVyU3RhdGVTbmFwc2hvdCkgPT5cbiAgICAgICAgZ3VhcmQuY2FuRGVhY3RpdmF0ZShjb21wb25lbnQsIGN1cnIsIHN0YXRlLCBmdXR1cmUpO1xuICAgICAgKHRoaXMuX2NhbkRlYWN0aXZhdGVGbiBhcyBhbnkpLkNMQVNTTkFNRSA9IE9Gb3JtQ29tcG9uZW50Lmd1YXJkQ2xhc3NOYW1lO1xuICAgICAgY2FuRGVhY3RpdmF0ZUFycmF5LnB1c2godGhpcy5fY2FuRGVhY3RpdmF0ZUZuKTtcbiAgICAgIHRoaXMuYWN0Um91dGUucm91dGVDb25maWcuY2FuRGVhY3RpdmF0ZSA9IGNhbkRlYWN0aXZhdGVBcnJheTtcbiAgICB9XG4gIH1cblxuICBkZXN0cm95RGVhY3RpdmF0ZUd1YXJkKCkge1xuICAgIHRyeSB7XG4gICAgICBpZiAodGhpcy5oYXNEZWFjdGl2YXRlR3VhcmQoKSkge1xuICAgICAgICB0aGlzLmRlYWN0aXZhdGVHdWFyZC5yZW1vdmVGb3JtKHRoaXMpO1xuICAgICAgICBpZiAoIXRoaXMuZGVhY3RpdmF0ZUd1YXJkLmlzRm9ybXNDYWNoZUVtcHR5KCkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy5hY3RSb3V0ZSB8fCAhdGhpcy5hY3RSb3V0ZS5yb3V0ZUNvbmZpZyB8fCAhdGhpcy5hY3RSb3V0ZS5yb3V0ZUNvbmZpZy5jYW5EZWFjdGl2YXRlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGd1YXJkSW5kZXggPSB0aGlzLmFjdFJvdXRlLnJvdXRlQ29uZmlnLmNhbkRlYWN0aXZhdGUuZmluZEluZGV4KChjYW5EZWFjdGl2YXRlKSA9PiBjYW5EZWFjdGl2YXRlID09PSB0aGlzLl9jYW5EZWFjdGl2YXRlRm4pXG4gICAgICBpZiAoZ3VhcmRJbmRleCA+PSAwKSB7XG4gICAgICAgIHRoaXMuYWN0Um91dGUucm91dGVDb25maWcuY2FuRGVhY3RpdmF0ZS5zcGxpY2UoZ3VhcmRJbmRleCwgMSk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5hY3RSb3V0ZS5yb3V0ZUNvbmZpZy5jYW5EZWFjdGl2YXRlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBkZWxldGUgdGhpcy5hY3RSb3V0ZS5yb3V0ZUNvbmZpZy5jYW5EZWFjdGl2YXRlO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vXG4gICAgfVxuICB9XG5cbiAgaGFzRGVhY3RpdmF0ZUd1YXJkKCkge1xuICAgIHJldHVybiBVdGlsLmlzRGVmaW5lZCh0aGlzLmRlYWN0aXZhdGVHdWFyZCk7XG4gIH1cblxuICAvKipcbiAgICogQW5ndWxhciBtZXRob2RzXG4gICAqL1xuXG4gIGluaXRpYWxpemUoKSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgaWYgKHRoaXMuaGVhZGVyYWN0aW9ucyA9PT0gJ2FsbCcpIHtcbiAgICAgIHRoaXMuaGVhZGVyYWN0aW9ucyA9ICdSO0k7VTtEJztcbiAgICB9XG4gICAgdGhpcy5rZXlzQXJyYXkgPSBVdGlsLnBhcnNlQXJyYXkodGhpcy5rZXlzLCB0cnVlKTtcbiAgICB0aGlzLmNvbHNBcnJheSA9IFV0aWwucGFyc2VBcnJheSh0aGlzLmNvbHVtbnMsIHRydWUpO1xuICAgIGNvbnN0IHBrQXJyYXkgPSBVdGlsLnBhcnNlQXJyYXkodGhpcy5wYXJlbnRLZXlzKTtcbiAgICB0aGlzLl9wS2V5c0VxdWl2ID0gVXRpbC5wYXJzZVBhcmVudEtleXNFcXVpdmFsZW5jZXMocGtBcnJheSk7XG4gICAgdGhpcy5rZXlzU3FsVHlwZXNBcnJheSA9IFV0aWwucGFyc2VBcnJheSh0aGlzLmtleXNTcWxUeXBlcyk7XG4gICAgdGhpcy5zZXRWYWx1ZU9yZGVyQXJyYXkgPSBVdGlsLnBhcnNlQXJyYXkodGhpcy5zZXRWYWx1ZU9yZGVyKTtcblxuICAgIHRoaXMuY29uZmlndXJlU2VydmljZSgpO1xuXG4gICAgdGhpcy5mb3JtTmF2aWdhdGlvbi5zdWJzY3JpYmVUb1F1ZXJ5UGFyYW1zKCk7XG4gICAgdGhpcy5mb3JtTmF2aWdhdGlvbi5zdWJzY3JpYmVUb1VybFBhcmFtcygpO1xuICAgIHRoaXMuZm9ybU5hdmlnYXRpb24uc3Vic2NyaWJlVG9VcmwoKTtcbiAgICB0aGlzLmZvcm1OYXZpZ2F0aW9uLnN1YnNjcmliZVRvQ2FjaGVDaGFuZ2VzKCk7XG5cbiAgICBpZiAodGhpcy5uYXZpZ2F0aW9uU2VydmljZSkge1xuICAgICAgdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5vblZpc2libGVDaGFuZ2UodmlzaWJsZSA9PiB7XG4gICAgICAgIHNlbGYuc2hvd0hlYWRlciA9IHZpc2libGU7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLm1vZGUgPSBPRm9ybUNvbXBvbmVudC5Nb2RlKCkuSU5JVElBTDtcblxuICAgIHRoaXMucGVybWlzc2lvbnMgPSB0aGlzLnBlcm1pc3Npb25zU2VydmljZS5nZXRGb3JtUGVybWlzc2lvbnModGhpcy5vYXR0ciwgdGhpcy5hY3RSb3V0ZSk7XG5cbiAgICBpZiAodHlwZW9mIHRoaXMucXVlcnlGYWxsYmFja0Z1bmN0aW9uICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzLnF1ZXJ5RmFsbGJhY2tGdW5jdGlvbiA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgLy8gaWYgKHR5cGVvZiB0aGlzLmluc2VydEZhbGxiYWNrRnVuY3Rpb24gIT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyAgIHRoaXMuaW5zZXJ0RmFsbGJhY2tGdW5jdGlvbiA9IHVuZGVmaW5lZDtcbiAgICAvLyB9XG4gICAgLy8gaWYgKHR5cGVvZiB0aGlzLnVwZGF0ZUZhbGxiYWNrRnVuY3Rpb24gIT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyAgIHRoaXMudXBkYXRlRmFsbGJhY2tGdW5jdGlvbiA9IHVuZGVmaW5lZDtcbiAgICAvLyB9XG4gICAgLy8gaWYgKHR5cGVvZiB0aGlzLmRlbGV0ZUZhbGxiYWNrRnVuY3Rpb24gIT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyAgIHRoaXMuZGVsZXRlRmFsbGJhY2tGdW5jdGlvbiA9IHVuZGVmaW5lZDtcbiAgICAvLyB9XG4gIH1cblxuXG4gIC8qKlxuICAgKiBSZWluaXRpYWxpemUgZm9ybSBhZGRpbmcgb3B0aW9uc1xuICAgKiBAcGFyYW0gb3B0aW9uc1xuICAgKi9cbiAgcmVpbml0aWFsaXplKG9wdGlvbnM6IE9Gb3JtSW5pdGlhbGl6YXRpb25PcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgJiYgT2JqZWN0LmtleXMob3B0aW9ucykubGVuZ3RoKSB7XG4gICAgICBjb25zdCBjbG9uZWRPcHRzID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucyk7XG4gICAgICBmb3IgKGNvbnN0IHByb3AgaW4gY2xvbmVkT3B0cykge1xuICAgICAgICBpZiAoY2xvbmVkT3B0cy5oYXNPd25Qcm9wZXJ0eShwcm9wKSkge1xuICAgICAgICAgIHRoaXNbcHJvcF0gPSBjbG9uZWRPcHRzW3Byb3BdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLmRlc3Ryb3koKTtcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZSgpO1xuICAgIH1cbiAgfVxuXG4gIGNvbmZpZ3VyZVNlcnZpY2UoKSB7XG4gICAgY29uc3QgbXNnQ29uZmlndXJlU2VydmljZUFyZ3M6IE9Db25maWd1cmVNZXNzYWdlU2VydmljZUFyZ3MgPSB7IGluamVjdG9yOiB0aGlzLmluamVjdG9yLCBiYXNlU2VydmljZTogT0Zvcm1NZXNzYWdlU2VydmljZSwgc2VydmljZVR5cGU6IHRoaXMubWVzc2FnZVNlcnZpY2VUeXBlIH07XG4gICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UgPSBVdGlsLmNvbmZpZ3VyZU1lc3NhZ2VTZXJ2aWNlKG1zZ0NvbmZpZ3VyZVNlcnZpY2VBcmdzKTtcblxuICAgIGxldCBjb25maWd1cmVTZXJ2aWNlQXJnczogT0NvbmZpZ3VyZVNlcnZpY2VBcmdzID0geyBpbmplY3RvcjogdGhpcy5pbmplY3RvciwgYmFzZVNlcnZpY2U6IE9udGltaXplU2VydmljZSwgZW50aXR5OiB0aGlzLmVudGl0eSwgc2VydmljZTogdGhpcy5zZXJ2aWNlLCBzZXJ2aWNlVHlwZTogdGhpcy5zZXJ2aWNlVHlwZSB9O1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZCh0aGlzLmNvbmZpZ3VyZVNlcnZpY2VBcmdzKSkge1xuICAgICAgY29uZmlndXJlU2VydmljZUFyZ3MgPSB7IC4uLmNvbmZpZ3VyZVNlcnZpY2VBcmdzLCAuLi50aGlzLmNvbmZpZ3VyZVNlcnZpY2VBcmdzIH07XG4gICAgfVxuICAgIHRoaXMuZGF0YVNlcnZpY2UgPSBGYWN0b3J5VXRpbC5jb25maWd1cmVTZXJ2aWNlKGNvbmZpZ3VyZVNlcnZpY2VBcmdzKTtcbiAgfVxuXG4gIGdldCBtZXNzYWdlU2VydmljZSgpOiBPRm9ybU1lc3NhZ2VTZXJ2aWNlIHtcbiAgICByZXR1cm4gdGhpcy5fbWVzc2FnZVNlcnZpY2U7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLmRlc3Ryb3koKTtcbiAgfVxuXG4gIGRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMucmVsb2FkU3RyZWFtU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnJlbG9hZFN0cmVhbVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5xdWVyeVN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5xdWVyeVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5sb2FkZXJTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMubG9hZGVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIHRoaXMuZm9ybUNhY2hlLmRlc3Ryb3koKTtcbiAgICB0aGlzLmZvcm1OYXZpZ2F0aW9uLmRlc3Ryb3koKTtcbiAgICB0aGlzLmRlc3Ryb3lEZWFjdGl2YXRlR3VhcmQoKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuZGV0ZXJtaW5hdGVGb3JtTW9kZSgpO1xuICAgICAgdGhpcy5vbkZvcm1Jbml0U3RyZWFtLmVtaXQodHJ1ZSk7XG4gICAgfSwgMCk7XG4gIH1cblxuICAvKlxuICAgKiBJbm5lciBtZXRob2RzXG4gICAqL1xuXG4gIF9zZXRDb21wb25lbnRzRWRpdGFibGUoc3RhdGU6IGJvb2xlYW4pIHtcbiAgICBjb25zdCBjb21wb25lbnRzOiBhbnkgPSB0aGlzLmdldENvbXBvbmVudHMoKTtcbiAgICBPYmplY3Qua2V5cyhjb21wb25lbnRzKS5mb3JFYWNoKGNvbXBLZXkgPT4ge1xuICAgICAgY29uc3QgY29tcG9uZW50ID0gY29tcG9uZW50c1tjb21wS2V5XTtcbiAgICAgIGNvbXBvbmVudC5pc1JlYWRPbmx5ID0gIXN0YXRlO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgZm9ybSBvcGVyYXRpb24gbW9kZS5cbiAgICogQHBhcmFtIG1vZGUgVGhlIG1vZGUgdG8gYmUgZXN0YWJsaXNoZWRcbiAgICovXG4gIHNldEZvcm1Nb2RlKG1vZGU6IG51bWJlcikge1xuICAgIHN3aXRjaCAobW9kZSkge1xuICAgICAgY2FzZSBPRm9ybUNvbXBvbmVudC5Nb2RlKCkuSU5JVElBTDpcbiAgICAgICAgdGhpcy5iZWZvcmVJbml0aWFsTW9kZS5lbWl0KCk7XG4gICAgICAgIHRoaXMubW9kZSA9IG1vZGU7XG4gICAgICAgIGlmICh0aGlzLl9mb3JtVG9vbGJhcikge1xuICAgICAgICAgIHRoaXMuX2Zvcm1Ub29sYmFyLnNldEluaXRpYWxNb2RlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc2V0Q29tcG9uZW50c0VkaXRhYmxlKHRoaXMuaXNFZGl0YWJsZURldGFpbCgpKTtcbiAgICAgICAgdGhpcy5vbkZvcm1Nb2RlQ2hhbmdlLmVtaXQodGhpcy5tb2RlKTtcbiAgICAgICAgdGhpcy5vbkluaXRpYWxNb2RlLmVtaXQoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIE9Gb3JtQ29tcG9uZW50Lk1vZGUoKS5JTlNFUlQ6XG4gICAgICAgIHRoaXMuYmVmb3JlSW5zZXJ0TW9kZS5lbWl0KCk7XG4gICAgICAgIHRoaXMubW9kZSA9IG1vZGU7XG4gICAgICAgIGlmICh0aGlzLl9mb3JtVG9vbGJhcikge1xuICAgICAgICAgIHRoaXMuX2Zvcm1Ub29sYmFyLnNldEluc2VydE1vZGUoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNsZWFyRGF0YSgpO1xuICAgICAgICB0aGlzLl9zZXRDb21wb25lbnRzRWRpdGFibGUodHJ1ZSk7XG4gICAgICAgIHRoaXMub25Gb3JtTW9kZUNoYW5nZS5lbWl0KHRoaXMubW9kZSk7XG4gICAgICAgIHRoaXMub25JbnNlcnRNb2RlLmVtaXQoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIE9Gb3JtQ29tcG9uZW50Lk1vZGUoKS5VUERBVEU6XG4gICAgICAgIHRoaXMuYmVmb3JlVXBkYXRlTW9kZS5lbWl0KCk7XG4gICAgICAgIHRoaXMubW9kZSA9IG1vZGU7XG4gICAgICAgIGlmICh0aGlzLl9mb3JtVG9vbGJhcikge1xuICAgICAgICAgIHRoaXMuX2Zvcm1Ub29sYmFyLnNldEVkaXRNb2RlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc2V0Q29tcG9uZW50c0VkaXRhYmxlKHRydWUpO1xuICAgICAgICB0aGlzLm9uRm9ybU1vZGVDaGFuZ2UuZW1pdCh0aGlzLm1vZGUpO1xuICAgICAgICB0aGlzLm9uVXBkYXRlTW9kZS5lbWl0KCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBPRm9ybUNvbXBvbmVudC5Nb2RlKCkuUVVFUlk6XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Zvcm0gUVVFUlkgbW9kZSBpcyBub3QgaW1wbGVtZW50ZWQnKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuXG4gIC8qKlxuICAgKiBTZXRzIG5ldyBkYXRhIGZvciB0aGUgZm9ybVxuICAgKiBAcGFyYW0gZGF0YVxuICAgKi9cbiAgc2V0RGF0YShkYXRhKTogdm9pZCB7XG4gICAgaWYgKFV0aWwuaXNBcnJheShkYXRhKSkge1xuICAgICAgaWYgKGRhdGEubGVuZ3RoID4gMSkge1xuICAgICAgICBjb25zb2xlLndhcm4oJ1tPRm9ybUNvbXBvbmVudF0gRm9ybSBkYXRhIGhhcyBtb3JlIHRoYW4gYSBzaW5nbGUgcmVjb3JkLiBTdG9yaW5nIGVtcHR5IGRhdGEnKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGN1cnJlbnREYXRhID0gZGF0YS5sZW5ndGggPT09IDEgPyBkYXRhWzBdIDoge307XG4gICAgICB0aGlzLl91cGRhdGVGb3JtRGF0YSh0aGlzLnRvRm9ybVZhbHVlRGF0YShjdXJyZW50RGF0YSkpO1xuICAgICAgdGhpcy5fZW1pdERhdGEoY3VycmVudERhdGEpO1xuICAgIH0gZWxzZSBpZiAoVXRpbC5pc09iamVjdChkYXRhKSkge1xuICAgICAgdGhpcy5fdXBkYXRlRm9ybURhdGEodGhpcy50b0Zvcm1WYWx1ZURhdGEoZGF0YSkpO1xuICAgICAgdGhpcy5fZW1pdERhdGEoZGF0YSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUud2FybignRm9ybSBoYXMgcmVjZWl2ZWQgbm90IHN1cHBvcnRlZCBzZXJ2aWNlIGRhdGEuIFN1cHBvcnRlZCBkYXRhIGFyZSBBcnJheSBvciBPYmplY3QnKTtcbiAgICAgIHRoaXMuX3VwZGF0ZUZvcm1EYXRhKHt9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIGBzZXREYXRhKGRhdGEpYCBpbnN0ZWFkXG4gICAqL1xuICBfc2V0RGF0YShkYXRhKSB7XG4gICAgY29uc29sZS53YXJuKCdNZXRob2QgYE9Gb3JtQ29tcG9uZW50Ll9zZXREYXRhYCBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1cnV0ZS4gVXNlIGBzZXREYXRhYCBpbnN0ZWFkJyk7XG4gICAgdGhpcy5zZXREYXRhKGRhdGEpO1xuICB9XG5cbiAgX2VtaXREYXRhKGRhdGEpIHtcbiAgICB0aGlzLm9uRGF0YUxvYWRlZC5lbWl0KGRhdGEpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFVzZSBgYmFjaygpYCBpbnN0ZWFkXG4gICAqL1xuICBfYmFja0FjdGlvbigpIHtcbiAgICBjb25zb2xlLndhcm4oJ01ldGhvZCBgT0Zvcm1Db21wb25lbnQuX2JhY2tBY3Rpb25gIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnVydXRlLiBVc2UgYGJhY2tgIGluc3RlYWQnKTtcbiAgICB0aGlzLmJhY2soKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBOYXZpZ2F0ZSBiYWNrXG4gICAqL1xuICBiYWNrKG9wdGlvbnM/OiBhbnkpIHtcbiAgICBjb25zdCBhbGxPcHRpb25zID0gT2JqZWN0LmFzc2lnbihvcHRpb25zIHx8IHt9LCB7IGlnbm9yZU5hdmlnYXRpb246IHRoaXMuaWdub3JlRGVmYXVsdE5hdmlnYXRpb24gfSk7XG4gICAgdGhpcy5mb3JtTmF2aWdhdGlvbi5uYXZpZ2F0ZUJhY2soYWxsT3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIGBjbG9zZURldGFpbChvcHRpb25zPzogYW55KWAgaW5zdGVhZFxuICAgKi9cbiAgX2Nsb3NlRGV0YWlsQWN0aW9uKG9wdGlvbnM/OiBhbnkpIHtcbiAgICBjb25zb2xlLndhcm4oJ01ldGhvZCBgT0Zvcm1Db21wb25lbnQuX2Nsb3NlRGV0YWlsQWN0aW9uYCBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1cnV0ZS4gVXNlIGBjbG9zZURldGFpbGAgaW5zdGVhZCcpO1xuICAgIHRoaXMuY2xvc2VEZXRhaWwob3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogQ2xvc2UgY3VycmVudCBkZXRhaWwgZm9ybVxuICAgKi9cbiAgY2xvc2VEZXRhaWwob3B0aW9ucz86IGFueSkge1xuICAgIG9wdGlvbnMgPSBVdGlsLmlzRGVmaW5lZChvcHRpb25zKSA/IG9wdGlvbnMgOiB7fTtcbiAgICBvcHRpb25zLmlnbm9yZU5hdmlnYXRpb24gPSB0aGlzLmlnbm9yZURlZmF1bHROYXZpZ2F0aW9uO1xuICAgIHRoaXMuZm9ybU5hdmlnYXRpb24uY2xvc2VEZXRhaWxBY3Rpb24ob3B0aW9ucyk7XG4gIH1cblxuICBfc3RheUluUmVjb3JkQWZ0ZXJJbnNlcnQoaW5zZXJ0ZWRLZXlzOiBvYmplY3QpIHtcbiAgICB0aGlzLmZvcm1OYXZpZ2F0aW9uLnN0YXlJblJlY29yZEFmdGVySW5zZXJ0KGluc2VydGVkS2V5cyk7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIGByZWxvYWQodXNlRmlsdGVyOiBib29sZWFuID0gZmFsc2UpYCBpbnN0ZWFkXG4gICAqL1xuICBfcmVsb2FkQWN0aW9uKHVzZUZpbHRlcjogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgY29uc29sZS53YXJuKCdNZXRob2QgYE9Gb3JtQ29tcG9uZW50Ll9yZWxvYWRBY3Rpb25gIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnVydXRlLiBVc2UgYHJlbG9hZGAgaW5zdGVhZCcpO1xuICAgIHRoaXMucmVsb2FkKHVzZUZpbHRlcik7XG4gIH1cblxuICAvKipcbiAgICogUmVsb2FkIHRoZSBmb3JtIGRhdGFcbiAgICovXG4gIHJlbG9hZCh1c2VGaWx0ZXI6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIGxldCBxdWVyeUFyZ3VtZW50cyA9IHRoaXMuZ2V0UXVlcnlBcmd1bWVudHModXNlRmlsdGVyKTtcbiAgICB0aGlzLnF1ZXJ5RGF0YShxdWVyeUFyZ3VtZW50cy5maWx0ZXIpO1xuICB9XG5cbiAgZ2V0UXVlcnlBcmd1bWVudHModXNlRmlsdGVyOiBib29sZWFuLCBmaWx0ZXI6IGFueSA9IHt9KTogT1F1ZXJ5UGFyYW1zIHtcbiAgICBjb25zdCBhdiA9IHRoaXMuZ2V0QXR0cmlidXRlc1RvUXVlcnkoKTtcbiAgICBjb25zdCBzcWxUeXBlcyA9IHRoaXMuZ2V0QXR0cmlidXRlc1NRTFR5cGVzKCk7XG5cbiAgICBpZiAodXNlRmlsdGVyKSB7XG4gICAgICBmaWx0ZXIgPSB0aGlzLmdldEN1cnJlbnRLZXlzVmFsdWVzKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgZmlsdGVyOiBmaWx0ZXIsIGNvbHVtbnM6IGF2LCBlbnRpdHk6IHRoaXMuZW50aXR5LCBzcWxUeXBlczogc3FsVHlwZXMgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBOYXZpZ2F0ZXMgdG8gJ2luc2VydCcgbW9kZVxuICAgKiBAZGVwcmVjYXRlZCBVc2UgYGdvSW5zZXJ0TW9kZShvcHRpb25zPzogYW55KWAgaW5zdGVhZFxuICAgKi9cbiAgX2dvSW5zZXJ0TW9kZShvcHRpb25zPzogYW55KSB7XG4gICAgY29uc29sZS53YXJuKCdNZXRob2QgYE9Gb3JtQ29tcG9uZW50Ll9nb0luc2VydE1vZGVgIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnVydXRlLiBVc2UgYGdvSW5zZXJ0TW9kZWAgaW5zdGVhZCcpO1xuICAgIHRoaXMuZ29JbnNlcnRNb2RlKG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIE5hdmlnYXRlcyB0byAnaW5zZXJ0JyBtb2RlXG4gICAqL1xuICBnb0luc2VydE1vZGUob3B0aW9ucz86IGFueSkge1xuICAgIHRoaXMuZm9ybU5hdmlnYXRpb24uZ29JbnNlcnRNb2RlKG9wdGlvbnMpO1xuICB9XG5cbiAgX2NsZWFyRm9ybUFmdGVySW5zZXJ0KCkge1xuICAgIHRoaXMuY2xlYXJEYXRhKCk7XG4gICAgdGhpcy5fc2V0Q29tcG9uZW50c0VkaXRhYmxlKHRydWUpO1xuICB9XG5cbiAgX2NsZWFyQW5kQ2xvc2VGb3JtQWZ0ZXJJbnNlcnQoKSB7XG4gICAgY29uc3QgY2xvc2VPcHRzOiBGb3JtTGF5b3V0Q2xvc2VEZXRhaWxPcHRpb25zID0geyBleGl0V2l0aG91dENvbmZpcm1hdGlvbjogdHJ1ZSB9O1xuICAgIHRoaXMuY2xvc2VEZXRhaWwoY2xvc2VPcHRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQZXJmb3JtcyBpbnNlcnQgYWN0aW9uLlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgYGluc2VydCgpYCBpbnN0ZWFkXG4gICAqL1xuICBfaW5zZXJ0QWN0aW9uKCkge1xuICAgIGNvbnNvbGUud2FybignTWV0aG9kIGBPRm9ybUNvbXBvbmVudC5faW5zZXJ0QWN0aW9uYCBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1cnV0ZS4gVXNlIGBpbnNlcnRgIGluc3RlYWQnKTtcbiAgICB0aGlzLmluc2VydCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFBlcmZvcm1zIGluc2VydCBhY3Rpb24uXG4gICAqL1xuICBpbnNlcnQoKSB7XG4gICAgT2JqZWN0LmtleXModGhpcy5mb3JtR3JvdXAuY29udHJvbHMpLmZvckVhY2goKGNvbnRyb2wpID0+IHtcbiAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2NvbnRyb2xdLm1hcmtBc1RvdWNoZWQoKTtcbiAgICB9KTtcblxuICAgIGlmICghdGhpcy5mb3JtR3JvdXAudmFsaWQpIHtcbiAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5hbGVydCh0aGlzLl9tZXNzYWdlU2VydmljZS5nZXRWYWxpZGF0aW9uRXJyb3JEaWFsb2dUaXRsZSgpLCB0aGlzLl9tZXNzYWdlU2VydmljZS5nZXRWYWxpZGF0aW9uRXJyb3IoKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgY29uc3QgdmFsdWVzID0gdGhpcy5nZXRBdHRyaWJ1dGVzVmFsdWVzVG9JbnNlcnQoKTtcbiAgICBjb25zdCBzcWxUeXBlcyA9IHRoaXMuZ2V0QXR0cmlidXRlc1NRTFR5cGVzKCk7XG5cbiAgICAvLyB2YWxpZGF0aW9uIGJlZm9yZSBpbnNlcnRcbiAgICBpZiAoISh0aGlzLnZhbGlkYXRlQmVmb3JlQWN0aW9uKHZhbHVlcykpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5vbkJlZm9yZUluc2VydC5lbWl0KHZhbHVlcyk7XG4gICAgdGhpcy5pbnNlcnREYXRhKHZhbHVlcywgc3FsVHlwZXMpLnN1YnNjcmliZShyZXNwID0+IHtcbiAgICAgIHNlbGYucG9zdENvcnJlY3RJbnNlcnQocmVzcCk7XG4gICAgICBzZWxmLmZvcm1DYWNoZS5zZXRDYWNoZVNuYXBzaG90KCk7XG4gICAgICBzZWxmLm1hcmtGb3JtTGF5b3V0TWFuYWdlclRvVXBkYXRlKCk7XG4gICAgICBpZiAoc2VsZi5hZnRlckluc2VydE1vZGUgPT09ICdkZXRhaWwnKSB7XG4gICAgICAgIHNlbGYuX3N0YXlJblJlY29yZEFmdGVySW5zZXJ0KHJlc3ApO1xuICAgICAgfSBlbHNlIGlmIChzZWxmLmFmdGVySW5zZXJ0TW9kZSA9PT0gJ25ldycpIHtcbiAgICAgICAgdGhpcy5fY2xlYXJGb3JtQWZ0ZXJJbnNlcnQoKTtcbiAgICAgIH0gZWxzZSBpZiAoc2VsZi5hZnRlckluc2VydE1vZGUgPT09ICdjbG9zZScpIHtcbiAgICAgICAgdGhpcy5fY2xlYXJBbmRDbG9zZUZvcm1BZnRlckluc2VydCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2VsZi5jbG9zZURldGFpbCgpO1xuICAgICAgfVxuICAgIH0sIGVycm9yID0+IHtcbiAgICAgIHNlbGYucG9zdEluY29ycmVjdEluc2VydChlcnJvcik7XG4gICAgfSk7XG4gIH1cblxuICB2YWxpZGF0ZUJlZm9yZUFjdGlvbih2YWx1ZXM6IG9iamVjdCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmZvcm1EYXRhVmFsaWRhdGlvbkZ1bmN0aW9uKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmZvcm1EYXRhVmFsaWRhdGlvbkZ1bmN0aW9uKHZhbHVlcyk7XG4gICAgICBpZiAoIXJlc3VsdC52YWxpZCkge1xuICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuYWxlcnQoXG4gICAgICAgICAgcmVzdWx0LnRpdGxlID8/IHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmdldFZhbGlkYXRpb25FcnJvckRpYWxvZ1RpdGxlKCksXG4gICAgICAgICAgcmVzdWx0Lm1lc3NhZ2VzID8gcmVzdWx0Lm1lc3NhZ2VzLmpvaW4oJzwvYnI+JykgOiB0aGlzLl9tZXNzYWdlU2VydmljZS5nZXRWYWxpZGF0aW9uRXJyb3IoKSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogTmF2aWdhdGVzIHRvICdlZGl0JyBtb2RlXG4gICAqIEBkZXByZWNhdGVkIFVzZSBgZ29FZGl0TW9kZSgpYCBpbnN0ZWFkXG4gICAqL1xuICBfZ29FZGl0TW9kZSgpIHtcbiAgICBjb25zb2xlLndhcm4oJ01ldGhvZCBgT0Zvcm1Db21wb25lbnQuX2dvRWRpdE1vZGVgIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnVydXRlLiBVc2UgYGdvRWRpdE1vZGVgIGluc3RlYWQnKTtcbiAgICB0aGlzLmdvRWRpdE1vZGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBOYXZpZ2F0ZXMgdG8gJ2VkaXQnIG1vZGVcbiAgICovXG4gIGdvRWRpdE1vZGUoKSB7XG4gICAgdGhpcy5mb3JtTmF2aWdhdGlvbi5nb0VkaXRNb2RlKCk7XG4gIH1cblxuICAvKipcbiAgICogUGVyZm9ybXMgJ2VkaXQnIGFjdGlvblxuICAgKiBAZGVwcmVjYXRlZCBVc2UgYHVwZGF0ZSgpYCBpbnN0ZWFkXG4gICAqL1xuICBfZWRpdEFjdGlvbigpIHtcbiAgICBjb25zb2xlLndhcm4oJ01ldGhvZCBgT0Zvcm1Db21wb25lbnQuX2VkaXRBY3Rpb25gIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnVydXRlLiBVc2UgYHVwZGF0ZWAgaW5zdGVhZCcpO1xuICAgIHRoaXMudXBkYXRlKCk7XG4gIH1cblxuICAvKipcbiAgICogUGVyZm9ybXMgJ2VkaXQnIGFjdGlvblxuICAgKi9cbiAgdXBkYXRlKCkge1xuICAgIE9iamVjdC5rZXlzKHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzKS5mb3JFYWNoKFxuICAgICAgKGNvbnRyb2wpID0+IHtcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbY29udHJvbF0ubWFya0FzVG91Y2hlZCgpO1xuICAgICAgfVxuICAgICk7XG5cbiAgICBpZiAoIXRoaXMuZm9ybUdyb3VwLnZhbGlkKSB7XG4gICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuYWxlcnQoJ0VSUk9SJywgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZ2V0VmFsaWRhdGlvbkVycm9yKCkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIHJldHJpZXZpbmcga2V5cy4uLlxuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIGNvbnN0IGZpbHRlciA9IHRoaXMuZ2V0S2V5c1ZhbHVlcygpO1xuXG4gICAgLy8gcmV0cmlldmluZyB2YWx1ZXMgdG8gdXBkYXRlLi4uXG4gICAgY29uc3QgdmFsdWVzID0gdGhpcy5nZXRBdHRyaWJ1dGVzVmFsdWVzVG9VcGRhdGUoKTtcbiAgICBjb25zdCBzcWxUeXBlcyA9IHRoaXMuZ2V0QXR0cmlidXRlc1NRTFR5cGVzKCk7XG5cbiAgICBpZiAoT2JqZWN0LmtleXModmFsdWVzKS5sZW5ndGggPT09IDApIHtcbiAgICAgIC8vIE5vdGhpbmcgdG8gdXBkYXRlXG4gICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuYWxlcnQoJ0lORk8nLCB0aGlzLl9tZXNzYWdlU2VydmljZS5nZXROb3RoaW5nVG9VcGRhdGVNZXNzYWdlKCkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIHZhbGlkYXRpb24gYmVmb3JlIHVwZGF0ZVxuICAgIGlmICghKHRoaXMudmFsaWRhdGVCZWZvcmVBY3Rpb24odmFsdWVzKSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLm9uQmVmb3JlVXBkYXRlLmVtaXQodmFsdWVzKTtcbiAgICAvLyBpbnZva2UgdXBkYXRlIG1ldGhvZC4uLlxuICAgIHRoaXMudXBkYXRlRGF0YShmaWx0ZXIsIHZhbHVlcywgc3FsVHlwZXMpLnN1YnNjcmliZShyZXNwID0+IHtcbiAgICAgIHNlbGYucG9zdENvcnJlY3RVcGRhdGUocmVzcCk7XG4gICAgICBzZWxmLmZvcm1DYWNoZS5zZXRDYWNoZVNuYXBzaG90KCk7XG4gICAgICBzZWxmLm1hcmtGb3JtTGF5b3V0TWFuYWdlclRvVXBkYXRlKCk7XG4gICAgICBpZiAoc2VsZi5zdGF5SW5SZWNvcmRBZnRlckVkaXQpIHtcbiAgICAgICAgc2VsZi5yZWxvYWQodHJ1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZWxmLmNsb3NlRGV0YWlsKCk7XG4gICAgICB9XG4gICAgfSwgZXJyb3IgPT4ge1xuICAgICAgc2VsZi5wb3N0SW5jb3JyZWN0VXBkYXRlKGVycm9yKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQZXJmb3JtcyAnZGVsZXRlJyBhY3Rpb25cbiAgICogQGRlcHJlY2F0ZWQgVXNlIGBkZWxldGUoKWAgaW5zdGVhZFxuICAgKi9cbiAgX2RlbGV0ZUFjdGlvbigpIHtcbiAgICBjb25zb2xlLndhcm4oJ01ldGhvZCBgT0Zvcm1Db21wb25lbnQuX2RlbGV0ZUFjdGlvbmAgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXJ1dGUuIFVzZSBgZGVsZXRlYCBpbnN0ZWFkJyk7XG4gICAgcmV0dXJuIHRoaXMuZGVsZXRlKCk7XG4gIH1cblxuICAvKipcbiAgICogUGVyZm9ybXMgJ2RlbGV0ZScgYWN0aW9uXG4gICAqL1xuICBkZWxldGUoKSB7XG4gICAgY29uc3QgZmlsdGVyID0gdGhpcy5nZXRLZXlzVmFsdWVzKCk7XG4gICAgdGhpcy5vbkJlZm9yZURlbGV0ZS5lbWl0KGZpbHRlcik7XG4gICAgcmV0dXJuIHRoaXMuZGVsZXRlRGF0YShmaWx0ZXIpO1xuICB9XG5cblxuICBxdWVyeURhdGEoZmlsdGVyOiBhbnkpIHtcbiAgICBpZiAoIVV0aWwuaXNEZWZpbmVkKHRoaXMuZGF0YVNlcnZpY2UpKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ09Gb3JtQ29tcG9uZW50OiBubyBzZXJ2aWNlIGNvbmZpZ3VyZWQhIGFib3J0aW5nIHF1ZXJ5Jyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFVdGlsLmlzRGVmaW5lZChmaWx0ZXIpIHx8IE9iamVjdC5rZXlzKGZpbHRlcikubGVuZ3RoID09PSAwKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ09Gb3JtQ29tcG9uZW50OiBubyBmaWx0ZXIgY29uZmlndXJlZCEgYWJvcnRpbmcgcXVlcnknKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5mb3JtQ2FjaGUucmVzdGFydENhY2hlKCk7XG4gICAgdGhpcy5jbGVhckNvbXBvbmVudHNPbGRWYWx1ZSgpO1xuICAgIGlmICh0aGlzLnF1ZXJ5U3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnF1ZXJ5U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmxvYWRlclN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5sb2FkZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgdGhpcy5sb2FkZXJTdWJzY3JpcHRpb24gPSB0aGlzLmxvYWQoKTtcblxuICAgIGNvbnN0IHF1ZXJ5UGFyYW1ldGVyID0gdGhpcy5nZXRRdWVyeUFyZ3VtZW50cyhmYWxzZSwgZmlsdGVyKTtcblxuICAgIHRoaXMucXVlcnlTdWJzY3JpcHRpb24gPSB0aGlzLmRhdGFTZXJ2aWNlW3RoaXMucXVlcnlNZXRob2RdKC4uLnRoaXMuZGF0YVNlcnZpY2UucmVxdWVzdEFyZ3VtZW50QWRhcHRlci5wYXJzZVF1ZXJ5UGFyYW1ldGVycyhxdWVyeVBhcmFtZXRlcikpXG4gICAgICAuc3Vic2NyaWJlKChyZXNwOiBTZXJ2aWNlUmVzcG9uc2UpID0+IHtcbiAgICAgICAgaWYgKHJlc3AuaXNTdWNjZXNzZnVsKCkpIHtcbiAgICAgICAgICB0aGlzLnNldERhdGEocmVzcC5kYXRhKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLl91cGRhdGVGb3JtRGF0YSh7fSk7XG4gICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmFsZXJ0KCdFUlJPUicsIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmdldFF1ZXJ5RXJyb3JNZXNzYWdlKCkpO1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0VSUk9SOiAnICsgcmVzcC5tZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmxvYWRlclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgfSwgZXJyID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICB0aGlzLl91cGRhdGVGb3JtRGF0YSh7fSk7XG4gICAgICAgIGlmIChVdGlsLmlzRGVmaW5lZCh0aGlzLnF1ZXJ5RmFsbGJhY2tGdW5jdGlvbikpIHtcbiAgICAgICAgICB0aGlzLnF1ZXJ5RmFsbGJhY2tGdW5jdGlvbihlcnIpO1xuICAgICAgICB9IGVsc2UgaWYgKGVyciAmJiBlcnIuc3RhdHVzVGV4dCkge1xuICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5hbGVydCgnRVJST1InLCBlcnIuc3RhdHVzVGV4dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmFsZXJ0KCdFUlJPUicsIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmdldFF1ZXJ5RXJyb3JNZXNzYWdlKCkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubG9hZGVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIGdldEF0dHJpYnV0ZXNUb1F1ZXJ5KCk6IEFycmF5PGFueT4ge1xuICAgIGxldCBhdHRyaWJ1dGVzOiBBcnJheTxhbnk+ID0gW107XG4gICAgLy8gYWRkIGZvcm0ga2V5cy4uLlxuICAgIGlmICh0aGlzLmtleXNBcnJheSAmJiB0aGlzLmtleXNBcnJheS5sZW5ndGggPiAwKSB7XG4gICAgICBhdHRyaWJ1dGVzLnB1c2goLi4udGhpcy5rZXlzQXJyYXkpO1xuICAgIH1cbiAgICBjb25zdCBjb21wb25lbnRzOiBhbnkgPSB0aGlzLmdldENvbXBvbmVudHMoKTtcbiAgICAvLyBhZGQgb25seSB0aGUgZmllbGRzIGNvbnRhaW5lZCBpbnRvIHRoZSBmb3JtLi4uXG4gICAgT2JqZWN0LmtleXMoY29tcG9uZW50cykuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgIGlmIChhdHRyaWJ1dGVzLmluZGV4T2YoaXRlbSkgPCAwICYmXG4gICAgICAgIGNvbXBvbmVudHNbaXRlbV0uaXNBdXRvbWF0aWNSZWdpc3RlcmluZygpICYmIGNvbXBvbmVudHNbaXRlbV0uaXNBdXRvbWF0aWNCaW5kaW5nKCkpIHtcbiAgICAgICAgYXR0cmlidXRlcy5wdXNoKGl0ZW0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gYWRkIGZpZWxkcyBzdG9yZWQgaW50byBmb3JtIGNhY2hlLi4uXG4gICAgY29uc3QgZGF0YUNhY2hlID0gdGhpcy5mb3JtQ2FjaGUuZ2V0RGF0YUNhY2hlKCk7XG4gICAgaWYgKGRhdGFDYWNoZSkge1xuICAgICAgT2JqZWN0LmtleXMoZGF0YUNhY2hlKS5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICBpZiAoaXRlbSAhPT0gdW5kZWZpbmVkICYmIGF0dHJpYnV0ZXMuaW5kZXhPZihpdGVtKSA9PT0gLTEpIHtcbiAgICAgICAgICBhdHRyaWJ1dGVzLnB1c2goaXRlbSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBhdHRyaWJ1dGVzID0gYXR0cmlidXRlcy5jb25jYXQodGhpcy5jb2xzQXJyYXkuZmlsdGVyKGNvbCA9PiBhdHRyaWJ1dGVzLmluZGV4T2YoY29sKSA8IDApKTtcbiAgICByZXR1cm4gYXR0cmlidXRlcztcbiAgfVxuXG5cbiAgLyoqXG4gICAqIEFsbG93IHRvIG1hbmFnZSB0aGUgY2FsbCB0byB0aGUgaW5zZXJ0IHNlcnZpY2VcbiAgICogQHBhcmFtIHZhbHVlc1xuICAgKiBAcGFyYW0gW3NxbFR5cGVzXVxuICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlPGFueT5cbiAgICovXG4gIGluc2VydERhdGEodmFsdWVzLCBzcWxUeXBlcz86IG9iamVjdCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgaWYgKHRoaXMubG9hZGVyU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLmxvYWRlclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICB0aGlzLmxvYWRlclN1YnNjcmlwdGlvbiA9IHRoaXMubG9hZCgpO1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIGNvbnN0IG9ic2VydmFibGUgPSBuZXcgT2JzZXJ2YWJsZShvYnNlcnZlciA9PiB7XG4gICAgICB0aGlzLmRhdGFTZXJ2aWNlW3RoaXMuaW5zZXJ0TWV0aG9kXSh2YWx1ZXMsIHRoaXMuZW50aXR5LCBzcWxUeXBlcykuc3Vic2NyaWJlKFxuICAgICAgICByZXNwID0+IHtcbiAgICAgICAgICBpZiAocmVzcC5pc1N1Y2Nlc3NmdWwoKSkge1xuICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChyZXNwLmRhdGEpO1xuICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb2JzZXJ2ZXIuZXJyb3IocmVzcC5tZXNzYWdlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgc2VsZi5sb2FkZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyID0+IHtcbiAgICAgICAgICBvYnNlcnZlci5lcnJvcihlcnIpO1xuICAgICAgICAgIHNlbGYubG9hZGVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiBvYnNlcnZhYmxlO1xuICB9XG5cbiAgZ2V0QXR0cmlidXRlc1ZhbHVlc1RvSW5zZXJ0KCk6IG9iamVjdCB7XG4gICAgY29uc3QgYXR0clZhbHVlcyA9IHt9O1xuICAgIGlmICh0aGlzLmZvcm1QYXJlbnRLZXlzVmFsdWVzKSB7XG4gICAgICBPYmplY3QuYXNzaWduKGF0dHJWYWx1ZXMsIHRoaXMuZm9ybVBhcmVudEtleXNWYWx1ZXMpO1xuICAgIH1cbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihhdHRyVmFsdWVzLCB0aGlzLmdldFJlZ2lzdGVyZWRGaWVsZHNWYWx1ZXMoKSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBvYmplY3Qgd2l0aCB0aGUgc3FsIHR5cGVzIGZyb20gdGhlIGZvcm0gY29tcG9uZW50cyBhbmQgdGhlIGZvcm0ga2V5c1xuICAgKi9cbiAgcHVibGljIGdldEF0dHJpYnV0ZXNTUUxUeXBlcygpOiBvYmplY3Qge1xuICAgIGNvbnN0IHR5cGVzOiBvYmplY3QgPSB7fTtcbiAgICAvLyBBZGQgZm9ybSBrZXlzIHNxbCB0eXBlc1xuICAgIHRoaXMua2V5c1NxbFR5cGVzQXJyYXkuZm9yRWFjaCgoa3N0LCBpKSA9PiB0eXBlc1t0aGlzLmtleXNBcnJheVtpXV0gPSBTUUxUeXBlcy5nZXRTUUxUeXBlVmFsdWUoa3N0KSk7XG4gICAgLy8gQWRkIGZvcm0gY29tcG9uZW50cyBzcWwgdHlwZXNcbiAgICBpZiAodGhpcy5fY29tcFNRTFR5cGVzICYmIE9iamVjdC5rZXlzKHRoaXMuX2NvbXBTUUxUeXBlcykubGVuZ3RoID4gMCkge1xuICAgICAgT2JqZWN0LmFzc2lnbih0eXBlcywgdGhpcy5fY29tcFNRTFR5cGVzKTtcbiAgICB9XG4gICAgcmV0dXJuIHR5cGVzO1xuICB9XG5cblxuICAvKipcbiAgICogQWxsb3cgdG8gbWFuYWdlIHRoZSBjYWxsIHRvIHRoZSB1cGRhdGUgc2VydmljZVxuICAgKiBAcGFyYW0gZmlsdGVyXG4gICAqIEBwYXJhbSB2YWx1ZXNcbiAgICogQHBhcmFtIFtzcWxUeXBlc11cbiAgICogQHJldHVybnMgIE9ic2VydmFibGU8YW55PlxuICAgKi9cbiAgdXBkYXRlRGF0YShmaWx0ZXIsIHZhbHVlcywgc3FsVHlwZXM/OiBvYmplY3QpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGlmICh0aGlzLmxvYWRlclN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5sb2FkZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgdGhpcy5sb2FkZXJTdWJzY3JpcHRpb24gPSB0aGlzLmxvYWQoKTtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBjb25zdCBvYnNlcnZhYmxlID0gbmV3IE9ic2VydmFibGUob2JzZXJ2ZXIgPT4ge1xuICAgICAgdGhpcy5kYXRhU2VydmljZVt0aGlzLnVwZGF0ZU1ldGhvZF0oZmlsdGVyLCB2YWx1ZXMsIHRoaXMuZW50aXR5LCBzcWxUeXBlcykuc3Vic2NyaWJlKFxuICAgICAgICByZXNwID0+IHtcbiAgICAgICAgICBpZiAocmVzcC5pc1N1Y2Nlc3NmdWwoKSkge1xuICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChyZXNwLmRhdGEpO1xuICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb2JzZXJ2ZXIuZXJyb3IocmVzcC5tZXNzYWdlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgc2VsZi5sb2FkZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyID0+IHtcbiAgICAgICAgICBvYnNlcnZlci5lcnJvcihlcnIpO1xuICAgICAgICAgIHNlbGYubG9hZGVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiBvYnNlcnZhYmxlO1xuICB9XG5cbiAgZ2V0QXR0cmlidXRlc1ZhbHVlc1RvVXBkYXRlKCk6IG9iamVjdCB7XG4gICAgY29uc3QgdmFsdWVzID0ge307XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgY29uc3QgY2hhbmdlZEF0dHJzID0gdGhpcy5mb3JtQ2FjaGUuZ2V0Q2hhbmdlZEZvcm1Db250cm9sc0F0dHIoKTtcbiAgICBPYmplY3Qua2V5cyh0aGlzLmZvcm1Hcm91cC5jb250cm9scykuZmlsdGVyKGNvbnRyb2xOYW1lID0+XG4gICAgICBzZWxmLmlnbm9yZUZvcm1DYWNoZUtleXMuaW5kZXhPZihjb250cm9sTmFtZSkgPT09IC0xICYmXG4gICAgICBjaGFuZ2VkQXR0cnMuaW5kZXhPZihjb250cm9sTmFtZSkgIT09IC0xXG4gICAgKS5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICBjb25zdCBjb250cm9sID0gc2VsZi5mb3JtR3JvdXAuY29udHJvbHNbaXRlbV07XG4gICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIE9Gb3JtQ29udHJvbCkge1xuICAgICAgICBjb25zdCBjb21wID0gdGhpcy5nZXRDb21wb25lbnRCeUF0dHIoaXRlbSk7XG4gICAgICAgIC8qKiBQYXJzZSB0aGUgdmFsdWVzIOKAi+KAi3RvIHRoZSBmb3JtYXQgYWNjb3JkaW5nIHRvIHRoZWlyIHNxbHR5cGUgdG8gc2VuZCB0byB0aGUgdXBkYXRlIHJlcXVlc3QgKi9cbiAgICAgICAgdmFsdWVzW2l0ZW1dID0gU1FMVHlwZXMucGFyc2VVc2luZ1NRTFR5cGUoY29udHJvbC5nZXRWYWx1ZSgpLCBTUUxUeXBlcy5nZXRTUUxUeXBlS2V5KGNvbXAuZ2V0U1FMVHlwZSgpKSk7IDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbHVlc1tpdGVtXSA9IGNvbnRyb2wudmFsdWU7XG4gICAgICB9XG4gICAgICBpZiAodmFsdWVzW2l0ZW1dID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdmFsdWVzW2l0ZW1dID0gbnVsbDtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gdmFsdWVzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFsbG93IHRvIG1hbmFnZSB0aGUgY2FsbCB0byB0aGUgZGVsZXRlIHNlcnZpY2VcbiAgICogQHBhcmFtIGZpbHRlclxuICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlPGFueT5cbiAgICovXG4gIGRlbGV0ZURhdGEoZmlsdGVyOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGlmICh0aGlzLmxvYWRlclN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5sb2FkZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgdGhpcy5sb2FkZXJTdWJzY3JpcHRpb24gPSB0aGlzLmxvYWQoKTtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBjb25zdCBzcWxUeXBlcyA9IHRoaXMuZ2V0QXR0cmlidXRlc1NRTFR5cGVzKCk7XG4gICAgY29uc3Qgb2JzZXJ2YWJsZSA9IG5ldyBPYnNlcnZhYmxlKG9ic2VydmVyID0+IHtcbiAgICAgIHRoaXMuY2FuRGlzY2FyZENoYW5nZXMgPSB0cnVlO1xuICAgICAgdGhpcy5kYXRhU2VydmljZVt0aGlzLmRlbGV0ZU1ldGhvZF0oZmlsdGVyLCB0aGlzLmVudGl0eSwgc3FsVHlwZXMpLnN1YnNjcmliZShcbiAgICAgICAgcmVzcCA9PiB7XG4gICAgICAgICAgaWYgKHJlc3AuaXNTdWNjZXNzZnVsKCkpIHtcbiAgICAgICAgICAgIHNlbGYuZm9ybUNhY2hlLnNldENhY2hlU25hcHNob3QoKTtcbiAgICAgICAgICAgIHNlbGYubWFya0Zvcm1MYXlvdXRNYW5hZ2VyVG9VcGRhdGUoKTtcbiAgICAgICAgICAgIHNlbGYucG9zdENvcnJlY3REZWxldGUocmVzcCk7XG4gICAgICAgICAgICBvYnNlcnZlci5uZXh0KHJlc3AuZGF0YSk7XG4gICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZWxmLnBvc3RJbmNvcnJlY3REZWxldGUocmVzcCk7XG4gICAgICAgICAgICBvYnNlcnZlci5lcnJvcihyZXNwLm1lc3NhZ2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzZWxmLmxvYWRlclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9LFxuICAgICAgICBlcnIgPT4ge1xuICAgICAgICAgIHNlbGYucG9zdEluY29ycmVjdERlbGV0ZShlcnIpO1xuICAgICAgICAgIG9ic2VydmVyLmVycm9yKGVycik7XG4gICAgICAgICAgc2VsZi5sb2FkZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIG9ic2VydmFibGU7XG4gIH1cblxuICB0b0pTT05EYXRhKGRhdGEpIHtcbiAgICBpZiAoIWRhdGEpIHtcbiAgICAgIGRhdGEgPSB7fTtcbiAgICB9XG4gICAgY29uc3QgdmFsdWVEYXRhID0ge307XG4gICAgT2JqZWN0LmtleXMoZGF0YSkuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgdmFsdWVEYXRhW2l0ZW1dID0gZGF0YVtpdGVtXS52YWx1ZTtcbiAgICB9KTtcbiAgICByZXR1cm4gdmFsdWVEYXRhO1xuICB9XG5cbiAgdG9Gb3JtVmFsdWVEYXRhKGRhdGEpIHtcbiAgICBpZiAoZGF0YSAmJiBVdGlsLmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgIGNvbnN0IHZhbHVlRGF0YTogQXJyYXk8b2JqZWN0PiA9IFtdO1xuICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICBkYXRhLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgIHZhbHVlRGF0YS5wdXNoKHNlbGYub2JqZWN0VG9Gb3JtVmFsdWVEYXRhKGl0ZW0pKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHZhbHVlRGF0YTtcbiAgICB9IGVsc2UgaWYgKGRhdGEgJiYgVXRpbC5pc09iamVjdChkYXRhKSkge1xuICAgICAgcmV0dXJuIHRoaXMub2JqZWN0VG9Gb3JtVmFsdWVEYXRhKGRhdGEpO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMga2V5cyB2YWx1ZXNcbiAgICogQHJldHVybnMga2V5c1xuICAgKi9cbiAgZ2V0S2V5c1ZhbHVlcygpOiBhbnkge1xuICAgIGNvbnN0IGZpbHRlciA9IHt9O1xuICAgIGNvbnN0IGN1cnJlbnRSZWNvcmQgPSB0aGlzLmZvcm1EYXRhO1xuICAgIGlmICghdGhpcy5rZXlzQXJyYXkpIHtcbiAgICAgIHJldHVybiBmaWx0ZXI7XG4gICAgfVxuICAgIHRoaXMua2V5c0FycmF5LmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGlmIChjdXJyZW50UmVjb3JkW2tleV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgY3VycmVudERhdGEgPSBjdXJyZW50UmVjb3JkW2tleV07XG4gICAgICAgIGlmIChjdXJyZW50RGF0YSBpbnN0YW5jZW9mIE9Gb3JtVmFsdWUpIHtcbiAgICAgICAgICBjdXJyZW50RGF0YSA9IGN1cnJlbnREYXRhLnZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGZpbHRlcltrZXldID0gY3VycmVudERhdGE7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGZpbHRlcjtcbiAgfVxuXG4gIGlzSW5RdWVyeU1vZGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubW9kZSA9PT0gT0Zvcm1Db21wb25lbnQuTW9kZSgpLlFVRVJZO1xuICB9XG5cbiAgaXNJbkluc2VydE1vZGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubW9kZSA9PT0gT0Zvcm1Db21wb25lbnQuTW9kZSgpLklOU0VSVDtcbiAgfVxuXG4gIGlzSW5VcGRhdGVNb2RlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm1vZGUgPT09IE9Gb3JtQ29tcG9uZW50Lk1vZGUoKS5VUERBVEU7XG4gIH1cblxuICBpc0luSW5pdGlhbE1vZGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubW9kZSA9PT0gT0Zvcm1Db21wb25lbnQuTW9kZSgpLklOSVRJQUw7XG4gIH1cblxuICBzZXRRdWVyeU1vZGUoKSB7XG4gICAgdGhpcy5zZXRGb3JtTW9kZShPRm9ybUNvbXBvbmVudC5Nb2RlKCkuUVVFUlkpO1xuICB9XG5cbiAgc2V0SW5zZXJ0TW9kZSgpIHtcbiAgICB0aGlzLnNldEZvcm1Nb2RlKE9Gb3JtQ29tcG9uZW50Lk1vZGUoKS5JTlNFUlQpO1xuICB9XG5cbiAgc2V0VXBkYXRlTW9kZSgpIHtcbiAgICB0aGlzLnNldEZvcm1Nb2RlKE9Gb3JtQ29tcG9uZW50Lk1vZGUoKS5VUERBVEUpO1xuICB9XG5cbiAgc2V0SW5pdGlhbE1vZGUoKSB7XG4gICAgdGhpcy5zZXRGb3JtTW9kZShPRm9ybUNvbXBvbmVudC5Nb2RlKCkuSU5JVElBTCk7XG4gIH1cblxuICByZWdpc3RlckR5bmFtaWNGb3JtQ29tcG9uZW50KGR5bmFtaWNGb3JtKSB7XG4gICAgaWYgKCFVdGlsLmlzRGVmaW5lZChkeW5hbWljRm9ybSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgdGhpcy5keW5hbWljRm9ybVN1YnNjcmlwdGlvbiA9IGR5bmFtaWNGb3JtLnJlbmRlci5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgc2VsZi5yZWZyZXNoQ29tcG9uZW50c0VkaXRhYmxlU3RhdGUoKTtcbiAgICAgICAgaWYgKCFzZWxmLmlzSW5JbnNlcnRNb2RlKCkgJiYgc2VsZi5xdWVyeU9uSW5pdCkge1xuICAgICAgICAgIHNlbGYucmVsb2FkKHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZWxmLmZvcm1QYXJlbnRLZXlzVmFsdWVzKSB7XG4gICAgICAgICAgT2JqZWN0LmtleXMoc2VsZi5mb3JtUGFyZW50S2V5c1ZhbHVlcykuZm9yRWFjaChwYXJlbnRLZXkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBzZWxmLmZvcm1QYXJlbnRLZXlzVmFsdWVzW3BhcmVudEtleV07XG4gICAgICAgICAgICBjb25zdCBjb21wID0gc2VsZi5nZXRGaWVsZFJlZmVyZW5jZShwYXJlbnRLZXkpO1xuICAgICAgICAgICAgaWYgKFV0aWwuaXNGb3JtRGF0YUNvbXBvbmVudChjb21wKSAmJiBjb21wLmlzQXV0b21hdGljQmluZGluZygpKSB7XG4gICAgICAgICAgICAgIGNvbXAuc2V0VmFsdWUodmFsdWUsIHtcbiAgICAgICAgICAgICAgICBlbWl0TW9kZWxUb1ZpZXdDaGFuZ2U6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGVtaXRFdmVudDogZmFsc2VcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHVucmVnaXN0ZXJEeW5hbWljRm9ybUNvbXBvbmVudChkeW5hbWljRm9ybSkge1xuICAgIGlmIChkeW5hbWljRm9ybSAmJiB0aGlzLmR5bmFtaWNGb3JtU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLmR5bmFtaWNGb3JtU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0UmVxdWlyZWRDb21wb25lbnRzKCk6IG9iamVjdCB7XG4gICAgY29uc3QgcmVxdWlyZWRDb21wb250ZW50czogb2JqZWN0ID0ge307XG4gICAgY29uc3QgY29tcG9uZW50cyA9IHRoaXMuZ2V0Q29tcG9uZW50cygpO1xuICAgIGlmIChjb21wb25lbnRzKSB7XG4gICAgICBPYmplY3Qua2V5cyhjb21wb25lbnRzKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbXAgPSBjb21wb25lbnRzW2tleV07XG4gICAgICAgIGNvbnN0IGF0dHIgPSBjb21wLmdldEF0dHJpYnV0ZSgpO1xuICAgICAgICBpZiAoKGNvbXAgYXMgYW55KS5pc1JlcXVpcmVkICYmIGF0dHIgJiYgYXR0ci5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgcmVxdWlyZWRDb21wb250ZW50c1thdHRyXSA9IGNvbXA7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVxdWlyZWRDb21wb250ZW50cztcbiAgfVxuXG4gIGdldCBsYXlvdXREaXJlY3Rpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fbGF5b3V0RGlyZWN0aW9uO1xuICB9XG5cbiAgc2V0IGxheW91dERpcmVjdGlvbih2YWw6IHN0cmluZykge1xuICAgIGNvbnN0IHBhcnNlZFZhbCA9ICh2YWwgfHwgJycpLnRvTG93ZXJDYXNlKCk7XG4gICAgdGhpcy5fbGF5b3V0RGlyZWN0aW9uID0gWydyb3cnLCAnY29sdW1uJywgJ3Jvdy1yZXZlcnNlJywgJ2NvbHVtbi1yZXZlcnNlJ10uaW5kZXhPZihwYXJzZWRWYWwpICE9PSAtMSA/IHBhcnNlZFZhbCA6IE9Gb3JtQ29tcG9uZW50LkRFRkFVTFRfTEFZT1VUX0RJUkVDVElPTjtcbiAgfVxuXG4gIGdldCBsYXlvdXRBbGlnbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9sYXlvdXRBbGlnbjtcbiAgfVxuXG4gIHNldCBsYXlvdXRBbGlnbih2YWw6IHN0cmluZykge1xuICAgIHRoaXMuX2xheW91dEFsaWduID0gdmFsO1xuICB9XG5cbiAgZ2V0IGxheW91dENsYXNzZXMoKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGRpckNsYXNzID0gdGhpcy5fbGF5b3V0RGlyZWN0aW9uID09PSAnY29sdW1uJyA/ICdvLWZsZXgtY29sdW1uJyA6ICdvLWZsZXgtcm93JztcbiAgICBjb25zdCBhbGlnbk1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAgICdzdGFydCBzdHJldGNoJzogJ28tbGF5b3V0LWFsaWduLXN0YXJ0LXN0cmV0Y2gnLFxuICAgICAgJ3N0YXJ0IGNlbnRlcic6ICdvLWxheW91dC1hbGlnbi1zdGFydC1jZW50ZXInLFxuICAgICAgJ3N0YXJ0IHN0YXJ0JzogJ28tbGF5b3V0LWFsaWduLXN0YXJ0LXN0YXJ0JyxcbiAgICAgICdjZW50ZXIgY2VudGVyJzogJ28tbGF5b3V0LWFsaWduLWNlbnRlci1jZW50ZXInLFxuICAgICAgJ2NlbnRlciBzdHJldGNoJzogJ28tbGF5b3V0LWFsaWduLWNlbnRlci1zdHJldGNoJyxcbiAgICAgICdjZW50ZXIgc3RhcnQnOiAnby1sYXlvdXQtYWxpZ24tY2VudGVyLXN0YXJ0JyxcbiAgICAgICdjZW50ZXIgZW5kJzogJ28tbGF5b3V0LWFsaWduLWNlbnRlci1lbmQnLFxuICAgICAgJ2VuZCBjZW50ZXInOiAnby1sYXlvdXQtYWxpZ24tZW5kLWNlbnRlcicsXG4gICAgICAnZW5kIHN0cmV0Y2gnOiAnby1sYXlvdXQtYWxpZ24tZW5kLXN0cmV0Y2gnLFxuICAgICAgJ3NwYWNlLWJldHdlZW4gY2VudGVyJzogJ28tbGF5b3V0LWFsaWduLXNiLWNlbnRlcicsXG4gICAgICAnc3BhY2UtYmV0d2VlbiBzdHJldGNoJzogJ28tbGF5b3V0LWFsaWduLXNiLXN0cmV0Y2gnLFxuICAgICAgJ3NwYWNlLWJldHdlZW4gc3RhcnQnOiAnby1sYXlvdXQtYWxpZ24tc2Itc3RhcnQnLFxuICAgICAgJ3NwYWNlLWFyb3VuZCBjZW50ZXInOiAnby1sYXlvdXQtYWxpZ24tc2EtY2VudGVyJyxcbiAgICB9O1xuICAgIGNvbnN0IGFsaWduQ2xhc3MgPSBhbGlnbk1hcFt0aGlzLl9sYXlvdXRBbGlnbl0gfHwgJyc7XG4gICAgcmV0dXJuIGFsaWduQ2xhc3MgPyBbZGlyQ2xhc3MsIGFsaWduQ2xhc3NdIDogW2RpckNsYXNzXTtcbiAgfVxuXG4gIGdldCBzaG93RmxvYXRpbmdUb29sYmFyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNob3dIZWFkZXIgJiYgdGhpcy5oZWFkZXJNb2RlID09PSAnZmxvYXRpbmcnO1xuICB9XG5cbiAgZ2V0IHNob3dOb3RGbG9hdGluZ1Rvb2xiYXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2hvd0hlYWRlciAmJiB0aGlzLmhlYWRlck1vZGUgIT09ICdmbG9hdGluZyc7XG4gIH1cblxuICBpc0VkaXRhYmxlRGV0YWlsKCkge1xuICAgIHJldHVybiB0aGlzLmVkaXRhYmxlRGV0YWlsO1xuICB9XG5cbiAgaXNJbml0aWFsU3RhdGVDaGFuZ2VkKGlnbm9yZUF0dHJzOiBzdHJpbmdbXSA9IFtdKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybUNhY2hlLmlzSW5pdGlhbFN0YXRlQ2hhbmdlZChpZ25vcmVBdHRycyk7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIGB1bmRvKClgIGluc3RlYWRcbiAgICovXG4gIF91bmRvTGFzdENoYW5nZUFjdGlvbigpIHtcbiAgICBjb25zb2xlLndhcm4oJ01ldGhvZCBgT0Zvcm1Db21wb25lbnQuX3VuZG9MYXN0Q2hhbmdlQWN0aW9uYCBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1cnV0ZS4gVXNlIGB1bmRvYCBpbnN0ZWFkJyk7XG4gICAgdGhpcy51bmRvKCk7XG4gIH1cblxuICAvKipcbiAgICogVW5kbyBsYXN0IGNoYW5nZVxuICAgKi9cbiAgdW5kbygpIHtcbiAgICB0aGlzLmZvcm1DYWNoZS51bmRvTGFzdENoYW5nZSgpO1xuICB9XG5cbiAgZ2V0IGlzQ2FjaGVTdGFja0VtcHR5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmZvcm1DYWNoZS5pc0NhY2hlU3RhY2tFbXB0eTtcbiAgfVxuXG4gIHVuZG9LZXlib2FyZFByZXNzZWQoKSB7XG4gICAgdGhpcy5mb3JtQ2FjaGUudW5kb0xhc3RDaGFuZ2UoKTtcbiAgfVxuXG4gIGdldEZvcm1Ub29sYmFyKCk6IE9Gb3JtVG9vbGJhckJhc2Uge1xuICAgIHJldHVybiB0aGlzLl9mb3JtVG9vbGJhcjtcbiAgfVxuXG4gIGdldEZvcm1NYW5hZ2VyKCk6IE9Gb3JtTGF5b3V0TWFuYWdlckJhc2Uge1xuICAgIHJldHVybiB0aGlzLmZvcm1OYXZpZ2F0aW9uLmZvcm1MYXlvdXRNYW5hZ2VyO1xuICB9XG5cbiAgZ2V0Rm9ybU5hdmlnYXRpb24oKTogT0Zvcm1OYXZpZ2F0aW9uQ2xhc3Mge1xuICAgIHJldHVybiB0aGlzLmZvcm1OYXZpZ2F0aW9uO1xuICB9XG5cbiAgZ2V0Rm9ybUNhY2hlKCk6IE9Gb3JtQ2FjaGVDbGFzcyB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybUNhY2hlO1xuICB9XG5cbiAgZ2V0VXJsUGFyYW0oYXJnOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRGb3JtTmF2aWdhdGlvbigpLmdldFVybFBhcmFtcygpW2FyZ107XG4gIH1cblxuICBnZXRVcmxQYXJhbXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Rm9ybU5hdmlnYXRpb24oKS5nZXRVcmxQYXJhbXMoKTtcbiAgfVxuXG4gIHNldFVybFBhcmFtc0FuZFJlbG9hZCh2YWw6IG9iamVjdCkge1xuICAgIHRoaXMuZm9ybU5hdmlnYXRpb24uc2V0VXJsUGFyYW1zKHZhbCk7XG4gICAgdGhpcy5yZWxvYWQodHJ1ZSk7XG4gIH1cblxuICBnZXRSZWdpc3RlcmVkRmllbGRzVmFsdWVzKCkge1xuICAgIGNvbnN0IHZhbHVlcyA9IHt9O1xuICAgIGNvbnN0IGNvbXBvbmVudHM6IElGb3JtRGF0YUNvbXBvbmVudEhhc2ggPSB0aGlzLmdldENvbXBvbmVudHMoKTtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBjb25zdCBjb21wb25lbnRzS2V5cyA9IE9iamVjdC5rZXlzKGNvbXBvbmVudHMpLmZpbHRlcihrZXkgPT4gc2VsZi5pZ25vcmVGb3JtQ2FjaGVLZXlzLmluZGV4T2Yoa2V5KSA9PT0gLTEpO1xuICAgIGNvbXBvbmVudHNLZXlzLmZvckVhY2goY29tcEtleSA9PiB7XG4gICAgICBjb25zdCBjb21wOiBJRm9ybURhdGFDb21wb25lbnQgPSBjb21wb25lbnRzW2NvbXBLZXldO1xuICAgICAgLyoqIFBhcnNlIHRoZSB2YWx1ZXMg4oCL4oCLdG8gdGhlIGZvcm1hdCBhY2NvcmRpbmcgdG8gdGhlaXIgc3FsdHlwZSB0byBzZW5kIHRvIHRoZSBpbnNlcnQgcmVxdWVzdCAqL1xuICAgICAgdmFsdWVzW2NvbXBLZXldID0gU1FMVHlwZXMucGFyc2VVc2luZ1NRTFR5cGUoY29tcC5nZXRWYWx1ZSgpLCBTUUxUeXBlcy5nZXRTUUxUeXBlS2V5KGNvbXAuZ2V0U1FMVHlwZSgpKSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHZhbHVlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGNvbnRyb2wgaW4gdGhlIGZvcm1cbiAgICogQHBhcmFtIGF0dHIgdGhlIGF0dHIgb2YgdGhlIGZvcm0gZmllbGRcbiAgICovXG4gIGdldEZpZWxkVmFsdWUoYXR0cjogc3RyaW5nKTogYW55IHtcbiAgICBsZXQgdmFsdWUgPSBudWxsO1xuICAgIGNvbnN0IGNvbXAgPSB0aGlzLmdldEZpZWxkUmVmZXJlbmNlKGF0dHIpO1xuICAgIGlmIChjb21wKSB7XG4gICAgICB2YWx1ZSA9IGNvbXAuZ2V0VmFsdWUoKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhbiBvYmplY3Qgd2l0aCB0aGUgdmFsdWVzIG9mIGVhY2ggYXR0cmlidXRlXG4gICAqIEBwYXJhbSBhdHRycyB0aGUgYXR0cidzIG9mIHRoZSBmb3JtIGZpZWxkc1xuICAgKi9cbiAgZ2V0RmllbGRWYWx1ZXMoYXR0cnM6IHN0cmluZ1tdKTogYW55IHtcbiAgICBjb25zdCBhcnIgPSB7fTtcbiAgICBhdHRycy5mb3JFYWNoKGtleSA9PiBhcnJba2V5XSA9IHRoaXMuZ2V0RmllbGRWYWx1ZShrZXkpKTtcbiAgICByZXR1cm4gYXJyO1xuXG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlIGNvbnRyb2wgaW4gdGhlIGZvcm0uXG4gICAqIEBwYXJhbSBhdHRyIGF0dHJpYnV0ZSBvZiBjb250cm9sXG4gICAqIEBwYXJhbSB2YWx1ZSB2YWx1ZVxuICAgKi9cbiAgc2V0RmllbGRWYWx1ZShhdHRyOiBzdHJpbmcsIHZhbHVlOiBhbnksIG9wdGlvbnM/OiBGb3JtVmFsdWVPcHRpb25zKSB7XG4gICAgY29uc3QgY29tcCA9IHRoaXMuZ2V0RmllbGRSZWZlcmVuY2UoYXR0cik7XG4gICAgaWYgKGNvbXApIHtcbiAgICAgIGNvbXAuc2V0VmFsdWUodmFsdWUsIG9wdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiBlYWNoIGNvbnRyb2wgaW4gdGhlIGZvcm0uXG4gICAqIEBwYXJhbSB2YWx1ZXMgdGhlIHZhbHVlc1xuICAgKi9cbiAgc2V0RmllbGRWYWx1ZXModmFsdWVzOiBhbnksIG9wdGlvbnM/OiBGb3JtVmFsdWVPcHRpb25zKSB7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gdmFsdWVzKSB7XG4gICAgICBpZiAodmFsdWVzLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgdGhpcy5zZXRGaWVsZFZhbHVlKGtleSwgdmFsdWVzW2tleV0sIG9wdGlvbnMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhciB0aGUgdmFsdWUgb2YgZWFjaCBjb250cm9sIGluIHRoZSBmb3JtXG4gICAqIEBwYXJhbSBhdHRyIHRoZSBhdHRyIG9mIHRoZSBmb3JtIGZpZWxkXG4gICAqL1xuICBjbGVhckZpZWxkVmFsdWUoYXR0cjogc3RyaW5nLCBvcHRpb25zPzogRm9ybVZhbHVlT3B0aW9ucykge1xuICAgIGNvbnN0IGNvbXAgPSB0aGlzLmdldEZpZWxkUmVmZXJlbmNlKGF0dHIpO1xuICAgIGlmIChjb21wKSB7XG4gICAgICBjb21wLmNsZWFyVmFsdWUob3B0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0IHRoZSB2YWx1ZSBvZiBlYWNoIGNvbnRyb2wgaW4gdGhlIGZvcm1cbiAgICogQHBhcmFtIGF0dHJzIHRoZSBhdHRyJ3Mgb2YgdGhlIGZvcm0gZmllbGRzXG4gICAqL1xuICBjbGVhckZpZWxkVmFsdWVzKGF0dHJzOiBzdHJpbmdbXSwgb3B0aW9ucz86IEZvcm1WYWx1ZU9wdGlvbnMpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBhdHRycy5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgIHNlbGYuY2xlYXJGaWVsZFZhbHVlKGtleSwgb3B0aW9ucyk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSByZWZlcmVuY2Ugb2YgdGhlIGNvbnRyb2wgaW4gdGhlIGZvcm0uXG4gICAqIEBwYXJhbSBhdHRyIHRoZSBhdHRyIG9mIHRoZSBmb3JtIGZpZWxkXG4gICAqL1xuICBnZXRGaWVsZFJlZmVyZW5jZShhdHRyOiBzdHJpbmcpOiBJRm9ybURhdGFDb21wb25lbnQge1xuICAgIHJldHVybiB0aGlzLl9jb21wb25lbnRzW2F0dHJdO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgcmVmZXJlbmNlIG9mIGVhY2ggY29udHJvbCBpbiB0aGUgZm9ybVxuICAgKiBAcGFyYW0gYXR0cnMgdGhlIGF0dHIncyBvZiB0aGUgZm9ybSBmaWxlZHNcbiAgICovXG4gIGdldEZpZWxkUmVmZXJlbmNlcyhhdHRyczogc3RyaW5nW10pOiBJRm9ybURhdGFDb21wb25lbnRIYXNoIHtcbiAgICBjb25zdCBhcnI6IElGb3JtRGF0YUNvbXBvbmVudEhhc2ggPSB7fTtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBhdHRycy5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgIGFycltrZXldID0gc2VsZi5nZXRGaWVsZFJlZmVyZW5jZShrZXkpO1xuICAgIH0pO1xuICAgIHJldHVybiBhcnI7XG4gIH1cblxuICBnZXRGb3JtQ29tcG9uZW50UGVybWlzc2lvbnMoYXR0cjogc3RyaW5nKTogT1Blcm1pc3Npb25zIHtcbiAgICBsZXQgcGVybWlzc2lvbnM6IE9QZXJtaXNzaW9ucztcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQodGhpcy5wZXJtaXNzaW9ucykpIHtcbiAgICAgIHBlcm1pc3Npb25zID0gKHRoaXMucGVybWlzc2lvbnMuY29tcG9uZW50cyB8fCBbXSkuZmluZChjb21wID0+IGNvbXAuYXR0ciA9PT0gYXR0cik7XG4gICAgfVxuICAgIHJldHVybiBwZXJtaXNzaW9ucztcbiAgfVxuXG4gIGdldEFjdGlvbnNQZXJtaXNzaW9ucygpOiBPUGVybWlzc2lvbnNbXSB7XG4gICAgbGV0IHBlcm1pc3Npb25zOiBPUGVybWlzc2lvbnNbXTtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQodGhpcy5wZXJtaXNzaW9ucykpIHtcbiAgICAgIHBlcm1pc3Npb25zID0gKHRoaXMucGVybWlzc2lvbnMuYWN0aW9ucyB8fCBbXSk7XG4gICAgfVxuICAgIHJldHVybiBwZXJtaXNzaW9ucztcbiAgfVxuXG4gIHByb3RlY3RlZCBkZXRlcm1pbmF0ZUZvcm1Nb2RlKCk6IHZvaWQge1xuICAgIGNvbnN0IHVybFNlZ21lbnRzID0gdGhpcy5mb3JtTmF2aWdhdGlvbi5nZXRVcmxTZWdtZW50cygpO1xuICAgIGlmICh1cmxTZWdtZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBzZWdtZW50ID0gdXJsU2VnbWVudHNbdXJsU2VnbWVudHMubGVuZ3RoIC0gMV07XG4gICAgICB0aGlzLmRldGVybWluYXRlTW9kZUZyb21VcmxTZWdtZW50KHNlZ21lbnQpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5hY3RSb3V0ZS5wYXJlbnQpIHtcbiAgICAgIHRoaXMuYWN0Um91dGUucGFyZW50LnVybC5zdWJzY3JpYmUoc2VnbWVudHMgPT4ge1xuICAgICAgICBjb25zdCBzZWdtZW50ID0gc2VnbWVudHNbc2VnbWVudHMubGVuZ3RoIC0gMV07XG4gICAgICAgIHRoaXMuZGV0ZXJtaW5hdGVNb2RlRnJvbVVybFNlZ21lbnQoc2VnbWVudCk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXRGb3JtTW9kZShPRm9ybUNvbXBvbmVudC5Nb2RlKCkuSU5JVElBTCk7XG4gICAgfVxuICAgIC8vIHN0YXlJblJlY29yZEFmdGVyRWRpdCBpcyB0cnVlIGlmIGZvcm0gaGFzIGVkaXRhYmxlIGRldGFpbCA9IHRydWVcbiAgICB0aGlzLnN0YXlJblJlY29yZEFmdGVyRWRpdCA9IHRoaXMuc3RheUluUmVjb3JkQWZ0ZXJFZGl0IHx8IHRoaXMuaXNFZGl0YWJsZURldGFpbCgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGRldGVybWluYXRlTW9kZUZyb21VcmxTZWdtZW50KHNlZ21lbnQ6IFVybFNlZ21lbnQpOiB2b2lkIHtcbiAgICBjb25zdCBfcGF0aCA9IHNlZ21lbnQgPyBzZWdtZW50LnBhdGggOiAnJztcbiAgICBpZiAodGhpcy5pc0luc2VydE1vZGVQYXRoKF9wYXRoKSkge1xuICAgICAgdGhpcy5zZXRJbnNlcnRNb2RlKCk7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIGlmICh0aGlzLmlzVXBkYXRlTW9kZVBhdGgoX3BhdGgpKSB7XG4gICAgICB0aGlzLnNldFVwZGF0ZU1vZGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXRJbml0aWFsTW9kZSgpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBfdXBkYXRlRm9ybURhdGEobmV3Rm9ybURhdGE6IG9iamVjdCk6IHZvaWQge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIHRoaXMuem9uZS5ydW4oKCkgPT4ge1xuICAgICAgdGhpcy5mb3JtRGF0YSA9IG5ld0Zvcm1EYXRhO1xuICAgICAgY29uc3QgY29tcG9uZW50cyA9IHRoaXMuZ2V0Q29tcG9uZW50cygpO1xuICAgICAgY29uc3Qga2V5Q29tcG9uZW50cyA9IFsuLi5PYmplY3Qua2V5cyhjb21wb25lbnRzKV07XG4gICAgICBpZiAoIVV0aWwuaXNBcnJheUVtcHR5KHRoaXMuc2V0VmFsdWVPcmRlckFycmF5KSkge1xuICAgICAgICBrZXlDb21wb25lbnRzLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICBjb25zdCBpbmRleEEgPSB0aGlzLnNldFZhbHVlT3JkZXJBcnJheS5pbmRleE9mKGEpID09PSAtMSA/IDEgOiAwO1xuICAgICAgICAgIGNvbnN0IGluZGV4QiA9IHRoaXMuc2V0VmFsdWVPcmRlckFycmF5LmluZGV4T2YoYikgPT09IC0xID8gMSA6IDA7XG4gICAgICAgICAgcmV0dXJuIGluZGV4QSAtIGluZGV4QjtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmICghVXRpbC5pc0FycmF5RW1wdHkoa2V5Q29tcG9uZW50cykpIHtcbiAgICAgICAga2V5Q29tcG9uZW50cy5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgY29uc3QgY29tcCA9IGNvbXBvbmVudHNba2V5XTtcbiAgICAgICAgICB0aGlzLnNldERhdGFJbkZvcm1EYXRhQ29tcG9uZW50KGNvbXAsIGtleSk7XG4gICAgICAgIH0pO1xuICAgICAgICBzZWxmLmluaXRpYWxpemVGaWVsZHMoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0RGF0YUluRm9ybURhdGFDb21wb25lbnQoY29tcDogSUZvcm1EYXRhQ29tcG9uZW50LCBhdHRyOiBzdHJpbmcpIHtcbiAgICBpZiAoVXRpbC5pc0Zvcm1EYXRhQ29tcG9uZW50KGNvbXApKSB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoY29tcC5pc0F1dG9tYXRpY0JpbmRpbmcoKSkge1xuICAgICAgICAgIGNvbXAuZGF0YSA9IHRoaXMuZ2V0RGF0YVZhbHVlKGF0dHIpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgaW5pdGlhbGl6ZUZpZWxkcygpOiB2b2lkIHtcbiAgICBPYmplY3Qua2V5cyh0aGlzLmZvcm1Hcm91cC5jb250cm9scykuZm9yRWFjaChjb250cm9sID0+IHtcbiAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2NvbnRyb2xdLm1hcmtBc1ByaXN0aW5lKCk7XG4gICAgfSk7XG4gICAgdGhpcy5mb3JtQ2FjaGUucmVnaXN0ZXJDYWNoZSgpO1xuICAgIHRoaXMuZm9ybU5hdmlnYXRpb24udXBkYXRlTmF2aWdhdGlvbigpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNsZWFyQ29tcG9uZW50c09sZFZhbHVlKCk6IHZvaWQge1xuICAgIGNvbnN0IGNvbXBvbmVudHM6IElGb3JtRGF0YUNvbXBvbmVudEhhc2ggPSB0aGlzLmdldENvbXBvbmVudHMoKTtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBjb25zdCBjb21wb25lbnRzS2V5cyA9IE9iamVjdC5rZXlzKGNvbXBvbmVudHMpLmZpbHRlcihrZXkgPT4gc2VsZi5pZ25vcmVGb3JtQ2FjaGVLZXlzLmluZGV4T2Yoa2V5KSA9PT0gLTEpO1xuICAgIGNvbXBvbmVudHNLZXlzLmZvckVhY2goY29tcEtleSA9PiB7XG4gICAgICBjb25zdCBjb21wOiBJRm9ybURhdGFDb21wb25lbnQgPSBjb21wb25lbnRzW2NvbXBLZXldO1xuICAgICAgKGNvbXAgYXMgYW55KS5vbGRWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgIGNvbXAuZ2V0Rm9ybUNvbnRyb2woKS5zZXRWYWx1ZSh1bmRlZmluZWQpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIHBvc3RDb3JyZWN0SW5zZXJ0KHJlc3VsdDogYW55KTogdm9pZCB7XG4gICAgdGhpcy5zbmFja0JhclNlcnZpY2Uub3Blbih0aGlzLl9tZXNzYWdlU2VydmljZS5nZXRJbnNlcnRTdWNjZXNzTWVzc2FnZSgpLCB7IGljb246ICdjaGVja19jaXJjbGUnIH0pO1xuICAgIHRoaXMub25JbnNlcnQuZW1pdChyZXN1bHQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHBvc3RJbmNvcnJlY3RJbnNlcnQocmVzdWx0OiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLnNob3dFcnJvcignaW5zZXJ0JywgcmVzdWx0KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBwb3N0SW5jb3JyZWN0RGVsZXRlKHJlc3VsdDogYW55KTogdm9pZCB7XG4gICAgdGhpcy5zaG93RXJyb3IoJ2RlbGV0ZScsIHJlc3VsdCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcG9zdEluY29ycmVjdFVwZGF0ZShyZXN1bHQ6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuc2hvd0Vycm9yKCd1cGRhdGUnLCByZXN1bHQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHBvc3RDb3JyZWN0VXBkYXRlKHJlc3VsdDogYW55KTogdm9pZCB7XG4gICAgdGhpcy5zbmFja0JhclNlcnZpY2Uub3Blbih0aGlzLl9tZXNzYWdlU2VydmljZS5nZXRVcGRhdGVTdWNjZXNzTWVzc2FnZSgpLCB7IGljb246ICdjaGVja19jaXJjbGUnIH0pO1xuICAgIHRoaXMub25VcGRhdGUuZW1pdChyZXN1bHQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHBvc3RDb3JyZWN0RGVsZXRlKHJlc3VsdDogYW55KTogdm9pZCB7XG4gICAgdGhpcy5zbmFja0JhclNlcnZpY2Uub3Blbih0aGlzLl9tZXNzYWdlU2VydmljZS5nZXREZWxldGVTdWNjZXNzTWVzc2FnZSgpLCB7IGljb246ICdjaGVja19jaXJjbGUnIH0pO1xuICAgIHRoaXMub25EZWxldGUuZW1pdChyZXN1bHQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG1hcmtGb3JtTGF5b3V0TWFuYWdlclRvVXBkYXRlKCk6IHZvaWQge1xuICAgIGNvbnN0IGZvcm1MYXlvdXRNYW5hZ2VyID0gdGhpcy5nZXRGb3JtTWFuYWdlcigpO1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZChmb3JtTGF5b3V0TWFuYWdlcikpIHtcbiAgICAgIGZvcm1MYXlvdXRNYW5hZ2VyLm1hcmtGb3JVcGRhdGUgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBvYmplY3RUb0Zvcm1WYWx1ZURhdGEoZGF0YTogb2JqZWN0ID0ge30pOiBvYmplY3Qge1xuICAgIGNvbnN0IHZhbHVlRGF0YSA9IHt9O1xuICAgIE9iamVjdC5rZXlzKGRhdGEpLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgIHZhbHVlRGF0YVtpdGVtXSA9IG5ldyBPRm9ybVZhbHVlKGRhdGFbaXRlbV0pO1xuICAgIH0pO1xuICAgIHJldHVybiB2YWx1ZURhdGE7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0Q3VycmVudEtleXNWYWx1ZXMoKTogb2JqZWN0IHtcbiAgICByZXR1cm4gdGhpcy5mb3JtTmF2aWdhdGlvbi5nZXRDdXJyZW50S2V5c1ZhbHVlcygpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlZnJlc2hDb21wb25lbnRzRWRpdGFibGVTdGF0ZSgpOiB2b2lkIHtcbiAgICBzd2l0Y2ggKHRoaXMubW9kZSkge1xuICAgICAgY2FzZSBPRm9ybUNvbXBvbmVudC5Nb2RlKCkuSU5JVElBTDpcbiAgICAgICAgdGhpcy5fc2V0Q29tcG9uZW50c0VkaXRhYmxlKHRoaXMuaXNFZGl0YWJsZURldGFpbCgpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIE9Gb3JtQ29tcG9uZW50Lk1vZGUoKS5JTlNFUlQ6XG4gICAgICBjYXNlIE9Gb3JtQ29tcG9uZW50Lk1vZGUoKS5VUERBVEU6XG4gICAgICAgIHRoaXMuX3NldENvbXBvbmVudHNFZGl0YWJsZSh0cnVlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgaXNJbnNlcnRNb2RlUGF0aChwYXRoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBuYXZEYXRhOiBPTmF2aWdhdGlvbkl0ZW0gPSB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmdldExhc3RJdGVtKCk7XG4gICAgLy8gVE9ETzogc29sdmUgaXNzdWUgIzcyNyB3aGVuIGBpbnNlcnQtZm9ybS1yb3V0ZWAgaXMgcHJlc2VudFxuICAgIHJldHVybiBVdGlsLmlzRGVmaW5lZChuYXZEYXRhKSA/IHBhdGggPT09IG5hdkRhdGEuZ2V0SW5zZXJ0Rm9ybVJvdXRlKCkgOiBDb2Rlcy5ERUZBVUxUX0lOU0VSVF9ST1VURSA9PT0gcGF0aDtcbiAgfVxuXG4gIHByb3RlY3RlZCBpc1VwZGF0ZU1vZGVQYXRoKHBhdGg6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IG5hdkRhdGE6IE9OYXZpZ2F0aW9uSXRlbSA9IHRoaXMubmF2aWdhdGlvblNlcnZpY2UuZ2V0UHJldmlvdXNSb3V0ZURhdGEoKTtcbiAgICByZXR1cm4gVXRpbC5pc0RlZmluZWQobmF2RGF0YSkgJiYgcGF0aCA9PT0gbmF2RGF0YS5nZXRFZGl0Rm9ybVJvdXRlKCk7XG4gIH1cblxuICBwcml2YXRlIHNob3dFcnJvcihvcGVyYXRpb246IHN0cmluZywgcmVzdWx0OiBhbnkpOiB2b2lkIHtcbiAgICBpZiAocmVzdWx0ICYmIHR5cGVvZiByZXN1bHQgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuYWxlcnQoJ0VSUk9SJywgcmVzdWx0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IG1lc3NhZ2UgPSAnJ1xuICAgICAgc3dpdGNoIChvcGVyYXRpb24pIHtcbiAgICAgICAgY2FzZSAndXBkYXRlJzpcbiAgICAgICAgICBtZXNzYWdlID0gdGhpcy5fbWVzc2FnZVNlcnZpY2UuZ2V0VXBkYXRlRXJyb3JNZXNzYWdlKClcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnaW5zZXJ0JzpcbiAgICAgICAgICBtZXNzYWdlID0gdGhpcy5fbWVzc2FnZVNlcnZpY2UuZ2V0SW5zZXJ0RXJyb3JNZXNzYWdlKClcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnZGVsZXRlJzpcbiAgICAgICAgICBtZXNzYWdlID0gdGhpcy5fbWVzc2FnZVNlcnZpY2UuZ2V0RGVsZXRlRXJyb3JNZXNzYWdlKClcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5hbGVydCgnRVJST1InLCBtZXNzYWdlKTtcbiAgICB9XG4gIH1cblxufVxuIiwiPG5nLXRlbXBsYXRlICNjdXN0b21Gb3JtVG9vbGJhckJ1dHRvbnM+XG4gIDxuZy1jb250ZW50IHNlbGVjdD1cIltvLWZvcm0tdG9vbGJhci1idXR0b25zXVwiPjwvbmctY29udGVudD5cbjwvbmctdGVtcGxhdGU+XG5cbkBpZiAoc2hvd0Zsb2F0aW5nVG9vbGJhciAmJiBoZWFkZXJQb3NpdGlvbj09PSd0b3AnKSB7XG4gIDxvLWZvcm0tdG9vbGJhciBbbGFiZWwtaGVhZGVyXT1cImxhYmVsaGVhZGVyXCIgW2xhYmVsLWhlYWRlci1hbGlnbl09XCJsYWJlbEhlYWRlckFsaWduXCJcbiAgICBbaGVhZGVyLWFjdGlvbnNdPVwiaGVhZGVyYWN0aW9uc1wiIFtzaG93LWhlYWRlci1uYXZpZ2F0aW9uXT1cInNob3dIZWFkZXJOYXZpZ2F0aW9uXCIgW3Nob3ctaGVhZGVyLWFjdGlvbnMtdGV4dF09XCJzaG93SGVhZGVyQWN0aW9uc1RleHRcIlxuICAgIChvbkNhbmNlbCk9XCJvbkNhbmNlbC5lbWl0KCRldmVudClcIiBsYXlvdXQtcGFkZGluZz5cbiAgICA8ZGl2IG8tY3VzdG9tLWZvcm0tdG9vbGJhci1idXR0b25zLXdyYXBwZXIgY2xhc3M9XCJvLWZsZXgtcm93IG8tbGF5b3V0LWFsaWduLWVuZC1jZW50ZXJcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjdXN0b21Gb3JtVG9vbGJhckJ1dHRvbnNcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgPC9vLWZvcm0tdG9vbGJhcj5cbn1cblxuPG5nLWhvc3Qgb0tleWJvYXJkTGlzdGVuZXIga2V5Ym9hcmRLZXlzPVwiMTc7OTBcIiAob25LZXlzUHJlc3NlZCk9XCJ1bmRvS2V5Ym9hcmRQcmVzc2VkKClcIiBjbGFzcz1cInNjcm9sbGluZyBvLXNjcm9sbFwiPlxuICA8ZGl2IGNsYXNzPVwiby1mbGV4LWdyb3dcIj5cbiAgICBAaWYgKHNob3dOb3RGbG9hdGluZ1Rvb2xiYXIgJiYgaGVhZGVyUG9zaXRpb249PT0ndG9wJykge1xuICAgICAgPG8tZm9ybS10b29sYmFyIFtsYWJlbC1oZWFkZXJdPVwibGFiZWxoZWFkZXJcIiBbbGFiZWwtaGVhZGVyLWFsaWduXT1cImxhYmVsSGVhZGVyQWxpZ25cIlxuICAgICAgICBbaGVhZGVyLWFjdGlvbnNdPVwiaGVhZGVyYWN0aW9uc1wiIFtzaG93LWhlYWRlci1uYXZpZ2F0aW9uXT1cInNob3dIZWFkZXJOYXZpZ2F0aW9uXCIgW3Nob3ctaGVhZGVyLWFjdGlvbnMtdGV4dF09XCJzaG93SGVhZGVyQWN0aW9uc1RleHRcIlxuICAgICAgICAob25DYW5jZWwpPVwib25DYW5jZWwuZW1pdCgkZXZlbnQpXCIgbGF5b3V0LXBhZGRpbmc+XG4gICAgICAgIDxkaXYgby1jdXN0b20tZm9ybS10b29sYmFyLWJ1dHRvbnMtd3JhcHBlciBjbGFzcz1cIm8tZmxleC1yb3cgby1sYXlvdXQtYWxpZ24tZW5kLWNlbnRlclwiPlxuICAgICAgICAgIDxkaXYgby1jdXN0b20tZm9ybS10b29sYmFyLWJ1dHRvbnMtd3JhcHBlciBjbGFzcz1cIm8tZmxleC1yb3cgby1sYXlvdXQtYWxpZ24tZW5kLWNlbnRlclwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImN1c3RvbUZvcm1Ub29sYmFyQnV0dG9uc1wiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvby1mb3JtLXRvb2xiYXI+XG4gICAgfVxuXG4gICAgPGZvcm0gI2lubmVyRm9ybSBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiIGNsYXNzPVwiaW5uZXItZm9ybVwiIFtjbGFzcy5mb3JtLW5vLXRvb2xiYXJdPVwiIXNob3dIZWFkZXJcIiBhdXRvY29tcGxldGU9XCJvZmZcIiBhdXRvY29ycmVjdD1cIm9mZlwiXG4gICAgICBhdXRvY2FwaXRhbGl6ZT1cIm9mZlwiIHNwZWxsY2hlY2s9XCJmYWxzZVwiPlxuICAgICAgQGlmIChsb2FkaW5nIHwgYXN5bmMpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cInByb2dyZXNzLWJhci1jb250YWluZXJcIj5cbiAgICAgICAgICA8bWF0LXByb2dyZXNzLWJhciBtb2RlPVwiaW5kZXRlcm1pbmF0ZVwiPjwvbWF0LXByb2dyZXNzLWJhcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgICA8ZGl2IGxheW91dC1wYWRkaW5nIFtuZ0NsYXNzXT1cImxheW91dENsYXNzZXNcIiBjbGFzcz1cIm8tZm9ybS1jb250ZW50LXdyYXBwZXJcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgICAgPC9kaXY+XG4gICAgPC9mb3JtPlxuXG4gICAgQGlmIChzaG93Tm90RmxvYXRpbmdUb29sYmFyICYmIGhlYWRlclBvc2l0aW9uPT09J2JvdHRvbScpIHtcbiAgICAgIDxvLWZvcm0tdG9vbGJhciBbbGFiZWwtaGVhZGVyXT1cImxhYmVsaGVhZGVyXCIgW2xhYmVsLWhlYWRlci1hbGlnbl09XCJsYWJlbEhlYWRlckFsaWduXCJcbiAgICAgICAgW2hlYWRlci1hY3Rpb25zXT1cImhlYWRlcmFjdGlvbnNcIiBbc2hvdy1oZWFkZXItbmF2aWdhdGlvbl09XCJzaG93SGVhZGVyTmF2aWdhdGlvblwiIFtzaG93LWhlYWRlci1hY3Rpb25zLXRleHRdPVwic2hvd0hlYWRlckFjdGlvbnNUZXh0XCJcbiAgICAgICAgKG9uQ2FuY2VsKT1cIm9uQ2FuY2VsLmVtaXQoJGV2ZW50KVwiIGxheW91dC1wYWRkaW5nPlxuICAgICAgICA8ZGl2IG8tY3VzdG9tLWZvcm0tdG9vbGJhci1idXR0b25zLXdyYXBwZXIgY2xhc3M9XCJvLWZsZXgtcm93IG8tbGF5b3V0LWFsaWduLWVuZC1jZW50ZXJcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY3VzdG9tRm9ybVRvb2xiYXJCdXR0b25zXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9vLWZvcm0tdG9vbGJhcj5cbiAgICB9XG4gIDwvZGl2PlxuPC9uZy1ob3N0PlxuXG5AaWYgKHNob3dGbG9hdGluZ1Rvb2xiYXIgJiYgaGVhZGVyUG9zaXRpb249PT0nYm90dG9tJykge1xuICA8by1mb3JtLXRvb2xiYXIgW2xhYmVsLWhlYWRlcl09XCJsYWJlbGhlYWRlclwiIFtsYWJlbC1oZWFkZXItYWxpZ25dPVwibGFiZWxIZWFkZXJBbGlnblwiXG4gICAgW2hlYWRlci1hY3Rpb25zXT1cImhlYWRlcmFjdGlvbnNcIiBbc2hvdy1oZWFkZXItbmF2aWdhdGlvbl09XCJzaG93SGVhZGVyTmF2aWdhdGlvblwiIFtzaG93LWhlYWRlci1hY3Rpb25zLXRleHRdPVwic2hvd0hlYWRlckFjdGlvbnNUZXh0XCJcbiAgICAob25DYW5jZWwpPVwib25DYW5jZWwuZW1pdCgkZXZlbnQpXCIgbGF5b3V0LXBhZGRpbmc+XG4gICAgPGRpdiBvLWN1c3RvbS1mb3JtLXRvb2xiYXItYnV0dG9ucy13cmFwcGVyIGNsYXNzPVwiby1mbGV4LXJvdyBvLWxheW91dC1hbGlnbi1lbmQtY2VudGVyXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY3VzdG9tRm9ybVRvb2xiYXJCdXR0b25zXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIDwvby1mb3JtLXRvb2xiYXI+XG59XG4iXX0=
|