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.
74 lines • 19.1 kB
JavaScript
import { Component, Input, ViewChild } from "@angular/core";
import { Helpers } from "survey-core";
import { BaseAngular } from "../../base-angular";
import * as i0 from "@angular/core";
import * as i1 from "../../survey-string.component";
import * as i2 from "../svg-icon/svg-icon.component";
import * as i3 from "../popup/popup.component";
import * as i4 from "@angular/common";
import * as i5 from "../../utils/dynamic.directive";
import * as i6 from "@angular/forms";
import * as i7 from "../../utils/ng-show.directive";
export class DropdownComponent extends BaseAngular {
get dropdownModel() {
var _a;
return (_a = this.model) === null || _a === void 0 ? void 0 : _a.dropdownListModel;
}
getModel() {
return this.model.dropdownListModel;
}
ngOnInit() {
super.ngOnInit();
}
click(event) {
var _a;
(_a = this.dropdownModel) === null || _a === void 0 ? void 0 : _a.onClick(event);
}
chevronPointerDown(event) {
var _a;
(_a = this.dropdownModel) === null || _a === void 0 ? void 0 : _a.chevronPointerDown(event);
}
clear(event) {
var _a;
(_a = this.dropdownModel) === null || _a === void 0 ? void 0 : _a.onClear(event);
}
keyhandler(event) {
var _a;
(_a = this.dropdownModel) === null || _a === void 0 ? void 0 : _a.keyHandler(event);
}
blur(event) {
this.model.onBlur(event);
this.updateInputDomElement();
}
focus(event) {
this.model.onFocus(event);
}
inputChange(event) {
this.detectChanges();
}
updateInputDomElement() {
var _a;
if (!!((_a = this.inputElementRef) === null || _a === void 0 ? void 0 : _a.nativeElement)) {
const control = this.inputElementRef.nativeElement;
const newValue = this.model.inputStringRendered;
if (!Helpers.isTwoValueEquals(newValue, control.value, false, true, false)) {
control.value = this.model.inputStringRendered || "";
}
}
}
}
DropdownComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: DropdownComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
DropdownComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: DropdownComponent, selector: "sv-ng-dropdown, '[sv-ng-dropdown]'", inputs: { model: "model" }, viewQueries: [{ propertyName: "inputElementRef", first: true, predicate: ["inputElement"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div [class]=\"model.cssClasses.selectWrapper\" (click)=\"click($event)\">\n <div *ngIf=\"!model.isReadOnly\" [attr.tabindex]=\"dropdownModel.noTabIndex ? null : 0\" [class]=\"model.getControlClass()\"\n [attr.disabled]=\"model.isDisabledAttr ? true : null\" (blur)=\"blur($event)\"\n (keydown)=\"keyhandler($event)\" [attr.id]=\"model.inputId\" [attr.aria-required]=\"model.ariaRequired\"\n [attr.aria-labelledby]=\"model.ariaLabelledBy\"\n [attr.aria-label]=\"model.ariaLabel\" [attr.aria-invalid]=\"model.ariaInvalid\"\n [attr.aria-errormessage]=\"model.ariaErrormessage\" [attr.role]=\"model.ariaRole\"\n [attr.aria-controls]=\"dropdownModel.listElementId\"\n [attr.aria-expanded]=\"model.ariaExpanded\"\n [attr.aria-activedescendant]=\"dropdownModel.ariaActivedescendant\">\n <div *ngIf=\"dropdownModel.showHintPrefix\" [class]=\"model.cssClasses.hintPrefix\">\n <span>{{ dropdownModel.hintStringPrefix }}</span>\n </div>\n <div [class]=\"model.cssClasses.controlValue\">\n <div *ngIf=\"dropdownModel.showHintString\" [class]=\"model.cssClasses.hintSuffix\">\n <span style=\"visibility: hidden\">{{ dropdownModel.inputStringRendered }}</span>\n <span>{{ dropdownModel.hintStringSuffix }}</span>\n </div>\n <ng-container *ngIf=\"dropdownModel.showInputFieldComponent\">\n <ng-template [component]=\"{ name: model.inputFieldComponentName, data: { model: dropdownModel.getSelectedAction(), question: model } }\"></ng-template>\n </ng-container>\n <sv-ng-string *ngIf=\"model.showSelectedItemLocText\" [model]=\"model.selectedItemLocText\"></sv-ng-string>\n <input #inputElement type=\"text\" autocomplete=\"off\" [(ngModel)]=\"dropdownModel.inputStringRendered\" [class]=\"model.cssClasses.filterStringInput\"\n [attr.role]=\"dropdownModel.filterStringEnabled ? model.ariaRole : null\"\n [attr.id]=\"model.getInputId()\"\n [attr.inputmode]=\"dropdownModel.inputMode\"\n [attr.tabindex]=\"dropdownModel.noTabIndex ? null : -1\"\n [attr.disabled]=\"model.isDisabledAttr ? true : null\"\n [attr.aria-controls]=\"dropdownModel.listElementId\"\n [attr.aria-label]=\"model.a11y_input_ariaLabel\"\n [attr.aria-labelledby]=\"model.a11y_input_ariaLabelledBy\"\n [attr.aria-describedby]=\"model.a11y_input_ariaDescribedBy\"\n [attr.aria-expanded]=\"model.ariaExpanded\"\n [attr.aria-activedescendant]=\"dropdownModel.ariaActivedescendant\"\n [attr.placeholder]=\"dropdownModel.placeholderRendered\" \n [attr.readonly]=\"dropdownModel.filterReadOnly ? true : null\" \n (change)=\"inputChange($event)\" (blur)=\"blur($event)\" (focus)=\"focus($event)\"/>\n </div>\n <div *ngIf=\"(model.allowClear && model.cssClasses.cleanButtonIconId)\" aria-hidden=\"true\"\n [class]=\"model.cssClasses.cleanButton\" (click)=\"clear($event)\" [visible]=\"model.showClearButton\">\n <svg [iconName]=\"model.cssClasses.cleanButtonIconId\" [partCss]=\"model.cssClasses.cleanButtonSvg\" [title]=\"model.clearCaption\"\n [size]=\"'auto'\" sv-ng-svg-icon></svg>\n </div>\n </div>\n <sv-ng-popup *ngIf=\"!model.isReadOnly\" [popupModel]=\"dropdownModel.popupModel\"></sv-ng-popup>\n <div *ngIf=\"model.isReadOnly\" [class]=\"model.getControlClass()\" [attr.id]=\"model.inputId\" \n [attr.tabindex]=\"model.isDisabledAttr ? null : 0\"\n [attr.disabled]=\"model.isDisabledAttr ? true : null\"\n [attr.aria-label]=\"model.a11y_input_ariaLabel\"\n [attr.aria-labelledby]=\"model.a11y_input_ariaLabelledBy\"\n [attr.aria-describedby]=\"model.a11y_input_ariaDescribedBy\">\n <sv-ng-string *ngIf=\"model.selectedItemLocText\" [model]=\"model.selectedItemLocText\"></sv-ng-string>\n <div>{{ model.readOnlyText }}</div>\n </div>\n <div *ngIf=\"model.cssClasses.chevronButtonIconId\" [class]=\"model.cssClasses.chevronButton\" (pointerdown)=\"chevronPointerDown($event)\" aria-hidden=\"true\">\n <svg [iconName]=\"model.cssClasses.chevronButtonIconId\" [partCss]=\"model.cssClasses.chevronButtonSvg\" [size]=\"'auto'\" sv-ng-svg-icon></svg>\n </div>\n</div>", components: [{ type: i1.SurveyStringComponent, selector: "sv-ng-string, '[sv-ng-string]'", inputs: ["model"] }, { type: i2.SvgIconComponent, selector: "'[sv-ng-svg-icon]'", inputs: ["size", "width", "height", "iconName", "partCss", "css", "title"] }, { type: i3.PopupComponent, selector: "sv-ng-popup, '[sv-ng-popup]'", inputs: ["popupModel"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5.DynamicComponentDirective, selector: "[component]", inputs: ["component"] }, { type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i7.VisibleDirective, selector: "[visible]", inputs: ["visible"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: DropdownComponent, decorators: [{
type: Component,
args: [{
selector: "sv-ng-dropdown, '[sv-ng-dropdown]'",
templateUrl: "./dropdown.component.html"
}]
}], propDecorators: { model: [{
type: Input
}], inputElementRef: [{
type: ViewChild,
args: ["inputElement"]
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvZHJvcGRvd24vZHJvcGRvd24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvZHJvcGRvd24vZHJvcGRvd24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYyxLQUFLLEVBQVUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hGLE9BQU8sRUFBcUIsT0FBTyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3pELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7Ozs7Ozs7O0FBTWpELE1BQU0sT0FBTyxpQkFBa0IsU0FBUSxXQUFXO0lBR2hELElBQUksYUFBYTs7UUFDZixPQUFPLE1BQUEsSUFBSSxDQUFDLEtBQUssMENBQUUsaUJBQWlCLENBQUM7SUFDdkMsQ0FBQztJQUNTLFFBQVE7UUFDaEIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDO0lBQ3RDLENBQUM7SUFFUSxRQUFRO1FBQ2YsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ25CLENBQUM7SUFFRCxLQUFLLENBQUMsS0FBVTs7UUFDZCxNQUFBLElBQUksQ0FBQyxhQUFhLDBDQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBQ0Qsa0JBQWtCLENBQUMsS0FBVTs7UUFDM0IsTUFBQSxJQUFJLENBQUMsYUFBYSwwQ0FBRSxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBQ0QsS0FBSyxDQUFDLEtBQVU7O1FBQ2QsTUFBQSxJQUFJLENBQUMsYUFBYSwwQ0FBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUNELFVBQVUsQ0FBQyxLQUFVOztRQUNuQixNQUFBLElBQUksQ0FBQyxhQUFhLDBDQUFFLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBQ0QsSUFBSSxDQUFDLEtBQVU7UUFDYixJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QixJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBQ0QsS0FBSyxDQUFDLEtBQVU7UUFDZCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBQ0QsV0FBVyxDQUFDLEtBQVU7UUFDcEIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFDRCxxQkFBcUI7O1FBQ25CLElBQUksQ0FBQyxDQUFDLENBQUEsTUFBQSxJQUFJLENBQUMsZUFBZSwwQ0FBRSxhQUFhLENBQUEsRUFBRTtZQUN6QyxNQUFNLE9BQU8sR0FBUSxJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FBQztZQUN4RCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDO1lBQ2hELElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRTtnQkFDMUUsT0FBTyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLG1CQUFtQixJQUFJLEVBQUUsQ0FBQzthQUN0RDtTQUNGO0lBQ0gsQ0FBQzs7K0dBNUNVLGlCQUFpQjttR0FBakIsaUJBQWlCLDhPQ1I5QixpeUlBeURNOzRGRGpETyxpQkFBaUI7a0JBSjdCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLG9DQUFvQztvQkFDOUMsV0FBVyxFQUFFLDJCQUEyQjtpQkFDekM7OEJBRVUsS0FBSztzQkFBYixLQUFLO2dCQUNxQixlQUFlO3NCQUF6QyxTQUFTO3VCQUFDLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIElucHV0LCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBEcm9wZG93bkxpc3RNb2RlbCwgSGVscGVycyB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgQmFzZUFuZ3VsYXIgfSBmcm9tIFwiLi4vLi4vYmFzZS1hbmd1bGFyXCI7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJzdi1uZy1kcm9wZG93biwgJ1tzdi1uZy1kcm9wZG93bl0nXCIsXG4gIHRlbXBsYXRlVXJsOiBcIi4vZHJvcGRvd24uY29tcG9uZW50Lmh0bWxcIlxufSlcbmV4cG9ydCBjbGFzcyBEcm9wZG93bkNvbXBvbmVudCBleHRlbmRzIEJhc2VBbmd1bGFyIGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgbW9kZWw6IGFueTtcbiAgQFZpZXdDaGlsZChcImlucHV0RWxlbWVudFwiKSBpbnB1dEVsZW1lbnRSZWYhOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcbiAgZ2V0IGRyb3Bkb3duTW9kZWwoKTogRHJvcGRvd25MaXN0TW9kZWwge1xuICAgIHJldHVybiB0aGlzLm1vZGVsPy5kcm9wZG93bkxpc3RNb2RlbDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0TW9kZWwoKSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWwuZHJvcGRvd25MaXN0TW9kZWw7XG4gIH1cblxuICBvdmVycmlkZSBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBzdXBlci5uZ09uSW5pdCgpO1xuICB9XG5cbiAgY2xpY2soZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuZHJvcGRvd25Nb2RlbD8ub25DbGljayhldmVudCk7XG4gIH1cbiAgY2hldnJvblBvaW50ZXJEb3duKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLmRyb3Bkb3duTW9kZWw/LmNoZXZyb25Qb2ludGVyRG93bihldmVudCk7XG4gIH1cbiAgY2xlYXIoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuZHJvcGRvd25Nb2RlbD8ub25DbGVhcihldmVudCk7XG4gIH1cbiAga2V5aGFuZGxlcihldmVudDogYW55KSB7XG4gICAgdGhpcy5kcm9wZG93bk1vZGVsPy5rZXlIYW5kbGVyKGV2ZW50KTtcbiAgfVxuICBibHVyKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLm1vZGVsLm9uQmx1cihldmVudCk7XG4gICAgdGhpcy51cGRhdGVJbnB1dERvbUVsZW1lbnQoKTtcbiAgfVxuICBmb2N1cyhldmVudDogYW55KSB7XG4gICAgdGhpcy5tb2RlbC5vbkZvY3VzKGV2ZW50KTtcbiAgfVxuICBpbnB1dENoYW5nZShldmVudDogYW55KSB7XG4gICAgdGhpcy5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cbiAgdXBkYXRlSW5wdXREb21FbGVtZW50KCkge1xuICAgIGlmICghIXRoaXMuaW5wdXRFbGVtZW50UmVmPy5uYXRpdmVFbGVtZW50KSB7XG4gICAgICBjb25zdCBjb250cm9sOiBhbnkgPSB0aGlzLmlucHV0RWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgICAgY29uc3QgbmV3VmFsdWUgPSB0aGlzLm1vZGVsLmlucHV0U3RyaW5nUmVuZGVyZWQ7XG4gICAgICBpZiAoIUhlbHBlcnMuaXNUd29WYWx1ZUVxdWFscyhuZXdWYWx1ZSwgY29udHJvbC52YWx1ZSwgZmFsc2UsIHRydWUsIGZhbHNlKSkge1xuICAgICAgICBjb250cm9sLnZhbHVlID0gdGhpcy5tb2RlbC5pbnB1dFN0cmluZ1JlbmRlcmVkIHx8IFwiXCI7XG4gICAgICB9XG4gICAgfVxuICB9XG59IiwiPGRpdiBbY2xhc3NdPVwibW9kZWwuY3NzQ2xhc3Nlcy5zZWxlY3RXcmFwcGVyXCIgKGNsaWNrKT1cImNsaWNrKCRldmVudClcIj5cbiAgICA8ZGl2ICpuZ0lmPVwiIW1vZGVsLmlzUmVhZE9ubHlcIiBbYXR0ci50YWJpbmRleF09XCJkcm9wZG93bk1vZGVsLm5vVGFiSW5kZXggPyBudWxsIDogMFwiIFtjbGFzc109XCJtb2RlbC5nZXRDb250cm9sQ2xhc3MoKVwiXG4gICAgICAgIFthdHRyLmRpc2FibGVkXT1cIm1vZGVsLmlzRGlzYWJsZWRBdHRyID8gdHJ1ZSA6IG51bGxcIiAoYmx1cik9XCJibHVyKCRldmVudClcIlxuICAgICAgICAoa2V5ZG93bik9XCJrZXloYW5kbGVyKCRldmVudClcIiBbYXR0ci5pZF09XCJtb2RlbC5pbnB1dElkXCIgW2F0dHIuYXJpYS1yZXF1aXJlZF09XCJtb2RlbC5hcmlhUmVxdWlyZWRcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwibW9kZWwuYXJpYUxhYmVsbGVkQnlcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIm1vZGVsLmFyaWFMYWJlbFwiIFthdHRyLmFyaWEtaW52YWxpZF09XCJtb2RlbC5hcmlhSW52YWxpZFwiXG4gICAgICAgIFthdHRyLmFyaWEtZXJyb3JtZXNzYWdlXT1cIm1vZGVsLmFyaWFFcnJvcm1lc3NhZ2VcIiBbYXR0ci5yb2xlXT1cIm1vZGVsLmFyaWFSb2xlXCJcbiAgICAgICAgW2F0dHIuYXJpYS1jb250cm9sc109XCJkcm9wZG93bk1vZGVsLmxpc3RFbGVtZW50SWRcIlxuICAgICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cIm1vZGVsLmFyaWFFeHBhbmRlZFwiXG4gICAgICAgIFthdHRyLmFyaWEtYWN0aXZlZGVzY2VuZGFudF09XCJkcm9wZG93bk1vZGVsLmFyaWFBY3RpdmVkZXNjZW5kYW50XCI+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJkcm9wZG93bk1vZGVsLnNob3dIaW50UHJlZml4XCIgW2NsYXNzXT1cIm1vZGVsLmNzc0NsYXNzZXMuaGludFByZWZpeFwiPlxuICAgICAgICAgICAgPHNwYW4+e3sgZHJvcGRvd25Nb2RlbC5oaW50U3RyaW5nUHJlZml4IH19PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBbY2xhc3NdPVwibW9kZWwuY3NzQ2xhc3Nlcy5jb250cm9sVmFsdWVcIj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJkcm9wZG93bk1vZGVsLnNob3dIaW50U3RyaW5nXCIgW2NsYXNzXT1cIm1vZGVsLmNzc0NsYXNzZXMuaGludFN1ZmZpeFwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPVwidmlzaWJpbGl0eTogaGlkZGVuXCI+e3sgZHJvcGRvd25Nb2RlbC5pbnB1dFN0cmluZ1JlbmRlcmVkIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IGRyb3Bkb3duTW9kZWwuaGludFN0cmluZ1N1ZmZpeCB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRyb3Bkb3duTW9kZWwuc2hvd0lucHV0RmllbGRDb21wb25lbnRcIj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW2NvbXBvbmVudF09XCJ7IG5hbWU6IG1vZGVsLmlucHV0RmllbGRDb21wb25lbnROYW1lLCBkYXRhOiB7IG1vZGVsOiBkcm9wZG93bk1vZGVsLmdldFNlbGVjdGVkQWN0aW9uKCksIHF1ZXN0aW9uOiBtb2RlbCB9IH1cIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8c3Ytbmctc3RyaW5nICpuZ0lmPVwibW9kZWwuc2hvd1NlbGVjdGVkSXRlbUxvY1RleHRcIiBbbW9kZWxdPVwibW9kZWwuc2VsZWN0ZWRJdGVtTG9jVGV4dFwiPjwvc3Ytbmctc3RyaW5nPlxuICAgICAgICAgICAgPGlucHV0ICNpbnB1dEVsZW1lbnQgdHlwZT1cInRleHRcIiBhdXRvY29tcGxldGU9XCJvZmZcIiBbKG5nTW9kZWwpXT1cImRyb3Bkb3duTW9kZWwuaW5wdXRTdHJpbmdSZW5kZXJlZFwiIFtjbGFzc109XCJtb2RlbC5jc3NDbGFzc2VzLmZpbHRlclN0cmluZ0lucHV0XCJcbiAgICAgICAgICAgIFthdHRyLnJvbGVdPVwiZHJvcGRvd25Nb2RlbC5maWx0ZXJTdHJpbmdFbmFibGVkID8gbW9kZWwuYXJpYVJvbGUgOiBudWxsXCJcbiAgICAgICAgICAgIFthdHRyLmlkXT1cIm1vZGVsLmdldElucHV0SWQoKVwiXG4gICAgICAgICAgICBbYXR0ci5pbnB1dG1vZGVdPVwiZHJvcGRvd25Nb2RlbC5pbnB1dE1vZGVcIlxuICAgICAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiZHJvcGRvd25Nb2RlbC5ub1RhYkluZGV4ID8gbnVsbCA6IC0xXCJcbiAgICAgICAgICAgIFthdHRyLmRpc2FibGVkXT1cIm1vZGVsLmlzRGlzYWJsZWRBdHRyID8gdHJ1ZSA6IG51bGxcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1jb250cm9sc109XCJkcm9wZG93bk1vZGVsLmxpc3RFbGVtZW50SWRcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJtb2RlbC5hMTF5X2lucHV0X2FyaWFMYWJlbFwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwibW9kZWwuYTExeV9pbnB1dF9hcmlhTGFiZWxsZWRCeVwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XT1cIm1vZGVsLmExMXlfaW5wdXRfYXJpYURlc2NyaWJlZEJ5XCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwibW9kZWwuYXJpYUV4cGFuZGVkXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtYWN0aXZlZGVzY2VuZGFudF09XCJkcm9wZG93bk1vZGVsLmFyaWFBY3RpdmVkZXNjZW5kYW50XCJcbiAgICAgICAgICAgIFthdHRyLnBsYWNlaG9sZGVyXT1cImRyb3Bkb3duTW9kZWwucGxhY2Vob2xkZXJSZW5kZXJlZFwiIFxuICAgICAgICAgICAgW2F0dHIucmVhZG9ubHldPVwiZHJvcGRvd25Nb2RlbC5maWx0ZXJSZWFkT25seSA/IHRydWUgOiBudWxsXCIgXG4gICAgICAgICAgICAoY2hhbmdlKT1cImlucHV0Q2hhbmdlKCRldmVudClcIiAoYmx1cik9XCJibHVyKCRldmVudClcIiAoZm9jdXMpPVwiZm9jdXMoJGV2ZW50KVwiLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9XCIobW9kZWwuYWxsb3dDbGVhciAmJiBtb2RlbC5jc3NDbGFzc2VzLmNsZWFuQnV0dG9uSWNvbklkKVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgICAgICBbY2xhc3NdPVwibW9kZWwuY3NzQ2xhc3Nlcy5jbGVhbkJ1dHRvblwiIChjbGljayk9XCJjbGVhcigkZXZlbnQpXCIgW3Zpc2libGVdPVwibW9kZWwuc2hvd0NsZWFyQnV0dG9uXCI+XG4gICAgICAgICAgICA8c3ZnIFtpY29uTmFtZV09XCJtb2RlbC5jc3NDbGFzc2VzLmNsZWFuQnV0dG9uSWNvbklkXCIgW3BhcnRDc3NdPVwibW9kZWwuY3NzQ2xhc3Nlcy5jbGVhbkJ1dHRvblN2Z1wiIFt0aXRsZV09XCJtb2RlbC5jbGVhckNhcHRpb25cIlxuICAgICAgICAgICAgICAgIFtzaXplXT1cIidhdXRvJ1wiIHN2LW5nLXN2Zy1pY29uPjwvc3ZnPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8c3YtbmctcG9wdXAgKm5nSWY9XCIhbW9kZWwuaXNSZWFkT25seVwiIFtwb3B1cE1vZGVsXT1cImRyb3Bkb3duTW9kZWwucG9wdXBNb2RlbFwiPjwvc3YtbmctcG9wdXA+XG4gICAgPGRpdiAqbmdJZj1cIm1vZGVsLmlzUmVhZE9ubHlcIiBbY2xhc3NdPVwibW9kZWwuZ2V0Q29udHJvbENsYXNzKClcIiBbYXR0ci5pZF09XCJtb2RlbC5pbnB1dElkXCIgXG4gICAgW2F0dHIudGFiaW5kZXhdPVwibW9kZWwuaXNEaXNhYmxlZEF0dHIgPyBudWxsIDogMFwiXG4gICAgW2F0dHIuZGlzYWJsZWRdPVwibW9kZWwuaXNEaXNhYmxlZEF0dHIgPyB0cnVlIDogbnVsbFwiXG4gICAgW2F0dHIuYXJpYS1sYWJlbF09XCJtb2RlbC5hMTF5X2lucHV0X2FyaWFMYWJlbFwiXG4gICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cIm1vZGVsLmExMXlfaW5wdXRfYXJpYUxhYmVsbGVkQnlcIlxuICAgIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwibW9kZWwuYTExeV9pbnB1dF9hcmlhRGVzY3JpYmVkQnlcIj5cbiAgICAgICAgPHN2LW5nLXN0cmluZyAqbmdJZj1cIm1vZGVsLnNlbGVjdGVkSXRlbUxvY1RleHRcIiBbbW9kZWxdPVwibW9kZWwuc2VsZWN0ZWRJdGVtTG9jVGV4dFwiPjwvc3Ytbmctc3RyaW5nPlxuICAgICAgICA8ZGl2Pnt7IG1vZGVsLnJlYWRPbmx5VGV4dCB9fTwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCJtb2RlbC5jc3NDbGFzc2VzLmNoZXZyb25CdXR0b25JY29uSWRcIiBbY2xhc3NdPVwibW9kZWwuY3NzQ2xhc3Nlcy5jaGV2cm9uQnV0dG9uXCIgKHBvaW50ZXJkb3duKT1cImNoZXZyb25Qb2ludGVyRG93bigkZXZlbnQpXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICAgIDxzdmcgW2ljb25OYW1lXT1cIm1vZGVsLmNzc0NsYXNzZXMuY2hldnJvbkJ1dHRvbkljb25JZFwiIFtwYXJ0Q3NzXT1cIm1vZGVsLmNzc0NsYXNzZXMuY2hldnJvbkJ1dHRvblN2Z1wiIFtzaXplXT1cIidhdXRvJ1wiIHN2LW5nLXN2Zy1pY29uPjwvc3ZnPlxuICAgIDwvZGl2PlxuPC9kaXY+Il19