@pepperi-addons/ngx-lib 0.4.2-beta.19 → 0.4.2-beta.20

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.
@@ -22,6 +22,7 @@ export declare class PepDialogService {
22
22
  }, size?: PepDialogSizeType): MatDialogConfig;
23
23
  openDefaultDialog(data: PepDialogData, config?: MatDialogConfig): MatDialogRef<PepDefaultDialogComponent>;
24
24
  openDialog<T, D = any, R = any>(componentOrTemplateRef: ComponentType<T> | TemplateRef<T>, data?: any, config?: MatDialogConfig<D>): MatDialogRef<T, R>;
25
+ fixMultiDialogsPos(): void;
25
26
  static ɵfac: i0.ɵɵFactoryDeclaration<PepDialogService, never>;
26
27
  static ɵprov: i0.ɵɵInjectableDeclaration<PepDialogService>;
27
28
  }
@@ -58,6 +58,10 @@ export class PepDialogService {
58
58
  this.fixConfigIfNeeded(data, config);
59
59
  config.data = data;
60
60
  const dialogRef = this.dialog.open(PepDefaultDialogComponent, config);
61
+ this.fixMultiDialogsPos();
62
+ dialogRef.afterClosed().subscribe(result => {
63
+ this.fixMultiDialogsPos();
64
+ });
61
65
  return dialogRef;
62
66
  }
63
67
  openDialog(componentOrTemplateRef, data = {}, config = null) {
@@ -68,8 +72,25 @@ export class PepDialogService {
68
72
  this.fixConfigIfNeeded(tmpConfig, config);
69
73
  config.data = data;
70
74
  const dialogRef = this.dialog.open(componentOrTemplateRef, config);
75
+ this.fixMultiDialogsPos();
76
+ dialogRef.afterClosed().subscribe(result => {
77
+ this.fixMultiDialogsPos();
78
+ });
71
79
  return dialogRef;
72
80
  }
81
+ fixMultiDialogsPos() {
82
+ // checking if have more than one open dialog on page
83
+ // if true set the position of each dialog.
84
+ var elements = document.getElementsByClassName('pep-dialog');
85
+ if (elements?.length) {
86
+ var index = 0;
87
+ for (let i = elements.length - 1; i >= 0; i--) {
88
+ let element = elements[i];
89
+ element.style.transform = "translate(-" + (index) + "rem,-" + (index) + "rem)";
90
+ index += 1;
91
+ }
92
+ }
93
+ }
73
94
  }
74
95
  PepDialogService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: PepDialogService, deps: [{ token: i1.MatDialog }, { token: i2.PepLayoutService }, { token: i3.Overlay }], target: i0.ɵɵFactoryTarget.Injectable });
75
96
  PepDialogService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: PepDialogService, providedIn: 'root' });
@@ -79,4 +100,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImpor
79
100
  providedIn: 'root',
80
101
  }]
81
102
  }], ctorParameters: function () { return [{ type: i1.MatDialog }, { type: i2.PepLayoutService }, { type: i3.Overlay }]; } });
82
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbGliL2RpYWxvZy9kaWFsb2cuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFlLE1BQU0sZUFBZSxDQUFDO0FBQ3hELE9BQU8sRUFFSCxlQUFlLEdBRWxCLE1BQU0sMEJBQTBCLENBQUM7QUFJbEMsT0FBTyxFQUFxQixhQUFhLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxRixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7Ozs7QUFLdkUsTUFBTSxPQUFPLGdCQUFnQjtJQUN6QixZQUNZLE1BQWlCLEVBQ2pCLGFBQStCLEVBQy9CLE9BQWdCO1FBRmhCLFdBQU0sR0FBTixNQUFNLENBQVc7UUFDakIsa0JBQWEsR0FBYixhQUFhLENBQWtCO1FBQy9CLFlBQU8sR0FBUCxPQUFPLENBQVM7SUFDeEIsQ0FBQztJQUVHLGlCQUFpQixDQUFDLElBQW1CLEVBQUUsTUFBdUI7UUFDbEUsSUFBSSxNQUFNLENBQUMsWUFBWSxFQUFFO1lBQ3JCLHdEQUF3RDtZQUN4RCxNQUFNLEdBQUcsR0FBRyxJQUFJLGFBQWEsQ0FBQztnQkFDMUIsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO2dCQUN6QixVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7Z0JBQzNCLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVTtnQkFDM0IsYUFBYSxFQUFFLElBQUksQ0FBQyxhQUFhO2FBQ3BDLENBQUMsQ0FBQztZQUVILE1BQU0sZ0JBQWdCLEdBQUcsR0FBRyxDQUFDLFNBQVMsS0FBSyxLQUFLLENBQUM7WUFDakQsTUFBTSxpQkFBaUIsR0FBRyxHQUFHLENBQUMsVUFBVSxLQUFLLEtBQUssQ0FBQztZQUNuRCxNQUFNLGlCQUFpQixHQUFHLEdBQUcsQ0FBQyxVQUFVLEtBQUssS0FB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Q3JCLENBQUM7OzZHQWhHUSxnQkFBZ0I7aUhBQWhCLGdCQUFnQixjQUZiLE1BQU07MkZBRVQsZ0JBQWdCO2tCQUg1QixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICAgIE1hdERpYWxvZyxcbiAgICBNYXREaWFsb2dDb25maWcsXG4gICAgTWF0RGlhbG9nUmVmLFxufSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgUGVwTGF5b3V0U2VydmljZSB9IGZyb20gJ0BwZXBwZXJpLWFkZG9ucy9uZ3gtbGliJztcbmltcG9ydCB7IE92ZXJsYXkgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQgeyBDb21wb25lbnRUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XG5pbXBvcnQgeyBQZXBEaWFsb2dTaXplVHlwZSwgUGVwRGlhbG9nRGF0YSwgUGVwRGlhbG9nQ3VzdG9taXplRGF0YSB9IGZyb20gJy4vZGlhbG9nLm1vZGVsJztcbmltcG9ydCB7IFBlcERlZmF1bHREaWFsb2dDb21wb25lbnQgfSBmcm9tICcuL2RlZmF1bHQtZGlhbG9nLmNvbXBvbmVudCc7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFBlcERpYWxvZ1NlcnZpY2Uge1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGRpYWxvZzogTWF0RGlhbG9nLFxuICAgICAgICBwcml2YXRlIGxheW91dFNlcnZpY2U6IFBlcExheW91dFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgb3ZlcmxheTogT3ZlcmxheVxuICAgICkgeyB9XG5cbiAgICBwcml2YXRlIGZpeENvbmZpZ0lmTmVlZGVkKGRhdGE6IFBlcERpYWxvZ0RhdGEsIGNvbmZpZzogTWF0RGlhbG9nQ29uZmlnKSB7XG4gICAgICAgIGlmIChjb25maWcuZGlzYWJsZUNsb3NlKSB7XG4gICAgICAgICAgICAvLyBDcmVhdGUgdG1wIG9iamVjdCBmb3IgY29tcGFyaW5nIGFnYWluc3QgdGhlIGRlZmF1bHRzLlxuICAgICAgICAgICAgY29uc3QgdG1wID0gbmV3IFBlcERpYWxvZ0RhdGEoe1xuICAgICAgICAgICAgICAgIHNob3dDbG9zZTogZGF0YS5zaG93Q2xvc2UsXG4gICAgICAgICAgICAgICAgc2hvd0hlYWRlcjogZGF0YS5zaG93SGVhZGVyLFxuICAgICAgICAgICAgICAgIHNob3dGb290ZXI6IGRhdGEuc2hvd0Zvb3RlcixcbiAgICAgICAgICAgICAgICBhY3Rpb25CdXR0b25zOiBkYXRhLmFjdGlvbkJ1dHRvbnMsXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgY29uc3Qgc2hvd0Nsb3NlSXNGYWxzZSA9IHRtcC5zaG93Q2xvc2UgPT09IGZhbHNlO1xuICAgICAgICAgICAgY29uc3Qgc2hvd0hlYWRlcklzRmFsc2UgPSB0bXAuc2hvd0hlYWRlciA9PT0gZmFsc2U7XG4gICAgICAgICAgICBjb25zdCBzaG93Rm9vdGVySXNGYWxzZSA9IHRtcC5zaG93Rm9vdGVyID09PSBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IG5vQWN0aW9ucyA9IHRtcC5hY3Rpb25CdXR0b25zID09PSBudWxsIHx8IHRtcC5hY3Rpb25CdXR0b25zLmxlbmd0aCA9PT0gMDtcblxuICAgICAgICAgICAgaWYgKChzaG93Rm9vdGVySXNGYWxzZSAmJiAoc2hvd0Nsb3NlSXNGYWxzZSB8fCBzaG93SGVhZGVySXNGYWxzZSkpIHx8IFxuICAgICAgICAgICAgICAgIChkYXRhLmFjdGlvbnNUeXBlID09PSAnY3VzdG9tJyAmJiBub0FjdGlvbnMpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBjb25maWcuZGlzYWJsZUNsb3NlID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXREaWFsb2dDb25maWcoXG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICAgIGRpc2FibGVDbG9zZT86IGJvb2xlYW47XG4gICAgICAgICAgICBoZWlnaHQ/OiBzdHJpbmc7XG4gICAgICAgICAgICBtaW5XaWR0aD86IHN0cmluZztcbiAgICAgICAgICAgIG1heFdpZHRoPzogc3RyaW5nO1xuICAgICAgICAgICAgbWF4SGVpZ2h0Pzogc3RyaW5nO1xuICAgICAgICAgICAgcGFuZWxDbGFzcz86IHN0cmluZztcbiAgICAgICAgfSA9IHt9LFxuICAgICAgICBzaXplOiBQZXBEaWFsb2dTaXplVHlwZSA9ICdyZWd1bGFyJ1xuICAgICk6IE1hdERpYWxvZ0NvbmZpZyB7XG4gICAgICAgIGNvbnN0IGRpYWxvZ0NvbmZpZyA9IG5ldyBNYXREaWFsb2dDb25maWcoKTtcblxuICAgICAgICBkaWFsb2dDb25maWcuYXV0b0ZvY3VzID0gZmFsc2U7XG4gICAgICAgIGRpYWxvZ0NvbmZpZy5kaXJlY3Rpb24gPSB0aGlzLmxheW91dFNlcnZpY2UuaXNSdGwoKSA/ICdydGwnIDogJ2x0cic7XG4gICAgICAgIGRpYWxvZ0NvbmZpZy5kaXNhYmxlQ2xvc2UgPSBvcHRpb25zLmRpc2FibGVDbG9zZSA/PyB0cnVlO1xuICAgICAgICBcbiAgICAgICAgZGlhbG9nQ29uZmlnLnBhbmVsQ2xhc3MgPSBbJ3BlcC1kaWFsb2cnXTtcbiAgICAgICAgaWYgKG9wdGlvbnMucGFuZWxDbGFzcykge1xuICAgICAgICAgICAgZGlhbG9nQ29uZmlnLnBhbmVsQ2xhc3MucHVzaChvcHRpb25zLnBhbmVsQ2xhc3MpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNpemUgPT09ICdpbmxpbmUnKSB7XG4gICAgICAgICAgICBkaWFsb2dDb25maWcuaGVpZ2h0ID0gb3B0aW9ucy5oZWlnaHQgfHwgJ2F1dG8nO1xuICAgICAgICAgICAgZGlhbG9nQ29uZmlnLm1heFdpZHRoID0gb3B0aW9ucy5tYXhXaWR0aCB8fCAnMTAwdncnO1xuICAgICAgICAgICAgZGlhbG9nQ29uZmlnLm1heEhlaWdodCA9IG9wdGlvbnMubWF4SGVpZ2h0IHx8ICcxMDB2aCc7XG4gICAgICAgICAgICBkaWFsb2dDb25maWcubWluV2lkdGggPSBvcHRpb25zLm1pbldpZHRoIHx8ICczMDBweCc7XG4gICAgICAgIH1cblxuICAgICAgICBkaWFsb2dDb25maWcucGFuZWxDbGFzcy5wdXNoKHNpemUpO1xuXG4gICAgICAgIGRpYWxvZ0NvbmZpZy5zY3JvbGxTdHJhdGVneSA9IHRoaXMub3ZlcmxheS5zY3JvbGxTdHJhdGVnaWVzLm5vb3AoKTtcbiAgICAgICAgLy8gZGlhbG9nQ29uZmlnLnNjcm9sbFN0cmF0ZWd5ID0gdGhpcy5vdmVybGF5LnNjcm9sbFN0cmF0ZWdpZXMuYmxvY2soKTtcblxuICAgICAgICByZXR1cm4gZGlhbG9nQ29uZmlnO1xuICAgIH1cblxuICAgIG9wZW5EZWZhdWx0RGlhbG9nKFxuICAgICAgICBkYXRhOiBQZXBEaWFsb2dEYXRhLFxuICAgICAgICBjb25maWc6IE1hdERpYWxvZ0NvbmZpZyA9IG51bGxcbiAgICApOiBNYXREaWFsb2dSZWY8UGVwRGVmYXVsdERpYWxvZ0NvbXBvbmVudD4ge1xuICAgICAgICBpZiAoIWNvbmZpZykge1xuICAgICAgICAgICAgY29uZmlnID0gdGhpcy5nZXREaWFsb2dDb25maWcoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZpeENvbmZpZ0lmTmVlZGVkKGRhdGEsIGNvbmZpZyk7XG5cbiAgICAgICAgY29uZmlnLmRhdGEgPSBkYXRhO1xuICAgICAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKFBlcERlZmF1bHREaWFsb2dDb21wb25lbnQsIGNvbmZpZyk7XG4gICAgICAgIHJldHVybiBkaWFsb2dSZWY7XG4gICAgfVxuXG4gICAgb3BlbkRpYWxvZzxULCBEID0gYW55LCBSID0gYW55PihcbiAgICAgICAgY29tcG9uZW50T3JUZW1wbGF0ZVJlZjogQ29tcG9uZW50VHlwZTxUPiB8IFRlbXBsYXRlUmVmPFQ+LFxuICAgICAgICBkYXRhOiBhbnkgPSB7fSxcbiAgICAgICAgY29uZmlnOiBNYXREaWFsb2dDb25maWc8RD4gPSBudWxsXG4gICAgKTogTWF0RGlhbG9nUmVmPFQsIFI+IHtcbiAgICAgICAgaWYgKCFjb25maWcpIHtcbiAgICAgICAgICAgIGNvbmZpZyA9IHRoaXMuZ2V0RGlhbG9nQ29uZmlnKCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0bXBDb25maWcgPSBuZXcgUGVwRGlhbG9nQ3VzdG9taXplRGF0YShkYXRhKTtcbiAgICAgICAgdGhpcy5maXhDb25maWdJZk5lZWRlZCh0bXBDb25maWcsIGNvbmZpZyk7XG5cbiAgICAgICAgY29uZmlnLmRhdGEgPSBkYXRhO1xuICAgICAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKGNvbXBvbmVudE9yVGVtcGxhdGVSZWYsIGNvbmZpZyk7XG4gICAgICAgIHJldHVybiBkaWFsb2dSZWY7XG4gICAgfVxufVxuIl19
103
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbGliL2RpYWxvZy9kaWFsb2cuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFlLE1BQU0sZUFBZSxDQUFDO0FBQ3hELE9BQU8sRUFFSCxlQUFlLEdBRWxCLE1BQU0sMEJBQTBCLENBQUM7QUFJbEMsT0FBTyxFQUFxQixhQUFhLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxRixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7Ozs7QUFLdkUsTUFBTSxPQUFPLGdCQUFnQjtJQUN6QixZQUNZLE1BQWlCLEVBQ2pCLGFBQStCLEVBQy9CLE9BQWdCO1FBRmhCLFdBQU0sR0FBTixNQUFNLENBQVc7UUFDakIsa0JBQWEsR0FBYixhQUFhLENBQWtCO1FBQy9CLFlBQU8sR0FBUCxPQUFPLENBQVM7SUFDeEIsQ0FBQztJQUVHLGlCQUFpQixDQUFDLElBQW1CLEVBQUUsTUFBdUI7UUFDbEUsSUFBSSxNQUFNLENBQUMsWUFBWSxFQUFFO1lBQ3JCLHdEQUF3RDtZQUN4RCxNQUFNLEdBQUcsR0FBRyxJQUFJLGFBQWEsQ0FBQztnQkFDMUIsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO2dCQUN6QixVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7Z0JBQzNCLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVTtnQkFDM0IsYUFBYSxFQUFFLElBQUksQ0FBQyxhQUFhO2FBQ3BDLENBQUMsQ0FBQztZQUVILE1BQU0sZ0JBQWdCLEdBQUcsR0FBRyxDQUFDLFNBQVMsS0FBSyxLQUFLLENBQUM7WUFDakQsTUFBTSxpQkFBaUIsR0FBRyxHQUFHLENBQUMsVUFBVSxLQUFLLEtBQUssQ0FBQztZQUNuRCxNQUFNLGlCQUFpQixHQUFHLEdBQUcsQ0FBQyxVQUFVLEtBQUssS0FB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QGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICAgIE1hdERpYWxvZyxcbiAgICBNYXREaWFsb2dDb25maWcsXG4gICAgTWF0RGlhbG9nUmVmLFxufSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgUGVwTGF5b3V0U2VydmljZSB9IGZyb20gJ0BwZXBwZXJpLWFkZG9ucy9uZ3gtbGliJztcbmltcG9ydCB7IE92ZXJsYXkgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQgeyBDb21wb25lbnRUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XG5pbXBvcnQgeyBQZXBEaWFsb2dTaXplVHlwZSwgUGVwRGlhbG9nRGF0YSwgUGVwRGlhbG9nQ3VzdG9taXplRGF0YSB9IGZyb20gJy4vZGlhbG9nLm1vZGVsJztcbmltcG9ydCB7IFBlcERlZmF1bHREaWFsb2dDb21wb25lbnQgfSBmcm9tICcuL2RlZmF1bHQtZGlhbG9nLmNvbXBvbmVudCc7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFBlcERpYWxvZ1NlcnZpY2Uge1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGRpYWxvZzogTWF0RGlhbG9nLFxuICAgICAgICBwcml2YXRlIGxheW91dFNlcnZpY2U6IFBlcExheW91dFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgb3ZlcmxheTogT3ZlcmxheVxuICAgICkgeyB9XG5cbiAgICBwcml2YXRlIGZpeENvbmZpZ0lmTmVlZGVkKGRhdGE6IFBlcERpYWxvZ0RhdGEsIGNvbmZpZzogTWF0RGlhbG9nQ29uZmlnKSB7XG4gICAgICAgIGlmIChjb25maWcuZGlzYWJsZUNsb3NlKSB7XG4gICAgICAgICAgICAvLyBDcmVhdGUgdG1wIG9iamVjdCBmb3IgY29tcGFyaW5nIGFnYWluc3QgdGhlIGRlZmF1bHRzLlxuICAgICAgICAgICAgY29uc3QgdG1wID0gbmV3IFBlcERpYWxvZ0RhdGEoe1xuICAgICAgICAgICAgICAgIHNob3dDbG9zZTogZGF0YS5zaG93Q2xvc2UsXG4gICAgICAgICAgICAgICAgc2hvd0hlYWRlcjogZGF0YS5zaG93SGVhZGVyLFxuICAgICAgICAgICAgICAgIHNob3dGb290ZXI6IGRhdGEuc2hvd0Zvb3RlcixcbiAgICAgICAgICAgICAgICBhY3Rpb25CdXR0b25zOiBkYXRhLmFjdGlvbkJ1dHRvbnMsXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgY29uc3Qgc2hvd0Nsb3NlSXNGYWxzZSA9IHRtcC5zaG93Q2xvc2UgPT09IGZhbHNlO1xuICAgICAgICAgICAgY29uc3Qgc2hvd0hlYWRlcklzRmFsc2UgPSB0bXAuc2hvd0hlYWRlciA9PT0gZmFsc2U7XG4gICAgICAgICAgICBjb25zdCBzaG93Rm9vdGVySXNGYWxzZSA9IHRtcC5zaG93Rm9vdGVyID09PSBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IG5vQWN0aW9ucyA9IHRtcC5hY3Rpb25CdXR0b25zID09PSBudWxsIHx8IHRtcC5hY3Rpb25CdXR0b25zLmxlbmd0aCA9PT0gMDtcblxuICAgICAgICAgICAgaWYgKChzaG93Rm9vdGVySXNGYWxzZSAmJiAoc2hvd0Nsb3NlSXNGYWxzZSB8fCBzaG93SGVhZGVySXNGYWxzZSkpIHx8IFxuICAgICAgICAgICAgICAgIChkYXRhLmFjdGlvbnNUeXBlID09PSAnY3VzdG9tJyAmJiBub0FjdGlvbnMpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBjb25maWcuZGlzYWJsZUNsb3NlID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXREaWFsb2dDb25maWcoXG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICAgIGRpc2FibGVDbG9zZT86IGJvb2xlYW47XG4gICAgICAgICAgICBoZWlnaHQ/OiBzdHJpbmc7XG4gICAgICAgICAgICBtaW5XaWR0aD86IHN0cmluZztcbiAgICAgICAgICAgIG1heFdpZHRoPzogc3RyaW5nO1xuICAgICAgICAgICAgbWF4SGVpZ2h0Pzogc3RyaW5nO1xuICAgICAgICAgICAgcGFuZWxDbGFzcz86IHN0cmluZztcbiAgICAgICAgfSA9IHt9LFxuICAgICAgICBzaXplOiBQZXBEaWFsb2dTaXplVHlwZSA9ICdyZWd1bGFyJ1xuICAgICk6IE1hdERpYWxvZ0NvbmZpZyB7XG4gICAgICAgIGNvbnN0IGRpYWxvZ0NvbmZpZyA9IG5ldyBNYXREaWFsb2dDb25maWcoKTtcblxuICAgICAgICBkaWFsb2dDb25maWcuYXV0b0ZvY3VzID0gZmFsc2U7XG4gICAgICAgIGRpYWxvZ0NvbmZpZy5kaXJlY3Rpb24gPSB0aGlzLmxheW91dFNlcnZpY2UuaXNSdGwoKSA/ICdydGwnIDogJ2x0cic7XG4gICAgICAgIGRpYWxvZ0NvbmZpZy5kaXNhYmxlQ2xvc2UgPSBvcHRpb25zLmRpc2FibGVDbG9zZSA/PyB0cnVlO1xuICAgICAgICBcbiAgICAgICAgZGlhbG9nQ29uZmlnLnBhbmVsQ2xhc3MgPSBbJ3BlcC1kaWFsb2cnXTtcbiAgICAgICAgaWYgKG9wdGlvbnMucGFuZWxDbGFzcykge1xuICAgICAgICAgICAgZGlhbG9nQ29uZmlnLnBhbmVsQ2xhc3MucHVzaChvcHRpb25zLnBhbmVsQ2xhc3MpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNpemUgPT09ICdpbmxpbmUnKSB7XG4gICAgICAgICAgICBkaWFsb2dDb25maWcuaGVpZ2h0ID0gb3B0aW9ucy5oZWlnaHQgfHwgJ2F1dG8nO1xuICAgICAgICAgICAgZGlhbG9nQ29uZmlnLm1heFdpZHRoID0gb3B0aW9ucy5tYXhXaWR0aCB8fCAnMTAwdncnO1xuICAgICAgICAgICAgZGlhbG9nQ29uZmlnLm1heEhlaWdodCA9IG9wdGlvbnMubWF4SGVpZ2h0IHx8ICcxMDB2aCc7XG4gICAgICAgICAgICBkaWFsb2dDb25maWcubWluV2lkdGggPSBvcHRpb25zLm1pbldpZHRoIHx8ICczMDBweCc7XG4gICAgICAgIH1cblxuICAgICAgICBkaWFsb2dDb25maWcucGFuZWxDbGFzcy5wdXNoKHNpemUpO1xuXG4gICAgICAgIGRpYWxvZ0NvbmZpZy5zY3JvbGxTdHJhdGVneSA9IHRoaXMub3ZlcmxheS5zY3JvbGxTdHJhdGVnaWVzLm5vb3AoKTtcbiAgICAgICAgLy8gZGlhbG9nQ29uZmlnLnNjcm9sbFN0cmF0ZWd5ID0gdGhpcy5vdmVybGF5LnNjcm9sbFN0cmF0ZWdpZXMuYmxvY2soKTtcblxuICAgICAgICByZXR1cm4gZGlhbG9nQ29uZmlnO1xuICAgIH1cblxuICAgIG9wZW5EZWZhdWx0RGlhbG9nKFxuICAgICAgICBkYXRhOiBQZXBEaWFsb2dEYXRhLFxuICAgICAgICBjb25maWc6IE1hdERpYWxvZ0NvbmZpZyA9IG51bGxcbiAgICApOiBNYXREaWFsb2dSZWY8UGVwRGVmYXVsdERpYWxvZ0NvbXBvbmVudD4ge1xuICAgICAgICBpZiAoIWNvbmZpZykge1xuICAgICAgICAgICAgY29uZmlnID0gdGhpcy5nZXREaWFsb2dDb25maWcoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZpeENvbmZpZ0lmTmVlZGVkKGRhdGEsIGNvbmZpZyk7XG5cbiAgICAgICAgY29uZmlnLmRhdGEgPSBkYXRhO1xuICAgICAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKFBlcERlZmF1bHREaWFsb2dDb21wb25lbnQsIGNvbmZpZyk7XG5cbiAgICAgICAgdGhpcy5maXhNdWx0aURpYWxvZ3NQb3MoKTtcblxuICAgICAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcbiAgICAgICAgICAgIHRoaXMuZml4TXVsdGlEaWFsb2dzUG9zKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBcbiAgICAgICAgcmV0dXJuIGRpYWxvZ1JlZjtcbiAgICB9XG5cbiAgICBvcGVuRGlhbG9nPFQsIEQgPSBhbnksIFIgPSBhbnk+KFxuICAgICAgICBjb21wb25lbnRPclRlbXBsYXRlUmVmOiBDb21wb25lbnRUeXBlPFQ+IHwgVGVtcGxhdGVSZWY8VD4sXG4gICAgICAgIGRhdGE6IGFueSA9IHt9LFxuICAgICAgICBjb25maWc6IE1hdERpYWxvZ0NvbmZpZzxEPiA9IG51bGxcbiAgICApOiBNYXREaWFsb2dSZWY8VCwgUj4ge1xuICAgICAgICBpZiAoIWNvbmZpZykge1xuICAgICAgICAgICAgY29uZmlnID0gdGhpcy5nZXREaWFsb2dDb25maWcoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRtcENvbmZpZyA9IG5ldyBQZXBEaWFsb2dDdXN0b21pemVEYXRhKGRhdGEpO1xuICAgICAgICB0aGlzLmZpeENvbmZpZ0lmTmVlZGVkKHRtcENvbmZpZywgY29uZmlnKTtcblxuICAgICAgICBjb25maWcuZGF0YSA9IGRhdGE7XG4gICAgICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oY29tcG9uZW50T3JUZW1wbGF0ZVJlZiwgY29uZmlnKTtcblxuICAgICAgICB0aGlzLmZpeE11bHRpRGlhbG9nc1BvcygpO1xuXG4gICAgICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgICAgICAgdGhpcy5maXhNdWx0aURpYWxvZ3NQb3MoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGRpYWxvZ1JlZjtcbiAgICB9XG5cbiAgICBmaXhNdWx0aURpYWxvZ3NQb3MoKXtcbiAgICAgICAgLy8gY2hlY2tpbmcgaWYgaGF2ZSBtb3JlIHRoYW4gb25lIG9wZW4gZGlhbG9nIG9uIHBhZ2VcbiAgICAgICAgLy8gaWYgdHJ1ZSBzZXQgdGhlIHBvc2l0aW9uIG9mIGVhY2ggZGlhbG9nLiBcbiAgICAgICAgdmFyIGVsZW1lbnRzOmFueSA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3BlcC1kaWFsb2cnKTtcbiAgICAgICAgaWYoZWxlbWVudHM/Lmxlbmd0aCl7XG4gICAgICAgICAgICB2YXIgaW5kZXggPSAwO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IGVsZW1lbnRzLmxlbmd0aC0xOyBpID49IDAgOyBpLS0pIHtcbiAgICAgICAgICAgICAgICBsZXQgZWxlbWVudCA9IGVsZW1lbnRzW2ldO1xuICAgICAgICAgICAgICAgIGVsZW1lbnQuc3R5bGUudHJhbnNmb3JtID0gXCJ0cmFuc2xhdGUoLVwiICsgKGluZGV4KSArIFwicmVtLC1cIiArIChpbmRleCkgKyBcInJlbSlcIjtcbiAgICAgICAgICAgICAgICBpbmRleCArPSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuIl19
@@ -265,14 +265,17 @@ export class PepQuantitySelectorComponent {
265
265
  this.updateFormFieldValue(true);
266
266
  }
