UNPKG

formioangular-colfuturo

Version:

This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 10.1.4.

134 lines 20.7 kB
import { Component, ViewChild, } from "@angular/core"; import { FormBuilderComponent } from "formioangular-colfuturo"; import _ from "lodash"; import * as i0 from "@angular/core"; import * as i1 from "../form-manager.service"; import * as i2 from "@angular/router"; import * as i3 from "../form-manager.config"; import * as i4 from "formioangular-colfuturo"; import * as i5 from "@angular/common"; import * as i6 from "@angular/forms"; export class FormManagerEditComponent { service; router; route; config; ref; alerts; builder; formTitle; formType; form; loading; formReady; editMode; constructor(service, router, route, config, ref, alerts) { this.service = service; this.router = router; this.route = route; this.config = config; this.ref = ref; this.alerts = alerts; this.form = { components: [] }; this.formReady = false; this.loading = false; this.editMode = false; } initBuilder(editing) { if (editing) { this.loading = true; this.editMode = true; return this.service.formReady .then(() => { this.form = this.service.form; this.formTitle.nativeElement.value = this.service.form.title; this.formType.nativeElement.value = this.service.form.display || "form"; this.formReady = true; this.loading = false; this.ref.detectChanges(); return true; }) .catch((err) => { this.alerts.setAlert({ type: "danger", message: err.message || err }); this.loading = false; this.ref.detectChanges(); this.formReady = true; }); } else { this.formReady = true; return Promise.resolve(true); } } ngAfterViewInit() { this.route.url.subscribe((url) => { setTimeout(() => this.initBuilder(url[0].path === "edit"), 0); }); } onDisplaySelect(event) { this.builder.setDisplay(event.target.value); } saveForm() { this.loading = true; this.form = _.cloneDeep(this.builder.formio.schema); this.form.title = this.formTitle.nativeElement.value.trim(); this.form.display = this.formType.nativeElement.value; this.form.components = _.cloneDeep(this.builder.form.components); if (this.config.tag) { this.form.tags = this.form.tags || []; this.form.tags.push(this.config.tag); this.form.tags = _.uniq(this.form.tags); } if (this.config.type) { this.form.type = this.config.type; } if (!this.form._id) { this.form.name = _.camelCase(this.form.title).toLowerCase(); this.form.path = this.form.name; } return this.service.formio .saveForm(this.form) .then((form) => { this.form = this.service.setForm(form); this.loading = false; return this.form; }) .catch((err) => { this.loading = false; // Catch if a form is returned as an error. This is a conflict. if (err._id && err.type) { throw err; } this.alerts.setAlert({ type: "danger", message: err.message || err }); }); } onSave() { return this.saveForm().then((form) => { if (this.editMode) { this.router.navigate(["../", "view"], { relativeTo: this.route }); } else { this.router.navigate(["../", form._id, "view"], { relativeTo: this.route, }); } }); } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FormManagerEditComponent, deps: [{ token: i1.FormManagerService }, { token: i2.Router }, { token: i2.ActivatedRoute }, { token: i3.FormManagerConfig }, { token: i0.ChangeDetectorRef }, { token: i4.FormioAlerts }], target: i0.ɵɵFactoryTarget.Component }); static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: FormManagerEditComponent, selector: "ng-component", viewQueries: [{ propertyName: "builder", first: true, predicate: FormBuilderComponent, descendants: true }, { propertyName: "formTitle", first: true, predicate: ["title"], descendants: true }, { propertyName: "formType", first: true, predicate: ["type"], descendants: true }], ngImport: i0, template: "<div class=\"loader\" *ngIf=\"loading\"></div>\n<div class=\"form-group row mb-2\">\n <div class=\"col-sm-8\">\n <input type=\"text\" class=\"form-control\" id=\"formTitle\" placeholder=\"Enter a Title\" #title>\n </div>\n <div class=\"col-sm-2\">\n <select class=\"form-control\" id=\"formSelect\" (change)=\"onDisplaySelect($event)\" #type>\n <option value=\"form\">Form</option>\n <option value=\"wizard\">Wizard</option>\n <option value=\"pdf\">PDF</option>\n </select>\n </div>\n <div class=\"col-sm-2\">\n <button class=\"btn btn-primary btn-block\" (click)=\"onSave()\"><i class=\"bi bi-save me-2\"></i>Save Form</button>\n </div>\n</div>\n<formio-alerts [alerts]=\"alerts\"></formio-alerts>\n<form-builder *ngIf=\"formReady\" [formbuilder]=\"config.builder\" [form]=\"form\" #builder></form-builder>\n<button class=\"btn btn-primary\" style=\"margin-top: 10px;\" (click)=\"onSave()\">Save Form</button>\n", dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.FormBuilderComponent, selector: "form-builder", inputs: ["form", "options", "formbuilder", "noeval", "refresh", "rebuild"], outputs: ["change"] }, { kind: "component", type: i4.FormioAlertsComponent, selector: "formio-alerts", inputs: ["alerts"], outputs: ["focusComponent"] }, { kind: "directive", type: i6.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i6.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }] }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FormManagerEditComponent, decorators: [{ type: Component, args: [{ template: "<div class=\"loader\" *ngIf=\"loading\"></div>\n<div class=\"form-group row mb-2\">\n <div class=\"col-sm-8\">\n <input type=\"text\" class=\"form-control\" id=\"formTitle\" placeholder=\"Enter a Title\" #title>\n </div>\n <div class=\"col-sm-2\">\n <select class=\"form-control\" id=\"formSelect\" (change)=\"onDisplaySelect($event)\" #type>\n <option value=\"form\">Form</option>\n <option value=\"wizard\">Wizard</option>\n <option value=\"pdf\">PDF</option>\n </select>\n </div>\n <div class=\"col-sm-2\">\n <button class=\"btn btn-primary btn-block\" (click)=\"onSave()\"><i class=\"bi bi-save me-2\"></i>Save Form</button>\n </div>\n</div>\n<formio-alerts [alerts]=\"alerts\"></formio-alerts>\n<form-builder *ngIf=\"formReady\" [formbuilder]=\"config.builder\" [form]=\"form\" #builder></form-builder>\n<button class=\"btn btn-primary\" style=\"margin-top: 10px;\" (click)=\"onSave()\">Save Form</button>\n" }] }], ctorParameters: () => [{ type: i1.FormManagerService }, { type: i2.Router }, { type: i2.ActivatedRoute }, { type: i3.FormManagerConfig }, { type: i0.ChangeDetectorRef }, { type: i4.FormioAlerts }], propDecorators: { builder: [{ type: ViewChild, args: [FormBuilderComponent, { static: false }] }], formTitle: [{ type: ViewChild, args: ["title", { static: false }] }], formType: [{ type: ViewChild, args: ["type", { static: false }] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWZvcm1pby9tYW5hZ2VyL3NyYy9lZGl0L2VkaXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1mb3JtaW8vbWFuYWdlci9zcmMvZWRpdC9lZGl0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsU0FBUyxHQUlWLE1BQU0sZUFBZSxDQUFDO0FBS3ZCLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQy9ELE9BQU8sQ0FBQyxNQUFNLFFBQVEsQ0FBQzs7Ozs7Ozs7QUFLdkIsTUFBTSxPQUFPLHdCQUF3QjtJQVcxQjtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFkVCxPQUFPLENBQXVCO0lBQ1MsU0FBUyxDQUFhO0lBQ3ZCLFFBQVEsQ0FBYTtJQUNwRCxJQUFJLENBQU07SUFDVixPQUFPLENBQVU7SUFDakIsU0FBUyxDQUFVO0lBQ25CLFFBQVEsQ0FBVTtJQUV6QixZQUNTLE9BQTJCLEVBQzNCLE1BQWMsRUFDZCxLQUFxQixFQUNyQixNQUF5QixFQUN6QixHQUFzQixFQUN0QixNQUFvQjtRQUxwQixZQUFPLEdBQVAsT0FBTyxDQUFvQjtRQUMzQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFDckIsV0FBTSxHQUFOLE1BQU0sQ0FBbUI7UUFDekIsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDdEIsV0FBTSxHQUFOLE1BQU0sQ0FBYztRQUUzQixJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxDQUFDO1FBQy9CLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxD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LEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFDQyxRQUFRO3NCQUE3QyxTQUFTO3VCQUFDLE1BQU0sRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIFZpZXdDaGlsZCxcbiAgRWxlbWVudFJlZixcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBGb3JtTWFuYWdlclNlcnZpY2UgfSBmcm9tIFwiLi4vZm9ybS1tYW5hZ2VyLnNlcnZpY2VcIjtcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XG5pbXBvcnQgeyBGb3JtTWFuYWdlckNvbmZpZyB9IGZyb20gXCIuLi9mb3JtLW1hbmFnZXIuY29uZmlnXCI7XG5pbXBvcnQgeyBGb3JtaW9BbGVydHMgfSBmcm9tIFwiZm9ybWlvYW5ndWxhci1jb2xmdXR1cm9cIjtcbmltcG9ydCB7IEZvcm1CdWlsZGVyQ29tcG9uZW50IH0gZnJvbSBcImZvcm1pb2FuZ3VsYXItY29sZnV0dXJvXCI7XG5pbXBvcnQgXyBmcm9tIFwibG9kYXNoXCI7XG5cbkBDb21wb25lbnQoe1xuICB0ZW1wbGF0ZVVybDogXCIuL2VkaXQuY29tcG9uZW50Lmh0bWxcIixcbn0pXG5leHBvcnQgY2xhc3MgRm9ybU1hbmFnZXJFZGl0Q29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG4gIEBWaWV3Q2hpbGQoRm9ybUJ1aWxkZXJDb21wb25lbnQsIHsgc3RhdGljOiBmYWxzZSB9KVxuICBidWlsZGVyOiBGb3JtQnVpbGRlckNvbXBvbmVudDtcbiAgQFZpZXdDaGlsZChcInRpdGxlXCIsIHsgc3RhdGljOiBmYWxzZSB9KSBmb3JtVGl0bGU6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoXCJ0eXBlXCIsIHsgc3RhdGljOiBmYWxzZSB9KSBmb3JtVHlwZTogRWxlbWVudFJlZjtcbiAgcHVibGljIGZvcm06IGFueTtcbiAgcHVibGljIGxvYWRpbmc6IEJvb2xlYW47XG4gIHB1YmxpYyBmb3JtUmVhZHk6IEJvb2xlYW47XG4gIHB1YmxpYyBlZGl0TW9kZTogQm9vbGVhbjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgc2VydmljZTogRm9ybU1hbmFnZXJTZXJ2aWNlLFxuICAgIHB1YmxpYyByb3V0ZXI6IFJvdXRlcixcbiAgICBwdWJsaWMgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHB1YmxpYyBjb25maWc6IEZvcm1NYW5hZ2VyQ29uZmlnLFxuICAgIHB1YmxpYyByZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHB1YmxpYyBhbGVydHM6IEZvcm1pb0FsZXJ0c1xuICApIHtcbiAgICB0aGlzLmZvcm0gPSB7IGNvbXBvbmVudHM6IFtdIH07XG4gICAgdGhpcy5mb3JtUmVhZHkgPSBmYWxzZTtcbiAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLmVkaXRNb2RlID0gZmFsc2U7XG4gIH1cblxuICBpbml0QnVpbGRlcihlZGl0aW5nKSB7XG4gICAgaWYgKGVkaXRpbmcpIHtcbiAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgICB0aGlzLmVkaXRNb2RlID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0aGlzLnNlcnZpY2UuZm9ybVJlYWR5XG4gICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmZvcm0gPSB0aGlzLnNlcnZpY2UuZm9ybTtcbiAgICAgICAgICB0aGlzLmZvcm1UaXRsZS5uYXRpdmVFbGVtZW50LnZhbHVlID0gdGhpcy5zZXJ2aWNlLmZvcm0udGl0bGU7XG4gICAgICAgICAgdGhpcy5mb3JtVHlwZS5uYXRpdmVFbGVtZW50LnZhbHVlID1cbiAgICAgICAgICAgIHRoaXMuc2VydmljZS5mb3JtLmRpc3BsYXkgfHwgXCJmb3JtXCI7XG4gICAgICAgICAgdGhpcy5mb3JtUmVhZHkgPSB0cnVlO1xuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgICB0aGlzLmFsZXJ0cy5zZXRBbGVydCh7IHR5cGU6IFwiZGFuZ2VyXCIsIG1lc3NhZ2U6IGVyci5tZXNzYWdlIHx8IGVyciB9KTtcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgdGhpcy5mb3JtUmVhZHkgPSB0cnVlO1xuICAgICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5mb3JtUmVhZHkgPSB0cnVlO1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0cnVlKTtcbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy5yb3V0ZS51cmwuc3Vic2NyaWJlKCh1cmwpID0+IHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5pbml0QnVpbGRlcih1cmxbMF0ucGF0aCA9PT0gXCJlZGl0XCIpLCAwKTtcbiAgICB9KTtcbiAgfVxuXG4gIG9uRGlzcGxheVNlbGVjdChldmVudCkge1xuICAgIHRoaXMuYnVpbGRlci5zZXREaXNwbGF5KGV2ZW50LnRhcmdldC52YWx1ZSk7XG4gIH1cblxuICBzYXZlRm9ybSgpIHtcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgIHRoaXMuZm9ybSA9IF8uY2xvbmVEZWVwKHRoaXMuYnVpbGRlci5mb3JtaW8uc2NoZW1hKTtcbiAgICB0aGlzLmZvcm0udGl0bGUgPSB0aGlzLmZvcm1UaXRsZS5uYXRpdmVFbGVtZW50LnZhbHVlLnRyaW0oKTtcbiAgICB0aGlzLmZvcm0uZGlzcGxheSA9IHRoaXMuZm9ybVR5cGUubmF0aXZlRWxlbWVudC52YWx1ZTtcbiAgICB0aGlzLmZvcm0uY29tcG9uZW50cyA9IF8uY2xvbmVEZWVwKHRoaXMuYnVpbGRlci5mb3JtLmNvbXBvbmVudHMpO1xuXG4gICAgaWYgKHRoaXMuY29uZmlnLnRhZykge1xuICAgICAgdGhpcy5mb3JtLnRhZ3MgPSB0aGlzLmZvcm0udGFncyB8fCBbXTtcbiAgICAgIHRoaXMuZm9ybS50YWdzLnB1c2godGhpcy5jb25maWcudGFnKTtcbiAgICAgIHRoaXMuZm9ybS50YWdzID0gXy51bmlxKHRoaXMuZm9ybS50YWdzKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuY29uZmlnLnR5cGUpIHtcbiAgICAgIHRoaXMuZm9ybS50eXBlID0gdGhpcy5jb25maWcudHlwZTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmZvcm0uX2lkKSB7XG4gICAgICB0aGlzLmZvcm0ubmFtZSA9IF8uY2FtZWxDYXNlKHRoaXMuZm9ybS50aXRsZSkudG9Mb3dlckNhc2UoKTtcbiAgICAgIHRoaXMuZm9ybS5wYXRoID0gdGhpcy5mb3JtLm5hbWU7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnNlcnZpY2UuZm9ybWlvXG4gICAgICAuc2F2ZUZvcm0odGhpcy5mb3JtKVxuICAgICAgLnRoZW4oKGZvcm0pID0+IHtcbiAgICAgICAgdGhpcy5mb3JtID0gdGhpcy5zZXJ2aWNlLnNldEZvcm0oZm9ybSk7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JtO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAvLyBDYXRjaCBpZiBhIGZvcm0gaXMgcmV0dXJuZWQgYXMgYW4gZXJyb3IuIFRoaXMgaXMgYSBjb25mbGljdC5cbiAgICAgICAgaWYgKGVyci5faWQgJiYgZXJyLnR5cGUpIHtcbiAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hbGVydHMuc2V0QWxlcnQoeyB0eXBlOiBcImRhbmdlclwiLCBtZXNzYWdlOiBlcnIubWVzc2FnZSB8fCBlcnIgfSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIG9uU2F2ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5zYXZlRm9ybSgpLnRoZW4oKGZvcm0pID0+IHtcbiAgICAgIGlmICh0aGlzLmVkaXRNb2RlKSB7XG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtcIi4uL1wiLCBcInZpZXdcIl0sIHsgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtcIi4uL1wiLCBmb3JtLl9pZCwgXCJ2aWV3XCJdLCB7XG4gICAgICAgICAgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJsb2FkZXJcIiAqbmdJZj1cImxvYWRpbmdcIj48L2Rpdj5cbjxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvdyBtYi0yXCI+XG4gIDxkaXYgY2xhc3M9XCJjb2wtc20tOFwiPlxuICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgaWQ9XCJmb3JtVGl0bGVcIiBwbGFjZWhvbGRlcj1cIkVudGVyIGEgVGl0bGVcIiAjdGl0bGU+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiY29sLXNtLTJcIj5cbiAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgaWQ9XCJmb3JtU2VsZWN0XCIgKGNoYW5nZSk9XCJvbkRpc3BsYXlTZWxlY3QoJGV2ZW50KVwiICN0eXBlPlxuICAgICAgPG9wdGlvbiB2YWx1ZT1cImZvcm1cIj5Gb3JtPC9vcHRpb24+XG4gICAgICA8b3B0aW9uIHZhbHVlPVwid2l6YXJkXCI+V2l6YXJkPC9vcHRpb24+XG4gICAgICA8b3B0aW9uIHZhbHVlPVwicGRmXCI+UERGPC9vcHRpb24+XG4gICAgPC9zZWxlY3Q+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiY29sLXNtLTJcIj5cbiAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1ibG9ja1wiIChjbGljayk9XCJvblNhdmUoKVwiPjxpIGNsYXNzPVwiYmkgYmktc2F2ZSBtZS0yXCI+PC9pPlNhdmUgRm9ybTwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuPGZvcm1pby1hbGVydHMgW2FsZXJ0c109XCJhbGVydHNcIj48L2Zvcm1pby1hbGVydHM+XG48Zm9ybS1idWlsZGVyICpuZ0lmPVwiZm9ybVJlYWR5XCIgW2Zvcm1idWlsZGVyXT1cImNvbmZpZy5idWlsZGVyXCIgW2Zvcm1dPVwiZm9ybVwiICNidWlsZGVyPjwvZm9ybS1idWlsZGVyPlxuPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIHN0eWxlPVwibWFyZ2luLXRvcDogMTBweDtcIiAoY2xpY2spPVwib25TYXZlKClcIj5TYXZlIEZvcm08L2J1dHRvbj5cbiJdfQ==