tnx-shared 5.1.280 → 5.1.283
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/tnx-shared.umd.js +2 -2
- package/bundles/tnx-shared.umd.js.map +1 -1
- package/bundles/tnx-shared.umd.min.js +1 -1
- package/bundles/tnx-shared.umd.min.js.map +1 -1
- package/esm2015/classes/base/component-base.js +2 -2
- package/esm2015/components/crud/crud-list/crud-list.component.js +2 -2
- package/fesm2015/tnx-shared.js +2 -2
- package/fesm2015/tnx-shared.js.map +1 -1
- package/package.json +2 -2
- package/tnx-shared.metadata.json +1 -1
|
@@ -467,7 +467,7 @@ export class ComponentBase {
|
|
|
467
467
|
itemShares.objectDisplayName = `${encodeURIComponent(setting.objectName)}`;
|
|
468
468
|
let displayField = '';
|
|
469
469
|
if (setting.displayField) {
|
|
470
|
-
displayField = this._commonService.isString(setting.displayField) ? setting.displayField : setting.displayField();
|
|
470
|
+
displayField = this._commonService.isString(setting.displayField) ? setting.displayField : setting.displayField(rowData);
|
|
471
471
|
}
|
|
472
472
|
if (!displayField) {
|
|
473
473
|
const linkColumn = setting.cols.find(x => x.showEditLink);
|
|
@@ -512,4 +512,4 @@ ComponentBase.propDecorators = {
|
|
|
512
512
|
parentModel: [{ type: Input }],
|
|
513
513
|
parentContext: [{ type: Input }]
|
|
514
514
|
};
|
|
515
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LWJhc2UuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vcHJvamVjdHMvdG54LXNoYXJlZC9zcmMvbGliLyIsInNvdXJjZXMiOlsiY2xhc3Nlcy9iYXNlL2NvbXBvbmVudC1iYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQzFGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ3RGLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDJFQUEyRSxDQUFDO0FBQ3ZILE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUM5RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRzNFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FB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QVUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDO2dCQUN4QixNQUFNLEVBQUUsT0FBTyxDQUFDLEVBQUU7Z0JBQ2xCLFVBQVU7Z0JBQ1YsS0FBSyxFQUFFLGtCQUFrQixDQUFDLEtBQUssQ0FBQzthQUNuQyxDQUFDLENBQUM7WUFDSCxNQUFNLGVBQWUsR0FBRyxDQUFDLE1BQU0sT0FBTyxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDbEYsSUFBSSxDQUFDLGVBQWUsRUFBRTtnQkFDbEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUMsV0FBVyxDQUFDLG9DQUFvQyxDQUFDLENBQUM7YUFDekY7WUFDRCxJQUFJLElBQUksR0FBRyxFQUFFLENBQUM7WUFDZCxVQUFVLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDdEMsSUFBSSxJQUFJLEdBQUcsZUFBZSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO1lBQ3BELENBQUMsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQztLQUFBO0lBQ0ssWUFBWSxDQUFDLE9BQVk7O1lBQzNCLE9BQU8sRUFBRSxDQUFDO1FBQ2QsQ0FBQztLQUFBOzs7WUF0Z0JKLFNBQVM7OztZQTlCVSxRQUFROzs7OzBCQWdDdkIsS0FBSzs0QkFDTCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGF0ZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBEaXJlY3RpdmUsIEluamVjdG9yLCBJbnB1dCwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBBcHBsaWNhdGlvbkNvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vYXBwLWNvbnRleHQvYXBwbGljYXRpb24tY29udGV4dC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29tcG9uZW50Q29udGV4dFNlcnZpY2UgfSBmcm9tICcuLi8uLi9hcHAtY29udGV4dC9jb21wb25lbnQtY29udGV4dC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTW9kZWxTaGFyZUxpbmtCeVBlcm1pc3Npb24gfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL3NoYXJlLWxpbmstYnktcGVybWlzc2lvbi9tb2RlbHMvc2hhcmUtbGluay1ieS1wZXJtaXNzaW9uJztcclxuaW1wb3J0IHsgVmFsaWRhdGlvbiB9IGZyb20gJy4uLy4uL2NvbmZpZ3MvY29tcG9uZW50LWNvbnRhbnRzJztcclxuaW1wb3J0IHsgQ29tQ3R4Q29uc3RhbnRzIH0gZnJvbSAnLi4vLi4vY29uZmlncy9jb21wb25lbnQtY29udGV4dC5jb25zdGFudCc7XHJcbmltcG9ydCB7IFBlcm1pc3Npb25CYXNlIH0gZnJvbSAnLi4vLi4vZW51bXMvY29tbW9uJztcclxuaW1wb3J0IHsgRXhwb3J0SXRlbSB9IGZyb20gJy4uLy4uL21vZGVscy9leHBvcnQtaXRlbSc7XHJcbmltcG9ydCB7IEZpbHRlciwgU29ydCwgU3RyaW5nQ29tcGFyZU9wdGlvbiB9IGZyb20gJy4uLy4uL21vZGVscy9ncmlkLWluZm8nO1xyXG5pbXBvcnQgeyBSZXNwb25zZVJlc3VsdCB9IGZyb20gJy4uLy4uL21vZGVscy9yZXNwb25zZS1yZXN1bHQnO1xyXG5pbXBvcnQgeyBCYXNlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Jhc2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbW1vblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb21tb24uc2VydmljZSc7XHJcbmltcG9ydCB7IENydWRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY3J1ZC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTm90aWZpZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbm90aWZpZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IFRlbXBsYXRlVjRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdGVtcGxhdGUtdjQuc2VydmljZSc7XHJcbmltcG9ydCB7IFRlbXBsYXRlSW5zdGFuY2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdGVtcGxhdGVpbnN0YW5jZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgZ2V0U3RyaW5nRGF0ZVZOIH0gZnJvbSAnLi4vLi4vdXRpbHMvZGF0ZSc7XHJcbmltcG9ydCB7IEV4cG9ydEl0ZW1UeXBlIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcclxuaW1wb3J0IHtcclxuICAgIEFkZHJlc3NDb250cm9sU2NoZW1hLCBBdXRvQ29tcGxldGVQaWNrZXJDb250cm9sU2NoZW1hLFxyXG4gICAgQ2hlY2tib3hDb250cm9sU2NoZW1hLCBDb0NhdVRvQ2h1Y0NvbnRyb2xTY2hlbWEsIENvQ2F1VG9DaHVjUGlja2VyQ29udHJvbFNjaGVtYSxcclxuICAgIENydWRMaXN0U2V0dGluZyxcclxuICAgIERhdGVUaW1lQ29udHJvbFNjaGVtYSwgRHJvcGRvd25Db250cm9sU2NoZW1hLCBGaWxlTWFuYWdlckNvbnRyb2xTY2hlbWEsIEZpbGVVcGxvYWRDb250cm9sU2NoZW1hLFxyXG4gICAgRm9ybVNjaGVtYUJhc2UsIE1vZGVsU2NoZW1hLCBPcGVyYXRvciwgU3dpdGNoQ29udHJvbFNjaGVtYSwgVGFibGVTY2hlbWFcclxufSBmcm9tICcuLi9mb3JtLXNjaGVtYSc7XHJcblxyXG5leHBvcnQgY29uc3QgRVhQT1JUX1ZFUlNJT05fVjQgPSA0O1xyXG5leHBvcnQgY29uc3QgRVhQT1JUX1ZFUlNJT05fVjUgPSA1O1xyXG5ARGlyZWN0aXZlKClcclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIENvbXBvbmVudEJhc2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xyXG4gICAgQElucHV0KCkgcGFyZW50TW9kZWw6IGFueTtcclxuICAgIEBJbnB1dCgpIHNldCBwYXJlbnRDb250ZXh0KHZhbHVlOiBDb21wb25lbnRDb250ZXh0U2VydmljZSkge1xyXG4gICAgICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRleHQucGFyZW50ID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIGdldCBwYXJlbnRDb250ZXh0KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRleHQucGFyZW50O1xyXG4gICAgfVxyXG5cclxuICAgIG1vZGVsOiBhbnk7XHJcbiAgICBtb2RlbFNjaGVtYTogTW9kZWxTY2hlbWFbXSA9IFtdO1xyXG4gICAgY29udGV4dDogQ29tcG9uZW50Q29udGV4dFNlcnZpY2U7XHJcbiAgICByb290TW9kZWw6IGFueTtcclxuICAgIHJvb3RDb250ZXh0OiBDb21wb25lbnRDb250ZXh0U2VydmljZTtcclxuICAgIGd1aWRFbXB0eSA9ICcwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAnO1xyXG5cclxuICAgIHB1YmxpYyBfdW5zdWJzY3JpYmVBbGw6IFN1YmplY3Q8YW55PjtcclxuICAgIHByb3RlY3RlZCBfY29tbW9uU2VydmljZTogQ29tbW9uU2VydmljZTtcclxuICAgIHByb3RlY3RlZCBfYXBwQ29udGV4dDogQXBwbGljYXRpb25Db250ZXh0U2VydmljZTtcclxuICAgIHByb3RlY3RlZCBfY29tcG9uZW50Q29udGV4dDogQ29tcG9uZW50Q29udGV4dFNlcnZpY2U7XHJcbiAgICBwcm90ZWN0ZWQgX2luamVjdG9yOiBJbmplY3RvcjtcclxuICAgIHByb3RlY3RlZCBfYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlO1xyXG4gICAgcHJvdGVjdGVkIF9jcnVkU2VydmljZTogQ3J1ZFNlcnZpY2U7XHJcbiAgICBwcm90ZWN0ZWQgX2RhdGVQaXBlOiBEYXRlUGlwZTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihpbmplY3RvcjogSW5qZWN0b3IsIGNvbXBvbmVudE5hbWU/OiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLl91bnN1YnNjcmliZUFsbCA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgICAgICAgdGhpcy5faW5qZWN0b3IgPSBpbmplY3RvcjtcclxuICAgICAgICB0aGlzLl9hcHBDb250ZXh0ID0gaW5qZWN0b3IuZ2V0KEFwcGxpY2F0aW9uQ29udGV4dFNlcnZpY2UpO1xyXG4gICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHQgPSBpbmplY3Rvci5nZXQoQ29tcG9uZW50Q29udGV4dFNlcnZpY2UpO1xyXG4gICAgICAgIHRoaXMuX2FjdGl2YXRlZFJvdXRlID0gaW5qZWN0b3IuZ2V0KEFjdGl2YXRlZFJvdXRlKTtcclxuICAgICAgICB0aGlzLl9jcnVkU2VydmljZSA9IGluamVjdG9yLmdldChDcnVkU2VydmljZSk7XHJcbiAgICAgICAgdGhpcy5fY29tbW9uU2VydmljZSA9IGluamVjdG9yLmdldChDb21tb25TZXJ2aWNlKTtcclxuICAgICAgICB0aGlzLl9kYXRlUGlwZSA9IGluamVjdG9yLmdldChEYXRlUGlwZSk7XHJcblxyXG4gICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHQgPSB0aGlzLl9hcHBDb250ZXh0LmFkZENvbXBvbmVudENvbnRleHQodGhpcy5fY29tcG9uZW50Q29udGV4dCwgdGhpcy5fYWN0aXZhdGVkUm91dGUsIHRoaXMuZ2V0Q29tcG9uZW50SWQoKSk7XHJcbiAgICAgICAgaWYgKHRoaXMuX2NvbXBvbmVudENvbnRleHQpIHtcclxuICAgICAgICAgICAgdGhpcy5tb2RlbCA9IHRoaXMuX2NvbXBvbmVudENvbnRleHQuZGF0YTtcclxuICAgICAgICAgICAgdGhpcy5jb250ZXh0ID0gdGhpcy5fY29tcG9uZW50Q29udGV4dDtcclxuICAgICAgICAgICAgdGhpcy5yb290Q29udGV4dCA9IHRoaXMuX2NvbXBvbmVudENvbnRleHQucm9vdDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMucm9vdE1vZGVsID0gdGhpcy5yb290Q29udGV4dC5kYXRhO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVsLmNvbXBvbmVudFN1YnMgPSBbXTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIE9uIGRlc3Ryb3lcclxuICAgICovXHJcbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgICAgICAvLyBVbnN1YnNjcmliZSBmcm9tIGFsbCBzdWJzY3JpcHRpb25zXHJcbiAgICAgICAgdGhpcy5fdW5zdWJzY3JpYmVBbGwubmV4dCgpO1xyXG4gICAgICAgIHRoaXMuX3Vuc3Vic2NyaWJlQWxsLmNvbXBsZXRlKCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLm1vZGVsLmNvbXBvbmVudFN1YnMpIHtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBzdWIgb2YgdGhpcy5tb2RlbC5jb21wb25lbnRTdWJzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc3ViKVxyXG4gICAgICAgICAgICAgICAgICAgIHN1Yi51bnN1YnNjcmliZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5jb250ZXh0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5kZXN0cm95Q29udGV4dCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXRDb21wb25lbnRJZCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jb21tb25TZXJ2aWNlLnJhbmRvbVN0cmluZygpO1xyXG4gICAgfVxyXG5cclxuICAgIHN1YnNjcmliZVJvb3QobmFtZTogc3RyaW5nLCBjYWxsQmFjazogYW55KSB7XHJcbiAgICAgICAgdGhpcy5tb2RlbC5jb21wb25lbnRTdWJzLnB1c2godGhpcy5yb290Q29udGV4dC5zdWJzY3JpYmUobmFtZSwgY2FsbEJhY2spKTtcclxuICAgIH1cclxuXHJcbiAgICBzdWJzY3JpYmUobmFtZTogc3RyaW5nLCBjYWxsQmFjazogYW55KSB7XHJcbiAgICAgICAgdGhpcy5tb2RlbC5jb21wb25lbnRTdWJzLnB1c2godGhpcy5jb250ZXh0LnN1YnNjcmliZShuYW1lLCBjYWxsQmFjaykpO1xyXG4gICAgfVxyXG5cclxuICAgIHN1YnNjcmliZU9uY2UobmFtZTogc3RyaW5nLCBjYWxsQmFjazogYW55KSB7XHJcbiAgICAgICAgdGhpcy5tb2RlbC5jb21wb25lbnRTdWJzLnB1c2godGhpcy5jb250ZXh0LnN1YnNjcmliZU9uY2UobmFtZSwgY2FsbEJhY2spKTtcclxuICAgIH1cclxuXHJcbiAgICByZXBsYXlTdWJzY3JpYmUobmFtZTogc3RyaW5nLCBjYWxsQmFjazogYW55KSB7XHJcbiAgICAgICAgdGhpcy5tb2RlbC5jb21wb25lbnRTdWJzLnB1c2godGhpcy5jb250ZXh0LnJlcGxheVN1YnNjcmliZShuYW1lLCBjYWxsQmFjaykpO1xyXG4gICAgfVxyXG5cclxuICAgIHRyYWNrQnlGdW5jRGVmYXVsdChpbmRleCwgaXRlbSkge1xyXG4gICAgICAgIHJldHVybiBpbmRleDtcclxuICAgIH1cclxuXHJcbiAgICB0cmFja0J5RnVuY0lkKGluZGV4LCBpdGVtKSB7XHJcbiAgICAgICAgcmV0dXJuIGl0ZW0uaWQ7XHJcbiAgICB9XHJcblxyXG4gICAgaGFuZGxlUmVzcG9uc2UocmVzOiBSZXNwb25zZVJlc3VsdCwgbWVzc2FnZT86IHN0cmluZywgY2FsbEJhY2s/OiBGdW5jdGlvbiwgY2FsbEJhY2tFcnJvcj86IEZ1bmN0aW9uKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NydWRTZXJ2aWNlLmhhbmRsZVJlc3BvbnNlKHJlcywgbWVzc2FnZSwgY2FsbEJhY2ssIGNhbGxCYWNrRXJyb3IpO1xyXG4gICAgfVxyXG5cclxuICAgIGhhbmRsZVJlc3BvbnNlV2l0aFdhaXRCb3gocmVzOiBSZXNwb25zZVJlc3VsdCwgbWVzc2FnZT86IHN0cmluZywgY2FsbEJhY2s/OiBGdW5jdGlvbiwgY2FsbEJhY2tFcnJvcj86IEZ1bmN0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5oaWRlV2FpdEJveCgpO1xyXG4gICAgICAgIGlmICghcmVzLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgaWYgKHJlcy5lcnJvciA9PSBWYWxpZGF0aW9uLkVSUl9TWVNfREVWKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKHJlcy5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2luamVjdG9yLmdldChOb3RpZmllclNlcnZpY2UpLnNob3dXYXJuaW5nKCdDw7MgbOG7l2kgeOG6o3kgcmEuIExpw6puIGjhu4cgcXXhuqNuIHRy4buLIHZpw6puIMSR4buDIGJp4bq/dCB0aMOqbSBjaGkgdGnhur90LicpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlcy5tZXNzYWdlICE9IG51bGwgJiYgcmVzLm1lc3NhZ2UgIT0gJycpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbmplY3Rvci5nZXQoTm90aWZpZXJTZXJ2aWNlKS5zaG93V2FybmluZyhyZXMubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbmplY3Rvci5nZXQoTm90aWZpZXJTZXJ2aWNlKS5zaG93V2FybmluZyhyZXMuZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChjYWxsQmFja0Vycm9yKVxyXG4gICAgICAgICAgICAgICAgY2FsbEJhY2tFcnJvcihyZXMpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChtZXNzYWdlKVxyXG4gICAgICAgICAgICB0aGlzLl9pbmplY3Rvci5nZXQoTm90aWZpZXJTZXJ2aWNlKS5zaG93U3VjY2VzcyhtZXNzYWdlKTtcclxuICAgICAgICBpZiAoY2FsbEJhY2spXHJcbiAgICAgICAgICAgIGNhbGxCYWNrKHJlcyk7XHJcbiAgICB9XHJcblxyXG4gICAgaXNOb3ROdWxsQXJyYXkoYXJyKSB7XHJcbiAgICAgICAgcmV0dXJuIGFyciAhPSBudWxsICYmIGFyci5sZW5ndGggPiAwO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmNTb3J0RGVmYXVsdChhLCBiKSB7XHJcbiAgICAgICAgaWYgKGEgPiBiKVxyXG4gICAgICAgICAgICByZXR1cm4gMTtcclxuICAgICAgICBpZiAoYSA9PSBiKVxyXG4gICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICByZXR1cm4gLTE7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gYWRkRXhwb3J0Sm9iKGpvYjogRXhwb3J0Sm9iKSB7XHJcbiAgICAvLyAgICAgdGhpcy5jb250ZXh0LmFkZEV4cG9ydEpvYihqb2IpO1xyXG4gICAgLy8gfVxyXG5cclxuICAgIGV4cG9ydChkYXRhOiBFeHBvcnRJdGVtLCB2ZXJzaW9uID0gRVhQT1JUX1ZFUlNJT05fVjQpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ2V4cG9ydCB2ZXJzaW9uOiAnICsgdmVyc2lvbik7XHJcbiAgICAgICAgc3dpdGNoICh2ZXJzaW9uKSB7XHJcbiAgICAgICAgICAgIGNhc2UgRVhQT1JUX1ZFUlNJT05fVjQ6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5leHBvcnRWNChkYXRhKTtcclxuICAgICAgICAgICAgY2FzZSBFWFBPUlRfVkVSU0lPTl9WNTpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmV4cG9ydFY1KGRhdGEpO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgRXhwb3J0IHZlcnNpb246ICR7dmVyc2lvbn0gaXMgbm90IHN1cHBvcnRlZCFgKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZXhwb3J0RXhjZWxWNShkYXRhOiBhbnksIHRlbXBsYXRlQ29kZTogc3RyaW5nLCBmaWxlTmFtZTogc3RyaW5nKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xyXG4gICAgICAgIGNvbnN0IHNoZWV0ID0gbmV3IEV4cG9ydEl0ZW0oe1xyXG4gICAgICAgICAgICB0eXBlOiBFeHBvcnRJdGVtVHlwZS5FeGNlbFNoZWV0LFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZUNvZGUsXHJcbiAgICAgICAgICAgIGRhdGE6IEpTT04uc3RyaW5naWZ5KGRhdGEpLFxyXG4gICAgICAgICAgICBuYW1lOiAnU2hlZXQxJ1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjb25zdCBmaWxlID0gbmV3IEV4cG9ydEl0ZW0oe1xyXG4gICAgICAgICAgICB0eXBlOiBFeHBvcnRJdGVtVHlwZS5FeGNlbEZpbGUsXHJcbiAgICAgICAgICAgIG5hbWU6IGZpbGVOYW1lXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgZmlsZS5jaGlsZHJlbiA9IFtzaGVldF07XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZXhwb3J0KGZpbGUsIEVYUE9SVF9WRVJTSU9OX1Y1KTtcclxuICAgIH1cclxuXHJcbiAgICBleHBvcnRWNChkYXRhOiBFeHBvcnRJdGVtKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xyXG4gICAgICAgIGNvbnN0IHRlbXBsYXRlVjRTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KFRlbXBsYXRlVjRTZXJ2aWNlKTtcclxuICAgICAgICByZXR1cm4gdGVtcGxhdGVWNFNlcnZpY2UuZXhwb3J0Tm9ybWFsKGRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIGV4cG9ydFY1KGRhdGE6IEV4cG9ydEl0ZW0pOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XHJcbiAgICAgICAgY29uc3QgdGVtcGxhdGVJbnN0YW5jZVNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoVGVtcGxhdGVJbnN0YW5jZVNlcnZpY2UpO1xyXG4gICAgICAgIHJldHVybiB0ZW1wbGF0ZUluc3RhbmNlU2VydmljZS5leHBvcnROb3JtYWwoZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgbmV3RmlsdGVyQ29udGFpbmVyKGxvZ2ljOiAnYW5kJyB8ICdvcicsIC4uLmZpbHRlcnM6IEZpbHRlcltdKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBGaWx0ZXIoe1xyXG4gICAgICAgICAgICBsb2dpYyxcclxuICAgICAgICAgICAgZmlsdGVyczogWy4uLmZpbHRlcnNdXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgbmV3RmlsdGVyKGZpZWxkOiBzdHJpbmcsIG9wZXJhdG9yOiBPcGVyYXRvciwgdmFsdWU6IGFueSwgdmFsdWVJc0ZpZWxkOiBib29sZWFuID0gZmFsc2UsIHN0cmluZ0NvbXBhcmVPcHRpb246IFN0cmluZ0NvbXBhcmVPcHRpb24gPSBTdHJpbmdDb21wYXJlT3B0aW9uLk5vcm1hbCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgRmlsdGVyKHtcclxuICAgICAgICAgICAgZmllbGQsIG9wZXJhdG9yLFxyXG4gICAgICAgICAgICB2YWx1ZTogSlNPTi5zdHJpbmdpZnkodmFsdWUpLFxyXG4gICAgICAgICAgICB2YWx1ZUlzRmllbGQsXHJcbiAgICAgICAgICAgIHN0cmluZ0NvbXBhcmVPcHRpb24sXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgbmV3RmlsdGVyVjQoZmllbGQ6IHN0cmluZywgb3BlcmF0b3I6IE9wZXJhdG9yLCB2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBGaWx0ZXIoe1xyXG4gICAgICAgICAgICBmaWVsZCwgb3BlcmF0b3IsXHJcbiAgICAgICAgICAgIHZhbHVlXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgbmV3QmluZGluZ0ZpbHRlcihjb2x1bW46IHN0cmluZywgb3BlcmF0b3I6IE9wZXJhdG9yLCBzb3VyY2VGaWVsZDogc3RyaW5nLCBzdWJGaWVsZD86IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiBuZXcgRmlsdGVyKHtcclxuICAgICAgICAgICAgZmllbGQ6IGNvbHVtbixcclxuICAgICAgICAgICAgb3BlcmF0b3IsXHJcbiAgICAgICAgICAgIHNvdXJjZUZpZWxkLFxyXG4gICAgICAgICAgICBzdWJGaWVsZFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG5ld1NvcnQoZmllbGQ6IHN0cmluZywgZGlyOiAxIHwgLTEgPSAxKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBTb3J0KHsgZmllbGQsIGRpciB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzaG93V2FpdEJveChtZXNzYWdlPzogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5yb290Q29udGV4dC5maXJlRXZlbnQoQ29tQ3R4Q29uc3RhbnRzLlJPT1QuU0hPV19XQUlUX0JPWCwge1xyXG4gICAgICAgICAgICBzaG93OiB0cnVlLFxyXG4gICAgICAgICAgICBtZXNzYWdlXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaGlkZVdhaXRCb3goKSB7XHJcbiAgICAgICAgdGhpcy5yb290Q29udGV4dC5maXJlRXZlbnQoQ29tQ3R4Q29uc3RhbnRzLlJPT1QuU0hPV19XQUlUX0JPWCwge1xyXG4gICAgICAgICAgICBzaG93OiBmYWxzZVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNvcHlUb0NsaXBib2FyZCA9IHN0ciA9PiB7XHJcbiAgICAgICAgY29uc3QgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZXh0YXJlYScpO1xyXG4gICAgICAgIGVsLnZhbHVlID0gc3RyO1xyXG4gICAgICAgIGVsLnNldEF0dHJpYnV0ZSgncmVhZG9ubHknLCAnJyk7XHJcbiAgICAgICAgZWwuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xyXG4gICAgICAgIGVsLnN0eWxlLmxlZnQgPSAnLTk5OTlweCc7XHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlbCk7XHJcbiAgICAgICAgZWwuc2VsZWN0KCk7XHJcbiAgICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2NvcHknKTtcclxuICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGVsKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBfcHJpbnRQZGYoYmFzZVNlcnZpY2U6IEJhc2VTZXJ2aWNlLCBpZDogc3RyaW5nLCByb3dEYXRhOiBhbnkpIHtcclxuICAgICAgICBjb25zdCBpdGVtRGV0YWlsID0gKGF3YWl0IGJhc2VTZXJ2aWNlLmdldERldGFpbChpZCkpLmRhdGE7XHJcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGJhc2VTZXJ2aWNlLmdldERhdGFUcmluaEt5KGl0ZW1EZXRhaWwsIHJvd0RhdGEpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wcmludFBkZkJhc2UoYmFzZVNlcnZpY2UsIGlkLCBkYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBfcHJpbnRQZGZCeVNjaGVtYShiYXNlU2VydmljZTogQmFzZVNlcnZpY2UsIG1vZGVsOiBhbnksIHNjaGVtYXM6IEZvcm1TY2hlbWFCYXNlW10pIHtcclxuICAgICAgICBjb25zdCB0bXBNb2RlbCA9IHsgLi4ubW9kZWwgfTtcclxuICAgICAgICBkZWxldGUgdG1wTW9kZWwucHJpbnRGaWxlSWQ7XHJcbiAgICAgICAgY29uc3QgZGF0YSA9IFtdO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuX2dldEtleVZhbHVlKGRhdGEsICcnLCBzY2hlbWFzLCB0bXBNb2RlbCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ByaW50UGRmQmFzZShiYXNlU2VydmljZSwgbW9kZWwuaWQsIGRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgX3ByaW50UGRmQmFzZShiYXNlU2VydmljZTogQmFzZVNlcnZpY2UsIGlkOiBzdHJpbmcsIGRhdGE6IGFueVtdKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgcmV0dXJuIGJhc2VTZXJ2aWNlLmV4cG9ydFRvUGRmKGlkLCBKU09OLnN0cmluZ2lmeSh7XHJcbiAgICAgICAgICAgICAgICB0aWV1RGU6IGJhc2VTZXJ2aWNlLm9iamVjdE5hbWUsXHJcbiAgICAgICAgICAgICAgICBkYXRhXHJcbiAgICAgICAgICAgIH0pKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICAgICAgICAgIHJldHVybiA8UmVzcG9uc2VSZXN1bHQ+e1xyXG4gICAgICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnQ8OzIGzhu5dpIHjhuqN5IHJhJ1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0TGFiZWwocHJlZml4OiBzdHJpbmcsIGxhYmVsOiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gYCR7cHJlZml4fSR7bGFiZWx9YDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9nZXRWYWx1ZUZyb21EYXRhc291cmNlKGl0ZW1TZWxlY3RlZDogYW55LCBpc011bHRpcGxlOiBib29sZWFuLCBmdW5jR2V0TGFiZWw6IChpdGVtKSA9PiBzdHJpbmcpIHtcclxuICAgICAgICBsZXQgdmFsdWUgPSBudWxsO1xyXG4gICAgICAgIGlmIChpc011bHRpcGxlKSB7XHJcbiAgICAgICAgICAgIGlmIChpdGVtU2VsZWN0ZWQgJiYgaXRlbVNlbGVjdGVkLmxlbmd0aCA+IDApXHJcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGl0ZW1TZWxlY3RlZC5tYXAocSA9PiBmdW5jR2V0TGFiZWwocS52YWx1ZSkpLmpvaW4oJywgJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoaXRlbVNlbGVjdGVkKSB7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGZ1bmNHZXRMYWJlbChpdGVtU2VsZWN0ZWQudmFsdWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBfZ2V0S2V5VmFsdWUocmVzdWx0OiBhbnlbXSwgcHJlZml4OiBzdHJpbmcsIHNjaGVtYXM6IEZvcm1TY2hlbWFCYXNlW10sIG1vZGVsOiBhbnkpIHtcclxuICAgICAgICBmb3IgKGNvbnN0IHNjaGVtYSBvZiBzY2hlbWFzKSB7XHJcbiAgICAgICAgICAgIGlmICghc2NoZW1hLmhpZGRlblxyXG4gICAgICAgICAgICAgICAgJiYgc2NoZW1hLmZpZWxkICE9ICdwcmludEZpbGVJZCdcclxuICAgICAgICAgICAgICAgICYmIHNjaGVtYS5sYWJlbFxyXG4gICAgICAgICAgICAgICAgJiYgIShzY2hlbWEgaW5zdGFuY2VvZiBGaWxlVXBsb2FkQ29udHJvbFNjaGVtYSlcclxuICAgICAgICAgICAgICAgICYmICEoc2NoZW1hIGluc3RhbmNlb2YgRmlsZU1hbmFnZXJDb250cm9sU2NoZW1hKVxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgIGxldCB2YWx1ZSA9IG1vZGVsW3NjaGVtYS5maWVsZF07XHJcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMuZ2V0TGFiZWwocHJlZml4LCBzY2hlbWEubGFiZWwpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoc2NoZW1hIGluc3RhbmNlb2YgVGFibGVTY2hlbWEpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB0bXBTY2hlbWEgPSA8VGFibGVTY2hlbWE+c2NoZW1hO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBudWxsKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMuZ2V0TGFiZWwocHJlZml4LCBzY2hlbWEubGFiZWwpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgcm93RGF0YSBvZiB2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fZ2V0S2V5VmFsdWUocmVzdWx0LCBgJHtwcmVmaXh9XFx0YCwgdG1wU2NoZW1hLnJvd1RlbXBsYXRlLCByb3dEYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogJycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG51bGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zcGxpY2UocmVzdWx0Lmxlbmd0aCAtIDEsIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNjaGVtYSBpbnN0YW5jZW9mIEFkZHJlc3NDb250cm9sU2NoZW1hKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdG1wU2NoZW1hID0gPEFkZHJlc3NDb250cm9sU2NoZW1hPnNjaGVtYTtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLmdldExhYmVsKHByZWZpeCwgc2NoZW1hLmxhYmVsKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG51bGxcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9nZXRLZXlWYWx1ZShyZXN1bHQsIGAke3ByZWZpeH1cXHRgLCB0bXBTY2hlbWEuX2NvbXBvbmVudC5zZXR0aW5nLnNjaGVtYSwgdmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNjaGVtYSBpbnN0YW5jZW9mIERhdGVUaW1lQ29udHJvbFNjaGVtYSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoISh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IG5ldyBEYXRlKHZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGdldFN0cmluZ0RhdGVWTih2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNjaGVtYSBpbnN0YW5jZW9mIENvQ2F1VG9DaHVjUGlja2VyQ29udHJvbFNjaGVtYSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtU2VsZWN0ZWQgPSBhd2FpdCBzY2hlbWEuX2NvbXBvbmVudC5jb250cm9sUGlja2VyLl9jb21wb25lbnQuZ2V0RGF0YVNlbGVjdGVkVmFsdWUodmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0bXBTY2hlbWEgPSA8Q29DYXVUb0NodWNQaWNrZXJDb250cm9sU2NoZW1hPnNjaGVtYTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGZ1bmNHZXRMYWJlbCA9IHRtcFNjaGVtYS5mdW5jR2V0TGFiZWw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZnVuY0dldExhYmVsKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY0dldExhYmVsID0gaXRlbSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0udmFsdWVbdG1wU2NoZW1hLmRpc3BsYXlGaWVsZF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHRoaXMuX2dldFZhbHVlRnJvbURhdGFzb3VyY2UoaXRlbVNlbGVjdGVkLCBzY2hlbWEubXVsdGlwbGUsIGl0ZW0gPT4gaXRlbS50ZW4pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjaGVtYS5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW1TZWxlY3RlZC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjaGVtYS5mdW5jR2V0TGFiZWwpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gaXRlbVNlbGVjdGVkLm1hcChxID0+IHRtcFNjaGVtYS5mdW5jR2V0TGFiZWwocS52YWx1ZSkpLmpvaW4oJywgJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGl0ZW1TZWxlY3RlZC5tYXAocSA9PiBxLnZhbHVlW3RtcFNjaGVtYS5kaXNwbGF5RmllbGRdKS5qb2luKCcsICcpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtU2VsZWN0ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2NoZW1hLmZ1bmNHZXRMYWJlbClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBzY2hlbWEuZnVuY0dldExhYmVsKGl0ZW1TZWxlY3RlZC52YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGl0ZW1TZWxlY3RlZC52YWx1ZVtzY2hlbWEuZGlzcGxheUZpZWxkXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChzY2hlbWEgaW5zdGFuY2VvZiBBdXRvQ29tcGxldGVQaWNrZXJDb250cm9sU2NoZW1hKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1TZWxlY3RlZCA9IGF3YWl0IHNjaGVtYS5fY29tcG9uZW50LmdldERhdGFTZWxlY3RlZFZhbHVlKHZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdG1wU2NoZW1hID0gPEF1dG9Db21wbGV0ZVBpY2tlckNvbnRyb2xTY2hlbWE+c2NoZW1hO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZnVuY0dldExhYmVsID0gdG1wU2NoZW1hLmZ1bmNHZXRMYWJlbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFmdW5jR2V0TGFiZWwpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jR2V0TGFiZWwgPSBpdGVtID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbVt0bXBTY2hlbWEuZGlzcGxheUZpZWxkXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdGhpcy5fZ2V0VmFsdWVGcm9tRGF0YXNvdXJjZShpdGVtU2VsZWN0ZWQsIHNjaGVtYS5tdWx0aXBsZSwgZnVuY0dldExhYmVsKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoc2NoZW1hIGluc3RhbmNlb2YgQ29DYXVUb0NodWNDb250cm9sU2NoZW1hKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRtcFNjaGVtYSA9IDxDb0NhdVRvQ2h1Y0NvbnRyb2xTY2hlbWE+c2NoZW1hO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmdW5jR2V0TGFiZWwgPSBpdGVtID0+IGl0ZW0ubGFiZWw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBkYXRhU291cmNlID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGl0ZW1TZWxlY3RlZCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0bXBTY2hlbWEuX2NvbXBvbmVudC5tdWx0aVNlbGVjdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVNvdXJjZSA9IHRtcFNjaGVtYS5fY29tcG9uZW50Lm11bHRpU2VsZWN0Ll9vcHRpb25zO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbVNlbGVjdGVkID0gZGF0YVNvdXJjZS5maWx0ZXIocSA9PiB2YWx1ZS5pbmRleE9mKHggPT4geCA9PSBxLnZhbHVlKSkubWFwKHEgPT4gKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogcVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVNvdXJjZSA9IHRtcFNjaGVtYS5fY29tcG9uZW50LmRyb3Bkb3duLl9vcHRpb25zO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbVNlbGVjdGVkID0gZGF0YVNvdXJjZS5maW5kKHEgPT4gcS52YWx1ZSA9PSB2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbVNlbGVjdGVkKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1TZWxlY3RlZCA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGl0ZW1TZWxlY3RlZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHRoaXMuX2dldFZhbHVlRnJvbURhdGFzb3VyY2UoaXRlbVNlbGVjdGVkLCBzY2hlbWEubXVsdGlwbGUsIGZ1bmNHZXRMYWJlbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNjaGVtYSBpbnN0YW5jZW9mIERyb3Bkb3duQ29udHJvbFNjaGVtYSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0bXBTY2hlbWEgPSA8RHJvcGRvd25Db250cm9sU2NoZW1hPnNjaGVtYTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGl0ZW1TZWxlY3RlZCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzY2hlbWEubXVsdGlwbGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1TZWxlY3RlZCA9IHNjaGVtYS5fY29tcG9uZW50LmRhdGFTb3VyY2VJbnRlcm5hbC5maWx0ZXIocSA9PiB2YWx1ZS5pbmRleE9mKHggPT4geCA9PSBxLnZhbHVlW3EudmFsdWUuX2Ryb3Bkb3dudmFsdWVdKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtU2VsZWN0ZWQgPSBzY2hlbWEuX2NvbXBvbmVudC5kYXRhU291cmNlSW50ZXJuYWwuZmluZChxID0+IHEudmFsdWVbcS52YWx1ZS5fZHJvcGRvd252YWx1ZV0gPT0gdmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdGhpcy5fZ2V0VmFsdWVGcm9tRGF0YXNvdXJjZShpdGVtU2VsZWN0ZWQsIHNjaGVtYS5tdWx0aXBsZSwgdG1wU2NoZW1hLmZ1bmNHZXRMYWJlbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNjaGVtYSBpbnN0YW5jZW9mIENoZWNrYm94Q29udHJvbFNjaGVtYSB8fCBzY2hlbWEgaW5zdGFuY2VvZiBTd2l0Y2hDb250cm9sU2NoZW1hKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdmFsdWUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9ICdLaMO0bmcnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9ICdDw7MnO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAvLyBWYWx1ZSA9IHVuZGVmaW5lZCB0aMOsIGtoaSBzZXJpYWxpemUgc+G6vSBi4buLIG3huqV0IHByb3BcclxuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMuZ2V0TGFiZWwocHJlZml4LCBzY2hlbWEubGFiZWwpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U3RyaW5nRGF0ZSh2YWx1ZSk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKCF2YWx1ZSkgcmV0dXJuICcnO1xyXG4gICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGVQaXBlLnRyYW5zZm9ybSh2YWx1ZSwgJ2RkL01NL3l5eXknKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHZhbHVlKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZGF0ZVBpcGUudHJhbnNmb3JtKGRhdGUsICdkZC9NTS95eXl5Jyk7XHJcbiAgICB9XHJcbiAgICAvLyBodHRwOi8vbG9jYWxob3N0OjI3MjMwL3VuaXZlcnNhbC1saW5rP3NlcnZpY2VDb2RlPWNvbmd2aWVjJmVudGl0eT1ETV9Qcmlvcml0eSZlbnRpdHlLZXk9MDkxMWYzZTctM2RiMC00YjY4LTg3Y2QtMDdkNDI1NzQxZTllJnN0YXRlPSZzb3VyY2VQYXRoPWh0dHA6Ly9sb2NhbGhvc3Q6MjcyMzAvZG0tcHJpb3JpdHlcclxuICAgIHBhcnNlQXR0YWNoTGluayhjb250ZW50KSB7XHJcbiAgICAgICAgY29uc3QgbGlua3MgPSBjb250ZW50LnNwbGl0KCdcXHJcXG4nKTtcclxuICAgICAgICBjb25zdCBvcCA9IFtdO1xyXG4gICAgICAgIGZvciAoY29uc3QgbGluayBvZiBsaW5rcykge1xyXG4gICAgICAgICAgICBjb25zdCBhcnIgPSBsaW5rLnNwbGl0KCc/Jyk7XHJcbiAgICAgICAgICAgIGlmIChhcnIubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdGVtcCA9IGFyclsxXTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy5wYXJzZVF1ZXJ5U3RyaW5nKHRlbXApO1xyXG4gICAgICAgICAgICAgICAgaWYgKHF1ZXJ5ICYmIHF1ZXJ5LnNlcnZpY2VDb2RlICYmIHF1ZXJ5LmVudGl0eSAmJiBxdWVyeS5lbnRpdHlLZXkpIHtcclxuICAgICAgICAgICAgICAgICAgICBxdWVyeS5yYXdMaW5rID0gbGluaztcclxuICAgICAgICAgICAgICAgICAgICBvcC5wdXNoKHF1ZXJ5KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihgbGluayAke2xpbmt9IGludmFsaWQgdG8gcGFyc2VgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gb3A7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIHBhcnNlUXVlcnlTdHJpbmcocXVlcnk6IHN0cmluZyk6IGFueSB7XHJcbiAgICAgICAgaWYgKCFxdWVyeSkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgaWYgKHF1ZXJ5LnN0YXJ0c1dpdGgoJz8nKSkgcXVlcnkgPSBxdWVyeS5zdWJzdHJpbmcoMSk7XHJcbiAgICAgICAgY29uc3QgYXJyID0gcXVlcnkuc3BsaXQoJyYnKTtcclxuICAgICAgICBjb25zdCBvYmogPSB7fTtcclxuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgYXJyKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRlbXAgPSBpdGVtLnNwbGl0KCc9Jyk7XHJcbiAgICAgICAgICAgIGlmICh0ZW1wWzFdKSB7XHJcbiAgICAgICAgICAgICAgICBvYmpbdGVtcFswXV0gPSBkZWNvZGVVUklDb21wb25lbnQodGVtcFsxXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBvYmpbdGVtcFswXV0gPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBvYmo7XHJcbiAgICB9XHJcbiAgICBhc3luYyBnZXRDb3B5UGF0aChzZXR0aW5nOiBDcnVkTGlzdFNldHRpbmcsIHJvd0RhdGE6IGFueSwgcGVybWlzc2lvbjogUGVybWlzc2lvbkJhc2UgPSBQZXJtaXNzaW9uQmFzZS5SRUFEKSB7XHJcbiAgICAgICAgY29uc3QgaXRlbVNoYXJlczogTW9kZWxTaGFyZUxpbmtCeVBlcm1pc3Npb24gPSBuZXcgTW9kZWxTaGFyZUxpbmtCeVBlcm1pc3Npb24oKTtcclxuICAgICAgICBpdGVtU2hhcmVzLmxpbmtUb01lbnUgPSBgJHt0b3AubG9jYXRpb24ub3JpZ2lufSR7dG9wLmxvY2F0aW9uLnBhdGhuYW1lfWA7XHJcbiAgICAgICAgaXRlbVNoYXJlcy5zb3VyY2VQYXRoID0gYCR7ZW5jb2RlVVJJQ29tcG9uZW50KHRvcC5sb2NhdGlvbi5ocmVmKX1gO1xyXG4gICAgICAgIGl0ZW1TaGFyZXMudGFyZ2V0UGF0aCA9IGAke2VuY29kZVVSSUNvbXBvbmVudChzZXR0aW5nLnRhcmdldFBhdGgpfWA7XHJcbiAgICAgICAgaXRlbVNoYXJlcy5vYmplY3REaXNwbGF5TmFtZSA9IGAke2VuY29kZVVSSUNvbXBvbmVudChzZXR0aW5nLm9iamVjdE5hbWUpfWA7XHJcbiAgICAgICAgbGV0IGRpc3BsYXlGaWVsZCA9ICcnO1xyXG4gICAgICAgIGlmIChzZXR0aW5nLmRpc3BsYXlGaWVsZCkge1xyXG4gICAgICAgICAgICBkaXNwbGF5RmllbGQgPSB0aGlzLl9jb21tb25TZXJ2aWNlLmlzU3RyaW5nKHNldHRpbmcuZGlzcGxheUZpZWxkKSA/IHNldHRpbmcuZGlzcGxheUZpZWxkIDogKHNldHRpbmcuZGlzcGxheUZpZWxkIGFzIGFueSkoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFkaXNwbGF5RmllbGQpIHtcclxuICAgICAgICAgICAgY29uc3QgbGlua0NvbHVtbiA9IHNldHRpbmcuY29scy5maW5kKHggPT4geC5zaG93RWRpdExpbmspO1xyXG4gICAgICAgICAgICBkaXNwbGF5RmllbGQgPSBsaW5rQ29sdW1uPy5maWVsZDtcclxuICAgICAgICAgICAgaWYgKCFkaXNwbGF5RmllbGQpIHtcclxuICAgICAgICAgICAgICAgIGRpc3BsYXlGaWVsZCA9ICdpZCc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaXRlbVNoYXJlcy5kaXNwbGF5RmllbGQgPSBkaXNwbGF5RmllbGQ7XHJcbiAgICAgICAgaXRlbVNoYXJlcy5sc3RJdGVtRGF0YSA9IFtdO1xyXG4gICAgICAgIGNvbnN0IHN0YXRlID0gYXdhaXQgdGhpcy5nZXRMaW5rU3RhdGUocm93RGF0YSk7XHJcbiAgICAgICAgaXRlbVNoYXJlcy5sc3RJdGVtRGF0YS5wdXNoKHtcclxuICAgICAgICAgICAgaXRlbUlkOiByb3dEYXRhLmlkLFxyXG4gICAgICAgICAgICBwZXJtaXNzaW9uLFxyXG4gICAgICAgICAgICBzdGF0ZTogZW5jb2RlVVJJQ29tcG9uZW50KHN0YXRlKVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNvbnN0IGRpY1Blcm1pc3Npb25JZCA9IChhd2FpdCBzZXR0aW5nLmJhc2VTZXJ2aWNlLmdldFNoYXJlZEtleShpdGVtU2hhcmVzKSkuZGF0YTtcclxuICAgICAgICBpZiAoIWRpY1Blcm1pc3Npb25JZCkge1xyXG4gICAgICAgICAgICB0aGlzLl9pbmplY3Rvci5nZXQoTm90aWZpZXJTZXJ2aWNlKS5zaG93V2FybmluZygnQuG6oW4ga2jDtG5nIGPDsyBxdXnhu4FuIGNoaWEgc+G6uyBi4bqjbiBnaGknKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IHBhdGggPSAnJztcclxuICAgICAgICBpdGVtU2hhcmVzLmxzdEl0ZW1EYXRhLmZvckVhY2goaXRlbURhdGEgPT4ge1xyXG4gICAgICAgICAgICBwYXRoICs9IGAke2RpY1Blcm1pc3Npb25JZFtpdGVtRGF0YS5pdGVtSWRdfVxcbmA7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHBhdGg7XHJcbiAgICB9XHJcbiAgICBhc3luYyBnZXRMaW5rU3RhdGUocm93RGF0YTogYW55KSB7XHJcbiAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
|
|
515
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LWJhc2UuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vcHJvamVjdHMvdG54LXNoYXJlZC9zcmMvbGliLyIsInNvdXJjZXMiOlsiY2xhc3Nlcy9iYXNlL2NvbXBvbmVudC1iYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQzFGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ3RGLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDJFQUEyRSxDQUFDO0FBQ3ZILE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUM5RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRzNFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FB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QztZQUMvQyxVQUFVLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztnQkFDeEIsTUFBTSxFQUFFLE9BQU8sQ0FBQyxFQUFFO2dCQUNsQixVQUFVO2dCQUNWLEtBQUssRUFBRSxrQkFBa0IsQ0FBQyxLQUFLLENBQUM7YUFDbkMsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxlQUFlLEdBQUcsQ0FBQyxNQUFNLE9BQU8sQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ2xGLElBQUksQ0FBQyxlQUFlLEVBQUU7Z0JBQ2xCLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO2FBQ3pGO1lBQ0QsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ2QsVUFBVSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUU7Z0JBQ3RDLElBQUksSUFBSSxHQUFHLGVBQWUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztZQUNwRCxDQUFDLENBQUMsQ0FBQztZQUNILE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUM7S0FBQTtJQUNLLFlBQVksQ0FBQyxPQUFZOztZQUMzQixPQUFPLEVBQUUsQ0FBQztRQUNkLENBQUM7S0FBQTs7O1lBdGdCSixTQUFTOzs7WUE5QlUsUUFBUTs7OzswQkFnQ3ZCLEtBQUs7NEJBQ0wsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERhdGVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgRGlyZWN0aXZlLCBJbmplY3RvciwgSW5wdXQsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQXBwbGljYXRpb25Db250ZXh0U2VydmljZSB9IGZyb20gJy4uLy4uL2FwcC1jb250ZXh0L2FwcGxpY2F0aW9uLWNvbnRleHQuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbXBvbmVudENvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vYXBwLWNvbnRleHQvY29tcG9uZW50LWNvbnRleHQuc2VydmljZSc7XHJcbmltcG9ydCB7IE1vZGVsU2hhcmVMaW5rQnlQZXJtaXNzaW9uIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9zaGFyZS1saW5rLWJ5LXBlcm1pc3Npb24vbW9kZWxzL3NoYXJlLWxpbmstYnktcGVybWlzc2lvbic7XHJcbmltcG9ydCB7IFZhbGlkYXRpb24gfSBmcm9tICcuLi8uLi9jb25maWdzL2NvbXBvbmVudC1jb250YW50cyc7XHJcbmltcG9ydCB7IENvbUN0eENvbnN0YW50cyB9IGZyb20gJy4uLy4uL2NvbmZpZ3MvY29tcG9uZW50LWNvbnRleHQuY29uc3RhbnQnO1xyXG5pbXBvcnQgeyBQZXJtaXNzaW9uQmFzZSB9IGZyb20gJy4uLy4uL2VudW1zL2NvbW1vbic7XHJcbmltcG9ydCB7IEV4cG9ydEl0ZW0gfSBmcm9tICcuLi8uLi9tb2RlbHMvZXhwb3J0LWl0ZW0nO1xyXG5pbXBvcnQgeyBGaWx0ZXIsIFNvcnQsIFN0cmluZ0NvbXBhcmVPcHRpb24gfSBmcm9tICcuLi8uLi9tb2RlbHMvZ3JpZC1pbmZvJztcclxuaW1wb3J0IHsgUmVzcG9uc2VSZXN1bHQgfSBmcm9tICcuLi8uLi9tb2RlbHMvcmVzcG9uc2UtcmVzdWx0JztcclxuaW1wb3J0IHsgQmFzZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9iYXNlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb21tb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY29tbW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDcnVkU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NydWQuc2VydmljZSc7XHJcbmltcG9ydCB7IE5vdGlmaWVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL25vdGlmaWVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUZW1wbGF0ZVY0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RlbXBsYXRlLXY0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUZW1wbGF0ZUluc3RhbmNlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RlbXBsYXRlaW5zdGFuY2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IGdldFN0cmluZ0RhdGVWTiB9IGZyb20gJy4uLy4uL3V0aWxzL2RhdGUnO1xyXG5pbXBvcnQgeyBFeHBvcnRJdGVtVHlwZSB9IGZyb20gJy4uL2NvbnN0YW50cyc7XHJcbmltcG9ydCB7XHJcbiAgICBBZGRyZXNzQ29udHJvbFNjaGVtYSwgQXV0b0NvbXBsZXRlUGlja2VyQ29udHJvbFNjaGVtYSxcclxuICAgIENoZWNrYm94Q29udHJvbFNjaGVtYSwgQ29DYXVUb0NodWNDb250cm9sU2NoZW1hLCBDb0NhdVRvQ2h1Y1BpY2tlckNvbnRyb2xTY2hlbWEsXHJcbiAgICBDcnVkTGlzdFNldHRpbmcsXHJcbiAgICBEYXRlVGltZUNvbnRyb2xTY2hlbWEsIERyb3Bkb3duQ29udHJvbFNjaGVtYSwgRmlsZU1hbmFnZXJDb250cm9sU2NoZW1hLCBGaWxlVXBsb2FkQ29udHJvbFNjaGVtYSxcclxuICAgIEZvcm1TY2hlbWFCYXNlLCBNb2RlbFNjaGVtYSwgT3BlcmF0b3IsIFN3aXRjaENvbnRyb2xTY2hlbWEsIFRhYmxlU2NoZW1hXHJcbn0gZnJvbSAnLi4vZm9ybS1zY2hlbWEnO1xyXG5cclxuZXhwb3J0IGNvbnN0IEVYUE9SVF9WRVJTSU9OX1Y0ID0gNDtcclxuZXhwb3J0IGNvbnN0IEVYUE9SVF9WRVJTSU9OX1Y1ID0gNTtcclxuQERpcmVjdGl2ZSgpXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBDb21wb25lbnRCYXNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcclxuICAgIEBJbnB1dCgpIHBhcmVudE1vZGVsOiBhbnk7XHJcbiAgICBASW5wdXQoKSBzZXQgcGFyZW50Q29udGV4dCh2YWx1ZTogQ29tcG9uZW50Q29udGV4dFNlcnZpY2UpIHtcclxuICAgICAgICBpZiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5jb250ZXh0LnBhcmVudCA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBnZXQgcGFyZW50Q29udGV4dCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jb250ZXh0LnBhcmVudDtcclxuICAgIH1cclxuXHJcbiAgICBtb2RlbDogYW55O1xyXG4gICAgbW9kZWxTY2hlbWE6IE1vZGVsU2NoZW1hW10gPSBbXTtcclxuICAgIGNvbnRleHQ6IENvbXBvbmVudENvbnRleHRTZXJ2aWNlO1xyXG4gICAgcm9vdE1vZGVsOiBhbnk7XHJcbiAgICByb290Q29udGV4dDogQ29tcG9uZW50Q29udGV4dFNlcnZpY2U7XHJcbiAgICBndWlkRW1wdHkgPSAnMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwJztcclxuXHJcbiAgICBwdWJsaWMgX3Vuc3Vic2NyaWJlQWxsOiBTdWJqZWN0PGFueT47XHJcbiAgICBwcm90ZWN0ZWQgX2NvbW1vblNlcnZpY2U6IENvbW1vblNlcnZpY2U7XHJcbiAgICBwcm90ZWN0ZWQgX2FwcENvbnRleHQ6IEFwcGxpY2F0aW9uQ29udGV4dFNlcnZpY2U7XHJcbiAgICBwcm90ZWN0ZWQgX2NvbXBvbmVudENvbnRleHQ6IENvbXBvbmVudENvbnRleHRTZXJ2aWNlO1xyXG4gICAgcHJvdGVjdGVkIF9pbmplY3RvcjogSW5qZWN0b3I7XHJcbiAgICBwcm90ZWN0ZWQgX2FjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZTtcclxuICAgIHByb3RlY3RlZCBfY3J1ZFNlcnZpY2U6IENydWRTZXJ2aWNlO1xyXG4gICAgcHJvdGVjdGVkIF9kYXRlUGlwZTogRGF0ZVBpcGU7XHJcblxyXG4gICAgY29uc3RydWN0b3IoaW5qZWN0b3I6IEluamVjdG9yLCBjb21wb25lbnROYW1lPzogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5fdW5zdWJzY3JpYmVBbGwgPSBuZXcgU3ViamVjdCgpO1xyXG4gICAgICAgIHRoaXMuX2luamVjdG9yID0gaW5qZWN0b3I7XHJcbiAgICAgICAgdGhpcy5fYXBwQ29udGV4dCA9IGluamVjdG9yLmdldChBcHBsaWNhdGlvbkNvbnRleHRTZXJ2aWNlKTtcclxuICAgICAgICB0aGlzLl9jb21wb25lbnRDb250ZXh0ID0gaW5qZWN0b3IuZ2V0KENvbXBvbmVudENvbnRleHRTZXJ2aWNlKTtcclxuICAgICAgICB0aGlzLl9hY3RpdmF0ZWRSb3V0ZSA9IGluamVjdG9yLmdldChBY3RpdmF0ZWRSb3V0ZSk7XHJcbiAgICAgICAgdGhpcy5fY3J1ZFNlcnZpY2UgPSBpbmplY3Rvci5nZXQoQ3J1ZFNlcnZpY2UpO1xyXG4gICAgICAgIHRoaXMuX2NvbW1vblNlcnZpY2UgPSBpbmplY3Rvci5nZXQoQ29tbW9uU2VydmljZSk7XHJcbiAgICAgICAgdGhpcy5fZGF0ZVBpcGUgPSBpbmplY3Rvci5nZXQoRGF0ZVBpcGUpO1xyXG5cclxuICAgICAgICB0aGlzLl9jb21wb25lbnRDb250ZXh0ID0gdGhpcy5fYXBwQ29udGV4dC5hZGRDb21wb25lbnRDb250ZXh0KHRoaXMuX2NvbXBvbmVudENvbnRleHQsIHRoaXMuX2FjdGl2YXRlZFJvdXRlLCB0aGlzLmdldENvbXBvbmVudElkKCkpO1xyXG4gICAgICAgIGlmICh0aGlzLl9jb21wb25lbnRDb250ZXh0KSB7XHJcbiAgICAgICAgICAgIHRoaXMubW9kZWwgPSB0aGlzLl9jb21wb25lbnRDb250ZXh0LmRhdGE7XHJcbiAgICAgICAgICAgIHRoaXMuY29udGV4dCA9IHRoaXMuX2NvbXBvbmVudENvbnRleHQ7XHJcbiAgICAgICAgICAgIHRoaXMucm9vdENvbnRleHQgPSB0aGlzLl9jb21wb25lbnRDb250ZXh0LnJvb3Q7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnJvb3RNb2RlbCA9IHRoaXMucm9vdENvbnRleHQuZGF0YTtcclxuICAgICAgICAgICAgdGhpcy5tb2RlbC5jb21wb25lbnRTdWJzID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgKiBPbiBkZXN0cm95XHJcbiAgICAqL1xyXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICAgICAgLy8gVW5zdWJzY3JpYmUgZnJvbSBhbGwgc3Vic2NyaXB0aW9uc1xyXG4gICAgICAgIHRoaXMuX3Vuc3Vic2NyaWJlQWxsLm5leHQoKTtcclxuICAgICAgICB0aGlzLl91bnN1YnNjcmliZUFsbC5jb21wbGV0ZSgpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5tb2RlbC5jb21wb25lbnRTdWJzKSB7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3Qgc3ViIG9mIHRoaXMubW9kZWwuY29tcG9uZW50U3Vicykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHN1YilcclxuICAgICAgICAgICAgICAgICAgICBzdWIudW5zdWJzY3JpYmUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY29udGV4dCkge1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZGVzdHJveUNvbnRleHQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q29tcG9uZW50SWQoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY29tbW9uU2VydmljZS5yYW5kb21TdHJpbmcoKTtcclxuICAgIH1cclxuXHJcbiAgICBzdWJzY3JpYmVSb290KG5hbWU6IHN0cmluZywgY2FsbEJhY2s6IGFueSkge1xyXG4gICAgICAgIHRoaXMubW9kZWwuY29tcG9uZW50U3Vicy5wdXNoKHRoaXMucm9vdENvbnRleHQuc3Vic2NyaWJlKG5hbWUsIGNhbGxCYWNrKSk7XHJcbiAgICB9XHJcblxyXG4gICAgc3Vic2NyaWJlKG5hbWU6IHN0cmluZywgY2FsbEJhY2s6IGFueSkge1xyXG4gICAgICAgIHRoaXMubW9kZWwuY29tcG9uZW50U3Vicy5wdXNoKHRoaXMuY29udGV4dC5zdWJzY3JpYmUobmFtZSwgY2FsbEJhY2spKTtcclxuICAgIH1cclxuXHJcbiAgICBzdWJzY3JpYmVPbmNlKG5hbWU6IHN0cmluZywgY2FsbEJhY2s6IGFueSkge1xyXG4gICAgICAgIHRoaXMubW9kZWwuY29tcG9uZW50U3Vicy5wdXNoKHRoaXMuY29udGV4dC5zdWJzY3JpYmVPbmNlKG5hbWUsIGNhbGxCYWNrKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVwbGF5U3Vic2NyaWJlKG5hbWU6IHN0cmluZywgY2FsbEJhY2s6IGFueSkge1xyXG4gICAgICAgIHRoaXMubW9kZWwuY29tcG9uZW50U3Vicy5wdXNoKHRoaXMuY29udGV4dC5yZXBsYXlTdWJzY3JpYmUobmFtZSwgY2FsbEJhY2spKTtcclxuICAgIH1cclxuXHJcbiAgICB0cmFja0J5RnVuY0RlZmF1bHQoaW5kZXgsIGl0ZW0pIHtcclxuICAgICAgICByZXR1cm4gaW5kZXg7XHJcbiAgICB9XHJcblxyXG4gICAgdHJhY2tCeUZ1bmNJZChpbmRleCwgaXRlbSkge1xyXG4gICAgICAgIHJldHVybiBpdGVtLmlkO1xyXG4gICAgfVxyXG5cclxuICAgIGhhbmRsZVJlc3BvbnNlKHJlczogUmVzcG9uc2VSZXN1bHQsIG1lc3NhZ2U/OiBzdHJpbmcsIGNhbGxCYWNrPzogRnVuY3Rpb24sIGNhbGxCYWNrRXJyb3I/OiBGdW5jdGlvbikge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jcnVkU2VydmljZS5oYW5kbGVSZXNwb25zZShyZXMsIG1lc3NhZ2UsIGNhbGxCYWNrLCBjYWxsQmFja0Vycm9yKTtcclxuICAgIH1cclxuXHJcbiAgICBoYW5kbGVSZXNwb25zZVdpdGhXYWl0Qm94KHJlczogUmVzcG9uc2VSZXN1bHQsIG1lc3NhZ2U/OiBzdHJpbmcsIGNhbGxCYWNrPzogRnVuY3Rpb24sIGNhbGxCYWNrRXJyb3I/OiBGdW5jdGlvbikge1xyXG4gICAgICAgIHRoaXMuaGlkZVdhaXRCb3goKTtcclxuICAgICAgICBpZiAoIXJlcy5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIGlmIChyZXMuZXJyb3IgPT0gVmFsaWRhdGlvbi5FUlJfU1lTX0RFVikge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihyZXMubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9pbmplY3Rvci5nZXQoTm90aWZpZXJTZXJ2aWNlKS5zaG93V2FybmluZygnQ8OzIGzhu5dpIHjhuqN5IHJhLiBMacOqbiBo4buHIHF14bqjbiB0cuG7iyB2acOqbiDEkeG7gyBiaeG6v3QgdGjDqm0gY2hpIHRp4bq/dC4nKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmIChyZXMubWVzc2FnZSAhPSBudWxsICYmIHJlcy5tZXNzYWdlICE9ICcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faW5qZWN0b3IuZ2V0KE5vdGlmaWVyU2VydmljZSkuc2hvd1dhcm5pbmcocmVzLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faW5qZWN0b3IuZ2V0KE5vdGlmaWVyU2VydmljZSkuc2hvd1dhcm5pbmcocmVzLmVycm9yKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoY2FsbEJhY2tFcnJvcilcclxuICAgICAgICAgICAgICAgIGNhbGxCYWNrRXJyb3IocmVzKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobWVzc2FnZSlcclxuICAgICAgICAgICAgdGhpcy5faW5qZWN0b3IuZ2V0KE5vdGlmaWVyU2VydmljZSkuc2hvd1N1Y2Nlc3MobWVzc2FnZSk7XHJcbiAgICAgICAgaWYgKGNhbGxCYWNrKVxyXG4gICAgICAgICAgICBjYWxsQmFjayhyZXMpO1xyXG4gICAgfVxyXG5cclxuICAgIGlzTm90TnVsbEFycmF5KGFycikge1xyXG4gICAgICAgIHJldHVybiBhcnIgIT0gbnVsbCAmJiBhcnIubGVuZ3RoID4gMDtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jU29ydERlZmF1bHQoYSwgYikge1xyXG4gICAgICAgIGlmIChhID4gYilcclxuICAgICAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgICAgaWYgKGEgPT0gYilcclxuICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGFkZEV4cG9ydEpvYihqb2I6IEV4cG9ydEpvYikge1xyXG4gICAgLy8gICAgIHRoaXMuY29udGV4dC5hZGRFeHBvcnRKb2Ioam9iKTtcclxuICAgIC8vIH1cclxuXHJcbiAgICBleHBvcnQoZGF0YTogRXhwb3J0SXRlbSwgdmVyc2lvbiA9IEVYUE9SVF9WRVJTSU9OX1Y0KTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdleHBvcnQgdmVyc2lvbjogJyArIHZlcnNpb24pO1xyXG4gICAgICAgIHN3aXRjaCAodmVyc2lvbikge1xyXG4gICAgICAgICAgICBjYXNlIEVYUE9SVF9WRVJTSU9OX1Y0OlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXhwb3J0VjQoZGF0YSk7XHJcbiAgICAgICAgICAgIGNhc2UgRVhQT1JUX1ZFUlNJT05fVjU6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5leHBvcnRWNShkYXRhKTtcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEV4cG9ydCB2ZXJzaW9uOiAke3ZlcnNpb259IGlzIG5vdCBzdXBwb3J0ZWQhYCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGV4cG9ydEV4Y2VsVjUoZGF0YTogYW55LCB0ZW1wbGF0ZUNvZGU6IHN0cmluZywgZmlsZU5hbWU6IHN0cmluZyk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcclxuICAgICAgICBjb25zdCBzaGVldCA9IG5ldyBFeHBvcnRJdGVtKHtcclxuICAgICAgICAgICAgdHlwZTogRXhwb3J0SXRlbVR5cGUuRXhjZWxTaGVldCxcclxuICAgICAgICAgICAgdGVtcGxhdGVDb2RlLFxyXG4gICAgICAgICAgICBkYXRhOiBKU09OLnN0cmluZ2lmeShkYXRhKSxcclxuICAgICAgICAgICAgbmFtZTogJ1NoZWV0MSdcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgY29uc3QgZmlsZSA9IG5ldyBFeHBvcnRJdGVtKHtcclxuICAgICAgICAgICAgdHlwZTogRXhwb3J0SXRlbVR5cGUuRXhjZWxGaWxlLFxyXG4gICAgICAgICAgICBuYW1lOiBmaWxlTmFtZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGZpbGUuY2hpbGRyZW4gPSBbc2hlZXRdO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmV4cG9ydChmaWxlLCBFWFBPUlRfVkVSU0lPTl9WNSk7XHJcbiAgICB9XHJcblxyXG4gICAgZXhwb3J0VjQoZGF0YTogRXhwb3J0SXRlbSk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcclxuICAgICAgICBjb25zdCB0ZW1wbGF0ZVY0U2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChUZW1wbGF0ZVY0U2VydmljZSk7XHJcbiAgICAgICAgcmV0dXJuIHRlbXBsYXRlVjRTZXJ2aWNlLmV4cG9ydE5vcm1hbChkYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBleHBvcnRWNShkYXRhOiBFeHBvcnRJdGVtKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xyXG4gICAgICAgIGNvbnN0IHRlbXBsYXRlSW5zdGFuY2VTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KFRlbXBsYXRlSW5zdGFuY2VTZXJ2aWNlKTtcclxuICAgICAgICByZXR1cm4gdGVtcGxhdGVJbnN0YW5jZVNlcnZpY2UuZXhwb3J0Tm9ybWFsKGRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIG5ld0ZpbHRlckNvbnRhaW5lcihsb2dpYzogJ2FuZCcgfCAnb3InLCAuLi5maWx0ZXJzOiBGaWx0ZXJbXSkge1xyXG4gICAgICAgIHJldHVybiBuZXcgRmlsdGVyKHtcclxuICAgICAgICAgICAgbG9naWMsXHJcbiAgICAgICAgICAgIGZpbHRlcnM6IFsuLi5maWx0ZXJzXVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG5ld0ZpbHRlcihmaWVsZDogc3RyaW5nLCBvcGVyYXRvcjogT3BlcmF0b3IsIHZhbHVlOiBhbnksIHZhbHVlSXNGaWVsZDogYm9vbGVhbiA9IGZhbHNlLCBzdHJpbmdDb21wYXJlT3B0aW9uOiBTdHJpbmdDb21wYXJlT3B0aW9uID0gU3RyaW5nQ29tcGFyZU9wdGlvbi5Ob3JtYWwpIHtcclxuICAgICAgICByZXR1cm4gbmV3IEZpbHRlcih7XHJcbiAgICAgICAgICAgIGZpZWxkLCBvcGVyYXRvcixcclxuICAgICAgICAgICAgdmFsdWU6IEpTT04uc3RyaW5naWZ5KHZhbHVlKSxcclxuICAgICAgICAgICAgdmFsdWVJc0ZpZWxkLFxyXG4gICAgICAgICAgICBzdHJpbmdDb21wYXJlT3B0aW9uLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG5ld0ZpbHRlclY0KGZpZWxkOiBzdHJpbmcsIG9wZXJhdG9yOiBPcGVyYXRvciwgdmFsdWU6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiBuZXcgRmlsdGVyKHtcclxuICAgICAgICAgICAgZmllbGQsIG9wZXJhdG9yLFxyXG4gICAgICAgICAgICB2YWx1ZVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG5ld0JpbmRpbmdGaWx0ZXIoY29sdW1uOiBzdHJpbmcsIG9wZXJhdG9yOiBPcGVyYXRvciwgc291cmNlRmllbGQ6IHN0cmluZywgc3ViRmllbGQ/OiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gbmV3IEZpbHRlcih7XHJcbiAgICAgICAgICAgIGZpZWxkOiBjb2x1bW4sXHJcbiAgICAgICAgICAgIG9wZXJhdG9yLFxyXG4gICAgICAgICAgICBzb3VyY2VGaWVsZCxcclxuICAgICAgICAgICAgc3ViRmllbGRcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBuZXdTb3J0KGZpZWxkOiBzdHJpbmcsIGRpcjogMSB8IC0xID0gMSkge1xyXG4gICAgICAgIHJldHVybiBuZXcgU29ydCh7IGZpZWxkLCBkaXIgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2hvd1dhaXRCb3gobWVzc2FnZT86IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMucm9vdENvbnRleHQuZmlyZUV2ZW50KENvbUN0eENvbnN0YW50cy5ST09ULlNIT1dfV0FJVF9CT1gsIHtcclxuICAgICAgICAgICAgc2hvdzogdHJ1ZSxcclxuICAgICAgICAgICAgbWVzc2FnZVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGhpZGVXYWl0Qm94KCkge1xyXG4gICAgICAgIHRoaXMucm9vdENvbnRleHQuZmlyZUV2ZW50KENvbUN0eENvbnN0YW50cy5ST09ULlNIT1dfV0FJVF9CT1gsIHtcclxuICAgICAgICAgICAgc2hvdzogZmFsc2VcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBjb3B5VG9DbGlwYm9hcmQgPSBzdHIgPT4ge1xyXG4gICAgICAgIGNvbnN0IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGV4dGFyZWEnKTtcclxuICAgICAgICBlbC52YWx1ZSA9IHN0cjtcclxuICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoJ3JlYWRvbmx5JywgJycpO1xyXG4gICAgICAgIGVsLnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcclxuICAgICAgICBlbC5zdHlsZS5sZWZ0ID0gJy05OTk5cHgnO1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZWwpO1xyXG4gICAgICAgIGVsLnNlbGVjdCgpO1xyXG4gICAgICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdjb3B5Jyk7XHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChlbCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX3ByaW50UGRmKGJhc2VTZXJ2aWNlOiBCYXNlU2VydmljZSwgaWQ6IHN0cmluZywgcm93RGF0YTogYW55KSB7XHJcbiAgICAgICAgY29uc3QgaXRlbURldGFpbCA9IChhd2FpdCBiYXNlU2VydmljZS5nZXREZXRhaWwoaWQpKS5kYXRhO1xyXG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBiYXNlU2VydmljZS5nZXREYXRhVHJpbmhLeShpdGVtRGV0YWlsLCByb3dEYXRhKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcHJpbnRQZGZCYXNlKGJhc2VTZXJ2aWNlLCBpZCwgZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX3ByaW50UGRmQnlTY2hlbWEoYmFzZVNlcnZpY2U6IEJhc2VTZXJ2aWNlLCBtb2RlbDogYW55LCBzY2hlbWFzOiBGb3JtU2NoZW1hQmFzZVtdKSB7XHJcbiAgICAgICAgY29uc3QgdG1wTW9kZWwgPSB7IC4uLm1vZGVsIH07XHJcbiAgICAgICAgZGVsZXRlIHRtcE1vZGVsLnByaW50RmlsZUlkO1xyXG4gICAgICAgIGNvbnN0IGRhdGEgPSBbXTtcclxuICAgICAgICBhd2FpdCB0aGlzLl9nZXRLZXlWYWx1ZShkYXRhLCAnJywgc2NoZW1hcywgdG1wTW9kZWwpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wcmludFBkZkJhc2UoYmFzZVNlcnZpY2UsIG1vZGVsLmlkLCBkYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFzeW5jIF9wcmludFBkZkJhc2UoYmFzZVNlcnZpY2U6IEJhc2VTZXJ2aWNlLCBpZDogc3RyaW5nLCBkYXRhOiBhbnlbXSkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHJldHVybiBiYXNlU2VydmljZS5leHBvcnRUb1BkZihpZCwgSlNPTi5zdHJpbmdpZnkoe1xyXG4gICAgICAgICAgICAgICAgdGlldURlOiBiYXNlU2VydmljZS5vYmplY3ROYW1lLFxyXG4gICAgICAgICAgICAgICAgZGF0YVxyXG4gICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xyXG4gICAgICAgICAgICByZXR1cm4gPFJlc3BvbnNlUmVzdWx0PntcclxuICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ0PDsyBs4buXaSB44bqjeSByYSdcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldExhYmVsKHByZWZpeDogc3RyaW5nLCBsYWJlbDogc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIGAke3ByZWZpeH0ke2xhYmVsfWA7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfZ2V0VmFsdWVGcm9tRGF0YXNvdXJjZShpdGVtU2VsZWN0ZWQ6IGFueSwgaXNNdWx0aXBsZTogYm9vbGVhbiwgZnVuY0dldExhYmVsOiAoaXRlbSkgPT4gc3RyaW5nKSB7XHJcbiAgICAgICAgbGV0IHZhbHVlID0gbnVsbDtcclxuICAgICAgICBpZiAoaXNNdWx0aXBsZSkge1xyXG4gICAgICAgICAgICBpZiAoaXRlbVNlbGVjdGVkICYmIGl0ZW1TZWxlY3RlZC5sZW5ndGggPiAwKVxyXG4gICAgICAgICAgICAgICAgdmFsdWUgPSBpdGVtU2VsZWN0ZWQubWFwKHEgPT4gZnVuY0dldExhYmVsKHEudmFsdWUpKS5qb2luKCcsICcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKGl0ZW1TZWxlY3RlZCkge1xyXG4gICAgICAgICAgICAgICAgdmFsdWUgPSBmdW5jR2V0TGFiZWwoaXRlbVNlbGVjdGVkLnZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX2dldEtleVZhbHVlKHJlc3VsdDogYW55W10sIHByZWZpeDogc3RyaW5nLCBzY2hlbWFzOiBGb3JtU2NoZW1hQmFzZVtdLCBtb2RlbDogYW55KSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBzY2hlbWEgb2Ygc2NoZW1hcykge1xyXG4gICAgICAgICAgICBpZiAoIXNjaGVtYS5oaWRkZW5cclxuICAgICAgICAgICAgICAgICYmIHNjaGVtYS5maWVsZCAhPSAncHJpbnRGaWxlSWQnXHJcbiAgICAgICAgICAgICAgICAmJiBzY2hlbWEubGFiZWxcclxuICAgICAgICAgICAgICAgICYmICEoc2NoZW1hIGluc3RhbmNlb2YgRmlsZVVwbG9hZENvbnRyb2xTY2hlbWEpXHJcbiAgICAgICAgICAgICAgICAmJiAhKHNjaGVtYSBpbnN0YW5jZW9mIEZpbGVNYW5hZ2VyQ29udHJvbFNjaGVtYSlcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBtb2RlbFtzY2hlbWEuZmllbGRdO1xyXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlID09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLmdldExhYmVsKHByZWZpeCwgc2NoZW1hLmxhYmVsKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNjaGVtYSBpbnN0YW5jZW9mIFRhYmxlU2NoZW1hKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdG1wU2NoZW1hID0gPFRhYmxlU2NoZW1hPnNjaGVtYTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gbnVsbClcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLmdldExhYmVsKHByZWZpeCwgc2NoZW1hLmxhYmVsKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG51bGxcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHJvd0RhdGEgb2YgdmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX2dldEtleVZhbHVlKHJlc3VsdCwgYCR7cHJlZml4fVxcdGAsIHRtcFNjaGVtYS5yb3dUZW1wbGF0ZSwgcm93RGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICcnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuc3BsaWNlKHJlc3VsdC5sZW5ndGggLSAxLCAxKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChzY2hlbWEgaW5zdGFuY2VvZiBBZGRyZXNzQ29udHJvbFNjaGVtYSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRtcFNjaGVtYSA9IDxBZGRyZXNzQ29udHJvbFNjaGVtYT5zY2hlbWE7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy5nZXRMYWJlbChwcmVmaXgsIHNjaGVtYS5sYWJlbCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fZ2V0S2V5VmFsdWUocmVzdWx0LCBgJHtwcmVmaXh9XFx0YCwgdG1wU2NoZW1hLl9jb21wb25lbnQuc2V0dGluZy5zY2hlbWEsIHZhbHVlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzY2hlbWEgaW5zdGFuY2VvZiBEYXRlVGltZUNvbnRyb2xTY2hlbWEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBuZXcgRGF0ZSh2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBnZXRTdHJpbmdEYXRlVk4odmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChzY2hlbWEgaW5zdGFuY2VvZiBDb0NhdVRvQ2h1Y1BpY2tlckNvbnRyb2xTY2hlbWEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbVNlbGVjdGVkID0gYXdhaXQgc2NoZW1hLl9jb21wb25lbnQuY29udHJvbFBpY2tlci5fY29tcG9uZW50LmdldERhdGFTZWxlY3RlZFZhbHVlKHZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdG1wU2NoZW1hID0gPENvQ2F1VG9DaHVjUGlja2VyQ29udHJvbFNjaGVtYT5zY2hlbWE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBmdW5jR2V0TGFiZWwgPSB0bXBTY2hlbWEuZnVuY0dldExhYmVsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWZ1bmNHZXRMYWJlbClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmNHZXRMYWJlbCA9IGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLnZhbHVlW3RtcFNjaGVtYS5kaXNwbGF5RmllbGRdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB0aGlzLl9nZXRWYWx1ZUZyb21EYXRhc291cmNlKGl0ZW1TZWxlY3RlZCwgc2NoZW1hLm11bHRpcGxlLCBpdGVtID0+IGl0ZW0udGVuKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzY2hlbWEubXVsdGlwbGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtU2VsZWN0ZWQubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzY2hlbWEuZnVuY0dldExhYmVsKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGl0ZW1TZWxlY3RlZC5tYXAocSA9PiB0bXBTY2hlbWEuZnVuY0dldExhYmVsKHEudmFsdWUpKS5qb2luKCcsICcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBpdGVtU2VsZWN0ZWQubWFwKHEgPT4gcS52YWx1ZVt0bXBTY2hlbWEuZGlzcGxheUZpZWxkXSkuam9pbignLCAnKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbVNlbGVjdGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjaGVtYS5mdW5jR2V0TGFiZWwpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gc2NoZW1hLmZ1bmNHZXRMYWJlbChpdGVtU2VsZWN0ZWQudmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBpdGVtU2VsZWN0ZWQudmFsdWVbc2NoZW1hLmRpc3BsYXlGaWVsZF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoc2NoZW1hIGluc3RhbmNlb2YgQXV0b0NvbXBsZXRlUGlja2VyQ29udHJvbFNjaGVtYSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtU2VsZWN0ZWQgPSBhd2FpdCBzY2hlbWEuX2NvbXBvbmVudC5nZXREYXRhU2VsZWN0ZWRWYWx1ZSh2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRtcFNjaGVtYSA9IDxBdXRvQ29tcGxldGVQaWNrZXJDb250cm9sU2NoZW1hPnNjaGVtYTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGZ1bmNHZXRMYWJlbCA9IHRtcFNjaGVtYS5mdW5jR2V0TGFiZWw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZnVuY0dldExhYmVsKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY0dldExhYmVsID0gaXRlbSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW1bdG1wU2NoZW1hLmRpc3BsYXlGaWVsZF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHRoaXMuX2dldFZhbHVlRnJvbURhdGFzb3VyY2UoaXRlbVNlbGVjdGVkLCBzY2hlbWEubXVsdGlwbGUsIGZ1bmNHZXRMYWJlbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNjaGVtYSBpbnN0YW5jZW9mIENvQ2F1VG9DaHVjQ29udHJvbFNjaGVtYSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0bXBTY2hlbWEgPSA8Q29DYXVUb0NodWNDb250cm9sU2NoZW1hPnNjaGVtYTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZnVuY0dldExhYmVsID0gaXRlbSA9PiBpdGVtLmxhYmVsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZGF0YVNvdXJjZSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpdGVtU2VsZWN0ZWQgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodG1wU2NoZW1hLl9jb21wb25lbnQubXVsdGlTZWxlY3QpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFTb3VyY2UgPSB0bXBTY2hlbWEuX2NvbXBvbmVudC5tdWx0aVNlbGVjdC5fb3B0aW9ucztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1TZWxlY3RlZCA9IGRhdGFTb3VyY2UuZmlsdGVyKHEgPT4gdmFsdWUuaW5kZXhPZih4ID0+IHggPT0gcS52YWx1ZSkpLm1hcChxID0+ICh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHFcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFTb3VyY2UgPSB0bXBTY2hlbWEuX2NvbXBvbmVudC5kcm9wZG93bi5fb3B0aW9ucztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1TZWxlY3RlZCA9IGRhdGFTb3VyY2UuZmluZChxID0+IHEudmFsdWUgPT0gdmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW1TZWxlY3RlZClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtU2VsZWN0ZWQgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBpdGVtU2VsZWN0ZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB0aGlzLl9nZXRWYWx1ZUZyb21EYXRhc291cmNlKGl0ZW1TZWxlY3RlZCwgc2NoZW1hLm11bHRpcGxlLCBmdW5jR2V0TGFiZWwpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChzY2hlbWEgaW5zdGFuY2VvZiBEcm9wZG93bkNvbnRyb2xTY2hlbWEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdG1wU2NoZW1hID0gPERyb3Bkb3duQ29udHJvbFNjaGVtYT5zY2hlbWE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpdGVtU2VsZWN0ZWQgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2NoZW1hLm11bHRpcGxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtU2VsZWN0ZWQgPSBzY2hlbWEuX2NvbXBvbmVudC5kYXRhU291cmNlSW50ZXJuYWwuZmlsdGVyKHEgPT4gdmFsdWUuaW5kZXhPZih4ID0+IHggPT0gcS52YWx1ZVtxLnZhbHVlLl9kcm9wZG93bnZhbHVlXSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbVNlbGVjdGVkID0gc2NoZW1hLl9jb21wb25lbnQuZGF0YVNvdXJjZUludGVybmFsLmZpbmQocSA9PiBxLnZhbHVlW3EudmFsdWUuX2Ryb3Bkb3dudmFsdWVdID09IHZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHRoaXMuX2dldFZhbHVlRnJvbURhdGFzb3VyY2UoaXRlbVNlbGVjdGVkLCBzY2hlbWEubXVsdGlwbGUsIHRtcFNjaGVtYS5mdW5jR2V0TGFiZWwpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChzY2hlbWEgaW5zdGFuY2VvZiBDaGVja2JveENvbnRyb2xTY2hlbWEgfHwgc2NoZW1hIGluc3RhbmNlb2YgU3dpdGNoQ29udHJvbFNjaGVtYSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXZhbHVlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSAnS2jDtG5nJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSAnQ8OzJztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gVmFsdWUgPSB1bmRlZmluZWQgdGjDrCBraGkgc2VyaWFsaXplIHPhur0gYuG7iyBt4bqldCBwcm9wXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLmdldExhYmVsKHByZWZpeCwgc2NoZW1hLmxhYmVsKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIGdldFN0cmluZ0RhdGUodmFsdWUpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmICghdmFsdWUpIHJldHVybiAnJztcclxuICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9kYXRlUGlwZS50cmFuc2Zvcm0odmFsdWUsICdkZC9NTS95eXl5Jyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh2YWx1ZSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGVQaXBlLnRyYW5zZm9ybShkYXRlLCAnZGQvTU0veXl5eScpO1xyXG4gICAgfVxyXG4gICAgLy8gaHR0cDovL2xvY2FsaG9zdDoyNzIzMC91bml2ZXJzYWwtbGluaz9zZXJ2aWNlQ29kZT1jb25ndmllYyZlbnRpdHk9RE1fUHJpb3JpdHkmZW50aXR5S2V5PTA5MTFmM2U3LTNkYjAtNGI2OC04N2NkLTA3ZDQyNTc0MWU5ZSZzdGF0ZT0mc291cmNlUGF0aD1odHRwOi8vbG9jYWxob3N0OjI3MjMwL2RtLXByaW9yaXR5XHJcbiAgICBwYXJzZUF0dGFjaExpbmsoY29udGVudCkge1xyXG4gICAgICAgIGNvbnN0IGxpbmtzID0gY29udGVudC5zcGxpdCgnXFxyXFxuJyk7XHJcbiAgICAgICAgY29uc3Qgb3AgPSBbXTtcclxuICAgICAgICBmb3IgKGNvbnN0IGxpbmsgb2YgbGlua3MpIHtcclxuICAgICAgICAgICAgY29uc3QgYXJyID0gbGluay5zcGxpdCgnPycpO1xyXG4gICAgICAgICAgICBpZiAoYXJyLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHRlbXAgPSBhcnJbMV07XHJcbiAgICAgICAgICAgICAgICBjb25zdCBxdWVyeSA9IHRoaXMucGFyc2VRdWVyeVN0cmluZyh0ZW1wKTtcclxuICAgICAgICAgICAgICAgIGlmIChxdWVyeSAmJiBxdWVyeS5zZXJ2aWNlQ29kZSAmJiBxdWVyeS5lbnRpdHkgJiYgcXVlcnkuZW50aXR5S2V5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcXVlcnkucmF3TGluayA9IGxpbms7XHJcbiAgICAgICAgICAgICAgICAgICAgb3AucHVzaChxdWVyeSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYGxpbmsgJHtsaW5rfSBpbnZhbGlkIHRvIHBhcnNlYCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG9wO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBwYXJzZVF1ZXJ5U3RyaW5nKHF1ZXJ5OiBzdHJpbmcpOiBhbnkge1xyXG4gICAgICAgIGlmICghcXVlcnkpIHJldHVybiBudWxsO1xyXG4gICAgICAgIGlmIChxdWVyeS5zdGFydHNXaXRoKCc/JykpIHF1ZXJ5ID0gcXVlcnkuc3Vic3RyaW5nKDEpO1xyXG4gICAgICAgIGNvbnN0IGFyciA9IHF1ZXJ5LnNwbGl0KCcmJyk7XHJcbiAgICAgICAgY29uc3Qgb2JqID0ge307XHJcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGFycikge1xyXG4gICAgICAgICAgICBjb25zdCB0ZW1wID0gaXRlbS5zcGxpdCgnPScpO1xyXG4gICAgICAgICAgICBpZiAodGVtcFsxXSkge1xyXG4gICAgICAgICAgICAgICAgb2JqW3RlbXBbMF1dID0gZGVjb2RlVVJJQ29tcG9uZW50KHRlbXBbMV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgb2JqW3RlbXBbMF1dID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gb2JqO1xyXG4gICAgfVxyXG4gICAgYXN5bmMgZ2V0Q29weVBhdGgoc2V0dGluZzogQ3J1ZExpc3RTZXR0aW5nLCByb3dEYXRhOiBhbnksIHBlcm1pc3Npb246IFBlcm1pc3Npb25CYXNlID0gUGVybWlzc2lvbkJhc2UuUkVBRCkge1xyXG4gICAgICAgIGNvbnN0IGl0ZW1TaGFyZXM6IE1vZGVsU2hhcmVMaW5rQnlQZXJtaXNzaW9uID0gbmV3IE1vZGVsU2hhcmVMaW5rQnlQZXJtaXNzaW9uKCk7XHJcbiAgICAgICAgaXRlbVNoYXJlcy5saW5rVG9NZW51ID0gYCR7dG9wLmxvY2F0aW9uLm9yaWdpbn0ke3RvcC5sb2NhdGlvbi5wYXRobmFtZX1gO1xyXG4gICAgICAgIGl0ZW1TaGFyZXMuc291cmNlUGF0aCA9IGAke2VuY29kZVVSSUNvbXBvbmVudCh0b3AubG9jYXRpb24uaHJlZil9YDtcclxuICAgICAgICBpdGVtU2hhcmVzLnRhcmdldFBhdGggPSBgJHtlbmNvZGVVUklDb21wb25lbnQoc2V0dGluZy50YXJnZXRQYXRoKX1gO1xyXG4gICAgICAgIGl0ZW1TaGFyZXMub2JqZWN0RGlzcGxheU5hbWUgPSBgJHtlbmNvZGVVUklDb21wb25lbnQoc2V0dGluZy5vYmplY3ROYW1lKX1gO1xyXG4gICAgICAgIGxldCBkaXNwbGF5RmllbGQgPSAnJztcclxuICAgICAgICBpZiAoc2V0dGluZy5kaXNwbGF5RmllbGQpIHtcclxuICAgICAgICAgICAgZGlzcGxheUZpZWxkID0gdGhpcy5fY29tbW9uU2VydmljZS5pc1N0cmluZyhzZXR0aW5nLmRpc3BsYXlGaWVsZCkgPyBzZXR0aW5nLmRpc3BsYXlGaWVsZCA6IChzZXR0aW5nLmRpc3BsYXlGaWVsZCBhcyBhbnkpKHJvd0RhdGEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWRpc3BsYXlGaWVsZCkge1xyXG4gICAgICAgICAgICBjb25zdCBsaW5rQ29sdW1uID0gc2V0dGluZy5jb2xzLmZpbmQoeCA9PiB4LnNob3dFZGl0TGluayk7XHJcbiAgICAgICAgICAgIGRpc3BsYXlGaWVsZCA9IGxpbmtDb2x1bW4/LmZpZWxkO1xyXG4gICAgICAgICAgICBpZiAoIWRpc3BsYXlGaWVsZCkge1xyXG4gICAgICAgICAgICAgICAgZGlzcGxheUZpZWxkID0gJ2lkJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpdGVtU2hhcmVzLmRpc3BsYXlGaWVsZCA9IGRpc3BsYXlGaWVsZDtcclxuICAgICAgICBpdGVtU2hhcmVzLmxzdEl0ZW1EYXRhID0gW107XHJcbiAgICAgICAgY29uc3Qgc3RhdGUgPSBhd2FpdCB0aGlzLmdldExpbmtTdGF0ZShyb3dEYXRhKTtcclxuICAgICAgICBpdGVtU2hhcmVzLmxzdEl0ZW1EYXRhLnB1c2goe1xyXG4gICAgICAgICAgICBpdGVtSWQ6IHJvd0RhdGEuaWQsXHJcbiAgICAgICAgICAgIHBlcm1pc3Npb24sXHJcbiAgICAgICAgICAgIHN0YXRlOiBlbmNvZGVVUklDb21wb25lbnQoc3RhdGUpXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY29uc3QgZGljUGVybWlzc2lvbklkID0gKGF3YWl0IHNldHRpbmcuYmFzZVNlcnZpY2UuZ2V0U2hhcmVkS2V5KGl0ZW1TaGFyZXMpKS5kYXRhO1xyXG4gICAgICAgIGlmICghZGljUGVybWlzc2lvbklkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2luamVjdG9yLmdldChOb3RpZmllclNlcnZpY2UpLnNob3dXYXJuaW5nKCdC4bqhbiBraMO0bmcgY8OzIHF1eeG7gW4gY2hpYSBz4bq7IGLhuqNuIGdoaScpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgcGF0aCA9ICcnO1xyXG4gICAgICAgIGl0ZW1TaGFyZXMubHN0SXRlbURhdGEuZm9yRWFjaChpdGVtRGF0YSA9PiB7XHJcbiAgICAgICAgICAgIHBhdGggKz0gYCR7ZGljUGVybWlzc2lvbklkW2l0ZW1EYXRhLml0ZW1JZF19XFxuYDtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gcGF0aDtcclxuICAgIH1cclxuICAgIGFzeW5jIGdldExpbmtTdGF0ZShyb3dEYXRhOiBhbnkpIHtcclxuICAgICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcbn1cclxuIl19
|