267
267
  ngAfterViewInit() {
268
- if (this.QSCont &&
269
- this.QSCont.nativeElement &&
270
- this.QSCont.nativeElement.clientWidth > 0) {
271
- this.showQsBtn = this.QSCont.nativeElement.clientWidth > 120;
272
- }
273
- if (!this.cd['destroyed']) {
274
- this.cd.detectChanges();
275
- }
268
+ setTimeout(() => {
269
+ debugger;
270
+ if (this.QSCont &&
271
+ this.QSCont.nativeElement &&
272
+ this.QSCont.nativeElement.clientWidth > 0) {
273
+ this.showQsBtn = this.QSCont.nativeElement.clientWidth > 120;
274
+ }
275
+ if (!this.cd['destroyed']) {
276
+ this.cd.detectChanges();
277
+ }
278
+ }, 0);
276
279
  }
277
280
  ngAfterViewChecked() {
278
281
  // this.setQsView();
@@ -564,4 +567,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImpor
564
567
  }], isInFocus: [{
565
568
  type: Input
566
569
  }] } });
567
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVhbnRpdHktc2VsZWN0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWxpYi9xdWFudGl0eS1zZWxlY3Rvci9xdWFudGl0eS1zZWxlY3Rvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbGliL3F1YW50aXR5LXNlbGVjdG9yL3F1YW50aXR5LXNlbGVjdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxTQUFTLEVBSVQsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBQ1osU0FBUyxFQUdULHVCQUF1QixHQUcxQixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQ0gsT0FBTyxFQUNQLEtBQUssRUFDTCxLQUFLLEVBQ0wsT0FBTyxFQUNQLFVBQVUsR0FDYixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFHSCx1QkFBdUIsRUFFdkIsNEJBQTRCLEVBRzVCLHdCQUF3QixHQUUzQixNQUFNLHlCQUF5QixDQUFDO0FBQ2pDLE9BQU8sRUFBRSxlQUFlLEVBQXlCLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2RSxPQUFPLEVBQWdCLG9CQUFvQixFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7Ozs7OztBQTZCL0UsTUFBTSxPQUFPLDRCQUE0QjtJQXFPckMsWUFDWSxFQUFxQixFQUNyQixvQkFBNkMsRUFDN0MsUUFBbUIsRUFDbkIsT0FBbUIsRUFDbkIsU0FBMkIsRUFDM0IsZ0JBQXFDO1FBTHJDLE9BQUUsR0FBRixFQUFFLENBQW1CO1FBQ3JCLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBeUI7UUFDN0MsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUNuQixZQUFPLEdBQVAsT0FBTyxDQUFZO1FBQ25CLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQzNCLHFCQUFnQixHQUFoQixnQkFB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LE9BQU8sRUFBRSxDQUFDO2dDQUNWLFNBQVMsRUFBRSxVQUFVOzZCQUN4QixDQUFDLENBQ0w7NEJBQ0QsVUFBVSxDQUFDLGNBQWMsRUFBRSxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQzs0QkFDckQsVUFBVSxDQUFDLGNBQWMsRUFBRSxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUM7eUJBQ3ZELENBQUM7cUJBQ0w7Z1FBU1EsR0FBRztzQkFBWCxLQUFLO2dCQUlGLEtBQUs7c0JBRFIsS0FBSztnQkFnREYsaUJBQWlCO3NCQURwQixLQUFLO2dCQVlGLGlCQUFpQjtzQkFEcEIsS0FBSztnQkFVRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUlGLFNBQVM7c0JBRFosS0FBSztnQkFTRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFJRixZQUFZO3NCQURmLEtBQUs7Z0JBYUcsZUFBZTtzQkFBdkIsS0FBSztnQkFJRixnQkFBZ0I7c0JBRG5CLEtBQUs7Z0JBd0NGLE9BQU87c0JBRFYsS0FBSztnQkFxQkcsSUFBSTtzQkFBWixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBSU4sU0FBUztzQkFEUixLQUFLO2dCQU1OLFdBQVc7c0JBRFYsTUFBTTtnQkFJUCxZQUFZO3NCQURYLE1BQU07Z0JBR2MsTUFBTTtzQkFBMUIsU0FBUzt1QkFBQyxRQUFRO2dCQUNHLE9BQU87c0JBQTVCLFNBQVM7dUJBQUMsU0FBUztnQkFlaEIsU0FBUztzQkFEWixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgT25Jbml0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkRlc3Ryb3ksXG4gICAgSW5wdXQsXG4gICAgT3V0cHV0LFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBWaWV3Q2hpbGQsXG4gICAgRWxlbWVudFJlZixcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBSZW5kZXJlcjIsXG4gICAgQWZ0ZXJWaWV3SW5pdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1xuICAgIHRyaWdnZXIsXG4gICAgc3RhdGUsXG4gICAgc3R5bGUsXG4gICAgYW5pbWF0ZSxcbiAgICB0cmFuc2l0aW9uLFxufSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcbmltcG9ydCB7XG4gICAgUGVwTGF5b3V0VHlwZSxcbiAgICBQZXBTdHlsZVR5cGUsXG4gICAgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UsXG4gICAgUGVwSG9yaXpvbnRhbEFsaWdubWVudCxcbiAgICBERUZBVUxUX0hPUklaT05UQUxfQUxJR05NRU5ULFxuICAgIElQZXBGaWVsZENsaWNrRXZlbnQsXG4gICAgUGVwUXVhbnRpdHlTZWxlY3RvckZpZWxkVHlwZSxcbiAgICBQZXBRdWFudGl0eVNlbGVjdG9yRmllbGQsXG4gICAgUGVwVXRpbGl0aWVzU2VydmljZSxcbn0gZnJvbSAnQHBlcHBlcmktYWRkb25zL25neC1saWInO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBmcm9tRXZlbnQsIE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdwZXAtcXVhbnRpdHktc2VsZWN0b3InLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9xdWFudGl0eS1zZWxlY3Rvci5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vcXVhbnRpdHktc2VsZWN0b3IuY29tcG9uZW50LnNjc3MnLCAnLi9xdWFudGl0eS1zZWxlY3Rvci5jb21wb25lbnQudGhlbWUuc2NzcyddLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGFuaW1hdGlvbnM6IFtcbiAgICAgICAgdHJpZ2dlcignc2hvd0hpZGUnLCBbXG4gICAgICAgICAgICBzdGF0ZShcbiAgICAgICAgICAgICAgICAnc2hvdycsXG4gICAgICAgICAgICAgICAgc3R5bGUoe1xuICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAxLFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm06ICdzY2FsZSgxKScsXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBzdGF0ZShcbiAgICAgICAgICAgICAgICAnaGlkZScsXG4gICAgICAgICAgICAgICAgc3R5bGUoe1xuICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAwLFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm06ICdzY2FsZSgwKScsXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICB0cmFuc2l0aW9uKCdzaG93ID0+IGhpZGUnLCBhbmltYXRlKCcyNTBtcyBlYXNlLW91dCcpKSxcbiAgICAgICAgICAgIHRyYW5zaXRpb24oJ2hpZGUgPT4gc2hvdycsIGFuaW1hdGUoJzI1MG1zIGVhc2UtaW4nKSksXG4gICAgICAgIF0pLFxuICAgIF0sXG59KVxuZXhwb3J0IGNsYXNzIFBlcFF1YW50aXR5U2VsZWN0b3JDb21wb25lbnRcbiAgICBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICAgIHB1YmxpYyBzdGF0aWMgRU5URVJfQ0hJTERSRU4gPSAnW0VudGVyQ2hpbGRyZW5dJztcbiAgICBwdWJsaWMgc3RhdGljIEVOVEVSX1BBQ0tBR0UgPSAnW0VudGVyUGFja2FnZV0nO1xuICAgIHB1YmxpYyBzdGF0aWMgUExVUyA9ICdbK10nO1xuICAgIHB1YmxpYyBzdGF0aWMgTUlOVVMgPSAnWy1dJztcblxuICAgIEBJbnB1dCgpIGtleSA9ICcnO1xuXG4gICAgcHJpdmF0ZSBfdmFsdWUgPSBudWxsO1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHZhbHVlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgdmFsdWUgPSAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmlzRGlmZmVyZW50VmFsdWUodmFsdWUpKSB7XG4gICAgICAgICAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZXRGb3JtYXR0ZWRWYWx1ZSh0aGlzLnZhbHVlKTtcbiAgICAgICAgdGhpcy5jaGFuZ2VEaXNwbGF5VmFsdWUoKTtcbiAgICB9XG4gICAgZ2V0IHZhbHVlKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgICB9XG4gICAgXG4gICAgZ2V0IHZhbHVlQXNDdXJyZW50Q3VsdHVyZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy51dGlsaXRpZXNTZXJ2aWNlLmNoYW5nZURlY2ltYWxTZXBhcmF0b3JXaGVuSXRzQ29tbWEodGhpcy52YWx1ZSwgdHJ1ZSk7XG4gICAgICAgIC8vIGxldCByZXMgPSB0aGlzLnZhbHVlO1xuXG4gICAgICAgIC8vIGlmICh0aGlzLmFsbG93RGVjaW1hbCkge1xuICAgICAgICAvLyAgICAgcmVzID0gdGhpcy51dGlsaXRpZXNTZXJ2aWNlLmZvcm1hdERlY2ltYWwodGhpcy52YWx1ZSwgdGhpcy5taW5GcmFjdGlvbkRpZ2l0cywgdGhpcy5tYXhGcmFjdGlvbkRpZ2l0cywgZmFsc2UpO1xuICAgICAgICAvLyB9XG4gICAgICAgIFxuICAgICAgICAvLyByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBmb3JtYXR0ZWRWYWx1ZSA9ICcnO1xuICAgIC8vIHByaXZhdGUgX2Zvcm1hdHRlZFZhbHVlID0gJyc7XG4gICAgLy8gQElucHV0KClcbiAgICAvLyBzZXQgZm9ybWF0dGVkVmFsdWUodmFsdWU6IHN0cmluZykge1xuICAgIC8vICAgICAvLyBpZiAoIXZhbHVlKSB7XG4gICAgLy8gICAgIC8vICAgICB2YWx1ZSA9ICcnO1xuICAgIC8vICAgICAvLyB9XG5cbiAgICAvLyAgICAgLy8gaWYgKHRoaXMuX2NhbGN1bGF0ZUZvcm1hdHRlZFZhbHVlKSB7XG4gICAgLy8gICAgIC8vICAgICB0aGlzLl9jYWxjdWxhdGVGb3JtYXR0ZWRWYWx1ZSA9IGZhbHNlO1xuICAgIC8vICAgICAvLyB9XG5cbiAgICAvLyAgICAgLy8gdGhpcy5zZXRGb3JtYXR0ZWRWYWx1ZSh2YWx1ZSk7XG4gICAgLy8gfVxuICAgIC8vIGdldCBmb3JtYXR0ZWRWYWx1ZSgpOiBzdHJpbmcge1xuICAgIC8vICAgICByZXR1cm4gdGhpcy5fZm9ybWF0dGVkVmFsdWU7XG4gICAgLy8gfVxuICAgIFxuICAgIHByaXZhdGUgX21pbkZyYWN0aW9uRGlnaXRzID0gTmFOO1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IG1pbkZyYWN0aW9uRGlnaXRzKHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5fbWluRnJhY3Rpb25EaWdpdHMgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5zZXRGb3JtYXR0ZWRWYWx1ZSh0aGlzLnZhbHVlKTtcbiAgICAgICAgdGhpcy5jaGFuZ2VEaXNwbGF5VmFsdWUoKTtcbiAgICB9XG4gICAgZ2V0IG1pbkZyYWN0aW9uRGlnaXRzKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9taW5GcmFjdGlvbkRpZ2l0cztcbiAgICB9XG5cbiAgICBwcml2YXRlIF9tYXhGcmFjdGlvbkRpZ2l0cyA9IE5hTjtcbiAgICBASW5wdXQoKVxuICAgIHNldCBtYXhGcmFjdGlvbkRpZ2l0cyh2YWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuX21heEZyYWN0aW9uRGlnaXRzID0gdmFsdWU7XG4gICAgICAgIHRoaXMuc2V0Rm9ybWF0dGVkVmFsdWUodGhpcy52YWx1ZSk7XG4gICAgICAgIHRoaXMuY2hhbmdlRGlzcGxheVZhbHVlKCk7XG4gICAgfVxuICAgIGdldCBtYXhGcmFjdGlvbkRpZ2l0cygpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWF4RnJhY3Rpb25EaWdpdHM7XG4gICAgfVxuXG4gICAgQElucHV0KCkgbGFiZWwgPSAnJztcbiAgICBASW5wdXQoKSB0eXBlOiBQZXBRdWFudGl0eVNlbGVjdG9yRmllbGRUeXBlID0gJ3FzJztcbiAgICBASW5wdXQoKSBtYW5kYXRvcnkgPSBmYWxzZTtcbiAgICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIHJlYWRvbmx5ID0gZmFsc2U7XG5cbiAgICBwcml2YXRlIF90ZXh0Q29sb3IgPSAnJztcbiAgICBASW5wdXQoKVxuICAgIHNldCB0ZXh0Q29sb3IodmFsdWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLl90ZXh0Q29sb3IgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5pc0NhdXRpb24gPSB2YWx1ZSA9PT0gJyNGRjAwMDAnO1xuICAgIH1cbiAgICBnZXQgdGV4dENvbG9yKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl90ZXh0Q29sb3I7XG4gICAgfVxuXG4gICAgQElucHV0KCkgeEFsaWdubWVudDogUGVwSG9yaXpvbnRhbEFsaWdubWVudCA9IERFRkFVTFRfSE9SSVpPTlRBTF9BTElHTk1FTlQ7XG4gICAgQElucHV0KCkgcm93U3BhbiA9IDE7XG4gICAgXG4gICAgcHJpdmF0ZSBfYWxsb3dEZWNpbWFsID0gZmFsc2U7XG4gICAgQElucHV0KCkgXG4gICAgc2V0IGFsbG93RGVjaW1hbCh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9hbGxvd0RlY2ltYWwgPSB2YWx1ZTtcblxuICAgICAgICBpZiAodGhpcy52YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5zZXRGb3JtYXR0ZWRWYWx1ZSh0aGlzLnZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlRGlzcGxheVZhbHVlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IGFsbG93RGVjaW1hbCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FsbG93RGVjaW1hbDtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBhZGRpdGlvbmFsVmFsdWUgPSAnJztcblxuICAgIHByaXZhdGUgX25vdGlmaWNhdGlvbkluZm86IGFueTtcbiAgICBASW5wdXQoKVxuICAgIHNldCBub3RpZmljYXRpb25JbmZvKHZhbHVlOiBhbnkpIHtcbiAgICAgICAgdGhpcy5fbm90aWZpY2F0aW9uSW5mbyA9IHZhbHVlO1xuXG4gICAgICAgIGNvbnN0IG1lc3NhZ2VzID0gdmFsdWUgJiYgdmFsdWUgPiAwID8gSlNPTi5wYXJzZSh2YWx1ZSkuTWVzc2FnZXMgOiAnJztcbiAgICAgICAgaWYgKG1lc3NhZ2VzICYmIG1lc3NhZ2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIC8vIFJlcGxhY2UgdGhlIG1zZyBrZXlzLlxuICAgICAgICAgICAgZm9yIChjb25zdCBtc2cgb2YgbWVzc2FnZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAobXNnLktleSA9PT0gJ0ludmVudG9yeV9MaW1pdF9Nc2cnKSB7XG4gICAgICAgICAgICAgICAgICAgIG1zZy5LZXkgPSAnTUVTU0FHRVMuRVJST1JfSU5WRU5UT1JZX0xJTUlUJztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1zZy5LZXkgPT09ICdDYXNlX1F1YW50aXR5X0xpbWl0X01zZycpIHtcbiAgICAgICAgICAgICAgICAgICAgbXNnLktleSA9ICdNRVNTQUdFUy5FUlJPUl9DQVNFX1FVQU5USVRZX0xJTUlUJztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1zZy5LZXkgPT09ICdNaW5fUXVhbnRpdHlfTGltaXRfTXNnJykge1xuICAgICAgICAgICAgICAgICAgICBtc2cuS2V5ID0gJ01FU1NBR0VTLkVSUk9SX01JTl9RVUFOVElUWV9MSU1JVCc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtc2cuS2V5ID09PSAnTWF4X1F1YW50aXR5X0xpbWl0X01zZycpIHtcbiAgICAgICAgICAgICAgICAgICAgbXNnLktleSA9ICdNRVNTQUdFUy5FUlJPUl9NQVhfUVVBTlRJVFlfTElNSVQnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5tZXNzYWdlcyA9IG1lc3NhZ2VzO1xuXG4gICAgICAgICAgICBjb25zdCBmaWVsZENvbnRyb2wgPSB0aGlzLmZvcm0uY29udHJvbHNbdGhpcy5rZXldO1xuICAgICAgICAgICAgZmllbGRDb250cm9sLnNldEVycm9ycyh7XG4gICAgICAgICAgICAgICAgc2VydmVyRXJyb3I6ICdFcnJvcicsXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy5zYW1lRWxlbWVudEluVGhlV2FudGVkUm93ID0gbnVsbDtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLlFTSW5wdXQgJiYgdGhpcy5RU0lucHV0Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5RU0lucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCAxNTApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBub3RpZmljYXRpb25JbmZvKCk6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ub3RpZmljYXRpb25JbmZvO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3Zpc2libGUgPSB0cnVlO1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHZpc2libGUodmlzaWJsZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl92aXNpYmxlID0gdmlzaWJsZTtcbiAgICAgICAgaWYgKHZpc2libGUpIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3MoXG4gICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgJ2hpZGRlbi1lbGVtZW50J1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoXG4gICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgJ2hpZGRlbi1lbGVtZW50J1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXQgdmlzaWJsZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Zpc2libGU7XG4gICAgfVxuXG4gICAgY29udHJvbFR5cGUgPSAncXMnO1xuXG4gICAgQElucHV0KCkgZm9ybTogRm9ybUdyb3VwID0gbnVsbDtcbiAgICBASW5wdXQoKSBzaG93VGl0bGUgPSB0cnVlO1xuICAgIEBJbnB1dCgpIHJlbmRlclRpdGxlID0gdHJ1ZTtcbiAgICBASW5wdXQoKSBsYXlvdXRUeXBlOiBQZXBMYXlvdXRUeXBlID0gJ2Zvcm0nO1xuICAgIEBJbnB1dCgpIGlzQWN0aXZlID0gZmFsc2U7XG5cbiAgICAvLyBHZXQgZGVmYXVsdCBzdHlsZSBmcm9tIHRoZW1lLlxuICAgIEBJbnB1dCgpXG4gICAgc3R5bGVUeXBlOiBQZXBTdHlsZVR5cGUgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShcbiAgICAgICAgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuU1RZTEVfUVNfS0VZXG4gICAgKSBhcyBQZXBTdHlsZVR5cGU7IC8vJ3N0cm9uZyc7XG5cbiAgICBAT3V0cHV0KClcbiAgICB2YWx1ZUNoYW5nZTogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICAgIEBPdXRwdXQoKVxuICAgIGVsZW1lbnRDbGljazogRXZlbnRFbWl0dGVyPElQZXBGaWVsZENsaWNrRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxJUGVwRmllbGRDbGlja0V2ZW50PigpO1xuXG4gICAgQFZpZXdDaGlsZCgnUVNDb250JykgUVNDb250OiBFbGVtZW50UmVmO1xuICAgIEBWaWV3Q2hpbGQoJ1FTSW5wdXQnKSBRU0lucHV0OiBFbGVtZW50UmVmO1xuXG4gICAgcHJpdmF0ZSBfY2FsY3VsYXRlRm9ybWF0dGVkVmFsdWUgPSB0cnVlO1xuICAgIGdldCBjYWxjdWxhdGVGb3JtYXR0ZWRWYWx1ZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NhbGN1bGF0ZUZvcm1hdHRlZFZhbHVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2Rlc3Ryb3llZDogU3ViamVjdDx2b2lkPjtcbiAgICBwcml2YXRlIHFzV2lkdGhTdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPjtcbiAgICBsYXN0UXNDb250Q2xpZW50V2lkdGggPSAwO1xuICAgIHNob3dRc0J0biA9IHRydWU7XG5cbiAgICBzdGFuZEFsb25lID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfaXNJbkZvY3VzID0gZmFsc2U7XG4gICAgQElucHV0KClcbiAgICBzZXQgaXNJbkZvY3VzKGlzSW5Gb2N1czogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9pc0luRm9jdXMgPSBpc0luRm9jdXM7XG4gICAgICAgIHRoaXMuY2hhbmdlRGlzcGxheVZhbHVlKCk7XG4gICAgfVxuICAgIGdldCBpc0luRm9jdXMoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc0luRm9jdXM7XG4gICAgfVxuICAgIGlzTWF0cml4Rm9jdXMgPSBmYWxzZTtcblxuICAgIGlzQ2F1dGlvbiA9IGZhbHNlO1xuICAgIG1lc3NhZ2VzOiBBcnJheTxhbnk+ID0gbnVsbDtcblxuICAgIHNhbWVFbGVtZW50SW5UaGVXYW50ZWRSb3cgPSBudWxsO1xuXG4gICAgaXNFbXB0eUtleSA9IGZhbHNlO1xuXG4gICAgcHJpdmF0ZSBfZGlzcGxheVZhbHVlU3ViamVjdDogQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xuICAgIGdldCBkaXNwbGF5VmFsdWUkKCk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kaXNwbGF5VmFsdWVTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSk7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBwcml2YXRlIGN1c3RvbWl6YXRpb25TZXJ2aWNlOiBQZXBDdXN0b21pemF0aW9uU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgICAgICBwcml2YXRlIGVsZW1lbnQ6IEVsZW1lbnRSZWYsXG4gICAgICAgIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHV0aWxpdGllc1NlcnZpY2U6IFBlcFV0aWxpdGllc1NlcnZpY2VcbiAgICApIHtcbiAgICAgICAgdGhpcy5fZGVzdHJveWVkID0gbmV3IFN1YmplY3QoKTtcbiAgICAgICAgLy8gdGhpcy5xc1dpZHRoU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3QoMCk7XG4gICAgfVxuXG4gICAgc2V0Rm9ybSgpIHtcbiAgICAgICAgY29uc3QgcGVwRmllbGQgPSBuZXcgUGVwUXVhbnRpdHlTZWxlY3RvckZpZWxkKHtcbiAgICAgICAgICAgIGtleTogdGhpcy5rZXksXG4gICAgICAgICAgICB2YWx1ZTogdGhpcy52YWx1ZUFzQ3VycmVudEN1bHR1cmUsXG4gICAgICAgICAgICBtYW5kYXRvcnk6IHRoaXMubWFuZGF0b3J5LFxuICAgICAgICAgICAgcmVhZG9ubHk6IHRoaXMucmVhZG9ubHksXG4gICAgICAgICAgICBkaXNhYmxlZDogdGhpcy5kaXNhYmxlZCxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZm9ybSA9IHRoaXMuY3VzdG9taXphdGlvblNlcnZpY2UuZ2V0RGVmYXVsdEZyb21Hcm91cChwZXBGaWVsZCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRGb3JtYXR0ZWRWYWx1ZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIGlmICh0aGlzLl9jYWxjdWxhdGVGb3JtYXR0ZWRWYWx1ZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuYWxsb3dEZWNpbWFsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtYXR0ZWRWYWx1ZSA9IHRoaXMudXRpbGl0aWVzU2VydmljZS5mb3JtYXREZWNpbWFsKHZhbHVlLCB0aGlzLm1pbkZyYWN0aW9uRGlnaXRzLCB0aGlzLm1heEZyYWN0aW9uRGlnaXRzKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtYXR0ZWRWYWx1ZSA9IHRoaXMudXRpbGl0aWVzU2VydmljZS5mb3JtYXROdW1iZXIodmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5mb3JtYXR0ZWRWYWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICB0aGlzLnVwZGF0ZUZvcm1GaWVsZFZhbHVlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBub3RpZnlEaXNwbGF5VmFsdWVDaGFuZ2UodmFsdWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLl9kaXNwbGF5VmFsdWVTdWJqZWN0Lm5leHQodmFsdWUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2hhbmdlRGlzcGxheVZhbHVlKCk6IHZvaWQge1xuICAgICAgICBsZXQgcmVzID0gJyc7XG5cbiAgICAgICAgaWYgKHRoaXMuYWxsb3dEZWNpbWFsKSB7XG4gICAgICAgICAgICByZXMgPSB0aGlzLmlzSW5Gb2N1cyA/IHRoaXMudmFsdWVBc0N1cnJlbnRDdWx0dXJlIDogdGhpcy5mb3JtYXR0ZWRWYWx1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlcyA9IHRoaXMuaXNJbkZvY3VzID8gdGhpcy52YWx1ZSA6IHRoaXMuZm9ybWF0dGVkVmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm5vdGlmeURpc3BsYXlWYWx1ZUNoYW5nZShyZXMpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZygnY2hhbmdlRGlzcGxheVZhbHVlJyArIHJlcyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVGb3JtRmllbGRWYWx1ZShmaXJzdExvYWQgPSBmYWxzZSkge1xuICAgICAgICAvLyBTZXQgdGhlIGZvcm1hdHRlZCB2YWx1ZSBvbmx5IGZvciB0aGUgZmlyc3QgbG9hZCBjYXVzZSBpdCdzIG5vdCBmb3JtYXR0ZWQgaWYgd2Ugc2V0IHRoZSB2YWx1ZSAoSSBkb24ndCBrbm93IHdoeSlcbiAgICAgICAgLy8gRWxzZSB3ZSBzZXQgdGhlIHZhbHVlIC0gdGhpcyBpcyBpbXBvcnRhbnQgdG8gc2V0IHRoZSB2YWx1ZSBvbmx5IGNhdXNlIHNldHRpbmcgdGhlIGZvcm1hdHRlZCB2YWx1ZSB3aWxsIGNhdXNlIGJ1ZyB3aGVuIHRoZSBudW1iZXIgaXMgd2l0aCB0aG91c2FuZCBzZXBhcmF0b3JcbiAgICAgICAgdGhpcy5jdXN0b21pemF0aW9uU2VydmljZS51cGRhdGVGb3JtRmllbGRWYWx1ZShcbiAgICAgICAgICAgIHRoaXMuZm9ybSxcbiAgICAgICAgICAgIHRoaXMua2V5LFxuICAgICAgICAgICAgZmlyc3RMb2FkID8gdGhpcy5mb3JtYXR0ZWRWYWx1ZSA6IHRoaXMudmFsdWUsXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gZ2V0IGRpc3BsYXlWYWx1ZSgpOiBzdHJpbmcge1xuICAgIC8vICAgICBjb25zdCByZXMgPSB0aGlzLmlzSW5Gb2N1c1xuICAgIC8vICAgICAgICAgPyB0aGlzLnV0aWxpdGllc1NlcnZpY2UuZm9ybWF0RGVjaW1hbCh0aGlzLnZhbHVlLCB0aGlzLm1pbkZyYWN0aW9uRGlnaXRzLCB0aGlzLm1heEZyYWN0aW9uRGlnaXRzKVxuICAgIC8vICAgICAgICAgOiB0aGlzLmZvcm1hdHRlZFZhbHVlO1xuICAgIC8vICAgICByZXR1cm4gcmVzO1xuICAgIC8vIH1cblxuICAgIHByb3RlY3RlZCBnZXREZXN0cm95ZXIoKSB7XG4gICAgICAgIHJldHVybiB0YWtlVW50aWwodGhpcy5fZGVzdHJveWVkKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZm9ybSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHRoaXMua2V5ID09PSAnJykge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNFbXB0eUtleSA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuc3RhbmRBbG9uZSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnNldEZvcm0oKTtcblxuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhcbiAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICAgICAgICBQZXBDdXN0b21pemF0aW9uU2VydmljZS5TVEFORF9BTE9ORV9GSUVMRF9DTEFTU19OQU1FXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBpZiAoIXRoaXMucmVuZGVyVGl0bGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuU1RBTkRfQUxPTkVfRklFTERfTk9fU1BBQ0lOR19DTEFTU19OQU1FXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHRoaXMucXNXaWR0aFN1YmplY3RcbiAgICAgICAgLy8gICAgIC5hc09ic2VydmFibGUoKVxuICAgICAgICAvLyAgICAgLnBpcGUodGhpcy5nZXREZXN0cm95ZXIoKSwgZGlzdGluY3RVbnRpbENoYW5nZWQoKSlcbiAgICAgICAgLy8gICAgIC5zdWJzY3JpYmUoKHFzV2lkdGg6IG51bWJlcikgPT4ge1xuICAgICAgICAvLyAgICAgICAgIHRoaXMuc2V0dXBRc0J1dHRvbnMocXNXaWR0aCk7XG4gICAgICAgIC8vICAgICB9KTtcblxuICAgICAgICB0aGlzLnVwZGF0ZUZvcm1GaWVsZFZhbHVlKHRydWUpO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgaWYgKHRoaXMuUVNDb250ICYmXG4gICAgICAgICAgICB0aGlzLlFTQ29udC5uYXRpdmVFbGVtZW50ICYmXG4gICAgICAgICAgICB0aGlzLlFTQ29udC5uYXRpdmVFbGVtZW50LmNsaWVudFdpZHRoID4gMFxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd1FzQnRuID0gdGhpcy5RU0NvbnQubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aCA+IDEyMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5jZFsnZGVzdHJveWVkJ10pIHtcbiAgICAgICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdDaGVja2VkKCk6IHZvaWQge1xuICAgICAgICAvLyB0aGlzLnNldFFzVmlldygpO1xuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IGFueSk6IHZvaWQge1xuICAgICAgICAvLyBCdWcgZml4IGZvciBhZGRvbnMgd2hlbiB0aGUga2V5IGlzICcnIGluIHRoZSBuZ09uSW5pdCBmb3Igc29tZSByZXNvblxuICAgICAgICBpZiAodGhpcy5pc0VtcHR5S2V5ICYmIHRoaXMua2V5ICE9PSAnJykge1xuICAgICAgICAgICAgdGhpcy5zZXRGb3JtKCk7XG4gICAgICAgIH1cblxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNUb1RoZVNhbWVFbGVtZW50SW5UaGVXYW50ZWRSb3coKTtcbiAgICAgICAgfSwgMTUwKTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZGVzdHJveWVkLm5leHQoKTtcbiAgICAgICAgdGhpcy5fZGVzdHJveWVkLmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgZ2V0IGdldEFkZGl0aW9uYWxWYWx1ZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5hZGRpdGlvbmFsVmFsdWUubGVuZ3RoID4gMCA/ICdzaG93JyA6ICdoaWRlJztcbiAgICB9XG5cbiAgICBnZXRQYXJlbnRCeUNsYXNzKGVsLCBwYXJlbnRTZWxlY3RvciAvKiBvcHRpb25hbCAqLyk6IGFueSB7XG4gICAgICAgIC8vIElmIG5vIHBhcmVudFNlbGVjdG9yIGRlZmluZWQgd2lsbCBidWJibGUgdXAgYWxsIHRoZSB3YXkgdG8gKmRvY3VtZW50KlxuICAgICAgICBpZiAocGFyZW50U2VsZWN0b3IgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcGFyZW50U2VsZWN0b3IgPSBkb2N1bWVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBwID0gZWwucGFyZW50Tm9kZTtcblxuICAgICAgICB3aGlsZSAoXG4gICAgICAgICAgICBwICYmXG4gICAgICAgICAgICAhcD8uY2xhc3NMaXN0Py5jb250YWlucyhwYXJlbnRTZWxlY3RvcikgJiZcbiAgICAgICAgICAgIHBhcmVudFNlbGVjdG9yICE9PSBkb2N1bWVudFxuICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnN0IG8gPSBwO1xuICAgICAgICAgICAgcCA9IG8/LnBhcmVudE5vZGUgfHwgbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwPy5jbGFzc05hbWUuaW5kZXhPZihwYXJlbnRTZWxlY3RvcikgPiAtMSA/IHAgOiBudWxsO1xuICAgIH1cblxuICAgIGdldFNhbWVFbGVtZW50SW5UaGVXYW50ZWRSb3dCeUNsYXNzTmFtZShldmVudDogYW55LCBpc05leHQgPSB0cnVlKTogYW55IHtcbiAgICAgICAgY29uc3QgZXZlbnRUYXJnZXQgPSBldmVudC50YXJnZXQgfHwgZXZlbnQuc3JjRWxlbWVudDtcbiAgICAgICAgbGV0IHNhbWVFbGVtZW50SW5UaGVXYW50ZWRSb3dCeUNsYXNzTmFtZTtcblxuICAgICAgICBsZXQgcGFyZW50U2VsZWN0b3I7XG4gICAgICAgIGlmICh0aGlzLmxheW91dFR5cGUgPT09ICd0YWJsZScpIHtcbiAgICAgICAgICAgIHBhcmVudFNlbGVjdG9yID0gdGhpcy5nZXRQYXJlbnRCeUNsYXNzKGV2ZW50VGFyZ2V0LCAndGFibGUtcm93Jyk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5sYXlvdXRUeXBlID09PSAnY2FyZCcpIHtcbiAgICAgICAgICAgIHBhcmVudFNlbGVjdG9yID0gdGhpcy5nZXRQYXJlbnRCeUNsYXNzKGV2ZW50VGFyZ2V0LCAnY2FyZC12aWV3Jyk7XG4gICAgICAgICAgICBpZiAoIXBhcmVudFNlbGVjdG9yKSB7XG4gICAgICAgICAgICAgICAgcGFyZW50U2VsZWN0b3IgPSB0aGlzLmdldFBhcmVudEJ5Q2xhc3MoXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50VGFyZ2V0LFxuICAgICAgICAgICAgICAgICAgICAnbGluZS12aWV3J1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICBwYXJlbnRTZWxlY3Rvci5uZXh0RWxlbWVudFNpYmxpbmcgPT09IG51bGwgJiZcbiAgICAgICAgICAgIHBhcmVudFNlbGVjdG9yLnByZXZpb3VzRWxlbWVudFNpYmxpbmcgPT09IG51bGxcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBzYW1lRWxlbWVudEluVGhlV2FudGVkUm93QnlDbGFzc05hbWUgPSBudWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGlzTmV4dCkge1xuICAgICAgICAgICAgICAgIGlmIChwYXJlbnRTZWxlY3Rvci5uZXh0RWxlbWVudFNpYmxpbmcgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgc2FtZUVsZW1lbnRJblRoZVdhbnRlZFJvd0J5Q2xhc3NOYW1lID0gcGFyZW50U2VsZWN0b3IucGFyZW50RWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgICAgICAgICAgICAgICAgICAgJ1tuYW1lPScgKyB0aGlzLmtleSArICddJ1xuICAgICAgICAgICAgICAgICAgICApWzBdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHNhbWVFbGVtZW50SW5UaGVXYW50ZWRSb3dCeUNsYXNzTmFtZSA9IHBhcmVudFNlbGVjdG9yLm5leHRFbGVtZW50U2libGluZy5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgICAgICAgICAgICAgICAgICAgJ1tuYW1lPScgKyB0aGlzLmtleSArICddJ1xuICAgICAgICAgICAgICAgICAgICApWzBdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHBhcmVudFNlbGVjdG9yLnByZXZpb3VzRWxlbWVudFNpYmxpbmcgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZWxlbWVudHNMaXN0ID0gcGFyZW50U2VsZWN0b3IucGFyZW50RWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgICAgICAgICAgICAgICAgICAgJ1tuYW1lPScgKyB0aGlzLmtleSArICddJ1xuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBzYW1lRWxlbWVudEluVGhlV2FudGVkUm93QnlDbGFzc05hbWUgPVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudHNMaXN0W2VsZW1lbnRzTGlzdC5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzYW1lRWxlbWVudEluVGhlV2FudGVkUm93QnlDbGFzc05hbWUgPSBwYXJlbnRTZWxlY3Rvci5wcmV2aW91c0VsZW1lbnRTaWJsaW5nLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICAgICAgICAgICAgICAgICAgICAnW25hbWU9JyArIHRoaXMua2V5ICsgJ10nXG4gICAgICAgICAgICAgICAgICAgIClbMF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHNhbWVFbGVtZW50SW5UaGVXYW50ZWRSb3dCeUNsYXNzTmFtZTtcbiAgICB9XG5cbiAgICBzZXRTYW1lRWxlbWVudEluVGhlV2FudGVkUm93KGV2ZW50OiBhbnksIGlzTmV4dCA9IHRydWUpOiB2b2lkIHtcbiAgICAgICAgLy8gTmF2aWdhdGUgdG8gdGhlIFFTIGluIHRoZSBuZXh0IHJvdy5cbiAgICAgICAgaWYgKHRoaXMubGF5b3V0VHlwZSA9PT0gJ2NhcmQnIHx8IHRoaXMubGF5b3V0VHlwZSA9PT0gJ3RhYmxlJykge1xuICAgICAgICAgICAgdGhpcy5zYW1lRWxlbWVudEluVGhlV2FudGVkUm93ID0gdGhpcy5nZXRTYW1lRWxlbWVudEluVGhlV2FudGVkUm93QnlDbGFzc05hbWUoXG4gICAgICAgICAgICAgICAgZXZlbnQsXG4gICAgICAgICAgICAgICAgaXNOZXh0XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5RU0lucHV0Lm5hdGl2ZUVsZW1lbnQuYmx1cigpO1xuICAgIH1cblxuICAgIGZvY3VzVG9UaGVTYW1lRWxlbWVudEluVGhlV2FudGVkUm93KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zYW1lRWxlbWVudEluVGhlV2FudGVkUm93KSB7XG4gICAgICAgICAgICBjb25zdCBlbGVtID0gdGhpcy5zYW1lRWxlbWVudEluVGhlV2FudGVkUm93O1xuICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyByZWd1bGFyIGl0ZW0gKHFzIGFuZCBub3QgYnV0dG9uKSAuXG4gICAgICAgICAgICBpZiAoZWxlbSBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQgJiYgZWxlbS50eXBlID09PSAndGV4dCcpIHtcbiAgICAgICAgICAgICAgICBlbGVtLmNsaWNrKCk7XG4gICAgICAgICAgICAgICAgZWxlbS5zZWxlY3QoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyZW50RWxlbSA9IGVsZW0ucGFyZW50Tm9kZTtcbiAgICAgICAgICAgICAgICBwYXJlbnRFbGVtLmNsaWNrKCk7XG4gICAgICAgICAgICAgICAgZWxlbS5mb2N1cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zYW1lRWxlbWVudEluVGhlV2FudGVkUm93ID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsZWFuRXJyb3IoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGZpZWxkQ29udHJvbCA9IHRoaXMuZm9ybS5jb250cm9sc1t0aGlzLmtleV07XG5cbiAgICAgICAgLy8gQ2xlYW4gdGhlIGVycm9yIG1lc3NhZ2VcbiAgICAgICAgaWYgKHRoaXMubWVzc2FnZXMgJiYgdGhpcy5tZXNzYWdlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLm1lc3NhZ2VzID0gdGhpcy5ub3RpZmljYXRpb25JbmZvID0gbnVsbDtcbiAgICAgICAgICAgIGZpZWxkQ29udHJvbC5zZXRFcnJvcnMobnVsbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbk1hdHJpeE1vdXNlRW50ZXIoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLmlzTWF0cml4Rm9jdXMgPSB0cnVlO1xuICAgIH1cblxuICAgIG9uTWF0cml4TW91c2VsZWF2ZShldmVudDogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNNYXRyaXhGb2N1cyA9IGZhbHNlO1xuICAgIH1cblxuICAgIG9uTWF0cml4Q2xpY2soZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLmlzSW5Gb2N1cyA9IHRydWU7XG5cbiAgICAgICAgaWYgKHRoaXMuUVNJbnB1dCAmJiB0aGlzLlFTSW5wdXQubmF0aXZlRWxlbWVudCkge1xuICAgICAgICAgICAgdGhpcy5RU0lucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uTWF0cml4Qmx1cihldmVudDogYW55KTogdm9pZCB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICFldmVudC5yZWxhdGVkVGFyZ2V0IHx8XG4gICAgICAgICAgICBldmVudC5yZWxhdGVkVGFyZ2V0LmNsYXNzTmFtZS5pbmRleE9mKCdxcycpIDwgMFxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuaXNNYXRyaXhGb2N1cyA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5vbkJsdXIoZXZlbnQpO1xuICAgIH1cblxuICAgIG9uRm9jdXMoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLmlzSW5Gb2N1cyA9IHRydWU7XG5cbiAgICAgICAgLy8gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIC8vICAgICBpZiAodGhpcy5pc0luRm9jdXMpIHtcbiAgICAgICAgLy8gICAgICAgICBjb25zdCBldmVudFRhcmdldCA9IGV2ZW50LnRhcmdldCB8fCBldmVudC5zcmNFbGVtZW50O1xuICAgICAgICAvLyAgICAgICAgIGlmIChldmVudFRhcmdldCkge1xuICAgICAgICAvLyAgICAgICAgICAgICBldmVudFRhcmdldC5zZWxlY3QoKTtcbiAgICAgICAgLy8gICAgICAgICB9XG4gICAgICAgIC8vICAgICB9XG4gICAgICAgIC8vIH0sIDApO1xuICAgIH1cblxuICAgIGlzRGlmZmVyZW50VmFsdWUodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCByZXMgPSB0aGlzLnV0aWxpdGllc1NlcnZpY2UuaXNFcXVhbE51bWJlcih0aGlzLnZhbHVlQXNDdXJyZW50Q3VsdHVyZSwgdmFsdWUpID09PSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBvbkJsdXIoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLmlzSW5Gb2N1cyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNsZWFuRXJyb3IoKTtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBldmVudC50YXJnZXQgPyBldmVudC50YXJnZXQudmFsdWUgOiBldmVudDtcblxuICAgICAgICAvLyBGb3IgZGVjaW1hbCB3ZSBuZWVkIHRvIHJlcGxhY2UgdGhlIGRlY2ltYWwgc2VwYXJhdG9yIGJhY2sgaWYgaXQncyBjb21tYSAoJywnKS5cbiAgICAgICAgY29uc3QgY29ycmVjdFZhbHVlID0gdGhpcy5hbGxvd0RlY2ltYWwgPyB0aGlzLnV0aWxpdGllc1NlcnZpY2UuY2hhbmdlRGVjaW1hbFNlcGFyYXRvcldoZW5JdHNDb21tYSh2YWx1ZSkgOiB2YWx1ZTtcbiAgICAgICAgXG4gICAgICAgIGlmIChjb3JyZWN0VmFsdWUgIT09IHRoaXMudmFsdWVBc0N1cnJlbnRDdWx0dXJlICYmIHRoaXMuaXNEaWZmZXJlbnRWYWx1ZSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBjb3JyZWN0VmFsdWU7XG4gICAgICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy52YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIHRoaXMuZm9jdXNUb1RoZVNhbWVFbGVtZW50SW5UaGVXYW50ZWRSb3coKTtcbiAgICB9XG5cbiAgICBvbktleWRvd24oZXZlbnQpOiBhbnkge1xuICAgICAgICBjb25zdCBrZXlib2FyZEV2ZW50ID0gZXZlbnQgYXMgS2V5Ym9hcmRFdmVudDtcblxuICAgICAgICBpZiAoa2V5Ym9hcmRFdmVudC5rZXkgPT09ICdFbnRlcicpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0U2FtZUVsZW1lbnRJblRoZVdhbnRlZFJvdyhcbiAgICAgICAgICAgICAgICBrZXlib2FyZEV2ZW50LFxuICAgICAgICAgICAgICAgICFrZXlib2FyZEV2ZW50LnNoaWZ0S2V5XG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbmNyZW1lbnQoZXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuc3RhbmRBbG9uZSkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMudXRpbGl0aWVzU2VydmljZS5pbmNyZW1lbnROdW1iZXIodGhpcy52YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmVsZW1lbnRDbGljay5lbWl0KHtcbiAgICAgICAgICAgIGtleTogdGhpcy5rZXksXG4gICAgICAgICAgICB2YWx1ZTogUGVwUXVhbnRpdHlTZWxlY3RvckNvbXBvbmVudC5QTFVTLFxuICAgICAgICAgICAgY29udHJvbFR5cGU6IHRoaXMuY29udHJvbFR5cGUsXG4gICAgICAgICAgICBldmVudFdoaWNoOiBldmVudC53aGljaCxcbiAgICAgICAgfSk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cblxuICAgIGRlY3JlbWVudChldmVudCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zdGFuZEFsb25lKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy51dGlsaXRpZXNTZXJ2aWNlLmRlY3JlbWVudE51bWJlcih0aGlzLnZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZWxlbWVudENsaWNrLmVtaXQoe1xuICAgICAgICAgICAga2V5OiB0aGlzLmtleSxcbiAgICAgICAgICAgIHZhbHVlOiBQZXBRdWFudGl0eVNlbGVjdG9yQ29tcG9uZW50Lk1JTlVTLFxuICAgICAgICAgICAgY29udHJvbFR5cGU6IHRoaXMuY29udHJvbFR5cGUsXG4gICAgICAgICAgICBldmVudFdoaWNoOiBldmVudC53aGljaCxcbiAgICAgICAgfSk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cblxuICAgIGVudGVyQ2hpbGRyZW4oZXZlbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5lbGVtZW50Q2xpY2suZW1pdCh7XG4gICAgICAgICAgICBrZXk6IHRoaXMua2V5LFxuICAgICAgICAgICAgdmFsdWU6IFBlcFF1YW50aXR5U2VsZWN0b3JDb21wb25lbnQuRU5URVJfQ0hJTERSRU4sXG4gICAgICAgICAgICBjb250cm9sVHlwZTogdGhpcy5jb250cm9sVHlwZSxcbiAgICAgICAgICAgIGV2ZW50V2hpY2g6IGV2ZW50LndoaWNoLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBlbnRlclBhY2thZ2UoZXZlbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5lbGVtZW50Q2xpY2suZW1pdCh7XG4gICAgICAgICAgICBrZXk6IHRoaXMua2V5LFxuICAgICAgICAgICAgdmFsdWU6IFBlcFF1YW50aXR5U2VsZWN0b3JDb21wb25lbnQuRU5URVJfUEFDS0FHRSxcbiAgICAgICAgICAgIGNvbnRyb2xUeXBlOiB0aGlzLmNvbnRyb2xUeXBlLFxuICAgICAgICAgICAgZXZlbnRXaGljaDogZXZlbnQud2hpY2gsXG4gICAgICAgICAgICBvdGhlckRhdGE6IHRoaXMubm90aWZpY2F0aW9uSW5mbyxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gc2V0dXBRc0J1dHRvbnMocXNXaWR0aDogbnVtYmVyKSB7XG4gICAgLy8gICAgIHRoaXMuc2hvd1FzQnRuID0gcXNXaWR0aCA+IDEyMDtcblxuICAgIC8vICAgICBpZiAoIXRoaXMuY2RbJ2Rlc3Ryb3llZCddKSB7XG4gICAgLy8gICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgICAvLyAgICAgfVxuICAgIC8vIH1cblxuICAgIC8vIHNldFFzVmlldygpOiB2b2lkIHtcbiAgICAvLyAgICAgaWYgKFxuICAgIC8vICAgICAgICAgdGhpcy5RU0NvbnQgJiZcbiAgICAvLyAgICAgICAgIHRoaXMuUVNDb250Lm5hdGl2ZUVsZW1lbnQgJiZcbiAgICAvLyAgICAgICAgIHRoaXMuUVNDb250Lm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGggPiAwXG4gICAgLy8gICAgICkge1xuICAgIC8vICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgLy8gICAgICAgICAgICAgdGhpcy5xc1dpZHRoU3ViamVjdC5uZXh0KHRoaXMuUVNDb250Lm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGgpO1xuICAgIC8vICAgICAgICAgfSwgMCk7XG4gICAgLy8gICAgIH1cbiAgICAvLyB9XG59XG4iLCI8bmctY29udGFpbmVyIFtmb3JtR3JvdXBdPVwiZm9ybVwiPlxuICAgIDxuZy10ZW1wbGF0ZSAjcGVwVGVtcGxhdGU+XG4gICAgICAgIDxkaXYgI1FTQ29udCBjbGFzcz1cInBlcC1xdWFudGl0eS1zZWxlY3Rvci1jb250YWluZXIge3sgc3R5bGVUeXBlIH19XCIgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICdoaWRlLXFzLWFjdGlvbnMnIDogbGF5b3V0VHlwZSA9PT0gJ2NhcmQnICYmIHJvd1NwYW4gPD0gMSxcbiAgICAgICAgICAgICAgICAncGVwLXRhYmxlLXF1YW50aXR5LXNlbGVjdG9yJzogbGF5b3V0VHlwZSA9PT0gJ3RhYmxlJyxcbiAgICAgICAgICAgICAgICAnb25lLXJvdyc6IHJvd1NwYW4gPT09IDEsXG4gICAgICAgICAgICAgICAgY2F1dGlvbjogaXNDYXV0aW9uLFxuICAgICAgICAgICAgICAgICdtYXRyaXgtcXMnOiB0eXBlID09PSAncXNGb3JNYXRyaXgnLFxuICAgICAgICAgICAgICAgICd6ZXJvLXF1YW50aXR5JzogZm9ybWF0dGVkVmFsdWUgPT09ICcwJ1xuICAgICAgICAgICAgfVwiPlxuICAgICAgICAgICAgPHBlcC1maWVsZC10aXRsZSAqbmdJZj1cInJlbmRlclRpdGxlICYmIGxheW91dFR5cGUgIT09ICd0YWJsZScgJiYgbGF5b3V0VHlwZSAhPT0gJ2NhcmQnXCIgW2xhYmVsXT1cImxhYmVsXCJcbiAgICAgICAgICAgICAgICBbbWFuZGF0b3J5XT1cIm1hbmRhdG9yeVwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiIFtzaG93VGl0bGVdPVwic2hvd1RpdGxlXCIgW3hBbGlnbm1lbnRdPVwieEFsaWdubWVudFwiPlxuICAgICAgICAgICAgPC9wZXAtZmllbGQtdGl0bGU+XG5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0eXBlID09ICdxcydcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicmVhZG9ubHk7IHRoZW4gcmVhZG9ubHlCbG9jazsgZWxzZSBlZGl0YWJsZVFTQmxvY2tcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3JlYWRvbmx5QmxvY2s+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gW2lkXT1cImtleVwiIG1hdC1idXR0b24gY2xhc3M9XCJwZXAtYnV0dG9uIHt7IHN0eWxlVHlwZSB9fSBkaXNhYmxlIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7Y2F1dGlvbjogaXNDYXV0aW9uLCBtZDogcm93U3BhbiAhPT0gMSwgeHM6IHJvd1NwYW4gPT09IDF9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPVwie3sgZm9ybWF0dGVkVmFsdWUgfX1cIiBkaXNhYmxlZD1cInRydWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZWxsaXBzaXNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBmb3JtYXR0ZWRWYWx1ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZWRpdGFibGVRU0Jsb2NrPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBwZXBRc1ZhbGlkYXRpb24gW2FsbG93RGVjaW1hbF09XCJhbGxvd0RlY2ltYWxcIiB0eXBlPVwiZGVjaW1hbE51bWJlclwiIGlucHV0bW9kZT1cImRlY2ltYWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdElucHV0ICNRU0lucHV0IG5hbWU9XCJ7eyBrZXkgfX1cIiBjbGFzcz1cImJvZHktbGcgZWxsaXBzaXNcIiB0aXRsZT1cInt7IGZvcm1hdHRlZFZhbHVlIH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIiBbaWRdPVwia2V5XCIgW2Zvcm1Db250cm9sTmFtZV09XCJrZXlcIiBbdmFsdWVdPVwiZGlzcGxheVZhbHVlJCB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnRhcmdldC5zZXRTZWxlY3Rpb25SYW5nZSgwLCA5OTkpXCIgKGtleWRvd24pPVwib25LZXlkb3duKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChibHVyKT1cIm9uQmx1cigkZXZlbnQpXCIgKGZvY3VzKT1cIm9uRm9jdXMoJGV2ZW50KVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwic2hvd1FzQnRuXCIgbWF0LWJ1dHRvbiBtYXRQcmVmaXggKGNsaWNrKT1cImRlY3JlbWVudCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInBlcC1idXR0b24gaWNvbi1idXR0b24gc20gd2VhayBxcy1hY3Rpb25cIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiBbbmdDbGFzc109XCJ7IGRpc2FibGU6IGRpc2FibGVkLCBjYXV0aW9uOiBpc0NhdXRpb24gJiYgc3R5bGVUeXBlICE9PSAnc3Ryb25nJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2tlZXAtYmFja2dyb3VuZC1vbi1mb2N1cyc6IHN0eWxlVHlwZSA9PT0gJ3N0cm9uZyd9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGVwLWljb24gbmFtZT1cIm51bWJlcl9taW51c1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BlcC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJzaG93UXNCdG5cIiBtYXQtYnV0dG9uIG1hdFN1ZmZpeCAoY2xpY2spPVwiaW5jcmVtZW50KCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicGVwLWJ1dHRvbiBpY29uLWJ1dHRvbiBzbSB3ZWFrIHFzLWFjdGlvblwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiIFtuZ0NsYXNzXT1cInsgZGlzYWJsZTogZGlzYWJsZWQsIGNhdXRpb246IGlzQ2F1dGlvbiAmJiBzdHlsZVR5cGUgIT09ICdzdHJvbmcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAna2VlcC1iYWNrZ3JvdW5kLW9uLWZvY3VzJzogc3R5bGVUeXBlID09PSAnc3Ryb25nJ31cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwZXAtaWNvbiBuYW1lPVwibnVtYmVyX3BsdXNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wZXAtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwibWVzc2FnZXM/Lmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInFzLWVycm9yIGJvZHkteHNcIiAqbmdGb3I9XCJsZXQgbXNnIG9mIG1lc3NhZ2VzXCI+IHt7IG1zZy5LZXkgfCB0cmFuc2xhdGUgfX0gOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBtc2cuVmFsdWUgfX0gPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidHlwZSA9PSAncXNGb3JNYXRyaXgnXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInJlYWRvbmx5OyB0aGVuIHJlYWRvbmx5QmxvY2s7IGVsc2UgZWRpdGFibGVRU0Jsb2NrXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNyZWFkb25seUJsb2NrPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIFtpZF09XCJrZXlcIiBtYXQtYnV0dG9uIGNsYXNzPVwicGVwLWJ1dHRvbiB7eyBzdHlsZVR5cGUgfX0gZGlzYWJsZVwiIGRpc2FibGVkPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7Y2F1dGlvbjogaXNDYXV0aW9uLCBtZDogcm93U3BhbiAhPT0gMSwgeHM6IHJvd1NwYW4gPT09IDF9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBYXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNlZGl0YWJsZVFTQmxvY2s+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIHhBbGlnbm1lbnQ9PSdyaWdodCdcIiBjbGFzcz1cIiBib2R5LXNtIGFkZGl0aW9uYWwtdmFsdWUgcHJlZml4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdEJhZGdlPVwie3sgYWRkaXRpb25hbFZhbHVlIH19XCIgbWF0QmFkZ2VQb3NpdGlvbj1cImJlZm9yZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRCYWRnZVNpemU9XCJyb3dTcGFuID09PSAxID8gc21hbGwgOiBtZWRpdW1cIiBbQHNob3dIaWRlXT1cImdldEFkZGl0aW9uYWxWYWx1ZVwiPjwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiAobW91c2VsZWF2ZSk9XCIhaXNJbkZvY3VzID8gb25NYXRyaXhNb3VzZWxlYXZlKCRldmVudCkgOiBudWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgcGVwUXNWYWxpZGF0aW9uIFthbGxvd0RlY2ltYWxdPVwiYWxsb3dEZWNpbWFsXCIgdHlwZT1cImRlY2ltYWxOdW1iZXJcIiBpbnB1dG1vZGU9XCJkZWNpbWFsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRJbnB1dCAjUVNJbnB1dCBuYW1lPVwie3sga2V5IH19XCIgdGl0bGU9XCJ7eyBmb3JtYXR0ZWRWYWx1ZSB9fVwiIGNsYXNzPVwiYm9keS1zbSBlbGxpcHNpc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCIgW2lkXT1cImtleVwiIFtmb3JtQ29udHJvbE5hbWVdPVwia2V5XCIgW3ZhbHVlXT1cImRpc3BsYXlWYWx1ZSQgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uTWF0cml4Q2xpY2soJGV2ZW50KTsgJGV2ZW50LnRhcmdldC5zZXRTZWxlY3Rpb25SYW5nZSgwLCA5OTkpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJvbktleWRvd24oJGV2ZW50KVwiIChibHVyKT1cIm9uTWF0cml4Qmx1cigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZm9jdXMpPVwib25NYXRyaXhNb3VzZUVudGVyKCRldmVudCk7IG9uRm9jdXMoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwib25NYXRyaXhNb3VzZUVudGVyKCRldmVudClcIiAvPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwibWVzc2FnZXM/Lmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInFzLWVycm9yIGJvZHkteHNcIiAqbmdGb3I9XCJsZXQgbXNnIG9mIG1lc3NhZ2VzXCI+IHt7IG1zZy5LZXkgfCB0cmFuc2xhdGUgfX0gOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBtc2cuVmFsdWUgfX0gPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ4QWxpZ25tZW50ICE9ICdyaWdodCdcIiBjbGFzcz1cImJvZHktc20gYWRkaXRpb25hbC12YWx1ZSBzdWZmaXhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0QmFkZ2U9XCJ7eyBhZGRpdGlvbmFsVmFsdWUgfX1cIiBtYXRCYWRnZVBvc2l0aW9uPVwiYmVmb3JlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdEJhZGdlU2l6ZT1cInJvd1NwYW4gPT09IDEgPyBzbWFsbCA6IG1lZGl1bVwiIFtAc2hvd0hpZGVdPVwiZ2V0QWRkaXRpb25hbFZhbHVlXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInR5cGUgPT0gJ2J1dHRvbidcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiKHZhbHVlIHwgcGVwVG9OdW1iZXIpID09IDA7IHRoZW4gcmVndWxhckJsb2NrOyBlbHNlIHdpdGhCYWRnZUJsb2NrXCI+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNyZWd1bGFyQmxvY2s+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiBjbGFzcz1cInBlcC1idXR0b24ge3sgc3R5bGVUeXBlIH19IFwiIFtpZF09XCJrZXlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cInt7IGtleSB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7IGRpc2FibGU6IGRpc2FibGVkLCBjYXV0aW9uOiBpc0NhdXRpb24sIG1kOiByb3dTcGFuICE9PSAxLCB4czogcm93U3BhbiA9PT0gMX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIidRUy5PUkRFUicgfCB0cmFuc2xhdGVcIiAoY2xpY2spPVwiZW50ZXJDaGlsZHJlbigkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImVsbGlwc2lzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJ1FTLk9SREVSJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjd2l0aEJhZGdlQmxvY2s+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiBtYXRCYWRnZT1cInt7IGZvcm1hdHRlZFZhbHVlIH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdEJhZGdlUG9zaXRpb249XCJ7e3hBbGlnbm1lbnQgPT0gJ3JpZ2h0JyA/ICdiZWZvcmUnIDogJ2FmdGVyJ319XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFttYXRCYWRnZVNpemVdPVwibGF5b3V0VHlwZSA9PT0gJ2NhcmQnICYmIHJvd1NwYW4gPT09IDEgPyAnc21hbGwnIDogJ21lZGl1bSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwZXAtYnV0dG9uIHt7IHN0eWxlVHlwZSB9fSBcIiBbaWRdPVwia2V5XCIgbmFtZT1cInt7IGtleSB9fVwiIFtuZ0NsYXNzXT1cInsgZGlzYWJsZTogZGlzYWJsZWQsIGNhdXRpb246IGlzQ2F1dGlvbiwgbWQ6IHJvd1NwYW4gIT09IDEsIHhzOiByb3dTcGFuID09PSAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyaWdodC1hbGlnbm1lbnQnOiB4QWxpZ25tZW50ID09ICdyaWdodCcsICdsZWZ0LWFsaWdubWVudCc6IHhBbGlnbm1lbnQgIT0gJ3JpZ2h0J31cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIidRUy5PUkRFUicgfCB0cmFuc2xhdGVcIiAoY2xpY2spPVwiZW50ZXJDaGlsZHJlbigkZXZlbnQpXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImVsbGlwc2lzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJ1FTLk9SREVSJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidHlwZSA9PSAncGFja2FnZUJ1dHRvbidcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gY2xhc3M9XCJwZXAtYnV0dG9uIHt7IHN0eWxlVHlwZSB9fSBcIiBbaWRdPVwia2V5XCIgbmFtZT1cInt7IGtleSB9fVwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgZGlzYWJsZTogZGlzYWJsZWQsIGNhdXRpb246IGlzQ2F1dGlvbiwgbWQ6IHJvd1NwYW4gIT09IDEsIHhzOiByb3dTcGFuID09PSAxfVwiXG4gICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCInUVMuT1JERVInIHwgdHJhbnNsYXRlXCIgKGNsaWNrKT1cImVudGVyUGFja2FnZSgkZXZlbnQpXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZWxsaXBzaXNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdRUy5PUkRFUicgfCB0cmFuc2xhdGUgfX0gJiM0MDt7eyBmb3JtYXR0ZWRWYWx1ZSB9fSYjNDE7XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxheW91dFR5cGUgPT09ICdmb3JtJ1wiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicGVwVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJsYXlvdXRUeXBlID09PSAnY2FyZCdcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInBlcFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibGF5b3V0VHlwZSA9PT0gJ3RhYmxlJ1wiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicGVwVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbjwvbmctY29udGFpbmVyPiJdfQ==
570
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVhbnRpdHktc2VsZWN0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWxpYi9xdWFudGl0eS1zZWxlY3Rvci9xdWFudGl0eS1zZWxlY3Rvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbGliL3F1YW50aXR5LXNlbGVjdG9yL3F1YW50aXR5LXNlbGVjdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxTQUFTLEVBSVQsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBQ1osU0FBUyxFQUdULHVCQUF1QixHQUcxQixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQ0gsT0FBTyxFQUNQLEtBQUssRUFDTCxLQUFLLEVBQ0wsT0FBTyxFQUNQLFVBQVUsR0FDYixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFHSCx1QkFBdUIsRUFFdkIsNEJBQTRCLEVBRzVCLHdCQUF3QixHQUUzQixNQUFNLHlCQUF5QixDQUFDO0FBQ2pDLE9BQU8sRUFBRSxlQUFlLEVBQXlCLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2RSxPQUFPLEVBQWdCLG9CQUFvQixFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7Ozs7OztBQTZCL0UsTUFBTSxPQUFPLDRCQUE0QjtJQXFPckMsWUFDWSxFQUFxQixFQUNyQixvQkFBNkMsRUFDN0MsUUFBbUIsRUFDbkIsT0FBbUIsRUFDbkIsU0FBMkIsRUFDM0IsZ0JBQXFDO1FBTHJDLE9BQUUsR0FBRixFQUFFLENBQW1CO1FBQ3JCLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBeUI7UUFDN0MsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUNuQixZQUFPLEdBQVAsT0FBTyxDQUFZO1FBQ25CLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQzNCLHFCQUFnQixHQUFoQixnQkFB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Q29udGVudCI6WyJpbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBPbkluaXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBJbnB1dCxcbiAgICBPdXRwdXQsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIFZpZXdDaGlsZCxcbiAgICBFbGVtZW50UmVmLFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIFJlbmRlcmVyMixcbiAgICBBZnRlclZpZXdJbml0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7XG4gICAgdHJpZ2dlcixcbiAgICBzdGF0ZSxcbiAgICBzdHlsZSxcbiAgICBhbmltYXRlLFxuICAgIHRyYW5zaXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xuaW1wb3J0IHtcbiAgICBQZXBMYXlvdXRUeXBlLFxuICAgIFBlcFN0eWxlVHlwZSxcbiAgICBQZXBDdXN0b21pemF0aW9uU2VydmljZSxcbiAgICBQZXBIb3Jpem9udGFsQWxpZ25tZW50LFxuICAgIERFRkFVTFRfSE9SSVpPTlRBTF9BTElHTk1FTlQsXG4gICAgSVBlcEZpZWxkQ2xpY2tFdmVudCxcbiAgICBQZXBRdWFudGl0eVNlbGVjdG9yRmllbGRUeXBlLFxuICAgIFBlcFF1YW50aXR5U2VsZWN0b3JGaWVsZCxcbiAgICBQZXBVdGlsaXRpZXNTZXJ2aWNlLFxufSBmcm9tICdAcGVwcGVyaS1hZGRvbnMvbmd4LWxpYic7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGZyb21FdmVudCwgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3BlcC1xdWFudGl0eS1zZWxlY3RvcicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3F1YW50aXR5LXNlbGVjdG9yLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9xdWFudGl0eS1zZWxlY3Rvci5jb21wb25lbnQuc2NzcycsICcuL3F1YW50aXR5LXNlbGVjdG9yLmNvbXBvbmVudC50aGVtZS5zY3NzJ10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgYW5pbWF0aW9uczogW1xuICAgICAgICB0cmlnZ2VyKCdzaG93SGlkZScsIFtcbiAgICAgICAgICAgIHN0YXRlKFxuICAgICAgICAgICAgICAgICdzaG93JyxcbiAgICAgICAgICAgICAgICBzdHlsZSh7XG4gICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDEsXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogJ3NjYWxlKDEpJyxcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHN0YXRlKFxuICAgICAgICAgICAgICAgICdoaWRlJyxcbiAgICAgICAgICAgICAgICBzdHlsZSh7XG4gICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDAsXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogJ3NjYWxlKDApJyxcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHRyYW5zaXRpb24oJ3Nob3cgPT4gaGlkZScsIGFuaW1hdGUoJzI1MG1zIGVhc2Utb3V0JykpLFxuICAgICAgICAgICAgdHJhbnNpdGlvbignaGlkZSA9PiBzaG93JywgYW5pbWF0ZSgnMjUwbXMgZWFzZS1pbicpKSxcbiAgICAgICAgXSksXG4gICAgXSxcbn0pXG5leHBvcnQgY2xhc3MgUGVwUXVhbnRpdHlTZWxlY3RvckNvbXBvbmVudFxuICAgIGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gICAgcHVibGljIHN0YXRpYyBFTlRFUl9DSElMRFJFTiA9ICdbRW50ZXJDaGlsZHJlbl0nO1xuICAgIHB1YmxpYyBzdGF0aWMgRU5URVJfUEFDS0FHRSA9ICdbRW50ZXJQYWNrYWdlXSc7XG4gICAgcHVibGljIHN0YXRpYyBQTFVTID0gJ1srXSc7XG4gICAgcHVibGljIHN0YXRpYyBNSU5VUyA9ICdbLV0nO1xuXG4gICAgQElucHV0KCkga2V5ID0gJyc7XG5cbiAgICBwcml2YXRlIF92YWx1ZSA9IG51bGw7XG4gICAgQElucHV0KClcbiAgICBzZXQgdmFsdWUodmFsdWU6IHN0cmluZykge1xuICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICB2YWx1ZSA9ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaXNEaWZmZXJlbnRWYWx1ZSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNldEZvcm1hdHRlZFZhbHVlKHRoaXMudmFsdWUpO1xuICAgICAgICB0aGlzLmNoYW5nZURpc3BsYXlWYWx1ZSgpO1xuICAgIH1cbiAgICBnZXQgdmFsdWUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICAgIH1cbiAgICBcbiAgICBnZXQgdmFsdWVBc0N1cnJlbnRDdWx0dXJlKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnV0aWxpdGllc1NlcnZpY2UuY2hhbmdlRGVjaW1hbFNlcGFyYXRvcldoZW5JdHNDb21tYSh0aGlzLnZhbHVlLCB0cnVlKTtcbiAgICAgICAgLy8gbGV0IHJlcyA9IHRoaXMudmFsdWU7XG5cbiAgICAgICAgLy8gaWYgKHRoaXMuYWxsb3dEZWNpbWFsKSB7XG4gICAgICAgIC8vICAgICByZXMgPSB0aGlzLnV0aWxpdGllc1NlcnZpY2UuZm9ybWF0RGVjaW1hbCh0aGlzLnZhbHVlLCB0aGlzLm1pbkZyYWN0aW9uRGlnaXRzLCB0aGlzLm1heEZyYWN0aW9uRGlnaXRzLCBmYWxzZSk7XG4gICAgICAgIC8vIH1cbiAgICAgICAgXG4gICAgICAgIC8vIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGZvcm1hdHRlZFZhbHVlID0gJyc7XG4gICAgLy8gcHJpdmF0ZSBfZm9ybWF0dGVkVmFsdWUgPSAnJztcbiAgICAvLyBASW5wdXQoKVxuICAgIC8vIHNldCBmb3JtYXR0ZWRWYWx1ZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgLy8gICAgIC8vIGlmICghdmFsdWUpIHtcbiAgICAvLyAgICAgLy8gICAgIHZhbHVlID0gJyc7XG4gICAgLy8gICAgIC8vIH1cblxuICAgIC8vICAgICAvLyBpZiAodGhpcy5fY2FsY3VsYXRlRm9ybWF0dGVkVmFsdWUpIHtcbiAgICAvLyAgICAgLy8gICAgIHRoaXMuX2NhbGN1bGF0ZUZvcm1hdHRlZFZhbHVlID0gZmFsc2U7XG4gICAgLy8gICAgIC8vIH1cblxuICAgIC8vICAgICAvLyB0aGlzLnNldEZvcm1hdHRlZFZhbHVlKHZhbHVlKTtcbiAgICAvLyB9XG4gICAgLy8gZ2V0IGZvcm1hdHRlZFZhbHVlKCk6IHN0cmluZyB7XG4gICAgLy8gICAgIHJldHVybiB0aGlzLl9mb3JtYXR0ZWRWYWx1ZTtcbiAgICAvLyB9XG4gICAgXG4gICAgcHJpdmF0ZSBfbWluRnJhY3Rpb25EaWdpdHMgPSBOYU47XG4gICAgQElucHV0KClcbiAgICBzZXQgbWluRnJhY3Rpb25EaWdpdHModmFsdWU6IG51bWJlcikge1xuICAgICAgICB0aGlzLl9taW5GcmFjdGlvbkRpZ2l0cyA9IHZhbHVlO1xuICAgICAgICB0aGlzLnNldEZvcm1hdHRlZFZhbHVlKHRoaXMudmFsdWUpO1xuICAgICAgICB0aGlzLmNoYW5nZURpc3BsYXlWYWx1ZSgpO1xuICAgIH1cbiAgICBnZXQgbWluRnJhY3Rpb25EaWdpdHMoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21pbkZyYWN0aW9uRGlnaXRzO1xuICAgIH1cblxuICAgIHByaXZhdGUgX21heEZyYWN0aW9uRGlnaXRzID0gTmFOO1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IG1heEZyYWN0aW9uRGlnaXRzKHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5fbWF4RnJhY3Rpb25EaWdpdHMgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5zZXRGb3JtYXR0ZWRWYWx1ZSh0aGlzLnZhbHVlKTtcbiAgICAgICAgdGhpcy5jaGFuZ2VEaXNwbGF5VmFsdWUoKTtcbiAgICB9XG4gICAgZ2V0IG1heEZyYWN0aW9uRGlnaXRzKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tYXhGcmFjdGlvbkRpZ2l0cztcbiAgICB9XG5cbiAgICBASW5wdXQoKSBsYWJlbCA9ICcnO1xuICAgIEBJbnB1dCgpIHR5cGU6IFBlcFF1YW50aXR5U2VsZWN0b3JGaWVsZFR5cGUgPSAncXMnO1xuICAgIEBJbnB1dCgpIG1hbmRhdG9yeSA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIGRpc2FibGVkID0gZmFsc2U7XG4gICAgQElucHV0KCkgcmVhZG9ubHkgPSBmYWxzZTtcblxuICAgIHByaXZhdGUgX3RleHRDb2xvciA9ICcnO1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHRleHRDb2xvcih2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX3RleHRDb2xvciA9IHZhbHVlO1xuICAgICAgICB0aGlzLmlzQ2F1dGlvbiA9IHZhbHVlID09PSAnI0ZGMDAwMCc7XG4gICAgfVxuICAgIGdldCB0ZXh0Q29sb3IoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RleHRDb2xvcjtcbiAgICB9XG5cbiAgICBASW5wdXQoKSB4QWxpZ25tZW50OiBQZXBIb3Jpem9udGFsQWxpZ25tZW50ID0gREVGQVVMVF9IT1JJWk9OVEFMX0FMSUdOTUVOVDtcbiAgICBASW5wdXQoKSByb3dTcGFuID0gMTtcbiAgICBcbiAgICBwcml2YXRlIF9hbGxvd0RlY2ltYWwgPSBmYWxzZTtcbiAgICBASW5wdXQoKSBcbiAgICBzZXQgYWxsb3dEZWNpbWFsKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX2FsbG93RGVjaW1hbCA9IHZhbHVlO1xuXG4gICAgICAgIGlmICh0aGlzLnZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnNldEZvcm1hdHRlZFZhbHVlKHRoaXMudmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VEaXNwbGF5VmFsdWUoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXQgYWxsb3dEZWNpbWFsKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWxsb3dEZWNpbWFsO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIGFkZGl0aW9uYWxWYWx1ZSA9ICcnO1xuXG4gICAgcHJpdmF0ZSBfbm90aWZpY2F0aW9uSW5mbzogYW55O1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IG5vdGlmaWNhdGlvbkluZm8odmFsdWU6IGFueSkge1xuICAgICAgICB0aGlzLl9ub3RpZmljYXRpb25JbmZvID0gdmFsdWU7XG5cbiAgICAgICAgY29uc3QgbWVzc2FnZXMgPSB2YWx1ZSAmJiB2YWx1ZSA+IDAgPyBKU09OLnBhcnNlKHZhbHVlKS5NZXNzYWdlcyA6ICcnO1xuICAgICAgICBpZiAobWVzc2FnZXMgJiYgbWVzc2FnZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgLy8gUmVwbGFjZSB0aGUgbXNnIGtleXMuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IG1zZyBvZiBtZXNzYWdlcykge1xuICAgICAgICAgICAgICAgIGlmIChtc2cuS2V5ID09PSAnSW52ZW50b3J5X0xpbWl0X01zZycpIHtcbiAgICAgICAgICAgICAgICAgICAgbXNnLktleSA9ICdNRVNTQUdFUy5FUlJPUl9JTlZFTlRPUllfTElNSVQnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobXNnLktleSA9PT0gJ0Nhc2VfUXVhbnRpdHlfTGltaXRfTXNnJykge1xuICAgICAgICAgICAgICAgICAgICBtc2cuS2V5ID0gJ01FU1NBR0VTLkVSUk9SX0NBU0VfUVVBTlRJVFlfTElNSVQnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobXNnLktleSA9PT0gJ01pbl9RdWFudGl0eV9MaW1pdF9Nc2cnKSB7XG4gICAgICAgICAgICAgICAgICAgIG1zZy5LZXkgPSAnTUVTU0FHRVMuRVJST1JfTUlOX1FVQU5USVRZX0xJTUlUJztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1zZy5LZXkgPT09ICdNYXhfUXVhbnRpdHlfTGltaXRfTXNnJykge1xuICAgICAgICAgICAgICAgICAgICBtc2cuS2V5ID0gJ01FU1NBR0VTLkVSUk9SX01BWF9RVUFOVElUWV9MSU1JVCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLm1lc3NhZ2VzID0gbWVzc2FnZXM7XG5cbiAgICAgICAgICAgIGNvbnN0IGZpZWxkQ29udHJvbCA9IHRoaXMuZm9ybS5jb250cm9sc1t0aGlzLmtleV07XG4gICAgICAgICAgICBmaWVsZENvbnRyb2wuc2V0RXJyb3JzKHtcbiAgICAgICAgICAgICAgICBzZXJ2ZXJFcnJvcjogJ0Vycm9yJyxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB0aGlzLnNhbWVFbGVtZW50SW5UaGVXYW50ZWRSb3cgPSBudWxsO1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuUVNJbnB1dCAmJiB0aGlzLlFTSW5wdXQubmF0aXZlRWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLlFTSW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIDE1MCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IG5vdGlmaWNhdGlvbkluZm8oKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX25vdGlmaWNhdGlvbkluZm87XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfdmlzaWJsZSA9IHRydWU7XG4gICAgQElucHV0KClcbiAgICBzZXQgdmlzaWJsZSh2aXNpYmxlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX3Zpc2libGUgPSB2aXNpYmxlO1xuICAgICAgICBpZiAodmlzaWJsZSkge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyhcbiAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICAgICAgICAnaGlkZGVuLWVsZW1lbnQnXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhcbiAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICAgICAgICAnaGlkZGVuLWVsZW1lbnQnXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCB2aXNpYmxlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmlzaWJsZTtcbiAgICB9XG5cbiAgICBjb250cm9sVHlwZSA9ICdxcyc7XG5cbiAgICBASW5wdXQoKSBmb3JtOiBGb3JtR3JvdXAgPSBudWxsO1xuICAgIEBJbnB1dCgpIHNob3dUaXRsZSA9IHRydWU7XG4gICAgQElucHV0KCkgcmVuZGVyVGl0bGUgPSB0cnVlO1xuICAgIEBJbnB1dCgpIGxheW91dFR5cGU6IFBlcExheW91dFR5cGUgPSAnZm9ybSc7XG4gICAgQElucHV0KCkgaXNBY3RpdmUgPSBmYWxzZTtcblxuICAgIC8vIEdldCBkZWZhdWx0IHN0eWxlIGZyb20gdGhlbWUuXG4gICAgQElucHV0KClcbiAgICBzdHlsZVR5cGU6IFBlcFN0eWxlVHlwZSA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKFxuICAgICAgICBQZXBDdXN0b21pemF0aW9uU2VydmljZS5TVFlMRV9RU19LRVlcbiAgICApIGFzIFBlcFN0eWxlVHlwZTsgLy8nc3Ryb25nJztcblxuICAgIEBPdXRwdXQoKVxuICAgIHZhbHVlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG4gICAgQE91dHB1dCgpXG4gICAgZWxlbWVudENsaWNrOiBFdmVudEVtaXR0ZXI8SVBlcEZpZWxkQ2xpY2tFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPElQZXBGaWVsZENsaWNrRXZlbnQ+KCk7XG5cbiAgICBAVmlld0NoaWxkKCdRU0NvbnQnKSBRU0NvbnQ6IEVsZW1lbnRSZWY7XG4gICAgQFZpZXdDaGlsZCgnUVNJbnB1dCcpIFFTSW5wdXQ6IEVsZW1lbnRSZWY7XG5cbiAgICBwcml2YXRlIF9jYWxjdWxhdGVGb3JtYXR0ZWRWYWx1ZSA9IHRydWU7XG4gICAgZ2V0IGNhbGN1bGF0ZUZvcm1hdHRlZFZhbHVlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2FsY3VsYXRlRm9ybWF0dGVkVmFsdWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZWFkb25seSBfZGVzdHJveWVkOiBTdWJqZWN0PHZvaWQ+O1xuICAgIHByaXZhdGUgcXNXaWR0aFN1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+O1xuICAgIGxhc3RRc0NvbnRDbGllbnRXaWR0aCA9IDA7XG4gICAgc2hvd1FzQnRuID0gdHJ1ZTtcblxuICAgIHN0YW5kQWxvbmUgPSBmYWxzZTtcbiAgICBwcml2YXRlIF9pc0luRm9jdXMgPSBmYWxzZTtcbiAgICBASW5wdXQoKVxuICAgIHNldCBpc0luRm9jdXMoaXNJbkZvY3VzOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX2lzSW5Gb2N1cyA9IGlzSW5Gb2N1cztcbiAgICAgICAgdGhpcy5jaGFuZ2VEaXNwbGF5VmFsdWUoKTtcbiAgICB9XG4gICAgZ2V0IGlzSW5Gb2N1cygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzSW5Gb2N1cztcbiAgICB9XG4gICAgaXNNYXRyaXhGb2N1cyA9IGZhbHNlO1xuXG4gICAgaXNDYXV0aW9uID0gZmFsc2U7XG4gICAgbWVzc2FnZXM6IEFycmF5PGFueT4gPSBudWxsO1xuXG4gICAgc2FtZUVsZW1lbnRJblRoZVdhbnRlZFJvdyA9IG51bGw7XG5cbiAgICBpc0VtcHR5S2V5ID0gZmFsc2U7XG5cbiAgICBwcml2YXRlIF9kaXNwbGF5VmFsdWVTdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPignJyk7XG4gICAgZ2V0IGRpc3BsYXlWYWx1ZSQoKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Rpc3BsYXlWYWx1ZVN1YmplY3QuYXNPYnNlcnZhYmxlKCkucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByaXZhdGUgY3VzdG9taXphdGlvblNlcnZpY2U6IFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgICAgIHByaXZhdGUgZWxlbWVudDogRWxlbWVudFJlZixcbiAgICAgICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgdXRpbGl0aWVzU2VydmljZTogUGVwVXRpbGl0aWVzU2VydmljZVxuICAgICkge1xuICAgICAgICB0aGlzLl9kZXN0cm95ZWQgPSBuZXcgU3ViamVjdCgpO1xuICAgICAgICAvLyB0aGlzLnFzV2lkdGhTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdCgwKTtcbiAgICB9XG5cbiAgICBzZXRGb3JtKCkge1xuICAgICAgICBjb25zdCBwZXBGaWVsZCA9IG5ldyBQZXBRdWFudGl0eVNlbGVjdG9yRmllbGQoe1xuICAgICAgICAgICAga2V5OiB0aGlzLmtleSxcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlQXNDdXJyZW50Q3VsdHVyZSxcbiAgICAgICAgICAgIG1hbmRhdG9yeTogdGhpcy5tYW5kYXRvcnksXG4gICAgICAgICAgICByZWFkb25seTogdGhpcy5yZWFkb25seSxcbiAgICAgICAgICAgIGRpc2FibGVkOiB0aGlzLmRpc2FibGVkLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5mb3JtID0gdGhpcy5jdXN0b21pemF0aW9uU2VydmljZS5nZXREZWZhdWx0RnJvbUdyb3VwKHBlcEZpZWxkKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldEZvcm1hdHRlZFZhbHVlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKHRoaXMuX2NhbGN1bGF0ZUZvcm1hdHRlZFZhbHVlKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5hbGxvd0RlY2ltYWwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm1hdHRlZFZhbHVlID0gdGhpcy51dGlsaXRpZXNTZXJ2aWNlLmZvcm1hdERlY2ltYWwodmFsdWUsIHRoaXMubWluRnJhY3Rpb25EaWdpdHMsIHRoaXMubWF4RnJhY3Rpb25EaWdpdHMpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm1hdHRlZFZhbHVlID0gdGhpcy51dGlsaXRpZXNTZXJ2aWNlLmZvcm1hdE51bWJlcih2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmZvcm1hdHRlZFZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIHRoaXMudXBkYXRlRm9ybUZpZWxkVmFsdWUoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG5vdGlmeURpc3BsYXlWYWx1ZUNoYW5nZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX2Rpc3BsYXlWYWx1ZVN1YmplY3QubmV4dCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjaGFuZ2VEaXNwbGF5VmFsdWUoKTogdm9pZCB7XG4gICAgICAgIGxldCByZXMgPSAnJztcblxuICAgICAgICBpZiAodGhpcy5hbGxvd0RlY2ltYWwpIHtcbiAgICAgICAgICAgIHJlcyA9IHRoaXMuaXNJbkZvY3VzID8gdGhpcy52YWx1ZUFzQ3VycmVudEN1bHR1cmUgOiB0aGlzLmZvcm1hdHRlZFZhbHVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzID0gdGhpcy5pc0luRm9jdXMgPyB0aGlzLnZhbHVlIDogdGhpcy5mb3JtYXR0ZWRWYWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubm90aWZ5RGlzcGxheVZhbHVlQ2hhbmdlKHJlcyk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdjaGFuZ2VEaXNwbGF5VmFsdWUnICsgcmVzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZUZvcm1GaWVsZFZhbHVlKGZpcnN0TG9hZCA9IGZhbHNlKSB7XG4gICAgICAgIC8vIFNldCB0aGUgZm9ybWF0dGVkIHZhbHVlIG9ubHkgZm9yIHRoZSBmaXJzdCBsb2FkIGNhdXNlIGl0J3Mgbm90IGZvcm1hdHRlZCBpZiB3ZSBzZXQgdGhlIHZhbHVlIChJIGRvbid0IGtub3cgd2h5KVxuICAgICAgICAvLyBFbHNlIHdlIHNldCB0aGUgdmFsdWUgLSB0aGlzIGlzIGltcG9ydGFudCB0byBzZXQgdGhlIHZhbHVlIG9ubHkgY2F1c2Ugc2V0dGluZyB0aGUgZm9ybWF0dGVkIHZhbHVlIHdpbGwgY2F1c2UgYnVnIHdoZW4gdGhlIG51bWJlciBpcyB3aXRoIHRob3VzYW5kIHNlcGFyYXRvclxuICAgICAgICB0aGlzLmN1c3RvbWl6YXRpb25TZXJ2aWNlLnVwZGF0ZUZvcm1GaWVsZFZhbHVlKFxuICAgICAgICAgICAgdGhpcy5mb3JtLFxuICAgICAgICAgICAgdGhpcy5rZXksXG4gICAgICAgICAgICBmaXJzdExvYWQgPyB0aGlzLmZvcm1hdHRlZFZhbHVlIDogdGhpcy52YWx1ZSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBnZXQgZGlzcGxheVZhbHVlKCk6IHN0cmluZyB7XG4gICAgLy8gICAgIGNvbnN0IHJlcyA9IHRoaXMuaXNJbkZvY3VzXG4gICAgLy8gICAgICAgICA/IHRoaXMudXRpbGl0aWVzU2VydmljZS5mb3JtYXREZWNpbWFsKHRoaXMudmFsdWUsIHRoaXMubWluRnJhY3Rpb25EaWdpdHMsIHRoaXMubWF4RnJhY3Rpb25EaWdpdHMpXG4gICAgLy8gICAgICAgICA6IHRoaXMuZm9ybWF0dGVkVmFsdWU7XG4gICAgLy8gICAgIHJldHVybiByZXM7XG4gICAgLy8gfVxuXG4gICAgcHJvdGVjdGVkIGdldERlc3Ryb3llcigpIHtcbiAgICAgICAgcmV0dXJuIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95ZWQpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5mb3JtID09PSBudWxsKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5rZXkgPT09ICcnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0VtcHR5S2V5ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5zdGFuZEFsb25lID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuc2V0Rm9ybSgpO1xuXG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKFxuICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICAgICAgIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlNUQU5EX0FMT05FX0ZJRUxEX0NMQVNTX05BTUVcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5yZW5kZXJUaXRsZSkge1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICBQZXBDdXN0b21pemF0aW9uU2VydmljZS5TVEFORF9BTE9ORV9GSUVMRF9OT19TUEFDSU5HX0NMQVNTX05BTUVcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gdGhpcy5xc1dpZHRoU3ViamVjdFxuICAgICAgICAvLyAgICAgLmFzT2JzZXJ2YWJsZSgpXG4gICAgICAgIC8vICAgICAucGlwZSh0aGlzLmdldERlc3Ryb3llcigpLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKVxuICAgICAgICAvLyAgICAgLnN1YnNjcmliZSgocXNXaWR0aDogbnVtYmVyKSA9PiB7XG4gICAgICAgIC8vICAgICAgICAgdGhpcy5zZXR1cFFzQnV0dG9ucyhxc1dpZHRoKTtcbiAgICAgICAgLy8gICAgIH0pO1xuXG4gICAgICAgIHRoaXMudXBkYXRlRm9ybUZpZWxkVmFsdWUodHJ1ZSk7XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGRlYnVnZ2VyO1xuICAgICAgICAgICAgaWYgKHRoaXMuUVNDb250ICYmXG4gICAgICAgICAgICAgICAgdGhpcy5RU0NvbnQubmF0aXZlRWxlbWVudCAmJlxuICAgICAgICAgICAgICAgIHRoaXMuUVNDb250Lm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGggPiAwXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dRc0J0biA9IHRoaXMuUVNDb250Lm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGggPiAxMjA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5jZFsnZGVzdHJveWVkJ10pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgMCk7XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdDaGVja2VkKCk6IHZvaWQge1xuICAgICAgICAvLyB0aGlzLnNldFFzVmlldygpO1xuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IGFueSk6IHZvaWQge1xuICAgICAgICAvLyBCdWcgZml4IGZvciBhZGRvbnMgd2hlbiB0aGUga2V5IGlzICcnIGluIHRoZSBuZ09uSW5pdCBmb3Igc29tZSByZXNvblxuICAgICAgICBpZiAodGhpcy5pc0VtcHR5S2V5ICYmIHRoaXMua2V5ICE9PSAnJykge1xuICAgICAgICAgICAgdGhpcy5zZXRGb3JtKCk7XG4gICAgICAgIH1cblxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNUb1RoZVNhbWVFbGVtZW50SW5UaGVXYW50ZWRSb3coKTtcbiAgICAgICAgfSwgMTUwKTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZGVzdHJveWVkLm5leHQoKTtcbiAgICAgICAgdGhpcy5fZGVzdHJveWVkLmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgZ2V0IGdldEFkZGl0aW9uYWxWYWx1ZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5hZGRpdGlvbmFsVmFsdWUubGVuZ3RoID4gMCA/ICdzaG93JyA6ICdoaWRlJztcbiAgICB9XG5cbiAgICBnZXRQYXJlbnRCeUNsYXNzKGVsLCBwYXJlbnRTZWxlY3RvciAvKiBvcHRpb25hbCAqLyk6IGFueSB7XG4gICAgICAgIC8vIElmIG5vIHBhcmVudFNlbGVjdG9yIGRlZmluZWQgd2lsbCBidWJibGUgdXAgYWxsIHRoZSB3YXkgdG8gKmRvY3VtZW50KlxuICAgICAgICBpZiAocGFyZW50U2VsZWN0b3IgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcGFyZW50U2VsZWN0b3IgPSBkb2N1bWVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBwID0gZWwucGFyZW50Tm9kZTtcblxuICAgICAgICB3aGlsZSAoXG4gICAgICAgICAgICBwICYmXG4gICAgICAgICAgICAhcD8uY2xhc3NMaXN0Py5jb250YWlucyhwYXJlbnRTZWxlY3RvcikgJiZcbiAgICAgICAgICAgIHBhcmVudFNlbGVjdG9yICE9PSBkb2N1bWVudFxuICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnN0IG8gPSBwO1xuICAgICAgICAgICAgcCA9IG8/LnBhcmVudE5vZGUgfHwgbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwPy5jbGFzc05hbWUuaW5kZXhPZihwYXJlbnRTZWxlY3RvcikgPiAtMSA/IHAgOiBudWxsO1xuICAgIH1cblxuICAgIGdldFNhbWVFbGVtZW50SW5UaGVXYW50ZWRSb3dCeUNsYXNzTmFtZShldmVudDogYW55LCBpc05leHQgPSB0cnVlKTogYW55IHtcbiAgICAgICAgY29uc3QgZXZlbnRUYXJnZXQgPSBldmVudC50YXJnZXQgfHwgZXZlbnQuc3JjRWxlbWVudDtcbiAgICAgICAgbGV0IHNhbWVFbGVtZW50SW5UaGVXYW50ZWRSb3dCeUNsYXNzTmFtZTtcblxuICAgICAgICBsZXQgcGFyZW50U2VsZWN0b3I7XG4gICAgICAgIGlmICh0aGlzLmxheW91dFR5cGUgPT09ICd0YWJsZScpIHtcbiAgICAgICAgICAgIHBhcmVudFNlbGVjdG9yID0gdGhpcy5nZXRQYXJlbnRCeUNsYXNzKGV2ZW50VGFyZ2V0LCAndGFibGUtcm93Jyk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5sYXlvdXRUeXBlID09PSAnY2FyZCcpIHtcbiAgICAgICAgICAgIHBhcmVudFNlbGVjdG9yID0gdGhpcy5nZXRQYXJlbnRCeUNsYXNzKGV2ZW50VGFyZ2V0LCAnY2FyZC12aWV3Jyk7XG4gICAgICAgICAgICBpZiAoIXBhcmVudFNlbGVjdG9yKSB7XG4gICAgICAgICAgICAgICAgcGFyZW50U2VsZWN0b3IgPSB0aGlzLmdldFBhcmVudEJ5Q2xhc3MoXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50VGFyZ2V0LFxuICAgICAgICAgICAgICAgICAgICAnbGluZS12aWV3J1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICBwYXJlbnRTZWxlY3Rvci5uZXh0RWxlbWVudFNpYmxpbmcgPT09IG51bGwgJiZcbiAgICAgICAgICAgIHBhcmVudFNlbGVjdG9yLnByZXZpb3VzRWxlbWVudFNpYmxpbmcgPT09IG51bGxcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBzYW1lRWxlbWVudEluVGhlV2FudGVkUm93QnlDbGFzc05hbWUgPSBudWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGlzTmV4dCkge1xuICAgICAgICAgICAgICAgIGlmIChwYXJlbnRTZWxlY3Rvci5uZXh0RWxlbWVudFNpYmxpbmcgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgc2FtZUVsZW1lbnRJblRoZVdhbnRlZFJvd0J5Q2xhc3NOYW1lID0gcGFyZW50U2VsZWN0b3IucGFyZW50RWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgICAgICAgICAgICAgICAgICAgJ1tuYW1lPScgKyB0aGlzLmtleSArICddJ1xuICAgICAgICAgICAgICAgICAgICApWzBdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHNhbWVFbGVtZW50SW5UaGVXYW50ZWRSb3dCeUNsYXNzTmFtZSA9IHBhcmVudFNlbGVjdG9yLm5leHRFbGVtZW50U2libGluZy5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgICAgICAgICAgICAgICAgICAgJ1tuYW1lPScgKyB0aGlzLmtleSArICddJ1xuICAgICAgICAgICAgICAgICAgICApWzBdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHBhcmVudFNlbGVjdG9yLnByZXZpb3VzRWxlbWVudFNpYmxpbmcgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZWxlbWVudHNMaXN0ID0gcGFyZW50U2VsZWN0b3IucGFyZW50RWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgICAgICAgICAgICAgICAgICAgJ1tuYW1lPScgKyB0aGlzLmtleSArICddJ1xuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBzYW1lRWxlbWVudEluVGhlV2FudGVkUm93QnlDbGFzc05hbWUgPVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudHNMaXN0W2VsZW1lbnRzTGlzdC5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzYW1lRWxlbWVudEluVGhlV2FudGVkUm93QnlDbGFzc05hbWUgPSBwYXJlbnRTZWxlY3Rvci5wcmV2aW91c0VsZW1lbnRTaWJsaW5nLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICAgICAgICAgICAgICAgICAgICAnW25hbWU9JyArIHRoaXMua2V5ICsgJ10nXG4gICAgICAgICAgICAgICAgICAgIClbMF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHNhbWVFbGVtZW50SW5UaGVXYW50ZWRSb3dCeUNsYXNzTmFtZTtcbiAgICB9XG5cbiAgICBzZXRTYW1lRWxlbWVudEluVGhlV2FudGVkUm93KGV2ZW50OiBhbnksIGlzTmV4dCA9IHRydWUpOiB2b2lkIHtcbiAgICAgICAgLy8gTmF2aWdhdGUgdG8gdGhlIFFTIGluIHRoZSBuZXh0IHJvdy5cbiAgICAgICAgaWYgKHRoaXMubGF5b3V0VHlwZSA9PT0gJ2NhcmQnIHx8IHRoaXMubGF5b3V0VHlwZSA9PT0gJ3RhYmxlJykge1xuICAgICAgICAgICAgdGhpcy5zYW1lRWxlbWVudEluVGhlV2FudGVkUm93ID0gdGhpcy5nZXRTYW1lRWxlbWVudEluVGhlV2FudGVkUm93QnlDbGFzc05hbWUoXG4gICAgICAgICAgICAgICAgZXZlbnQsXG4gICAgICAgICAgICAgICAgaXNOZXh0XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5RU0lucHV0Lm5hdGl2ZUVsZW1lbnQuYmx1cigpO1xuICAgIH1cblxuICAgIGZvY3VzVG9UaGVTYW1lRWxlbWVudEluVGhlV2FudGVkUm93KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zYW1lRWxlbWVudEluVGhlV2FudGVkUm93KSB7XG4gICAgICAgICAgICBjb25zdCBlbGVtID0gdGhpcy5zYW1lRWxlbWVudEluVGhlV2FudGVkUm93O1xuICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyByZWd1bGFyIGl0ZW0gKHFzIGFuZCBub3QgYnV0dG9uKSAuXG4gICAgICAgICAgICBpZiAoZWxlbSBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQgJiYgZWxlbS50eXBlID09PSAndGV4dCcpIHtcbiAgICAgICAgICAgICAgICBlbGVtLmNsaWNrKCk7XG4gICAgICAgICAgICAgICAgZWxlbS5zZWxlY3QoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyZW50RWxlbSA9IGVsZW0ucGFyZW50Tm9kZTtcbiAgICAgICAgICAgICAgICBwYXJlbnRFbGVtLmNsaWNrKCk7XG4gICAgICAgICAgICAgICAgZWxlbS5mb2N1cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zYW1lRWxlbWVudEluVGhlV2FudGVkUm93ID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsZWFuRXJyb3IoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGZpZWxkQ29udHJvbCA9IHRoaXMuZm9ybS5jb250cm9sc1t0aGlzLmtleV07XG5cbiAgICAgICAgLy8gQ2xlYW4gdGhlIGVycm9yIG1lc3NhZ2VcbiAgICAgICAgaWYgKHRoaXMubWVzc2FnZXMgJiYgdGhpcy5tZXNzYWdlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLm1lc3NhZ2VzID0gdGhpcy5ub3RpZmljYXRpb25JbmZvID0gbnVsbDtcbiAgICAgICAgICAgIGZpZWxkQ29udHJvbC5zZXRFcnJvcnMobnVsbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbk1hdHJpeE1vdXNlRW50ZXIoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLmlzTWF0cml4Rm9jdXMgPSB0cnVlO1xuICAgIH1cblxuICAgIG9uTWF0cml4TW91c2VsZWF2ZShldmVudDogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNNYXRyaXhGb2N1cyA9IGZhbHNlO1xuICAgIH1cblxuICAgIG9uTWF0cml4Q2xpY2soZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLmlzSW5Gb2N1cyA9IHRydWU7XG5cbiAgICAgICAgaWYgKHRoaXMuUVNJbnB1dCAmJiB0aGlzLlFTSW5wdXQubmF0aXZlRWxlbWVudCkge1xuICAgICAgICAgICAgdGhpcy5RU0lucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uTWF0cml4Qmx1cihldmVudDogYW55KTogdm9pZCB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICFldmVudC5yZWxhdGVkVGFyZ2V0IHx8XG4gICAgICAgICAgICBldmVudC5yZWxhdGVkVGFyZ2V0LmNsYXNzTmFtZS5pbmRleE9mKCdxcycpIDwgMFxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuaXNNYXRyaXhGb2N1cyA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5vbkJsdXIoZXZlbnQpO1xuICAgIH1cblxuICAgIG9uRm9jdXMoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLmlzSW5Gb2N1cyA9IHRydWU7XG5cbiAgICAgICAgLy8gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIC8vICAgICBpZiAodGhpcy5pc0luRm9jdXMpIHtcbiAgICAgICAgLy8gICAgICAgICBjb25zdCBldmVudFRhcmdldCA9IGV2ZW50LnRhcmdldCB8fCBldmVudC5zcmNFbGVtZW50O1xuICAgICAgICAvLyAgICAgICAgIGlmIChldmVudFRhcmdldCkge1xuICAgICAgICAvLyAgICAgICAgICAgICBldmVudFRhcmdldC5zZWxlY3QoKTtcbiAgICAgICAgLy8gICAgICAgICB9XG4gICAgICAgIC8vICAgICB9XG4gICAgICAgIC8vIH0sIDApO1xuICAgIH1cblxuICAgIGlzRGlmZmVyZW50VmFsdWUodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCByZXMgPSB0aGlzLnV0aWxpdGllc1NlcnZpY2UuaXNFcXVhbE51bWJlcih0aGlzLnZhbHVlQXNDdXJyZW50Q3VsdHVyZSwgdmFsdWUpID09PSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBvbkJsdXIoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLmlzSW5Gb2N1cyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNsZWFuRXJyb3IoKTtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBldmVudC50YXJnZXQgPyBldmVudC50YXJnZXQudmFsdWUgOiBldmVudDtcblxuICAgICAgICAvLyBGb3IgZGVjaW1hbCB3ZSBuZWVkIHRvIHJlcGxhY2UgdGhlIGRlY2ltYWwgc2VwYXJhdG9yIGJhY2sgaWYgaXQncyBjb21tYSAoJywnKS5cbiAgICAgICAgY29uc3QgY29ycmVjdFZhbHVlID0gdGhpcy5hbGxvd0RlY2ltYWwgPyB0aGlzLnV0aWxpdGllc1NlcnZpY2UuY2hhbmdlRGVjaW1hbFNlcGFyYXRvcldoZW5JdHNDb21tYSh2YWx1ZSkgOiB2YWx1ZTtcbiAgICAgICAgXG4gICAgICAgIGlmIChjb3JyZWN0VmFsdWUgIT09IHRoaXMudmFsdWVBc0N1cnJlbnRDdWx0dXJlICYmIHRoaXMuaXNEaWZmZXJlbnRWYWx1ZSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBjb3JyZWN0VmFsdWU7XG4gICAgICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy52YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIHRoaXMuZm9jdXNUb1RoZVNhbWVFbGVtZW50SW5UaGVXYW50ZWRSb3coKTtcbiAgICB9XG5cbiAgICBvbktleWRvd24oZXZlbnQpOiBhbnkge1xuICAgICAgICBjb25zdCBrZXlib2FyZEV2ZW50ID0gZXZlbnQgYXMgS2V5Ym9hcmRFdmVudDtcblxuICAgICAgICBpZiAoa2V5Ym9hcmRFdmVudC5rZXkgPT09ICdFbnRlcicpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0U2FtZUVsZW1lbnRJblRoZVdhbnRlZFJvdyhcbiAgICAgICAgICAgICAgICBrZXlib2FyZEV2ZW50LFxuICAgICAgICAgICAgICAgICFrZXlib2FyZEV2ZW50LnNoaWZ0S2V5XG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbmNyZW1lbnQoZXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuc3RhbmRBbG9uZSkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMudXRpbGl0aWVzU2VydmljZS5pbmNyZW1lbnROdW1iZXIodGhpcy52YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmVsZW1lbnRDbGljay5lbWl0KHtcbiAgICAgICAgICAgIGtleTogdGhpcy5rZXksXG4gICAgICAgICAgICB2YWx1ZTogUGVwUXVhbnRpdHlTZWxlY3RvckNvbXBvbmVudC5QTFVTLFxuICAgICAgICAgICAgY29udHJvbFR5cGU6IHRoaXMuY29udHJvbFR5cGUsXG4gICAgICAgICAgICBldmVudFdoaWNoOiBldmVudC53aGljaCxcbiAgICAgICAgfSk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cblxuICAgIGRlY3JlbWVudChldmVudCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zdGFuZEFsb25lKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy51dGlsaXRpZXNTZXJ2aWNlLmRlY3JlbWVudE51bWJlcih0aGlzLnZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZWxlbWVudENsaWNrLmVtaXQoe1xuICAgICAgICAgICAga2V5OiB0aGlzLmtleSxcbiAgICAgICAgICAgIHZhbHVlOiBQZXBRdWFudGl0eVNlbGVjdG9yQ29tcG9uZW50Lk1JTlVTLFxuICAgICAgICAgICAgY29udHJvbFR5cGU6IHRoaXMuY29udHJvbFR5cGUsXG4gICAgICAgICAgICBldmVudFdoaWNoOiBldmVudC53aGljaCxcbiAgICAgICAgfSk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cblxuICAgIGVudGVyQ2hpbGRyZW4oZXZlbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5lbGVtZW50Q2xpY2suZW1pdCh7XG4gICAgICAgICAgICBrZXk6IHRoaXMua2V5LFxuICAgICAgICAgICAgdmFsdWU6IFBlcFF1YW50aXR5U2VsZWN0b3JDb21wb25lbnQuRU5URVJfQ0hJTERSRU4sXG4gICAgICAgICAgICBjb250cm9sVHlwZTogdGhpcy5jb250cm9sVHlwZSxcbiAgICAgICAgICAgIGV2ZW50V2hpY2g6IGV2ZW50LndoaWNoLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBlbnRlclBhY2thZ2UoZXZlbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5lbGVtZW50Q2xpY2suZW1pdCh7XG4gICAgICAgICAgICBrZXk6IHRoaXMua2V5LFxuICAgICAgICAgICAgdmFsdWU6IFBlcFF1YW50aXR5U2VsZWN0b3JDb21wb25lbnQuRU5URVJfUEFDS0FHRSxcbiAgICAgICAgICAgIGNvbnRyb2xUeXBlOiB0aGlzLmNvbnRyb2xUeXBlLFxuICAgICAgICAgICAgZXZlbnRXaGljaDogZXZlbnQud2hpY2gsXG4gICAgICAgICAgICBvdGhlckRhdGE6IHRoaXMubm90aWZpY2F0aW9uSW5mbyxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gc2V0dXBRc0J1dHRvbnMocXNXaWR0aDogbnVtYmVyKSB7XG4gICAgLy8gICAgIHRoaXMuc2hvd1FzQnRuID0gcXNXaWR0aCA+IDEyMDtcblxuICAgIC8vICAgICBpZiAoIXRoaXMuY2RbJ2Rlc3Ryb3llZCddKSB7XG4gICAgLy8gICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgICAvLyAgICAgfVxuICAgIC8vIH1cblxuICAgIC8vIHNldFFzVmlldygpOiB2b2lkIHtcbiAgICAvLyAgICAgaWYgKFxuICAgIC8vICAgICAgICAgdGhpcy5RU0NvbnQgJiZcbiAgICAvLyAgICAgICAgIHRoaXMuUVNDb250Lm5hdGl2ZUVsZW1lbnQgJiZcbiAgICAvLyAgICAgICAgIHRoaXMuUVNDb250Lm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGggPiAwXG4gICAgLy8gICAgICkge1xuICAgIC8vICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgLy8gICAgICAgICAgICAgdGhpcy5xc1dpZHRoU3ViamVjdC5uZXh0KHRoaXMuUVNDb250Lm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGgpO1xuICAgIC8vICAgICAgICAgfSwgMCk7XG4gICAgLy8gICAgIH1cbiAgICAvLyB9XG59XG4iLCI8bmctY29udGFpbmVyIFtmb3JtR3JvdXBdPVwiZm9ybVwiPlxuICAgIDxuZy10ZW1wbGF0ZSAjcGVwVGVtcGxhdGU+XG4gICAgICAgIDxkaXYgI1FTQ29udCBjbGFzcz1cInBlcC1xdWFudGl0eS1zZWxlY3Rvci1jb250YWluZXIge3sgc3R5bGVUeXBlIH19XCIgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICdoaWRlLXFzLWFjdGlvbnMnIDogbGF5b3V0VHlwZSA9PT0gJ2NhcmQnICYmIHJvd1NwYW4gPD0gMSxcbiAgICAgICAgICAgICAgICAncGVwLXRhYmxlLXF1YW50aXR5LXNlbGVjdG9yJzogbGF5b3V0VHlwZSA9PT0gJ3RhYmxlJyxcbiAgICAgICAgICAgICAgICAnb25lLXJvdyc6IHJvd1NwYW4gPT09IDEsXG4gICAgICAgICAgICAgICAgY2F1dGlvbjogaXNDYXV0aW9uLFxuICAgICAgICAgICAgICAgICdtYXRyaXgtcXMnOiB0eXBlID09PSAncXNGb3JNYXRyaXgnLFxuICAgICAgICAgICAgICAgICd6ZXJvLXF1YW50aXR5JzogZm9ybWF0dGVkVmFsdWUgPT09ICcwJ1xuICAgICAgICAgICAgfVwiPlxuICAgICAgICAgICAgPHBlcC1maWVsZC10aXRsZSAqbmdJZj1cInJlbmRlclRpdGxlICYmIGxheW91dFR5cGUgIT09ICd0YWJsZScgJiYgbGF5b3V0VHlwZSAhPT0gJ2NhcmQnXCIgW2xhYmVsXT1cImxhYmVsXCJcbiAgICAgICAgICAgICAgICBbbWFuZGF0b3J5XT1cIm1hbmRhdG9yeVwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiIFtzaG93VGl0bGVdPVwic2hvd1RpdGxlXCIgW3hBbGlnbm1lbnRdPVwieEFsaWdubWVudFwiPlxuICAgICAgICAgICAgPC9wZXAtZmllbGQtdGl0bGU+XG5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0eXBlID09ICdxcydcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicmVhZG9ubHk7IHRoZW4gcmVhZG9ubHlCbG9jazsgZWxzZSBlZGl0YWJsZVFTQmxvY2tcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3JlYWRvbmx5QmxvY2s+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gW2lkXT1cImtleVwiIG1hdC1idXR0b24gY2xhc3M9XCJwZXAtYnV0dG9uIHt7IHN0eWxlVHlwZSB9fSBkaXNhYmxlIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7Y2F1dGlvbjogaXNDYXV0aW9uLCBtZDogcm93U3BhbiAhPT0gMSwgeHM6IHJvd1NwYW4gPT09IDF9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPVwie3sgZm9ybWF0dGVkVmFsdWUgfX1cIiBkaXNhYmxlZD1cInRydWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZWxsaXBzaXNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBmb3JtYXR0ZWRWYWx1ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZWRpdGFibGVRU0Jsb2NrPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBwZXBRc1ZhbGlkYXRpb24gW2FsbG93RGVjaW1hbF09XCJhbGxvd0RlY2ltYWxcIiB0eXBlPVwiZGVjaW1hbE51bWJlclwiIGlucHV0bW9kZT1cImRlY2ltYWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdElucHV0ICNRU0lucHV0IG5hbWU9XCJ7eyBrZXkgfX1cIiBjbGFzcz1cImJvZHktbGcgZWxsaXBzaXNcIiB0aXRsZT1cInt7IGZvcm1hdHRlZFZhbHVlIH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIiBbaWRdPVwia2V5XCIgW2Zvcm1Db250cm9sTmFtZV09XCJrZXlcIiBbdmFsdWVdPVwiZGlzcGxheVZhbHVlJCB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnRhcmdldC5zZXRTZWxlY3Rpb25SYW5nZSgwLCA5OTkpXCIgKGtleWRvd24pPVwib25LZXlkb3duKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChibHVyKT1cIm9uQmx1cigkZXZlbnQpXCIgKGZvY3VzKT1cIm9uRm9jdXMoJGV2ZW50KVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwic2hvd1FzQnRuXCIgbWF0LWJ1dHRvbiBtYXRQcmVmaXggKGNsaWNrKT1cImRlY3JlbWVudCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInBlcC1idXR0b24gaWNvbi1idXR0b24gc20gd2VhayBxcy1hY3Rpb25cIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiBbbmdDbGFzc109XCJ7IGRpc2FibGU6IGRpc2FibGVkLCBjYXV0aW9uOiBpc0NhdXRpb24gJiYgc3R5bGVUeXBlICE9PSAnc3Ryb25nJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2tlZXAtYmFja2dyb3VuZC1vbi1mb2N1cyc6IHN0eWxlVHlwZSA9PT0gJ3N0cm9uZyd9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGVwLWljb24gbmFtZT1cIm51bWJlcl9taW51c1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BlcC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJzaG93UXNCdG5cIiBtYXQtYnV0dG9uIG1hdFN1ZmZpeCAoY2xpY2spPVwiaW5jcmVtZW50KCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicGVwLWJ1dHRvbiBpY29uLWJ1dHRvbiBzbSB3ZWFrIHFzLWFjdGlvblwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiIFtuZ0NsYXNzXT1cInsgZGlzYWJsZTogZGlzYWJsZWQsIGNhdXRpb246IGlzQ2F1dGlvbiAmJiBzdHlsZVR5cGUgIT09ICdzdHJvbmcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAna2VlcC1iYWNrZ3JvdW5kLW9uLWZvY3VzJzogc3R5bGVUeXBlID09PSAnc3Ryb25nJ31cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwZXAtaWNvbiBuYW1lPVwibnVtYmVyX3BsdXNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wZXAtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwibWVzc2FnZXM/Lmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInFzLWVycm9yIGJvZHkteHNcIiAqbmdGb3I9XCJsZXQgbXNnIG9mIG1lc3NhZ2VzXCI+IHt7IG1zZy5LZXkgfCB0cmFuc2xhdGUgfX0gOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBtc2cuVmFsdWUgfX0gPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidHlwZSA9PSAncXNGb3JNYXRyaXgnXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInJlYWRvbmx5OyB0aGVuIHJlYWRvbmx5QmxvY2s7IGVsc2UgZWRpdGFibGVRU0Jsb2NrXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNyZWFkb25seUJsb2NrPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIFtpZF09XCJrZXlcIiBtYXQtYnV0dG9uIGNsYXNzPVwicGVwLWJ1dHRvbiB7eyBzdHlsZVR5cGUgfX0gZGlzYWJsZVwiIGRpc2FibGVkPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7Y2F1dGlvbjogaXNDYXV0aW9uLCBtZDogcm93U3BhbiAhPT0gMSwgeHM6IHJvd1NwYW4gPT09IDF9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBYXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNlZGl0YWJsZVFTQmxvY2s+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIHhBbGlnbm1lbnQ9PSdyaWdodCdcIiBjbGFzcz1cIiBib2R5LXNtIGFkZGl0aW9uYWwtdmFsdWUgcHJlZml4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdEJhZGdlPVwie3sgYWRkaXRpb25hbFZhbHVlIH19XCIgbWF0QmFkZ2VQb3NpdGlvbj1cImJlZm9yZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRCYWRnZVNpemU9XCJyb3dTcGFuID09PSAxID8gc21hbGwgOiBtZWRpdW1cIiBbQHNob3dIaWRlXT1cImdldEFkZGl0aW9uYWxWYWx1ZVwiPjwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiAobW91c2VsZWF2ZSk9XCIhaXNJbkZvY3VzID8gb25NYXRyaXhNb3VzZWxlYXZlKCRldmVudCkgOiBudWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgcGVwUXNWYWxpZGF0aW9uIFthbGxvd0RlY2ltYWxdPVwiYWxsb3dEZWNpbWFsXCIgdHlwZT1cImRlY2ltYWxOdW1iZXJcIiBpbnB1dG1vZGU9XCJkZWNpbWFsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRJbnB1dCAjUVNJbnB1dCBuYW1lPVwie3sga2V5IH19XCIgdGl0bGU9XCJ7eyBmb3JtYXR0ZWRWYWx1ZSB9fVwiIGNsYXNzPVwiYm9keS1zbSBlbGxpcHNpc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCIgW2lkXT1cImtleVwiIFtmb3JtQ29udHJvbE5hbWVdPVwia2V5XCIgW3ZhbHVlXT1cImRpc3BsYXlWYWx1ZSQgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uTWF0cml4Q2xpY2soJGV2ZW50KTsgJGV2ZW50LnRhcmdldC5zZXRTZWxlY3Rpb25SYW5nZSgwLCA5OTkpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJvbktleWRvd24oJGV2ZW50KVwiIChibHVyKT1cIm9uTWF0cml4Qmx1cigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZm9jdXMpPVwib25NYXRyaXhNb3VzZUVudGVyKCRldmVudCk7IG9uRm9jdXMoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwib25NYXRyaXhNb3VzZUVudGVyKCRldmVudClcIiAvPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwibWVzc2FnZXM/Lmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInFzLWVycm9yIGJvZHkteHNcIiAqbmdGb3I9XCJsZXQgbXNnIG9mIG1lc3NhZ2VzXCI+IHt7IG1zZy5LZXkgfCB0cmFuc2xhdGUgfX0gOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBtc2cuVmFsdWUgfX0gPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ4QWxpZ25tZW50ICE9ICdyaWdodCdcIiBjbGFzcz1cImJvZHktc20gYWRkaXRpb25hbC12YWx1ZSBzdWZmaXhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0QmFkZ2U9XCJ7eyBhZGRpdGlvbmFsVmFsdWUgfX1cIiBtYXRCYWRnZVBvc2l0aW9uPVwiYmVmb3JlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdEJhZGdlU2l6ZT1cInJvd1NwYW4gPT09IDEgPyBzbWFsbCA6IG1lZGl1bVwiIFtAc2hvd0hpZGVdPVwiZ2V0QWRkaXRpb25hbFZhbHVlXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInR5cGUgPT0gJ2J1dHRvbidcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiKHZhbHVlIHwgcGVwVG9OdW1iZXIpID09IDA7IHRoZW4gcmVndWxhckJsb2NrOyBlbHNlIHdpdGhCYWRnZUJsb2NrXCI+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNyZWd1bGFyQmxvY2s+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiBjbGFzcz1cInBlcC1idXR0b24ge3sgc3R5bGVUeXBlIH19IFwiIFtpZF09XCJrZXlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cInt7IGtleSB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7IGRpc2FibGU6IGRpc2FibGVkLCBjYXV0aW9uOiBpc0NhdXRpb24sIG1kOiByb3dTcGFuICE9PSAxLCB4czogcm93U3BhbiA9PT0gMX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIidRUy5PUkRFUicgfCB0cmFuc2xhdGVcIiAoY2xpY2spPVwiZW50ZXJDaGlsZHJlbigkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImVsbGlwc2lzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJ1FTLk9SREVSJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjd2l0aEJhZGdlQmxvY2s+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiBtYXRCYWRnZT1cInt7IGZvcm1hdHRlZFZhbHVlIH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdEJhZGdlUG9zaXRpb249XCJ7e3hBbGlnbm1lbnQgPT0gJ3JpZ2h0JyA/ICdiZWZvcmUnIDogJ2FmdGVyJ319XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFttYXRCYWRnZVNpemVdPVwibGF5b3V0VHlwZSA9PT0gJ2NhcmQnICYmIHJvd1NwYW4gPT09IDEgPyAnc21hbGwnIDogJ21lZGl1bSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwZXAtYnV0dG9uIHt7IHN0eWxlVHlwZSB9fSBcIiBbaWRdPVwia2V5XCIgbmFtZT1cInt7IGtleSB9fVwiIFtuZ0NsYXNzXT1cInsgZGlzYWJsZTogZGlzYWJsZWQsIGNhdXRpb246IGlzQ2F1dGlvbiwgbWQ6IHJvd1NwYW4gIT09IDEsIHhzOiByb3dTcGFuID09PSAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyaWdodC1hbGlnbm1lbnQnOiB4QWxpZ25tZW50ID09ICdyaWdodCcsICdsZWZ0LWFsaWdubWVudCc6IHhBbGlnbm1lbnQgIT0gJ3JpZ2h0J31cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIidRUy5PUkRFUicgfCB0cmFuc2xhdGVcIiAoY2xpY2spPVwiZW50ZXJDaGlsZHJlbigkZXZlbnQpXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImVsbGlwc2lzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJ1FTLk9SREVSJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidHlwZSA9PSAncGFja2FnZUJ1dHRvbidcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gY2xhc3M9XCJwZXAtYnV0dG9uIHt7IHN0eWxlVHlwZSB9fSBcIiBbaWRdPVwia2V5XCIgbmFtZT1cInt7IGtleSB9fVwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgZGlzYWJsZTogZGlzYWJsZWQsIGNhdXRpb246IGlzQ2F1dGlvbiwgbWQ6IHJvd1NwYW4gIT09IDEsIHhzOiByb3dTcGFuID09PSAxfVwiXG4gICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCInUVMuT1JERVInIHwgdHJhbnNsYXRlXCIgKGNsaWNrKT1cImVudGVyUGFja2FnZSgkZXZlbnQpXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZWxsaXBzaXNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdRUy5PUkRFUicgfCB0cmFuc2xhdGUgfX0gJiM0MDt7eyBmb3JtYXR0ZWRWYWx1ZSB9fSYjNDE7XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxheW91dFR5cGUgPT09ICdmb3JtJ1wiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicGVwVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJsYXlvdXRUeXBlID09PSAnY2FyZCdcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInBlcFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibGF5b3V0VHlwZSA9PT0gJ3RhYmxlJ1wiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicGVwVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbjwvbmctY29udGFpbmVyPiJdfQ==
@@ -120,10 +120,10 @@ export class PepSelectPanelComponent {
120
120
  }
