UNPKG

@koalarx/ui

Version:

Koala UI is a Design System developed in Angular whose objective is to facilitate and make your development faster and simpler, making this framework your greatest ally.

125 lines 18.8 kB
import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, ViewChild, } from '@angular/core'; import { BehaviorSubject } from 'rxjs'; import * as i0 from "@angular/core"; import * as i1 from "@angular/common"; import * as i2 from "@angular/material/tooltip"; import * as i3 from "@angular/material/button"; import * as i4 from "@angular/material/icon"; export class FileButtonComponent { constructor() { this.autoclear = true; this.getFiles = new EventEmitter(); this.files = []; this.textSubject = new BehaviorSubject(''); } ngOnInit() { this.style = `color: ${this.color}!important;background-color: ${this.backgroundColor}!important;`; this.textSubject.next(this.text ?? ''); if (this.setFile) { this.setFile.subscribe(async (file) => { if (file) { const fileResult = await this.convertFile(file); if (fileResult) { this.files.push(fileResult); } this.generateTextButton(); this.getFiles.emit(this.files); } }); } if (this.updateFileList) { this.updateFileList.subscribe((fileList) => { this.files = fileList; this.generateTextButton(); }); } } async emitFiles(files) { if (files) { if (files?.length > 0) { for (let f = 0; f <= files.length; f++) { const file = files.item(f); if (file) { const fileResult = await this.convertFile(file); if (fileResult) { this.files.push(fileResult); } } } this.getFiles.emit(this.files); } else { this.getFiles.emit([]); } this.generateTextButton(); } } open() { const elFile = this.file?.nativeElement; if (elFile) elFile.value = ''; if (this.autoclear) { this.files = []; this.getFiles.emit([]); this.generateTextButton(); } elFile?.click(); } generateTextButton() { this.textSubject.next(this.files.length > 0 ? `${this.files.length} arquivo${this.files.length > 1 ? 's' : ''} selecionado` : this.text ?? ''); } async convertFile(file) { const blobFile = await new Promise((resolve) => { const fileReader = new FileReader(); fileReader.readAsDataURL(file); fileReader.onload = () => { resolve(fileReader.result); }; }); if (blobFile) { const fileSplit = blobFile.toString().split(';base64,'); return { filename: file.name, type: fileSplit[0].replace('data:', ''), base64: fileSplit[1], }; } return null; } } FileButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: FileButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); FileButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: FileButtonComponent, selector: "koala-file-button", inputs: { color: "color", backgroundColor: "backgroundColor", icon: "icon", text: "text", tooltip: "tooltip", disabled: "disabled", multiple: "multiple", accept: "accept", setFile: "setFile", updateFileList: "updateFileList", autoclear: "autoclear" }, outputs: { getFiles: "getFiles" }, viewQueries: [{ propertyName: "file", first: true, predicate: ["file"], descendants: true, static: true }], ngImport: i0, template: "<input #file (change)=\"emitFiles(file.files)\" [accept]=\"accept\" [multiple]=\"multiple\"\n style=\"display: none;\"\n type=\"file\"/>\n<button\n\t(click)=\"open()\"\n\t*ngIf=\"text else iconButton\"\n\t[disabled]=\"disabled\"\n\t[matTooltipDisabled]=\"!tooltip\"\n\t[matTooltip]=\"tooltip ?? ''\"\n [style]=\"style\"\n\tclass=\"koala-button\"\n\tmat-button\n\tmatTooltipPosition=\"above\"\n\ttype=\"button\">\n <mat-icon *ngIf=\"icon\">{{icon}}</mat-icon>\n\t{{textSubject | async}}\n</button>\n<ng-template #iconButton>\n <button\n\t (click)=\"open()\"\n\t [disabled]=\"disabled\"\n\t [matTooltipDisabled]=\"!tooltip\"\n\t [matTooltip]=\"tooltip ?? ''\"\n [style]=\"style\"\n\t class=\"koala-icon-button\"\n\t mat-icon-button\n\t matTooltipPosition=\"before\"\n\t type=\"button\">\n <mat-icon>{{icon}}</mat-icon>\n </button>\n</ng-template>\n", styles: [".koala-button{padding:2px 8px}.koala-icon-button:disabled,.koala-button:disabled{background:#cccccc!important;color:#616161!important;cursor:not-allowed}.koala-icon-button{height:25px;line-height:25px;width:25px}.koala-icon-button mat-icon{font-size:20px;height:20px;line-height:20px;position:relative;width:20px}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: i3.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: FileButtonComponent, decorators: [{ type: Component, args: [{ selector: 'koala-file-button', changeDetection: ChangeDetectionStrategy.OnPush, template: "<input #file (change)=\"emitFiles(file.files)\" [accept]=\"accept\" [multiple]=\"multiple\"\n style=\"display: none;\"\n type=\"file\"/>\n<button\n\t(click)=\"open()\"\n\t*ngIf=\"text else iconButton\"\n\t[disabled]=\"disabled\"\n\t[matTooltipDisabled]=\"!tooltip\"\n\t[matTooltip]=\"tooltip ?? ''\"\n [style]=\"style\"\n\tclass=\"koala-button\"\n\tmat-button\n\tmatTooltipPosition=\"above\"\n\ttype=\"button\">\n <mat-icon *ngIf=\"icon\">{{icon}}</mat-icon>\n\t{{textSubject | async}}\n</button>\n<ng-template #iconButton>\n <button\n\t (click)=\"open()\"\n\t [disabled]=\"disabled\"\n\t [matTooltipDisabled]=\"!tooltip\"\n\t [matTooltip]=\"tooltip ?? ''\"\n [style]=\"style\"\n\t class=\"koala-icon-button\"\n\t mat-icon-button\n\t matTooltipPosition=\"before\"\n\t type=\"button\">\n <mat-icon>{{icon}}</mat-icon>\n </button>\n</ng-template>\n", styles: [".koala-button{padding:2px 8px}.koala-icon-button:disabled,.koala-button:disabled{background:#cccccc!important;color:#616161!important;cursor:not-allowed}.koala-icon-button{height:25px;line-height:25px;width:25px}.koala-icon-button mat-icon{font-size:20px;height:20px;line-height:20px;position:relative;width:20px}\n"] }] }], propDecorators: { color: [{ type: Input }], backgroundColor: [{ type: Input }], icon: [{ type: Input }], text: [{ type: Input }], tooltip: [{ type: Input }], disabled: [{ type: Input }], multiple: [{ type: Input }], accept: [{ type: Input }], setFile: [{ type: Input }], updateFileList: [{ type: Input }], autoclear: [{ type: Input }], getFiles: [{ type: Output }], file: [{ type: ViewChild, args: ['file', { static: true }] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1idXR0b24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvZmlsZS1idXR0b24vc3JjL2xpYi9maWxlLWJ1dHRvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9maWxlLWJ1dHRvbi9zcmMvbGliL2ZpbGUtYnV0dG9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUNOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7QUFRdkMsTUFBTSxPQUFPLG1CQUFtQjtJQU5oQztRQWlCVyxjQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ2hCLGFBQVEsR0FBRyxJQUFJLFlBQVksRUFBd0IsQ0FBQztRQUN2RCxVQUFLLEdBQXlCLEVBQUUsQ0FBQztRQUtqQyxnQkFBVyxHQUFHLElBQUksZUFBZSxDQUFTLEVBQUUsQ0FBQyxDQUFDO0tBcUZ0RDtJQW5GQyxRQUFRO1FBQ04sSUFBSSxDQUFDLEtBQUssR0FBRyxVQUFVLElBQUksQ0FBQyxLQUFLLGdDQUFnQyxJQUFJLENBQUMsZUFBZSxhQUFhLENBQUM7UUFDbkcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN2QyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDaEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFO2dCQUNwQyxJQUFJLElBQUksRUFBRTtvQkFDUixNQUFNLFVBQVUsR0FBRyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ2hELElBQUksVUFBVSxF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QUFDO1lBQzdCLENBQUMsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxRQUFRLEVBQUU7WUFDWixNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3hELE9BQU87Z0JBQ0wsUUFBUSxFQUFFLElBQUksQ0FBQyxJQUFJO2dCQUNuQixJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO2dCQUN2QyxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQzthQUNyQixDQUFDO1NBQ0g7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7O2dIQXRHVSxtQkFBbUI7b0dBQW5CLG1CQUFtQixvY0NuQmhDLDgyQkErQkE7MkZEWmEsbUJBQW1CO2tCQU4vQixTQUFTOytCQUNFLG1CQUFtQixtQkFHWix1QkFBdUIsQ0FBQyxNQUFNOzhCQUd0QyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0ksUUFBUTtzQkFBakIsTUFBTTtnQkFJc0MsSUFBSTtzQkFBaEQsU0FBUzt1QkFBQyxNQUFNLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBLb2FsYUZpbGVJbnRlcmZhY2UgfSBmcm9tICcuL2tvYWxhLmZpbGUuaW50ZXJmYWNlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdrb2FsYS1maWxlLWJ1dHRvbicsXG4gIHRlbXBsYXRlVXJsOiAnZmlsZS1idXR0b24uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnZmlsZS1idXR0b24uY29tcG9uZW50LmNzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgRmlsZUJ1dHRvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIGNvbG9yPzogc3RyaW5nO1xuICBASW5wdXQoKSBiYWNrZ3JvdW5kQ29sb3I/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGljb24/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIHRleHQ/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIHRvb2x0aXA/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgQElucHV0KCkgbXVsdGlwbGU/OiBib29sZWFuO1xuICBASW5wdXQoKSBhY2NlcHQ/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIHNldEZpbGU/OiBCZWhhdmlvclN1YmplY3Q8RmlsZT47XG4gIEBJbnB1dCgpIHVwZGF0ZUZpbGVMaXN0PzogQmVoYXZpb3JTdWJqZWN0PEtvYWxhRmlsZUludGVyZmFjZVtdPjtcbiAgQElucHV0KCkgYXV0b2NsZWFyID0gdHJ1ZTtcbiAgQE91dHB1dCgpIGdldEZpbGVzID0gbmV3IEV2ZW50RW1pdHRlcjxLb2FsYUZpbGVJbnRlcmZhY2VbXT4oKTtcbiAgcHVibGljIGZpbGVzOiBLb2FsYUZpbGVJbnRlcmZhY2VbXSA9IFtdO1xuICBwdWJsaWMgc3R5bGU/OiBzdHJpbmc7XG5cbiAgQFZpZXdDaGlsZCgnZmlsZScsIHsgc3RhdGljOiB0cnVlIH0pIHByaXZhdGUgZmlsZT86IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XG5cbiAgcHVibGljIHRleHRTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KCcnKTtcblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnN0eWxlID0gYGNvbG9yOiAke3RoaXMuY29sb3J9IWltcG9ydGFudDtiYWNrZ3JvdW5kLWNvbG9yOiAke3RoaXMuYmFja2dyb3VuZENvbG9yfSFpbXBvcnRhbnQ7YDtcbiAgICB0aGlzLnRleHRTdWJqZWN0Lm5leHQodGhpcy50ZXh0ID8/ICcnKTtcbiAgICBpZiAodGhpcy5zZXRGaWxlKSB7XG4gICAgICB0aGlzLnNldEZpbGUuc3Vic2NyaWJlKGFzeW5jIChmaWxlKSA9PiB7XG4gICAgICAgIGlmIChmaWxlKSB7XG4gICAgICAgICAgY29uc3QgZmlsZVJlc3VsdCA9IGF3YWl0IHRoaXMuY29udmVydEZpbGUoZmlsZSk7XG4gICAgICAgICAgaWYgKGZpbGVSZXN1bHQpIHtcbiAgICAgICAgICAgIHRoaXMuZmlsZXMucHVzaChmaWxlUmVzdWx0KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5nZW5lcmF0ZVRleHRCdXR0b24oKTtcbiAgICAgICAgICB0aGlzLmdldEZpbGVzLmVtaXQodGhpcy5maWxlcyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnVwZGF0ZUZpbGVMaXN0KSB7XG4gICAgICB0aGlzLnVwZGF0ZUZpbGVMaXN0LnN1YnNjcmliZSgoZmlsZUxpc3QpID0+IHtcbiAgICAgICAgdGhpcy5maWxlcyA9IGZpbGVMaXN0O1xuICAgICAgICB0aGlzLmdlbmVyYXRlVGV4dEJ1dHRvbigpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGVtaXRGaWxlcyhmaWxlczogRmlsZUxpc3QgfCBudWxsKSB7XG4gICAgaWYgKGZpbGVzKSB7XG4gICAgICBpZiAoZmlsZXM/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgZm9yIChsZXQgZiA9IDA7IGYgPD0gZmlsZXMubGVuZ3RoOyBmKyspIHtcbiAgICAgICAgICBjb25zdCBmaWxlID0gZmlsZXMuaXRlbShmKTtcbiAgICAgICAgICBpZiAoZmlsZSkge1xuICAgICAgICAgICAgY29uc3QgZmlsZVJlc3VsdCA9IGF3YWl0IHRoaXMuY29udmVydEZpbGUoZmlsZSk7XG4gICAgICAgICAgICBpZiAoZmlsZVJlc3VsdCkge1xuICAgICAgICAgICAgICB0aGlzLmZpbGVzLnB1c2goZmlsZVJlc3VsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5nZXRGaWxlcy5lbWl0KHRoaXMuZmlsZXMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5nZXRGaWxlcy5lbWl0KFtdKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZ2VuZXJhdGVUZXh0QnV0dG9uKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG9wZW4oKSB7XG4gICAgY29uc3QgZWxGaWxlID0gdGhpcy5maWxlPy5uYXRpdmVFbGVtZW50O1xuICAgIGlmIChlbEZpbGUpIGVsRmlsZS52YWx1ZSA9ICcnO1xuICAgIGlmICh0aGlzLmF1dG9jbGVhcikge1xuICAgICAgdGhpcy5maWxlcyA9IFtdO1xuICAgICAgdGhpcy5nZXRGaWxlcy5lbWl0KFtdKTtcbiAgICAgIHRoaXMuZ2VuZXJhdGVUZXh0QnV0dG9uKCk7XG4gICAgfVxuICAgIGVsRmlsZT8uY2xpY2soKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2VuZXJhdGVUZXh0QnV0dG9uKCkge1xuICAgIHRoaXMudGV4dFN1YmplY3QubmV4dChcbiAgICAgIHRoaXMuZmlsZXMubGVuZ3RoID4gMFxuICAgICAgICA/IGAke3RoaXMuZmlsZXMubGVuZ3RofSBhcnF1aXZvJHt0aGlzLmZpbGVzLmxlbmd0aCA+IDEgPyAncycgOiAnJ30gc2VsZWNpb25hZG9gXG4gICAgICAgIDogdGhpcy50ZXh0ID8/ICcnLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNvbnZlcnRGaWxlKGZpbGU6IEZpbGUpOiBQcm9taXNlPEtvYWxhRmlsZUludGVyZmFjZSB8IG51bGw+IHtcbiAgICBjb25zdCBibG9iRmlsZSA9IGF3YWl0IG5ldyBQcm9taXNlPHN0cmluZyB8IEFycmF5QnVmZmVyIHwgbnVsbD4oKHJlc29sdmUpID0+IHtcbiAgICAgIGNvbnN0IGZpbGVSZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgICAgZmlsZVJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpO1xuICAgICAgZmlsZVJlYWRlci5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICAgIHJlc29sdmUoZmlsZVJlYWRlci5yZXN1bHQpO1xuICAgICAgfTtcbiAgICB9KTtcbiAgICBpZiAoYmxvYkZpbGUpIHtcbiAgICAgIGNvbnN0IGZpbGVTcGxpdCA9IGJsb2JGaWxlLnRvU3RyaW5nKCkuc3BsaXQoJztiYXNlNjQsJyk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBmaWxlbmFtZTogZmlsZS5uYW1lLFxuICAgICAgICB0eXBlOiBmaWxlU3BsaXRbMF0ucmVwbGFjZSgnZGF0YTonLCAnJyksXG4gICAgICAgIGJhc2U2NDogZmlsZVNwbGl0WzFdLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuIiwiPGlucHV0ICNmaWxlIChjaGFuZ2UpPVwiZW1pdEZpbGVzKGZpbGUuZmlsZXMpXCIgW2FjY2VwdF09XCJhY2NlcHRcIiBbbXVsdGlwbGVdPVwibXVsdGlwbGVcIlxuICAgICAgIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIlxuICAgICAgIHR5cGU9XCJmaWxlXCIvPlxuPGJ1dHRvblxuXHQoY2xpY2spPVwib3BlbigpXCJcblx0Km5nSWY9XCJ0ZXh0IGVsc2UgaWNvbkJ1dHRvblwiXG5cdFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG5cdFttYXRUb29sdGlwRGlzYWJsZWRdPVwiIXRvb2x0aXBcIlxuXHRbbWF0VG9vbHRpcF09XCJ0b29sdGlwID8/ICcnXCJcbiAgW3N0eWxlXT1cInN0eWxlXCJcblx0Y2xhc3M9XCJrb2FsYS1idXR0b25cIlxuXHRtYXQtYnV0dG9uXG5cdG1hdFRvb2x0aXBQb3NpdGlvbj1cImFib3ZlXCJcblx0dHlwZT1cImJ1dHRvblwiPlxuICA8bWF0LWljb24gKm5nSWY9XCJpY29uXCI+e3tpY29ufX08L21hdC1pY29uPlxuXHR7e3RleHRTdWJqZWN0IHwgYXN5bmN9fVxuPC9idXR0b24+XG48bmctdGVtcGxhdGUgI2ljb25CdXR0b24+XG4gIDxidXR0b25cblx0ICAoY2xpY2spPVwib3BlbigpXCJcblx0ICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuXHQgIFttYXRUb29sdGlwRGlzYWJsZWRdPVwiIXRvb2x0aXBcIlxuXHQgIFttYXRUb29sdGlwXT1cInRvb2x0aXAgPz8gJydcIlxuICAgIFtzdHlsZV09XCJzdHlsZVwiXG5cdCAgY2xhc3M9XCJrb2FsYS1pY29uLWJ1dHRvblwiXG5cdCAgbWF0LWljb24tYnV0dG9uXG5cdCAgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYmVmb3JlXCJcblx0ICB0eXBlPVwiYnV0dG9uXCI+XG4gICAgPG1hdC1pY29uPnt7aWNvbn19PC9tYXQtaWNvbj5cbiAgPC9idXR0b24+XG48L25nLXRlbXBsYXRlPlxuIl19