UNPKG

survey-creator-angular

Version:

A white-label drag-and-drop form builder for Angular that lets you design complex, interactive forms and surveys without writing code. It generates JSON schemas used by the SurveyJS Form Library to render dynamic forms in your Angular app.

65 lines 15.1 kB
import { Component, ElementRef, Input, ViewChild } from "@angular/core"; import { AngularComponentFactory, BaseAngular, SurveyContentComponent } from "survey-angular-ui"; import { cssVariablesToString } from "survey-creator-core"; import * as i0 from "@angular/core"; import * as i1 from "survey-angular-ui"; import * as i2 from "./tabbed-menu/tabbed-menu/tabbed-menu.component"; import * as i3 from "./side-bar/side-bar.component"; import * as i4 from "@angular/common"; export class CreatorComponent extends BaseAngular { constructor(changeDetectorRef) { super(changeDetectorRef); changeDetectorRef.detach(); } getModel() { return this.model; } get creator() { return this.model; } getShouldReattachChangeDetector() { return false; } onModelChanged() { this.changeDetectorRef.detectChanges(); if (this.previousModel) { this.previousModel.unsubscribeRootElement(); } if (this.creator && this.container.nativeElement) { this.creator.setRootElement(this.container.nativeElement); } } ngAfterViewInit() { this.creator.setRootElement(this.container.nativeElement); super.ngOnInit(); } ngOnDestroy() { this.creator.unsubscribeRootElement(); super.ngOnDestroy(); } get visibleTabs() { return this.creator.tabs.filter(tab => this.creator.viewType == tab.id && tab.visible); } trackTabBy(_, tab) { return tab.id; } get themeVariablesString() { return cssVariablesToString(this.creator.themeVariables); } } CreatorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: CreatorComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); CreatorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: CreatorComponent, selector: "survey-creator", inputs: { model: "model" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true, read: ElementRef }], usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"!creator.isCreatorDisposed\">\n <sv-ng-modal-container></sv-ng-modal-container>\n <div [class]=\"creator.getRootCss()\" [attr.style]=\"themeVariablesString\" #container>\n <div>\n <sv-svg-bundle></sv-svg-bundle>\n </div>\n <div class=\"svc-full-container svc-creator__area svc-flex-column\"\n [class.svc-creator__area--with-banner]=\"!creator.haveCommercialLicense\">\n <div class=\"svc-flex-row svc-full-container\"\n [class.svc-creator__side-bar--left]=\"creator.sidebarLocation == 'left'\">\n <div class=\"svc-flex-column svc-flex-row__element svc-flex-row__element--growing\">\n <div class=\"svc-top-bar\">\n <div class=\"svc-tabbed-menu-wrapper\" [visible]=\"creator.showTabs\">\n <svc-tabbed-menu [model]=\"creator.tabbedMenu\"></svc-tabbed-menu>\n </div>\n <div *ngIf=\"creator.showToolbar\" class=\"svc-toolbar-wrapper\" [visible]=\"creator.showToolbar\">\n <sv-action-bar [model]=\"creator.toolbar\"></sv-action-bar>\n </div>\n </div>\n <div class=\"svc-creator__content-wrapper svc-flex-row\"\n [class.svc-creator__content-wrapper--footer-toolbar]=\"creator.isMobileView\">\n <div class=\"svc-creator__content-holder svc-flex-column\">\n <ng-container *ngFor=\"let tab of visibleTabs; trackBy: trackTabBy\">\n <div role=\"tabpanel\" class=\"svc-creator-tab\" [attr.id]=\"'scrollableDiv-' + tab.id\"\n [attr.aria-labelledby]=\"'tab-' + tab.id\"\n [class.svc-creator__toolbox--right]=\"creator.toolboxLocation == 'right'\">\n <ng-template\n [component]=\"{ name: tab.componentContent, data: { data: creator, model: tab.data.model } }\"></ng-template>\n </div>\n </ng-container>\n </div>\n </div>\n <div *ngIf=\"creator.isMobileView\" class=\"svc-footer-bar\">\n <div class=\"svc-toolbar-wrapper\" [visible]=\"creator.isMobileView\">\n <sv-action-bar [model]=\"creator.footerToolbar\"></sv-action-bar>\n </div>\n </div>\n </div>\n <svc-side-bar [model]=\"creator.sidebar\" *ngIf=\"creator.isSidebarVisible\"></svc-side-bar>\n </div>\n <div class=\"svc-creator__banner\" *ngIf=\"!creator.haveCommercialLicense\">\n <span class=\"svc-creator__non-commercial-text\" [innerHTML]=\"creator.licenseText | safeHtml\"></span>\n </div>\n <sv-notifier [notifier]=\"creator.notifier\"></sv-notifier>\n </div>\n </div>\n</ng-container>", components: [{ type: i1.ModalComponent, selector: "sv-ng-modal-container" }, { type: i1.SvgBundleComponent, selector: "sv-svg-bundle" }, { type: i2.TabbledMenuComponent, selector: "svc-tabbed-menu", inputs: ["model"] }, { type: i1.ActionBarComponent, selector: "sv-action-bar, sv-ng-action-bar", inputs: ["model", "handleClick"] }, { type: i3.SidebarComponent, selector: "svc-side-bar", inputs: ["model"] }, { type: i1.NotifierComponent, selector: "sv-notifier", inputs: ["notifier"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.VisibleDirective, selector: "[visible]", inputs: ["visible"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1.DynamicComponentDirective, selector: "[component]", inputs: ["component"] }], pipes: { "safeHtml": i1.SafeHtmlPipe } }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: CreatorComponent, decorators: [{ type: Component, args: [{ selector: "survey-creator", templateUrl: "./creator.component.html" }] }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { model: [{ type: Input }], container: [{ type: ViewChild, args: ["container", { read: ElementRef }] }] } }); AngularComponentFactory.Instance.registerComponent("survey-widget", SurveyContentComponent); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY3JlYXRvci5jb21wb25lbnQudHMiLCIuLi8uLi9zcmMvY3JlYXRvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQW9DLFNBQVMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxRyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsV0FBVyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDakcsT0FBTyxFQUFzQyxvQkFBb0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7Ozs7QUFNL0YsTUFBTSxPQUFPLGdCQUFpQixTQUFRLFdBQStCO0lBSW5FLFlBQVksaUJBQW9DO1FBQzlDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3pCLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFDUyxRQUFRO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBQ0QsSUFBVyxPQUFPO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBQ2tCLCtCQUErQjtRQUNoRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFDa0IsY0FBYztRQUMvQixJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDdkMsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ3RCLElBQUksQ0FBQyxhQUFhLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztTQUM3QztRQUNELElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsRUFBRTtZQUNoRCxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1NBQzNEO0lBQ0gsQ0FBQztJQUNNLGVBQWU7UUFDcEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUMxRCxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbkIsQ0FBQztJQUNlLFdBQVc7UUFDekIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBQ3RDLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBQ0QsSUFBVyxXQUFXO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLElBQUksR0FBRyxDQUFDLEVBQUUsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDekYsQ0FBQztJQUNELFVBQVUsQ0FBQyxDQUFTLEVBQUUsR0FBbUI7UUFDdkMsT0FBTyxHQUFHLENBQUMsRUFBRSxDQUFDO0lBQ2hCLENBQUM7SUFDRCxJQUFXLG9CQUFvQjtRQUM3QixPQUFPLG9CQUFvQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDM0QsQ0FBQzs7OEdBMUNVLGdCQUFnQjtrR0FBaEIsZ0JBQWdCLHFLQUVLLFVBQVUsb0RDVjVDLGltRkE4Q2U7NEZEdENGLGdCQUFnQjtrQkFKNUIsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsZ0JBQWdCO29CQUMxQixXQUFXLEVBQUUsMEJBQTBCO2lCQUN4Qzt3R0FFVSxLQUFLO3NCQUFiLEtBQUs7Z0JBQ3dDLFNBQVM7c0JBQXRELFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTs7QUEyQzlDLHVCQUF1QixDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxlQUFlLEVBQUUsc0JBQXNCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIElucHV0LCBWaWV3Q2hpbGQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgQW5ndWxhckNvbXBvbmVudEZhY3RvcnksIEJhc2VBbmd1bGFyLCBTdXJ2ZXlDb250ZW50Q29tcG9uZW50IH0gZnJvbSBcInN1cnZleS1hbmd1bGFyLXVpXCI7XG5pbXBvcnQgeyBTdXJ2ZXlDcmVhdG9yTW9kZWwsIFRhYmJlZE1lbnVJdGVtLCBjc3NWYXJpYWJsZXNUb1N0cmluZyB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJzdXJ2ZXktY3JlYXRvclwiLFxuICB0ZW1wbGF0ZVVybDogXCIuL2NyZWF0b3IuY29tcG9uZW50Lmh0bWxcIlxufSlcbmV4cG9ydCBjbGFzcyBDcmVhdG9yQ29tcG9uZW50IGV4dGVuZHMgQmFzZUFuZ3VsYXI8U3VydmV5Q3JlYXRvck1vZGVsPiBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xuICBASW5wdXQoKSBtb2RlbCE6IFN1cnZleUNyZWF0b3JNb2RlbDtcbiAgQFZpZXdDaGlsZChcImNvbnRhaW5lclwiLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgY29udGFpbmVyITogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG5cbiAgY29uc3RydWN0b3IoY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmKSB7XG4gICAgc3VwZXIoY2hhbmdlRGV0ZWN0b3JSZWYpO1xuICAgIGNoYW5nZURldGVjdG9yUmVmLmRldGFjaCgpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRNb2RlbCgpOiBTdXJ2ZXlDcmVhdG9yTW9kZWwge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG4gIHB1YmxpYyBnZXQgY3JlYXRvcigpOiBTdXJ2ZXlDcmVhdG9yTW9kZWwge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG4gIHByb3RlY3RlZCBvdmVycmlkZSBnZXRTaG91bGRSZWF0dGFjaENoYW5nZURldGVjdG9yKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgb25Nb2RlbENoYW5nZWQoKTogdm9pZCB7XG4gICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgaWYgKHRoaXMucHJldmlvdXNNb2RlbCkge1xuICAgICAgdGhpcy5wcmV2aW91c01vZGVsLnVuc3Vic2NyaWJlUm9vdEVsZW1lbnQoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuY3JlYXRvciAmJiB0aGlzLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50KSB7XG4gICAgICB0aGlzLmNyZWF0b3Iuc2V0Um9vdEVsZW1lbnQodGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudCk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5jcmVhdG9yLnNldFJvb3RFbGVtZW50KHRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQpO1xuICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gIH1cbiAgcHVibGljIG92ZXJyaWRlIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuY3JlYXRvci51bnN1YnNjcmliZVJvb3RFbGVtZW50KCk7XG4gICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHZpc2libGVUYWJzKCk6IEFycmF5PFRhYmJlZE1lbnVJdGVtPiB7XG4gICAgcmV0dXJuIHRoaXMuY3JlYXRvci50YWJzLmZpbHRlcih0YWIgPT4gdGhpcy5jcmVhdG9yLnZpZXdUeXBlID09IHRhYi5pZCAmJiB0YWIudmlzaWJsZSk7XG4gIH1cbiAgdHJhY2tUYWJCeShfOiBudW1iZXIsIHRhYjogVGFiYmVkTWVudUl0ZW0pIHtcbiAgICByZXR1cm4gdGFiLmlkO1xuICB9XG4gIHB1YmxpYyBnZXQgdGhlbWVWYXJpYWJsZXNTdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gY3NzVmFyaWFibGVzVG9TdHJpbmcodGhpcy5jcmVhdG9yLnRoZW1lVmFyaWFibGVzKTtcbiAgfVxufVxuXG5Bbmd1bGFyQ29tcG9uZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckNvbXBvbmVudChcInN1cnZleS13aWRnZXRcIiwgU3VydmV5Q29udGVudENvbXBvbmVudCk7XG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwiIWNyZWF0b3IuaXNDcmVhdG9yRGlzcG9zZWRcIj5cbiAgPHN2LW5nLW1vZGFsLWNvbnRhaW5lcj48L3N2LW5nLW1vZGFsLWNvbnRhaW5lcj5cbiAgPGRpdiBbY2xhc3NdPVwiY3JlYXRvci5nZXRSb290Q3NzKClcIiBbYXR0ci5zdHlsZV09XCJ0aGVtZVZhcmlhYmxlc1N0cmluZ1wiICNjb250YWluZXI+XG4gICAgPGRpdj5cbiAgICAgIDxzdi1zdmctYnVuZGxlPjwvc3Ytc3ZnLWJ1bmRsZT5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwic3ZjLWZ1bGwtY29udGFpbmVyIHN2Yy1jcmVhdG9yX19hcmVhIHN2Yy1mbGV4LWNvbHVtblwiXG4gICAgICBbY2xhc3Muc3ZjLWNyZWF0b3JfX2FyZWEtLXdpdGgtYmFubmVyXT1cIiFjcmVhdG9yLmhhdmVDb21tZXJjaWFsTGljZW5zZVwiPlxuICAgICAgPGRpdiBjbGFzcz1cInN2Yy1mbGV4LXJvdyBzdmMtZnVsbC1jb250YWluZXJcIlxuICAgICAgICBbY2xhc3Muc3ZjLWNyZWF0b3JfX3NpZGUtYmFyLS1sZWZ0XT1cImNyZWF0b3Iuc2lkZWJhckxvY2F0aW9uID09ICdsZWZ0J1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic3ZjLWZsZXgtY29sdW1uIHN2Yy1mbGV4LXJvd19fZWxlbWVudCBzdmMtZmxleC1yb3dfX2VsZW1lbnQtLWdyb3dpbmdcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic3ZjLXRvcC1iYXJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdmMtdGFiYmVkLW1lbnUtd3JhcHBlclwiIFt2aXNpYmxlXT1cImNyZWF0b3Iuc2hvd1RhYnNcIj5cbiAgICAgICAgICAgICAgPHN2Yy10YWJiZWQtbWVudSBbbW9kZWxdPVwiY3JlYXRvci50YWJiZWRNZW51XCI+PC9zdmMtdGFiYmVkLW1lbnU+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJjcmVhdG9yLnNob3dUb29sYmFyXCIgY2xhc3M9XCJzdmMtdG9vbGJhci13cmFwcGVyXCIgW3Zpc2libGVdPVwiY3JlYXRvci5zaG93VG9vbGJhclwiPlxuICAgICAgICAgICAgICA8c3YtYWN0aW9uLWJhciBbbW9kZWxdPVwiY3JlYXRvci50b29sYmFyXCI+PC9zdi1hY3Rpb24tYmFyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInN2Yy1jcmVhdG9yX19jb250ZW50LXdyYXBwZXIgc3ZjLWZsZXgtcm93XCJcbiAgICAgICAgICAgIFtjbGFzcy5zdmMtY3JlYXRvcl9fY29udGVudC13cmFwcGVyLS1mb290ZXItdG9vbGJhcl09XCJjcmVhdG9yLmlzTW9iaWxlVmlld1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN2Yy1jcmVhdG9yX19jb250ZW50LWhvbGRlciBzdmMtZmxleC1jb2x1bW5cIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgdGFiIG9mIHZpc2libGVUYWJzOyB0cmFja0J5OiB0cmFja1RhYkJ5XCI+XG4gICAgICAgICAgICAgICAgPGRpdiByb2xlPVwidGFicGFuZWxcIiBjbGFzcz1cInN2Yy1jcmVhdG9yLXRhYlwiIFthdHRyLmlkXT1cIidzY3JvbGxhYmxlRGl2LScgKyB0YWIuaWRcIlxuICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cIid0YWItJyArIHRhYi5pZFwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3Muc3ZjLWNyZWF0b3JfX3Rvb2xib3gtLXJpZ2h0XT1cImNyZWF0b3IudG9vbGJveExvY2F0aW9uID09ICdyaWdodCdcIj5cbiAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICBbY29tcG9uZW50XT1cInsgbmFtZTogdGFiLmNvbXBvbmVudENvbnRlbnQsIGRhdGE6IHsgZGF0YTogY3JlYXRvciwgbW9kZWw6IHRhYi5kYXRhLm1vZGVsIH0gfVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cImNyZWF0b3IuaXNNb2JpbGVWaWV3XCIgY2xhc3M9XCJzdmMtZm9vdGVyLWJhclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN2Yy10b29sYmFyLXdyYXBwZXJcIiBbdmlzaWJsZV09XCJjcmVhdG9yLmlzTW9iaWxlVmlld1wiPlxuICAgICAgICAgICAgICA8c3YtYWN0aW9uLWJhciBbbW9kZWxdPVwiY3JlYXRvci5mb290ZXJUb29sYmFyXCI+PC9zdi1hY3Rpb24tYmFyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8c3ZjLXNpZGUtYmFyIFttb2RlbF09XCJjcmVhdG9yLnNpZGViYXJcIiAqbmdJZj1cImNyZWF0b3IuaXNTaWRlYmFyVmlzaWJsZVwiPjwvc3ZjLXNpZGUtYmFyPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwic3ZjLWNyZWF0b3JfX2Jhbm5lclwiICpuZ0lmPVwiIWNyZWF0b3IuaGF2ZUNvbW1lcmNpYWxMaWNlbnNlXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwic3ZjLWNyZWF0b3JfX25vbi1jb21tZXJjaWFsLXRleHRcIiBbaW5uZXJIVE1MXT1cImNyZWF0b3IubGljZW5zZVRleHQgfCBzYWZlSHRtbFwiPjwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPHN2LW5vdGlmaWVyIFtub3RpZmllcl09XCJjcmVhdG9yLm5vdGlmaWVyXCI+PC9zdi1ub3RpZmllcj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLWNvbnRhaW5lcj4iXX0=