121
121
  }
122
122
  PepSelectPanelComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: PepSelectPanelComponent, deps: [{ token: i0.Renderer2 }, { token: i1.PepCustomizationService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
123
- PepSelectPanelComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.2", type: PepSelectPanelComponent, selector: "pep-select-panel", inputs: { form: "form", layoutType: "layoutType", xAlignment: "xAlignment", renderTitle: "renderTitle", showTitle: "showTitle", label: "label", mandatory: "mandatory", disabled: "disabled", classNames: "classNames", isMultiSelect: "isMultiSelect", numOfCol: "numOfCol", value: "value", options: "options" }, outputs: { valueChange: "valueChange" }, viewQueries: [{ propertyName: "selectPanel", first: true, predicate: ["selectPanel"], descendants: true, static: true }], ngImport: i0, template: "<ng-container [formGroup]=\"form\">\n <pep-field-title *ngIf=\"renderTitle\" \n [label]=\"label\" \n [mandatory]=\"mandatory\"\n [disabled]=\"disabled\" \n [xAlignment]=\"xAlignment\" \n [showTitle]=\"showTitle\">\n </pep-field-title>\n <div #selectPanel class=\"select-panel\" [ngClass]=\"{'disable': disabled }\">\n <div class=\"optCont\" [title]=\"option.value\" *ngFor=\"let option of optionsMap\">\n <ng-container *ngTemplateOutlet=\"isMultiSelect == true ? multiBlock : singleBlock; context: { option }\"></ng-container>\n </div>\n </div>\n</ng-container>\n\n <ng-template #singleBlock let-option=\"option\">\n <mat-radio-button \n [name]=\"groupName\"\n [class]=\"'pep-radio-button md'\" \n [disabled]=\"disabled\"\n [checked]=\"option?.isChecked\"\n (change)=\"selectionChange(option, $event)\">\n {{option.value}}\n </mat-radio-button>\n </ng-template>\n\n <ng-template #multiBlock let-option=\"option\">\n <mat-checkbox\n [name]=\"groupName\"\n [class]=\"'md'\"\n [disabled]=\"disabled\" \n [checked]=\"option.isChecked\"\n (change)=\"selectionChange(option, $event)\">\n {{option.value}}\n </mat-checkbox>\n </ng-template>\n\n\n\n\n", styles: [":host{display:flex;flex-direction:column;max-width:100%;overflow:hidden}.select-panel{width:inherit;padding:var(--pep-spacing-md, .75rem);font-size:var(--pep-font-size-sm, .875rem);line-height:var(--pep-line-height-md, 1.25rem);border-radius:var(--pep-border-radius-md, .25rem);display:inline-block;white-space:nowrap}.select-panel .optCont{height:2rem;width:100%;line-height:2rem;align-items:center}.select-panel .optCont label{height:var(--pep-line-height-md, 1.25rem)}.select-panel .optCont ::ng-deep .mat-radio-button{display:block!important}.select-panel .optCont ::ng-deep .mat-radio-button .mat-radio-label-content{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.select-panel .optCont ::ng-deep .mat-radio-button .mat-radio-ripple{position:unset!important}.select-panel .optCont ::ng-deep .mat-checkbox-layout{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.select-panel .optCont:last-child{margin-bottom:0}\n", ".select-panel{background:hsla(var(--pep-color-weak-h, 0),var(--pep-color-weak-s, 0%),var(--pep-color-weak-l, 10%),.12)}.select-panel.disable:not(.ignore-disabled),.select-panel:disabled:not(.ignore-disabled){box-shadow:unset;border:unset;color:hsla(var(--pep-color-system-primary-h, 0),var(--pep-color-system-primary-s, 0%),var(--pep-color-system-primary-l, 10%),.35)!important;background:hsla(var(--pep-color-weak-h, 0),var(--pep-color-weak-s, 0%),var(--pep-color-weak-l, 10%),.04)!important}.select-panel.disable:not(.ignore-disabled):after,.select-panel:disabled:not(.ignore-disabled):after{border:unset}.select-panel.disable:not(.ignore-disabled) .svg-icon,.select-panel:disabled:not(.ignore-disabled) .svg-icon{fill:hsla(var(--pep-color-system-primary-h, 0),var(--pep-color-system-primary-s, 0%),var(--pep-color-system-primary-l, 10%),.35)}.select-panel.disable:not(.ignore-disabled) .svg-icon.stroke,.select-panel:disabled:not(.ignore-disabled) .svg-icon.stroke{fill:unset;stroke:hsla(var(--pep-color-system-primary-h, 0),var(--pep-color-system-primary-s, 0%),var(--pep-color-system-primary-l, 10%),.35)}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i4.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "component", type: i5.MatRadioButton, selector: "mat-radio-button", inputs: ["disableRipple", "tabIndex"], exportAs: ["matRadioButton"] }, { kind: "component", type: i6.PepFieldTitleComponent, selector: "pep-field-title", inputs: ["label", "mandatory", "disabled", "maxFieldCharacters", "hint", "xAlignment", "showTitle", "inputLength", "fontBodyType"] }] });
123
+ PepSelectPanelComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.2", type: PepSelectPanelComponent, selector: "pep-select-panel", inputs: { form: "form", layoutType: "layoutType", xAlignment: "xAlignment", renderTitle: "renderTitle", showTitle: "showTitle", label: "label", mandatory: "mandatory", disabled: "disabled", classNames: "classNames", isMultiSelect: "isMultiSelect", numOfCol: "numOfCol", value: "value", options: "options" }, outputs: { valueChange: "valueChange" }, viewQueries: [{ propertyName: "selectPanel", first: true, predicate: ["selectPanel"], descendants: true, static: true }], ngImport: i0, template: "<ng-container [formGroup]=\"form\">\n <pep-field-title *ngIf=\"renderTitle\" \n [label]=\"label\" \n [mandatory]=\"mandatory\"\n [disabled]=\"disabled\" \n [xAlignment]=\"xAlignment\" \n [showTitle]=\"showTitle\">\n </pep-field-title>\n <div #selectPanel class=\"select-panel\" [ngClass]=\"{'disable': disabled }\">\n <div class=\"optCont\" [title]=\"option.value\" *ngFor=\"let option of optionsMap\">\n <ng-container *ngTemplateOutlet=\"isMultiSelect == true ? multiBlock : singleBlock; context: { option }\"></ng-container>\n </div>\n </div>\n</ng-container>\n\n <ng-template #singleBlock let-option=\"option\">\n <mat-radio-button \n [name]=\"groupName\"\n [class]=\"'pep-radio-button md'\" \n [disabled]=\"disabled\"\n [checked]=\"option?.isChecked\"\n (change)=\"selectionChange(option, $event)\">\n {{option.value}}\n </mat-radio-button>\n </ng-template>\n\n <ng-template #multiBlock let-option=\"option\">\n <mat-checkbox\n [name]=\"groupName\"\n [class]=\"'md'\"\n [disabled]=\"disabled\" \n [checked]=\"option.isChecked\"\n (change)=\"selectionChange(option, $event)\">\n {{option.value}}\n </mat-checkbox>\n </ng-template>\n\n\n\n\n", styles: [":host{display:flex;flex-direction:column;max-width:100%;overflow:hidden}.select-panel{width:inherit;padding:var(--pep-spacing-md, .75rem);font-size:var(--pep-font-size-sm, .875rem);line-height:var(--pep-line-height-md, 1.25rem);border-radius:var(--pep-border-radius-md, .25rem);display:inline-block;white-space:nowrap}.select-panel .optCont{height:2rem;width:100%;line-height:2rem;align-items:center}.select-panel .optCont label{height:var(--pep-line-height-md, 1.25rem)}.select-panel .optCont ::ng-deep .mat-radio-button{display:block!important}.select-panel .optCont ::ng-deep .mat-radio-button .mat-radio-label-content{text-overflow:ellipsis;overflow:hidden;white-space:nowrap;padding-inline-start:var(--pep-spacing-sm, .5rem);padding-inline-end:0}.select-panel .optCont ::ng-deep .mat-radio-button .mat-radio-ripple{position:unset!important}.select-panel .optCont ::ng-deep .mat-checkbox-layout{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.select-panel .optCont ::ng-deep .mat-checkbox-layout .mat-checkbox-inner-container{margin-inline:0 var(--pep-spacing-sm, .5rem)}.select-panel .optCont:last-child{margin-bottom:0}\n", ".select-panel{background:hsla(var(--pep-color-weak-h, 0),var(--pep-color-weak-s, 0%),var(--pep-color-weak-l, 10%),.12)}.select-panel.disable:not(.ignore-disabled),.select-panel:disabled:not(.ignore-disabled){box-shadow:unset;border:unset;color:hsla(var(--pep-color-system-primary-h, 0),var(--pep-color-system-primary-s, 0%),var(--pep-color-system-primary-l, 10%),.35)!important;background:hsla(var(--pep-color-weak-h, 0),var(--pep-color-weak-s, 0%),var(--pep-color-weak-l, 10%),.04)!important}.select-panel.disable:not(.ignore-disabled):after,.select-panel:disabled:not(.ignore-disabled):after{border:unset}.select-panel.disable:not(.ignore-disabled) .svg-icon,.select-panel:disabled:not(.ignore-disabled) .svg-icon{fill:hsla(var(--pep-color-system-primary-h, 0),var(--pep-color-system-primary-s, 0%),var(--pep-color-system-primary-l, 10%),.35)}.select-panel.disable:not(.ignore-disabled) .svg-icon.stroke,.select-panel:disabled:not(.ignore-disabled) .svg-icon.stroke{fill:unset;stroke:hsla(var(--pep-color-system-primary-h, 0),var(--pep-color-system-primary-s, 0%),var(--pep-color-system-primary-l, 10%),.35)}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i4.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "component", type: i5.MatRadioButton, selector: "mat-radio-button", inputs: ["disableRipple", "tabIndex"], exportAs: ["matRadioButton"] }, { kind: "component", type: i6.PepFieldTitleComponent, selector: "pep-field-title", inputs: ["label", "mandatory", "disabled", "maxFieldCharacters", "hint", "xAlignment", "showTitle", "inputLength", "fontBodyType"] }] });
124
124
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: PepSelectPanelComponent, decorators: [{
125
125
  type: Component,
126
- args: [{ selector: 'pep-select-panel', template: "<ng-container [formGroup]=\"form\">\n <pep-field-title *ngIf=\"renderTitle\" \n [label]=\"label\" \n [mandatory]=\"mandatory\"\n [disabled]=\"disabled\" \n [xAlignment]=\"xAlignment\" \n [showTitle]=\"showTitle\">\n </pep-field-title>\n <div #selectPanel class=\"select-panel\" [ngClass]=\"{'disable': disabled }\">\n <div class=\"optCont\" [title]=\"option.value\" *ngFor=\"let option of optionsMap\">\n <ng-container *ngTemplateOutlet=\"isMultiSelect == true ? multiBlock : singleBlock; context: { option }\"></ng-container>\n </div>\n </div>\n</ng-container>\n\n <ng-template #singleBlock let-option=\"option\">\n <mat-radio-button \n [name]=\"groupName\"\n [class]=\"'pep-radio-button md'\" \n [disabled]=\"disabled\"\n [checked]=\"option?.isChecked\"\n (change)=\"selectionChange(option, $event)\">\n {{option.value}}\n </mat-radio-button>\n </ng-template>\n\n <ng-template #multiBlock let-option=\"option\">\n <mat-checkbox\n [name]=\"groupName\"\n [class]=\"'md'\"\n [disabled]=\"disabled\" \n [checked]=\"option.isChecked\"\n (change)=\"selectionChange(option, $event)\">\n {{option.value}}\n </mat-checkbox>\n </ng-template>\n\n\n\n\n", styles: [":host{display:flex;flex-direction:column;max-width:100%;overflow:hidden}.select-panel{width:inherit;padding:var(--pep-spacing-md, .75rem);font-size:var(--pep-font-size-sm, .875rem);line-height:var(--pep-line-height-md, 1.25rem);border-radius:var(--pep-border-radius-md, .25rem);display:inline-block;white-space:nowrap}.select-panel .optCont{height:2rem;width:100%;line-height:2rem;align-items:center}.select-panel .optCont label{height:var(--pep-line-height-md, 1.25rem)}.select-panel .optCont ::ng-deep .mat-radio-button{display:block!important}.select-panel .optCont ::ng-deep .mat-radio-button .mat-radio-label-content{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.select-panel .optCont ::ng-deep .mat-radio-button .mat-radio-ripple{position:unset!important}.select-panel .optCont ::ng-deep .mat-checkbox-layout{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.select-panel .optCont:last-child{margin-bottom:0}\n", ".select-panel{background:hsla(var(--pep-color-weak-h, 0),var(--pep-color-weak-s, 0%),var(--pep-color-weak-l, 10%),.12)}.select-panel.disable:not(.ignore-disabled),.select-panel:disabled:not(.ignore-disabled){box-shadow:unset;border:unset;color:hsla(var(--pep-color-system-primary-h, 0),var(--pep-color-system-primary-s, 0%),var(--pep-color-system-primary-l, 10%),.35)!important;background:hsla(var(--pep-color-weak-h, 0),var(--pep-color-weak-s, 0%),var(--pep-color-weak-l, 10%),.04)!important}.select-panel.disable:not(.ignore-disabled):after,.select-panel:disabled:not(.ignore-disabled):after{border:unset}.select-panel.disable:not(.ignore-disabled) .svg-icon,.select-panel:disabled:not(.ignore-disabled) .svg-icon{fill:hsla(var(--pep-color-system-primary-h, 0),var(--pep-color-system-primary-s, 0%),var(--pep-color-system-primary-l, 10%),.35)}.select-panel.disable:not(.ignore-disabled) .svg-icon.stroke,.select-panel:disabled:not(.ignore-disabled) .svg-icon.stroke{fill:unset;stroke:hsla(var(--pep-color-system-primary-h, 0),var(--pep-color-system-primary-s, 0%),var(--pep-color-system-primary-l, 10%),.35)}\n"] }]
126
+ args: [{ selector: 'pep-select-panel', template: "<ng-container [formGroup]=\"form\">\n <pep-field-title *ngIf=\"renderTitle\" \n [label]=\"label\" \n [mandatory]=\"mandatory\"\n [disabled]=\"disabled\" \n [xAlignment]=\"xAlignment\" \n [showTitle]=\"showTitle\">\n </pep-field-title>\n <div #selectPanel class=\"select-panel\" [ngClass]=\"{'disable': disabled }\">\n <div class=\"optCont\" [title]=\"option.value\" *ngFor=\"let option of optionsMap\">\n <ng-container *ngTemplateOutlet=\"isMultiSelect == true ? multiBlock : singleBlock; context: { option }\"></ng-container>\n </div>\n </div>\n</ng-container>\n\n <ng-template #singleBlock let-option=\"option\">\n <mat-radio-button \n [name]=\"groupName\"\n [class]=\"'pep-radio-button md'\" \n [disabled]=\"disabled\"\n [checked]=\"option?.isChecked\"\n (change)=\"selectionChange(option, $event)\">\n {{option.value}}\n </mat-radio-button>\n </ng-template>\n\n <ng-template #multiBlock let-option=\"option\">\n <mat-checkbox\n [name]=\"groupName\"\n [class]=\"'md'\"\n [disabled]=\"disabled\" \n [checked]=\"option.isChecked\"\n (change)=\"selectionChange(option, $event)\">\n {{option.value}}\n </mat-checkbox>\n </ng-template>\n\n\n\n\n", styles: [":host{display:flex;flex-direction:column;max-width:100%;overflow:hidden}.select-panel{width:inherit;padding:var(--pep-spacing-md, .75rem);font-size:var(--pep-font-size-sm, .875rem);line-height:var(--pep-line-height-md, 1.25rem);border-radius:var(--pep-border-radius-md, .25rem);display:inline-block;white-space:nowrap}.select-panel .optCont{height:2rem;width:100%;line-height:2rem;align-items:center}.select-panel .optCont label{height:var(--pep-line-height-md, 1.25rem)}.select-panel .optCont ::ng-deep .mat-radio-button{display:block!important}.select-panel .optCont ::ng-deep .mat-radio-button .mat-radio-label-content{text-overflow:ellipsis;overflow:hidden;white-space:nowrap;padding-inline-start:var(--pep-spacing-sm, .5rem);padding-inline-end:0}.select-panel .optCont ::ng-deep .mat-radio-button .mat-radio-ripple{position:unset!important}.select-panel .optCont ::ng-deep .mat-checkbox-layout{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.select-panel .optCont ::ng-deep .mat-checkbox-layout .mat-checkbox-inner-container{margin-inline:0 var(--pep-spacing-sm, .5rem)}.select-panel .optCont:last-child{margin-bottom:0}\n", ".select-panel{background:hsla(var(--pep-color-weak-h, 0),var(--pep-color-weak-s, 0%),var(--pep-color-weak-l, 10%),.12)}.select-panel.disable:not(.ignore-disabled),.select-panel:disabled:not(.ignore-disabled){box-shadow:unset;border:unset;color:hsla(var(--pep-color-system-primary-h, 0),var(--pep-color-system-primary-s, 0%),var(--pep-color-system-primary-l, 10%),.35)!important;background:hsla(var(--pep-color-weak-h, 0),var(--pep-color-weak-s, 0%),var(--pep-color-weak-l, 10%),.04)!important}.select-panel.disable:not(.ignore-disabled):after,.select-panel:disabled:not(.ignore-disabled):after{border:unset}.select-panel.disable:not(.ignore-disabled) .svg-icon,.select-panel:disabled:not(.ignore-disabled) .svg-icon{fill:hsla(var(--pep-color-system-primary-h, 0),var(--pep-color-system-primary-s, 0%),var(--pep-color-system-primary-l, 10%),.35)}.select-panel.disable:not(.ignore-disabled) .svg-icon.stroke,.select-panel:disabled:not(.ignore-disabled) .svg-icon.stroke{fill:unset;stroke:hsla(var(--pep-color-system-primary-h, 0),var(--pep-color-system-primary-s, 0%),var(--pep-color-system-primary-l, 10%),.35)}\n"] }]
127
127
  }], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: i1.PepCustomizationService }, { type: i0.ElementRef }]; }, propDecorators: { form: [{
128
128
  type: Input
129
129
  }], layoutType: [{
@@ -162,6 +162,10 @@ class PepDialogService {
162
162
  this.fixConfigIfNeeded(data, config);
163
163
  config.data = data;
164
164
  const dialogRef = this.dialog.open(PepDefaultDialogComponent, config);
165
+ this.fixMultiDialogsPos();
166
+ dialogRef.afterClosed().subscribe(result => {
167
+ this.fixMultiDialogsPos();
168
+ });
165
169
  return dialogRef;
166
170
  }
167
171
  openDialog(componentOrTemplateRef, data = {}, config = null) {
@@ -172,8 +176,25 @@ class PepDialogService {
172
176
  this.fixConfigIfNeeded(tmpConfig, config);
173
177
  config.data = data;
174
178
  const dialogRef = this.dialog.open(componentOrTemplateRef, config);
179
+ this.fixMultiDialogsPos();
180
+ dialogRef.afterClosed().subscribe(result => {
181
+ this.fixMultiDialogsPos();
182
+ });
175
183
  return dialogRef;
176
184
  }
185
+ fixMultiDialogsPos() {
186
+ // checking if have more than one open dialog on page
187
+ // if true set the position of each dialog.
188
+ var elements = document.getElementsByClassName('pep-dialog');
189
+ if (elements === null || elements === void 0 ? void 0 : elements.length) {
190
+ var index = 0;
191
+ for (let i = elements.length - 1; i >= 0; i--) {
192
+ let element = elements[i];
193
+ element.style.transform = "translate(-" + (index) + "rem,-" + (index) + "rem)";
194
+ index += 1;
195
+ }
196
+ }
197
+ }
177
198
  }
178
199
  PepDialogService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: PepDialogService, deps: [{ token: i1.MatDialog }, { token: i2$2.PepLayoutService }, { token: i3$1.Overlay }], target: i0.ɵɵFactoryTarget.Injectable });
179
200
  PepDialogService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: PepDialogService, providedIn: 'root' });