UNPKG

@asoftwareworld/form-builder

Version:

ASW Form Builder helps you with rapid development and designed web forms which includes several controls. The key feature of Form Builder is to make your content attractive and effective. We can customize our control at run time and preview the same befor

84 lines 18.1 kB
/** * @license * Copyright ASW (A Software World) All Rights Reserved. * * Use of this source code is governed by an MIT-style license that can be * found in the LICENSE file */ import { Component, EventEmitter, Input, Output } from '@angular/core'; import { AswConfirmDialog } from '@asoftwareworld/form-builder/form-control/confirm-dialog'; import { AswMultiSelectDialog, Constants } from '@asoftwareworld/form-builder/form-control/core'; import * as i0 from "@angular/core"; import * as i1 from "@angular/material/dialog"; import * as i2 from "@angular/common"; import * as i3 from "@angular/forms"; import * as i4 from "@angular/material/form-field"; import * as i5 from "@angular/material/checkbox"; import * as i6 from "@angular/material/icon"; import * as i7 from "@angular/material/tooltip"; import * as i8 from "@angular/material/button"; export class AswCheckbox { dialog; constants = Constants; control = null; controlIndex; isPreviewTemplate = false; checkboxUpdateEvent = new EventEmitter(); checkboxDeleteEvent = new EventEmitter(); selectionChange = new EventEmitter(); duplicateControl = new EventEmitter(); constructor(dialog) { this.dialog = dialog; } deleteCheckboxDialog(control, controlIndex) { const dialogRef = this.dialog.open(AswConfirmDialog, { width: '350px', data: { name: control.controlType, message: this.constants.messages.waringMessage } }); dialogRef.afterClosed().subscribe(result => { if (result !== undefined) { this.checkboxDeleteEvent.emit(controlIndex); } }); } editCheckboxDialog(control, controlIndex) { const dialogRef = this.dialog.open(AswMultiSelectDialog, { disableClose: true, width: '80%', minWidth: '70vw', data: control }); dialogRef.afterClosed().subscribe(result => { if (result !== undefined) { this.checkboxUpdateEvent.emit({ control: result, index: controlIndex }); } }); } onSelectionChange(control) { this.selectionChange.emit(control); } duplicateCheckboxControl(control) { this.duplicateControl.emit(control); } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: AswCheckbox, deps: [{ token: i1.MatDialog }], target: i0.ɵɵFactoryTarget.Component }); static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.11", type: AswCheckbox, selector: "asw-checkbox", inputs: { control: "control", controlIndex: "controlIndex", isPreviewTemplate: "isPreviewTemplate" }, outputs: { checkboxUpdateEvent: "checkboxUpdateEvent", checkboxDeleteEvent: "checkboxDeleteEvent", selectionChange: "selectionChange", duplicateControl: "duplicateControl" }, ngImport: i0, template: "<ng-container *ngIf=\"control as control\">\r\n <mat-label>{{control.label}}</mat-label>\r\n <div *ngFor=\"let option of control.options\">\r\n <mat-checkbox color=\"primary\"\r\n [class]=\"control.customClass\"\r\n [matTooltip]=\"option.value\"\r\n [(ngModel)]=\"option.isChecked\"\r\n (change)=\"onSelectionChange(control)\"\r\n [required]=\"control.isRequired\"\r\n [disabled]=\"control.isDisabled ? true : false\">\r\n {{option.value}}\r\n </mat-checkbox>\r\n </div>\r\n <ng-template [ngIf]=\"isPreviewTemplate\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <button mat-icon-button \r\n type=\"button\" \r\n matTooltip=\"Duplicate\" \r\n [matTooltipPosition]=\"'below'\" \r\n (click)=\"duplicateCheckboxControl(control)\">\r\n <mat-icon>content_copy</mat-icon>\r\n </button>\r\n <button mat-icon-button \r\n type=\"button\" \r\n matTooltip=\"Edit\" \r\n [matTooltipPosition]=\"'below'\" \r\n (click)=\"editCheckboxDialog(control, controlIndex)\">\r\n <mat-icon>edit</mat-icon>\r\n </button>\r\n <button mat-icon-button \r\n type=\"button\" \r\n matTooltip=\"Delete\" \r\n [matTooltipPosition]=\"'below'\" \r\n (click)=\"deleteCheckboxDialog(control, controlIndex)\">\r\n <mat-icon>delete</mat-icon>\r\n </button>\r\n </div> \r\n </div>\r\n </ng-template> \r\n</ng-container>\r\n", dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4.MatLabel, selector: "mat-label" }, { kind: "component", type: i5.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i7.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: i8.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }] }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: AswCheckbox, decorators: [{ type: Component, args: [{ selector: 'asw-checkbox', template: "<ng-container *ngIf=\"control as control\">\r\n <mat-label>{{control.label}}</mat-label>\r\n <div *ngFor=\"let option of control.options\">\r\n <mat-checkbox color=\"primary\"\r\n [class]=\"control.customClass\"\r\n [matTooltip]=\"option.value\"\r\n [(ngModel)]=\"option.isChecked\"\r\n (change)=\"onSelectionChange(control)\"\r\n [required]=\"control.isRequired\"\r\n [disabled]=\"control.isDisabled ? true : false\">\r\n {{option.value}}\r\n </mat-checkbox>\r\n </div>\r\n <ng-template [ngIf]=\"isPreviewTemplate\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <button mat-icon-button \r\n type=\"button\" \r\n matTooltip=\"Duplicate\" \r\n [matTooltipPosition]=\"'below'\" \r\n (click)=\"duplicateCheckboxControl(control)\">\r\n <mat-icon>content_copy</mat-icon>\r\n </button>\r\n <button mat-icon-button \r\n type=\"button\" \r\n matTooltip=\"Edit\" \r\n [matTooltipPosition]=\"'below'\" \r\n (click)=\"editCheckboxDialog(control, controlIndex)\">\r\n <mat-icon>edit</mat-icon>\r\n </button>\r\n <button mat-icon-button \r\n type=\"button\" \r\n matTooltip=\"Delete\" \r\n [matTooltipPosition]=\"'below'\" \r\n (click)=\"deleteCheckboxDialog(control, controlIndex)\">\r\n <mat-icon>delete</mat-icon>\r\n </button>\r\n </div> \r\n </div>\r\n </ng-template> \r\n</ng-container>\r\n" }] }], ctorParameters: () => [{ type: i1.MatDialog }], propDecorators: { control: [{ type: Input }], controlIndex: [{ type: Input }], isPreviewTemplate: [{ type: Input }], checkboxUpdateEvent: [{ type: Output }], checkboxDeleteEvent: [{ type: Output }], selectionChange: [{ type: Output }], duplicateControl: [{ type: Output }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tib3guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9mb3JtLWNvbnRyb2wvY2hlY2tib3gvY2hlY2tib3gudHMiLCIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9mb3JtLWNvbnRyb2wvY2hlY2tib3gvY2hlY2tib3guaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXZFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDBEQUEwRCxDQUFDO0FBQzVGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxTQUFTLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQzs7Ozs7Ozs7OztBQU9qRyxNQUFNLE9BQU8sV0FBVztJQWFEO0lBWG5CLFNBQVMsR0FBUSxTQUFTLENBQUM7SUFDbEIsT0FBTyxHQUEyQixJQUFJLENBQUM7SUFFdkMsWUFBWSxDQUFVO0lBQ3RCLGlCQUFpQixHQUFHLEtBQUssQ0FBQztJQUV6QixtQkFBbUIsR0FBRyxJQUFJLFlBQVksRUFBK0MsQ0FBQztJQUN0RixtQkFBbUIsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO0lBQ2pELGVBQWUsR0FBRyxJQUFJLFlBQVksRUFBbUIsQ0FBQztJQUN0RCxnQkFBZ0IsR0FBRyxJQUFJLFlBQVksRUFBbUIsQ0FBQztJQUVqRSxZQUFtQixNQUFpQjtRQUFqQixXQUFNLEdBQU4sTUFBTSxDQUFXO0lBQUksQ0FBQztJQUV6QyxvQkFBb0IsQ0FBQyxPQUF3QixFQUFFLFlBQW9CO1FBQy9ELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFO1lBQ2pELEtBQUssRUFBRSxPQUFPO1lBQ2QsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxXQUFXLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLGFBQWEsRUFBRTtTQUN0RixDQUFDLENBQUM7UUFDSCxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ3ZDLElBQUksTUFBTSxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUN2QixJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ2hELENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxPQUF3QixFQUFFLFlBQW9CO1FBQzdELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFO1lBQ3JELFlBQVksRUFBRSxJQUFJO1lBQ2xCLEtBQUssRUFBRSxLQUFLO1lBQ1osUUFBUSxFQUFFLE1BQU07WUFDaEIsSUFBSSxFQUFFLE9BQU87U0FDaEIsQ0FBQyxDQUFDO1FBQ0gsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUN2QyxJQUFJLE1BQU0sS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDdkIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUM7WUFDNUUsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELGlCQUFpQixDQUFDLE9BQXdCO1FBQ3RDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCx3QkFBd0IsQ0FBQyxPQUF3QjtRQUM3QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3hDLENBQUM7d0dBL0NRLFdBQVc7NEZBQVgsV0FBVyx5VUNsQnhCLHE2REF5Q0E7OzRGRHZCYSxXQUFXO2tCQUp2QixTQUFTOytCQUNJLGNBQWM7OEVBTWYsT0FBTztzQkFBZixLQUFLO2dCQUVHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUVJLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFDRyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBQ0csZUFBZTtzQkFBeEIsTUFBTTtnQkFDRyxnQkFBZ0I7c0JBQXpCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGxpY2Vuc2VcclxuICogQ29weXJpZ2h0IEFTVyAoQSBTb2Z0d2FyZSBXb3JsZCkgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuICpcclxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcclxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZVxyXG4gKi9cclxuXHJcbmltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IEFzd0NvbmZpcm1EaWFsb2cgfSBmcm9tICdAYXNvZnR3YXJld29ybGQvZm9ybS1idWlsZGVyL2Zvcm0tY29udHJvbC9jb25maXJtLWRpYWxvZyc7XHJcbmltcG9ydCB7IEFzd011bHRpU2VsZWN0RGlhbG9nLCBDb25zdGFudHMgfSBmcm9tICdAYXNvZnR3YXJld29ybGQvZm9ybS1idWlsZGVyL2Zvcm0tY29udHJvbC9jb3JlJztcclxuaW1wb3J0IHsgQ2hlY2tib3hDb250cm9sIH0gZnJvbSAnLi9jaGVja2JveC1jb250cm9sJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdhc3ctY2hlY2tib3gnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2NoZWNrYm94Lmh0bWwnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBc3dDaGVja2JveCB7XHJcblxyXG4gICAgY29uc3RhbnRzOiBhbnkgPSBDb25zdGFudHM7XHJcbiAgICBASW5wdXQoKSBjb250cm9sOiBDaGVja2JveENvbnRyb2wgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgICBASW5wdXQoKSBjb250cm9sSW5kZXghOiBudW1iZXI7XHJcbiAgICBASW5wdXQoKSBpc1ByZXZpZXdUZW1wbGF0ZSA9IGZhbHNlO1xyXG5cclxuICAgIEBPdXRwdXQoKSBjaGVja2JveFVwZGF0ZUV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjx7IGNvbnRyb2w6IENoZWNrYm94Q29udHJvbCwgaW5kZXg6IG51bWJlciB9PigpO1xyXG4gICAgQE91dHB1dCgpIGNoZWNrYm94RGVsZXRlRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcclxuICAgIEBPdXRwdXQoKSBzZWxlY3Rpb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPENoZWNrYm94Q29udHJvbD4oKTtcclxuICAgIEBPdXRwdXQoKSBkdXBsaWNhdGVDb250cm9sID0gbmV3IEV2ZW50RW1pdHRlcjxDaGVja2JveENvbnRyb2w+KCk7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHVibGljIGRpYWxvZzogTWF0RGlhbG9nKSB7IH1cclxuXHJcbiAgICBkZWxldGVDaGVja2JveERpYWxvZyhjb250cm9sOiBDaGVja2JveENvbnRyb2wsIGNvbnRyb2xJbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihBc3dDb25maXJtRGlhbG9nLCB7XHJcbiAgICAgICAgICAgIHdpZHRoOiAnMzUwcHgnLFxyXG4gICAgICAgICAgICBkYXRhOiB7IG5hbWU6IGNvbnRyb2wuY29udHJvbFR5cGUsIG1lc3NhZ2U6IHRoaXMuY29uc3RhbnRzLm1lc3NhZ2VzLndhcmluZ01lc3NhZ2UgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0ICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tib3hEZWxldGVFdmVudC5lbWl0KGNvbnRyb2xJbmRleCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBlZGl0Q2hlY2tib3hEaWFsb2coY29udHJvbDogQ2hlY2tib3hDb250cm9sLCBjb250cm9sSW5kZXg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oQXN3TXVsdGlTZWxlY3REaWFsb2csIHtcclxuICAgICAgICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxyXG4gICAgICAgICAgICB3aWR0aDogJzgwJScsXHJcbiAgICAgICAgICAgIG1pbldpZHRoOiAnNzB2dycsXHJcbiAgICAgICAgICAgIGRhdGE6IGNvbnRyb2xcclxuICAgICAgICB9KTtcclxuICAgICAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlc3VsdCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrYm94VXBkYXRlRXZlbnQuZW1pdCh7IGNvbnRyb2w6IHJlc3VsdCwgaW5kZXg6IGNvbnRyb2xJbmRleCB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG9uU2VsZWN0aW9uQ2hhbmdlKGNvbnRyb2w6IENoZWNrYm94Q29udHJvbCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQoY29udHJvbCk7XHJcbiAgICB9XHJcblxyXG4gICAgZHVwbGljYXRlQ2hlY2tib3hDb250cm9sKGNvbnRyb2w6IENoZWNrYm94Q29udHJvbCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZHVwbGljYXRlQ29udHJvbC5lbWl0KGNvbnRyb2wpO1xyXG4gICAgfVxyXG59XHJcbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJjb250cm9sIGFzIGNvbnRyb2xcIj5cclxuICAgIDxtYXQtbGFiZWw+e3tjb250cm9sLmxhYmVsfX08L21hdC1sYWJlbD5cclxuICAgIDxkaXYgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBjb250cm9sLm9wdGlvbnNcIj5cclxuICAgICAgICA8bWF0LWNoZWNrYm94IGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImNvbnRyb2wuY3VzdG9tQ2xhc3NcIlxyXG4gICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT1cIm9wdGlvbi52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJvcHRpb24uaXNDaGVja2VkXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uU2VsZWN0aW9uQ2hhbmdlKGNvbnRyb2wpXCJcclxuICAgICAgICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwiY29udHJvbC5pc1JlcXVpcmVkXCJcclxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiY29udHJvbC5pc0Rpc2FibGVkID8gdHJ1ZSA6IGZhbHNlXCI+XHJcbiAgICAgICAgICAgIHt7b3B0aW9uLnZhbHVlfX1cclxuICAgICAgICA8L21hdC1jaGVja2JveD5cclxuICAgIDwvZGl2PlxyXG4gICAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cImlzUHJldmlld1RlbXBsYXRlXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiRHVwbGljYXRlXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwUG9zaXRpb25dPVwiJ2JlbG93J1wiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZHVwbGljYXRlQ2hlY2tib3hDb250cm9sKGNvbnRyb2wpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmNvbnRlbnRfY29weTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJFZGl0XCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwUG9zaXRpb25dPVwiJ2JlbG93J1wiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZWRpdENoZWNrYm94RGlhbG9nKGNvbnRyb2wsIGNvbnRyb2xJbmRleClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+ZWRpdDwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJEZWxldGVcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBQb3NpdGlvbl09XCInYmVsb3cnXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJkZWxldGVDaGVja2JveERpYWxvZyhjb250cm9sLCBjb250cm9sSW5kZXgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmRlbGV0ZTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+ICAgIFxyXG48L25nLWNvbnRhaW5lcj5cclxuIl19