UNPKG

@iotize/ionic

Version:

Iotize specific building blocks on top of @ionic/angular.

157 lines 19.7 kB
import { DecimalPipe } from '@angular/common'; import { Component, Input, ViewChild, } from '@angular/core'; import { InlineEditorComponent, TapValueEditorContainerComponent, } from '@iotize/ionic'; import { AbstractVariable } from '@iotize/tap/data'; import { map, shareReplay } from 'rxjs/operators'; import * as i0 from "@angular/core"; import * as i1 from "@angular/common"; import * as i2 from "@iotize/ionic"; export class MonitoringVariableValueComponent { set error(err) { this.fieldError = err; } set variable(v) { this._variable = v; } /** * @deprecated */ set config(config) { if (!this.inputOptions) { switch (config.type) { case 'FLOAT32': this.inputOptions = { type: 'number', }; break; case 'STRING': this.inputOptions = { type: 'text', maxLength: config.length, }; break; case 'UINT32': this.inputOptions = { type: 'number', min: 0, max: 0xffffffff, }; break; case 'UINT16': this.inputOptions = { type: 'number', min: 0, max: 0xffff, }; break; case 'UINT8': this.inputOptions = { type: 'number', min: 0, max: 0xff, }; break; case 'INT32': this.inputOptions = { type: 'number', min: -2147483648, max: 2147483647, }; break; case 'INT16': this.inputOptions = { type: 'number', min: -32768, max: 32767, }; break; case 'INT8': this.inputOptions = { type: 'number', min: -128, max: 127, }; break; } } } constructor(decimalPipe) { this.decimalPipe = decimalPipe; this.inputOptions = { type: 'text', }; this.editable = false; this.modalEdition = false; this.refreshable = false; this.forceValue = undefined; } ngOnDestroy() { this.valueSub?.unsubscribe(); } ngAfterViewInit() { this.valueSub = this.ctx?.valueToDisplay ?.pipe(map((value) => { if (this.valueFormatting) { value = this.valueFormatting(value); } if (this.digitsInfo && typeof value === 'number') { value = this.decimalPipe.transform(value, this.digitsInfo); } return value; }), shareReplay(1)) .subscribe((v) => { this._value = v; }); } onSubmit(newValue) { this.ctx?.notifyValueChange(newValue); } onSubmitValue() { this.ctx?.submitValue(); } onValueChange(event) { this.ctx.valueToSubmit = event; } onEditModeChange(newValue) { if (newValue) { this.ctx?.enableEditMode(); } else { this.ctx?.cancelEdit(); } } } /** @nocollapse */ MonitoringVariableValueComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: MonitoringVariableValueComponent, deps: [{ token: i1.DecimalPipe }], target: i0.ɵɵFactoryTarget.Component }); /** @nocollapse */ MonitoringVariableValueComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: MonitoringVariableValueComponent, selector: "monitoring-variable-value", inputs: { lines: "lines", unitValue: "unitValue", error: "error", variable: "variable", config: "config", inputOptions: "inputOptions", editable: "editable", modalEdition: "modalEdition", valueStyle: "valueStyle", digitsInfo: "digitsInfo", refreshable: "refreshable", valueFormatting: "valueFormatting" }, viewQueries: [{ propertyName: "ctx", first: true, predicate: ["ctx"], descendants: true }], ngImport: i0, template: "<tap-value-editor-container\n #ctx\n [variable]=\"_variable\"\n [showRefreshButton]=\"refreshable\"\n [showEditButton]=\"editable\"\n [showSubmitButton]=\"true\"\n [modalEdition]=\"modalEdition\"\n [inputOptions]=\"inputOptions\"\n [lines]=\"lines\"\n>\n <tap-inline-editor\n [forceValue]=\"forceValue\"\n [value]=\"\n ctx.pendingSubmitValue === undefined ? _value : ctx.pendingSubmitValue\n \"\n [editMode]=\"ctx.editModeChange | async\"\n (editModeChange)=\"onEditModeChange($event)\"\n [editable]=\"editable && ctx.pendingSubmitValue === undefined\"\n [fieldError]=\"fieldError\"\n [inputOptions]=\"inputOptions\"\n [unitValue]=\"unitValue\"\n [valueStyle]=\"valueStyle\"\n (valueChange)=\"onValueChange($event)\"\n (onSubmit)=\"onSubmit($event)\"\n >\n </tap-inline-editor>\n</tap-value-editor-container>\n", styles: [""], dependencies: [{ kind: "component", type: i2.TapValueEditorContainerComponent, selector: "tap-value-editor-container", inputs: ["button", "variable", "inputOptions", "showRefreshButton", "showSubmitButton", "showEditButton", "error", "lines", "modalEdition", "value"], outputs: ["submit", "refresh"] }, { kind: "component", type: i2.InlineEditorComponent, selector: "tap-inline-editor", inputs: ["editMode", "editable", "unitValue", "inputOptions", "valueStyle", "value", "forceValue", "showLoader", "fieldError"], outputs: ["onSubmit", "valueChange", "editModeChange"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }] }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: MonitoringVariableValueComponent, decorators: [{ type: Component, args: [{ selector: 'monitoring-variable-value', template: "<tap-value-editor-container\n #ctx\n [variable]=\"_variable\"\n [showRefreshButton]=\"refreshable\"\n [showEditButton]=\"editable\"\n [showSubmitButton]=\"true\"\n [modalEdition]=\"modalEdition\"\n [inputOptions]=\"inputOptions\"\n [lines]=\"lines\"\n>\n <tap-inline-editor\n [forceValue]=\"forceValue\"\n [value]=\"\n ctx.pendingSubmitValue === undefined ? _value : ctx.pendingSubmitValue\n \"\n [editMode]=\"ctx.editModeChange | async\"\n (editModeChange)=\"onEditModeChange($event)\"\n [editable]=\"editable && ctx.pendingSubmitValue === undefined\"\n [fieldError]=\"fieldError\"\n [inputOptions]=\"inputOptions\"\n [unitValue]=\"unitValue\"\n [valueStyle]=\"valueStyle\"\n (valueChange)=\"onValueChange($event)\"\n (onSubmit)=\"onSubmit($event)\"\n >\n </tap-inline-editor>\n</tap-value-editor-container>\n" }] }], ctorParameters: function () { return [{ type: i1.DecimalPipe }]; }, propDecorators: { ctx: [{ type: ViewChild, args: ['ctx'] }], lines: [{ type: Input }], unitValue: [{ type: Input }], error: [{ type: Input }], variable: [{ type: Input }], config: [{ type: Input }], inputOptions: [{ type: Input }], editable: [{ type: Input }], modalEdition: [{ type: Input }], valueStyle: [{ type: Input }], digitsInfo: [{ type: Input }], refreshable: [{ type: Input }], valueFormatting: [{ type: Input }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9uaXRvcmluZy12YXJpYWJsZS12YWx1ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pb3RpemUtaW9uaWMvbW9uaXRvcmluZy9zcmMvbGliL3VpLWNvbXBvbmVudHMvbW9uaXRvcmluZy12YXJpYWJsZS12YWx1ZS9tb25pdG9yaW5nLXZhcmlhYmxlLXZhbHVlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lvdGl6ZS1pb25pYy9tb25pdG9yaW5nL3NyYy9saWIvdWktY29tcG9uZW50cy9tb25pdG9yaW5nLXZhcmlhYmxlLXZhbHVlL21vbml0b3JpbmctdmFyaWFibGUtdmFsdWUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzlDLE9BQU8sRUFFTCxTQUFTLEVBQ1QsS0FBSyxFQUVMLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLGdDQUFnQyxHQUNqQyxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVwRCxPQUFPLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7O0FBT2xELE1BQU0sT0FBTyxnQ0FBZ0M7SUFVM0MsSUFBYSxLQUFLLENBQUMsR0FBVTtRQUMzQixJQUFJLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztJQUN4QixDQUFDO0lBRUQsSUFDSSxRQUFRLENBQUMsQ0FBOEI7UUFDekMsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7SUFDckIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBYSxNQUFNLENBQUMsTUFBc0I7UUFDeEMsSUFBSSxDQUFDLElBQUksQ0FBQyxZ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O1FBQ2xCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELFFBQVEsQ0FBQyxRQUFhO1FBQ3BCLElBQUksQ0FBQyxHQUFHLEVBQUUsaUJBQWlCLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVELGFBQWE7UUFDWCxJQUFJLENBQUMsR0FBRyxFQUFFLFdBQVcsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCxhQUFhLENBQUMsS0FBVTtRQUN0QixJQUFJLENBQUMsR0FBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7SUFDbEMsQ0FBQztJQUVELGdCQUFnQixDQUFDLFFBQWE7UUFDNUIsSUFBSSxRQUFRLEVBQUU7WUFDWixJQUFJLENBQUMsR0FBRyxFQUFFLGNBQWMsRUFBRSxDQUFDO1NBQzVCO2FBQU07WUFDTCxJQUFJLENBQUMsR0FBRyxFQUFFLFVBQVUsRUFBRSxDQUFDO1NBQ3hCO0lBQ0gsQ0FBQzs7aUpBaEtVLGdDQUFnQztxSUFBaEMsZ0NBQWdDLCtjQ3RCN0MsZzJCQTJCQTs0RkRMYSxnQ0FBZ0M7a0JBTDVDLFNBQVM7K0JBQ0UsMkJBQTJCO2tHQU9uQixHQUFHO3NCQUFwQixTQUFTO3VCQUFDLEtBQUs7Z0JBRVAsS0FBSztzQkFBYixLQUFLO2dCQUdOLFNBQVM7c0JBRFIsS0FBSztnQkFHTyxLQUFLO3NCQUFqQixLQUFLO2dCQUtGLFFBQVE7c0JBRFgsS0FBSztnQkFRTyxNQUFNO3NCQUFsQixLQUFLO2dCQTRERyxZQUFZO3NCQUFwQixLQUFLO2dCQUtOLFFBQVE7c0JBRFAsS0FBSztnQkFJTixZQUFZO3NCQURYLEtBQUs7Z0JBSU4sVUFBVTtzQkFEVCxLQUFLO2dCQVFOLFVBQVU7c0JBRFQsS0FBSztnQkFJTixXQUFXO3NCQURWLEtBQUs7Z0JBR0csZUFBZTtzQkFBdkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERlY2ltYWxQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIElubGluZUVkaXRvckNvbXBvbmVudCxcbiAgVGFwVmFsdWVFZGl0b3JDb250YWluZXJDb21wb25lbnQsXG59IGZyb20gJ0Bpb3RpemUvaW9uaWMnO1xuaW1wb3J0IHsgVmFyaWFibGVDb25maWcgfSBmcm9tICdAaW90aXplL3RhcC9jb25maWcvc2NoZW1hL3YxJztcbmltcG9ydCB7IEFic3RyYWN0VmFyaWFibGUgfSBmcm9tICdAaW90aXplL3RhcC9kYXRhJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwLCBzaGFyZVJlcGxheSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbW9uaXRvcmluZy12YXJpYWJsZS12YWx1ZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9tb25pdG9yaW5nLXZhcmlhYmxlLXZhbHVlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbW9uaXRvcmluZy12YXJpYWJsZS12YWx1ZS5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBNb25pdG9yaW5nVmFyaWFibGVWYWx1ZUNvbXBvbmVudDxWYWx1ZVR5cGUgPSBhbnk+XG4gIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95XG57XG4gIEBWaWV3Q2hpbGQoJ2N0eCcpIGN0eD86IFRhcFZhbHVlRWRpdG9yQ29udGFpbmVyQ29tcG9uZW50O1xuXG4gIEBJbnB1dCgpIGxpbmVzPzogc3RyaW5nO1xuXG4gIEBJbnB1dCgpXG4gIHVuaXRWYWx1ZT86IHN0cmluZztcblxuICBASW5wdXQoKSBzZXQgZXJyb3IoZXJyOiBFcnJvcikge1xuICAgIHRoaXMuZmllbGRFcnJvciA9IGVycjtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHNldCB2YXJpYWJsZSh2OiBBYnN0cmFjdFZhcmlhYmxlPFZhbHVlVHlwZT4pIHtcbiAgICB0aGlzLl92YXJpYWJsZSA9IHY7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWRcbiAgICovXG4gIEBJbnB1dCgpIHNldCBjb25maWcoY29uZmlnOiBWYXJpYWJsZUNvbmZpZykge1xuICAgIGlmICghdGhpcy5pbnB1dE9wdGlvbnMpIHtcbiAgICAgIHN3aXRjaCAoY29uZmlnLnR5cGUpIHtcbiAgICAgICAgY2FzZSAnRkxPQVQzMic6XG4gICAgICAgICAgdGhpcy5pbnB1dE9wdGlvbnMgPSB7XG4gICAgICAgICAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICAgICAgICB9O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdTVFJJTkcnOlxuICAgICAgICAgIHRoaXMuaW5wdXRPcHRpb25zID0ge1xuICAgICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgICAgbWF4TGVuZ3RoOiBjb25maWcubGVuZ3RoLFxuICAgICAgICAgIH07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ1VJTlQzMic6XG4gICAgICAgICAgdGhpcy5pbnB1dE9wdGlvbnMgPSB7XG4gICAgICAgICAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICAgICAgICAgIG1pbjogMCxcbiAgICAgICAgICAgIG1heDogMHhmZmZmZmZmZixcbiAgICAgICAgICB9O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdVSU5UMTYnOlxuICAgICAgICAgIHRoaXMuaW5wdXRPcHRpb25zID0ge1xuICAgICAgICAgICAgdHlwZTogJ251bWJlcicsXG4gICAgICAgICAgICBtaW46IDAsXG4gICAgICAgICAgICBtYXg6IDB4ZmZmZixcbiAgICAgICAgICB9O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdVSU5UOCc6XG4gICAgICAgICAgdGhpcy5pbnB1dE9wdGlvbnMgPSB7XG4gICAgICAgICAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICAgICAgICAgIG1pbjogMCxcbiAgICAgICAgICAgIG1heDogMHhmZixcbiAgICAgICAgICB9O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdJTlQzMic6XG4gICAgICAgICAgdGhpcy5pbnB1dE9wdGlvbnMgPSB7XG4gICAgICAgICAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICAgICAgICAgIG1pbjogLTIxNDc0ODM2NDgsXG4gICAgICAgICAgICBtYXg6IDIxNDc0ODM2NDcsXG4gICAgICAgICAgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnSU5UMTYnOlxuICAgICAgICAgIHRoaXMuaW5wdXRPcHRpb25zID0ge1xuICAgICAgICAgICAgdHlwZTogJ251bWJlcicsXG4gICAgICAgICAgICBtaW46IC0zMjc2OCxcbiAgICAgICAgICAgIG1heDogMzI3NjcsXG4gICAgICAgICAgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnSU5UOCc6XG4gICAgICAgICAgdGhpcy5pbnB1dE9wdGlvbnMgPSB7XG4gICAgICAgICAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICAgICAgICAgIG1pbjogLTEyOCxcbiAgICAgICAgICAgIG1heDogMTI3LFxuICAgICAgICAgIH07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgQElucHV0KCkgaW5wdXRPcHRpb25zOiBJbmxpbmVFZGl0b3JDb21wb25lbnQuSW5wdXRPcHRpb25zID0ge1xuICAgIHR5cGU6ICd0ZXh0JyxcbiAgfTtcblxuICBASW5wdXQoKVxuICBlZGl0YWJsZSA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIG1vZGFsRWRpdGlvbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIHZhbHVlU3R5bGU/OiBhbnk7XG5cbiAgLyoqXG4gICAqIFNlZSBkaWdpdHNJbmZvIGRvYyBvbiBAe2xpbmsgaHR0cHM6Ly9hbmd1bGFyLmlvL2FwaS9jb21tb24vRGVjaW1hbFBpcGUjcGFyYW1ldGVyc31cbiAgICogV2lsbCBiZSB1c2VkIG9ubHkgaWYgdmFsdWUgaXMgYSBudW1iZXJcbiAgICovXG4gIEBJbnB1dCgpXG4gIGRpZ2l0c0luZm8/OiBzdHJpbmc7XG5cbiAgQElucHV0KClcbiAgcmVmcmVzaGFibGUgPSBmYWxzZTtcblxuICBASW5wdXQoKSB2YWx1ZUZvcm1hdHRpbmc/OiAodmFsdWU6IFZhbHVlVHlwZSkgPT4gVmFsdWVUeXBlO1xuXG4gIHB1YmxpYyBfdmFyaWFibGU/OiBBYnN0cmFjdFZhcmlhYmxlPFZhbHVlVHlwZT47XG5cbiAgcHVibGljIGZpZWxkRXJyb3I/OiBFcnJvcjtcblxuICBfdmFsdWU/OiBhbnk7XG5cbiAgZm9yY2VWYWx1ZTogYW55ID0gdW5kZWZpbmVkO1xuXG4gIHZhbHVlU3ViPzogU3Vic2NyaXB0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZGVjaW1hbFBpcGU6IERlY2ltYWxQaXBlKSB7fVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMudmFsdWVTdWI/LnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZVN1YiA9IHRoaXMuY3R4Py52YWx1ZVRvRGlzcGxheVxuICAgICAgPy5waXBlKFxuICAgICAgICBtYXAoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMudmFsdWVGb3JtYXR0aW5nKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHRoaXMudmFsdWVGb3JtYXR0aW5nKHZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHRoaXMuZGlnaXRzSW5mbyAmJiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHRoaXMuZGVjaW1hbFBpcGUudHJhbnNmb3JtKHZhbHVlLCB0aGlzLmRpZ2l0c0luZm8pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH0pLFxuICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgodikgPT4ge1xuICAgICAgICB0aGlzLl92YWx1ZSA9IHY7XG4gICAgICB9KTtcbiAgfVxuXG4gIG9uU3VibWl0KG5ld1ZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLmN0eD8ubm90aWZ5VmFsdWVDaGFuZ2UobmV3VmFsdWUpO1xuICB9XG5cbiAgb25TdWJtaXRWYWx1ZSgpIHtcbiAgICB0aGlzLmN0eD8uc3VibWl0VmFsdWUoKTtcbiAgfVxuXG4gIG9uVmFsdWVDaGFuZ2UoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuY3R4IS52YWx1ZVRvU3VibWl0ID0gZXZlbnQ7XG4gIH1cblxuICBvbkVkaXRNb2RlQ2hhbmdlKG5ld1ZhbHVlOiBhbnkpIHtcbiAgICBpZiAobmV3VmFsdWUpIHtcbiAgICAgIHRoaXMuY3R4Py5lbmFibGVFZGl0TW9kZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmN0eD8uY2FuY2VsRWRpdCgpO1xuICAgIH1cbiAgfVxufVxuIiwiPHRhcC12YWx1ZS1lZGl0b3ItY29udGFpbmVyXG4gICNjdHhcbiAgW3ZhcmlhYmxlXT1cIl92YXJpYWJsZVwiXG4gIFtzaG93UmVmcmVzaEJ1dHRvbl09XCJyZWZyZXNoYWJsZVwiXG4gIFtzaG93RWRpdEJ1dHRvbl09XCJlZGl0YWJsZVwiXG4gIFtzaG93U3VibWl0QnV0dG9uXT1cInRydWVcIlxuICBbbW9kYWxFZGl0aW9uXT1cIm1vZGFsRWRpdGlvblwiXG4gIFtpbnB1dE9wdGlvbnNdPVwiaW5wdXRPcHRpb25zXCJcbiAgW2xpbmVzXT1cImxpbmVzXCJcbj5cbiAgPHRhcC1pbmxpbmUtZWRpdG9yXG4gICAgW2ZvcmNlVmFsdWVdPVwiZm9yY2VWYWx1ZVwiXG4gICAgW3ZhbHVlXT1cIlxuICAgICAgY3R4LnBlbmRpbmdTdWJtaXRWYWx1ZSA9PT0gdW5kZWZpbmVkID8gX3ZhbHVlIDogY3R4LnBlbmRpbmdTdWJtaXRWYWx1ZVxuICAgIFwiXG4gICAgW2VkaXRNb2RlXT1cImN0eC5lZGl0TW9kZUNoYW5nZSB8IGFzeW5jXCJcbiAgICAoZWRpdE1vZGVDaGFuZ2UpPVwib25FZGl0TW9kZUNoYW5nZSgkZXZlbnQpXCJcbiAgICBbZWRpdGFibGVdPVwiZWRpdGFibGUgJiYgY3R4LnBlbmRpbmdTdWJtaXRWYWx1ZSA9PT0gdW5kZWZpbmVkXCJcbiAgICBbZmllbGRFcnJvcl09XCJmaWVsZEVycm9yXCJcbiAgICBbaW5wdXRPcHRpb25zXT1cImlucHV0T3B0aW9uc1wiXG4gICAgW3VuaXRWYWx1ZV09XCJ1bml0VmFsdWVcIlxuICAgIFt2YWx1ZVN0eWxlXT1cInZhbHVlU3R5bGVcIlxuICAgICh2YWx1ZUNoYW5nZSk9XCJvblZhbHVlQ2hhbmdlKCRldmVudClcIlxuICAgIChvblN1Ym1pdCk9XCJvblN1Ym1pdCgkZXZlbnQpXCJcbiAgPlxuICA8L3RhcC1pbmxpbmUtZWRpdG9yPlxuPC90YXAtdmFsdWUtZWRpdG9yLWNvbnRhaW5lcj5cbiJdfQ==