UNPKG

@nova-ui/dashboards

Version:

Nova Dashboards is a framework designed to provide feature developers with a common solution for presenting data coming from various sources within a single view, as well as a set of predefined widget visualizations that are 100% configuration-driven and

88 lines 14.8 kB
// © 2022 SolarWinds Worldwide, LLC. All rights reserved. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to // deal in the Software without restriction, including without limitation the // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or // sell copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. import { ChangeDetectorRef, Component, HostBinding, Inject, Input, } from "@angular/core"; import { takeUntil } from "rxjs/operators"; import { EventBus, LoggerService } from "@nova-ui/bits"; import { PizzagnaService } from "../../../pizzagna/services/pizzagna.service"; import { DASHBOARD_EDIT_MODE } from "../../../services/types"; import { PizzagnaLayer, PIZZAGNA_EVENT_BUS } from "../../../types"; import { BaseLayout } from "../../layouts/base-layout"; import * as i0 from "@angular/core"; import * as i1 from "../../../pizzagna/services/pizzagna.service"; import * as i2 from "@nova-ui/bits"; import * as i3 from "@angular/common"; import * as i4 from "../../../common/components/preview-overlay/preview-overlay.component"; import * as i5 from "@angular/cdk/portal"; import * as i6 from "../../../pizzagna/directives/component-portal/component-portal.directive"; export class WidgetBodyComponent extends BaseLayout { static { this.lateLoadKey = "WidgetBodyComponent"; } constructor(eventBus, changeDetector, pizzagnaService, logger) { super(changeDetector, pizzagnaService, logger); this.eventBus = eventBus; /** * Keeps track of whether the dashboard is in edit mode */ this.editMode = false; /** * Optional class for styling */ this.elementClass = ""; this.defaultClasses = "d-flex h-100 w-100"; this.getNodes = () => [this.content]; } ngOnInit() { this.classNames = `${this.defaultClasses} ${this.elementClass}`; // subscribing to dashboard event to set 'edit mode' this.eventBus .getStream(DASHBOARD_EDIT_MODE) .pipe(takeUntil(this.destroyed$)) .subscribe((event) => { this.pizzagnaService.setProperty({ componentId: this.componentId, pizzagnaKey: PizzagnaLayer.Data, propertyPath: ["editMode"], }, !!event.payload); }); } ngOnDestroy() { super.ngOnDestroy(); } /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: WidgetBodyComponent, deps: [{ token: PIZZAGNA_EVENT_BUS }, { token: i0.ChangeDetectorRef }, { token: i1.PizzagnaService }, { token: i2.LoggerService }], target: i0.ɵɵFactoryTarget.Component }); } /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: WidgetBodyComponent, selector: "nui-widget-body", inputs: { componentId: "componentId", editMode: "editMode", content: "content", elementClass: "elementClass" }, host: { properties: { "class": "this.classNames" } }, usesInheritance: true, ngImport: i0, template: "<nui-preview-overlay *ngIf=\"editMode\"></nui-preview-overlay>\n<ng-container\n nuiComponentPortal\n #componentPortal=\"nuiComponentPortal\"\n [componentId]=\"nodeConfigs[0].id\"\n [componentType]=\"nodeConfigs[0].componentType\"\n [providers]=\"nodeConfigs[0].providers\"\n [properties]=\"nodeConfigs[0].properties\"\n>\n <ng-template\n [cdkPortalOutlet]=\"componentPortal.portal\"\n (attached)=\"componentPortal.attached($event)\"\n ></ng-template>\n</ng-container>\n", styles: [":host{position:relative}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.PreviewOverlayComponent, selector: "nui-preview-overlay" }, { kind: "directive", type: i5.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }, { kind: "directive", type: i6.ComponentPortalDirective, selector: "[nuiComponentPortal]", inputs: ["componentId", "componentType", "properties", "providers", "outputs"], outputs: ["output"], exportAs: ["nuiComponentPortal"] }] }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: WidgetBodyComponent, decorators: [{ type: Component, args: [{ selector: "nui-widget-body", template: "<nui-preview-overlay *ngIf=\"editMode\"></nui-preview-overlay>\n<ng-container\n nuiComponentPortal\n #componentPortal=\"nuiComponentPortal\"\n [componentId]=\"nodeConfigs[0].id\"\n [componentType]=\"nodeConfigs[0].componentType\"\n [providers]=\"nodeConfigs[0].providers\"\n [properties]=\"nodeConfigs[0].properties\"\n>\n <ng-template\n [cdkPortalOutlet]=\"componentPortal.portal\"\n (attached)=\"componentPortal.attached($event)\"\n ></ng-template>\n</ng-container>\n", styles: [":host{position:relative}\n"] }] }], ctorParameters: () => [{ type: i2.EventBus, decorators: [{ type: Inject, args: [PIZZAGNA_EVENT_BUS] }] }, { type: i0.ChangeDetectorRef }, { type: i1.PizzagnaService }, { type: i2.LoggerService }], propDecorators: { componentId: [{ type: Input }], editMode: [{ type: Input }], content: [{ type: Input }], elementClass: [{ type: Input }], classNames: [{ type: HostBinding, args: ["class"] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LWJvZHkuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL3dpZGdldC93aWRnZXQtYm9keS93aWRnZXQtYm9keS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvd2lkZ2V0L3dpZGdldC1ib2R5L3dpZGdldC1ib2R5LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHlEQUF5RDtBQUN6RCxFQUFFO0FBQ0YsK0VBQStFO0FBQy9FLDRFQUE0RTtBQUM1RSw4RUFBOEU7QUFDOUUsK0VBQStFO0FBQy9FLDhFQUE4RTtBQUM5RSw0REFBNEQ7QUFDNUQsRUFBRTtBQUNGLDZFQUE2RTtBQUM3RSx1REFBdUQ7QUFDdkQsRUFBRTtBQUNGLDZFQUE2RTtBQUM3RSw0RUFBNEU7QUFDNUUsK0VBQStFO0FBQy9FLDBFQUEwRTtBQUMxRSxpRkFBaUY7QUFDakYsNkVBQTZFO0FBQzdFLGlCQUFpQjtBQUVqQixPQUFPLEVBQ0gsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxXQUFXLEVBQ1gsTUFBTSxFQUNOLEtBQUssR0FHUixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0MsT0FBTyxFQUFFLFFBQVEsRUFBVSxhQUFhLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFaEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSxhQUFhLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7Ozs7Ozs7O0FBT3ZELE1BQU0sT0FBTyxtQkFDVCxTQUFRLFVBQVU7YUFHSixnQkFBVyxHQUFHLHFCQUFxQixBQUF4QixDQUF5QjtJQTBCbEQsWUFDd0MsUUFBMEIsRUFDOUQsY0FBaUMsRUFDakMsZUFBZ0MsRUFDaEMsTUFBcUI7UUFFckIsS0FBSyxDQUFDLGNBQWMsRUFBRSxlQUFlLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFMWCxhQUFRLEdBQVIsUUFBUSxDQUFrQjtRQXBCbEU7O1dBRUc7UUFDYSxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBT2pDOztXQUVHO1FBQ2EsaUJBQVksR0FBRyxFQUFFLENBQUM7UUFJbEIsbUJBQWMsR0FBRyxvQkFBb0IsQ0FBQztRQWtDL0MsYUFBUSxHQUFHLEdBQWEsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBekJqRCxDQUFDO0lBRU0sUUFBUTtRQUNYLElBQUksQ0FBQyxVQUFVLEdBQUcsR0FBRyxJQUFJLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUVoRSxvREFBb0Q7UUFDcEQsSUFBSSxDQUFDLFFBQVE7YUFDUixTQUFTLENBQUMsbUJBQW1CLENBQUM7YUFDOUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7YUFDaEMsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDakIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQzVCO2dCQUNJLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztnQkFDN0IsV0FBVyxFQUFFLGFBQWEsQ0FBQyxJQUFJO2dCQUMvQixZQUFZLEVBQUUsQ0FBQyxVQUFVLENBQUM7YUFDN0IsRUFDRCxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FDbEIsQ0FBQztRQUNOLENBQUMsQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUVNLFdBQVc7UUFDZCxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDeEIsQ0FBQztrSUE1RFEsbUJBQW1CLGtCQStCaEIsa0JBQWtCO3NIQS9CckIsbUJBQW1CLG9QQzNDaEMsNmZBY0E7OzRGRDZCYSxtQkFBbUI7a0JBTC9CLFNBQVM7K0JBQ0ksaUJBQWlCOzswQkFtQ3RCLE1BQU07MkJBQUMsa0JBQWtCO21JQXRCZCxXQUFXO3NCQUExQixLQUFLO2dCQUtVLFFBQVE7c0JBQXZCLEtBQUs7Z0JBS1UsT0FBTztzQkFBdEIsS0FBSztnQkFLVSxZQUFZO3NCQUEzQixLQUFLO2dCQUV1QixVQUFVO3NCQUF0QyxXQUFXO3VCQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyIvLyDCqSAyMDIyIFNvbGFyV2luZHMgV29ybGR3aWRlLCBMTEMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuLy8gIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvXG4vLyAgZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGVcbi8vICByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Jcbi8vICBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuLy8gIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vICBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLyAgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLyAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyAgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8gIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4vLyAgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuLy8gIFRIRSBTT0ZUV0FSRS5cblxuaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSW5qZWN0LFxuICAgIElucHV0LFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcblxuaW1wb3J0IHsgRXZlbnRCdXMsIElFdmVudCwgTG9nZ2VyU2VydmljZSB9IGZyb20gXCJAbm92YS11aS9iaXRzXCI7XG5cbmltcG9ydCB7IFBpenphZ25hU2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi9waXp6YWduYS9zZXJ2aWNlcy9waXp6YWduYS5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBEQVNIQk9BUkRfRURJVF9NT0RFIH0gZnJvbSBcIi4uLy4uLy4uL3NlcnZpY2VzL3R5cGVzXCI7XG5pbXBvcnQgeyBQaXp6YWduYUxheWVyLCBQSVpaQUdOQV9FVkVOVF9CVVMgfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXNcIjtcbmltcG9ydCB7IEJhc2VMYXlvdXQgfSBmcm9tIFwiLi4vLi4vbGF5b3V0cy9iYXNlLWxheW91dFwiO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogXCJudWktd2lkZ2V0LWJvZHlcIixcbiAgICB0ZW1wbGF0ZVVybDogXCIuL3dpZGdldC1ib2R5LmNvbXBvbmVudC5odG1sXCIsXG4gICAgc3R5bGVVcmxzOiBbXCIuL3dpZGdldC1ib2R5LmNvbXBvbmVudC5sZXNzXCJdLFxufSlcbmV4cG9ydCBjbGFzcyBXaWRnZXRCb2R5Q29tcG9uZW50XG4gICAgZXh0ZW5kcyBCYXNlTGF5b3V0XG4gICAgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveVxue1xuICAgIHB1YmxpYyBzdGF0aWMgbGF0ZUxvYWRLZXkgPSBcIldpZGdldEJvZHlDb21wb25lbnRcIjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjb21wb25lbnQncyBpZFxuICAgICAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyBjb21wb25lbnRJZDogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogS2VlcHMgdHJhY2sgb2Ygd2hldGhlciB0aGUgZGFzaGJvYXJkIGlzIGluIGVkaXQgbW9kZVxuICAgICAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyBlZGl0TW9kZSA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogUGl6emFnbmEga2V5IGZvciB0aGUgd2lkZ2V0IGJvZHkgY29udGVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyBjb250ZW50OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBPcHRpb25hbCBjbGFzcyBmb3Igc3R5bGluZ1xuICAgICAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyBlbGVtZW50Q2xhc3MgPSBcIlwiO1xuXG4gICAgQEhvc3RCaW5kaW5nKFwiY2xhc3NcIikgcHVibGljIGNsYXNzTmFtZXM6IHN0cmluZztcblxuICAgIHB1YmxpYyByZWFkb25seSBkZWZhdWx0Q2xhc3NlcyA9IFwiZC1mbGV4IGgtMTAwIHctMTAwXCI7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgQEluamVjdChQSVpaQUdOQV9FVkVOVF9CVVMpIHByaXZhdGUgZXZlbnRCdXM6IEV2ZW50QnVzPElFdmVudD4sXG4gICAgICAgIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcGl6emFnbmFTZXJ2aWNlOiBQaXp6YWduYVNlcnZpY2UsXG4gICAgICAgIGxvZ2dlcjogTG9nZ2VyU2VydmljZVxuICAgICkge1xuICAgICAgICBzdXBlcihjaGFuZ2VEZXRlY3RvciwgcGl6emFnbmFTZXJ2aWNlLCBsb2dnZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jbGFzc05hbWVzID0gYCR7dGhpcy5kZWZhdWx0Q2xhc3Nlc30gJHt0aGlzLmVsZW1lbnRDbGFzc31gO1xuXG4gICAgICAgIC8vIHN1YnNjcmliaW5nIHRvIGRhc2hib2FyZCBldmVudCB0byBzZXQgJ2VkaXQgbW9kZSdcbiAgICAgICAgdGhpcy5ldmVudEJ1c1xuICAgICAgICAgICAgLmdldFN0cmVhbShEQVNIQk9BUkRfRURJVF9NT0RFKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveWVkJCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucGl6emFnbmFTZXJ2aWNlLnNldFByb3BlcnR5KFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRJZDogdGhpcy5jb21wb25lbnRJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBpenphZ25hS2V5OiBQaXp6YWduYUxheWVyLkRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVBhdGg6IFtcImVkaXRNb2RlXCJdLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAhIWV2ZW50LnBheWxvYWRcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXROb2RlcyA9ICgpOiBzdHJpbmdbXSA9PiBbdGhpcy5jb250ZW50XTtcbn1cbiIsIjxudWktcHJldmlldy1vdmVybGF5ICpuZ0lmPVwiZWRpdE1vZGVcIj48L251aS1wcmV2aWV3LW92ZXJsYXk+XG48bmctY29udGFpbmVyXG4gICAgbnVpQ29tcG9uZW50UG9ydGFsXG4gICAgI2NvbXBvbmVudFBvcnRhbD1cIm51aUNvbXBvbmVudFBvcnRhbFwiXG4gICAgW2NvbXBvbmVudElkXT1cIm5vZGVDb25maWdzWzBdLmlkXCJcbiAgICBbY29tcG9uZW50VHlwZV09XCJub2RlQ29uZmlnc1swXS5jb21wb25lbnRUeXBlXCJcbiAgICBbcHJvdmlkZXJzXT1cIm5vZGVDb25maWdzWzBdLnByb3ZpZGVyc1wiXG4gICAgW3Byb3BlcnRpZXNdPVwibm9kZUNvbmZpZ3NbMF0ucHJvcGVydGllc1wiXG4+XG4gICAgPG5nLXRlbXBsYXRlXG4gICAgICAgIFtjZGtQb3J0YWxPdXRsZXRdPVwiY29tcG9uZW50UG9ydGFsLnBvcnRhbFwiXG4gICAgICAgIChhdHRhY2hlZCk9XCJjb21wb25lbnRQb3J0YWwuYXR0YWNoZWQoJGV2ZW50KVwiXG4gICAgPjwvbmctdGVtcGxhdGU+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==