@asoftwareworld/form-builder-pro
Version:
ASW Form Builder Pro 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 b
84 lines • 17.6 kB
JavaScript
/**
* @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 { CSSFrameworkEnum } from '@asoftwareworld/form-builder-pro/api';
import { Constants, Icons } from '@asoftwareworld/form-builder-pro/common';
import { AswConfirmDialog } from '@asoftwareworld/form-builder-pro/form-control/confirm-dialog';
import { AswQrCodeDialog } from './qrcode-dialog';
import * as i0 from "@angular/core";
import * as i1 from "@angular/material/dialog";
import * as i2 from "@angular/common";
import * as i3 from "@angular/material/button";
import * as i4 from "@angular/material/tooltip";
import * as i5 from "@asoftwareworld/qrcode";
import * as i6 from "@asoftwareworld/form-builder-pro/core";
import * as i7 from "@asoftwareworld/form-builder-pro/common";
export class AswQrCode {
dialog;
constants = Constants;
icons = Icons;
/**
* QR Code control
*/
control = null;
CSSFramework = CSSFrameworkEnum.Material;
isPreviewTemplate = false;
qrCodeUpdateEvent = new EventEmitter();
qrCodeDeleteEvent = new EventEmitter();
duplicateControl = new EventEmitter();
constructor(dialog) {
this.dialog = dialog;
}
deleteQrCodeDialog(control) {
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.qrCodeDeleteEvent.emit(control);
}
});
}
editQrCodeDialog(control) {
const dialogRef = this.dialog.open(AswQrCodeDialog, {
width: '80%',
minWidth: '80vw',
disableClose: true,
data: control
});
dialogRef.afterClosed().subscribe((result) => {
if (result !== undefined) {
this.qrCodeUpdateEvent.emit(result);
// this.control = JSON.parse(JSON.stringify(result));
}
});
}
duplicateQrCodeControl(control) {
this.duplicateControl.emit(control);
}
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: AswQrCode, deps: [{ token: i1.MatDialog }], target: i0.ɵɵFactoryTarget.Component });
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.8", type: AswQrCode, selector: "asw-qrcode", inputs: { control: "control", CSSFramework: "CSSFramework", isPreviewTemplate: "isPreviewTemplate" }, outputs: { qrCodeUpdateEvent: "qrCodeUpdateEvent", qrCodeDeleteEvent: "qrCodeDeleteEvent", duplicateControl: "duplicateControl" }, ngImport: i0, template: "<ng-container *ngIf=\"control as control\">\r\n <asw-qr-code #parent [qrData]=\"control.value\" \r\n [width]=\"control.width\" \r\n [height]=\"control.height\"\r\n [outerMargin]=\"control.outerMargin\" \r\n [type]=\"control.type\" \r\n [allowEmptyString]=\"true\"\r\n [logo]=\"control.logo\"\r\n [density]=\"control.density\" \r\n [backgroundColor]=\"control.backgroundColor\"\r\n [logoStyle]=\"control.logoStyle\" \r\n [middleShape]=\"control.middleShape\"\r\n [cornerInnerShape]=\"control.cornerInnerShape\" \r\n [cornerOuterShape]=\"control.cornerOuterShape\">\r\n </asw-qr-code>\r\n <div class=\"asw-row\" *ngIf=\"isPreviewTemplate\">\r\n <div class=\"asw-col-md-12\" align=\"right\">\r\n <button mat-icon-button \r\n type=\"button\" \r\n matTooltip=\"{{'FormControl.Duplicate' | aswTranslate}}\" \r\n [matTooltipPosition]=\"'below'\" \r\n (click)=\"duplicateQrCodeControl(control)\">\r\n <div [innerHTML]=\"icons.contentCopy | aswSafeHtml\"></div>\r\n </button>\r\n <button mat-icon-button \r\n type=\"button\" \r\n matTooltip=\"{{'FormControl.Edit' | aswTranslate}}\" \r\n [matTooltipPosition]=\"'below'\" \r\n (click)=\"editQrCodeDialog(control)\">\r\n <div [innerHTML]=\"icons.edit | aswSafeHtml\"></div>\r\n </button>\r\n <button mat-icon-button \r\n type=\"button\" \r\n matTooltip=\"{{'FormControl.Delete' | aswTranslate}}\" \r\n [matTooltipPosition]=\"'below'\" \r\n (click)=\"deleteQrCodeDialog(control)\">\r\n <div [innerHTML]=\"icons.delete2 | aswSafeHtml\"></div>\r\n </button>\r\n </div>\r\n </div>\r\n</ng-container>", dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: i5.AswQrCodeComponent, selector: "asw-qr-code", inputs: ["type", "width", "height", "outerMargin", "qrData", "logo", "allowEmptyString", "density", "logoStyle", "middleShape", "backgroundColor", "cornerInnerShape", "cornerOuterShape"], outputs: ["qrCodeURL"] }, { kind: "pipe", type: i6.AswTranslatePipe, name: "aswTranslate" }, { kind: "pipe", type: i7.AswSafeHtmlPipe, name: "aswSafeHtml" }] });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: AswQrCode, decorators: [{
type: Component,
args: [{ selector: 'asw-qrcode', template: "<ng-container *ngIf=\"control as control\">\r\n <asw-qr-code #parent [qrData]=\"control.value\" \r\n [width]=\"control.width\" \r\n [height]=\"control.height\"\r\n [outerMargin]=\"control.outerMargin\" \r\n [type]=\"control.type\" \r\n [allowEmptyString]=\"true\"\r\n [logo]=\"control.logo\"\r\n [density]=\"control.density\" \r\n [backgroundColor]=\"control.backgroundColor\"\r\n [logoStyle]=\"control.logoStyle\" \r\n [middleShape]=\"control.middleShape\"\r\n [cornerInnerShape]=\"control.cornerInnerShape\" \r\n [cornerOuterShape]=\"control.cornerOuterShape\">\r\n </asw-qr-code>\r\n <div class=\"asw-row\" *ngIf=\"isPreviewTemplate\">\r\n <div class=\"asw-col-md-12\" align=\"right\">\r\n <button mat-icon-button \r\n type=\"button\" \r\n matTooltip=\"{{'FormControl.Duplicate' | aswTranslate}}\" \r\n [matTooltipPosition]=\"'below'\" \r\n (click)=\"duplicateQrCodeControl(control)\">\r\n <div [innerHTML]=\"icons.contentCopy | aswSafeHtml\"></div>\r\n </button>\r\n <button mat-icon-button \r\n type=\"button\" \r\n matTooltip=\"{{'FormControl.Edit' | aswTranslate}}\" \r\n [matTooltipPosition]=\"'below'\" \r\n (click)=\"editQrCodeDialog(control)\">\r\n <div [innerHTML]=\"icons.edit | aswSafeHtml\"></div>\r\n </button>\r\n <button mat-icon-button \r\n type=\"button\" \r\n matTooltip=\"{{'FormControl.Delete' | aswTranslate}}\" \r\n [matTooltipPosition]=\"'below'\" \r\n (click)=\"deleteQrCodeDialog(control)\">\r\n <div [innerHTML]=\"icons.delete2 | aswSafeHtml\"></div>\r\n </button>\r\n </div>\r\n </div>\r\n</ng-container>" }]
}], ctorParameters: () => [{ type: i1.MatDialog }], propDecorators: { control: [{
type: Input
}], CSSFramework: [{
type: Input
}], isPreviewTemplate: [{
type: Input
}], qrCodeUpdateEvent: [{
type: Output
}], qrCodeDeleteEvent: [{
type: Output
}], duplicateControl: [{
type: Output
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXJjb2RlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvZm9ybS1jb250cm9sL3FyY29kZS9xcmNvZGUudHMiLCIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9mb3JtLWNvbnRyb2wvcXJjb2RlL3FyY29kZS5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFdkUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDeEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4REFBOEQsQ0FBQztBQUVoRyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7Ozs7OztBQU1sRCxNQUFNLE9BQU8sU0FBUztJQWNDO0lBYm5CLFNBQVMsR0FBUSxTQUFTLENBQUM7SUFDM0IsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUNkOztPQUVHO0lBQ00sT0FBTyxHQUF5QixJQUFJLENBQUM7SUFDckMsWUFBWSxHQUFxQixnQkFBZ0IsQ0FBQyxRQUFRLENBQUM7SUFDM0QsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO0lBRXpCLGlCQUFpQixHQUFHLElBQUksWUFBWSxFQUFpQixDQUFDO0lBQ3RELGlCQUFpQixHQUFHLElBQUksWUFBWSxFQUFpQixDQUFDO0lBQ3RELGdCQUFnQixHQUFHLElBQUksWUFBWSxFQUFpQixDQUFDO0lBRS9ELFlBQW1CLE1BQWlCO1FBQWpCLFdBQU0sR0FBTixNQUFNLENBQVc7SUFBRyxDQUFDO0lBRXhDLGtCQUFrQixDQUFDLE9BQXNCO1FBQ3JDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFO1lBQ2pELEtBQUssRUFBRSxPQUFPO1lBQ2QsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxXQUFXLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLGFBQWEsRUFBRTtTQUN0RixDQUFDLENBQUM7UUFDSCxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDekMsSUFBSSxNQUFNLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDekMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELGdCQUFnQixDQUFDLE9BQXNCO1FBQ25DLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUNoRCxLQUFLLEVBQUUsS0FBSztZQUNaLFFBQVEsRUFBRSxNQUFNO1lBQ2hCLFlBQVksRUFBRSxJQUFJO1lBQ2xCLElBQUksRUFBRSxPQUFPO1NBQ2hCLENBQUMsQ0FBQztRQUNILFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUN6QyxJQUFJLE1BQU0sS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDdkIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDcEMscURBQXFEO1lBQ3pELENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxzQkFBc0IsQ0FBQyxPQUFzQjtRQUN6QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3hDLENBQUM7dUdBN0NRLFNBQVM7MkZBQVQsU0FBUywyUkNwQnRCLGk4REF3Q2U7OzJGRHBCRixTQUFTO2tCQUpyQixTQUFTOytCQUNJLFlBQVk7OEVBU2IsT0FBTztzQkFBZixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUVJLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFDRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBQ0csZ0JBQWdCO3NCQUF6QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEFTVyAoQSBTb2Z0d2FyZSBXb3JsZCkgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZVxuICovXG5cbmltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgQ1NTRnJhbWV3b3JrRW51bSB9IGZyb20gJ0Bhc29mdHdhcmV3b3JsZC9mb3JtLWJ1aWxkZXItcHJvL2FwaSc7XG5pbXBvcnQgeyBDb25zdGFudHMsIEljb25zIH0gZnJvbSAnQGFzb2Z0d2FyZXdvcmxkL2Zvcm0tYnVpbGRlci1wcm8vY29tbW9uJztcbmltcG9ydCB7IEFzd0NvbmZpcm1EaWFsb2cgfSBmcm9tICdAYXNvZnR3YXJld29ybGQvZm9ybS1idWlsZGVyLXByby9mb3JtLWNvbnRyb2wvY29uZmlybS1kaWFsb2cnO1xuaW1wb3J0IHsgUXJDb2RlQ29udHJvbCB9IGZyb20gJy4vcXJjb2RlLWNvbnRyb2wnO1xuaW1wb3J0IHsgQXN3UXJDb2RlRGlhbG9nIH0gZnJvbSAnLi9xcmNvZGUtZGlhbG9nJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdhc3ctcXJjb2RlJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vcXJjb2RlLmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIEFzd1FyQ29kZSB7XG4gICAgY29uc3RhbnRzOiBhbnkgPSBDb25zdGFudHM7XG4gICAgaWNvbnMgPSBJY29ucztcbiAgICAvKipcbiAgICAgKiBRUiBDb2RlIGNvbnRyb2xcbiAgICAgKi9cbiAgICBASW5wdXQoKSBjb250cm9sOiBRckNvZGVDb250cm9sIHwgbnVsbCA9IG51bGw7XG4gICAgQElucHV0KCkgQ1NTRnJhbWV3b3JrOiBDU1NGcmFtZXdvcmtFbnVtID0gQ1NTRnJhbWV3b3JrRW51bS5NYXRlcmlhbDtcbiAgICBASW5wdXQoKSBpc1ByZXZpZXdUZW1wbGF0ZSA9IGZhbHNlO1xuXG4gICAgQE91dHB1dCgpIHFyQ29kZVVwZGF0ZUV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxRckNvZGVDb250cm9sPigpO1xuICAgIEBPdXRwdXQoKSBxckNvZGVEZWxldGVFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8UXJDb2RlQ29udHJvbD4oKTtcbiAgICBAT3V0cHV0KCkgZHVwbGljYXRlQ29udHJvbCA9IG5ldyBFdmVudEVtaXR0ZXI8UXJDb2RlQ29udHJvbD4oKTtcblxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBkaWFsb2c6IE1hdERpYWxvZykge31cblxuICAgIGRlbGV0ZVFyQ29kZURpYWxvZyhjb250cm9sOiBRckNvZGVDb250cm9sKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oQXN3Q29uZmlybURpYWxvZywge1xuICAgICAgICAgICAgd2lkdGg6ICczNTBweCcsXG4gICAgICAgICAgICBkYXRhOiB7IG5hbWU6IGNvbnRyb2wuY29udHJvbFR5cGUsIG1lc3NhZ2U6IHRoaXMuY29uc3RhbnRzLm1lc3NhZ2VzLndhcmluZ01lc3NhZ2UgfVxuICAgICAgICB9KTtcbiAgICAgICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXN1bHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHRoaXMucXJDb2RlRGVsZXRlRXZlbnQuZW1pdChjb250cm9sKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZWRpdFFyQ29kZURpYWxvZyhjb250cm9sOiBRckNvZGVDb250cm9sKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oQXN3UXJDb2RlRGlhbG9nLCB7XG4gICAgICAgICAgICB3aWR0aDogJzgwJScsXG4gICAgICAgICAgICBtaW5XaWR0aDogJzgwdncnLFxuICAgICAgICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxuICAgICAgICAgICAgZGF0YTogY29udHJvbFxuICAgICAgICB9KTtcbiAgICAgICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXN1bHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHRoaXMucXJDb2RlVXBkYXRlRXZlbnQuZW1pdChyZXN1bHQpO1xuICAgICAgICAgICAgICAgIC8vIHRoaXMuY29udHJvbCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkocmVzdWx0KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGR1cGxpY2F0ZVFyQ29kZUNvbnRyb2woY29udHJvbDogUXJDb2RlQ29udHJvbCk6IHZvaWQge1xuICAgICAgICB0aGlzLmR1cGxpY2F0ZUNvbnRyb2wuZW1pdChjb250cm9sKTtcbiAgICB9XG5cbiAgICAvLyBjdXN0b21pemVEZXNpZ24oKTogdm9pZCB7XG4gICAgLy8gICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oQXN3UXJDb2RlQ3VzdG9taXplRGlhbG9nLCB7XG4gICAgLy8gICAgICAgICB3aWR0aDogJzgwJScsXG4gICAgLy8gICAgICAgICBkYXRhOiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuY29udHJvbCkpXG4gICAgLy8gICAgIH0pO1xuXG4gICAgLy8gICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShvcHRpb24gPT4ge1xuICAgIC8vICAgICAgICAgaWYgKG9wdGlvbikge1xuICAgIC8vICAgICAgICAgICAgIHRoaXMuY29udHJvbCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkob3B0aW9uKSk7XG4gICAgLy8gICAgICAgICAgICAgY29uc29sZS5sb2coYERpYWxvZyByZXN1bHQ6ICR7b3B0aW9ufWApO1xuICAgIC8vICAgICAgICAgfVxuICAgIC8vICAgICB9KTtcbiAgICAvLyB9XG59XG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwiY29udHJvbCBhcyBjb250cm9sXCI+XHJcbiAgICA8YXN3LXFyLWNvZGUgI3BhcmVudCBbcXJEYXRhXT1cImNvbnRyb2wudmFsdWVcIiBcclxuICAgICAgICBbd2lkdGhdPVwiY29udHJvbC53aWR0aFwiIFxyXG4gICAgICAgIFtoZWlnaHRdPVwiY29udHJvbC5oZWlnaHRcIlxyXG4gICAgICAgIFtvdXRlck1hcmdpbl09XCJjb250cm9sLm91dGVyTWFyZ2luXCIgXHJcbiAgICAgICAgW3R5cGVdPVwiY29udHJvbC50eXBlXCIgXHJcbiAgICAgICAgW2FsbG93RW1wdHlTdHJpbmddPVwidHJ1ZVwiXHJcbiAgICAgICAgW2xvZ29dPVwiY29udHJvbC5sb2dvXCJcclxuICAgICAgICBbZGVuc2l0eV09XCJjb250cm9sLmRlbnNpdHlcIiBcclxuICAgICAgICBbYmFja2dyb3VuZENvbG9yXT1cImNvbnRyb2wuYmFja2dyb3VuZENvbG9yXCJcclxuICAgICAgICBbbG9nb1N0eWxlXT1cImNvbnRyb2wubG9nb1N0eWxlXCIgXHJcbiAgICAgICAgW21pZGRsZVNoYXBlXT1cImNvbnRyb2wubWlkZGxlU2hhcGVcIlxyXG4gICAgICAgIFtjb3JuZXJJbm5lclNoYXBlXT1cImNvbnRyb2wuY29ybmVySW5uZXJTaGFwZVwiIFxyXG4gICAgICAgIFtjb3JuZXJPdXRlclNoYXBlXT1cImNvbnRyb2wuY29ybmVyT3V0ZXJTaGFwZVwiPlxyXG4gICAgPC9hc3ctcXItY29kZT5cclxuICAgIDxkaXYgY2xhc3M9XCJhc3ctcm93XCIgKm5nSWY9XCJpc1ByZXZpZXdUZW1wbGF0ZVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJhc3ctY29sLW1kLTEyXCIgYWxpZ249XCJyaWdodFwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBcclxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cInt7J0Zvcm1Db250cm9sLkR1cGxpY2F0ZScgfCBhc3dUcmFuc2xhdGV9fVwiIFxyXG4gICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwUG9zaXRpb25dPVwiJ2JlbG93J1wiIFxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJkdXBsaWNhdGVRckNvZGVDb250cm9sKGNvbnRyb2wpXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IFtpbm5lckhUTUxdPVwiaWNvbnMuY29udGVudENvcHkgfCBhc3dTYWZlSHRtbFwiPjwvZGl2PlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gXHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiIFxyXG4gICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJ7eydGb3JtQ29udHJvbC5FZGl0JyB8IGFzd1RyYW5zbGF0ZX19XCIgXHJcbiAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBQb3NpdGlvbl09XCInYmVsb3cnXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImVkaXRRckNvZGVEaWFsb2coY29udHJvbClcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgW2lubmVySFRNTF09XCJpY29ucy5lZGl0IHwgYXN3U2FmZUh0bWxcIj48L2Rpdj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIFxyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIiBcclxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPVwie3snRm9ybUNvbnRyb2wuRGVsZXRlJyB8IGFzd1RyYW5zbGF0ZX19XCIgXHJcbiAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBQb3NpdGlvbl09XCInYmVsb3cnXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImRlbGV0ZVFyQ29kZURpYWxvZyhjb250cm9sKVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBbaW5uZXJIVE1MXT1cImljb25zLmRlbGV0ZTIgfCBhc3dTYWZlSHRtbFwiPjwvZGl2PlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L25nLWNvbnRhaW5lcj4iXX0=