tnx-shared 5.3.318 → 5.3.320
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 +66 -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/classes/base/list-base.d.ts +4 -0
- package/classes/base/list-base.d.ts.map +1 -1
- package/esm2015/classes/base/data-form-base.js +2 -2
- package/esm2015/classes/base/list-base.js +40 -4
- package/esm2015/services/common.service.js +10 -1
- package/fesm2015/tnx-shared.js +47 -2
- package/fesm2015/tnx-shared.js.map +1 -1
- package/package.json +2 -2
- package/services/common.service.d.ts +1 -0
- package/services/common.service.d.ts.map +1 -1
- package/tnx-shared.metadata.json +1 -1
|
@@ -63,6 +63,7 @@ export declare abstract class ListBase<T extends IListComponent> extends Compone
|
|
|
63
63
|
* @type {string[]}
|
|
64
64
|
*/
|
|
65
65
|
additionalFields: string[];
|
|
66
|
+
constWidthCol: any;
|
|
66
67
|
protected _notifierService: NotifierService;
|
|
67
68
|
protected _customRouterService: CustomRouterService;
|
|
68
69
|
protected _listHelperService: ListHelperService;
|
|
@@ -159,5 +160,8 @@ export declare abstract class ListBase<T extends IListComponent> extends Compone
|
|
|
159
160
|
deepClone(data: any): any;
|
|
160
161
|
_exportAllData(event: any): Promise<void>;
|
|
161
162
|
beforeExportAllData(dataSource: any, lstVisibleField: any): Promise<void>;
|
|
163
|
+
_exportAllDataWithTemplateCode(templateCode: string, isViewOnline?: boolean): Promise<ResponseResult>;
|
|
164
|
+
modifyDataForExportAll(data: any): Promise<void>;
|
|
165
|
+
modifyRowDataForExport(rowData: any): any;
|
|
162
166
|
}
|
|
163
167
|
//# sourceMappingURL=list-base.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-base.d.ts","sourceRoot":"","sources":["../../../../projects/tnx-shared/src/lib/classes/base/list-base.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAa,QAAQ,EAAS,SAAS,EAAsC,MAAM,eAAe,CAAC;AAC7H,OAAO,EAAkB,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD,OAAO,EAAE,eAAe,EAAE,MAAM,4DAA4D,CAAC;AAG7F,OAAO,EAAE,uBAAuB,EAAE,MAAM,0EAA0E,CAAC;AAEnH,OAAO,EAAU,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,
|
|
1
|
+
{"version":3,"file":"list-base.d.ts","sourceRoot":"","sources":["../../../../projects/tnx-shared/src/lib/classes/base/list-base.ts"],"names":[],"mappings":"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"}
|
|
@@ -595,7 +595,7 @@ export class DataFormBase extends ComponentBaseWithButton {
|
|
|
595
595
|
valueBefore: valueBefore,
|
|
596
596
|
valueAfter: valueAfter,
|
|
597
597
|
enumLogType: (control instanceof EditorControlSchema || control instanceof TextAreaControlSchema)
|
|
598
|
-
? EnumLogType.
|
|
598
|
+
? EnumLogType.Html
|
|
599
599
|
: EnumLogType.Normal
|
|
600
600
|
}));
|
|
601
601
|
}
|
|
@@ -922,4 +922,4 @@ DataFormBase.propDecorators = {
|
|
|
922
922
|
onFormReady: [{ type: Output }],
|
|
923
923
|
onDataBinded: [{ type: Output }]
|
|
924
924
|
};
|
|
925
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1mb3JtLWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90bngtc2hhcmVkL3NyYy9saWIvY2xhc3Nlcy9iYXNlL2RhdGEtZm9ybS1iYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBRUgsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osUUFBUSxFQUNSLEtBQUssRUFHTCxNQUFNLEVBQ04sU0FBUyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzFELE9BQU8sRUFBbUIsaUJBQWlCLEVBQUUsTUFBTSxxREFBcUQsQ0FBQztBQUN6RyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUMzRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGlCQUFpQixFQUFFLDRCQUE0QixFQUFFLDJCQUEyQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbEgsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUVoRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzFELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUs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VCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxhQUFhO1FBQ1QsT0FBTyxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksU0FBUyxDQUFDLEdBQUcsQ0FBQztJQUNqRCxDQUFDO0lBRUQsV0FBVztRQUNQLE9BQU8sSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUM7SUFDbEQsQ0FBQztJQUVELFdBQVc7UUFDUCxPQUFPLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDO0lBQ2xELENBQUM7OztZQW44QkosU0FBUzs7O1lBMUROLFFBQVE7Ozt1QkE2RFAsU0FBUyxTQUFDLGlCQUFpQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTswQkFDOUMsU0FBUyxTQUFDLGFBQWEsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7c0JBQ3pDLFNBQVMsU0FBQyxTQUFTLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFOzRCQUVyQyxLQUFLO29CQUNMLEtBQUs7NEJBQ0wsS0FBSztxQkFFTCxNQUFNO3NCQUNOLE1BQU07dUJBQ04sTUFBTTt3QkFDTixNQUFNOzBCQUNOLE1BQU07MkJBQ04sTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBEaXJlY3RpdmUsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSW5qZWN0b3IsXG4gICAgSW5wdXQsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXQsXG4gICAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBGaWxlVXBsb2FkIH0gZnJvbSAndG4tY3VzdG9tLXByaW1lbmcvZmlsZXVwbG9hZCc7XG5pbXBvcnQgeyBDb250cm9sVHJlZU5vZGUsIENydWRGb3JtQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9jcnVkL2NydWQtZm9ybS9jcnVkLWZvcm0uY29tcG9uZW50JztcbmltcG9ydCB7IENPTkZJR19DQUxFTkRBUl9WSUVUTkFNRVNFIH0gZnJvbSAnLi4vLi4vY29uZmlncy9jYWxlbmRhci5jb25maWcnO1xuaW1wb3J0IHsgQ29tQ3R4Q29uc3RhbnRzIH0gZnJvbSAnLi4vLi4vY29uZmlncy9jb21wb25lbnQtY29udGV4dC5jb25zdGFudCc7XG5pbXBvcnQgeyBEYXRhU291cmNlQm9vbGVhbiwgRmllbGREZWZpbmVJc1Rhc2tGb3JtQ29udHJvbCwgRmllbGRXb3JrZmxvd0NvZGVJbkNydWRGb3JtIH0gZnJvbSAnLi4vLi4vY29uc3QvY29tbW9uJztcbmltcG9ydCB7IFBlcm1pc3Npb25CYXNlIH0gZnJvbSAnLi4vLi4vZW51bXMvY29tbW9uJztcbmltcG9ydCB7IEZpbHRlciB9IGZyb20gJy4uLy4uL21vZGVscy9ncmlkLWluZm8nO1xuaW1wb3J0IHsgUmVzcG9uc2VSZXN1bHQgfSBmcm9tICcuLi8uLi9tb2RlbHMvcmVzcG9uc2UtcmVzdWx0JztcbmltcG9ydCB7IENvbW1vblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb21tb24uc2VydmljZSc7XG5pbXBvcnQgeyBDcnVkU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NydWQuc2VydmljZSc7XG5pbXBvcnQgeyBDdXN0b21Sb3V0ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY3VzdG9tLXJvdXRlci5zZXJ2aWNlJztcbmltcG9ydCB7IERvbVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kb20uc2VydmljZSc7XG5pbXBvcnQgeyBFbnRpdHlNZXRhZGF0YVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9lbnRpdHktbWV0YWRhdGEuc2VydmljZSc7XG5pbXBvcnQgeyBNYXN0ZXJEYXRhU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL21hc3Rlci1kYXRhLnNlcnZpY2UnO1xuaW1wb3J0IHsgTW9kdWxlQ29uZmlnU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL21vZHVsZS1jb25maWcuc2VydmljZSc7XG5pbXBvcnQgeyBOb3RpZmllclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9ub3RpZmllci5zZXJ2aWNlJztcbmltcG9ydCB7IFVzZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdXNlci5zZXJ2aWNlJztcbmltcG9ydCB7IEZvcm1TdGF0ZSwgS2V5Rmxhc2hTaG93IH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IGlzTGl0ZXJhbE9iamVjdCwgaXNWYWxpZERhdGUgfSBmcm9tICcuLi9lbnZpcm9ubWVudC1zY2hlbWEnO1xuaW1wb3J0IHtcbiAgICBBdXRvQ29tcGxldGVQaWNrZXJDb250cm9sU2NoZW1hLFxuICAgIENoZWNrYm94Q29udHJvbFNjaGVtYSxcbiAgICBDb250YWluZXJTY2hlbWEsXG4gICAgQ3J1ZEZvcm1EYXRhLFxuICAgIENydWRGb3JtU2V0dGluZyxcbiAgICBDcnVkTGlzdFNldHRpbmcsXG4gICAgQ3VzdG9tQ29udHJvbFNjaGVtYSxcbiAgICBEYXRlVGltZUNvbnRyb2xTY2hlbWEsXG4gICAgRHJvcGRvd25Db250cm9sU2NoZW1hLFxuICAgIEVkaXRvckNvbnRyb2xTY2hlbWEsXG4gICAgRW51bUxvZ1R5cGUsXG4gICAgRXZlbnREYXRhLFxuICAgIEV2ZW50VHlwZSxcbiAgICBGaWxlTWFuYWdlckNvbnRyb2xTY2hlbWEsXG4gICAgRmlsZVVwbG9hZENvbnRyb2xTY2hlbWEsXG4gICAgRm9ybUNvbnRyb2xCYXNlLFxuICAgIExvZ0NvbHVtbixcbiAgICBMb2dTZXR0aW5nLFxuICAgIE1hc2tDb250cm9sU2NoZW1hLFxuICAgIE9wZXJhdG9yLFxuICAgIFN3aXRjaENvbnRyb2xTY2hlbWEsXG4gICAgVGFibGVTY2hlbWEsXG4gICAgVGV4dEFyZWFDb250cm9sU2NoZW1hLFxuICAgIFRpdGxlU2NoZW1hXG59IGZyb20gJy4uL2Zvcm0tc2NoZW1hJztcbmltcG9ydCB7IENvbXBvbmVudEJhc2VXaXRoQnV0dG9uIH0gZnJvbSAnLi9jb21wb25lbnQtYmFzZS13aXRoLWJ1dHRvbic7XG5pbXBvcnQgeyBSZXF1aXJlZFZhbGlkYXRvciB9IGZyb20gJy4vdmFsaWRhdG9ycyc7XG5pbXBvcnQgeyBEZWNpbWFsUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIERhdGFGb3JtQmFzZSBleHRlbmRzIENvbXBvbmVudEJhc2VXaXRoQnV0dG9uIGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuXG4gICAgQFZpZXdDaGlsZChDcnVkRm9ybUNvbXBvbmVudCwgeyBzdGF0aWM6IGZhbHNlIH0pIGNydWRGb3JtOiBDcnVkRm9ybUNvbXBvbmVudDtcbiAgICBAVmlld0NoaWxkKCdmb3JtRWxlbWVudCcsIHsgc3RhdGljOiB0cnVlIH0pIGZvcm1FbGVtZW50OiBFbGVtZW50UmVmO1xuICAgIEBWaWV3Q2hpbGQoJ3BVcGxvYWQnLCB7IHN0YXRpYzogdHJ1ZSB9KSBwVXBsb2FkOiBGaWxlVXBsb2FkO1xuXG4gICAgQElucHV0KCkgcGFyZW50U2V0dGluZzogQ3J1ZExpc3RTZXR0aW5nO1xuICAgIEBJbnB1dCgpIG1vZGVsOiBDcnVkRm9ybURhdGEgPSBuZXcgQ3J1ZEZvcm1EYXRhKCk7XG4gICAgQElucHV0KCkgZm9yY2VPbmx5VmlldzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQE91dHB1dCgpIG9uU2F2ZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgb25TYXZlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgb25DYW5jZWw6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIG9uTWVzc2FnZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgb25Gb3JtUmVhZHk6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIG9uRGF0YUJpbmRlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAgIGRvTm90Q2hlY2tCYXNlU2VydmljZSA9IGZhbHNlO1xuICAgIHByaXZhdGUgbm90Q29uZmlnQmFzZVNlcnZpY2VNZXNzYWdlID0gJ0NoxrBhIGPhuqV1IGjDrG5oIENSVUQgYmFzZSBzZXJ2aWNlJztcbiAgICBtZXNzYWdlSW5zZXJ0U3VjY2VzcyA9ICcnO1xuICAgIG1lc3NhZ2VVcGRhdGVTdWNjZXNzID0gJyc7XG4gICAgc2V0dGluZzogQ3J1ZEZvcm1TZXR0aW5nID0gbmV3IENydWRGb3JtU2V0dGluZygpO1xuICAgIGxvZ1NldHRpbmc6IExvZ1NldHRpbmcgPSBuZXcgTG9nU2V0dGluZygpO1xuXG4gICAgdmkgPSBDT05GSUdfQ0FMRU5EQVJfVklFVE5BTUVTRTtcblxuICAgIGZvcm1Db250cm9sczogYW55O1xuICAgIGZvcm1Db250cm9sc0xpc3QgPSB7fTtcbiAgICBlbnZpcm9ubWVudDogYW55ID0ge307XG4gICAgbWRXaWR0aFdvcmtmbG93OiBudW1iZXI7XG5cbiAgICBhdXRvR2V0RGV0YWlsID0gdHJ1ZTtcbiAgICBhdXRvU2F2ZSA9IHRydWU7XG4gICAgaXNDbG9zZUZvcm0gPSB0cnVlO1xuICAgIG1lc3NhZ2VDb25maXJtU2F2ZTogc3RyaW5nO1xuICAgIHNhdmluZyA9IGZhbHNlO1xuICAgIGdldERldGFpbFBsdXNVcmwgPSBudWxsO1xuICAgIGluc2VydFBsdXNVcmwgPSBudWxsO1xuICAgIHVwZGF0ZVBsdXNVcmwgPSBudWxsO1xuICAgIGR5bmFtaWNDb250cm9sOiBhbnkgPSB7fTtcbiAgICBzZXRWYWxpZGF0ZUZvcm0gPSB0cnVlO1xuICAgIGhhdmVFbnRpdHlNZXRhZGF0YUFQSSA9IHRydWU7XG4gICAgaXNCYXNlTW9kZWwgPSB0cnVlO1xuICAgIGF1dG9HZW5lcmF0ZUlkID0gdHJ1ZTtcbiAgICBwdWJsaWMgX19pc0Zvcm1WaWV3OiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBwdWJsaWMgX25vdGlmaWVyU2VydmljZTogTm90aWZpZXJTZXJ2aWNlO1xuICAgIHB1YmxpYyBfbWFzdGVyRGF0YVNlcnZpY2U6IE1hc3RlckRhdGFTZXJ2aWNlO1xuICAgIHB1YmxpYyBfcm91dGVyOiBSb3V0ZXI7XG4gICAgcHVibGljIF9hY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGU7XG4gICAgcHVibGljIF90cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlO1xuICAgIHB1YmxpYyBfY3VzdG9tUm91dGVyU2VydmljZTogQ3VzdG9tUm91dGVyU2VydmljZTtcbiAgICBwdWJsaWMgX2NydWRTZXJ2aWNlOiBDcnVkU2VydmljZTtcbiAgICBwdWJsaWMgX2RvbVNlcnZpY2U6IERvbVNlcnZpY2U7XG4gICAgcHVibGljIF9lbnRpdHlNZXRhZGF0YVNlcnZpY2U6IEVudGl0eU1ldGFkYXRhU2VydmljZTtcbiAgICBwdWJsaWMgX3VzZXJTZXJ2aWNlOiBVc2VyU2VydmljZTtcbiAgICBwdWJsaWMgX251bWJlclBpcGU6IERlY2ltYWxQaXBlO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIF9pbmplY3RvcjogSW5qZWN0b3JcbiAgICApIHtcbiAgICAgICAgc3VwZXIoX2luamVjdG9yKTtcbiAgICAgICAgY29uc3QgbW9kdWxlQ29uZmlnU2VydmljZSA9IF9pbmplY3Rvci5nZXQoTW9kdWxlQ29uZmlnU2VydmljZSk7XG4gICAgICAgIHRoaXMuZW52aXJvbm1lbnQgPSBtb2R1bGVDb25maWdTZXJ2aWNlLmdldENvbmZpZygpLmVudmlyb25tZW50O1xuICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoTm90aWZpZXJTZXJ2aWNlKTtcbiAgICAgICAgdGhpcy5fbnVtYmVyUGlwZSA9IHRoaXMuX2luamVjdG9yLmdldChEZWNpbWFsUGlwZSk7XG4gICAgICAgIHRoaXMuX21hc3RlckRhdGFTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KE1hc3RlckRhdGFTZXJ2aWNlKTtcbiAgICAgICAgdGhpcy5fcm91dGVyID0gdGhpcy5faW5qZWN0b3IuZ2V0KFJvdXRlcik7XG4gICAgICAgIHRoaXMuX2FjdGl2YXRlZFJvdXRlID0gdGhpcy5faW5qZWN0b3IuZ2V0KEFjdGl2YXRlZFJvdXRlKTtcbiAgICAgICAgdGhpcy5fdHJhbnNsYXRlU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChUcmFuc2xhdGVTZXJ2aWNlKTtcbiAgICAgICAgdGhpcy5fY3VzdG9tUm91dGVyU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChDdXN0b21Sb3V0ZXJTZXJ2aWNlKTtcbiAgICAgICAgdGhpcy5fY3J1ZFNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoQ3J1ZFNlcnZpY2UpO1xuICAgICAgICB0aGlzLl9kb21TZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KERvbVNlcnZpY2UpO1xuICAgICAgICB0aGlzLl9lbnRpdHlNZXRhZGF0YVNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoRW50aXR5TWV0YWRhdGFTZXJ2aWNlKTtcbiAgICAgICAgdGhpcy5fdXNlclNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoVXNlclNlcnZpY2UpO1xuICAgICAgICB0aGlzLl9jb21tb25TZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KENvbW1vblNlcnZpY2UpO1xuXG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIC8vIHRoaXMuY2hlY2tQZXJtaXNzaW9uKHRoaXMubW9kZWwuZGF0YS5iYXNlUGVybWlzc2lvbik7XG5cbiAgICAgICAgY29uc3QgZGVmYXVsdFNldHRpbmcgPSBuZXcgQ3J1ZEZvcm1TZXR0aW5nKCk7XG4gICAgICAgIGNvbnN0IGNhdUhpbmhOZ2hpZXBWdSA9IHRoaXMuZW52aXJvbm1lbnQ/LmNhdUhpbmhOZ2hpZXBWdTtcbiAgICAgICAgaWYgKGNhdUhpbmhOZ2hpZXBWdSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gY2F1SGluaE5naGllcFZ1KSB7XG4gICAgICAgICAgICAgICAgaWYgKGRlZmF1bHRTZXR0aW5nW2tleV0gPT0gdGhpcy5zZXR0aW5nW2tleV1cbiAgICAgICAgICAgICAgICAgICAgJiYgdGhpcy5zZXR0aW5nW2tleV0gIT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgICYmIGNhdUhpbmhOZ2hpZXBWdVtrZXldICE9IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICAmJiB0aGlzLnNldHRpbmdba2V5XSAhPSBjYXVIaW5oTmdoaWVwVnVba2V5XSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmdba2V5XSA9IGNhdUhpbmhOZ2hpZXBWdVtrZXldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgfVxuICAgIGNoZWNrUGVybWlzc2lvbihiYXNlUGVybWlzc2lvbikge1xuICAgICAgICBpZiAodGhpcy5pc0Jhc2VNb2RlbCkge1xuICAgICAgICAgICAgaWYgKHRoaXMubW9kZWwuZm9ybVN0YXRlID09IEZvcm1TdGF0ZS5FRElUKSB7XG4gICAgICAgICAgICAgICAgaWYgKGJhc2VQZXJtaXNzaW9uICYgUGVybWlzc2lvbkJhc2UuRURJVCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLmZvcm1TdGF0ZSA9IEZvcm1TdGF0ZS5FRElUO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5mb3JtU3RhdGUgPSBGb3JtU3RhdGUuVklFVztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5tb2RlbC5kYXRhLmlzQnVpbGRJbkFsbCAmJiAhdGhpcy5fdXNlclNlcnZpY2UuaXNTdXBlclVzZXIoKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLmZvcm1TdGF0ZSA9IEZvcm1TdGF0ZS5WSUVXO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX19pc0Zvcm1WaWV3ID0gdGhpcy5faXNGb3JtVmlldygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgYWRkU2NoZW1hQmFzZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuX3VzZXJTZXJ2aWNlLmlzU3VwZXJVc2VyKClcbiAgICAgICAgICAgICYmIHRoaXMubW9kZWxcbiAgICAgICAgICAgICYmIHRoaXMubW9kZWwuZGF0YS5oYXNCdWlsZEluXG4gICAgICAgICAgICAmJiB0aGlzLnNldHRpbmcuc2NoZW1hXG4gICAgICAgICAgICAmJiB0aGlzLnNldHRpbmcuc2NoZW1hLmxlbmd0aCA+IDBcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLnNldHRpbmcuc2NoZW1hLnB1c2goXG4gICAgICAgICAgICAgICAgbmV3IFN3aXRjaENvbnRyb2xTY2hlbWEoe1xuICAgICAgICAgICAgICAgICAgICBmaWVsZDogJ2lzQnVpbGRJbicsXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnS2jDs2EgbcOjJyxcbiAgICAgICAgICAgICAgICAgICAgbWRXaWR0aDogNFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5zZXR0aW5nLnNjaGVtYS5wdXNoKFxuICAgICAgICAgICAgICAgIG5ldyBTd2l0Y2hDb250cm9sU2NoZW1hKHtcbiAgICAgICAgICAgICAgICAgICAgZmllbGQ6ICdpc0J1aWxkSW5BbGwnLFxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ0tow7NhIGLhuqNuIGdoaScsXG4gICAgICAgICAgICAgICAgICAgIG1kV2lkdGg6IDRcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnBhcmVudFNldHRpbmdcbiAgICAgICAgICAgICYmIHRoaXMuX2lzRm9ybUFkZE5ldygpXG4gICAgICAgICkge1xuICAgICAgICAgICAgbGV0IGRhdGFTb3VyY2UgPSBbXSwgZGVmYXVsdFZhbHVlID0gbnVsbCwgaGFzV29ya2Zsb3cgPSBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IGluaXREYXRhVGFza0Zvcm06IGFueSA9IHt9O1xuICAgICAgICAgICAgaWYgKHRoaXMucGFyZW50U2V0dGluZy53b3JrZmxvd1NldHRpbmdOZXcgJiYgdGhpcy5wYXJlbnRTZXR0aW5nLndvcmtmbG93U2V0dGluZ05ldy53b3JrZmxvd3MubGVuZ3RoID4gMFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgZGF0YVNvdXJjZSA9IHRoaXMucGFyZW50U2V0dGluZy53b3JrZmxvd1NldHRpbmdOZXcud29ya2Zsb3dzO1xuICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZSA9IHRoaXMucGFyZW50U2V0dGluZy53b3JrZmxvd1NldHRpbmdOZXcud29ya2Zsb3dDb2RlO1xuICAgICAgICAgICAgICAgIGhhc1dvcmtmbG93ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLmRhdGEuY3JlYXRlVGFza0luc3RlYWQgPSB0aGlzLnBhcmVudFNldHRpbmcud29ya2Zsb3dTZXR0aW5nTmV3LmNyZWF0ZVRhc2tJbnN0ZWFkO1xuICAgICAgICAgICAgICAgIGluaXREYXRhVGFza0Zvcm0uaWRMb2FpQ29uZ1ZpZWMgPSB0aGlzLnBhcmVudFNldHRpbmcud29ya2Zsb3dTZXR0aW5nTmV3LmlkTG9haUNvbmdWaWVjRGVmYXVsdDtcbiAgICAgICAgICAgICAgICBpbml0RGF0YVRhc2tGb3JtLl9fdGVtcGxhdGVUYXNrTmFtZSA9IHRoaXMucGFyZW50U2V0dGluZy53b3JrZmxvd1NldHRpbmdOZXcudGVtcGxhdGVUYXNrTmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMucGFyZW50U2V0dGluZy5pc1dvcmtmbG93VHJlZSkge1xuICAgICAgICAgICAgICAgIGhhc1dvcmtmbG93ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChoYXNXb3JrZmxvdykge1xuICAgICAgICAgICAgICAgIHRoaXMuZHluYW1pY0NvbnRyb2xbRmllbGREZWZpbmVJc1Rhc2tGb3JtQ29udHJvbF0gPSBuZXcgQ3VzdG9tQ29udHJvbFNjaGVtYSh7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkOiBGaWVsZERlZmluZUlzVGFza0Zvcm1Db250cm9sLFxuICAgICAgICAgICAgICAgICAgICBtZFdpZHRoOiAxMixcbiAgICAgICAgICAgICAgICAgICAgc2hvd0xhYmVsOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M6ICduby1wYWRkaW5nJyxcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogaW5pdERhdGFUYXNrRm9ybSxcbiAgICAgICAgICAgICAgICAgICAgaGlkZGVuQ2hlY2s6IChyb290TW9kZWwpID0+ICFyb290TW9kZWwgfHwgIXJvb3RNb2RlbC5jcmVhdGVUYXNrSW5zdGVhZFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZy5zY2hlbWEucHVzaChcbiAgICAgICAgICAgICAgICAgICAgbmV3IERyb3Bkb3duQ29udHJvbFNjaGVtYSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogRmllbGRXb3JrZmxvd0NvZGVJbkNydWRGb3JtLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICdRdXkgdHLDrG5oIHPhu60gZOG7pW5nJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFTb3VyY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZUZpZWxkOiAnY29kZScsXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5RmllbGQ6ICd0aXRsZScsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZFdpZHRoOiB0aGlzLm1kV2lkdGhXb3JrZmxvdyB8fCAxMixcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZUNhY2hpbmc6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGlkZGVuQ2hlY2s6IChyb290TW9kZWwpID0+ICFyb290TW9kZWwgfHwgcm9vdE1vZGVsLmNyZWF0ZVRhc2tJbnN0ZWFkLFxuICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2VkOiBhc3luYyAoZXZ0OiBFdmVudERhdGEpID0+IGF3YWl0IHRoaXMuaGFuZGxlQ2hhbmdlV29ya2Zsb3dDb2RlKGV2dCksXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkFkanVzdGVkVmFsdWU6IGFzeW5jIChldnQ6IEV2ZW50RGF0YSkgPT4gYXdhaXQgdGhpcy5oYW5kbGVDaGFuZ2VXb3JrZmxvd0NvZGUoZXZ0KVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucGFyZW50U2V0dGluZy53b3JrZmxvd1NldHRpbmdOZXdcbiAgICAgICAgICAgICAgICAgICAgJiYgdGhpcy5wYXJlbnRTZXR0aW5nLndvcmtmbG93U2V0dGluZ05ldy50YXNrSW5zaWRlQnVzaW5lc3NGb3JtXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZy5zY2hlbWEucHVzaChcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBUaXRsZVNjaGVtYSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogJ0PDtG5nIHZp4buHYycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlkZGVuQ2hlY2s6IChyb290TW9kZWwpID0+ICFyb290TW9kZWwgfHwgIXJvb3RNb2RlbC5jcmVhdGVUYXNrSW5zdGVhZFxuICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmR5bmFtaWNDb250cm9sW0ZpZWxkRGVmaW5lSXNUYXNrRm9ybUNvbnRyb2xdXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgaGFuZGxlQ2hhbmdlV29ya2Zsb3dDb2RlKGV2dDogRXZlbnREYXRhKSB7XG5cbiAgICB9XG5cbiAgICBzZXRXb3JrZmxvd0RhdGFzb3VyY2UoZXZ0OiBFdmVudERhdGEsIHdvcmtmbG93U2V0dGluZykge1xuICAgICAgICBldnQuZm9ybUNvbnRyb2xzW0ZpZWxkV29ya2Zsb3dDb2RlSW5DcnVkRm9ybV0uZGF0YVNvdXJjZSA9IHdvcmtmbG93U2V0dGluZy53b3JrZmxvd3M7XG4gICAgICAgIGlmICghZXZ0LnJvb3RNb2RlbFtGaWVsZFdvcmtmbG93Q29kZUluQ3J1ZEZvcm1dKSB7XG4gICAgICAgICAgICBldnQucm9vdE1vZGVsW0ZpZWxkV29ya2Zsb3dDb2RlSW5DcnVkRm9ybV0gPSB3b3JrZmxvd1NldHRpbmcud29ya2Zsb3dDb2RlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCF3b3JrZmxvd1NldHRpbmcud29ya2Zsb3dzLnNvbWUoeCA9PiB4LmNvZGUgPT0gZXZ0LnJvb3RNb2RlbFtGaWVsZFdvcmtmbG93Q29kZUluQ3J1ZEZvcm1dKSkge1xuICAgICAgICAgICAgZXZ0LnJvb3RNb2RlbFtGaWVsZFdvcmtmbG93Q29kZUluQ3J1ZEZvcm1dID0gd29ya2Zsb3dTZXR0aW5nLndvcmtmbG93Q29kZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIF9oYW5kbGVGb3JtUmVhZHkoZm9ybUV2ZW50OiBFdmVudERhdGEpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5fX2hhbmRsZUZvcm1SZWFkeShmb3JtRXZlbnQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgX19oYW5kbGVGb3JtUmVhZHkoZm9ybUV2ZW50OiBFdmVudERhdGEpIHtcbiAgICAgICAgaWYgKCF0aGlzLmRvTm90Q2hlY2tCYXNlU2VydmljZSAmJiAhdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlKSB7XG4gICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcodGhpcy5ub3RDb25maWdCYXNlU2VydmljZU1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZm9ybUNvbnRyb2xzID0gZm9ybUV2ZW50LmZvcm1Db250cm9scztcbiAgICAgICAgYXdhaXQgdGhpcy5vbkZvcm1Jbml0aWFsaXplZChmb3JtRXZlbnQpO1xuICAgICAgICB0aGlzLm9uRm9ybVJlYWR5LmVtaXQoe1xuICAgICAgICAgICAgZWxlbWVudDogdGhpcyxcbiAgICAgICAgICAgIHNldHRpbmc6IHRoaXMuc2V0dGluZyxcbiAgICAgICAgICAgIGZvcm1FdmVudFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fdHJpZ2dlckdldERldGFpbCgpO1xuICAgIH1cblxuICAgIF90cmlnZ2VyR2V0RGV0YWlsKCkge1xuICAgICAgICBpZiAodGhpcy5hdXRvR2V0RGV0YWlsKSB7XG4gICAgICAgICAgICB0aGlzLmdldERldGFpbCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMuY3J1ZEZvcm0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNydWRGb3JtLmluaXRDb250cm9sRGVmYXVsdFZhbHVlRnJvbUV4dGVybmFsKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jcnVkRm9ybS5maXJlTW9kZWxDaGFuZ2VkKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBvbkJlZm9yZUdldERldGFpbCgpIHtcbiAgICB9XG5cbiAgICBhc3luYyBnZXRPYmplY3REZXRhaWwoKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLmdldERldGFpbFdpdGhQZXJtaXNzaW9uKHRoaXMubW9kZWwuZGF0YS5pZCwgdGhpcy5tb2RlbC5kYXRhLnBpZCwgdGhpcy5nZXREZXRhaWxQbHVzVXJsKTtcbiAgICB9XG5cbiAgICBhc3luYyBnZXREZXRhaWxDdXN0b20oKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGdldERldGFpbCgpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0Q2hlY2sgPSBhd2FpdCB0aGlzLmdldERldGFpbEN1c3RvbSgpO1xuICAgICAgICAvLyBLaMO0bmcgb3ZlcnJpZGVcbiAgICAgICAgaWYgKHJlc3VsdENoZWNrID09IG51bGwpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5faXNGb3JtQWRkTmV3KCkpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLm9uQmVmb3JlR2V0RGV0YWlsKCk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY3J1ZEZvcm0pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jcnVkRm9ybS5zZXRJc0xvYWRlZERhdGFFZGl0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmdldE9iamVjdERldGFpbCgpO1xuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5kYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMubW9kaWZ5RGV0YWlsRGF0YShyZXNwb25zZS5kYXRhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fcHJvY2Vzc0FmdGVyR2V0RGF0YShyZXNwb25zZS5kYXRhKTtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLm9uQWZ0ZXJHZXREZXRhaWwocmVzcG9uc2UuZGF0YSk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubG9nU2V0dGluZy5pc0VuYWJsZUxvZykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ1NldHRpbmcudmFsdWVCZWZvcmVVcGRhdGUgPSB0aGlzLl9jb21tb25TZXJ2aWNlLmNsb25lT2JqZWN0KHJlc3BvbnNlLmRhdGEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNydWRGb3JtKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGV2ZW50ID0gbmV3IEV2ZW50RGF0YSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Tm9kZTogdGhpcy5jcnVkRm9ybS5fcm9vdE5vZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudFR5cGU6IEV2ZW50VHlwZS5GT1JNX1JFQURZLFxuICAgICAgICAgICAgICAgICAgICAgICAgY3J1ZEZvcm06IHRoaXMuY3J1ZEZvcm1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuaW5pdERhdGFBZGQoZXZlbnQpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmluaXREZWZhdWx0U2V0dGluZ0ZpbGVDb250cm9sKGV2ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jcnVkRm9ybS5pbml0Q29udHJvbERlZmF1bHRWYWx1ZUZyb21FeHRlcm5hbCgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNydWRGb3JtLmZpcmVNb2RlbENoYW5nZWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gT3ZlcnJpZGUgY8OhY2ggbOG6pXkgZOG7ryBsaeG7h3UgZ2V0RGV0YWlsXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKHJlc3VsdENoZWNrLnN1Y2Nlc3MgJiYgcmVzdWx0Q2hlY2suZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5tb2RlbC5mb3JtU3RhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5mb3JtU3RhdGUgPSBGb3JtU3RhdGUuRURJVDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY3J1ZEZvcm0pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jcnVkRm9ybS5zZXRJc0xvYWRlZERhdGFFZGl0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5tb2RpZnlEZXRhaWxEYXRhKHJlc3VsdENoZWNrLmRhdGEpO1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3Byb2Nlc3NBZnRlckdldERhdGEocmVzdWx0Q2hlY2suZGF0YSk7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5vbkFmdGVyR2V0RGV0YWlsKHJlc3VsdENoZWNrLmRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5mb3JtU3RhdGUgPSBGb3JtU3RhdGUuQUREO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNydWRGb3JtKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGV2ZW50ID0gbmV3IEV2ZW50RGF0YSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Tm9kZTogdGhpcy5jcnVkRm9ybS5fcm9vdE5vZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudFR5cGU6ICdmb3JtUmVhZHknLFxuICAgICAgICAgICAgICAgICAgICAgICAgY3J1ZEZvcm06IHRoaXMuY3J1ZEZvcm1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuaW5pdERhdGFBZGQoZXZlbnQpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmluaXREZWZhdWx0U2V0dGluZ0ZpbGVDb250cm9sKGV2ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jcnVkRm9ybS5pbml0Q29udHJvbERlZmF1bHRWYWx1ZUZyb21FeHRlcm5hbCgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNydWRGb3JtLmZpcmVNb2RlbENoYW5nZWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBpbml0RGF0YUFkZChldnQ6IEV2ZW50RGF0YSkgeyB9XG5cbiAgICBwcml2YXRlIGluaXREZWZhdWx0U2V0dGluZ0ZpbGVDb250cm9sKGV2dDogRXZlbnREYXRhKSB7XG4gICAgICAgIGlmICghZXZ0LnJvb3RNb2RlbC5pZCAmJiB0aGlzLnNldHRpbmcuc2NoZW1hLnNvbWUocCA9PiAocCBpbnN0YW5jZW9mIEZpbGVNYW5hZ2VyQ29udHJvbFNjaGVtYSkpKSB7XG4gICAgICAgICAgICBldnQucm9vdE1vZGVsLmlkID0gdGhpcy5fY29tbW9uU2VydmljZS5ndWlkKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQaOG6o2kgZ+G7jWkgaMOgbSBuw6B5IGtoaSBvdmVycmlkZSBnZXREZXRhaWxcbiAgICAgKi9cbiAgICBhc3luYyBfcHJvY2Vzc0FmdGVyR2V0RGF0YShkYXRhKSB7XG4gICAgICAgIGlmICghZGF0YSkge1xuICAgICAgICAgICAgZGF0YSA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gRHV54buHdCBjw6FjIGNvbnRyb2wgZGF0ZXRpbWUgxJHhu4MgY29udmVydCB2YWx1ZSBzYW5nIGRhdGV0aW1lXG4gICAgICAgICAgICB0aGlzLnNldHRpbmcuc2NoZW1hLmZvckVhY2goc2NoZW1hID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpeERhdGVWYWx1ZShzY2hlbWEsIGRhdGEpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZGF0YS5fX2Rpc2FibGVFZGl0ID0gdGhpcy5tb2RlbC5kYXRhLl9fZGlzYWJsZUVkaXQ7XG5cbiAgICAgICAgLy8gU2V0IGJhc2VQZXJtaXNzaW9uIHThu6sgY3J1ZGxpc3RcbiAgICAgICAgaWYgKHRoaXMubW9kZWwuZGF0YS5iYXNlUGVybWlzc2lvbiAmJiB0aGlzLm1vZGVsLmRhdGEuYmFzZVBlcm1pc3Npb24gPT09IFBlcm1pc3Npb25CYXNlLkZVTEwpIHtcbiAgICAgICAgICAgIGRhdGEuYmFzZVBlcm1pc3Npb24gPSB0aGlzLm1vZGVsLmRhdGEuYmFzZVBlcm1pc3Npb247XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm1vZGVsLmRhdGEgPSBkYXRhO1xuICAgICAgICBpZiAoZGF0YS5waWQgJiYgZGF0YS5waWQgIT0gdGhpcy5ndWlkRW1wdHkgJiYgZGF0YS5iYXNlUGVybWlzc2lvbkJ5UGlkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tQZXJtaXNzaW9uKGRhdGEuYmFzZVBlcm1pc3Npb25CeVBpZCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNoZWNrUGVybWlzc2lvbihkYXRhLmJhc2VQZXJtaXNzaW9uKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5mb3JjZU9ubHlWaWV3KSB7XG4gICAgICAgICAgICB0aGlzLl9faXNGb3JtVmlldyA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLm1vZGVsLmZvcm1TdGF0ZSA9IEZvcm1TdGF0ZS5WSUVXO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuY3J1ZEZvcm0pIHtcbiAgICAgICAgICAgIHRoaXMuY3J1ZEZvcm0uc3dpdGNoVmlld01vZGUodGhpcy5fX2lzRm9ybVZpZXcpO1xuICAgICAgICAgICAgdGhpcy5jcnVkRm9ybS5zd2l0Y2hGb3JtU3RhdGVGb3JVc2VycGlja2VyKHRoaXMuX2lzRm9ybUFkZE5ldygpKTtcbiAgICAgICAgICAgIHRoaXMuY3J1ZEZvcm0uZGF0YSA9IGRhdGE7XG4gICAgICAgICAgICB0aGlzLmNydWRGb3JtLnNldElzTG9hZGVkRGF0YUVkaXQodHJ1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlXG4gICAgICAgICAgICAmJiB0aGlzLmhhdmVFbnRpdHlNZXRhZGF0YUFQSSAvLyBzZXR0aW5nIMSR4buDIGZpeCBs4buXaSBrIGxvYWQgZGMgZW50aXR5IG1ldGFkYXRhIGNobyBjxqEgY+G6pXUgdOG7lSBjaOG7qWMgc2VydmljZVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX2VudGl0eU1ldGFkYXRhU2VydmljZS5sb2FkKHRoaXMuc2V0dGluZy5iYXNlU2VydmljZSwgdGhpcy5jb250ZXh0LCB0cnVlKTsgLy8gZm9yY2UgbG9hZCDEkeG7gyDEkeG7jWMgdOG7qyBjc2RsXG4gICAgICAgICAgICBjb25zdCBlbmFibGVWZXJzaW9uID0gdGhpcy5fZW50aXR5TWV0YWRhdGFTZXJ2aWNlLmdldEJ5Q29kZSgnZW5hYmxlVmVyc2lvbicpO1xuICAgICAgICAgICAgaWYgKGVuYWJsZVZlcnNpb24gPT0gJzEnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmZpbHRlckNoZWNrRXhpc3RCeVZlcnNpb24gPSBbXG4gICAgICAgICAgICAgICAgICAgIG5ldyBGaWx0ZXIoe1xuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6ICdjb2RlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBPcGVyYXRvci5ub3RFcXVhbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBKU09OLnN0cmluZ2lmeSh0aGlzLm1vZGVsLmRhdGEuY29kZSlcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5kaXNhYmxlQnVpbGRJbkZpZWxkKCk7XG4gICAgICAgIGlmICh0aGlzLmxvZ1NldHRpbmcuaXNFbmFibGVMb2cpIHtcbiAgICAgICAgICAgIHRoaXMuZ2V0TG9nVmFsdWVBZnRlckxvYWREZXRhaWwoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldExvZ1ZhbHVlQWZ0ZXJMb2FkRGV0YWlsKCkge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY29udHJvbE5hbWUgb2YgT2JqZWN0LmtleXModGhpcy5mb3JtQ29udHJvbHMpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMuY3J1ZEZvcm0uZm9ybUNvbnRyb2xzW2NvbnRyb2xOYW1lXTtcbiAgICAgICAgICAgICAgICBpZiAoY29udHJvbE5hbWUuaW5jbHVkZXMoJy4nKSB8fCB0aGlzLmNydWRGb3JtLmZvcm1Db250cm9sc1tjb250cm9sTmFtZV0/LmhpZGRlbiA9PT0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICB8fCAhKGNvbnRyb2wgaW5zdGFuY2VvZiBBdXRvQ29tcGxldGVQaWNrZXJDb250cm9sU2NoZW1hKSkgY29udGludWU7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2dTZXR0aW5nLmFyclZhbHVlQWZ0ZXJVcGRhdGUucHVzaChcbiAgICAgICAgICAgICAgICAgICAgbmV3IExvZ0NvbHVtbih7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogY29udHJvbC5maWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBjb250cm9sLmxhYmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVCZWZvcmU6IGNvbnRyb2wuX2NvbXBvbmVudC5kYXRhU291cmNlLm1hcChwID0+IHAubGFiZWwpLmpvaW4oJywgJykgfHwgdGhpcy5sb2dTZXR0aW5nLmVtcHR5VmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB2aXNpYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlQWZ0ZXI6ICcnXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgMjAwMCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmaXhEYXRlVmFsdWUoY29udHJvbCwgcGFyZW50TW9kZWwsIHBhcmVudFBhdGg/KSB7XG4gICAgICAgIGxldCBfcGFyZW50UGF0aCA9IGNvbnRyb2wuZmllbGQ7XG4gICAgICAgIGlmIChwYXJlbnRQYXRoICE9IG51bGwpIF9wYXJlbnRQYXRoID0gcGFyZW50UGF0aCArICcuJyArIF9wYXJlbnRQYXRoO1xuXG4gICAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgVGFibGVTY2hlbWEpIHtcbiAgICAgICAgICAgIGlmICghcGFyZW50TW9kZWxbY29udHJvbC5maWVsZF0gfHwgIShwYXJlbnRNb2RlbFtjb250cm9sLmZpZWxkXSBpbnN0YW5jZW9mIEFycmF5KSkge1xuICAgICAgICAgICAgICAgIHBhcmVudE1vZGVsW2NvbnRyb2wuZmllbGRdID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgaSA9IDA7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgcGFyZW50TW9kZWxbY29udHJvbC5maWVsZF0pIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHN1YkNvbnRyb2wgb2YgY29udHJvbC5yb3dUZW1wbGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpeERhdGVWYWx1ZShzdWJDb250cm9sLCBpdGVtLCBfcGFyZW50UGF0aCArICdbJyArIGkgKyAnXScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY29udHJvbCBpbnN0YW5jZW9mIENvbnRhaW5lclNjaGVtYSkge1xuICAgICAgICAgICAgaWYgKHBhcmVudE1vZGVsW2NvbnRyb2wuZmllbGRdID09IG51bGwgfHwgIWlzTGl0ZXJhbE9iamVjdChwYXJlbnRNb2RlbFtjb250cm9sLmZpZWxkXSkpIHtcbiAgICAgICAgICAgICAgICBwYXJlbnRNb2RlbFtjb250cm9sLmZpZWxkXSA9IHt9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHN1YkNvbnRyb2wgb2YgY29udHJvbC5jb250cm9scykge1xuICAgICAgICAgICAgICAgIHRoaXMuZml4RGF0ZVZhbHVlKHN1YkNvbnRyb2wsIHBhcmVudE1vZGVsW2NvbnRyb2wuZmllbGRdLCBfcGFyZW50UGF0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIERhdGVUaW1lQ29udHJvbFNjaGVtYSkge1xuICAgICAgICAgICAgICAgIGlmICghKHBhcmVudE1vZGVsW2NvbnRyb2wuZmllbGRdIGluc3RhbmNlb2YgRGF0ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjb250cm9sLnRpbWVPbmx5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoU3RyaW5nKHBhcmVudE1vZGVsW2NvbnRyb2wuZmllbGRdKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNWYWxpZERhdGUoZGF0ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRNb2RlbFtjb250cm9sLmZpZWxkXSA9IGRhdGU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRNb2RlbFtjb250cm9sLmZpZWxkXSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRNb2RlbFtjb250cm9sLmZpZWxkXSA9IHRoaXMuX2NvbW1vblNlcnZpY2UuZ2V0VGltZShwYXJlbnRNb2RlbFtjb250cm9sLmZpZWxkXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGRpc2FibGVCdWlsZEluRmllbGQoKSB7XG4gICAgICAgIGlmICghdGhpcy5faXNGb3JtQWRkTmV3KCkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm1vZGVsLmRhdGEuaXNCdWlsZEluQWxsICYmICF0aGlzLl91c2VyU2VydmljZS5pc1N1cGVyVXNlcigpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nLnNjaGVtYS5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgICAgICBpdGVtLmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9hZGRSZXF1aXJlZFZhbGlkYXRvcihzY2hlbWE6IEZvcm1Db250cm9sQmFzZSkge1xuICAgICAgICBsZXQgZXhpc3QgPSBmYWxzZTtcbiAgICAgICAgZm9yIChjb25zdCB2YWxpZGF0b3Igb2Ygc2NoZW1hLnZhbGlkYXRvcnMpIHtcbiAgICAgICAgICAgIGlmICh2YWxpZGF0b3IgaW5zdGFuY2VvZiBSZXF1aXJlZFZhbGlkYXRvcikge1xuICAgICAgICAgICAgICAgIGV4aXN0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIWV4aXN0KSB7XG4gICAgICAgICAgICBzY2hlbWEudmFsaWRhdG9ycy5wdXNoKG5ldyBSZXF1aXJlZFZhbGlkYXRvcigpKTtcbiAgICAgICAgfVxuICAgICAgICBzY2hlbWEucmVxdWlyZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIF9yZW1vdmVSZXF1aXJlZFZhbGlkYXRvcihzY2hlbWE6IEZvcm1Db250cm9sQmFzZSkge1xuICAgICAgICBjb25zdCB2YWxpZGF0b3JzID0gW107XG4gICAgICAgIGZvciAoY29uc3QgdmFsaWRhdG9yIG9mIHNjaGVtYS52YWxpZGF0b3JzKSB7XG4gICAgICAgICAgICBpZiAodmFsaWRhdG9yIGluc3RhbmNlb2YgUmVxdWlyZWRWYWxpZGF0b3IpIHtcblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFsaWRhdG9ycy5wdXNoKHZhbGlkYXRvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc2NoZW1hLnZhbGlkYXRvcnMgPSB2YWxpZGF0b3JzO1xuICAgICAgICBzY2hlbWEucmVxdWlyZWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBfc2V0TW9kZWxWYWx1ZShmaWVsZDogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG4gICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmNydWRGb3JtLl9yb290Tm9kZS5nZXROb2RlQnlQYXRoKGZpZWxkKTtcbiAgICAgICAgdGhpcy5fc2V0TW9kZWxWYWx1ZUJ5Tm9kZShub2RlLCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgX3NldE1vZGVsVmFsdWVCeU5vZGUobm9kZTogQ29udHJvbFRyZWVOb2RlLCB2YWx1ZTogYW55KSB7XG4gICAgICAgIG5vZGUuc2V0VmFsdWUodmFsdWUpO1xuICAgICAgICB0aGlzLmNydWRGb3JtLmZpcmVNb2RlbENoYW5nZWQoKTtcbiAgICB9XG5cbiAgICBhc3luYyBtb2RpZnlEZXRhaWxEYXRhKGRhdGEpIHtcbiAgICB9XG5cbiAgICBfdHJpZ2dlclNhdmUoKSB7XG4gICAgICAgIHRoaXMuc2F2ZSgpO1xuICAgIH1cblxuICAgIGFzeW5jIG9uQWZ0ZXJHZXRMb2dWYWx1ZSgpIHtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFNpbmdsZUxhYmVsKGNvbnRyb2wsIGRhdGFTb3VyY2UsIHZhbHVlUGFyYW0pIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IGRhdGFTb3VyY2UuZmluZChwID0+IHA/LnZhbHVlW2NvbnRyb2wudmFsdWVGaWVsZF0gPT0gdmFsdWVQYXJhbSk7XG4gICAgICAgIGlmICghIXJlc3VsdCkge1xuICAgICAgICAgICAgY29uc3QgZnVuY0dldExhYmVsID0gY29udHJvbC5mdW5jR2V0TGFiZWw7XG4gICAgICAgICAgICBpZiAoZnVuY0dldExhYmVsKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gZnVuY0dldExhYmVsKHJlc3VsdC52YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQgPSB0aGlzLmxvZ1NldHRpbmcuZW1wdHlWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBwcml2YXRlIGdldE11bHRpcGxlTGFiZWwoY29udHJvbCwgZGF0YVNvdXJjZSwgdmFsdWVQYXJhbSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHZhbHVlUGFyYW0uc29tZShwID0+IHAgPT0gTnVtYmVyKHApKSkge1xuICAgICAgICAgICAgICAgIHZhbHVlUGFyYW0gPSB2YWx1ZVBhcmFtLm1hcChwID0+IE51bWJlcihwKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggeyB9XG4gICAgICAgIGxldCByZXN1bHQgPSBkYXRhU291cmNlXG4gICAgICAgICAgICAuZmlsdGVyKHAgPT4gdmFsdWVQYXJhbS5pbmNsdWRlcyhwLnZhbHVlW2NvbnRyb2wudmFsdWVGaWVsZF0pKVxuICAgICAgICAgICAgLm1hcChwID0+IGNvbnRyb2wuZnVuY0dldExhYmVsKHAudmFsdWUpKVxuICAgICAgICAgICAgLmpvaW4oJywgJyk7XG4gICAgICAgIGlmICghcmVzdWx0KSB7XG4gICAgICAgICAgICByZXN1bHQgPSB0aGlzLmxvZ1NldHRpbmcuZW1wdHlWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGFkZFNpbmdsZVByb3BlcnR5TG9nKGNvbnRyb2wsIG9sZFZhbHVlLCBuZXdWYWx1ZSkge1xuICAgICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEF1dG9Db21wbGV0ZVBpY2tlckNvbnRyb2xTY2hlbWEpIHtcbiAgICAgICAgICAgIGNvbnN0IGxvZ0NvbHVtbiA9IHRoaXMubG9nU2V0dGluZy5hcnJWYWx1ZUFmdGVyVXBkYXRlLmZpbmQocCA9PiBwLmZpZWxkID09IGNvbnRyb2wuZmllbGQpO1xuICAgICAgICAgICAgbGV0IGRhdGFTb3VyY2UgPSBjb250cm9sLl9jb21wb25lbnQuc2VsZWN0ZWRWYWx1ZU9iamVjdDtcbiAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShkYXRhU291cmNlKSkgZGF0YVNvdXJjZSA9IFtkYXRhU291cmNlXTtcbiAgICAgICAgICAgIGxvZ0NvbHVtbi52aXNpYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgIGxvZ0NvbHVtbi52YWx1ZUFmdGVyID0gdGhpcy5nZXRTaW5nbGVMYWJlbChjb250cm9sLCBkYXRhU291cmNlLCBuZXdWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhU291cmNlID0gY29udHJvbC5fY29tcG9uZW50LmRhdGFTb3VyY2VJbnRlcm5hbDtcbiAgICAgICAgICAgIHRoaXMubG9nU2V0dGluZy5hcnJWYWx1ZUFmdGVyVXBkYXRlLnB1c2goXG4gICAgICAgICAgICAgICAgbmV3IExvZ0NvbHVtbih7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkOiBjb250cm9sLmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogY29udHJvbC5sYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVCZWZvcmU6IHRoaXMuZ2V0U2luZ2xlTGFiZWwoY29udHJvbCwgZGF0YVNvdXJjZSwgb2xkVmFsdWUpLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZUFmdGVyOiB0aGlzLmdldFNpbmdsZUxhYmVsKGNvbnRyb2wsIGRhdGFTb3VyY2UsIG5ld1ZhbHVlKVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFkZE11bHRpcGxlUHJvcGVydHlMb2coY29udHJvbCwgb2xkVmFsdWUsIG5ld1ZhbHVlKSB7XG4gICAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgQXV0b0NvbXBsZXRlUGlja2VyQ29udHJvbFNjaGVtYSkge1xuICAgICAgICAgICAgY29uc3QgbG9nQ29sdW1uID0gdGhpcy5sb2dTZXR0aW5nLmFyclZhbHVlQWZ0ZXJVcGRhdGUuZmluZChwID0+IHAuZmllbGQgPT0gY29udHJvbC5maWVsZCk7XG4gICAgICAgICAgICBsb2dDb2x1bW4udmlzaWJsZSA9IHRydWU7XG4gICAgICAgICAgICBsb2dDb2x1bW4udmFsdWVBZnRlciA9IHRoaXMuZ2V0TXVsdGlwbGVMYWJlbChjb250cm9sLCBjb250cm9sLl9jb21wb25lbnQuc2VsZWN0ZWRWYWx1ZU9iamVjdCwgbmV3VmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZGF0YVNvdXJjZSA9IGNvbnRyb2wuX2NvbXBvbmVudC5kYXRhU291cmNlSW50ZXJuYWw7XG4gICAgICAgICAgICB0aGlzLmxvZ1NldHRpbmcuYXJyVmFsdWVBZnRlclVwZGF0ZS5wdXNoKFxuICAgICAgICAgICAgICAgIG5ldyBMb2dDb2x1bW4oe1xuICAgICAgICAgICAgICAgICAgICBmaWVsZDogY29udHJvbC5maWVsZCxcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGNvbnRyb2wubGFiZWwsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlQmVmb3JlOiB0aGlzLmdldE11bHRpcGxlTGFiZWwoY29udHJvbCwgZGF0YVNvdXJjZSwgb2xkVmFsdWUpLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZUFmdGVyOiB0aGlzLmdldE11bHRpcGxlTGFiZWwoY29udHJvbCwgZGF0YVNvdXJjZSwgbmV3VmFsdWUpXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0TG9nVmFsdWVEZWZhdWx0KGNvbnRyb2wsIG9sZFZhbHVlLCBuZXdWYWx1ZSkge1xuICAgICAgICBjb25zdCBpc051bGxPbGRWYWx1ZSA9IHRoaXMuaXNOdWxsT3JFbXB0eShvbGRWYWx1ZSk7XG4gICAgICAgIGNvbnN0IGlzTnVsbE5ld1ZhbHVlID0gdGhpcy5pc051bGxPckVtcHR5KG5ld1ZhbHVlKTtcbiAgICAgICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBEYXRlVGltZUNvbnRyb2xTY2hlbWEpIHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdCA9IGNvbnRyb2wuc2hvd1RpbWUgPyAnSEg6bW0gZGQvTU0veXl5eScgOiAnZGQvTU0veXl5eSc7XG4gICAgICAgICAgICBvbGRWYWx1ZSA9IGlzTnVsbE9sZFZhbHVlID8gdGhpcy5sb2dTZXR0aW5nLmVtcHR5VmFsdWUgOiB0aGlzLl9kYXRlUGlwZS50cmFuc2Zvcm0ob2xkVmFsdWUsIGZvcm1hdCk7XG4gICAgICAgICAgICBuZXdWYWx1ZSA9IGlzTnVsbE5ld1ZhbHVlID8gdGhpcy5sb2dTZXR0aW5nLmVtcHR5VmFsdWUgOiB0aGlzLl9kYXRlUGlwZS50cmFuc2Zvcm0obmV3VmFsdWUsIGZvcm1hdCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY29udHJvbCBpbnN0YW5jZW9mIE1hc2tDb250cm9sU2NoZW1hKSB7XG4gICAgICAgICAgICBvbGRWYWx1ZSA9IGlzTnVsbE9sZFZhbHVlID8gdGhpcy5sb2dTZXR0aW5nLmVtcHR5VmFsdWUgOiB0aGlzLl9udW1iZXJQaXBlLnRyYW5zZm9ybShvbGRWYWx1ZSwgJycsICd2aS1WTicpO1xuICAgICAgICAgICAgbmV3VmFsdWUgPSBpc051bGxOZXdWYWx1ZSA/IHRoaXMubG9nU2V0dGluZy5lbXB0eVZhbHVlIDogdGhpcy5fbnVtYmVyUGlwZS50cmFuc2Zvcm0obmV3VmFsdWUsICcnLCAndmktVk4nKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjb250cm9sIGluc3RhbmNlb2YgQ2hlY2tib3hDb250cm9sU2NoZW1hIHx8IGNvbnRyb2wgaW5zdGFuY2VvZiBTd2l0Y2hDb250cm9sU2NoZW1hKSB7XG4gICAgICAgICAgICBvbGRWYWx1ZSA9IGlzTnVsbE9sZFZhbHVlID8gdGhpcy5sb2dTZXR0aW5nLmVtcHR5VmFsdWUgOiBEYXRhU291cmNlQm9vbGVhbi5maW5kKHAgPT4gcC5pZCA9PSBvbGRWYWx1ZSk/LnRlbjtcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gaXNOdWxsTmV3VmFsdWUgPyB0aGlzLmxvZ1NldHRpbmcuZW1wdHlWYWx1ZSA6IERhdGFTb3VyY2VCb29sZWFuLmZpbmQocCA9PiBwLmlkID09IG5ld1ZhbHVlKT8udGVuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbb2xkVmFsdWUsIG5ld1ZhbHVlXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldExvZ1ZhbHVlKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgY2xvbmVNb2RlbCA9IHRoaXMuX2NvbW1vblNlcnZpY2UuY2xvbmVPYmplY3QodGhpcy5tb2RlbC5kYXRhKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY29udHJvbE5hbWUgb2YgT2JqZWN0LmtleXModGhpcy5mb3JtQ29udHJvbHMpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbnRyb2xOYW1lLmluY2x1ZGVzKCcuJykgfHwgdGhpcy5jcnVkRm9ybS5mb3JtQ29udHJvbHNbY29udHJvbE5hbWVdPy5oaWRkZW4gPT09IHRydWUpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmZvcm1Db250cm9sc1tjb250cm9sTmFtZV07XG4gICAgICAgICAgICAgICAgY29uc3Qgb2xkVmFsdWUgPSB0aGlzLmxvZ1NldHRpbmcudmFsdWVCZWZvcmVVcGRhdGVbY29udHJvbC5maWVsZF07XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3VmFsdWUgPSBjbG9uZU1vZGVsW2NvbnRyb2wuZmllbGRdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzTXVsdGlwbGUgPSBBcnJheS5pc0FycmF5KG9sZFZhbHVlKTtcbiAgICAgICAgICAgICAgICBpZiAoKCF0aGlzLmlzTnVsbE9yRW1wdHkob2xkVmFsdWUpIHx8ICF0aGlzLmlzTnVsbE9yRW1wdHkobmV3VmFsdWUpKVxuICAgICAgICAgICAgICAgICAgICAmJiAhKGNvbnRyb2wgaW5zdGFuY2VvZiBGaWxlTWFuYWdlckNvbnRyb2xTY2hlbWEpXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgVGFibGVTY2hlbWEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChKU09OLnN0cmluZ2lmeShvbGRWYWx1ZSkgIT0gSlNPTi5zdHJpbmdpZnkobmV3VmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dTZXR0aW5nLmFyclZhbHVlQWZ0ZXJVcGRhdGUucHVzaChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IExvZ0NvbHVtbih7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogY29udHJvbC5maWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBjb250cm9sLmxhYmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bUxvZ1R5cGU6IEVudW1Mb2dUeXBlLlRhYmxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjb250cm9sIGluc3RhbmNlb2YgRHJvcGRvd25Db250cm9sU2NoZW1hIHx8IGNvbnRyb2wgaW5zdGFuY2VvZiBBdXRvQ29tcGxldGVQaWNrZXJDb250cm9sU2NoZW1hKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzTXVsdGlwbGUgJiYgb2xkVmFsdWUgIT0gbmV3VmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZFNpbmdsZVByb3BlcnR5TG9nKGNvbnRyb2wsIG9sZFZhbHVlLCBuZXdWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChpc011bHRpcGxlICYmICF0aGlzLl9jb21tb25TZXJ2aWNlLmlzU2FtZUFycmF5KG9sZFZhbHVlLCBuZXdWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZE11bHRpcGxlUHJvcGVydHlMb2coY29udHJvbCwgb2xkVmFsdWUsIG5ld1ZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvbGRWYWx1ZSAhPSBuZXdWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFt2YWx1ZUJlZm9yZSwgdmFsdWVBZnRlcl0gPSB0aGlzLmdldExvZ1ZhbHVlRGVmYXVsdChjb250cm9sLCBvbGRWYWx1ZSwgbmV3VmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9nU2V0dGluZy5hcnJWYWx1ZUFmdGVyVXBkYXRlLnB1c2goXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBMb2dDb2x1bW4oe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6IGNvbnRyb2wuZmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogY29udHJvbC5sYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlQmVmb3JlOiB2YWx1ZUJlZm9yZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlQWZ0ZXI6IHZhbHVlQWZ0ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtTG9nVHlwZTogKGNvbnRyb2wgaW5zdGFuY2VvZiBFZGl0b3JDb250cm9sU2NoZW1hIHx8IGNvbnRyb2wgaW5zdGFuY2VvZiBUZXh0QXJlYUNvbnRyb2xTY2hlbWEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBFbnVtTG9nVHlwZS5UYWJsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogRW51bUxvZ1R5cGUuTm9ybWFsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJy0tLS1sb2cgZGF0YSBmYWlsLS0tLScpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaXNOdWxsT3JFbXB0eShpbnB1dDogYW55KSB7XG4gICAgICAgIGlmIChpbnB1dCAhPT0gdW5kZWZpbmVkICYmIGlucHV0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShpbnB1dCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5wdXQubGVuZ3RoID8gZmFsc2UgOiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlucHV0LnRvU3RyaW5nKCkudHJpbSgpICE9PSAnJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcHJpdmF0ZSBhc3luYyBzYXZlKCkge1xuICAgICAgICBjb25zdCB2YWxpZGF0ZWQgPSBhd2FpdCB0aGlzLnZhbGlkYXRlRm9ybUJhc2UoKTtcbiAgICAgICAgaWYgKHZhbGlkYXRlZCkge1xuICAgICAgICAgICAgaWYgKHRoaXMubG9nU2V0dGluZy5pc0VuYWJsZUxvZykge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5sb2dTZXR0aW5nLmlzQ3VzdG9tQWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZ2V0TG9nVmFsdWUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gY+G6pXUgaMOsbmggdGjDqm1cbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLm9uQWZ0ZXJHZXRMb2dWYWx1ZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuZGF0YS5sb2dNZXRhRGF0YSA9IHRoaXMubG9nU2V0dGluZy5hcnJWYWx1ZUFmdGVyVXBkYXRlLmZpbHRlcihwID0+IHAudmlzaWJsZSkubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgID8gSlNPTi5zdHJpbmdpZnkodGhpcy5sb2dTZXR0aW5nLmFyclZhbHVlQWZ0ZXJVcGRhdGUuZmlsdGVyKHAgPT4gcC52aXNpYmxlKSlcbiAgICAgICAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXdhaXQgdGhpcy5vbkJlZm9yZVNhdmUoKTtcbiAgICAgICAgICAgIHRoaXMudHJpZ2dlclNhdmVGaWxlVXBsb2FkKCk7XG4gICAgICAgICAgICBpZiAodGhpcy5hdXRvU2F2ZSkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9pc0Zvcm1FZGl0KCkgfHwgdGhpcy5faXNGb3JtVmlldygpKSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMub25VcGRhdGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5faXNGb3JtQWRkTmV3KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5vbkluc2VydCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gZm9ybSB2aWV3LCBkbyBub3RoaW5nXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVNYW51YWxTYXZlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm1vZGVsLnN1Ym1pdHRpbmcgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhhbmRsZU1hbnVhbFNhdmUoKSB7XG5cbiAgICB9XG5cbiAgICB0cmlnZ2VyU2F2ZUZpbGVVcGxvYWQoKSB7XG4gICAgICAgIHRoaXMucm9vdENvbnRleHQuZmlyZUV2ZW50KENvbUN0eENvbnN0YW50cy5DT01NT04uU0FWRV9GSUxFX0lOX0ZPUk0pO1xuICAgIH1cblxuICAgIGFzeW5jIF9nZXRSZXN1bHRWYWxpZGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMudmFsaWRhdGVGb3JtQmFzZSgpO1xuICAgIH1cblxuICAgIGFzeW5jIHZhbGlkYXRlRm9ybShyZXN1bHRWYWxpZGF0ZUJhc2U6IGJvb2xlYW4pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyB2YWxpZGF0ZUZvcm1CYXNlKCkge1xuICAgICAgICBsZXQgcmVzdWx0VmFsaWRhdGVCYXNlID0gdHJ1ZTtcbiAgICAgICAgLy8gQ8OzIHRo4buDIGPDsyBmb3JtIGsgY8OzIGNydWQtZm9ybSAoVsOsIGzDoCBmb3JtIG1hc3RlciBj4bunYSBjw6FjIGZvcm0gY29uKVxuICAgICAgICBpZiAodGhpcy5jcnVkRm9ybSkge1xuICAgICAgICAgICAgcmVzdWx0VmFsaWRhdGVCYXNlID0gYXdhaXQgdGhpcy5jcnVkRm9ybS52YWxpZGF0ZUZvcm0odGhpcy5zZXRWYWxpZGF0ZUZvcm0pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlc3VsdFZhbGlkYXRlID0gYXdhaXQgdGhpcy52YWxpZGF0ZUZvcm0ocmVzdWx0VmFsaWRhdGVCYXNlKTtcbiAgICAgICAgLy8gQuG7jyBjaGVjayB2YWxpZCBmb3JtIGPDtG5nIHZp4buHYy4gbuG6v3UgbmjGsCBmb3JtIGPDtG5nIHZp4buHYyBraMO0bmcgdmFsaWQgdGjDrCBraMO0bmcgdOG7sSDEkeG7mW5nIHThuqFvIGPDtG5nIHZp4buHY1xuICAgICAgICAvLyBpZiAodGhpcy5keW5hbWljQ29udHJvbFtGaWVsZERlZmluZUlzVGFza0Zvcm1Db250cm9sXVxuICAgICAgICAvLyAgICAgJiYgdGhpcy5keW5hbWljQ29udHJvbFtGaWVsZERlZmluZUlzVGFza0Zvcm1Db250cm9sXS5fY29tcG9uZW50XG4gICAgICAgIC8vICkge1xuICAgICAgICAvLyAgICAgY29uc3QgdGFza0Zvcm0gPSB0aGlzLmR5bmFtaWNDb250cm9sW0ZpZWxkRGVmaW5lSXNUYXNrRm9ybUNvbnRyb2xdLl9jb21wb25lbnQ7XG4gICAgICAgIC8vICAgICBjb25zdCByZXN1bHRWYWxpZGF0ZUZvcm1UYXNrID0gYXdhaXQgdGFza0Zvcm0uX2dldFJlc3VsdFZhbGlkYXRlKCk7XG4gICAgICAgIC8vICAgICByZXN1bHRWYWxpZGF0ZSA9IHJlc3VsdFZhbGlkYXRlRm9ybVRhc2sgJiYgcmVzdWx0VmFsaWRhdGU7XG4gICAgICAgIC8vIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdFZhbGlkYXRlICYmIHJlc3VsdFZhbGlkYXRlQmFzZTtcbiAgICB9XG5cbiAgICBfdmFsaWRhdGVGb3JtQ29udHJvbChmaWVsZFBhdGgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3J1ZEZvcm0udmFsaWRhdGVGb3JtQ29udHJvbChmaWVsZFBhdGgpO1xuICAgIH1cblxuICAgIF9jbGVhbkZvcm0oKSB7XG4gICAgICAgIHRoaXMuY3J1ZEZvcm0uY2xlYW4oKTtcbiAgICB9XG5cbiAgICBfdHJpZ2dlckNvbnRyb2xDaGFuZ2UoZmllbGRQYXRoKSB7XG4gICAgICAgIHRoaXMuY3J1ZEZvcm0udHJpZ2dlckNoYW5nZShmaWVsZFBhdGgpO1xuICAgIH1cblxuICAgIG9uQmVmb3JlU2F2ZSgpOiB2b2lkIHwgUHJvbWlzZTxib29sZWFuPiB7XG4gICAgfVxuXG4gICAgb25BZnRlclNhdmUocmVzcG9uc2U6IFJlc3BvbnNlUmVzdWx0KTogdm9pZCB8IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIH1cblxuXG4gICAgYXN5bmMgb25BZnRlckdldERldGFpbChkYXRhPzogYW55W10pIHtcblxuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgb25JbnNlcnQoKSB7XG4gICAgICAgIHRoaXMuc2V0RGVmYXVsdFZhbHVlKHRoaXMubW9kZWwuZGF0YSk7XG4gICAgICAgIGlmICh0aGlzLmR5bmFtaWNDb250cm9sW0ZpZWxkRGVmaW5lSXNUYXNrRm9ybUNvbnRyb2xdXG4gICAgICAgICAgICAmJiB0aGlzLmR5bmFtaWNDb250cm9sW0ZpZWxkRGVmaW5lSXNUYXNrRm9ybUNvbnRyb2xdLl9jb21wb25lbnRcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25zdCB0YXNrRm9ybSA9IHRoaXMuZHluYW1pY0NvbnRyb2xbRmllbGREZWZpbmVJc1Rhc2tGb3JtQ29udHJvbF0uX2NvbXBvbmVudDtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdFZhbGlkYXRlRm9ybVRhc2sgPSBhd2FpdCB0YXNrRm9ybS5fZ2V0UmVzdWx0VmFsaWRhdGUoKTtcbiAgICAgICAgICAgIGlmIChyZXN1bHRWYWxpZGF0ZUZvcm1UYXNrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5kYXRhLml0ZW1Db25nVmllYyA9IHRhc2tGb3JtLm1vZGVsLmRhdGE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubW9kZWwuZGF0YS5jcmVhdGVUYXNrSW5zdGVhZCkge1xuICAgICAgICAgICAgLy8gcmVzZXQgZmllbGQgX1dvcmtmbG93Q29kZSDEkeG7gyBiYWNrZW5kIGtow7RuZyBjaOG6oXkgcXV5IHRyw6xuaCBi4bqjbiBnaGlcbiAgICAgICAgICAgIHRoaXMubW9kZWwuZGF0YVtGaWVsZFdvcmtmbG93Q29kZUluQ3J1ZEZvcm1dID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb25maXJtZWQgPSBhd2FpdCB0aGlzLmNyZWF0ZUNvbmZpcm1JZlJlcXVpcmUoKTtcbiAgICAgICAgaWYgKCFjb25maXJtZWQpIHJldHVybjtcbiAgICAgICAgYXdhaXQgdGhpcy5faW5zZXJ0KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVDb25maXJtSWZSZXF1aXJlKCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlcywgcmVqKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5tZXNzYWdlQ29uZmlybVNhdmUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd0NvbmZpcm0odGhpcy5tZXNzYWdlQ29uZmlybVNhdmUpXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcyhmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlcyh0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfaW5zZXJ0KCkge1xuICAgICAgICB0aGlzLmdldFByb21pc2VBY3Rpb25JbnNlcnQoKVxuICAgICAgICAgICAgLnRoZW4oYXN5bmMgcmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuc3VibWl0dGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuc2hvd01lc3NhZ2VBZnRlckluc2VydChyZXNwb25zZS5zdWNjZXNzLCByZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5kYXRhLmlkID0gcmVzcG9uc2UuZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5vbkFmdGVyU2F2ZShyZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25TYXZlZC5lbWl0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiB0aGlzLm1vZGVsLmRhdGEuaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc0Nsb3NlRm9ybTogdGhpcy5pc0Nsb3NlRm9ybVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlSW5zZXJ0RXJyb3IoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFlcnJvci5lcnJvci5zdWNjZXNzICYmIGVycm9yLmVycm9yLmVycm9yQ2hlY2tFeGlzdCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLnN1Ym1pdHRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLnN1Ym1pdHRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dNZXNzYWdlQWZ0ZXJJbnNlcnQoZmFsc2UsIGVycm9yKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldFByb21pc2VBY3Rpb25JbnNlcnQoKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLnBvc3QodGhpcy5tb2RlbC5kYXRhLCB0aGlzLmluc2VydFBsdXNVcmwpO1xuICAgIH1cblxuICAgIGhhbmRsZUluc2VydEVycm9yKCkge1xuXG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBvblVwZGF0ZSgpIHtcbiAgICAgICAgdGhpcy5zZXREZWZhdWx0VmFsdWUodGhpcy5tb2RlbC5kYXRhKTtcbiAgICAgICAgdGhpcy5nZXRQcm9taXNlQWN0aW9uVXBkYXRlKClcbiAgICAgICAgICAgIC50aGVuKGFzeW5jIHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLnN1Ym1pdHRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dNZXNzYWdlQWZ0ZXJVcGRhdGUocmVzcG9uc2Uuc3VjY2VzcywgcmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMub25BZnRlclNhdmUocmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uU2F2ZWQuZW1pdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogdGhpcy5tb2RlbC5kYXRhLmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzQ2xvc2VGb3JtOiB0aGlzLmlzQ2xvc2VGb3JtXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVVcGRhdGVFcnJvcigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWVycm9yLmVycm9yLnN1Y2Nlc3MgJiYgZXJyb3IuZXJyb3IuZXJyb3JDaGVja0V4aXN0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuc3VibWl0dGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuc3VibWl0dGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuc2hvd01lc3NhZ2VBZnRlclVwZGF0ZShmYWxzZSwgZXJyb3IpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHRoaXMubG9nU2V0dGluZy5pc0VuYWJsZUxvZykge1xuICAgICAgICAgICAgdGhpcy5sb2dTZXR0aW5nLmFyclZhbHVlQWZ0ZXJVcGRhdGUgPSBbXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhhbmRsZVVwZGF0ZUVycm9yKCkge1xuXG4gICAgfVxuXG4gICAgZ2V0UHJvbWlzZUFjdGlvblVwZGF0ZSgpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UucHV0KHRoaXMubW9kZWwuZGF0YS5pZC50b1N0cmluZygpLCB0aGlzLm1vZGVsLmRhdGEsIHRoaXMudXBkYXRlUGx1c1VybCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXREZWZhdWx0VmFsdWUobW9kZWwpIHtcbiAgICAgICAgaWYgKG1vZGVsLmlzQnVpbGRJbiA9PT0gbnVsbCB8fCBtb2RlbC5pc0J1aWxkSW4gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbW9kZWwuaXNCdWlsZEluID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobW9kZWwuaXNCdWlsZEluQWxsID09PSBudWxsIHx8IG1vZGVsLmlzQnVpbGRJbkFsbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBtb2RlbC5pc0J1aWxkSW5BbGwgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5wYXJlbnRTZXR0aW5nPy5lbmFibGVSZW9yZGVyUm93ICYmIHRoaXMucGFyZW50U2V0dGluZy5jb2x1bW5TZXR0aW5nLnNvcnRGaWVsZCkge1xuICAgICAgICAgICAgdGhpcy5tb2RlbC5kYXRhW3RoaXMucGFyZW50U2V0dGluZy5jb2x1bW5TZXR0aW5nLnNvcnRGaWVsZF0gPz89IHRoaXMucGFyZW50TW9kZWwudG90YWwgKyAxO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzaG93TWVzc2FnZUFmdGVySW5zZXJ0KGlzU3VjY2VzczogYm9vbGVhbiA9IGZhbHNlLCBlcnJvcj86IGFueSkge1xuICAgICAgICBpZiAoaXNTdWNjZXNzKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMubWVzc2FnZUluc2VydFN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2VJbnNlcnRTdWNjZXNzID0gdGhpcy5fdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdNRVNTQUdFLklOU0VSVF9EQVRBX1NVQ0NFU1MnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLm1lc3NhZ2VJbnNlcnRTdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dTdWNjZXNzKHRoaXMubWVzc2FnZUluc2VydFN1Y2Nlc3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVSZXNwb25zZUVycm9yKGVycm9yKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2hvd01lc3NhZ2VBZnRlclVwZGF0ZShpc1N1Y2Nlc3M6IGJvb2xlYW4gPSBmYWxzZSwgZXJyb3I/OiBhbnkpIHtcbiAgICAgICAgaWYgKGlzU3VjY2Vzcykge1xuICAgICAgICAgICAgaWYgKCF0aGlzLm1lc3NhZ2VVcGRhdGVTdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlVXBkYXRlU3VjY2VzcyA9IHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnTUVTU0FHRS5VUERBVEVfREFUQV9TVUNDRVNTJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5tZXNzYWdlVXBkYXRlU3VjY2Vzcykge1xuICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93U3VjY2Vzcyh0aGlzLm1lc3NhZ2VVcGRhdGVTdWNjZXNzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlUmVzcG9uc2VFcnJvcihlcnJvcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBoYW5kbGVSZXNwb25zZUVycm9yKGVycm9yKSB7XG4gICAgICAgIGlmIChlcnJvci5tZXNzYWdlKSB7XG4gICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoZXJyb3IubWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZXJyb3IuZXJyb3IpIHtcbiAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZyhlcnJvci5lcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ0PDsyBs4buXaSB44bqjeSByYSwgbGnDqm4gaOG7hyBxdeG6o24gdHLhu4sgdmnDqm4gxJHhu4MgYmnhur90IHRow6ptIGNoaSB0aeG6v3QnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIG9uRm9ybUluaXRpYWxpemVkKGRhdGE6IEV2ZW50RGF0YSkge1xuXG4gICAgfVxuXG4gICAgX2hhbmRsZUFmdGVyVHJpbmhLeShldnQpIHtcbiAgICAgICAgZGVsZXRlIHRoaXMubW9kZWwuZGF0YVtLZXlGbGFzaFNob3ddO1xuICAgICAgICB0aGlzLl9oYW5kbGVDYW5jZWwoZXZ0KTtcbiAgICB9XG5cbiAgICBfaGFuZGxlU2F2ZShldnQpIHtcbiAgICAgICAgaWYgKHRoaXMubW9kZWwuc3VibWl0dGluZykgcmV0dXJuO1xuICAgICAgICB0aGlzLm1vZGVsLnN1Ym1pdHRpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLnNhdmUoKTtcbiAgICAgICAgdGhpcy5vblNhdmUuZW1pdChldnQpO1xuICAgIH1cblxuICAgIF9oYW5kbGVDYW5jZWwoZXZ0KSB7XG4gICAgICAgIHRoaXMub25DYW5jZWwuZW1pdChldnQpO1xuICAgIH1cblxuICAgIF9oYW5kbGVNZXNzYWdlKGV2dCkge1xuICAgICAgICB0aGlzLm9uTWVzc2FnZS5lbWl0KGV2dCk7XG4gICAgfVxuXG4gICAgX3NldERpc2FibGVDb250cm9sKHVuaXF1ZUZpZWxkLCBpc0Rpc2FibGVkKSB7XG4gICAgICAgIHRoaXMuY3J1ZEZvcm0uZm9ybUNvbnRyb2xzW3VuaXF1ZUZpZWxkXS5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gICAgfVxuXG4gICAgX3NldEhpZGRlbkNvbnRyb2wodW5pcXVlRmllbGQsIGlzSGlkZGVuKSB7XG4gICAgICAgIHRoaXMuY3J1ZEZvcm0uZm9ybUNvbnRyb2xzW3VuaXF1ZUZpZWxkXS5oaWRkZW4gPSBpc0hpZGRlbjtcbiAgICB9XG5cbiAgICBfZ2V0Rm9ybVN0YXRlKCk6IEZvcm1TdGF0ZSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1vZGVsLmZvcm1TdGF0ZTtcbiAgICB9XG5cbiAgICBfaXNGb3JtQWRkTmV3KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0Rm9ybVN0YXRlKCkgPT0gRm9ybVN0YXRlLkFERDtcbiAgICB9XG5cbiAgICBfaXNGb3JtRWRpdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldEZvcm1TdGF0ZSgpID09IEZvcm1TdGF0ZS5FRElUO1xuICAgIH1cblxuICAgIF9pc0Zvcm1WaWV3KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0Rm9ybVN0YXRlKCkgPT0gRm9ybVN0YXRlLlZJRVc7XG4gICAgfVxufVxuIl19
|
|
925
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1mb3JtLWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90bngtc2hhcmVkL3NyYy9saWIvY2xhc3Nlcy9iYXNlL2RhdGEtZm9ybS1iYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBRUgsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osUUFBUSxFQUNSLEtBQUssRUFHTCxNQUFNLEVBQ04sU0FBUyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzFELE9BQU8sRUFBbUIsaUJBQWlCLEVBQUUsTUFBTSxxREFBcUQsQ0FBQztBQUN6RyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUMzRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGlCQUFpQixFQUFFLDRCQUE0QixFQUFFLDJCQUEyQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbEgsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUVoRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzFELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUs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VCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxhQUFhO1FBQ1QsT0FBTyxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksU0FBUyxDQUFDLEdBQUcsQ0FBQztJQUNqRCxDQUFDO0lBRUQsV0FBVztRQUNQLE9BQU8sSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUM7SUFDbEQsQ0FBQztJQUVELFdBQVc7UUFDUCxPQUFPLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDO0lBQ2xELENBQUM7OztZQW44QkosU0FBUzs7O1lBMUROLFFBQVE7Ozt1QkE2RFAsU0FBUyxTQUFDLGlCQUFpQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTswQkFDOUMsU0FBUyxTQUFDLGFBQWEsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7c0JBQ3pDLFNBQVMsU0FBQyxTQUFTLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFOzRCQUVyQyxLQUFLO29CQUNMLEtBQUs7NEJBQ0wsS0FBSztxQkFFTCxNQUFNO3NCQUNOLE1BQU07dUJBQ04sTUFBTTt3QkFDTixNQUFNOzBCQUNOLE1BQU07MkJBQ04sTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBEaXJlY3RpdmUsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSW5qZWN0b3IsXG4gICAgSW5wdXQsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXQsXG4gICAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBGaWxlVXBsb2FkIH0gZnJvbSAndG4tY3VzdG9tLXByaW1lbmcvZmlsZXVwbG9hZCc7XG5pbXBvcnQgeyBDb250cm9sVHJlZU5vZGUsIENydWRGb3JtQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9jcnVkL2NydWQtZm9ybS9jcnVkLWZvcm0uY29tcG9uZW50JztcbmltcG9ydCB7IENPTkZJR19DQUxFTkRBUl9WSUVUTkFNRVNFIH0gZnJvbSAnLi4vLi4vY29uZmlncy9jYWxlbmRhci5jb25maWcnO1xuaW1wb3J0IHsgQ29tQ3R4Q29uc3RhbnRzIH0gZnJvbSAnLi4vLi4vY29uZmlncy9jb21wb25lbnQtY29udGV4dC5jb25zdGFudCc7XG5pbXBvcnQgeyBEYXRhU291cmNlQm9vbGVhbiwgRmllbGREZWZpbmVJc1Rhc2tGb3JtQ29udHJvbCwgRmllbGRXb3JrZmxvd0NvZGVJbkNydWRGb3JtIH0gZnJvbSAnLi4vLi4vY29uc3QvY29tbW9uJztcbmltcG9ydCB7IFBlcm1pc3Npb25CYXNlIH0gZnJvbSAnLi4vLi4vZW51bXMvY29tbW9uJztcbmltcG9ydCB7IEZpbHRlciB9IGZyb20gJy4uLy4uL21vZGVscy9ncmlkLWluZm8nO1xuaW1wb3J0IHsgUmVzcG9uc2VSZXN1bHQgfSBmcm9tICcuLi8uLi9tb2RlbHMvcmVzcG9uc2UtcmVzdWx0JztcbmltcG9ydCB7IENvbW1vblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb21tb24uc2VydmljZSc7XG5pbXBvcnQgeyBDcnVkU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NydWQuc2VydmljZSc7XG5pbXBvcnQgeyBDdXN0b21Sb3V0ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY3VzdG9tLXJvdXRlci5zZXJ2aWNlJztcbmltcG9ydCB7IERvbVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kb20uc2VydmljZSc7XG5pbXBvcnQgeyBFbnRpdHlNZXRhZGF0YVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9lbnRpdHktbWV0YWRhdGEuc2VydmljZSc7XG5pbXBvcnQgeyBNYXN0ZXJEYXRhU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL21hc3Rlci1kYXRhLnNlcnZpY2UnO1xuaW1wb3J0IHsgTW9kdWxlQ29uZmlnU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL21vZHVsZS1jb25maWcuc2VydmljZSc7XG5pbXBvcnQgeyBOb3RpZmllclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9ub3RpZmllci5zZXJ2aWNlJztcbmltcG9ydCB7IFVzZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdXNlci5zZXJ2aWNlJztcbmltcG9ydCB7IEZvcm1TdGF0ZSwgS2V5Rmxhc2hTaG93IH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IGlzTGl0ZXJhbE9iamVjdCwgaXNWYWxpZERhdGUgfSBmcm9tICcuLi9lbnZpcm9ubWVudC1zY2hlbWEnO1xuaW1wb3J0IHtcbiAgICBBdXRvQ29tcGxldGVQaWNrZXJDb250cm9sU2NoZW1hLFxuICAgIENoZWNrYm94Q29udHJvbFNjaGVtYSxcbiAgICBDb250YWluZXJTY2hlbWEsXG4gICAgQ3J1ZEZvcm1EYXRhLFxuICAgIENydWRGb3JtU2V0dGluZyxcbiAgICBDcnVkTGlzdFNldHRpbmcsXG4gICAgQ3VzdG9tQ29udHJvbFNjaGVtYSxcbiAgICBEYXRlVGltZUNvbnRyb2xTY2hlbWEsXG4gICAgRHJvcGRvd25Db250cm9sU2NoZW1hLFxuICAgIEVkaXRvckNvbnRyb2xTY2hlbWEsXG4gICAgRW51bUxvZ1R5cGUsXG4gICAgRXZlbnREYXRhLFxuICAgIEV2ZW50VHlwZSxcbiAgICBGaWxlTWFuYWdlckNvbnRyb2xTY2hlbWEsXG4gICAgRmlsZVVwbG9hZENvbnRyb2xTY2hlbWEsXG4gICAgRm9ybUNvbnRyb2xCYXNlLFxuICAgIExvZ0NvbHVtbixcbiAgICBMb2dTZXR0aW5nLFxuICAgIE1hc2tDb250cm9sU2NoZW1hLFxuICAgIE9wZXJhdG9yLFxuICAgIFN3aXRjaENvbnRyb2xTY2hlbWEsXG4gICAgVGFibGVTY2hlbWEsXG4gICAgVGV4dEFyZWFDb250cm9sU2NoZW1hLFxuICAgIFRpdGxlU2NoZW1hXG59IGZyb20gJy4uL2Zvcm0tc2NoZW1hJztcbmltcG9ydCB7IENvbXBvbmVudEJhc2VXaXRoQnV0dG9uIH0gZnJvbSAnLi9jb21wb25lbnQtYmFzZS13aXRoLWJ1dHRvbic7XG5pbXBvcnQgeyBSZXF1aXJlZFZhbGlkYXRvciB9IGZyb20gJy4vdmFsaWRhdG9ycyc7XG5pbXBvcnQgeyBEZWNpbWFsUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIERhdGFGb3JtQmFzZSBleHRlbmRzIENvbXBvbmVudEJhc2VXaXRoQnV0dG9uIGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuXG4gICAgQFZpZXdDaGlsZChDcnVkRm9ybUNvbXBvbmVudCwgeyBzdGF0aWM6IGZhbHNlIH0pIGNydWRGb3JtOiBDcnVkRm9ybUNvbXBvbmVudDtcbiAgICBAVmlld0NoaWxkKCdmb3JtRWxlbWVudCcsIHsgc3RhdGljOiB0cnVlIH0pIGZvcm1FbGVtZW50OiBFbGVtZW50UmVmO1xuICAgIEBWaWV3Q2hpbGQoJ3BVcGxvYWQnLCB7IHN0YXRpYzogdHJ1ZSB9KSBwVXBsb2FkOiBGaWxlVXBsb2FkO1xuXG4gICAgQElucHV0KCkgcGFyZW50U2V0dGluZzogQ3J1ZExpc3RTZXR0aW5nO1xuICAgIEBJbnB1dCgpIG1vZGVsOiBDcnVkRm9ybURhdGEgPSBuZXcgQ3J1ZEZvcm1EYXRhKCk7XG4gICAgQElucHV0KCkgZm9yY2VPbmx5VmlldzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQE91dHB1dCgpIG9uU2F2ZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgb25TYXZlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgb25DYW5jZWw6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIG9uTWVzc2FnZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgb25Gb3JtUmVhZHk6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIG9uRGF0YUJpbmRlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAgIGRvTm90Q2hlY2tCYXNlU2VydmljZSA9IGZhbHNlO1xuICAgIHByaXZhdGUgbm90Q29uZmlnQmFzZVNlcnZpY2VNZXNzYWdlID0gJ0NoxrBhIGPhuqV1IGjDrG5oIENSVUQgYmFzZSBzZXJ2aWNlJztcbiAgICBtZXNzYWdlSW5zZXJ0U3VjY2VzcyA9ICcnO1xuICAgIG1lc3NhZ2VVcGRhdGVTdWNjZXNzID0gJyc7XG4gICAgc2V0dGluZzogQ3J1ZEZvcm1TZXR0aW5nID0gbmV3IENydWRGb3JtU2V0dGluZygpO1xuICAgIGxvZ1NldHRpbmc6IExvZ1NldHRpbmcgPSBuZXcgTG9nU2V0dGluZygpO1xuXG4gICAgdmkgPSBDT05GSUdfQ0FMRU5EQVJfVklFVE5BTUVTRTtcblxuICAgIGZvcm1Db250cm9sczogYW55O1xuICAgIGZvcm1Db250cm9sc0xpc3QgPSB7fTtcbiAgICBlbnZpcm9ubWVudDogYW55ID0ge307XG4gICAgbWRXaWR0aFdvcmtmbG93OiBudW1iZXI7XG5cbiAgICBhdXRvR2V0RGV0YWlsID0gdHJ1ZTtcbiAgICBhdXRvU2F2ZSA9IHRydWU7XG4gICAgaXNDbG9zZUZvcm0gPSB0cnVlO1xuICAgIG1lc3NhZ2VDb25maXJtU2F2ZTogc3RyaW5nO1xuICAgIHNhdmluZyA9IGZhbHNlO1xuICAgIGdldERldGFpbFBsdXNVcmwgPSBudWxsO1xuICAgIGluc2VydFBsdXNVcmwgPSBudWxsO1xuICAgIHVwZGF0ZVBsdXNVcmwgPSBudWxsO1xuICAgIGR5bmFtaWNDb250cm9sOiBhbnkgPSB7fTtcbiAgICBzZXRWYWxpZGF0ZUZvcm0gPSB0cnVlO1xuICAgIGhhdmVFbnRpdHlNZXRhZGF0YUFQSSA9IHRydWU7XG4gICAgaXNCYXNlTW9kZWwgPSB0cnVlO1xuICAgIGF1dG9HZW5lcmF0ZUlkID0gdHJ1ZTtcbiAgICBwdWJsaWMgX19pc0Zvcm1WaWV3OiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBwdWJsaWMgX25vdGlmaWVyU2VydmljZTogTm90aWZpZXJTZXJ2aWNlO1xuICAgIHB1YmxpYyBfbWFzdGVyRGF0YVNlcnZpY2U6IE1hc3RlckRhdGFTZXJ2aWNlO1xuICAgIHB1YmxpYyBfcm91dGVyOiBSb3V0ZXI7XG4gICAgcHVibGljIF9hY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGU7XG4gICAgcHVibGljIF90cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlO1xuICAgIHB1YmxpYyBfY3VzdG9tUm91dGVyU2VydmljZTogQ3VzdG9tUm91dGVyU2VydmljZTtcbiAgICBwdWJsaWMgX2NydWRTZXJ2aWNlOiBDcnVkU2VydmljZTtcbiAgICBwdWJsaWMgX2RvbVNlcnZpY2U6IERvbVNlcnZpY2U7XG4gICAgcHVibGljIF9lbnRpdHlNZXRhZGF0YVNlcnZpY2U6IEVudGl0eU1ldGFkYXRhU2VydmljZTtcbiAgICBwdWJsaWMgX3VzZXJTZXJ2aWNlOiBVc2VyU2VydmljZTtcbiAgICBwdWJsaWMgX251bWJlclBpcGU6IERlY2ltYWxQaXBlO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIF9pbmplY3RvcjogSW5qZWN0b3JcbiAgICApIHtcbiAgICAgICAgc3VwZXIoX2luamVjdG9yKTtcbiAgICAgICAgY29uc3QgbW9kdWxlQ29uZmlnU2VydmljZSA9IF9pbmplY3Rvci5nZXQoTW9kdWxlQ29uZmlnU2VydmljZSk7XG4gICAgICAgIHRoaXMuZW52aXJvbm1lbnQgPSBtb2R1bGVDb25maWdTZXJ2aWNlLmdldENvbmZpZygpLmVudmlyb25tZW50O1xuICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoTm90aWZpZXJTZXJ2aWNlKTtcbiAgICAgICAgdGhpcy5fbnVtYmVyUGlwZSA9IHRoaXMuX2luamVjdG9yLmdldChEZWNpbWFsUGlwZSk7XG4gICAgICAgIHRoaXMuX21hc3RlckRhdGFTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KE1hc3RlckRhdGFTZXJ2aWNlKTtcbiAgICAgICAgdGhpcy5fcm91dGVyID0gdGhpcy5faW5qZWN0b3IuZ2V0KFJvdXRlcik7XG4gICAgICAgIHRoaXMuX2FjdGl2YXRlZFJvdXRlID0gdGhpcy5faW5qZWN0b3IuZ2V0KEFjdGl2YXRlZFJvdXRlKTtcbiAgICAgICAgdGhpcy5fdHJhbnNsYXRlU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChUcmFuc2xhdGVTZXJ2aWNlKTtcbiAgICAgICAgdGhpcy5fY3VzdG9tUm91dGVyU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChDdXN0b21Sb3V0ZXJTZXJ2aWNlKTtcbiAgICAgICAgdGhpcy5fY3J1ZFNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoQ3J1ZFNlcnZpY2UpO1xuICAgICAgICB0aGlzLl9kb21TZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KERvbVNlcnZpY2UpO1xuICAgICAgICB0aGlzLl9lbnRpdHlNZXRhZGF0YVNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoRW50aXR5TWV0YWRhdGFTZXJ2aWNlKTtcbiAgICAgICAgdGhpcy5fdXNlclNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoVXNlclNlcnZpY2UpO1xuICAgICAgICB0aGlzLl9jb21tb25TZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KENvbW1vblNlcnZpY2UpO1xuXG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIC8vIHRoaXMuY2hlY2tQZXJtaXNzaW9uKHRoaXMubW9kZWwuZGF0YS5iYXNlUGVybWlzc2lvbik7XG5cbiAgICAgICAgY29uc3QgZGVmYXVsdFNldHRpbmcgPSBuZXcgQ3J1ZEZvcm1TZXR0aW5nKCk7XG4gICAgICAgIGNvbnN0IGNhdUhpbmhOZ2hpZXBWdSA9IHRoaXMuZW52aXJvbm1lbnQ/LmNhdUhpbmhOZ2hpZXBWdTtcbiAgICAgICAgaWYgKGNhdUhpbmhOZ2hpZXBWdSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gY2F1SGluaE5naGllcFZ1KSB7XG4gICAgICAgICAgICAgICAgaWYgKGRlZmF1bHRTZXR0aW5nW2tleV0gPT0gdGhpcy5zZXR0aW5nW2tleV1cbiAgICAgICAgICAgICAgICAgICAgJiYgdGhpcy5zZXR0aW5nW2tleV0gIT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgICYmIGNhdUhpbmhOZ2hpZXBWdVtrZXldICE9IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICAmJiB0aGlzLnNldHRpbmdba2V5XSAhPSBjYXVIaW5oTmdoaWVwVnVba2V5XSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmdba2V5XSA9IGNhdUhpbmhOZ2hpZXBWdVtrZXldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgfVxuICAgIGNoZWNrUGVybWlzc2lvbihiYXNlUGVybWlzc2lvbikge1xuICAgICAgICBpZiAodGhpcy5pc0Jhc2VNb2RlbCkge1xuICAgICAgICAgICAgaWYgKHRoaXMubW9kZWwuZm9ybVN0YXRlID09IEZvcm1TdGF0ZS5FRElUKSB7XG4gICAgICAgICAgICAgICAgaWYgKGJhc2VQZXJtaXNzaW9uICYgUGVybWlzc2lvbkJhc2UuRURJVCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLmZvcm1TdGF0ZSA9IEZvcm1TdGF0ZS5FRElUO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5mb3JtU3RhdGUgPSBGb3JtU3RhdGUuVklFVztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5tb2RlbC5kYXRhLmlzQnVpbGRJbkFsbCAmJiAhdGhpcy5fdXNlclNlcnZpY2UuaXNTdXBlclVzZXIoKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLmZvcm1TdGF0ZSA9IEZvcm1TdGF0ZS5WSUVXO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX19pc0Zvcm1WaWV3ID0gdGhpcy5faXNGb3JtVmlldygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgYWRkU2NoZW1hQmFzZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuX3VzZXJTZXJ2aWNlLmlzU3VwZXJVc2VyKClcbiAgICAgICAgICAgICYmIHRoaXMubW9kZWxcbiAgICAgICAgICAgICYmIHRoaXMubW9kZWwuZGF0YS5oYXNCdWlsZEluXG4gICAgICAgICAgICAmJiB0aGlzLnNldHRpbmcuc2NoZW1hXG4gICAgICAgICAgICAmJiB0aGlzLnNldHRpbmcuc2NoZW1hLmxlbmd0aCA+IDBcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLnNldHRpbmcuc2NoZW1hLnB1c2goXG4gICAgICAgICAgICAgICAgbmV3IFN3aXRjaENvbnRyb2xTY2hlbWEoe1xuICAgICAgICAgICAgICAgICAgICBmaWVsZDogJ2lzQnVpbGRJbicsXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnS2jDs2EgbcOjJyxcbiAgICAgICAgICAgICAgICAgICAgbWRXaWR0aDogNFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5zZXR0aW5nLnNjaGVtYS5wdXNoKFxuICAgICAgICAgICAgICAgIG5ldyBTd2l0Y2hDb250cm9sU2NoZW1hKHtcbiAgICAgICAgICAgICAgICAgICAgZmllbGQ6ICdpc0J1aWxkSW5BbGwnLFxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ0tow7NhIGLhuqNuIGdoaScsXG4gICAgICAgICAgICAgICAgICAgIG1kV2lkdGg6IDRcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnBhcmVudFNldHRpbmdcbiAgICAgICAgICAgICYmIHRoaXMuX2lzRm9ybUFkZE5ldygpXG4gICAgICAgICkge1xuICAgICAgICAgICAgbGV0IGRhdGFTb3VyY2UgPSBbXSwgZGVmYXVsdFZhbHVlID0gbnVsbCwgaGFzV29ya2Zsb3cgPSBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IGluaXREYXRhVGFza0Zvcm06IGFueSA9IHt9O1xuICAgICAgICAgICAgaWYgKHRoaXMucGFyZW50U2V0dGluZy53b3JrZmxvd1NldHRpbmdOZXcgJiYgdGhpcy5wYXJlbnRTZXR0aW5nLndvcmtmbG93U2V0dGluZ05ldy53b3JrZmxvd3MubGVuZ3RoID4gMFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgZGF0YVNvdXJjZSA9IHRoaXMucGFyZW50U2V0dGluZy53b3JrZmxvd1NldHRpbmdOZXcud29ya2Zsb3dzO1xuICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZSA9IHRoaXMucGFyZW50U2V0dGluZy53b3JrZmxvd1NldHRpbmdOZXcud29ya2Zsb3dDb2RlO1xuICAgICAgICAgICAgICAgIGhhc1dvcmtmbG93ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLmRhdGEuY3JlYXRlVGFza0luc3RlYWQgPSB0aGlzLnBhcmVudFNldHRpbmcud29ya2Zsb3dTZXR0aW5nTmV3LmNyZWF0ZVRhc2tJbnN0ZWFkO1xuICAgICAgICAgICAgICAgIGluaXREYXRhVGFza0Zvcm0uaWRMb2FpQ29uZ1ZpZWMgPSB0aGlzLnBhcmVudFNldHRpbmcud29ya2Zsb3dTZXR0aW5nTmV3LmlkTG9haUNvbmdWaWVjRGVmYXVsdDtcbiAgICAgICAgICAgICAgICBpbml0RGF0YVRhc2tGb3JtLl9fdGVtcGxhdGVUYXNrTmFtZSA9IHRoaXMucGFyZW50U2V0dGluZy53b3JrZmxvd1NldHRpbmdOZXcudGVtcGxhdGVUYXNrTmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMucGFyZW50U2V0dGluZy5pc1dvcmtmbG93VHJlZSkge1xuICAgICAgICAgICAgICAgIGhhc1dvcmtmbG93ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChoYXNXb3JrZmxvdykge1xuICAgICAgICAgICAgICAgIHRoaXMuZHluYW1pY0NvbnRyb2xbRmllbGREZWZpbmVJc1Rhc2tGb3JtQ29udHJvbF0gPSBuZXcgQ3VzdG9tQ29udHJvbFNjaGVtYSh7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkOiBGaWVsZERlZmluZUlzVGFza0Zvcm1Db250cm9sLFxuICAgICAgICAgICAgICAgICAgICBtZFdpZHRoOiAxMixcbiAgICAgICAgICAgICAgICAgICAgc2hvd0xhYmVsOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M6ICduby1wYWRkaW5nJyxcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogaW5pdERhdGFUYXNrRm9ybSxcbiAgICAgICAgICAgICAgICAgICAgaGlkZGVuQ2hlY2s6IChyb290TW9kZWwpID0+ICFyb290TW9kZWwgfHwgIXJvb3RNb2RlbC5jcmVhdGVUYXNrSW5zdGVhZFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZy5zY2hlbWEucHVzaChcbiAgICAgICAgICAgICAgICAgICAgbmV3IERyb3Bkb3duQ29udHJvbFNjaGVtYSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogRmllbGRXb3JrZmxvd0NvZGVJbkNydWRGb3JtLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICdRdXkgdHLDrG5oIHPhu60gZOG7pW5nJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFTb3VyY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZUZpZWxkOiAnY29kZScsXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5RmllbGQ6ICd0aXRsZScsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZFdpZHRoOiB0aGlzLm1kV2lkdGhXb3JrZmxvdyB8fCAxMixcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZUNhY2hpbmc6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGlkZGVuQ2hlY2s6IChyb290TW9kZWwpID0+ICFyb290TW9kZWwgfHwgcm9vdE1vZGVsLmNyZWF0ZVRhc2tJbnN0ZWFkLFxuICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2VkOiBhc3luYyAoZXZ0OiBFdmVudERhdGEpID0+IGF3YWl0IHRoaXMuaGFuZGxlQ2hhbmdlV29ya2Zsb3dDb2RlKGV2dCksXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkFkanVzdGVkVmFsdWU6IGFzeW5jIChldnQ6IEV2ZW50RGF0YSkgPT4gYXdhaXQgdGhpcy5oYW5kbGVDaGFuZ2VXb3JrZmxvd0NvZGUoZXZ0KVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucGFyZW50U2V0dGluZy53b3JrZmxvd1NldHRpbmdOZXdcbiAgICAgICAgICAgICAgICAgICAgJiYgdGhpcy5wYXJlbnRTZXR0aW5nLndvcmtmbG93U2V0dGluZ05ldy50YXNrSW5zaWRlQnVzaW5lc3NGb3JtXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZy5zY2hlbWEucHVzaChcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBUaXRsZVNjaGVtYSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogJ0PDtG5nIHZp4buHYycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlkZGVuQ2hlY2s6IChyb290TW9kZWwpID0+ICFyb290TW9kZWwgfHwgIXJvb3RNb2RlbC5jcmVhdGVUYXNrSW5zdGVhZFxuICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmR5bmFtaWNDb250cm9sW0ZpZWxkRGVmaW5lSXNUYXNrRm9ybUNvbnRyb2xdXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgaGFuZGxlQ2hhbmdlV29ya2Zsb3dDb2RlKGV2dDogRXZlbnREYXRhKSB7XG5cbiAgICB9XG5cbiAgICBzZXRXb3JrZmxvd0RhdGFzb3VyY2UoZXZ0OiBFdmVudERhdGEsIHdvcmtmbG93U2V0dGluZykge1xuICAgICAgICBldnQuZm9ybUNvbnRyb2xzW0ZpZWxkV29ya2Zsb3dDb2RlSW5DcnVkRm9ybV0uZGF0YVNvdXJjZSA9IHdvcmtmbG93U2V0dGluZy53b3JrZmxvd3M7XG4gICAgICAgIGlmICghZXZ0LnJvb3RNb2RlbFtGaWVsZFdvcmtmbG93Q29kZUluQ3J1ZEZvcm1dKSB7XG4gICAgICAgICAgICBldnQucm9vdE1vZGVsW0ZpZWxkV29ya2Zsb3dDb2RlSW5DcnVkRm9ybV0gPSB3b3JrZmxvd1NldHRpbmcud29ya2Zsb3dDb2RlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCF3b3JrZmxvd1NldHRpbmcud29ya2Zsb3dzLnNvbWUoeCA9PiB4LmNvZGUgPT0gZXZ0LnJvb3RNb2RlbFtGaWVsZFdvcmtmbG93Q29kZUluQ3J1ZEZvcm1dKSkge1xuICAgICAgICAgICAgZXZ0LnJvb3RNb2RlbFtGaWVsZFdvcmtmbG93Q29kZUluQ3J1ZEZvcm1dID0gd29ya2Zsb3dTZXR0aW5nLndvcmtmbG93Q29kZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIF9oYW5kbGVGb3JtUmVhZHkoZm9ybUV2ZW50OiBFdmVudERhdGEpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5fX2hhbmRsZUZvcm1SZWFkeShmb3JtRXZlbnQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgX19oYW5kbGVGb3JtUmVhZHkoZm9ybUV2ZW50OiBFdmVudERhdGEpIHtcbiAgICAgICAgaWYgKCF0aGlzLmRvTm90Q2hlY2tCYXNlU2VydmljZSAmJiAhdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlKSB7XG4gICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcodGhpcy5ub3RDb25maWdCYXNlU2VydmljZU1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZm9ybUNvbnRyb2xzID0gZm9ybUV2ZW50LmZvcm1Db250cm9scztcbiAgICAgICAgYXdhaXQgdGhpcy5vbkZvcm1Jbml0aWFsaXplZChmb3JtRXZlbnQpO1xuICAgICAgICB0aGlzLm9uRm9ybVJlYWR5LmVtaXQoe1xuICAgICAgICAgICAgZWxlbWVudDogdGhpcyxcbiAgICAgICAgICAgIHNldHRpbmc6IHRoaXMuc2V0dGluZyxcbiAgICAgICAgICAgIGZvcm1FdmVudFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fdHJpZ2dlckdldERldGFpbCgpO1xuICAgIH1cblxuICAgIF90cmlnZ2VyR2V0RGV0YWlsKCkge1xuICAgICAgICBpZiAodGhpcy5hdXRvR2V0RGV0YWlsKSB7XG4gICAgICAgICAgICB0aGlzLmdldERldGFpbCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMuY3J1ZEZvcm0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNydWRGb3JtLmluaXRDb250cm9sRGVmYXVsdFZhbHVlRnJvbUV4dGVybmFsKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jcnVkRm9ybS5maXJlTW9kZWxDaGFuZ2VkKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBvbkJlZm9yZUdldERldGFpbCgpIHtcbiAgICB9XG5cbiAgICBhc3luYyBnZXRPYmplY3REZXRhaWwoKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLmdldERldGFpbFdpdGhQZXJtaXNzaW9uKHRoaXMubW9kZWwuZGF0YS5pZCwgdGhpcy5tb2RlbC5kYXRhLnBpZCwgdGhpcy5nZXREZXRhaWxQbHVzVXJsKTtcbiAgICB9XG5cbiAgICBhc3luYyBnZXREZXRhaWxDdXN0b20oKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGdldERldGFpbCgpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0Q2hlY2sgPSBhd2FpdCB0aGlzLmdldERldGFpbEN1c3RvbSgpO1xuICAgICAgICAvLyBLaMO0bmcgb3ZlcnJpZGVcbiAgICAgICAgaWYgKHJlc3VsdENoZWNrID09IG51bGwpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5faXNGb3JtQWRkTmV3KCkpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLm9uQmVmb3JlR2V0RGV0YWlsKCk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY3J1ZEZvcm0pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jcnVkRm9ybS5zZXRJc0xvYWRlZERhdGFFZGl0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmdldE9iamVjdERldGFpbCgpO1xuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5kYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMubW9kaWZ5RGV0YWlsRGF0YShyZXNwb25zZS5kYXRhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fcHJvY2Vzc0FmdGVyR2V0RGF0YShyZXNwb25zZS5kYXRhKTtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLm9uQWZ0ZXJHZXREZXRhaWwocmVzcG9uc2UuZGF0YSk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubG9nU2V0dGluZy5pc0VuYWJsZUxvZykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ1NldHRpbmcudmFsdWVCZWZvcmVVcGRhdGUgPSB0aGlzLl9jb21tb25TZXJ2aWNlLmNsb25lT2JqZWN0KHJlc3BvbnNlLmRhdGEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNydWRGb3JtKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGV2ZW50ID0gbmV3IEV2ZW50RGF0YSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Tm9kZTogdGhpcy5jcnVkRm9ybS5fcm9vdE5vZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudFR5cGU6IEV2ZW50VHlwZS5GT1JNX1JFQURZLFxuICAgICAgICAgICAgICAgICAgICAgICAgY3J1ZEZvcm06IHRoaXMuY3J1ZEZvcm1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuaW5pdERhdGFBZGQoZXZlbnQpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmluaXREZWZhdWx0U2V0dGluZ0ZpbGVDb250cm9sKGV2ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jcnVkRm9ybS5pbml0Q29udHJvbERlZmF1bHRWYWx1ZUZyb21FeHRlcm5hbCgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNydWRGb3JtLmZpcmVNb2RlbENoYW5nZWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gT3ZlcnJpZGUgY8OhY2ggbOG6pXkgZOG7ryBsaeG7h3UgZ2V0RGV0YWlsXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKHJlc3VsdENoZWNrLnN1Y2Nlc3MgJiYgcmVzdWx0Q2hlY2suZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5tb2RlbC5mb3JtU3RhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5mb3JtU3RhdGUgPSBGb3JtU3RhdGUuRURJVDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY3J1ZEZvcm0pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jcnVkRm9ybS5zZXRJc0xvYWRlZERhdGFFZGl0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5tb2RpZnlEZXRhaWxEYXRhKHJlc3VsdENoZWNrLmRhdGEpO1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3Byb2Nlc3NBZnRlckdldERhdGEocmVzdWx0Q2hlY2suZGF0YSk7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5vbkFmdGVyR2V0RGV0YWlsKHJlc3VsdENoZWNrLmRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5mb3JtU3RhdGUgPSBGb3JtU3RhdGUuQUREO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNydWRGb3JtKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGV2ZW50ID0gbmV3IEV2ZW50RGF0YSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Tm9kZTogdGhpcy5jcnVkRm9ybS5fcm9vdE5vZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudFR5cGU6ICdmb3JtUmVhZHknLFxuICAgICAgICAgICAgICAgICAgICAgICAgY3J1ZEZvcm06IHRoaXMuY3J1ZEZvcm1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuaW5pdERhdGFBZGQoZXZlbnQpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmluaXREZWZhdWx0U2V0dGluZ0ZpbGVDb250cm9sKGV2ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jcnVkRm9ybS5pbml0Q29udHJvbERlZmF1bHRWYWx1ZUZyb21FeHRlcm5hbCgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNydWRGb3JtLmZpcmVNb2RlbENoYW5nZWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBpbml0RGF0YUFkZChldnQ6IEV2ZW50RGF0YSkgeyB9XG5cbiAgICBwcml2YXRlIGluaXREZWZhdWx0U2V0dGluZ0ZpbGVDb250cm9sKGV2dDogRXZlbnREYXRhKSB7XG4gICAgICAgIGlmICghZXZ0LnJvb3RNb2RlbC5pZCAmJiB0aGlzLnNldHRpbmcuc2NoZW1hLnNvbWUocCA9PiAocCBpbnN0YW5jZW9mIEZpbGVNYW5hZ2VyQ29udHJvbFNjaGVtYSkpKSB7XG4gICAgICAgICAgICBldnQucm9vdE1vZGVsLmlkID0gdGhpcy5fY29tbW9uU2VydmljZS5ndWlkKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQaOG6o2kgZ+G7jWkgaMOgbSBuw6B5IGtoaSBvdmVycmlkZSBnZXREZXRhaWxcbiAgICAgKi9cbiAgICBhc3luYyBfcHJvY2Vzc0FmdGVyR2V0RGF0YShkYXRhKSB7XG4gICAgICAgIGlmICghZGF0YSkge1xuICAgICAgICAgICAgZGF0YSA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gRHV54buHdCBjw6FjIGNvbnRyb2wgZGF0ZXRpbWUgxJHhu4MgY29udmVydCB2YWx1ZSBzYW5nIGRhdGV0aW1lXG4gICAgICAgICAgICB0aGlzLnNldHRpbmcuc2NoZW1hLmZvckVhY2goc2NoZW1hID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpeERhdGVWYWx1ZShzY2hlbWEsIGRhdGEpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZGF0YS5fX2Rpc2FibGVFZGl0ID0gdGhpcy5tb2RlbC5kYXRhLl9fZGlzYWJsZUVkaXQ7XG5cbiAgICAgICAgLy8gU2V0IGJhc2VQZXJtaXNzaW9uIHThu6sgY3J1ZGxpc3RcbiAgICAgICAgaWYgKHRoaXMubW9kZWwuZGF0YS5iYXNlUGVybWlzc2lvbiAmJiB0aGlzLm1vZGVsLmRhdGEuYmFzZVBlcm1pc3Npb24gPT09IFBlcm1pc3Npb25CYXNlLkZVTEwpIHtcbiAgICAgICAgICAgIGRhdGEuYmFzZVBlcm1pc3Npb24gPSB0aGlzLm1vZGVsLmRhdGEuYmFzZVBlcm1pc3Npb247XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm1vZGVsLmRhdGEgPSBkYXRhO1xuICAgICAgICBpZiAoZGF0YS5waWQgJiYgZGF0YS5waWQgIT0gdGhpcy5ndWlkRW1wdHkgJiYgZGF0YS5iYXNlUGVybWlzc2lvbkJ5UGlkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tQZXJtaXNzaW9uKGRhdGEuYmFzZVBlcm1pc3Npb25CeVBpZCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNoZWNrUGVybWlzc2lvbihkYXRhLmJhc2VQZXJtaXNzaW9uKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5mb3JjZU9ubHlWaWV3KSB7XG4gICAgICAgICAgICB0aGlzLl9faXNGb3JtVmlldyA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLm1vZGVsLmZvcm1TdGF0ZSA9IEZvcm1TdGF0ZS5WSUVXO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuY3J1ZEZvcm0pIHtcbiAgICAgICAgICAgIHRoaXMuY3J1ZEZvcm0uc3dpdGNoVmlld01vZGUodGhpcy5fX2lzRm9ybVZpZXcpO1xuICAgICAgICAgICAgdGhpcy5jcnVkRm9ybS5zd2l0Y2hGb3JtU3RhdGVGb3JVc2VycGlja2VyKHRoaXMuX2lzRm9ybUFkZE5ldygpKTtcbiAgICAgICAgICAgIHRoaXMuY3J1ZEZvcm0uZGF0YSA9IGRhdGE7XG4gICAgICAgICAgICB0aGlzLmNydWRGb3JtLnNldElzTG9hZGVkRGF0YUVkaXQodHJ1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlXG4gICAgICAgICAgICAmJiB0aGlzLmhhdmVFbnRpdHlNZXRhZGF0YUFQSSAvLyBzZXR0aW5nIMSR4buDIGZpeCBs4buXaSBrIGxvYWQgZGMgZW50aXR5IG1ldGFkYXRhIGNobyBjxqEgY+G6pXUgdOG7lSBjaOG7qWMgc2VydmljZVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX2VudGl0eU1ldGFkYXRhU2VydmljZS5sb2FkKHRoaXMuc2V0dGluZy5iYXNlU2VydmljZSwgdGhpcy5jb250ZXh0LCB0cnVlKTsgLy8gZm9yY2UgbG9hZCDEkeG7gyDEkeG7jWMgdOG7qyBjc2RsXG4gICAgICAgICAgICBjb25zdCBlbmFibGVWZXJzaW9uID0gdGhpcy5fZW50aXR5TWV0YWRhdGFTZXJ2aWNlLmdldEJ5Q29kZSgnZW5hYmxlVmVyc2lvbicpO1xuICAgICAgICAgICAgaWYgKGVuYWJsZVZlcnNpb24gPT0gJzEnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmZpbHRlckNoZWNrRXhpc3RCeVZlcnNpb24gPSBbXG4gICAgICAgICAgICAgICAgICAgIG5ldyBGaWx0ZXIoe1xuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6ICdjb2RlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBPcGVyYXRvci5ub3RFcXVhbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBKU09OLnN0cmluZ2lmeSh0aGlzLm1vZGVsLmRhdGEuY29kZSlcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5kaXNhYmxlQnVpbGRJbkZpZWxkKCk7XG4gICAgICAgIGlmICh0aGlzLmxvZ1NldHRpbmcuaXNFbmFibGVMb2cpIHtcbiAgICAgICAgICAgIHRoaXMuZ2V0TG9nVmFsdWVBZnRlckxvYWREZXRhaWwoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldExvZ1ZhbHVlQWZ0ZXJMb2FkRGV0YWlsKCkge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY29udHJvbE5hbWUgb2YgT2JqZWN0LmtleXModGhpcy5mb3JtQ29udHJvbHMpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMuY3J1ZEZvcm0uZm9ybUNvbnRyb2xzW2NvbnRyb2xOYW1lXTtcbiAgICAgICAgICAgICAgICBpZiAoY29udHJvbE5hbWUuaW5jbHVkZXMoJy4nKSB8fCB0aGlzLmNydWRGb3JtLmZvcm1Db250cm9sc1tjb250cm9sTmFtZV0/LmhpZGRlbiA9PT0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICB8fCAhKGNvbnRyb2wgaW5zdGFuY2VvZiBBdXRvQ29tcGxldGVQaWNrZXJDb250cm9sU2NoZW1hKSkgY29udGludWU7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2dTZXR0aW5nLmFyclZhbHVlQWZ0ZXJVcGRhdGUucHVzaChcbiAgICAgICAgICAgICAgICAgICAgbmV3IExvZ0NvbHVtbih7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogY29udHJvbC5maWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBjb250cm9sLmxhYmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVCZWZvcmU6IGNvbnRyb2wuX2NvbXBvbmVudC5kYXRhU291cmNlLm1hcChwID0+IHAubGFiZWwpLmpvaW4oJywgJykgfHwgdGhpcy5sb2dTZXR0aW5nLmVtcHR5VmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB2aXNpYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlQWZ0ZXI6ICcnXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgMjAwMCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmaXhEYXRlVmFsdWUoY29udHJvbCwgcGFyZW50TW9kZWwsIHBhcmVudFBhdGg/KSB7XG4gICAgICAgIGxldCBfcGFyZW50UGF0aCA9IGNvbnRyb2wuZmllbGQ7XG4gICAgICAgIGlmIChwYXJlbnRQYXRoICE9IG51bGwpIF9wYXJlbnRQYXRoID0gcGFyZW50UGF0aCArICcuJyArIF9wYXJlbnRQYXRoO1xuXG4gICAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgVGFibGVTY2hlbWEpIHtcbiAgICAgICAgICAgIGlmICghcGFyZW50TW9kZWxbY29udHJvbC5maWVsZF0gfHwgIShwYXJlbnRNb2RlbFtjb250cm9sLmZpZWxkXSBpbnN0YW5jZW9mIEFycmF5KSkge1xuICAgICAgICAgICAgICAgIHBhcmVudE1vZGVsW2NvbnRyb2wuZmllbGRdID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgaSA9IDA7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgcGFyZW50TW9kZWxbY29udHJvbC5maWVsZF0pIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHN1YkNvbnRyb2wgb2YgY29udHJvbC5yb3dUZW1wbGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpeERhdGVWYWx1ZShzdWJDb250cm9sLCBpdGVtLCBfcGFyZW50UGF0aCArICdbJyArIGkgKyAnXScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY29udHJvbCBpbnN0YW5jZW9mIENvbnRhaW5lclNjaGVtYSkge1xuICAgICAgICAgICAgaWYgKHBhcmVudE1vZGVsW2NvbnRyb2wuZmllbGRdID09IG51bGwgfHwgIWlzTGl0ZXJhbE9iamVjdChwYXJlbnRNb2RlbFtjb250cm9sLmZpZWxkXSkpIHtcbiAgICAgICAgICAgICAgICBwYXJlbnRNb2RlbFtjb250cm9sLmZpZWxkXSA9IHt9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHN1YkNvbnRyb2wgb2YgY29udHJvbC5jb250cm9scykge1xuICAgICAgICAgICAgICAgIHRoaXMuZml4RGF0ZVZhbHVlKHN1YkNvbnRyb2wsIHBhcmVudE1vZGVsW2NvbnRyb2wuZmllbGRdLCBfcGFyZW50UGF0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIERhdGVUaW1lQ29udHJvbFNjaGVtYSkge1xuICAgICAgICAgICAgICAgIGlmICghKHBhcmVudE1vZGVsW2NvbnRyb2wuZmllbGRdIGluc3RhbmNlb2YgRGF0ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjb250cm9sLnRpbWVPbmx5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoU3RyaW5nKHBhcmVudE1vZGVsW2NvbnRyb2wuZmllbGRdKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNWYWxpZERhdGUoZGF0ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRNb2RlbFtjb250cm9sLmZpZWxkXSA9IGRhdGU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRNb2RlbFtjb250cm9sLmZpZWxkXSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRNb2RlbFtjb250cm9sLmZpZWxkXSA9IHRoaXMuX2NvbW1vblNlcnZpY2UuZ2V0VGltZShwYXJlbnRNb2RlbFtjb250cm9sLmZpZWxkXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGRpc2FibGVCdWlsZEluRmllbGQoKSB7XG4gICAgICAgIGlmICghdGhpcy5faXNGb3JtQWRkTmV3KCkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm1vZGVsLmRhdGEuaXNCdWlsZEluQWxsICYmICF0aGlzLl91c2VyU2VydmljZS5pc1N1cGVyVXNlcigpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nLnNjaGVtYS5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgICAgICBpdGVtLmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9hZGRSZXF1aXJlZFZhbGlkYXRvcihzY2hlbWE6IEZvcm1Db250cm9sQmFzZSkge1xuICAgICAgICBsZXQgZXhpc3QgPSBmYWxzZTtcbiAgICAgICAgZm9yIChjb25zdCB2YWxpZGF0b3Igb2Ygc2NoZW1hLnZhbGlkYXRvcnMpIHtcbiAgICAgICAgICAgIGlmICh2YWxpZGF0b3IgaW5zdGFuY2VvZiBSZXF1aXJlZFZhbGlkYXRvcikge1xuICAgICAgICAgICAgICAgIGV4aXN0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIWV4aXN0KSB7XG4gICAgICAgICAgICBzY2hlbWEudmFsaWRhdG9ycy5wdXNoKG5ldyBSZXF1aXJlZFZhbGlkYXRvcigpKTtcbiAgICAgICAgfVxuICAgICAgICBzY2hlbWEucmVxdWlyZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIF9yZW1vdmVSZXF1aXJlZFZhbGlkYXRvcihzY2hlbWE6IEZvcm1Db250cm9sQmFzZSkge1xuICAgICAgICBjb25zdCB2YWxpZGF0b3JzID0gW107XG4gICAgICAgIGZvciAoY29uc3QgdmFsaWRhdG9yIG9mIHNjaGVtYS52YWxpZGF0b3JzKSB7XG4gICAgICAgICAgICBpZiAodmFsaWRhdG9yIGluc3RhbmNlb2YgUmVxdWlyZWRWYWxpZGF0b3IpIHtcblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFsaWRhdG9ycy5wdXNoKHZhbGlkYXRvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc2NoZW1hLnZhbGlkYXRvcnMgPSB2YWxpZGF0b3JzO1xuICAgICAgICBzY2hlbWEucmVxdWlyZWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBfc2V0TW9kZWxWYWx1ZShmaWVsZDogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG4gICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmNydWRGb3JtLl9yb290Tm9kZS5nZXROb2RlQnlQYXRoKGZpZWxkKTtcbiAgICAgICAgdGhpcy5fc2V0TW9kZWxWYWx1ZUJ5Tm9kZShub2RlLCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgX3NldE1vZGVsVmFsdWVCeU5vZGUobm9kZTogQ29udHJvbFRyZWVOb2RlLCB2YWx1ZTogYW55KSB7XG4gICAgICAgIG5vZGUuc2V0VmFsdWUodmFsdWUpO1xuICAgICAgICB0aGlzLmNydWRGb3JtLmZpcmVNb2RlbENoYW5nZWQoKTtcbiAgICB9XG5cbiAgICBhc3luYyBtb2RpZnlEZXRhaWxEYXRhKGRhdGEpIHtcbiAgICB9XG5cbiAgICBfdHJpZ2dlclNhdmUoKSB7XG4gICAgICAgIHRoaXMuc2F2ZSgpO1xuICAgIH1cblxuICAgIGFzeW5jIG9uQWZ0ZXJHZXRMb2dWYWx1ZSgpIHtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFNpbmdsZUxhYmVsKGNvbnRyb2wsIGRhdGFTb3VyY2UsIHZhbHVlUGFyYW0pIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IGRhdGFTb3VyY2UuZmluZChwID0+IHA/LnZhbHVlW2NvbnRyb2wudmFsdWVGaWVsZF0gPT0gdmFsdWVQYXJhbSk7XG4gICAgICAgIGlmICghIXJlc3VsdCkge1xuICAgICAgICAgICAgY29uc3QgZnVuY0dldExhYmVsID0gY29udHJvbC5mdW5jR2V0TGFiZWw7XG4gICAgICAgICAgICBpZiAoZnVuY0dldExhYmVsKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gZnVuY0dldExhYmVsKHJlc3VsdC52YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQgPSB0aGlzLmxvZ1NldHRpbmcuZW1wdHlWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBwcml2YXRlIGdldE11bHRpcGxlTGFiZWwoY29udHJvbCwgZGF0YVNvdXJjZSwgdmFsdWVQYXJhbSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHZhbHVlUGFyYW0uc29tZShwID0+IHAgPT0gTnVtYmVyKHApKSkge1xuICAgICAgICAgICAgICAgIHZhbHVlUGFyYW0gPSB2YWx1ZVBhcmFtLm1hcChwID0+IE51bWJlcihwKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggeyB9XG4gICAgICAgIGxldCByZXN1bHQgPSBkYXRhU291cmNlXG4gICAgICAgICAgICAuZmlsdGVyKHAgPT4gdmFsdWVQYXJhbS5pbmNsdWRlcyhwLnZhbHVlW2NvbnRyb2wudmFsdWVGaWVsZF0pKVxuICAgICAgICAgICAgLm1hcChwID0+IGNvbnRyb2wuZnVuY0dldExhYmVsKHAudmFsdWUpKVxuICAgICAgICAgICAgLmpvaW4oJywgJyk7XG4gICAgICAgIGlmICghcmVzdWx0KSB7XG4gICAgICAgICAgICByZXN1bHQgPSB0aGlzLmxvZ1NldHRpbmcuZW1wdHlWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGFkZFNpbmdsZVByb3BlcnR5TG9nKGNvbnRyb2wsIG9sZFZhbHVlLCBuZXdWYWx1ZSkge1xuICAgICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEF1dG9Db21wbGV0ZVBpY2tlckNvbnRyb2xTY2hlbWEpIHtcbiAgICAgICAgICAgIGNvbnN0IGxvZ0NvbHVtbiA9IHRoaXMubG9nU2V0dGluZy5hcnJWYWx1ZUFmdGVyVXBkYXRlLmZpbmQocCA9PiBwLmZpZWxkID09IGNvbnRyb2wuZmllbGQpO1xuICAgICAgICAgICAgbGV0IGRhdGFTb3VyY2UgPSBjb250cm9sLl9jb21wb25lbnQuc2VsZWN0ZWRWYWx1ZU9iamVjdDtcbiAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShkYXRhU291cmNlKSkgZGF0YVNvdXJjZSA9IFtkYXRhU291cmNlXTtcbiAgICAgICAgICAgIGxvZ0NvbHVtbi52aXNpYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgIGxvZ0NvbHVtbi52YWx1ZUFmdGVyID0gdGhpcy5nZXRTaW5nbGVMYWJlbChjb250cm9sLCBkYXRhU291cmNlLCBuZXdWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhU291cmNlID0gY29udHJvbC5fY29tcG9uZW50LmRhdGFTb3VyY2VJbnRlcm5hbDtcbiAgICAgICAgICAgIHRoaXMubG9nU2V0dGluZy5hcnJWYWx1ZUFmdGVyVXBkYXRlLnB1c2goXG4gICAgICAgICAgICAgICAgbmV3IExvZ0NvbHVtbih7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkOiBjb250cm9sLmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogY29udHJvbC5sYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVCZWZvcmU6IHRoaXMuZ2V0U2luZ2xlTGFiZWwoY29udHJvbCwgZGF0YVNvdXJjZSwgb2xkVmFsdWUpLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZUFmdGVyOiB0aGlzLmdldFNpbmdsZUxhYmVsKGNvbnRyb2wsIGRhdGFTb3VyY2UsIG5ld1ZhbHVlKVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFkZE11bHRpcGxlUHJvcGVydHlMb2coY29udHJvbCwgb2xkVmFsdWUsIG5ld1ZhbHVlKSB7XG4gICAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgQXV0b0NvbXBsZXRlUGlja2VyQ29udHJvbFNjaGVtYSkge1xuICAgICAgICAgICAgY29uc3QgbG9nQ29sdW1uID0gdGhpcy5sb2dTZXR0aW5nLmFyclZhbHVlQWZ0ZXJVcGRhdGUuZmluZChwID0+IHAuZmllbGQgPT0gY29udHJvbC5maWVsZCk7XG4gICAgICAgICAgICBsb2dDb2x1bW4udmlzaWJsZSA9IHRydWU7XG4gICAgICAgICAgICBsb2dDb2x1bW4udmFsdWVBZnRlciA9IHRoaXMuZ2V0TXVsdGlwbGVMYWJlbChjb250cm9sLCBjb250cm9sLl9jb21wb25lbnQuc2VsZWN0ZWRWYWx1ZU9iamVjdCwgbmV3VmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZGF0YVNvdXJjZSA9IGNvbnRyb2wuX2NvbXBvbmVudC5kYXRhU291cmNlSW50ZXJuYWw7XG4gICAgICAgICAgICB0aGlzLmxvZ1NldHRpbmcuYXJyVmFsdWVBZnRlclVwZGF0ZS5wdXNoKFxuICAgICAgICAgICAgICAgIG5ldyBMb2dDb2x1bW4oe1xuICAgICAgICAgICAgICAgICAgICBmaWVsZDogY29udHJvbC5maWVsZCxcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGNvbnRyb2wubGFiZWwsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlQmVmb3JlOiB0aGlzLmdldE11bHRpcGxlTGFiZWwoY29udHJvbCwgZGF0YVNvdXJjZSwgb2xkVmFsdWUpLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZUFmdGVyOiB0aGlzLmdldE11bHRpcGxlTGFiZWwoY29udHJvbCwgZGF0YVNvdXJjZSwgbmV3VmFsdWUpXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0TG9nVmFsdWVEZWZhdWx0KGNvbnRyb2wsIG9sZFZhbHVlLCBuZXdWYWx1ZSkge1xuICAgICAgICBjb25zdCBpc051bGxPbGRWYWx1ZSA9IHRoaXMuaXNOdWxsT3JFbXB0eShvbGRWYWx1ZSk7XG4gICAgICAgIGNvbnN0IGlzTnVsbE5ld1ZhbHVlID0gdGhpcy5pc051bGxPckVtcHR5KG5ld1ZhbHVlKTtcbiAgICAgICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBEYXRlVGltZUNvbnRyb2xTY2hlbWEpIHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdCA9IGNvbnRyb2wuc2hvd1RpbWUgPyAnSEg6bW0gZGQvTU0veXl5eScgOiAnZGQvTU0veXl5eSc7XG4gICAgICAgICAgICBvbGRWYWx1ZSA9IGlzTnVsbE9sZFZhbHVlID8gdGhpcy5sb2dTZXR0aW5nLmVtcHR5VmFsdWUgOiB0aGlzLl9kYXRlUGlwZS50cmFuc2Zvcm0ob2xkVmFsdWUsIGZvcm1hdCk7XG4gICAgICAgICAgICBuZXdWYWx1ZSA9IGlzTnVsbE5ld1ZhbHVlID8gdGhpcy5sb2dTZXR0aW5nLmVtcHR5VmFsdWUgOiB0aGlzLl9kYXRlUGlwZS50cmFuc2Zvcm0obmV3VmFsdWUsIGZvcm1hdCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY29udHJvbCBpbnN0YW5jZW9mIE1hc2tDb250cm9sU2NoZW1hKSB7XG4gICAgICAgICAgICBvbGRWYWx1ZSA9IGlzTnVsbE9sZFZhbHVlID8gdGhpcy5sb2dTZXR0aW5nLmVtcHR5VmFsdWUgOiB0aGlzLl9udW1iZXJQaXBlLnRyYW5zZm9ybShvbGRWYWx1ZSwgJycsICd2aS1WTicpO1xuICAgICAgICAgICAgbmV3VmFsdWUgPSBpc051bGxOZXdWYWx1ZSA/IHRoaXMubG9nU2V0dGluZy5lbXB0eVZhbHVlIDogdGhpcy5fbnVtYmVyUGlwZS50cmFuc2Zvcm0obmV3VmFsdWUsICcnLCAndmktVk4nKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjb250cm9sIGluc3RhbmNlb2YgQ2hlY2tib3hDb250cm9sU2NoZW1hIHx8IGNvbnRyb2wgaW5zdGFuY2VvZiBTd2l0Y2hDb250cm9sU2NoZW1hKSB7XG4gICAgICAgICAgICBvbGRWYWx1ZSA9IGlzTnVsbE9sZFZhbHVlID8gdGhpcy5sb2dTZXR0aW5nLmVtcHR5VmFsdWUgOiBEYXRhU291cmNlQm9vbGVhbi5maW5kKHAgPT4gcC5pZCA9PSBvbGRWYWx1ZSk/LnRlbjtcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gaXNOdWxsTmV3VmFsdWUgPyB0aGlzLmxvZ1NldHRpbmcuZW1wdHlWYWx1ZSA6IERhdGFTb3VyY2VCb29sZWFuLmZpbmQocCA9PiBwLmlkID09IG5ld1ZhbHVlKT8udGVuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbb2xkVmFsdWUsIG5ld1ZhbHVlXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldExvZ1ZhbHVlKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgY2xvbmVNb2RlbCA9IHRoaXMuX2NvbW1vblNlcnZpY2UuY2xvbmVPYmplY3QodGhpcy5tb2RlbC5kYXRhKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY29udHJvbE5hbWUgb2YgT2JqZWN0LmtleXModGhpcy5mb3JtQ29udHJvbHMpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbnRyb2xOYW1lLmluY2x1ZGVzKCcuJykgfHwgdGhpcy5jcnVkRm9ybS5mb3JtQ29udHJvbHNbY29udHJvbE5hbWVdPy5oaWRkZW4gPT09IHRydWUpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmZvcm1Db250cm9sc1tjb250cm9sTmFtZV07XG4gICAgICAgICAgICAgICAgY29uc3Qgb2xkVmFsdWUgPSB0aGlzLmxvZ1NldHRpbmcudmFsdWVCZWZvcmVVcGRhdGVbY29udHJvbC5maWVsZF07XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3VmFsdWUgPSBjbG9uZU1vZGVsW2NvbnRyb2wuZmllbGRdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzTXVsdGlwbGUgPSBBcnJheS5pc0FycmF5KG9sZFZhbHVlKTtcbiAgICAgICAgICAgICAgICBpZiAoKCF0aGlzLmlzTnVsbE9yRW1wdHkob2xkVmFsdWUpIHx8ICF0aGlzLmlzTnVsbE9yRW1wdHkobmV3VmFsdWUpKVxuICAgICAgICAgICAgICAgICAgICAmJiAhKGNvbnRyb2wgaW5zdGFuY2VvZiBGaWxlTWFuYWdlckNvbnRyb2xTY2hlbWEpXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgVGFibGVTY2hlbWEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChKU09OLnN0cmluZ2lmeShvbGRWYWx1ZSkgIT0gSlNPTi5zdHJpbmdpZnkobmV3VmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dTZXR0aW5nLmFyclZhbHVlQWZ0ZXJVcGRhdGUucHVzaChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IExvZ0NvbHVtbih7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogY29udHJvbC5maWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBjb250cm9sLmxhYmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bUxvZ1R5cGU6IEVudW1Mb2dUeXBlLlRhYmxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjb250cm9sIGluc3RhbmNlb2YgRHJvcGRvd25Db250cm9sU2NoZW1hIHx8IGNvbnRyb2wgaW5zdGFuY2VvZiBBdXRvQ29tcGxldGVQaWNrZXJDb250cm9sU2NoZW1hKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzTXVsdGlwbGUgJiYgb2xkVmFsdWUgIT0gbmV3VmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZFNpbmdsZVByb3BlcnR5TG9nKGNvbnRyb2wsIG9sZFZhbHVlLCBuZXdWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChpc011bHRpcGxlICYmICF0aGlzLl9jb21tb25TZXJ2aWNlLmlzU2FtZUFycmF5KG9sZFZhbHVlLCBuZXdWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZE11bHRpcGxlUHJvcGVydHlMb2coY29udHJvbCwgb2xkVmFsdWUsIG5ld1ZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvbGRWYWx1ZSAhPSBuZXdWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFt2YWx1ZUJlZm9yZSwgdmFsdWVBZnRlcl0gPSB0aGlzLmdldExvZ1ZhbHVlRGVmYXVsdChjb250cm9sLCBvbGRWYWx1ZSwgbmV3VmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9nU2V0dGluZy5hcnJWYWx1ZUFmdGVyVXBkYXRlLnB1c2goXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBMb2dDb2x1bW4oe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6IGNvbnRyb2wuZmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogY29udHJvbC5sYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlQmVmb3JlOiB2YWx1ZUJlZm9yZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlQWZ0ZXI6IHZhbHVlQWZ0ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtTG9nVHlwZTogKGNvbnRyb2wgaW5zdGFuY2VvZiBFZGl0b3JDb250cm9sU2NoZW1hIHx8IGNvbnRyb2wgaW5zdGFuY2VvZiBUZXh0QXJlYUNvbnRyb2xTY2hlbWEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBFbnVtTG9nVHlwZS5IdG1sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBFbnVtTG9nVHlwZS5Ob3JtYWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2gge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignLS0tLWxvZyBkYXRhIGZhaWwtLS0tJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpc051bGxPckVtcHR5KGlucHV0OiBhbnkpIHtcbiAgICAgICAgaWYgKGlucHV0ICE9PSB1bmRlZmluZWQgJiYgaW5wdXQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGlucHV0KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpbnB1dC5sZW5ndGggPyBmYWxzZSA6IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaW5wdXQudG9TdHJpbmcoKS50cmltKCkgIT09ICcnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBwcml2YXRlIGFzeW5jIHNhdmUoKSB7XG4gICAgICAgIGNvbnN0IHZhbGlkYXRlZCA9IGF3YWl0IHRoaXMudmFsaWRhdGVGb3JtQmFzZSgpO1xuICAgICAgICBpZiAodmFsaWRhdGVkKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5sb2dTZXR0aW5nLmlzRW5hYmxlTG9nKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmxvZ1NldHRpbmcuaXNDdXN0b21BbGwpIHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5nZXRMb2dWYWx1ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBj4bqldSBow6xuaCB0aMOqbVxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMub25BZnRlckdldExvZ1ZhbHVlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5kYXRhLmxvZ01ldGFEYXRhID0gdGhpcy5sb2dTZXR0aW5nLmFyclZhbHVlQWZ0ZXJVcGRhdGUuZmlsdGVyKHAgPT4gcC52aXNpYmxlKS5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgPyBKU09OLnN0cmluZ2lmeSh0aGlzLmxvZ1NldHRpbmcuYXJyVmFsdWVBZnRlclVwZGF0ZS5maWx0ZXIocCA9PiBwLnZpc2libGUpKVxuICAgICAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhd2FpdCB0aGlzLm9uQmVmb3JlU2F2ZSgpO1xuICAgICAgICAgICAgdGhpcy50cmlnZ2VyU2F2ZUZpbGVVcGxvYWQoKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmF1dG9TYXZlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2lzRm9ybUVkaXQoKSB8fCB0aGlzLl9pc0Zvcm1WaWV3KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5vblVwZGF0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLl9pc0Zvcm1BZGROZXcoKSkge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLm9uSW5zZXJ0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBmb3JtIHZpZXcsIGRvIG5vdGhpbmdcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZU1hbnVhbFNhdmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubW9kZWwuc3VibWl0dGluZyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaGFuZGxlTWFudWFsU2F2ZSgpIHtcblxuICAgIH1cblxuICAgIHRyaWdnZXJTYXZlRmlsZVVwbG9hZCgpIHtcbiAgICAgICAgdGhpcy5yb290Q29udGV4dC5maXJlRXZlbnQoQ29tQ3R4Q29uc3RhbnRzLkNPTU1PTi5TQVZFX0ZJTEVfSU5fRk9STSk7XG4gICAgfVxuXG4gICAgYXN5bmMgX2dldFJlc3VsdFZhbGlkYXRlKCkge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy52YWxpZGF0ZUZvcm1CYXNlKCk7XG4gICAgfVxuXG4gICAgYXN5bmMgdmFsaWRhdGVGb3JtKHJlc3VsdFZhbGlkYXRlQmFzZTogYm9vbGVhbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIHZhbGlkYXRlRm9ybUJhc2UoKSB7XG4gICAgICAgIGxldCByZXN1bHRWYWxpZGF0ZUJhc2UgPSB0cnVlO1xuICAgICAgICAvLyBDw7MgdGjhu4MgY8OzIGZvcm0gayBjw7MgY3J1ZC1mb3JtIChWw6wgbMOgIGZvcm0gbWFzdGVyIGPhu6dhIGPDoWMgZm9ybSBjb24pXG4gICAgICAgIGlmICh0aGlzLmNydWRGb3JtKSB7XG4gICAgICAgICAgICByZXN1bHRWYWxpZGF0ZUJhc2UgPSBhd2FpdCB0aGlzLmNydWRGb3JtLnZhbGlkYXRlRm9ybSh0aGlzLnNldFZhbGlkYXRlRm9ybSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzdWx0VmFsaWRhdGUgPSBhd2FpdCB0aGlzLnZhbGlkYXRlRm9ybShyZXN1bHRWYWxpZGF0ZUJhc2UpO1xuICAgICAgICAvLyBC4buPIGNoZWNrIHZhbGlkIGZvcm0gY8O0bmcgdmnhu4djLiBu4bq/dSBuaMawIGZvcm0gY8O0bmcgdmnhu4djIGtow7RuZyB2YWxpZCB0aMOsIGtow7RuZyB04buxIMSR4buZbmcgdOG6oW8gY8O0bmcgdmnhu4djXG4gICAgICAgIC8vIGlmICh0aGlzLmR5bmFtaWNDb250cm9sW0ZpZWxkRGVmaW5lSXNUYXNrRm9ybUNvbnRyb2xdXG4gICAgICAgIC8vICAgICAmJiB0aGlzLmR5bmFtaWNDb250cm9sW0ZpZWxkRGVmaW5lSXNUYXNrRm9ybUNvbnRyb2xdLl9jb21wb25lbnRcbiAgICAgICAgLy8gKSB7XG4gICAgICAgIC8vICAgICBjb25zdCB0YXNrRm9ybSA9IHRoaXMuZHluYW1pY0NvbnRyb2xbRmllbGREZWZpbmVJc1Rhc2tGb3JtQ29udHJvbF0uX2NvbXBvbmVudDtcbiAgICAgICAgLy8gICAgIGNvbnN0IHJlc3VsdFZhbGlkYXRlRm9ybVRhc2sgPSBhd2FpdCB0YXNrRm9ybS5fZ2V0UmVzdWx0VmFsaWRhdGUoKTtcbiAgICAgICAgLy8gICAgIHJlc3VsdFZhbGlkYXRlID0gcmVzdWx0VmFsaWRhdGVGb3JtVGFzayAmJiByZXN1bHRWYWxpZGF0ZTtcbiAgICAgICAgLy8gfVxuICAgICAgICByZXR1cm4gcmVzdWx0VmFsaWRhdGUgJiYgcmVzdWx0VmFsaWRhdGVCYXNlO1xuICAgIH1cblxuICAgIF92YWxpZGF0ZUZvcm1Db250cm9sKGZpZWxkUGF0aCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jcnVkRm9ybS52YWxpZGF0ZUZvcm1Db250cm9sKGZpZWxkUGF0aCk7XG4gICAgfVxuXG4gICAgX2NsZWFuRm9ybSgpIHtcbiAgICAgICAgdGhpcy5jcnVkRm9ybS5jbGVhbigpO1xuICAgIH1cblxuICAgIF90cmlnZ2VyQ29udHJvbENoYW5nZShmaWVsZFBhdGgpIHtcbiAgICAgICAgdGhpcy5jcnVkRm9ybS50cmlnZ2VyQ2hhbmdlKGZpZWxkUGF0aCk7XG4gICAgfVxuXG4gICAgb25CZWZvcmVTYXZlKCk6IHZvaWQgfCBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICB9XG5cbiAgICBvbkFmdGVyU2F2ZShyZXNwb25zZTogUmVzcG9uc2VSZXN1bHQpOiB2b2lkIHwgUHJvbWlzZTxib29sZWFuPiB7XG4gICAgfVxuXG5cbiAgICBhc3luYyBvbkFmdGVyR2V0RGV0YWlsKGRhdGE/OiBhbnlbXSkge1xuXG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBvbkluc2VydCgpIHtcbiAgICAgICAgdGhpcy5zZXREZWZhdWx0VmFsdWUodGhpcy5tb2RlbC5kYXRhKTtcbiAgICAgICAgaWYgKHRoaXMuZHluYW1pY0NvbnRyb2xbRmllbGREZWZpbmVJc1Rhc2tGb3JtQ29udHJvbF1cbiAgICAgICAgICAgICYmIHRoaXMuZHluYW1pY0NvbnRyb2xbRmllbGREZWZpbmVJc1Rhc2tGb3JtQ29udHJvbF0uX2NvbXBvbmVudFxuICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnN0IHRhc2tGb3JtID0gdGhpcy5keW5hbWljQ29udHJvbFtGaWVsZERlZmluZUlzVGFza0Zvcm1Db250cm9sXS5fY29tcG9uZW50O1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0VmFsaWRhdGVGb3JtVGFzayA9IGF3YWl0IHRhc2tGb3JtLl9nZXRSZXN1bHRWYWxpZGF0ZSgpO1xuICAgICAgICAgICAgaWYgKHJlc3VsdFZhbGlkYXRlRm9ybVRhc2spIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLmRhdGEuaXRlbUNvbmdWaWVjID0gdGFza0Zvcm0ubW9kZWwuZGF0YTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5tb2RlbC5kYXRhLmNyZWF0ZVRhc2tJbnN0ZWFkKSB7XG4gICAgICAgICAgICAvLyByZXNldCBmaWVsZCBfV29ya2Zsb3dDb2RlIMSR4buDIGJhY2tlbmQga2jDtG5nIGNo4bqheSBxdXkgdHLDrG5oIGLhuqNuIGdoaVxuICAgICAgICAgICAgdGhpcy5tb2RlbC5kYXRhW0ZpZWxkV29ya2Zsb3dDb2RlSW5DcnVkRm9ybV0gPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbmZpcm1lZCA9IGF3YWl0IHRoaXMuY3JlYXRlQ29uZmlybUlmUmVxdWlyZSgpO1xuICAgICAgICBpZiAoIWNvbmZpcm1lZCkgcmV0dXJuO1xuICAgICAgICBhd2FpdCB0aGlzLl9pbnNlcnQoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZUNvbmZpcm1JZlJlcXVpcmUoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzLCByZWopID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLm1lc3NhZ2VDb25maXJtU2F2ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93Q29uZmlybSh0aGlzLm1lc3NhZ2VDb25maXJtU2F2ZSlcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4ocmVzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXModHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzKHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9pbnNlcnQoKSB7XG4gICAgICAgIHRoaXMuZ2V0UHJvbWlzZUFjdGlvbkluc2VydCgpXG4gICAgICAgICAgICAudGhlbihhc3luYyByZXNwb25zZSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5zdWJtaXR0aW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5zaG93TWVzc2FnZUFmdGVySW5zZXJ0KHJlc3BvbnNlLnN1Y2Nlc3MsIHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLmRhdGEuaWQgPSByZXNwb25zZS5kYXRhO1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLm9uQWZ0ZXJTYXZlKHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vblNhdmVkLmVtaXQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IHRoaXMubW9kZWwuZGF0YS5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzQ2xvc2VGb3JtOiB0aGlzLmlzQ2xvc2VGb3JtXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVJbnNlcnRFcnJvcigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWVycm9yLmVycm9yLnN1Y2Nlc3MgJiYgZXJyb3IuZXJyb3IuZXJyb3JDaGVja0V4aXN0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuc3VibWl0dGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuc3VibWl0dGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuc2hvd01lc3NhZ2VBZnRlckluc2VydChmYWxzZSwgZXJyb3IpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0UHJvbWlzZUFjdGlvbkluc2VydCgpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UucG9zdCh0aGlzLm1vZGVsLmRhdGEsIHRoaXMuaW5zZXJ0UGx1c1VybCk7XG4gICAgfVxuXG4gICAgaGFuZGxlSW5zZXJ0RXJyb3IoKSB7XG5cbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIG9uVXBkYXRlKCkge1xuICAgICAgICB0aGlzLnNldERlZmF1bHRWYWx1ZSh0aGlzLm1vZGVsLmRhdGEpO1xuICAgICAgICB0aGlzLmdldFByb21pc2VBY3Rpb25VcGRhdGUoKVxuICAgICAgICAgICAgLnRoZW4oYXN5bmMgcmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuc3VibWl0dGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuc2hvd01lc3NhZ2VBZnRlclVwZGF0ZShyZXNwb25zZS5zdWNjZXNzLCByZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5vbkFmdGVyU2F2ZShyZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25TYXZlZC5lbWl0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiB0aGlzLm1vZGVsLmRhdGEuaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNDbG9zZUZvcm06IHRoaXMuaXNDbG9zZUZvcm1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZVVwZGF0ZUVycm9yKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghZXJyb3IuZXJyb3Iuc3VjY2VzcyAmJiBlcnJvci5lcnJvci5lcnJvckNoZWNrRXhpc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5zdWJtaXR0aW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5zdWJtaXR0aW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5zaG93TWVzc2FnZUFmdGVyVXBkYXRlKGZhbHNlLCBlcnJvcik7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBpZiAodGhpcy5sb2dTZXR0aW5nLmlzRW5hYmxlTG9nKSB7XG4gICAgICAgICAgICB0aGlzLmxvZ1NldHRpbmcuYXJyVmFsdWVBZnRlclVwZGF0ZSA9IFtdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaGFuZGxlVXBkYXRlRXJyb3IoKSB7XG5cbiAgICB9XG5cbiAgICBnZXRQcm9taXNlQWN0aW9uVXBkYXRlKCk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0dGluZy5iYXNlU2VydmljZS5wdXQodGhpcy5tb2RlbC5kYXRhLmlkLnRvU3RyaW5nKCksIHRoaXMubW9kZWwuZGF0YSwgdGhpcy51cGRhdGVQbHVzVXJsKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldERlZmF1bHRWYWx1ZShtb2RlbCkge1xuICAgICAgICBpZiAobW9kZWwuaXNCdWlsZEluID09PSBudWxsIHx8IG1vZGVsLmlzQnVpbGRJbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBtb2RlbC5pc0J1aWxkSW4gPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtb2RlbC5pc0J1aWxkSW5BbGwgPT09IG51bGwgfHwgbW9kZWwuaXNCdWlsZEluQWxsID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIG1vZGVsLmlzQnVpbGRJbkFsbCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnBhcmVudFNldHRpbmc/LmVuYWJsZVJlb3JkZXJSb3cgJiYgdGhpcy5wYXJlbnRTZXR0aW5nLmNvbHVtblNldHRpbmcuc29ydEZpZWxkKSB7XG4gICAgICAgICAgICB0aGlzLm1vZGVsLmRhdGFbdGhpcy5wYXJlbnRTZXR0aW5nLmNvbHVtblNldHRpbmcuc29ydEZpZWxkXSA/Pz0gdGhpcy5wYXJlbnRNb2RlbC50b3RhbCArIDE7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNob3dNZXNzYWdlQWZ0ZXJJbnNlcnQoaXNTdWNjZXNzOiBib29sZWFuID0gZmFsc2UsIGVycm9yPzogYW55KSB7XG4gICAgICAgIGlmIChpc1N1Y2Nlc3MpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5tZXNzYWdlSW5zZXJ0U3VjY2Vzcykge1xuICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZUluc2VydFN1Y2Nlc3MgPSB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ01FU1NBR0UuSU5TRVJUX0RBVEFfU1VDQ0VTUycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMubWVzc2FnZUluc2VydFN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1N1Y2Nlc3ModGhpcy5tZXNzYWdlSW5zZXJ0U3VjY2Vzcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZVJlc3BvbnNlRXJyb3IoZXJyb3IpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzaG93TWVzc2FnZUFmdGVyVXBkYXRlKGlzU3VjY2VzczogYm9vbGVhbiA9IGZhbHNlLCBlcnJvcj86IGFueSkge1xuICAgICAgICBpZiAoaXNTdWNjZXNzKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMubWVzc2FnZVVwZGF0ZVN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2VVcGRhdGVTdWNjZXNzID0gdGhpcy5fdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdNRVNTQUdFLlVQREFURV9EQVRBX1NVQ0NFU1MnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLm1lc3NhZ2VVcGRhdGVTdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dTdWNjZXNzKHRoaXMubWVzc2FnZVVwZGF0ZVN1Y2Nlc3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVSZXNwb25zZUVycm9yKGVycm9yKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhhbmRsZVJlc3BvbnNlRXJyb3IoZXJyb3IpIHtcbiAgICAgICAgaWYgKGVycm9yLm1lc3NhZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZyhlcnJvci5tZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChlcnJvci5lcnJvcikge1xuICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKGVycm9yLmVycm9yKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnQ8OzIGzhu5dpIHjhuqN5IHJhLCBsacOqbiBo4buHIHF14bqjbiB0cuG7iyB2acOqbiDEkeG7gyBiaeG6v3QgdGjDqm0gY2hpIHRp4bq/dCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgb25Gb3JtSW5pdGlhbGl6ZWQoZGF0YTogRXZlbnREYXRhKSB7XG5cbiAgICB9XG5cbiAgICBfaGFuZGxlQWZ0ZXJUcmluaEt5KGV2dCkge1xuICAgICAgICBkZWxldGUgdGhpcy5tb2RlbC5kYXRhW0tleUZsYXNoU2hvd107XG4gICAgICAgIHRoaXMuX2hhbmRsZUNhbmNlbChldnQpO1xuICAgIH1cblxuICAgIF9oYW5kbGVTYXZlKGV2dCkge1xuICAgICAgICBpZiAodGhpcy5tb2RlbC5zdWJtaXR0aW5nKSByZXR1cm47XG4gICAgICAgIHRoaXMubW9kZWwuc3VibWl0dGluZyA9IHRydWU7XG4gICAgICAgIHRoaXMuc2F2ZSgpO1xuICAgICAgICB0aGlzLm9uU2F2ZS5lbWl0KGV2dCk7XG4gICAgfVxuXG4gICAgX2hhbmRsZUNhbmNlbChldnQpIHtcbiAgICAgICAgdGhpcy5vbkNhbmNlbC5lbWl0KGV2dCk7XG4gICAgfVxuXG4gICAgX2hhbmRsZU1lc3NhZ2UoZXZ0KSB7XG4gICAgICAgIHRoaXMub25NZXNzYWdlLmVtaXQoZXZ0KTtcbiAgICB9XG5cbiAgICBfc2V0RGlzYWJsZUNvbnRyb2wodW5pcXVlRmllbGQsIGlzRGlzYWJsZWQpIHtcbiAgICAgICAgdGhpcy5jcnVkRm9ybS5mb3JtQ29udHJvbHNbdW5pcXVlRmllbGRdLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICB9XG5cbiAgICBfc2V0SGlkZGVuQ29udHJvbCh1bmlxdWVGaWVsZCwgaXNIaWRkZW4pIHtcbiAgICAgICAgdGhpcy5jcnVkRm9ybS5mb3JtQ29udHJvbHNbdW5pcXVlRmllbGRdLmhpZGRlbiA9IGlzSGlkZGVuO1xuICAgIH1cblxuICAgIF9nZXRGb3JtU3RhdGUoKTogRm9ybVN0YXRlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZWwuZm9ybVN0YXRlO1xuICAgIH1cblxuICAgIF9pc0Zvcm1BZGROZXcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRGb3JtU3RhdGUoKSA9PSBGb3JtU3RhdGUuQUREO1xuICAgIH1cblxuICAgIF9pc0Zvcm1FZGl0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0Rm9ybVN0YXRlKCkgPT0gRm9ybVN0YXRlLkVESVQ7XG4gICAgfVxuXG4gICAgX2lzRm9ybVZpZXcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRGb3JtU3RhdGUoKSA9PSBGb3JtU3RhdGUuVklFVztcbiAgICB9XG59XG4iXX0=
|