UNPKG

survey-angular-ui

Version:

survey.js is a JavaScript Survey Library. It is a modern way to add a survey to your website. It uses JSON for survey metadata and results.

69 lines 14.9 kB
import { Component, Input, ViewChild } from "@angular/core"; import { ProgressButtonsResponsivityManager } from "survey-core"; import { AngularComponentFactory } from "../../../component-factory"; import * as i0 from "@angular/core"; import * as i1 from "../../../survey-string.component"; import * as i2 from "@angular/common"; export class ProgressButtonsComponent { constructor(changeDetectorRef) { this.changeDetectorRef = changeDetectorRef; this.hasScroller = false; this.canShowHeader = false; this.canShowFooter = false; this.canShowItemTitles = true; } onResize(canShowItemTitles) { this.canShowItemTitles = canShowItemTitles; this.canShowHeader = !this.canShowItemTitles; this.changeDetectorRef.detectChanges(); } onUpdateScroller(hasScroller) { this.hasScroller = hasScroller; this.changeDetectorRef.detectChanges(); } onUpdateSettings() { this.canShowItemTitles = this.model.showItemTitles; this.canShowFooter = !this.model.showItemTitles; this.changeDetectorRef.detectChanges(); } ngOnInit() { } ngOnChanges(changes) { } clickScrollButton(isLeftScroll) { if (this.progressButtonsListContainer) { this.progressButtonsListContainer.nativeElement.scrollLeft += (isLeftScroll ? -1 : 1) * 70; } } ngAfterViewInit() { var _a; if (!!((_a = this.progressButtonsListContainer) === null || _a === void 0 ? void 0 : _a.nativeElement)) { const element = this.progressButtonsListContainer.nativeElement; this.respManager = new ProgressButtonsResponsivityManager(this.model, element, this); } } ngOnDestroy() { var _a; (_a = this.respManager) === null || _a === void 0 ? void 0 : _a.dispose(); } } ProgressButtonsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ProgressButtonsComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); ProgressButtonsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: ProgressButtonsComponent, selector: "sv-ng-progress-buttons", inputs: { model: "model", survey: "survey", container: "container" }, viewQueries: [{ propertyName: "progressButtonsListContainer", first: true, predicate: ["progressButtonsListContainer"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div [class]=\"model.getRootCss(container)\" [style.maxWidth]=\"model.progressWidth\" \nrole=\"progressbar\" aria-valuemin=\"0\" aria-valuemax=\"100\" [attr.aria-label]=\"model.progressBarAriaLabel\"\n>\n <div *ngIf=\"canShowHeader\" [class]=\"survey.css.progressButtonsHeader\">\n <div [class]=\"survey.css.progressButtonsPageTitle\" [title]=\"model.headerText\">{{ model.headerText }}</div>\n </div>\n <div [class]=\"survey.css.progressButtonsContainer\">\n <div\n [class]=\"model.getScrollButtonCss(hasScroller, true)\"\n (click)=\"clickScrollButton(true)\"\n role=\"button\"\n ></div>\n <div\n [class]=\"survey.css.progressButtonsListContainer\" #progressButtonsListContainer>\n <ul [class]=\"survey.css.progressButtonsList\">\n <li\n *ngFor=\"let page of survey.visiblePages; index as index\"\n [class]=\"model.getListElementCss(index)\"\n (click)=\"model.isListElementClickable(index) ? model.clickListElement(page) : null\"\n [attr.data-page-number]=\"model.getItemNumber(page)\">\n <div [class]=\"survey.css.progressButtonsConnector\"></div>\n <div *ngIf=\"canShowItemTitles\"\n [class]=\"survey.css.progressButtonsPageTitle\"\n [title]=\"page.renderedNavigationTitle\"\n >\n <sv-ng-string [model]=\"page.locNavigationTitle\"></sv-ng-string>\n </div>\n <div *ngIf=\"canShowItemTitles\"\n [class]=\"survey.css.progressButtonsPageDescription\"\n [title]=\"page.locNavigationDescription.renderedHtml\"\n >\n {{ page.locNavigationDescription.renderedHtml }}\n </div>\n <div [class]=\"survey.css.progressButtonsButton\"><div [class]=\"survey.css.progressButtonsButtonBackground\"></div><div [class]=\"survey.css.progressButtonsButtonContent\"></div><span>{{model.getItemNumber(page)}}</span></div>\n </li>\n </ul>\n </div>\n <div\n [class]=\"model.getScrollButtonCss(hasScroller, false)\"\n (click)=\"clickScrollButton(false)\"\n role=\"button\"\n ></div>\n </div>\n <div *ngIf=\"canShowFooter\" [class]=\"survey.css.progressButtonsFooter\">\n <div [class]=\"survey.css.progressButtonsPageTitle\" [title]=\"model.footerText\">{{ model.footerText }}</div>\n </div>\n</div>", components: [{ type: i1.SurveyStringComponent, selector: "sv-ng-string, '[sv-ng-string]'", inputs: ["model"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ProgressButtonsComponent, decorators: [{ type: Component, args: [{ selector: "sv-ng-progress-buttons", templateUrl: "./progress.component.html" }] }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { model: [{ type: Input }], survey: [{ type: Input }], container: [{ type: Input }], progressButtonsListContainer: [{ type: ViewChild, args: ["progressButtonsListContainer"] }] } }); AngularComponentFactory.Instance.registerComponent("sv-progress-buttons", ProgressButtonsComponent); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3Jlc3MuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvcHJvZ3Jlc3MvYnV0dG9ucy9wcm9ncmVzcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9wcm9ncmVzcy9idXR0b25zL3Byb2dyZXNzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBb0MsU0FBUyxFQUFjLEtBQUssRUFBK0MsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZKLE9BQU8sRUFBZ0Msa0NBQWtDLEVBQTZCLE1BQU0sYUFBYSxDQUFDO0FBQzFILE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDOzs7O0FBTXJFLE1BQU0sT0FBTyx3QkFBd0I7SUFVbkMsWUFBb0IsaUJBQW9DO1FBQXBDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFMakQsZ0JBQVcsR0FBWSxLQUFLLENBQUM7UUFDN0Isa0JBQWEsR0FBWSxLQUFLLENBQUM7UUFDL0Isa0JBQWEsR0FBWSxLQUFLLENBQUM7UUFDL0Isc0JBQWlCLEdBQVksSUFBSSxDQUFDO0lBR3pDLENBQUM7SUFDRCxRQUFRLENBQUMsaUJBQTBCO1FBQ2pDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxpQkFBaUIsQ0FBQztRQUMzQyxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDO1FBQzdDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN6QyxDQUFDO0lBQ0QsZ0JBQWdCLENBQUMsV0FBb0I7UUFDbkMsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7UUFDL0IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3pDLENBQUM7SUFDRCxnQkFBZ0I7UUFDZCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUM7UUFDbkQsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDO1FBQ2hELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN6QyxDQUFDO0lBQ0QsUUFBUTtJQUNSLENBQUM7SUFDRCxXQUFXLENBQUMsT0FBc0I7SUFDbEMsQ0FBQztJQUNNLGlCQUFpQixDQUN0QixZQUFxQjtRQUVyQixJQUFJLElBQUksQ0FBQyw0QkFBNEIsRUFBRTtZQUNyQyxJQUFJLENBQUMsNEJBQTRCLENBQUMsYUFBYSxDQUFDLFVBQVUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztTQUM1RjtJQUNILENBQUM7SUFDTSxlQUFlOztRQUNwQixJQUFJLENBQUMsQ0FBQyxDQUFBLE1BQUEsSUFBSSxDQUFDLDRCQUE0QiwwQ0FBRSxhQUFhLENBQUEsRUFBRTtZQUN0RCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsNEJBQTRCLENBQUMsYUFBYSxDQUFDO1lBQ2hFLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxrQ0FBa0MsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztTQUN0RjtJQUNILENBQUM7SUFDTSxXQUFXOztRQUNoQixNQUFBLElBQUksQ0FBQyxXQUFXLDBDQUFFLE9BQU8sRUFBRSxDQUFDO0lBQzlCLENBQUM7O3NIQTdDVSx3QkFBd0I7MEdBQXhCLHdCQUF3Qix1U0NSckMsbXlFQThDTTs0RkR0Q08sd0JBQXdCO2tCQUpwQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSx3QkFBd0I7b0JBQ2xDLFdBQVcsRUFBRSwyQkFBMkI7aUJBQ3pDO3dHQUVVLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDcUMsNEJBQTRCO3NCQUF0RSxTQUFTO3VCQUFDLDhCQUE4Qjs7QUEyQzNDLHVCQUF1QixDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxxQkFBcUIsRUFBRSx3QkFBd0IsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5wdXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBPbkluaXQsIFNpbXBsZUNoYW5nZXMsIFZpZXdDaGlsZCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlNb2RlbCwgUHJvZ3Jlc3NCdXR0b25zLCBQcm9ncmVzc0J1dHRvbnNSZXNwb25zaXZpdHlNYW5hZ2VyLCBJUHJvZ3Jlc3NCdXR0b25zVmlld01vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBBbmd1bGFyQ29tcG9uZW50RmFjdG9yeSB9IGZyb20gXCIuLi8uLi8uLi9jb21wb25lbnQtZmFjdG9yeVwiO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwic3YtbmctcHJvZ3Jlc3MtYnV0dG9uc1wiLFxuICB0ZW1wbGF0ZVVybDogXCIuL3Byb2dyZXNzLmNvbXBvbmVudC5odG1sXCJcbn0pXG5leHBvcnQgY2xhc3MgUHJvZ3Jlc3NCdXR0b25zQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95LCBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMsIE9uSW5pdCwgSVByb2dyZXNzQnV0dG9uc1ZpZXdNb2RlbCB7XG4gIEBJbnB1dCgpIG1vZGVsITogUHJvZ3Jlc3NCdXR0b25zO1xuICBASW5wdXQoKSBzdXJ2ZXkhOiBTdXJ2ZXlNb2RlbDtcbiAgQElucHV0KCkgY29udGFpbmVyITogc3RyaW5nO1xuICBAVmlld0NoaWxkKFwicHJvZ3Jlc3NCdXR0b25zTGlzdENvbnRhaW5lclwiKSBwcm9ncmVzc0J1dHRvbnNMaXN0Q29udGFpbmVyITogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG4gIHB1YmxpYyBoYXNTY3JvbGxlcjogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgY2FuU2hvd0hlYWRlcjogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgY2FuU2hvd0Zvb3RlcjogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgY2FuU2hvd0l0ZW1UaXRsZXM6IGJvb2xlYW4gPSB0cnVlO1xuICBwcml2YXRlIHJlc3BNYW5hZ2VyPzogUHJvZ3Jlc3NCdXR0b25zUmVzcG9uc2l2aXR5TWFuYWdlcjtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcbiAgfVxuICBvblJlc2l6ZShjYW5TaG93SXRlbVRpdGxlczogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuY2FuU2hvd0l0ZW1UaXRsZXMgPSBjYW5TaG93SXRlbVRpdGxlcztcbiAgICB0aGlzLmNhblNob3dIZWFkZXIgPSAhdGhpcy5jYW5TaG93SXRlbVRpdGxlcztcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuICBvblVwZGF0ZVNjcm9sbGVyKGhhc1Njcm9sbGVyOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5oYXNTY3JvbGxlciA9IGhhc1Njcm9sbGVyO1xuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG4gIG9uVXBkYXRlU2V0dGluZ3MoKTogdm9pZCB7XG4gICAgdGhpcy5jYW5TaG93SXRlbVRpdGxlcyA9IHRoaXMubW9kZWwuc2hvd0l0ZW1UaXRsZXM7XG4gICAgdGhpcy5jYW5TaG93Rm9vdGVyID0gIXRoaXMubW9kZWwuc2hvd0l0ZW1UaXRsZXM7XG4gICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gIH1cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICB9XG4gIHB1YmxpYyBjbGlja1Njcm9sbEJ1dHRvbihcbiAgICBpc0xlZnRTY3JvbGw6IGJvb2xlYW5cbiAgKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucHJvZ3Jlc3NCdXR0b25zTGlzdENvbnRhaW5lcikge1xuICAgICAgdGhpcy5wcm9ncmVzc0J1dHRvbnNMaXN0Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdCArPSAoaXNMZWZ0U2Nyb2xsID8gLTEgOiAxKSAqIDcwO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIGlmICghIXRoaXMucHJvZ3Jlc3NCdXR0b25zTGlzdENvbnRhaW5lcj8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMucHJvZ3Jlc3NCdXR0b25zTGlzdENvbnRhaW5lci5uYXRpdmVFbGVtZW50O1xuICAgICAgdGhpcy5yZXNwTWFuYWdlciA9IG5ldyBQcm9ncmVzc0J1dHRvbnNSZXNwb25zaXZpdHlNYW5hZ2VyKHRoaXMubW9kZWwsIGVsZW1lbnQsIHRoaXMpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5yZXNwTWFuYWdlcj8uZGlzcG9zZSgpO1xuICB9XG59XG5Bbmd1bGFyQ29tcG9uZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckNvbXBvbmVudChcInN2LXByb2dyZXNzLWJ1dHRvbnNcIiwgUHJvZ3Jlc3NCdXR0b25zQ29tcG9uZW50KTtcbiIsIjxkaXYgW2NsYXNzXT1cIm1vZGVsLmdldFJvb3RDc3MoY29udGFpbmVyKVwiIFtzdHlsZS5tYXhXaWR0aF09XCJtb2RlbC5wcm9ncmVzc1dpZHRoXCIgXG5yb2xlPVwicHJvZ3Jlc3NiYXJcIiBhcmlhLXZhbHVlbWluPVwiMFwiIGFyaWEtdmFsdWVtYXg9XCIxMDBcIiBbYXR0ci5hcmlhLWxhYmVsXT1cIm1vZGVsLnByb2dyZXNzQmFyQXJpYUxhYmVsXCJcbj5cbiAgPGRpdiAqbmdJZj1cImNhblNob3dIZWFkZXJcIiBbY2xhc3NdPVwic3VydmV5LmNzcy5wcm9ncmVzc0J1dHRvbnNIZWFkZXJcIj5cbiAgICA8ZGl2IFtjbGFzc109XCJzdXJ2ZXkuY3NzLnByb2dyZXNzQnV0dG9uc1BhZ2VUaXRsZVwiIFt0aXRsZV09XCJtb2RlbC5oZWFkZXJUZXh0XCI+e3sgbW9kZWwuaGVhZGVyVGV4dCB9fTwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBbY2xhc3NdPVwic3VydmV5LmNzcy5wcm9ncmVzc0J1dHRvbnNDb250YWluZXJcIj5cbiAgICA8ZGl2XG4gICAgICBbY2xhc3NdPVwibW9kZWwuZ2V0U2Nyb2xsQnV0dG9uQ3NzKGhhc1Njcm9sbGVyLCB0cnVlKVwiXG4gICAgICAoY2xpY2spPVwiY2xpY2tTY3JvbGxCdXR0b24odHJ1ZSlcIlxuICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgPjwvZGl2PlxuICAgIDxkaXZcbiAgICAgIFtjbGFzc109XCJzdXJ2ZXkuY3NzLnByb2dyZXNzQnV0dG9uc0xpc3RDb250YWluZXJcIiAjcHJvZ3Jlc3NCdXR0b25zTGlzdENvbnRhaW5lcj5cbiAgICAgIDx1bCBbY2xhc3NdPVwic3VydmV5LmNzcy5wcm9ncmVzc0J1dHRvbnNMaXN0XCI+XG4gICAgICAgIDxsaVxuICAgICAgICAgICpuZ0Zvcj1cImxldCBwYWdlIG9mIHN1cnZleS52aXNpYmxlUGFnZXM7IGluZGV4IGFzIGluZGV4XCJcbiAgICAgICAgICBbY2xhc3NdPVwibW9kZWwuZ2V0TGlzdEVsZW1lbnRDc3MoaW5kZXgpXCJcbiAgICAgICAgICAoY2xpY2spPVwibW9kZWwuaXNMaXN0RWxlbWVudENsaWNrYWJsZShpbmRleCkgPyBtb2RlbC5jbGlja0xpc3RFbGVtZW50KHBhZ2UpIDogbnVsbFwiXG4gICAgICAgICAgW2F0dHIuZGF0YS1wYWdlLW51bWJlcl09XCJtb2RlbC5nZXRJdGVtTnVtYmVyKHBhZ2UpXCI+XG4gICAgICAgICAgPGRpdiBbY2xhc3NdPVwic3VydmV5LmNzcy5wcm9ncmVzc0J1dHRvbnNDb25uZWN0b3JcIj48L2Rpdj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiY2FuU2hvd0l0ZW1UaXRsZXNcIlxuICAgICAgICAgICAgW2NsYXNzXT1cInN1cnZleS5jc3MucHJvZ3Jlc3NCdXR0b25zUGFnZVRpdGxlXCJcbiAgICAgICAgICAgIFt0aXRsZV09XCJwYWdlLnJlbmRlcmVkTmF2aWdhdGlvblRpdGxlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3Ytbmctc3RyaW5nIFttb2RlbF09XCJwYWdlLmxvY05hdmlnYXRpb25UaXRsZVwiPjwvc3Ytbmctc3RyaW5nPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJjYW5TaG93SXRlbVRpdGxlc1wiXG4gICAgICAgICAgICBbY2xhc3NdPVwic3VydmV5LmNzcy5wcm9ncmVzc0J1dHRvbnNQYWdlRGVzY3JpcHRpb25cIlxuICAgICAgICAgICAgW3RpdGxlXT1cInBhZ2UubG9jTmF2aWdhdGlvbkRlc2NyaXB0aW9uLnJlbmRlcmVkSHRtbFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgcGFnZS5sb2NOYXZpZ2F0aW9uRGVzY3JpcHRpb24ucmVuZGVyZWRIdG1sIH19XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBbY2xhc3NdPVwic3VydmV5LmNzcy5wcm9ncmVzc0J1dHRvbnNCdXR0b25cIj48ZGl2IFtjbGFzc109XCJzdXJ2ZXkuY3NzLnByb2dyZXNzQnV0dG9uc0J1dHRvbkJhY2tncm91bmRcIj48L2Rpdj48ZGl2IFtjbGFzc109XCJzdXJ2ZXkuY3NzLnByb2dyZXNzQnV0dG9uc0J1dHRvbkNvbnRlbnRcIj48L2Rpdj48c3Bhbj57e21vZGVsLmdldEl0ZW1OdW1iZXIocGFnZSl9fTwvc3Bhbj48L2Rpdj5cbiAgICAgICAgPC9saT5cbiAgICAgIDwvdWw+XG4gICAgPC9kaXY+XG4gICAgPGRpdlxuICAgICAgW2NsYXNzXT1cIm1vZGVsLmdldFNjcm9sbEJ1dHRvbkNzcyhoYXNTY3JvbGxlciwgZmFsc2UpXCJcbiAgICAgIChjbGljayk9XCJjbGlja1Njcm9sbEJ1dHRvbihmYWxzZSlcIlxuICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgPjwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiAqbmdJZj1cImNhblNob3dGb290ZXJcIiBbY2xhc3NdPVwic3VydmV5LmNzcy5wcm9ncmVzc0J1dHRvbnNGb290ZXJcIj5cbiAgICA8ZGl2IFtjbGFzc109XCJzdXJ2ZXkuY3NzLnByb2dyZXNzQnV0dG9uc1BhZ2VUaXRsZVwiIFt0aXRsZV09XCJtb2RlbC5mb290ZXJUZXh0XCI+e3sgbW9kZWwuZm9vdGVyVGV4dCB9fTwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PiJdfQ==