tnx-shared 5.1.334 → 5.1.337

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.
@@ -351,6 +351,9 @@ export class ListBase extends ComponentBase {
351
351
  }
352
352
  const dataSource = yield this._getDataSource(response);
353
353
  yield this.afterProcessDataInBase(dataSource);
354
+ if (this.setting.columnSetting.groupField && this.setting.columnSetting.groupInClient) {
355
+ this.groupInClient(dataSource);
356
+ }
354
357
  this.model.dataSource = dataSource;
355
358
  const resetSelectedItems = this.model.selectedItems && this.model.selectedItems.length;
356
359
  if (resetSelectedItems) {
@@ -404,6 +407,33 @@ export class ListBase extends ComponentBase {
404
407
  return __awaiter(this, void 0, void 0, function* () {
405
408
  });
406
409
  }
410
+ groupInClient(dataSource) {
411
+ if (dataSource.length == 0)
412
+ return;
413
+ try {
414
+ let groupField = this.setting.groupColumn.field;
415
+ if (this.setting.groupColumn.rawColumn) {
416
+ groupField = this.setting.groupColumn.rawColumn.field;
417
+ }
418
+ this.sortDataSourceByGroupField(dataSource, groupField);
419
+ }
420
+ catch (err) {
421
+ }
422
+ }
423
+ sortDataSourceByGroupField(dataSource, groupField) {
424
+ const dic = {};
425
+ for (let i = 0; i < dataSource.length; i++) {
426
+ const valueGroup = dataSource[i][groupField];
427
+ if (!dic[valueGroup]) {
428
+ dic[valueGroup] = [];
429
+ }
430
+ dic[valueGroup].push(dataSource[i]);
431
+ }
432
+ dataSource.splice(0, dataSource.length);
433
+ Object.values(dic).forEach(values => {
434
+ dataSource.push(...values);
435
+ });
436
+ }
407
437
  _getRefDataDropdown(dataSource) {
408
438
  return __awaiter(this, void 0, void 0, function* () {
409
439
  if (dataSource && dataSource.length > 0) {
@@ -933,4 +963,4 @@ ListBase.propDecorators = {
933
963
  parentModel: [{ type: Input }],
934
964
  loadDetailFromQueryParam: [{ type: Input }]
935
965
  };
936
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC1iYXNlLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uL3Byb2plY3RzL3RueC1zaGFyZWQvc3JjL2xpYi8iLCJzb3VyY2VzIjpbImNsYXNzZXMvYmFzZS9saXN0LWJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDeEYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sdURBQXVELENBQUM7QUFDM0YsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMEVBQTBFLENBQUM7QUFDbkgsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sK0RBQStELENBQUM7QUFFckcsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0sdUVBQXVFLENBQUM7QUFDeEgsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sOERBQThELENBQUM7QUFDdkcsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLG1FQUFtRSxDQUFDO0FBQzNHLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUNwRixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDcEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUcxRCxPQUFPLEVBQUUsYUFBYSxFQUFF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bkQsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7d0JBQzNCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO3FCQUNqRDt5QkFDSTt3QkFDRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDLENBQUM7cUJBQ3pEO2dCQUNMLENBQUMsQ0FBQyxDQUFDO2FBQ047UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCx1QkFBdUIsQ0FBQyxHQUFhO0lBQ3JDLENBQUM7SUFFRCxjQUFjO0lBQ2QsQ0FBQztJQUVELFlBQVk7UUFDUixJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztRQUM1QixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQsYUFBYSxDQUFDLE1BQU07UUFDaEIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO0lBQ2hDLENBQUM7OztZQTE4QkosU0FBUzs7O1lBMUM2QixRQUFROzs7OEJBOEMxQyxTQUFTLFNBQUMsaUJBQWlCOytCQUkzQixTQUFTLFNBQUMsa0JBQWtCOzBCQUk1QixLQUFLO3VDQUNMLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBEaXJlY3RpdmUsIEluamVjdG9yLCBJbnB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbmltcG9ydCB7IENydWRMaXN0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9jcnVkL2NydWQtbGlzdC9jcnVkLWxpc3QuY29tcG9uZW50JztcclxuaW1wb3J0IHsgVHJlZVRhYmxlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9jcnVkL3RyZWUtdGFibGUvdHJlZS10YWJsZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBFbnRpdHlQZXJtaXNzaW9uU2VydmljZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvZW50aXR5LXBlcm1pc3Npb24vc2VydmljZXMuY3MvZW50aXR5LXBlcm1pc3Npb24uc2VydmljZSc7XHJcbmltcG9ydCB7IFN0YXRlTWFjaGluZXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9zdGF0ZW1hY2hpbmVzL3NlcnZpY2VzL3N0YXRlbWFjaGluZXMuc2VydmljZSc7XHJcbmltcG9ydCB7IFdmSXRlbSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvd29ya2Zsb3cvbW9kZWxzL21vZGVscyc7XHJcbmltcG9ydCB7IFdvcmtmbG93UGVybWlzc2lvbkRldGFpbFNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL3dvcmtmbG93L3NlcnZpY2VzL3dvcmtmbG93LXBlcm1pc3Npb24tZGV0YWlsLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBXb3JrZmxvd1NldHRpbmdzU2VydmljZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvd29ya2Zsb3cvc2VydmljZXMvd29ya2Zsb3ctc2V0dGluZ3Muc2VydmljZSc7XHJcbmltcG9ydCB7IENvbUN0eENvbnN0YW50cyB9IGZyb20gJy4uLy4uL2NvbmZpZ3MvY29tcG9uZW50LWNvbnRleHQuY29uc3RhbnQnO1xyXG5pbXBvcnQgeyBDYXVIaW5oV29ya2Zsb3dTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29uZ3ZpZWMvY2F1aGluaC13b3JrZmxvdy9zZXJ2aWNlcy9jYXVoaW5oLXdvcmtmbG93LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb25nVmllY1NlcnZpY2UgfSBmcm9tICcuLi8uLi9jb25ndmllYy9jb25ndmllYy9zZXJ2aWNlcy9jb25ndmllYy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUGVybWlzc2lvbkJhc2UgfSBmcm9tICcuLi8uLi9lbnVtcy9jb21tb24nO1xyXG5pbXBvcnQgeyBGaWx0ZXIsIEdyaWRJbmZvIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dyaWQtaW5mbyc7XHJcbmltcG9ydCB7IFJlc3BvbnNlUmVzdWx0IH0gZnJvbSAnLi4vLi4vbW9kZWxzL3Jlc3BvbnNlLXJlc3VsdCc7XHJcbmltcG9ydCB7IEJhc2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYmFzZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29tbW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NvbW1vbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ3J1ZFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jcnVkLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDdXN0b21Sb3V0ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY3VzdG9tLXJvdXRlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRXhwb3J0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2V4cG9ydC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTGlzdEhlbHBlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9saXN0LWhlbHBlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTWFzdGVyRGF0YVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tYXN0ZXItZGF0YS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTW9kdWxlQ29uZmlnU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL21vZHVsZS1jb25maWcuc2VydmljZSc7XHJcbmltcG9ydCB7IE5vdGlmaWVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL25vdGlmaWVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBVc2VyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3VzZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IEVudW1HZXRSZWZUeXBlLCBGb3JtU3RhdGUsIEtleUZpZWxkR2V0UmVmVHlwZSwgS2V5Rmxhc2hTaG93LCBXb3JrZmxvd0ZpZWxkU3RhdGVDb2RlIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcclxuaW1wb3J0IHtcclxuICAgIENvbHVtblNjaGVtYUJhc2UsXHJcbiAgICBDb250cm9sVHlwZSxcclxuICAgIENydWRGb3JtRGF0YSxcclxuICAgIENydWRMaXN0RGF0YSxcclxuICAgIENydWRMaXN0U2V0dGluZyxcclxuICAgIERyb3Bkb3duT3B0aW9ucyxcclxuICAgIEZpZWxkUm93U3BhbixcclxuICAgIE9wZXJhdG9yLFxyXG4gICAgVGV4dEFsaWduXHJcbn0gZnJvbSAnLi4vZm9ybS1zY2hlbWEnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRCYXNlIH0gZnJvbSAnLi9jb21wb25lbnQtYmFzZSc7XHJcbmltcG9ydCB7IElMaXN0Q29tcG9uZW50IH0gZnJvbSAnLi9pLWxpc3QtY29tcG9uZW50JztcclxuXHJcblxyXG5ARGlyZWN0aXZlKClcclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIExpc3RCYXNlPFQgZXh0ZW5kcyBJTGlzdENvbXBvbmVudD4gZXh0ZW5kcyBDb21wb25lbnRCYXNlIHtcclxuICAgIHB1YmxpYyBjcnVkTGlzdDogVDtcclxuXHJcbiAgICBAVmlld0NoaWxkKENydWRMaXN0Q29tcG9uZW50KSBzZXQgY29udGVudENydWRMaXN0KGNvbnRlbnQ6IFQpIHtcclxuICAgICAgICB0aGlzLnNldE1haW5MaXN0Q29tcG9uZW50VmFsdWUoY29udGVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgQFZpZXdDaGlsZChUcmVlVGFibGVDb21wb25lbnQpIHNldCBjb250ZW50VHJlZVRhYmxlKGNvbnRlbnQ6IFQpIHtcclxuICAgICAgICB0aGlzLnNldE1haW5MaXN0Q29tcG9uZW50VmFsdWUoY29udGVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgQElucHV0KCkgcGFyZW50TW9kZWw6IENydWRMaXN0RGF0YTtcclxuICAgIEBJbnB1dCgpIGxvYWREZXRhaWxGcm9tUXVlcnlQYXJhbTogYm9vbGVhbjtcclxuXHJcbiAgICBwcml2YXRlIG5vdENvbmZpZ0Jhc2VTZXJ2aWNlTWVzc2FnZSA9ICdDaMawYSBj4bqldSBow6xuaCBDUlVEIGJhc2Ugc2VydmljZSc7XHJcbiAgICBzZXR0aW5nOiBDcnVkTGlzdFNldHRpbmcgPSBuZXcgQ3J1ZExpc3RTZXR0aW5nKCk7XHJcbiAgICBtb2RlbDogQ3J1ZExpc3REYXRhID0gbmV3IENydWRMaXN0RGF0YSgpO1xyXG4gICAgZm9ybU1vZGVsOiBDcnVkRm9ybURhdGEgPSBuZXcgQ3J1ZEZvcm1EYXRhKCk7XHJcbiAgICBzY29wZURhdGFFZGl0OiBhbnkgPSB7fTtcclxuICAgIHNob3dEZXRhaWxGb3JtID0gZmFsc2U7XHJcbiAgICBlbnZpcm9ubWVudDogYW55ID0ge307XHJcbiAgICBjb3VudFJlYWR5ID0gMDtcclxuICAgIGRlZmF1bHRGaWx0ZXJDb2x1bW46IGFueTtcclxuXHJcbiAgICBoYXNDcnVkTGlzdCA9IHRydWU7XHJcbiAgICBjdXN0b21HZXREYXRhID0gZmFsc2U7XHJcbiAgICByZWFkeVRvVHJpbmhLeSA9IGZhbHNlO1xyXG4gICAgcGx1c1VybCA9ICcnO1xyXG4gICAgbG9hZGluZ1RpbWVvdXQ7XHJcblxyXG4gICAgcm93RGF0YUN1cnJlbnQ6IGFueTtcclxuXHJcbiAgICBwcm90ZWN0ZWQgX25vdGlmaWVyU2VydmljZTogTm90aWZpZXJTZXJ2aWNlO1xyXG4gICAgcHJvdGVjdGVkIF9jdXN0b21Sb3V0ZXJTZXJ2aWNlOiBDdXN0b21Sb3V0ZXJTZXJ2aWNlO1xyXG4gICAgcHJvdGVjdGVkIF9saXN0SGVscGVyU2VydmljZTogTGlzdEhlbHBlclNlcnZpY2U7XHJcbiAgICBwcm90ZWN0ZWQgX2NvbW1vblNlcnZpY2U6IENvbW1vblNlcnZpY2U7XHJcbiAgICBwcm90ZWN0ZWQgX3RyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2U7XHJcbiAgICBwcm90ZWN0ZWQgX2V4cG9ydFNlcnZpY2U6IEV4cG9ydFNlcnZpY2U7XHJcbiAgICBwcm90ZWN0ZWQgX3JvdXRlcjogUm91dGVyO1xyXG4gICAgcHJvdGVjdGVkIF9jcnVkU2VydmljZTogQ3J1ZFNlcnZpY2U7XHJcbiAgICBwcm90ZWN0ZWQgX2RhdGVQaXBlOiBEYXRlUGlwZTtcclxuICAgIHByb3RlY3RlZCBfY2Q6IENoYW5nZURldGVjdG9yUmVmO1xyXG4gICAgcHJvdGVjdGVkIF91c2VyU2VydmljZTogVXNlclNlcnZpY2U7XHJcbiAgICBwcm90ZWN0ZWQgX21hc3RlckRhdGFTZXJ2aWNlOiBNYXN0ZXJEYXRhU2VydmljZTtcclxuICAgIHByb3RlY3RlZCBfZW50aXR5UGVybWlzc2lvblNlcnZpY2U6IEVudGl0eVBlcm1pc3Npb25TZXJ2aWNlO1xyXG4gICAgcHJvdGVjdGVkIF93b3JrZmxvd1NldHRpbmdTZXJ2aWNlOiBXb3JrZmxvd1NldHRpbmdzU2VydmljZTtcclxuICAgIHByb3RlY3RlZCBfd29ya2Zsb3dQZXJtaXNzaW9uRGV0YWlsU2VydmljZTogV29ya2Zsb3dQZXJtaXNzaW9uRGV0YWlsU2VydmljZTtcclxuICAgIHByb3RlY3RlZCBfc3RhdGVNYWNoaW5lc1NlcnZpY2U6IFN0YXRlTWFjaGluZXNTZXJ2aWNlO1xyXG4gICAgcHJvdGVjdGVkIF9jb25nVmllY1NlcnZpY2VJbkJhc2U6IENvbmdWaWVjU2VydmljZTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihfaW5qZWN0b3I6IEluamVjdG9yKSB7XHJcbiAgICAgICAgc3VwZXIoX2luamVjdG9yKTtcclxuICAgICAgICBjb25zdCBtb2R1bGVDb25maWdTZXJ2aWNlID0gX2luamVjdG9yLmdldChNb2R1bGVDb25maWdTZXJ2aWNlKTtcclxuICAgICAgICB0aGlzLmVudmlyb25tZW50ID0gbW9kdWxlQ29uZmlnU2VydmljZS5nZXRDb25maWcoKS5lbnZpcm9ubWVudDtcclxuXHJcbiAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KE5vdGlmaWVyU2VydmljZSk7XHJcbiAgICAgICAgdGhpcy5fYWN0aXZhdGVkUm91dGUgPSB0aGlzLl9pbmplY3Rvci5nZXQoQWN0aXZhdGVkUm91dGUpO1xyXG4gICAgICAgIHRoaXMuX3JvdXRlciA9IHRoaXMuX2luamVjdG9yLmdldChSb3V0ZXIpO1xyXG4gICAgICAgIHRoaXMuX2N1c3RvbVJvdXRlclNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoQ3VzdG9tUm91dGVyU2VydmljZSk7XHJcbiAgICAgICAgdGhpcy5fbGlzdEhlbHBlclNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoTGlzdEhlbHBlclNlcnZpY2UpO1xyXG4gICAgICAgIHRoaXMuX2NvbW1vblNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoQ29tbW9uU2VydmljZSk7XHJcbiAgICAgICAgdGhpcy5fdHJhbnNsYXRlU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChUcmFuc2xhdGVTZXJ2aWNlKTtcclxuICAgICAgICB0aGlzLl9leHBvcnRTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KEV4cG9ydFNlcnZpY2UpO1xyXG4gICAgICAgIHRoaXMuX2NydWRTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KENydWRTZXJ2aWNlKTtcclxuICAgICAgICB0aGlzLl9kYXRlUGlwZSA9IHRoaXMuX2luamVjdG9yLmdldChEYXRlUGlwZSk7XHJcbiAgICAgICAgdGhpcy5fY2QgPSB0aGlzLl9pbmplY3Rvci5nZXQoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xyXG4gICAgICAgIHRoaXMuX3VzZXJTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KFVzZXJTZXJ2aWNlKTtcclxuICAgICAgICB0aGlzLl9tYXN0ZXJEYXRhU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChNYXN0ZXJEYXRhU2VydmljZSk7XHJcbiAgICAgICAgdGhpcy5fZW50aXR5UGVybWlzc2lvblNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoRW50aXR5UGVybWlzc2lvblNlcnZpY2UpO1xyXG4gICAgICAgIHRoaXMuX3dvcmtmbG93U2V0dGluZ1NlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoV29ya2Zsb3dTZXR0aW5nc1NlcnZpY2UpO1xyXG4gICAgICAgIHRoaXMuX3dvcmtmbG93UGVybWlzc2lvbkRldGFpbFNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoV29ya2Zsb3dQZXJtaXNzaW9uRGV0YWlsU2VydmljZSk7XHJcbiAgICAgICAgdGhpcy5fc3RhdGVNYWNoaW5lc1NlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoU3RhdGVNYWNoaW5lc1NlcnZpY2UpO1xyXG4gICAgICAgIHRoaXMuX2NvbmdWaWVjU2VydmljZUluQmFzZSA9IHRoaXMuX2luamVjdG9yLmdldChDb25nVmllY1NlcnZpY2UpO1xyXG5cclxuICAgICAgICB0aGlzLnNldHRpbmcua2V5ID0gdGhpcy5fY29tbW9uU2VydmljZS5ndWlkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzZXRNYWluTGlzdENvbXBvbmVudFZhbHVlKGNvbnRlbnQ6IFQpIHtcclxuICAgICAgICBjb25zdCBiZWZvcmVWYWx1ZSA9IHRoaXMuY3J1ZExpc3Q7XHJcbiAgICAgICAgaWYgKGNvbnRlbnQpIHtcclxuICAgICAgICAgICAgdGhpcy5jcnVkTGlzdCA9IGNvbnRlbnQ7XHJcbiAgICAgICAgICAgIGlmICghYmVmb3JlVmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY291bnRSZWFkeSsrO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXREZWZhdWx0VmFsdWVGaWx0ZXIoKTtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNydWRMaXN0LmNoZWNrSXNJbnNpZGVEaWFsb2coKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRJdGVtRnJvbVF1ZXJ5UGFyYW0oKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LCAxMDApO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY291bnRSZWFkeSA8IDIpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NEYXRhKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5tb2RlbC5iYXNlUmVhZHkgPSBmYWxzZTtcclxuICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmNvbHMpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmNvbHMgPSB0aGlzLnNldHRpbmcuY29scy5maWx0ZXIocSA9PiAhcS5yZW1vdmVPbkluaXQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm1lcmdlSW5mb1RvQ29sdW1uU2NoZW1hKCk7XHJcbiAgICAgICAgdGhpcy5nZW5lcmF0ZUZpZWxkU2VhcmNoVGV4dCgpO1xyXG4gICAgICAgIGlmICghdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZyh0aGlzLm5vdENvbmZpZ0Jhc2VTZXJ2aWNlTWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuc2V0dGluZy5oaWRkZW5TZXR0aW5nV29ya2Zsb3cpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZy5iYXNlU2VydmljZS51c2VXb3JrZmxvdyA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5fcmVnaXN0ZXJHbG9iYWxTZXJ2aWNlKHRoaXMuc2V0dGluZy5iYXNlU2VydmljZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG1vZHVsZUNvbmZpZ1NlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoTW9kdWxlQ29uZmlnU2VydmljZSk7XHJcbiAgICAgICAgdGhpcy5lbnZpcm9ubWVudCA9IG1vZHVsZUNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCkuZW52aXJvbm1lbnQ7XHJcbiAgICAgICAgaWYgKHRoaXMuZW52aXJvbm1lbnQuY2xpZW50RG9tYWluXHJcbiAgICAgICAgICAgICYmIHRoaXMuc2V0dGluZy5iYXNlU2VydmljZVxyXG4gICAgICAgICAgICAmJiB0aGlzLmVudmlyb25tZW50LmNsaWVudERvbWFpblt0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2Uuc2VydmljZUNvZGVdXHJcbiAgICAgICAgICAgICYmICF0aGlzLnNldHRpbmcudGFyZ2V0UGF0aFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICB0aGlzLnNldHRpbmcudGFyZ2V0UGF0aCA9IGAke3RoaXMuZW52aXJvbm1lbnQuY2xpZW50RG9tYWluW3RoaXMuc2V0dGluZy5iYXNlU2VydmljZS5zZXJ2aWNlQ29kZV19LyR7dGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLmVudGl0eU5hbWUudG9Mb3dlckNhc2UoKX0vZGV0YWlsYDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5nZXRNZW51QnV0dG9ucyA9IHRoaXMuZ2V0TWVudUJ1dHRvbnMuYmluZCh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG1lcmdlSW5mb1RvQ29sdW1uU2NoZW1hKCkge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZy5jb2xzLmZvckVhY2goY29sID0+IHtcclxuICAgICAgICAgICAgY29uc3QgY29sdW1uTW9kZWxTY2hlbWEgPSB0aGlzLnNldHRpbmcubW9kZWxTY2hlbWFzLmZpbmQocCA9PiBwLmZpZWxkID09IGNvbC5maWVsZCk7XHJcbiAgICAgICAgICAgIGlmIChjb2x1bW5Nb2RlbFNjaGVtYSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGNvbHVtbk1vZGVsU2NoZW1hLm5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb2wubGFiZWwgPSBjb2x1bW5Nb2RlbFNjaGVtYS5uYW1lO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGNvbHVtbk1vZGVsU2NoZW1hLmZ1bGxOYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29sLmZ1bGxMYWJlbCA9IGNvbHVtbk1vZGVsU2NoZW1hLmZ1bGxOYW1lO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKCFjb2wuZGlzcGxheUZpZWxkSW5HcmlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29sLmRpc3BsYXlGaWVsZEluR3JpZCA9IGNvbC5kaXNwbGF5RmllbGQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoIWNvbC5kYXRhVHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbC5kYXRhVHlwZSA9IHRoaXMuZ2V0RGF0YVR5cGUoY29sdW1uTW9kZWxTY2hlbWEuZGF0YVR5cGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXREYXRhVHlwZSh0eXBlOiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gdHlwZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdlbmVyYXRlRmllbGRTZWFyY2hUZXh0KCkge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZy5jb2xzLmZvckVhY2goY29sID0+IHtcclxuICAgICAgICAgICAgaWYgKGNvbC5mdWxsVGV4dFNlYXJjaCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmZpZWxkU2VhcmNoVGV4dC5wdXNoKGNvbC5maWVsZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmZpZWxkU2VhcmNoVGV4dC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlcnMgPSBbXTtcclxuICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmZpZWxkU2VhcmNoVGV4dC5mb3JFYWNoKGZpZWxkID0+IHtcclxuICAgICAgICAgICAgICAgIGZpbHRlcnMucHVzaChcclxuICAgICAgICAgICAgICAgICAgICBuZXcgRmlsdGVyKHsgZmllbGQsIG9wZXJhdG9yOiBPcGVyYXRvci5jb250YWluLCBzb3VyY2VGaWVsZDogJ19rJyB9KVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmZpbHRlclRlbXBsYXRlQWR2cykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmZpbHRlclRlbXBsYXRlQWR2cy5zcGxpY2UoMCwgMCwgbmV3IEZpbHRlcih7XHJcbiAgICAgICAgICAgICAgICAgICAgbG9naWM6ICdvcicsXHJcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyc1xyXG4gICAgICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIF9yZWdpc3Rlckdsb2JhbFNlcnZpY2Uoc2VydmljZTogQmFzZVNlcnZpY2UpIHtcclxuICAgICAgICBjb25zdCBrZXkgPSBzZXJ2aWNlLmdldEtleVdvcmtmbG93U2V0dGluZygpO1xyXG4gICAgICAgIHRoaXMuX2VudGl0eVBlcm1pc3Npb25TZXJ2aWNlLnJlZ2lzdGVyU2VydmljZShrZXksIHNlcnZpY2UpO1xyXG4gICAgICAgIHRoaXMuX3dvcmtmbG93U2V0dGluZ1NlcnZpY2UucmVnaXN0ZXJTZXJ2aWNlKGtleSwgc2VydmljZSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0TWVudUJ1dHRvbnMocm93RGF0YSk6IGFueVtdIHwgUHJvbWlzZTxhbnlbXT4ge1xyXG4gICAgICAgIHRoaXMucm93RGF0YUN1cnJlbnQgPSByb3dEYXRhO1xyXG4gICAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuXHJcbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5oYW5kbGVBZnRlclZpZXdJbml0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcclxuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5sb2FkaW5nVGltZW91dCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyBoYW5kbGVBZnRlclZpZXdJbml0KCkge1xyXG4gICAgICAgIGlmICgodGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlICYmIHRoaXMuc2V0dGluZy5iYXNlU2VydmljZS51c2VXb3JrZmxvdylcclxuICAgICAgICAgICAgfHwgdGhpcy5zZXR0aW5nLmlzV29ya2Zsb3dUcmVlXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY2hlY2tIYXNXb3JrZmxvdygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNvdW50UmVhZHkrKztcclxuICAgICAgICBpZiAodGhpcy5jb3VudFJlYWR5ID4gMSkge1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVsLmJhc2VSZWFkeSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuX3RyaWdnZXJQcm9jZXNzRGF0YSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzZXREZWZhdWx0VmFsdWVGaWx0ZXIoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZGVmYXVsdEZpbHRlckNvbHVtbikge1xyXG4gICAgICAgICAgICB0aGlzLmNydWRMaXN0LnNldEluaXRGaWx0ZXIodGhpcy5kZWZhdWx0RmlsdGVyQ29sdW1uKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHNwYWNlZC1jb21tZW50XHJcbiAgICAvLyNyZWdpb24gR2V0IERhdGFcclxuICAgIGFzeW5jIHJlbG9hZCgpIHtcclxuICAgICAgICB0aGlzLmNydWRMaXN0LnJlbG9hZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF90cmlnZ2VyUHJvY2Vzc0RhdGEoZ3JpZEluZm8/OiBHcmlkSW5mbykge1xyXG4gICAgICAgIGF3YWl0IHRoaXMucHJvY2Vzc0RhdGEoZ3JpZEluZm8pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgcHJvY2Vzc0RhdGEoZ3JpZEluZm8/OiBHcmlkSW5mbykge1xyXG4gICAgICAgIHRoaXMucmVhZHlUb1RyaW5oS3kgPSBmYWxzZTtcclxuICAgICAgICBpZiAodGhpcy5oYXNDcnVkTGlzdCkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuY3J1ZExpc3QpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoIWdyaWRJbmZvKSB7XHJcbiAgICAgICAgICAgICAgICBncmlkSW5mbyA9IHRoaXMuY3J1ZExpc3QuZ2V0R3JpZEluZm8oKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKCFncmlkSW5mbykge1xyXG4gICAgICAgICAgICAgICAgZ3JpZEluZm8gPSBuZXcgR3JpZEluZm8oe1xyXG4gICAgICAgICAgICAgICAgICAgIHBhZ2VJbmZvOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2U6IDEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VTaXplOiA5OTlcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcnM6IFtdLFxyXG4gICAgICAgICAgICAgICAgICAgIHNvcnRzOiBbXSxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLmdldERhdGEoZ3JpZEluZm8pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIG1vZGlmeUdyaWRJbmZvKGdyaWRJbmZvOiBHcmlkSW5mbyk6IFByb21pc2U8Ym9vbGVhbiB8IHZvaWQ+IHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFzeW5jIGdldERhdGEoZ3JpZEluZm86IEdyaWRJbmZvKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5iYXNlU2VydmljZSAmJiB0aGlzLm1vZGVsLnJlYWR5ICYmICF0aGlzLm1vZGVsLmxvYWRpbmcpIHtcclxuICAgICAgICAgICAgdGhpcy5fbWFya0xvYWRpbmcoKTtcclxuICAgICAgICAgICAgZ3JpZEluZm8ubW9kaWZ5RmlsdGVyKFdvcmtmbG93RmllbGRTdGF0ZUNvZGUsIGZpbHRlciA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZmlsdGVyLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGhhc051bGxWYWx1ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3RWYWx1ZXMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICBKU09OLnBhcnNlKGZpbHRlci52YWx1ZSkuZm9yRWFjaCh2YWx1ZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzTnVsbFZhbHVlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3RWYWx1ZXMucHVzaCh2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaGFzTnVsbFZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN0VmFsdWVzLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIub3BlcmF0b3IgPSBPcGVyYXRvci5pc051bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyLmxvZ2ljID0gJ29yJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyLmZpZWxkID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyLnZhbHVlID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyLm9wZXJhdG9yID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyLmZpbHRlcnMgPSBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5ld0ZpbHRlcihXb3JrZmxvd0ZpZWxkU3RhdGVDb2RlLCBPcGVyYXRvci5pc051bGwsICcnKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV3RmlsdGVyKFdvcmtmbG93RmllbGRTdGF0ZUNvZGUsIE9wZXJhdG9yLmluLCByZXN0VmFsdWVzKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdE1vZGlmeSA9IGF3YWl0IHRoaXMubW9kaWZ5R3JpZEluZm8oZ3JpZEluZm8pO1xyXG4gICAgICAgICAgICBpZiAoZ3JpZEluZm8uc29ydHMubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgICAgIGdyaWRJbmZvLnNvcnRzLnVuc2hpZnQodGhpcy5uZXdTb3J0KCdjcmVhdGVkJywgLTEpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAocmVzdWx0TW9kaWZ5ID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5kYXRhU291cmNlID0gW107XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLnRvdGFsID0gMDtcclxuICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuZXhwYW5kZWRSb3dLZXlzID0ge307XHJcbiAgICAgICAgICAgICAgICB0aGlzLl91bm1hcmtMb2FkaW5nKCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZG9HZXRSZXF1ZXN0KGdyaWRJbmZvKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBkb0dldFJlcXVlc3QoZ3JpZEluZm86IEdyaWRJbmZvKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmN1c3RvbUdldERhdGEpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5iYXNlU2VydmljZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRQcm9taXNlR2V0RGF0YShncmlkSW5mbylcclxuICAgICAgICAgICAgICAgICAgICAudGhlbihhc3luYyByZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnByb2Nlc3NHZXREYXRhKHJlc3BvbnNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmlyZURhdGFMb2FkZWQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZyhyZXNwb25zZS5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmlyZURhdGFMb2FkZWQoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSwgZXJyb3IgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd0h0dHBVbmtub3dFcnJvcigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpcmVEYXRhTG9hZGVkKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5nZXREYXRhQ3VzdG9tKGdyaWRJbmZvKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgX21hcmtMb2FkaW5nKCkge1xyXG4gICAgICAgIHRoaXMubW9kZWwubG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5tb2RlbC5hZGp1c3RlZFBvc2l0aW9uTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIGlmICh0aGlzLmNydWRMaXN0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3J1ZExpc3QuYWRqdXN0UG9zaXRpb25Mb2FkaW5nTWFzaygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5sb2FkaW5nVGltZW91dCk7XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ03DoXkgY2jhu6cgcGjhuqNuIGjhu5NpIHF1w6EgbMOidSwgdnVpIGzDsm5nIGtp4buDbSB0cmEgbOG6oWkgxJHGsOG7nW5nIHRydXnhu4FuIG3huqFuZyEnKTtcclxuICAgICAgICAgICAgdGhpcy5tb2RlbC5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgfSwgMjAwMDApO1xyXG4gICAgfVxyXG5cclxuICAgIF9oYW5kbGVSZWxvYWRlZChldnQgPSBudWxsKSB7XHJcbiAgICAgICAgdGhpcy5fdW5tYXJrTG9hZGluZygpO1xyXG4gICAgICAgIHRoaXMuYWZ0ZXJSZWxvYWRlZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGFmdGVyUmVsb2FkZWQoKSB7XHJcbiAgICB9XHJcblxyXG4gICAgX3VubWFya0xvYWRpbmcoKSB7XHJcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMubG9hZGluZ1RpbWVvdXQpO1xyXG4gICAgICAgIHRoaXMubW9kZWwubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZmlyZURhdGFMb2FkZWQoc3VjY2VzczogYm9vbGVhbiA9IHRydWUpIHtcclxuICAgICAgICBpZiAoc3VjY2VzcyAmJiB0aGlzLmNydWRMaXN0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3J1ZExpc3QucHJvY2Vzc0Jhc2VEYXRhKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX3VubWFya0xvYWRpbmcoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRQcm9taXNlR2V0RGF0YShncmlkSW5mbzogR3JpZEluZm8pIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLmdldEJ5R3JpZFJlcXVlc3QoZ3JpZEluZm8sIHRoaXMucGx1c1VybCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RGF0YUN1c3RvbShncmlkSW5mbzogR3JpZEluZm8pIHtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX2dldERhdGFTb3VyY2UocmVzcG9uc2U6IFJlc3BvbnNlUmVzdWx0KTogUHJvbWlzZTxhbnlbXT4ge1xyXG4gICAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFzeW5jIHByb2Nlc3NHZXREYXRhKHJlc3BvbnNlOiBSZXNwb25zZVJlc3VsdCkge1xyXG4gICAgICAgIHRoaXMubW9kZWwuZXhwYW5kZWRSb3dLZXlzID0ge307XHJcbiAgICAgICAgdGhpcy5tb2RlbC50b3RhbCA9IHJlc3BvbnNlLnRvdGFsUmVjb3JkO1xyXG4gICAgICAgIGlmIChyZXNwb25zZS5kYXRhICYmIHJlc3BvbnNlLmRhdGEubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmJlZm9yZVJlbmRlckRhdGFTb3VyY2UocmVzcG9uc2UuZGF0YSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGRhdGFTb3VyY2UgPSBhd2FpdCB0aGlzLl9nZXREYXRhU291cmNlKHJlc3BvbnNlKTtcclxuICAgICAgICBhd2FpdCB0aGlzLmFmdGVyUHJvY2Vzc0RhdGFJbkJhc2UoZGF0YVNvdXJjZSk7XHJcbiAgICAgICAgdGhpcy5tb2RlbC5kYXRhU291cmNlID0gZGF0YVNvdXJjZTtcclxuXHJcbiAgICAgICAgY29uc3QgcmVzZXRTZWxlY3RlZEl0ZW1zID0gdGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW1zICYmIHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtcy5sZW5ndGg7XHJcbiAgICAgICAgaWYgKHJlc2V0U2VsZWN0ZWRJdGVtcykge1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXMubGVuZ3RoID0gMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGF3YWl0IHRoaXMuYWZ0ZXJHZXREYXRhKCk7XHJcbiAgICAgICAgdGhpcy5fZ2V0UmVmRGF0YURyb3Bkb3duKHRoaXMubW9kZWwuZGF0YVNvdXJjZSk7XHJcbiAgICB9XHJcblxyXG4gICAgYmVmb3JlUmVuZGVyRGF0YVNvdXJjZShkYXRhc291cmNlOiBhbnkpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiBkYXRhc291cmNlO1xyXG4gICAgfVxyXG5cclxuICAgIGNhbGN1bGF0ZVJvd1NwYW4oZGF0YVNvdXJjZTogYW55W10sIGZpZWxkczogRmllbGRSb3dTcGFuW10sIGZ1bmNOZXh0OiBGdW5jdGlvbikge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YVNvdXJjZS5sZW5ndGggLSAxOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGZ1bmNOZXh0ICYmIGZ1bmNOZXh0KGRhdGFTb3VyY2VbaV0pICE9IGZ1bmNOZXh0KGRhdGFTb3VyY2VbaSArIDFdKSkgY29udGludWU7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGYgPSAwOyBmIDwgZmllbGRzLmxlbmd0aDsgZisrKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaWVsZCA9IGZpZWxkc1tmXS5maWVsZDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkUm9vdEluZGV4ID0gYHJvb3RJbmRleF8ke2ZpZWxkfWA7XHJcbiAgICAgICAgICAgICAgICBsZXQgZXF1YWwgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGlmIChmaWVsZHNbZl0uZnVuY0dldFZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZXF1YWwgPSBmaWVsZHNbZl0uZnVuY0dldFZhbHVlKGRhdGFTb3VyY2VbaSArIDFdKSA9PSBmaWVsZHNbZl0uZnVuY0dldFZhbHVlKGRhdGFTb3VyY2VbaV0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZXF1YWwgPSBkYXRhU291cmNlW2kgKyAxXVtmaWVsZF0gPT0gZGF0YVNvdXJjZVtpXVtmaWVsZF07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoZXF1YWwpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YVNvdXJjZVtpXVtmaWVsZFJvb3RJbmRleF0gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhU291cmNlW2ldW2ZpZWxkUm9vdEluZGV4XSA9IGk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZGF0YVNvdXJjZVtpXS5yb3dTcGFuKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhU291cmNlW2ldLnJvd1NwYW4gPSB7fTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhU291cmNlW2ldLnJvd1NwYW5bZmllbGRdID0gMTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5kZXhSb290SXRlbSA9IGRhdGFTb3VyY2VbaV1bZmllbGRSb290SW5kZXhdO1xyXG4gICAgICAgICAgICAgICAgICAgIGRhdGFTb3VyY2VbaSArIDFdW2ZpZWxkUm9vdEluZGV4XSA9IGluZGV4Um9vdEl0ZW07XHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YVNvdXJjZVtpbmRleFJvb3RJdGVtXS5yb3dTcGFuW2ZpZWxkXSsrO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghZGF0YVNvdXJjZVtpICsgMV0uaGlkZGVuKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFTb3VyY2VbaSArIDFdLmhpZGRlbiA9IHt9O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBkYXRhU291cmNlW2kgKyAxXS5oaWRkZW5bZmllbGRdID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBhZnRlclByb2Nlc3NEYXRhSW5CYXNlKGRhdGFTb3VyY2U6IGFueVtdID0gW10pIHtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgYWZ0ZXJHZXREYXRhKCkge1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgX2dldFJlZkRhdGFEcm9wZG93bihkYXRhU291cmNlKSB7XHJcbiAgICAgICAgaWYgKGRhdGFTb3VyY2UgJiYgZGF0YVNvdXJjZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNldHRpbmcuYWR2YW5jZURhdGEuZmllbGROZWVkR2V0UmVmKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBhcnJQcm9taXNlRG9udE5lZWRXYWl0ID0gW107XHJcbiAgICAgICAgICAgICAgICBjb25zdCBhcnJTY2hlbWFEb250TmVlZFdhaXQgPSBbXTtcclxuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgc2NoZW1hIG9mIHRoaXMuc2V0dGluZy5hZHZhbmNlRGF0YS5maWVsZE5lZWRHZXRSZWYpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaWVsZCA9IHNjaGVtYS5maWVsZDtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2NoZW1hW0tleUZpZWxkR2V0UmVmVHlwZV0gPT0gRW51bUdldFJlZlR5cGUuU0VSVkVSKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzY2hlbWEuZm9yY2VHZXREYXRhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAodGhpcy5zZXR0aW5nLmdyb3VwQ29sdW1uICYmIHRoaXMuc2V0dGluZy5ncm91cENvbHVtbi5yYXdDb2x1bW4gJiYgdGhpcy5zZXR0aW5nLmdyb3VwQ29sdW1uLnJhd0NvbHVtbi5maWVsZCA9PSBzY2hlbWEuZmllbGQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCB0aGlzLnNldHRpbmcuY29scy5zb21lKGl0ZW0gPT4gaXRlbS5maWVsZCA9PSAnc3RyJyArIGZpZWxkICYmIGl0ZW0udmlzaWJsZSAhPSBmYWxzZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhcnJWYWx1ZSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVNvdXJjZS5mb3JFYWNoKGl0ZW1EYXRhID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50VmFsdWUgPSBpdGVtRGF0YVtmaWVsZF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRWYWx1ZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzY2hlbWEubXVsdGlwbGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpZHMgPSBjdXJyZW50VmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoaWRzKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkcyA9IGlkcy5zcGxpdCgnLCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRzLmZvckVhY2goaWQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaWQpIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWFyclZhbHVlLnNvbWUocCA9PiBwID09IGlkKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJWYWx1ZS5wdXNoKGlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICghYXJyVmFsdWUuc29tZShwID0+IHAgPT0gY3VycmVudFZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyVmFsdWUucHVzaChjdXJyZW50VmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJyVmFsdWUubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwcm9taXNlID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2NoZW1hLmJhc2VTZXJ2aWNlIGluc3RhbmNlb2YgTWFzdGVyRGF0YVNlcnZpY2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZSA9IHNjaGVtYS5iYXNlU2VydmljZS5nZXREYXRhRHJvcGRvd24oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWEuZ3JvdXBDb2RlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIGFyclZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIHRoaXMuX2NydWRTZXJ2aWNlLmNyZWF0ZURyb3Bkb3duT3B0aW9ucyhzY2hlbWEpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb21pc2UgPSBzY2hlbWEuYmFzZVNlcnZpY2UuZ2V0RGF0YURyb3Bkb3duQnlGaWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGhpcy5uZXdGaWx0ZXIoc2NoZW1hLnZhbHVlRmllbGQsIE9wZXJhdG9yLmluLCBhcnJWYWx1ZSldLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY3J1ZFNlcnZpY2UuY3JlYXRlRHJvcGRvd25PcHRpb25zKHNjaGVtYSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjaGVtYS5vcmRlciAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHByb21pc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzY2hlbWEuY2FsbGJhY2tEYXRhRmluaXNoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWEuY2FsbGJhY2tEYXRhRmluaXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiByZXN1bHRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWVyZ2VSZWZEYXRhVG9EYXRhc291cmNlKGRhdGFTb3VyY2UsIHNjaGVtYSwgcmVzdWx0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyclByb21pc2VEb250TmVlZFdhaXQucHVzaChwcm9taXNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyU2NoZW1hRG9udE5lZWRXYWl0LnB1c2goc2NoZW1hKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZ1bmNHZXRMYWJlbCA9IHRoaXMuZ2V0RnVudGlvbkdldExhYmVsKHNjaGVtYSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFTb3VyY2UuZm9yRWFjaChpdGVtRGF0YSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZWZJdGVtID0gc2NoZW1hLmRhdGFTb3VyY2UuZmluZChpID0+IHNjaGVtYS5mdW5jQ29tcGFyZShpLCBpdGVtRGF0YVtmaWVsZF0pKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWZJdGVtICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtRGF0YVsnc3RyJyArIGZpZWxkXSA9IGZ1bmNHZXRMYWJlbChyZWZJdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGFyclByb21pc2VEb250TmVlZFdhaXQubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFyclJlcyA9IGF3YWl0IFByb21pc2UuYWxsKGFyclByb21pc2VEb250TmVlZFdhaXQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGFyclNjaGVtYURvbnROZWVkV2FpdC5mb3JFYWNoKChzY2hlbWEsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzY2hlbWEuY2FsbGJhY2tEYXRhRmluaXNoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWEuY2FsbGJhY2tEYXRhRmluaXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBhcnJSZXNbaW5kZXhdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1lcmdlUmVmRGF0YVRvRGF0YXNvdXJjZShkYXRhU291cmNlLCBzY2hlbWEsIGFyclJlc1tpbmRleF0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5hZnRlckdldFJlZkRhdGFEcm9wZG93bihudWxsKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVhZHlUb1RyaW5oS3kgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZWFkeVRvVHJpbmhLeSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRGdW50aW9uR2V0TGFiZWwoc2NoZW1hOiBDb2x1bW5TY2hlbWFCYXNlKSB7XHJcbiAgICAgICAgbGV0IGZ1bmNHZXRMYWJlbCA9IGl0ZW0gPT4gaXRlbVtzY2hlbWEuZGlzcGxheUZpZWxkSW5HcmlkXSB8fCBpdGVtW3NjaGVtYS5kaXNwbGF5RmllbGRdIHx8IGl0ZW1bJ3RlbiddO1xyXG4gICAgICAgIGlmIChzY2hlbWEuZnVuY0dldExhYmVsKSB7XHJcbiAgICAgICAgICAgIGZ1bmNHZXRMYWJlbCA9IHNjaGVtYS5mdW5jR2V0TGFiZWw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmdW5jR2V0TGFiZWw7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBtZXJnZVJlZkRhdGFUb0RhdGFzb3VyY2UoZGF0YVNvdXJjZTogYW55W10sIHNjaGVtYTogQ29sdW1uU2NoZW1hQmFzZSwgZGF0YTogYW55W10pIHtcclxuICAgICAgICBpZiAoZGF0YSA9PSBudWxsKSByZXR1cm47XHJcbiAgICAgICAgY29uc3QgZmllbGQgPSBzY2hlbWEuZmllbGQ7XHJcbiAgICAgICAgY29uc3QgZnVuY0dldExhYmVsID0gdGhpcy5nZXRGdW50aW9uR2V0TGFiZWwoc2NoZW1hKTtcclxuICAgICAgICBsZXQgZnVuY1NldFZhbHVlUm93ID0gKHJvd0l0ZW0sIGRhdGEpID0+IHtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGxldCBmdW5jR2V0UmVmRGF0YVJvdyA9IChyZWZJdGVtcykgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gcmVmSXRlbXMubWFwKGl0ZW0gPT4gZnVuY0dldExhYmVsKGl0ZW0pKS5qb2luKGAke3NjaGVtYS5zZXBhcmF0b3J9IGApO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgaWYgKHNjaGVtYS5mdW5jU2V0VmFsdWVSb3cpIHtcclxuICAgICAgICAgICAgZnVuY1NldFZhbHVlUm93ID0gc2NoZW1hLmZ1bmNTZXRWYWx1ZVJvdztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHNjaGVtYS5mdW5jR2V0UmVmRGF0YVJvdykge1xyXG4gICAgICAgICAgICBmdW5jR2V0UmVmRGF0YVJvdyA9IHNjaGVtYS5mdW5jR2V0UmVmRGF0YVJvdztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHNjaGVtYS5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICBkYXRhU291cmNlLmZvckVhY2goaXRlbURhdGEgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGl0ZW1EYXRhW2ZpZWxkXSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGlkcyA9IGl0ZW1EYXRhW2ZpZWxkXTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoaWRzKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZHMgPSBpZHMuc3BsaXQoJywnKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVmSXRlbXMgPSBkYXRhLmZpbHRlcihpID0+IGlkcy5zb21lKHEgPT4gc2NoZW1hLmZ1bmNDb21wYXJlKGksIHEpKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlZkl0ZW1zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbURhdGFbJ3N0cicgKyBmaWVsZF0gPSBmdW5jR2V0UmVmRGF0YVJvdyhyZWZJdGVtcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmNTZXRWYWx1ZVJvdyhpdGVtRGF0YSwgcmVmSXRlbXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBkYXRhU291cmNlLmZvckVhY2goaXRlbURhdGEgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGl0ZW1EYXRhW2ZpZWxkXSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVmSXRlbSA9IGRhdGEuZmluZChpID0+IHNjaGVtYS5mdW5jQ29tcGFyZShpLCBpdGVtRGF0YVtmaWVsZF0pKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVmSXRlbSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1EYXRhWydzdHInICsgZmllbGRdID0gZnVuY0dldExhYmVsKHJlZkl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jU2V0VmFsdWVSb3coaXRlbURhdGEsIHJlZkl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmFmdGVyR2V0UmVmRGF0YURyb3Bkb3duKGZpZWxkKTtcclxuICAgIH1cclxuXHJcbiAgICBhZnRlckdldFJlZkRhdGFEcm9wZG93bihmaWVsZDogc3RyaW5nKSB7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzcGFjZWQtY29tbWVudFxyXG4gICAgLy8jZW5kcmVnaW9uXHJcblxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHNwYWNlZC1jb21tZW50XHJcbiAgICAvLyNyZWdpb24gV29ya2Zsb3dcclxuXHJcbiAgICBwcml2YXRlIGFzeW5jIGNoZWNrSGFzV29ya2Zsb3coKSB7XHJcbiAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLmdldEtleVdvcmtmbG93U2V0dGluZygpO1xyXG4gICAgICAgIGlmICh0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UudXNlV29ya2Zsb3cpIHtcclxuICAgICAgICAgICAgY29uc3QgZGF0YVdvcmtmbG93TmV3ID0gKGF3YWl0IHRoaXMuX3dvcmtmbG93U2V0dGluZ1NlcnZpY2UuZ2V0RGV0YWlsQnlGaWx0ZXIoW1xyXG4gICAgICAgICAgICAgICAgdGhpcy5uZXdGaWx0ZXIoJ3RhYmxlTmFtZScsIE9wZXJhdG9yLmVxdWFsLCBrZXkpXHJcbiAgICAgICAgICAgIF0pKS5kYXRhO1xyXG4gICAgICAgICAgICB0aGlzLl9yZWdpc3Rlckdsb2JhbFNlcnZpY2UodGhpcy5fY29uZ1ZpZWNTZXJ2aWNlSW5CYXNlKTtcclxuICAgICAgICAgICAgaWYgKGRhdGFXb3JrZmxvd05ldykge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5nZXRXb3JrZmxvd0RldGFpbEJ5V29ya2Zsb3dTZXR0aW5nKGRhdGFXb3JrZmxvd05ldyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmcud29ya2Zsb3dTZXR0aW5nTmV3ID0gZGF0YVdvcmtmbG93TmV3O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hcHBlbmRDb2xXb3JrZmxvd1N0YXR1cyhkYXRhV29ya2Zsb3dOZXcud29ya2Zsb3dzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLnNldHRpbmcuaXNXb3JrZmxvd1RyZWUpIHtcclxuICAgICAgICAgICAgICAgIC8vIEzhuqV5IHJhIHRvw6BuIGLhu5kgY+G6pXUgaMOsbmggd29ya2Zsb3cgY3VzdG9tIMSR4buDIGzhuqV5IGRhdGFzb3VyY2UgdHLhuqFuZyB0aMOhaVxyXG4gICAgICAgICAgICAgICAgY29uc3QgZGF0YVNvdXJjZSA9IGF3YWl0IHRoaXMuZ2V0RGF0YVNvdXJjZVRyYW5nVGhhaVdvcmtmbG93KCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGVuZENvbFdvcmtmbG93U3RhdHVzKGRhdGFTb3VyY2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgZ2V0V29ya2Zsb3dEZXRhaWxCeVdvcmtmbG93U2V0dGluZyhpdGVtV29ya2Zsb3dTZXR0aW5nOiBhbnkpIHtcclxuICAgICAgICBpdGVtV29ya2Zsb3dTZXR0aW5nLndvcmtmbG93cyA9IFtdO1xyXG4gICAgICAgIGxldCB3b3JrZmxvd0NvZGVzID0gW107XHJcbiAgICAgICAgLy8gTuG6v3UgdOG6oW8gdGFzayB0aGF5IHbDrCB04bqhbyBjw7RuZyB2aeG7h2NcclxuICAgICAgICBpZiAoaXRlbVdvcmtmbG93U2V0dGluZy5jcmVhdGVUYXNrSW5zdGVhZCkge1xyXG4gICAgICAgICAgICB3b3JrZmxvd0NvZGVzID0gYXdhaXQgdGhpcy5nZXRXb3JrZmxvd0NvZGVCeVRhc2soKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoaXRlbVdvcmtmbG93U2V0dGluZy53b3JrZmxvd0NvZGVzICYmICFBcnJheS5pc0FycmF5KGl0ZW1Xb3JrZmxvd1NldHRpbmcud29ya2Zsb3dDb2RlcykpIHtcclxuICAgICAgICAgICAgaXRlbVdvcmtmbG93U2V0dGluZy53b3JrZmxvd0NvZGVzID0gaXRlbVdvcmtmbG93U2V0dGluZy53b3JrZmxvd0NvZGVzLnNwbGl0KCcsJyk7XHJcbiAgICAgICAgICAgIHdvcmtmbG93Q29kZXMgPSBpdGVtV29ya2Zsb3dTZXR0aW5nLndvcmtmbG93Q29kZXM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAod29ya2Zsb3dDb2Rlcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgY29uc3Qgd29ya2Zsb3dzID0gKGF3YWl0IHRoaXMuX3N0YXRlTWFjaGluZXNTZXJ2aWNlLmdldERhdGFEcm9wZG93bkJ5RmlsdGVyKFxyXG4gICAgICAgICAgICAgICAgW1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmV3RmlsdGVyKCdjb2RlJywgT3BlcmF0b3IuaW4sIHdvcmtmbG93Q29kZXMpXHJcbiAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgbmV3IERyb3Bkb3duT3B0aW9ucyh7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVGaWVsZDogJ2NvZGUnLFxyXG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXlGaWVsZDogJ3RpdGxlJyxcclxuICAgICAgICAgICAgICAgICAgICBmaWVsZFBsdXM6ICdkYXRhJ1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKSk7XHJcbiAgICAgICAgICAgIHdvcmtmbG93cz8uZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICAgICAgICAgIGl0ZW0uZGF0YSA9IEpTT04ucGFyc2UoaXRlbS5kYXRhKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXRlTWFjaGluZURhdGEgPSBpdGVtLmRhdGE7XHJcbiAgICAgICAgICAgICAgICBzdGF0ZU1hY2hpbmVEYXRhLmFjdGlvbnMgPSB7fTtcclxuICAgICAgICAgICAgICAgIHN0YXRlTWFjaGluZURhdGEubWFjaGluZXMuZm9yRWFjaChtYWNoaW5lID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBzdGF0ZU1hY2hpbmVEYXRhLmFjdGlvbnNbbWFjaGluZS5jb2RlXSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIHN0YXRlTWFjaGluZURhdGEuY29ubmVjdGlvbnMuZm9yRWFjaChjb25uID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbm4uc291cmNlID09IG1hY2hpbmUuaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlTWFjaGluZURhdGEuYWN0aW9uc1ttYWNoaW5lLmNvZGVdLnB1c2goY29ubik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgaXRlbVdvcmtmbG93U2V0dGluZy53b3JrZmxvd3MgPSB3b3JrZmxvd3M7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgZ2V0V29ya2Zsb3dDb2RlQnlUYXNrKCkge1xyXG4gICAgICAgIC8vIEzhuqV5IGPDoWMgcXV5IHRyw6xuaCBn4bqvbiBjaG8gY8O0bmcgdmnhu4djXHJcbiAgICAgICAgY29uc3QgcGhhbkNvbmdDb25nVmllY1NlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoQ2F1SGluaFdvcmtmbG93U2VydmljZSk7XHJcbiAgICAgICAgY29uc3QgZGF0YVdvcmtmbG93QnlUYXNrID0gKGF3YWl0IHBoYW5Db25nQ29uZ1ZpZWNTZXJ2aWNlLmdldEFsbChcclxuICAgICAgICAgICAgW10sICd3b3JrZmxvd0NvZGVzJ1xyXG4gICAgICAgICkpLmRhdGE7XHJcbiAgICAgICAgaWYgKCFkYXRhV29ya2Zsb3dCeVRhc2spIHJldHVybiBbXTtcclxuICAgICAgICBjb25zdCB3b3JrZmxvd0NvZGVzID0gW107XHJcbiAgICAgICAgZGF0YVdvcmtmbG93QnlUYXNrLmZvckVhY2goY2F1SGluaCA9PiB7XHJcbiAgICAgICAgICAgIGlmICghY2F1SGluaC53b3JrZmxvd0NvZGVzKSByZXR1cm47XHJcbiAgICAgICAgICAgIGNhdUhpbmgud29ya2Zsb3dDb2Rlcy5zcGxpdCgnLCcpLmZvckVhY2god29ya2Zsb3dDb2RlID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh3b3JrZmxvd0NvZGVzLmluZGV4T2Yod29ya2Zsb3dDb2RlKSA9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHdvcmtmbG93Q29kZXMucHVzaCh3b3JrZmxvd0NvZGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gd29ya2Zsb3dDb2RlcztcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFwcGVuZENvbFdvcmtmbG93U3RhdHVzKHdvcmtmbG93czogV2ZJdGVtW10pIHtcclxuICAgICAgICBjb25zdCBkYXRhU291cmNlID0gW3tcclxuICAgICAgICAgICAgaWQ6IG51bGwsXHJcbiAgICAgICAgICAgIHJhd1RlbjogJ0NoxrBhIGLhuq90IMSR4bqndScsXHJcbiAgICAgICAgICAgIHRlbjogJ0NoxrBhIGLhuq90IMSR4bqndScsXHJcbiAgICAgICAgICAgIG1hTG93ZXI6ICcnLFxyXG4gICAgICAgICAgICB0ZW5Mb3dlcjogJ2NoxrBhIGLhuq90IMSR4bqndSdcclxuICAgICAgICB9XTtcclxuICAgICAgICBpZiAod29ya2Zsb3dzICYmIHdvcmtmbG93cy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgd29ya2Zsb3dzLmZvckVhY2god29ya2Zsb3cgPT4ge1xyXG4gICAgICAgICAgICAgICAgd29ya2Zsb3cuZGF0YS5tYWNoaW5lcy5mb3JFYWNoKG1hY2hpbmUgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1TdGF0dXMgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBtYWNoaW5lLmNvZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJhd1RlbjogbWFjaGluZS5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW46IG1hY2hpbmUubmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWFMb3dlcjogbWFjaGluZS5jb2RlLnRvTG93ZXJDYXNlKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlbkxvd2VyOiBtYWNoaW5lLm5hbWUudG9Mb3dlckNhc2UoKVxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFkYXRhU291cmNlLnNvbWUoeCA9PiB4LnRlbkxvd2VyID09IGl0ZW1TdGF0dXMudGVuTG93ZXIgJiYgeC5tYUxvd2VyID09IGl0ZW1TdGF0dXMubWFMb3dlcikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVNvdXJjZS5wdXNoKGl0ZW1TdGF0dXMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtU2FtZU5hbWUgPSBkYXRhU291cmNlLmZpbmQocSA9PiBxLnRlbkxvd2VyID09IGl0ZW1TdGF0dXMudGVuTG93ZXIgJiYgcS5tYUxvd2VyICE9IGl0ZW1TdGF0dXMubWFMb3dlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtU2FtZU5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1TYW1lTmFtZS50ZW4gPSBgJHtpdGVtU2FtZU5hbWUucmF3VGVufSAoJHtpdGVtU2FtZU5hbWUuaWR9KWA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtU3RhdHVzLnRlbiA9IGAke2l0ZW1TdGF0dXMucmF3VGVufSAoJHtpdGVtU3RhdHVzLmlkfSlgO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNldHRpbmcuYWR2YW5jZURhdGEudXNlckRhdGEgPSB0aGlzLm1vZGVsLmFkdmFuY2VEYXRhLnVzZXJEYXRhO1xyXG4gICAgICAgIGNvbnN0IGNvbFBhcmVudCA9IG5ldyBDb2x1bW5TY2hlbWFCYXNlKHtcclxuICAgICAgICAgICAgZmllbGQ6IFdvcmtmbG93RmllbGRTdGF0ZUNvZGUsXHJcbiAgICAgICAgICAgIGRhdGFUeXBlOiAndHJhbmdUaGFpVjUnLFxyXG4gICAgICAgICAgICBkYXRhVHlwZVJlZkZpZWxkOiAndHJhbmdUaGFpVjUnLFxyXG4gICAgICAgICAgICB2aXNpYmxlOiAhdGhpcy5zZXR0aW5nLmhpZGRlbldvcmtmbG93Q29sdW1uLFxyXG4gICAgICAgICAgICBjb250cm9sVHlwZTogQ29udHJvbFR5cGUuZHJvcGRvd24sXHJcbiAgICAgICAgICAgIGxhYmVsOiAnVHLhuqFuZyB0aMOhaScsXHJcbiAgICAgICAgICAgIHdpZHRoOiAnMTIwcHgnLFxyXG4gICAgICAgICAgICB0ZXh0QWxpZ246IFRleHRBbGlnbi5DZW50ZXIsXHJcbiAgICAgICAgICAgIGlzVHJlZTogdHJ1ZSxcclxuICAgICAgICAgICAgZmllbGRUcmVlOiAncGFyZW50SWQnLFxyXG4gICAgICAgICAgICBkYXRhU291cmNlLFxyXG4gICAgICAgICAgICBhbGxvd0ZpbHRlcjogdGhpcy5zZXR0aW5nLmFsbG93RmlsdGVyV29ya2Zsb3dDb2x1bW5cclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLnNldHRpbmcuYWR2YW5jZURhdGEuZmllbGROZWVkR2V0UmVmLnVuc2hpZnQoY29sUGFyZW50KTtcclxuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHtcclxuICAgICAgICAgICAgLi4uY29sUGFyZW50LFxyXG4gICAgICAgICAgICByYXdDb2x1bW46IGNvbFBhcmVudCxcclxuICAgICAgICAgICAgY29udHJvbFR5cGU6IENvbnRyb2xUeXBlLmRyb3Bkb3duLFxyXG4gICAgICAgICAgICBkYXRhVHlwZTogY29sUGFyZW50LmRhdGFUeXBlUmVmRmllbGQsXHJcbiAgICAgICAgICAgIGZpZWxkOiAnc3RyJyArIGNvbFBhcmVudC5maWVsZCxcclxuICAgICAgICAgICAgYWxsb3dGaWx0ZXI6IGNvbFBhcmVudC5hbGxvd0ZpbHRlcixcclxuICAgICAgICAgICAgc29ydDogZmFsc2UsXHJcbiAgICAgICAgICAgIHZpc2libGU6ICF0aGlzLnNldHRpbmcuaGlkZGVuV29ya2Zsb3dDb2x1bW5cclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbFBhcmVudC52aXNpYmxlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLmNvbHMucHVzaChjb2xQYXJlbnQsIGNoaWxkcmVuKTtcclxuICAgICAgICB0aGlzLmNydWRMaXN0LmZvcm1hdENvbHVtbnMoW2NvbFBhcmVudCwgY2hpbGRyZW5dKTtcclxuICAgICAgICAvLyB0aGlzLnNldHRpbmcuY29scy5wdXNoKGNvbFBhcmVudCk7XHJcbiAgICAgICAgLy8gdGhpcy5jcnVkTGlzdC5mb3JtYXRDb2x1bW5zKFtjb2xQYXJlbnRdKTtcclxuICAgICAgICB0aGlzLmNydWRMaXN0LmJ1aWxkRmlsdGVyQ29sdW1uKFtjb2xQYXJlbnRdKTtcclxuXHJcbiAgICAgICAgY29uc3QgdXNlckN1cnJlbnQgPSB0aGlzLl91c2VyU2VydmljZS5nZXRDdXJyZW50VXNlcigpO1xyXG4gICAgICAgIGlmICh1c2VyQ3VycmVudC51c2VyTmFtZSA9PSAnYWRtaW4nKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbEZvckFkbWluID0gbmV3IENvbHVtblNjaGVtYUJhc2Uoe1xyXG4gICAgICAgICAgICAgICAgZmllbGQ6ICdfX3ZpZXdIaXN0b3J5JyxcclxuICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnX192aWV3SGlzdG9yeScsXHJcbiAgICAgICAgICAgICAgICBsYWJlbDogJycsXHJcbiAgICAgICAgICAgICAgICB3aWR0aDogJzEwMHB4JyxcclxuICAgICAgICAgICAgICAgIHRleHRBbGlnbjogVGV4dEFsaWduLkNlbnRlcixcclxuICAgICAgICAgICAgICAgIGFsbG93RmlsdGVyOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIHNvcnQ6IGZhbHNlXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLnNldHRpbmcuY29scy5wdXNoKGNvbEZvckFkbWluKTtcclxuICAgICAgICAgICAgdGhpcy5jcnVkTGlzdC5mb3JtYXRDb2x1bW5zKFtjb2xGb3JBZG1pbl0pO1xyXG4gICAgICAgICAgICB0aGlzLmNydWRMaXN0LmJ1aWxkRmlsdGVyQ29sdW1uKFtjb2xGb3JBZG1pbl0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXREYXRhU291cmNlVHJhbmdUaGFpV29ya2Zsb3coKSB7XHJcbiAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzcGFjZWQtY29tbWVudFxyXG4gICAgLy8jZW5kcmVnaW9uXHJcblxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHNwYWNlZC1jb21tZW50XHJcbiAgICAvLyNyZWdpb24gY3J1ZFxyXG4gICAgcHJpdmF0ZSBsb2FkSXRlbUZyb21RdWVyeVBhcmFtKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmxvYWREZXRhaWxGcm9tUXVlcnlQYXJhbSA9PT0gdW5kZWZpbmVkIHx8IHRoaXMubG9hZERldGFpbEZyb21RdWVyeVBhcmFtID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIGxldCBpZEluUXVlcnlTdHJpbmcgPSBudWxsO1xyXG4gICAgICAgICAgICBsZXQgcGlkID0gbnVsbDsgLy8gcGVybWlzc2lvbiBJZCDEkcaw4bujYyBuZ8aw4budaSBraMOhYyBzaGFyZVxyXG4gICAgICAgICAgICBpZiAodGhpcy5fYWN0aXZhdGVkUm91dGUuc25hcHNob3RcclxuICAgICAgICAgICAgICAgICYmIHRoaXMuX2FjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgaWRJblF1ZXJ5U3RyaW5nID0gdGhpcy5fYWN0aXZhdGVkUm91dGUuc25hcHNob3QucXVlcnlQYXJhbXMuaWQgfHwgdGhpcy5fYWN0aXZhdGVkUm91dGUuc25hcHNob3QucXVlcnlQYXJhbXMuZW50aXR5S2V5O1xyXG4gICAgICAgICAgICAgICAgcGlkID0gdGhpcy5fYWN0aXZhdGVkUm91dGUuc25hcHNob3QucXVlcnlQYXJhbXMucGlkO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChwaWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9hZERldGFpbFBpZChwaWQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGlkSW5RdWVyeVN0cmluZykge1xyXG4gICAgICAgICAgICAgICAgLy8gZ2V0IGRldGFpbCBkYXRhXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UuZ2V0RGV0YWlsV2l0aFBlcm1pc3Npb24oaWRJblF1ZXJ5U3RyaW5nKVxyXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKHJlcyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVzLmRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnS2jDtG5nIHTDrG0gdGjhuqV5IGLhuqNuIGdoaSBj4bqnbiB4ZW0gY2hpIHRp4bq/dCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgocmVzLmRhdGEuYmFzZVBlcm1pc3Npb24gJiBQZXJtaXNzaW9uQmFzZS5FRElUKSA9PSBQZXJtaXNzaW9uQmFzZS5FRElUXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAocmVzLmRhdGEuYmFzZVBlcm1pc3Npb24gJiBQZXJtaXNzaW9uQmFzZS5SRUFEKSA9PSBQZXJtaXNzaW9uQmFzZS5SRUFEXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZWRpdChyZXMuZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ0LhuqFuIGtow7RuZyBjw7MgcXV54buBbiB4ZW0gYuG6o24gZ2hpJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdlcnJvciBvbiBnZXQgZGV0YWlsIGZyb20gcXVlcnlzdHJpbmcnLCBlcnIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ0tow7RuZyB0w6xtIHRo4bqleSBi4bqjbiBnaGkgY+G6p24geGVtIGNoaSB0aeG6v3QnKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGxvYWREZXRhaWxQaWQocGlkOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UuZ2V0RGV0YWlsQnlQaWQocGlkKVxyXG4gICAgICAgICAgICAudGhlbihyZXMgPT4gdGhpcy5oYW5kbGVSZXNwb25zZShyZXMsICcnLCBmID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICghcmVzLmRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ0tow7RuZyB0w6xtIHRo4bqleSBi4bqjbiBnaGkgY+G6p24geGVtIGNoaSB0aeG6v3QnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICgocmVzLmRhdGEuYmFzZVBlcm1pc3Npb24gJiBQZXJtaXNzaW9uQmFzZS5FRElUKSA9PSBQZXJtaXNzaW9uQmFzZS5FRElUXHJcbiAgICAgICAgICAgICAgICAgICAgfHwgKHJlcy5kYXRhLmJhc2VQZXJtaXNzaW9uICYgUGVybWlzc2lvbkJhc2UuUkVBRCkgPT0gUGVybWlzc2lvbkJhc2UuUkVBRFxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzLmRhdGEucGlkID0gcGlkO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlcy5kYXRhLmJhc2VQZXJtaXNzaW9uQnlQaWQgPSByZXMuZGF0YS5iYXNlUGVybWlzc2lvbjtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9lZGl0KHJlcy5kYXRhKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnQuG6oW4ga2jDtG5nIGPDsyBxdXnhu4FuIHhlbSBi4bqjbiBnaGknKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSkpLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdlcnJvciBvbiBnZXQgZGV0YWlsIGZyb20gcXVlcnlzdHJpbmcnLCBlcnIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdLaMO0bmcgdMOsbSB0aOG6pXkgYuG6o24gZ2hpIGPhuqduIHhlbSBjaGkgdGnhur90Jyk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF9hZGQoZXZ0KSB7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0VmFsaWRhdGUgPSBhd2FpdCB0aGlzLnZhbGlkYXRlQWRkKCk7XHJcbiAgICAgICAgaWYgKCFyZXN1bHRWYWxpZGF0ZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZm9ybU1vZGVsLmRhdGEgPSB7fTtcclxuICAgICAgICB0aGlzLmZvcm1Nb2RlbC5mb3JtU3RhdGUgPSBGb3JtU3RhdGUuQUREO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuYmVmb3JlQWRkKCk7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLnBvcHVwSGVhZGVyID0gYFRow6ptIG3hu5tpICR7dGhpcy5zZXR0aW5nLm9iamVjdE5hbWV9IGA7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLm1hc2tDbGFzcyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5zaG93RGV0YWlsRm9ybSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgdmFsaWRhdGVBZGQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgYmVmb3JlQWRkKCkge1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF92aWV3KHJvd0RhdGEpIHtcclxuICAgICAgICBpZiAocm93RGF0YS5iYXNlUGVybWlzc2lvbiAmIFBlcm1pc3Npb25CYXNlLkVESVQpIHtcclxuICAgICAgICAgICAgdGhpcy5fZWRpdChyb3dEYXRhKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybU1vZGVsLmZvcm1TdGF0ZSA9IEZvcm1TdGF0ZS5WSUVXO1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmJlZm9yZVZpZXcoKTtcclxuICAgICAgICAgICAgdGhpcy5zZXR0aW5nLnBvcHVwSGVhZGVyID0gYENoaSB0aeG6v3QgJHt0aGlzLnNldHRpbmcub2JqZWN0TmFtZX0gYDtcclxuICAgICAgICAgICAgdGhpcy5zZXR0aW5nLm1hc2tDbGFzcyA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybU1vZGVsLmRhdGEgPSB0aGlzLmNsb25lRGF0YShyb3dEYXRhKTtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5tb2RpZnlWaWV3TW9kZWwocm93RGF0YSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd0RldGFpbEZvcm0gPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBiZWZvcmVWaWV3KCkge1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIG1vZGlmeVZpZXdNb2RlbChyb3dEYXRhOiBhbnkpIHtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBfY29weUxpbmtNdWx0aXBsZSgpIHtcclxuICAgICAgICBjb25zdCBwYXRocyA9IFtdO1xyXG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXMpIHtcclxuICAgICAgICAgICAgcGF0aHMucHVzaChhd2FpdCB0aGlzLmdldENvcHlQYXRoKHRoaXMuc2V0dGluZywgaXRlbSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9jb21tb25TZXJ2aWNlLmNvcHlCeVN0b3JhZ2UocGF0aHMuam9pbignXFxyXFxuJykpO1xyXG4gICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93U3VjY2VzcygnxJDDoyBzYW8gY2jDqXAgY8OhYyBsacOqbiBr4bq/dCDEkcOjIGNo4buNbicpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF9jb3B5TGluayhyb3dEYXRhOiBhbnkpIHtcclxuICAgICAgICBjb25zdCBwYXRoID0gYXdhaXQgdGhpcy5nZXRDb3B5UGF0aCh0aGlzLnNldHRpbmcsIHJvd0RhdGEpO1xyXG4gICAgICAgIHRoaXMuX2NvbW1vblNlcnZpY2UuY29weUJ5U3RvcmFnZShwYXRoKTtcclxuICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1N1Y2Nlc3MoJ8SQw6Mgc2FvIGNow6lwIGxpw6puIGvhur90Jyk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX2VkaXQocm93RGF0YSwgc2NvcGVEYXRhRWRpdDogYW55ID0ge30pIHtcclxuICAgICAgICBjb25zdCBmbGFzaFNob3cgPSByb3dEYXRhW0tleUZsYXNoU2hvd107XHJcbiAgICAgICAgZGVsZXRlIHJvd0RhdGFbS2V5Rmxhc2hTaG93XTtcclxuICAgICAgICBhd2FpdCB0aGlzLmJlZm9yZUVkaXQoKTtcclxuICAgICAgICB0aGlzLmZvcm1Nb2RlbC5mb3JtU3RhdGUgPSBGb3JtU3RhdGUuRURJVDtcclxuICAgICAgICB0aGlzLnNldHRpbmcucG9wdXBIZWFkZXIgPSBgQ2hpIHRp4bq/dCAke3RoaXMuc2V0dGluZy5vYmplY3ROYW1lfSBgO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZy5tYXNrQ2xhc3MgPSBmbGFzaFNob3cgPyAnaGlkZScgOiBudWxsO1xyXG4gICAgICAgIHRoaXMuc2NvcGVEYXRhRWRpdCA9IHNjb3BlRGF0YUVkaXQ7XHJcbiAgICAgICAgdGhpcy5mb3JtTW9kZWwuZGF0YSA9IHRoaXMuY2xvbmVEYXRhKHJvd0RhdGEpO1xyXG4gICAgICAgIGF3YWl0IHRoaXMubW9kaWZ5RWRpdE1vZGVsKHJvd0RhdGEpO1xyXG4gICAgICAgIHRoaXMuZm9ybU1vZGVsLmRhdGFbS2V5Rmxhc2hTaG93XSA9IGZsYXNoU2hvdztcclxuICAgICAgICB0aGlzLnNob3dEZXRhaWxGb3JtID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBiZWZvcmVFZGl0KCkge1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIG1vZGlmeUVkaXRNb2RlbChyb3dEYXRhOiBhbnkpIHtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNsb25lRGF0YShyb3dEYXRhKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgcGlkOiByb3dEYXRhLnBpZCxcclxuICAgICAgICAgICAgYmFzZVBlcm1pc3Npb25CeVBpZDogcm93RGF0YS5iYXNlUGVybWlzc2lvbkJ5UGlkLFxyXG4gICAgICAgICAgICBpZDogcm93RGF0YVt0aGlzLnNldHRpbmcuZW50aXR5S2V5XSxcclxuICAgICAgICAgICAgYmFzZVBlcm1pc3Npb246IHJvd0RhdGEuYmFzZVBlcm1pc3Npb25cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGdldFByb21pc2VEZWxldGVJdGVtKHJvd0RhdGEpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLmRlbGV0ZShyb3dEYXRhLmlkKTtcclxuICAgIH1cclxuXHJcbiAgICBfZGVsZXRlKHJvd0RhdGEpIHtcclxuICAgICAgICBpZiAocm93RGF0YS5fX2Rpc2FibGVEZWxldGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd0RlbGV0ZUNvbmZpcm0oKS50aGVuKHJzID0+IHtcclxuICAgICAgICAgICAgaWYgKCFycykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0UHJvbWlzZURlbGV0ZUl0ZW0ocm93RGF0YSlcclxuICAgICAgICAgICAgICAgICAgICAudGhlbihyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJlZm9yZVJlbG9hZEFmdGVyRGVsZXRlKFtyb3dEYXRhLmlkXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zZXR0aW5nLnNob3dWZXJzaW9uQnV0dG9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmZpcmVFdmVudChDb21DdHhDb25zdGFudHMuQ09NTU9OLlJFTE9BRF9EQVRBX1ZFUlNJT04sIHt9LCB0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3RyaWdnZXJQcm9jZXNzRGF0YSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dEZWxldGVEYXRhU3VjY2VzcygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nQnlSZXNwb25zZShyZXNwb25zZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9LCBlcnJvciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93RGVsZXRlRGF0YUVycm9yKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRQcm9taXNlRGVsZXRlSXRlbXMoaXRlbXMpIHtcclxuICAgICAgICBjb25zdCBpZHMgPSBpdGVtcy5tYXAoeCA9PiB4LmlkKS5qb2luKCcsJyk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0dGluZy5iYXNlU2VydmljZS5kZWxldGVNYW55KGlkcyk7XHJcbiAgICB9XHJcblxyXG4gICAgX2RlbGV0ZU11bHRpcGxlKGl0ZW1zKSB7XHJcbiAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dEZWxldGVDb25maXJtKCkudGhlbihycyA9PiB7XHJcbiAgICAgICAgICAgIGlmICghcnMpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdldFByb21pc2VEZWxldGVJdGVtcyhpdGVtcykudGhlbihyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5iZWZvcmVSZWxvYWRBZnRlckRlbGV0ZShpdGVtcy5tYXAocSA9PiBxLmlkKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3RyaWdnZXJQcm9jZXNzRGF0YSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd0RlbGV0ZURhdGFTdWNjZXNzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmdCeVJlc3BvbnNlKHJlc3BvbnNlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGJlZm9yZVJlbG9hZEFmdGVyRGVsZXRlKGlkczogc3RyaW5nW10pIHtcclxuICAgIH1cclxuXHJcbiAgICBvbkJlZm9yZUNhbmNlbCgpIHtcclxuICAgIH1cclxuXHJcbiAgICBfaGFuZGxlU2F2ZWQoKSB7XHJcbiAgICAgICAgdGhpcy5zaG93RGV0YWlsRm9ybSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuX3RyaWdnZXJQcm9jZXNzRGF0YSgpO1xyXG4gICAgfVxyXG5cclxuICAgIF9oYW5kbGVDYW5jZWwoJGV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5vbkJlZm9yZUNhbmNlbCgpO1xyXG4gICAgICAgIHRoaXMuc2hvd0RldGFpbEZvcm0gPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgc3BhY2VkLWNvbW1lbnRcclxuICAgIC8vI2VuZHJlZ2lvblxyXG59XHJcbiJdfQ==
966
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC1iYXNlLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uL3Byb2plY3RzL3RueC1zaGFyZWQvc3JjL2xpYi8iLCJzb3VyY2VzIjpbImNsYXNzZXMvYmFzZS9saXN0LWJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDeEYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sdURBQXVELENBQUM7QUFDM0YsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMEVBQTBFLENBQUM7QUFDbkgsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sK0RBQStELENBQUM7QUFFckcsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0sdUVBQXVFLENBQUM7QUFDeEgsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sOERBQThELENBQUM7QUFDdkcsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLG1FQUFtRSxDQUFDO0FBQzNHLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUNwRixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDcEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUcxRCxPQUFPLEVBQUUsYUFBYSxFQUFF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LENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFO29CQUM5QyxJQUFJLFFBQVEsQ0FBQyxPQUFPLEVBQUU7d0JBQ2xCLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7d0JBQ25ELElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO3dCQUMzQixJQUFJLENBQUMsZ0JBQWdCLENBQUMscUJBQXFCLEVBQUUsQ0FBQztxQkFDakQ7eUJBQ0k7d0JBQ0QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxDQUFDO3FCQUN6RDtnQkFDTCxDQUFDLENBQUMsQ0FBQzthQUNOO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsdUJBQXVCLENBQUMsR0FBYTtJQUNyQyxDQUFDO0lBRUQsY0FBYztJQUNkLENBQUM7SUFFRCxZQUFZO1FBQ1IsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7UUFDNUIsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVELGFBQWEsQ0FBQyxNQUFNO1FBQ2hCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztJQUNoQyxDQUFDOzs7WUE3K0JKLFNBQVM7OztZQTFDNkIsUUFBUTs7OzhCQThDMUMsU0FBUyxTQUFDLGlCQUFpQjsrQkFJM0IsU0FBUyxTQUFDLGtCQUFrQjswQkFJNUIsS0FBSzt1Q0FDTCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGF0ZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgRGlyZWN0aXZlLCBJbmplY3RvciwgSW5wdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5pbXBvcnQgeyBDcnVkTGlzdENvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvY3J1ZC9jcnVkLWxpc3QvY3J1ZC1saXN0LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRyZWVUYWJsZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvY3J1ZC90cmVlLXRhYmxlL3RyZWUtdGFibGUuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRW50aXR5UGVybWlzc2lvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2VudGl0eS1wZXJtaXNzaW9uL3NlcnZpY2VzLmNzL2VudGl0eS1wZXJtaXNzaW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTdGF0ZU1hY2hpbmVzU2VydmljZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvc3RhdGVtYWNoaW5lcy9zZXJ2aWNlcy9zdGF0ZW1hY2hpbmVzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBXZkl0ZW0gfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL3dvcmtmbG93L21vZGVscy9tb2RlbHMnO1xyXG5pbXBvcnQgeyBXb3JrZmxvd1Blcm1pc3Npb25EZXRhaWxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy93b3JrZmxvdy9zZXJ2aWNlcy93b3JrZmxvdy1wZXJtaXNzaW9uLWRldGFpbC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgV29ya2Zsb3dTZXR0aW5nc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL3dvcmtmbG93L3NlcnZpY2VzL3dvcmtmbG93LXNldHRpbmdzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb21DdHhDb25zdGFudHMgfSBmcm9tICcuLi8uLi9jb25maWdzL2NvbXBvbmVudC1jb250ZXh0LmNvbnN0YW50JztcclxuaW1wb3J0IHsgQ2F1SGluaFdvcmtmbG93U2VydmljZSB9IGZyb20gJy4uLy4uL2Nvbmd2aWVjL2NhdWhpbmgtd29ya2Zsb3cvc2VydmljZXMvY2F1aGluaC13b3JrZmxvdy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29uZ1ZpZWNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29uZ3ZpZWMvY29uZ3ZpZWMvc2VydmljZXMvY29uZ3ZpZWMuc2VydmljZSc7XHJcbmltcG9ydCB7IFBlcm1pc3Npb25CYXNlIH0gZnJvbSAnLi4vLi4vZW51bXMvY29tbW9uJztcclxuaW1wb3J0IHsgRmlsdGVyLCBHcmlkSW5mbyB9IGZyb20gJy4uLy4uL21vZGVscy9ncmlkLWluZm8nO1xyXG5pbXBvcnQgeyBSZXNwb25zZVJlc3VsdCB9IGZyb20gJy4uLy4uL21vZGVscy9yZXNwb25zZS1yZXN1bHQnO1xyXG5pbXBvcnQgeyBCYXNlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Jhc2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbW1vblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb21tb24uc2VydmljZSc7XHJcbmltcG9ydCB7IENydWRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY3J1ZC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ3VzdG9tUm91dGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2N1c3RvbS1yb3V0ZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IEV4cG9ydFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9leHBvcnQuc2VydmljZSc7XHJcbmltcG9ydCB7IExpc3RIZWxwZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbGlzdC1oZWxwZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IE1hc3RlckRhdGFTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbWFzdGVyLWRhdGEuc2VydmljZSc7XHJcbmltcG9ydCB7IE1vZHVsZUNvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tb2R1bGUtY29uZmlnLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBOb3RpZmllclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9ub3RpZmllci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVXNlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy91c2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBFbnVtR2V0UmVmVHlwZSwgRm9ybVN0YXRlLCBLZXlGaWVsZEdldFJlZlR5cGUsIEtleUZsYXNoU2hvdywgV29ya2Zsb3dGaWVsZFN0YXRlQ29kZSB9IGZyb20gJy4uL2NvbnN0YW50cyc7XHJcbmltcG9ydCB7XHJcbiAgICBDb2x1bW5TY2hlbWFCYXNlLFxyXG4gICAgQ29udHJvbFR5cGUsXHJcbiAgICBDcnVkRm9ybURhdGEsXHJcbiAgICBDcnVkTGlzdERhdGEsXHJcbiAgICBDcnVkTGlzdFNldHRpbmcsXHJcbiAgICBEcm9wZG93bk9wdGlvbnMsXHJcbiAgICBGaWVsZFJvd1NwYW4sXHJcbiAgICBPcGVyYXRvcixcclxuICAgIFRleHRBbGlnblxyXG59IGZyb20gJy4uL2Zvcm0tc2NoZW1hJztcclxuaW1wb3J0IHsgQ29tcG9uZW50QmFzZSB9IGZyb20gJy4vY29tcG9uZW50LWJhc2UnO1xyXG5pbXBvcnQgeyBJTGlzdENvbXBvbmVudCB9IGZyb20gJy4vaS1saXN0LWNvbXBvbmVudCc7XHJcblxyXG5cclxuQERpcmVjdGl2ZSgpXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBMaXN0QmFzZTxUIGV4dGVuZHMgSUxpc3RDb21wb25lbnQ+IGV4dGVuZHMgQ29tcG9uZW50QmFzZSB7XHJcbiAgICBwdWJsaWMgY3J1ZExpc3Q6IFQ7XHJcblxyXG4gICAgQFZpZXdDaGlsZChDcnVkTGlzdENvbXBvbmVudCkgc2V0IGNvbnRlbnRDcnVkTGlzdChjb250ZW50OiBUKSB7XHJcbiAgICAgICAgdGhpcy5zZXRNYWluTGlzdENvbXBvbmVudFZhbHVlKGNvbnRlbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIEBWaWV3Q2hpbGQoVHJlZVRhYmxlQ29tcG9uZW50KSBzZXQgY29udGVudFRyZWVUYWJsZShjb250ZW50OiBUKSB7XHJcbiAgICAgICAgdGhpcy5zZXRNYWluTGlzdENvbXBvbmVudFZhbHVlKGNvbnRlbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIEBJbnB1dCgpIHBhcmVudE1vZGVsOiBDcnVkTGlzdERhdGE7XHJcbiAgICBASW5wdXQoKSBsb2FkRGV0YWlsRnJvbVF1ZXJ5UGFyYW06IGJvb2xlYW47XHJcblxyXG4gICAgcHJpdmF0ZSBub3RDb25maWdCYXNlU2VydmljZU1lc3NhZ2UgPSAnQ2jGsGEgY+G6pXUgaMOsbmggQ1JVRCBiYXNlIHNlcnZpY2UnO1xyXG4gICAgc2V0dGluZzogQ3J1ZExpc3RTZXR0aW5nID0gbmV3IENydWRMaXN0U2V0dGluZygpO1xyXG4gICAgbW9kZWw6IENydWRMaXN0RGF0YSA9IG5ldyBDcnVkTGlzdERhdGEoKTtcclxuICAgIGZvcm1Nb2RlbDogQ3J1ZEZvcm1EYXRhID0gbmV3IENydWRGb3JtRGF0YSgpO1xyXG4gICAgc2NvcGVEYXRhRWRpdDogYW55ID0ge307XHJcbiAgICBzaG93RGV0YWlsRm9ybSA9IGZhbHNlO1xyXG4gICAgZW52aXJvbm1lbnQ6IGFueSA9IHt9O1xyXG4gICAgY291bnRSZWFkeSA9IDA7XHJcbiAgICBkZWZhdWx0RmlsdGVyQ29sdW1uOiBhbnk7XHJcblxyXG4gICAgaGFzQ3J1ZExpc3QgPSB0cnVlO1xyXG4gICAgY3VzdG9tR2V0RGF0YSA9IGZhbHNlO1xyXG4gICAgcmVhZHlUb1RyaW5oS3kgPSBmYWxzZTtcclxuICAgIHBsdXNVcmwgPSAnJztcclxuICAgIGxvYWRpbmdUaW1lb3V0O1xyXG5cclxuICAgIHJvd0RhdGFDdXJyZW50OiBhbnk7XHJcblxyXG4gICAgcHJvdGVjdGVkIF9ub3RpZmllclNlcnZpY2U6IE5vdGlmaWVyU2VydmljZTtcclxuICAgIHByb3RlY3RlZCBfY3VzdG9tUm91dGVyU2VydmljZTogQ3VzdG9tUm91dGVyU2VydmljZTtcclxuICAgIHByb3RlY3RlZCBfbGlzdEhlbHBlclNlcnZpY2U6IExpc3RIZWxwZXJTZXJ2aWNlO1xyXG4gICAgcHJvdGVjdGVkIF9jb21tb25TZXJ2aWNlOiBDb21tb25TZXJ2aWNlO1xyXG4gICAgcHJvdGVjdGVkIF90cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlO1xyXG4gICAgcHJvdGVjdGVkIF9leHBvcnRTZXJ2aWNlOiBFeHBvcnRTZXJ2aWNlO1xyXG4gICAgcHJvdGVjdGVkIF9yb3V0ZXI6IFJvdXRlcjtcclxuICAgIHByb3RlY3RlZCBfY3J1ZFNlcnZpY2U6IENydWRTZXJ2aWNlO1xyXG4gICAgcHJvdGVjdGVkIF9kYXRlUGlwZTogRGF0ZVBpcGU7XHJcbiAgICBwcm90ZWN0ZWQgX2NkOiBDaGFuZ2VEZXRlY3RvclJlZjtcclxuICAgIHByb3RlY3RlZCBfdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlO1xyXG4gICAgcHJvdGVjdGVkIF9tYXN0ZXJEYXRhU2VydmljZTogTWFzdGVyRGF0YVNlcnZpY2U7XHJcbiAgICBwcm90ZWN0ZWQgX2VudGl0eVBlcm1pc3Npb25TZXJ2aWNlOiBFbnRpdHlQZXJtaXNzaW9uU2VydmljZTtcclxuICAgIHByb3RlY3RlZCBfd29ya2Zsb3dTZXR0aW5nU2VydmljZTogV29ya2Zsb3dTZXR0aW5nc1NlcnZpY2U7XHJcbiAgICBwcm90ZWN0ZWQgX3dvcmtmbG93UGVybWlzc2lvbkRldGFpbFNlcnZpY2U6IFdvcmtmbG93UGVybWlzc2lvbkRldGFpbFNlcnZpY2U7XHJcbiAgICBwcm90ZWN0ZWQgX3N0YXRlTWFjaGluZXNTZXJ2aWNlOiBTdGF0ZU1hY2hpbmVzU2VydmljZTtcclxuICAgIHByb3RlY3RlZCBfY29uZ1ZpZWNTZXJ2aWNlSW5CYXNlOiBDb25nVmllY1NlcnZpY2U7XHJcblxyXG4gICAgY29uc3RydWN0b3IoX2luamVjdG9yOiBJbmplY3Rvcikge1xyXG4gICAgICAgIHN1cGVyKF9pbmplY3Rvcik7XHJcbiAgICAgICAgY29uc3QgbW9kdWxlQ29uZmlnU2VydmljZSA9IF9pbmplY3Rvci5nZXQoTW9kdWxlQ29uZmlnU2VydmljZSk7XHJcbiAgICAgICAgdGhpcy5lbnZpcm9ubWVudCA9IG1vZHVsZUNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCkuZW52aXJvbm1lbnQ7XHJcblxyXG4gICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChOb3RpZmllclNlcnZpY2UpO1xyXG4gICAgICAgIHRoaXMuX2FjdGl2YXRlZFJvdXRlID0gdGhpcy5faW5qZWN0b3IuZ2V0KEFjdGl2YXRlZFJvdXRlKTtcclxuICAgICAgICB0aGlzLl9yb3V0ZXIgPSB0aGlzLl9pbmplY3Rvci5nZXQoUm91dGVyKTtcclxuICAgICAgICB0aGlzLl9jdXN0b21Sb3V0ZXJTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KEN1c3RvbVJvdXRlclNlcnZpY2UpO1xyXG4gICAgICAgIHRoaXMuX2xpc3RIZWxwZXJTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KExpc3RIZWxwZXJTZXJ2aWNlKTtcclxuICAgICAgICB0aGlzLl9jb21tb25TZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KENvbW1vblNlcnZpY2UpO1xyXG4gICAgICAgIHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoVHJhbnNsYXRlU2VydmljZSk7XHJcbiAgICAgICAgdGhpcy5fZXhwb3J0U2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChFeHBvcnRTZXJ2aWNlKTtcclxuICAgICAgICB0aGlzLl9jcnVkU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChDcnVkU2VydmljZSk7XHJcbiAgICAgICAgdGhpcy5fZGF0ZVBpcGUgPSB0aGlzLl9pbmplY3Rvci5nZXQoRGF0ZVBpcGUpO1xyXG4gICAgICAgIHRoaXMuX2NkID0gdGhpcy5faW5qZWN0b3IuZ2V0KENoYW5nZURldGVjdG9yUmVmKTtcclxuICAgICAgICB0aGlzLl91c2VyU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChVc2VyU2VydmljZSk7XHJcbiAgICAgICAgdGhpcy5fbWFzdGVyRGF0YVNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoTWFzdGVyRGF0YVNlcnZpY2UpO1xyXG4gICAgICAgIHRoaXMuX2VudGl0eVBlcm1pc3Npb25TZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KEVudGl0eVBlcm1pc3Npb25TZXJ2aWNlKTtcclxuICAgICAgICB0aGlzLl93b3JrZmxvd1NldHRpbmdTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KFdvcmtmbG93U2V0dGluZ3NTZXJ2aWNlKTtcclxuICAgICAgICB0aGlzLl93b3JrZmxvd1Blcm1pc3Npb25EZXRhaWxTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KFdvcmtmbG93UGVybWlzc2lvbkRldGFpbFNlcnZpY2UpO1xyXG4gICAgICAgIHRoaXMuX3N0YXRlTWFjaGluZXNTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KFN0YXRlTWFjaGluZXNTZXJ2aWNlKTtcclxuICAgICAgICB0aGlzLl9jb25nVmllY1NlcnZpY2VJbkJhc2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoQ29uZ1ZpZWNTZXJ2aWNlKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLmtleSA9IHRoaXMuX2NvbW1vblNlcnZpY2UuZ3VpZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc2V0TWFpbkxpc3RDb21wb25lbnRWYWx1ZShjb250ZW50OiBUKSB7XHJcbiAgICAgICAgY29uc3QgYmVmb3JlVmFsdWUgPSB0aGlzLmNydWRMaXN0O1xyXG4gICAgICAgIGlmIChjb250ZW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3J1ZExpc3QgPSBjb250ZW50O1xyXG4gICAgICAgICAgICBpZiAoIWJlZm9yZVZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvdW50UmVhZHkrKztcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0RGVmYXVsdFZhbHVlRmlsdGVyKCk7XHJcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGYgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5jcnVkTGlzdC5jaGVja0lzSW5zaWRlRGlhbG9nKCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkSXRlbUZyb21RdWVyeVBhcmFtKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSwgMTAwKTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvdW50UmVhZHkgPCAyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzRGF0YSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHRoaXMubW9kZWwuYmFzZVJlYWR5ID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5jb2xzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZy5jb2xzID0gdGhpcy5zZXR0aW5nLmNvbHMuZmlsdGVyKHEgPT4gIXEucmVtb3ZlT25Jbml0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5tZXJnZUluZm9Ub0NvbHVtblNjaGVtYSgpO1xyXG4gICAgICAgIHRoaXMuZ2VuZXJhdGVGaWVsZFNlYXJjaFRleHQoKTtcclxuICAgICAgICBpZiAoIXRoaXMuc2V0dGluZy5iYXNlU2VydmljZSkge1xyXG4gICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcodGhpcy5ub3RDb25maWdCYXNlU2VydmljZU1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLnNldHRpbmcuaGlkZGVuU2V0dGluZ1dvcmtmbG93KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UudXNlV29ya2Zsb3cgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuX3JlZ2lzdGVyR2xvYmFsU2VydmljZSh0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBtb2R1bGVDb25maWdTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KE1vZHVsZUNvbmZpZ1NlcnZpY2UpO1xyXG4gICAgICAgIHRoaXMuZW52aXJvbm1lbnQgPSBtb2R1bGVDb25maWdTZXJ2aWNlLmdldENvbmZpZygpLmVudmlyb25tZW50O1xyXG4gICAgICAgIGlmICh0aGlzLmVudmlyb25tZW50LmNsaWVudERvbWFpblxyXG4gICAgICAgICAgICAmJiB0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2VcclxuICAgICAgICAgICAgJiYgdGhpcy5lbnZpcm9ubWVudC5jbGllbnREb21haW5bdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLnNlcnZpY2VDb2RlXVxyXG4gICAgICAgICAgICAmJiAhdGhpcy5zZXR0aW5nLnRhcmdldFBhdGhcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgdGhpcy5zZXR0aW5nLnRhcmdldFBhdGggPSBgJHt0aGlzLmVudmlyb25tZW50LmNsaWVudERvbWFpblt0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2Uuc2VydmljZUNvZGVdfS8ke3RoaXMuc2V0dGluZy5iYXNlU2VydmljZS5lbnRpdHlOYW1lLnRvTG93ZXJDYXNlKCl9L2RldGFpbGA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZ2V0TWVudUJ1dHRvbnMgPSB0aGlzLmdldE1lbnVCdXR0b25zLmJpbmQodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBtZXJnZUluZm9Ub0NvbHVtblNjaGVtYSgpIHtcclxuICAgICAgICB0aGlzLnNldHRpbmcuY29scy5mb3JFYWNoKGNvbCA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbHVtbk1vZGVsU2NoZW1hID0gdGhpcy5zZXR0aW5nLm1vZGVsU2NoZW1hcy5maW5kKHAgPT4gcC5maWVsZCA9PSBjb2wuZmllbGQpO1xyXG4gICAgICAgICAgICBpZiAoY29sdW1uTW9kZWxTY2hlbWEpIHtcclxuICAgICAgICAgICAgICAgIGlmIChjb2x1bW5Nb2RlbFNjaGVtYS5uYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29sLmxhYmVsID0gY29sdW1uTW9kZWxTY2hlbWEubmFtZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChjb2x1bW5Nb2RlbFNjaGVtYS5mdWxsTmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbC5mdWxsTGFiZWwgPSBjb2x1bW5Nb2RlbFNjaGVtYS5mdWxsTmFtZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICghY29sLmRpc3BsYXlGaWVsZEluR3JpZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbC5kaXNwbGF5RmllbGRJbkdyaWQgPSBjb2wuZGlzcGxheUZpZWxkO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKCFjb2wuZGF0YVR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb2wuZGF0YVR5cGUgPSB0aGlzLmdldERhdGFUeXBlKGNvbHVtbk1vZGVsU2NoZW1hLmRhdGFUeXBlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0RGF0YVR5cGUodHlwZTogc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIHR5cGU7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZW5lcmF0ZUZpZWxkU2VhcmNoVGV4dCgpIHtcclxuICAgICAgICB0aGlzLnNldHRpbmcuY29scy5mb3JFYWNoKGNvbCA9PiB7XHJcbiAgICAgICAgICAgIGlmIChjb2wuZnVsbFRleHRTZWFyY2gpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZy5maWVsZFNlYXJjaFRleHQucHVzaChjb2wuZmllbGQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5maWVsZFNlYXJjaFRleHQubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJzID0gW107XHJcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZy5maWVsZFNlYXJjaFRleHQuZm9yRWFjaChmaWVsZCA9PiB7XHJcbiAgICAgICAgICAgICAgICBmaWx0ZXJzLnB1c2goXHJcbiAgICAgICAgICAgICAgICAgICAgbmV3IEZpbHRlcih7IGZpZWxkLCBvcGVyYXRvcjogT3BlcmF0b3IuY29udGFpbiwgc291cmNlRmllbGQ6ICdfaycgfSlcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5maWx0ZXJUZW1wbGF0ZUFkdnMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZy5maWx0ZXJUZW1wbGF0ZUFkdnMuc3BsaWNlKDAsIDAsIG5ldyBGaWx0ZXIoe1xyXG4gICAgICAgICAgICAgICAgICAgIGxvZ2ljOiAnb3InLFxyXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcnNcclxuICAgICAgICAgICAgICAgIH0pKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBfcmVnaXN0ZXJHbG9iYWxTZXJ2aWNlKHNlcnZpY2U6IEJhc2VTZXJ2aWNlKSB7XHJcbiAgICAgICAgY29uc3Qga2V5ID0gc2VydmljZS5nZXRLZXlXb3JrZmxvd1NldHRpbmcoKTtcclxuICAgICAgICB0aGlzLl9lbnRpdHlQZXJtaXNzaW9uU2VydmljZS5yZWdpc3RlclNlcnZpY2Uoa2V5LCBzZXJ2aWNlKTtcclxuICAgICAgICB0aGlzLl93b3JrZmxvd1NldHRpbmdTZXJ2aWNlLnJlZ2lzdGVyU2VydmljZShrZXksIHNlcnZpY2UpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldE1lbnVCdXR0b25zKHJvd0RhdGEpOiBhbnlbXSB8IFByb21pc2U8YW55W10+IHtcclxuICAgICAgICB0aGlzLnJvd0RhdGFDdXJyZW50ID0gcm93RGF0YTtcclxuICAgICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcblxyXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuaGFuZGxlQWZ0ZXJWaWV3SW5pdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25EZXN0cm95KCkge1xyXG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XHJcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMubG9hZGluZ1RpbWVvdXQpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgaGFuZGxlQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgICAgICBpZiAoKHRoaXMuc2V0dGluZy5iYXNlU2VydmljZSAmJiB0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UudXNlV29ya2Zsb3cpXHJcbiAgICAgICAgICAgIHx8IHRoaXMuc2V0dGluZy5pc1dvcmtmbG93VHJlZVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrSGFzV29ya2Zsb3coKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jb3VudFJlYWR5Kys7XHJcbiAgICAgICAgaWYgKHRoaXMuY291bnRSZWFkeSA+IDEpIHtcclxuICAgICAgICAgICAgdGhpcy5tb2RlbC5iYXNlUmVhZHkgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLl90cmlnZ2VyUHJvY2Vzc0RhdGEoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc2V0RGVmYXVsdFZhbHVlRmlsdGVyKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmRlZmF1bHRGaWx0ZXJDb2x1bW4pIHtcclxuICAgICAgICAgICAgdGhpcy5jcnVkTGlzdC5zZXRJbml0RmlsdGVyKHRoaXMuZGVmYXVsdEZpbHRlckNvbHVtbik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzcGFjZWQtY29tbWVudFxyXG4gICAgLy8jcmVnaW9uIEdldCBEYXRhXHJcbiAgICBhc3luYyByZWxvYWQoKSB7XHJcbiAgICAgICAgdGhpcy5jcnVkTGlzdC5yZWxvYWQoKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBfdHJpZ2dlclByb2Nlc3NEYXRhKGdyaWRJbmZvPzogR3JpZEluZm8pIHtcclxuICAgICAgICBhd2FpdCB0aGlzLnByb2Nlc3NEYXRhKGdyaWRJbmZvKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFzeW5jIHByb2Nlc3NEYXRhKGdyaWRJbmZvPzogR3JpZEluZm8pIHtcclxuICAgICAgICB0aGlzLnJlYWR5VG9UcmluaEt5ID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKHRoaXMuaGFzQ3J1ZExpc3QpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmNydWRMaXN0KSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCFncmlkSW5mbykge1xyXG4gICAgICAgICAgICAgICAgZ3JpZEluZm8gPSB0aGlzLmNydWRMaXN0LmdldEdyaWRJbmZvKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICghZ3JpZEluZm8pIHtcclxuICAgICAgICAgICAgICAgIGdyaWRJbmZvID0gbmV3IEdyaWRJbmZvKHtcclxuICAgICAgICAgICAgICAgICAgICBwYWdlSW5mbzoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWdlOiAxLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWdlU2l6ZTogOTk5XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzOiBbXSxcclxuICAgICAgICAgICAgICAgICAgICBzb3J0czogW10sXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5nZXREYXRhKGdyaWRJbmZvKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBtb2RpZnlHcmlkSW5mbyhncmlkSW5mbzogR3JpZEluZm8pOiBQcm9taXNlPGJvb2xlYW4gfCB2b2lkPiB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyBnZXREYXRhKGdyaWRJbmZvOiBHcmlkSW5mbykge1xyXG4gICAgICAgIGlmICh0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UgJiYgdGhpcy5tb2RlbC5yZWFkeSAmJiAhdGhpcy5tb2RlbC5sb2FkaW5nKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX21hcmtMb2FkaW5nKCk7XHJcbiAgICAgICAgICAgIGdyaWRJbmZvLm1vZGlmeUZpbHRlcihXb3JrZmxvd0ZpZWxkU3RhdGVDb2RlLCBmaWx0ZXIgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGZpbHRlci52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBoYXNOdWxsVmFsdWUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN0VmFsdWVzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgSlNPTi5wYXJzZShmaWx0ZXIudmFsdWUpLmZvckVhY2godmFsdWUgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc051bGxWYWx1ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN0VmFsdWVzLnB1c2godmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhhc051bGxWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdFZhbHVlcy5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyLm9wZXJhdG9yID0gT3BlcmF0b3IuaXNOdWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlci5sb2dpYyA9ICdvcic7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlci5maWVsZCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlci52YWx1ZSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlci5vcGVyYXRvciA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlci5maWx0ZXJzID0gW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXdGaWx0ZXIoV29ya2Zsb3dGaWVsZFN0YXRlQ29kZSwgT3BlcmF0b3IuaXNOdWxsLCAnJyksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5ld0ZpbHRlcihXb3JrZmxvd0ZpZWxkU3RhdGVDb2RlLCBPcGVyYXRvci5pbiwgcmVzdFZhbHVlcylcclxuICAgICAgICAgICAgICAgICAgICAgICAgXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBjb25zdCByZXN1bHRNb2RpZnkgPSBhd2FpdCB0aGlzLm1vZGlmeUdyaWRJbmZvKGdyaWRJbmZvKTtcclxuICAgICAgICAgICAgaWYgKGdyaWRJbmZvLnNvcnRzLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBncmlkSW5mby5zb3J0cy51bnNoaWZ0KHRoaXMubmV3U29ydCgnY3JlYXRlZCcsIC0xKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHJlc3VsdE1vZGlmeSA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuZGF0YVNvdXJjZSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlbC50b3RhbCA9IDA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLmV4cGFuZGVkUm93S2V5cyA9IHt9O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fdW5tYXJrTG9hZGluZygpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRvR2V0UmVxdWVzdChncmlkSW5mbyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZG9HZXRSZXF1ZXN0KGdyaWRJbmZvOiBHcmlkSW5mbykge1xyXG4gICAgICAgIGlmICghdGhpcy5jdXN0b21HZXREYXRhKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0UHJvbWlzZUdldERhdGEoZ3JpZEluZm8pXHJcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oYXN5bmMgcmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wcm9jZXNzR2V0RGF0YShyZXNwb25zZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpcmVEYXRhTG9hZGVkKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcocmVzcG9uc2UubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpcmVEYXRhTG9hZGVkKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0sIGVycm9yID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dIdHRwVW5rbm93RXJyb3IoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maXJlRGF0YUxvYWRlZChmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0RGF0YUN1c3RvbShncmlkSW5mbyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIF9tYXJrTG9hZGluZygpIHtcclxuICAgICAgICB0aGlzLm1vZGVsLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMubW9kZWwuYWRqdXN0ZWRQb3NpdGlvbkxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICBpZiAodGhpcy5jcnVkTGlzdCkge1xyXG4gICAgICAgICAgICB0aGlzLmNydWRMaXN0LmFkanVzdFBvc2l0aW9uTG9hZGluZ01hc2soKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMubG9hZGluZ1RpbWVvdXQpO1xyXG4gICAgICAgIHRoaXMubG9hZGluZ1RpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdNw6F5IGNo4bunIHBo4bqjbiBo4buTaSBxdcOhIGzDonUsIHZ1aSBsw7JuZyBraeG7g20gdHJhIGzhuqFpIMSRxrDhu51uZyB0cnV54buBbiBt4bqhbmchJyk7XHJcbiAgICAgICAgICAgIHRoaXMubW9kZWwubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIH0sIDIwMDAwKTtcclxuICAgIH1cclxuXHJcbiAgICBfaGFuZGxlUmVsb2FkZWQoZXZ0ID0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMuX3VubWFya0xvYWRpbmcoKTtcclxuICAgICAgICB0aGlzLmFmdGVyUmVsb2FkZWQoKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBhZnRlclJlbG9hZGVkKCkge1xyXG4gICAgfVxyXG5cclxuICAgIF91bm1hcmtMb2FkaW5nKCkge1xyXG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmxvYWRpbmdUaW1lb3V0KTtcclxuICAgICAgICB0aGlzLm1vZGVsLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGZpcmVEYXRhTG9hZGVkKHN1Y2Nlc3M6IGJvb2xlYW4gPSB0cnVlKSB7XHJcbiAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgdGhpcy5jcnVkTGlzdCkge1xyXG4gICAgICAgICAgICB0aGlzLmNydWRMaXN0LnByb2Nlc3NCYXNlRGF0YSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl91bm1hcmtMb2FkaW5nKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0UHJvbWlzZUdldERhdGEoZ3JpZEluZm86IEdyaWRJbmZvKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0dGluZy5iYXNlU2VydmljZS5nZXRCeUdyaWRSZXF1ZXN0KGdyaWRJbmZvLCB0aGlzLnBsdXNVcmwpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldERhdGFDdXN0b20oZ3JpZEluZm86IEdyaWRJbmZvKSB7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF9nZXREYXRhU291cmNlKHJlc3BvbnNlOiBSZXNwb25zZVJlc3VsdCk6IFByb21pc2U8YW55W10+IHtcclxuICAgICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyBwcm9jZXNzR2V0RGF0YShyZXNwb25zZTogUmVzcG9uc2VSZXN1bHQpIHtcclxuICAgICAgICB0aGlzLm1vZGVsLmV4cGFuZGVkUm93S2V5cyA9IHt9O1xyXG4gICAgICAgIHRoaXMubW9kZWwudG90YWwgPSByZXNwb25zZS50b3RhbFJlY29yZDtcclxuICAgICAgICBpZiAocmVzcG9uc2UuZGF0YSAmJiByZXNwb25zZS5kYXRhLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5iZWZvcmVSZW5kZXJEYXRhU291cmNlKHJlc3BvbnNlLmRhdGEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBkYXRhU291cmNlID0gYXdhaXQgdGhpcy5fZ2V0RGF0YVNvdXJjZShyZXNwb25zZSk7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5hZnRlclByb2Nlc3NEYXRhSW5CYXNlKGRhdGFTb3VyY2UpO1xyXG4gICAgICAgIGlmICh0aGlzLnNldHRpbmcuY29sdW1uU2V0dGluZy5ncm91cEZpZWxkICYmIHRoaXMuc2V0dGluZy5jb2x1bW5TZXR0aW5nLmdyb3VwSW5DbGllbnQpIHtcclxuICAgICAgICAgICAgdGhpcy5ncm91cEluQ2xpZW50KGRhdGFTb3VyY2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm1vZGVsLmRhdGFTb3VyY2UgPSBkYXRhU291cmNlO1xyXG5cclxuICAgICAgICBjb25zdCByZXNldFNlbGVjdGVkSXRlbXMgPSB0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXMgJiYgdGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW1zLmxlbmd0aDtcclxuICAgICAgICBpZiAocmVzZXRTZWxlY3RlZEl0ZW1zKSB7XHJcbiAgICAgICAgICAgIHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtcy5sZW5ndGggPSAwO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYXdhaXQgdGhpcy5hZnRlckdldERhdGEoKTtcclxuICAgICAgICB0aGlzLl9nZXRSZWZEYXRhRHJvcGRvd24odGhpcy5tb2RlbC5kYXRhU291cmNlKTtcclxuICAgIH1cclxuXHJcbiAgICBiZWZvcmVSZW5kZXJEYXRhU291cmNlKGRhdGFzb3VyY2U6IGFueSk6IFByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIGRhdGFzb3VyY2U7XHJcbiAgICB9XHJcblxyXG4gICAgY2FsY3VsYXRlUm93U3BhbihkYXRhU291cmNlOiBhbnlbXSwgZmllbGRzOiBGaWVsZFJvd1NwYW5bXSwgZnVuY05leHQ/OiBGdW5jdGlvbikge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YVNvdXJjZS5sZW5ndGggLSAxOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGZ1bmNOZXh0ICYmIGZ1bmNOZXh0KGRhdGFTb3VyY2VbaV0pICE9IGZ1bmNOZXh0KGRhdGFTb3VyY2VbaSArIDFdKSkgY29udGludWU7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGYgPSAwOyBmIDwgZmllbGRzLmxlbmd0aDsgZisrKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaWVsZCA9IGZpZWxkc1tmXS5maWVsZDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkUm9vdEluZGV4ID0gYHJvb3RJbmRleF8ke2ZpZWxkfWA7XHJcbiAgICAgICAgICAgICAgICBsZXQgZXF1YWwgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGlmIChmaWVsZHNbZl0uZnVuY0dldFZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZXF1YWwgPSBmaWVsZHNbZl0uZnVuY0dldFZhbHVlKGRhdGFTb3VyY2VbaSArIDFdKSA9PSBmaWVsZHNbZl0uZnVuY0dldFZhbHVlKGRhdGFTb3VyY2VbaV0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZXF1YWwgPSBkYXRhU291cmNlW2kgKyAxXVtmaWVsZF0gPT0gZGF0YVNvdXJjZVtpXVtmaWVsZF07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoZXF1YWwpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YVNvdXJjZVtpXVtmaWVsZFJvb3RJbmRleF0gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhU291cmNlW2ldW2ZpZWxkUm9vdEluZGV4XSA9IGk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZGF0YVNvdXJjZVtpXS5yb3dTcGFuKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhU291cmNlW2ldLnJvd1NwYW4gPSB7fTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhU291cmNlW2ldLnJvd1NwYW5bZmllbGRdID0gMTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5kZXhSb290SXRlbSA9IGRhdGFTb3VyY2VbaV1bZmllbGRSb290SW5kZXhdO1xyXG4gICAgICAgICAgICAgICAgICAgIGRhdGFTb3VyY2VbaSArIDFdW2ZpZWxkUm9vdEluZGV4XSA9IGluZGV4Um9vdEl0ZW07XHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YVNvdXJjZVtpbmRleFJvb3RJdGVtXS5yb3dTcGFuW2ZpZWxkXSsrO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghZGF0YVNvdXJjZVtpICsgMV0uaGlkZGVuKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFTb3VyY2VbaSArIDFdLmhpZGRlbiA9IHt9O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBkYXRhU291cmNlW2kgKyAxXS5oaWRkZW5bZmllbGRdID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBhZnRlclByb2Nlc3NEYXRhSW5CYXNlKGRhdGFTb3VyY2U6IGFueVtdID0gW10pIHtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgYWZ0ZXJHZXREYXRhKCkge1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBncm91cEluQ2xpZW50KGRhdGFTb3VyY2UpIHtcclxuICAgICAgICBpZiAoZGF0YVNvdXJjZS5sZW5ndGggPT0gMCkgcmV0dXJuO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGxldCBncm91cEZpZWxkID0gdGhpcy5zZXR0aW5nLmdyb3VwQ29sdW1uLmZpZWxkO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmdyb3VwQ29sdW1uLnJhd0NvbHVtbikge1xyXG4gICAgICAgICAgICAgICAgZ3JvdXBGaWVsZCA9IHRoaXMuc2V0dGluZy5ncm91cENvbHVtbi5yYXdDb2x1bW4uZmllbGQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5zb3J0RGF0YVNvdXJjZUJ5R3JvdXBGaWVsZChkYXRhU291cmNlLCBncm91cEZpZWxkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGVycikge1xyXG5cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc29ydERhdGFTb3VyY2VCeUdyb3VwRmllbGQoZGF0YVNvdXJjZTogYW55W10sIGdyb3VwRmllbGQ6IHN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IGRpYzoge1xyXG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnlbXVxyXG4gICAgICAgIH0gPSB7fTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGFTb3VyY2UubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3QgdmFsdWVHcm91cCA9IGRhdGFTb3VyY2VbaV1bZ3JvdXBGaWVsZF07XHJcbiAgICAgICAgICAgIGlmICghZGljW3ZhbHVlR3JvdXBdKSB7XHJcbiAgICAgICAgICAgICAgICBkaWNbdmFsdWVHcm91cF0gPSBbXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBkaWNbdmFsdWVHcm91cF0ucHVzaChkYXRhU291cmNlW2ldKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGRhdGFTb3VyY2Uuc3BsaWNlKDAsIGRhdGFTb3VyY2UubGVuZ3RoKTtcclxuICAgICAgICBPYmplY3QudmFsdWVzKGRpYykuZm9yRWFjaCh2YWx1ZXMgPT4ge1xyXG4gICAgICAgICAgICBkYXRhU291cmNlLnB1c2goLi4udmFsdWVzKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgX2dldFJlZkRhdGFEcm9wZG93bihkYXRhU291cmNlKSB7XHJcbiAgICAgICAgaWYgKGRhdGFTb3VyY2UgJiYgZGF0YVNvdXJjZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNldHRpbmcuYWR2YW5jZURhdGEuZmllbGROZWVkR2V0UmVmKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBhcnJQcm9taXNlRG9udE5lZWRXYWl0ID0gW107XHJcbiAgICAgICAgICAgICAgICBjb25zdCBhcnJTY2hlbWFEb250TmVlZFdhaXQgPSBbXTtcclxuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgc2NoZW1hIG9mIHRoaXMuc2V0dGluZy5hZHZhbmNlRGF0YS5maWVsZE5lZWRHZXRSZWYpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaWVsZCA9IHNjaGVtYS5maWVsZDtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2NoZW1hW0tleUZpZWxkR2V0UmVmVHlwZV0gPT0gRW51bUdldFJlZlR5cGUuU0VSVkVSKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzY2hlbWEuZm9yY2VHZXREYXRhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAodGhpcy5zZXR0aW5nLmdyb3VwQ29sdW1uICYmIHRoaXMuc2V0dGluZy5ncm91cENvbHVtbi5yYXdDb2x1bW4gJiYgdGhpcy5zZXR0aW5nLmdyb3VwQ29sdW1uLnJhd0NvbHVtbi5maWVsZCA9PSBzY2hlbWEuZmllbGQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCB0aGlzLnNldHRpbmcuY29scy5zb21lKGl0ZW0gPT4gaXRlbS5maWVsZCA9PSAnc3RyJyArIGZpZWxkICYmIGl0ZW0udmlzaWJsZSAhPSBmYWxzZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhcnJWYWx1ZSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVNvdXJjZS5mb3JFYWNoKGl0ZW1EYXRhID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50VmFsdWUgPSBpdGVtRGF0YVtmaWVsZF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRWYWx1ZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzY2hlbWEubXVsdGlwbGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpZHMgPSBjdXJyZW50VmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoaWRzKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkcyA9IGlkcy5zcGxpdCgnLCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRzLmZvckVhY2goaWQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaWQpIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWFyclZhbHVlLnNvbWUocCA9PiBwID09IGlkKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJWYWx1ZS5wdXNoKGlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICghYXJyVmFsdWUuc29tZShwID0+IHAgPT0gY3VycmVudFZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyVmFsdWUucHVzaChjdXJyZW50VmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJyVmFsdWUubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwcm9taXNlID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2NoZW1hLmJhc2VTZXJ2aWNlIGluc3RhbmNlb2YgTWFzdGVyRGF0YVNlcnZpY2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZSA9IHNjaGVtYS5iYXNlU2VydmljZS5nZXREYXRhRHJvcGRvd24oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWEuZ3JvdXBDb2RlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIGFyclZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIHRoaXMuX2NydWRTZXJ2aWNlLmNyZWF0ZURyb3Bkb3duT3B0aW9ucyhzY2hlbWEpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb21pc2UgPSBzY2hlbWEuYmFzZVNlcnZpY2UuZ2V0RGF0YURyb3Bkb3duQnlGaWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGhpcy5uZXdGaWx0ZXIoc2NoZW1hLnZhbHVlRmllbGQsIE9wZXJhdG9yLmluLCBhcnJWYWx1ZSldLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY3J1ZFNlcnZpY2UuY3JlYXRlRHJvcGRvd25PcHRpb25zKHNjaGVtYSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjaGVtYS5vcmRlciAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHByb21pc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzY2hlbWEuY2FsbGJhY2tEYXRhRmluaXNoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWEuY2FsbGJhY2tEYXRhRmluaXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiByZXN1bHRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWVyZ2VSZWZEYXRhVG9EYXRhc291cmNlKGRhdGFTb3VyY2UsIHNjaGVtYSwgcmVzdWx0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyclByb21pc2VEb250TmVlZFdhaXQucHVzaChwcm9taXNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyU2NoZW1hRG9udE5lZWRXYWl0LnB1c2goc2NoZW1hKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZ1bmNHZXRMYWJlbCA9IHRoaXMuZ2V0RnVudGlvbkdldExhYmVsKHNjaGVtYSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFTb3VyY2UuZm9yRWFjaChpdGVtRGF0YSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZWZJdGVtID0gc2NoZW1hLmRhdGFTb3VyY2UuZmluZChpID0+IHNjaGVtYS5mdW5jQ29tcGFyZShpLCBpdGVtRGF0YVtmaWVsZF0pKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWZJdGVtICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtRGF0YVsnc3RyJyArIGZpZWxkXSA9IGZ1bmNHZXRMYWJlbChyZWZJdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGFyclByb21pc2VEb250TmVlZFdhaXQubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFyclJlcyA9IGF3YWl0IFByb21pc2UuYWxsKGFyclByb21pc2VEb250TmVlZFdhaXQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGFyclNjaGVtYURvbnROZWVkV2FpdC5mb3JFYWNoKChzY2hlbWEsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzY2hlbWEuY2FsbGJhY2tEYXRhRmluaXNoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWEuY2FsbGJhY2tEYXRhRmluaXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBhcnJSZXNbaW5kZXhdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1lcmdlUmVmRGF0YVRvRGF0YXNvdXJjZShkYXRhU291cmNlLCBzY2hlbWEsIGFyclJlc1tpbmRleF0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5hZnRlckdldFJlZkRhdGFEcm9wZG93bihudWxsKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVhZHlUb1RyaW5oS3kgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZWFkeVRvVHJpbmhLeSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRGdW50aW9uR2V0TGFiZWwoc2NoZW1hOiBDb2x1bW5TY2hlbWFCYXNlKSB7XHJcbiAgICAgICAgbGV0IGZ1bmNHZXRMYWJlbCA9IGl0ZW0gPT4gaXRlbVtzY2hlbWEuZGlzcGxheUZpZWxkSW5HcmlkXSB8fCBpdGVtW3NjaGVtYS5kaXNwbGF5RmllbGRdIHx8IGl0ZW1bJ3RlbiddO1xyXG4gICAgICAgIGlmIChzY2hlbWEuZnVuY0dldExhYmVsKSB7XHJcbiAgICAgICAgICAgIGZ1bmNHZXRMYWJlbCA9IHNjaGVtYS5mdW5jR2V0TGFiZWw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmdW5jR2V0TGFiZWw7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBtZXJnZVJlZkRhdGFUb0RhdGFzb3VyY2UoZGF0YVNvdXJjZTogYW55W10sIHNjaGVtYTogQ29sdW1uU2NoZW1hQmFzZSwgZGF0YTogYW55W10pIHtcclxuICAgICAgICBpZiAoZGF0YSA9PSBudWxsKSByZXR1cm47XHJcbiAgICAgICAgY29uc3QgZmllbGQgPSBzY2hlbWEuZmllbGQ7XHJcbiAgICAgICAgY29uc3QgZnVuY0dldExhYmVsID0gdGhpcy5nZXRGdW50aW9uR2V0TGFiZWwoc2NoZW1hKTtcclxuICAgICAgICBsZXQgZnVuY1NldFZhbHVlUm93ID0gKHJvd0l0ZW0sIGRhdGEpID0+IHtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGxldCBmdW5jR2V0UmVmRGF0YVJvdyA9IChyZWZJdGVtcykgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gcmVmSXRlbXMubWFwKGl0ZW0gPT4gZnVuY0dldExhYmVsKGl0ZW0pKS5qb2luKGAke3NjaGVtYS5zZXBhcmF0b3J9IGApO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgaWYgKHNjaGVtYS5mdW5jU2V0VmFsdWVSb3cpIHtcclxuICAgICAgICAgICAgZnVuY1NldFZhbHVlUm93ID0gc2NoZW1hLmZ1bmNTZXRWYWx1ZVJvdztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHNjaGVtYS5mdW5jR2V0UmVmRGF0YVJvdykge1xyXG4gICAgICAgICAgICBmdW5jR2V0UmVmRGF0YVJvdyA9IHNjaGVtYS5mdW5jR2V0UmVmRGF0YVJvdztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHNjaGVtYS5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICBkYXRhU291cmNlLmZvckVhY2goaXRlbURhdGEgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGl0ZW1EYXRhW2ZpZWxkXSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGlkcyA9IGl0ZW1EYXRhW2ZpZWxkXTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoaWRzKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZHMgPSBpZHMuc3BsaXQoJywnKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVmSXRlbXMgPSBkYXRhLmZpbHRlcihpID0+IGlkcy5zb21lKHEgPT4gc2NoZW1hLmZ1bmNDb21wYXJlKGksIHEpKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlZkl0ZW1zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbURhdGFbJ3N0cicgKyBmaWVsZF0gPSBmdW5jR2V0UmVmRGF0YVJvdyhyZWZJdGVtcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmNTZXRWYWx1ZVJvdyhpdGVtRGF0YSwgcmVmSXRlbXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBkYXRhU291cmNlLmZvckVhY2goaXRlbURhdGEgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGl0ZW1EYXRhW2ZpZWxkXSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVmSXRlbSA9IGRhdGEuZmluZChpID0+IHNjaGVtYS5mdW5jQ29tcGFyZShpLCBpdGVtRGF0YVtmaWVsZF0pKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVmSXRlbSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1EYXRhWydzdHInICsgZmllbGRdID0gZnVuY0dldExhYmVsKHJlZkl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jU2V0VmFsdWVSb3coaXRlbURhdGEsIHJlZkl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmFmdGVyR2V0UmVmRGF0YURyb3Bkb3duKGZpZWxkKTtcclxuICAgIH1cclxuXHJcbiAgICBhZnRlckdldFJlZkRhdGFEcm9wZG93bihmaWVsZDogc3RyaW5nKSB7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzcGFjZWQtY29tbWVudFxyXG4gICAgLy8jZW5kcmVnaW9uXHJcblxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHNwYWNlZC1jb21tZW50XHJcbiAgICAvLyNyZWdpb24gV29ya2Zsb3dcclxuXHJcbiAgICBwcml2YXRlIGFzeW5jIGNoZWNrSGFzV29ya2Zsb3coKSB7XHJcbiAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLmdldEtleVdvcmtmbG93U2V0dGluZygpO1xyXG4gICAgICAgIGlmICh0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UudXNlV29ya2Zsb3cpIHtcclxuICAgICAgICAgICAgY29uc3QgZGF0YVdvcmtmbG93TmV3ID0gKGF3YWl0IHRoaXMuX3dvcmtmbG93U2V0dGluZ1NlcnZpY2UuZ2V0RGV0YWlsQnlGaWx0ZXIoW1xyXG4gICAgICAgICAgICAgICAgdGhpcy5uZXdGaWx0ZXIoJ3RhYmxlTmFtZScsIE9wZXJhdG9yLmVxdWFsLCBrZXkpXHJcbiAgICAgICAgICAgIF0pKS5kYXRhO1xyXG4gICAgICAgICAgICB0aGlzLl9yZWdpc3Rlckdsb2JhbFNlcnZpY2UodGhpcy5fY29uZ1ZpZWNTZXJ2aWNlSW5CYXNlKTtcclxuICAgICAgICAgICAgaWYgKGRhdGFXb3JrZmxvd05ldykge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5nZXRXb3JrZmxvd0RldGFpbEJ5V29ya2Zsb3dTZXR0aW5nKGRhdGFXb3JrZmxvd05ldyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmcud29ya2Zsb3dTZXR0aW5nTmV3ID0gZGF0YVdvcmtmbG93TmV3O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hcHBlbmRDb2xXb3JrZmxvd1N0YXR1cyhkYXRhV29ya2Zsb3dOZXcud29ya2Zsb3dzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLnNldHRpbmcuaXNXb3JrZmxvd1RyZWUpIHtcclxuICAgICAgICAgICAgICAgIC8vIEzhuqV5IHJhIHRvw6BuIGLhu5kgY+G6pXUgaMOsbmggd29ya2Zsb3cgY3VzdG9tIMSR4buDIGzhuqV5IGRhdGFzb3VyY2UgdHLhuqFuZyB0aMOhaVxyXG4gICAgICAgICAgICAgICAgY29uc3QgZGF0YVNvdXJjZSA9IGF3YWl0IHRoaXMuZ2V0RGF0YVNvdXJjZVRyYW5nVGhhaVdvcmtmbG93KCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGVuZENvbFdvcmtmbG93U3RhdHVzKGRhdGFTb3VyY2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgZ2V0V29ya2Zsb3dEZXRhaWxCeVdvcmtmbG93U2V0dGluZyhpdGVtV29ya2Zsb3dTZXR0aW5nOiBhbnkpIHtcclxuICAgICAgICBpdGVtV29ya2Zsb3dTZXR0aW5nLndvcmtmbG93cyA9IFtdO1xyXG4gICAgICAgIGxldCB3b3JrZmxvd0NvZGVzID0gW107XHJcbiAgICAgICAgLy8gTuG6v3UgdOG6oW8gdGFzayB0aGF5IHbDrCB04bqhbyBjw7RuZyB2aeG7h2NcclxuICAgICAgICBpZiAoaXRlbVdvcmtmbG93U2V0dGluZy5jcmVhdGVUYXNrSW5zdGVhZCkge1xyXG4gICAgICAgICAgICB3b3JrZmxvd0NvZGVzID0gYXdhaXQgdGhpcy5nZXRXb3JrZmxvd0NvZGVCeVRhc2soKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoaXRlbVdvcmtmbG93U2V0dGluZy53b3JrZmxvd0NvZGVzICYmICFBcnJheS5pc0FycmF5KGl0ZW1Xb3JrZmxvd1NldHRpbmcud29ya2Zsb3dDb2RlcykpIHtcclxuICAgICAgICAgICAgaXRlbVdvcmtmbG93U2V0dGluZy53b3JrZmxvd0NvZGVzID0gaXRlbVdvcmtmbG93U2V0dGluZy53b3JrZmxvd0NvZGVzLnNwbGl0KCcsJyk7XHJcbiAgICAgICAgICAgIHdvcmtmbG93Q29kZXMgPSBpdGVtV29ya2Zsb3dTZXR0aW5nLndvcmtmbG93Q29kZXM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAod29ya2Zsb3dDb2Rlcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgY29uc3Qgd29ya2Zsb3dzID0gKGF3YWl0IHRoaXMuX3N0YXRlTWFjaGluZXNTZXJ2aWNlLmdldERhdGFEcm9wZG93bkJ5RmlsdGVyKFxyXG4gICAgICAgICAgICAgICAgW1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmV3RmlsdGVyKCdjb2RlJywgT3BlcmF0b3IuaW4sIHdvcmtmbG93Q29kZXMpXHJcbiAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgbmV3IERyb3Bkb3duT3B0aW9ucyh7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVGaWVsZDogJ2NvZGUnLFxyXG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXlGaWVsZDogJ3RpdGxlJyxcclxuICAgICAgICAgICAgICAgICAgICBmaWVsZFBsdXM6ICdkYXRhJ1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKSk7XHJcbiAgICAgICAgICAgIHdvcmtmbG93cz8uZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICAgICAgICAgIGl0ZW0uZGF0YSA9IEpTT04ucGFyc2UoaXRlbS5kYXRhKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXRlTWFjaGluZURhdGEgPSBpdGVtLmRhdGE7XHJcbiAgICAgICAgICAgICAgICBzdGF0ZU1hY2hpbmVEYXRhLmFjdGlvbnMgPSB7fTtcclxuICAgICAgICAgICAgICAgIHN0YXRlTWFjaGluZURhdGEubWFjaGluZXMuZm9yRWFjaChtYWNoaW5lID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBzdGF0ZU1hY2hpbmVEYXRhLmFjdGlvbnNbbWFjaGluZS5jb2RlXSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIHN0YXRlTWFjaGluZURhdGEuY29ubmVjdGlvbnMuZm9yRWFjaChjb25uID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbm4uc291cmNlID09IG1hY2hpbmUuaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlTWFjaGluZURhdGEuYWN0aW9uc1ttYWNoaW5lLmNvZGVdLnB1c2goY29ubik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgaXRlbVdvcmtmbG93U2V0dGluZy53b3JrZmxvd3MgPSB3b3JrZmxvd3M7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgZ2V0V29ya2Zsb3dDb2RlQnlUYXNrKCkge1xyXG4gICAgICAgIC8vIEzhuqV5IGPDoWMgcXV5IHRyw6xuaCBn4bqvbiBjaG8gY8O0bmcgdmnhu4djXHJcbiAgICAgICAgY29uc3QgcGhhbkNvbmdDb25nVmllY1NlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoQ2F1SGluaFdvcmtmbG93U2VydmljZSk7XHJcbiAgICAgICAgY29uc3QgZGF0YVdvcmtmbG93QnlUYXNrID0gKGF3YWl0IHBoYW5Db25nQ29uZ1ZpZWNTZXJ2aWNlLmdldEFsbChcclxuICAgICAgICAgICAgW10sICd3b3JrZmxvd0NvZGVzJ1xyXG4gICAgICAgICkpLmRhdGE7XHJcbiAgICAgICAgaWYgKCFkYXRhV29ya2Zsb3dCeVRhc2spIHJldHVybiBbXTtcclxuICAgICAgICBjb25zdCB3b3JrZmxvd0NvZGVzID0gW107XHJcbiAgICAgICAgZGF0YVdvcmtmbG93QnlUYXNrLmZvckVhY2goY2F1SGluaCA9PiB7XHJcbiAgICAgICAgICAgIGlmICghY2F1SGluaC53b3JrZmxvd0NvZGVzKSByZXR1cm47XHJcbiAgICAgICAgICAgIGNhdUhpbmgud29ya2Zsb3dDb2Rlcy5zcGxpdCgnLCcpLmZvckVhY2god29ya2Zsb3dDb2RlID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh3b3JrZmxvd0NvZGVzLmluZGV4T2Yod29ya2Zsb3dDb2RlKSA9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHdvcmtmbG93Q29kZXMucHVzaCh3b3JrZmxvd0NvZGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gd29ya2Zsb3dDb2RlcztcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFwcGVuZENvbFdvcmtmbG93U3RhdHVzKHdvcmtmbG93czogV2ZJdGVtW10pIHtcclxuICAgICAgICBjb25zdCBkYXRhU291cmNlID0gW3tcclxuICAgICAgICAgICAgaWQ6IG51bGwsXHJcbiAgICAgICAgICAgIHJhd1RlbjogJ0NoxrBhIGLhuq90IMSR4bqndScsXHJcbiAgICAgICAgICAgIHRlbjogJ0NoxrBhIGLhuq90IMSR4bqndScsXHJcbiAgICAgICAgICAgIG1hTG93ZXI6ICcnLFxyXG4gICAgICAgICAgICB0ZW5Mb3dlcjogJ2NoxrBhIGLhuq90IMSR4bqndSdcclxuICAgICAgICB9XTtcclxuICAgICAgICBpZiAod29ya2Zsb3dzICYmIHdvcmtmbG93cy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgd29ya2Zsb3dzLmZvckVhY2god29ya2Zsb3cgPT4ge1xyXG4gICAgICAgICAgICAgICAgd29ya2Zsb3cuZGF0YS5tYWNoaW5lcy5mb3JFYWNoKG1hY2hpbmUgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1TdGF0dXMgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBtYWNoaW5lLmNvZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJhd1RlbjogbWFjaGluZS5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW46IG1hY2hpbmUubmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWFMb3dlcjogbWFjaGluZS5jb2RlLnRvTG93ZXJDYXNlKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlbkxvd2VyOiBtYWNoaW5lLm5hbWUudG9Mb3dlckNhc2UoKVxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFkYXRhU291cmNlLnNvbWUoeCA9PiB4LnRlbkxvd2VyID09IGl0ZW1TdGF0dXMudGVuTG93ZXIgJiYgeC5tYUxvd2VyID09IGl0ZW1TdGF0dXMubWFMb3dlcikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVNvdXJjZS5wdXNoKGl0ZW1TdGF0dXMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtU2FtZU5hbWUgPSBkYXRhU291cmNlLmZpbmQocSA9PiBxLnRlbkxvd2VyID09IGl0ZW1TdGF0dXMudGVuTG93ZXIgJiYgcS5tYUxvd2VyICE9IGl0ZW1TdGF0dXMubWFMb3dlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtU2FtZU5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1TYW1lTmFtZS50ZW4gPSBgJHtpdGVtU2FtZU5hbWUucmF3VGVufSAoJHtpdGVtU2FtZU5hbWUuaWR9KWA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtU3RhdHVzLnRlbiA9IGAke2l0ZW1TdGF0dXMucmF3VGVufSAoJHtpdGVtU3RhdHVzLmlkfSlgO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNldHRpbmcuYWR2YW5jZURhdGEudXNlckRhdGEgPSB0aGlzLm1vZGVsLmFkdmFuY2VEYXRhLnVzZXJEYXRhO1xyXG4gICAgICAgIGNvbnN0IGNvbFBhcmVudCA9IG5ldyBDb2x1bW5TY2hlbWFCYXNlKHtcclxuICAgICAgICAgICAgZmllbGQ6IFdvcmtmbG93RmllbGRTdGF0ZUNvZGUsXHJcbiAgICAgICAgICAgIGRhdGFUeXBlOiAndHJhbmdUaGFpVjUnLFxyXG4gICAgICAgICAgICBkYXRhVHlwZVJlZkZpZWxkOiAndHJhbmdUaGFpVjUnLFxyXG4gICAgICAgICAgICB2aXNpYmxlOiAhdGhpcy5zZXR0aW5nLmhpZGRlbldvcmtmbG93Q29sdW1uLFxyXG4gICAgICAgICAgICBjb250cm9sVHlwZTogQ29udHJvbFR5cGUuZHJvcGRvd24sXHJcbiAgICAgICAgICAgIGxhYmVsOiAnVHLhuqFuZyB0aMOhaScsXHJcbiAgICAgICAgICAgIHdpZHRoOiAnMTIwcHgnLFxyXG4gICAgICAgICAgICB0ZXh0QWxpZ246IFRleHRBbGlnbi5DZW50ZXIsXHJcbiAgICAgICAgICAgIGlzVHJlZTogdHJ1ZSxcclxuICAgICAgICAgICAgZmllbGRUcmVlOiAncGFyZW50SWQnLFxyXG4gICAgICAgICAgICBkYXRhU291cmNlLFxyXG4gICAgICAgICAgICBhbGxvd0ZpbHRlcjogdGhpcy5zZXR0aW5nLmFsbG93RmlsdGVyV29ya2Zsb3dDb2x1bW5cclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLnNldHRpbmcuYWR2YW5jZURhdGEuZmllbGROZWVkR2V0UmVmLnVuc2hpZnQoY29sUGFyZW50KTtcclxuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHtcclxuICAgICAgICAgICAgLi4uY29sUGFyZW50LFxyXG4gICAgICAgICAgICByYXdDb2x1bW46IGNvbFBhcmVudCxcclxuICAgICAgICAgICAgY29udHJvbFR5cGU6IENvbnRyb2xUeXBlLmRyb3Bkb3duLFxyXG4gICAgICAgICAgICBkYXRhVHlwZTogY29sUGFyZW50LmRhdGFUeXBlUmVmRmllbGQsXHJcbiAgICAgICAgICAgIGZpZWxkOiAnc3RyJyArIGNvbFBhcmVudC5maWVsZCxcclxuICAgICAgICAgICAgYWxsb3dGaWx0ZXI6IGNvbFBhcmVudC5hbGxvd0ZpbHRlcixcclxuICAgICAgICAgICAgc29ydDogZmFsc2UsXHJcbiAgICAgICAgICAgIHZpc2libGU6ICF0aGlzLnNldHRpbmcuaGlkZGVuV29ya2Zsb3dDb2x1bW5cclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbFBhcmVudC52aXNpYmxlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLmNvbHMucHVzaChjb2xQYXJlbnQsIGNoaWxkcmVuKTtcclxuICAgICAgICB0aGlzLmNydWRMaXN0LmZvcm1hdENvbHVtbnMoW2NvbFBhcmVudCwgY2hpbGRyZW5dKTtcclxuICAgICAgICAvLyB0aGlzLnNldHRpbmcuY29scy5wdXNoKGNvbFBhcmVudCk7XHJcbiAgICAgICAgLy8gdGhpcy5jcnVkTGlzdC5mb3JtYXRDb2x1bW5zKFtjb2xQYXJlbnRdKTtcclxuICAgICAgICB0aGlzLmNydWRMaXN0LmJ1aWxkRmlsdGVyQ29sdW1uKFtjb2xQYXJlbnRdKTtcclxuXHJcbiAgICAgICAgY29uc3QgdXNlckN1cnJlbnQgPSB0aGlzLl91c2VyU2VydmljZS5nZXRDdXJyZW50VXNlcigpO1xyXG4gICAgICAgIGlmICh1c2VyQ3VycmVudC51c2VyTmFtZSA9PSAnYWRtaW4nKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbEZvckFkbWluID0gbmV3IENvbHVtblNjaGVtYUJhc2Uoe1xyXG4gICAgICAgICAgICAgICAgZmllbGQ6ICdfX3ZpZXdIaXN0b3J5JyxcclxuICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnX192aWV3SGlzdG9yeScsXHJcbiAgICAgICAgICAgICAgICBsYWJlbDogJycsXHJcbiAgICAgICAgICAgICAgICB3aWR0aDogJzEwMHB4JyxcclxuICAgICAgICAgICAgICAgIHRleHRBbGlnbjogVGV4dEFsaWduLkNlbnRlcixcclxuICAgICAgICAgICAgICAgIGFsbG93RmlsdGVyOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIHNvcnQ6IGZhbHNlXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLnNldHRpbmcuY29scy5wdXNoKGNvbEZvckFkbWluKTtcclxuICAgICAgICAgICAgdGhpcy5jcnVkTGlzdC5mb3JtYXRDb2x1bW5zKFtjb2xGb3JBZG1pbl0pO1xyXG4gICAgICAgICAgICB0aGlzLmNydWRMaXN0LmJ1aWxkRmlsdGVyQ29sdW1uKFtjb2xGb3JBZG1pbl0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXREYXRhU291cmNlVHJhbmdUaGFpV29ya2Zsb3coKSB7XHJcbiAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzcGFjZWQtY29tbWVudFxyXG4gICAgLy8jZW5kcmVnaW9uXHJcblxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHNwYWNlZC1jb21tZW50XHJcbiAgICAvLyNyZWdpb24gY3J1ZFxyXG4gICAgcHJpdmF0ZSBsb2FkSXRlbUZyb21RdWVyeVBhcmFtKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmxvYWREZXRhaWxGcm9tUXVlcnlQYXJhbSA9PT0gdW5kZWZpbmVkIHx8IHRoaXMubG9hZERldGFpbEZyb21RdWVyeVBhcmFtID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIGxldCBpZEluUXVlcnlTdHJpbmcgPSBudWxsO1xyXG4gICAgICAgICAgICBsZXQgcGlkID0gbnVsbDsgLy8gcGVybWlzc2lvbiBJZCDEkcaw4bujYyBuZ8aw4budaSBraMOhYyBzaGFyZVxyXG4gICAgICAgICAgICBpZiAodGhpcy5fYWN0aXZhdGVkUm91dGUuc25hcHNob3RcclxuICAgICAgICAgICAgICAgICYmIHRoaXMuX2FjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgaWRJblF1ZXJ5U3RyaW5nID0gdGhpcy5fYWN0aXZhdGVkUm91dGUuc25hcHNob3QucXVlcnlQYXJhbXMuaWQgfHwgdGhpcy5fYWN0aXZhdGVkUm91dGUuc25hcHNob3QucXVlcnlQYXJhbXMuZW50aXR5S2V5O1xyXG4gICAgICAgICAgICAgICAgcGlkID0gdGhpcy5fYWN0aXZhdGVkUm91dGUuc25hcHNob3QucXVlcnlQYXJhbXMucGlkO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChwaWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9hZERldGFpbFBpZChwaWQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGlkSW5RdWVyeVN0cmluZykge1xyXG4gICAgICAgICAgICAgICAgLy8gZ2V0IGRldGFpbCBkYXRhXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UuZ2V0RGV0YWlsV2l0aFBlcm1pc3Npb24oaWRJblF1ZXJ5U3RyaW5nKVxyXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKHJlcyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVzLmRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnS2jDtG5nIHTDrG0gdGjhuqV5IGLhuqNuIGdoaSBj4bqnbiB4ZW0gY2hpIHRp4bq/dCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgocmVzLmRhdGEuYmFzZVBlcm1pc3Npb24gJiBQZXJtaXNzaW9uQmFzZS5FRElUKSA9PSBQZXJtaXNzaW9uQmFzZS5FRElUXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAocmVzLmRhdGEuYmFzZVBlcm1pc3Npb24gJiBQZXJtaXNzaW9uQmFzZS5SRUFEKSA9PSBQZXJtaXNzaW9uQmFzZS5SRUFEXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZWRpdChyZXMuZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ0LhuqFuIGtow7RuZyBjw7MgcXV54buBbiB4ZW0gYuG6o24gZ2hpJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdlcnJvciBvbiBnZXQgZGV0YWlsIGZyb20gcXVlcnlzdHJpbmcnLCBlcnIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ0tow7RuZyB0w6xtIHRo4bqleSBi4bqjbiBnaGkgY+G6p24geGVtIGNoaSB0aeG6v3QnKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGxvYWREZXRhaWxQaWQocGlkOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UuZ2V0RGV0YWlsQnlQaWQocGlkKVxyXG4gICAgICAgICAgICAudGhlbihyZXMgPT4gdGhpcy5oYW5kbGVSZXNwb25zZShyZXMsICcnLCBmID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICghcmVzLmRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ0tow7RuZyB0w6xtIHRo4bqleSBi4bqjbiBnaGkgY+G6p24geGVtIGNoaSB0aeG6v3QnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICgocmVzLmRhdGEuYmFzZVBlcm1pc3Npb24gJiBQZXJtaXNzaW9uQmFzZS5FRElUKSA9PSBQZXJtaXNzaW9uQmFzZS5FRElUXHJcbiAgICAgICAgICAgICAgICAgICAgfHwgKHJlcy5kYXRhLmJhc2VQZXJtaXNzaW9uICYgUGVybWlzc2lvbkJhc2UuUkVBRCkgPT0gUGVybWlzc2lvbkJhc2UuUkVBRFxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzLmRhdGEucGlkID0gcGlkO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlcy5kYXRhLmJhc2VQZXJtaXNzaW9uQnlQaWQgPSByZXMuZGF0YS5iYXNlUGVybWlzc2lvbjtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9lZGl0KHJlcy5kYXRhKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnQuG6oW4ga2jDtG5nIGPDsyBxdXnhu4FuIHhlbSBi4bqjbiBnaGknKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSkpLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdlcnJvciBvbiBnZXQgZGV0YWlsIGZyb20gcXVlcnlzdHJpbmcnLCBlcnIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdLaMO0bmcgdMOsbSB0aOG6pXkgYuG6o24gZ2hpIGPhuqduIHhlbSBjaGkgdGnhur90Jyk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF9hZGQoZXZ0KSB7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0VmFsaWRhdGUgPSBhd2FpdCB0aGlzLnZhbGlkYXRlQWRkKCk7XHJcbiAgICAgICAgaWYgKCFyZXN1bHRWYWxpZGF0ZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZm9ybU1vZGVsLmRhdGEgPSB7fTtcclxuICAgICAgICB0aGlzLmZvcm1Nb2RlbC5mb3JtU3RhdGUgPSBGb3JtU3RhdGUuQUREO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuYmVmb3JlQWRkKCk7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLnBvcHVwSGVhZGVyID0gYFRow6ptIG3hu5tpICR7dGhpcy5zZXR0aW5nLm9iamVjdE5hbWV9IGA7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLm1hc2tDbGFzcyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5zaG93RGV0YWlsRm9ybSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgdmFsaWRhdGVBZGQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgYmVmb3JlQWRkKCkge1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF92aWV3KHJvd0RhdGEpIHtcclxuICAgICAgICBpZiAocm93RGF0YS5iYXNlUGVybWlzc2lvbiAmIFBlcm1pc3Npb25CYXNlLkVESVQpIHtcclxuICAgICAgICAgICAgdGhpcy5fZWRpdChyb3dEYXRhKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybU1vZGVsLmZvcm1TdGF0ZSA9IEZvcm1TdGF0ZS5WSUVXO1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmJlZm9yZVZpZXcoKTtcclxuICAgICAgICAgICAgdGhpcy5zZXR0aW5nLnBvcHVwSGVhZGVyID0gYENoaSB0aeG6v3QgJHt0aGlzLnNldHRpbmcub2JqZWN0TmFtZX0gYDtcclxuICAgICAgICAgICAgdGhpcy5zZXR0aW5nLm1hc2tDbGFzcyA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybU1vZGVsLmRhdGEgPSB0aGlzLmNsb25lRGF0YShyb3dEYXRhKTtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5tb2RpZnlWaWV3TW9kZWwocm93RGF0YSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd0RldGFpbEZvcm0gPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBiZWZvcmVWaWV3KCkge1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIG1vZGlmeVZpZXdNb2RlbChyb3dEYXRhOiBhbnkpIHtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBfY29weUxpbmtNdWx0aXBsZSgpIHtcclxuICAgICAgICBjb25zdCBwYXRocyA9IFtdO1xyXG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXMpIHtcclxuICAgICAgICAgICAgcGF0aHMucHVzaChhd2FpdCB0aGlzLmdldENvcHlQYXRoKHRoaXMuc2V0dGluZywgaXRlbSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9jb21tb25TZXJ2aWNlLmNvcHlCeVN0b3JhZ2UocGF0aHMuam9pbignXFxyXFxuJykpO1xyXG4gICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93U3VjY2VzcygnxJDDoyBzYW8gY2jDqXAgY8OhYyBsacOqbiBr4bq/dCDEkcOjIGNo4buNbicpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF9jb3B5TGluayhyb3dEYXRhOiBhbnkpIHtcclxuICAgICAgICBjb25zdCBwYXRoID0gYXdhaXQgdGhpcy5nZXRDb3B5UGF0aCh0aGlzLnNldHRpbmcsIHJvd0RhdGEpO1xyXG4gICAgICAgIHRoaXMuX2NvbW1vblNlcnZpY2UuY29weUJ5U3RvcmFnZShwYXRoKTtcclxuICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1N1Y2Nlc3MoJ8SQw6Mgc2FvIGNow6lwIGxpw6puIGvhur90Jyk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX2VkaXQocm93RGF0YSwgc2NvcGVEYXRhRWRpdDogYW55ID0ge30pIHtcclxuICAgICAgICBjb25zdCBmbGFzaFNob3cgPSByb3dEYXRhW0tleUZsYXNoU2hvd107XHJcbiAgICAgICAgZGVsZXRlIHJvd0RhdGFbS2V5Rmxhc2hTaG93XTtcclxuICAgICAgICBhd2FpdCB0aGlzLmJlZm9yZUVkaXQoKTtcclxuICAgICAgICB0aGlzLmZvcm1Nb2RlbC5mb3JtU3RhdGUgPSBGb3JtU3RhdGUuRURJVDtcclxuICAgICAgICB0aGlzLnNldHRpbmcucG9wdXBIZWFkZXIgPSBgQ2hpIHRp4bq/dCAke3RoaXMuc2V0dGluZy5vYmplY3ROYW1lfSBgO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZy5tYXNrQ2xhc3MgPSBmbGFzaFNob3cgPyAnaGlkZScgOiBudWxsO1xyXG4gICAgICAgIHRoaXMuc2NvcGVEYXRhRWRpdCA9IHNjb3BlRGF0YUVkaXQ7XHJcbiAgICAgICAgdGhpcy5mb3JtTW9kZWwuZGF0YSA9IHRoaXMuY2xvbmVEYXRhKHJvd0RhdGEpO1xyXG4gICAgICAgIGF3YWl0IHRoaXMubW9kaWZ5RWRpdE1vZGVsKHJvd0RhdGEpO1xyXG4gICAgICAgIHRoaXMuZm9ybU1vZGVsLmRhdGFbS2V5Rmxhc2hTaG93XSA9IGZsYXNoU2hvdztcclxuICAgICAgICB0aGlzLnNob3dEZXRhaWxGb3JtID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBiZWZvcmVFZGl0KCkge1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIG1vZGlmeUVkaXRNb2RlbChyb3dEYXRhOiBhbnkpIHtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNsb25lRGF0YShyb3dEYXRhKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgcGlkOiByb3dEYXRhLnBpZCxcclxuICAgICAgICAgICAgYmFzZVBlcm1pc3Npb25CeVBpZDogcm93RGF0YS5iYXNlUGVybWlzc2lvbkJ5UGlkLFxyXG4gICAgICAgICAgICBpZDogcm93RGF0YVt0aGlzLnNldHRpbmcuZW50aXR5S2V5XSxcclxuICAgICAgICAgICAgYmFzZVBlcm1pc3Npb246IHJvd0RhdGEuYmFzZVBlcm1pc3Npb25cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGdldFByb21pc2VEZWxldGVJdGVtKHJvd0RhdGEpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLmRlbGV0ZShyb3dEYXRhLmlkKTtcclxuICAgIH1cclxuXHJcbiAgICBfZGVsZXRlKHJvd0RhdGEpIHtcclxuICAgICAgICBpZiAocm93RGF0YS5fX2Rpc2FibGVEZWxldGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd0RlbGV0ZUNvbmZpcm0oKS50aGVuKHJzID0+IHtcclxuICAgICAgICAgICAgaWYgKCFycykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0UHJvbWlzZURlbGV0ZUl0ZW0ocm93RGF0YSlcclxuICAgICAgICAgICAgICAgICAgICAudGhlbihyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJlZm9yZVJlbG9hZEFmdGVyRGVsZXRlKFtyb3dEYXRhLmlkXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zZXR0aW5nLnNob3dWZXJzaW9uQnV0dG9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmZpcmVFdmVudChDb21DdHhDb25zdGFudHMuQ09NTU9OLlJFTE9BRF9EQVRBX1ZFUlNJT04sIHt9LCB0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3RyaWdnZXJQcm9jZXNzRGF0YSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dEZWxldGVEYXRhU3VjY2VzcygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nQnlSZXNwb25zZShyZXNwb25zZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9LCBlcnJvciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93RGVsZXRlRGF0YUVycm9yKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRQcm9taXNlRGVsZXRlSXRlbXMoaXRlbXMpIHtcclxuICAgICAgICBjb25zdCBpZHMgPSBpdGVtcy5tYXAoeCA9PiB4LmlkKS5qb2luKCcsJyk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0dGluZy5iYXNlU2VydmljZS5kZWxldGVNYW55KGlkcyk7XHJcbiAgICB9XHJcblxyXG4gICAgX2RlbGV0ZU11bHRpcGxlKGl0ZW1zKSB7XHJcbiAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dEZWxldGVDb25maXJtKCkudGhlbihycyA9PiB7XHJcbiAgICAgICAgICAgIGlmICghcnMpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdldFByb21pc2VEZWxldGVJdGVtcyhpdGVtcykudGhlbihyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5iZWZvcmVSZWxvYWRBZnRlckRlbGV0ZShpdGVtcy5tYXAocSA9PiBxLmlkKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3RyaWdnZXJQcm9jZXNzRGF0YSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd0RlbGV0ZURhdGFTdWNjZXNzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmdCeVJlc3BvbnNlKHJlc3BvbnNlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGJlZm9yZVJlbG9hZEFmdGVyRGVsZXRlKGlkczogc3RyaW5nW10pIHtcclxuICAgIH1cclxuXHJcbiAgICBvbkJlZm9yZUNhbmNlbCgpIHtcclxuICAgIH1cclxuXHJcbiAgICBfaGFuZGxlU2F2ZWQoKSB7XHJcbiAgICAgICAgdGhpcy5zaG93RGV0YWlsRm9ybSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuX3RyaWdnZXJQcm9jZXNzRGF0YSgpO1xyXG4gICAgfVxyXG5cclxuICAgIF9oYW5kbGVDYW5jZWwoJGV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5vbkJlZm9yZUNhbmNlbCgpO1xyXG4gICAgICAgIHRoaXMuc2hvd0RldGFpbEZvcm0gPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgc3BhY2VkLWNvbW1lbnRcclxuICAgIC8vI2VuZHJlZ2lvblxyXG59XHJcbiJdfQ==