@ieeesa-npm/presentation 0.19.4 → 0.19.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/assets/constants.json +4 -1
- package/esm2022/lib/components/color-picker/color-picker.component.mjs +3 -3
- package/esm2022/lib/models/file-upload-presigned-url-res.model.mjs +1 -1
- package/esm2022/lib/services/file-upload.service.mjs +9 -3
- package/fesm2022/ieeesa-npm-presentation.mjs +13 -4
- package/fesm2022/ieeesa-npm-presentation.mjs.map +1 -1
- package/lib/components/chips/chips.component.d.ts +3 -0
- package/lib/components/file-upload/file-upload.component.d.ts +3 -0
- package/lib/models/file-upload-presigned-url-res.model.d.ts +6 -0
- package/lib/services/file-upload.service.d.ts +9 -11
- package/package.json +1 -1
- package/src/lib/assets/constants.json +4 -1
|
@@ -566,7 +566,10 @@
|
|
|
566
566
|
"2026": "Invalid file format. Please upload SVG, PNG and JPG file format only.",
|
|
567
567
|
"2059": "Application Details not found.",
|
|
568
568
|
"2060": "Invalid file format.",
|
|
569
|
-
"2061": "Unable to establish connection. Please try again later."
|
|
569
|
+
"2061": "Unable to establish connection. Please try again later.",
|
|
570
|
+
"2062": "File not found.",
|
|
571
|
+
"2063": "File Name is required.",
|
|
572
|
+
"2064": "Application Id or Domain is required."
|
|
570
573
|
}
|
|
571
574
|
}
|
|
572
575
|
},
|
|
@@ -264,7 +264,7 @@ export class ColorPickerComponent {
|
|
|
264
264
|
this.colorPickerEventHandlers(false);
|
|
265
265
|
}
|
|
266
266
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ColorPickerComponent, deps: [{ token: i0.ElementRef }, { token: i1.FormUtilityService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
267
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ColorPickerComponent, isStandalone: true, selector: "ieeesa-color-picker", inputs: { defaultColor: "defaultColor", palette: "palette", overlayClassName: "overlayClassName", colorFormat: "colorFormat", colorAnimation: "colorAnimation", formControlName: "formControlName", paletteSelectLabel: "paletteSelectLabel", paletteCancelLabel: "paletteCancelLabel", colorPickerLabel: "colorPickerLabel", isColorCodeLabelNeeded: "isColorCodeLabelNeeded", isArrowIconNeeded: "isArrowIconNeeded", canHideTextInput: "canHideTextInput", canHideColorPicker: "canHideColorPicker" }, outputs: { colorPickerChange: "colorPickerChange", colorPickerSliderChange: "colorPickerSliderChange" }, viewQueries: [{ propertyName: "colorPickerDirective", first: true, predicate: NgxColorsTriggerDirective, descendants: true, static: true }], ngImport: i0, template: "<div\r\n [formGroup]=\"group\"\r\n [ngClass]=\"\r\n config?.isLabelAlignedLeft\r\n ? 'ieeesa-color-picker__label-left'\r\n : 'ieeesa-color-picker__label-top'\r\n \"\r\n>\r\n <mat-label\r\n class=\"ieeesa-body-sm-14 ieeesa-color-picker__label\"\r\n *ngIf=\"colorPickerLabel\"\r\n >{{ colorPickerLabel }}</mat-label\r\n >\r\n <div class=\"d-flex\">\r\n <ngx-colors\r\n class=\"ieeesa-color-picker\"\r\n ngx-colors-trigger\r\n [acceptLabel]=\"paletteSelectLabel\"\r\n [cancelLabel]=\"paletteCancelLabel\"\r\n [palette]=\"palette\"\r\n (input)=\"inputChange($event)\"\r\n (open)=\"onOpenPalette()\"\r\n (close)=\"onClosePalette()\"\r\n (slider)=\"onSliderChange($event)\"\r\n [overlayClassName]=\"overlayClassName\"\r\n [formControlName]=\"config.controlName\"\r\n [format]=\"colorFormat\"\r\n [hideTextInput]=\"canHideTextInput\"\r\n [colorsAnimation]=\"colorAnimation\"\r\n [hideColorPicker]=\"canHideColorPicker\"\r\n [ariaLabel]=\"colorPickerTexts?.ariaLabel?.colorPicker\"\r\n [ariaDescription]=\"colorPickerTexts?.ariaDescription\"\r\n >\r\n </ngx-colors>\r\n <button\r\n class=\"ieeesa-color-picker__toggle-icon\"\r\n *ngIf=\"isArrowIconNeeded\"\r\n type=\"button\"\r\n (click)=\"togglePalette()\"\r\n [attr.aria-label]=\"colorPickerTexts?.ariaLabel?.colorPicker\"\r\n [attr.aria-describedby]=\"colorPickerTexts?.ariaDescribedById\"\r\n >\r\n <i\r\n class=\"fa-solid\"\r\n [ngClass]=\"canShowPalette ? 'fa-caret-up' : 'fa-caret-down'\"\r\n ></i>\r\n </button>\r\n <span\r\n class=\"ieeesa-color-picker--selected ieeesa-body-md-14\"\r\n *ngIf=\"isColorCodeLabelNeeded && defaultColor\"\r\n >{{ defaultColor }}</span\r\n >\r\n </div>\r\n <ieeesa-form-error [formGroup]=\"group\" [config]=\"config\"> </ieeesa-form-error>\r\n <ieeesa-form-support-text\r\n [formGroup]=\"group\"\r\n [config]=\"config\"\r\n ></ieeesa-form-support-text>\r\n</div>\r\n", styles: [".ieeesa-color-picker .preview{border-radius:0!important;box-shadow:none!important;padding:0!important}.ieeesa-color-picker .preview .preview-background{background-image:none!important}.ieeesa-color-picker .preview .circle{border-radius:0!important;height:30px!important;width:30px!important}.ieeesa-color-picker .preview .circle.colornull{background:linear-gradient(135deg,#ecececb3 0% 45%,#f4f3f3 50%,#ecececb3 55% 100%)!important}.ieeesa-color-picker__label-left{display:flex}.ieeesa-color-picker__label-top{display:block}.ieeesa-color-picker--selected{border:1px solid #000000;padding:6px 8px 6px 12px;border-radius:2px}.ieeesa-color-picker__toggle-icon{border:none;background:#fff}.ieeesa-color-picker__overlay .opened .colors .circle
|
|
267
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ColorPickerComponent, isStandalone: true, selector: "ieeesa-color-picker", inputs: { defaultColor: "defaultColor", palette: "palette", overlayClassName: "overlayClassName", colorFormat: "colorFormat", colorAnimation: "colorAnimation", formControlName: "formControlName", paletteSelectLabel: "paletteSelectLabel", paletteCancelLabel: "paletteCancelLabel", colorPickerLabel: "colorPickerLabel", isColorCodeLabelNeeded: "isColorCodeLabelNeeded", isArrowIconNeeded: "isArrowIconNeeded", canHideTextInput: "canHideTextInput", canHideColorPicker: "canHideColorPicker" }, outputs: { colorPickerChange: "colorPickerChange", colorPickerSliderChange: "colorPickerSliderChange" }, viewQueries: [{ propertyName: "colorPickerDirective", first: true, predicate: NgxColorsTriggerDirective, descendants: true, static: true }], ngImport: i0, template: "<div\r\n [formGroup]=\"group\"\r\n [ngClass]=\"\r\n config?.isLabelAlignedLeft\r\n ? 'ieeesa-color-picker__label-left'\r\n : 'ieeesa-color-picker__label-top'\r\n \"\r\n>\r\n <mat-label\r\n class=\"ieeesa-body-sm-14 ieeesa-color-picker__label\"\r\n *ngIf=\"colorPickerLabel\"\r\n >{{ colorPickerLabel }}</mat-label\r\n >\r\n <div class=\"d-flex\">\r\n <ngx-colors\r\n class=\"ieeesa-color-picker\"\r\n ngx-colors-trigger\r\n [acceptLabel]=\"paletteSelectLabel\"\r\n [cancelLabel]=\"paletteCancelLabel\"\r\n [palette]=\"palette\"\r\n (input)=\"inputChange($event)\"\r\n (open)=\"onOpenPalette()\"\r\n (close)=\"onClosePalette()\"\r\n (slider)=\"onSliderChange($event)\"\r\n [overlayClassName]=\"overlayClassName\"\r\n [formControlName]=\"config.controlName\"\r\n [format]=\"colorFormat\"\r\n [hideTextInput]=\"canHideTextInput\"\r\n [colorsAnimation]=\"colorAnimation\"\r\n [hideColorPicker]=\"canHideColorPicker\"\r\n [ariaLabel]=\"colorPickerTexts?.ariaLabel?.colorPicker\"\r\n [ariaDescription]=\"colorPickerTexts?.ariaDescription\"\r\n >\r\n </ngx-colors>\r\n <button\r\n class=\"ieeesa-color-picker__toggle-icon\"\r\n *ngIf=\"isArrowIconNeeded\"\r\n type=\"button\"\r\n (click)=\"togglePalette()\"\r\n [attr.aria-label]=\"colorPickerTexts?.ariaLabel?.colorPicker\"\r\n [attr.aria-describedby]=\"colorPickerTexts?.ariaDescribedById\"\r\n >\r\n <i\r\n class=\"fa-solid\"\r\n [ngClass]=\"canShowPalette ? 'fa-caret-up' : 'fa-caret-down'\"\r\n ></i>\r\n </button>\r\n <span\r\n class=\"ieeesa-color-picker--selected ieeesa-body-md-14\"\r\n *ngIf=\"isColorCodeLabelNeeded && defaultColor\"\r\n >{{ defaultColor }}</span\r\n >\r\n </div>\r\n <ieeesa-form-error [formGroup]=\"group\" [config]=\"config\"> </ieeesa-form-error>\r\n <ieeesa-form-support-text\r\n [formGroup]=\"group\"\r\n [config]=\"config\"\r\n ></ieeesa-form-support-text>\r\n</div>\r\n", styles: [".ieeesa-color-picker .preview{border-radius:0!important;box-shadow:none!important;padding:0!important}.ieeesa-color-picker .preview .preview-background{background-image:none!important}.ieeesa-color-picker .preview .circle{border-radius:0!important;height:30px!important;width:30px!important}.ieeesa-color-picker .preview .circle.colornull{background:linear-gradient(135deg,#ecececb3 0% 45%,#f4f3f3 50%,#ecececb3 55% 100%)!important}.ieeesa-color-picker__label-left{display:flex}.ieeesa-color-picker__label-top{display:block}.ieeesa-color-picker--selected{border:1px solid #000000;padding:6px 8px 6px 12px;border-radius:2px}.ieeesa-color-picker__toggle-icon{border:none;background:#fff}.ieeesa-color-picker__overlay .opened{width:14.687em!important}.ieeesa-color-picker__overlay .opened .colors .circle{border-radius:0!important;height:30px!important;width:30px!important}.ieeesa-color-picker__overlay .opened .colors .circle.wrapper{flex-basis:30px!important}.ieeesa-color-picker__overlay .opened .colors .circle .selected{height:24px!important;width:24px!important;border-radius:0!important}.ieeesa-color-picker__overlay .opened button.select:focus,.ieeesa-color-picker__overlay .opened button.cancel:focus{border:3px solid #000000}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "directive", type: i4.MatLabel, selector: "mat-label" }, { kind: "ngmodule", type: NgxColorsModule }, { kind: "component", type: i5.NgxColorsComponent, selector: "ngx-colors" }, { kind: "directive", type: i5.NgxColorsTriggerDirective, selector: "[ngx-colors-trigger]", inputs: ["colorsAnimation", "palette", "format", "position", "hideTextInput", "hideColorPicker", "attachTo", "overlayClassName", "colorPickerControls", "acceptLabel", "cancelLabel"], outputs: ["change", "input", "slider", "close", "open"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: FormErrorComponent, selector: "ieeesa-form-error", inputs: ["formGroup", "config", "submitResponse"] }, { kind: "component", type: FormSupportTextComponent, selector: "ieeesa-form-support-text", inputs: ["formGroup", "config"], outputs: ["supportTextLinkClick"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
268
268
|
}
|
|
269
269
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ColorPickerComponent, decorators: [{
|
|
270
270
|
type: Component,
|
|
@@ -276,7 +276,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
276
276
|
ReactiveFormsModule,
|
|
277
277
|
FormErrorComponent,
|
|
278
278
|
FormSupportTextComponent,
|
|
279
|
-
], encapsulation: ViewEncapsulation.None, template: "<div\r\n [formGroup]=\"group\"\r\n [ngClass]=\"\r\n config?.isLabelAlignedLeft\r\n ? 'ieeesa-color-picker__label-left'\r\n : 'ieeesa-color-picker__label-top'\r\n \"\r\n>\r\n <mat-label\r\n class=\"ieeesa-body-sm-14 ieeesa-color-picker__label\"\r\n *ngIf=\"colorPickerLabel\"\r\n >{{ colorPickerLabel }}</mat-label\r\n >\r\n <div class=\"d-flex\">\r\n <ngx-colors\r\n class=\"ieeesa-color-picker\"\r\n ngx-colors-trigger\r\n [acceptLabel]=\"paletteSelectLabel\"\r\n [cancelLabel]=\"paletteCancelLabel\"\r\n [palette]=\"palette\"\r\n (input)=\"inputChange($event)\"\r\n (open)=\"onOpenPalette()\"\r\n (close)=\"onClosePalette()\"\r\n (slider)=\"onSliderChange($event)\"\r\n [overlayClassName]=\"overlayClassName\"\r\n [formControlName]=\"config.controlName\"\r\n [format]=\"colorFormat\"\r\n [hideTextInput]=\"canHideTextInput\"\r\n [colorsAnimation]=\"colorAnimation\"\r\n [hideColorPicker]=\"canHideColorPicker\"\r\n [ariaLabel]=\"colorPickerTexts?.ariaLabel?.colorPicker\"\r\n [ariaDescription]=\"colorPickerTexts?.ariaDescription\"\r\n >\r\n </ngx-colors>\r\n <button\r\n class=\"ieeesa-color-picker__toggle-icon\"\r\n *ngIf=\"isArrowIconNeeded\"\r\n type=\"button\"\r\n (click)=\"togglePalette()\"\r\n [attr.aria-label]=\"colorPickerTexts?.ariaLabel?.colorPicker\"\r\n [attr.aria-describedby]=\"colorPickerTexts?.ariaDescribedById\"\r\n >\r\n <i\r\n class=\"fa-solid\"\r\n [ngClass]=\"canShowPalette ? 'fa-caret-up' : 'fa-caret-down'\"\r\n ></i>\r\n </button>\r\n <span\r\n class=\"ieeesa-color-picker--selected ieeesa-body-md-14\"\r\n *ngIf=\"isColorCodeLabelNeeded && defaultColor\"\r\n >{{ defaultColor }}</span\r\n >\r\n </div>\r\n <ieeesa-form-error [formGroup]=\"group\" [config]=\"config\"> </ieeesa-form-error>\r\n <ieeesa-form-support-text\r\n [formGroup]=\"group\"\r\n [config]=\"config\"\r\n ></ieeesa-form-support-text>\r\n</div>\r\n", styles: [".ieeesa-color-picker .preview{border-radius:0!important;box-shadow:none!important;padding:0!important}.ieeesa-color-picker .preview .preview-background{background-image:none!important}.ieeesa-color-picker .preview .circle{border-radius:0!important;height:30px!important;width:30px!important}.ieeesa-color-picker .preview .circle.colornull{background:linear-gradient(135deg,#ecececb3 0% 45%,#f4f3f3 50%,#ecececb3 55% 100%)!important}.ieeesa-color-picker__label-left{display:flex}.ieeesa-color-picker__label-top{display:block}.ieeesa-color-picker--selected{border:1px solid #000000;padding:6px 8px 6px 12px;border-radius:2px}.ieeesa-color-picker__toggle-icon{border:none;background:#fff}.ieeesa-color-picker__overlay .opened .colors .circle
|
|
279
|
+
], encapsulation: ViewEncapsulation.None, template: "<div\r\n [formGroup]=\"group\"\r\n [ngClass]=\"\r\n config?.isLabelAlignedLeft\r\n ? 'ieeesa-color-picker__label-left'\r\n : 'ieeesa-color-picker__label-top'\r\n \"\r\n>\r\n <mat-label\r\n class=\"ieeesa-body-sm-14 ieeesa-color-picker__label\"\r\n *ngIf=\"colorPickerLabel\"\r\n >{{ colorPickerLabel }}</mat-label\r\n >\r\n <div class=\"d-flex\">\r\n <ngx-colors\r\n class=\"ieeesa-color-picker\"\r\n ngx-colors-trigger\r\n [acceptLabel]=\"paletteSelectLabel\"\r\n [cancelLabel]=\"paletteCancelLabel\"\r\n [palette]=\"palette\"\r\n (input)=\"inputChange($event)\"\r\n (open)=\"onOpenPalette()\"\r\n (close)=\"onClosePalette()\"\r\n (slider)=\"onSliderChange($event)\"\r\n [overlayClassName]=\"overlayClassName\"\r\n [formControlName]=\"config.controlName\"\r\n [format]=\"colorFormat\"\r\n [hideTextInput]=\"canHideTextInput\"\r\n [colorsAnimation]=\"colorAnimation\"\r\n [hideColorPicker]=\"canHideColorPicker\"\r\n [ariaLabel]=\"colorPickerTexts?.ariaLabel?.colorPicker\"\r\n [ariaDescription]=\"colorPickerTexts?.ariaDescription\"\r\n >\r\n </ngx-colors>\r\n <button\r\n class=\"ieeesa-color-picker__toggle-icon\"\r\n *ngIf=\"isArrowIconNeeded\"\r\n type=\"button\"\r\n (click)=\"togglePalette()\"\r\n [attr.aria-label]=\"colorPickerTexts?.ariaLabel?.colorPicker\"\r\n [attr.aria-describedby]=\"colorPickerTexts?.ariaDescribedById\"\r\n >\r\n <i\r\n class=\"fa-solid\"\r\n [ngClass]=\"canShowPalette ? 'fa-caret-up' : 'fa-caret-down'\"\r\n ></i>\r\n </button>\r\n <span\r\n class=\"ieeesa-color-picker--selected ieeesa-body-md-14\"\r\n *ngIf=\"isColorCodeLabelNeeded && defaultColor\"\r\n >{{ defaultColor }}</span\r\n >\r\n </div>\r\n <ieeesa-form-error [formGroup]=\"group\" [config]=\"config\"> </ieeesa-form-error>\r\n <ieeesa-form-support-text\r\n [formGroup]=\"group\"\r\n [config]=\"config\"\r\n ></ieeesa-form-support-text>\r\n</div>\r\n", styles: [".ieeesa-color-picker .preview{border-radius:0!important;box-shadow:none!important;padding:0!important}.ieeesa-color-picker .preview .preview-background{background-image:none!important}.ieeesa-color-picker .preview .circle{border-radius:0!important;height:30px!important;width:30px!important}.ieeesa-color-picker .preview .circle.colornull{background:linear-gradient(135deg,#ecececb3 0% 45%,#f4f3f3 50%,#ecececb3 55% 100%)!important}.ieeesa-color-picker__label-left{display:flex}.ieeesa-color-picker__label-top{display:block}.ieeesa-color-picker--selected{border:1px solid #000000;padding:6px 8px 6px 12px;border-radius:2px}.ieeesa-color-picker__toggle-icon{border:none;background:#fff}.ieeesa-color-picker__overlay .opened{width:14.687em!important}.ieeesa-color-picker__overlay .opened .colors .circle{border-radius:0!important;height:30px!important;width:30px!important}.ieeesa-color-picker__overlay .opened .colors .circle.wrapper{flex-basis:30px!important}.ieeesa-color-picker__overlay .opened .colors .circle .selected{height:24px!important;width:24px!important;border-radius:0!important}.ieeesa-color-picker__overlay .opened button.select:focus,.ieeesa-color-picker__overlay .opened button.cancel:focus{border:3px solid #000000}\n"] }]
|
|
280
280
|
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.FormUtilityService }]; }, propDecorators: { colorPickerDirective: [{
|
|
281
281
|
type: ViewChild,
|
|
282
282
|
args: [NgxColorsTriggerDirective, { static: true }]
|
|
@@ -311,4 +311,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
311
311
|
}], canHideColorPicker: [{
|
|
312
312
|
type: Input
|
|
313
313
|
}] } });
|
|
314
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sb3ItcGlja2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ByZXNlbnRhdGlvbi9zcmMvbGliL2NvbXBvbmVudHMvY29sb3ItcGlja2VyL2NvbG9yLXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcmVzZW50YXRpb24vc3JjL2xpYi9jb21wb25lbnRzL2NvbG9yLXBpY2tlci9jb2xvci1waWNrZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sRUFDTixTQUFTLEVBQ1QsaUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsZUFBZSxFQUFFLHlCQUF5QixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3hFLE9BQU8sRUFBYSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN4RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDeEUsT0FBTyxFQUNMLFdBQVcsRUFDWCxlQUFlLEdBRWhCLE1BQU0saUNBQWlDLENBQUM7QUFDekMsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFHNUYsT0FBTyxLQUFLLFNBQVMsTUFBTSw2QkFBNkIsQ0FBQzs7Ozs7OztBQWlCekQsTUFBTSxPQUFPLG9CQUFvQjtJQTJCL0I7SUFDRSwwQ0FBMEM7SUFDbEMsVUFBc0I7SUFDOUIsMENBQTBDO0lBQ2xDLGtCQUFz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Z0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIElucHV0LFxyXG4gIE9uRGVzdHJveSxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0LFxyXG4gIFZpZXdDaGlsZCxcclxuICBWaWV3RW5jYXBzdWxhdGlvbixcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgTmd4Q29sb3JzTW9kdWxlLCBOZ3hDb2xvcnNUcmlnZ2VyRGlyZWN0aXZlIH0gZnJvbSAnbmd4LWNvbG9ycyc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCwgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE1hdEZvcm1GaWVsZE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xyXG5pbXBvcnQgeyBGb3JtRXJyb3JDb21wb25lbnQgfSBmcm9tICcuLi9mb3JtLWVycm9yL2Zvcm0tZXJyb3IuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRm9ybUNvbnRyb2xUeXBlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2Zvcm0tY29udHJvbC10eXBlcy5tb2RlbCc7XHJcbmltcG9ydCB7XHJcbiAgQ29sb3JGb3JtYXQsXHJcbiAgQ29sb3JzQW5pbWF0aW9uLFxyXG4gIFBhbGV0dGVDb2xvcixcclxufSBmcm9tICcuLi8uLi9tb2RlbHMvY29sb3ItZm9ybWF0Lm1vZGVsJztcclxuaW1wb3J0IHsgRm9ybVN1cHBvcnRUZXh0Q29tcG9uZW50IH0gZnJvbSAnLi4vZm9ybS1zdXBwb3J0LXRleHQvZm9ybS1zdXBwb3J0LXRleHQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRmllbGRDb25maWcgfSBmcm9tICcuLi8uLi9tb2RlbHMvZmllbGQtY29uZmlnLm1vZGVsJztcclxuaW1wb3J0IHsgRm9ybVV0aWxpdHlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZm9ybS11dGlsaXR5LnNlcnZpY2UnO1xyXG5pbXBvcnQgKiBhcyBjb25zdGFudHMgZnJvbSAnLi4vLi4vYXNzZXRzL2NvbnN0YW50cy5qc29uJztcclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdpZWVlc2EtY29sb3ItcGlja2VyJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgTWF0Rm9ybUZpZWxkTW9kdWxlLFxyXG4gICAgTmd4Q29sb3JzTW9kdWxlLFxyXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcclxuICAgIEZvcm1FcnJvckNvbXBvbmVudCxcclxuICAgIEZvcm1TdXBwb3J0VGV4dENvbXBvbmVudCxcclxuICBdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9jb2xvci1waWNrZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2NvbG9yLXBpY2tlci5jb21wb25lbnQuc2NzcyddLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb2xvclBpY2tlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBAVmlld0NoaWxkKE5neENvbG9yc1RyaWdnZXJEaXJlY3RpdmUsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgY29sb3JQaWNrZXJEaXJlY3RpdmUhOiBOZ3hDb2xvcnNUcmlnZ2VyRGlyZWN0aXZlO1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgY29sb3JQaWNrZXJUZXh0czogYW55ID0gY29uc3RhbnRzPy5jb2xvclBpY2tlcjtcclxuICBwYWxldHRlQ29sb3JzOiBQYWxldHRlQ29sb3JbXSA9IHRoaXMuY29sb3JQaWNrZXJUZXh0cz8ucGFsZXR0ZUNvbG9ycztcclxuICBwYWxldHRlQ29udGFpbmVyITogSFRNTEVsZW1lbnQ7XHJcbiAgZ3JvdXAhOiBGb3JtR3JvdXA7XHJcbiAgY29uZmlnITogRmllbGRDb25maWc7XHJcbiAgQE91dHB1dCgpIGNvbG9yUGlja2VyQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcbiAgQE91dHB1dCgpIGNvbG9yUGlja2VyU2xpZGVyQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcbiAgQElucHV0KCkgZGVmYXVsdENvbG9yITogc3RyaW5nO1xyXG4gIGNhblNob3dQYWxldHRlID0gZmFsc2U7XHJcbiAgQElucHV0KCkgcGFsZXR0ZTogc3RyaW5nW10gPSB0aGlzLnBhbGV0dGVDb2xvcnM/Lm1hcChcclxuICAgIChjb2xvcjogUGFsZXR0ZUNvbG9yKSA9PiBjb2xvci5oZXhDb2RlXHJcbiAgKTtcclxuICBASW5wdXQoKSBvdmVybGF5Q2xhc3NOYW1lID0gJ2llZWVzYS1jb2xvci1waWNrZXJfX292ZXJsYXknO1xyXG4gIEBJbnB1dCgpIGNvbG9yRm9ybWF0ID0gQ29sb3JGb3JtYXQuaGV4O1xyXG4gIEBJbnB1dCgpIGNvbG9yQW5pbWF0aW9uID0gQ29sb3JzQW5pbWF0aW9uLnBvcHVwO1xyXG4gIEBJbnB1dCgpIGZvcm1Db250cm9sTmFtZSA9ICdjb2xvclBpY2tlcic7XHJcbiAgQElucHV0KCkgcGFsZXR0ZVNlbGVjdExhYmVsID0gdGhpcy5jb2xvclBpY2tlclRleHRzPy5sYWJlbD8uc2VsZWN0O1xyXG4gIEBJbnB1dCgpIHBhbGV0dGVDYW5jZWxMYWJlbCA9IHRoaXMuY29sb3JQaWNrZXJUZXh0cz8ubGFiZWw/LmNhbmNlbDtcclxuICBASW5wdXQoKSBjb2xvclBpY2tlckxhYmVsITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGlzQ29sb3JDb2RlTGFiZWxOZWVkZWQgPSB0cnVlO1xyXG4gIEBJbnB1dCgpIGlzQXJyb3dJY29uTmVlZGVkID0gdHJ1ZTtcclxuICBASW5wdXQoKSBjYW5IaWRlVGV4dElucHV0ID0gZmFsc2U7XHJcbiAgQElucHV0KCkgY2FuSGlkZUNvbG9yUGlja2VyID0gZmFsc2U7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZixcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHJpdmF0ZSBmb3JtVXRpbGl0eVNlcnZpY2U6IEZvcm1VdGlsaXR5U2VydmljZSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZW1wdHktZnVuY3Rpb25cclxuICApIHt9XHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmdyb3VwID1cclxuICAgICAgdGhpcy5ncm91cCA/PyB0aGlzLmZvcm1VdGlsaXR5U2VydmljZS5nZXRGb3JtR3JvdXAodGhpcy5mb3JtQ29udHJvbE5hbWUpO1xyXG4gICAgdGhpcy5jb25maWcgPVxyXG4gICAgICB0aGlzLmNvbmZpZyA/P1xyXG4gICAgICB0aGlzLmZvcm1VdGlsaXR5U2VydmljZS5nZXRGb3JtRmllbGRDb25maWcoXHJcbiAgICAgICAgdGhpcy5mb3JtQ29udHJvbE5hbWUsXHJcbiAgICAgICAgRm9ybUNvbnRyb2xUeXBlLkNPTE9SX1BJQ0tFUlxyXG4gICAgICApO1xyXG4gICAgaWYgKHRoaXMuY29uZmlnKSB7XHJcbiAgICAgIHRoaXMuY29sb3JQaWNrZXJMYWJlbCA9IHRoaXMuY29uZmlnPy5sYWJlbCA/PyB0aGlzLmNvbG9yUGlja2VyTGFiZWw7XHJcbiAgICAgIHRoaXMucGFsZXR0ZSA9IHRoaXMuY29uZmlnPy5wYWxldHRlID8/IHRoaXMucGFsZXR0ZTtcclxuICAgICAgdGhpcy5kZWZhdWx0Q29sb3IgPSB0aGlzLmNvbmZpZz8uZGVmYXVsdENvbG9yID8/IHRoaXMuZGVmYXVsdENvbG9yO1xyXG4gICAgICB0aGlzLmNvbG9yRm9ybWF0ID0gdGhpcy5jb25maWc/LmNvbG9yRm9ybWF0ID8/IHRoaXMuY29sb3JGb3JtYXQ7XHJcbiAgICAgIHRoaXMub3ZlcmxheUNsYXNzTmFtZSA9XHJcbiAgICAgICAgdGhpcy5jb25maWc/Lm92ZXJsYXlDbGFzc05hbWUgPz8gdGhpcy5vdmVybGF5Q2xhc3NOYW1lO1xyXG4gICAgICB0aGlzLmlzQ29sb3JDb2RlTGFiZWxOZWVkZWQgPVxyXG4gICAgICAgIHRoaXMuY29uZmlnPy5pc0NvbG9yQ29kZUxhYmVsTmVlZGVkID8/IHRoaXMuaXNDb2xvckNvZGVMYWJlbE5lZWRlZDtcclxuICAgICAgdGhpcy5pc0Fycm93SWNvbk5lZWRlZCA9XHJcbiAgICAgICAgdGhpcy5jb25maWc/LmlzQXJyb3dJY29uTmVlZGVkID8/IHRoaXMuaXNBcnJvd0ljb25OZWVkZWQ7XHJcbiAgICAgIHRoaXMuY2FuSGlkZVRleHRJbnB1dCA9XHJcbiAgICAgICAgdGhpcy5jb25maWc/LmNhbkhpZGVUZXh0SW5wdXQgPz8gdGhpcy5jYW5IaWRlVGV4dElucHV0O1xyXG4gICAgICB0aGlzLmNhbkhpZGVDb2xvclBpY2tlciA9XHJcbiAgICAgICAgdGhpcy5jb25maWc/LmNhbkhpZGVDb2xvclBpY2tlciA/PyB0aGlzLmNhbkhpZGVDb2xvclBpY2tlcjtcclxuICAgIH1cclxuICAgIHRoaXMuZ3JvdXAuZ2V0KHRoaXMuY29uZmlnLmNvbnRyb2xOYW1lKT8uc2V0VmFsdWUodGhpcy5kZWZhdWx0Q29sb3IpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSBjb2xvciB0byBmb3JtIGdyb3VwIGNvbnRyb2wuXHJcbiAgICogQG1lbWJlcm9mIENvbG9yUGlja2VyQ29tcG9uZW50XHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNvbG9yXHJcbiAgICogQHJldHVybnMge3ZvaWR9XHJcbiAgICovXHJcbiAgaW5wdXRDaGFuZ2UoY29sb3I6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5kZWZhdWx0Q29sb3IgPSBjb2xvcjtcclxuICAgIHRoaXMuZ3JvdXA/LmdldCh0aGlzLmNvbmZpZz8uY29udHJvbE5hbWUpPy5zZXRWYWx1ZShjb2xvcik7XHJcbiAgICB0aGlzLmNvbG9yUGlja2VyQ2hhbmdlLmVtaXQoY29sb3IpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBTZXRzIGNhblNob3dQYWxldHRlIHRvIHRydWUgd2hlbiB0aGUgcGFsZXR0ZSBpcyBvcGVuZWQuXHJcbiAgICogQG1lbWJlcm9mIENvbG9yUGlja2VyQ29tcG9uZW50XHJcbiAgICogQHJldHVybnMge3ZvaWR9XHJcbiAgICovXHJcbiAgb25PcGVuUGFsZXR0ZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuY2FuU2hvd1BhbGV0dGUgPSB0cnVlO1xyXG4gICAgdGhpcy5jb2xvclBpY2tlckV2ZW50SGFuZGxlcnModHJ1ZSk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFNldHMgY2FuU2hvd1BhbGV0dGUgdG8gZmFsc2Ugd2hlbiB0aGUgcGFsZXR0ZSBpcyBjbG9zZWQuXHJcbiAgICogQG1lbWJlcm9mIENvbG9yUGlja2VyQ29tcG9uZW50XHJcbiAgICogQHJldHVybnMge3ZvaWR9XHJcbiAgICovXHJcbiAgb25DbG9zZVBhbGV0dGUoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNhblNob3dQYWxldHRlID0gZmFsc2U7XHJcbiAgICB0aGlzLmVsZW1lbnRSZWY/Lm5hdGl2ZUVsZW1lbnRcclxuICAgICAgPy5xdWVyeVNlbGVjdG9yKCcuaWVlZXNhLWNvbG9yLXBpY2tlcl9fdG9nZ2xlLWljb24nKVxyXG4gICAgICA/LmZvY3VzKCk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEdldHMgdHJpZ2dlcmVkIHdoZW4gdGhlIHRoZSBhbHBoYSwgaHVlIG9yIExpZ2h0bmVzcyBzbGlkZXJzIGFyZSBjaGFuZ2VkXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNvbG9yXHJcbiAgICovXHJcbiAgb25TbGlkZXJDaGFuZ2UoY29sb3I6IHN0cmluZykge1xyXG4gICAgdGhpcy5jb2xvclBpY2tlclNsaWRlckNoYW5nZS5lbWl0KGNvbG9yKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogVG9nZ2xlcyB0aGUgcGFsZXR0ZSBwYW5lbC5cclxuICAgKiBAbWVtYmVyb2YgQ29sb3JQaWNrZXJDb21wb25lbnRcclxuICAgKiBAcmV0dXJucyB7dm9pZH1cclxuICAgKi9cclxuICB0b2dnbGVQYWxldHRlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5jYW5TaG93UGFsZXR0ZSA9ICF0aGlzLmNhblNob3dQYWxldHRlO1xyXG4gICAgaWYgKHRoaXMuY2FuU2hvd1BhbGV0dGUpIHRoaXMuY29sb3JQaWNrZXJEaXJlY3RpdmU/Lm9wZW5QYW5lbCgpO1xyXG4gICAgZWxzZSB0aGlzLmNvbG9yUGlja2VyRGlyZWN0aXZlPy5jbG9zZVBhbmVsKCk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIExpc3RlbmluZyB0aGUgY29sb3IgcGlja2VyIGV2ZW50cyB0byBhY2hpZXZlIHRoZSBhY2Nlc3NpYmlsaXR5IGZvciBjb2xvciBwYWxldHRlLlxyXG4gICAqIGNhbkFkZExpc3RlbmVyIGZhbHNlIHJlbW92ZSB0aGUgZXZlbnQgbGlzdGVuZXJzIHdoaWNoIHdlIGNhbGxzIGluIG5nRGVzdHJveSxcclxuICAgKiBjYW5BZGRMaXN0ZW5lciB0cnVlIGFkZGluZyB0aGUgZXZlbnQgbGlzdGVuZXJzIHdoaWxlIG9wZW5pbmcgdGhlIGNvbG9yIHBhbGV0dGUuXHJcbiAgICogQG1lbWJlcm9mIENvbG9yUGlja2VyQ29tcG9uZW50XHJcbiAgICogQHBhcmFtIHtib29sZWFufSBjYW5BZGRMaXN0ZW5lclxyXG4gICAqIEByZXR1cm5zIHt2b2lkfVxyXG4gICAqL1xyXG4gIGNvbG9yUGlja2VyRXZlbnRIYW5kbGVycyhjYW5BZGRMaXN0ZW5lcjogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgdGhpcy5wYWxldHRlQ29udGFpbmVyID1cclxuICAgICAgdGhpcy5jb2xvclBpY2tlckRpcmVjdGl2ZT8ucGFuZWxSZWY/LmxvY2F0aW9uPy5uYXRpdmVFbGVtZW50Py5xdWVyeVNlbGVjdG9yKFxyXG4gICAgICAgICduZ3gtY29sb3JzLXBhbmVsIC5vcGVuZWQnXHJcbiAgICAgICkgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgaWYgKHRoaXMucGFsZXR0ZUNvbnRhaW5lcikge1xyXG4gICAgICAgIHRoaXMucGFsZXR0ZUNvbnRhaW5lci5yb2xlID0gJ2FwcGxpY2F0aW9uJztcclxuICAgICAgICB0aGlzLnBhbGV0dGVDb250YWluZXIudGFiSW5kZXggPSAwO1xyXG4gICAgICAgIHRoaXMucGFsZXR0ZUNvbnRhaW5lci5hcmlhTGFiZWwgPSB0aGlzLmNvbG9yUGlja2VyVGV4dHM/LmFyaWFMYWJlbD8ucGFsZXR0ZTtcclxuICAgICAgICBjb25zdCBjb2xvclBhbGxldHRlcyA9IHRoaXMucGFsZXR0ZUNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFxyXG4gICAgICAgICAgJy5jb2xvcnMgLmNpcmNsZS53cmFwcGVyLmNvbG9yJ1xyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3QgbW9yZUNvbG9yc0Fycm93QnV0dG9uID0gdGhpcy5wYWxldHRlQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoXHJcbiAgICAgICAgICAnLmNvbG9ycyAuY2lyY2xlLmJ1dHRvbidcclxuICAgICAgICApIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICAgIGNvbnN0IGxhc3RFbGVtZW50ID0gdGhpcy5wYWxldHRlQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoXHJcbiAgICAgICAgICAnLmctaW5wdXQgaW5wdXQnXHJcbiAgICAgICAgKSBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgICBpZiAoY29sb3JQYWxsZXR0ZXM/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgY29uc3QgY29sb3JQYWxsZXR0ZXNMaXN0ID0gQXJyYXkuZnJvbShcclxuICAgICAgICAgICAgY29sb3JQYWxsZXR0ZXNcclxuICAgICAgICAgICkgYXMgSFRNTEVsZW1lbnRbXTtcclxuICAgICAgICAgIGNvbG9yUGFsbGV0dGVzTGlzdC5wdXNoKG1vcmVDb2xvcnNBcnJvd0J1dHRvbik7XHJcbiAgICAgICAgICBjb2xvclBhbGxldHRlc0xpc3QucHVzaChsYXN0RWxlbWVudCk7XHJcbiAgICAgICAgICBjb25zdCBrZXlEb3duSGFuZGxlckZvckNvbG9yUGFsZXR0ZXMgPSAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jb2xvclBpY2tlcktleURvd25IYW5kbGVyKGNvbG9yUGFsbGV0dGVzTGlzdCwgZXZlbnQpO1xyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIGNvbG9yUGFsbGV0dGVzTGlzdD8uZm9yRWFjaCgoZWxlbWVudDogSFRNTEVsZW1lbnQsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChpbmRleCAhPT0gY29sb3JQYWxsZXR0ZXNMaXN0Py5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAgICAgZWxlbWVudC50YWJJbmRleCA9IDA7XHJcbiAgICAgICAgICAgICAgZWxlbWVudC5yb2xlID0gJ2J1dHRvbic7XHJcbiAgICAgICAgICAgICAgZWxlbWVudC5hcmlhTGFiZWwgPSB0aGlzLnBhbGV0dGVDb2xvcnNbaW5kZXhdPy5uYW1lO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGVsZW1lbnQuYXJpYUxhYmVsID1cclxuICAgICAgICAgICAgICAgIHRoaXMuY29sb3JQaWNrZXJUZXh0cz8uYXJpYUxhYmVsPy5oZXhDb2RlSW5wdXQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGluZGV4ID09PSAwKSBlbGVtZW50LmZvY3VzKCk7XHJcbiAgICAgICAgICAgIGlmIChpbmRleCA9PT0gY29sb3JQYWxsZXR0ZXNMaXN0Py5sZW5ndGggLSAyKSB7XHJcbiAgICAgICAgICAgICAgZWxlbWVudC5hcmlhTGFiZWwgPSB0aGlzLmNvbG9yUGlja2VyVGV4dHM/LmFyaWFMYWJlbD8ubmV4dDtcclxuICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gICAgICAgICAgICAgIGNvbnN0IGNsaWNrSGFuZGxlckZvck1vcmVDb2xvcnNCdXR0b24gPSAoZXZlbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGxpc3QgPVxyXG4gICAgICAgICAgICAgICAgICB0aGlzLnBhbGV0dGVDb250YWluZXI/LnF1ZXJ5U2VsZWN0b3IoJy5uYXYtd3JhcHBlcicpPy5jaGlsZE5vZGVzO1xyXG4gICAgICAgICAgICAgICAgICBjb25zdCBncmFkaWVudEJ1dHRvbnM6IEhUTUxFbGVtZW50W10gPSBbXTtcclxuICAgICAgICAgICAgICAgICAgbGlzdD8uZm9yRWFjaCgoZWxlbWVudCkgPT5cclxuICAgICAgICAgICAgICAgICAgICBncmFkaWVudEJ1dHRvbnMucHVzaChlbGVtZW50IGFzIEhUTUxFbGVtZW50KVxyXG4gICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICBpZiAoZ3JhZGllbnRCdXR0b25zPy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBsYXN0RWxlbWVudCA9IHRoaXMucGFsZXR0ZUNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFxyXG4gICAgICAgICAgICAgICAgICAgICAgJy5nLWlucHV0IGlucHV0J1xyXG4gICAgICAgICAgICAgICAgICAgICkgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgZ3JhZGllbnRCdXR0b25zLnB1c2gobGFzdEVsZW1lbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGdyYWRpZW50QnV0dG9ucz8uZm9yRWFjaChcclxuICAgICAgICAgICAgICAgICAgICAgIChlbGVtZW50OiBIVE1MRWxlbWVudCwgaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmFyaWFMYWJlbCA9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbG9yUGlja2VyVGV4dHM/LmFyaWFMYWJlbD8uYmFjaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2xpY2tIYW5kbGVyRm9yR3JhZGllbnRQcmV2aW91c0J1dHRvbiA9IChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudDogYW55XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uT3BlblBhbGV0dGUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBrZXlEb3duSGFuZGxlckZvckdyYWRpZW50QnV0dG9ucyA9IChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50OiBLZXlib2FyZEV2ZW50XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbG9yUGlja2VyS2V5RG93bkhhbmRsZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyYWRpZW50QnV0dG9ucyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50Py5yZW1vdmVFdmVudExpc3RlbmVyKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NsaWNrJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrSGFuZGxlckZvckdyYWRpZW50UHJldmlvdXNCdXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ/LnJlbW92ZUV2ZW50TGlzdGVuZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAna2V5ZG93bicsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGlja0hhbmRsZXJGb3JHcmFkaWVudFByZXZpb3VzQnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2FuQWRkTGlzdGVuZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ/LmFkZEV2ZW50TGlzdGVuZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjbGljaycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrSGFuZGxlckZvckdyYWRpZW50UHJldmlvdXNCdXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50Py5hZGRFdmVudExpc3RlbmVyKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAna2V5ZG93bicsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleURvd25IYW5kbGVyRm9yR3JhZGllbnRCdXR0b25zXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnJvbGUgPSAnYnV0dG9uJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC50YWJJbmRleCA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50Py5pbm5lclRleHQ/LnRyaW0oKSA9PT1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbG9yUGlja2VyVGV4dHM/LmxhYmVsPy5zZWxlY3RcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5hcmlhTGFiZWwgPVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2xvclBpY2tlclRleHRzPy5hcmlhTGFiZWw/LnNlbGVjdDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50Py5jbGFzc0xpc3Q/LmFkZCgnc2VsZWN0Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudD8uaW5uZXJUZXh0Py50cmltKCkgPT09XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2xvclBpY2tlclRleHRzPy5sYWJlbD8uY2FuY2VsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuYXJpYUxhYmVsID1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29sb3JQaWNrZXJUZXh0cz8uYXJpYUxhYmVsPy5jYW5jZWw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudD8uY2xhc3NMaXN0Py5hZGQoJ2NhbmNlbCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PT0gZ3JhZGllbnRCdXR0b25zPy5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5yb2xlID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICB9LCAyNTApO1xyXG4gICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFxyXG4gICAgICAgICAgICAgICAgJ2NsaWNrJyxcclxuICAgICAgICAgICAgICAgIGNsaWNrSGFuZGxlckZvck1vcmVDb2xvcnNCdXR0b25cclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIGlmIChjYW5BZGRMaXN0ZW5lcikge1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFxyXG4gICAgICAgICAgICAgICAgICAnY2xpY2snLFxyXG4gICAgICAgICAgICAgICAgICBjbGlja0hhbmRsZXJGb3JNb3JlQ29sb3JzQnV0dG9uXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXHJcbiAgICAgICAgICAgICAgJ2tleWRvd24nLFxyXG4gICAgICAgICAgICAgIGtleURvd25IYW5kbGVyRm9yQ29sb3JQYWxldHRlc1xyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBpZiAoY2FuQWRkTGlzdGVuZXIpIHtcclxuICAgICAgICAgICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXHJcbiAgICAgICAgICAgICAgICAna2V5ZG93bicsXHJcbiAgICAgICAgICAgICAgICBrZXlEb3duSGFuZGxlckZvckNvbG9yUGFsZXR0ZXNcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0sIDI1MCk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIExpc3RlbnMga2V5ZG93biBldmVudCBoYW5kbGVzIHRvIG1ha2UgdGhlIHBhbGV0dGUgZm9jdXNhYmxlLlxyXG4gICAqIEBtZW1iZXJvZiBDb2xvclBpY2tlckNvbXBvbmVudFxyXG4gICAqIEBwYXJhbSB7SFRNTEVsZW1lbnRbXX0gY29sb3JQYWxsZXR0ZXNMaXN0XHJcbiAgICogQHBhcmFtIHtLZXlib2FyZEV2ZW50fSBldmVudFxyXG4gICAqIEByZXR1cm5zIHt2b2lkfVxyXG4gICAqL1xyXG4gIGNvbG9yUGlja2VyS2V5RG93bkhhbmRsZXIoXHJcbiAgICBjb2xvclBhbGxldHRlc0xpc3Q6IEhUTUxFbGVtZW50W10sXHJcbiAgICBldmVudDogS2V5Ym9hcmRFdmVudFxyXG4gICk6IHZvaWQge1xyXG4gICAgY29uc3QgZmlyc3RFbGVtZW50ID0gY29sb3JQYWxsZXR0ZXNMaXN0WzBdO1xyXG4gICAgY29uc3QgbGFzdEVsZW1lbnQgPSBjb2xvclBhbGxldHRlc0xpc3RbY29sb3JQYWxsZXR0ZXNMaXN0Lmxlbmd0aCAtIDFdO1xyXG4gICAgaWYgKGV2ZW50LmNvZGUgPT09ICdUYWInKSB7XHJcbiAgICAgIGlmIChldmVudC5zaGlmdEtleSkge1xyXG4gICAgICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBmaXJzdEVsZW1lbnQpIHtcclxuICAgICAgICAgIGxhc3RFbGVtZW50LmZvY3VzKCk7XHJcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBsYXN0RWxlbWVudCkge1xyXG4gICAgICAgIGlmICh0aGlzLnBhbGV0dGVDb250YWluZXI/LnF1ZXJ5U2VsZWN0b3IoJy5uYXYtd3JhcHBlcicpKSB7XHJcbiAgICAgICAgICAoXHJcbiAgICAgICAgICAgIHRoaXMucGFsZXR0ZUNvbnRhaW5lcj8ucXVlcnlTZWxlY3RvcignLm5hdi13cmFwcGVyJylcclxuICAgICAgICAgICAgICA/LmNoaWxkTm9kZXNbMF0gYXMgSFRNTEVsZW1lbnRcclxuICAgICAgICAgICkuZm9jdXMoKTtcclxuICAgICAgICB9IGVsc2UgZmlyc3RFbGVtZW50LmZvY3VzKCk7XHJcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKGV2ZW50LmNvZGUgPT09ICdTcGFjZScgfHwgZXZlbnQuY29kZSA9PT0gJ0VudGVyJykge1xyXG4gICAgICBjb25zdCB0YXJnZXRFbGVtZW50ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICBpZiAodGFyZ2V0RWxlbWVudD8uY2xhc3NMaXN0Py5jb250YWlucygnYnV0dG9uJykpXHJcbiAgICAgICAgdGFyZ2V0RWxlbWVudD8uZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ2NsaWNrJykpO1xyXG4gICAgICBlbHNlIHRhcmdldEVsZW1lbnQ/LmZpcnN0Q2hpbGQ/LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdjbGljaycpKTtcclxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIH1cclxuICB9XHJcbiAgLyoqXHJcbiAgICogUmVtb3ZpbmcgdGhlIGFjdGl2ZSBsaXN0ZW5lcnMgd2hpbGUgY29tcG9uZW50IGdldCBkZXN0cm95ZWQuXHJcbiAgICovXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLmNvbG9yUGlja2VyRXZlbnRIYW5kbGVycyhmYWxzZSk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXZcclxuICBbZm9ybUdyb3VwXT1cImdyb3VwXCJcclxuICBbbmdDbGFzc109XCJcclxuICAgIGNvbmZpZz8uaXNMYWJlbEFsaWduZWRMZWZ0XHJcbiAgICAgID8gJ2llZWVzYS1jb2xvci1waWNrZXJfX2xhYmVsLWxlZnQnXHJcbiAgICAgIDogJ2llZWVzYS1jb2xvci1waWNrZXJfX2xhYmVsLXRvcCdcclxuICBcIlxyXG4+XHJcbiAgPG1hdC1sYWJlbFxyXG4gICAgY2xhc3M9XCJpZWVlc2EtYm9keS1zbS0xNCBpZWVlc2EtY29sb3ItcGlja2VyX19sYWJlbFwiXHJcbiAgICAqbmdJZj1cImNvbG9yUGlja2VyTGFiZWxcIlxyXG4gICAgPnt7IGNvbG9yUGlja2VyTGFiZWwgfX08L21hdC1sYWJlbFxyXG4gID5cclxuICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCI+XHJcbiAgICA8bmd4LWNvbG9yc1xyXG4gICAgICBjbGFzcz1cImllZWVzYS1jb2xvci1waWNrZXJcIlxyXG4gICAgICBuZ3gtY29sb3JzLXRyaWdnZXJcclxuICAgICAgW2FjY2VwdExhYmVsXT1cInBhbGV0dGVTZWxlY3RMYWJlbFwiXHJcbiAgICAgIFtjYW5jZWxMYWJlbF09XCJwYWxldHRlQ2FuY2VsTGFiZWxcIlxyXG4gICAgICBbcGFsZXR0ZV09XCJwYWxldHRlXCJcclxuICAgICAgKGlucHV0KT1cImlucHV0Q2hhbmdlKCRldmVudClcIlxyXG4gICAgICAob3Blbik9XCJvbk9wZW5QYWxldHRlKClcIlxyXG4gICAgICAoY2xvc2UpPVwib25DbG9zZVBhbGV0dGUoKVwiXHJcbiAgICAgIChzbGlkZXIpPVwib25TbGlkZXJDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgIFtvdmVybGF5Q2xhc3NOYW1lXT1cIm92ZXJsYXlDbGFzc05hbWVcIlxyXG4gICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbmZpZy5jb250cm9sTmFtZVwiXHJcbiAgICAgIFtmb3JtYXRdPVwiY29sb3JGb3JtYXRcIlxyXG4gICAgICBbaGlkZVRleHRJbnB1dF09XCJjYW5IaWRlVGV4dElucHV0XCJcclxuICAgICAgW2NvbG9yc0FuaW1hdGlvbl09XCJjb2xvckFuaW1hdGlvblwiXHJcbiAgICAgIFtoaWRlQ29sb3JQaWNrZXJdPVwiY2FuSGlkZUNvbG9yUGlja2VyXCJcclxuICAgICAgW2FyaWFMYWJlbF09XCJjb2xvclBpY2tlclRleHRzPy5hcmlhTGFiZWw/LmNvbG9yUGlja2VyXCJcclxuICAgICAgW2FyaWFEZXNjcmlwdGlvbl09XCJjb2xvclBpY2tlclRleHRzPy5hcmlhRGVzY3JpcHRpb25cIlxyXG4gICAgPlxyXG4gICAgPC9uZ3gtY29sb3JzPlxyXG4gICAgPGJ1dHRvblxyXG4gICAgICBjbGFzcz1cImllZWVzYS1jb2xvci1waWNrZXJfX3RvZ2dsZS1pY29uXCJcclxuICAgICAgKm5nSWY9XCJpc0Fycm93SWNvbk5lZWRlZFwiXHJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAoY2xpY2spPVwidG9nZ2xlUGFsZXR0ZSgpXCJcclxuICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJjb2xvclBpY2tlclRleHRzPy5hcmlhTGFiZWw/LmNvbG9yUGlja2VyXCJcclxuICAgICAgW2F0dHIuYXJpYS1kZXNjcmliZWRieV09XCJjb2xvclBpY2tlclRleHRzPy5hcmlhRGVzY3JpYmVkQnlJZFwiXHJcbiAgICA+XHJcbiAgICAgIDxpXHJcbiAgICAgICAgY2xhc3M9XCJmYS1zb2xpZFwiXHJcbiAgICAgICAgW25nQ2xhc3NdPVwiY2FuU2hvd1BhbGV0dGUgPyAnZmEtY2FyZXQtdXAnIDogJ2ZhLWNhcmV0LWRvd24nXCJcclxuICAgICAgPjwvaT5cclxuICAgIDwvYnV0dG9uPlxyXG4gICAgPHNwYW5cclxuICAgICAgY2xhc3M9XCJpZWVlc2EtY29sb3ItcGlja2VyLS1zZWxlY3RlZCBpZWVlc2EtYm9keS1tZC0xNFwiXHJcbiAgICAgICpuZ0lmPVwiaXNDb2xvckNvZGVMYWJlbE5lZWRlZCAmJiBkZWZhdWx0Q29sb3JcIlxyXG4gICAgICA+e3sgZGVmYXVsdENvbG9yIH19PC9zcGFuXHJcbiAgICA+XHJcbiAgPC9kaXY+XHJcbiAgPGllZWVzYS1mb3JtLWVycm9yIFtmb3JtR3JvdXBdPVwiZ3JvdXBcIiBbY29uZmlnXT1cImNvbmZpZ1wiPiA8L2llZWVzYS1mb3JtLWVycm9yPlxyXG4gIDxpZWVlc2EtZm9ybS1zdXBwb3J0LXRleHRcclxuICAgIFtmb3JtR3JvdXBdPVwiZ3JvdXBcIlxyXG4gICAgW2NvbmZpZ109XCJjb25maWdcIlxyXG4gID48L2llZWVzYS1mb3JtLXN1cHBvcnQtdGV4dD5cclxuPC9kaXY+XHJcbiJdfQ==
|
|
314
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sb3ItcGlja2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ByZXNlbnRhdGlvbi9zcmMvbGliL2NvbXBvbmVudHMvY29sb3ItcGlja2VyL2NvbG9yLXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcmVzZW50YXRpb24vc3JjL2xpYi9jb21wb25lbnRzL2NvbG9yLXBpY2tlci9jb2xvci1waWNrZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sRUFDTixTQUFTLEVBQ1QsaUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsZUFBZSxFQUFFLHlCQUF5QixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3hFLE9BQU8sRUFBYSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN4RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDeEUsT0FBTyxFQUNMLFdBQVcsRUFDWCxlQUFlLEdBRWhCLE1BQU0saUNBQWlDLENBQUM7QUFDekMsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFHNUYsT0FBTyxLQUFLLFNBQVMsTUFBTSw2QkFBNkIsQ0FBQzs7Ozs7OztBQWlCekQsTUFBTSxPQUFPLG9CQUFvQjtJQTJCL0I7SUFDRSwwQ0FBMEM7SUFDbEMsVUFBc0I7SUFDOUIsMENBQTBDO0lBQ2xDLGtCQUFz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Z0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIElucHV0LFxyXG4gIE9uRGVzdHJveSxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0LFxyXG4gIFZpZXdDaGlsZCxcclxuICBWaWV3RW5jYXBzdWxhdGlvbixcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgTmd4Q29sb3JzTW9kdWxlLCBOZ3hDb2xvcnNUcmlnZ2VyRGlyZWN0aXZlIH0gZnJvbSAnbmd4LWNvbG9ycyc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCwgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE1hdEZvcm1GaWVsZE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xyXG5pbXBvcnQgeyBGb3JtRXJyb3JDb21wb25lbnQgfSBmcm9tICcuLi9mb3JtLWVycm9yL2Zvcm0tZXJyb3IuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRm9ybUNvbnRyb2xUeXBlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2Zvcm0tY29udHJvbC10eXBlcy5tb2RlbCc7XHJcbmltcG9ydCB7XHJcbiAgQ29sb3JGb3JtYXQsXHJcbiAgQ29sb3JzQW5pbWF0aW9uLFxyXG4gIFBhbGV0dGVDb2xvcixcclxufSBmcm9tICcuLi8uLi9tb2RlbHMvY29sb3ItZm9ybWF0Lm1vZGVsJztcclxuaW1wb3J0IHsgRm9ybVN1cHBvcnRUZXh0Q29tcG9uZW50IH0gZnJvbSAnLi4vZm9ybS1zdXBwb3J0LXRleHQvZm9ybS1zdXBwb3J0LXRleHQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRmllbGRDb25maWcgfSBmcm9tICcuLi8uLi9tb2RlbHMvZmllbGQtY29uZmlnLm1vZGVsJztcclxuaW1wb3J0IHsgRm9ybVV0aWxpdHlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZm9ybS11dGlsaXR5LnNlcnZpY2UnO1xyXG5pbXBvcnQgKiBhcyBjb25zdGFudHMgZnJvbSAnLi4vLi4vYXNzZXRzL2NvbnN0YW50cy5qc29uJztcclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdpZWVlc2EtY29sb3ItcGlja2VyJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgTWF0Rm9ybUZpZWxkTW9kdWxlLFxyXG4gICAgTmd4Q29sb3JzTW9kdWxlLFxyXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcclxuICAgIEZvcm1FcnJvckNvbXBvbmVudCxcclxuICAgIEZvcm1TdXBwb3J0VGV4dENvbXBvbmVudCxcclxuICBdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9jb2xvci1waWNrZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2NvbG9yLXBpY2tlci5jb21wb25lbnQuc2NzcyddLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb2xvclBpY2tlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBAVmlld0NoaWxkKE5neENvbG9yc1RyaWdnZXJEaXJlY3RpdmUsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgY29sb3JQaWNrZXJEaXJlY3RpdmUhOiBOZ3hDb2xvcnNUcmlnZ2VyRGlyZWN0aXZlO1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgY29sb3JQaWNrZXJUZXh0czogYW55ID0gY29uc3RhbnRzPy5jb2xvclBpY2tlcjtcclxuICBwYWxldHRlQ29sb3JzOiBQYWxldHRlQ29sb3JbXSA9IHRoaXMuY29sb3JQaWNrZXJUZXh0cz8ucGFsZXR0ZUNvbG9ycztcclxuICBwYWxldHRlQ29udGFpbmVyITogSFRNTEVsZW1lbnQ7XHJcbiAgZ3JvdXAhOiBGb3JtR3JvdXA7XHJcbiAgY29uZmlnITogRmllbGRDb25maWc7XHJcbiAgQE91dHB1dCgpIGNvbG9yUGlja2VyQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcbiAgQE91dHB1dCgpIGNvbG9yUGlja2VyU2xpZGVyQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcbiAgQElucHV0KCkgZGVmYXVsdENvbG9yITogc3RyaW5nO1xyXG4gIGNhblNob3dQYWxldHRlID0gZmFsc2U7XHJcbiAgQElucHV0KCkgcGFsZXR0ZTogc3RyaW5nW10gPSB0aGlzLnBhbGV0dGVDb2xvcnM/Lm1hcChcclxuICAgIChjb2xvcjogUGFsZXR0ZUNvbG9yKSA9PiBjb2xvci5oZXhDb2RlXHJcbiAgKTtcclxuICBASW5wdXQoKSBvdmVybGF5Q2xhc3NOYW1lID0gJ2llZWVzYS1jb2xvci1waWNrZXJfX292ZXJsYXknO1xyXG4gIEBJbnB1dCgpIGNvbG9yRm9ybWF0ID0gQ29sb3JGb3JtYXQuaGV4O1xyXG4gIEBJbnB1dCgpIGNvbG9yQW5pbWF0aW9uID0gQ29sb3JzQW5pbWF0aW9uLnBvcHVwO1xyXG4gIEBJbnB1dCgpIGZvcm1Db250cm9sTmFtZSA9ICdjb2xvclBpY2tlcic7XHJcbiAgQElucHV0KCkgcGFsZXR0ZVNlbGVjdExhYmVsID0gdGhpcy5jb2xvclBpY2tlclRleHRzPy5sYWJlbD8uc2VsZWN0O1xyXG4gIEBJbnB1dCgpIHBhbGV0dGVDYW5jZWxMYWJlbCA9IHRoaXMuY29sb3JQaWNrZXJUZXh0cz8ubGFiZWw/LmNhbmNlbDtcclxuICBASW5wdXQoKSBjb2xvclBpY2tlckxhYmVsITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGlzQ29sb3JDb2RlTGFiZWxOZWVkZWQgPSB0cnVlO1xyXG4gIEBJbnB1dCgpIGlzQXJyb3dJY29uTmVlZGVkID0gdHJ1ZTtcclxuICBASW5wdXQoKSBjYW5IaWRlVGV4dElucHV0ID0gZmFsc2U7XHJcbiAgQElucHV0KCkgY2FuSGlkZUNvbG9yUGlja2VyID0gZmFsc2U7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZixcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHJpdmF0ZSBmb3JtVXRpbGl0eVNlcnZpY2U6IEZvcm1VdGlsaXR5U2VydmljZSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZW1wdHktZnVuY3Rpb25cclxuICApIHt9XHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmdyb3VwID1cclxuICAgICAgdGhpcy5ncm91cCA/PyB0aGlzLmZvcm1VdGlsaXR5U2VydmljZS5nZXRGb3JtR3JvdXAodGhpcy5mb3JtQ29udHJvbE5hbWUpO1xyXG4gICAgdGhpcy5jb25maWcgPVxyXG4gICAgICB0aGlzLmNvbmZpZyA/P1xyXG4gICAgICB0aGlzLmZvcm1VdGlsaXR5U2VydmljZS5nZXRGb3JtRmllbGRDb25maWcoXHJcbiAgICAgICAgdGhpcy5mb3JtQ29udHJvbE5hbWUsXHJcbiAgICAgICAgRm9ybUNvbnRyb2xUeXBlLkNPTE9SX1BJQ0tFUlxyXG4gICAgICApO1xyXG4gICAgaWYgKHRoaXMuY29uZmlnKSB7XHJcbiAgICAgIHRoaXMuY29sb3JQaWNrZXJMYWJlbCA9IHRoaXMuY29uZmlnPy5sYWJlbCA/PyB0aGlzLmNvbG9yUGlja2VyTGFiZWw7XHJcbiAgICAgIHRoaXMucGFsZXR0ZSA9IHRoaXMuY29uZmlnPy5wYWxldHRlID8/IHRoaXMucGFsZXR0ZTtcclxuICAgICAgdGhpcy5kZWZhdWx0Q29sb3IgPSB0aGlzLmNvbmZpZz8uZGVmYXVsdENvbG9yID8/IHRoaXMuZGVmYXVsdENvbG9yO1xyXG4gICAgICB0aGlzLmNvbG9yRm9ybWF0ID0gdGhpcy5jb25maWc/LmNvbG9yRm9ybWF0ID8/IHRoaXMuY29sb3JGb3JtYXQ7XHJcbiAgICAgIHRoaXMub3ZlcmxheUNsYXNzTmFtZSA9XHJcbiAgICAgICAgdGhpcy5jb25maWc/Lm92ZXJsYXlDbGFzc05hbWUgPz8gdGhpcy5vdmVybGF5Q2xhc3NOYW1lO1xyXG4gICAgICB0aGlzLmlzQ29sb3JDb2RlTGFiZWxOZWVkZWQgPVxyXG4gICAgICAgIHRoaXMuY29uZmlnPy5pc0NvbG9yQ29kZUxhYmVsTmVlZGVkID8/IHRoaXMuaXNDb2xvckNvZGVMYWJlbE5lZWRlZDtcclxuICAgICAgdGhpcy5pc0Fycm93SWNvbk5lZWRlZCA9XHJcbiAgICAgICAgdGhpcy5jb25maWc/LmlzQXJyb3dJY29uTmVlZGVkID8/IHRoaXMuaXNBcnJvd0ljb25OZWVkZWQ7XHJcbiAgICAgIHRoaXMuY2FuSGlkZVRleHRJbnB1dCA9XHJcbiAgICAgICAgdGhpcy5jb25maWc/LmNhbkhpZGVUZXh0SW5wdXQgPz8gdGhpcy5jYW5IaWRlVGV4dElucHV0O1xyXG4gICAgICB0aGlzLmNhbkhpZGVDb2xvclBpY2tlciA9XHJcbiAgICAgICAgdGhpcy5jb25maWc/LmNhbkhpZGVDb2xvclBpY2tlciA/PyB0aGlzLmNhbkhpZGVDb2xvclBpY2tlcjtcclxuICAgIH1cclxuICAgIHRoaXMuZ3JvdXAuZ2V0KHRoaXMuY29uZmlnLmNvbnRyb2xOYW1lKT8uc2V0VmFsdWUodGhpcy5kZWZhdWx0Q29sb3IpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSBjb2xvciB0byBmb3JtIGdyb3VwIGNvbnRyb2wuXHJcbiAgICogQG1lbWJlcm9mIENvbG9yUGlja2VyQ29tcG9uZW50XHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNvbG9yXHJcbiAgICogQHJldHVybnMge3ZvaWR9XHJcbiAgICovXHJcbiAgaW5wdXRDaGFuZ2UoY29sb3I6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5kZWZhdWx0Q29sb3IgPSBjb2xvcjtcclxuICAgIHRoaXMuZ3JvdXA/LmdldCh0aGlzLmNvbmZpZz8uY29udHJvbE5hbWUpPy5zZXRWYWx1ZShjb2xvcik7XHJcbiAgICB0aGlzLmNvbG9yUGlja2VyQ2hhbmdlLmVtaXQoY29sb3IpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBTZXRzIGNhblNob3dQYWxldHRlIHRvIHRydWUgd2hlbiB0aGUgcGFsZXR0ZSBpcyBvcGVuZWQuXHJcbiAgICogQG1lbWJlcm9mIENvbG9yUGlja2VyQ29tcG9uZW50XHJcbiAgICogQHJldHVybnMge3ZvaWR9XHJcbiAgICovXHJcbiAgb25PcGVuUGFsZXR0ZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuY2FuU2hvd1BhbGV0dGUgPSB0cnVlO1xyXG4gICAgdGhpcy5jb2xvclBpY2tlckV2ZW50SGFuZGxlcnModHJ1ZSk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFNldHMgY2FuU2hvd1BhbGV0dGUgdG8gZmFsc2Ugd2hlbiB0aGUgcGFsZXR0ZSBpcyBjbG9zZWQuXHJcbiAgICogQG1lbWJlcm9mIENvbG9yUGlja2VyQ29tcG9uZW50XHJcbiAgICogQHJldHVybnMge3ZvaWR9XHJcbiAgICovXHJcbiAgb25DbG9zZVBhbGV0dGUoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNhblNob3dQYWxldHRlID0gZmFsc2U7XHJcbiAgICB0aGlzLmVsZW1lbnRSZWY/Lm5hdGl2ZUVsZW1lbnRcclxuICAgICAgPy5xdWVyeVNlbGVjdG9yKCcuaWVlZXNhLWNvbG9yLXBpY2tlcl9fdG9nZ2xlLWljb24nKVxyXG4gICAgICA/LmZvY3VzKCk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEdldHMgdHJpZ2dlcmVkIHdoZW4gdGhlIHRoZSBhbHBoYSwgaHVlIG9yIExpZ2h0bmVzcyBzbGlkZXJzIGFyZSBjaGFuZ2VkXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNvbG9yXHJcbiAgICovXHJcbiAgb25TbGlkZXJDaGFuZ2UoY29sb3I6IHN0cmluZykge1xyXG4gICAgdGhpcy5jb2xvclBpY2tlclNsaWRlckNoYW5nZS5lbWl0KGNvbG9yKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogVG9nZ2xlcyB0aGUgcGFsZXR0ZSBwYW5lbC5cclxuICAgKiBAbWVtYmVyb2YgQ29sb3JQaWNrZXJDb21wb25lbnRcclxuICAgKiBAcmV0dXJucyB7dm9pZH1cclxuICAgKi9cclxuICB0b2dnbGVQYWxldHRlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5jYW5TaG93UGFsZXR0ZSA9ICF0aGlzLmNhblNob3dQYWxldHRlO1xyXG4gICAgaWYgKHRoaXMuY2FuU2hvd1BhbGV0dGUpIHRoaXMuY29sb3JQaWNrZXJEaXJlY3RpdmU/Lm9wZW5QYW5lbCgpO1xyXG4gICAgZWxzZSB0aGlzLmNvbG9yUGlja2VyRGlyZWN0aXZlPy5jbG9zZVBhbmVsKCk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIExpc3RlbmluZyB0aGUgY29sb3IgcGlja2VyIGV2ZW50cyB0byBhY2hpZXZlIHRoZSBhY2Nlc3NpYmlsaXR5IGZvciBjb2xvciBwYWxldHRlLlxyXG4gICAqIGNhbkFkZExpc3RlbmVyIGZhbHNlIHJlbW92ZSB0aGUgZXZlbnQgbGlzdGVuZXJzIHdoaWNoIHdlIGNhbGxzIGluIG5nRGVzdHJveSxcclxuICAgKiBjYW5BZGRMaXN0ZW5lciB0cnVlIGFkZGluZyB0aGUgZXZlbnQgbGlzdGVuZXJzIHdoaWxlIG9wZW5pbmcgdGhlIGNvbG9yIHBhbGV0dGUuXHJcbiAgICogQG1lbWJlcm9mIENvbG9yUGlja2VyQ29tcG9uZW50XHJcbiAgICogQHBhcmFtIHtib29sZWFufSBjYW5BZGRMaXN0ZW5lclxyXG4gICAqIEByZXR1cm5zIHt2b2lkfVxyXG4gICAqL1xyXG4gIGNvbG9yUGlja2VyRXZlbnRIYW5kbGVycyhjYW5BZGRMaXN0ZW5lcjogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgdGhpcy5wYWxldHRlQ29udGFpbmVyID1cclxuICAgICAgdGhpcy5jb2xvclBpY2tlckRpcmVjdGl2ZT8ucGFuZWxSZWY/LmxvY2F0aW9uPy5uYXRpdmVFbGVtZW50Py5xdWVyeVNlbGVjdG9yKFxyXG4gICAgICAgICduZ3gtY29sb3JzLXBhbmVsIC5vcGVuZWQnXHJcbiAgICAgICkgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgaWYgKHRoaXMucGFsZXR0ZUNvbnRhaW5lcikge1xyXG4gICAgICAgIHRoaXMucGFsZXR0ZUNvbnRhaW5lci5yb2xlID0gJ2FwcGxpY2F0aW9uJztcclxuICAgICAgICB0aGlzLnBhbGV0dGVDb250YWluZXIudGFiSW5kZXggPSAwO1xyXG4gICAgICAgIHRoaXMucGFsZXR0ZUNvbnRhaW5lci5hcmlhTGFiZWwgPSB0aGlzLmNvbG9yUGlja2VyVGV4dHM/LmFyaWFMYWJlbD8ucGFsZXR0ZTtcclxuICAgICAgICBjb25zdCBjb2xvclBhbGxldHRlcyA9IHRoaXMucGFsZXR0ZUNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFxyXG4gICAgICAgICAgJy5jb2xvcnMgLmNpcmNsZS53cmFwcGVyLmNvbG9yJ1xyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3QgbW9yZUNvbG9yc0Fycm93QnV0dG9uID0gdGhpcy5wYWxldHRlQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoXHJcbiAgICAgICAgICAnLmNvbG9ycyAuY2lyY2xlLmJ1dHRvbidcclxuICAgICAgICApIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICAgIGNvbnN0IGxhc3RFbGVtZW50ID0gdGhpcy5wYWxldHRlQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoXHJcbiAgICAgICAgICAnLmctaW5wdXQgaW5wdXQnXHJcbiAgICAgICAgKSBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgICBpZiAoY29sb3JQYWxsZXR0ZXM/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgY29uc3QgY29sb3JQYWxsZXR0ZXNMaXN0ID0gQXJyYXkuZnJvbShcclxuICAgICAgICAgICAgY29sb3JQYWxsZXR0ZXNcclxuICAgICAgICAgICkgYXMgSFRNTEVsZW1lbnRbXTtcclxuICAgICAgICAgIGNvbG9yUGFsbGV0dGVzTGlzdC5wdXNoKG1vcmVDb2xvcnNBcnJvd0J1dHRvbik7XHJcbiAgICAgICAgICBjb2xvclBhbGxldHRlc0xpc3QucHVzaChsYXN0RWxlbWVudCk7XHJcbiAgICAgICAgICBjb25zdCBrZXlEb3duSGFuZGxlckZvckNvbG9yUGFsZXR0ZXMgPSAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jb2xvclBpY2tlcktleURvd25IYW5kbGVyKGNvbG9yUGFsbGV0dGVzTGlzdCwgZXZlbnQpO1xyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIGNvbG9yUGFsbGV0dGVzTGlzdD8uZm9yRWFjaCgoZWxlbWVudDogSFRNTEVsZW1lbnQsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChpbmRleCAhPT0gY29sb3JQYWxsZXR0ZXNMaXN0Py5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAgICAgZWxlbWVudC50YWJJbmRleCA9IDA7XHJcbiAgICAgICAgICAgICAgZWxlbWVudC5yb2xlID0gJ2J1dHRvbic7XHJcbiAgICAgICAgICAgICAgZWxlbWVudC5hcmlhTGFiZWwgPSB0aGlzLnBhbGV0dGVDb2xvcnNbaW5kZXhdPy5uYW1lO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGVsZW1lbnQuYXJpYUxhYmVsID1cclxuICAgICAgICAgICAgICAgIHRoaXMuY29sb3JQaWNrZXJUZXh0cz8uYXJpYUxhYmVsPy5oZXhDb2RlSW5wdXQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGluZGV4ID09PSAwKSBlbGVtZW50LmZvY3VzKCk7XHJcbiAgICAgICAgICAgIGlmIChpbmRleCA9PT0gY29sb3JQYWxsZXR0ZXNMaXN0Py5sZW5ndGggLSAyKSB7XHJcbiAgICAgICAgICAgICAgZWxlbWVudC5hcmlhTGFiZWwgPSB0aGlzLmNvbG9yUGlja2VyVGV4dHM/LmFyaWFMYWJlbD8ubmV4dDtcclxuICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gICAgICAgICAgICAgIGNvbnN0IGNsaWNrSGFuZGxlckZvck1vcmVDb2xvcnNCdXR0b24gPSAoZXZlbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGxpc3QgPVxyXG4gICAgICAgICAgICAgICAgICB0aGlzLnBhbGV0dGVDb250YWluZXI/LnF1ZXJ5U2VsZWN0b3IoJy5uYXYtd3JhcHBlcicpPy5jaGlsZE5vZGVzO1xyXG4gICAgICAgICAgICAgICAgICBjb25zdCBncmFkaWVudEJ1dHRvbnM6IEhUTUxFbGVtZW50W10gPSBbXTtcclxuICAgICAgICAgICAgICAgICAgbGlzdD8uZm9yRWFjaCgoZWxlbWVudCkgPT5cclxuICAgICAgICAgICAgICAgICAgICBncmFkaWVudEJ1dHRvbnMucHVzaChlbGVtZW50IGFzIEhUTUxFbGVtZW50KVxyXG4gICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICBpZiAoZ3JhZGllbnRCdXR0b25zPy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBsYXN0RWxlbWVudCA9IHRoaXMucGFsZXR0ZUNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFxyXG4gICAgICAgICAgICAgICAgICAgICAgJy5nLWlucHV0IGlucHV0J1xyXG4gICAgICAgICAgICAgICAgICAgICkgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgZ3JhZGllbnRCdXR0b25zLnB1c2gobGFzdEVsZW1lbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGdyYWRpZW50QnV0dG9ucz8uZm9yRWFjaChcclxuICAgICAgICAgICAgICAgICAgICAgIChlbGVtZW50OiBIVE1MRWxlbWVudCwgaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmFyaWFMYWJlbCA9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbG9yUGlja2VyVGV4dHM/LmFyaWFMYWJlbD8uYmFjaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2xpY2tIYW5kbGVyRm9yR3JhZGllbnRQcmV2aW91c0J1dHRvbiA9IChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudDogYW55XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uT3BlblBhbGV0dGUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBrZXlEb3duSGFuZGxlckZvckdyYWRpZW50QnV0dG9ucyA9IChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50OiBLZXlib2FyZEV2ZW50XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbG9yUGlja2VyS2V5RG93bkhhbmRsZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyYWRpZW50QnV0dG9ucyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50Py5yZW1vdmVFdmVudExpc3RlbmVyKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NsaWNrJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrSGFuZGxlckZvckdyYWRpZW50UHJldmlvdXNCdXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ/LnJlbW92ZUV2ZW50TGlzdGVuZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAna2V5ZG93bicsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGlja0hhbmRsZXJGb3JHcmFkaWVudFByZXZpb3VzQnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2FuQWRkTGlzdGVuZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ/LmFkZEV2ZW50TGlzdGVuZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjbGljaycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrSGFuZGxlckZvckdyYWRpZW50UHJldmlvdXNCdXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50Py5hZGRFdmVudExpc3RlbmVyKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAna2V5ZG93bicsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleURvd25IYW5kbGVyRm9yR3JhZGllbnRCdXR0b25zXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnJvbGUgPSAnYnV0dG9uJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC50YWJJbmRleCA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50Py5pbm5lclRleHQ/LnRyaW0oKSA9PT1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbG9yUGlja2VyVGV4dHM/LmxhYmVsPy5zZWxlY3RcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5hcmlhTGFiZWwgPVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2xvclBpY2tlclRleHRzPy5hcmlhTGFiZWw/LnNlbGVjdDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50Py5jbGFzc0xpc3Q/LmFkZCgnc2VsZWN0Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudD8uaW5uZXJUZXh0Py50cmltKCkgPT09XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2xvclBpY2tlclRleHRzPy5sYWJlbD8uY2FuY2VsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuYXJpYUxhYmVsID1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29sb3JQaWNrZXJUZXh0cz8uYXJpYUxhYmVsPy5jYW5jZWw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudD8uY2xhc3NMaXN0Py5hZGQoJ2NhbmNlbCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PT0gZ3JhZGllbnRCdXR0b25zPy5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5yb2xlID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICB9LCAyNTApO1xyXG4gICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFxyXG4gICAgICAgICAgICAgICAgJ2NsaWNrJyxcclxuICAgICAgICAgICAgICAgIGNsaWNrSGFuZGxlckZvck1vcmVDb2xvcnNCdXR0b25cclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIGlmIChjYW5BZGRMaXN0ZW5lcikge1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFxyXG4gICAgICAgICAgICAgICAgICAnY2xpY2snLFxyXG4gICAgICAgICAgICAgICAgICBjbGlja0hhbmRsZXJGb3JNb3JlQ29sb3JzQnV0dG9uXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXHJcbiAgICAgICAgICAgICAgJ2tleWRvd24nLFxyXG4gICAgICAgICAgICAgIGtleURvd25IYW5kbGVyRm9yQ29sb3JQYWxldHRlc1xyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBpZiAoY2FuQWRkTGlzdGVuZXIpIHtcclxuICAgICAgICAgICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXHJcbiAgICAgICAgICAgICAgICAna2V5ZG93bicsXHJcbiAgICAgICAgICAgICAgICBrZXlEb3duSGFuZGxlckZvckNvbG9yUGFsZXR0ZXNcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0sIDI1MCk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIExpc3RlbnMga2V5ZG93biBldmVudCBoYW5kbGVzIHRvIG1ha2UgdGhlIHBhbGV0dGUgZm9jdXNhYmxlLlxyXG4gICAqIEBtZW1iZXJvZiBDb2xvclBpY2tlckNvbXBvbmVudFxyXG4gICAqIEBwYXJhbSB7SFRNTEVsZW1lbnRbXX0gY29sb3JQYWxsZXR0ZXNMaXN0XHJcbiAgICogQHBhcmFtIHtLZXlib2FyZEV2ZW50fSBldmVudFxyXG4gICAqIEByZXR1cm5zIHt2b2lkfVxyXG4gICAqL1xyXG4gIGNvbG9yUGlja2VyS2V5RG93bkhhbmRsZXIoXHJcbiAgICBjb2xvclBhbGxldHRlc0xpc3Q6IEhUTUxFbGVtZW50W10sXHJcbiAgICBldmVudDogS2V5Ym9hcmRFdmVudFxyXG4gICk6IHZvaWQge1xyXG4gICAgY29uc3QgZmlyc3RFbGVtZW50ID0gY29sb3JQYWxsZXR0ZXNMaXN0WzBdO1xyXG4gICAgY29uc3QgbGFzdEVsZW1lbnQgPSBjb2xvclBhbGxldHRlc0xpc3RbY29sb3JQYWxsZXR0ZXNMaXN0Lmxlbmd0aCAtIDFdO1xyXG4gICAgaWYgKGV2ZW50LmNvZGUgPT09ICdUYWInKSB7XHJcbiAgICAgIGlmIChldmVudC5zaGlmdEtleSkge1xyXG4gICAgICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBmaXJzdEVsZW1lbnQpIHtcclxuICAgICAgICAgIGxhc3RFbGVtZW50LmZvY3VzKCk7XHJcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBsYXN0RWxlbWVudCkge1xyXG4gICAgICAgIGlmICh0aGlzLnBhbGV0dGVDb250YWluZXI/LnF1ZXJ5U2VsZWN0b3IoJy5uYXYtd3JhcHBlcicpKSB7XHJcbiAgICAgICAgICAoXHJcbiAgICAgICAgICAgIHRoaXMucGFsZXR0ZUNvbnRhaW5lcj8ucXVlcnlTZWxlY3RvcignLm5hdi13cmFwcGVyJylcclxuICAgICAgICAgICAgICA/LmNoaWxkTm9kZXNbMF0gYXMgSFRNTEVsZW1lbnRcclxuICAgICAgICAgICkuZm9jdXMoKTtcclxuICAgICAgICB9IGVsc2UgZmlyc3RFbGVtZW50LmZvY3VzKCk7XHJcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKGV2ZW50LmNvZGUgPT09ICdTcGFjZScgfHwgZXZlbnQuY29kZSA9PT0gJ0VudGVyJykge1xyXG4gICAgICBjb25zdCB0YXJnZXRFbGVtZW50ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICBpZiAodGFyZ2V0RWxlbWVudD8uY2xhc3NMaXN0Py5jb250YWlucygnYnV0dG9uJykpXHJcbiAgICAgICAgdGFyZ2V0RWxlbWVudD8uZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ2NsaWNrJykpO1xyXG4gICAgICBlbHNlIHRhcmdldEVsZW1lbnQ/LmZpcnN0Q2hpbGQ/LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdjbGljaycpKTtcclxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIH1cclxuICB9XHJcbiAgLyoqXHJcbiAgICogUmVtb3ZpbmcgdGhlIGFjdGl2ZSBsaXN0ZW5lcnMgd2hpbGUgY29tcG9uZW50IGdldCBkZXN0cm95ZWQuXHJcbiAgICovXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLmNvbG9yUGlja2VyRXZlbnRIYW5kbGVycyhmYWxzZSk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXZcclxuICBbZm9ybUdyb3VwXT1cImdyb3VwXCJcclxuICBbbmdDbGFzc109XCJcclxuICAgIGNvbmZpZz8uaXNMYWJlbEFsaWduZWRMZWZ0XHJcbiAgICAgID8gJ2llZWVzYS1jb2xvci1waWNrZXJfX2xhYmVsLWxlZnQnXHJcbiAgICAgIDogJ2llZWVzYS1jb2xvci1waWNrZXJfX2xhYmVsLXRvcCdcclxuICBcIlxyXG4+XHJcbiAgPG1hdC1sYWJlbFxyXG4gICAgY2xhc3M9XCJpZWVlc2EtYm9keS1zbS0xNCBpZWVlc2EtY29sb3ItcGlja2VyX19sYWJlbFwiXHJcbiAgICAqbmdJZj1cImNvbG9yUGlja2VyTGFiZWxcIlxyXG4gICAgPnt7IGNvbG9yUGlja2VyTGFiZWwgfX08L21hdC1sYWJlbFxyXG4gID5cclxuICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCI+XHJcbiAgICA8bmd4LWNvbG9yc1xyXG4gICAgICBjbGFzcz1cImllZWVzYS1jb2xvci1waWNrZXJcIlxyXG4gICAgICBuZ3gtY29sb3JzLXRyaWdnZXJcclxuICAgICAgW2FjY2VwdExhYmVsXT1cInBhbGV0dGVTZWxlY3RMYWJlbFwiXHJcbiAgICAgIFtjYW5jZWxMYWJlbF09XCJwYWxldHRlQ2FuY2VsTGFiZWxcIlxyXG4gICAgICBbcGFsZXR0ZV09XCJwYWxldHRlXCJcclxuICAgICAgKGlucHV0KT1cImlucHV0Q2hhbmdlKCRldmVudClcIlxyXG4gICAgICAob3Blbik9XCJvbk9wZW5QYWxldHRlKClcIlxyXG4gICAgICAoY2xvc2UpPVwib25DbG9zZVBhbGV0dGUoKVwiXHJcbiAgICAgIChzbGlkZXIpPVwib25TbGlkZXJDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgIFtvdmVybGF5Q2xhc3NOYW1lXT1cIm92ZXJsYXlDbGFzc05hbWVcIlxyXG4gICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbmZpZy5jb250cm9sTmFtZVwiXHJcbiAgICAgIFtmb3JtYXRdPVwiY29sb3JGb3JtYXRcIlxyXG4gICAgICBbaGlkZVRleHRJbnB1dF09XCJjYW5IaWRlVGV4dElucHV0XCJcclxuICAgICAgW2NvbG9yc0FuaW1hdGlvbl09XCJjb2xvckFuaW1hdGlvblwiXHJcbiAgICAgIFtoaWRlQ29sb3JQaWNrZXJdPVwiY2FuSGlkZUNvbG9yUGlja2VyXCJcclxuICAgICAgW2FyaWFMYWJlbF09XCJjb2xvclBpY2tlclRleHRzPy5hcmlhTGFiZWw/LmNvbG9yUGlja2VyXCJcclxuICAgICAgW2FyaWFEZXNjcmlwdGlvbl09XCJjb2xvclBpY2tlclRleHRzPy5hcmlhRGVzY3JpcHRpb25cIlxyXG4gICAgPlxyXG4gICAgPC9uZ3gtY29sb3JzPlxyXG4gICAgPGJ1dHRvblxyXG4gICAgICBjbGFzcz1cImllZWVzYS1jb2xvci1waWNrZXJfX3RvZ2dsZS1pY29uXCJcclxuICAgICAgKm5nSWY9XCJpc0Fycm93SWNvbk5lZWRlZFwiXHJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAoY2xpY2spPVwidG9nZ2xlUGFsZXR0ZSgpXCJcclxuICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJjb2xvclBpY2tlclRleHRzPy5hcmlhTGFiZWw/LmNvbG9yUGlja2VyXCJcclxuICAgICAgW2F0dHIuYXJpYS1kZXNjcmliZWRieV09XCJjb2xvclBpY2tlclRleHRzPy5hcmlhRGVzY3JpYmVkQnlJZFwiXHJcbiAgICA+XHJcbiAgICAgIDxpXHJcbiAgICAgICAgY2xhc3M9XCJmYS1zb2xpZFwiXHJcbiAgICAgICAgW25nQ2xhc3NdPVwiY2FuU2hvd1BhbGV0dGUgPyAnZmEtY2FyZXQtdXAnIDogJ2ZhLWNhcmV0LWRvd24nXCJcclxuICAgICAgPjwvaT5cclxuICAgIDwvYnV0dG9uPlxyXG4gICAgPHNwYW5cclxuICAgICAgY2xhc3M9XCJpZWVlc2EtY29sb3ItcGlja2VyLS1zZWxlY3RlZCBpZWVlc2EtYm9keS1tZC0xNFwiXHJcbiAgICAgICpuZ0lmPVwiaXNDb2xvckNvZGVMYWJlbE5lZWRlZCAmJiBkZWZhdWx0Q29sb3JcIlxyXG4gICAgICA+e3sgZGVmYXVsdENvbG9yIH19PC9zcGFuXHJcbiAgICA+XHJcbiAgPC9kaXY+XHJcbiAgPGllZWVzYS1mb3JtLWVycm9yIFtmb3JtR3JvdXBdPVwiZ3JvdXBcIiBbY29uZmlnXT1cImNvbmZpZ1wiPiA8L2llZWVzYS1mb3JtLWVycm9yPlxyXG4gIDxpZWVlc2EtZm9ybS1zdXBwb3J0LXRleHRcclxuICAgIFtmb3JtR3JvdXBdPVwiZ3JvdXBcIlxyXG4gICAgW2NvbmZpZ109XCJjb25maWdcIlxyXG4gID48L2llZWVzYS1mb3JtLXN1cHBvcnQtdGV4dD5cclxuPC9kaXY+XHJcbiJdfQ==
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS11cGxvYWQtcHJlc2lnbmVkLXVybC1yZXMubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcmVzZW50YXRpb24vc3JjL2xpYi9tb2RlbHMvZmlsZS11cGxvYWQtcHJlc2lnbmVkLXVybC1yZXMubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgRmlsZVVwbG9hZFByZXNpZ25lZFVybCB7XHJcbiAgc3RhdHVzOiBib29sZWFuO1xyXG4gIGJvZHk6IHN0cmluZztcclxuICBtZXNzYWdlOiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgR2V0RmlsZURvd25sb2FkUHJlc2lnbmVkVXJsUGF5bG9hZCB7XHJcbiAgcGF5bG9hZDoge1xyXG4gICAgZmlsZU5hbWU6IHN0cmluZztcclxuICAgIGRvbWFpbjogc3RyaW5nO1xyXG4gIH07XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgR2V0RmlsZVVwbG9hZFByZXNpZ25lZFVybFBheWxvYWQge1xyXG4gIHBheWxvYWQ6IHtcclxuICAgIGZpbGVOYW1lOiBzdHJpbmc7XHJcbiAgICB0ZW5hbnRBcHBJZDogc3RyaW5nO1xyXG4gIH07XHJcbn1cclxuIl19
|
|
@@ -40,14 +40,20 @@ export class FileUploadService {
|
|
|
40
40
|
* @return {Observable<FileUploadPresignedUrl>}
|
|
41
41
|
* @memberof FileUploadService
|
|
42
42
|
*/
|
|
43
|
-
getFileUploadPresignedUrl(file) {
|
|
43
|
+
getFileUploadPresignedUrl(file, appId) {
|
|
44
44
|
let fileName = '';
|
|
45
45
|
if (Object.values(file).length)
|
|
46
46
|
fileName = Object.values(file)[0].name;
|
|
47
47
|
else
|
|
48
48
|
fileName = file.name;
|
|
49
|
+
const fileUploadPresignedUrlPayload = {
|
|
50
|
+
payload: {
|
|
51
|
+
fileName: fileName,
|
|
52
|
+
tenantAppId: appId,
|
|
53
|
+
},
|
|
54
|
+
};
|
|
49
55
|
return this.httpService
|
|
50
|
-
.
|
|
56
|
+
.postData(`${this.apiBaseUrl}/configurations/s3/uploadFileUrl`, fileUploadPresignedUrlPayload)
|
|
51
57
|
.pipe(map((response) => {
|
|
52
58
|
return response;
|
|
53
59
|
}), catchError((errorRes) => {
|
|
@@ -295,4 +301,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
295
301
|
providedIn: 'root',
|
|
296
302
|
}]
|
|
297
303
|
}], ctorParameters: function () { return [{ type: i1.HttpService }, { type: i2.HttpBackend }, { type: i1.AlertsService }, { type: i1.LoaderNotificationService }]; } });
|
|
298
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS11cGxvYWQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ByZXNlbnRhdGlvbi9zcmMvbGliL3NlcnZpY2VzL2ZpbGUtdXBsb2FkLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFVBQVUsRUFFVixhQUFhLEVBQ2IsV0FBVyxHQUNaLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLFVBQVUsRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUN0RCxPQUFPLEVBRUwsU0FBUyxHQUdWLE1BQU0scUJBQXFCLENBQUM7QUFLN0IsT0FBTyxFQUNMLFVBQVUsRUFDVixJQUFJLEVBQ0osR0FBRyxFQUVILE9BQU8sRUFDUCxTQUFTLEVBQ1QsR0FBRyxHQUNKLE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxLQUFLLFNBQVMsTUFBTSwwQkFBMEIsQ0FBQzs7OztBQUV0RDs7O0dBR0c7QUFJSCxNQUFNLE9BQU8saUJBQWlCO0lBTzVCO0lBQ0UsMENBQTBDO0lBQ25DLFdBQXdCLEVBQy9CLE9BQW9CO0lBQ3BCLDBDQUEwQztJQUNuQyxZQUEyQjtJQUNsQywwQ0FBMEM7SUFDbkMseUJBQW9EO1FBTHBELGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBR3hCLGlCQUFZLEdBQVosWUFBWSxDQUFlO1FBRTNCLDhCQUF5QixHQUF6Qix5QkFBeUIsQ0FBMkI7UUFiN0QsYUFBUSxHQUFxQixJQUFJLE9BQU8sRUFBVyxDQUFDO1FBQ3BELGNBQVMsR0FBRyxTQUFTLENBQUM7UUFJdEIsb0JBQWUsR0FBRyxLQUFLLENBQUM7UUFVdEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILGFBQWEsQ0FBQyxVQUFrQjtRQUM5QixJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztJQUMvQixD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LEtBQUssQ0FBQztpQkFDdkI7WUFDSCxDQUFDLENBQUMsQ0FBQztZQUNILE9BQU8sYUFBYSxDQUFDO1NBQ3RCO1FBQ0QsT0FBTyxrQkFBa0IsQ0FBQyxLQUFhLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ssZ0JBQWdCLENBQUMsUUFBZ0I7UUFDdkMsb0VBQW9FO1FBQ3BFLE9BQU8sUUFBUSxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNuRCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsV0FBVztRQUNULElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDOUIsQ0FBQzsrR0E5VFUsaUJBQWlCO21IQUFqQixpQkFBaUIsY0FGaEIsTUFBTTs7NEZBRVAsaUJBQWlCO2tCQUg3QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgSHR0cEJhY2tlbmQsXHJcbiAgSHR0cENsaWVudCxcclxuICBIdHRwRXZlbnQsXHJcbiAgSHR0cEV2ZW50VHlwZSxcclxuICBIdHRwSGVhZGVycyxcclxufSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IEluamVjdGFibGUsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1xyXG4gIEFsZXJ0c1NlcnZpY2UsXHJcbiAgQWxlcnRUeXBlLFxyXG4gIEh0dHBTZXJ2aWNlLFxyXG4gIExvYWRlck5vdGlmaWNhdGlvblNlcnZpY2UsXHJcbn0gZnJvbSAnQGllZWVzYS1ucG0vdXRpbGl0eSc7XHJcbmltcG9ydCB7XHJcbiAgRmlsZVVwbG9hZFByZXNpZ25lZFVybCxcclxuICBHZXRGaWxlRG93bmxvYWRQcmVzaWduZWRVcmxQYXlsb2FkLFxyXG59IGZyb20gJy4uL21vZGVscy9maWxlLXVwbG9hZC1wcmVzaWduZWQtdXJsLXJlcy5tb2RlbCc7XHJcbmltcG9ydCB7XHJcbiAgY2F0Y2hFcnJvcixcclxuICBsYXN0LFxyXG4gIG1hcCxcclxuICBPYnNlcnZhYmxlLFxyXG4gIFN1YmplY3QsXHJcbiAgdGFrZVVudGlsLFxyXG4gIHRhcCxcclxufSBmcm9tICdyeGpzJztcclxuaW1wb3J0ICogYXMgY29uc3RhbnRzIGZyb20gJy4uL2Fzc2V0cy9jb25zdGFudHMuanNvbic7XHJcblxyXG4vKipcclxuICogVGhpcyBzZXJ2aWNlIGludGVyYWN0cyB3aXRoIHRoZSBzZXJ2ZXIgdG8gb2J0YWluIHByZS1zaWduZWQgVVJMcyBmb3IgZmlsZSB1cGxvYWQgYW5kIHVwbG9hZHMgZmlsZXMgdG8gQW1hem9uIFMzLlxyXG4gKiBAY2xhc3MgRmlsZVVwbG9hZFNlcnZpY2VcclxuICovXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGaWxlVXBsb2FkU2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XHJcbiAgZGVzdHJveSQ6IFN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xyXG4gIGNvbnN0YW50cyA9IGNvbnN0YW50cztcclxuICBhcGlCYXNlVXJsITogc3RyaW5nO1xyXG4gIGZpbGVCeXRlQXJyYXk6IFVpbnQ4QXJyYXkgfCB1bmRlZmluZWQ7XHJcbiAgaHR0cENsaWVudDogSHR0cENsaWVudDtcclxuICBpc0ZpbGVVcGxvYWRpbmcgPSBmYWxzZTtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHVibGljIGh0dHBTZXJ2aWNlOiBIdHRwU2VydmljZSxcclxuICAgIGhhbmRsZXI6IEh0dHBCYWNrZW5kLFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwdWJsaWMgYWxlcnRTZXJ2aWNlOiBBbGVydHNTZXJ2aWNlLFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwdWJsaWMgbG9hZGVyTm90aWZpY2F0aW9uU2VydmljZTogTG9hZGVyTm90aWZpY2F0aW9uU2VydmljZVxyXG4gICkge1xyXG4gICAgdGhpcy5odHRwQ2xpZW50ID0gbmV3IEh0dHBDbGllbnQoaGFuZGxlcik7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSBiYXNlIFVSTCBmb3IgQVBJIHJlcXVlc3RzLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcGlCYXNlVXJsIC1BUEkgYmFzZSBVUkwuXHJcbiAgICogQG1lbWJlcm9mIEZpbGVVcGxvYWRTZXJ2aWNlXHJcbiAgICovXHJcbiAgc2V0QXBpQmFzZVVybChhcGlCYXNlVXJsOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuYXBpQmFzZVVybCA9IGFwaUJhc2VVcmw7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZXMgcHJlc2lnbmVkIFVSTCBmb3IgdXBsb2FkaW5nIGZpbGVzIHRvIEFtYXpvbiBTMyBidWNrZXQuXHJcbiAgICogQHBhcmFtIHsoRmlsZSB8IEZpbGVMaXN0KX0gZmlsZVxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8RmlsZVVwbG9hZFByZXNpZ25lZFVybD59XHJcbiAgICogQG1lbWJlcm9mIEZpbGVVcGxvYWRTZXJ2aWNlXHJcbiAgICovXHJcbiAgZ2V0RmlsZVVwbG9hZFByZXNpZ25lZFVybChcclxuICAgIGZpbGU6IEZpbGUgfCBGaWxlTGlzdFxyXG4gICk6IE9ic2VydmFibGU8RmlsZVVwbG9hZFByZXNpZ25lZFVybD4ge1xyXG4gICAgbGV0IGZpbGVOYW1lID0gJyc7XHJcbiAgICBpZiAoT2JqZWN0LnZhbHVlcyhmaWxlKS5sZW5ndGgpIGZpbGVOYW1lID0gT2JqZWN0LnZhbHVlcyhmaWxlKVswXS5uYW1lO1xyXG4gICAgZWxzZSBmaWxlTmFtZSA9IChmaWxlIGFzIEZpbGUpLm5hbWU7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZVxyXG4gICAgICAuZ2V0RGF0YShgJHt0aGlzLmFwaUJhc2VVcmx9L2NvbmZpZ3VyYXRpb25zL3MzL3VwbG9hZEZpbGVVcmwvJHtmaWxlTmFtZX1gKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3JSZXMpID0+IHtcclxuICAgICAgICAgIHRocm93IGVycm9yUmVzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFVwbG9hZHMgZmlsZSB0byBBV1MgUzMgdXNpbmcgYSBwcmVzaWduZWQgVVJMLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwcmVzaWduZWRVcmxcclxuICAgKiBAcGFyYW0geyhGaWxlIHwgRmlsZUxpc3QpfSBmaWxlXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxhbnk+fSAtUmV0dXJucyBhbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIHJlc3BvbnNlIGFmdGVyIHVwbG9hZGluZyB0aGUgZmlsZSB0byBTMy5cclxuICAgKiBAbWVtYmVyb2YgRmlsZVVwbG9hZFNlcnZpY2VcclxuICAgKi9cclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gIHVwbG9hZEZpbGVUb1MzKHByZXNpZ25lZFVybDogc3RyaW5nLCBmaWxlOiBGaWxlIHwgRmlsZUxpc3QpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgdGhpcy5sb2FkZXJOb3RpZmljYXRpb25TZXJ2aWNlLnNob3coKTtcclxuICAgIGxldCBmaWxlVHlwZSA9ICcnO1xyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICAgIGxldCBmaWxlU2l6ZTogYW55O1xyXG4gICAgbGV0IGZpbGVPYmo6IEZpbGU7XHJcbiAgICBpZiAoT2JqZWN0LnZhbHVlcyhmaWxlKS5sZW5ndGgpIHtcclxuICAgICAgZmlsZVR5cGUgPSBPYmplY3QudmFsdWVzKGZpbGUpWzBdLnR5cGU7XHJcbiAgICAgIGZpbGVTaXplID0gT2JqZWN0LnZhbHVlcyhmaWxlKVswXS5zaXplO1xyXG4gICAgICBmaWxlT2JqID0gT2JqZWN0LnZhbHVlcyhmaWxlKVswXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGZpbGVUeXBlID0gKGZpbGUgYXMgRmlsZSkudHlwZTtcclxuICAgICAgZmlsZVNpemUgPSAoZmlsZSBhcyBGaWxlKS5zaXplO1xyXG4gICAgICBmaWxlT2JqID0gZmlsZSBhcyBGaWxlO1xyXG4gICAgfVxyXG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpO1xyXG4gICAgaGVhZGVycy5hcHBlbmQoJ0NvbnRlbnQtVHlwZScsIGZpbGVUeXBlKTtcclxuICAgIGhlYWRlcnMuYXBwZW5kKCdDb250ZW50LUxlbmd0aCcsIGZpbGVTaXplKTtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnRcclxuICAgICAgLnB1dChwcmVzaWduZWRVcmwsIGZpbGVPYmosIHtcclxuICAgICAgICByZXBvcnRQcm9ncmVzczogdHJ1ZSxcclxuICAgICAgICBvYnNlcnZlOiAnZXZlbnRzJyxcclxuICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLFxyXG4gICAgICB9KVxyXG4gICAgICAucGlwZShcclxuICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JCksXHJcbiAgICAgICAgbWFwKChldmVudCkgPT4gdGhpcy5nZXRFdmVudE1lc3NhZ2UoZXZlbnQsIGZpbGUpKSxcclxuICAgICAgICB0YXAoKG1lc3NhZ2UpID0+IHRoaXMuc2hvd1Byb2dyZXNzKG1lc3NhZ2UpKSxcclxuICAgICAgICBsYXN0KCksXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3JSZXMpID0+IHtcclxuICAgICAgICAgIHRoaXMubG9hZGVyTm90aWZpY2F0aW9uU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgICB0aHJvdyBlcnJvclJlcztcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyBmaWxlIHVwbG9hZCBwcm9ncmVzcy5cclxuICAgKiBAcGFyYW0geyp9IG1lc3NhZ2VcclxuICAgKiBAbWVtYmVyb2YgRmlsZVVwbG9hZFNlcnZpY2VcclxuICAgKi9cclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSwgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzLCBuby11bnVzZWQtdmFycywgbm8tZW1wdHktZnVuY3Rpb24sIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxyXG4gIHNob3dQcm9ncmVzcyhtZXNzYWdlOiBhbnkpIHt9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiBkaXN0aW5jdCBtZXNzYWdlIGZvciBzZW50LCB1cGxvYWQgcHJvZ3Jlc3MsICYgcmVzcG9uc2UgZXZlbnRzLlxyXG4gICAqIEBwYXJhbSB7SHR0cEV2ZW50PGFueT59IGV2ZW50XHJcbiAgICogQHBhcmFtIHsoRmlsZSB8IEZpbGVMaXN0KX0gZmlsZVxyXG4gICAqIEByZXR1cm4geyp9XHJcbiAgICogQG1lbWJlcm9mIEZpbGVVcGxvYWRTZXJ2aWNlXHJcbiAgICovXHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBnZXRFdmVudE1lc3NhZ2UoZXZlbnQ6IEh0dHBFdmVudDxhbnk+LCBmaWxlOiBGaWxlIHwgRmlsZUxpc3QpIHtcclxuICAgIGxldCBmaWxlTmFtZSA9ICcnO1xyXG4gICAgbGV0IGZpbGVTaXplOiBudW1iZXIgfCBzdHJpbmcgPSAwO1xyXG4gICAgaWYgKE9iamVjdC52YWx1ZXMoZmlsZSkubGVuZ3RoKSB7XHJcbiAgICAgIGZpbGVOYW1lID0gT2JqZWN0LnZhbHVlcyhmaWxlKVswXS5uYW1lO1xyXG4gICAgICBmaWxlU2l6ZSA9IE9iamVjdC52YWx1ZXMoZmlsZSlbMF0uc2l6ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGZpbGVOYW1lID0gKGZpbGUgYXMgRmlsZSkubmFtZTtcclxuICAgICAgZmlsZVNpemUgPSAoZmlsZSBhcyBGaWxlKS5zaXplO1xyXG4gICAgfVxyXG4gICAgc3dpdGNoIChldmVudC50eXBlKSB7XHJcbiAgICAgIGNhc2UgSHR0cEV2ZW50VHlwZS5TZW50OlxyXG4gICAgICAgIHJldHVybiBgVXBsb2FkaW5nIGZpbGUgXCIke2ZpbGVOYW1lfVwiIG9mIHNpemUgJHtmaWxlU2l6ZX0uYDtcclxuICAgICAgY2FzZSBIdHRwRXZlbnRUeXBlLlVwbG9hZFByb2dyZXNzOlxyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jYXNlLWRlY2xhcmF0aW9uc1xyXG4gICAgICAgIGNvbnN0IHBlcmNlbnREb25lID0gZXZlbnQ/LnRvdGFsXHJcbiAgICAgICAgICA/IE1hdGgucm91bmQoKDEwMCAqIGV2ZW50LmxvYWRlZCkgLyBldmVudC50b3RhbClcclxuICAgICAgICAgIDogMDtcclxuICAgICAgICByZXR1cm4gYEZpbGUgXCIke2ZpbGVOYW1lfVwiIGlzICR7cGVyY2VudERvbmV9JSB1cGxvYWRlZC5gO1xyXG4gICAgICBjYXNlIEh0dHBFdmVudFR5cGUuUmVzcG9uc2U6XHJcbiAgICAgICAgdGhpcy5sb2FkZXJOb3RpZmljYXRpb25TZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gYEZpbGUgXCIke2ZpbGVOYW1lfVwiIHN1cnByaXNpbmcgdXBsb2FkIGV2ZW50OiAke2V2ZW50LnR5cGV9LmA7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDb252ZXJ0cyBmaWxlIHRvIGJ5dGUgYXJyYXkuXHJcbiAgICogQHBhcmFtIHtGaWxlfSBmaWxlXHJcbiAgICogQG1lbWJlcm9mIEZpbGVVcGxvYWRTZXJ2aWNlXHJcbiAgICovXHJcbiAgY29udmVydEZpbGVUb0J5dGVBcnJheShmaWxlOiBGaWxlKTogdm9pZCB7XHJcbiAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG4gICAgcmVhZGVyLm9ubG9hZGVuZCA9ICgpID0+IHtcclxuICAgICAgY29uc3QgYXJyYXlCdWZmZXIgPSByZWFkZXI/LnJlc3VsdCBhcyBBcnJheUJ1ZmZlcjtcclxuICAgICAgdGhpcy5maWxlQnl0ZUFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXlCdWZmZXIpO1xyXG4gICAgfTtcclxuICAgIHJlYWRlci5vbmVycm9yID0gKCkgPT4ge1xyXG4gICAgICB0aGlzLmFsZXJ0U2VydmljZT8uc2hvd01lc3NhZ2Uoe1xyXG4gICAgICAgIHN0YXR1czogJ2N1c3RvbScsXHJcbiAgICAgICAgbWVzc2FnZTogdGhpcy5jb25zdGFudHM/LmZpbGVVcGxvYWQ/Lm1lc3NhZ2U/LmVycm9yPy5lcnJvclJlYWRpbmdGaWxlLFxyXG4gICAgICAgIGFsZXJ0VHlwZTogQWxlcnRUeXBlPy5FUlJPUixcclxuICAgICAgICBpc0Nsb3NlTmVlZGVkOiB0cnVlLFxyXG4gICAgICB9KTtcclxuICAgIH07XHJcbiAgICByZWFkZXIucmVhZEFzQXJyYXlCdWZmZXIoZmlsZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXNldHMgZmlsZSBieXRlIGFycmF5IGZvcm1hdCB0byB1bmRlZmluZWQuXHJcbiAgICogQG1lbWJlcm9mIEZpbGVVcGxvYWRTZXJ2aWNlXHJcbiAgICovXHJcbiAgY2xlYXJGaWxlQnl0ZUFycmF5KCk6IHZvaWQge1xyXG4gICAgdGhpcy5maWxlQnl0ZUFycmF5ID0gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyBmaWxlIHVwbG9hZCBzdGF0dXMuXHJcbiAgICogQHBhcmFtIHtib29sZWFufSBzdGF0dXNcclxuICAgKiBAbWVtYmVyb2YgRmlsZVVwbG9hZFNlcnZpY2VcclxuICAgKi9cclxuICBzZXRGaWxlVXBsb2FkU3RhdHVzKHN0YXR1czogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgdGhpcy5pc0ZpbGVVcGxvYWRpbmcgPSBzdGF0dXM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIGZpbGUgdXBsb2FkIHN0YXR1cy5cclxuICAgKiBAcmV0dXJuIHtib29sZWFufVxyXG4gICAqIEBtZW1iZXJvZiBGaWxlVXBsb2FkU2VydmljZVxyXG4gICAqL1xyXG4gIGdldEZpbGVVcGxvYWRTdGF0dXMoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5pc0ZpbGVVcGxvYWRpbmc7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZXMgcHJlc2lnbmVkIFVSTCBmb3IgZG93bmxvYWRpbmcgZmlsZXMgdG8gQW1hem9uIFMzIGJ1Y2tldC5cclxuICAgKiBAcGFyYW0geyhGaWxlIHwgRmlsZUxpc3QpfSBmaWxlXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxzdHJpbmc+fVxyXG4gICAqIEBtZW1iZXJvZiBGaWxlVXBsb2FkU2VydmljZVxyXG4gICAqL1xyXG4gIGdldEZpbGVEb3dubG9hZFByZXNpZ25lZFVybHMoXHJcbiAgICBmaWxlOiBGaWxlIHwgRmlsZUxpc3QgfCBzdHJpbmcsXHJcbiAgICBpc1B1YmxpY0FQST86IGJvb2xlYW4sXHJcbiAgICBkb21haW5Vcmw/OiBzdHJpbmdcclxuICApOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xyXG4gICAgbGV0IGZpbGVOYW1lID0gJyc7XHJcbiAgICBpZiAodHlwZW9mIGZpbGUgPT09ICdzdHJpbmcnKSBmaWxlTmFtZSA9IGZpbGU7XHJcbiAgICBlbHNlIGlmIChPYmplY3QudmFsdWVzKGZpbGUpLmxlbmd0aCkgZmlsZU5hbWUgPSBPYmplY3QudmFsdWVzKGZpbGUpWzBdLm5hbWU7XHJcbiAgICBlbHNlIGZpbGVOYW1lID0gKGZpbGUgYXMgRmlsZSkubmFtZTtcclxuICAgIGxldCBodHRwUmVxdWVzdCE6IE9ic2VydmFibGU8c3RyaW5nPjtcclxuICAgIGlmIChpc1B1YmxpY0FQSSkge1xyXG4gICAgICBjb25zdCBmaWxlRG93bmxvYWRQcmVzaWduZWRVcmxQYXlsb2FkOiBHZXRGaWxlRG93bmxvYWRQcmVzaWduZWRVcmxQYXlsb2FkID1cclxuICAgICAgICB7XHJcbiAgICAgICAgICBwYXlsb2FkOiB7XHJcbiAgICAgICAgICAgIGZpbGVOYW1lOiBmaWxlTmFtZSxcclxuICAgICAgICAgICAgZG9tYWluOiBkb21haW5VcmwgYXMgc3RyaW5nLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9O1xyXG4gICAgICBodHRwUmVxdWVzdCA9IHRoaXMuaHR0cFNlcnZpY2UucG9zdERhdGEoXHJcbiAgICAgICAgYCR7dGhpcy5hcGlCYXNlVXJsfS9jb25maWd1cmF0aW9ucy9wdWJsaWMvZG93bmxvYWRGaWxlVXJsYCxcclxuICAgICAgICBmaWxlRG93bmxvYWRQcmVzaWduZWRVcmxQYXlsb2FkXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBodHRwUmVxdWVzdCA9IHRoaXMuaHR0cFNlcnZpY2UuZ2V0RGF0YShcclxuICAgICAgICBgJHt0aGlzLmFwaUJhc2VVcmx9L2NvbmZpZ3VyYXRpb25zL3MzL2Rvd25sb2FkRmlsZVVybC8ke2ZpbGVOYW1lfWBcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIHJldHVybiBodHRwUmVxdWVzdC5waXBlKFxyXG4gICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICB9KSxcclxuICAgICAgY2F0Y2hFcnJvcigoZXJyb3JSZXMpID0+IHtcclxuICAgICAgICB0aHJvdyBlcnJvclJlcztcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEb3dubG9hZHMgZmlsZSB0byBBV1MgUzMgdXNpbmcgYSBwcmVzaWduZWQgVVJMLlxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8YW55Pn1cclxuICAgKiBAbWVtYmVyb2YgRmlsZVVwbG9hZFNlcnZpY2VcclxuICAgKi9cclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gIGRvd25sb2FkRmlsZShmaWxlRG93bmxvYWRQcmVzaWduZWRVcmw6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LmdldChmaWxlRG93bmxvYWRQcmVzaWduZWRVcmwpLnBpcGUoXHJcbiAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcclxuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgIH0pLFxyXG4gICAgICBjYXRjaEVycm9yKChlcnJvclJlcykgPT4ge1xyXG4gICAgICAgIHRocm93IGVycm9yUmVzO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFZhbGlkYXRlcyB0aGUgdG90YWwgc2l6ZSBvZiB0aGUgZmlsZXMgdXBsb2FkZWQuXHJcbiAgICogQHBhcmFtIHsoRmlsZSB8IEZpbGVMaXN0KX0gZmlsZXMgLVRoZSBmaWxlcyB0byBiZSB2YWxpZGF0ZWQuXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IG1heEZpbGVTaXplXHJcbiAgICogQHBhcmFtIHtib29sZWFufSBpc011bHRpRmlsZVVwbG9hZFxyXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59IC1SZXR1cm5zIHRydWUgaWYgdGhlIHRvdGFsIHNpemUgb2YgZmlsZXMgaXMgd2l0aGluIHRoZSBzcGVjaWZpZWQgbGltaXQsIG90aGVyd2lzZSBmYWxzZS5cclxuICAgKiBAbWVtYmVyb2YgRmlsZVVwbG9hZFNlcnZpY2VcclxuICAgKi9cclxuICB2YWxpZGF0ZUZpbGVTaXplKFxyXG4gICAgZmlsZXM6IEZpbGUgfCBGaWxlTGlzdCxcclxuICAgIG1heEZpbGVTaXplOiBudW1iZXIsXHJcbiAgICBpc011bHRpRmlsZVVwbG9hZDogYm9vbGVhblxyXG4gICk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKGlzTXVsdGlGaWxlVXBsb2FkKSB7XHJcbiAgICAgIGxldCB0b3RhbFNpemUgPSAwO1xyXG4gICAgICBPYmplY3QudmFsdWVzKGZpbGVzKS5mb3JFYWNoKChmaWxlOiBGaWxlKSA9PiB7XHJcbiAgICAgICAgdG90YWxTaXplICs9IGZpbGUuc2l6ZTtcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybiB0b3RhbFNpemUgLyAoMTAyNCAqIDEwMjQpIDw9IG1heEZpbGVTaXplO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIChmaWxlcyBhcyBGaWxlKS5zaXplIC8gKDEwMjQgKiAxMDI0KSA8PSBtYXhGaWxlU2l6ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFZhbGlkYXRlcyB0aGUgZmlsZSB0eXBlcyBvZiB0aGUgdXBsb2FkZWQgZmlsZXMuXHJcbiAgICogQHBhcmFtIHsoRmlsZSB8IEZpbGVMaXN0KX0gZmlsZXNcclxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBhbGxvd2VkRmlsZVR5cGVzXHJcbiAgICogQHBhcmFtIHtib29sZWFufSBpc011bHRpRmlsZVVwbG9hZFxyXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59IC1SZXR1cm5zIHRydWUgaWYgYWxsIGZpbGVzIGhhdmUgdmFsaWQgZXh0ZW5zaW9ucywgb3RoZXJ3aXNlIGZhbHNlLlxyXG4gICAqIEBtZW1iZXJvZiBGaWxlVXBsb2FkU2VydmljZVxyXG4gICAqL1xyXG4gIHZhbGlkYXRlRmlsZVR5cGVzKFxyXG4gICAgZmlsZXM6IEZpbGUgfCBGaWxlTGlzdCxcclxuICAgIGFsbG93ZWRGaWxlVHlwZXM6IHN0cmluZ1tdLFxyXG4gICAgaXNNdWx0aUZpbGVVcGxvYWQ6IGJvb2xlYW5cclxuICApOiBib29sZWFuIHtcclxuICAgIGNvbnN0IHZhbGlkYXRlU2luZ2xlRmlsZSA9IChmaWxlOiBGaWxlKTogYm9vbGVhbiA9PiB7XHJcbiAgICAgIGNvbnN0IGZpbGVFeHRlbnNpb24gPSB0aGlzLmdldEZpbGVFeHRlbnNpb24oZmlsZS5uYW1lKTtcclxuICAgICAgcmV0dXJuIGFsbG93ZWRGaWxlVHlwZXM/LmluY2x1ZGVzKGZpbGVFeHRlbnNpb24pO1xyXG4gICAgfTtcclxuICAgIGlmIChpc011bHRpRmlsZVVwbG9hZCkge1xyXG4gICAgICBsZXQgYWxsRmlsZXNWYWxpZCA9IHRydWU7XHJcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICAgIE9iamVjdC52YWx1ZXMoZmlsZXMpPy5mb3JFYWNoKChmaWxlSXRlbTogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKCF2YWxpZGF0ZVNpbmdsZUZpbGUoZmlsZUl0ZW0pKSB7XHJcbiAgICAgICAgICBhbGxGaWxlc1ZhbGlkID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIGFsbEZpbGVzVmFsaWQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmFsaWRhdGVTaW5nbGVGaWxlKGZpbGVzIGFzIEZpbGUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRXh0cmFjdHMgYW5kIHJldHVybnMgdGhlIGV4dGVuc2lvbiBvZiBhIGZpbGUgZnJvbSBpdHMgbmFtZS5cclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlTmFtZVxyXG4gICAqIEByZXR1cm4ge3N0cmluZ30gLVRoZSBmaWxlIGV4dGVuc2lvbiBpbiBsb3dlcmNhc2UuXHJcbiAgICogQG1lbWJlcm9mIEZpbGVVcGxvYWRTZXJ2aWNlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBnZXRGaWxlRXh0ZW5zaW9uKGZpbGVOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cclxuICAgIHJldHVybiBmaWxlTmFtZT8uc3BsaXQoJy4nKS5wb3AoKSEudG9Mb3dlckNhc2UoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEltcGxlbWVudGF0aW9uIG9mIG5nT25EZXN0cm95IGxpZmVjeWNsZSBob29rIG1ldGhvZCB0byB1bnN1YnNjcmliZSB0aGUgb3BlbiBvYnNlcnZhYmxlIHN1YnNjcmlwdGlvbnMuXHJcbiAgICogQG1lbWJlcm9mIEZpbGVVcGxvYWRTZXJ2aWNlXHJcbiAgICovXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQodHJ1ZSk7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
304
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS11cGxvYWQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ByZXNlbnRhdGlvbi9zcmMvbGliL3NlcnZpY2VzL2ZpbGUtdXBsb2FkLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFVBQVUsRUFFVixhQUFhLEVBQ2IsV0FBVyxHQUNaLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLFVBQVUsRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUN0RCxPQUFPLEVBRUwsU0FBUyxHQUdWLE1BQU0scUJBQXFCLENBQUM7QUFNN0IsT0FBTyxFQUNMLFVBQVUsRUFDVixJQUFJLEVBQ0osR0FBRyxFQUVILE9BQU8sRUFDUCxTQUFTLEVBQ1QsR0FBRyxHQUNKLE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxLQUFLLFNBQVMsTUFBTSwwQkFBMEIsQ0FBQzs7OztBQUV0RDs7O0dBR0c7QUFJSCxNQUFNLE9BQU8saUJBQWlCO0lBTzVCO0lBQ0UsMENBQTBDO0lBQ25DLFdBQXdCLEVBQy9CLE9BQW9CO0lBQ3BCLDBDQUEwQztJQUNuQyxZQUEyQjtJQUNsQywwQ0FBMEM7SUFDbkMseUJBQW9EO1FBTHBELGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBR3hCLGlCQUFZLEdBQVosWUFBWSxDQUFlO1FBRTNCLDhCQUF5QixHQUF6Qix5QkFBeUIsQ0FBMkI7UUFiN0QsYUFBUSxHQUFxQixJQUFJLE9BQU8sRUFBVyxDQUFDO1FBQ3BELGNBQVMsR0FBRyxTQUFTLENBQUM7UUFJdEIsb0JBQWUsR0FBRyxLQUFLLENBQUM7UUFVdEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILGFBQWEsQ0FBQyxVQUFrQjtRQUM5QixJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztJQUMvQixD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LENBQUMsS0FBSyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsUUFBYSxFQUFFLEVBQUU7Z0JBQzlDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsRUFBRTtvQkFDakMsYUFBYSxHQUFHLEtBQUssQ0FBQztpQkFDdkI7WUFDSCxDQUFDLENBQUMsQ0FBQztZQUNILE9BQU8sYUFBYSxDQUFDO1NBQ3RCO1FBQ0QsT0FBTyxrQkFBa0IsQ0FBQyxLQUFhLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ssZ0JBQWdCLENBQUMsUUFBZ0I7UUFDdkMsb0VBQW9FO1FBQ3BFLE9BQU8sUUFBUSxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNuRCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsV0FBVztRQUNULElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDOUIsQ0FBQzsrR0F4VVUsaUJBQWlCO21IQUFqQixpQkFBaUIsY0FGaEIsTUFBTTs7NEZBRVAsaUJBQWlCO2tCQUg3QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgSHR0cEJhY2tlbmQsXHJcbiAgSHR0cENsaWVudCxcclxuICBIdHRwRXZlbnQsXHJcbiAgSHR0cEV2ZW50VHlwZSxcclxuICBIdHRwSGVhZGVycyxcclxufSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IEluamVjdGFibGUsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1xyXG4gIEFsZXJ0c1NlcnZpY2UsXHJcbiAgQWxlcnRUeXBlLFxyXG4gIEh0dHBTZXJ2aWNlLFxyXG4gIExvYWRlck5vdGlmaWNhdGlvblNlcnZpY2UsXHJcbn0gZnJvbSAnQGllZWVzYS1ucG0vdXRpbGl0eSc7XHJcbmltcG9ydCB7XHJcbiAgRmlsZVVwbG9hZFByZXNpZ25lZFVybCxcclxuICBHZXRGaWxlRG93bmxvYWRQcmVzaWduZWRVcmxQYXlsb2FkLFxyXG4gIEdldEZpbGVVcGxvYWRQcmVzaWduZWRVcmxQYXlsb2FkLFxyXG59IGZyb20gJy4uL21vZGVscy9maWxlLXVwbG9hZC1wcmVzaWduZWQtdXJsLXJlcy5tb2RlbCc7XHJcbmltcG9ydCB7XHJcbiAgY2F0Y2hFcnJvcixcclxuICBsYXN0LFxyXG4gIG1hcCxcclxuICBPYnNlcnZhYmxlLFxyXG4gIFN1YmplY3QsXHJcbiAgdGFrZVVudGlsLFxyXG4gIHRhcCxcclxufSBmcm9tICdyeGpzJztcclxuaW1wb3J0ICogYXMgY29uc3RhbnRzIGZyb20gJy4uL2Fzc2V0cy9jb25zdGFudHMuanNvbic7XHJcblxyXG4vKipcclxuICogVGhpcyBzZXJ2aWNlIGludGVyYWN0cyB3aXRoIHRoZSBzZXJ2ZXIgdG8gb2J0YWluIHByZS1zaWduZWQgVVJMcyBmb3IgZmlsZSB1cGxvYWQgYW5kIHVwbG9hZHMgZmlsZXMgdG8gQW1hem9uIFMzLlxyXG4gKiBAY2xhc3MgRmlsZVVwbG9hZFNlcnZpY2VcclxuICovXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGaWxlVXBsb2FkU2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XHJcbiAgZGVzdHJveSQ6IFN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xyXG4gIGNvbnN0YW50cyA9IGNvbnN0YW50cztcclxuICBhcGlCYXNlVXJsITogc3RyaW5nO1xyXG4gIGZpbGVCeXRlQXJyYXk6IFVpbnQ4QXJyYXkgfCB1bmRlZmluZWQ7XHJcbiAgaHR0cENsaWVudDogSHR0cENsaWVudDtcclxuICBpc0ZpbGVVcGxvYWRpbmcgPSBmYWxzZTtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHVibGljIGh0dHBTZXJ2aWNlOiBIdHRwU2VydmljZSxcclxuICAgIGhhbmRsZXI6IEh0dHBCYWNrZW5kLFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwdWJsaWMgYWxlcnRTZXJ2aWNlOiBBbGVydHNTZXJ2aWNlLFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwdWJsaWMgbG9hZGVyTm90aWZpY2F0aW9uU2VydmljZTogTG9hZGVyTm90aWZpY2F0aW9uU2VydmljZVxyXG4gICkge1xyXG4gICAgdGhpcy5odHRwQ2xpZW50ID0gbmV3IEh0dHBDbGllbnQoaGFuZGxlcik7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSBiYXNlIFVSTCBmb3IgQVBJIHJlcXVlc3RzLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcGlCYXNlVXJsIC1BUEkgYmFzZSBVUkwuXHJcbiAgICogQG1lbWJlcm9mIEZpbGVVcGxvYWRTZXJ2aWNlXHJcbiAgICovXHJcbiAgc2V0QXBpQmFzZVVybChhcGlCYXNlVXJsOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuYXBpQmFzZVVybCA9IGFwaUJhc2VVcmw7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZXMgcHJlc2lnbmVkIFVSTCBmb3IgdXBsb2FkaW5nIGZpbGVzIHRvIEFtYXpvbiBTMyBidWNrZXQuXHJcbiAgICogQHBhcmFtIHsoRmlsZSB8IEZpbGVMaXN0KX0gZmlsZVxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8RmlsZVVwbG9hZFByZXNpZ25lZFVybD59XHJcbiAgICogQG1lbWJlcm9mIEZpbGVVcGxvYWRTZXJ2aWNlXHJcbiAgICovXHJcbiAgZ2V0RmlsZVVwbG9hZFByZXNpZ25lZFVybChcclxuICAgIGZpbGU6IEZpbGUgfCBGaWxlTGlzdCxcclxuICAgIGFwcElkOiBzdHJpbmdcclxuICApOiBPYnNlcnZhYmxlPEZpbGVVcGxvYWRQcmVzaWduZWRVcmw+IHtcclxuICAgIGxldCBmaWxlTmFtZSA9ICcnO1xyXG4gICAgaWYgKE9iamVjdC52YWx1ZXMoZmlsZSkubGVuZ3RoKSBmaWxlTmFtZSA9IE9iamVjdC52YWx1ZXMoZmlsZSlbMF0ubmFtZTtcclxuICAgIGVsc2UgZmlsZU5hbWUgPSAoZmlsZSBhcyBGaWxlKS5uYW1lO1xyXG4gICAgY29uc3QgZmlsZVVwbG9hZFByZXNpZ25lZFVybFBheWxvYWQ6IEdldEZpbGVVcGxvYWRQcmVzaWduZWRVcmxQYXlsb2FkID0ge1xyXG4gICAgICBwYXlsb2FkOiB7XHJcbiAgICAgICAgZmlsZU5hbWU6IGZpbGVOYW1lLFxyXG4gICAgICAgIHRlbmFudEFwcElkOiBhcHBJZCBhcyBzdHJpbmcsXHJcbiAgICAgIH0sXHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2VcclxuICAgICAgLnBvc3REYXRhKFxyXG4gICAgICAgIGAke3RoaXMuYXBpQmFzZVVybH0vY29uZmlndXJhdGlvbnMvczMvdXBsb2FkRmlsZVVybGAsXHJcbiAgICAgICAgZmlsZVVwbG9hZFByZXNpZ25lZFVybFBheWxvYWRcclxuICAgICAgKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3JSZXMpID0+IHtcclxuICAgICAgICAgIHRocm93IGVycm9yUmVzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFVwbG9hZHMgZmlsZSB0byBBV1MgUzMgdXNpbmcgYSBwcmVzaWduZWQgVVJMLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwcmVzaWduZWRVcmxcclxuICAgKiBAcGFyYW0geyhGaWxlIHwgRmlsZUxpc3QpfSBmaWxlXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxhbnk+fSAtUmV0dXJucyBhbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIHJlc3BvbnNlIGFmdGVyIHVwbG9hZGluZyB0aGUgZmlsZSB0byBTMy5cclxuICAgKiBAbWVtYmVyb2YgRmlsZVVwbG9hZFNlcnZpY2VcclxuICAgKi9cclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gIHVwbG9hZEZpbGVUb1MzKHByZXNpZ25lZFVybDogc3RyaW5nLCBmaWxlOiBGaWxlIHwgRmlsZUxpc3QpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgdGhpcy5sb2FkZXJOb3RpZmljYXRpb25TZXJ2aWNlLnNob3coKTtcclxuICAgIGxldCBmaWxlVHlwZSA9ICcnO1xyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICAgIGxldCBmaWxlU2l6ZTogYW55O1xyXG4gICAgbGV0IGZpbGVPYmo6IEZpbGU7XHJcbiAgICBpZiAoT2JqZWN0LnZhbHVlcyhmaWxlKS5sZW5ndGgpIHtcclxuICAgICAgZmlsZVR5cGUgPSBPYmplY3QudmFsdWVzKGZpbGUpWzBdLnR5cGU7XHJcbiAgICAgIGZpbGVTaXplID0gT2JqZWN0LnZhbHVlcyhmaWxlKVswXS5zaXplO1xyXG4gICAgICBmaWxlT2JqID0gT2JqZWN0LnZhbHVlcyhmaWxlKVswXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGZpbGVUeXBlID0gKGZpbGUgYXMgRmlsZSkudHlwZTtcclxuICAgICAgZmlsZVNpemUgPSAoZmlsZSBhcyBGaWxlKS5zaXplO1xyXG4gICAgICBmaWxlT2JqID0gZmlsZSBhcyBGaWxlO1xyXG4gICAgfVxyXG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpO1xyXG4gICAgaGVhZGVycy5hcHBlbmQoJ0NvbnRlbnQtVHlwZScsIGZpbGVUeXBlKTtcclxuICAgIGhlYWRlcnMuYXBwZW5kKCdDb250ZW50LUxlbmd0aCcsIGZpbGVTaXplKTtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnRcclxuICAgICAgLnB1dChwcmVzaWduZWRVcmwsIGZpbGVPYmosIHtcclxuICAgICAgICByZXBvcnRQcm9ncmVzczogdHJ1ZSxcclxuICAgICAgICBvYnNlcnZlOiAnZXZlbnRzJyxcclxuICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLFxyXG4gICAgICB9KVxyXG4gICAgICAucGlwZShcclxuICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JCksXHJcbiAgICAgICAgbWFwKChldmVudCkgPT4gdGhpcy5nZXRFdmVudE1lc3NhZ2UoZXZlbnQsIGZpbGUpKSxcclxuICAgICAgICB0YXAoKG1lc3NhZ2UpID0+IHRoaXMuc2hvd1Byb2dyZXNzKG1lc3NhZ2UpKSxcclxuICAgICAgICBsYXN0KCksXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3JSZXMpID0+IHtcclxuICAgICAgICAgIHRoaXMubG9hZGVyTm90aWZpY2F0aW9uU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgICB0aHJvdyBlcnJvclJlcztcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyBmaWxlIHVwbG9hZCBwcm9ncmVzcy5cclxuICAgKiBAcGFyYW0geyp9IG1lc3NhZ2VcclxuICAgKiBAbWVtYmVyb2YgRmlsZVVwbG9hZFNlcnZpY2VcclxuICAgKi9cclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSwgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzLCBuby11bnVzZWQtdmFycywgbm8tZW1wdHktZnVuY3Rpb24sIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxyXG4gIHNob3dQcm9ncmVzcyhtZXNzYWdlOiBhbnkpIHt9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiBkaXN0aW5jdCBtZXNzYWdlIGZvciBzZW50LCB1cGxvYWQgcHJvZ3Jlc3MsICYgcmVzcG9uc2UgZXZlbnRzLlxyXG4gICAqIEBwYXJhbSB7SHR0cEV2ZW50PGFueT59IGV2ZW50XHJcbiAgICogQHBhcmFtIHsoRmlsZSB8IEZpbGVMaXN0KX0gZmlsZVxyXG4gICAqIEByZXR1cm4geyp9XHJcbiAgICogQG1lbWJlcm9mIEZpbGVVcGxvYWRTZXJ2aWNlXHJcbiAgICovXHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBnZXRFdmVudE1lc3NhZ2UoZXZlbnQ6IEh0dHBFdmVudDxhbnk+LCBmaWxlOiBGaWxlIHwgRmlsZUxpc3QpIHtcclxuICAgIGxldCBmaWxlTmFtZSA9ICcnO1xyXG4gICAgbGV0IGZpbGVTaXplOiBudW1iZXIgfCBzdHJpbmcgPSAwO1xyXG4gICAgaWYgKE9iamVjdC52YWx1ZXMoZmlsZSkubGVuZ3RoKSB7XHJcbiAgICAgIGZpbGVOYW1lID0gT2JqZWN0LnZhbHVlcyhmaWxlKVswXS5uYW1lO1xyXG4gICAgICBmaWxlU2l6ZSA9IE9iamVjdC52YWx1ZXMoZmlsZSlbMF0uc2l6ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGZpbGVOYW1lID0gKGZpbGUgYXMgRmlsZSkubmFtZTtcclxuICAgICAgZmlsZVNpemUgPSAoZmlsZSBhcyBGaWxlKS5zaXplO1xyXG4gICAgfVxyXG4gICAgc3dpdGNoIChldmVudC50eXBlKSB7XHJcbiAgICAgIGNhc2UgSHR0cEV2ZW50VHlwZS5TZW50OlxyXG4gICAgICAgIHJldHVybiBgVXBsb2FkaW5nIGZpbGUgXCIke2ZpbGVOYW1lfVwiIG9mIHNpemUgJHtmaWxlU2l6ZX0uYDtcclxuICAgICAgY2FzZSBIdHRwRXZlbnRUeXBlLlVwbG9hZFByb2dyZXNzOlxyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jYXNlLWRlY2xhcmF0aW9uc1xyXG4gICAgICAgIGNvbnN0IHBlcmNlbnREb25lID0gZXZlbnQ/LnRvdGFsXHJcbiAgICAgICAgICA/IE1hdGgucm91bmQoKDEwMCAqIGV2ZW50LmxvYWRlZCkgLyBldmVudC50b3RhbClcclxuICAgICAgICAgIDogMDtcclxuICAgICAgICByZXR1cm4gYEZpbGUgXCIke2ZpbGVOYW1lfVwiIGlzICR7cGVyY2VudERvbmV9JSB1cGxvYWRlZC5gO1xyXG4gICAgICBjYXNlIEh0dHBFdmVudFR5cGUuUmVzcG9uc2U6XHJcbiAgICAgICAgdGhpcy5sb2FkZXJOb3RpZmljYXRpb25TZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gYEZpbGUgXCIke2ZpbGVOYW1lfVwiIHN1cnByaXNpbmcgdXBsb2FkIGV2ZW50OiAke2V2ZW50LnR5cGV9LmA7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDb252ZXJ0cyBmaWxlIHRvIGJ5dGUgYXJyYXkuXHJcbiAgICogQHBhcmFtIHtGaWxlfSBmaWxlXHJcbiAgICogQG1lbWJlcm9mIEZpbGVVcGxvYWRTZXJ2aWNlXHJcbiAgICovXHJcbiAgY29udmVydEZpbGVUb0J5dGVBcnJheShmaWxlOiBGaWxlKTogdm9pZCB7XHJcbiAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG4gICAgcmVhZGVyLm9ubG9hZGVuZCA9ICgpID0+IHtcclxuICAgICAgY29uc3QgYXJyYXlCdWZmZXIgPSByZWFkZXI/LnJlc3VsdCBhcyBBcnJheUJ1ZmZlcjtcclxuICAgICAgdGhpcy5maWxlQnl0ZUFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXlCdWZmZXIpO1xyXG4gICAgfTtcclxuICAgIHJlYWRlci5vbmVycm9yID0gKCkgPT4ge1xyXG4gICAgICB0aGlzLmFsZXJ0U2VydmljZT8uc2hvd01lc3NhZ2Uoe1xyXG4gICAgICAgIHN0YXR1czogJ2N1c3RvbScsXHJcbiAgICAgICAgbWVzc2FnZTogdGhpcy5jb25zdGFudHM/LmZpbGVVcGxvYWQ/Lm1lc3NhZ2U/LmVycm9yPy5lcnJvclJlYWRpbmdGaWxlLFxyXG4gICAgICAgIGFsZXJ0VHlwZTogQWxlcnRUeXBlPy5FUlJPUixcclxuICAgICAgICBpc0Nsb3NlTmVlZGVkOiB0cnVlLFxyXG4gICAgICB9KTtcclxuICAgIH07XHJcbiAgICByZWFkZXIucmVhZEFzQXJyYXlCdWZmZXIoZmlsZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXNldHMgZmlsZSBieXRlIGFycmF5IGZvcm1hdCB0byB1bmRlZmluZWQuXHJcbiAgICogQG1lbWJlcm9mIEZpbGVVcGxvYWRTZXJ2aWNlXHJcbiAgICovXHJcbiAgY2xlYXJGaWxlQnl0ZUFycmF5KCk6IHZvaWQge1xyXG4gICAgdGhpcy5maWxlQnl0ZUFycmF5ID0gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyBmaWxlIHVwbG9hZCBzdGF0dXMuXHJcbiAgICogQHBhcmFtIHtib29sZWFufSBzdGF0dXNcclxuICAgKiBAbWVtYmVyb2YgRmlsZVVwbG9hZFNlcnZpY2VcclxuICAgKi9cclxuICBzZXRGaWxlVXBsb2FkU3RhdHVzKHN0YXR1czogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgdGhpcy5pc0ZpbGVVcGxvYWRpbmcgPSBzdGF0dXM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIGZpbGUgdXBsb2FkIHN0YXR1cy5cclxuICAgKiBAcmV0dXJuIHtib29sZWFufVxyXG4gICAqIEBtZW1iZXJvZiBGaWxlVXBsb2FkU2VydmljZVxyXG4gICAqL1xyXG4gIGdldEZpbGVVcGxvYWRTdGF0dXMoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5pc0ZpbGVVcGxvYWRpbmc7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZXMgcHJlc2lnbmVkIFVSTCBmb3IgZG93bmxvYWRpbmcgZmlsZXMgdG8gQW1hem9uIFMzIGJ1Y2tldC5cclxuICAgKiBAcGFyYW0geyhGaWxlIHwgRmlsZUxpc3QpfSBmaWxlXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxzdHJpbmc+fVxyXG4gICAqIEBtZW1iZXJvZiBGaWxlVXBsb2FkU2VydmljZVxyXG4gICAqL1xyXG4gIGdldEZpbGVEb3dubG9hZFByZXNpZ25lZFVybHMoXHJcbiAgICBmaWxlOiBGaWxlIHwgRmlsZUxpc3QgfCBzdHJpbmcsXHJcbiAgICBpc1B1YmxpY0FQST86IGJvb2xlYW4sXHJcbiAgICBkb21haW5Vcmw/OiBzdHJpbmdcclxuICApOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xyXG4gICAgbGV0IGZpbGVOYW1lID0gJyc7XHJcbiAgICBpZiAodHlwZW9mIGZpbGUgPT09ICdzdHJpbmcnKSBmaWxlTmFtZSA9IGZpbGU7XHJcbiAgICBlbHNlIGlmIChPYmplY3QudmFsdWVzKGZpbGUpLmxlbmd0aCkgZmlsZU5hbWUgPSBPYmplY3QudmFsdWVzKGZpbGUpWzBdLm5hbWU7XHJcbiAgICBlbHNlIGZpbGVOYW1lID0gKGZpbGUgYXMgRmlsZSkubmFtZTtcclxuICAgIGxldCBodHRwUmVxdWVzdCE6IE9ic2VydmFibGU8c3RyaW5nPjtcclxuICAgIGlmIChpc1B1YmxpY0FQSSkge1xyXG4gICAgICBjb25zdCBmaWxlRG93bmxvYWRQcmVzaWduZWRVcmxQYXlsb2FkOiBHZXRGaWxlRG93bmxvYWRQcmVzaWduZWRVcmxQYXlsb2FkID1cclxuICAgICAgICB7XHJcbiAgICAgICAgICBwYXlsb2FkOiB7XHJcbiAgICAgICAgICAgIGZpbGVOYW1lOiBmaWxlTmFtZSxcclxuICAgICAgICAgICAgZG9tYWluOiBkb21haW5VcmwgYXMgc3RyaW5nLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9O1xyXG4gICAgICBodHRwUmVxdWVzdCA9IHRoaXMuaHR0cFNlcnZpY2UucG9zdERhdGEoXHJcbiAgICAgICAgYCR7dGhpcy5hcGlCYXNlVXJsfS9jb25maWd1cmF0aW9ucy9wdWJsaWMvZG93bmxvYWRGaWxlVXJsYCxcclxuICAgICAgICBmaWxlRG93bmxvYWRQcmVzaWduZWRVcmxQYXlsb2FkXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBodHRwUmVxdWVzdCA9IHRoaXMuaHR0cFNlcnZpY2UuZ2V0RGF0YShcclxuICAgICAgICBgJHt0aGlzLmFwaUJhc2VVcmx9L2NvbmZpZ3VyYXRpb25zL3MzL2Rvd25sb2FkRmlsZVVybC8ke2ZpbGVOYW1lfWBcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIHJldHVybiBodHRwUmVxdWVzdC5waXBlKFxyXG4gICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICB9KSxcclxuICAgICAgY2F0Y2hFcnJvcigoZXJyb3JSZXMpID0+IHtcclxuICAgICAgICB0aHJvdyBlcnJvclJlcztcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEb3dubG9hZHMgZmlsZSB0byBBV1MgUzMgdXNpbmcgYSBwcmVzaWduZWQgVVJMLlxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8YW55Pn1cclxuICAgKiBAbWVtYmVyb2YgRmlsZVVwbG9hZFNlcnZpY2VcclxuICAgKi9cclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gIGRvd25sb2FkRmlsZShmaWxlRG93bmxvYWRQcmVzaWduZWRVcmw6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LmdldChmaWxlRG93bmxvYWRQcmVzaWduZWRVcmwpLnBpcGUoXHJcbiAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcclxuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgIH0pLFxyXG4gICAgICBjYXRjaEVycm9yKChlcnJvclJlcykgPT4ge1xyXG4gICAgICAgIHRocm93IGVycm9yUmVzO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFZhbGlkYXRlcyB0aGUgdG90YWwgc2l6ZSBvZiB0aGUgZmlsZXMgdXBsb2FkZWQuXHJcbiAgICogQHBhcmFtIHsoRmlsZSB8IEZpbGVMaXN0KX0gZmlsZXMgLVRoZSBmaWxlcyB0byBiZSB2YWxpZGF0ZWQuXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IG1heEZpbGVTaXplXHJcbiAgICogQHBhcmFtIHtib29sZWFufSBpc011bHRpRmlsZVVwbG9hZFxyXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59IC1SZXR1cm5zIHRydWUgaWYgdGhlIHRvdGFsIHNpemUgb2YgZmlsZXMgaXMgd2l0aGluIHRoZSBzcGVjaWZpZWQgbGltaXQsIG90aGVyd2lzZSBmYWxzZS5cclxuICAgKiBAbWVtYmVyb2YgRmlsZVVwbG9hZFNlcnZpY2VcclxuICAgKi9cclxuICB2YWxpZGF0ZUZpbGVTaXplKFxyXG4gICAgZmlsZXM6IEZpbGUgfCBGaWxlTGlzdCxcclxuICAgIG1heEZpbGVTaXplOiBudW1iZXIsXHJcbiAgICBpc011bHRpRmlsZVVwbG9hZDogYm9vbGVhblxyXG4gICk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKGlzTXVsdGlGaWxlVXBsb2FkKSB7XHJcbiAgICAgIGxldCB0b3RhbFNpemUgPSAwO1xyXG4gICAgICBPYmplY3QudmFsdWVzKGZpbGVzKS5mb3JFYWNoKChmaWxlOiBGaWxlKSA9PiB7XHJcbiAgICAgICAgdG90YWxTaXplICs9IGZpbGUuc2l6ZTtcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybiB0b3RhbFNpemUgLyAoMTAyNCAqIDEwMjQpIDw9IG1heEZpbGVTaXplO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIChmaWxlcyBhcyBGaWxlKS5zaXplIC8gKDEwMjQgKiAxMDI0KSA8PSBtYXhGaWxlU2l6ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFZhbGlkYXRlcyB0aGUgZmlsZSB0eXBlcyBvZiB0aGUgdXBsb2FkZWQgZmlsZXMuXHJcbiAgICogQHBhcmFtIHsoRmlsZSB8IEZpbGVMaXN0KX0gZmlsZXNcclxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBhbGxvd2VkRmlsZVR5cGVzXHJcbiAgICogQHBhcmFtIHtib29sZWFufSBpc011bHRpRmlsZVVwbG9hZFxyXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59IC1SZXR1cm5zIHRydWUgaWYgYWxsIGZpbGVzIGhhdmUgdmFsaWQgZXh0ZW5zaW9ucywgb3RoZXJ3aXNlIGZhbHNlLlxyXG4gICAqIEBtZW1iZXJvZiBGaWxlVXBsb2FkU2VydmljZVxyXG4gICAqL1xyXG4gIHZhbGlkYXRlRmlsZVR5cGVzKFxyXG4gICAgZmlsZXM6IEZpbGUgfCBGaWxlTGlzdCxcclxuICAgIGFsbG93ZWRGaWxlVHlwZXM6IHN0cmluZ1tdLFxyXG4gICAgaXNNdWx0aUZpbGVVcGxvYWQ6IGJvb2xlYW5cclxuICApOiBib29sZWFuIHtcclxuICAgIGNvbnN0IHZhbGlkYXRlU2luZ2xlRmlsZSA9IChmaWxlOiBGaWxlKTogYm9vbGVhbiA9PiB7XHJcbiAgICAgIGNvbnN0IGZpbGVFeHRlbnNpb24gPSB0aGlzLmdldEZpbGVFeHRlbnNpb24oZmlsZS5uYW1lKTtcclxuICAgICAgcmV0dXJuIGFsbG93ZWRGaWxlVHlwZXM/LmluY2x1ZGVzKGZpbGVFeHRlbnNpb24pO1xyXG4gICAgfTtcclxuICAgIGlmIChpc011bHRpRmlsZVVwbG9hZCkge1xyXG4gICAgICBsZXQgYWxsRmlsZXNWYWxpZCA9IHRydWU7XHJcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICAgIE9iamVjdC52YWx1ZXMoZmlsZXMpPy5mb3JFYWNoKChmaWxlSXRlbTogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKCF2YWxpZGF0ZVNpbmdsZUZpbGUoZmlsZUl0ZW0pKSB7XHJcbiAgICAgICAgICBhbGxGaWxlc1ZhbGlkID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIGFsbEZpbGVzVmFsaWQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmFsaWRhdGVTaW5nbGVGaWxlKGZpbGVzIGFzIEZpbGUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRXh0cmFjdHMgYW5kIHJldHVybnMgdGhlIGV4dGVuc2lvbiBvZiBhIGZpbGUgZnJvbSBpdHMgbmFtZS5cclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlTmFtZVxyXG4gICAqIEByZXR1cm4ge3N0cmluZ30gLVRoZSBmaWxlIGV4dGVuc2lvbiBpbiBsb3dlcmNhc2UuXHJcbiAgICogQG1lbWJlcm9mIEZpbGVVcGxvYWRTZXJ2aWNlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBnZXRGaWxlRXh0ZW5zaW9uKGZpbGVOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cclxuICAgIHJldHVybiBmaWxlTmFtZT8uc3BsaXQoJy4nKS5wb3AoKSEudG9Mb3dlckNhc2UoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEltcGxlbWVudGF0aW9uIG9mIG5nT25EZXN0cm95IGxpZmVjeWNsZSBob29rIG1ldGhvZCB0byB1bnN1YnNjcmliZSB0aGUgb3BlbiBvYnNlcnZhYmxlIHN1YnNjcmlwdGlvbnMuXHJcbiAgICogQG1lbWJlcm9mIEZpbGVVcGxvYWRTZXJ2aWNlXHJcbiAgICovXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQodHJ1ZSk7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -665,6 +665,9 @@ var fileUpload = {
|
|
|
665
665
|
"2059": "Application Details not found.",
|
|
666
666
|
"2060": "Invalid file format.",
|
|
667
667
|
"2061": "Unable to establish connection. Please try again later.",
|
|
668
|
+
"2062": "File not found.",
|
|
669
|
+
"2063": "File Name is required.",
|
|
670
|
+
"2064": "Application Id or Domain is required.",
|
|
668
671
|
errorReadingFile: "File is damaged or unreadable.",
|
|
669
672
|
invalidFileFormat: "Invalid file format. Please upload SVG, PNG and JPG file format only.",
|
|
670
673
|
invalidFileSize: "File size exceeds the maximum limit."
|
|
@@ -2637,14 +2640,20 @@ class FileUploadService {
|
|
|
2637
2640
|
* @return {Observable<FileUploadPresignedUrl>}
|
|
2638
2641
|
* @memberof FileUploadService
|
|
2639
2642
|
*/
|
|
2640
|
-
getFileUploadPresignedUrl(file) {
|
|
2643
|
+
getFileUploadPresignedUrl(file, appId) {
|
|
2641
2644
|
let fileName = '';
|
|
2642
2645
|
if (Object.values(file).length)
|
|
2643
2646
|
fileName = Object.values(file)[0].name;
|
|
2644
2647
|
else
|
|
2645
2648
|
fileName = file.name;
|
|
2649
|
+
const fileUploadPresignedUrlPayload = {
|
|
2650
|
+
payload: {
|
|
2651
|
+
fileName: fileName,
|
|
2652
|
+
tenantAppId: appId,
|
|
2653
|
+
},
|
|
2654
|
+
};
|
|
2646
2655
|
return this.httpService
|
|
2647
|
-
.
|
|
2656
|
+
.postData(`${this.apiBaseUrl}/configurations/s3/uploadFileUrl`, fileUploadPresignedUrlPayload)
|
|
2648
2657
|
.pipe(map((response) => {
|
|
2649
2658
|
return response;
|
|
2650
2659
|
}), catchError((errorRes) => {
|
|
@@ -3418,7 +3427,7 @@ class ColorPickerComponent {
|
|
|
3418
3427
|
this.colorPickerEventHandlers(false);
|
|
3419
3428
|
}
|
|
3420
3429
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ColorPickerComponent, deps: [{ token: i0.ElementRef }, { token: FormUtilityService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
3421
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ColorPickerComponent, isStandalone: true, selector: "ieeesa-color-picker", inputs: { defaultColor: "defaultColor", palette: "palette", overlayClassName: "overlayClassName", colorFormat: "colorFormat", colorAnimation: "colorAnimation", formControlName: "formControlName", paletteSelectLabel: "paletteSelectLabel", paletteCancelLabel: "paletteCancelLabel", colorPickerLabel: "colorPickerLabel", isColorCodeLabelNeeded: "isColorCodeLabelNeeded", isArrowIconNeeded: "isArrowIconNeeded", canHideTextInput: "canHideTextInput", canHideColorPicker: "canHideColorPicker" }, outputs: { colorPickerChange: "colorPickerChange", colorPickerSliderChange: "colorPickerSliderChange" }, viewQueries: [{ propertyName: "colorPickerDirective", first: true, predicate: NgxColorsTriggerDirective, descendants: true, static: true }], ngImport: i0, template: "<div\r\n [formGroup]=\"group\"\r\n [ngClass]=\"\r\n config?.isLabelAlignedLeft\r\n ? 'ieeesa-color-picker__label-left'\r\n : 'ieeesa-color-picker__label-top'\r\n \"\r\n>\r\n <mat-label\r\n class=\"ieeesa-body-sm-14 ieeesa-color-picker__label\"\r\n *ngIf=\"colorPickerLabel\"\r\n >{{ colorPickerLabel }}</mat-label\r\n >\r\n <div class=\"d-flex\">\r\n <ngx-colors\r\n class=\"ieeesa-color-picker\"\r\n ngx-colors-trigger\r\n [acceptLabel]=\"paletteSelectLabel\"\r\n [cancelLabel]=\"paletteCancelLabel\"\r\n [palette]=\"palette\"\r\n (input)=\"inputChange($event)\"\r\n (open)=\"onOpenPalette()\"\r\n (close)=\"onClosePalette()\"\r\n (slider)=\"onSliderChange($event)\"\r\n [overlayClassName]=\"overlayClassName\"\r\n [formControlName]=\"config.controlName\"\r\n [format]=\"colorFormat\"\r\n [hideTextInput]=\"canHideTextInput\"\r\n [colorsAnimation]=\"colorAnimation\"\r\n [hideColorPicker]=\"canHideColorPicker\"\r\n [ariaLabel]=\"colorPickerTexts?.ariaLabel?.colorPicker\"\r\n [ariaDescription]=\"colorPickerTexts?.ariaDescription\"\r\n >\r\n </ngx-colors>\r\n <button\r\n class=\"ieeesa-color-picker__toggle-icon\"\r\n *ngIf=\"isArrowIconNeeded\"\r\n type=\"button\"\r\n (click)=\"togglePalette()\"\r\n [attr.aria-label]=\"colorPickerTexts?.ariaLabel?.colorPicker\"\r\n [attr.aria-describedby]=\"colorPickerTexts?.ariaDescribedById\"\r\n >\r\n <i\r\n class=\"fa-solid\"\r\n [ngClass]=\"canShowPalette ? 'fa-caret-up' : 'fa-caret-down'\"\r\n ></i>\r\n </button>\r\n <span\r\n class=\"ieeesa-color-picker--selected ieeesa-body-md-14\"\r\n *ngIf=\"isColorCodeLabelNeeded && defaultColor\"\r\n >{{ defaultColor }}</span\r\n >\r\n </div>\r\n <ieeesa-form-error [formGroup]=\"group\" [config]=\"config\"> </ieeesa-form-error>\r\n <ieeesa-form-support-text\r\n [formGroup]=\"group\"\r\n [config]=\"config\"\r\n ></ieeesa-form-support-text>\r\n</div>\r\n", styles: [".ieeesa-color-picker .preview{border-radius:0!important;box-shadow:none!important;padding:0!important}.ieeesa-color-picker .preview .preview-background{background-image:none!important}.ieeesa-color-picker .preview .circle{border-radius:0!important;height:30px!important;width:30px!important}.ieeesa-color-picker .preview .circle.colornull{background:linear-gradient(135deg,#ecececb3 0% 45%,#f4f3f3 50%,#ecececb3 55% 100%)!important}.ieeesa-color-picker__label-left{display:flex}.ieeesa-color-picker__label-top{display:block}.ieeesa-color-picker--selected{border:1px solid #000000;padding:6px 8px 6px 12px;border-radius:2px}.ieeesa-color-picker__toggle-icon{border:none;background:#fff}.ieeesa-color-picker__overlay .opened .colors .circle
|
|
3430
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ColorPickerComponent, isStandalone: true, selector: "ieeesa-color-picker", inputs: { defaultColor: "defaultColor", palette: "palette", overlayClassName: "overlayClassName", colorFormat: "colorFormat", colorAnimation: "colorAnimation", formControlName: "formControlName", paletteSelectLabel: "paletteSelectLabel", paletteCancelLabel: "paletteCancelLabel", colorPickerLabel: "colorPickerLabel", isColorCodeLabelNeeded: "isColorCodeLabelNeeded", isArrowIconNeeded: "isArrowIconNeeded", canHideTextInput: "canHideTextInput", canHideColorPicker: "canHideColorPicker" }, outputs: { colorPickerChange: "colorPickerChange", colorPickerSliderChange: "colorPickerSliderChange" }, viewQueries: [{ propertyName: "colorPickerDirective", first: true, predicate: NgxColorsTriggerDirective, descendants: true, static: true }], ngImport: i0, template: "<div\r\n [formGroup]=\"group\"\r\n [ngClass]=\"\r\n config?.isLabelAlignedLeft\r\n ? 'ieeesa-color-picker__label-left'\r\n : 'ieeesa-color-picker__label-top'\r\n \"\r\n>\r\n <mat-label\r\n class=\"ieeesa-body-sm-14 ieeesa-color-picker__label\"\r\n *ngIf=\"colorPickerLabel\"\r\n >{{ colorPickerLabel }}</mat-label\r\n >\r\n <div class=\"d-flex\">\r\n <ngx-colors\r\n class=\"ieeesa-color-picker\"\r\n ngx-colors-trigger\r\n [acceptLabel]=\"paletteSelectLabel\"\r\n [cancelLabel]=\"paletteCancelLabel\"\r\n [palette]=\"palette\"\r\n (input)=\"inputChange($event)\"\r\n (open)=\"onOpenPalette()\"\r\n (close)=\"onClosePalette()\"\r\n (slider)=\"onSliderChange($event)\"\r\n [overlayClassName]=\"overlayClassName\"\r\n [formControlName]=\"config.controlName\"\r\n [format]=\"colorFormat\"\r\n [hideTextInput]=\"canHideTextInput\"\r\n [colorsAnimation]=\"colorAnimation\"\r\n [hideColorPicker]=\"canHideColorPicker\"\r\n [ariaLabel]=\"colorPickerTexts?.ariaLabel?.colorPicker\"\r\n [ariaDescription]=\"colorPickerTexts?.ariaDescription\"\r\n >\r\n </ngx-colors>\r\n <button\r\n class=\"ieeesa-color-picker__toggle-icon\"\r\n *ngIf=\"isArrowIconNeeded\"\r\n type=\"button\"\r\n (click)=\"togglePalette()\"\r\n [attr.aria-label]=\"colorPickerTexts?.ariaLabel?.colorPicker\"\r\n [attr.aria-describedby]=\"colorPickerTexts?.ariaDescribedById\"\r\n >\r\n <i\r\n class=\"fa-solid\"\r\n [ngClass]=\"canShowPalette ? 'fa-caret-up' : 'fa-caret-down'\"\r\n ></i>\r\n </button>\r\n <span\r\n class=\"ieeesa-color-picker--selected ieeesa-body-md-14\"\r\n *ngIf=\"isColorCodeLabelNeeded && defaultColor\"\r\n >{{ defaultColor }}</span\r\n >\r\n </div>\r\n <ieeesa-form-error [formGroup]=\"group\" [config]=\"config\"> </ieeesa-form-error>\r\n <ieeesa-form-support-text\r\n [formGroup]=\"group\"\r\n [config]=\"config\"\r\n ></ieeesa-form-support-text>\r\n</div>\r\n", styles: [".ieeesa-color-picker .preview{border-radius:0!important;box-shadow:none!important;padding:0!important}.ieeesa-color-picker .preview .preview-background{background-image:none!important}.ieeesa-color-picker .preview .circle{border-radius:0!important;height:30px!important;width:30px!important}.ieeesa-color-picker .preview .circle.colornull{background:linear-gradient(135deg,#ecececb3 0% 45%,#f4f3f3 50%,#ecececb3 55% 100%)!important}.ieeesa-color-picker__label-left{display:flex}.ieeesa-color-picker__label-top{display:block}.ieeesa-color-picker--selected{border:1px solid #000000;padding:6px 8px 6px 12px;border-radius:2px}.ieeesa-color-picker__toggle-icon{border:none;background:#fff}.ieeesa-color-picker__overlay .opened{width:14.687em!important}.ieeesa-color-picker__overlay .opened .colors .circle{border-radius:0!important;height:30px!important;width:30px!important}.ieeesa-color-picker__overlay .opened .colors .circle.wrapper{flex-basis:30px!important}.ieeesa-color-picker__overlay .opened .colors .circle .selected{height:24px!important;width:24px!important;border-radius:0!important}.ieeesa-color-picker__overlay .opened button.select:focus,.ieeesa-color-picker__overlay .opened button.cancel:focus{border:3px solid #000000}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "directive", type: i4.MatLabel, selector: "mat-label" }, { kind: "ngmodule", type: NgxColorsModule }, { kind: "component", type: i5$4.NgxColorsComponent, selector: "ngx-colors" }, { kind: "directive", type: i5$4.NgxColorsTriggerDirective, selector: "[ngx-colors-trigger]", inputs: ["colorsAnimation", "palette", "format", "position", "hideTextInput", "hideColorPicker", "attachTo", "overlayClassName", "colorPickerControls", "acceptLabel", "cancelLabel"], outputs: ["change", "input", "slider", "close", "open"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: FormErrorComponent, selector: "ieeesa-form-error", inputs: ["formGroup", "config", "submitResponse"] }, { kind: "component", type: FormSupportTextComponent, selector: "ieeesa-form-support-text", inputs: ["formGroup", "config"], outputs: ["supportTextLinkClick"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
3422
3431
|
}
|
|
3423
3432
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ColorPickerComponent, decorators: [{
|
|
3424
3433
|
type: Component,
|
|
@@ -3430,7 +3439,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
3430
3439
|
ReactiveFormsModule,
|
|
3431
3440
|
FormErrorComponent,
|
|
3432
3441
|
FormSupportTextComponent,
|
|
3433
|
-
], encapsulation: ViewEncapsulation.None, template: "<div\r\n [formGroup]=\"group\"\r\n [ngClass]=\"\r\n config?.isLabelAlignedLeft\r\n ? 'ieeesa-color-picker__label-left'\r\n : 'ieeesa-color-picker__label-top'\r\n \"\r\n>\r\n <mat-label\r\n class=\"ieeesa-body-sm-14 ieeesa-color-picker__label\"\r\n *ngIf=\"colorPickerLabel\"\r\n >{{ colorPickerLabel }}</mat-label\r\n >\r\n <div class=\"d-flex\">\r\n <ngx-colors\r\n class=\"ieeesa-color-picker\"\r\n ngx-colors-trigger\r\n [acceptLabel]=\"paletteSelectLabel\"\r\n [cancelLabel]=\"paletteCancelLabel\"\r\n [palette]=\"palette\"\r\n (input)=\"inputChange($event)\"\r\n (open)=\"onOpenPalette()\"\r\n (close)=\"onClosePalette()\"\r\n (slider)=\"onSliderChange($event)\"\r\n [overlayClassName]=\"overlayClassName\"\r\n [formControlName]=\"config.controlName\"\r\n [format]=\"colorFormat\"\r\n [hideTextInput]=\"canHideTextInput\"\r\n [colorsAnimation]=\"colorAnimation\"\r\n [hideColorPicker]=\"canHideColorPicker\"\r\n [ariaLabel]=\"colorPickerTexts?.ariaLabel?.colorPicker\"\r\n [ariaDescription]=\"colorPickerTexts?.ariaDescription\"\r\n >\r\n </ngx-colors>\r\n <button\r\n class=\"ieeesa-color-picker__toggle-icon\"\r\n *ngIf=\"isArrowIconNeeded\"\r\n type=\"button\"\r\n (click)=\"togglePalette()\"\r\n [attr.aria-label]=\"colorPickerTexts?.ariaLabel?.colorPicker\"\r\n [attr.aria-describedby]=\"colorPickerTexts?.ariaDescribedById\"\r\n >\r\n <i\r\n class=\"fa-solid\"\r\n [ngClass]=\"canShowPalette ? 'fa-caret-up' : 'fa-caret-down'\"\r\n ></i>\r\n </button>\r\n <span\r\n class=\"ieeesa-color-picker--selected ieeesa-body-md-14\"\r\n *ngIf=\"isColorCodeLabelNeeded && defaultColor\"\r\n >{{ defaultColor }}</span\r\n >\r\n </div>\r\n <ieeesa-form-error [formGroup]=\"group\" [config]=\"config\"> </ieeesa-form-error>\r\n <ieeesa-form-support-text\r\n [formGroup]=\"group\"\r\n [config]=\"config\"\r\n ></ieeesa-form-support-text>\r\n</div>\r\n", styles: [".ieeesa-color-picker .preview{border-radius:0!important;box-shadow:none!important;padding:0!important}.ieeesa-color-picker .preview .preview-background{background-image:none!important}.ieeesa-color-picker .preview .circle{border-radius:0!important;height:30px!important;width:30px!important}.ieeesa-color-picker .preview .circle.colornull{background:linear-gradient(135deg,#ecececb3 0% 45%,#f4f3f3 50%,#ecececb3 55% 100%)!important}.ieeesa-color-picker__label-left{display:flex}.ieeesa-color-picker__label-top{display:block}.ieeesa-color-picker--selected{border:1px solid #000000;padding:6px 8px 6px 12px;border-radius:2px}.ieeesa-color-picker__toggle-icon{border:none;background:#fff}.ieeesa-color-picker__overlay .opened .colors .circle
|
|
3442
|
+
], encapsulation: ViewEncapsulation.None, template: "<div\r\n [formGroup]=\"group\"\r\n [ngClass]=\"\r\n config?.isLabelAlignedLeft\r\n ? 'ieeesa-color-picker__label-left'\r\n : 'ieeesa-color-picker__label-top'\r\n \"\r\n>\r\n <mat-label\r\n class=\"ieeesa-body-sm-14 ieeesa-color-picker__label\"\r\n *ngIf=\"colorPickerLabel\"\r\n >{{ colorPickerLabel }}</mat-label\r\n >\r\n <div class=\"d-flex\">\r\n <ngx-colors\r\n class=\"ieeesa-color-picker\"\r\n ngx-colors-trigger\r\n [acceptLabel]=\"paletteSelectLabel\"\r\n [cancelLabel]=\"paletteCancelLabel\"\r\n [palette]=\"palette\"\r\n (input)=\"inputChange($event)\"\r\n (open)=\"onOpenPalette()\"\r\n (close)=\"onClosePalette()\"\r\n (slider)=\"onSliderChange($event)\"\r\n [overlayClassName]=\"overlayClassName\"\r\n [formControlName]=\"config.controlName\"\r\n [format]=\"colorFormat\"\r\n [hideTextInput]=\"canHideTextInput\"\r\n [colorsAnimation]=\"colorAnimation\"\r\n [hideColorPicker]=\"canHideColorPicker\"\r\n [ariaLabel]=\"colorPickerTexts?.ariaLabel?.colorPicker\"\r\n [ariaDescription]=\"colorPickerTexts?.ariaDescription\"\r\n >\r\n </ngx-colors>\r\n <button\r\n class=\"ieeesa-color-picker__toggle-icon\"\r\n *ngIf=\"isArrowIconNeeded\"\r\n type=\"button\"\r\n (click)=\"togglePalette()\"\r\n [attr.aria-label]=\"colorPickerTexts?.ariaLabel?.colorPicker\"\r\n [attr.aria-describedby]=\"colorPickerTexts?.ariaDescribedById\"\r\n >\r\n <i\r\n class=\"fa-solid\"\r\n [ngClass]=\"canShowPalette ? 'fa-caret-up' : 'fa-caret-down'\"\r\n ></i>\r\n </button>\r\n <span\r\n class=\"ieeesa-color-picker--selected ieeesa-body-md-14\"\r\n *ngIf=\"isColorCodeLabelNeeded && defaultColor\"\r\n >{{ defaultColor }}</span\r\n >\r\n </div>\r\n <ieeesa-form-error [formGroup]=\"group\" [config]=\"config\"> </ieeesa-form-error>\r\n <ieeesa-form-support-text\r\n [formGroup]=\"group\"\r\n [config]=\"config\"\r\n ></ieeesa-form-support-text>\r\n</div>\r\n", styles: [".ieeesa-color-picker .preview{border-radius:0!important;box-shadow:none!important;padding:0!important}.ieeesa-color-picker .preview .preview-background{background-image:none!important}.ieeesa-color-picker .preview .circle{border-radius:0!important;height:30px!important;width:30px!important}.ieeesa-color-picker .preview .circle.colornull{background:linear-gradient(135deg,#ecececb3 0% 45%,#f4f3f3 50%,#ecececb3 55% 100%)!important}.ieeesa-color-picker__label-left{display:flex}.ieeesa-color-picker__label-top{display:block}.ieeesa-color-picker--selected{border:1px solid #000000;padding:6px 8px 6px 12px;border-radius:2px}.ieeesa-color-picker__toggle-icon{border:none;background:#fff}.ieeesa-color-picker__overlay .opened{width:14.687em!important}.ieeesa-color-picker__overlay .opened .colors .circle{border-radius:0!important;height:30px!important;width:30px!important}.ieeesa-color-picker__overlay .opened .colors .circle.wrapper{flex-basis:30px!important}.ieeesa-color-picker__overlay .opened .colors .circle .selected{height:24px!important;width:24px!important;border-radius:0!important}.ieeesa-color-picker__overlay .opened button.select:focus,.ieeesa-color-picker__overlay .opened button.cancel:focus{border:3px solid #000000}\n"] }]
|
|
3434
3443
|
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: FormUtilityService }]; }, propDecorators: { colorPickerDirective: [{
|
|
3435
3444
|
type: ViewChild,
|
|
3436
3445
|
args: [NgxColorsTriggerDirective, { static: true }]
|