@pepperi-addons/ngx-lib 0.4.2-beta.107 → 0.4.2-beta.109

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.
@@ -126,10 +126,10 @@ export class PepCheckboxComponent {
126
126
  }
127
127
  }
128
128
  PepCheckboxComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: PepCheckboxComponent, deps: [{ token: i0.Renderer2 }, { token: i1.PepCustomizationService }, { token: i0.ElementRef }, { token: i2.TranslateService }], target: i0.ɵɵFactoryTarget.Component });
129
- PepCheckboxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.2", type: PepCheckboxComponent, selector: "pep-checkbox", inputs: { key: "key", value: "value", label: "label", type: "type", mandatory: "mandatory", disabled: "disabled", readonly: "readonly", xAlignment: "xAlignment", rowSpan: "rowSpan", additionalValue: "additionalValue", form: "form", isActive: "isActive", showTitle: "showTitle", renderTitle: "renderTitle", layoutType: "layoutType", visible: "visible" }, outputs: { valueChange: "valueChange" }, usesOnChanges: true, ngImport: i0, template: "<ng-container [formGroup]=\"form\">\n <ng-template #pepTemplate>\n <div class=\"pep-checkbox-container pep-input\" [ngClass]=\"{\n 'disable': disabled,\n 'pep-report-checkbox': layoutType === 'table' && !isActive,\n 'pep-card-checkbox': layoutType === 'card',\n 'one-row': rowSpan === 1,\n 'no-title': label.length == 0,\n 'right-alignment pull-right flip': xAlignment == 'right',\n 'center-alignment': xAlignment == 'center'\n }\" dir=\"{{ xAlignment == 'right' ? 'rtl' : 'ltr' }}\">\n <!--\n This is cause a bug that when click on the pep-input area and after on the checkbox\n the value is updated only for the second time.\n (click)=\"toggleChecked($event)\" \n -->\n <ng-container *ngIf=\"type == 'booleanText'; then booleanTextTemplate; else regularTemplate\"></ng-container>\n <ng-template #booleanTextTemplate>\n <div class=\"mat-checkbox-layout body-sm\" (click)=\"toggleChecked($event)\"\n [title]=\"(label.length > 0 ? label + ': ' : '') + (value ? ('CHECKBOX.TRUE' | translate) : ('CHECKBOX.FALSE' | translate))\">\n <button [id]=\"key\" class=\"emoji-icon ellipsis pull-left flip\">\n {{ value ? additionalValueObject?.CheckedText : additionalValueObject?.UncheckedText }}\n </button>\n <span *ngIf=\"label.length > 0 && layoutType !== 'table'\" class=\"mat-checkbox-label emoji-title\">{{\n label }}</span>\n </div>\n </ng-template>\n <ng-template #regularTemplate>\n <mat-checkbox [name]=\"key\" class=\"body-sm\" type=\"checkbox\" (change)=\"onMaterialChange($event)\"\n [title]=\"(label.length > 0 ? label + ': ' : '') + (value ? ('CHECKBOX.TRUE' | translate) : ('CHECKBOX.FALSE' | translate))\"\n [checked]=\"value\" [disabled]=\"disabled\">\n <span *ngIf=\"label.length > 0 && layoutType !== 'table'\">{{ label }}</span>\n </mat-checkbox>\n </ng-template>\n </div>\n </ng-template>\n\n <ng-container *ngIf=\"layoutType === 'form'\">\n <pep-field-title *ngIf=\"renderTitle\" [label]=\"label\" [mandatory]=\"mandatory\" [disabled]=\"disabled\"\n [xAlignment]=\"xAlignment\" [showTitle]=\"false\">\n </pep-field-title>\n <ng-container *ngTemplateOutlet=\"pepTemplate\"></ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"layoutType === 'card'\">\n <ng-container *ngTemplateOutlet=\"pepTemplate\"></ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"layoutType === 'table'\">\n <ng-container *ngIf=\"key === 'ItemHasActiveCampaign'; then itemCampaignBlock; else checkboxBlock\">\n </ng-container>\n <ng-template #itemCampaignBlock>\n <ng-container *ngIf=\"value; then trueTemplate; else falseTemplate\">\n </ng-container>\n <ng-template #trueTemplate>\n <mat-icon class=\"has-active-campaign\" title=\"{{ 'CHECKBOX.TRUE' | translate }}\">\n <pep-icon name=\"system_bolt\">\n </pep-icon>\n </mat-icon>\n </ng-template>\n <ng-template #falseTemplate>\n <span>&nbsp;</span>\n </ng-template>\n </ng-template>\n <ng-template #checkboxBlock>\n <ng-container *ngTemplateOutlet=\"pepTemplate\"></ng-container>\n </ng-template>\n </ng-container>\n</ng-container>", styles: [":host{height:inherit;display:grid}:host>*{align-self:center}\n", ""], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i5.Dir, selector: "[dir]", inputs: ["dir"], outputs: ["dirChange"], exportAs: ["dir"] }, { kind: "component", type: i6.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i8.PepIconComponent, selector: "pep-icon", inputs: ["spin", "name", "fill"] }, { kind: "component", type: i9.PepFieldTitleComponent, selector: "pep-field-title", inputs: ["label", "mandatory", "disabled", "maxFieldCharacters", "hint", "xAlignment", "showTitle", "inputLength", "fontBodyType"] }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
129
+ PepCheckboxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.2", type: PepCheckboxComponent, selector: "pep-checkbox", inputs: { key: "key", value: "value", label: "label", type: "type", mandatory: "mandatory", disabled: "disabled", readonly: "readonly", xAlignment: "xAlignment", rowSpan: "rowSpan", additionalValue: "additionalValue", form: "form", isActive: "isActive", showTitle: "showTitle", renderTitle: "renderTitle", layoutType: "layoutType", visible: "visible" }, outputs: { valueChange: "valueChange" }, usesOnChanges: true, ngImport: i0, template: "<ng-container [formGroup]=\"form\">\n <ng-template #pepTemplate>\n <div class=\"pep-checkbox-container pep-input\" [ngClass]=\"{\n 'disable': disabled,\n 'pep-report-checkbox': layoutType === 'table' && !isActive,\n 'pep-card-checkbox': layoutType === 'card',\n 'one-row': rowSpan === 1,\n 'no-title': label.length == 0,\n 'right-alignment pull-right flip': xAlignment == 'right',\n 'center-alignment': xAlignment == 'center'\n }\" dir=\"{{ xAlignment == 'right' ? 'rtl' : 'ltr' }}\">\n <!--\n This is cause a bug that when click on the pep-input area and after on the checkbox\n the value is updated only for the second time.\n (click)=\"toggleChecked($event)\" \n -->\n <ng-container *ngIf=\"type == 'booleanText'; then booleanTextTemplate; else regularTemplate\"></ng-container>\n <ng-template #booleanTextTemplate>\n <div class=\"mat-checkbox-layout body-sm\" (click)=\"toggleChecked($event)\">\n <button [id]=\"key\" class=\"emoji-icon ellipsis pull-left flip\">\n {{ value ? additionalValueObject?.CheckedText : additionalValueObject?.UncheckedText }}\n </button>\n <span *ngIf=\"label.length > 0 && layoutType !== 'table'\" class=\"mat-checkbox-label emoji-title\">{{\n label }}</span>\n </div>\n </ng-template>\n <ng-template #regularTemplate>\n <mat-checkbox [name]=\"key\" class=\"body-sm\" type=\"checkbox\" (change)=\"onMaterialChange($event)\"\n [checked]=\"value\" [disabled]=\"disabled\">\n <span *ngIf=\"label.length > 0 && layoutType !== 'table'\">{{ label }}</span>\n </mat-checkbox>\n </ng-template>\n </div>\n </ng-template>\n\n <ng-container *ngIf=\"layoutType === 'form'\">\n <pep-field-title *ngIf=\"renderTitle\" [label]=\"label\" [mandatory]=\"mandatory\" [disabled]=\"disabled\"\n [xAlignment]=\"xAlignment\" [showTitle]=\"false\">\n </pep-field-title>\n <ng-container *ngTemplateOutlet=\"pepTemplate\"></ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"layoutType === 'card'\">\n <ng-container *ngTemplateOutlet=\"pepTemplate\"></ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"layoutType === 'table'\">\n <ng-container *ngIf=\"key === 'ItemHasActiveCampaign'; then itemCampaignBlock; else checkboxBlock\">\n </ng-container>\n <ng-template #itemCampaignBlock>\n <ng-container *ngIf=\"value; then trueTemplate; else falseTemplate\">\n </ng-container>\n <ng-template #trueTemplate>\n <mat-icon class=\"has-active-campaign\" >\n <pep-icon name=\"system_bolt\">\n </pep-icon>\n </mat-icon>\n </ng-template>\n <ng-template #falseTemplate>\n <span>&nbsp;</span>\n </ng-template>\n </ng-template>\n <ng-template #checkboxBlock>\n <ng-container *ngTemplateOutlet=\"pepTemplate\"></ng-container>\n </ng-template>\n </ng-container>\n</ng-container>", styles: [":host{height:inherit;display:grid}:host>*{align-self:center}\n", ""], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i5.Dir, selector: "[dir]", inputs: ["dir"], outputs: ["dirChange"], exportAs: ["dir"] }, { kind: "component", type: i6.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i8.PepIconComponent, selector: "pep-icon", inputs: ["spin", "name", "fill"] }, { kind: "component", type: i9.PepFieldTitleComponent, selector: "pep-field-title", inputs: ["label", "mandatory", "disabled", "maxFieldCharacters", "hint", "xAlignment", "showTitle", "inputLength", "fontBodyType"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
130
130
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: PepCheckboxComponent, decorators: [{
131
131
  type: Component,
132
- args: [{ selector: 'pep-checkbox', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container [formGroup]=\"form\">\n <ng-template #pepTemplate>\n <div class=\"pep-checkbox-container pep-input\" [ngClass]=\"{\n 'disable': disabled,\n 'pep-report-checkbox': layoutType === 'table' && !isActive,\n 'pep-card-checkbox': layoutType === 'card',\n 'one-row': rowSpan === 1,\n 'no-title': label.length == 0,\n 'right-alignment pull-right flip': xAlignment == 'right',\n 'center-alignment': xAlignment == 'center'\n }\" dir=\"{{ xAlignment == 'right' ? 'rtl' : 'ltr' }}\">\n <!--\n This is cause a bug that when click on the pep-input area and after on the checkbox\n the value is updated only for the second time.\n (click)=\"toggleChecked($event)\" \n -->\n <ng-container *ngIf=\"type == 'booleanText'; then booleanTextTemplate; else regularTemplate\"></ng-container>\n <ng-template #booleanTextTemplate>\n <div class=\"mat-checkbox-layout body-sm\" (click)=\"toggleChecked($event)\"\n [title]=\"(label.length > 0 ? label + ': ' : '') + (value ? ('CHECKBOX.TRUE' | translate) : ('CHECKBOX.FALSE' | translate))\">\n <button [id]=\"key\" class=\"emoji-icon ellipsis pull-left flip\">\n {{ value ? additionalValueObject?.CheckedText : additionalValueObject?.UncheckedText }}\n </button>\n <span *ngIf=\"label.length > 0 && layoutType !== 'table'\" class=\"mat-checkbox-label emoji-title\">{{\n label }}</span>\n </div>\n </ng-template>\n <ng-template #regularTemplate>\n <mat-checkbox [name]=\"key\" class=\"body-sm\" type=\"checkbox\" (change)=\"onMaterialChange($event)\"\n [title]=\"(label.length > 0 ? label + ': ' : '') + (value ? ('CHECKBOX.TRUE' | translate) : ('CHECKBOX.FALSE' | translate))\"\n [checked]=\"value\" [disabled]=\"disabled\">\n <span *ngIf=\"label.length > 0 && layoutType !== 'table'\">{{ label }}</span>\n </mat-checkbox>\n </ng-template>\n </div>\n </ng-template>\n\n <ng-container *ngIf=\"layoutType === 'form'\">\n <pep-field-title *ngIf=\"renderTitle\" [label]=\"label\" [mandatory]=\"mandatory\" [disabled]=\"disabled\"\n [xAlignment]=\"xAlignment\" [showTitle]=\"false\">\n </pep-field-title>\n <ng-container *ngTemplateOutlet=\"pepTemplate\"></ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"layoutType === 'card'\">\n <ng-container *ngTemplateOutlet=\"pepTemplate\"></ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"layoutType === 'table'\">\n <ng-container *ngIf=\"key === 'ItemHasActiveCampaign'; then itemCampaignBlock; else checkboxBlock\">\n </ng-container>\n <ng-template #itemCampaignBlock>\n <ng-container *ngIf=\"value; then trueTemplate; else falseTemplate\">\n </ng-container>\n <ng-template #trueTemplate>\n <mat-icon class=\"has-active-campaign\" title=\"{{ 'CHECKBOX.TRUE' | translate }}\">\n <pep-icon name=\"system_bolt\">\n </pep-icon>\n </mat-icon>\n </ng-template>\n <ng-template #falseTemplate>\n <span>&nbsp;</span>\n </ng-template>\n </ng-template>\n <ng-template #checkboxBlock>\n <ng-container *ngTemplateOutlet=\"pepTemplate\"></ng-container>\n </ng-template>\n </ng-container>\n</ng-container>", styles: [":host{height:inherit;display:grid}:host>*{align-self:center}\n"] }]
132
+ args: [{ selector: 'pep-checkbox', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container [formGroup]=\"form\">\n <ng-template #pepTemplate>\n <div class=\"pep-checkbox-container pep-input\" [ngClass]=\"{\n 'disable': disabled,\n 'pep-report-checkbox': layoutType === 'table' && !isActive,\n 'pep-card-checkbox': layoutType === 'card',\n 'one-row': rowSpan === 1,\n 'no-title': label.length == 0,\n 'right-alignment pull-right flip': xAlignment == 'right',\n 'center-alignment': xAlignment == 'center'\n }\" dir=\"{{ xAlignment == 'right' ? 'rtl' : 'ltr' }}\">\n <!--\n This is cause a bug that when click on the pep-input area and after on the checkbox\n the value is updated only for the second time.\n (click)=\"toggleChecked($event)\" \n -->\n <ng-container *ngIf=\"type == 'booleanText'; then booleanTextTemplate; else regularTemplate\"></ng-container>\n <ng-template #booleanTextTemplate>\n <div class=\"mat-checkbox-layout body-sm\" (click)=\"toggleChecked($event)\">\n <button [id]=\"key\" class=\"emoji-icon ellipsis pull-left flip\">\n {{ value ? additionalValueObject?.CheckedText : additionalValueObject?.UncheckedText }}\n </button>\n <span *ngIf=\"label.length > 0 && layoutType !== 'table'\" class=\"mat-checkbox-label emoji-title\">{{\n label }}</span>\n </div>\n </ng-template>\n <ng-template #regularTemplate>\n <mat-checkbox [name]=\"key\" class=\"body-sm\" type=\"checkbox\" (change)=\"onMaterialChange($event)\"\n [checked]=\"value\" [disabled]=\"disabled\">\n <span *ngIf=\"label.length > 0 && layoutType !== 'table'\">{{ label }}</span>\n </mat-checkbox>\n </ng-template>\n </div>\n </ng-template>\n\n <ng-container *ngIf=\"layoutType === 'form'\">\n <pep-field-title *ngIf=\"renderTitle\" [label]=\"label\" [mandatory]=\"mandatory\" [disabled]=\"disabled\"\n [xAlignment]=\"xAlignment\" [showTitle]=\"false\">\n </pep-field-title>\n <ng-container *ngTemplateOutlet=\"pepTemplate\"></ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"layoutType === 'card'\">\n <ng-container *ngTemplateOutlet=\"pepTemplate\"></ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"layoutType === 'table'\">\n <ng-container *ngIf=\"key === 'ItemHasActiveCampaign'; then itemCampaignBlock; else checkboxBlock\">\n </ng-container>\n <ng-template #itemCampaignBlock>\n <ng-container *ngIf=\"value; then trueTemplate; else falseTemplate\">\n </ng-container>\n <ng-template #trueTemplate>\n <mat-icon class=\"has-active-campaign\" >\n <pep-icon name=\"system_bolt\">\n </pep-icon>\n </mat-icon>\n </ng-template>\n <ng-template #falseTemplate>\n <span>&nbsp;</span>\n </ng-template>\n </ng-template>\n <ng-template #checkboxBlock>\n <ng-container *ngTemplateOutlet=\"pepTemplate\"></ng-container>\n </ng-template>\n </ng-container>\n</ng-container>", styles: [":host{height:inherit;display:grid}:host>*{align-self:center}\n"] }]
133
133
  }], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: i1.PepCustomizationService }, { type: i0.ElementRef }, { type: i2.TranslateService }]; }, propDecorators: { key: [{
134
134
  type: Input
135
135
  }], value: [{
@@ -165,4 +165,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImpor
165
165
  }], valueChange: [{
166
166
  type: Output
167
167
  }] } });
