@energycap/components 0.39.16-ECAP-23123-Help-Popover-On-Controls.20240513-1146 → 0.39.16-ECAP-23123-Help-Popover-On-Controls.20240513-1405

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.
@@ -187,10 +187,10 @@ export class FileUploadComponent extends FormControlBase {
187
187
  }
188
188
  }
189
189
  FileUploadComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FileUploadComponent, deps: [{ token: i1.ValidationMessageService }, { token: i2.FormGroupHelper }], target: i0.ɵɵFactoryTarget.Component });
190
- FileUploadComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: FileUploadComponent, selector: "ec-file-upload", inputs: { placeholder: "placeholder", fileType: "fileType", fileOutput: "fileOutput", customExtensions: "customExtensions", onFileSelected: "onFileSelected", onMultipleFilesSelected: "onMultipleFilesSelected", displayType: "displayType", buttonLabel: "buttonLabel", buttonType: "buttonType", multiSelect: "multiSelect" }, viewQueries: [{ propertyName: "fileInput", first: true, predicate: ["fileInput"], descendants: true, read: ElementRef, static: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<ec-form-group [label]=\"label\"\r\n [formGroup]=\"formModel\"\r\n class=\"mb-0\">\r\n <div class=\"d-flex control-group\">\r\n <div class=\"d-flex flex-grow position-relative\">\r\n <input #fileInput\r\n id=\"{{inputId}}_input\"\r\n type=\"file\"\r\n tabindex=\"-1\"\r\n [attr.accept]=\"fileTypeAccept\"\r\n (change)=\"fileChange($event.target.files)\"\r\n [class.has-value]=\"displayType === 'file' ? formModel?.get('name').value : undefined\"\r\n [attr.multiple]=\"multiSelect ? 'multiple' : undefined\">\r\n <ec-form-control *ngIf=\"displayType === 'file'\"\r\n id=\"{{inputId}}_formControl\"\r\n class=\"text-truncate\"\r\n [required]=\"required\"\r\n [pending]=\"pending\">\r\n <input id=\"{{inputId}}_name\"\r\n [formControl]=\"formModel?.get('name')\"\r\n type=\"text\"\r\n [placeholder]=\"placeholder\"\r\n [tabindex]=\"-1\">\r\n </ec-form-control>\r\n </div>\r\n <ec-button *ngIf=\"displayType === 'file'\"\r\n #browseBtn\r\n id=\"{{inputId}}_browseBtn\"\r\n (clicked)=\"fileInput.click()\"\r\n type=\"secondary\"\r\n [tabindex]=\"tabindex\"\r\n [disabled]=\"formModel?.get('name').disabled\"\r\n label=\"Browse\"\r\n [autofocus]=\"autofocus\">\r\n </ec-button>\r\n </div>\r\n <ec-button *ngIf=\"displayType === 'button'\"\r\n id=\"{{inputId}}_btn\"\r\n [pending]=\"pending\"\r\n [type]=\"buttonType\"\r\n [label]=\"buttonLabel ?? 'Browse_TC' | translate\"\r\n (clicked)=\"fileInput.click()\"\r\n style=\"width: 100%;\">\r\n </ec-button>\r\n</ec-form-group>", styles: [":host{display:block;margin-bottom:1rem}ec-form-control{margin-bottom:0}ec-form-control ::ng-deep>.ec-focus-ring{display:none!important}input[type=file]{opacity:0;display:block;position:absolute;top:0;left:0;width:100%;height:100%;z-index:1;cursor:pointer}input[type=file].has-value{width:calc(100% - 1.5rem)}ec-button{--ec-button-border-color-secondary: var(--ec-form-control-border-color);--ec-button-color-icon-secondary: var(--ec-color-icon)}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i5.ButtonComponent, selector: "ec-button", inputs: ["id", "disabled", "icon", "label", "badge", "tabindex", "type", "pending", "pendingIcon", "customTemplate", "isSubmit", "autofocus"], outputs: ["clicked"] }, { kind: "component", type: i6.FormControlComponent, selector: "ec-form-control", inputs: ["id", "icon", "actionIcon", "showClear", "pending", "required", "readonly"], outputs: ["actionClicked"] }, { kind: "component", type: i7.FormGroupComponent, selector: "ec-form-group", inputs: ["id", "label", "formGroup", "labelPosition", "overrideValidationError", "hideValidationMessage"] }, { kind: "pipe", type: i8.TranslatePipe, name: "translate" }] });
190
+ FileUploadComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: FileUploadComponent, selector: "ec-file-upload", inputs: { placeholder: "placeholder", fileType: "fileType", fileOutput: "fileOutput", customExtensions: "customExtensions", onFileSelected: "onFileSelected", onMultipleFilesSelected: "onMultipleFilesSelected", displayType: "displayType", buttonLabel: "buttonLabel", buttonType: "buttonType", multiSelect: "multiSelect" }, viewQueries: [{ propertyName: "fileInput", first: true, predicate: ["fileInput"], descendants: true, read: ElementRef, static: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<ec-form-group [label]=\"label\"\r\n [formGroup]=\"formModel\"\r\n [helpPopover]=\"helpPopover\"\r\n class=\"mb-0\">\r\n <div class=\"d-flex control-group\">\r\n <div class=\"d-flex flex-grow position-relative\">\r\n <input #fileInput\r\n id=\"{{inputId}}_input\"\r\n type=\"file\"\r\n tabindex=\"-1\"\r\n [attr.accept]=\"fileTypeAccept\"\r\n (change)=\"fileChange($event.target.files)\"\r\n [class.has-value]=\"displayType === 'file' ? formModel?.get('name').value : undefined\"\r\n [attr.multiple]=\"multiSelect ? 'multiple' : undefined\">\r\n <ec-form-control *ngIf=\"displayType === 'file'\"\r\n id=\"{{inputId}}_formControl\"\r\n class=\"text-truncate\"\r\n [required]=\"required\"\r\n [pending]=\"pending\">\r\n <input id=\"{{inputId}}_name\"\r\n [formControl]=\"formModel?.get('name')\"\r\n type=\"text\"\r\n [placeholder]=\"placeholder\"\r\n [tabindex]=\"-1\">\r\n </ec-form-control>\r\n </div>\r\n <ec-button *ngIf=\"displayType === 'file'\"\r\n #browseBtn\r\n id=\"{{inputId}}_browseBtn\"\r\n (clicked)=\"fileInput.click()\"\r\n type=\"secondary\"\r\n [tabindex]=\"tabindex\"\r\n [disabled]=\"formModel?.get('name').disabled\"\r\n label=\"Browse\"\r\n [autofocus]=\"autofocus\">\r\n </ec-button>\r\n </div>\r\n <ec-button *ngIf=\"displayType === 'button'\"\r\n id=\"{{inputId}}_btn\"\r\n [pending]=\"pending\"\r\n [type]=\"buttonType\"\r\n [label]=\"buttonLabel ?? 'Browse_TC' | translate\"\r\n (clicked)=\"fileInput.click()\"\r\n style=\"width: 100%;\">\r\n </ec-button>\r\n</ec-form-group>", styles: [":host{display:block;margin-bottom:1rem}ec-form-control{margin-bottom:0}ec-form-control ::ng-deep>.ec-focus-ring{display:none!important}input[type=file]{opacity:0;display:block;position:absolute;top:0;left:0;width:100%;height:100%;z-index:1;cursor:pointer}input[type=file].has-value{width:calc(100% - 1.5rem)}ec-button{--ec-button-border-color-secondary: var(--ec-form-control-border-color);--ec-button-color-icon-secondary: var(--ec-color-icon)}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i5.ButtonComponent, selector: "ec-button", inputs: ["id", "disabled", "icon", "label", "badge", "tabindex", "type", "pending", "pendingIcon", "customTemplate", "isSubmit", "autofocus"], outputs: ["clicked"] }, { kind: "component", type: i6.FormControlComponent, selector: "ec-form-control", inputs: ["id", "icon", "actionIcon", "showClear", "pending", "required", "readonly"], outputs: ["actionClicked"] }, { kind: "component", type: i7.FormGroupComponent, selector: "ec-form-group", inputs: ["id", "label", "formGroup", "labelPosition", "overrideValidationError", "hideValidationMessage", "helpPopover"] }, { kind: "pipe", type: i8.TranslatePipe, name: "translate" }] });
191
191
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FileUploadComponent, decorators: [{
192
192
  type: Component,
193
- args: [{ selector: "ec-file-upload", template: "<ec-form-group [label]=\"label\"\r\n [formGroup]=\"formModel\"\r\n class=\"mb-0\">\r\n <div class=\"d-flex control-group\">\r\n <div class=\"d-flex flex-grow position-relative\">\r\n <input #fileInput\r\n id=\"{{inputId}}_input\"\r\n type=\"file\"\r\n tabindex=\"-1\"\r\n [attr.accept]=\"fileTypeAccept\"\r\n (change)=\"fileChange($event.target.files)\"\r\n [class.has-value]=\"displayType === 'file' ? formModel?.get('name').value : undefined\"\r\n [attr.multiple]=\"multiSelect ? 'multiple' : undefined\">\r\n <ec-form-control *ngIf=\"displayType === 'file'\"\r\n id=\"{{inputId}}_formControl\"\r\n class=\"text-truncate\"\r\n [required]=\"required\"\r\n [pending]=\"pending\">\r\n <input id=\"{{inputId}}_name\"\r\n [formControl]=\"formModel?.get('name')\"\r\n type=\"text\"\r\n [placeholder]=\"placeholder\"\r\n [tabindex]=\"-1\">\r\n </ec-form-control>\r\n </div>\r\n <ec-button *ngIf=\"displayType === 'file'\"\r\n #browseBtn\r\n id=\"{{inputId}}_browseBtn\"\r\n (clicked)=\"fileInput.click()\"\r\n type=\"secondary\"\r\n [tabindex]=\"tabindex\"\r\n [disabled]=\"formModel?.get('name').disabled\"\r\n label=\"Browse\"\r\n [autofocus]=\"autofocus\">\r\n </ec-button>\r\n </div>\r\n <ec-button *ngIf=\"displayType === 'button'\"\r\n id=\"{{inputId}}_btn\"\r\n [pending]=\"pending\"\r\n [type]=\"buttonType\"\r\n [label]=\"buttonLabel ?? 'Browse_TC' | translate\"\r\n (clicked)=\"fileInput.click()\"\r\n style=\"width: 100%;\">\r\n </ec-button>\r\n</ec-form-group>", styles: [":host{display:block;margin-bottom:1rem}ec-form-control{margin-bottom:0}ec-form-control ::ng-deep>.ec-focus-ring{display:none!important}input[type=file]{opacity:0;display:block;position:absolute;top:0;left:0;width:100%;height:100%;z-index:1;cursor:pointer}input[type=file].has-value{width:calc(100% - 1.5rem)}ec-button{--ec-button-border-color-secondary: var(--ec-form-control-border-color);--ec-button-color-icon-secondary: var(--ec-color-icon)}\n"] }]
193
+ args: [{ selector: "ec-file-upload", template: "<ec-form-group [label]=\"label\"\r\n [formGroup]=\"formModel\"\r\n [helpPopover]=\"helpPopover\"\r\n class=\"mb-0\">\r\n <div class=\"d-flex control-group\">\r\n <div class=\"d-flex flex-grow position-relative\">\r\n <input #fileInput\r\n id=\"{{inputId}}_input\"\r\n type=\"file\"\r\n tabindex=\"-1\"\r\n [attr.accept]=\"fileTypeAccept\"\r\n (change)=\"fileChange($event.target.files)\"\r\n [class.has-value]=\"displayType === 'file' ? formModel?.get('name').value : undefined\"\r\n [attr.multiple]=\"multiSelect ? 'multiple' : undefined\">\r\n <ec-form-control *ngIf=\"displayType === 'file'\"\r\n id=\"{{inputId}}_formControl\"\r\n class=\"text-truncate\"\r\n [required]=\"required\"\r\n [pending]=\"pending\">\r\n <input id=\"{{inputId}}_name\"\r\n [formControl]=\"formModel?.get('name')\"\r\n type=\"text\"\r\n [placeholder]=\"placeholder\"\r\n [tabindex]=\"-1\">\r\n </ec-form-control>\r\n </div>\r\n <ec-button *ngIf=\"displayType === 'file'\"\r\n #browseBtn\r\n id=\"{{inputId}}_browseBtn\"\r\n (clicked)=\"fileInput.click()\"\r\n type=\"secondary\"\r\n [tabindex]=\"tabindex\"\r\n [disabled]=\"formModel?.get('name').disabled\"\r\n label=\"Browse\"\r\n [autofocus]=\"autofocus\">\r\n </ec-button>\r\n </div>\r\n <ec-button *ngIf=\"displayType === 'button'\"\r\n id=\"{{inputId}}_btn\"\r\n [pending]=\"pending\"\r\n [type]=\"buttonType\"\r\n [label]=\"buttonLabel ?? 'Browse_TC' | translate\"\r\n (clicked)=\"fileInput.click()\"\r\n style=\"width: 100%;\">\r\n </ec-button>\r\n</ec-form-group>", styles: [":host{display:block;margin-bottom:1rem}ec-form-control{margin-bottom:0}ec-form-control ::ng-deep>.ec-focus-ring{display:none!important}input[type=file]{opacity:0;display:block;position:absolute;top:0;left:0;width:100%;height:100%;z-index:1;cursor:pointer}input[type=file].has-value{width:calc(100% - 1.5rem)}ec-button{--ec-button-border-color-secondary: var(--ec-form-control-border-color);--ec-button-color-icon-secondary: var(--ec-color-icon)}\n"] }]
194
194
  }], ctorParameters: function () { return [{ type: i1.ValidationMessageService }, { type: i2.FormGroupHelper }]; }, propDecorators: { placeholder: [{
195
195
  type: Input
196
196
  }], fileType: [{
@@ -215,4 +215,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
215
215
  type: ViewChild,
216
216
  args: ["fileInput", { read: ElementRef, static: true }]
217
217
  }] } });
218
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS11cGxvYWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvbGliL2NvbnRyb2xzL2ZpbGUtdXBsb2FkL2ZpbGUtdXBsb2FkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9jb250cm9scy9maWxlLXVwbG9hZC9maWxlLXVwbG9hZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQW9DLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxRyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQWUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHM0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNCQUFzQixDQUFDOzs7Ozs7Ozs7O0FBS3ZELE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHO0lBQ2hDLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQztJQUNiLEtBQUssRUFBRSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUM7Q0FDekIsQ0FBQztBQU9GLE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxlQUFlO0lBRXRELGdFQUFnRTtJQUN6RCxNQUFNLENBQUMsWUFBWSxDQUN4QixVQUF5QixFQUN6QixXQUFvQixLQUFLO1FBRXpCLElBQUksU0FBUyxHQUFHLElBQUksZ0JBQWdCLENBQUM7WUFDbkMsSUFBSSxFQUFFLElBQUksa0JBQWtCLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsRUFBRSxVQUFVLENBQUM7WUFDN0UsSUFBSSxFQUFFLElBQUksa0JBQWtCLENBQUMsRUFBRSxLQUFLLEVBQUUs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c0JBQTdCLEtBQUs7Z0JBT1UsdUJBQXVCO3NCQUF0QyxLQUFLO2dCQU9VLFdBQVc7c0JBQTFCLEtBQUs7Z0JBS1UsV0FBVztzQkFBMUIsS0FBSztnQkFLVSxVQUFVO3NCQUF6QixLQUFLO2dCQUtVLFdBQVc7c0JBQTFCLEtBQUs7Z0JBRTZELFNBQVM7c0JBQTNFLFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIFNpbXBsZUNoYW5nZXMsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBVbnR5cGVkRm9ybUNvbnRyb2wsIFVudHlwZWRGb3JtR3JvdXAsIFZhbGlkYXRvckZuIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IFZhbGlkYXRpb25NZXNzYWdlU2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvdmFsaWRhdGlvbi1tZXNzYWdlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBGb3JtR3JvdXBIZWxwZXIgfSBmcm9tICcuLi8uLi9zaGFyZWQvZm9ybS1ncm91cC5oZWxwZXInO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbEJhc2UgfSBmcm9tICcuLi9mb3JtLWNvbnRyb2wtYmFzZSc7XHJcblxyXG5leHBvcnQgdHlwZSBGaWxlVHlwZSA9ICd6aXAnIHwgJ2V4Y2VsJyB8ICdjdXN0b20nO1xyXG5leHBvcnQgdHlwZSBGaWxlT3V0cHV0ID0gJ3JhdycgfCAnYmFzZTY0JztcclxuXHJcbmV4cG9ydCBjb25zdCBGaWxlVHlwZUV4dGVuc2lvbnMgPSB7XHJcbiAgemlwOiBbJy56aXAnXSxcclxuICBleGNlbDogWycueGxzJywgJy54bHN4J11cclxufTtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBcImVjLWZpbGUtdXBsb2FkXCIsXHJcbiAgdGVtcGxhdGVVcmw6IFwiLi9maWxlLXVwbG9hZC5jb21wb25lbnQuaHRtbFwiLFxyXG4gIHN0eWxlVXJsczogW1wiLi9maWxlLXVwbG9hZC5jb21wb25lbnQuc2Nzc1wiXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRmlsZVVwbG9hZENvbXBvbmVudCBleHRlbmRzIEZvcm1Db250cm9sQmFzZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcclxuXHJcbiAgLy8gc3RhdGljIGNsYXNzIHRvIGNyZWF0ZSB0aGUgZm9ybSBncm91cCBmcm9tIGEgcGFyZW50IGNvbXBvbmVudFxyXG4gIHB1YmxpYyBzdGF0aWMgZ2V0Rm9ybU1vZGVsKFxyXG4gICAgdmFsaWRhdG9yczogVmFsaWRhdG9yRm5bXSxcclxuICAgIGRpc2FibGVkOiBib29sZWFuID0gZmFsc2VcclxuICApOiBVbnR5cGVkRm9ybUdyb3VwIHtcclxuICAgIGxldCBmb3JtR3JvdXAgPSBuZXcgVW50eXBlZEZvcm1Hcm91cCh7XHJcbiAgICAgIGZpbGU6IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woeyB2YWx1ZTogbnVsbCwgZGlzYWJsZWQ6IGRpc2FibGVkIH0sIHZhbGlkYXRvcnMpLFxyXG4gICAgICBuYW1lOiBuZXcgVW50eXBlZEZvcm1Db250cm9sKHsgdmFsdWU6IG51bGwsIGRpc2FibGVkOiBkaXNhYmxlZCB9LCB2YWxpZGF0b3JzKSxcclxuICAgICAgYmFzZTY0RmlsZVN0cmluZzogbmV3IFVudHlwZWRGb3JtQ29udHJvbChudWxsKSxcclxuICAgICAgdXBsb2FkUmVzdWx0OiBuZXcgVW50eXBlZEZvcm1Db250cm9sKG51bGwpLFxyXG4gICAgfSk7XHJcbiAgICBpZiAoZGlzYWJsZWQpIHtcclxuICAgICAgZm9ybUdyb3VwLmRpc2FibGUoKTtcclxuICAgIH1cclxuICAgIHJldHVybiBmb3JtR3JvdXA7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUaGUgdmFsdWUgb2YgdGhlIHRleHRib3ggaW5wdXQncyBwbGFjZWhvbGRlclxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBwbGFjZWhvbGRlcj86IHN0cmluZyA9IFwiQ2hvb3NlIGZpbGUuLi5cIjtcclxuXHJcbiAgLyoqIENvbW1vbiBleHRlbnNpb25zIGZvciBhIGZpbGUgYnJvd3NpbmcgZGlhbG9nXHJcbiAgICogIE5vdGU6IEVkZ2UgZG9lcyBub3Qgc3VwcG9ydCB0aGUgYWNjZXB0IGF0dHJpYnV0ZSBvbiBmaWxlIGlucHV0cywgdGhlcmVmb3IgYWxsIGZpbGUgdHlwZXNcclxuICAgKiAgICAgICAgd2lsbCBiZSBzaG93bi4gIEZpcmVmb3ggYW5kIENocm9tZSBib3RoIHN1cHBvcnQgdGhpcyBmZWF0dXJlLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBmaWxlVHlwZT86IEZpbGVUeXBlIHwgdW5kZWZpbmVkO1xyXG5cclxuICAvKipcclxuICAgKiBGaWxlIG91dHB1dCwgZGV0ZXJtaW5lcyB3aGljaCBwcm9wZXJ0aWVzIGFyZSBzdXBwbGllZCBvbiB0aGUgZm9ybU1vZGVsXHJcbiAgICovXHJcbiAgQElucHV0KCkgcHVibGljIGZpbGVPdXRwdXQ/OiBGaWxlT3V0cHV0ID0gJ2Jhc2U2NCc7XHJcblxyXG4gIC8qKiBJZiBmaWxlVHlwZSBpcyBzZXQgdG8gY3VzdG9tIHNldCB0aGUgYWNjZXB0YWJsZSBmaWxlIHR5cGVzIGJhc2VkIG9uIHRoZSBjdXN0b20gYXJyYXkgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgY3VzdG9tRXh0ZW5zaW9ucz86IEFycmF5PHN0cmluZz4gfCB1bmRlZmluZWQ7XHJcblxyXG4gIC8qKlxyXG4gICAqIE9wdGlvbmFsIGNhbGxiYWNrIHN1cHBvcnRlZCBpZiB0aGUgaG9zdGluZyBwYWdlIG5lZWRzIHRvIHByb2Nlc3MgdGhlIGZpbGUgYmVmb3JlXHJcbiAgICogc2V0dGluZyB0aGUgZm9ybU1vZGVsIHdpdGggdGhlIGZpbGUgaW5mb3JtYXRpb24uIElmIHRoZSBwcm9taXNlIHJlc29sdmVzIGl0IHdpbGwgY29udGludWVcclxuICAgKiBhbmQgc2V0IHRoZSBmaWxlIG5hbWUgYW5kIGNvbnRlbnRzIHRvIHRoZSBmb3JtTW9kZWwsIG90aGVyd2lzZSBvbiBmYWlsdXJlIGl0J2xsIGRvIG5vdGhpbmcuXHJcbiAgICovXHJcbiAgQElucHV0KCkgcHVibGljIG9uRmlsZVNlbGVjdGVkPzogKGZpbGU6IEZpbGUpID0+IFByb21pc2U8YW55PjtcclxuXHJcbiAgLyoqXHJcbiAgICogT3B0aW9uYWwgY2FsbGJhY2sgc3VwcG9ydGVkIGZvciB3aGVuIHRoZSBob3N0aW5nIHBhZ2UgbmVlZHMgdG8gcHJvY2VzcyBtdWx0aXBsZSBmaWxlc1xyXG4gICAqIFdlIHNpbXBseSBtYXAgdGhlIEZpbGVMaXN0IHRvIGFuIGFycmF5IG9mIEZpbGUgb2JqZWN0cyBhbmQgcGFzcyB0aGF0IGFycmF5IHRvIHRoZSBcclxuICAgKiBjYWxsYmFjayBhbmQgbGV0IHRoZSBob3N0aW5nIHBhZ2UgaGFuZGxlIHRoZSBwcm9jZXNzaW5nXHJcbiAgICovXHJcbiAgQElucHV0KCkgcHVibGljIG9uTXVsdGlwbGVGaWxlc1NlbGVjdGVkPzogKGZpbGVzOiBGaWxlW10pID0+IFByb21pc2U8YW55PjtcclxuXHJcbiAgLyoqIFxyXG4gICAqIE9wdGlvbmFsIGRpc3BsYXkgdHlwZSB0aGF0IGNvbnRyb2xzIHdoZXRoZXIgdGhlIGZpbGUgaW5wdXQgdGV4dGJveCBpcyBkaXNwbGF5ZWQgb3JcclxuICAgKiBzaW1wbHkgYSBidXR0b24gdGhlIHVzZXIgY2xpY2tzIHRvIGxhdW5jaCB0aGUgT1MgZmlsZSBzdG9yYWdlIGRpYWxvZy5cclxuICAgKiBEZWZhdWx0OiBmaWxlXHJcbiAgICovXHJcbiAgQElucHV0KCkgcHVibGljIGRpc3BsYXlUeXBlPzogJ2ZpbGUnIHwgJ2J1dHRvbicgPSAnZmlsZSc7XHJcblxyXG4gIC8qKiBcclxuICAgKiBXaGVuIGRpc3BsYXkgdHlwZSBpcyBzZXQgdG8gYnV0dG9uIHRoaXMgcHJvcGVydHkgd2lsbCBjb250cm9sIHRoZSBidXR0b24gbGFiZWxcclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgYnV0dG9uTGFiZWw/OiBzdHJpbmc7XHJcblxyXG4gIC8qKiBcclxuICAgKiBXaGVuIGRpc3BsYXkgdHlwZSBpcyBzZXQgdG8gYnV0dG9uIHRoaXMgcHJvcGVydHkgd2lsbCBjb250cm9sIHRoZSBidXR0b24gdHlwZVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBidXR0b25UeXBlPzogc3RyaW5nID0gJ3ByaW1hcnknO1xyXG5cclxuICAvKipcclxuICAgKiBPcHRpb25hbCBwcm9wZXJ0eSB0byBjb250cm9sIHdoZXRoZXIgdGhlIHVzZXIgY2FuIHNlbGVjdCBtdWx0aXBsZSBmaWxlc1xyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBtdWx0aVNlbGVjdD86IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQFZpZXdDaGlsZChcImZpbGVJbnB1dFwiLCB7IHJlYWQ6IEVsZW1lbnRSZWYsIHN0YXRpYzogdHJ1ZSB9KSBwdWJsaWMgZmlsZUlucHV0PzogRWxlbWVudFJlZjtcclxuXHJcbiAgLyoqIFByb3BlcnR5IGJvdW5kIHRvIHRoZSBmaWxlIGlucHV0IHRvIGZpbHRlciB3aGF0IGZpbGUgdHlwZXMgYXJlIHNob3duIGluIHRoZSBkaWFsb2cgKi9cclxuICBwdWJsaWMgZmlsZVR5cGVBY2NlcHQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcm90ZWN0ZWQgdmFsaWRhdGlvbk1lc3NhZ2VTZXJ2aWNlOiBWYWxpZGF0aW9uTWVzc2FnZVNlcnZpY2UsXHJcbiAgICBwcm90ZWN0ZWQgZm9ybUdyb3VwSGVscGVyOiBGb3JtR3JvdXBIZWxwZXIsXHJcbiAgKSB7XHJcbiAgICBzdXBlcih2YWxpZGF0aW9uTWVzc2FnZVNlcnZpY2UsIGZvcm1Hcm91cEhlbHBlcik7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgc3VwZXIubmdPbkNoYW5nZXMoY2hhbmdlcyk7XHJcblxyXG4gICAgdGhpcy51cGRhdGVGaWxlVHlwZUFjY2VwdCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgc3VwZXIubmdPbkluaXQoKTtcclxuXHJcbiAgICAvLyBXYXRjaCBmb3IgbmFtZSB0byBjaGFuZ2UsIGlmIHRoZSB2YWx1ZSBpcyBjbGVhcmVkIHdlIHdpbGwgY2xlYXIgdGhlIG90aGVyXHJcbiAgICAvLyBzdXBwb3J0aW5nIG1vZGVsIHByb3BlcnRpZXMuIFRoZSBuYW1lIGNhbiBiZSBjbGVhcmVkIGJ5IHRoZSB1c2VyIG1hbnVhbGx5IG9yIHZpYVxyXG4gICAgLy8gdGhlIGNsZWFyIGJ1dHRvblxyXG4gICAgdGhpcy5mb3JtTW9kZWw/LmdldCgnbmFtZScpPy52YWx1ZUNoYW5nZXMucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuY29tcG9uZW50RGVzdHJveWVkKVxyXG4gICAgKS5zdWJzY3JpYmUodmFsdWUgPT4ge1xyXG4gICAgICBpZiAoIXZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5mb3JtTW9kZWwucGF0Y2hWYWx1ZSh7XHJcbiAgICAgICAgICBmaWxlOiBudWxsLFxyXG4gICAgICAgICAgbmFtZTogbnVsbCxcclxuICAgICAgICAgIGJhc2U2NEZpbGVTdHJpbmc6IG51bGwsXHJcbiAgICAgICAgICB1cGxvYWRSZXN1bHQ6IG51bGxcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZmlsZUNoYW5nZShmaWxlczogRmlsZUxpc3QpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICh0aGlzLm11bHRpU2VsZWN0KSB7XHJcbiAgICAgIHRoaXMuaGFuZGxlTXVsdGlwbGVGaWxlcyhmaWxlcyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBmaWxlOiBGaWxlIHwgbnVsbCA9IGZpbGVzLml0ZW0oMCk7XHJcbiAgICAgIGlmIChmaWxlKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5yZWFkRmlsZShmaWxlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIENsZWFyIHRoZSBmaWxlIGlucHV0cyB2YWx1ZSwgdGhpcyB3aWxsIGFsbG93IHRoZSB1c2VyIHRvIHBpY2sgdGhlIHNhbWUgZmlsZW5hbWVzIGFnYWluXHJcbiAgICAvLyBhbmQgY2F1c2UgZmlsZUNoYW5nZSB0byByZS10cmlnZ2VyLlxyXG4gICAgaWYgKHRoaXMuZmlsZUlucHV0KSB7XHJcbiAgICAgIHRoaXMuZmlsZUlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSAnJztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENoZWNrcyB0aGUgZmlsZSB0eXBlIGFuZCB1cGRhdGVzIHRoZSBmaWxlIHR5cGUgYWNjZXB0IHByb3BlcnR5LiBUaGlzIGlzIHdoYXQgZGV0ZXJtaW5lcyB0aGUgZmlsZVxyXG4gICAqIHR5cGUgY2hvaWNlcyB0aGF0IHRoZSB1c2VyIHdpbGwgYmUgbGltaXRlZCB0byBpbiB0aGUgZmlsZSBicm93c2UgZGlhbG9nXHJcbiAgICovXHJcbiAgcHJpdmF0ZSB1cGRhdGVGaWxlVHlwZUFjY2VwdCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmZpbGVUeXBlKSB7XHJcbiAgICAgIGlmICh0aGlzLmZpbGVUeXBlICE9PSBcImN1c3RvbVwiKSB7XHJcbiAgICAgICAgdGhpcy5maWxlVHlwZUFjY2VwdCA9IEZpbGVUeXBlRXh0ZW5zaW9uc1t0aGlzLmZpbGVUeXBlXS5qb2luKFwiLFwiKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAodGhpcy5jdXN0b21FeHRlbnNpb25zKSB7XHJcbiAgICAgICAgICB0aGlzLmZpbGVUeXBlQWNjZXB0ID0gdGhpcy5jdXN0b21FeHRlbnNpb25zLmpvaW4oXCIsXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVGFrZSBhIGZpbGUgdGhhdCB3YXMgc2VsZWN0ZWQgYnkgdGhlIHVzZXIgYW5kIHByb2Nlc3MvcGF0Y2ggb3VyIGZvcm0gbW9kZWxcclxuICAgKiBJZiB0aGUgaG9zdCBjb21wb25lbnQgcmVxdWlyZXMgYW4gYWN0aW9uIHRvIG9jY3VyIHdpdGggdGhlIGZpbGUgcHJpb3IgdG8gdGhlIHBhdGNoIGl0IHdpbGwgY2FsbFxyXG4gICAqIGFuZCB3YWl0IGZvciBpdCB0byByZXR1cm4uXHJcbiAgICogQHBhcmFtIGZpbGUgXHJcbiAgICogQHBhcmFtIGJhc2U2NEZpbGVTdHJpbmcgT3B0aW9uYWw6IFdpbGwgaGF2ZSBhIHZhbHVlIHByb3ZpZGVkIGlmIHRoZSBmaWxlT3V0cHV0IGlzIHNldCB0byBiYXNlNjRcclxuICAgKi9cclxuICBwcml2YXRlIGFzeW5jIHByb2Nlc3NGaWxlKGZpbGU6IEZpbGUsIGJhc2U2NEZpbGVTdHJpbmc/OiBzdHJpbmcgfCB1bmRlZmluZWQpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICh0aGlzLm9uRmlsZVNlbGVjdGVkKSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IHRoaXMub25GaWxlU2VsZWN0ZWQoZmlsZSk7XHJcbiAgICAgICAgdGhpcy5wYXRjaEZpbGVSZXN1bHQoZmlsZSwgYmFzZTY0RmlsZVN0cmluZywgcmVzdWx0KTtcclxuICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgIC8vIEJ1bW1lciwgd2UncmUgbm90IGdvaW5nIHRvIGRvIGFueXRoaW5nIGFib3V0IGl0IHRob3VnaC5cclxuICAgICAgICAvLyBXZSBhcmUgbm90IHBhdGNoaW5nIGFueSBvZiB0aGUgcmVzdWx0IHNvIGFueSBleGlzdGluZyBpbmZvcm1hdGlvbiByZW1haW5zXHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucGF0Y2hGaWxlUmVzdWx0KGZpbGUsIGJhc2U2NEZpbGVTdHJpbmcpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQmFzZWQgb24gdGhlIGZpbGVPdXRwdXQgcmV0dXJuIHdoZXRoZXIgdGhpcyBjb21wb25lbnQgaXMgZXhwZWN0ZWQgdG8gZGVsaXZlciBhIGJhc2U2NCBvdXRwdXRcclxuICAgKiBAcmV0dXJucyBcclxuICAgKi9cclxuICBwcml2YXRlIGlzQmFzZTY0RmlsZU91dHB1dCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmZpbGVPdXRwdXQgPT09ICdiYXNlNjQnO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogV2hlbiB0aGUgZmlsZSB3YXMgc2VsZWN0ZWQgYW5kIHByb2Nlc3NlZCBwYXRjaCB0aGUgZmlsZSBpbmZvcm1hdGlvbiB0aGF0IHRoZSBob3N0aW5nIGZvcm0gd2lsbFxyXG4gICAqIGJlIGxvb2tpbmcgZm9yLiBcclxuICAgKiBAcGFyYW0gZmlsZSBcclxuICAgKiBAcGFyYW0gYmFzZTY0RmlsZVN0cmluZyBcclxuICAgKiBAcGFyYW0gb25GaWxlU2VsZWN0ZWRSZXN1bHQgXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBwYXRjaEZpbGVSZXN1bHQoZmlsZTogRmlsZSB8IG51bGwsIGJhc2U2NEZpbGVTdHJpbmc/OiBzdHJpbmcsIG9uRmlsZVNlbGVjdGVkUmVzdWx0PzogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLmZvcm1Nb2RlbD8ucGF0Y2hWYWx1ZSh7IFxyXG4gICAgICBmaWxlOiBmaWxlLCBcclxuICAgICAgbmFtZTogZmlsZT8ubmFtZSwgXHJcbiAgICAgIGJhc2U2NEZpbGVTdHJpbmc6IGJhc2U2NEZpbGVTdHJpbmcgPz8gbnVsbFxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKG9uRmlsZVNlbGVjdGVkUmVzdWx0KSB7XHJcbiAgICAgIHRoaXMuZm9ybU1vZGVsLnBhdGNoVmFsdWUoeyB1cGxvYWRSZXN1bHQ6IG9uRmlsZVNlbGVjdGVkUmVzdWx0IH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5mb3JtTW9kZWwucGF0Y2hWYWx1ZSh7IHVwbG9hZFJlc3VsdDogbnVsbCB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKiBNYXBzIHRoZSBmaWxlcyB0byBhbiBhcnJheSBvZiBGaWxlIG9iamVjdHMgYW5kIHNlbmRzIHRoZW0gYWxvbmdcclxuICAgKiB0byB0aGUgZGVyaXZlZCBvbk11bHRpcGxlRmlsZVNlbGVjdGVkIG1ldGhvZCBpbiB0aGUgaG9zdGluZyBjb21wb25lbnRcclxuICAgKi9cclxuICBwcml2YXRlIGFzeW5jIGhhbmRsZU11bHRpcGxlRmlsZXMoZmlsZXM6IEZpbGVMaXN0KTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBjb25zdCBmaWxlc0FycmF5ID0gQXJyYXkuZnJvbShmaWxlcyk7XHJcblxyXG4gICAgaWYgKHRoaXMub25NdWx0aXBsZUZpbGVzU2VsZWN0ZWQpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgdGhpcy5vbk11bHRpcGxlRmlsZXNTZWxlY3RlZChmaWxlc0FycmF5KTtcclxuICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdlcnJvcjogJywgZSk7XHJcbiAgICAgIH0gIFxyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgcmVhZEZpbGUoZmlsZTogRmlsZSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc3QgcmVhZGVyOiBGaWxlUmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuXHJcbiAgICByZWFkZXIub25sb2FkZW5kID0gYXN5bmMgZSA9PiB7XHJcbiAgICAgIGxldCBiYXNlNjRGaWxlU3RyaW5nOiBzdHJpbmcgfCB1bmRlZmluZWQgPSByZWFkZXI/LnJlc3VsdD8udG9TdHJpbmcoKS5zcGxpdChcIixcIilbMV07XHJcbiAgICAgIGF3YWl0IHRoaXMucHJvY2Vzc0ZpbGUoZmlsZSwgYmFzZTY0RmlsZVN0cmluZyk7XHJcbiAgICB9O1xyXG5cclxuICAgIGlmICh0aGlzLmlzQmFzZTY0RmlsZU91dHB1dCgpKSB7XHJcbiAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgYXdhaXQgdGhpcy5wcm9jZXNzRmlsZShmaWxlKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPGVjLWZvcm0tZ3JvdXAgW2xhYmVsXT1cImxhYmVsXCJcclxuICAgICAgICAgICAgICAgW2Zvcm1Hcm91cF09XCJmb3JtTW9kZWxcIlxyXG4gICAgICAgICAgICAgICBjbGFzcz1cIm1iLTBcIj5cclxuICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGNvbnRyb2wtZ3JvdXBcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1ncm93IHBvc2l0aW9uLXJlbGF0aXZlXCI+XHJcbiAgICAgIDxpbnB1dCAjZmlsZUlucHV0XHJcbiAgICAgICAgICAgICBpZD1cInt7aW5wdXRJZH19X2lucHV0XCJcclxuICAgICAgICAgICAgIHR5cGU9XCJmaWxlXCJcclxuICAgICAgICAgICAgIHRhYmluZGV4PVwiLTFcIlxyXG4gICAgICAgICAgICAgW2F0dHIuYWNjZXB0XT1cImZpbGVUeXBlQWNjZXB0XCJcclxuICAgICAgICAgICAgIChjaGFuZ2UpPVwiZmlsZUNoYW5nZSgkZXZlbnQudGFyZ2V0LmZpbGVzKVwiXHJcbiAgICAgICAgICAgICBbY2xhc3MuaGFzLXZhbHVlXT1cImRpc3BsYXlUeXBlID09PSAnZmlsZScgPyBmb3JtTW9kZWw/LmdldCgnbmFtZScpLnZhbHVlIDogdW5kZWZpbmVkXCJcclxuICAgICAgICAgICAgIFthdHRyLm11bHRpcGxlXT1cIm11bHRpU2VsZWN0ID8gJ211bHRpcGxlJyA6IHVuZGVmaW5lZFwiPlxyXG4gICAgICAgICAgICA8ZWMtZm9ybS1jb250cm9sICpuZ0lmPVwiZGlzcGxheVR5cGUgPT09ICdmaWxlJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJ7e2lucHV0SWR9fV9mb3JtQ29udHJvbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LXRydW5jYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIFtwZW5kaW5nXT1cInBlbmRpbmdcIj5cclxuICAgICAgICA8aW5wdXQgaWQ9XCJ7e2lucHV0SWR9fV9uYW1lXCJcclxuICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Nb2RlbD8uZ2V0KCduYW1lJylcIlxyXG4gICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXHJcbiAgICAgICAgICAgICAgIFt0YWJpbmRleF09XCItMVwiPlxyXG4gICAgICA8L2VjLWZvcm0tY29udHJvbD5cclxuICAgIDwvZGl2PlxyXG4gICAgPGVjLWJ1dHRvbiAqbmdJZj1cImRpc3BsYXlUeXBlID09PSAnZmlsZSdcIlxyXG4gICAgICAgICAgICAgICAjYnJvd3NlQnRuXHJcbiAgICAgICAgICAgICAgIGlkPVwie3tpbnB1dElkfX1fYnJvd3NlQnRuXCJcclxuICAgICAgICAgICAgICAgKGNsaWNrZWQpPVwiZmlsZUlucHV0LmNsaWNrKClcIlxyXG4gICAgICAgICAgICAgICB0eXBlPVwic2Vjb25kYXJ5XCJcclxuICAgICAgICAgICAgICAgW3RhYmluZGV4XT1cInRhYmluZGV4XCJcclxuICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZvcm1Nb2RlbD8uZ2V0KCduYW1lJykuZGlzYWJsZWRcIlxyXG4gICAgICAgICAgICAgICBsYWJlbD1cIkJyb3dzZVwiXHJcbiAgICAgICAgICAgICAgIFthdXRvZm9jdXNdPVwiYXV0b2ZvY3VzXCI+XHJcbiAgICA8L2VjLWJ1dHRvbj5cclxuICA8L2Rpdj5cclxuICA8ZWMtYnV0dG9uICpuZ0lmPVwiZGlzcGxheVR5cGUgPT09ICdidXR0b24nXCJcclxuICAgICAgICAgICAgIGlkPVwie3tpbnB1dElkfX1fYnRuXCJcclxuICAgICAgICAgICAgIFtwZW5kaW5nXT1cInBlbmRpbmdcIlxyXG4gICAgICAgICAgICAgW3R5cGVdPVwiYnV0dG9uVHlwZVwiXHJcbiAgICAgICAgICAgICBbbGFiZWxdPVwiYnV0dG9uTGFiZWwgPz8gJ0Jyb3dzZV9UQycgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAgKGNsaWNrZWQpPVwiZmlsZUlucHV0LmNsaWNrKClcIlxyXG4gICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDogMTAwJTtcIj5cclxuICA8L2VjLWJ1dHRvbj5cclxuPC9lYy1mb3JtLWdyb3VwPiJdfQ==
218
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS11cGxvYWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvbGliL2NvbnRyb2xzL2ZpbGUtdXBsb2FkL2ZpbGUtdXBsb2FkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9jb250cm9scy9maWxlLXVwbG9hZC9maWxlLXVwbG9hZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQW9DLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxRyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQWUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHM0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNCQUFzQixDQUFDOzs7Ozs7Ozs7O0FBS3ZELE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHO0lBQ2hDLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQztJQUNiLEtBQUssRUFBRSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUM7Q0FDekIsQ0FBQztBQU9GLE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxlQUFlO0lBRXRELGdFQUFnRTtJQUN6RCxNQUFNLENBQUMsWUFBWSxDQUN4QixVQUF5QixFQUN6QixXQUFvQixLQUFLO1FBRXpCLElBQUksU0FBUyxHQUFHLElBQUksZ0JBQWdCLENBQUM7WUFDbkMsSUFBSSxFQUFFLElBQUksa0JBQWtCLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsRUFBRSxVQUFVLENBQUM7WUFDN0UsSUFBSSxFQUFFLElBQUksa0JBQWtCLENBQUMsRUFBRSxLQUFLLEVBQUUs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c0JBQTdCLEtBQUs7Z0JBT1UsdUJBQXVCO3NCQUF0QyxLQUFLO2dCQU9VLFdBQVc7c0JBQTFCLEtBQUs7Z0JBS1UsV0FBVztzQkFBMUIsS0FBSztnQkFLVSxVQUFVO3NCQUF6QixLQUFLO2dCQUtVLFdBQVc7c0JBQTFCLEtBQUs7Z0JBRTZELFNBQVM7c0JBQTNFLFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIFNpbXBsZUNoYW5nZXMsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBVbnR5cGVkRm9ybUNvbnRyb2wsIFVudHlwZWRGb3JtR3JvdXAsIFZhbGlkYXRvckZuIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IFZhbGlkYXRpb25NZXNzYWdlU2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvdmFsaWRhdGlvbi1tZXNzYWdlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBGb3JtR3JvdXBIZWxwZXIgfSBmcm9tICcuLi8uLi9zaGFyZWQvZm9ybS1ncm91cC5oZWxwZXInO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbEJhc2UgfSBmcm9tICcuLi9mb3JtLWNvbnRyb2wtYmFzZSc7XHJcblxyXG5leHBvcnQgdHlwZSBGaWxlVHlwZSA9ICd6aXAnIHwgJ2V4Y2VsJyB8ICdjdXN0b20nO1xyXG5leHBvcnQgdHlwZSBGaWxlT3V0cHV0ID0gJ3JhdycgfCAnYmFzZTY0JztcclxuXHJcbmV4cG9ydCBjb25zdCBGaWxlVHlwZUV4dGVuc2lvbnMgPSB7XHJcbiAgemlwOiBbJy56aXAnXSxcclxuICBleGNlbDogWycueGxzJywgJy54bHN4J11cclxufTtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBcImVjLWZpbGUtdXBsb2FkXCIsXHJcbiAgdGVtcGxhdGVVcmw6IFwiLi9maWxlLXVwbG9hZC5jb21wb25lbnQuaHRtbFwiLFxyXG4gIHN0eWxlVXJsczogW1wiLi9maWxlLXVwbG9hZC5jb21wb25lbnQuc2Nzc1wiXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRmlsZVVwbG9hZENvbXBvbmVudCBleHRlbmRzIEZvcm1Db250cm9sQmFzZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcclxuXHJcbiAgLy8gc3RhdGljIGNsYXNzIHRvIGNyZWF0ZSB0aGUgZm9ybSBncm91cCBmcm9tIGEgcGFyZW50IGNvbXBvbmVudFxyXG4gIHB1YmxpYyBzdGF0aWMgZ2V0Rm9ybU1vZGVsKFxyXG4gICAgdmFsaWRhdG9yczogVmFsaWRhdG9yRm5bXSxcclxuICAgIGRpc2FibGVkOiBib29sZWFuID0gZmFsc2VcclxuICApOiBVbnR5cGVkRm9ybUdyb3VwIHtcclxuICAgIGxldCBmb3JtR3JvdXAgPSBuZXcgVW50eXBlZEZvcm1Hcm91cCh7XHJcbiAgICAgIGZpbGU6IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woeyB2YWx1ZTogbnVsbCwgZGlzYWJsZWQ6IGRpc2FibGVkIH0sIHZhbGlkYXRvcnMpLFxyXG4gICAgICBuYW1lOiBuZXcgVW50eXBlZEZvcm1Db250cm9sKHsgdmFsdWU6IG51bGwsIGRpc2FibGVkOiBkaXNhYmxlZCB9LCB2YWxpZGF0b3JzKSxcclxuICAgICAgYmFzZTY0RmlsZVN0cmluZzogbmV3IFVudHlwZWRGb3JtQ29udHJvbChudWxsKSxcclxuICAgICAgdXBsb2FkUmVzdWx0OiBuZXcgVW50eXBlZEZvcm1Db250cm9sKG51bGwpLFxyXG4gICAgfSk7XHJcbiAgICBpZiAoZGlzYWJsZWQpIHtcclxuICAgICAgZm9ybUdyb3VwLmRpc2FibGUoKTtcclxuICAgIH1cclxuICAgIHJldHVybiBmb3JtR3JvdXA7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUaGUgdmFsdWUgb2YgdGhlIHRleHRib3ggaW5wdXQncyBwbGFjZWhvbGRlclxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBwbGFjZWhvbGRlcj86IHN0cmluZyA9IFwiQ2hvb3NlIGZpbGUuLi5cIjtcclxuXHJcbiAgLyoqIENvbW1vbiBleHRlbnNpb25zIGZvciBhIGZpbGUgYnJvd3NpbmcgZGlhbG9nXHJcbiAgICogIE5vdGU6IEVkZ2UgZG9lcyBub3Qgc3VwcG9ydCB0aGUgYWNjZXB0IGF0dHJpYnV0ZSBvbiBmaWxlIGlucHV0cywgdGhlcmVmb3IgYWxsIGZpbGUgdHlwZXNcclxuICAgKiAgICAgICAgd2lsbCBiZSBzaG93bi4gIEZpcmVmb3ggYW5kIENocm9tZSBib3RoIHN1cHBvcnQgdGhpcyBmZWF0dXJlLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBmaWxlVHlwZT86IEZpbGVUeXBlIHwgdW5kZWZpbmVkO1xyXG5cclxuICAvKipcclxuICAgKiBGaWxlIG91dHB1dCwgZGV0ZXJtaW5lcyB3aGljaCBwcm9wZXJ0aWVzIGFyZSBzdXBwbGllZCBvbiB0aGUgZm9ybU1vZGVsXHJcbiAgICovXHJcbiAgQElucHV0KCkgcHVibGljIGZpbGVPdXRwdXQ/OiBGaWxlT3V0cHV0ID0gJ2Jhc2U2NCc7XHJcblxyXG4gIC8qKiBJZiBmaWxlVHlwZSBpcyBzZXQgdG8gY3VzdG9tIHNldCB0aGUgYWNjZXB0YWJsZSBmaWxlIHR5cGVzIGJhc2VkIG9uIHRoZSBjdXN0b20gYXJyYXkgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgY3VzdG9tRXh0ZW5zaW9ucz86IEFycmF5PHN0cmluZz4gfCB1bmRlZmluZWQ7XHJcblxyXG4gIC8qKlxyXG4gICAqIE9wdGlvbmFsIGNhbGxiYWNrIHN1cHBvcnRlZCBpZiB0aGUgaG9zdGluZyBwYWdlIG5lZWRzIHRvIHByb2Nlc3MgdGhlIGZpbGUgYmVmb3JlXHJcbiAgICogc2V0dGluZyB0aGUgZm9ybU1vZGVsIHdpdGggdGhlIGZpbGUgaW5mb3JtYXRpb24uIElmIHRoZSBwcm9taXNlIHJlc29sdmVzIGl0IHdpbGwgY29udGludWVcclxuICAgKiBhbmQgc2V0IHRoZSBmaWxlIG5hbWUgYW5kIGNvbnRlbnRzIHRvIHRoZSBmb3JtTW9kZWwsIG90aGVyd2lzZSBvbiBmYWlsdXJlIGl0J2xsIGRvIG5vdGhpbmcuXHJcbiAgICovXHJcbiAgQElucHV0KCkgcHVibGljIG9uRmlsZVNlbGVjdGVkPzogKGZpbGU6IEZpbGUpID0+IFByb21pc2U8YW55PjtcclxuXHJcbiAgLyoqXHJcbiAgICogT3B0aW9uYWwgY2FsbGJhY2sgc3VwcG9ydGVkIGZvciB3aGVuIHRoZSBob3N0aW5nIHBhZ2UgbmVlZHMgdG8gcHJvY2VzcyBtdWx0aXBsZSBmaWxlc1xyXG4gICAqIFdlIHNpbXBseSBtYXAgdGhlIEZpbGVMaXN0IHRvIGFuIGFycmF5IG9mIEZpbGUgb2JqZWN0cyBhbmQgcGFzcyB0aGF0IGFycmF5IHRvIHRoZSBcclxuICAgKiBjYWxsYmFjayBhbmQgbGV0IHRoZSBob3N0aW5nIHBhZ2UgaGFuZGxlIHRoZSBwcm9jZXNzaW5nXHJcbiAgICovXHJcbiAgQElucHV0KCkgcHVibGljIG9uTXVsdGlwbGVGaWxlc1NlbGVjdGVkPzogKGZpbGVzOiBGaWxlW10pID0+IFByb21pc2U8YW55PjtcclxuXHJcbiAgLyoqIFxyXG4gICAqIE9wdGlvbmFsIGRpc3BsYXkgdHlwZSB0aGF0IGNvbnRyb2xzIHdoZXRoZXIgdGhlIGZpbGUgaW5wdXQgdGV4dGJveCBpcyBkaXNwbGF5ZWQgb3JcclxuICAgKiBzaW1wbHkgYSBidXR0b24gdGhlIHVzZXIgY2xpY2tzIHRvIGxhdW5jaCB0aGUgT1MgZmlsZSBzdG9yYWdlIGRpYWxvZy5cclxuICAgKiBEZWZhdWx0OiBmaWxlXHJcbiAgICovXHJcbiAgQElucHV0KCkgcHVibGljIGRpc3BsYXlUeXBlPzogJ2ZpbGUnIHwgJ2J1dHRvbicgPSAnZmlsZSc7XHJcblxyXG4gIC8qKiBcclxuICAgKiBXaGVuIGRpc3BsYXkgdHlwZSBpcyBzZXQgdG8gYnV0dG9uIHRoaXMgcHJvcGVydHkgd2lsbCBjb250cm9sIHRoZSBidXR0b24gbGFiZWxcclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgYnV0dG9uTGFiZWw/OiBzdHJpbmc7XHJcblxyXG4gIC8qKiBcclxuICAgKiBXaGVuIGRpc3BsYXkgdHlwZSBpcyBzZXQgdG8gYnV0dG9uIHRoaXMgcHJvcGVydHkgd2lsbCBjb250cm9sIHRoZSBidXR0b24gdHlwZVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBidXR0b25UeXBlPzogc3RyaW5nID0gJ3ByaW1hcnknO1xyXG5cclxuICAvKipcclxuICAgKiBPcHRpb25hbCBwcm9wZXJ0eSB0byBjb250cm9sIHdoZXRoZXIgdGhlIHVzZXIgY2FuIHNlbGVjdCBtdWx0aXBsZSBmaWxlc1xyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBtdWx0aVNlbGVjdD86IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQFZpZXdDaGlsZChcImZpbGVJbnB1dFwiLCB7IHJlYWQ6IEVsZW1lbnRSZWYsIHN0YXRpYzogdHJ1ZSB9KSBwdWJsaWMgZmlsZUlucHV0PzogRWxlbWVudFJlZjtcclxuXHJcbiAgLyoqIFByb3BlcnR5IGJvdW5kIHRvIHRoZSBmaWxlIGlucHV0IHRvIGZpbHRlciB3aGF0IGZpbGUgdHlwZXMgYXJlIHNob3duIGluIHRoZSBkaWFsb2cgKi9cclxuICBwdWJsaWMgZmlsZVR5cGVBY2NlcHQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcm90ZWN0ZWQgdmFsaWRhdGlvbk1lc3NhZ2VTZXJ2aWNlOiBWYWxpZGF0aW9uTWVzc2FnZVNlcnZpY2UsXHJcbiAgICBwcm90ZWN0ZWQgZm9ybUdyb3VwSGVscGVyOiBGb3JtR3JvdXBIZWxwZXIsXHJcbiAgKSB7XHJcbiAgICBzdXBlcih2YWxpZGF0aW9uTWVzc2FnZVNlcnZpY2UsIGZvcm1Hcm91cEhlbHBlcik7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgc3VwZXIubmdPbkNoYW5nZXMoY2hhbmdlcyk7XHJcblxyXG4gICAgdGhpcy51cGRhdGVGaWxlVHlwZUFjY2VwdCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgc3VwZXIubmdPbkluaXQoKTtcclxuXHJcbiAgICAvLyBXYXRjaCBmb3IgbmFtZSB0byBjaGFuZ2UsIGlmIHRoZSB2YWx1ZSBpcyBjbGVhcmVkIHdlIHdpbGwgY2xlYXIgdGhlIG90aGVyXHJcbiAgICAvLyBzdXBwb3J0aW5nIG1vZGVsIHByb3BlcnRpZXMuIFRoZSBuYW1lIGNhbiBiZSBjbGVhcmVkIGJ5IHRoZSB1c2VyIG1hbnVhbGx5IG9yIHZpYVxyXG4gICAgLy8gdGhlIGNsZWFyIGJ1dHRvblxyXG4gICAgdGhpcy5mb3JtTW9kZWw/LmdldCgnbmFtZScpPy52YWx1ZUNoYW5nZXMucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuY29tcG9uZW50RGVzdHJveWVkKVxyXG4gICAgKS5zdWJzY3JpYmUodmFsdWUgPT4ge1xyXG4gICAgICBpZiAoIXZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5mb3JtTW9kZWwucGF0Y2hWYWx1ZSh7XHJcbiAgICAgICAgICBmaWxlOiBudWxsLFxyXG4gICAgICAgICAgbmFtZTogbnVsbCxcclxuICAgICAgICAgIGJhc2U2NEZpbGVTdHJpbmc6IG51bGwsXHJcbiAgICAgICAgICB1cGxvYWRSZXN1bHQ6IG51bGxcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZmlsZUNoYW5nZShmaWxlczogRmlsZUxpc3QpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICh0aGlzLm11bHRpU2VsZWN0KSB7XHJcbiAgICAgIHRoaXMuaGFuZGxlTXVsdGlwbGVGaWxlcyhmaWxlcyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBmaWxlOiBGaWxlIHwgbnVsbCA9IGZpbGVzLml0ZW0oMCk7XHJcbiAgICAgIGlmIChmaWxlKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5yZWFkRmlsZShmaWxlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIENsZWFyIHRoZSBmaWxlIGlucHV0cyB2YWx1ZSwgdGhpcyB3aWxsIGFsbG93IHRoZSB1c2VyIHRvIHBpY2sgdGhlIHNhbWUgZmlsZW5hbWVzIGFnYWluXHJcbiAgICAvLyBhbmQgY2F1c2UgZmlsZUNoYW5nZSB0byByZS10cmlnZ2VyLlxyXG4gICAgaWYgKHRoaXMuZmlsZUlucHV0KSB7XHJcbiAgICAgIHRoaXMuZmlsZUlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSAnJztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENoZWNrcyB0aGUgZmlsZSB0eXBlIGFuZCB1cGRhdGVzIHRoZSBmaWxlIHR5cGUgYWNjZXB0IHByb3BlcnR5LiBUaGlzIGlzIHdoYXQgZGV0ZXJtaW5lcyB0aGUgZmlsZVxyXG4gICAqIHR5cGUgY2hvaWNlcyB0aGF0IHRoZSB1c2VyIHdpbGwgYmUgbGltaXRlZCB0byBpbiB0aGUgZmlsZSBicm93c2UgZGlhbG9nXHJcbiAgICovXHJcbiAgcHJpdmF0ZSB1cGRhdGVGaWxlVHlwZUFjY2VwdCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmZpbGVUeXBlKSB7XHJcbiAgICAgIGlmICh0aGlzLmZpbGVUeXBlICE9PSBcImN1c3RvbVwiKSB7XHJcbiAgICAgICAgdGhpcy5maWxlVHlwZUFjY2VwdCA9IEZpbGVUeXBlRXh0ZW5zaW9uc1t0aGlzLmZpbGVUeXBlXS5qb2luKFwiLFwiKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAodGhpcy5jdXN0b21FeHRlbnNpb25zKSB7XHJcbiAgICAgICAgICB0aGlzLmZpbGVUeXBlQWNjZXB0ID0gdGhpcy5jdXN0b21FeHRlbnNpb25zLmpvaW4oXCIsXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVGFrZSBhIGZpbGUgdGhhdCB3YXMgc2VsZWN0ZWQgYnkgdGhlIHVzZXIgYW5kIHByb2Nlc3MvcGF0Y2ggb3VyIGZvcm0gbW9kZWxcclxuICAgKiBJZiB0aGUgaG9zdCBjb21wb25lbnQgcmVxdWlyZXMgYW4gYWN0aW9uIHRvIG9jY3VyIHdpdGggdGhlIGZpbGUgcHJpb3IgdG8gdGhlIHBhdGNoIGl0IHdpbGwgY2FsbFxyXG4gICAqIGFuZCB3YWl0IGZvciBpdCB0byByZXR1cm4uXHJcbiAgICogQHBhcmFtIGZpbGUgXHJcbiAgICogQHBhcmFtIGJhc2U2NEZpbGVTdHJpbmcgT3B0aW9uYWw6IFdpbGwgaGF2ZSBhIHZhbHVlIHByb3ZpZGVkIGlmIHRoZSBmaWxlT3V0cHV0IGlzIHNldCB0byBiYXNlNjRcclxuICAgKi9cclxuICBwcml2YXRlIGFzeW5jIHByb2Nlc3NGaWxlKGZpbGU6IEZpbGUsIGJhc2U2NEZpbGVTdHJpbmc/OiBzdHJpbmcgfCB1bmRlZmluZWQpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICh0aGlzLm9uRmlsZVNlbGVjdGVkKSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IHRoaXMub25GaWxlU2VsZWN0ZWQoZmlsZSk7XHJcbiAgICAgICAgdGhpcy5wYXRjaEZpbGVSZXN1bHQoZmlsZSwgYmFzZTY0RmlsZVN0cmluZywgcmVzdWx0KTtcclxuICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgIC8vIEJ1bW1lciwgd2UncmUgbm90IGdvaW5nIHRvIGRvIGFueXRoaW5nIGFib3V0IGl0IHRob3VnaC5cclxuICAgICAgICAvLyBXZSBhcmUgbm90IHBhdGNoaW5nIGFueSBvZiB0aGUgcmVzdWx0IHNvIGFueSBleGlzdGluZyBpbmZvcm1hdGlvbiByZW1haW5zXHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucGF0Y2hGaWxlUmVzdWx0KGZpbGUsIGJhc2U2NEZpbGVTdHJpbmcpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQmFzZWQgb24gdGhlIGZpbGVPdXRwdXQgcmV0dXJuIHdoZXRoZXIgdGhpcyBjb21wb25lbnQgaXMgZXhwZWN0ZWQgdG8gZGVsaXZlciBhIGJhc2U2NCBvdXRwdXRcclxuICAgKiBAcmV0dXJucyBcclxuICAgKi9cclxuICBwcml2YXRlIGlzQmFzZTY0RmlsZU91dHB1dCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmZpbGVPdXRwdXQgPT09ICdiYXNlNjQnO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogV2hlbiB0aGUgZmlsZSB3YXMgc2VsZWN0ZWQgYW5kIHByb2Nlc3NlZCBwYXRjaCB0aGUgZmlsZSBpbmZvcm1hdGlvbiB0aGF0IHRoZSBob3N0aW5nIGZvcm0gd2lsbFxyXG4gICAqIGJlIGxvb2tpbmcgZm9yLiBcclxuICAgKiBAcGFyYW0gZmlsZSBcclxuICAgKiBAcGFyYW0gYmFzZTY0RmlsZVN0cmluZyBcclxuICAgKiBAcGFyYW0gb25GaWxlU2VsZWN0ZWRSZXN1bHQgXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBwYXRjaEZpbGVSZXN1bHQoZmlsZTogRmlsZSB8IG51bGwsIGJhc2U2NEZpbGVTdHJpbmc/OiBzdHJpbmcsIG9uRmlsZVNlbGVjdGVkUmVzdWx0PzogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLmZvcm1Nb2RlbD8ucGF0Y2hWYWx1ZSh7IFxyXG4gICAgICBmaWxlOiBmaWxlLCBcclxuICAgICAgbmFtZTogZmlsZT8ubmFtZSwgXHJcbiAgICAgIGJhc2U2NEZpbGVTdHJpbmc6IGJhc2U2NEZpbGVTdHJpbmcgPz8gbnVsbFxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKG9uRmlsZVNlbGVjdGVkUmVzdWx0KSB7XHJcbiAgICAgIHRoaXMuZm9ybU1vZGVsLnBhdGNoVmFsdWUoeyB1cGxvYWRSZXN1bHQ6IG9uRmlsZVNlbGVjdGVkUmVzdWx0IH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5mb3JtTW9kZWwucGF0Y2hWYWx1ZSh7IHVwbG9hZFJlc3VsdDogbnVsbCB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKiBNYXBzIHRoZSBmaWxlcyB0byBhbiBhcnJheSBvZiBGaWxlIG9iamVjdHMgYW5kIHNlbmRzIHRoZW0gYWxvbmdcclxuICAgKiB0byB0aGUgZGVyaXZlZCBvbk11bHRpcGxlRmlsZVNlbGVjdGVkIG1ldGhvZCBpbiB0aGUgaG9zdGluZyBjb21wb25lbnRcclxuICAgKi9cclxuICBwcml2YXRlIGFzeW5jIGhhbmRsZU11bHRpcGxlRmlsZXMoZmlsZXM6IEZpbGVMaXN0KTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBjb25zdCBmaWxlc0FycmF5ID0gQXJyYXkuZnJvbShmaWxlcyk7XHJcblxyXG4gICAgaWYgKHRoaXMub25NdWx0aXBsZUZpbGVzU2VsZWN0ZWQpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgdGhpcy5vbk11bHRpcGxlRmlsZXNTZWxlY3RlZChmaWxlc0FycmF5KTtcclxuICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdlcnJvcjogJywgZSk7XHJcbiAgICAgIH0gIFxyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgcmVhZEZpbGUoZmlsZTogRmlsZSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc3QgcmVhZGVyOiBGaWxlUmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuXHJcbiAgICByZWFkZXIub25sb2FkZW5kID0gYXN5bmMgZSA9PiB7XHJcbiAgICAgIGxldCBiYXNlNjRGaWxlU3RyaW5nOiBzdHJpbmcgfCB1bmRlZmluZWQgPSByZWFkZXI/LnJlc3VsdD8udG9TdHJpbmcoKS5zcGxpdChcIixcIilbMV07XHJcbiAgICAgIGF3YWl0IHRoaXMucHJvY2Vzc0ZpbGUoZmlsZSwgYmFzZTY0RmlsZVN0cmluZyk7XHJcbiAgICB9O1xyXG5cclxuICAgIGlmICh0aGlzLmlzQmFzZTY0RmlsZU91dHB1dCgpKSB7XHJcbiAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgYXdhaXQgdGhpcy5wcm9jZXNzRmlsZShmaWxlKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPGVjLWZvcm0tZ3JvdXAgW2xhYmVsXT1cImxhYmVsXCJcclxuICAgICAgICAgICAgICAgW2Zvcm1Hcm91cF09XCJmb3JtTW9kZWxcIlxyXG4gICAgICAgICAgICAgICBbaGVscFBvcG92ZXJdPVwiaGVscFBvcG92ZXJcIlxyXG4gICAgICAgICAgICAgICBjbGFzcz1cIm1iLTBcIj5cclxuICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGNvbnRyb2wtZ3JvdXBcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1ncm93IHBvc2l0aW9uLXJlbGF0aXZlXCI+XHJcbiAgICAgIDxpbnB1dCAjZmlsZUlucHV0XHJcbiAgICAgICAgICAgICBpZD1cInt7aW5wdXRJZH19X2lucHV0XCJcclxuICAgICAgICAgICAgIHR5cGU9XCJmaWxlXCJcclxuICAgICAgICAgICAgIHRhYmluZGV4PVwiLTFcIlxyXG4gICAgICAgICAgICAgW2F0dHIuYWNjZXB0XT1cImZpbGVUeXBlQWNjZXB0XCJcclxuICAgICAgICAgICAgIChjaGFuZ2UpPVwiZmlsZUNoYW5nZSgkZXZlbnQudGFyZ2V0LmZpbGVzKVwiXHJcbiAgICAgICAgICAgICBbY2xhc3MuaGFzLXZhbHVlXT1cImRpc3BsYXlUeXBlID09PSAnZmlsZScgPyBmb3JtTW9kZWw/LmdldCgnbmFtZScpLnZhbHVlIDogdW5kZWZpbmVkXCJcclxuICAgICAgICAgICAgIFthdHRyLm11bHRpcGxlXT1cIm11bHRpU2VsZWN0ID8gJ211bHRpcGxlJyA6IHVuZGVmaW5lZFwiPlxyXG4gICAgICAgICAgICA8ZWMtZm9ybS1jb250cm9sICpuZ0lmPVwiZGlzcGxheVR5cGUgPT09ICdmaWxlJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJ7e2lucHV0SWR9fV9mb3JtQ29udHJvbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LXRydW5jYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIFtwZW5kaW5nXT1cInBlbmRpbmdcIj5cclxuICAgICAgICA8aW5wdXQgaWQ9XCJ7e2lucHV0SWR9fV9uYW1lXCJcclxuICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Nb2RlbD8uZ2V0KCduYW1lJylcIlxyXG4gICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXHJcbiAgICAgICAgICAgICAgIFt0YWJpbmRleF09XCItMVwiPlxyXG4gICAgICA8L2VjLWZvcm0tY29udHJvbD5cclxuICAgIDwvZGl2PlxyXG4gICAgPGVjLWJ1dHRvbiAqbmdJZj1cImRpc3BsYXlUeXBlID09PSAnZmlsZSdcIlxyXG4gICAgICAgICAgICAgICAjYnJvd3NlQnRuXHJcbiAgICAgICAgICAgICAgIGlkPVwie3tpbnB1dElkfX1fYnJvd3NlQnRuXCJcclxuICAgICAgICAgICAgICAgKGNsaWNrZWQpPVwiZmlsZUlucHV0LmNsaWNrKClcIlxyXG4gICAgICAgICAgICAgICB0eXBlPVwic2Vjb25kYXJ5XCJcclxuICAgICAgICAgICAgICAgW3RhYmluZGV4XT1cInRhYmluZGV4XCJcclxuICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZvcm1Nb2RlbD8uZ2V0KCduYW1lJykuZGlzYWJsZWRcIlxyXG4gICAgICAgICAgICAgICBsYWJlbD1cIkJyb3dzZVwiXHJcbiAgICAgICAgICAgICAgIFthdXRvZm9jdXNdPVwiYXV0b2ZvY3VzXCI+XHJcbiAgICA8L2VjLWJ1dHRvbj5cclxuICA8L2Rpdj5cclxuICA8ZWMtYnV0dG9uICpuZ0lmPVwiZGlzcGxheVR5cGUgPT09ICdidXR0b24nXCJcclxuICAgICAgICAgICAgIGlkPVwie3tpbnB1dElkfX1fYnRuXCJcclxuICAgICAgICAgICAgIFtwZW5kaW5nXT1cInBlbmRpbmdcIlxyXG4gICAgICAgICAgICAgW3R5cGVdPVwiYnV0dG9uVHlwZVwiXHJcbiAgICAgICAgICAgICBbbGFiZWxdPVwiYnV0dG9uTGFiZWwgPz8gJ0Jyb3dzZV9UQycgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAgKGNsaWNrZWQpPVwiZmlsZUlucHV0LmNsaWNrKClcIlxyXG4gICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDogMTAwJTtcIj5cclxuICA8L2VjLWJ1dHRvbj5cclxuPC9lYy1mb3JtLWdyb3VwPiJdfQ==
@@ -7,6 +7,7 @@ import * as i0 from "@angular/core";
7
7
  import * as i1 from "../../core/validation-message.service";
8
8
  import * as i2 from "@ngx-translate/core";
9
9
  import * as i3 from "@angular/common";
10
+ import * as i4 from "../help-popover/help-popover.component";
10
11
  /** Function to iterate over form controls and
11
12
  * ensure they contain unique values. If any are duplicated all offending
12
13
  * form controls will be marked as invalid
@@ -229,10 +230,10 @@ export class FormGroupComponent {
229
230
  }
230
231
  }
231
232
  FormGroupComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FormGroupComponent, deps: [{ token: i1.ValidationMessageService }, { token: i2.TranslateService }], target: i0.ɵɵFactoryTarget.Component });
232
- FormGroupComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: FormGroupComponent, selector: "ec-form-group", inputs: { id: "id", label: "label", formGroup: "formGroup", labelPosition: "labelPosition", overrideValidationError: "overrideValidationError", hideValidationMessage: "hideValidationMessage" }, host: { properties: { "attr.id": "this.attrId" } }, ngImport: i0, template: "<div class=\"control control-label-{{labelPosition}}\" [class.ec-untouched]=\"formGroup?.untouched\">\r\n <label *ngIf=\"label\" ngPreserveWhitespaces>\r\n\r\n <span id=\"{{id}}_label\">{{label | translate}}</span>\r\n\r\n <span *ngIf=\"!hideValidationMessage && validationErrors && formGroup?.touched && formGroup?.invalid\">{{validationErrors | translate}}</span>\r\n </label>\r\n <ng-content></ng-content>\r\n</div>", styles: [":host{color:var(--ec-form-control-color);font-size:var(--ec-form-control-font-size);display:block;margin-bottom:1rem;width:100%}:host :host-context(.form-condensed){margin-bottom:.5rem}:host .control{width:100%;display:flex;flex-direction:column}:host .control.control-label-bottom{flex-direction:column-reverse}:host .control.control-label-left{flex-direction:row}:host .control.control-label-left label{margin-right:.25rem}:host .control.control-label-right{flex-direction:row-reverse}:host .control.control-label-right label{margin-left:.25rem}:host .control.control-label-left,:host .control.control-label-right{align-items:center}:host .control.control-label-left label,:host .control.control-label-right label{flex:1 1;margin-top:0;margin-bottom:0}:host .control.control-label-left .control-input,:host .control.control-label-right .control-input{flex:2 2}:host .control.is-readonly input,:host .control.is-readonly select,:host .control.is-readonly textarea{border-color:var(--ec-form-control-border-color-readonly);background-color:var(--ec-form-control-background-color-readonly);background-clip:border-box;background-image:none;color:var(--ec-form-control-color-readonly);opacity:1;-webkit-user-select:none;user-select:none;pointer-events:none;overflow:hidden;white-space:nowrap}:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-invalid,:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-valid{background-color:var(--ec-form-control-background-color-invalid);border-color:var(--ec-form-control-border-color-invalid);background-repeat:no-repeat;background-position:.5rem center;background-size:1rem,1rem;padding-left:1.75rem;background-image:none}:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-invalid:focus,:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-valid:focus{border-color:var(--ec-form-control-background-color-invalid)}:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-invalid~.icon-invalid,:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-valid~.icon-invalid{display:inline-flex;position:absolute;left:.5rem;top:.5rem;z-index:1}:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-invalid~.icon-required,:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-valid~.icon-required{display:none}:host .control.invalid:not(.open) .textbox-group-btn-right ::ng-deep button{background-color:var(--ec-form-control-background-color-invalid)}:host .control.invalid:not(.open) .textbox-group-btn-right ::ng-deep button:not(:focus){border-color:var(--ec-form-control-border-color-invalid)}:host .textbox-group{display:flex;position:relative}:host textarea:focus,:host input:focus,:host select:focus{outline:none}label{color:var(--ec-form-control-label-color, var(--ec-color-secondary-dark));display:block;font-size:var(--ec-font-size-label);line-height:1;margin:calc(var(--ec-font-size-label) / 2) 0}.control.ec-untouched ::ng-deep input.ng-invalid.ng-touched{background-image:none;padding-left:.5rem}.control.ec-untouched ::ng-deep input.ng-invalid.ng-touched:not(.is-empty)~.units-left{left:0}.control.ec-untouched ::ng-deep input:required:not(:disabled).is-empty{background-image:none;background-repeat:no-repeat;background-position:.5rem center;background-size:1rem,1rem;padding-left:1.75rem}.control.ec-untouched ::ng-deep input:required:not(:disabled).is-empty:focus{border-color:var(--ec-form-control-border-color-focus);box-shadow:var(--ec-form-control-box-shadow-focus);position:relative;z-index:1}.control-label-left{display:flex}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }] });
233
+ FormGroupComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: FormGroupComponent, selector: "ec-form-group", inputs: { id: "id", label: "label", formGroup: "formGroup", labelPosition: "labelPosition", overrideValidationError: "overrideValidationError", hideValidationMessage: "hideValidationMessage", helpPopover: "helpPopover" }, host: { properties: { "attr.id": "this.attrId" } }, ngImport: i0, template: "<div class=\"control control-label-{{labelPosition}}\"\r\n [class.ec-untouched]=\"formGroup?.untouched\">\r\n <ng-container *ngIf=\"label && !helpPopover\">\r\n <ng-container *ngTemplateOutlet=\"sharedLabel\"></ng-container>\r\n </ng-container>\r\n\r\n <div *ngIf=\"label && helpPopover\"\r\n class=\"d-flex align-items-center\">\r\n <ng-container *ngTemplateOutlet=\"sharedLabel\"></ng-container>\r\n <ec-help-popover id=\"{{id}}_helpPopover\"\r\n class=\"my-n2 mx-n1\"\r\n text=\"{{helpPopover | translate}}\">\r\n </ec-help-popover>\r\n </div>\r\n\r\n <ng-template #sharedLabel>\r\n <label ngPreserveWhitespaces>\r\n <span *ngIf=\"label\" id=\"{{id}}_label\">{{label | translate}}</span>\r\n <span\r\n *ngIf=\"!hideValidationMessage && validationErrors && formGroup?.touched && formGroup?.invalid\">{{validationErrors\r\n | translate}}</span>\r\n </label>\r\n </ng-template>\r\n\r\n <ng-content></ng-content>\r\n</div>", styles: [":host{color:var(--ec-form-control-color);font-size:var(--ec-form-control-font-size);display:block;margin-bottom:1rem;width:100%}:host :host-context(.form-condensed){margin-bottom:.5rem}:host .control{width:100%;display:flex;flex-direction:column}:host .control.control-label-bottom{flex-direction:column-reverse}:host .control.control-label-left{flex-direction:row}:host .control.control-label-left label{margin-right:.25rem}:host .control.control-label-right{flex-direction:row-reverse}:host .control.control-label-right label{margin-left:.25rem}:host .control.control-label-left,:host .control.control-label-right{align-items:center}:host .control.control-label-left label,:host .control.control-label-right label{flex:1 1;margin-top:0;margin-bottom:0}:host .control.control-label-left .control-input,:host .control.control-label-right .control-input{flex:2 2}:host .control.is-readonly input,:host .control.is-readonly select,:host .control.is-readonly textarea{border-color:var(--ec-form-control-border-color-readonly);background-color:var(--ec-form-control-background-color-readonly);background-clip:border-box;background-image:none;color:var(--ec-form-control-color-readonly);opacity:1;-webkit-user-select:none;user-select:none;pointer-events:none;overflow:hidden;white-space:nowrap}:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-invalid,:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-valid{background-color:var(--ec-form-control-background-color-invalid);border-color:var(--ec-form-control-border-color-invalid);background-repeat:no-repeat;background-position:.5rem center;background-size:1rem,1rem;padding-left:1.75rem;background-image:none}:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-invalid:focus,:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-valid:focus{border-color:var(--ec-form-control-background-color-invalid)}:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-invalid~.icon-invalid,:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-valid~.icon-invalid{display:inline-flex;position:absolute;left:.5rem;top:.5rem;z-index:1}:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-invalid~.icon-required,:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-valid~.icon-required{display:none}:host .control.invalid:not(.open) .textbox-group-btn-right ::ng-deep button{background-color:var(--ec-form-control-background-color-invalid)}:host .control.invalid:not(.open) .textbox-group-btn-right ::ng-deep button:not(:focus){border-color:var(--ec-form-control-border-color-invalid)}:host .textbox-group{display:flex;position:relative}:host textarea:focus,:host input:focus,:host select:focus{outline:none}label{color:var(--ec-form-control-label-color, var(--ec-color-secondary-dark));display:block;font-size:var(--ec-font-size-label);line-height:1;margin:calc(var(--ec-font-size-label) / 2) 0}.control.ec-untouched ::ng-deep input.ng-invalid.ng-touched{background-image:none;padding-left:.5rem}.control.ec-untouched ::ng-deep input.ng-invalid.ng-touched:not(.is-empty)~.units-left{left:0}.control.ec-untouched ::ng-deep input:required:not(:disabled).is-empty{background-image:none;background-repeat:no-repeat;background-position:.5rem center;background-size:1rem,1rem;padding-left:1.75rem}.control.ec-untouched ::ng-deep input:required:not(:disabled).is-empty:focus{border-color:var(--ec-form-control-border-color-focus);box-shadow:var(--ec-form-control-box-shadow-focus);position:relative;z-index:1}.control-label-left{display:flex}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i4.HelpPopoverComponent, selector: "ec-help-popover", inputs: ["id", "text", "contentPosition", "maxWidth"] }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }] });
233
234
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FormGroupComponent, decorators: [{
234
235
  type: Component,
235
- args: [{ selector: 'ec-form-group', template: "<div class=\"control control-label-{{labelPosition}}\" [class.ec-untouched]=\"formGroup?.untouched\">\r\n <label *ngIf=\"label\" ngPreserveWhitespaces>\r\n\r\n <span id=\"{{id}}_label\">{{label | translate}}</span>\r\n\r\n <span *ngIf=\"!hideValidationMessage && validationErrors && formGroup?.touched && formGroup?.invalid\">{{validationErrors | translate}}</span>\r\n </label>\r\n <ng-content></ng-content>\r\n</div>", styles: [":host{color:var(--ec-form-control-color);font-size:var(--ec-form-control-font-size);display:block;margin-bottom:1rem;width:100%}:host :host-context(.form-condensed){margin-bottom:.5rem}:host .control{width:100%;display:flex;flex-direction:column}:host .control.control-label-bottom{flex-direction:column-reverse}:host .control.control-label-left{flex-direction:row}:host .control.control-label-left label{margin-right:.25rem}:host .control.control-label-right{flex-direction:row-reverse}:host .control.control-label-right label{margin-left:.25rem}:host .control.control-label-left,:host .control.control-label-right{align-items:center}:host .control.control-label-left label,:host .control.control-label-right label{flex:1 1;margin-top:0;margin-bottom:0}:host .control.control-label-left .control-input,:host .control.control-label-right .control-input{flex:2 2}:host .control.is-readonly input,:host .control.is-readonly select,:host .control.is-readonly textarea{border-color:var(--ec-form-control-border-color-readonly);background-color:var(--ec-form-control-background-color-readonly);background-clip:border-box;background-image:none;color:var(--ec-form-control-color-readonly);opacity:1;-webkit-user-select:none;user-select:none;pointer-events:none;overflow:hidden;white-space:nowrap}:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-invalid,:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-valid{background-color:var(--ec-form-control-background-color-invalid);border-color:var(--ec-form-control-border-color-invalid);background-repeat:no-repeat;background-position:.5rem center;background-size:1rem,1rem;padding-left:1.75rem;background-image:none}:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-invalid:focus,:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-valid:focus{border-color:var(--ec-form-control-background-color-invalid)}:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-invalid~.icon-invalid,:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-valid~.icon-invalid{display:inline-flex;position:absolute;left:.5rem;top:.5rem;z-index:1}:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-invalid~.icon-required,:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-valid~.icon-required{display:none}:host .control.invalid:not(.open) .textbox-group-btn-right ::ng-deep button{background-color:var(--ec-form-control-background-color-invalid)}:host .control.invalid:not(.open) .textbox-group-btn-right ::ng-deep button:not(:focus){border-color:var(--ec-form-control-border-color-invalid)}:host .textbox-group{display:flex;position:relative}:host textarea:focus,:host input:focus,:host select:focus{outline:none}label{color:var(--ec-form-control-label-color, var(--ec-color-secondary-dark));display:block;font-size:var(--ec-font-size-label);line-height:1;margin:calc(var(--ec-font-size-label) / 2) 0}.control.ec-untouched ::ng-deep input.ng-invalid.ng-touched{background-image:none;padding-left:.5rem}.control.ec-untouched ::ng-deep input.ng-invalid.ng-touched:not(.is-empty)~.units-left{left:0}.control.ec-untouched ::ng-deep input:required:not(:disabled).is-empty{background-image:none;background-repeat:no-repeat;background-position:.5rem center;background-size:1rem,1rem;padding-left:1.75rem}.control.ec-untouched ::ng-deep input:required:not(:disabled).is-empty:focus{border-color:var(--ec-form-control-border-color-focus);box-shadow:var(--ec-form-control-box-shadow-focus);position:relative;z-index:1}.control-label-left{display:flex}\n"] }]
236
+ args: [{ selector: 'ec-form-group', template: "<div class=\"control control-label-{{labelPosition}}\"\r\n [class.ec-untouched]=\"formGroup?.untouched\">\r\n <ng-container *ngIf=\"label && !helpPopover\">\r\n <ng-container *ngTemplateOutlet=\"sharedLabel\"></ng-container>\r\n </ng-container>\r\n\r\n <div *ngIf=\"label && helpPopover\"\r\n class=\"d-flex align-items-center\">\r\n <ng-container *ngTemplateOutlet=\"sharedLabel\"></ng-container>\r\n <ec-help-popover id=\"{{id}}_helpPopover\"\r\n class=\"my-n2 mx-n1\"\r\n text=\"{{helpPopover | translate}}\">\r\n </ec-help-popover>\r\n </div>\r\n\r\n <ng-template #sharedLabel>\r\n <label ngPreserveWhitespaces>\r\n <span *ngIf=\"label\" id=\"{{id}}_label\">{{label | translate}}</span>\r\n <span\r\n *ngIf=\"!hideValidationMessage && validationErrors && formGroup?.touched && formGroup?.invalid\">{{validationErrors\r\n | translate}}</span>\r\n </label>\r\n </ng-template>\r\n\r\n <ng-content></ng-content>\r\n</div>", styles: [":host{color:var(--ec-form-control-color);font-size:var(--ec-form-control-font-size);display:block;margin-bottom:1rem;width:100%}:host :host-context(.form-condensed){margin-bottom:.5rem}:host .control{width:100%;display:flex;flex-direction:column}:host .control.control-label-bottom{flex-direction:column-reverse}:host .control.control-label-left{flex-direction:row}:host .control.control-label-left label{margin-right:.25rem}:host .control.control-label-right{flex-direction:row-reverse}:host .control.control-label-right label{margin-left:.25rem}:host .control.control-label-left,:host .control.control-label-right{align-items:center}:host .control.control-label-left label,:host .control.control-label-right label{flex:1 1;margin-top:0;margin-bottom:0}:host .control.control-label-left .control-input,:host .control.control-label-right .control-input{flex:2 2}:host .control.is-readonly input,:host .control.is-readonly select,:host .control.is-readonly textarea{border-color:var(--ec-form-control-border-color-readonly);background-color:var(--ec-form-control-background-color-readonly);background-clip:border-box;background-image:none;color:var(--ec-form-control-color-readonly);opacity:1;-webkit-user-select:none;user-select:none;pointer-events:none;overflow:hidden;white-space:nowrap}:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-invalid,:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-valid{background-color:var(--ec-form-control-background-color-invalid);border-color:var(--ec-form-control-border-color-invalid);background-repeat:no-repeat;background-position:.5rem center;background-size:1rem,1rem;padding-left:1.75rem;background-image:none}:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-invalid:focus,:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-valid:focus{border-color:var(--ec-form-control-background-color-invalid)}:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-invalid~.icon-invalid,:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-valid~.icon-invalid{display:inline-flex;position:absolute;left:.5rem;top:.5rem;z-index:1}:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-invalid~.icon-required,:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-valid~.icon-required{display:none}:host .control.invalid:not(.open) .textbox-group-btn-right ::ng-deep button{background-color:var(--ec-form-control-background-color-invalid)}:host .control.invalid:not(.open) .textbox-group-btn-right ::ng-deep button:not(:focus){border-color:var(--ec-form-control-border-color-invalid)}:host .textbox-group{display:flex;position:relative}:host textarea:focus,:host input:focus,:host select:focus{outline:none}label{color:var(--ec-form-control-label-color, var(--ec-color-secondary-dark));display:block;font-size:var(--ec-font-size-label);line-height:1;margin:calc(var(--ec-font-size-label) / 2) 0}.control.ec-untouched ::ng-deep input.ng-invalid.ng-touched{background-image:none;padding-left:.5rem}.control.ec-untouched ::ng-deep input.ng-invalid.ng-touched:not(.is-empty)~.units-left{left:0}.control.ec-untouched ::ng-deep input:required:not(:disabled).is-empty{background-image:none;background-repeat:no-repeat;background-position:.5rem center;background-size:1rem,1rem;padding-left:1.75rem}.control.ec-untouched ::ng-deep input:required:not(:disabled).is-empty:focus{border-color:var(--ec-form-control-border-color-focus);box-shadow:var(--ec-form-control-box-shadow-focus);position:relative;z-index:1}.control-label-left{display:flex}\n"] }]
236
237
  }], ctorParameters: function () { return [{ type: i1.ValidationMessageService }, { type: i2.TranslateService }]; }, propDecorators: { id: [{
237
238
  type: Input
238
239
  }], attrId: [{
@@ -248,5 +249,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
248
249
  type: Input
249
250
  }], hideValidationMessage: [{
250
251
  type: Input
252
+ }], helpPopover: [{
253
+ type: Input
251
254
  }] } });
252
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1ncm91cC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvY29udHJvbHMvZm9ybS1ncm91cC9mb3JtLWdyb3VwLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9jb250cm9scy9mb3JtLWdyb3VwL2Zvcm0tZ3JvdXAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxLQUFLLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBbUIsa0JBQWtCLEVBQW9CLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0gsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUNuQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7QUFLM0M7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sZ0NBQWdDLEdBQUcsQ0FBQyxFQUF1QyxFQUFFLGdCQUErQixPQUFPLEVBQUUsV0FBb0IsRUFBUSxFQUFFO0lBQzlKLElBQUksaUJBQWlCLEdBQTRCLEVBQUUsQ0FBQztJQUVwRCxtRUFBbUU7SUFDbkUsc0NBQXNDO0lBQ3RDLGtCQUFrQixDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQXdCLEVBQUUsRUFBRTtRQUNsRCxJQUFJLFlBQVksR0FBUSxlQUFlLENBQUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUU3RSxJQUFJLFlBQVksS0FBSyxJQUFJLElBQUksWUFBWSxLQUFLLEVBQUUsRUFBRTtZQUNoRCxJQUFJLE9BQU8sWUFBWSxLQUFLLFFBQVEs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Z0IsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2lCQUM3QzthQUNGO1NBQ0Y7YUFBTTtZQUNMLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7U0FDNUI7SUFDSCxDQUFDOzsrR0E5SVUsa0JBQWtCO21HQUFsQixrQkFBa0IsMlNDcEkvQiw2YUFRTTsyRkQ0SE8sa0JBQWtCO2tCQUw5QixTQUFTOytCQUNFLGVBQWU7OElBU1QsRUFBRTtzQkFBakIsS0FBSztnQkFLeUIsTUFBTTtzQkFBcEMsV0FBVzt1QkFBQyxTQUFTO2dCQUtOLEtBQUs7c0JBQXBCLEtBQUs7Z0JBU1UsU0FBUztzQkFBeEIsS0FBSztnQkFLVSxhQUFhO3NCQUE1QixLQUFLO2dCQU1VLHVCQUF1QjtzQkFBdEMsS0FBSztnQkFJVSxxQkFBcUI7c0JBQXBDLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIEhvc3RCaW5kaW5nIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgVW50eXBlZEZvcm1Hcm91cCwgVW50eXBlZEZvcm1BcnJheSwgQWJzdHJhY3RDb250cm9sLCBVbnR5cGVkRm9ybUNvbnRyb2wsIFZhbGlkYXRpb25FcnJvcnMgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gXCJAbmd4LXRyYW5zbGF0ZS9jb3JlXCI7XHJcbmltcG9ydCB7IGNsb25lRGVlcCB9IGZyb20gXCJsb2Rhc2hcIjtcclxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xyXG5pbXBvcnQgeyBWYWxpZGF0aW9uTWVzc2FnZVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vY29yZS92YWxpZGF0aW9uLW1lc3NhZ2Uuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBDb250cm9sTGFiZWxQb3NpdGlvbiB9IGZyb20gXCIuLi9mb3JtLWNvbnRyb2wtYmFzZVwiO1xyXG5cclxuXHJcbi8qKiBGdW5jdGlvbiB0byBpdGVyYXRlIG92ZXIgZm9ybSBjb250cm9scyBhbmRcclxuICogIGVuc3VyZSB0aGV5IGNvbnRhaW4gdW5pcXVlIHZhbHVlcy4gIElmIGFueSBhcmUgZHVwbGljYXRlZCBhbGwgb2ZmZW5kaW5nXHJcbiAqICBmb3JtIGNvbnRyb2xzIHdpbGwgYmUgbWFya2VkIGFzIGludmFsaWRcclxuICpcclxuICogQHBhcmFtIHZhbHVlUHJvcGVydHkgLSB0aGUgc3ViLXByb3BlcnR5IG9mIHRoZSBvYmplY3QgcmVwcmVzZW50ZWQgYnkgZWFjaCBmb3JtIGNvbnRyb2xcclxuICogICAgICAgIGl0IGlzIGRlcmVmZXJlbmNlZCBhcyBmb3JtR3JvdXAuY29udHJvbC52YWx1ZVt2YWx1ZVByb3BlcnR5XS5cclxuICogICAgICAgIGRlZmF1bHRzIHRvIFwidmFsdWVcIiwgd2hpY2ggbWF0Y2hlcyB0aGUgZm9ybSBjb250cm9scyB1c2VkIHRvIGJhY2sgY29tYm9ib3hlc1xyXG4gKiAgICAgICAgaWYgZXhwbGljaXRseSBudWxsLCB0aGlzIGZ1bmN0aW9uIGFzc3VtZXMgdmFsdWUgaXMgbm90IGEgY29tcGxleCBvYmplY3QgYW5kIGp1c3QgZXh0cmFjdHNcclxuICogICAgICAgIGZvcm1Hcm91cC5jb250cm9sLnZhbHVlXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgdmFsaWRhdGVGb3JtR3JvdXBWYWx1ZXNBcmVVbmlxdWUgPSAoZmc6IFVudHlwZWRGb3JtR3JvdXAgfCBVbnR5cGVkRm9ybUFycmF5LCB2YWx1ZVByb3BlcnR5OiBzdHJpbmcgfCBudWxsID0gXCJ2YWx1ZVwiLCBzdWJQcm9wZXJ0eT86IHN0cmluZyk6IHZvaWQgPT4ge1xyXG4gIGxldCBmb3JtQ29udHJvbFZhbHVlczoge1trZXk6IHN0cmluZ106IG51bWJlcn0gPSB7fTtcclxuXHJcbiAgLy8gRmlyc3QgZ2V0IGFsbCBvZiB0aGUgdmFsdWVzIGFuZCBpZiB0aGV5IGhhdmUgYmVlbiBmb3VuZCBhbHJlYWR5LFxyXG4gIC8vIGluY3JlbWVudCB0aGUgbnVtYmVyIG9mIHRpbWVzIGZvdW5kXHJcbiAgZm9yRWFjaEZvcm1Db250cm9sKGZnLCAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKSA9PiB7XHJcbiAgICBsZXQgY29udHJvbFZhbHVlOiBhbnkgPSBnZXRDb250cm9sVmFsdWUoY29udHJvbCwgdmFsdWVQcm9wZXJ0eSwgc3ViUHJvcGVydHkpO1xyXG5cclxuICAgIGlmIChjb250cm9sVmFsdWUgIT09IG51bGwgJiYgY29udHJvbFZhbHVlICE9PSAnJykge1xyXG4gICAgICBpZiAodHlwZW9mIGNvbnRyb2xWYWx1ZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICBjb250cm9sVmFsdWUgPSBjb250cm9sVmFsdWUudG9Mb3dlckNhc2UoKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoZm9ybUNvbnRyb2xWYWx1ZXMuaGFzT3duUHJvcGVydHkoY29udHJvbFZhbHVlKSkge1xyXG4gICAgICAgIGZvcm1Db250cm9sVmFsdWVzW2NvbnRyb2xWYWx1ZV0gPSBmb3JtQ29udHJvbFZhbHVlc1tjb250cm9sVmFsdWVdICsgMTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBmb3JtQ29udHJvbFZhbHVlc1tjb250cm9sVmFsdWVdID0gMTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxuICAvLyBOb3cgZ28gYmFjayBvdmVyIHRoZSBjb250cm9scyBhbmQgaWYgdGhlaXIgdmFsdWUgd2FzIGZvdW5kIG1vcmUgdGhhbiBvbmNlIGZsYWcgdGhlbSBhcyBpbnZhbGlkXHJcbiAgZm9yRWFjaEZvcm1Db250cm9sKGZnLCAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKSA9PiB7XHJcbiAgICBsZXQgY29udHJvbFZhbHVlOiBhbnkgPSBnZXRDb250cm9sVmFsdWUoY29udHJvbCwgdmFsdWVQcm9wZXJ0eSwgc3ViUHJvcGVydHkpO1xyXG5cclxuICAgIC8vIElmIHRoZSBjb250cm9sIHZhbHVlIGlzIG51bGwgd2Ugd2lsbCBsZXQgYW55IHJlcXVpcmVkIHZhbGlkYXRvcnMgaGFuZGxlIHRoZW1cclxuICAgIGlmIChjb250cm9sVmFsdWUgIT09IG51bGwgJiYgY29udHJvbFZhbHVlICE9PSAnJykge1xyXG4gICAgICBpZiAodHlwZW9mIGNvbnRyb2xWYWx1ZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICBjb250cm9sVmFsdWUgPSBjb250cm9sVmFsdWUudG9Mb3dlckNhc2UoKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoZm9ybUNvbnRyb2xWYWx1ZXNbY29udHJvbFZhbHVlXSA+IDEpIHtcclxuICAgICAgICBjb250cm9sLnNldEVycm9ycyhPYmplY3QuYXNzaWduKHsgbm90VW5pcXVlOiB0cnVlIH0sIGNvbnRyb2wuZXJyb3JzKSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gR2V0IGEgY29weSBvZiB0aGUgZXhpc3RpbmcgZm9ybSBjb250cm9sIGVycm9ycywgaWYgYW55XHJcbiAgICAgICAgbGV0IGVycm9ycyA9IGNsb25lRGVlcChjb250cm9sLmVycm9ycyk7XHJcblxyXG4gICAgICAgIC8vIElmIHRoZXJlIGFyZSBlcnJvcnMgYW5kIHByZXZpb3VzbHkgaGFkIHRoZSBub3RVbmlxdWUgZXJyb3Igd2Ugd2FudCB0byByZW1vdmVcclxuICAgICAgICAvLyB0aGF0IHByb3BlcnR5XHJcbiAgICAgICAgaWYgKGVycm9ycyAmJiBlcnJvcnMuaGFzT3duUHJvcGVydHkoXCJub3RVbmlxdWVcIikpIHtcclxuICAgICAgICAgIGRlbGV0ZSBlcnJvcnMubm90VW5pcXVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gSWYgdGhhdCB3YXMgdGhlIG9ubHkgZXJyb3IgaW4gdGhlIG9iamVjdCwgc2V0IHRvIG51bGwgc28gdmFsaWRhdGlvbiBwYXNzZXNcclxuICAgICAgICBpZiAoZXJyb3JzICYmIE9iamVjdC5rZXlzKGVycm9ycykubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICBlcnJvcnMgPSBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29udHJvbC5zZXRFcnJvcnMoZXJyb3JzKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH0pO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEZ1bmN0aW9uIHRvIGl0ZXJhdGUgb3ZlciBmb3IgY29udHJvbHMgYW5kIGludm9rZSB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gd2hlbiB0aGV5IGFyZSBmb3VuZC5cclxuICogUmVjdXJzaXZlbHkgY2FsbHMgaXRzZWxmIHdoZW4gaXQgZW5jb3VudGVycyBzdWIgZm9ybSBncm91cHMgYW5kIGl0ZXJhdGVzIG92ZXIgZm9ybSBhcnJheXMuXHJcbiAqIEBwYXJhbSBjXHJcbiAqIEBwYXJhbSBjYWxsYmFja1xyXG4gKi9cclxuZXhwb3J0IGNvbnN0IGZvckVhY2hGb3JtQ29udHJvbCA9IChjOiBBYnN0cmFjdENvbnRyb2wsIGNhbGxiYWNrOiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKSA9PiB2b2lkKTogdm9pZCA9PiB7XHJcbiAgbGV0IGNvbnRyb2xzOiBBYnN0cmFjdENvbnRyb2xbXSA9IFtdO1xyXG5cclxuICAvLyBOb3JtYWxpemUgdG8gYW4gYXJyYXkgZm9yIGVhc2Ugb2YgcHJvY2Vzc2luZ1xyXG4gIGlmIChjIGluc3RhbmNlb2YgVW50eXBlZEZvcm1Db250cm9sKSB7XHJcbiAgICBjb250cm9scy5wdXNoKGMpO1xyXG4gIH0gZWxzZSBpZiAoYyBpbnN0YW5jZW9mIFVudHlwZWRGb3JtR3JvdXApIHtcclxuICAgIGZvciAodmFyIGtleSBpbiBjLmNvbnRyb2xzKSB7XHJcbiAgICAgIGNvbnRyb2xzLnB1c2goYy5jb250cm9sc1trZXldKTtcclxuICAgIH1cclxuICB9IGVsc2UgaWYgKGMgaW5zdGFuY2VvZiBVbnR5cGVkRm9ybUFycmF5KSB7XHJcbiAgICBjb250cm9scyA9IGMuY29udHJvbHM7XHJcbiAgfVxyXG5cclxuICBjb250cm9scy5mb3JFYWNoKGNvbnRyb2wgPT4ge1xyXG4gICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBVbnR5cGVkRm9ybUFycmF5KSB7XHJcbiAgICAgIGNvbnRyb2wuY29udHJvbHMuZm9yRWFjaChjdHJsID0+IHtcclxuICAgICAgICBpZiAoY3RybCBpbnN0YW5jZW9mIFVudHlwZWRGb3JtR3JvdXAgfHwgY3RybCBpbnN0YW5jZW9mIFVudHlwZWRGb3JtQXJyYXkpIHtcclxuICAgICAgICAgIGZvckVhY2hGb3JtQ29udHJvbChjdHJsLCBjYWxsYmFjayk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNhbGxiYWNrKGN0cmwpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2UgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBVbnR5cGVkRm9ybUdyb3VwKSB7XHJcbiAgICAgIGZvckVhY2hGb3JtQ29udHJvbChjb250cm9sLGNhbGxiYWNrKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNhbGxiYWNrKGNvbnRyb2wpO1xyXG4gICAgfVxyXG4gIH0pO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEZ1bmN0aW9uIHRvIHJldHVybiB0aGUgdmFsdWUgaWYgaXQgaXMgZW5hYmxlZCBhbmQgc2V0XHJcbiAqIEBwYXJhbSBjb250cm9sXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgZ2V0Q29udHJvbFZhbHVlID0gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCwgdmFsdWVQcm9wZXJ0eTogc3RyaW5nIHwgbnVsbCA9IFwidmFsdWVcIiwgc3ViUHJvcGVydHk/OiBzdHJpbmcpOiBhbnkgfCBudWxsID0+IHtcclxuICBpZiAoY29udHJvbC5lbmFibGVkICYmIChjb250cm9sLnZhbHVlICE9PSBudWxsICYmIGNvbnRyb2wudmFsdWUgIT09IHVuZGVmaW5lZCkpIHtcclxuICAgIGlmICh2YWx1ZVByb3BlcnR5ID09PSBudWxsKSB7XHJcbiAgICAgIHJldHVybiBjb250cm9sLnZhbHVlO1xyXG4gICAgfSBlbHNlIGlmIChzdWJQcm9wZXJ0eSkge1xyXG4gICAgICByZXR1cm4gY29udHJvbC52YWx1ZVt2YWx1ZVByb3BlcnR5XVtzdWJQcm9wZXJ0eV07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gY29udHJvbC52YWx1ZVt2YWx1ZVByb3BlcnR5XTtcclxuICAgIH1cclxuICB9IGVsc2Uge1xyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2VjLWZvcm0tZ3JvdXAnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9mb3JtLWdyb3VwLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9mb3JtLWdyb3VwLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIEZvcm1Hcm91cENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIC8qKlxyXG4gICAqIElkXHJcbiAgICovXHJcbiAgQElucHV0KCkgcHVibGljIGlkPzogc3RyaW5nO1xyXG5cclxuICAvKipcclxuICAgKiBCaW5kIGlkIHRvIGhvc3QgZWxlbWVudFxyXG4gICAqL1xyXG4gIEBIb3N0QmluZGluZygnYXR0ci5pZCcpIHB1YmxpYyBhdHRySWQ/OiBzdHJpbmc7XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBmb3JtIGNvbnRyb2wgbGFiZWxcclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgbGFiZWw6IHN0cmluZyA9ICcnO1xyXG5cclxuICAvKipcclxuICAgKiBVSS1vcmllbnRlZCBmb3JtIG1vZGVsIHRoYXQgcmV0YWlucyB0aGUgc3RhdGVzIGFuZCB2YWx1ZXMgb2YgdGhlIEhUTUwgY29udHJvbHMgb24gc2NyZWVuLlxyXG4gICAqIENhbiBiZSBhIHtAbGluayBGb3JtQ29udHJvbH0gb3IgYSB7QGxpbmsgRm9ybUdyb3VwfVxyXG4gICAqXHJcbiAgICogQHR5cGUge0Zvcm1Hcm91cH1cclxuICAgKiBAbWVtYmVyb2YgRm9ybUNvbnRyb2xCYXNlXHJcbiAgICovXHJcbiAgQElucHV0KCkgcHVibGljIGZvcm1Hcm91cD86IFVudHlwZWRGb3JtR3JvdXA7XHJcblxyXG4gIC8qKlxyXG4gICAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSBmb3JtIGNvbnRyb2wgbGFiZWwgKHRvcHxib3R0b218bGVmdClcclxuICAgICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBsYWJlbFBvc2l0aW9uPzogQ29udHJvbExhYmVsUG9zaXRpb24gPSBcInRvcFwiO1xyXG5cclxuXHJcbiAgLyoqQW4gb3B0aW9uYWwgc3RyaW5nIHRvIHNob3cgaWYgYW55IG9mIHRoZSB1bmRlcmx5aW5nIGNvbnRyb2xzIGhhcyBhbiBlcnJvci4gSWYgZmFsc3ksIG9uZSBvZiB0aGVcclxuICAgKiBlcnJvcnMgZnJvbSB0aGUgdW5kZXJseWluZyBjb250cm9scyB3aWxsIGJlIHVzZWQuXHJcbiAgICovXHJcbiAgQElucHV0KCkgcHVibGljIG92ZXJyaWRlVmFsaWRhdGlvbkVycm9yPzogc3RyaW5nID0gXCJcIjtcclxuXHJcbiAgLyoqQW4gb3B0aW9uYWwgZmxhZyB0byBoaWRlIHRoZSB2YWxpZGF0aW9uIG1lc3NhZ2VzLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBoaWRlVmFsaWRhdGlvbk1lc3NhZ2U/OmJvb2xlYW4gPSBmYWxzZTtcclxuICAvKipcclxuICAgKiBBbGwgY3VycmVudCB2YWxpZGF0aW9uIGVycm9yc1xyXG4gICAqXHJcbiAgICogQHR5cGUge3N0cmluZ31cclxuICAgKiBAbWVtYmVyb2YgRm9ybUNvbnRyb2xCYXNlXHJcbiAgICovXHJcbiAgcHVibGljIHZhbGlkYXRpb25FcnJvcnM6IHN0cmluZyA9IFwiXCI7XHJcblxyXG4gIHB1YmxpYyBhbGxDb250cm9sc1RvdWNoZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgcHJpdmF0ZSBjb21wb25lbnREZXN0cm95ZWQ6IFN1YmplY3Q8YW55PiA9IG5ldyBTdWJqZWN0PGFueT4oKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcm90ZWN0ZWQgdmFsaWRhdGlvbk1lc3NhZ2VTZXJ2aWNlOiBWYWxpZGF0aW9uTWVzc2FnZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2VcclxuICApIHsgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgbmdPbkluaXQoKSB7XHJcbiAgICAvLyBzdWJzY3JpYmUgdG8gc3RhdHVzQ2hhbmdlcyBPYnNlcnZhYmxlIHRvIHRha2UgYW55IGVycm9ycyBhbmQgdHJhbnNsYXRlIHRoZW1cclxuICAgIGlmICh0aGlzLmZvcm1Hcm91cCkge1xyXG4gICAgICB0aGlzLmZvcm1Hcm91cC5zdGF0dXNDaGFuZ2VzXHJcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuY29tcG9uZW50RGVzdHJveWVkKSlcclxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgIHRoaXMudHJhbnNsYXRlVmFsaWRhdGlvbk1lc3NhZ2VzKHRoaXMuZ2V0RXJyb3JzKHRoaXMuZm9ybUdyb3VwISkpXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAvLyAocmUpc2V0IHZhbGlkYXRpb24gbWVzc2FnZXNcclxuICAgICAgdGhpcy50cmFuc2xhdGVWYWxpZGF0aW9uTWVzc2FnZXModGhpcy5nZXRFcnJvcnModGhpcy5mb3JtR3JvdXApKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5pZCkge1xyXG4gICAgICB0aGlzLmF0dHJJZCA9IHRoaXMuaWQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBbmd1bGFyIG9uRGVzdHJveSBsaWZlY3lsZSBob29rLlxyXG4gICAqIFVuc3Vic2NyaWJlIGZyb20gYW55IG9ic2VydmFibGVzXHJcbiAgICpcclxuICAgKiBAc2VlIGh0dHBzOi8vYW5ndWxhci5pby9ndWlkZS9saWZlY3ljbGUtaG9va3NcclxuICAgKiBAbWVtYmVyb2YgRm9ybUNvbnRyb2xCYXNlXHJcbiAgICovXHJcbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5jb21wb25lbnREZXN0cm95ZWQubmV4dCgpO1xyXG4gICAgdGhpcy5jb21wb25lbnREZXN0cm95ZWQudW5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0RXJyb3JzKGZvcm1Hcm91cDogVW50eXBlZEZvcm1Hcm91cCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcclxuICAgIGZvcm1Hcm91cC5tYXJrQXNVbnRvdWNoZWQoKTtcclxuXHJcbiAgICBsZXQgZXJyb3JzOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9IG51bGw7XHJcbiAgICBsZXQgYWxsVG91Y2hlZDogYm9vbGVhbiA9IHRydWU7XHJcbiAgICBsZXQgY29udHJvbEZvdW5kOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgZm9yRWFjaEZvcm1Db250cm9sKGZvcm1Hcm91cCwgKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCkgPT4ge1xyXG4gICAgICBlcnJvcnMgPSB0aGlzLmFzc2lnbkVycm9ycyhjb250cm9sLCBlcnJvcnMpO1xyXG4gICAgICBpZiAoY29udHJvbC51bnRvdWNoZWQpIHtcclxuICAgICAgICBhbGxUb3VjaGVkID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgY29udHJvbEZvdW5kID0gdHJ1ZTtcclxuICAgIH0pO1xyXG5cclxuICAgIGlmIChmb3JtR3JvdXAuZXJyb3JzKSB7XHJcbiAgICAgIGVycm9ycyA9IE9iamVjdC5hc3NpZ24oZXJyb3JzIHx8IHt9LCBmb3JtR3JvdXAuZXJyb3JzKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoYWxsVG91Y2hlZCAmJiBjb250cm9sRm91bmQpIHtcclxuICAgICAgZm9ybUdyb3VwLm1hcmtBc1RvdWNoZWQoKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZXJyb3JzO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3NpZ25FcnJvcnMoY29udHJvbDogQWJzdHJhY3RDb250cm9sLCBlcnJvcnM6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xyXG4gICAgaWYgKGNvbnRyb2wuZXJyb3JzKSB7XHJcbiAgICAgIGVycm9ycyA9IE9iamVjdC5hc3NpZ24oZXJyb3JzIHx8IHt9LCBjb250cm9sLmVycm9ycyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGVycm9yc1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRnVuY3Rpb24gdGhhdCBzdWJzY3JpYmVzIHRvIHRoZSBmb3JtR3JvdXAncyB2YWx1ZUNoYW5nZXMgT2JzZXJ2YWJsZVxyXG4gICAqIHRvIHRha2UgYW55IGVycm9zIGFuZCB0cmFuc2xhdGUgdGhlbVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHsqfSBbZGF0YV1cclxuICAgKiBAcmV0dXJuc1xyXG4gICAqIEBtZW1iZXJvZiBGb3JtQ29udHJvbEJhc2VcclxuICAgKi9cclxuICBwcml2YXRlIGFzeW5jIHRyYW5zbGF0ZVZhbGlkYXRpb25NZXNzYWdlcyhlcnJvcnM6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsKSB7XHJcbiAgICBpZiAoZXJyb3JzKSB7XHJcbiAgICAgIGlmKHRoaXMub3ZlcnJpZGVWYWxpZGF0aW9uRXJyb3Ipe1xyXG4gICAgICAgIHRoaXMudmFsaWRhdGlvbkVycm9ycyA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KHRoaXMub3ZlcnJpZGVWYWxpZGF0aW9uRXJyb3IpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxldCBtZXNzYWdlcyA9IGF3YWl0IHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VTZXJ2aWNlLmdldEVycm9yTWVzc2FnZXMoZXJyb3JzKTtcclxuICAgICAgICBpZiAobWVzc2FnZXMpIHtcclxuICAgICAgICAgIHRoaXMudmFsaWRhdGlvbkVycm9ycyA9IG1lc3NhZ2VzLmpvaW4oJzsgJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnZhbGlkYXRpb25FcnJvcnMgPSAnJztcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImNvbnRyb2wgY29udHJvbC1sYWJlbC17e2xhYmVsUG9zaXRpb259fVwiIFtjbGFzcy5lYy11bnRvdWNoZWRdPVwiZm9ybUdyb3VwPy51bnRvdWNoZWRcIj5cclxuICA8bGFiZWwgKm5nSWY9XCJsYWJlbFwiIG5nUHJlc2VydmVXaGl0ZXNwYWNlcz5cclxuXHJcbiAgICA8c3BhbiBpZD1cInt7aWR9fV9sYWJlbFwiPnt7bGFiZWwgfCB0cmFuc2xhdGV9fTwvc3Bhbj5cclxuXHJcbiAgICA8c3BhbiAqbmdJZj1cIiFoaWRlVmFsaWRhdGlvbk1lc3NhZ2UgJiYgdmFsaWRhdGlvbkVycm9ycyAmJiBmb3JtR3JvdXA/LnRvdWNoZWQgJiYgZm9ybUdyb3VwPy5pbnZhbGlkXCI+e3t2YWxpZGF0aW9uRXJyb3JzIHwgdHJhbnNsYXRlfX08L3NwYW4+XHJcbiAgPC9sYWJlbD5cclxuICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XHJcbjwvZGl2PiJdfQ==
255
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1ncm91cC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvY29udHJvbHMvZm9ybS1ncm91cC9mb3JtLWdyb3VwLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9jb250cm9scy9mb3JtLWdyb3VwL2Zvcm0tZ3JvdXAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxLQUFLLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBbUIsa0JBQWtCLEVBQW9CLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0gsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUNuQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7O0FBSzNDOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0sQ0FBQyxNQUFNLGdDQUFnQyxHQUFHLENBQUMsRUFBdUMsRUFBRSxnQkFBK0IsT0FBTyxFQUFFLFdBQW9CLEVBQVEsRUFBRTtJQUM5SixJQUFJLGlCQUFpQixHQUE0QixFQUFFLENBQUM7SUFFcEQsbUVBQW1FO0lBQ25FLHNDQUFzQztJQUN0QyxrQkFBa0IsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUF3QixFQUFFLEVBQUU7UUFDbEQsSUFBSSxZQUFZLEdBQVEsZUFBZSxDQUFDLE9BQU8sRUFBRSxhQUFhLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFFN0UsSUFBSSxZQUFZLEtBQUssSUFBSSxJQUFJLFlBQVksS0FBSyxFQUFFLEVBQUU7WUFDaEQsSUFBSSxPQUFPLFlBQVksS0FBSyxRQUFR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QWdCLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztpQkFDN0M7YUFDRjtTQUNGO2FBQU07WUFDTCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO1NBQzVCO0lBQ0gsQ0FBQzs7K0dBcEpVLGtCQUFrQjttR0FBbEIsa0JBQWtCLHVVQ3BJL0Isa2dDQXlCTTsyRkQyR08sa0JBQWtCO2tCQUw5QixTQUFTOytCQUNFLGVBQWU7OElBU1QsRUFBRTtzQkFBakIsS0FBSztnQkFLeUIsTUFBTTtzQkFBcEMsV0FBVzt1QkFBQyxTQUFTO2dCQUtOLEtBQUs7c0JBQXBCLEtBQUs7Z0JBU1UsU0FBUztzQkFBeEIsS0FBSztnQkFLVSxhQUFhO3NCQUE1QixLQUFLO2dCQU1VLHVCQUF1QjtzQkFBdEMsS0FBSztnQkFJVSxxQkFBcUI7c0JBQXBDLEtBQUs7Z0JBS1UsV0FBVztzQkFBMUIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgSG9zdEJpbmRpbmcgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBVbnR5cGVkRm9ybUdyb3VwLCBVbnR5cGVkRm9ybUFycmF5LCBBYnN0cmFjdENvbnRyb2wsIFVudHlwZWRGb3JtQ29udHJvbCwgVmFsaWRhdGlvbkVycm9ycyB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSBcIkBuZ3gtdHJhbnNsYXRlL2NvcmVcIjtcclxuaW1wb3J0IHsgY2xvbmVEZWVwIH0gZnJvbSBcImxvZGFzaFwiO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XHJcbmltcG9ydCB7IFZhbGlkYXRpb25NZXNzYWdlU2VydmljZSB9IGZyb20gXCIuLi8uLi9jb3JlL3ZhbGlkYXRpb24tbWVzc2FnZS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IENvbnRyb2xMYWJlbFBvc2l0aW9uIH0gZnJvbSBcIi4uL2Zvcm0tY29udHJvbC1iYXNlXCI7XHJcblxyXG5cclxuLyoqIEZ1bmN0aW9uIHRvIGl0ZXJhdGUgb3ZlciBmb3JtIGNvbnRyb2xzIGFuZFxyXG4gKiAgZW5zdXJlIHRoZXkgY29udGFpbiB1bmlxdWUgdmFsdWVzLiAgSWYgYW55IGFyZSBkdXBsaWNhdGVkIGFsbCBvZmZlbmRpbmdcclxuICogIGZvcm0gY29udHJvbHMgd2lsbCBiZSBtYXJrZWQgYXMgaW52YWxpZFxyXG4gKlxyXG4gKiBAcGFyYW0gdmFsdWVQcm9wZXJ0eSAtIHRoZSBzdWItcHJvcGVydHkgb2YgdGhlIG9iamVjdCByZXByZXNlbnRlZCBieSBlYWNoIGZvcm0gY29udHJvbFxyXG4gKiAgICAgICAgaXQgaXMgZGVyZWZlcmVuY2VkIGFzIGZvcm1Hcm91cC5jb250cm9sLnZhbHVlW3ZhbHVlUHJvcGVydHldLlxyXG4gKiAgICAgICAgZGVmYXVsdHMgdG8gXCJ2YWx1ZVwiLCB3aGljaCBtYXRjaGVzIHRoZSBmb3JtIGNvbnRyb2xzIHVzZWQgdG8gYmFjayBjb21ib2JveGVzXHJcbiAqICAgICAgICBpZiBleHBsaWNpdGx5IG51bGwsIHRoaXMgZnVuY3Rpb24gYXNzdW1lcyB2YWx1ZSBpcyBub3QgYSBjb21wbGV4IG9iamVjdCBhbmQganVzdCBleHRyYWN0c1xyXG4gKiAgICAgICAgZm9ybUdyb3VwLmNvbnRyb2wudmFsdWVcclxuICovXHJcbmV4cG9ydCBjb25zdCB2YWxpZGF0ZUZvcm1Hcm91cFZhbHVlc0FyZVVuaXF1ZSA9IChmZzogVW50eXBlZEZvcm1Hcm91cCB8IFVudHlwZWRGb3JtQXJyYXksIHZhbHVlUHJvcGVydHk6IHN0cmluZyB8IG51bGwgPSBcInZhbHVlXCIsIHN1YlByb3BlcnR5Pzogc3RyaW5nKTogdm9pZCA9PiB7XHJcbiAgbGV0IGZvcm1Db250cm9sVmFsdWVzOiB7W2tleTogc3RyaW5nXTogbnVtYmVyfSA9IHt9O1xyXG5cclxuICAvLyBGaXJzdCBnZXQgYWxsIG9mIHRoZSB2YWx1ZXMgYW5kIGlmIHRoZXkgaGF2ZSBiZWVuIGZvdW5kIGFscmVhZHksXHJcbiAgLy8gaW5jcmVtZW50IHRoZSBudW1iZXIgb2YgdGltZXMgZm91bmRcclxuICBmb3JFYWNoRm9ybUNvbnRyb2woZmcsIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpID0+IHtcclxuICAgIGxldCBjb250cm9sVmFsdWU6IGFueSA9IGdldENvbnRyb2xWYWx1ZShjb250cm9sLCB2YWx1ZVByb3BlcnR5LCBzdWJQcm9wZXJ0eSk7XHJcblxyXG4gICAgaWYgKGNvbnRyb2xWYWx1ZSAhPT0gbnVsbCAmJiBjb250cm9sVmFsdWUgIT09ICcnKSB7XHJcbiAgICAgIGlmICh0eXBlb2YgY29udHJvbFZhbHVlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIGNvbnRyb2xWYWx1ZSA9IGNvbnRyb2xWYWx1ZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChmb3JtQ29udHJvbFZhbHVlcy5oYXNPd25Qcm9wZXJ0eShjb250cm9sVmFsdWUpKSB7XHJcbiAgICAgICAgZm9ybUNvbnRyb2xWYWx1ZXNbY29udHJvbFZhbHVlXSA9IGZvcm1Db250cm9sVmFsdWVzW2NvbnRyb2xWYWx1ZV0gKyAxO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGZvcm1Db250cm9sVmFsdWVzW2NvbnRyb2xWYWx1ZV0gPSAxO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG4gIC8vIE5vdyBnbyBiYWNrIG92ZXIgdGhlIGNvbnRyb2xzIGFuZCBpZiB0aGVpciB2YWx1ZSB3YXMgZm91bmQgbW9yZSB0aGFuIG9uY2UgZmxhZyB0aGVtIGFzIGludmFsaWRcclxuICBmb3JFYWNoRm9ybUNvbnRyb2woZmcsIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpID0+IHtcclxuICAgIGxldCBjb250cm9sVmFsdWU6IGFueSA9IGdldENvbnRyb2xWYWx1ZShjb250cm9sLCB2YWx1ZVByb3BlcnR5LCBzdWJQcm9wZXJ0eSk7XHJcblxyXG4gICAgLy8gSWYgdGhlIGNvbnRyb2wgdmFsdWUgaXMgbnVsbCB3ZSB3aWxsIGxldCBhbnkgcmVxdWlyZWQgdmFsaWRhdG9ycyBoYW5kbGUgdGhlbVxyXG4gICAgaWYgKGNvbnRyb2xWYWx1ZSAhPT0gbnVsbCAmJiBjb250cm9sVmFsdWUgIT09ICcnKSB7XHJcbiAgICAgIGlmICh0eXBlb2YgY29udHJvbFZhbHVlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIGNvbnRyb2xWYWx1ZSA9IGNvbnRyb2xWYWx1ZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChmb3JtQ29udHJvbFZhbHVlc1tjb250cm9sVmFsdWVdID4gMSkge1xyXG4gICAgICAgIGNvbnRyb2wuc2V0RXJyb3JzKE9iamVjdC5hc3NpZ24oeyBub3RVbmlxdWU6IHRydWUgfSwgY29udHJvbC5lcnJvcnMpKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBHZXQgYSBjb3B5IG9mIHRoZSBleGlzdGluZyBmb3JtIGNvbnRyb2wgZXJyb3JzLCBpZiBhbnlcclxuICAgICAgICBsZXQgZXJyb3JzID0gY2xvbmVEZWVwKGNvbnRyb2wuZXJyb3JzKTtcclxuXHJcbiAgICAgICAgLy8gSWYgdGhlcmUgYXJlIGVycm9ycyBhbmQgcHJldmlvdXNseSBoYWQgdGhlIG5vdFVuaXF1ZSBlcnJvciB3ZSB3YW50IHRvIHJlbW92ZVxyXG4gICAgICAgIC8vIHRoYXQgcHJvcGVydHlcclxuICAgICAgICBpZiAoZXJyb3JzICYmIGVycm9ycy5oYXNPd25Qcm9wZXJ0eShcIm5vdFVuaXF1ZVwiKSkge1xyXG4gICAgICAgICAgZGVsZXRlIGVycm9ycy5ub3RVbmlxdWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBJZiB0aGF0IHdhcyB0aGUgb25seSBlcnJvciBpbiB0aGUgb2JqZWN0LCBzZXQgdG8gbnVsbCBzbyB2YWxpZGF0aW9uIHBhc3Nlc1xyXG4gICAgICAgIGlmIChlcnJvcnMgJiYgT2JqZWN0LmtleXMoZXJyb3JzKS5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgIGVycm9ycyA9IG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb250cm9sLnNldEVycm9ycyhlcnJvcnMpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSk7XHJcbn07XHJcblxyXG4vKipcclxuICogRnVuY3Rpb24gdG8gaXRlcmF0ZSBvdmVyIGZvciBjb250cm9scyBhbmQgaW52b2tlIHRoZSBjYWxsYmFjayBmdW5jdGlvbiB3aGVuIHRoZXkgYXJlIGZvdW5kLlxyXG4gKiBSZWN1cnNpdmVseSBjYWxscyBpdHNlbGYgd2hlbiBpdCBlbmNvdW50ZXJzIHN1YiBmb3JtIGdyb3VwcyBhbmQgaXRlcmF0ZXMgb3ZlciBmb3JtIGFycmF5cy5cclxuICogQHBhcmFtIGNcclxuICogQHBhcmFtIGNhbGxiYWNrXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgZm9yRWFjaEZvcm1Db250cm9sID0gKGM6IEFic3RyYWN0Q29udHJvbCwgY2FsbGJhY2s6IChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpID0+IHZvaWQpOiB2b2lkID0+IHtcclxuICBsZXQgY29udHJvbHM6IEFic3RyYWN0Q29udHJvbFtdID0gW107XHJcblxyXG4gIC8vIE5vcm1hbGl6ZSB0byBhbiBhcnJheSBmb3IgZWFzZSBvZiBwcm9jZXNzaW5nXHJcbiAgaWYgKGMgaW5zdGFuY2VvZiBVbnR5cGVkRm9ybUNvbnRyb2wpIHtcclxuICAgIGNvbnRyb2xzLnB1c2goYyk7XHJcbiAgfSBlbHNlIGlmIChjIGluc3RhbmNlb2YgVW50eXBlZEZvcm1Hcm91cCkge1xyXG4gICAgZm9yICh2YXIga2V5IGluIGMuY29udHJvbHMpIHtcclxuICAgICAgY29udHJvbHMucHVzaChjLmNvbnRyb2xzW2tleV0pO1xyXG4gICAgfVxyXG4gIH0gZWxzZSBpZiAoYyBpbnN0YW5jZW9mIFVudHlwZWRGb3JtQXJyYXkpIHtcclxuICAgIGNvbnRyb2xzID0gYy5jb250cm9scztcclxuICB9XHJcblxyXG4gIGNvbnRyb2xzLmZvckVhY2goY29udHJvbCA9PiB7XHJcbiAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIFVudHlwZWRGb3JtQXJyYXkpIHtcclxuICAgICAgY29udHJvbC5jb250cm9scy5mb3JFYWNoKGN0cmwgPT4ge1xyXG4gICAgICAgIGlmIChjdHJsIGluc3RhbmNlb2YgVW50eXBlZEZvcm1Hcm91cCB8fCBjdHJsIGluc3RhbmNlb2YgVW50eXBlZEZvcm1BcnJheSkge1xyXG4gICAgICAgICAgZm9yRWFjaEZvcm1Db250cm9sKGN0cmwsIGNhbGxiYWNrKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY2FsbGJhY2soY3RybCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSBpZiAoY29udHJvbCBpbnN0YW5jZW9mIFVudHlwZWRGb3JtR3JvdXApIHtcclxuICAgICAgZm9yRWFjaEZvcm1Db250cm9sKGNvbnRyb2wsY2FsbGJhY2spO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY2FsbGJhY2soY29udHJvbCk7XHJcbiAgICB9XHJcbiAgfSk7XHJcbn07XHJcblxyXG4vKipcclxuICogRnVuY3Rpb24gdG8gcmV0dXJuIHRoZSB2YWx1ZSBpZiBpdCBpcyBlbmFibGVkIGFuZCBzZXRcclxuICogQHBhcmFtIGNvbnRyb2xcclxuICovXHJcbmV4cG9ydCBjb25zdCBnZXRDb250cm9sVmFsdWUgPSAoY29udHJvbDogQWJzdHJhY3RDb250cm9sLCB2YWx1ZVByb3BlcnR5OiBzdHJpbmcgfCBudWxsID0gXCJ2YWx1ZVwiLCBzdWJQcm9wZXJ0eT86IHN0cmluZyk6IGFueSB8IG51bGwgPT4ge1xyXG4gIGlmIChjb250cm9sLmVuYWJsZWQgJiYgKGNvbnRyb2wudmFsdWUgIT09IG51bGwgJiYgY29udHJvbC52YWx1ZSAhPT0gdW5kZWZpbmVkKSkge1xyXG4gICAgaWYgKHZhbHVlUHJvcGVydHkgPT09IG51bGwpIHtcclxuICAgICAgcmV0dXJuIGNvbnRyb2wudmFsdWU7XHJcbiAgICB9IGVsc2UgaWYgKHN1YlByb3BlcnR5KSB7XHJcbiAgICAgIHJldHVybiBjb250cm9sLnZhbHVlW3ZhbHVlUHJvcGVydHldW3N1YlByb3BlcnR5XTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBjb250cm9sLnZhbHVlW3ZhbHVlUHJvcGVydHldO1xyXG4gICAgfVxyXG4gIH0gZWxzZSB7XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZWMtZm9ybS1ncm91cCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2Zvcm0tZ3JvdXAuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2Zvcm0tZ3JvdXAuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRm9ybUdyb3VwQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgLyoqXHJcbiAgICogSWRcclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgaWQ/OiBzdHJpbmc7XHJcblxyXG4gIC8qKlxyXG4gICAqIEJpbmQgaWQgdG8gaG9zdCBlbGVtZW50XHJcbiAgICovXHJcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmlkJykgcHVibGljIGF0dHJJZD86IHN0cmluZztcclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIGZvcm0gY29udHJvbCBsYWJlbFxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBsYWJlbDogc3RyaW5nID0gJyc7XHJcblxyXG4gIC8qKlxyXG4gICAqIFVJLW9yaWVudGVkIGZvcm0gbW9kZWwgdGhhdCByZXRhaW5zIHRoZSBzdGF0ZXMgYW5kIHZhbHVlcyBvZiB0aGUgSFRNTCBjb250cm9scyBvbiBzY3JlZW4uXHJcbiAgICogQ2FuIGJlIGEge0BsaW5rIEZvcm1Db250cm9sfSBvciBhIHtAbGluayBGb3JtR3JvdXB9XHJcbiAgICpcclxuICAgKiBAdHlwZSB7Rm9ybUdyb3VwfVxyXG4gICAqIEBtZW1iZXJvZiBGb3JtQ29udHJvbEJhc2VcclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgZm9ybUdyb3VwPzogVW50eXBlZEZvcm1Hcm91cDtcclxuXHJcbiAgLyoqXHJcbiAgICAgKiBUaGUgcG9zaXRpb24gb2YgdGhlIGZvcm0gY29udHJvbCBsYWJlbCAodG9wfGJvdHRvbXxsZWZ0KVxyXG4gICAgICovXHJcbiAgQElucHV0KCkgcHVibGljIGxhYmVsUG9zaXRpb24/OiBDb250cm9sTGFiZWxQb3NpdGlvbiA9IFwidG9wXCI7XHJcblxyXG5cclxuICAvKipBbiBvcHRpb25hbCBzdHJpbmcgdG8gc2hvdyBpZiBhbnkgb2YgdGhlIHVuZGVybHlpbmcgY29udHJvbHMgaGFzIGFuIGVycm9yLiBJZiBmYWxzeSwgb25lIG9mIHRoZVxyXG4gICAqIGVycm9ycyBmcm9tIHRoZSB1bmRlcmx5aW5nIGNvbnRyb2xzIHdpbGwgYmUgdXNlZC5cclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgb3ZlcnJpZGVWYWxpZGF0aW9uRXJyb3I/OiBzdHJpbmcgPSBcIlwiO1xyXG5cclxuICAvKipBbiBvcHRpb25hbCBmbGFnIHRvIGhpZGUgdGhlIHZhbGlkYXRpb24gbWVzc2FnZXMuXHJcbiAgICovXHJcbiAgQElucHV0KCkgcHVibGljIGhpZGVWYWxpZGF0aW9uTWVzc2FnZT86Ym9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBDb25kaXRpb25hbGx5IHNob3cgYSBoZWxwIHBvcG92ZXIgbmV4dCB0byB0aGUgY29udHJvbHMgbGFiZWwuXHJcbiAgICovXHJcbiAgQElucHV0KCkgcHVibGljIGhlbHBQb3BvdmVyPzogc3RyaW5nO1xyXG5cclxuICAvKipcclxuICAgKiBBbGwgY3VycmVudCB2YWxpZGF0aW9uIGVycm9yc1xyXG4gICAqXHJcbiAgICogQHR5cGUge3N0cmluZ31cclxuICAgKiBAbWVtYmVyb2YgRm9ybUNvbnRyb2xCYXNlXHJcbiAgICovXHJcbiAgcHVibGljIHZhbGlkYXRpb25FcnJvcnM6IHN0cmluZyA9IFwiXCI7XHJcblxyXG4gIHB1YmxpYyBhbGxDb250cm9sc1RvdWNoZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgcHJpdmF0ZSBjb21wb25lbnREZXN0cm95ZWQ6IFN1YmplY3Q8YW55PiA9IG5ldyBTdWJqZWN0PGFueT4oKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcm90ZWN0ZWQgdmFsaWRhdGlvbk1lc3NhZ2VTZXJ2aWNlOiBWYWxpZGF0aW9uTWVzc2FnZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2VcclxuICApIHsgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgbmdPbkluaXQoKSB7XHJcbiAgICAvLyBzdWJzY3JpYmUgdG8gc3RhdHVzQ2hhbmdlcyBPYnNlcnZhYmxlIHRvIHRha2UgYW55IGVycm9ycyBhbmQgdHJhbnNsYXRlIHRoZW1cclxuICAgIGlmICh0aGlzLmZvcm1Hcm91cCkge1xyXG4gICAgICB0aGlzLmZvcm1Hcm91cC5zdGF0dXNDaGFuZ2VzXHJcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuY29tcG9uZW50RGVzdHJveWVkKSlcclxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgIHRoaXMudHJhbnNsYXRlVmFsaWRhdGlvbk1lc3NhZ2VzKHRoaXMuZ2V0RXJyb3JzKHRoaXMuZm9ybUdyb3VwISkpXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAvLyAocmUpc2V0IHZhbGlkYXRpb24gbWVzc2FnZXNcclxuICAgICAgdGhpcy50cmFuc2xhdGVWYWxpZGF0aW9uTWVzc2FnZXModGhpcy5nZXRFcnJvcnModGhpcy5mb3JtR3JvdXApKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5pZCkge1xyXG4gICAgICB0aGlzLmF0dHJJZCA9IHRoaXMuaWQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBbmd1bGFyIG9uRGVzdHJveSBsaWZlY3lsZSBob29rLlxyXG4gICAqIFVuc3Vic2NyaWJlIGZyb20gYW55IG9ic2VydmFibGVzXHJcbiAgICpcclxuICAgKiBAc2VlIGh0dHBzOi8vYW5ndWxhci5pby9ndWlkZS9saWZlY3ljbGUtaG9va3NcclxuICAgKiBAbWVtYmVyb2YgRm9ybUNvbnRyb2xCYXNlXHJcbiAgICovXHJcbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5jb21wb25lbnREZXN0cm95ZWQubmV4dCgpO1xyXG4gICAgdGhpcy5jb21wb25lbnREZXN0cm95ZWQudW5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0RXJyb3JzKGZvcm1Hcm91cDogVW50eXBlZEZvcm1Hcm91cCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcclxuICAgIGZvcm1Hcm91cC5tYXJrQXNVbnRvdWNoZWQoKTtcclxuXHJcbiAgICBsZXQgZXJyb3JzOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9IG51bGw7XHJcbiAgICBsZXQgYWxsVG91Y2hlZDogYm9vbGVhbiA9IHRydWU7XHJcbiAgICBsZXQgY29udHJvbEZvdW5kOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgZm9yRWFjaEZvcm1Db250cm9sKGZvcm1Hcm91cCwgKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCkgPT4ge1xyXG4gICAgICBlcnJvcnMgPSB0aGlzLmFzc2lnbkVycm9ycyhjb250cm9sLCBlcnJvcnMpO1xyXG4gICAgICBpZiAoY29udHJvbC51bnRvdWNoZWQpIHtcclxuICAgICAgICBhbGxUb3VjaGVkID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgY29udHJvbEZvdW5kID0gdHJ1ZTtcclxuICAgIH0pO1xyXG5cclxuICAgIGlmIChmb3JtR3JvdXAuZXJyb3JzKSB7XHJcbiAgICAgIGVycm9ycyA9IE9iamVjdC5hc3NpZ24oZXJyb3JzIHx8IHt9LCBmb3JtR3JvdXAuZXJyb3JzKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoYWxsVG91Y2hlZCAmJiBjb250cm9sRm91bmQpIHtcclxuICAgICAgZm9ybUdyb3VwLm1hcmtBc1RvdWNoZWQoKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZXJyb3JzO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3NpZ25FcnJvcnMoY29udHJvbDogQWJzdHJhY3RDb250cm9sLCBlcnJvcnM6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xyXG4gICAgaWYgKGNvbnRyb2wuZXJyb3JzKSB7XHJcbiAgICAgIGVycm9ycyA9IE9iamVjdC5hc3NpZ24oZXJyb3JzIHx8IHt9LCBjb250cm9sLmVycm9ycyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGVycm9yc1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRnVuY3Rpb24gdGhhdCBzdWJzY3JpYmVzIHRvIHRoZSBmb3JtR3JvdXAncyB2YWx1ZUNoYW5nZXMgT2JzZXJ2YWJsZVxyXG4gICAqIHRvIHRha2UgYW55IGVycm9zIGFuZCB0cmFuc2xhdGUgdGhlbVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHsqfSBbZGF0YV1cclxuICAgKiBAcmV0dXJuc1xyXG4gICAqIEBtZW1iZXJvZiBGb3JtQ29udHJvbEJhc2VcclxuICAgKi9cclxuICBwcml2YXRlIGFzeW5jIHRyYW5zbGF0ZVZhbGlkYXRpb25NZXNzYWdlcyhlcnJvcnM6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsKSB7XHJcbiAgICBpZiAoZXJyb3JzKSB7XHJcbiAgICAgIGlmKHRoaXMub3ZlcnJpZGVWYWxpZGF0aW9uRXJyb3Ipe1xyXG4gICAgICAgIHRoaXMudmFsaWRhdGlvbkVycm9ycyA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KHRoaXMub3ZlcnJpZGVWYWxpZGF0aW9uRXJyb3IpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxldCBtZXNzYWdlcyA9IGF3YWl0IHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VTZXJ2aWNlLmdldEVycm9yTWVzc2FnZXMoZXJyb3JzKTtcclxuICAgICAgICBpZiAobWVzc2FnZXMpIHtcclxuICAgICAgICAgIHRoaXMudmFsaWRhdGlvbkVycm9ycyA9IG1lc3NhZ2VzLmpvaW4oJzsgJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnZhbGlkYXRpb25FcnJvcnMgPSAnJztcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImNvbnRyb2wgY29udHJvbC1sYWJlbC17e2xhYmVsUG9zaXRpb259fVwiXHJcbiAgICAgW2NsYXNzLmVjLXVudG91Y2hlZF09XCJmb3JtR3JvdXA/LnVudG91Y2hlZFwiPlxyXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJsYWJlbCAmJiAhaGVscFBvcG92ZXJcIj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzaGFyZWRMYWJlbFwiPjwvbmctY29udGFpbmVyPlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG5cclxuICA8ZGl2ICpuZ0lmPVwibGFiZWwgJiYgaGVscFBvcG92ZXJcIlxyXG4gICAgICAgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic2hhcmVkTGFiZWxcIj48L25nLWNvbnRhaW5lcj5cclxuICAgIDxlYy1oZWxwLXBvcG92ZXIgaWQ9XCJ7e2lkfX1faGVscFBvcG92ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm15LW4yIG14LW4xXCJcclxuICAgICAgICAgICAgICAgICAgICAgdGV4dD1cInt7aGVscFBvcG92ZXIgfCB0cmFuc2xhdGV9fVwiPlxyXG4gICAgPC9lYy1oZWxwLXBvcG92ZXI+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxuZy10ZW1wbGF0ZSAjc2hhcmVkTGFiZWw+XHJcbiAgICA8bGFiZWwgbmdQcmVzZXJ2ZVdoaXRlc3BhY2VzPlxyXG4gICAgICA8c3BhbiAqbmdJZj1cImxhYmVsXCIgaWQ9XCJ7e2lkfX1fbGFiZWxcIj57e2xhYmVsIHwgdHJhbnNsYXRlfX08L3NwYW4+XHJcbiAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICpuZ0lmPVwiIWhpZGVWYWxpZGF0aW9uTWVzc2FnZSAmJiB2YWxpZGF0aW9uRXJyb3JzICYmIGZvcm1Hcm91cD8udG91Y2hlZCAmJiBmb3JtR3JvdXA/LmludmFsaWRcIj57e3ZhbGlkYXRpb25FcnJvcnNcclxuICAgICAgICB8IHRyYW5zbGF0ZX19PC9zcGFuPlxyXG4gICAgPC9sYWJlbD5cclxuICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XHJcbjwvZGl2PiJdfQ==