UNPKG

cfc-ds

Version:

Design System do Conselho Federal de Contabilidade baseado no govbr-ds

106 lines 19.5 kB
// collapse.component.ts import { Component, Input, ViewChild, Output, EventEmitter } from '@angular/core'; import * as i0 from "@angular/core"; import * as i1 from "@angular/common"; import * as i2 from "@angular/flex-layout/extended"; import * as i3 from "../icon/icon.component"; export class CollapseComponent { collapseDiv; title = ''; expanded = false; direction = 'down'; icon = ''; customClass = ''; heightLimit = null; indentLevel = 0; buttonOnly = false; stateChange = new EventEmitter(); isExpanded = false; // Usar uma variável booleana simples contentHeight = 'auto'; // Chevron icons based on direction get chevronIcon() { if (this.icon) return this.icon; switch (this.direction) { case 'down': return this.isExpanded ? 'chevron-up' : 'chevron-down'; case 'up': return this.isExpanded ? 'chevron-down' : 'chevron-up'; case 'right': return this.isExpanded ? 'chevron-left' : 'chevron-right'; case 'left': return this.isExpanded ? 'chevron-right' : 'chevron-left'; default: return this.isExpanded ? 'chevron-up' : 'chevron-down'; } } // Calculate indentation style get indentStyle() { return this.indentLevel ? { paddingLeft: `${this.indentLevel * 16}px` } : {}; } // Calculate max height for content if heightLimit is set get contentStyle() { if (this.heightLimit && this.isExpanded) { return { maxHeight: `${this.heightLimit}px`, overflowY: 'auto' }; } return {}; } constructor() { } ngOnInit() { this.isExpanded = this.expanded; } ngAfterViewInit() { // Set initial state if (this.expanded) { this.open(); } // Handle any elements with data-bs-toggle attribute const triggers = this.collapseDiv.nativeElement.querySelectorAll('[data-bs-toggle="collapse"]'); triggers.forEach((trigger) => { trigger.addEventListener('click', () => this.toggle()); }); } toggle() { this.isExpanded = !this.isExpanded; this.stateChange.emit(this.isExpanded); } open() { this.isExpanded = true; this.stateChange.emit(true); } close() { this.isExpanded = false; this.stateChange.emit(false); } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CollapseComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: CollapseComponent, selector: "cfc-collapse", inputs: { title: "title", expanded: "expanded", direction: "direction", icon: "icon", customClass: "customClass", heightLimit: "heightLimit", indentLevel: "indentLevel", buttonOnly: "buttonOnly" }, outputs: { stateChange: "stateChange" }, viewQueries: [{ propertyName: "collapseDiv", first: true, predicate: ["collapseDiv"], descendants: true, static: true }], ngImport: i0, template: "<div #collapseDiv class=\"cfc-collapse {{customClass}}\">\r\n <div *ngIf=\"!buttonOnly\" class=\"cfc-collapse-trigger\"\r\n [ngClass]=\"{'expanded': isExpanded}\"\r\n [ngStyle]=\"indentStyle\"\r\n (click)=\"toggle()\">\r\n <ng-container *ngTemplateOutlet=\"titleContent\"></ng-container>\r\n <cfc-icon [iconName]=\"chevronIcon\" ></cfc-icon>\r\n </div>\r\n\r\n <div *ngIf=\"buttonOnly\" class=\"cfc-collapse-header\" [ngStyle]=\"indentStyle\">\r\n <ng-container *ngTemplateOutlet=\"titleContent\"></ng-container>\r\n <button class=\"cfc-collapse-button\" (click)=\"toggle()\">\r\n <cfc-icon [iconName]=\"chevronIcon\" ></cfc-icon>\r\n </button>\r\n </div>\r\n\r\n <div class=\"cfc-collapse-content\" [ngClass]=\"{'expanded': isExpanded}\" [ngStyle]=\"contentStyle\">\r\n <div class=\"cfc-collapse-content-inner\">\r\n <ng-content></ng-content>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<ng-template #titleContent>\r\n <ng-content select=\"[collapse-title]\"></ng-content>\r\n <span *ngIf=\"title\">{{title}}</span>\r\n</ng-template>", styles: ["@charset \"UTF-8\";.cfc-collapse{display:flex;flex-direction:column;width:100%}.cfc-collapse-trigger{display:flex;align-items:center;justify-content:space-between;cursor:pointer;padding:8px;-webkit-user-select:none;user-select:none;position:relative}.cfc-collapse-trigger:hover{background-color:#0000000d}.cfc-collapse-header{display:flex;align-items:center;justify-content:space-between;padding:8px;position:relative}.cfc-collapse-button{background:transparent;border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;padding:4px 8px}.cfc-collapse-button:hover{background-color:#0000000d}.cfc-collapse-button:focus{outline:none;box-shadow:0 0 0 2px #007bff40}.cfc-collapse-icon{transition:transform .2s ease-in-out}.cfc-collapse-content{width:100%;height:0;overflow:hidden;transition:height .2s ease-in-out,opacity .2s ease-in-out;opacity:0}.cfc-collapse-content.expanded{height:auto;opacity:1}.cfc-collapse-content-inner{padding:8px}:host-context([data-direction=right]) .cfc-collapse-content{margin-left:16px}:host-context([data-direction=left]) .cfc-collapse-content{margin-right:16px}.cfc-collapse-nested .cfc-collapse-trigger{background-color:#00000005}.cfc-collapse-trigger,.cfc-collapse-header{cursor:pointer}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i2.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { kind: "directive", type: i2.DefaultStyleDirective, selector: " [ngStyle], [ngStyle.xs], [ngStyle.sm], [ngStyle.md], [ngStyle.lg], [ngStyle.xl], [ngStyle.lt-sm], [ngStyle.lt-md], [ngStyle.lt-lg], [ngStyle.lt-xl], [ngStyle.gt-xs], [ngStyle.gt-sm], [ngStyle.gt-md], [ngStyle.gt-lg]", inputs: ["ngStyle", "ngStyle.xs", "ngStyle.sm", "ngStyle.md", "ngStyle.lg", "ngStyle.xl", "ngStyle.lt-sm", "ngStyle.lt-md", "ngStyle.lt-lg", "ngStyle.lt-xl", "ngStyle.gt-xs", "ngStyle.gt-sm", "ngStyle.gt-md", "ngStyle.gt-lg"] }, { kind: "component", type: i3.IconComponent, selector: "cfc-icon", inputs: ["iconName", "familyName", "className", "size", "color"] }] }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CollapseComponent, decorators: [{ type: Component, args: [{ selector: 'cfc-collapse', template: "<div #collapseDiv class=\"cfc-collapse {{customClass}}\">\r\n <div *ngIf=\"!buttonOnly\" class=\"cfc-collapse-trigger\"\r\n [ngClass]=\"{'expanded': isExpanded}\"\r\n [ngStyle]=\"indentStyle\"\r\n (click)=\"toggle()\">\r\n <ng-container *ngTemplateOutlet=\"titleContent\"></ng-container>\r\n <cfc-icon [iconName]=\"chevronIcon\" ></cfc-icon>\r\n </div>\r\n\r\n <div *ngIf=\"buttonOnly\" class=\"cfc-collapse-header\" [ngStyle]=\"indentStyle\">\r\n <ng-container *ngTemplateOutlet=\"titleContent\"></ng-container>\r\n <button class=\"cfc-collapse-button\" (click)=\"toggle()\">\r\n <cfc-icon [iconName]=\"chevronIcon\" ></cfc-icon>\r\n </button>\r\n </div>\r\n\r\n <div class=\"cfc-collapse-content\" [ngClass]=\"{'expanded': isExpanded}\" [ngStyle]=\"contentStyle\">\r\n <div class=\"cfc-collapse-content-inner\">\r\n <ng-content></ng-content>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<ng-template #titleContent>\r\n <ng-content select=\"[collapse-title]\"></ng-content>\r\n <span *ngIf=\"title\">{{title}}</span>\r\n</ng-template>", styles: ["@charset \"UTF-8\";.cfc-collapse{display:flex;flex-direction:column;width:100%}.cfc-collapse-trigger{display:flex;align-items:center;justify-content:space-between;cursor:pointer;padding:8px;-webkit-user-select:none;user-select:none;position:relative}.cfc-collapse-trigger:hover{background-color:#0000000d}.cfc-collapse-header{display:flex;align-items:center;justify-content:space-between;padding:8px;position:relative}.cfc-collapse-button{background:transparent;border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;padding:4px 8px}.cfc-collapse-button:hover{background-color:#0000000d}.cfc-collapse-button:focus{outline:none;box-shadow:0 0 0 2px #007bff40}.cfc-collapse-icon{transition:transform .2s ease-in-out}.cfc-collapse-content{width:100%;height:0;overflow:hidden;transition:height .2s ease-in-out,opacity .2s ease-in-out;opacity:0}.cfc-collapse-content.expanded{height:auto;opacity:1}.cfc-collapse-content-inner{padding:8px}:host-context([data-direction=right]) .cfc-collapse-content{margin-left:16px}:host-context([data-direction=left]) .cfc-collapse-content{margin-right:16px}.cfc-collapse-nested .cfc-collapse-trigger{background-color:#00000005}.cfc-collapse-trigger,.cfc-collapse-header{cursor:pointer}\n"] }] }], ctorParameters: () => [], propDecorators: { collapseDiv: [{ type: ViewChild, args: ['collapseDiv', { static: true }] }], title: [{ type: Input }], expanded: [{ type: Input }], direction: [{ type: Input }], icon: [{ type: Input }], customClass: [{ type: Input }], heightLimit: [{ type: Input }], indentLevel: [{ type: Input }], buttonOnly: [{ type: Input }], stateChange: [{ type: Output }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGFwc2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2ZjLWRzL3NyYy9saWIvY29tcG9uZW50cy9jb2xsYXBzZS9jb2xsYXBzZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jZmMtZHMvc3JjL2xpYi9jb21wb25lbnRzL2NvbGxhcHNlL2NvbGxhcHNlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHdCQUF3QjtBQUN4QixPQUFPLEVBQUUsU0FBUyxFQUFjLEtBQUssRUFBVSxTQUFTLEVBQWlCLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7O0FBT3JILE1BQU0sT0FBTyxpQkFBaUI7SUFDZ0IsV0FBVyxDQUFjO0lBRTVELEtBQUssR0FBVyxFQUFFLENBQUM7SUFDbkIsUUFBUSxHQUFZLEtBQUssQ0FBQztJQUMxQixTQUFTLEdBQXFDLE1BQU0sQ0FBQztJQUNyRCxJQUFJLEdBQVcsRUFBRSxDQUFDO0lBQ2xCLFdBQVcsR0FBVyxFQUFFLENBQUM7SUFDekIsV0FBVyxHQUFrQixJQUFJLENBQUM7SUFDbEMsV0FBVyxHQUFXLENBQUMsQ0FBQztJQUN4QixVQUFVLEdBQVksS0FBSyxDQUFDO0lBRTNCLFdBQVcsR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO0lBRXBELFVBQVUsR0FBWSxLQUFLLENBQUMsQ0FBQyxxQ0FBcUM7SUFDbEUsYUFBYSxHQUFHLE1BQU0sQ0FBQztJQUV2QixtQ0FBbUM7SUFDbkMsSUFBSSxXQUFXO1FBQ2IsSUFBSSxJQUFJLENBQUMsSUFBSTtZQUFFLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztRQUVoQyxRQUFRLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUN2QixLQUFLLE1BQU07Z0JBQ1QsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxZQUFZLENB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O3NCQUFuQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFFSSxXQUFXO3NCQUFwQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLy8gY29sbGFwc2UuY29tcG9uZW50LnRzXHJcbmltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5wdXQsIE9uSW5pdCwgVmlld0NoaWxkLCBBZnRlclZpZXdJbml0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdjZmMtY29sbGFwc2UnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9jb2xsYXBzZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vY29sbGFwc2UuY29tcG9uZW50LnNjc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIENvbGxhcHNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcclxuICBAVmlld0NoaWxkKCdjb2xsYXBzZURpdicsIHsgc3RhdGljOiB0cnVlIH0pIGNvbGxhcHNlRGl2ITogRWxlbWVudFJlZjtcclxuXHJcbiAgQElucHV0KCkgdGl0bGU6IHN0cmluZyA9ICcnO1xyXG4gIEBJbnB1dCgpIGV4cGFuZGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgZGlyZWN0aW9uOiAnZG93bicgfCAndXAnIHwgJ3JpZ2h0JyB8ICdsZWZ0JyA9ICdkb3duJztcclxuICBASW5wdXQoKSBpY29uOiBzdHJpbmcgPSAnJztcclxuICBASW5wdXQoKSBjdXN0b21DbGFzczogc3RyaW5nID0gJyc7XHJcbiAgQElucHV0KCkgaGVpZ2h0TGltaXQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG4gIEBJbnB1dCgpIGluZGVudExldmVsOiBudW1iZXIgPSAwO1xyXG4gIEBJbnB1dCgpIGJ1dHRvbk9ubHk6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQE91dHB1dCgpIHN0YXRlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xyXG5cclxuICBpc0V4cGFuZGVkOiBib29sZWFuID0gZmFsc2U7IC8vIFVzYXIgdW1hIHZhcmnDoXZlbCBib29sZWFuYSBzaW1wbGVzXHJcbiAgY29udGVudEhlaWdodCA9ICdhdXRvJztcclxuXHJcbiAgLy8gQ2hldnJvbiBpY29ucyBiYXNlZCBvbiBkaXJlY3Rpb25cclxuICBnZXQgY2hldnJvbkljb24oKTogc3RyaW5nIHtcclxuICAgIGlmICh0aGlzLmljb24pIHJldHVybiB0aGlzLmljb247XHJcblxyXG4gICAgc3dpdGNoICh0aGlzLmRpcmVjdGlvbikge1xyXG4gICAgICBjYXNlICdkb3duJzpcclxuICAgICAgICByZXR1cm4gdGhpcy5pc0V4cGFuZGVkID8gJ2NoZXZyb24tdXAnIDogJ2NoZXZyb24tZG93bic7XHJcbiAgICAgIGNhc2UgJ3VwJzpcclxuICAgICAgICByZXR1cm4gdGhpcy5pc0V4cGFuZGVkID8gJ2NoZXZyb24tZG93bicgOiAnY2hldnJvbi11cCc7XHJcbiAgICAgIGNhc2UgJ3JpZ2h0JzpcclxuICAgICAgICByZXR1cm4gdGhpcy5pc0V4cGFuZGVkID8gJ2NoZXZyb24tbGVmdCcgOiAnY2hldnJvbi1yaWdodCc7XHJcbiAgICAgIGNhc2UgJ2xlZnQnOlxyXG4gICAgICAgIHJldHVybiB0aGlzLmlzRXhwYW5kZWQgPyAnY2hldnJvbi1yaWdodCcgOiAnY2hldnJvbi1sZWZ0JztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gdGhpcy5pc0V4cGFuZGVkID8gJ2NoZXZyb24tdXAnIDogJ2NoZXZyb24tZG93bic7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBDYWxjdWxhdGUgaW5kZW50YXRpb24gc3R5bGVcclxuICBnZXQgaW5kZW50U3R5bGUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5pbmRlbnRMZXZlbCA/IHsgcGFkZGluZ0xlZnQ6IGAke3RoaXMuaW5kZW50TGV2ZWwgKiAxNn1weGAgfSA6IHt9O1xyXG4gIH1cclxuXHJcbiAgLy8gQ2FsY3VsYXRlIG1heCBoZWlnaHQgZm9yIGNvbnRlbnQgaWYgaGVpZ2h0TGltaXQgaXMgc2V0XHJcbiAgZ2V0IGNvbnRlbnRTdHlsZSgpIHtcclxuICAgIGlmICh0aGlzLmhlaWdodExpbWl0ICYmIHRoaXMuaXNFeHBhbmRlZCkge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIG1heEhlaWdodDogYCR7dGhpcy5oZWlnaHRMaW1pdH1weGAsXHJcbiAgICAgICAgb3ZlcmZsb3dZOiAnYXV0bydcclxuICAgICAgfTtcclxuICAgIH1cclxuICAgIHJldHVybiB7fTtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge31cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmlzRXhwYW5kZWQgPSB0aGlzLmV4cGFuZGVkO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgLy8gU2V0IGluaXRpYWwgc3RhdGVcclxuICAgIGlmICh0aGlzLmV4cGFuZGVkKSB7XHJcbiAgICAgIHRoaXMub3BlbigpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEhhbmRsZSBhbnkgZWxlbWVudHMgd2l0aCBkYXRhLWJzLXRvZ2dsZSBhdHRyaWJ1dGVcclxuICAgIGNvbnN0IHRyaWdnZXJzID0gdGhpcy5jb2xsYXBzZURpdi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tkYXRhLWJzLXRvZ2dsZT1cImNvbGxhcHNlXCJdJyk7XHJcbiAgICB0cmlnZ2Vycy5mb3JFYWNoKCh0cmlnZ2VyOiBIVE1MRWxlbWVudCkgPT4ge1xyXG4gICAgICB0cmlnZ2VyLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4gdGhpcy50b2dnbGUoKSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHRvZ2dsZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuaXNFeHBhbmRlZCA9ICF0aGlzLmlzRXhwYW5kZWQ7XHJcbiAgICB0aGlzLnN0YXRlQ2hhbmdlLmVtaXQodGhpcy5pc0V4cGFuZGVkKTtcclxuICB9XHJcblxyXG4gIG9wZW4oKTogdm9pZCB7XHJcbiAgICB0aGlzLmlzRXhwYW5kZWQgPSB0cnVlO1xyXG4gICAgdGhpcy5zdGF0ZUNoYW5nZS5lbWl0KHRydWUpO1xyXG4gIH1cclxuXHJcbiAgY2xvc2UoKTogdm9pZCB7XHJcbiAgICB0aGlzLmlzRXhwYW5kZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuc3RhdGVDaGFuZ2UuZW1pdChmYWxzZSk7XHJcbiAgfVxyXG59IiwiPGRpdiAjY29sbGFwc2VEaXYgY2xhc3M9XCJjZmMtY29sbGFwc2Uge3tjdXN0b21DbGFzc319XCI+XHJcbiAgPGRpdiAqbmdJZj1cIiFidXR0b25Pbmx5XCIgY2xhc3M9XCJjZmMtY29sbGFwc2UtdHJpZ2dlclwiXHJcbiAgICAgICBbbmdDbGFzc109XCJ7J2V4cGFuZGVkJzogaXNFeHBhbmRlZH1cIlxyXG4gICAgICAgW25nU3R5bGVdPVwiaW5kZW50U3R5bGVcIlxyXG4gICAgICAgKGNsaWNrKT1cInRvZ2dsZSgpXCI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGl0bGVDb250ZW50XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICA8Y2ZjLWljb24gW2ljb25OYW1lXT1cImNoZXZyb25JY29uXCIgPjwvY2ZjLWljb24+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXYgKm5nSWY9XCJidXR0b25Pbmx5XCIgY2xhc3M9XCJjZmMtY29sbGFwc2UtaGVhZGVyXCIgW25nU3R5bGVdPVwiaW5kZW50U3R5bGVcIj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0aXRsZUNvbnRlbnRcIj48L25nLWNvbnRhaW5lcj5cclxuICAgIDxidXR0b24gY2xhc3M9XCJjZmMtY29sbGFwc2UtYnV0dG9uXCIgKGNsaWNrKT1cInRvZ2dsZSgpXCI+XHJcbiAgICAgIDxjZmMtaWNvbiBbaWNvbk5hbWVdPVwiY2hldnJvbkljb25cIiA+PC9jZmMtaWNvbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2IGNsYXNzPVwiY2ZjLWNvbGxhcHNlLWNvbnRlbnRcIiBbbmdDbGFzc109XCJ7J2V4cGFuZGVkJzogaXNFeHBhbmRlZH1cIiBbbmdTdHlsZV09XCJjb250ZW50U3R5bGVcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjZmMtY29sbGFwc2UtY29udGVudC1pbm5lclwiPlxyXG4gICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG48bmctdGVtcGxhdGUgI3RpdGxlQ29udGVudD5cclxuICA8bmctY29udGVudCBzZWxlY3Q9XCJbY29sbGFwc2UtdGl0bGVdXCI+PC9uZy1jb250ZW50PlxyXG4gIDxzcGFuICpuZ0lmPVwidGl0bGVcIj57e3RpdGxlfX08L3NwYW4+XHJcbjwvbmctdGVtcGxhdGU+Il19