168
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tib3guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWxpYi9jaGVja2JveC9jaGVja2JveC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbGliL2NoZWNrYm94L2NoZWNrYm94LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxTQUFTLEVBRVQsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBQ1osdUJBQXVCLEdBTTFCLE1BQU0sZUFBZSxDQUFDO0FBSXZCLE9BQU8sRUFDSCx1QkFBdUIsRUFHdkIsNEJBQTRCLEVBRTVCLGdCQUFnQixHQUNuQixNQUFNLHlCQUF5QixDQUFDOzs7Ozs7Ozs7OztBQVFqQyxNQUFNLE9BQU8sb0JBQW9CO0lBbUU3QixZQUNZLFFBQW1CLEVBQ25CLG9CQUE2QyxFQUM3QyxPQUFtQixFQUNuQixTQUEyQjtRQUgzQixhQUFRLEdBQVIsUUFBUSxDQUFXO1FBQ25CLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBeUI7UUFDN0MsWUFBTyxHQUFQLE9BQU8sQ0FBWTtRQUNuQixjQUFTLEdBQVQsU0FBUyxDQUFrQjtRQXRFOUIsUUFBRyxHQUFHLEVBQUUsQ0FBQztRQUNULFVBQUssR0FBRyxLQUFLLENBQUM7UUFDZCxVQUFLLEdBQUcsRUFBRSxDQUFDO1FBRVosVUFBSyxHQUF5QixVQUFVLENBQUMsQ0FBQyxtQkFBbUI7UUFVNUQsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUNsQixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFDakIsZUFBVSxHQUEyQiw0QkFBNEIsQ0FBQztRQUNsRSxZQUFPLEdBQUcsQ0FBQyxDQUFDO1FBRWIscUJBQWdCLEdBQVEsU0FBUyxDQUFDO1FBVTFDLGdCQUFXLEdBQUcsVUFBVSxDQUFDO1FBRWhCLFNBQUksR0FBYyxJQUFJLENB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QkFBb0I7cUdBQXBCLG9CQUFvQixvZEMvQmpDLDZwSEFvRWU7MkZEckNGLG9CQUFvQjtrQkFOaEMsU0FBUzsrQkFDSSxjQUFjLG1CQUdQLHVCQUF1QixDQUFDLE1BQU07OExBR3RDLEdBQUc7c0JBQVgsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUlGLElBQUk7c0JBRFAsS0FBSztnQkFTRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFJRixlQUFlO3NCQURsQixLQUFLO2dCQVdHLElBQUk7c0JBQVosS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUlGLE9BQU87c0JBRFYsS0FBSztnQkFvQk4sV0FBVztzQkFEVixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgT25Jbml0LFxuICAgIElucHV0LFxuICAgIE91dHB1dCxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgT25EZXN0cm95LFxuICAgIFJlbmRlcmVyMixcbiAgICBFbGVtZW50UmVmLFxuICAgIE9wdGlvbmFsLFxuICAgIE9uQ2hhbmdlcyxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXRDaGVja2JveENoYW5nZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NoZWNrYm94JztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7XG4gICAgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UsXG4gICAgUGVwTGF5b3V0VHlwZSxcbiAgICBQZXBIb3Jpem9udGFsQWxpZ25tZW50LFxuICAgIERFRkFVTFRfSE9SSVpPTlRBTF9BTElHTk1FTlQsXG4gICAgUGVwQ2hlY2tib3hGaWVsZFR5cGUsXG4gICAgUGVwQ2hlY2tib3hGaWVsZCxcbn0gZnJvbSAnQHBlcHBlcmktYWRkb25zL25neC1saWInO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3BlcC1jaGVja2JveCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2NoZWNrYm94LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9jaGVja2JveC5jb21wb25lbnQuc2NzcycsICcuL2NoZWNrYm94LmNvbXBvbmVudC50aGVtZS5zY3NzJ10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFBlcENoZWNrYm94Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gICAgQElucHV0KCkga2V5ID0gJyc7XG4gICAgQElucHV0KCkgdmFsdWUgPSBmYWxzZTtcbiAgICBASW5wdXQoKSBsYWJlbCA9ICcnO1xuXG4gICAgcHJpdmF0ZSBfdHlwZTogUGVwQ2hlY2tib3hGaWVsZFR5cGUgPSAnY2hlY2tib3gnOyAvLyB8fCAnYm9vbGVhblRleHQnXG4gICAgQElucHV0KClcbiAgICBzZXQgdHlwZSh2YWx1ZTogUGVwQ2hlY2tib3hGaWVsZFR5cGUpIHtcbiAgICAgICAgdGhpcy5fdHlwZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLnNldEFkZGl0aW9uYWxWYWx1ZU9iamVjdCgpO1xuICAgIH1cbiAgICBnZXQgdHlwZSgpOiBQZXBDaGVja2JveEZpZWxkVHlwZSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90eXBlO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIG1hbmRhdG9yeSA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIGRpc2FibGVkID0gZmFsc2U7XG4gICAgQElucHV0KCkgcmVhZG9ubHkgPSBmYWxzZTtcbiAgICBASW5wdXQoKSB4QWxpZ25tZW50OiBQZXBIb3Jpem9udGFsQWxpZ25tZW50ID0gREVGQVVMVF9IT1JJWk9OVEFMX0FMSUdOTUVOVDtcbiAgICBASW5wdXQoKSByb3dTcGFuID0gMTtcblxuICAgIHByaXZhdGUgX2FkZGl0aW9uYWxWYWx1ZTogYW55ID0gdW5kZWZpbmVkO1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGFkZGl0aW9uYWxWYWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgICAgIHRoaXMuX2FkZGl0aW9uYWxWYWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLnNldEFkZGl0aW9uYWxWYWx1ZU9iamVjdCgpO1xuICAgIH1cbiAgICBnZXQgYWRkaXRpb25hbFZhbHVlKCk6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRpdGlvbmFsVmFsdWU7XG4gICAgfVxuXG4gICAgY29udHJvbFR5cGUgPSAnY2hlY2tib3gnO1xuXG4gICAgQElucHV0KCkgZm9ybTogRm9ybUdyb3VwID0gbnVsbDtcbiAgICBASW5wdXQoKSBpc0FjdGl2ZSA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIHNob3dUaXRsZSA9IHRydWU7XG4gICAgQElucHV0KCkgcmVuZGVyVGl0bGUgPSB0cnVlO1xuICAgIEBJbnB1dCgpIGxheW91dFR5cGU6IFBlcExheW91dFR5cGUgPSAnZm9ybSc7XG5cbiAgICBwcml2YXRlIF92aXNpYmxlID0gdHJ1ZTtcbiAgICBASW5wdXQoKVxuICAgIHNldCB2aXNpYmxlKHZpc2libGU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fdmlzaWJsZSA9IHZpc2libGU7XG4gICAgICAgIGlmICh2aXNpYmxlKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKFxuICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICAgICAgICdoaWRkZW4tZWxlbWVudCdcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKFxuICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICAgICAgICdoaWRkZW4tZWxlbWVudCdcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IHZpc2libGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl92aXNpYmxlO1xuICAgIH1cblxuICAgIEBPdXRwdXQoKVxuICAgIHZhbHVlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgICBzdGFuZEFsb25lID0gZmFsc2U7XG5cbiAgICBhZGRpdGlvbmFsVmFsdWVPYmplY3Q6IGFueTtcbiAgICBwdWJsaWMganNvbkxpYiA9IEpTT047XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgICAgICBwcml2YXRlIGN1c3RvbWl6YXRpb25TZXJ2aWNlOiBQZXBDdXN0b21pemF0aW9uU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBlbGVtZW50OiBFbGVtZW50UmVmLFxuICAgICAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZVxuICAgICkgeyB9XG5cbiAgICBwcml2YXRlIHNldEFkZGl0aW9uYWxWYWx1ZU9iamVjdCgpIHtcbiAgICAgICAgaWYgKHRoaXMuYWRkaXRpb25hbFZhbHVlICYmIHRoaXMudHlwZSA9PT0gJ2Jvb2xlYW5UZXh0Jykge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHRoaXMuYWRkaXRpb25hbFZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZGl0aW9uYWxWYWx1ZU9iamVjdCA9IEpTT04ucGFyc2UoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZGl0aW9uYWxWYWx1ZVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkaXRpb25hbFZhbHVlT2JqZWN0ID0gdGhpcy5hZGRpdGlvbmFsVmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRpdGlvbmFsVmFsdWVPYmplY3QgPSB7XG4gICAgICAgICAgICAgICAgICAgIENoZWNrZWRUZXh0OiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdDSEVDS0JPWC5UUlVFJyksXG4gICAgICAgICAgICAgICAgICAgIFVuY2hlY2tlZFRleHQ6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ0NIRUNLQk9YLkZBTFNFJyksXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2V0RGVmYXVsdEZvcm0oKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHBlcEZpZWxkID0gbmV3IFBlcENoZWNrYm94RmllbGQoe1xuICAgICAgICAgICAga2V5OiB0aGlzLmtleSxcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgICAgICAgbWFuZGF0b3J5OiB0aGlzLm1hbmRhdG9yeSxcbiAgICAgICAgICAgIHJlYWRvbmx5OiB0aGlzLnJlYWRvbmx5LFxuICAgICAgICAgICAgZGlzYWJsZWQ6IHRoaXMuZGlzYWJsZWQsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmZvcm0gPSB0aGlzLmN1c3RvbWl6YXRpb25TZXJ2aWNlLmdldERlZmF1bHRGcm9tR3JvdXAocGVwRmllbGQpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5mb3JtID09PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLnN0YW5kQWxvbmUgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5zZXREZWZhdWx0Rm9ybSgpO1xuXG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKFxuICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICAgICAgIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlNUQU5EX0FMT05FX0ZJRUxEX0NMQVNTX05BTUVcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5yZW5kZXJUaXRsZSkge1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICBQZXBDdXN0b21pemF0aW9uU2VydmljZS5TVEFORF9BTE9ORV9GSUVMRF9OT19TUEFDSU5HX0NMQVNTX05BTUVcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogYW55KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnN0YW5kQWxvbmUpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0RGVmYXVsdEZvcm0oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICAvL1xuICAgIH1cblxuICAgIG9uTWF0ZXJpYWxDaGFuZ2UoZTogTWF0Q2hlY2tib3hDaGFuZ2UpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VWYWx1ZShlLmNoZWNrZWQpO1xuICAgIH1cblxuICAgIHRvZ2dsZUNoZWNrZWQoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgY29uc3QgaXNDaGVja2VkOiBib29sZWFuID1cbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICAgICAgY29uc3QgbmV3VmFsdWUgPSAhaXNDaGVja2VkO1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IG5ld1ZhbHVlO1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VWYWx1ZShuZXdWYWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjaGFuZ2VWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMuY3VzdG9taXphdGlvblNlcnZpY2UudXBkYXRlRm9ybUZpZWxkVmFsdWUoXG4gICAgICAgICAgICB0aGlzLmZvcm0sXG4gICAgICAgICAgICB0aGlzLmtleSxcbiAgICAgICAgICAgIHZhbHVlXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh2YWx1ZSk7XG4gICAgfVxufSIsIjxuZy1jb250YWluZXIgW2Zvcm1Hcm91cF09XCJmb3JtXCI+XG4gICAgPG5nLXRlbXBsYXRlICNwZXBUZW1wbGF0ZT5cbiAgICAgICAgPGRpdiBjbGFzcz1cInBlcC1jaGVja2JveC1jb250YWluZXIgcGVwLWlucHV0XCIgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICdkaXNhYmxlJzogZGlzYWJsZWQsXG4gICAgICAgICAgICAgICAgJ3BlcC1yZXBvcnQtY2hlY2tib3gnOiBsYXlvdXRUeXBlID09PSAndGFibGUnICYmICFpc0FjdGl2ZSxcbiAgICAgICAgICAgICAgICAncGVwLWNhcmQtY2hlY2tib3gnOiBsYXlvdXRUeXBlID09PSAnY2FyZCcsXG4gICAgICAgICAgICAgICAgJ29uZS1yb3cnOiByb3dTcGFuID09PSAxLFxuICAgICAgICAgICAgICAgICduby10aXRsZSc6IGxhYmVsLmxlbmd0aCA9PSAwLFxuICAgICAgICAgICAgICAgICdyaWdodC1hbGlnbm1lbnQgcHVsbC1yaWdodCBmbGlwJzogeEFsaWdubWVudCA9PSAncmlnaHQnLFxuICAgICAgICAgICAgICAgICdjZW50ZXItYWxpZ25tZW50JzogeEFsaWdubWVudCA9PSAnY2VudGVyJ1xuICAgICAgICAgICAgfVwiIGRpcj1cInt7IHhBbGlnbm1lbnQgPT0gJ3JpZ2h0JyA/ICdydGwnIDogJ2x0cicgfX1cIj5cbiAgICAgICAgICAgIDwhLS1cbiAgICAgICAgICAgICAgICBUaGlzIGlzIGNhdXNlIGEgYnVnIHRoYXQgd2hlbiBjbGljayBvbiB0aGUgcGVwLWlucHV0IGFyZWEgYW5kIGFmdGVyIG9uIHRoZSBjaGVja2JveFxuICAgICAgICAgICAgICAgIHRoZSB2YWx1ZSBpcyB1cGRhdGVkIG9ubHkgZm9yIHRoZSBzZWNvbmQgdGltZS5cbiAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlQ2hlY2tlZCgkZXZlbnQpXCIgXG4gICAgICAgICAgICAtLT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0eXBlID09ICdib29sZWFuVGV4dCc7IHRoZW4gYm9vbGVhblRleHRUZW1wbGF0ZTsgZWxzZSByZWd1bGFyVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjYm9vbGVhblRleHRUZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWF0LWNoZWNrYm94LWxheW91dCBib2R5LXNtXCIgKGNsaWNrKT1cInRvZ2dsZUNoZWNrZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCIobGFiZWwubGVuZ3RoID4gMCA/IGxhYmVsICsgJzogJyA6ICcnKSArICh2YWx1ZSA/ICgnQ0hFQ0tCT1guVFJVRScgfCB0cmFuc2xhdGUpIDogKCdDSEVDS0JPWC5GQUxTRScgfCB0cmFuc2xhdGUpKVwiPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIFtpZF09XCJrZXlcIiBjbGFzcz1cImVtb2ppLWljb24gZWxsaXBzaXMgcHVsbC1sZWZ0IGZsaXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IHZhbHVlID8gYWRkaXRpb25hbFZhbHVlT2JqZWN0Py5DaGVja2VkVGV4dCA6IGFkZGl0aW9uYWxWYWx1ZU9iamVjdD8uVW5jaGVja2VkVGV4dCB9fVxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJsYWJlbC5sZW5ndGggPiAwICYmIGxheW91dFR5cGUgIT09ICd0YWJsZSdcIiBjbGFzcz1cIm1hdC1jaGVja2JveC1sYWJlbCBlbW9qaS10aXRsZVwiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI3JlZ3VsYXJUZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8bWF0LWNoZWNrYm94IFtuYW1lXT1cImtleVwiIGNsYXNzPVwiYm9keS1zbVwiIHR5cGU9XCJjaGVja2JveFwiIChjaGFuZ2UpPVwib25NYXRlcmlhbENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIihsYWJlbC5sZW5ndGggPiAwID8gbGFiZWwgKyAnOiAnIDogJycpICsgKHZhbHVlID8gKCdDSEVDS0JPWC5UUlVFJyB8IHRyYW5zbGF0ZSkgOiAoJ0NIRUNLQk9YLkZBTFNFJyB8IHRyYW5zbGF0ZSkpXCJcbiAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwidmFsdWVcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJsYWJlbC5sZW5ndGggPiAwICYmIGxheW91dFR5cGUgIT09ICd0YWJsZSdcIj57eyBsYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L21hdC1jaGVja2JveD5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibGF5b3V0VHlwZSA9PT0gJ2Zvcm0nXCI+XG4gICAgICAgIDxwZXAtZmllbGQtdGl0bGUgKm5nSWY9XCJyZW5kZXJUaXRsZVwiIFtsYWJlbF09XCJsYWJlbFwiIFttYW5kYXRvcnldPVwibWFuZGF0b3J5XCIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgIFt4QWxpZ25tZW50XT1cInhBbGlnbm1lbnRcIiBbc2hvd1RpdGxlXT1cImZhbHNlXCI+XG4gICAgICAgIDwvcGVwLWZpZWxkLXRpdGxlPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicGVwVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJsYXlvdXRUeXBlID09PSAnY2FyZCdcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInBlcFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibGF5b3V0VHlwZSA9PT0gJ3RhYmxlJ1wiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwia2V5ID09PSAnSXRlbUhhc0FjdGl2ZUNhbXBhaWduJzsgdGhlbiBpdGVtQ2FtcGFpZ25CbG9jazsgZWxzZSBjaGVja2JveEJsb2NrXCI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctdGVtcGxhdGUgI2l0ZW1DYW1wYWlnbkJsb2NrPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInZhbHVlOyB0aGVuIHRydWVUZW1wbGF0ZTsgZWxzZSBmYWxzZVRlbXBsYXRlXCI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjdHJ1ZVRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImhhcy1hY3RpdmUtY2FtcGFpZ25cIiB0aXRsZT1cInt7ICdDSEVDS0JPWC5UUlVFJyB8IHRyYW5zbGF0ZSB9fVwiPlxuICAgICAgICAgICAgICAgICAgICA8cGVwLWljb24gbmFtZT1cInN5c3RlbV9ib2x0XCI+XG4gICAgICAgICAgICAgICAgICAgIDwvcGVwLWljb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2ZhbHNlVGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPHNwYW4+Jm5ic3A7PC9zcGFuPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNjaGVja2JveEJsb2NrPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInBlcFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9uZy1jb250YWluZXI+XG48L25nLWNvbnRhaW5lcj4iXX0=
168
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tib3guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWxpYi9jaGVja2JveC9jaGVja2JveC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbGliL2NoZWNrYm94L2NoZWNrYm94LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxTQUFTLEVBRVQsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBQ1osdUJBQXVCLEdBTTFCLE1BQU0sZUFBZSxDQUFDO0FBSXZCLE9BQU8sRUFDSCx1QkFBdUIsRUFHdkIsNEJBQTRCLEVBRTVCLGdCQUFnQixHQUNuQixNQUFNLHlCQUF5QixDQUFDOzs7Ozs7Ozs7OztBQVFqQyxNQUFNLE9BQU8sb0JBQW9CO0lBbUU3QixZQUNZLFFBQW1CLEVBQ25CLG9CQUE2QyxFQUM3QyxPQUFtQixFQUNuQixTQUEyQjtRQUgzQixhQUFRLEdBQVIsUUFBUSxDQUFXO1FBQ25CLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBeUI7UUFDN0MsWUFBTyxHQUFQLE9BQU8sQ0FBWTtRQUNuQixjQUFTLEdBQVQsU0FBUyxDQUFrQjtRQXRFOUIsUUFBRyxHQUFHLEVBQUUsQ0FBQztRQUNULFVBQUssR0FBRyxLQUFLLENBQUM7UUFDZCxVQUFLLEdBQUcsRUFBRSxDQUFDO1FBRVosVUFBSyxHQUF5QixVQUFVLENBQUMsQ0FBQyxtQkFBbUI7UUFVNUQsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUNsQixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFDakIsZUFBVSxHQUEyQiw0QkFBNEIsQ0FBQztRQUNsRSxZQUFPLEdBQUcsQ0FBQyxDQUFDO1FBRWIscUJBQWdCLEdBQVEsU0FBUyxDQUFDO1FBVTFDLGdCQUFXLEdBQUcsVUFBVSxDQUFDO1FBRWhCLFNBQUksR0FBYyxJQUFJLENBQUM7UUFDdkIsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUNqQixjQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLGdCQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ25CLGVBQVUsR0FBa0IsTUFBTSxDQUFDO1FBRXBDLGFBQVEsR0FBRyxJQUFJLENBQUM7UUFxQnhCLGdCQUFXLEdBQTBCLElBQUksWUFBWSxFQUFXLENBQUM7UUFFakUsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUdaLFlBQU8sR0FBRyxJQUFJLENBQUM7SUFPbEIsQ0FBQztJQWxFTCxJQUNJLElBQUksQ0FBQyxLQUEyQjtRQUNoQyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0lBQ0QsSUFBSSxJQUFJO1FBQ0osT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3RCLENBQUM7SUFTRCxJQUNJLGVBQWUsQ0FBQyxLQUFVO1FBQzFCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFDOUIsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7SUFDcEMsQ0FBQztJQUNELElBQUksZUFBZTtRQUNmLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDO0lBQ2pDLENBQUM7SUFXRCxJQUNJLE9BQU8sQ0FBQyxPQUFnQjtRQUN4QixJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQztRQUN4QixJQUFJLE9BQU8sRUFBRTtZQUNULElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUNyQixJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFDMUIsZ0JBQWdCLENBQ25CLENBQUM7U0FDTDthQUFNO1lBQ0gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQ2xCLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUMxQixnQkFBZ0IsQ0FDbkIsQ0FBQztTQUNMO0lBQ0wsQ0FBQztJQUNELElBQUksT0FBTztRQUNQLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN6QixDQUFDO0lBaUJPLHdCQUF3QjtRQUM1QixJQUFJLElBQUksQ0FBQyxlQUFlLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxhQUFhLEVBQUU7WUFDckQsSUFBSTtnQkFDQSxJQUFJLE9BQU8sSUFBSSxDQUFDLGVBQWUsS0FBSyxRQUFRLEVBQUU7b0JBQzFDLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUNuQyxJQUFJLENBQUMsZUFBZSxDQUN2QixDQUFDO2lCQUNMO3FCQUFNO29CQUNILElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDO2lCQUNyRDthQUNKO1lBQUMsTUFBTTtnQkFDSixJQUFJLENBQUMscUJBQXFCLEdBQUc7b0JBQ3pCLFdBQVcsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUM7b0JBQ3BELGFBQWEsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQztpQkFDMUQsQ0FBQzthQUNMO1NBQ0o7SUFDTCxDQUFDO0lBRU8sY0FBYztRQUNsQixNQUFNLFFBQVEsR0FBRyxJQUFJLGdCQUFnQixDQUFDO1lBQ2xDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRztZQUNiLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztZQUNqQixTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7WUFDekIsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO1lBQ3ZCLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtTQUMxQixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBRUQsUUFBUTtRQUNKLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLEVBQUU7WUFDcEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7WUFDdkIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBRXRCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUNsQixJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFDMUIsdUJBQXVCLENBQUMsNEJBQTRCLENBQ3ZELENBQUM7WUFFRixJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRTtnQkFDbkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQ2xCLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUMxQix1QkFBdUIsQ0FBQyx1Q0FBdUMsQ0FDbEUsQ0FBQzthQUNMO1NBQ0o7SUFDTCxDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQVk7UUFDcEIsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ2pCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztTQUN6QjtJQUNMLENBQUM7SUFFRCxXQUFXO1FBQ1AsRUFBRTtJQUNOLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxDQUFvQjtRQUNqQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsYUFBYSxDQUFDLEtBQVk7UUFDdEIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDaEIsTUFBTSxTQUFTLEdBQ1gsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7WUFDOUIsTUFBTSxRQUFRLEdBQUcsQ0FBQyxTQUFTLENBQUM7WUFDNUIsSUFBSSxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUM7WUFDdEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUM5QjtJQUNMLENBQUM7SUFFRCxXQUFXLENBQUMsS0FBVTtRQUNsQixJQUFJLENBQUMsb0JBQW9CLENBQUMsb0JBQW9CLENBQzFDLElBQUksQ0FBQyxJQUFJLEVBQ1QsSUFBSSxDQUFDLEdBQUcsRUFDUixLQUFLLENBQ1IsQ0FBQztRQUNGLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pDLENBQUM7O2lIQTFKUSxvQkFBb0I7cUdBQXBCLG9CQUFvQixvZEMvQmpDLDQwR0FrRWU7MkZEbkNGLG9CQUFvQjtrQkFOaEMsU0FBUzsrQkFDSSxjQUFjLG1CQUdQLHVCQUF1QixDQUFDLE1BQU07OExBR3RDLEdBQUc7c0JBQVgsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUlGLElBQUk7c0JBRFAsS0FBSztnQkFTRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFJRixlQUFlO3NCQURsQixLQUFLO2dCQVdHLElBQUk7c0JBQVosS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUlGLE9BQU87c0JBRFYsS0FBSztnQkFvQk4sV0FBVztzQkFEVixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgT25Jbml0LFxuICAgIElucHV0LFxuICAgIE91dHB1dCxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgT25EZXN0cm95LFxuICAgIFJlbmRlcmVyMixcbiAgICBFbGVtZW50UmVmLFxuICAgIE9wdGlvbmFsLFxuICAgIE9uQ2hhbmdlcyxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXRDaGVja2JveENoYW5nZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NoZWNrYm94JztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7XG4gICAgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UsXG4gICAgUGVwTGF5b3V0VHlwZSxcbiAgICBQZXBIb3Jpem9udGFsQWxpZ25tZW50LFxuICAgIERFRkFVTFRfSE9SSVpPTlRBTF9BTElHTk1FTlQsXG4gICAgUGVwQ2hlY2tib3hGaWVsZFR5cGUsXG4gICAgUGVwQ2hlY2tib3hGaWVsZCxcbn0gZnJvbSAnQHBlcHBlcmktYWRkb25zL25neC1saWInO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3BlcC1jaGVja2JveCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2NoZWNrYm94LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9jaGVja2JveC5jb21wb25lbnQuc2NzcycsICcuL2NoZWNrYm94LmNvbXBvbmVudC50aGVtZS5zY3NzJ10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFBlcENoZWNrYm94Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gICAgQElucHV0KCkga2V5ID0gJyc7XG4gICAgQElucHV0KCkgdmFsdWUgPSBmYWxzZTtcbiAgICBASW5wdXQoKSBsYWJlbCA9ICcnO1xuXG4gICAgcHJpdmF0ZSBfdHlwZTogUGVwQ2hlY2tib3hGaWVsZFR5cGUgPSAnY2hlY2tib3gnOyAvLyB8fCAnYm9vbGVhblRleHQnXG4gICAgQElucHV0KClcbiAgICBzZXQgdHlwZSh2YWx1ZTogUGVwQ2hlY2tib3hGaWVsZFR5cGUpIHtcbiAgICAgICAgdGhpcy5fdHlwZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLnNldEFkZGl0aW9uYWxWYWx1ZU9iamVjdCgpO1xuICAgIH1cbiAgICBnZXQgdHlwZSgpOiBQZXBDaGVja2JveEZpZWxkVHlwZSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90eXBlO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIG1hbmRhdG9yeSA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIGRpc2FibGVkID0gZmFsc2U7XG4gICAgQElucHV0KCkgcmVhZG9ubHkgPSBmYWxzZTtcbiAgICBASW5wdXQoKSB4QWxpZ25tZW50OiBQZXBIb3Jpem9udGFsQWxpZ25tZW50ID0gREVGQVVMVF9IT1JJWk9OVEFMX0FMSUdOTUVOVDtcbiAgICBASW5wdXQoKSByb3dTcGFuID0gMTtcblxuICAgIHByaXZhdGUgX2FkZGl0aW9uYWxWYWx1ZTogYW55ID0gdW5kZWZpbmVkO1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGFkZGl0aW9uYWxWYWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgICAgIHRoaXMuX2FkZGl0aW9uYWxWYWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLnNldEFkZGl0aW9uYWxWYWx1ZU9iamVjdCgpO1xuICAgIH1cbiAgICBnZXQgYWRkaXRpb25hbFZhbHVlKCk6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRpdGlvbmFsVmFsdWU7XG4gICAgfVxuXG4gICAgY29udHJvbFR5cGUgPSAnY2hlY2tib3gnO1xuXG4gICAgQElucHV0KCkgZm9ybTogRm9ybUdyb3VwID0gbnVsbDtcbiAgICBASW5wdXQoKSBpc0FjdGl2ZSA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIHNob3dUaXRsZSA9IHRydWU7XG4gICAgQElucHV0KCkgcmVuZGVyVGl0bGUgPSB0cnVlO1xuICAgIEBJbnB1dCgpIGxheW91dFR5cGU6IFBlcExheW91dFR5cGUgPSAnZm9ybSc7XG5cbiAgICBwcml2YXRlIF92aXNpYmxlID0gdHJ1ZTtcbiAgICBASW5wdXQoKVxuICAgIHNldCB2aXNpYmxlKHZpc2libGU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fdmlzaWJsZSA9IHZpc2libGU7XG4gICAgICAgIGlmICh2aXNpYmxlKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKFxuICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICAgICAgICdoaWRkZW4tZWxlbWVudCdcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKFxuICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICAgICAgICdoaWRkZW4tZWxlbWVudCdcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IHZpc2libGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl92aXNpYmxlO1xuICAgIH1cblxuICAgIEBPdXRwdXQoKVxuICAgIHZhbHVlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgICBzdGFuZEFsb25lID0gZmFsc2U7XG5cbiAgICBhZGRpdGlvbmFsVmFsdWVPYmplY3Q6IGFueTtcbiAgICBwdWJsaWMganNvbkxpYiA9IEpTT047XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgICAgICBwcml2YXRlIGN1c3RvbWl6YXRpb25TZXJ2aWNlOiBQZXBDdXN0b21pemF0aW9uU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBlbGVtZW50OiBFbGVtZW50UmVmLFxuICAgICAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZVxuICAgICkgeyB9XG5cbiAgICBwcml2YXRlIHNldEFkZGl0aW9uYWxWYWx1ZU9iamVjdCgpIHtcbiAgICAgICAgaWYgKHRoaXMuYWRkaXRpb25hbFZhbHVlICYmIHRoaXMudHlwZSA9PT0gJ2Jvb2xlYW5UZXh0Jykge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHRoaXMuYWRkaXRpb25hbFZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZGl0aW9uYWxWYWx1ZU9iamVjdCA9IEpTT04ucGFyc2UoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZGl0aW9uYWxWYWx1ZVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkaXRpb25hbFZhbHVlT2JqZWN0ID0gdGhpcy5hZGRpdGlvbmFsVmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRpdGlvbmFsVmFsdWVPYmplY3QgPSB7XG4gICAgICAgICAgICAgICAgICAgIENoZWNrZWRUZXh0OiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdDSEVDS0JPWC5UUlVFJyksXG4gICAgICAgICAgICAgICAgICAgIFVuY2hlY2tlZFRleHQ6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ0NIRUNLQk9YLkZBTFNFJyksXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2V0RGVmYXVsdEZvcm0oKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHBlcEZpZWxkID0gbmV3IFBlcENoZWNrYm94RmllbGQoe1xuICAgICAgICAgICAga2V5OiB0aGlzLmtleSxcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgICAgICAgbWFuZGF0b3J5OiB0aGlzLm1hbmRhdG9yeSxcbiAgICAgICAgICAgIHJlYWRvbmx5OiB0aGlzLnJlYWRvbmx5LFxuICAgICAgICAgICAgZGlzYWJsZWQ6IHRoaXMuZGlzYWJsZWQsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmZvcm0gPSB0aGlzLmN1c3RvbWl6YXRpb25TZXJ2aWNlLmdldERlZmF1bHRGcm9tR3JvdXAocGVwRmllbGQpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5mb3JtID09PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLnN0YW5kQWxvbmUgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5zZXREZWZhdWx0Rm9ybSgpO1xuXG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKFxuICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICAgICAgIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlNUQU5EX0FMT05FX0ZJRUxEX0NMQVNTX05BTUVcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5yZW5kZXJUaXRsZSkge1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICBQZXBDdXN0b21pemF0aW9uU2VydmljZS5TVEFORF9BTE9ORV9GSUVMRF9OT19TUEFDSU5HX0NMQVNTX05BTUVcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogYW55KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnN0YW5kQWxvbmUpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0RGVmYXVsdEZvcm0oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICAvL1xuICAgIH1cblxuICAgIG9uTWF0ZXJpYWxDaGFuZ2UoZTogTWF0Q2hlY2tib3hDaGFuZ2UpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VWYWx1ZShlLmNoZWNrZWQpO1xuICAgIH1cblxuICAgIHRvZ2dsZUNoZWNrZWQoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgY29uc3QgaXNDaGVja2VkOiBib29sZWFuID1cbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICAgICAgY29uc3QgbmV3VmFsdWUgPSAhaXNDaGVja2VkO1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IG5ld1ZhbHVlO1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VWYWx1ZShuZXdWYWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjaGFuZ2VWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMuY3VzdG9taXphdGlvblNlcnZpY2UudXBkYXRlRm9ybUZpZWxkVmFsdWUoXG4gICAgICAgICAgICB0aGlzLmZvcm0sXG4gICAgICAgICAgICB0aGlzLmtleSxcbiAgICAgICAgICAgIHZhbHVlXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh2YWx1ZSk7XG4gICAgfVxufSIsIjxuZy1jb250YWluZXIgW2Zvcm1Hcm91cF09XCJmb3JtXCI+XG4gICAgPG5nLXRlbXBsYXRlICNwZXBUZW1wbGF0ZT5cbiAgICAgICAgPGRpdiBjbGFzcz1cInBlcC1jaGVja2JveC1jb250YWluZXIgcGVwLWlucHV0XCIgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICdkaXNhYmxlJzogZGlzYWJsZWQsXG4gICAgICAgICAgICAgICAgJ3BlcC1yZXBvcnQtY2hlY2tib3gnOiBsYXlvdXRUeXBlID09PSAndGFibGUnICYmICFpc0FjdGl2ZSxcbiAgICAgICAgICAgICAgICAncGVwLWNhcmQtY2hlY2tib3gnOiBsYXlvdXRUeXBlID09PSAnY2FyZCcsXG4gICAgICAgICAgICAgICAgJ29uZS1yb3cnOiByb3dTcGFuID09PSAxLFxuICAgICAgICAgICAgICAgICduby10aXRsZSc6IGxhYmVsLmxlbmd0aCA9PSAwLFxuICAgICAgICAgICAgICAgICdyaWdodC1hbGlnbm1lbnQgcHVsbC1yaWdodCBmbGlwJzogeEFsaWdubWVudCA9PSAncmlnaHQnLFxuICAgICAgICAgICAgICAgICdjZW50ZXItYWxpZ25tZW50JzogeEFsaWdubWVudCA9PSAnY2VudGVyJ1xuICAgICAgICAgICAgfVwiIGRpcj1cInt7IHhBbGlnbm1lbnQgPT0gJ3JpZ2h0JyA/ICdydGwnIDogJ2x0cicgfX1cIj5cbiAgICAgICAgICAgIDwhLS1cbiAgICAgICAgICAgICAgICBUaGlzIGlzIGNhdXNlIGEgYnVnIHRoYXQgd2hlbiBjbGljayBvbiB0aGUgcGVwLWlucHV0IGFyZWEgYW5kIGFmdGVyIG9uIHRoZSBjaGVja2JveFxuICAgICAgICAgICAgICAgIHRoZSB2YWx1ZSBpcyB1cGRhdGVkIG9ubHkgZm9yIHRoZSBzZWNvbmQgdGltZS5cbiAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlQ2hlY2tlZCgkZXZlbnQpXCIgXG4gICAgICAgICAgICAtLT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0eXBlID09ICdib29sZWFuVGV4dCc7IHRoZW4gYm9vbGVhblRleHRUZW1wbGF0ZTsgZWxzZSByZWd1bGFyVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjYm9vbGVhblRleHRUZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWF0LWNoZWNrYm94LWxheW91dCBib2R5LXNtXCIgKGNsaWNrKT1cInRvZ2dsZUNoZWNrZWQoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIFtpZF09XCJrZXlcIiBjbGFzcz1cImVtb2ppLWljb24gZWxsaXBzaXMgcHVsbC1sZWZ0IGZsaXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IHZhbHVlID8gYWRkaXRpb25hbFZhbHVlT2JqZWN0Py5DaGVja2VkVGV4dCA6IGFkZGl0aW9uYWxWYWx1ZU9iamVjdD8uVW5jaGVja2VkVGV4dCB9fVxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJsYWJlbC5sZW5ndGggPiAwICYmIGxheW91dFR5cGUgIT09ICd0YWJsZSdcIiBjbGFzcz1cIm1hdC1jaGVja2JveC1sYWJlbCBlbW9qaS10aXRsZVwiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI3JlZ3VsYXJUZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8bWF0LWNoZWNrYm94IFtuYW1lXT1cImtleVwiIGNsYXNzPVwiYm9keS1zbVwiIHR5cGU9XCJjaGVja2JveFwiIChjaGFuZ2UpPVwib25NYXRlcmlhbENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwidmFsdWVcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJsYWJlbC5sZW5ndGggPiAwICYmIGxheW91dFR5cGUgIT09ICd0YWJsZSdcIj57eyBsYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L21hdC1jaGVja2JveD5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibGF5b3V0VHlwZSA9PT0gJ2Zvcm0nXCI+XG4gICAgICAgIDxwZXAtZmllbGQtdGl0bGUgKm5nSWY9XCJyZW5kZXJUaXRsZVwiIFtsYWJlbF09XCJsYWJlbFwiIFttYW5kYXRvcnldPVwibWFuZGF0b3J5XCIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgIFt4QWxpZ25tZW50XT1cInhBbGlnbm1lbnRcIiBbc2hvd1RpdGxlXT1cImZhbHNlXCI+XG4gICAgICAgIDwvcGVwLWZpZWxkLXRpdGxlPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicGVwVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJsYXlvdXRUeXBlID09PSAnY2FyZCdcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInBlcFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibGF5b3V0VHlwZSA9PT0gJ3RhYmxlJ1wiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwia2V5ID09PSAnSXRlbUhhc0FjdGl2ZUNhbXBhaWduJzsgdGhlbiBpdGVtQ2FtcGFpZ25CbG9jazsgZWxzZSBjaGVja2JveEJsb2NrXCI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctdGVtcGxhdGUgI2l0ZW1DYW1wYWlnbkJsb2NrPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInZhbHVlOyB0aGVuIHRydWVUZW1wbGF0ZTsgZWxzZSBmYWxzZVRlbXBsYXRlXCI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjdHJ1ZVRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImhhcy1hY3RpdmUtY2FtcGFpZ25cIiA+XG4gICAgICAgICAgICAgICAgICAgIDxwZXAtaWNvbiBuYW1lPVwic3lzdGVtX2JvbHRcIj5cbiAgICAgICAgICAgICAgICAgICAgPC9wZXAtaWNvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZmFsc2VUZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8c3Bhbj4mbmJzcDs8L3NwYW4+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8bmctdGVtcGxhdGUgI2NoZWNrYm94QmxvY2s+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicGVwVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L25nLWNvbnRhaW5lcj5cbjwvbmctY29udGFpbmVyPiJdfQ==
@@ -87,7 +87,7 @@ export class PepQuantitySelectorComponent {
87
87
  }
