@microsoft/windows-admin-center-sdk
Version:
Microsoft - Windows Admin Center Shell
147 lines • 20.1 kB
JavaScript
import { __decorate, __metadata } from "tslib";
import { Component, Injector } from '@angular/core';
import { LogLevel } from '@microsoft/windows-admin-center-sdk/core/diagnostics/log-level';
import { Logging } from '@microsoft/windows-admin-center-sdk/core/diagnostics/logging';
import { SmeSchemaProperty } from '../../../schema/schema-decorator';
import { SimplePropertySchemaFieldLoaderComponent } from '../../../schema/schema-field-host.component';
import { SchemaPrimitiveType } from '../../../schema/schema-models';
import { SmeInternalFormFieldComponent } from '../form-field.component';
import * as i0 from "@angular/core";
import * as i1 from "@angular/forms";
import * as i2 from "../form-field-accessor.directive";
import * as i3 from "../form-field-validator.directive";
import * as i4 from "../form-field-async-validator.directive";
import * as i5 from "../../validation-alert/validation-alert.component";
import * as i6 from "../../form-field-layout/form-field-layout.component";
const _c0 = ["type", "json"];
/* eslint-disable max-len */
/* eslint-enable max-len */
export class JsonFormFieldLoaderComponent extends SimplePropertySchemaFieldLoaderComponent {
}
/** @nocollapse */ JsonFormFieldLoaderComponent.ɵfac = /** @pureOrBreakMyCode */ function () { let ɵJsonFormFieldLoaderComponent_BaseFactory; return function JsonFormFieldLoaderComponent_Factory(t) { return (ɵJsonFormFieldLoaderComponent_BaseFactory || (ɵJsonFormFieldLoaderComponent_BaseFactory = i0.ɵɵgetInheritedFactory(JsonFormFieldLoaderComponent)))(t || JsonFormFieldLoaderComponent); }; }();
/** @nocollapse */ JsonFormFieldLoaderComponent.ɵcmp = /** @pureOrBreakMyCode */ i0.ɵɵdefineComponent({ type: JsonFormFieldLoaderComponent, selectors: [["ng-component"]], features: [i0.ɵɵInheritDefinitionFeature], decls: 2, vars: 10, consts: [["type", "json", 3, "ngModel", "name", "label", "required", "description", "readonly", "disabled", "pendingMessage", "customAsyncValidateDisabled", "customAsyncValidateDebounceTime", "ngModelChange", "customValidate", "customAsyncValidate"], ["field", ""]], template: function JsonFormFieldLoaderComponent_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementStart(0, "sme-form-field", 0, 1);
i0.ɵɵlistener("ngModelChange", function JsonFormFieldLoaderComponent_Template_sme_form_field_ngModelChange_0_listener($event) { return ctx.data = $event; })("customValidate", function JsonFormFieldLoaderComponent_Template_sme_form_field_customValidate_0_listener($event) { return ctx.resolveFunction(ctx.propertySchema.customValidation)($event); })("customAsyncValidate", function JsonFormFieldLoaderComponent_Template_sme_form_field_customAsyncValidate_0_listener($event) { return ctx.propertySchema.customAsyncValidation && ctx.resolveFunction(ctx.propertySchema.customAsyncValidation.handler)($event); });
i0.ɵɵelementEnd();
} if (rf & 2) {
i0.ɵɵproperty("ngModel", ctx.data)("name", ctx.propertySchema.name)("label", ctx.localize(ctx.propertySchema.label))("required", ctx.propertySchema.required)("description", ctx.localize(ctx.propertySchema.description))("readonly", !!ctx.evalExpression(ctx.propertySchema.readonlyCondition))("disabled", !!(ctx.propertySchema.disabledCondition && ctx.evalExpression(ctx.propertySchema.disabledCondition)))("pendingMessage", ctx.propertySchema.customAsyncValidation && ctx.localize(ctx.propertySchema.customAsyncValidation.pendingMessage))("customAsyncValidateDisabled", ctx.shouldCustomAsyncValidationBeDisabled())("customAsyncValidateDebounceTime", ctx.propertySchema.customAsyncValidation && +ctx.propertySchema.customAsyncValidation.handler);
} }, dependencies: function () { return [i1.NgControlStatus, i1.RequiredValidator, i1.NgModel, JsonFormFieldComponent, i2.FormFieldAccessorDirective, i3.FormFieldValidatorDirective, i4.FormFieldAsyncValidatorDirective]; }, encapsulation: 2 });
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(JsonFormFieldLoaderComponent, [{
type: Component,
args: [{
template: `
<sme-form-field #field type="json" [(ngModel)]="data" [name]="propertySchema.name" [label]="localize(propertySchema.label)"
[required]="propertySchema.required" [description]="localize(propertySchema.description)"
[readonly]="!!evalExpression(propertySchema.readonlyCondition)"
[disabled]="!!(propertySchema.disabledCondition && evalExpression(propertySchema.disabledCondition))"
(customValidate)="resolveFunction(propertySchema.customValidation)($event)"
(customAsyncValidate)="propertySchema.customAsyncValidation && resolveFunction(propertySchema.customAsyncValidation.handler)($event)"
[pendingMessage]="propertySchema.customAsyncValidation && localize(propertySchema.customAsyncValidation.pendingMessage)"
[customAsyncValidateDisabled]="shouldCustomAsyncValidationBeDisabled()"
[customAsyncValidateDebounceTime]="propertySchema.customAsyncValidation && +propertySchema.customAsyncValidation.handler"
></sme-form-field>
`
}]
}], null, null); })();
/**
* Accessible json field implementation
*/
let JsonFormFieldComponent = class JsonFormFieldComponent extends SmeInternalFormFieldComponent {
/**
* Initializes a new instance of the JsonFormFieldComponent
*/
constructor(injector) {
super(injector);
}
/**
* The source name to use for logging
*/
get logSourceName() {
return 'JsonFormFieldComponent';
}
get jsonText() {
return this.internalJsonText;
}
set jsonText(value) {
this.internalJsonText = value;
try {
this.value = JSON.parse(value);
}
catch (e) {
// eslint-disable-next-line no-console
console.warn('JSON parse error.');
Logging.log({
level: LogLevel.Debug,
message: 'JSON parse error.',
source: 'JsonFormFieldComponent.jsonText.set'
});
}
}
onValueChanged(value) {
let formattedJsonText = '';
if (this.internalJsonText) {
try {
formattedJsonText = JSON.stringify(JSON.parse(this.internalJsonText), null, 4);
}
catch (e) {
Logging.log({
level: LogLevel.Debug,
message: 'JSON parse error.',
source: 'JsonFormFieldComponent.jsonText.set'
});
}
}
const newJsonText = JSON.stringify(value, null, 4);
if (value) {
if (formattedJsonText !== newJsonText) {
this.internalJsonText = JSON.stringify(value, null, 4);
}
}
}
/**
* Creates the idBag used by this component to store unique element ids.
* id values will be assigned be the @see BaseComponent super class.
*/
createIdBag() {
return {
detailsSpan: ''
};
}
};
/** @nocollapse */ JsonFormFieldComponent.ɵfac = function JsonFormFieldComponent_Factory(t) { return new (t || JsonFormFieldComponent)(i0.ɵɵdirectiveInject(i0.Injector)); };
/** @nocollapse */ JsonFormFieldComponent.ɵcmp = /** @pureOrBreakMyCode */ i0.ɵɵdefineComponent({ type: JsonFormFieldComponent, selectors: [["sme-form-field", "type", "json"]], features: [i0.ɵɵInheritDefinitionFeature], attrs: _c0, decls: 7, vars: 5, consts: [[3, "formField"], [1, "sme-json", "sme-form-field-editor"], ["rows", "10", 3, "ngModel", "ngModelChange"], [1, "sme-screen-reader", 3, "id"], [3, "alert"]], template: function JsonFormFieldComponent_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementStart(0, "sme-form-field-layout", 0)(1, "div", 1)(2, "textarea", 2);
i0.ɵɵlistener("ngModelChange", function JsonFormFieldComponent_Template_textarea_ngModelChange_2_listener($event) { return ctx.jsonText = $event; });
i0.ɵɵtext(3, " ");
i0.ɵɵelementEnd()();
i0.ɵɵelementStart(4, "span", 3);
i0.ɵɵtext(5);
i0.ɵɵelementEnd();
i0.ɵɵelement(6, "sme-validation-alert", 4);
i0.ɵɵelementEnd();
} if (rf & 2) {
i0.ɵɵproperty("formField", ctx);
i0.ɵɵadvance(2);
i0.ɵɵproperty("ngModel", ctx.jsonText);
i0.ɵɵadvance(2);
i0.ɵɵproperty("id", ctx.idBag.detailsSpan);
i0.ɵɵadvance(1);
i0.ɵɵtextInterpolate(ctx.details);
i0.ɵɵadvance(1);
i0.ɵɵproperty("alert", ctx.alert);
} }, dependencies: [i1.DefaultValueAccessor, i1.NgControlStatus, i1.NgModel, i5.ValidationAlertComponent, i6.FormFieldLayoutComponent], encapsulation: 2 });
JsonFormFieldComponent = __decorate([
SmeSchemaProperty({
type: SchemaPrimitiveType.Object,
format: 'json-text-editor',
description: 'A multiple line text box binding to json data.',
loaderComponent: JsonFormFieldLoaderComponent
}),
__metadata("design:paramtypes", [Injector])
], JsonFormFieldComponent);
export { JsonFormFieldComponent };
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(JsonFormFieldComponent, [{
type: Component,
args: [{ selector: 'sme-form-field[type="json"]', template: "<sme-form-field-layout [formField]=\"this\">\r\n <div class=\"sme-json sme-form-field-editor\">\r\n <textarea [(ngModel)]=\"jsonText\" rows=\"10\">\r\n </textarea>\r\n </div>\r\n <span class=\"sme-screen-reader\" [id]=\"idBag.detailsSpan\">{{details}}</span>\r\n <sme-validation-alert [alert]=\"alert\"></sme-validation-alert>\r\n</sme-form-field-layout>\r\n" }]
}], function () { return [{ type: i0.Injector }]; }, null); })();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbi1mb3JtLWZpZWxkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2FuZ3VsYXIvc3JjL2NvbnRyb2xzL2Zvcm0vZm9ybS1maWVsZC9qc29uL2pzb24tZm9ybS1maWVsZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbmd1bGFyL3NyYy9jb250cm9scy9mb3JtL2Zvcm0tZmllbGQvanNvbi9qc29uLWZvcm0tZmllbGQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQzVELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxnRUFBZ0UsQ0FBQztBQUMxRixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sOERBQThELENBQUM7QUFDdkYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDckUsT0FBTyxFQUFFLHdDQUF3QyxFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDdkcsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDcEUsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0seUJBQXlCLENBQUM7Ozs7Ozs7OztBQUV4RSw0QkFBNEI7QUFlNUIsMkJBQTJCO0FBQzNCLE1BQU0sT0FBTyw0QkFBNkIsU0FBUSx3Q0FBd0M7O21VQUE3RSw0QkFBNEIsU0FBNUIsNEJBQTRCOzhHQUE1Qiw0QkFBNEI7UUFickMsNENBU0s7UUFUOEIsNEpBQWtCLDRIQUkvQix3REFBZ0QsUUFBUSxJQUp6QixrTEFLYyxxRUFBNkQsUUFBUSxJQUxuRjtRQVNoRCxpQkFBaUI7O1FBVGEsa0NBQWtCLGlDQUFBLGlEQUFBLHlDQUFBLDZEQUFBLHdFQUFBLGtIQUFBLHFJQUFBLDRFQUFBLGtJQUFBO21HQTZCNUMs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dEIsc0JBQXNCO2NBSmxDLFNBQVM7MkJBQ0ksNkJBQTZCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbmplY3RvciwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IExvZ0xldmVsIH0gZnJvbSAnQG1pY3Jvc29mdC93aW5kb3dzLWFkbWluLWNlbnRlci1zZGsvY29yZS9kaWFnbm9zdGljcy9sb2ctbGV2ZWwnO1xyXG5pbXBvcnQgeyBMb2dnaW5nIH0gZnJvbSAnQG1pY3Jvc29mdC93aW5kb3dzLWFkbWluLWNlbnRlci1zZGsvY29yZS9kaWFnbm9zdGljcy9sb2dnaW5nJztcclxuaW1wb3J0IHsgU21lU2NoZW1hUHJvcGVydHkgfSBmcm9tICcuLi8uLi8uLi9zY2hlbWEvc2NoZW1hLWRlY29yYXRvcic7XHJcbmltcG9ydCB7IFNpbXBsZVByb3BlcnR5U2NoZW1hRmllbGRMb2FkZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9zY2hlbWEvc2NoZW1hLWZpZWxkLWhvc3QuY29tcG9uZW50JztcclxuaW1wb3J0IHsgU2NoZW1hUHJpbWl0aXZlVHlwZSB9IGZyb20gJy4uLy4uLy4uL3NjaGVtYS9zY2hlbWEtbW9kZWxzJztcclxuaW1wb3J0IHsgU21lSW50ZXJuYWxGb3JtRmllbGRDb21wb25lbnQgfSBmcm9tICcuLi9mb3JtLWZpZWxkLmNvbXBvbmVudCc7XHJcblxyXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuICovXHJcbkBDb21wb25lbnQoe1xyXG4gICAgdGVtcGxhdGU6IGBcclxuICAgIDxzbWUtZm9ybS1maWVsZCAjZmllbGQgdHlwZT1cImpzb25cIiBbKG5nTW9kZWwpXT1cImRhdGFcIiBbbmFtZV09XCJwcm9wZXJ0eVNjaGVtYS5uYW1lXCIgW2xhYmVsXT1cImxvY2FsaXplKHByb3BlcnR5U2NoZW1hLmxhYmVsKVwiXHJcbiAgICAgICAgW3JlcXVpcmVkXT1cInByb3BlcnR5U2NoZW1hLnJlcXVpcmVkXCIgW2Rlc2NyaXB0aW9uXT1cImxvY2FsaXplKHByb3BlcnR5U2NoZW1hLmRlc2NyaXB0aW9uKVwiXHJcbiAgICAgICAgW3JlYWRvbmx5XT1cIiEhZXZhbEV4cHJlc3Npb24ocHJvcGVydHlTY2hlbWEucmVhZG9ubHlDb25kaXRpb24pXCJcclxuICAgICAgICBbZGlzYWJsZWRdPVwiISEocHJvcGVydHlTY2hlbWEuZGlzYWJsZWRDb25kaXRpb24gJiYgZXZhbEV4cHJlc3Npb24ocHJvcGVydHlTY2hlbWEuZGlzYWJsZWRDb25kaXRpb24pKVwiXHJcbiAgICAgICAgKGN1c3RvbVZhbGlkYXRlKT1cInJlc29sdmVGdW5jdGlvbihwcm9wZXJ0eVNjaGVtYS5jdXN0b21WYWxpZGF0aW9uKSgkZXZlbnQpXCJcclxuICAgICAgICAoY3VzdG9tQXN5bmNWYWxpZGF0ZSk9XCJwcm9wZXJ0eVNjaGVtYS5jdXN0b21Bc3luY1ZhbGlkYXRpb24gJiYgcmVzb2x2ZUZ1bmN0aW9uKHByb3BlcnR5U2NoZW1hLmN1c3RvbUFzeW5jVmFsaWRhdGlvbi5oYW5kbGVyKSgkZXZlbnQpXCJcclxuICAgICAgICBbcGVuZGluZ01lc3NhZ2VdPVwicHJvcGVydHlTY2hlbWEuY3VzdG9tQXN5bmNWYWxpZGF0aW9uICYmIGxvY2FsaXplKHByb3BlcnR5U2NoZW1hLmN1c3RvbUFzeW5jVmFsaWRhdGlvbi5wZW5kaW5nTWVzc2FnZSlcIlxyXG4gICAgICAgIFtjdXN0b21Bc3luY1ZhbGlkYXRlRGlzYWJsZWRdPVwic2hvdWxkQ3VzdG9tQXN5bmNWYWxpZGF0aW9uQmVEaXNhYmxlZCgpXCJcclxuICAgICAgICBbY3VzdG9tQXN5bmNWYWxpZGF0ZURlYm91bmNlVGltZV09XCJwcm9wZXJ0eVNjaGVtYS5jdXN0b21Bc3luY1ZhbGlkYXRpb24gJiYgK3Byb3BlcnR5U2NoZW1hLmN1c3RvbUFzeW5jVmFsaWRhdGlvbi5oYW5kbGVyXCJcclxuICAgICAgICA+PC9zbWUtZm9ybS1maWVsZD5cclxuICAgIGBcclxufSlcclxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuICovXHJcbmV4cG9ydCBjbGFzcyBKc29uRm9ybUZpZWxkTG9hZGVyQ29tcG9uZW50IGV4dGVuZHMgU2ltcGxlUHJvcGVydHlTY2hlbWFGaWVsZExvYWRlckNvbXBvbmVudCB7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBBY2Nlc3NpYmxlIGpzb24gZmllbGQgaW1wbGVtZW50YXRpb25cclxuICovXHJcbkBTbWVTY2hlbWFQcm9wZXJ0eSh7XHJcbiAgICB0eXBlOiBTY2hlbWFQcmltaXRpdmVUeXBlLk9iamVjdCxcclxuICAgIGZvcm1hdDogJ2pzb24tdGV4dC1lZGl0b3InLFxyXG4gICAgZGVzY3JpcHRpb246ICdBIG11bHRpcGxlIGxpbmUgdGV4dCBib3ggYmluZGluZyB0byBqc29uIGRhdGEuJyxcclxuICAgIGxvYWRlckNvbXBvbmVudDogSnNvbkZvcm1GaWVsZExvYWRlckNvbXBvbmVudFxyXG59KVxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnc21lLWZvcm0tZmllbGRbdHlwZT1cImpzb25cIl0nLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2pzb24tZm9ybS1maWVsZC5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEpzb25Gb3JtRmllbGRDb21wb25lbnQgZXh0ZW5kcyBTbWVJbnRlcm5hbEZvcm1GaWVsZENvbXBvbmVudDxhbnk+IGltcGxlbWVudHMgT25Jbml0IHtcclxuICAgIHByaXZhdGUgaW50ZXJuYWxKc29uVGV4dDogc3RyaW5nO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHNvdXJjZSBuYW1lIHRvIHVzZSBmb3IgbG9nZ2luZ1xyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgZ2V0IGxvZ1NvdXJjZU5hbWUoKSB7XHJcbiAgICAgICAgcmV0dXJuICdKc29uRm9ybUZpZWxkQ29tcG9uZW50JztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IGpzb25UZXh0KCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaW50ZXJuYWxKc29uVGV4dDtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzZXQganNvblRleHQodmFsdWU6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuaW50ZXJuYWxKc29uVGV4dCA9IHZhbHVlO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBKU09OLnBhcnNlKHZhbHVlKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignSlNPTiBwYXJzZSBlcnJvci4nKTtcclxuICAgICAgICAgICAgTG9nZ2luZy5sb2coe1xyXG4gICAgICAgICAgICAgICAgbGV2ZWw6IExvZ0xldmVsLkRlYnVnLFxyXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ0pTT04gcGFyc2UgZXJyb3IuJyxcclxuICAgICAgICAgICAgICAgIHNvdXJjZTogJ0pzb25Gb3JtRmllbGRDb21wb25lbnQuanNvblRleHQuc2V0J1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbml0aWFsaXplcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgSnNvbkZvcm1GaWVsZENvbXBvbmVudFxyXG4gICAgICovXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBpbmplY3RvcjogSW5qZWN0b3JcclxuICAgICkge1xyXG4gICAgICAgIHN1cGVyKGluamVjdG9yKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgb25WYWx1ZUNoYW5nZWQodmFsdWU6IGFueSkge1xyXG4gICAgICAgIGxldCBmb3JtYXR0ZWRKc29uVGV4dCA9ICcnO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5pbnRlcm5hbEpzb25UZXh0KSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBmb3JtYXR0ZWRKc29uVGV4dCA9IEpTT04uc3RyaW5naWZ5KEpTT04ucGFyc2UodGhpcy5pbnRlcm5hbEpzb25UZXh0KSwgbnVsbCwgNCk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIExvZ2dpbmcubG9nKHtcclxuICAgICAgICAgICAgICAgICAgICBsZXZlbDogTG9nTGV2ZWwuRGVidWcsXHJcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ0pTT04gcGFyc2UgZXJyb3IuJyxcclxuICAgICAgICAgICAgICAgICAgICBzb3VyY2U6ICdKc29uRm9ybUZpZWxkQ29tcG9uZW50Lmpzb25UZXh0LnNldCdcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBuZXdKc29uVGV4dCA9IEpTT04uc3RyaW5naWZ5KHZhbHVlLCBudWxsLCA0KTtcclxuXHJcbiAgICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIGlmIChmb3JtYXR0ZWRKc29uVGV4dCAhPT0gbmV3SnNvblRleHQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaW50ZXJuYWxKc29uVGV4dCA9IEpTT04uc3RyaW5naWZ5KHZhbHVlLCBudWxsLCA0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgdGhlIGlkQmFnIHVzZWQgYnkgdGhpcyBjb21wb25lbnQgdG8gc3RvcmUgdW5pcXVlIGVsZW1lbnQgaWRzLlxyXG4gICAgICogaWQgdmFsdWVzIHdpbGwgYmUgYXNzaWduZWQgYmUgdGhlIEBzZWUgQmFzZUNvbXBvbmVudCBzdXBlciBjbGFzcy5cclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIGNyZWF0ZUlkQmFnKCk6IE1zZnRTbWUuU3RyaW5nTWFwPHN0cmluZz4ge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGRldGFpbHNTcGFuOiAnJ1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbn1cclxuIiwiPHNtZS1mb3JtLWZpZWxkLWxheW91dCBbZm9ybUZpZWxkXT1cInRoaXNcIj5cclxuICA8ZGl2IGNsYXNzPVwic21lLWpzb24gc21lLWZvcm0tZmllbGQtZWRpdG9yXCI+XHJcbiAgICA8dGV4dGFyZWEgWyhuZ01vZGVsKV09XCJqc29uVGV4dFwiIHJvd3M9XCIxMFwiPlxyXG4gICAgPC90ZXh0YXJlYT5cclxuICA8L2Rpdj5cclxuICA8c3BhbiBjbGFzcz1cInNtZS1zY3JlZW4tcmVhZGVyXCIgW2lkXT1cImlkQmFnLmRldGFpbHNTcGFuXCI+e3tkZXRhaWxzfX08L3NwYW4+XHJcbiAgPHNtZS12YWxpZGF0aW9uLWFsZXJ0IFthbGVydF09XCJhbGVydFwiPjwvc21lLXZhbGlkYXRpb24tYWxlcnQ+XHJcbjwvc21lLWZvcm0tZmllbGQtbGF5b3V0PlxyXG4iXX0=