88
88
  // Cut the .000 if exist for non allowDecimal.
89
89
  if (!this.allowDecimal) {
90
- this._value = this._value.split('.')[0];
90
+ this._value = this._value?.split('.')[0];
91
91
  }
92
92
  this.setFormattedValue(this.value);
93
93
  this.changeDisplayValue();
@@ -571,4 +571,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImpor
571
571
  }], isInFocus: [{
572
572
  type: Input
573
573
  }] } });
574
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVhbnRpdHktc2VsZWN0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWxpYi9xdWFudGl0eS1zZWxlY3Rvci9xdWFudGl0eS1zZWxlY3Rvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbGliL3F1YW50aXR5LXNlbGVjdG9yL3F1YW50aXR5LXNlbGVjdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxTQUFTLEVBSVQsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBQ1osU0FBUyxFQUdULHVCQUF1QixHQUcxQixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQ0gsT0FBTyxFQUNQLEtBQUssRUFDTCxLQUFLLEVBQ0wsT0FBTyxFQUNQLFVBQVUsR0FDYixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFHSCx1QkFBdUIsRUFFdkIsNEJBQTRCLEVBRzVCLHdCQUF3QixHQUUzQixNQUFNLHlCQUF5QixDQUFDO0FBQ2pDLE9BQU8sRUFBRSxlQUFlLEVBQXlCLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2RSxPQUFPLEVBQWdCLG9CQUFvQixFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7Ozs7OztBQTZCL0UsTUFBTSxPQUFPLDRCQUE0QjtJQTBPckMsWUFDWSxFQUFxQixFQUNyQixvQkFBNkMsRUFDN0MsUUFBbUIsRUFDbkIsT0FBbUIsRUFDbkIsU0FBMkIsRUFDM0IsZ0JBQXFDO1FBTHJDLE9BQUUsR0FBRixFQUFFLENBQW1CO1FBQ3JCLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBeUI7UUFDN0MsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUNuQixZQUFPLEdBQVAsT0FBTyxDQUFZO1FBQ25CLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQzNCLHFCQUFnQixHQUFoQixnQkFB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VztzQkFEVixNQUFNO2dCQUlQLFlBQVk7c0JBRFgsTUFBTTtnQkFHYyxNQUFNO3NCQUExQixTQUFTO3VCQUFDLFFBQVE7Z0JBQ0csT0FBTztzQkFBNUIsU0FBUzt1QkFBQyxTQUFTO2dCQWVoQixTQUFTO3NCQURaLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBPbkluaXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBJbnB1dCxcbiAgICBPdXRwdXQsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIFZpZXdDaGlsZCxcbiAgICBFbGVtZW50UmVmLFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIFJlbmRlcmVyMixcbiAgICBBZnRlclZpZXdJbml0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7XG4gICAgdHJpZ2dlcixcbiAgICBzdGF0ZSxcbiAgICBzdHlsZSxcbiAgICBhbmltYXRlLFxuICAgIHRyYW5zaXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xuaW1wb3J0IHtcbiAgICBQZXBMYXlvdXRUeXBlLFxuICAgIFBlcFN0eWxlVHlwZSxcbiAgICBQZXBDdXN0b21pemF0aW9uU2VydmljZSxcbiAgICBQZXBIb3Jpem9udGFsQWxpZ25tZW50LFxuICAgIERFRkFVTFRfSE9SSVpPTlRBTF9BTElHTk1FTlQsXG4gICAgSVBlcEZpZWxkQ2xpY2tFdmVudCxcbiAgICBQZXBRdWFudGl0eVNlbGVjdG9yRmllbGRUeXBlLFxuICAgIFBlcFF1YW50aXR5U2VsZWN0b3JGaWVsZCxcbiAgICBQZXBVdGlsaXRpZXNTZXJ2aWNlLFxufSBmcm9tICdAcGVwcGVyaS1hZGRvbnMvbmd4LWxpYic7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGZyb21FdmVudCwgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3BlcC1xdWFudGl0eS1zZWxlY3RvcicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3F1YW50aXR5LXNlbGVjdG9yLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9xdWFudGl0eS1zZWxlY3Rvci5jb21wb25lbnQuc2NzcycsICcuL3F1YW50aXR5LXNlbGVjdG9yLmNvbXBvbmVudC50aGVtZS5zY3NzJ10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgYW5pbWF0aW9uczogW1xuICAgICAgICB0cmlnZ2VyKCdzaG93SGlkZScsIFtcbiAgICAgICAgICAgIHN0YXRlKFxuICAgICAgICAgICAgICAgICdzaG93JyxcbiAgICAgICAgICAgICAgICBzdHlsZSh7XG4gICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDEsXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogJ3NjYWxlKDEpJyxcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHN0YXRlKFxuICAgICAgICAgICAgICAgICdoaWRlJyxcbiAgICAgICAgICAgICAgICBzdHlsZSh7XG4gICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDAsXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogJ3NjYWxlKDApJyxcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHRyYW5zaXRpb24oJ3Nob3cgPT4gaGlkZScsIGFuaW1hdGUoJzI1MG1zIGVhc2Utb3V0JykpLFxuICAgICAgICAgICAgdHJhbnNpdGlvbignaGlkZSA9PiBzaG93JywgYW5pbWF0ZSgnMjUwbXMgZWFzZS1pbicpKSxcbiAgICAgICAgXSksXG4gICAgXSxcbn0pXG5leHBvcnQgY2xhc3MgUGVwUXVhbnRpdHlTZWxlY3RvckNvbXBvbmVudFxuICAgIGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gICAgcHVibGljIHN0YXRpYyBFTlRFUl9DSElMRFJFTiA9ICdbRW50ZXJDaGlsZHJlbl0nO1xuICAgIHB1YmxpYyBzdGF0aWMgRU5URVJfUEFDS0FHRSA9ICdbRW50ZXJQYWNrYWdlXSc7XG4gICAgcHVibGljIHN0YXRpYyBQTFVTID0gJ1srXSc7XG4gICAgcHVibGljIHN0YXRpYyBNSU5VUyA9ICdbLV0nO1xuXG4gICAgQElucHV0KCkga2V5ID0gJyc7XG5cbiAgICBwcml2YXRlIF92YWx1ZSA9IG51bGw7XG4gICAgQElucHV0KClcbiAgICBzZXQgdmFsdWUodmFsdWU6IHN0cmluZykge1xuICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICB2YWx1ZSA9ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaXNEaWZmZXJlbnRWYWx1ZSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDdXQgdGhlIC4wMDAgaWYgZXhpc3QgZm9yIG5vbiBhbGxvd0RlY2ltYWwuXG4gICAgICAgIGlmICghdGhpcy5hbGxvd0RlY2ltYWwpIHtcbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gdGhpcy5fdmFsdWUuc3BsaXQoJy4nKVswXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2V0Rm9ybWF0dGVkVmFsdWUodGhpcy52YWx1ZSk7XG4gICAgICAgIHRoaXMuY2hhbmdlRGlzcGxheVZhbHVlKCk7XG4gICAgfVxuICAgIGdldCB2YWx1ZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gICAgfVxuICAgIFxuICAgIGdldCB2YWx1ZUFzQ3VycmVudEN1bHR1cmUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudXRpbGl0aWVzU2VydmljZS5jaGFuZ2VEZWNpbWFsU2VwYXJhdG9yV2hlbkl0c0NvbW1hKHRoaXMudmFsdWUsIHRydWUpO1xuICAgICAgICAvLyBsZXQgcmVzID0gdGhpcy52YWx1ZTtcblxuICAgICAgICAvLyBpZiAodGhpcy5hbGxvd0RlY2ltYWwpIHtcbiAgICAgICAgLy8gICAgIHJlcyA9IHRoaXMudXRpbGl0aWVzU2VydmljZS5mb3JtYXREZWNpbWFsKHRoaXMudmFsdWUsIHRoaXMubWluRnJhY3Rpb25EaWdpdHMsIHRoaXMubWF4RnJhY3Rpb25EaWdpdHMsIGZhbHNlKTtcbiAgICAgICAgLy8gfVxuICAgICAgICBcbiAgICAgICAgLy8gcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZm9ybWF0dGVkVmFsdWUgPSAnJztcbiAgICAvLyBwcml2YXRlIF9mb3JtYXR0ZWRWYWx1ZSA9ICcnO1xuICAgIC8vIEBJbnB1dCgpXG4gICAgLy8gc2V0IGZvcm1hdHRlZFZhbHVlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAvLyAgICAgLy8gaWYgKCF2YWx1ZSkge1xuICAgIC8vICAgICAvLyAgICAgdmFsdWUgPSAnJztcbiAgICAvLyAgICAgLy8gfVxuXG4gICAgLy8gICAgIC8vIGlmICh0aGlzLl9jYWxjdWxhdGVGb3JtYXR0ZWRWYWx1ZSkge1xuICAgIC8vICAgICAvLyAgICAgdGhpcy5fY2FsY3VsYXRlRm9ybWF0dGVkVmFsdWUgPSBmYWxzZTtcbiAgICAvLyAgICAgLy8gfVxuXG4gICAgLy8gICAgIC8vIHRoaXMuc2V0Rm9ybWF0dGVkVmFsdWUodmFsdWUpO1xuICAgIC8vIH1cbiAgICAvLyBnZXQgZm9ybWF0dGVkVmFsdWUoKTogc3RyaW5nIHtcbiAgICAvLyAgICAgcmV0dXJuIHRoaXMuX2Zvcm1hdHRlZFZhbHVlO1xuICAgIC8vIH1cbiAgICBcbiAgICBwcml2YXRlIF9taW5GcmFjdGlvbkRpZ2l0cyA9IE5hTjtcbiAgICBASW5wdXQoKVxuICAgIHNldCBtaW5GcmFjdGlvbkRpZ2l0cyh2YWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuX21pbkZyYWN0aW9uRGlnaXRzID0gdmFsdWU7XG4gICAgICAgIHRoaXMuc2V0Rm9ybWF0dGVkVmFsdWUodGhpcy52YWx1ZSk7XG4gICAgICAgIHRoaXMuY2hhbmdlRGlzcGxheVZhbHVlKCk7XG4gICAgfVxuICAgIGdldCBtaW5GcmFjdGlvbkRpZ2l0cygpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWluRnJhY3Rpb25EaWdpdHM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfbWF4RnJhY3Rpb25EaWdpdHMgPSBOYU47XG4gICAgQElucHV0KClcbiAgICBzZXQgbWF4RnJhY3Rpb25EaWdpdHModmFsdWU6IG51bWJlcikge1xuICAgICAgICB0aGlzLl9tYXhGcmFjdGlvbkRpZ2l0cyA9IHZhbHVlO1xuICAgICAgICB0aGlzLnNldEZvcm1hdHRlZFZhbHVlKHRoaXMudmFsdWUpO1xuICAgICAgICB0aGlzLmNoYW5nZURpc3BsYXlWYWx1ZSgpO1xuICAgIH1cbiAgICBnZXQgbWF4RnJhY3Rpb25EaWdpdHMoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21heEZyYWN0aW9uRGlnaXRzO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIGxhYmVsID0gJyc7XG4gICAgQElucHV0KCkgdHlwZTogUGVwUXVhbnRpdHlTZWxlY3RvckZpZWxkVHlwZSA9ICdxcyc7XG4gICAgQElucHV0KCkgbWFuZGF0b3J5ID0gZmFsc2U7XG4gICAgQElucHV0KCkgZGlzYWJsZWQgPSBmYWxzZTtcbiAgICBASW5wdXQoKSByZWFkb25seSA9IGZhbHNlO1xuXG4gICAgcHJpdmF0ZSBfdGV4dENvbG9yID0gJyc7XG4gICAgQElucHV0KClcbiAgICBzZXQgdGV4dENvbG9yKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fdGV4dENvbG9yID0gdmFsdWU7XG4gICAgICAgIHRoaXMuaXNDYXV0aW9uID0gdmFsdWUgPT09ICcjRkYwMDAwJztcbiAgICB9XG4gICAgZ2V0IHRleHRDb2xvcigpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGV4dENvbG9yO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHhBbGlnbm1lbnQ6IFBlcEhvcml6b250YWxBbGlnbm1lbnQgPSBERUZBVUxUX0hPUklaT05UQUxfQUxJR05NRU5UO1xuICAgIEBJbnB1dCgpIHJvd1NwYW4gPSAxO1xuICAgIFxuICAgIHByaXZhdGUgX2FsbG93RGVjaW1hbCA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIFxuICAgIHNldCBhbGxvd0RlY2ltYWwodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fYWxsb3dEZWNpbWFsID0gdmFsdWU7XG5cbiAgICAgICAgaWYgKHRoaXMudmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0Rm9ybWF0dGVkVmFsdWUodGhpcy52YWx1ZSk7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZURpc3BsYXlWYWx1ZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBhbGxvd0RlY2ltYWwoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hbGxvd0RlY2ltYWw7XG4gICAgfVxuXG4gICAgQElucHV0KCkgYWRkaXRpb25hbFZhbHVlID0gJyc7XG5cbiAgICBwcml2YXRlIF9ub3RpZmljYXRpb25JbmZvOiBhbnk7XG4gICAgQElucHV0KClcbiAgICBzZXQgbm90aWZpY2F0aW9uSW5mbyh2YWx1ZTogYW55KSB7XG4gICAgICAgIHRoaXMuX25vdGlmaWNhdGlvbkluZm8gPSB2YWx1ZTtcblxuICAgICAgICBjb25zdCBtZXNzYWdlcyA9IHZhbHVlICYmIHZhbHVlID4gMCA/IEpTT04ucGFyc2UodmFsdWUpLk1lc3NhZ2VzIDogJyc7XG4gICAgICAgIGlmIChtZXNzYWdlcyAmJiBtZXNzYWdlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAvLyBSZXBsYWNlIHRoZSBtc2cga2V5cy5cbiAgICAgICAgICAgIGZvciAoY29uc3QgbXNnIG9mIG1lc3NhZ2VzKSB7XG4gICAgICAgICAgICAgICAgaWYgKG1zZy5LZXkgPT09ICdJbnZlbnRvcnlfTGltaXRfTXNnJykge1xuICAgICAgICAgICAgICAgICAgICBtc2cuS2V5ID0gJ01FU1NBR0VTLkVSUk9SX0lOVkVOVE9SWV9MSU1JVCc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtc2cuS2V5ID09PSAnQ2FzZV9RdWFudGl0eV9MaW1pdF9Nc2cnKSB7XG4gICAgICAgICAgICAgICAgICAgIG1zZy5LZXkgPSAnTUVTU0FHRVMuRVJST1JfQ0FTRV9RVUFOVElUWV9MSU1JVCc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtc2cuS2V5ID09PSAnTWluX1F1YW50aXR5X0xpbWl0X01zZycpIHtcbiAgICAgICAgICAgICAgICAgICAgbXNnLktleSA9ICdNRVNTQUdFUy5FUlJPUl9NSU5fUVVBTlRJVFlfTElNSVQnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobXNnLktleSA9PT0gJ01heF9RdWFudGl0eV9MaW1pdF9Nc2cnKSB7XG4gICAgICAgICAgICAgICAgICAgIG1zZy5LZXkgPSAnTUVTU0FHRVMuRVJST1JfTUFYX1FVQU5USVRZX0xJTUlUJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMubWVzc2FnZXMgPSBtZXNzYWdlcztcblxuICAgICAgICAgICAgY29uc3QgZmllbGRDb250cm9sID0gdGhpcy5mb3JtLmNvbnRyb2xzW3RoaXMua2V5XTtcbiAgICAgICAgICAgIGZpZWxkQ29udHJvbC5zZXRFcnJvcnMoe1xuICAgICAgICAgICAgICAgIHNlcnZlckVycm9yOiAnRXJyb3InLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMuc2FtZUVsZW1lbnRJblRoZVdhbnRlZFJvdyA9IG51bGw7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5RU0lucHV0ICYmIHRoaXMuUVNJbnB1dC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuUVNJbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgMTUwKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXQgbm90aWZpY2F0aW9uSW5mbygpOiBhbnkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbm90aWZpY2F0aW9uSW5mbztcbiAgICB9XG5cbiAgICBwcml2YXRlIF92aXNpYmxlID0gdHJ1ZTtcbiAgICBASW5wdXQoKVxuICAgIHNldCB2aXNpYmxlKHZpc2libGU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fdmlzaWJsZSA9IHZpc2libGU7XG4gICAgICAgIGlmICh2aXNpYmxlKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKFxuICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICAgICAgICdoaWRkZW4tZWxlbWVudCdcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKFxuICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICAgICAgICdoaWRkZW4tZWxlbWVudCdcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IHZpc2libGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl92aXNpYmxlO1xuICAgIH1cblxuICAgIGNvbnRyb2xUeXBlID0gJ3FzJztcblxuICAgIEBJbnB1dCgpIGZvcm06IEZvcm1Hcm91cCA9IG51bGw7XG4gICAgQElucHV0KCkgc2hvd1RpdGxlID0gdHJ1ZTtcbiAgICBASW5wdXQoKSByZW5kZXJUaXRsZSA9IHRydWU7XG4gICAgQElucHV0KCkgbGF5b3V0VHlwZTogUGVwTGF5b3V0VHlwZSA9ICdmb3JtJztcbiAgICBASW5wdXQoKSBpc0FjdGl2ZSA9IGZhbHNlO1xuXG4gICAgLy8gR2V0IGRlZmF1bHQgc3R5bGUgZnJvbSB0aGVtZS5cbiAgICBASW5wdXQoKVxuICAgIHN0eWxlVHlwZTogUGVwU3R5bGVUeXBlID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLmdldFByb3BlcnR5VmFsdWUoXG4gICAgICAgIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlNUWUxFX1FTX0tFWVxuICAgICkgYXMgUGVwU3R5bGVUeXBlOyAvLydzdHJvbmcnO1xuXG4gICAgQE91dHB1dCgpXG4gICAgdmFsdWVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgICBAT3V0cHV0KClcbiAgICBlbGVtZW50Q2xpY2s6IEV2ZW50RW1pdHRlcjxJUGVwRmllbGRDbGlja0V2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8SVBlcEZpZWxkQ2xpY2tFdmVudD4oKTtcblxuICAgIEBWaWV3Q2hpbGQoJ1FTQ29udCcpIFFTQ29udDogRWxlbWVudFJlZjtcbiAgICBAVmlld0NoaWxkKCdRU0lucHV0JykgUVNJbnB1dDogRWxlbWVudFJlZjtcblxuICAgIHByaXZhdGUgX2NhbGN1bGF0ZUZvcm1hdHRlZFZhbHVlID0gdHJ1ZTtcbiAgICBnZXQgY2FsY3VsYXRlRm9ybWF0dGVkVmFsdWUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jYWxjdWxhdGVGb3JtYXR0ZWRWYWx1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9kZXN0cm95ZWQ6IFN1YmplY3Q8dm9pZD47XG4gICAgcHJpdmF0ZSBxc1dpZHRoU3ViamVjdDogQmVoYXZpb3JTdWJqZWN0PG51bWJlcj47XG4gICAgbGFzdFFzQ29udENsaWVudFdpZHRoID0gMDtcbiAgICBzaG93UXNCdG4gPSB0cnVlO1xuXG4gICAgc3RhbmRBbG9uZSA9IGZhbHNlO1xuICAgIHByaXZhdGUgX2lzSW5Gb2N1cyA9IGZhbHNlO1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGlzSW5Gb2N1cyhpc0luRm9jdXM6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5faXNJbkZvY3VzID0gaXNJbkZvY3VzO1xuICAgICAgICB0aGlzLmNoYW5nZURpc3BsYXlWYWx1ZSgpO1xuICAgIH1cbiAgICBnZXQgaXNJbkZvY3VzKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNJbkZvY3VzO1xuICAgIH1cbiAgICBpc01hdHJpeEZvY3VzID0gZmFsc2U7XG5cbiAgICBpc0NhdXRpb24gPSBmYWxzZTtcbiAgICBtZXNzYWdlczogQXJyYXk8YW55PiA9IG51bGw7XG5cbiAgICBzYW1lRWxlbWVudEluVGhlV2FudGVkUm93ID0gbnVsbDtcblxuICAgIGlzRW1wdHlLZXkgPSBmYWxzZTtcblxuICAgIHByaXZhdGUgX2Rpc3BsYXlWYWx1ZVN1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KCcnKTtcbiAgICBnZXQgZGlzcGxheVZhbHVlJCgpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGlzcGxheVZhbHVlU3ViamVjdC5hc09ic2VydmFibGUoKS5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJpdmF0ZSBjdXN0b21pemF0aW9uU2VydmljZTogUGVwQ3VzdG9taXphdGlvblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICAgICAgcHJpdmF0ZSBlbGVtZW50OiBFbGVtZW50UmVmLFxuICAgICAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSB1dGlsaXRpZXNTZXJ2aWNlOiBQZXBVdGlsaXRpZXNTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIHRoaXMuX2Rlc3Ryb3llZCA9IG5ldyBTdWJqZWN0KCk7XG4gICAgICAgIC8vIHRoaXMucXNXaWR0aFN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KDApO1xuICAgIH1cblxuICAgIHNldEZvcm0oKSB7XG4gICAgICAgIGNvbnN0IHBlcEZpZWxkID0gbmV3IFBlcFF1YW50aXR5U2VsZWN0b3JGaWVsZCh7XG4gICAgICAgICAgICBrZXk6IHRoaXMua2V5LFxuICAgICAgICAgICAgdmFsdWU6IHRoaXMudmFsdWVBc0N1cnJlbnRDdWx0dXJlLFxuICAgICAgICAgICAgbWFuZGF0b3J5OiB0aGlzLm1hbmRhdG9yeSxcbiAgICAgICAgICAgIHJlYWRvbmx5OiB0aGlzLnJlYWRvbmx5LFxuICAgICAgICAgICAgZGlzYWJsZWQ6IHRoaXMuZGlzYWJsZWQsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmZvcm0gPSB0aGlzLmN1c3RvbWl6YXRpb25TZXJ2aWNlLmdldERlZmF1bHRGcm9tR3JvdXAocGVwRmllbGQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0Rm9ybWF0dGVkVmFsdWUodmFsdWU6IHN0cmluZykge1xuICAgICAgICBpZiAodGhpcy5fY2FsY3VsYXRlRm9ybWF0dGVkVmFsdWUpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmFsbG93RGVjaW1hbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybWF0dGVkVmFsdWUgPSB0aGlzLnV0aWxpdGllc1NlcnZpY2UuZm9ybWF0RGVjaW1hbCh2YWx1ZSwgdGhpcy5taW5GcmFjdGlvbkRpZ2l0cywgdGhpcy5tYXhGcmFjdGlvbkRpZ2l0cyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybWF0dGVkVmFsdWUgPSB0aGlzLnV0aWxpdGllc1NlcnZpY2UuZm9ybWF0TnVtYmVyKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0dGVkVmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgdGhpcy51cGRhdGVGb3JtRmllbGRWYWx1ZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgbm90aWZ5RGlzcGxheVZhbHVlQ2hhbmdlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fZGlzcGxheVZhbHVlU3ViamVjdC5uZXh0KHZhbHVlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNoYW5nZURpc3BsYXlWYWx1ZSgpOiB2b2lkIHtcbiAgICAgICAgbGV0IHJlcyA9ICcnO1xuXG4gICAgICAgIGlmICh0aGlzLmFsbG93RGVjaW1hbCkge1xuICAgICAgICAgICAgcmVzID0gdGhpcy5pc0luRm9jdXMgPyB0aGlzLnZhbHVlQXNDdXJyZW50Q3VsdHVyZSA6IHRoaXMuZm9ybWF0dGVkVmFsdWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXMgPSB0aGlzLmlzSW5Gb2N1cyA/IHRoaXMudmFsdWUgOiB0aGlzLmZvcm1hdHRlZFZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5ub3RpZnlEaXNwbGF5VmFsdWVDaGFuZ2UocmVzKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ2NoYW5nZURpc3BsYXlWYWx1ZScgKyByZXMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlRm9ybUZpZWxkVmFsdWUoZmlyc3RMb2FkID0gZmFsc2UpIHtcbiAgICAgICAgLy8gU2V0IHRoZSBmb3JtYXR0ZWQgdmFsdWUgb25seSBmb3IgdGhlIGZpcnN0IGxvYWQgY2F1c2UgaXQncyBub3QgZm9ybWF0dGVkIGlmIHdlIHNldCB0aGUgdmFsdWUgKEkgZG9uJ3Qga25vdyB3aHkpXG4gICAgICAgIC8vIEVsc2Ugd2Ugc2V0IHRoZSB2YWx1ZSAtIHRoaXMgaXMgaW1wb3J0YW50IHRvIHNldCB0aGUgdmFsdWUgb25seSBjYXVzZSBzZXR0aW5nIHRoZSBmb3JtYXR0ZWQgdmFsdWUgd2lsbCBjYXVzZSBidWcgd2hlbiB0aGUgbnVtYmVyIGlzIHdpdGggdGhvdXNhbmQgc2VwYXJhdG9yXG4gICAgICAgIHRoaXMuY3VzdG9taXphdGlvblNlcnZpY2UudXBkYXRlRm9ybUZpZWxkVmFsdWUoXG4gICAgICAgICAgICB0aGlzLmZvcm0sXG4gICAgICAgICAgICB0aGlzLmtleSxcbiAgICAgICAgICAgIGZpcnN0TG9hZCA/IHRoaXMuZm9ybWF0dGVkVmFsdWUgOiB0aGlzLnZhbHVlLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8vIGdldCBkaXNwbGF5VmFsdWUoKTogc3RyaW5nIHtcbiAgICAvLyAgICAgY29uc3QgcmVzID0gdGhpcy5pc0luRm9jdXNcbiAgICAvLyAgICAgICAgID8gdGhpcy51dGlsaXRpZXNTZXJ2aWNlLmZvcm1hdERlY2ltYWwodGhpcy52YWx1ZSwgdGhpcy5taW5GcmFjdGlvbkRpZ2l0cywgdGhpcy5tYXhGcmFjdGlvbkRpZ2l0cylcbiAgICAvLyAgICAgICAgIDogdGhpcy5mb3JtYXR0ZWRWYWx1ZTtcbiAgICAvLyAgICAgcmV0dXJuIHJlcztcbiAgICAvLyB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0RGVzdHJveWVyKCkge1xuICAgICAgICByZXR1cm4gdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3llZCk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmZvcm0gPT09IG51bGwpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmtleSA9PT0gJycpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzRW1wdHlLZXkgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnN0YW5kQWxvbmUgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5zZXRGb3JtKCk7XG5cbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoXG4gICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuU1RBTkRfQUxPTkVfRklFTERfQ0xBU1NfTkFNRVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaWYgKCF0aGlzLnJlbmRlclRpdGxlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlNUQU5EX0FMT05FX0ZJRUxEX05PX1NQQUNJTkdfQ0xBU1NfTkFNRVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyB0aGlzLnFzV2lkdGhTdWJqZWN0XG4gICAgICAgIC8vICAgICAuYXNPYnNlcnZhYmxlKClcbiAgICAgICAgLy8gICAgIC5waXBlKHRoaXMuZ2V0RGVzdHJveWVyKCksIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpXG4gICAgICAgIC8vICAgICAuc3Vic2NyaWJlKChxc1dpZHRoOiBudW1iZXIpID0+IHtcbiAgICAgICAgLy8gICAgICAgICB0aGlzLnNldHVwUXNCdXR0b25zKHFzV2lkdGgpO1xuICAgICAgICAvLyAgICAgfSk7XG5cbiAgICAgICAgdGhpcy51cGRhdGVGb3JtRmllbGRWYWx1ZSh0cnVlKTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgLy8gZGVidWdnZXI7XG4gICAgICAgICAgICBpZiAodGhpcy5RU0NvbnQgJiZcbiAgICAgICAgICAgICAgICB0aGlzLlFTQ29udC5uYXRpdmVFbGVtZW50ICYmXG4gICAgICAgICAgICAgICAgdGhpcy5RU0NvbnQubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aCA+IDBcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2hvd1FzQnRuID0gdGhpcy5RU0NvbnQubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aCA+IDEyMDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCF0aGlzLmNkWydkZXN0cm95ZWQnXSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCAwKTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0NoZWNrZWQoKTogdm9pZCB7XG4gICAgICAgIC8vIHRoaXMuc2V0UXNWaWV3KCk7XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogYW55KTogdm9pZCB7XG4gICAgICAgIC8vIEJ1ZyBmaXggZm9yIGFkZG9ucyB3aGVuIHRoZSBrZXkgaXMgJycgaW4gdGhlIG5nT25Jbml0IGZvciBzb21lIHJlc29uXG4gICAgICAgIGlmICh0aGlzLmlzRW1wdHlLZXkgJiYgdGhpcy5rZXkgIT09ICcnKSB7XG4gICAgICAgICAgICB0aGlzLnNldEZvcm0oKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5mb2N1c1RvVGhlU2FtZUVsZW1lbnRJblRoZVdhbnRlZFJvdygpO1xuICAgICAgICB9LCAxNTApO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9kZXN0cm95ZWQubmV4dCgpO1xuICAgICAgICB0aGlzLl9kZXN0cm95ZWQuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICBnZXQgZ2V0QWRkaXRpb25hbFZhbHVlKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZGl0aW9uYWxWYWx1ZS5sZW5ndGggPiAwID8gJ3Nob3cnIDogJ2hpZGUnO1xuICAgIH1cblxuICAgIGdldFBhcmVudEJ5Q2xhc3MoZWwsIHBhcmVudFNlbGVjdG9yIC8qIG9wdGlvbmFsICovKTogYW55IHtcbiAgICAgICAgLy8gSWYgbm8gcGFyZW50U2VsZWN0b3IgZGVmaW5lZCB3aWxsIGJ1YmJsZSB1cCBhbGwgdGhlIHdheSB0byAqZG9jdW1lbnQqXG4gICAgICAgIGlmIChwYXJlbnRTZWxlY3RvciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBwYXJlbnRTZWxlY3RvciA9IGRvY3VtZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHAgPSBlbC5wYXJlbnROb2RlO1xuXG4gICAgICAgIHdoaWxlIChcbiAgICAgICAgICAgIHAgJiZcbiAgICAgICAgICAgICFwPy5jbGFzc0xpc3Q/LmNvbnRhaW5zKHBhcmVudFNlbGVjdG9yKSAmJlxuICAgICAgICAgICAgcGFyZW50U2VsZWN0b3IgIT09IGRvY3VtZW50XG4gICAgICAgICkge1xuICAgICAgICAgICAgY29uc3QgbyA9IHA7XG4gICAgICAgICAgICBwID0gbz8ucGFyZW50Tm9kZSB8fCBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHA/LmNsYXNzTmFtZS5pbmRleE9mKHBhcmVudFNlbGVjdG9yKSA+IC0xID8gcCA6IG51bGw7XG4gICAgfVxuXG4gICAgZ2V0U2FtZUVsZW1lbnRJblRoZVdhbnRlZFJvd0J5Q2xhc3NOYW1lKGV2ZW50OiBhbnksIGlzTmV4dCA9IHRydWUpOiBhbnkge1xuICAgICAgICBjb25zdCBldmVudFRhcmdldCA9IGV2ZW50LnRhcmdldCB8fCBldmVudC5zcmNFbGVtZW50O1xuICAgICAgICBsZXQgc2FtZUVsZW1lbnRJblRoZVdhbnRlZFJvd0J5Q2xhc3NOYW1lO1xuXG4gICAgICAgIGxldCBwYXJlbnRTZWxlY3RvcjtcbiAgICAgICAgaWYgKHRoaXMubGF5b3V0VHlwZSA9PT0gJ3RhYmxlJykge1xuICAgICAgICAgICAgcGFyZW50U2VsZWN0b3IgPSB0aGlzLmdldFBhcmVudEJ5Q2xhc3MoZXZlbnRUYXJnZXQsICd0YWJsZS1yb3cnKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmxheW91dFR5cGUgPT09ICdjYXJkJykge1xuICAgICAgICAgICAgcGFyZW50U2VsZWN0b3IgPSB0aGlzLmdldFBhcmVudEJ5Q2xhc3MoZXZlbnRUYXJnZXQsICdjYXJkLXZpZXcnKTtcbiAgICAgICAgICAgIGlmICghcGFyZW50U2VsZWN0b3IpIHtcbiAgICAgICAgICAgICAgICBwYXJlbnRTZWxlY3RvciA9IHRoaXMuZ2V0UGFyZW50QnlDbGFzcyhcbiAgICAgICAgICAgICAgICAgICAgZXZlbnRUYXJnZXQsXG4gICAgICAgICAgICAgICAgICAgICdsaW5lLXZpZXcnXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHBhcmVudFNlbGVjdG9yLm5leHRFbGVtZW50U2libGluZyA9PT0gbnVsbCAmJlxuICAgICAgICAgICAgcGFyZW50U2VsZWN0b3IucHJldmlvdXNFbGVtZW50U2libGluZyA9PT0gbnVsbFxuICAgICAgICApIHtcbiAgICAgICAgICAgIHNhbWVFbGVtZW50SW5UaGVXYW50ZWRSb3dCeUNsYXNzTmFtZSA9IG51bGw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoaXNOZXh0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHBhcmVudFNlbGVjdG9yLm5leHRFbGVtZW50U2libGluZyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBzYW1lRWxlbWVudEluVGhlV2FudGVkUm93QnlDbGFzc05hbWUgPSBwYXJlbnRTZWxlY3Rvci5wYXJlbnRFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICAgICAgICAgICAgICAgICAgICAnW25hbWU9JyArIHRoaXMua2V5ICsgJ10nXG4gICAgICAgICAgICAgICAgICAgIClbMF07XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc2FtZUVsZW1lbnRJblRoZVdhbnRlZFJvd0J5Q2xhc3NOYW1lID0gcGFyZW50U2VsZWN0b3IubmV4dEVsZW1lbnRTaWJsaW5nLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICAgICAgICAgICAgICAgICAgICAnW25hbWU9JyArIHRoaXMua2V5ICsgJ10nXG4gICAgICAgICAgICAgICAgICAgIClbMF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAocGFyZW50U2VsZWN0b3IucHJldmlvdXNFbGVtZW50U2libGluZyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50c0xpc3QgPSBwYXJlbnRTZWxlY3Rvci5wYXJlbnRFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICAgICAgICAgICAgICAgICAgICAnW25hbWU9JyArIHRoaXMua2V5ICsgJ10nXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIHNhbWVFbGVtZW50SW5UaGVXYW50ZWRSb3dCeUNsYXNzTmFtZSA9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50c0xpc3RbZWxlbWVudHNMaXN0Lmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHNhbWVFbGVtZW50SW5UaGVXYW50ZWRSb3dCeUNsYXNzTmFtZSA9IHBhcmVudFNlbGVjdG9yLnByZXZpb3VzRWxlbWVudFNpYmxpbmcucXVlcnlTZWxlY3RvckFsbChcbiAgICAgICAgICAgICAgICAgICAgICAgICdbbmFtZT0nICsgdGhpcy5rZXkgKyAnXSdcbiAgICAgICAgICAgICAgICAgICAgKVswXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc2FtZUVsZW1lbnRJblRoZVdhbnRlZFJvd0J5Q2xhc3NOYW1lO1xuICAgIH1cblxuICAgIHNldFNhbWVFbGVtZW50SW5UaGVXYW50ZWRSb3coZXZlbnQ6IGFueSwgaXNOZXh0ID0gdHJ1ZSk6IHZvaWQge1xuICAgICAgICAvLyBOYXZpZ2F0ZSB0byB0aGUgUVMgaW4gdGhlIG5leHQgcm93LlxuICAgICAgICBpZiAodGhpcy5sYXlvdXRUeXBlID09PSAnY2FyZCcgfHwgdGhpcy5sYXlvdXRUeXBlID09PSAndGFibGUnKSB7XG4gICAgICAgICAgICB0aGlzLnNhbWVFbGVtZW50SW5UaGVXYW50ZWRSb3cgPSB0aGlzLmdldFNhbWVFbGVtZW50SW5UaGVXYW50ZWRSb3dCeUNsYXNzTmFtZShcbiAgICAgICAgICAgICAgICBldmVudCxcbiAgICAgICAgICAgICAgICBpc05leHRcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLlFTSW5wdXQubmF0aXZlRWxlbWVudC5ibHVyKCk7XG4gICAgfVxuXG4gICAgZm9jdXNUb1RoZVNhbWVFbGVtZW50SW5UaGVXYW50ZWRSb3coKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnNhbWVFbGVtZW50SW5UaGVXYW50ZWRSb3cpIHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW0gPSB0aGlzLnNhbWVFbGVtZW50SW5UaGVXYW50ZWRSb3c7XG4gICAgICAgICAgICAvLyBJZiB0aGlzIGlzIHJlZ3VsYXIgaXRlbSAocXMgYW5kIG5vdCBidXR0b24pIC5cbiAgICAgICAgICAgIGlmIChlbGVtIGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCAmJiBlbGVtLnR5cGUgPT09ICd0ZXh0Jykge1xuICAgICAgICAgICAgICAgIGVsZW0uY2xpY2soKTtcbiAgICAgICAgICAgICAgICBlbGVtLnNlbGVjdCgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRFbGVtID0gZWxlbS5wYXJlbnROb2RlO1xuICAgICAgICAgICAgICAgIHBhcmVudEVsZW0uY2xpY2soKTtcbiAgICAgICAgICAgICAgICBlbGVtLmZvY3VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNhbWVFbGVtZW50SW5UaGVXYW50ZWRSb3cgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xlYW5FcnJvcigpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZmllbGRDb250cm9sID0gdGhpcy5mb3JtLmNvbnRyb2xzW3RoaXMua2V5XTtcblxuICAgICAgICAvLyBDbGVhbiB0aGUgZXJyb3IgbWVzc2FnZVxuICAgICAgICBpZiAodGhpcy5tZXNzYWdlcyAmJiB0aGlzLm1lc3NhZ2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZXMgPSB0aGlzLm5vdGlmaWNhdGlvbkluZm8gPSBudWxsO1xuICAgICAgICAgICAgZmllbGRDb250cm9sLnNldEVycm9ycyhudWxsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uTWF0cml4TW91c2VFbnRlcihldmVudDogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNNYXRyaXhGb2N1cyA9IHRydWU7XG4gICAgfVxuXG4gICAgb25NYXRyaXhNb3VzZWxlYXZlKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pc01hdHJpeEZvY3VzID0gZmFsc2U7XG4gICAgfVxuXG4gICAgb25NYXRyaXhDbGljayhldmVudDogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNJbkZvY3VzID0gdHJ1ZTtcblxuICAgICAgICBpZiAodGhpcy5RU0lucHV0ICYmIHRoaXMuUVNJbnB1dC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLlFTSW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25NYXRyaXhCbHVyKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgIWV2ZW50LnJlbGF0ZWRUYXJnZXQgfHxcbiAgICAgICAgICAgIGV2ZW50LnJlbGF0ZWRUYXJnZXQuY2xhc3NOYW1lLmluZGV4T2YoJ3FzJykgPCAwXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5pc01hdHJpeEZvY3VzID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm9uQmx1cihldmVudCk7XG4gICAgfVxuXG4gICAgb25Gb2N1cyhldmVudDogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNJbkZvY3VzID0gdHJ1ZTtcblxuICAgICAgICAvLyBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgLy8gICAgIGlmICh0aGlzLmlzSW5Gb2N1cykge1xuICAgICAgICAvLyAgICAgICAgIGNvbnN0IGV2ZW50VGFyZ2V0ID0gZXZlbnQudGFyZ2V0IHx8IGV2ZW50LnNyY0VsZW1lbnQ7XG4gICAgICAgIC8vICAgICAgICAgaWYgKGV2ZW50VGFyZ2V0KSB7XG4gICAgICAgIC8vICAgICAgICAgICAgIGV2ZW50VGFyZ2V0LnNlbGVjdCgpO1xuICAgICAgICAvLyAgICAgICAgIH1cbiAgICAgICAgLy8gICAgIH1cbiAgICAgICAgLy8gfSwgMCk7XG4gICAgfVxuXG4gICAgaXNEaWZmZXJlbnRWYWx1ZSh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHJlcyA9IHRoaXMudXRpbGl0aWVzU2VydmljZS5pc0VxdWFsTnVtYmVyKHRoaXMudmFsdWVBc0N1cnJlbnRDdWx0dXJlLCB2YWx1ZSkgPT09IGZhbHNlO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIG9uQmx1cihldmVudDogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNJbkZvY3VzID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY2xlYW5FcnJvcigpO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGV2ZW50LnRhcmdldCA/IGV2ZW50LnRhcmdldC52YWx1ZSA6IGV2ZW50O1xuXG4gICAgICAgIC8vIEZvciBkZWNpbWFsIHdlIG5lZWQgdG8gcmVwbGFjZSB0aGUgZGVjaW1hbCBzZXBhcmF0b3IgYmFjayBpZiBpdCdzIGNvbW1hICgnLCcpLlxuICAgICAgICBjb25zdCBjb3JyZWN0VmFsdWUgPSB0aGlzLmFsbG93RGVjaW1hbCA/IHRoaXMudXRpbGl0aWVzU2VydmljZS5jaGFuZ2VEZWNpbWFsU2VwYXJhdG9yV2hlbkl0c0NvbW1hKHZhbHVlKSA6IHZhbHVlO1xuICAgICAgICBcbiAgICAgICAgaWYgKGNvcnJlY3RWYWx1ZSAhPT0gdGhpcy52YWx1ZUFzQ3VycmVudEN1bHR1cmUgJiYgdGhpcy5pc0RpZmZlcmVudFZhbHVlKHZhbHVlKSkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGNvcnJlY3RWYWx1ZTtcbiAgICAgICAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgdGhpcy5mb2N1c1RvVGhlU2FtZUVsZW1lbnRJblRoZVdhbnRlZFJvdygpO1xuICAgIH1cblxuICAgIG9uS2V5ZG93bihldmVudCk6IGFueSB7XG4gICAgICAgIGNvbnN0IGtleWJvYXJkRXZlbnQgPSBldmVudCBhcyBLZXlib2FyZEV2ZW50O1xuXG4gICAgICAgIGlmIChrZXlib2FyZEV2ZW50LmtleSA9PT0gJ0VudGVyJykge1xuICAgICAgICAgICAgdGhpcy5zZXRTYW1lRWxlbWVudEluVGhlV2FudGVkUm93KFxuICAgICAgICAgICAgICAgIGtleWJvYXJkRXZlbnQsXG4gICAgICAgICAgICAgICAgIWtleWJvYXJkRXZlbnQuc2hpZnRLZXlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluY3JlbWVudChldmVudCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zdGFuZEFsb25lKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy51dGlsaXRpZXNTZXJ2aWNlLmluY3JlbWVudE51bWJlcih0aGlzLnZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZWxlbWVudENsaWNrLmVtaXQoe1xuICAgICAgICAgICAga2V5OiB0aGlzLmtleSxcbiAgICAgICAgICAgIHZhbHVlOiBQZXBRdWFudGl0eVNlbGVjdG9yQ29tcG9uZW50LlBMVVMsXG4gICAgICAgICAgICBjb250cm9sVHlwZTogdGhpcy5jb250cm9sVHlwZSxcbiAgICAgICAgICAgIGV2ZW50V2hpY2g6IGV2ZW50LndoaWNoLFxuICAgICAgICB9KTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuXG4gICAgZGVjcmVtZW50KGV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnN0YW5kQWxvbmUpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnV0aWxpdGllc1NlcnZpY2UuZGVjcmVtZW50TnVtYmVyKHRoaXMudmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5lbGVtZW50Q2xpY2suZW1pdCh7XG4gICAgICAgICAgICBrZXk6IHRoaXMua2V5LFxuICAgICAgICAgICAgdmFsdWU6IFBlcFF1YW50aXR5U2VsZWN0b3JDb21wb25lbnQuTUlOVVMsXG4gICAgICAgICAgICBjb250cm9sVHlwZTogdGhpcy5jb250cm9sVHlwZSxcbiAgICAgICAgICAgIGV2ZW50V2hpY2g6IGV2ZW50LndoaWNoLFxuICAgICAgICB9KTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuXG4gICAgZW50ZXJDaGlsZHJlbihldmVudCk6IHZvaWQge1xuICAgICAgICB0aGlzLmVsZW1lbnRDbGljay5lbWl0KHtcbiAgICAgICAgICAgIGtleTogdGhpcy5rZXksXG4gICAgICAgICAgICB2YWx1ZTogUGVwUXVhbnRpdHlTZWxlY3RvckNvbXBvbmVudC5FTlRFUl9DSElMRFJFTixcbiAgICAgICAgICAgIGNvbnRyb2xUeXBlOiB0aGlzLmNvbnRyb2xUeXBlLFxuICAgICAgICAgICAgZXZlbnRXaGljaDogZXZlbnQud2hpY2gsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGVudGVyUGFja2FnZShldmVudCk6IHZvaWQge1xuICAgICAgICB0aGlzLmVsZW1lbnRDbGljay5lbWl0KHtcbiAgICAgICAgICAgIGtleTogdGhpcy5rZXksXG4gICAgICAgICAgICB2YWx1ZTogUGVwUXVhbnRpdHlTZWxlY3RvckNvbXBvbmVudC5FTlRFUl9QQUNLQUdFLFxuICAgICAgICAgICAgY29udHJvbFR5cGU6IHRoaXMuY29udHJvbFR5cGUsXG4gICAgICAgICAgICBldmVudFdoaWNoOiBldmVudC53aGljaCxcbiAgICAgICAgICAgIG90aGVyRGF0YTogdGhpcy5ub3RpZmljYXRpb25JbmZvLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBzZXR1cFFzQnV0dG9ucyhxc1dpZHRoOiBudW1iZXIpIHtcbiAgICAvLyAgICAgdGhpcy5zaG93UXNCdG4gPSBxc1dpZHRoID4gMTIwO1xuXG4gICAgLy8gICAgIGlmICghdGhpcy5jZFsnZGVzdHJveWVkJ10pIHtcbiAgICAvLyAgICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIC8vICAgICB9XG4gICAgLy8gfVxuXG4gICAgLy8gc2V0UXNWaWV3KCk6IHZvaWQge1xuICAgIC8vICAgICBpZiAoXG4gICAgLy8gICAgICAgICB0aGlzLlFTQ29udCAmJlxuICAgIC8vICAgICAgICAgdGhpcy5RU0NvbnQubmF0aXZlRWxlbWVudCAmJlxuICAgIC8vICAgICAgICAgdGhpcy5RU0NvbnQubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aCA+IDBcbiAgICAvLyAgICAgKSB7XG4gICAgLy8gICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAvLyAgICAgICAgICAgICB0aGlzLnFzV2lkdGhTdWJqZWN0Lm5leHQodGhpcy5RU0NvbnQubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aCk7XG4gICAgLy8gICAgICAgICB9LCAwKTtcbiAgICAvLyAgICAgfVxuICAgIC8vIH1cbn1cbiIsIjxuZy1jb250YWluZXIgW2Zvcm1Hcm91cF09XCJmb3JtXCI+XG4gICAgPG5nLXRlbXBsYXRlICNwZXBUZW1wbGF0ZT5cbiAgICAgICAgPGRpdiAjUVNDb250IGNsYXNzPVwicGVwLXF1YW50aXR5LXNlbGVjdG9yLWNvbnRhaW5lciB7eyBzdHlsZVR5cGUgfX1cIiBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgJ2hpZGUtcXMtYWN0aW9ucycgOiBsYXlvdXRUeXBlID09PSAnY2FyZCcgJiYgcm93U3BhbiA8PSAxLFxuICAgICAgICAgICAgICAgICdwZXAtdGFibGUtcXVhbnRpdHktc2VsZWN0b3InOiBsYXlvdXRUeXBlID09PSAndGFibGUnLFxuICAgICAgICAgICAgICAgICdvbmUtcm93Jzogcm93U3BhbiA9PT0gMSxcbiAgICAgICAgICAgICAgICBjYXV0aW9uOiBpc0NhdXRpb24sXG4gICAgICAgICAgICAgICAgJ21hdHJpeC1xcyc6IHR5cGUgPT09ICdxc0Zvck1hdHJpeCcsXG4gICAgICAgICAgICAgICAgJ3plcm8tcXVhbnRpdHknOiBmb3JtYXR0ZWRWYWx1ZSA9PT0gJzAnXG4gICAgICAgICAgICB9XCI+XG4gICAgICAgICAgICA8cGVwLWZpZWxkLXRpdGxlICpuZ0lmPVwicmVuZGVyVGl0bGUgJiYgbGF5b3V0VHlwZSAhPT0gJ3RhYmxlJyAmJiBsYXlvdXRUeXBlICE9PSAnY2FyZCdcIiBbbGFiZWxdPVwibGFiZWxcIlxuICAgICAgICAgICAgICAgIFttYW5kYXRvcnldPVwibWFuZGF0b3J5XCIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCIgW3Nob3dUaXRsZV09XCJzaG93VGl0bGVcIiBbeEFsaWdubWVudF09XCJ4QWxpZ25tZW50XCI+XG4gICAgICAgICAgICA8L3BlcC1maWVsZC10aXRsZT5cblxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInR5cGUgPT0gJ3FzJ1wiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJyZWFkb25seTsgdGhlbiByZWFkb25seUJsb2NrOyBlbHNlIGVkaXRhYmxlUVNCbG9ja1wiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcmVhZG9ubHlCbG9jaz5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBbaWRdPVwia2V5XCIgbWF0LWJ1dHRvbiBjbGFzcz1cInBlcC1idXR0b24ge3sgc3R5bGVUeXBlIH19IGRpc2FibGUgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntjYXV0aW9uOiBpc0NhdXRpb24sIG1kOiByb3dTcGFuICE9PSAxLCB4czogcm93U3BhbiA9PT0gMX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJ7eyBmb3JtYXR0ZWRWYWx1ZSB9fVwiIGRpc2FibGVkPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJlbGxpcHNpc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGZvcm1hdHRlZFZhbHVlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNlZGl0YWJsZVFTQmxvY2s+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHBlcFFzVmFsaWRhdGlvbiBbYWxsb3dEZWNpbWFsXT1cImFsbG93RGVjaW1hbFwiIHR5cGU9XCJkZWNpbWFsTnVtYmVyXCIgaW5wdXRtb2RlPVwiZGVjaW1hbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0SW5wdXQgI1FTSW5wdXQgbmFtZT1cInt7IGtleSB9fVwiIGNsYXNzPVwiYm9keS1sZyBlbGxpcHNpc1wiIHRpdGxlPVwie3sgZm9ybWF0dGVkVmFsdWUgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiIFtpZF09XCJrZXlcIiBbZm9ybUNvbnRyb2xOYW1lXT1cImtleVwiIFt2YWx1ZV09XCJkaXNwbGF5VmFsdWUkIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQudGFyZ2V0LnNldFNlbGVjdGlvblJhbmdlKDAsIDk5OSlcIiAoa2V5ZG93bik9XCJvbktleWRvd24oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJsdXIpPVwib25CbHVyKCRldmVudClcIiAoZm9jdXMpPVwib25Gb2N1cygkZXZlbnQpXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJzaG93UXNCdG5cIiBtYXQtYnV0dG9uIG1hdFByZWZpeCAoY2xpY2spPVwiZGVjcmVtZW50KCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicGVwLWJ1dHRvbiBpY29uLWJ1dHRvbiBzbSB3ZWFrIHFzLWFjdGlvblwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiIFtuZ0NsYXNzXT1cInsgZGlzYWJsZTogZGlzYWJsZWQsIGNhdXRpb246IGlzQ2F1dGlvbiAmJiBzdHlsZVR5cGUgIT09ICdzdHJvbmcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAna2VlcC1iYWNrZ3JvdW5kLW9uLWZvY3VzJzogc3R5bGVUeXBlID09PSAnc3Ryb25nJ31cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwZXAtaWNvbiBuYW1lPVwibnVtYmVyX21pbnVzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGVwLWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cInNob3dRc0J0blwiIG1hdC1idXR0b24gbWF0U3VmZml4IChjbGljayk9XCJpbmNyZW1lbnQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwZXAtYnV0dG9uIGljb24tYnV0dG9uIHNtIHdlYWsgcXMtYWN0aW9uXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCIgW25nQ2xhc3NdPVwieyBkaXNhYmxlOiBkaXNhYmxlZCwgY2F1dGlvbjogaXNDYXV0aW9uICYmIHN0eWxlVHlwZSAhPT0gJ3N0cm9uZycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdrZWVwLWJhY2tncm91bmQtb24tZm9jdXMnOiBzdHlsZVR5cGUgPT09ICdzdHJvbmcnfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBlcC1pY29uIG5hbWU9XCJudW1iZXJfcGx1c1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BlcC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJtZXNzYWdlcz8ubGVuZ3RoID4gMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicXMtZXJyb3IgYm9keS14c1wiICpuZ0Zvcj1cImxldCBtc2cgb2YgbWVzc2FnZXNcIj4ge3sgbXNnLktleSB8IHRyYW5zbGF0ZSB9fSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IG1zZy5WYWx1ZSB9fSA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0eXBlID09ICdxc0Zvck1hdHJpeCdcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicmVhZG9ubHk7IHRoZW4gcmVhZG9ubHlCbG9jazsgZWxzZSBlZGl0YWJsZVFTQmxvY2tcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3JlYWRvbmx5QmxvY2s+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gW2lkXT1cImtleVwiIG1hdC1idXR0b24gY2xhc3M9XCJwZXAtYnV0dG9uIHt7IHN0eWxlVHlwZSB9fSBkaXNhYmxlXCIgZGlzYWJsZWQ9XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntjYXV0aW9uOiBpc0NhdXRpb24sIG1kOiByb3dTcGFuICE9PSAxLCB4czogcm93U3BhbiA9PT0gMX1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIFhcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2VkaXRhYmxlUVNCbG9jaz5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIgeEFsaWdubWVudD09J3JpZ2h0J1wiIGNsYXNzPVwiIGJvZHktc20gYWRkaXRpb25hbC12YWx1ZSBwcmVmaXhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0QmFkZ2U9XCJ7eyBhZGRpdGlvbmFsVmFsdWUgfX1cIiBtYXRCYWRnZVBvc2l0aW9uPVwiYmVmb3JlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdEJhZGdlU2l6ZT1cInJvd1NwYW4gPT09IDEgPyBzbWFsbCA6IG1lZGl1bVwiIFtAc2hvd0hpZGVdPVwiZ2V0QWRkaXRpb25hbFZhbHVlXCI+PC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIChtb3VzZWxlYXZlKT1cIiFpc0luRm9jdXMgPyBvbk1hdHJpeE1vdXNlbGVhdmUoJGV2ZW50KSA6IG51bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBwZXBRc1ZhbGlkYXRpb24gW2FsbG93RGVjaW1hbF09XCJhbGxvd0RlY2ltYWxcIiB0eXBlPVwiZGVjaW1hbE51bWJlclwiIGlucHV0bW9kZT1cImRlY2ltYWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdElucHV0ICNRU0lucHV0IG5hbWU9XCJ7eyBrZXkgfX1cIiB0aXRsZT1cInt7IGZvcm1hdHRlZFZhbHVlIH19XCIgY2xhc3M9XCJib2R5LXNtIGVsbGlwc2lzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIiBbaWRdPVwia2V5XCIgW2Zvcm1Db250cm9sTmFtZV09XCJrZXlcIiBbdmFsdWVdPVwiZGlzcGxheVZhbHVlJCB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25NYXRyaXhDbGljaygkZXZlbnQpOyAkZXZlbnQudGFyZ2V0LnNldFNlbGVjdGlvblJhbmdlKDAsIDk5OSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cIm9uS2V5ZG93bigkZXZlbnQpXCIgKGJsdXIpPVwib25NYXRyaXhCbHVyKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmb2N1cyk9XCJvbk1hdHJpeE1vdXNlRW50ZXIoJGV2ZW50KTsgb25Gb2N1cygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW91c2VlbnRlcik9XCJvbk1hdHJpeE1vdXNlRW50ZXIoJGV2ZW50KVwiIC8+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJtZXNzYWdlcz8ubGVuZ3RoID4gMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicXMtZXJyb3IgYm9keS14c1wiICpuZ0Zvcj1cImxldCBtc2cgb2YgbWVzc2FnZXNcIj4ge3sgbXNnLktleSB8IHRyYW5zbGF0ZSB9fSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IG1zZy5WYWx1ZSB9fSA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInhBbGlnbm1lbnQgIT0gJ3JpZ2h0J1wiIGNsYXNzPVwiYm9keS1zbSBhZGRpdGlvbmFsLXZhbHVlIHN1ZmZpeFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRCYWRnZT1cInt7IGFkZGl0aW9uYWxWYWx1ZSB9fVwiIG1hdEJhZGdlUG9zaXRpb249XCJiZWZvcmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0QmFkZ2VTaXplPVwicm93U3BhbiA9PT0gMSA/IHNtYWxsIDogbWVkaXVtXCIgW0BzaG93SGlkZV09XCJnZXRBZGRpdGlvbmFsVmFsdWVcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidHlwZSA9PSAnYnV0dG9uJ1wiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIodmFsdWUgfCBwZXBUb051bWJlcikgPT0gMDsgdGhlbiByZWd1bGFyQmxvY2s7IGVsc2Ugd2l0aEJhZGdlQmxvY2tcIj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3JlZ3VsYXJCbG9jaz5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiIGNsYXNzPVwicGVwLWJ1dHRvbiB7eyBzdHlsZVR5cGUgfX0gXCIgW2lkXT1cImtleVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwie3sga2V5IH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgZGlzYWJsZTogZGlzYWJsZWQsIGNhdXRpb246IGlzQ2F1dGlvbiwgbWQ6IHJvd1NwYW4gIT09IDEsIHhzOiByb3dTcGFuID09PSAxfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ1FTLk9SREVSJyB8IHRyYW5zbGF0ZVwiIChjbGljayk9XCJlbnRlckNoaWxkcmVuKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZWxsaXBzaXNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAnUVMuT1JERVInIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICN3aXRoQmFkZ2VCbG9jaz5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIG1hdEJhZGdlPVwie3sgZm9ybWF0dGVkVmFsdWUgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0QmFkZ2VQb3NpdGlvbj1cInt7eEFsaWdubWVudCA9PSAncmlnaHQnID8gJ2JlZm9yZScgOiAnYWZ0ZXInfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW21hdEJhZGdlU2l6ZV09XCJsYXlvdXRUeXBlID09PSAnY2FyZCcgJiYgcm93U3BhbiA9PT0gMSA/ICdzbWFsbCcgOiAnbWVkaXVtJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInBlcC1idXR0b24ge3sgc3R5bGVUeXBlIH19IFwiIFtpZF09XCJrZXlcIiBuYW1lPVwie3sga2V5IH19XCIgW25nQ2xhc3NdPVwieyBkaXNhYmxlOiBkaXNhYmxlZCwgY2F1dGlvbjogaXNDYXV0aW9uLCBtZDogcm93U3BhbiAhPT0gMSwgeHM6IHJvd1NwYW4gPT09IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JpZ2h0LWFsaWdubWVudCc6IHhBbGlnbm1lbnQgPT0gJ3JpZ2h0JywgJ2xlZnQtYWxpZ25tZW50JzogeEFsaWdubWVudCAhPSAncmlnaHQnfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ1FTLk9SREVSJyB8IHRyYW5zbGF0ZVwiIChjbGljayk9XCJlbnRlckNoaWxkcmVuKCRldmVudClcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZWxsaXBzaXNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAnUVMuT1JERVInIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0eXBlID09ICdwYWNrYWdlQnV0dG9uJ1wiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiBjbGFzcz1cInBlcC1idXR0b24ge3sgc3R5bGVUeXBlIH19IFwiIFtpZF09XCJrZXlcIiBuYW1lPVwie3sga2V5IH19XCJcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyBkaXNhYmxlOiBkaXNhYmxlZCwgY2F1dGlvbjogaXNDYXV0aW9uLCBtZDogcm93U3BhbiAhPT0gMSwgeHM6IHJvd1NwYW4gPT09IDF9XCJcbiAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIidRUy5PUkRFUicgfCB0cmFuc2xhdGVcIiAoY2xpY2spPVwiZW50ZXJQYWNrYWdlKCRldmVudClcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJlbGxpcHNpc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgJ1FTLk9SREVSJyB8IHRyYW5zbGF0ZSB9fSAmIzQwO3t7IGZvcm1hdHRlZFZhbHVlIH19JiM0MTtcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibGF5b3V0VHlwZSA9PT0gJ2Zvcm0nXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJwZXBUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxheW91dFR5cGUgPT09ICdjYXJkJ1wiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicGVwVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJsYXlvdXRUeXBlID09PSAndGFibGUnXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJwZXBUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuPC9uZy1jb250YWluZXI+Il19
574
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVhbnRpdHktc2VsZWN0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWxpYi9xdWFudGl0eS1zZWxlY3Rvci9xdWFudGl0eS1zZWxlY3Rvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbGliL3F1YW50aXR5LXNlbGVjdG9yL3F1YW50aXR5LXNlbGVjdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxTQUFTLEVBSVQsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBQ1osU0FBUyxFQUdULHVCQUF1QixHQUcxQixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQ0gsT0FBTyxFQUNQLEtBQUssRUFDTCxLQUFLLEVBQ0wsT0FBTyxFQUNQLFVBQVUsR0FDYixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFHSCx1QkFBdUIsRUFFdkIsNEJBQTRCLEVBRzVCLHdCQUF3QixHQUUzQixNQUFNLHlCQUF5QixDQUFDO0FBQ2pDLE9BQU8sRUFBRSxlQUFlLEVBQXlCLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2RSxPQUFPLEVBQWdCLG9CQUFvQixFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7Ozs7OztBQTZCL0UsTUFBTSxPQUFPLDRCQUE0QjtJQTBPckMsWUFDWSxFQUFxQixFQUNyQixvQkFBNkMsRUFDN0MsUUFBbUIsRUFDbkIsT0FBbUIsRUFDbkIsU0FBMkIsRUFDM0IsZ0JBQXFDO1FBTHJDLE9BQUUsR0FBRixFQUFFLENBQW1CO1FBQ3JCLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBeUI7UUFDN0MsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUNuQixZQUFPLEdBQVAsT0FBTyxDQUFZO1FBQ25CLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQzNCLHFCQUFnQixHQUFoQixnQkFB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VztzQkFEVixNQUFNO2dCQUlQLFlBQVk7c0JBRFgsTUFBTTtnQkFHYyxNQUFNO3NCQUExQixTQUFTO3VCQUFDLFFBQVE7Z0JBQ0csT0FBTztzQkFBNUIsU0FBUzt1QkFBQyxTQUFTO2dCQWVoQixTQUFTO3NCQURaLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBPbkluaXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBJbnB1dCxcbiAgICBPdXRwdXQsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIFZpZXdDaGlsZCxcbiAgICBFbGVtZW50UmVmLFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIFJlbmRlcmVyMixcbiAgICBBZnRlclZpZXdJbml0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7XG4gICAgdHJpZ2dlcixcbiAgICBzdGF0ZSxcbiAgICBzdHlsZSxcbiAgICBhbmltYXRlLFxuICAgIHRyYW5zaXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xuaW1wb3J0IHtcbiAgICBQZXBMYXlvdXRUeXBlLFxuICAgIFBlcFN0eWxlVHlwZSxcbiAgICBQZXBDdXN0b21pemF0aW9uU2VydmljZSxcbiAgICBQZXBIb3Jpem9udGFsQWxpZ25tZW50LFxuICAgIERFRkFVTFRfSE9SSVpPTlRBTF9BTElHTk1FTlQsXG4gICAgSVBlcEZpZWxkQ2xpY2tFdmVudCxcbiAgICBQZXBRdWFudGl0eVNlbGVjdG9yRmllbGRUeXBlLFxuICAgIFBlcFF1YW50aXR5U2VsZWN0b3JGaWVsZCxcbiAgICBQZXBVdGlsaXRpZXNTZXJ2aWNlLFxufSBmcm9tICdAcGVwcGVyaS1hZGRvbnMvbmd4LWxpYic7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGZyb21FdmVudCwgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3BlcC1xdWFudGl0eS1zZWxlY3RvcicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3F1YW50aXR5LXNlbGVjdG9yLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9xdWFudGl0eS1zZWxlY3Rvci5jb21wb25lbnQuc2NzcycsICcuL3F1YW50aXR5LXNlbGVjdG9yLmNvbXBvbmVudC50aGVtZS5zY3NzJ10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgYW5pbWF0aW9uczogW1xuICAgICAgICB0cmlnZ2VyKCdzaG93SGlkZScsIFtcbiAgICAgICAgICAgIHN0YXRlKFxuICAgICAgICAgICAgICAgICdzaG93JyxcbiAgICAgICAgICAgICAgICBzdHlsZSh7XG4gICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDEsXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogJ3NjYWxlKDEpJyxcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHN0YXRlKFxuICAgICAgICAgICAgICAgICdoaWRlJyxcbiAgICAgICAgICAgICAgICBzdHlsZSh7XG4gICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDAsXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogJ3NjYWxlKDApJyxcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHRyYW5zaXRpb24oJ3Nob3cgPT4gaGlkZScsIGFuaW1hdGUoJzI1MG1zIGVhc2Utb3V0JykpLFxuICAgICAgICAgICAgdHJhbnNpdGlvbignaGlkZSA9PiBzaG93JywgYW5pbWF0ZSgnMjUwbXMgZWFzZS1pbicpKSxcbiAgICAgICAgXSksXG4gICAgXSxcbn0pXG5leHBvcnQgY2xhc3MgUGVwUXVhbnRpdHlTZWxlY3RvckNvbXBvbmVudFxuICAgIGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gICAgcHVibGljIHN0YXRpYyBFTlRFUl9DSElMRFJFTiA9ICdbRW50ZXJDaGlsZHJlbl0nO1xuICAgIHB1YmxpYyBzdGF0aWMgRU5URVJfUEFDS0FHRSA9ICdbRW50ZXJQYWNrYWdlXSc7XG4gICAgcHVibGljIHN0YXRpYyBQTFVTID0gJ1srXSc7XG4gICAgcHVibGljIHN0YXRpYyBNSU5VUyA9ICdbLV0nO1xuXG4gICAgQElucHV0KCkga2V5ID0gJyc7XG5cbiAgICBwcml2YXRlIF92YWx1ZSA9IG51bGw7XG4gICAgQElucHV0KClcbiAgICBzZXQgdmFsdWUodmFsdWU6IHN0cmluZykge1xuICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICB2YWx1ZSA9ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaXNEaWZmZXJlbnRWYWx1ZSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDdXQgdGhlIC4wMDAgaWYgZXhpc3QgZm9yIG5vbiBhbGxvd0RlY2ltYWwuXG4gICAgICAgIGlmICghdGhpcy5hbGxvd0RlY2ltYWwpIHtcbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gdGhpcy5fdmFsdWU/LnNwbGl0KCcuJylbMF07XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNldEZvcm1hdHRlZFZhbHVlKHRoaXMudmFsdWUpO1xuICAgICAgICB0aGlzLmNoYW5nZURpc3BsYXlWYWx1ZSgpO1xuICAgIH1cbiAgICBnZXQgdmFsdWUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICAgIH1cbiAgICBcbiAgICBnZXQgdmFsdWVBc0N1cnJlbnRDdWx0dXJlKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnV0aWxpdGllc1NlcnZpY2UuY2hhbmdlRGVjaW1hbFNlcGFyYXRvcldoZW5JdHNDb21tYSh0aGlzLnZhbHVlLCB0cnVlKTtcbiAgICAgICAgLy8gbGV0IHJlcyA9IHRoaXMudmFsdWU7XG5cbiAgICAgICAgLy8gaWYgKHRoaXMuYWxsb3dEZWNpbWFsKSB7XG4gICAgICAgIC8vICAgICByZXMgPSB0aGlzLnV0aWxpdGllc1NlcnZpY2UuZm9ybWF0RGVjaW1hbCh0aGlzLnZhbHVlLCB0aGlzLm1pbkZyYWN0aW9uRGlnaXRzLCB0aGlzLm1heEZyYWN0aW9uRGlnaXRzLCBmYWxzZSk7XG4gICAgICAgIC8vIH1cbiAgICAgICAgXG4gICAgICAgIC8vIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGZvcm1hdHRlZFZhbHVlID0gJyc7XG4gICAgLy8gcHJpdmF0ZSBfZm9ybWF0dGVkVmFsdWUgPSAnJztcbiAgICAvLyBASW5wdXQoKVxuICAgIC8vIHNldCBmb3JtYXR0ZWRWYWx1ZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgLy8gICAgIC8vIGlmICghdmFsdWUpIHtcbiAgICAvLyAgICAgLy8gICAgIHZhbHVlID0gJyc7XG4gICAgLy8gICAgIC8vIH1cblxuICAgIC8vICAgICAvLyBpZiAodGhpcy5fY2FsY3VsYXRlRm9ybWF0dGVkVmFsdWUpIHtcbiAgICAvLyAgICAgLy8gICAgIHRoaXMuX2NhbGN1bGF0ZUZvcm1hdHRlZFZhbHVlID0gZmFsc2U7XG4gICAgLy8gICAgIC8vIH1cblxuICAgIC8vICAgICAvLyB0aGlzLnNldEZvcm1hdHRlZFZhbHVlKHZhbHVlKTtcbiAgICAvLyB9XG4gICAgLy8gZ2V0IGZvcm1hdHRlZFZhbHVlKCk6IHN0cmluZyB7XG4gICAgLy8gICAgIHJldHVybiB0aGlzLl9mb3JtYXR0ZWRWYWx1ZTtcbiAgICAvLyB9XG4gICAgXG4gICAgcHJpdmF0ZSBfbWluRnJhY3Rpb25EaWdpdHMgPSBOYU47XG4gICAgQElucHV0KClcbiAgICBzZXQgbWluRnJhY3Rpb25EaWdpdHModmFsdWU6IG51bWJlcikge1xuICAgICAgICB0aGlzLl9taW5GcmFjdGlvbkRpZ2l0cyA9IHZhbHVlO1xuICAgICAgICB0aGlzLnNldEZvcm1hdHRlZFZhbHVlKHRoaXMudmFsdWUpO1xuICAgICAgICB0aGlzLmNoYW5nZURpc3BsYXlWYWx1ZSgpO1xuICAgIH1cbiAgICBnZXQgbWluRnJhY3Rpb25EaWdpdHMoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21pbkZyYWN0aW9uRGlnaXRzO1xuICAgIH1cblxuICAgIHByaXZhdGUgX21heEZyYWN0aW9uRGlnaXRzID0gTmFOO1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IG1heEZyYWN0aW9uRGlnaXRzKHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5fbWF4RnJhY3Rpb25EaWdpdHMgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5zZXRGb3JtYXR0ZWRWYWx1ZSh0aGlzLnZhbHVlKTtcbiAgICAgICAgdGhpcy5jaGFuZ2VEaXNwbGF5VmFsdWUoKTtcbiAgICB9XG4gICAgZ2V0IG1heEZyYWN0aW9uRGlnaXRzKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tYXhGcmFjdGlvbkRpZ2l0cztcbiAgICB9XG5cbiAgICBASW5wdXQoKSBsYWJlbCA9ICcnO1xuICAgIEBJbnB1dCgpIHR5cGU6IFBlcFF1YW50aXR5U2VsZWN0b3JGaWVsZFR5cGUgPSAncXMnO1xuICAgIEBJbnB1dCgpIG1hbmRhdG9yeSA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIGRpc2FibGVkID0gZmFsc2U7XG4gICAgQElucHV0KCkgcmVhZG9ubHkgPSBmYWxzZTtcblxuICAgIHByaXZhdGUgX3RleHRDb2xvciA9ICcnO1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHRleHRDb2xvcih2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX3RleHRDb2xvciA9IHZhbHVlO1xuICAgICAgICB0aGlzLmlzQ2F1dGlvbiA9IHZhbHVlID09PSAnI0ZGMDAwMCc7XG4gICAgfVxuICAgIGdldCB0ZXh0Q29sb3IoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RleHRDb2xvcjtcbiAgICB9XG5cbiAgICBASW5wdXQoKSB4QWxpZ25tZW50OiBQZXBIb3Jpem9udGFsQWxpZ25tZW50ID0gREVGQVVMVF9IT1JJWk9OVEFMX0FMSUdOTUVOVDtcbiAgICBASW5wdXQoKSByb3dTcGFuID0gMTtcbiAgICBcbiAgICBwcml2YXRlIF9hbGxvd0RlY2ltYWwgPSBmYWxzZTtcbiAgICBASW5wdXQoKSBcbiAgICBzZXQgYWxsb3dEZWNpbWFsKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX2FsbG93RGVjaW1hbCA9IHZhbHVlO1xuXG4gICAgICAgIGlmICh0aGlzLnZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnNldEZvcm1hdHRlZFZhbHVlKHRoaXMudmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VEaXNwbGF5VmFsdWUoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXQgYWxsb3dEZWNpbWFsKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWxsb3dEZWNpbWFsO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIGFkZGl0aW9uYWxWYWx1ZSA9ICcnO1xuXG4gICAgcHJpdmF0ZSBfbm90aWZpY2F0aW9uSW5mbzogYW55O1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IG5vdGlmaWNhdGlvbkluZm8odmFsdWU6IGFueSkge1xuICAgICAgICB0aGlzLl9ub3RpZmljYXRpb25JbmZvID0gdmFsdWU7XG5cbiAgICAgICAgY29uc3QgbWVzc2FnZXMgPSB2YWx1ZSAmJiB2YWx1ZSA+IDAgPyBKU09OLnBhcnNlKHZhbHVlKS5NZXNzYWdlcyA6ICcnO1xuICAgICAgICBpZiAobWVzc2FnZXMgJiYgbWVzc2FnZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgLy8gUmVwbGFjZSB0aGUgbXNnIGtleXMuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IG1zZyBvZiBtZXNzYWdlcykge1xuICAgICAgICAgICAgICAgIGlmIChtc2cuS2V5ID09PSAnSW52ZW50b3J5X0xpbWl0X01zZycpIHtcbiAgICAgICAgICAgICAgICAgICAgbXNnLktleSA9ICdNRVNTQUdFUy5FUlJPUl9JTlZFTlRPUllfTElNSVQnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobXNnLktleSA9PT0gJ0Nhc2VfUXVhbnRpdHlfTGltaXRfTXNnJykge1xuICAgICAgICAgICAgICAgICAgICBtc2cuS2V5ID0gJ01FU1NBR0VTLkVSUk9SX0NBU0VfUVVBTlRJVFlfTElNSVQnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobXNnLktleSA9PT0gJ01pbl9RdWFudGl0eV9MaW1pdF9Nc2cnKSB7XG4gICAgICAgICAgICAgICAgICAgIG1zZy5LZXkgPSAnTUVTU0FHRVMuRVJST1JfTUlOX1FVQU5USVRZX0xJTUlUJztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1zZy5LZXkgPT09ICdNYXhfUXVhbnRpdHlfTGltaXRfTXNnJykge1xuICAgICAgICAgICAgICAgICAgICBtc2cuS2V5ID0gJ01FU1NBR0VTLkVSUk9SX01BWF9RVUFOVElUWV9MSU1JVCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLm1lc3NhZ2VzID0gbWVzc2FnZXM7XG5cbiAgICAgICAgICAgIGNvbnN0IGZpZWxkQ29udHJvbCA9IHRoaXMuZm9ybS5jb250cm9sc1t0aGlzLmtleV07XG4gICAgICAgICAgICBmaWVsZENvbnRyb2wuc2V0RXJyb3JzKHtcbiAgICAgICAgICAgICAgICBzZXJ2ZXJFcnJvcjogJ0Vycm9yJyxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB0aGlzLnNhbWVFbGVtZW50SW5UaGVXYW50ZWRSb3cgPSBudWxsO1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuUVNJbnB1dCAmJiB0aGlzLlFTSW5wdXQubmF0aXZlRWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLlFTSW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIDE1MCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IG5vdGlmaWNhdGlvbkluZm8oKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX25vdGlmaWNhdGlvbkluZm87XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfdmlzaWJsZSA9IHRydWU7XG4gICAgQElucHV0KClcbiAgICBzZXQgdmlzaWJsZSh2aXNpYmxlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX3Zpc2libGUgPSB2aXNpYmxlO1xuICAgICAgICBpZiAodmlzaWJsZSkge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyhcbiAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICAgICAgICAnaGlkZGVuLWVsZW1lbnQnXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhcbiAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICAgICAgICAnaGlkZGVuLWVsZW1lbnQnXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCB2aXNpYmxlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmlzaWJsZTtcbiAgICB9XG5cbiAgICBjb250cm9sVHlwZSA9ICdxcyc7XG5cbiAgICBASW5wdXQoKSBmb3JtOiBGb3JtR3JvdXAgPSBudWxsO1xuICAgIEBJbnB1dCgpIHNob3dUaXRsZSA9IHRydWU7XG4gICAgQElucHV0KCkgcmVuZGVyVGl0bGUgPSB0cnVlO1xuICAgIEBJbnB1dCgpIGxheW91dFR5cGU6IFBlcExheW91dFR5cGUgPSAnZm9ybSc7XG4gICAgQElucHV0KCkgaXNBY3RpdmUgPSBmYWxzZTtcblxuICAgIC8vIEdldCBkZWZhdWx0IHN0eWxlIGZyb20gdGhlbWUuXG4gICAgQElucHV0KClcbiAgICBzdHlsZVR5cGU6IFBlcFN0eWxlVHlwZSA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKFxuICAgICAgICBQZXBDdXN0b21pemF0aW9uU2VydmljZS5TVFlMRV9RU19LRVlcbiAgICApIGFzIFBlcFN0eWxlVHlwZTsgLy8nc3Ryb25nJztcblxuICAgIEBPdXRwdXQoKVxuICAgIHZhbHVlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG4gICAgQE91dHB1dCgpXG4gICAgZWxlbWVudENsaWNrOiBFdmVudEVtaXR0ZXI8SVBlcEZpZWxkQ2xpY2tFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPElQZXBGaWVsZENsaWNrRXZlbnQ+KCk7XG5cbiAgICBAVmlld0NoaWxkKCdRU0NvbnQnKSBRU0NvbnQ6IEVsZW1lbnRSZWY7XG4gICAgQFZpZXdDaGlsZCgnUVNJbnB1dCcpIFFTSW5wdXQ6IEVsZW1lbnRSZWY7XG5cbiAgICBwcml2YXRlIF9jYWxjdWxhdGVGb3JtYXR0ZWRWYWx1ZSA9IHRydWU7XG4gICAgZ2V0IGNhbGN1bGF0ZUZvcm1hdHRlZFZhbHVlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2FsY3VsYXRlRm9ybWF0dGVkVmFsdWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZWFkb25seSBfZGVzdHJveWVkOiBTdWJqZWN0PHZvaWQ+O1xuICAgIHByaXZhdGUgcXNXaWR0aFN1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+O1xuICAgIGxhc3RRc0NvbnRDbGllbnRXaWR0aCA9IDA7XG4gICAgc2hvd1FzQnRuID0gdHJ1ZTtcblxuICAgIHN0YW5kQWxvbmUgPSBmYWxzZTtcbiAgICBwcml2YXRlIF9pc0luRm9jdXMgPSBmYWxzZTtcbiAgICBASW5wdXQoKVxuICAgIHNldCBpc0luRm9jdXMoaXNJbkZvY3VzOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX2lzSW5Gb2N1cyA9IGlzSW5Gb2N1cztcbiAgICAgICAgdGhpcy5jaGFuZ2VEaXNwbGF5VmFsdWUoKTtcbiAgICB9XG4gICAgZ2V0IGlzSW5Gb2N1cygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzSW5Gb2N1cztcbiAgICB9XG4gICAgaXNNYXRyaXhGb2N1cyA9IGZhbHNlO1xuXG4gICAgaXNDYXV0aW9uID0gZmFsc2U7XG4gICAgbWVzc2FnZXM6IEFycmF5PGFueT4gPSBudWxsO1xuXG4gICAgc2FtZUVsZW1lbnRJblRoZVdhbnRlZFJvdyA9IG51bGw7XG5cbiAgICBpc0VtcHR5S2V5ID0gZmFsc2U7XG5cbiAgICBwcml2YXRlIF9kaXNwbGF5VmFsdWVTdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPignJyk7XG4gICAgZ2V0IGRpc3BsYXlWYWx1ZSQoKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Rpc3BsYXlWYWx1ZVN1YmplY3QuYXNPYnNlcnZhYmxlKCkucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByaXZhdGUgY3VzdG9taXphdGlvblNlcnZpY2U6IFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgICAgIHByaXZhdGUgZWxlbWVudDogRWxlbWVudFJlZixcbiAgICAgICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgdXRpbGl0aWVzU2VydmljZTogUGVwVXRpbGl0aWVzU2VydmljZVxuICAgICkge1xuICAgICAgICB0aGlzLl9kZXN0cm95ZWQgPSBuZXcgU3ViamVjdCgpO1xuICAgICAgICAvLyB0aGlzLnFzV2lkdGhTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdCgwKTtcbiAgICB9XG5cbiAgICBzZXRGb3JtKCkge1xuICAgICAgICBjb25zdCBwZXBGaWVsZCA9IG5ldyBQZXBRdWFudGl0eVNlbGVjdG9yRmllbGQoe1xuICAgICAgICAgICAga2V5OiB0aGlzLmtleSxcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlQXNDdXJyZW50Q3VsdHVyZSxcbiAgICAgICAgICAgIG1hbmRhdG9yeTogdGhpcy5tYW5kYXRvcnksXG4gICAgICAgICAgICByZWFkb25seTogdGhpcy5yZWFkb25seSxcbiAgICAgICAgICAgIGRpc2FibGVkOiB0aGlzLmRpc2FibGVkLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5mb3JtID0gdGhpcy5jdXN0b21pemF0aW9uU2VydmljZS5nZXREZWZhdWx0RnJvbUdyb3VwKHBlcEZpZWxkKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldEZvcm1hdHRlZFZhbHVlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKHRoaXMuX2NhbGN1bGF0ZUZvcm1hdHRlZFZhbHVlKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5hbGxvd0RlY2ltYWwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm1hdHRlZFZhbHVlID0gdGhpcy51dGlsaXRpZXNTZXJ2aWNlLmZvcm1hdERlY2ltYWwodmFsdWUsIHRoaXMubWluRnJhY3Rpb25EaWdpdHMsIHRoaXMubWF4RnJhY3Rpb25EaWdpdHMpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm1hdHRlZFZhbHVlID0gdGhpcy51dGlsaXRpZXNTZXJ2aWNlLmZvcm1hdE51bWJlcih2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmZvcm1hdHRlZFZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIHRoaXMudXBkYXRlRm9ybUZpZWxkVmFsdWUoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG5vdGlmeURpc3BsYXlWYWx1ZUNoYW5nZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX2Rpc3BsYXlWYWx1ZVN1YmplY3QubmV4dCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjaGFuZ2VEaXNwbGF5VmFsdWUoKTogdm9pZCB7XG4gICAgICAgIGxldCByZXMgPSAnJztcblxuICAgICAgICBpZiAodGhpcy5hbGxvd0RlY2ltYWwpIHtcbiAgICAgICAgICAgIHJlcyA9IHRoaXMuaXNJbkZvY3VzID8gdGhpcy52YWx1ZUFzQ3VycmVudEN1bHR1cmUgOiB0aGlzLmZvcm1hdHRlZFZhbHVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzID0gdGhpcy5pc0luRm9jdXMgPyB0aGlzLnZhbHVlIDogdGhpcy5mb3JtYXR0ZWRWYWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubm90aWZ5RGlzcGxheVZhbHVlQ2hhbmdlKHJlcyk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdjaGFuZ2VEaXNwbGF5VmFsdWUnICsgcmVzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZUZvcm1GaWVsZFZhbHVlKGZpcnN0TG9hZCA9IGZhbHNlKSB7XG4gICAgICAgIC8vIFNldCB0aGUgZm9ybWF0dGVkIHZhbHVlIG9ubHkgZm9yIHRoZSBmaXJzdCBsb2FkIGNhdXNlIGl0J3Mgbm90IGZvcm1hdHRlZCBpZiB3ZSBzZXQgdGhlIHZhbHVlIChJIGRvbid0IGtub3cgd2h5KVxuICAgICAgICAvLyBFbHNlIHdlIHNldCB0aGUgdmFsdWUgLSB0aGlzIGlzIGltcG9ydGFudCB0byBzZXQgdGhlIHZhbHVlIG9ubHkgY2F1c2Ugc2V0dGluZyB0aGUgZm9ybWF0dGVkIHZhbHVlIHdpbGwgY2F1c2UgYnVnIHdoZW4gdGhlIG51bWJlciBpcyB3aXRoIHRob3VzYW5kIHNlcGFyYXRvclxuICAgICAgICB0aGlzLmN1c3RvbWl6YXRpb25TZXJ2aWNlLnVwZGF0ZUZvcm1GaWVsZFZhbHVlKFxuICAgICAgICAgICAgdGhpcy5mb3JtLFxuICAgICAgICAgICAgdGhpcy5rZXksXG4gICAgICAgICAgICBmaXJzdExvYWQgPyB0aGlzLmZvcm1hdHRlZFZhbHVlIDogdGhpcy52YWx1ZSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBnZXQgZGlzcGxheVZhbHVlKCk6IHN0cmluZyB7XG4gICAgLy8gICAgIGNvbnN0IHJlcyA9IHRoaXMuaXNJbkZvY3VzXG4gICAgLy8gICAgICAgICA/IHRoaXMudXRpbGl0aWVzU2VydmljZS5mb3JtYXREZWNpbWFsKHRoaXMudmFsdWUsIHRoaXMubWluRnJhY3Rpb25EaWdpdHMsIHRoaXMubWF4RnJhY3Rpb25EaWdpdHMpXG4gICAgLy8gICAgICAgICA6IHRoaXMuZm9ybWF0dGVkVmFsdWU7XG4gICAgLy8gICAgIHJldHVybiByZXM7XG4gICAgLy8gfVxuXG4gICAgcHJvdGVjdGVkIGdldERlc3Ryb3llcigpIHtcbiAgICAgICAgcmV0dXJuIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95ZWQpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5mb3JtID09PSBudWxsKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5rZXkgPT09ICcnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0VtcHR5S2V5ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5zdGFuZEFsb25lID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuc2V0Rm9ybSgpO1xuXG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKFxuICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICAgICAgIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlNUQU5EX0FMT05FX0ZJRUxEX0NMQVNTX05BTUVcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5yZW5kZXJUaXRsZSkge1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICBQZXBDdXN0b21pemF0aW9uU2VydmljZS5TVEFORF9BTE9ORV9GSUVMRF9OT19TUEFDSU5HX0NMQVNTX05BTUVcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gdGhpcy5xc1dpZHRoU3ViamVjdFxuICAgICAgICAvLyAgICAgLmFzT2JzZXJ2YWJsZSgpXG4gICAgICAgIC8vICAgICAucGlwZSh0aGlzLmdldERlc3Ryb3llcigpLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKVxuICAgICAgICAvLyAgICAgLnN1YnNjcmliZSgocXNXaWR0aDogbnVtYmVyKSA9PiB7XG4gICAgICAgIC8vICAgICAgICAgdGhpcy5zZXR1cFFzQnV0dG9ucyhxc1dpZHRoKTtcbiAgICAgICAgLy8gICAgIH0pO1xuXG4gICAgICAgIHRoaXMudXBkYXRlRm9ybUZpZWxkVmFsdWUodHJ1ZSk7XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIC8vIGRlYnVnZ2VyO1xuICAgICAgICAgICAgaWYgKHRoaXMuUVNDb250ICYmXG4gICAgICAgICAgICAgICAgdGhpcy5RU0NvbnQubmF0aXZlRWxlbWVudCAmJlxuICAgICAgICAgICAgICAgIHRoaXMuUVNDb250Lm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGggPiAwXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dRc0J0biA9IHRoaXMuUVNDb250Lm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGggPiAxMjA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5jZFsnZGVzdHJveWVkJ10pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgMCk7XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdDaGVja2VkKCk6IHZvaWQge1xuICAgICAgICAvLyB0aGlzLnNldFFzVmlldygpO1xuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IGFueSk6IHZvaWQge1xuICAgICAgICAvLyBCdWcgZml4IGZvciBhZGRvbnMgd2hlbiB0aGUga2V5IGlzICcnIGluIHRoZSBuZ09uSW5pdCBmb3Igc29tZSByZXNvblxuICAgICAgICBpZiAodGhpcy5pc0VtcHR5S2V5ICYmIHRoaXMua2V5ICE9PSAnJykge1xuICAgICAgICAgICAgdGhpcy5zZXRGb3JtKCk7XG4gICAgICAgIH1cblxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+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==
@@ -9,6 +9,21 @@ export class PepRemoteLoaderService {
9
9
  this.addonService = addonService;
10
10
  //
11
11
  }
12
+ getBlockLoaderDataUrl(options) {
13
+ const fileName = 'addon_blocks';
14
+ const pagesAddonUuid = this.addonService.getPagesAddonUUID();
15
+ let pagesBaseUrl;
16
+ // For devServer run server on localhost.
17
+ if (options.pagesDevServer?.length > 0) {
18
+ pagesBaseUrl = `${options.pagesDevServer}/${fileName}`;
19
+ }
20
+ else {
21
+ const baseUrl = this.sessionService.getPapiBaseUrl();
22
+ pagesBaseUrl = `${baseUrl}/addons/api/${pagesAddonUuid}/${fileName}`;
23
+ }
24
+ const url = `${pagesBaseUrl}/get_addon_block_loader_data?name=${options.name}&slugName=${options.slugName}&blockType=${options.blockType}&addonUUID=${options.addonUUID}`;
25
+ return url;
26
+ }
12
27
  getRemoteLoaderOptions(blockLoaderData, blockRemoteEntry = '', type = 'module') {
13
28
  const exposedModule = blockLoaderData.relation.ElementsModule?.length > 0 ? blockLoaderData.relation.ElementsModule : blockLoaderData.relation.ModuleName;
14
29
  const res = {
@@ -27,21 +42,6 @@ export class PepRemoteLoaderService {
27
42
  }
28
43
  return res;
29
44
  }
30
- getBlockLoaderDataUrl(options) {
31
- const fileName = 'addon_blocks';
32
- const pagesAddonUuid = this.addonService.getPagesAddonUUID();
33
- let pagesBaseUrl;
34
- // For devServer run server on localhost.
35
- if (options.pagesDevServer?.length > 0) {
36
- pagesBaseUrl = `${options.pagesDevServer}/${fileName}`;
37
- }
38
- else {
39
- const baseUrl = this.sessionService.getPapiBaseUrl();
40
- pagesBaseUrl = `${baseUrl}/addons/api/${pagesAddonUuid}/${fileName}`;
41
- }
42
- const url = `${pagesBaseUrl}/get_addon_block_loader_data?name=${options.name}&slugName=${options.slugName}&blockType=${options.blockType}&addonUUID=${options.addonUUID}`;
43
- return url;
44
- }
45
45
  async getBlockRemoteLoaderOptions(options) {
46
46
  options.blockType = options.blockType ?? 'AddonBlock';
47
47
  options.name = options.name ?? '';
@@ -78,4 +78,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImpor
78
78
  providedIn: 'root'
79
79
  }]
80
80
  }], ctorParameters: function () { return [{ type: i1.PepHttpService }, { type: i1.PepSessionService }, { type: i1.PepAddonService }]; } });
81
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVtb3RlLWxvYWRlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWxpYi9yZW1vdGUtbG9hZGVyL3JlbW90ZS1sb2FkZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7QUFRM0MsTUFBTSxPQUFPLHNCQUFzQjtJQUUvQixZQUNZLFdBQTJCLEVBQzNCLGNBQWlDLEVBQ2pDLFlBQTZCO1FBRjdCLGdCQUFXLEdBQVgsV0FBVyxDQUFnQjtRQUMzQixtQkFBYyxHQUFkLGNBQWMsQ0FBbUI7UUFDakMsaUJBQVksR0FBWixZQUFZLENBQWlCO1FBRXJDLEVBQUU7SUFDTixDQUFDO0lBRUQsc0JBQXNCLENBQUMsZUFBaUMsRUFBRSxnQkFBZ0IsR0FBRyxFQUFFLEVBQUUsT0FBeUMsUUFBUTtRQUM5SCxNQUFNLGFBQWEsR0FBRyxlQUFlLENBQUMsUUFBUSxDQUFDLGNBQWMsRUFBRSxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUM7UUFDMUosTUFBTSxHQUFHLEdBQUc7WUFDUixJQUFJLEVBQUUsSUFBSTtZQUNWLFdBQVcsRUFBRSxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsR0FBRyxlQUFlLENBQUMsa0JBQWtCLEdBQUcsZUFBZSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsS0FBSztZQUNwSixVQUFVLEVBQUUsZUFBZSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0I7WUFDckQsYUFBYSxFQUFFLEtBQUssYUFBYSxFQUFFO1lBQ25DLE9BQU8s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Q1gsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLFNBQVMsS0FBSyxlQUFlLENBQUMsQ0FBQyxDQUFDLGNBQWMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQTtvQkFDbkgsTUFBTSxDQUFDLGNBQWMsT0FBTyw0QkFBNEIsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7Z0JBQ2pGLENBQUMsQ0FBQyxDQUFDO2FBQ047aUJBQU07Z0JBQ0gsSUFBSSxPQUFPLENBQUMsU0FBUyxLQUFLLGVBQWUsRUFBRTtvQkFDdkMsTUFBTSxDQUFDLDBCQUEwQixDQUFDLENBQUM7aUJBQ3RDO3FCQUNJO29CQUNELE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO2lCQUNsQzthQUNKO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDOzttSEExRVEsc0JBQXNCO3VIQUF0QixzQkFBc0IsY0FGbkIsTUFBTTsyRkFFVCxzQkFBc0I7a0JBSGxDLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29lcmNlTnVtYmVyUHJvcGVydHkgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUGVwQWRkb25TZXJ2aWNlLCBQZXBIdHRwU2VydmljZSwgUGVwU2Vzc2lvblNlcnZpY2V9IGZyb20gJ0BwZXBwZXJpLWFkZG9ucy9uZ3gtbGliJztcbmltcG9ydCB7IElQZXBSZW1vdGVMb2FkZXJQYXJhbXNPcHRpb25zLCBQZXBSZW1vdGVMb2FkZXJPcHRpb25zIH0gZnJvbSAnLi9yZW1vdGUtbG9hZGVyLm1vZGVsJztcbmltcG9ydCB7IElCbG9ja0xvYWRlckRhdGEgfSBmcm9tICcuL3JlbW90ZS1sb2FkZXIubW9kZWwnO1xuXG5ASW5qZWN0YWJsZSh7IFxuICAgIHByb3ZpZGVkSW46ICdyb290JyBcbn0pXG5leHBvcnQgY2xhc3MgUGVwUmVtb3RlTG9hZGVyU2VydmljZSB7XG4gICAgXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgaHR0cFNlcnZpY2U6IFBlcEh0dHBTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHNlc3Npb25TZXJ2aWNlOiBQZXBTZXNzaW9uU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBhZGRvblNlcnZpY2U6IFBlcEFkZG9uU2VydmljZVxuICAgICkge1xuICAgICAgICAvL1xuICAgIH1cblxuICAgIGdldFJlbW90ZUxvYWRlck9wdGlvbnMoYmxvY2tMb2FkZXJEYXRhOiBJQmxvY2tMb2FkZXJEYXRhLCBibG9ja1JlbW90ZUVudHJ5ID0gJycsIHR5cGU6ICdzY3JpcHQnIHwgJ21vZHVsZScgfCAnbWFuaWZlc3QnID0gJ21vZHVsZScpOiBQZXBSZW1vdGVMb2FkZXJPcHRpb25zIHtcbiAgICAgICAgY29uc3QgZXhwb3NlZE1vZHVsZSA9IGJsb2NrTG9hZGVyRGF0YS5yZWxhdGlvbi5FbGVtZW50c01vZHVsZT8ubGVuZ3RoID4gMCA/IGJsb2NrTG9hZGVyRGF0YS5yZWxhdGlvbi5FbGVtZW50c01vZHVsZSA6IGJsb2NrTG9hZGVyRGF0YS5yZWxhdGlvbi5Nb2R1bGVOYW1lO1xuICAgICAgICBjb25zdCByZXMgPSB7XG4gICAgICAgICAgICB0eXBlOiB0eXBlLFxuICAgICAgICAgICAgcmVtb3RlRW50cnk6IGJsb2NrUmVtb3RlRW50cnkubGVuZ3RoID4gMCA/IGJsb2NrUmVtb3RlRW50cnkgOiBgJHtibG9ja0xvYWRlckRhdGEuYWRkb25QdWJsaWNCYXNlVVJMfSR7YmxvY2tMb2FkZXJEYXRhLnJlbGF0aW9uLkFkZG9uUmVsYXRpdmVVUkx9LmpzYCxcbiAgICAgICAgICAgIHJlbW90ZU5hbWU6IGJsb2NrTG9hZGVyRGF0YS5yZWxhdGlvbi5BZGRvblJlbGF0aXZlVVJMLCAvLyBGb3Igc2NyaXB0IHR5cGUsIHRoaXMgaXMgdGhlIG5hbWUgb2YgdGhlIHNjcmlwdC5cbiAgICAgICAgICAgIGV4cG9zZWRNb2R1bGU6IGAuLyR7ZXhwb3NlZE1vZHVsZX1gLFxuICAgICAgICAgICAgYWRkb25JZDogYmxvY2tMb2FkZXJEYXRhLnJlbGF0aW9uLkFkZG9uVVVJRCwgLy8gRm9yIGxvY2FsIHVzZSAoYWRkaW5nIHRoZSByZWxhdGl2ZSBwYXRoIHRvIHRoZSBhc3NldHMpLlxuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAvLyBJZiBpdCdzIHdlYiBjb21wb25lbnRzXG4gICAgICAgIGlmIChibG9ja0xvYWRlckRhdGEucmVsYXRpb24uRWxlbWVudHNNb2R1bGU/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHJlc1snZWxlbWVudE5hbWUnXSA9IGJsb2NrTG9hZGVyRGF0YS5yZWxhdGlvbi5FbGVtZW50TmFtZVxuICAgICAgICB9IGVsc2UgeyAvLyBGb3IgbG9hZCB0aGUgY29tcG9uZW50IGZyb20gdGhlIG1vZHVsZS5cbiAgICAgICAgICAgIHJlc1snY29tcG9uZW50TmFtZSddID0gYmxvY2tMb2FkZXJEYXRhLnJlbGF0aW9uLkNvbXBvbmVudE5hbWU7IFxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEJsb2NrTG9hZGVyRGF0YVVybChvcHRpb25zOiBJUGVwUmVtb3RlTG9hZGVyUGFyYW1zT3B0aW9ucyk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGZpbGVOYW1lID0gJ2FkZG9uX2Jsb2Nrcyc7XG4gICAgICAgIGNvbnN0IHBhZ2VzQWRkb25VdWlkID0gdGhpcy5hZGRvblNlcnZpY2UuZ2V0UGFnZXNBZGRvblVVSUQoKTtcbiAgICAgICAgbGV0IHBhZ2VzQmFzZVVybDtcblxuICAgICAgICAvLyBGb3IgZGV2U2VydmVyIHJ1biBzZXJ2ZXIgb24gbG9jYWxob3N0LlxuICAgICAgICBpZihvcHRpb25zLnBhZ2VzRGV2U2VydmVyPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBwYWdlc0Jhc2VVcmwgPSBgJHtvcHRpb25zLnBhZ2VzRGV2U2VydmVyfS8ke2ZpbGVOYW1lfWA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBiYXNlVXJsID0gdGhpcy5zZXNzaW9uU2VydmljZS5nZXRQYXBpQmFzZVVybCgpO1xuICAgICAgICAgICAgcGFnZXNCYXNlVXJsID0gYCR7YmFzZVVybH0vYWRkb25zL2FwaS8ke3BhZ2VzQWRkb25VdWlkfS8ke2ZpbGVOYW1lfWA7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB1cmwgPSBgJHtwYWdlc0Jhc2VVcmx9L2dldF9hZGRvbl9ibG9ja19sb2FkZXJfZGF0YT9uYW1lPSR7b3B0aW9ucy5uYW1lfSZzbHVnTmFtZT0ke29wdGlvbnMuc2x1Z05hbWV9JmJsb2NrVHlwZT0ke29wdGlvbnMuYmxvY2tUeXBlfSZhZGRvblVVSUQ9JHtvcHRpb25zLmFkZG9uVVVJRH1gO1xuICAgICAgICByZXR1cm4gdXJsO1xuICAgIH1cblxuICAgIGFzeW5jIGdldEJsb2NrUmVtb3RlTG9hZGVyT3B0aW9ucyhvcHRpb25zOiBJUGVwUmVtb3RlTG9hZGVyUGFyYW1zT3B0aW9ucyk6IFByb21pc2U8UGVwUmVtb3RlTG9hZGVyT3B0aW9ucz4ge1xuICAgICAgICBvcHRpb25zLmJsb2NrVHlwZSA9IG9wdGlvbnMuYmxvY2tUeXBlID8/ICdBZGRvbkJsb2NrJztcbiAgICAgICAgb3B0aW9ucy5uYW1lID0gb3B0aW9ucy5uYW1lID8/ICcnO1xuICAgICAgICBvcHRpb25zLnNsdWdOYW1lID0gb3B0aW9ucy5zbHVnTmFtZSA/PyAnJztcbiAgICAgICAgb3B0aW9ucy5hZGRvblVVSUQgPSBvcHRpb25zLmFkZG9uVVVJRCA/PyAnJztcblxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMubmFtZT8ubGVuZ3RoID4gMCB8fCAob3B0aW9ucy5zbHVnTmFtZT8ubGVuZ3RoID4gMCAmJiBvcHRpb25zLmJsb2NrVHlwZSA9PT0gJ1NldHRpbmdzQmxvY2snKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrTG9hZGVyRGF0YVVybCA9IHRoaXMuZ2V0QmxvY2tMb2FkZXJEYXRhVXJsKG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIHRoaXMuaHR0cFNlcnZpY2UuZ2V0SHR0cENhbGwoYmxvY2tMb2FkZXJEYXRhVXJsKS50b1Byb21pc2UoKS50aGVuKChkYXRhOiBJQmxvY2tMb2FkZXJEYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5nVmVyc2lvbk51bWJlciA9IGNvZXJjZU51bWJlclByb3BlcnR5KGRhdGEucmVsYXRpb24/LlN1YlR5cGU/LnRvTG9jYWxlTG93ZXJDYXNlKCkucmVwbGFjZSgnbmcnLCAnJyksIDE0KTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdHlwZSA9IG5nVmVyc2lvbk51bWJlciA+PSAxNCA/ICdtb2R1bGUnIDogJ3NjcmlwdCc7XG5cbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLmdldFJlbW90ZUxvYWRlck9wdGlvbnMoZGF0YSwgb3B0aW9ucy5ibG9ja1JlbW90ZUVudHJ5LCB0eXBlKSk7XG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmFtZU1zZyA9IG9wdGlvbnMuYmxvY2tUeXBlID09PSAnU2V0dGluZ3NCbG9jaycgPyBgc2x1Z05hbWUgLSAke29wdGlvbnMuc2x1Z05hbWV9YCA6IGBuYW1lIC0gJHtvcHRpb25zLm5hbWV9YFxuICAgICAgICAgICAgICAgICAgICByZWplY3QoYEJsb2NrIHdpdGggJHtuYW1lTXNnfSBpcyBub3QgZm91bmQgZm9yIHR5cGUgLSAke29wdGlvbnMuYmxvY2tUeXBlfWApO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5ibG9ja1R5cGUgPT09ICdTZXR0aW5nc0Jsb2NrJykge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoYHNsdWdOYW1lIGlzIG5vdCBzdXBwbGllZGApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGBuYW1lIGlzIG5vdCBzdXBwbGllZGApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxufVxuIl19
81
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVtb3RlLWxvYWRlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWxpYi9yZW1vdGUtbG9hZGVyL3JlbW90ZS1sb2FkZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7QUFRM0MsTUFBTSxPQUFPLHNCQUFzQjtJQUUvQixZQUNZLFdBQTJCLEVBQzNCLGNBQWlDLEVBQ2pDLFlBQTZCO1FBRjdCLGdCQUFXLEdBQVgsV0FBVyxDQUFnQjtRQUMzQixtQkFBYyxHQUFkLGNBQWMsQ0FBbUI7UUFDakMsaUJBQVksR0FBWixZQUFZLENBQWlCO1FBRXJDLEVBQUU7SUFDTixDQUFDO0lBRU8scUJBQXFCLENBQUMsT0FBc0M7UUFDaEUsTUFBTSxRQUFRLEdBQUcsY0FBYyxDQUFDO1FBQ2hDLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUM3RCxJQUFJLFlBQVksQ0FBQztRQUVqQix5Q0FBeUM7UUFDekMsSUFBRyxPQUFPLENBQUMsY0FBYyxFQUFFLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDbkMsWUFBWSxHQUFHLEdBQUcsT0FBTyxDQUFDLGNBQWMsSUFBSSxRQUFRLEVBQUUsQ0FBQztTQUMxRDthQUFNO1lBQ0gsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUNyRCxZQUFZLEdBQUcsR0FBRyxPQUFPLGVBQWUsY0FBYyxJQUFJLFFBQVEsRUFBRSxDQUFDO1NBQ3hFO1FBRUQsTUFBTSxHQUFHLEdBQUcsR0FBRyxZQUFZLHFDQUFxQyxPQUFPLENBQUMsSUFBSSxhQUFhLE9BQU8sQ0FBQyxRQUFRLGNBQWMsT0FBTyxDQUFDLFNBQVMsY0FB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Q1gsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLFNBQVMsS0FBSyxlQUFlLENBQUMsQ0FBQyxDQUFDLGNBQWMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQTtvQkFDbkgsTUFBTSxDQUFDLGNBQWMsT0FBTyw0QkFBNEIsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7Z0JBQ2pGLENBQUMsQ0FBQyxDQUFDO2FBQ047aUJBQU07Z0JBQ0gsSUFBSSxPQUFPLENBQUMsU0FBUyxLQUFLLGVBQWUsRUFBRTtvQkFDdkMsTUFBTSxDQUFDLDBCQUEwQixDQUFDLENBQUM7aUJBQ3RDO3FCQUNJO29CQUNELE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO2lCQUNsQzthQUNKO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDOzttSEExRVEsc0JBQXNCO3VIQUF0QixzQkFBc0IsY0FGbkIsTUFBTTsyRkFFVCxzQkFBc0I7a0JBSGxDLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29lcmNlTnVtYmVyUHJvcGVydHkgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUGVwQWRkb25TZXJ2aWNlLCBQZXBIdHRwU2VydmljZSwgUGVwU2Vzc2lvblNlcnZpY2V9IGZyb20gJ0BwZXBwZXJpLWFkZG9ucy9uZ3gtbGliJztcbmltcG9ydCB7IElQZXBSZW1vdGVMb2FkZXJQYXJhbXNPcHRpb25zLCBQZXBSZW1vdGVMb2FkZXJPcHRpb25zIH0gZnJvbSAnLi9yZW1vdGUtbG9hZGVyLm1vZGVsJztcbmltcG9ydCB7IElCbG9ja0xvYWRlckRhdGEgfSBmcm9tICcuL3JlbW90ZS1sb2FkZXIubW9kZWwnO1xuXG5ASW5qZWN0YWJsZSh7IFxuICAgIHByb3ZpZGVkSW46ICdyb290JyBcbn0pXG5leHBvcnQgY2xhc3MgUGVwUmVtb3RlTG9hZGVyU2VydmljZSB7XG4gICAgXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgaHR0cFNlcnZpY2U6IFBlcEh0dHBTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHNlc3Npb25TZXJ2aWNlOiBQZXBTZXNzaW9uU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBhZGRvblNlcnZpY2U6IFBlcEFkZG9uU2VydmljZVxuICAgICkge1xuICAgICAgICAvL1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0QmxvY2tMb2FkZXJEYXRhVXJsKG9wdGlvbnM6IElQZXBSZW1vdGVMb2FkZXJQYXJhbXNPcHRpb25zKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgZmlsZU5hbWUgPSAnYWRkb25fYmxvY2tzJztcbiAgICAgICAgY29uc3QgcGFnZXNBZGRvblV1aWQgPSB0aGlzLmFkZG9uU2VydmljZS5nZXRQYWdlc0FkZG9uVVVJRCgpO1xuICAgICAgICBsZXQgcGFnZXNCYXNlVXJsO1xuXG4gICAgICAgIC8vIEZvciBkZXZTZXJ2ZXIgcnVuIHNlcnZlciBvbiBsb2NhbGhvc3QuXG4gICAgICAgIGlmKG9wdGlvbnMucGFnZXNEZXZTZXJ2ZXI/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHBhZ2VzQmFzZVVybCA9IGAke29wdGlvbnMucGFnZXNEZXZTZXJ2ZXJ9LyR7ZmlsZU5hbWV9YDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGJhc2VVcmwgPSB0aGlzLnNlc3Npb25TZXJ2aWNlLmdldFBhcGlCYXNlVXJsKCk7XG4gICAgICAgICAgICBwYWdlc0Jhc2VVcmwgPSBgJHtiYXNlVXJsfS9hZGRvbnMvYXBpLyR7cGFnZXNBZGRvblV1aWR9LyR7ZmlsZU5hbWV9YDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHVybCA9IGAke3BhZ2VzQmFzZVVybH0vZ2V0X2FkZG9uX2Jsb2NrX2xvYWRlcl9kYXRhP25hbWU9JHtvcHRpb25zLm5hbWV9JnNsdWdOYW1lPSR7b3B0aW9ucy5zbHVnTmFtZX0mYmxvY2tUeXBlPSR7b3B0aW9ucy5ibG9ja1R5cGV9JmFkZG9uVVVJRD0ke29wdGlvbnMuYWRkb25VVUlEfWA7XG4gICAgICAgIHJldHVybiB1cmw7XG4gICAgfVxuXG4gICAgZ2V0UmVtb3RlTG9hZGVyT3B0aW9ucyhibG9ja0xvYWRlckRhdGE6IElCbG9ja0xvYWRlckRhdGEsIGJsb2NrUmVtb3RlRW50cnkgPSAnJywgdHlwZTogJ3NjcmlwdCcgfCAnbW9kdWxlJyB8ICdtYW5pZmVzdCcgPSAnbW9kdWxlJyk6IFBlcFJlbW90ZUxvYWRlck9wdGlvbnMge1xuICAgICAgICBjb25zdCBleHBvc2VkTW9kdWxlID0gYmxvY2tMb2FkZXJEYXRhLnJlbGF0aW9uLkVsZW1lbnRzTW9kdWxlPy5sZW5ndGggPiAwID8gYmxvY2tMb2FkZXJEYXRhLnJlbGF0aW9uLkVsZW1lbnRzTW9kdWxlIDogYmxvY2tMb2FkZXJEYXRhLnJlbGF0aW9uLk1vZHVsZU5hbWU7XG4gICAgICAgIGNvbnN0IHJlcyA9IHtcbiAgICAgICAgICAgIHR5cGU6IHR5cGUsXG4gICAgICAgICAgICByZW1vdGVFbnRyeTogYmxvY2tSZW1vdGVFbnRyeS5sZW5ndGggPiAwID8gYmxvY2tSZW1vdGVFbnRyeSA6IGAke2Jsb2NrTG9hZGVyRGF0YS5hZGRvblB1YmxpY0Jhc2VVUkx9JHtibG9ja0xvYWRlckRhdGEucmVsYXRpb24uQWRkb25SZWxhdGl2ZVVSTH0uanNgLFxuICAgICAgICAgICAgcmVtb3RlTmFtZTogYmxvY2tMb2FkZXJEYXRhLnJlbGF0aW9uLkFkZG9uUmVsYXRpdmVVUkwsIC8vIEZvciBzY3JpcHQgdHlwZSwgdGhpcyBpcyB0aGUgbmFtZSBvZiB0aGUgc2NyaXB0LlxuICAgICAgICAgICAgZXhwb3NlZE1vZHVsZTogYC4vJHtleHBvc2VkTW9kdWxlfWAsXG4gICAgICAgICAgICBhZGRvbklkOiBibG9ja0xvYWRlckRhdGEucmVsYXRpb24uQWRkb25VVUlELCAvLyBGb3IgbG9jYWwgdXNlIChhZGRpbmcgdGhlIHJlbGF0aXZlIHBhdGggdG8gdGhlIGFzc2V0cykuXG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIC8vIElmIGl0J3Mgd2ViIGNvbXBvbmVudHNcbiAgICAgICAgaWYgKGJsb2NrTG9hZGVyRGF0YS5yZWxhdGlvbi5FbGVtZW50c01vZHVsZT8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcmVzWydlbGVtZW50TmFtZSddID0gYmxvY2tMb2FkZXJEYXRhLnJlbGF0aW9uLkVsZW1lbnROYW1lXG4gICAgICAgIH0gZWxzZSB7IC8vIEZvciBsb2FkIHRoZSBjb21wb25lbnQgZnJvbSB0aGUgbW9kdWxlLlxuICAgICAgICAgICAgcmVzWydjb21wb25lbnROYW1lJ10gPSBibG9ja0xvYWRlckRhdGEucmVsYXRpb24uQ29tcG9uZW50TmFtZTsgXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIGFzeW5jIGdldEJsb2NrUmVtb3RlTG9hZGVyT3B0aW9ucyhvcHRpb25zOiBJUGVwUmVtb3RlTG9hZGVyUGFyYW1zT3B0aW9ucyk6IFByb21pc2U8UGVwUmVtb3RlTG9hZGVyT3B0aW9ucz4ge1xuICAgICAgICBvcHRpb25zLmJsb2NrVHlwZSA9IG9wdGlvbnMuYmxvY2tUeXBlID8/ICdBZGRvbkJsb2NrJztcbiAgICAgICAgb3B0aW9ucy5uYW1lID0gb3B0aW9ucy5uYW1lID8/ICcnO1xuICAgICAgICBvcHRpb25zLnNsdWdOYW1lID0gb3B0aW9ucy5zbHVnTmFtZSA/PyAnJztcbiAgICAgICAgb3B0aW9ucy5hZGRvblVVSUQgPSBvcHRpb25zLmFkZG9uVVVJRCA/PyAnJztcblxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMubmFtZT8ubGVuZ3RoID4gMCB8fCAob3B0aW9ucy5zbHVnTmFtZT8ubGVuZ3RoID4gMCAmJiBvcHRpb25zLmJsb2NrVHlwZSA9PT0gJ1NldHRpbmdzQmxvY2snKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrTG9hZGVyRGF0YVVybCA9IHRoaXMuZ2V0QmxvY2tMb2FkZXJEYXRhVXJsKG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIHRoaXMuaHR0cFNlcnZpY2UuZ2V0SHR0cENhbGwoYmxvY2tMb2FkZXJEYXRhVXJsKS50b1Byb21pc2UoKS50aGVuKChkYXRhOiBJQmxvY2tMb2FkZXJEYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5nVmVyc2lvbk51bWJlciA9IGNvZXJjZU51bWJlclByb3BlcnR5KGRhdGEucmVsYXRpb24/LlN1YlR5cGU/LnRvTG9jYWxlTG93ZXJDYXNlKCkucmVwbGFjZSgnbmcnLCAnJyksIDE0KTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdHlwZSA9IG5nVmVyc2lvbk51bWJlciA+PSAxNCA/ICdtb2R1bGUnIDogJ3NjcmlwdCc7XG5cbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLmdldFJlbW90ZUxvYWRlck9wdGlvbnMoZGF0YSwgb3B0aW9ucy5ibG9ja1JlbW90ZUVudHJ5LCB0eXBlKSk7XG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmFtZU1zZyA9IG9wdGlvbnMuYmxvY2tUeXBlID09PSAnU2V0dGluZ3NCbG9jaycgPyBgc2x1Z05hbWUgLSAke29wdGlvbnMuc2x1Z05hbWV9YCA6IGBuYW1lIC0gJHtvcHRpb25zLm5hbWV9YFxuICAgICAgICAgICAgICAgICAgICByZWplY3QoYEJsb2NrIHdpdGggJHtuYW1lTXNnfSBpcyBub3QgZm91bmQgZm9yIHR5cGUgLSAke29wdGlvbnMuYmxvY2tUeXBlfWApO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5ibG9ja1R5cGUgPT09ICdTZXR0aW5nc0Jsb2NrJykge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoYHNsdWdOYW1lIGlzIG5vdCBzdXBwbGllZGApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGBuYW1lIGlzIG5vdCBzdXBwbGllZGApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxufVxuIl19